aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog32
-rw-r--r--libjava/Makefile.in620
-rw-r--r--libjava/classpath/.cdtproject3
-rw-r--r--libjava/classpath/.classpath12
-rw-r--r--libjava/classpath/.externalToolBuilders/Autogen.launch2
-rw-r--r--libjava/classpath/.externalToolBuilders/ClasspathHeaders.launch2
-rw-r--r--libjava/classpath/.externalToolBuilders/ClasspathJar.launch11
-rw-r--r--libjava/classpath/.externalToolBuilders/CompileNative.launch2
-rw-r--r--libjava/classpath/.externalToolBuilders/Configure.launch2
-rw-r--r--libjava/classpath/.externalToolBuilders/CreateLocaleData.launch2
-rw-r--r--libjava/classpath/.project77
-rw-r--r--libjava/classpath/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--libjava/classpath/.settings/org.eclipse.jdt.core.prefs306
-rw-r--r--libjava/classpath/.settings/org.eclipse.jdt.ui.prefs5
-rw-r--r--libjava/classpath/ChangeLog8104
-rw-r--r--libjava/classpath/ChangeLog.usermap60
-rw-r--r--libjava/classpath/INSTALL2
-rw-r--r--libjava/classpath/Makefile.in29
-rw-r--r--libjava/classpath/NEWS64
-rw-r--r--libjava/classpath/README3
-rw-r--r--libjava/classpath/aclocal.m436
-rw-r--r--libjava/classpath/compat/Makefile.am4
-rw-r--r--libjava/classpath/compat/java.net/GetSocketOptionInfo.java39
-rw-r--r--libjava/classpath/compat/java.net/Makefile.am14
-rw-r--r--libjava/classpath/compat/java.net/PlainSocketImpl.java284
-rw-r--r--libjava/classpath/compat/java.net/README27
-rwxr-xr-xlibjava/classpath/configure9846
-rw-r--r--libjava/classpath/configure.ac66
-rw-r--r--libjava/classpath/doc/Makefile.am2
-rw-r--r--libjava/classpath/doc/Makefile.in21
-rw-r--r--libjava/classpath/doc/api/Makefile.in19
-rw-r--r--libjava/classpath/doc/hacking.texinfo6
-rw-r--r--libjava/classpath/doc/native.api81
-rw-r--r--libjava/classpath/doc/testing.framework.text102
-rw-r--r--libjava/classpath/doc/tools.texinfo781
-rw-r--r--libjava/classpath/doc/unicode/BLOCKS.TXT90
-rw-r--r--libjava/classpath/doc/unicode/Blocks-3.txt90
-rw-r--r--libjava/classpath/doc/unicode/Blocks-4.0.0.txt133
-rw-r--r--libjava/classpath/doc/unicode/ReadMe-2.1.1.txt344
-rw-r--r--libjava/classpath/doc/unicode/ReadMe-3.0.0.txt13
-rw-r--r--libjava/classpath/doc/unicode/SpecialCasing-2.txt219
-rw-r--r--libjava/classpath/doc/unicode/SpecialCasing-4.0.0.txt256
-rw-r--r--libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html345
-rw-r--r--libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt6590
-rw-r--r--libjava/classpath/doc/unicode/UnicodeData-3.0.0.html1988
-rw-r--r--libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt10617
-rw-r--r--libjava/classpath/doc/unicode/UnicodeData-4.0.0.txt15100
-rw-r--r--libjava/classpath/doc/vmintegration.texinfo248
-rw-r--r--libjava/classpath/doc/www.gnu.org/Makefile46
-rw-r--r--libjava/classpath/doc/www.gnu.org/README109
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/19990206.txt64
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/19990206.wml130
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20001120.wml137
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20010106.wml141
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20020208.wml166
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/announce/20040313.wml108
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/announce/20040502.wml133
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/announce/20040712.wml159
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/announce/20040913.wml245
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20041115.wml237
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050107.wml256
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050226.wml240
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050429.wml309
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050630.wml329
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050715.wml132
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20050906.wml221
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20051102.wml247
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/20060113.wml289
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/Makefile32
-rw-r--r--libjava/classpath/doc/www.gnu.org/announce/announcements.wml25
-rw-r--r--libjava/classpath/doc/www.gnu.org/benchmarks.wml51
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/bugs.wml46
-rw-r--r--libjava/classpath/doc/www.gnu.org/corba.wml37
-rw-r--r--libjava/classpath/doc/www.gnu.org/cp-tools/Makefile32
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml68
-rw-r--r--libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html597
-rw-r--r--libjava/classpath/doc/www.gnu.org/docs/Makefile47
-rw-r--r--libjava/classpath/doc/www.gnu.org/docs/docs.wml37
-rw-r--r--libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml100
-rw-r--r--libjava/classpath/doc/www.gnu.org/docs/orp.wml92
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/19990206.wml128
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/20001120.wml137
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/20010106.wml141
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/20020208.wml166
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/Makefile32
-rw-r--r--libjava/classpath/doc/www.gnu.org/downloads/downloads.wml229
-rw-r--r--libjava/classpath/doc/www.gnu.org/events/Makefile32
-rw-r--r--libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml149
-rw-r--r--libjava/classpath/doc/www.gnu.org/events/events.wml73
-rw-r--r--libjava/classpath/doc/www.gnu.org/events/fosdem04.wml100
-rw-r--r--libjava/classpath/doc/www.gnu.org/events/fosdem06.wml191
-rw-r--r--libjava/classpath/doc/www.gnu.org/external.wml86
-rw-r--r--libjava/classpath/doc/www.gnu.org/faq/Makefile32
-rw-r--r--libjava/classpath/doc/www.gnu.org/faq/faq.wml607
-rw-r--r--libjava/classpath/doc/www.gnu.org/home.wml65
-rw-r--r--libjava/classpath/doc/www.gnu.org/include/layout.wml165
-rw-r--r--libjava/classpath/doc/www.gnu.org/include/macros.wml171
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/inetlib.wml186
-rw-r--r--libjava/classpath/doc/www.gnu.org/license.wml70
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/news.wml15
-rw-r--r--libjava/classpath/doc/www.gnu.org/newsitems.txt207
-rw-r--r--libjava/classpath/doc/www.gnu.org/savannah.css140
-rw-r--r--libjava/classpath/doc/www.gnu.org/stories.wml225
-rwxr-xr-xlibjava/classpath/doc/www.gnu.org/tasks.wml14
-rw-r--r--libjava/classpath/examples/Makefile.am9
-rw-r--r--libjava/classpath/examples/Makefile.in28
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java233
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java36
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/icons/badge.pngbin0 -> 45862 bytes
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/print/Demo.java391
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java70
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch19
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java84
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java1017
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/DemoDesktop.java82
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/DemoFactory.java57
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/DocumentFilterDemo.java289
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java138
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ListDemo.java231
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/MetalThemeEditor.java585
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java206
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java62
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java66
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java87
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/SpinnerDemo.java81
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/TabbedPaneDemo.java145
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/TableDemo.java138
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/TextAreaDemo.java620
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java635
-rw-r--r--libjava/classpath/examples/gnu/classpath/examples/swing/TreeDemo.java291
-rw-r--r--libjava/classpath/external/Makefile.in19
-rw-r--r--libjava/classpath/external/relaxngDatatype/.cvsignore2
-rw-r--r--libjava/classpath/external/relaxngDatatype/Makefile.in19
-rw-r--r--libjava/classpath/external/sax/Makefile.in19
-rw-r--r--libjava/classpath/external/w3c_dom/COPYRIGHT.html106
-rw-r--r--libjava/classpath/external/w3c_dom/Makefile.in19
-rw-r--r--libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java1
-rw-r--r--libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java33
-rw-r--r--libjava/classpath/gnu/CORBA/IorDelegate.java15
-rw-r--r--libjava/classpath/gnu/CORBA/NamingService/NameParser.java5
-rw-r--r--libjava/classpath/gnu/CORBA/OrbRestricted.java55
-rw-r--r--libjava/classpath/gnu/CORBA/SocketRepository.java3
-rw-r--r--libjava/classpath/gnu/CORBA/gnuRequest.java25
-rw-r--r--libjava/classpath/gnu/classpath/NotImplementedException.java61
-rw-r--r--libjava/classpath/gnu/classpath/SystemProperties.java20
-rw-r--r--libjava/classpath/gnu/classpath/debug/Component.java9
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/Jdwp.java29
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/BreakpointEvent.java110
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/EventManager.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java6
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java4
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java1
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java8
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java13
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java14
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java1
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/exception/NativeMethodException.java63
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java26
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java18
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java1
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java1
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java3
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java2
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/util/LineTable.java21
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/util/Location.java88
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/util/Value.java10
-rw-r--r--libjava/classpath/gnu/java/awt/font/FontDelegate.java313
-rw-r--r--libjava/classpath/gnu/java/awt/font/FontFactory.java90
-rw-r--r--libjava/classpath/gnu/java/awt/font/GNUGlyphVector.java596
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/CharGlyphMap.java1027
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/GlyphNamer.java1133
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/MacResourceFork.java235
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/NameDecoder.java686
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFont.java825
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java140
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/Scaler.java192
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/Fixed.java161
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java437
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java187
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java228
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java372
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java1809
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/Zone.java243
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java391
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.diabin0 -> 1572 bytes
-rw-r--r--libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.pngbin0 -> 11278 bytes
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/AbstractGraphics2D.java1951
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/AlphaCompositeContext.java316
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/CubicSegment.java128
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/LineSegment.java103
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/PolyEdge.java117
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/PolyEdgeComparator.java70
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/QuadSegment.java213
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/RasterGraphics.java101
-rw-r--r--libjava/classpath/gnu/java/awt/java2d/Segment.java131
-rw-r--r--libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java27
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java8
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java9
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java50
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java5
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java44
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java45
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java97
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java36
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java135
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java5
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkCursor.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Buffer_Test.java)45
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java28
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java7
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java225
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java65
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java134
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java12
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java33
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java37
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java16
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java189
-rw-r--r--libjava/classpath/gnu/java/awt/peer/swing/SwingComponentPeer.java3
-rw-r--r--libjava/classpath/gnu/java/awt/peer/swing/SwingContainerPeer.java33
-rw-r--r--libjava/classpath/gnu/java/io/class-dependencies.conf75
-rw-r--r--libjava/classpath/gnu/java/lang/ClassHelper.java28
-rw-r--r--libjava/classpath/gnu/java/lang/InstrumentationImpl.java243
-rw-r--r--libjava/classpath/gnu/java/lang/reflect/ClassSignatureParser.java92
-rw-r--r--libjava/classpath/gnu/java/lang/reflect/FieldSignatureParser.java103
-rw-r--r--libjava/classpath/gnu/java/lang/reflect/GenericSignatureParser.java622
-rw-r--r--libjava/classpath/gnu/java/lang/reflect/MethodSignatureParser.java167
-rw-r--r--libjava/classpath/gnu/java/lang/reflect/TypeImpl.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/supplementaryNotifications.java)59
-rw-r--r--libjava/classpath/gnu/java/locale/LocaleHelper.java53
-rw-r--r--libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java94
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalServerSocket.java172
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocket.java312
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocketAddress.java100
-rw-r--r--libjava/classpath/gnu/java/net/local/LocalSocketImpl.java322
-rw-r--r--libjava/classpath/gnu/java/net/protocol/file/Connection.java4
-rw-r--r--libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java3
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java13
-rw-r--r--libjava/classpath/gnu/java/net/protocol/http/Headers.java102
-rw-r--r--libjava/classpath/gnu/java/nio/ChannelReader.java206
-rw-r--r--libjava/classpath/gnu/java/nio/ChannelWriter.java190
-rw-r--r--libjava/classpath/gnu/java/rmi/activation/ActivationSystemTransient.java406
-rw-r--r--libjava/classpath/gnu/java/rmi/activation/BidiTable.java163
-rw-r--r--libjava/classpath/gnu/java/rmi/activation/DefaultActivationGroup.java159
-rw-r--r--libjava/classpath/gnu/java/rmi/activation/DefaultActivationSystem.java118
-rw-r--r--libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java152
-rw-r--r--libjava/classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java234
-rw-r--r--libjava/classpath/gnu/java/rmi/server/ActivatableRef.java175
-rw-r--r--libjava/classpath/gnu/java/rmi/server/ActivatableServerRef.java227
-rw-r--r--libjava/classpath/gnu/java/rmi/server/CombinedClassLoader.java24
-rw-r--r--libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java16
-rw-r--r--libjava/classpath/gnu/java/rmi/server/UnicastRef.java663
-rw-r--r--libjava/classpath/gnu/java/rmi/server/UnicastServer.java359
-rw-r--r--libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java33
-rw-r--r--libjava/classpath/gnu/java/security/Properties.java6
-rw-r--r--libjava/classpath/gnu/java/security/Registry.java3
-rw-r--r--libjava/classpath/gnu/java/security/hash/Haval.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD2.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD4.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/MD5.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/RipeMD128.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/RipeMD160.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha160.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha256.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha384.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Sha512.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Tiger.java2
-rw-r--r--libjava/classpath/gnu/java/security/hash/Whirlpool.java583
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java8
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java4
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java2
-rw-r--r--libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java2
-rw-r--r--libjava/classpath/gnu/java/security/key/IKeyPairCodec.java2
-rw-r--r--libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java2
-rw-r--r--libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java13
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKey.java21
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java16
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java2
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java22
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java20
-rw-r--r--libjava/classpath/gnu/java/security/key/dss/FIPS186.java2
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java23
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java27
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java19
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java14
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java13
-rw-r--r--libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java3
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/AttributeList_test.java)41
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java231
-rw-r--r--libjava/classpath/gnu/java/security/pkcs/SignerInfo.java207
-rw-r--r--libjava/classpath/gnu/java/security/prng/MDGenerator.java14
-rw-r--r--libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java128
-rw-r--r--libjava/classpath/gnu/java/security/provider/Gnu.java1
-rw-r--r--libjava/classpath/gnu/java/security/sig/ISignature.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/ISignatureCodec.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java2
-rw-r--r--libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java2
-rw-r--r--libjava/classpath/gnu/java/security/util/Util.java2
-rw-r--r--libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java14
-rw-r--r--libjava/classpath/gnu/java/text/StringFormatBuffer.java6
-rw-r--r--libjava/classpath/gnu/java/util/jar/JarUtils.java447
-rw-r--r--libjava/classpath/gnu/java/util/prefs/NodeWriter.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Assembly.java1
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Cascade.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/CascadeStage.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/CascadeTransformer.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Direction.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/LoopbackTransformer.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/ModeStage.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Operation.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/PaddingTransformer.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Stage.java1
-rw-r--r--libjava/classpath/gnu/javax/crypto/assembly/Transformer.java1
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Anubis.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Cast5.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Khazad.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Serpent.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Square.java6
-rw-r--r--libjava/classpath/gnu/javax/crypto/cipher/Twofish.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/AESSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/ARCFourSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/AnubisSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/BlowfishSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/CipherAdapter.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/DESSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/KhazadSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/NullCipherSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/PBES2.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/RijndaelSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/SerpentSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/SquareSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/cipher/TwofishSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/keyring/GnuKeyring.java572
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD2Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD4Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD5Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA160Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA256Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA384Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA512Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacTigerSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/MacAdapter.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/TMMH16Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/UHash32Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/mac/UMac32Spi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/key/dh/DiffieHellmanSender.java1
-rw-r--r--libjava/classpath/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java21
-rw-r--r--libjava/classpath/gnu/javax/crypto/key/srp6/SRP6TLSServer.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/keyring/GnuPrivateKeyring.java367
-rw-r--r--libjava/classpath/gnu/javax/crypto/keyring/GnuPublicKeyring.java106
-rw-r--r--libjava/classpath/gnu/javax/crypto/keyring/PrivateKeyEntry.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/mac/UMac32.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/mode/IAuthenticatedMode.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/pad/PadFactory.java5
-rw-r--r--libjava/classpath/gnu/javax/crypto/pad/WrongPaddingException.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/prng/CSPRNG.java2
-rw-r--r--libjava/classpath/gnu/javax/crypto/prng/Fortuna.java9
-rw-r--r--libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/prng/IPBE.java34
-rw-r--r--libjava/classpath/gnu/javax/crypto/prng/PBKDF2.java27
-rw-r--r--libjava/classpath/gnu/javax/crypto/sasl/ConfidentialityException.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/sasl/IllegalMechanismStateException.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/sasl/srp/IALG.java4
-rw-r--r--libjava/classpath/gnu/javax/crypto/sasl/srp/SRPServer.java4
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java1
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPEncoder.java119
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java39
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java2
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java13
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriter.java196
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java148
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java380
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java2
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java2
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB1.java128
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB16.java129
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB24.java129
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java130
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB4.java128
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB8.java127
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE4.java269
-rw-r--r--libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE8.java234
-rw-r--r--libjava/classpath/gnu/javax/print/CupsIppOperation.java99
-rw-r--r--libjava/classpath/gnu/javax/print/CupsMediaMapping.java176
-rw-r--r--libjava/classpath/gnu/javax/print/CupsPrintService.java104
-rw-r--r--libjava/classpath/gnu/javax/print/CupsPrintServiceLookup.java260
-rw-r--r--libjava/classpath/gnu/javax/print/CupsServer.java269
-rw-r--r--libjava/classpath/gnu/javax/print/PrintAttributeException.java148
-rw-r--r--libjava/classpath/gnu/javax/print/PrintFlavorException.java120
-rw-r--r--libjava/classpath/gnu/javax/print/PrintUriException.java140
-rw-r--r--libjava/classpath/gnu/javax/print/PrinterDialog.java1722
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/DocPrintJobImpl.java471
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppDelimiterTag.java99
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppException.java88
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppPrintService.java916
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppRequest.java857
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppResponse.java778
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppStatusCode.java185
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppUtilities.java551
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/IppValueTag.java170
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java80
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java115
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java59
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java93
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java93
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java117
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java130
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/StatusMessage.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TagElement_Test.java)79
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java190
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java118
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java106
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java263
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java149
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java118
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java122
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java105
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java152
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java114
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java154
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java141
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java119
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java150
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesCharset.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/DTD_test.java)95
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Constants_Test.java)82
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java92
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java93
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobId.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java92
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/job/JobUri.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java86
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java110
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java86
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java (renamed from libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java)67
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/parameterDefaulter_Test.java)94
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java88
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java93
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java86
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java87
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java162
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java91
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java303
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java88
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java121
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java133
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java150
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java118
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java177
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java118
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java230
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java179
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java117
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java171
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java143
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java88
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java136
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java141
-rw-r--r--libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java126
-rw-r--r--libjava/classpath/gnu/javax/security/auth/callback/ConsoleCallbackHandler.java34
-rw-r--r--libjava/classpath/gnu/javax/swing/plaf/gnu/GNULookAndFeel.java (renamed from libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java)2
-rw-r--r--libjava/classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java218
-rw-r--r--libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java121
-rw-r--r--libjava/classpath/gnu/javax/swing/tree/GnuPath.java65
-rw-r--r--libjava/classpath/gnu/regexp/BacktrackStack.java112
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexed.java20
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexedCharArray.java33
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexedCharSequence.java82
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexedInputStream.java22
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexedString.java35
-rw-r--r--libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java32
-rw-r--r--libjava/classpath/gnu/regexp/RE.java190
-rw-r--r--libjava/classpath/gnu/regexp/REMatch.java101
-rw-r--r--libjava/classpath/gnu/regexp/REToken.java116
-rw-r--r--libjava/classpath/gnu/regexp/RETokenAny.java40
-rw-r--r--libjava/classpath/gnu/regexp/RETokenBackRef.java22
-rw-r--r--libjava/classpath/gnu/regexp/RETokenChar.java47
-rw-r--r--libjava/classpath/gnu/regexp/RETokenEnd.java22
-rw-r--r--libjava/classpath/gnu/regexp/RETokenEndOfPreviousMatch.java72
-rw-r--r--libjava/classpath/gnu/regexp/RETokenEndSub.java17
-rw-r--r--libjava/classpath/gnu/regexp/RETokenIndependent.java12
-rw-r--r--libjava/classpath/gnu/regexp/RETokenLookAhead.java27
-rw-r--r--libjava/classpath/gnu/regexp/RETokenLookBehind.java40
-rw-r--r--libjava/classpath/gnu/regexp/RETokenNamedProperty.java42
-rw-r--r--libjava/classpath/gnu/regexp/RETokenOneOf.java111
-rw-r--r--libjava/classpath/gnu/regexp/RETokenPOSIX.java35
-rw-r--r--libjava/classpath/gnu/regexp/RETokenRange.java34
-rw-r--r--libjava/classpath/gnu/regexp/RETokenRepeated.java432
-rw-r--r--libjava/classpath/gnu/regexp/RETokenStart.java19
-rw-r--r--libjava/classpath/gnu/regexp/RETokenWordBoundary.java13
-rw-r--r--libjava/classpath/gnu/xml/dom/DomDocument.java38
-rw-r--r--libjava/classpath/gnu/xml/dom/DomNode.java25
-rw-r--r--libjava/classpath/gnu/xml/dom/DomNodeIterator.java3
-rw-r--r--libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java21
-rw-r--r--libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java2
-rw-r--r--libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java (renamed from libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TestCase.java)123
-rw-r--r--libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java79
-rw-r--r--libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java12
-rw-r--r--libjava/classpath/gnu/xml/stream/XMLParser.java12
-rw-r--r--libjava/classpath/gnu/xml/transform/TransformerImpl.java12
-rw-r--r--libjava/classpath/gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java12
-rw-r--r--libjava/classpath/gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java13
-rw-r--r--libjava/classpath/include/Makefile.am21
-rw-r--r--libjava/classpath/include/Makefile.in40
-rw-r--r--libjava/classpath/include/config-int.h9
-rw-r--r--libjava/classpath/include/config.h.in23
-rw-r--r--libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h1
-rw-r--r--libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h2
-rw-r--r--libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h4
-rw-r--r--libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h10
-rw-r--r--libjava/classpath/include/gnu_java_net_VMPlainDatagramSocketImpl.h103
-rw-r--r--libjava/classpath/include/gnu_java_net_VMPlainSocketImpl.h128
-rw-r--r--libjava/classpath/include/gnu_java_net_local_LocalSocketImpl.h31
-rw-r--r--libjava/classpath/include/java_lang_VMProcess.h2
-rw-r--r--libjava/classpath/include/java_lang_VMSystem.h1
-rw-r--r--libjava/classpath/include/java_lang_reflect_Array.h19
-rw-r--r--libjava/classpath/include/java_lang_reflect_VMArray.h19
-rw-r--r--libjava/classpath/java/awt/AlphaComposite.java19
-rw-r--r--libjava/classpath/java/awt/BasicStroke.java370
-rw-r--r--libjava/classpath/java/awt/Button.java2
-rw-r--r--libjava/classpath/java/awt/Choice.java11
-rw-r--r--libjava/classpath/java/awt/Component.java173
-rw-r--r--libjava/classpath/java/awt/Container.java144
-rw-r--r--libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java2
-rw-r--r--libjava/classpath/java/awt/DefaultKeyboardFocusManager.java50
-rw-r--r--libjava/classpath/java/awt/Dialog.java893
-rw-r--r--libjava/classpath/java/awt/Frame.java13
-rw-r--r--libjava/classpath/java/awt/GraphicsConfiguration.java4
-rw-r--r--libjava/classpath/java/awt/GridBagLayout.java233
-rw-r--r--libjava/classpath/java/awt/Image.java15
-rw-r--r--libjava/classpath/java/awt/LightweightDispatcher.java78
-rw-r--r--libjava/classpath/java/awt/List.java2
-rw-r--r--libjava/classpath/java/awt/MediaTracker.java3
-rw-r--r--libjava/classpath/java/awt/MenuItem.java2
-rw-r--r--libjava/classpath/java/awt/ScrollPaneAdjustable.java11
-rw-r--r--libjava/classpath/java/awt/TexturePaint.java4
-rw-r--r--libjava/classpath/java/awt/Toolkit.java172
-rw-r--r--libjava/classpath/java/awt/Window.java69
-rw-r--r--libjava/classpath/java/awt/datatransfer/FlavorEvent.java2
-rw-r--r--libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java4
-rw-r--r--libjava/classpath/java/awt/dnd/DragGestureRecognizer.java4
-rw-r--r--libjava/classpath/java/awt/dnd/DragSourceContext.java12
-rw-r--r--libjava/classpath/java/awt/dnd/DropTarget.java4
-rw-r--r--libjava/classpath/java/awt/dnd/DropTargetContext.java4
-rw-r--r--libjava/classpath/java/awt/dnd/DropTargetEvent.java2
-rw-r--r--libjava/classpath/java/awt/event/MouseEvent.java6
-rw-r--r--libjava/classpath/java/awt/font/GlyphMetrics.java4
-rw-r--r--libjava/classpath/java/awt/font/GlyphVector.java8
-rw-r--r--libjava/classpath/java/awt/font/GraphicAttribute.java4
-rw-r--r--libjava/classpath/java/awt/font/ImageGraphicAttribute.java12
-rw-r--r--libjava/classpath/java/awt/font/LineBreakMeasurer.java8
-rw-r--r--libjava/classpath/java/awt/font/NumericShaper.java352
-rw-r--r--libjava/classpath/java/awt/font/ShapeGraphicAttribute.java6
-rw-r--r--libjava/classpath/java/awt/font/TextMeasurer.java7
-rw-r--r--libjava/classpath/java/awt/geom/GeneralPath.java14
-rw-r--r--libjava/classpath/java/awt/geom/Point2D.java10
-rw-r--r--libjava/classpath/java/awt/image/AffineTransformOp.java2
-rw-r--r--libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java291
-rw-r--r--libjava/classpath/java/awt/image/BandCombineOp.java8
-rw-r--r--libjava/classpath/java/awt/image/ColorModel.java14
-rw-r--r--libjava/classpath/java/awt/image/ComponentSampleModel.java886
-rw-r--r--libjava/classpath/java/awt/image/ConvolveOp.java14
-rw-r--r--libjava/classpath/java/awt/image/DirectColorModel.java2
-rw-r--r--libjava/classpath/java/awt/image/LookupOp.java14
-rw-r--r--libjava/classpath/java/awt/image/ReplicateScaleFilter.java1
-rw-r--r--libjava/classpath/java/awt/image/RescaleOp.java2
-rw-r--r--libjava/classpath/java/awt/image/SampleModel.java412
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java93
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContext.java2
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java4
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java4
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java4
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java172
-rw-r--r--libjava/classpath/java/beans/beancontext/BeanContextSupport.java222
-rw-r--r--libjava/classpath/java/io/CharArrayWriter.java78
-rw-r--r--libjava/classpath/java/io/DataOutputStream.java105
-rw-r--r--libjava/classpath/java/io/FilePermission.java22
-rw-r--r--libjava/classpath/java/io/InputStream.java4
-rw-r--r--libjava/classpath/java/io/ObjectOutputStream.java60
-rw-r--r--libjava/classpath/java/io/ObjectStreamConstants.java20
-rw-r--r--libjava/classpath/java/io/class-dependencies.conf100
-rw-r--r--libjava/classpath/java/lang/Boolean.java49
-rw-r--r--libjava/classpath/java/lang/Character.java4
-rw-r--r--libjava/classpath/java/lang/Class.java512
-rw-r--r--libjava/classpath/java/lang/ClassLoader.java8
-rw-r--r--libjava/classpath/java/lang/Enum.java248
-rw-r--r--libjava/classpath/java/lang/EnumConstantNotPresentException.java2
-rw-r--r--libjava/classpath/java/lang/Iterable.java59
-rw-r--r--libjava/classpath/java/lang/Math.java101
-rw-r--r--libjava/classpath/java/lang/Package.java106
-rw-r--r--libjava/classpath/java/lang/StackTraceElement.java4
-rw-r--r--libjava/classpath/java/lang/StrictMath.java80
-rw-r--r--libjava/classpath/java/lang/StringBuilder.java22
-rw-r--r--libjava/classpath/java/lang/System.java33
-rw-r--r--libjava/classpath/java/lang/Thread.java193
-rw-r--r--libjava/classpath/java/lang/ThreadGroup.java5
-rw-r--r--libjava/classpath/java/lang/ThreadLocal.java11
-rw-r--r--libjava/classpath/java/lang/TypeNotPresentException.java3
-rw-r--r--libjava/classpath/java/lang/annotation/Annotation.java136
-rw-r--r--libjava/classpath/java/lang/annotation/AnnotationFormatError.java1
-rw-r--r--libjava/classpath/java/lang/class-dependencies.conf58
-rw-r--r--libjava/classpath/java/lang/instrument/ClassDefinition.java88
-rw-r--r--libjava/classpath/java/lang/instrument/ClassFileTransformer.java86
-rw-r--r--libjava/classpath/java/lang/instrument/IllegalClassFormatException.java70
-rw-r--r--libjava/classpath/java/lang/instrument/Instrumentation.java139
-rw-r--r--libjava/classpath/java/lang/instrument/UnmodifiableClassException.java69
-rw-r--r--libjava/classpath/java/lang/reflect/AccessibleObject.java29
-rw-r--r--libjava/classpath/java/lang/reflect/AnnotatedElement.java117
-rw-r--r--libjava/classpath/java/lang/reflect/Array.java23
-rw-r--r--libjava/classpath/java/lang/reflect/GenericDeclaration.java63
-rw-r--r--libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java1
-rw-r--r--libjava/classpath/java/lang/reflect/MalformedParameterizedTypeException.java60
-rw-r--r--libjava/classpath/java/lang/reflect/Member.java9
-rw-r--r--libjava/classpath/java/lang/reflect/Modifier.java34
-rw-r--r--libjava/classpath/java/lang/reflect/ParameterizedType.java2
-rw-r--r--libjava/classpath/java/lang/reflect/TypeVariable.java99
-rw-r--r--libjava/classpath/java/math/class-dependencies.conf58
-rw-r--r--libjava/classpath/java/net/InetSocketAddress.java59
-rw-r--r--libjava/classpath/java/net/MimeTypeMapper.java360
-rw-r--r--libjava/classpath/java/net/URI.java14
-rw-r--r--libjava/classpath/java/net/URLClassLoader.java110
-rw-r--r--libjava/classpath/java/net/URLConnection.java151
-rw-r--r--libjava/classpath/java/net/class-dependencies.conf122
-rw-r--r--libjava/classpath/java/nio/ByteBufferImpl.java17
-rw-r--r--libjava/classpath/java/nio/CharBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/DoubleBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/FloatBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/IntBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/LongBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/MappedByteBuffer.java2
-rw-r--r--libjava/classpath/java/nio/ShortBufferImpl.java13
-rw-r--r--libjava/classpath/java/nio/channels/Channels.java4
-rw-r--r--libjava/classpath/java/nio/class-dependencies.conf58
-rw-r--r--libjava/classpath/java/rmi/activation/Activatable.java514
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationDesc.java279
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationGroup.java314
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationGroupDesc.java449
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationGroupID.java96
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java2
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationID.java179
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationInstantiator.java23
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationMonitor.java42
-rw-r--r--libjava/classpath/java/rmi/activation/ActivationSystem.java196
-rw-r--r--libjava/classpath/java/rmi/activation/Activator.java22
-rw-r--r--libjava/classpath/java/rmi/activation/package.html33
-rw-r--r--libjava/classpath/java/rmi/dgc/VMID.java139
-rw-r--r--libjava/classpath/java/rmi/dgc/package.html12
-rw-r--r--libjava/classpath/java/rmi/server/ObjID.java202
-rw-r--r--libjava/classpath/java/rmi/server/Operation.java8
-rw-r--r--libjava/classpath/java/rmi/server/RemoteObject.java124
-rw-r--r--libjava/classpath/java/rmi/server/RemoteObjectInvocationHandler.java10
-rw-r--r--libjava/classpath/java/rmi/server/RemoteServer.java99
-rw-r--r--libjava/classpath/java/rmi/server/UID.java262
-rw-r--r--libjava/classpath/java/security/BasicPermission.java5
-rw-r--r--libjava/classpath/java/security/KeyStore.java4
-rw-r--r--libjava/classpath/java/security/SecureRandom.java108
-rw-r--r--libjava/classpath/java/security/Security.java5
-rw-r--r--libjava/classpath/java/security/cert/CertPathValidatorSpi.java4
-rw-r--r--libjava/classpath/java/security/cert/CertStoreSpi.java3
-rw-r--r--libjava/classpath/java/security/cert/Certificate.java2
-rw-r--r--libjava/classpath/java/security/cert/PKIXCertPathChecker.java2
-rw-r--r--libjava/classpath/java/security/cert/PKIXParameters.java2
-rw-r--r--libjava/classpath/java/security/cert/X509CertSelector.java2
-rw-r--r--libjava/classpath/java/sql/Array.java32
-rw-r--r--libjava/classpath/java/sql/Blob.java96
-rw-r--r--libjava/classpath/java/sql/CallableStatement.java500
-rw-r--r--libjava/classpath/java/sql/Clob.java147
-rw-r--r--libjava/classpath/java/sql/Connection.java136
-rw-r--r--libjava/classpath/java/sql/DatabaseMetaData.java166
-rw-r--r--libjava/classpath/java/sql/Date.java6
-rw-r--r--libjava/classpath/java/sql/Driver.java6
-rw-r--r--libjava/classpath/java/sql/DriverManager.java17
-rw-r--r--libjava/classpath/java/sql/PreparedStatement.java124
-rw-r--r--libjava/classpath/java/sql/ResultSet.java422
-rw-r--r--libjava/classpath/java/sql/ResultSetMetaData.java86
-rw-r--r--libjava/classpath/java/sql/SQLData.java4
-rw-r--r--libjava/classpath/java/sql/SQLOutput.java72
-rw-r--r--libjava/classpath/java/sql/SQLWarning.java6
-rw-r--r--libjava/classpath/java/sql/Statement.java37
-rw-r--r--libjava/classpath/java/sql/Time.java7
-rw-r--r--libjava/classpath/java/sql/Timestamp.java34
-rw-r--r--libjava/classpath/java/text/AttributedCharacterIterator.java6
-rw-r--r--libjava/classpath/java/text/Bidi.java935
-rw-r--r--libjava/classpath/java/text/Collator.java13
-rw-r--r--libjava/classpath/java/text/DateFormatSymbols.java16
-rw-r--r--libjava/classpath/java/text/DecimalFormat.java6
-rw-r--r--libjava/classpath/java/text/RuleBasedCollator.java3
-rw-r--r--libjava/classpath/java/text/SimpleDateFormat.java3
-rw-r--r--libjava/classpath/java/text/class-dependencies.conf220
-rw-r--r--libjava/classpath/java/util/AbstractList.java25
-rw-r--r--libjava/classpath/java/util/Arrays.java575
-rw-r--r--libjava/classpath/java/util/BitSet.java2
-rw-r--r--libjava/classpath/java/util/Calendar.java2
-rw-r--r--libjava/classpath/java/util/Collection.java4
-rw-r--r--libjava/classpath/java/util/GregorianCalendar.java2
-rw-r--r--libjava/classpath/java/util/HashMap.java3
-rw-r--r--libjava/classpath/java/util/Hashtable.java3
-rw-r--r--libjava/classpath/java/util/IdentityHashMap.java3
-rw-r--r--libjava/classpath/java/util/InvalidPropertiesFormatException.java17
-rw-r--r--libjava/classpath/java/util/LinkedHashMap.java3
-rw-r--r--libjava/classpath/java/util/LinkedList.java8
-rw-r--r--libjava/classpath/java/util/Locale.java72
-rw-r--r--libjava/classpath/java/util/SimpleTimeZone.java2
-rw-r--r--libjava/classpath/java/util/TreeMap.java3
-rw-r--r--libjava/classpath/java/util/WeakHashMap.java3
-rw-r--r--libjava/classpath/java/util/class-dependencies.conf78
-rw-r--r--libjava/classpath/java/util/jar/Attributes.java12
-rw-r--r--libjava/classpath/java/util/jar/JarFile.java28
-rw-r--r--libjava/classpath/java/util/jar/Manifest.java287
-rw-r--r--libjava/classpath/java/util/logging/Level.java5
-rw-r--r--libjava/classpath/java/util/logging/LogManager.java293
-rw-r--r--libjava/classpath/java/util/logging/Logger.java32
-rw-r--r--libjava/classpath/java/util/regex/Matcher.java14
-rw-r--r--libjava/classpath/java/util/regex/Pattern.java6
-rw-r--r--libjava/classpath/java/util/zip/Deflater.java1
-rw-r--r--libjava/classpath/java/util/zip/DeflaterEngine.java5
-rw-r--r--libjava/classpath/java/util/zip/GZIPInputStream.java2
-rw-r--r--libjava/classpath/java/util/zip/Inflater.java1
-rw-r--r--libjava/classpath/java/util/zip/ZipConstants.java3
-rw-r--r--libjava/classpath/java/util/zip/ZipFile.java60
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleAction.java22
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleAttributeSequence.java71
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleContext.java36
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleExtendedText.java108
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleRelation.java106
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleRole.java50
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleState.java31
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleStreamable.java62
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleText.java2
-rw-r--r--libjava/classpath/javax/accessibility/AccessibleTextSequence.java68
-rw-r--r--libjava/classpath/javax/crypto/Cipher.java82
-rw-r--r--libjava/classpath/javax/crypto/CipherSpi.java49
-rw-r--r--libjava/classpath/javax/crypto/KeyGenerator.java4
-rw-r--r--libjava/classpath/javax/imageio/ImageIO.java2
-rw-r--r--libjava/classpath/javax/imageio/ImageWriteParam.java2
-rw-r--r--libjava/classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java280
-rw-r--r--libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java161
-rw-r--r--libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java293
-rw-r--r--libjava/classpath/javax/imageio/plugins/jpeg/JPEGQTable.java196
-rw-r--r--libjava/classpath/javax/imageio/stream/FileCacheImageOutputStream.java6
-rw-r--r--libjava/classpath/javax/imageio/stream/ImageInputStreamImpl.java2
-rw-r--r--libjava/classpath/javax/imageio/stream/ImageOutputStream.java2
-rw-r--r--libjava/classpath/javax/imageio/stream/ImageOutputStreamImpl.java75
-rw-r--r--libjava/classpath/javax/imageio/stream/MemoryCacheImageInputStream.java4
-rw-r--r--libjava/classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java8
-rw-r--r--libjava/classpath/javax/naming/Binding.java66
-rw-r--r--libjava/classpath/javax/naming/CompositeName.java25
-rw-r--r--libjava/classpath/javax/naming/NameClassPair.java97
-rw-r--r--libjava/classpath/javax/naming/directory/BasicAttribute.java31
-rw-r--r--libjava/classpath/javax/naming/directory/BasicAttributes.java23
-rw-r--r--libjava/classpath/javax/naming/ldap/StartTlsRequest.java108
-rw-r--r--libjava/classpath/javax/naming/ldap/StartTlsResponse.java119
-rw-r--r--libjava/classpath/javax/net/ssl/HttpsURLConnection.java8
-rw-r--r--libjava/classpath/javax/print/MultiDoc.java29
-rw-r--r--libjava/classpath/javax/print/MultiDocPrintJob.java27
-rw-r--r--libjava/classpath/javax/print/MultiDocPrintService.java11
-rw-r--r--libjava/classpath/javax/print/PrintServiceLookup.java243
-rw-r--r--libjava/classpath/javax/print/ServiceUI.java137
-rw-r--r--libjava/classpath/javax/print/attribute/package.html31
-rw-r--r--libjava/classpath/javax/print/attribute/standard/package.html18
-rw-r--r--libjava/classpath/javax/print/event/package.html12
-rw-r--r--libjava/classpath/javax/print/package.html200
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/DelegationPermission.java136
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/KerberosKey.java180
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/KerberosPrincipal.java207
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/KerberosTicket.java339
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/KeyImpl.java93
-rw-r--r--libjava/classpath/javax/security/auth/kerberos/ServicePermission.java172
-rw-r--r--libjava/classpath/javax/security/auth/x500/X500Principal.java2
-rw-r--r--libjava/classpath/javax/sound/midi/InvalidMidiDataException.java21
-rw-r--r--libjava/classpath/javax/sound/midi/MetaMessage.java2
-rw-r--r--libjava/classpath/javax/sound/midi/MidiDevice.java16
-rw-r--r--libjava/classpath/javax/sound/midi/MidiSystem.java5
-rw-r--r--libjava/classpath/javax/sound/midi/MidiUnavailableException.java21
-rw-r--r--libjava/classpath/javax/sound/midi/Sequencer.java2
-rw-r--r--libjava/classpath/javax/sound/midi/ShortMessage.java10
-rw-r--r--libjava/classpath/javax/sound/midi/SysexMessage.java2
-rw-r--r--libjava/classpath/javax/sound/midi/Track.java9
-rw-r--r--libjava/classpath/javax/sound/sampled/AudioSystem.java5
-rw-r--r--libjava/classpath/javax/sound/sampled/BooleanControl.java2
-rw-r--r--libjava/classpath/javax/sound/sampled/CompoundControl.java2
-rw-r--r--libjava/classpath/javax/sound/sampled/Control.java4
-rw-r--r--libjava/classpath/javax/sound/sampled/EnumControl.java2
-rw-r--r--libjava/classpath/javax/sound/sampled/FloatControl.java2
-rw-r--r--libjava/classpath/javax/sound/sampled/LineEvent.java6
-rw-r--r--libjava/classpath/javax/sound/sampled/Mixer.java12
-rw-r--r--libjava/classpath/javax/sound/sampled/Port.java2
-rw-r--r--libjava/classpath/javax/sound/sampled/ReverbType.java12
-rw-r--r--libjava/classpath/javax/swing/AbstractAction.java29
-rw-r--r--libjava/classpath/javax/swing/AbstractButton.java497
-rw-r--r--libjava/classpath/javax/swing/ActionMap.java31
-rw-r--r--libjava/classpath/javax/swing/ButtonGroup.java8
-rw-r--r--libjava/classpath/javax/swing/CompatibilityFocusTraversalPolicy.java164
-rw-r--r--libjava/classpath/javax/swing/DefaultCellEditor.java4
-rw-r--r--libjava/classpath/javax/swing/DefaultComboBoxModel.java18
-rw-r--r--libjava/classpath/javax/swing/DefaultDesktopManager.java10
-rw-r--r--libjava/classpath/javax/swing/DefaultFocusManager.java31
-rw-r--r--libjava/classpath/javax/swing/DefaultListSelectionModel.java81
-rw-r--r--libjava/classpath/javax/swing/DefaultSingleSelectionModel.java58
-rw-r--r--libjava/classpath/javax/swing/FocusManager.java2
-rw-r--r--libjava/classpath/javax/swing/ImageIcon.java101
-rw-r--r--libjava/classpath/javax/swing/InputMap.java7
-rw-r--r--libjava/classpath/javax/swing/JButton.java129
-rw-r--r--libjava/classpath/javax/swing/JColorChooser.java68
-rw-r--r--libjava/classpath/javax/swing/JComboBox.java73
-rw-r--r--libjava/classpath/javax/swing/JComponent.java675
-rw-r--r--libjava/classpath/javax/swing/JDesktopPane.java74
-rw-r--r--libjava/classpath/javax/swing/JFileChooser.java10
-rw-r--r--libjava/classpath/javax/swing/JInternalFrame.java266
-rw-r--r--libjava/classpath/javax/swing/JLabel.java47
-rw-r--r--libjava/classpath/javax/swing/JLayeredPane.java1
-rw-r--r--libjava/classpath/javax/swing/JList.java275
-rw-r--r--libjava/classpath/javax/swing/JMenu.java19
-rw-r--r--libjava/classpath/javax/swing/JMenuBar.java1
-rw-r--r--libjava/classpath/javax/swing/JMenuItem.java63
-rw-r--r--libjava/classpath/javax/swing/JOptionPane.java8
-rw-r--r--libjava/classpath/javax/swing/JPanel.java83
-rw-r--r--libjava/classpath/javax/swing/JPopupMenu.java21
-rw-r--r--libjava/classpath/javax/swing/JProgressBar.java112
-rw-r--r--libjava/classpath/javax/swing/JRadioButtonMenuItem.java35
-rw-r--r--libjava/classpath/javax/swing/JRootPane.java29
-rw-r--r--libjava/classpath/javax/swing/JScrollBar.java84
-rw-r--r--libjava/classpath/javax/swing/JScrollPane.java3
-rw-r--r--libjava/classpath/javax/swing/JSeparator.java83
-rw-r--r--libjava/classpath/javax/swing/JSlider.java641
-rw-r--r--libjava/classpath/javax/swing/JSpinner.java4
-rw-r--r--libjava/classpath/javax/swing/JSplitPane.java207
-rw-r--r--libjava/classpath/javax/swing/JTabbedPane.java79
-rw-r--r--libjava/classpath/javax/swing/JTable.java309
-rw-r--r--libjava/classpath/javax/swing/JTextField.java50
-rw-r--r--libjava/classpath/javax/swing/JToggleButton.java2
-rw-r--r--libjava/classpath/javax/swing/JToolBar.java35
-rw-r--r--libjava/classpath/javax/swing/JToolTip.java92
-rw-r--r--libjava/classpath/javax/swing/JTree.java232
-rw-r--r--libjava/classpath/javax/swing/KeyboardManager.java2
-rw-r--r--libjava/classpath/javax/swing/LookAndFeel.java158
-rw-r--r--libjava/classpath/javax/swing/MenuSelectionManager.java146
-rw-r--r--libjava/classpath/javax/swing/OverlayLayout.java12
-rw-r--r--libjava/classpath/javax/swing/Popup.java1
-rw-r--r--libjava/classpath/javax/swing/ProgressMonitor.java54
-rw-r--r--libjava/classpath/javax/swing/ProgressMonitorInputStream.java86
-rw-r--r--libjava/classpath/javax/swing/RepaintManager.java95
-rw-r--r--libjava/classpath/javax/swing/ScrollPaneLayout.java48
-rw-r--r--libjava/classpath/javax/swing/Scrollable.java43
-rw-r--r--libjava/classpath/javax/swing/SingleSelectionModel.java39
-rw-r--r--libjava/classpath/javax/swing/SizeSequence.java193
-rw-r--r--libjava/classpath/javax/swing/SpinnerDateModel.java100
-rw-r--r--libjava/classpath/javax/swing/SpinnerNumberModel.java30
-rw-r--r--libjava/classpath/javax/swing/Spring.java160
-rw-r--r--libjava/classpath/javax/swing/SpringLayout.java529
-rw-r--r--libjava/classpath/javax/swing/SwingUtilities.java91
-rw-r--r--libjava/classpath/javax/swing/UIManager.java12
-rw-r--r--libjava/classpath/javax/swing/ViewportLayout.java93
-rw-r--r--libjava/classpath/javax/swing/border/AbstractBorder.java55
-rw-r--r--libjava/classpath/javax/swing/border/BevelBorder.java18
-rw-r--r--libjava/classpath/javax/swing/border/CompoundBorder.java4
-rw-r--r--libjava/classpath/javax/swing/border/EtchedBorder.java10
-rw-r--r--libjava/classpath/javax/swing/border/LineBorder.java16
-rw-r--r--libjava/classpath/javax/swing/border/MatteBorder.java4
-rw-r--r--libjava/classpath/javax/swing/border/TitledBorder.java10
-rw-r--r--libjava/classpath/javax/swing/colorchooser/ColorSelectionModel.java75
-rw-r--r--libjava/classpath/javax/swing/event/ChangeEvent.java33
-rw-r--r--libjava/classpath/javax/swing/event/ChangeListener.java32
-rw-r--r--libjava/classpath/javax/swing/event/InternalFrameEvent.java67
-rw-r--r--libjava/classpath/javax/swing/event/TableColumnModelListener.java88
-rw-r--r--libjava/classpath/javax/swing/event/TreeSelectionEvent.java143
-rw-r--r--libjava/classpath/javax/swing/event/TreeSelectionListener.java26
-rw-r--r--libjava/classpath/javax/swing/filechooser/FileFilter.java6
-rw-r--r--libjava/classpath/javax/swing/filechooser/FileView.java4
-rw-r--r--libjava/classpath/javax/swing/filechooser/UnixFileSystemView.java6
-rw-r--r--libjava/classpath/javax/swing/plaf/ComboBoxUI.java14
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java11
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java17
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java3
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java43
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java572
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java355
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java19
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java65
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java95
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java4
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicListUI.java13
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java222
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java12
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java487
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java30
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java4
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java3
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java4
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java12
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java122
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java6
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java183
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java888
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java9
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java14
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java852
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java16
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java65
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java7
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java15
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java137
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java28
-rw-r--r--libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java1630
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalBorders.java108
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java14
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java13
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java126
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java85
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java132
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java16
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java122
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java17
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java8
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java157
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java86
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java80
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java861
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java15
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java70
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java4
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/MetalUtils.java164
-rw-r--r--libjava/classpath/javax/swing/plaf/metal/OceanTheme.java97
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/ColorType.java7
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/Region.java4
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java6
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java15
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/SynthPainter.java1921
-rw-r--r--libjava/classpath/javax/swing/plaf/synth/SynthStyle.java83
-rw-r--r--libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java19
-rw-r--r--libjava/classpath/javax/swing/table/DefaultTableColumnModel.java346
-rw-r--r--libjava/classpath/javax/swing/table/DefaultTableModel.java54
-rw-r--r--libjava/classpath/javax/swing/table/JTableHeader.java50
-rw-r--r--libjava/classpath/javax/swing/table/TableColumn.java352
-rw-r--r--libjava/classpath/javax/swing/table/TableColumnModel.java95
-rw-r--r--libjava/classpath/javax/swing/text/AbstractDocument.java151
-rw-r--r--libjava/classpath/javax/swing/text/AsyncBoxView.java6
-rw-r--r--libjava/classpath/javax/swing/text/BoxView.java9
-rw-r--r--libjava/classpath/javax/swing/text/CompositeView.java131
-rw-r--r--libjava/classpath/javax/swing/text/DefaultCaret.java179
-rw-r--r--libjava/classpath/javax/swing/text/DefaultEditorKit.java1088
-rw-r--r--libjava/classpath/javax/swing/text/DefaultHighlighter.java142
-rw-r--r--libjava/classpath/javax/swing/text/FieldView.java182
-rw-r--r--libjava/classpath/javax/swing/text/FlowView.java2
-rw-r--r--libjava/classpath/javax/swing/text/GapContent.java18
-rw-r--r--libjava/classpath/javax/swing/text/InternationalFormatter.java2
-rw-r--r--libjava/classpath/javax/swing/text/JTextComponent.java2
-rw-r--r--libjava/classpath/javax/swing/text/PlainView.java78
-rw-r--r--libjava/classpath/javax/swing/text/Position.java2
-rw-r--r--libjava/classpath/javax/swing/text/Segment.java5
-rw-r--r--libjava/classpath/javax/swing/text/StyleContext.java12
-rw-r--r--libjava/classpath/javax/swing/text/Utilities.java103
-rw-r--r--libjava/classpath/javax/swing/text/View.java29
-rw-r--r--libjava/classpath/javax/swing/text/WrappedPlainView.java223
-rw-r--r--libjava/classpath/javax/swing/text/html/FormView.java45
-rw-r--r--libjava/classpath/javax/swing/text/html/HTML.java4
-rw-r--r--libjava/classpath/javax/swing/text/html/HTMLDocument.java46
-rw-r--r--libjava/classpath/javax/swing/text/html/HTMLEditorKit.java3
-rw-r--r--libjava/classpath/javax/swing/text/html/ListView.java131
-rw-r--r--libjava/classpath/javax/swing/text/html/NullView.java4
-rw-r--r--libjava/classpath/javax/swing/text/html/parser/Entity.java2
-rw-r--r--libjava/classpath/javax/swing/text/rtf/package.html48
-rw-r--r--libjava/classpath/javax/swing/tree/AbstractLayoutCache.java751
-rw-r--r--libjava/classpath/javax/swing/tree/DefaultMutableTreeNode.java298
-rw-r--r--libjava/classpath/javax/swing/tree/DefaultTreeCellEditor.java20
-rw-r--r--libjava/classpath/javax/swing/tree/DefaultTreeCellRenderer.java29
-rw-r--r--libjava/classpath/javax/swing/tree/DefaultTreeModel.java89
-rw-r--r--libjava/classpath/javax/swing/tree/DefaultTreeSelectionModel.java1659
-rw-r--r--libjava/classpath/javax/swing/tree/FixedHeightLayoutCache.java776
-rw-r--r--libjava/classpath/javax/swing/tree/TreeCellEditor.java26
-rw-r--r--libjava/classpath/javax/swing/tree/TreeCellRenderer.java30
-rw-r--r--libjava/classpath/javax/swing/tree/TreeNode.java117
-rw-r--r--libjava/classpath/javax/swing/tree/TreePath.java39
-rw-r--r--libjava/classpath/javax/swing/tree/VariableHeightLayoutCache.java776
-rw-r--r--libjava/classpath/javax/swing/undo/StateEditable.java8
-rw-r--r--libjava/classpath/javax/swing/undo/UndoManager.java8
-rw-r--r--libjava/classpath/javax/swing/undo/UndoableEdit.java191
-rw-r--r--libjava/classpath/javax/swing/undo/UndoableEditSupport.java4
-rw-r--r--libjava/classpath/javax/xml/XMLConstants.java9
-rw-r--r--libjava/classpath/javax/xml/datatype/DatatypeConstants.java9
-rw-r--r--libjava/classpath/javax/xml/datatype/DatatypeFactory.java45
-rw-r--r--libjava/classpath/javax/xml/datatype/Duration.java10
-rw-r--r--libjava/classpath/javax/xml/validation/SchemaFactory.java17
-rw-r--r--libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java52
-rw-r--r--libjava/classpath/javax/xml/xpath/XPathConstants.java8
-rw-r--r--libjava/classpath/lib/Makefile.am25
-rw-r--r--libjava/classpath/lib/Makefile.in52
-rwxr-xr-xlibjava/classpath/lib/gen-classlist.sh.in4
-rw-r--r--libjava/classpath/lib/jazzlib/index.html47
-rwxr-xr-xlibjava/classpath/lib/jazzlib/makeJazzlibDist.sh121
-rwxr-xr-xlibjava/classpath/lib/mkdep.pl.in336
-rw-r--r--libjava/classpath/m4/acinclude.m44
-rw-r--r--libjava/classpath/native/Makefile.in19
-rw-r--r--libjava/classpath/native/fdlibm/Makefile.am2
-rw-r--r--libjava/classpath/native/fdlibm/Makefile.in21
-rw-r--r--libjava/classpath/native/fdlibm/fdlibm.h2
-rw-r--r--libjava/classpath/native/fdlibm/ieeefp.h2
-rw-r--r--libjava/classpath/native/jawt/Makefile.in19
-rw-r--r--libjava/classpath/native/jni/Makefile.in19
-rw-r--r--libjava/classpath/native/jni/classpath/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/classpath/Makefile.in21
-rw-r--r--libjava/classpath/native/jni/classpath/jcl.c4
-rw-r--r--libjava/classpath/native/jni/classpath/jcl.h13
-rw-r--r--libjava/classpath/native/jni/gtk-peer/Makefile.in19
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c70
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c102
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c4
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c25
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c14
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c12
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c58
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c71
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c166
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c148
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c40
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c55
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c37
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c54
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c59
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c75
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c21
-rw-r--r--libjava/classpath/native/jni/gtk-peer/gtkpeer.h8
-rw-r--r--libjava/classpath/native/jni/java-io/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/java-io/Makefile.in69
-rw-r--r--libjava/classpath/native/jni/java-lang/Makefile.am4
-rw-r--r--libjava/classpath/native/jni/java-lang/Makefile.in77
-rw-r--r--libjava/classpath/native/jni/java-lang/java_lang_VMProcess.c47
-rw-r--r--libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c32
-rw-r--r--libjava/classpath/native/jni/java-lang/java_lang_reflect_VMArray.c (renamed from libjava/classpath/native/jni/java-lang/java_lang_reflect_Array.c)4
-rw-r--r--libjava/classpath/native/jni/java-net/Makefile.am13
-rw-r--r--libjava/classpath/native/jni/java-net/Makefile.in91
-rw-r--r--libjava/classpath/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c538
-rw-r--r--libjava/classpath/native/jni/java-net/javanet.c3
-rw-r--r--libjava/classpath/native/jni/java-net/javanet.h14
-rw-r--r--libjava/classpath/native/jni/java-net/local.c193
-rw-r--r--libjava/classpath/native/jni/java-net/local.h28
-rw-r--r--libjava/classpath/native/jni/java-nio/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/java-nio/Makefile.in69
-rw-r--r--libjava/classpath/native/jni/java-util/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/java-util/Makefile.in69
-rw-r--r--libjava/classpath/native/jni/midi-alsa/.cvsignore9
-rw-r--r--libjava/classpath/native/jni/midi-alsa/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/midi-alsa/Makefile.in69
-rw-r--r--libjava/classpath/native/jni/midi-dssi/.cvsignore9
-rw-r--r--libjava/classpath/native/jni/midi-dssi/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/midi-dssi/Makefile.in69
-rw-r--r--libjava/classpath/native/jni/qt-peer/Makefile.in19
-rw-r--r--libjava/classpath/native/jni/xmlj/Makefile.am2
-rw-r--r--libjava/classpath/native/jni/xmlj/Makefile.in69
-rw-r--r--libjava/classpath/native/target/Linux/Makefile.in19
-rw-r--r--libjava/classpath/native/target/Makefile.in19
-rw-r--r--libjava/classpath/native/target/generic/Makefile.in19
-rw-r--r--libjava/classpath/native/target/generic/target_generic.h2
-rw-r--r--libjava/classpath/native/target/generic/target_generic_misc.h2
-rw-r--r--libjava/classpath/native/testsuite/Makefile.am2
-rw-r--r--libjava/classpath/native/testsuite/guile-jvm.c223
-rw-r--r--libjava/classpath/native/vmi/Makefile.am6
-rw-r--r--libjava/classpath/native/vmi/TODO28
-rwxr-xr-xlibjava/classpath/native/vmi/vmi.c143
-rwxr-xr-xlibjava/classpath/native/vmi/vmi.h92
-rw-r--r--libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/BAD_CONTEXT.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/BAD_INV_ORDER.java6
-rwxr-xr-xlibjava/classpath/org/omg/CORBA/BAD_OPERATION.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/BAD_PARAM.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/BAD_QOS.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/BAD_TYPECODE.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java12
-rw-r--r--libjava/classpath/org/omg/CORBA/COMM_FAILURE.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/CompletionStatus.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/CurrentHolder.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/DATA_CONVERSION.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/DynAnyPackage/Invalid.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/FREE_MEM.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/IMP_LIMIT.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/INITIALIZE.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/INTERNAL.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/INTF_REPOS.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INVALID_TRANSACTION.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INV_FLAG.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INV_IDENT.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INV_OBJREF.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/INV_POLICY.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/MARSHAL.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/NO_IMPLEMENT.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/NO_MEMORY.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/NO_PERMISSION.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/NO_RESOURCES.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/NO_RESPONSE.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/OBJ_ADAPTER.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/ORB.java17
-rw-r--r--libjava/classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/ORBPackage/InvalidName.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/PERSIST_STORE.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/ParameterMode.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/ParameterModeHolder.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/PolicyError.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/PolicyHolder.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/PolicyListHolder.java10
-rw-r--r--libjava/classpath/org/omg/CORBA/REBIND.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/SystemException.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/TIMEOUT.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TRANSIENT.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/TypeCodeHolder.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/TypeCodePackage/BadKind.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/TypeCodePackage/Bounds.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/UNKNOWN.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/UnionMember.java5
-rw-r--r--libjava/classpath/org/omg/CORBA/UnknownUserException.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/UserException.java8
-rw-r--r--libjava/classpath/org/omg/CORBA/ValueMember.java4
-rw-r--r--libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java6
-rw-r--r--libjava/classpath/org/omg/CORBA/portable/RemarshalException.java4
-rw-r--r--libjava/classpath/org/omg/CosNaming/NamingContextOperations.java4
-rw-r--r--libjava/classpath/org/omg/CosNaming/_BindingIteratorStub.java4
-rw-r--r--libjava/classpath/org/omg/CosNaming/_NamingContextExtStub.java4
-rw-r--r--libjava/classpath/org/omg/CosNaming/_NamingContextStub.java9
-rw-r--r--libjava/classpath/org/omg/Dynamic/Parameter.java8
-rw-r--r--libjava/classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java4
-rw-r--r--libjava/classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java4
-rw-r--r--libjava/classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java4
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java17
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynAnyStub.java15
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynArrayStub.java558
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynEnumStub.java560
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynFixedStub.java559
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynSequenceStub.java557
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynStructStub.java558
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynUnionStub.java558
-rw-r--r--libjava/classpath/org/omg/DynamicAny/_DynValueStub.java556
-rw-r--r--libjava/classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java4
-rw-r--r--libjava/classpath/org/omg/IOP/CodecPackage/FormatMismatch.java4
-rw-r--r--libjava/classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java4
-rw-r--r--libjava/classpath/org/omg/IOP/CodecPackage/TypeMismatch.java4
-rw-r--r--libjava/classpath/org/omg/IOP/Encoding.java4
-rw-r--r--libjava/classpath/org/omg/IOP/IOR.java11
-rw-r--r--libjava/classpath/org/omg/IOP/IORHolder.java6
-rw-r--r--libjava/classpath/org/omg/IOP/MultipleComponentProfileHolder.java8
-rw-r--r--libjava/classpath/org/omg/IOP/ServiceContextHolder.java6
-rw-r--r--libjava/classpath/org/omg/IOP/ServiceContextListHolder.java6
-rw-r--r--libjava/classpath/org/omg/IOP/TaggedComponent.java4
-rw-r--r--libjava/classpath/org/omg/IOP/TaggedComponentHolder.java6
-rw-r--r--libjava/classpath/org/omg/IOP/TaggedProfile.java4
-rw-r--r--libjava/classpath/org/omg/IOP/TaggedProfileHolder.java6
-rw-r--r--libjava/classpath/org/omg/Messaging/SyncScopeHelper.java16
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ForwardRequest.java4
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java6
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/InvalidSlot.java4
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java4
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java4
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java10
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java26
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java6
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java6
-rw-r--r--libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java6
-rw-r--r--libjava/classpath/org/omg/PortableServer/CurrentPackage/NoContext.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/ForwardRequest.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/NoServant.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java4
-rw-r--r--libjava/classpath/org/omg/PortableServer/ServantActivatorPOA.java44
-rw-r--r--libjava/classpath/org/omg/PortableServer/ServantLocatorPOA.java42
-rw-r--r--libjava/classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java4
-rw-r--r--libjava/classpath/resource/Makefile.in19
-rw-r--r--libjava/classpath/resource/gnu/classpath/tools/jarsigner/MessageBundle.properties33
-rw-r--r--libjava/classpath/resource/gnu/classpath/tools/keytool/MessageBundle.properties95
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa.properties33
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa_ET.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_af.properties20
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_am.properties62
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_am_ET.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar.properties105
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_JO.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_QA.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SA.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SY.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_TN.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_YE.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_as_IN.properties5
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_az.properties18
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties6
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_be.properties31
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_be_BY.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_bg.properties572
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn.properties21
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_bs.properties17
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn.properties300
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn_ER.properties16
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ca.properties60
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_cs.properties968
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_cy.properties272
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_da.properties959
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_de.properties1078
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_de_CH.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_dv.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_dz.properties20
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_el.properties1302
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_el_CY.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_KW.properties)4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en.properties1149
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_GB.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_PK.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_SG.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_eo.properties34
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es.properties1071
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_AR.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_BO.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CL.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CO.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CR.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_DO.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_EC.properties5
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_ES.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_GT.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_HN.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_MX.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_NI.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PA.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PE.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PR.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PY.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_SV.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_US.properties3
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_UY.properties3
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_VE.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_et.properties36
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_eu.properties17
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa.properties589
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_AF.properties43
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_IR.properties3
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fi.properties1291
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fo.properties15
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr.properties1027
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr_CA.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ga.properties958
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez.properties298
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ER.properties19
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ET.properties18
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gl.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw.properties32
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw_US.properties16
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_he.properties240
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi.properties28
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_hr.properties417
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_hu.properties992
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_hy.properties26
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_id.properties31
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_is.properties491
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_it.properties1040
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja.properties1032
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja_JP.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ka.properties27
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kk.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kl.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_km.properties41
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ko.properties886
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok.properties156
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok_IN.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IN.properties)8
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ky.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo.properties49
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo_LA.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt.properties123
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt_LT.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_lv.properties15
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_mk.properties418
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr.properties15
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms.properties9
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms_BN.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_mt.properties146
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_nb.properties1058
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_nl.properties1102
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_nn.properties57
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_om.properties33
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_om_ET.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_or_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa_IN.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_pl.properties952
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps.properties12
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps_AF.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt.properties964
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt_PT.properties9
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ro.properties44
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru.properties1124
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_RU.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_UA.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa_IN.properties3
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid.properties55
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid_ET.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_LY.properties)4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sk.properties955
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl.properties56
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl_SI.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IQ.properties)4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_so.properties42
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_DJ.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_ET.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_SO.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sq.properties44
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr.properties94
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Cyrl.properties23
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Latn.properties21
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Cyrl.properties10
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Latn.properties104
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sv.properties1048
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw.properties30
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw_TZ.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr.properties11
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr_SY.properties17
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta.properties40
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta_IN.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_te.properties33
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_te_IN.properties4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_th.properties130
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti.properties13
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ER.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ET.properties2
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig.properties300
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig_ER.properties16
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_tr.properties1238
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_tt.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_uk.properties927
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_ur.properties1
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz.properties36
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF_Arab.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn_MN.properties)5
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Arab.properties (renamed from libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF.properties)4
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Latn.properties45
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_vi.properties34
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal.properties169
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal_ET.properties17
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh.properties955
-rw-r--r--libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh_Hant.properties634
-rw-r--r--libjava/classpath/resource/gnu/javax/print/PrinterDialog.properties93
-rw-r--r--libjava/classpath/resource/gnu/javax/print/PrinterDialog_de.properties91
-rw-r--r--libjava/classpath/resource/java/security/classpath.security3
-rw-r--r--libjava/classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties9
-rw-r--r--libjava/classpath/scripts/Makefile.in19
-rw-r--r--libjava/classpath/scripts/build_mathnamespace6
-rw-r--r--libjava/classpath/scripts/checkstyle-config.xml132
-rw-r--r--libjava/classpath/scripts/checkstyle-header.regex38
-rw-r--r--libjava/classpath/scripts/checkstyle-suppressions.xml34
-rw-r--r--libjava/classpath/scripts/checkstyle.css42
-rw-r--r--libjava/classpath/scripts/checkstyle2html.xsl102
-rwxr-xr-xlibjava/classpath/scripts/classpath-build68
-rwxr-xr-xlibjava/classpath/scripts/classpath-daily17
-rw-r--r--libjava/classpath/scripts/eclipse-gnu.xml246
-rwxr-xr-xlibjava/classpath/scripts/generate-locale-list.sh16
-rw-r--r--libjava/classpath/scripts/jalopy-gnu.xml378
-rwxr-xr-xlibjava/classpath/scripts/japi135
-rwxr-xr-xlibjava/classpath/scripts/kissme-mauve346
-rwxr-xr-xlibjava/classpath/scripts/loc44
-rw-r--r--libjava/classpath/scripts/math_symbols69
-rwxr-xr-xlibjava/classpath/scripts/patches.pl164
-rwxr-xr-xlibjava/classpath/scripts/timezones.pl366
-rw-r--r--libjava/classpath/scripts/tzabbrevs40
-rwxr-xr-xlibjava/classpath/scripts/unicode-blocks.pl374
-rwxr-xr-xlibjava/classpath/scripts/unicode-muncher.pl868
-rw-r--r--libjava/classpath/test/Makefile.am4
-rwxr-xr-xlibjava/classpath/test/base/OutputClass.java98
-rw-r--r--libjava/classpath/test/gnu.java.lang.reflect/Makefile.am5
-rw-r--r--libjava/classpath/test/gnu.java.lang.reflect/TypeSignatureTest.java196
-rw-r--r--libjava/classpath/test/java.beans/DescriptorTest.java48
-rw-r--r--libjava/classpath/test/java.beans/IntrospectorTest.java97
-rw-r--r--libjava/classpath/test/java.beans/PropertyChangeSupportTest.java200
-rw-r--r--libjava/classpath/test/java.io/BufferedByteOutputStreamTest.java87
-rw-r--r--libjava/classpath/test/java.io/BufferedCharWriterTest.java89
-rw-r--r--libjava/classpath/test/java.io/BufferedInputStreamTest.java241
-rw-r--r--libjava/classpath/test/java.io/BufferedReaderTest.java200
-rw-r--r--libjava/classpath/test/java.io/ByteArrayInputStreamTest.java174
-rw-r--r--libjava/classpath/test/java.io/CharArrayReaderTest.java169
-rw-r--r--libjava/classpath/test/java.io/DataInputOutputTest.java174
-rw-r--r--libjava/classpath/test/java.io/FileInputStreamTest.java71
-rw-r--r--libjava/classpath/test/java.io/FileOutputStreamTest.java81
-rw-r--r--libjava/classpath/test/java.io/FileReaderTest.java69
-rw-r--r--libjava/classpath/test/java.io/FileTest.java205
-rw-r--r--libjava/classpath/test/java.io/FileWriterTest.java85
-rw-r--r--libjava/classpath/test/java.io/HairyGraph.java75
-rw-r--r--libjava/classpath/test/java.io/LineNumberInputStreamTest.java119
-rw-r--r--libjava/classpath/test/java.io/LineNumberReaderTest.java120
-rw-r--r--libjava/classpath/test/java.io/Makefile.am9
-rw-r--r--libjava/classpath/test/java.io/OOSCallDefault.java39
-rw-r--r--libjava/classpath/test/java.io/OOSExtern.java37
-rw-r--r--libjava/classpath/test/java.io/OOSNoCallDefault.java42
-rw-r--r--libjava/classpath/test/java.io/ObjectInputStreamTest.java65
-rw-r--r--libjava/classpath/test/java.io/ObjectOutputStreamTest.java157
-rw-r--r--libjava/classpath/test/java.io/ObjectStreamClassTest.java282
-rw-r--r--libjava/classpath/test/java.io/PipedReaderWriterTest.java136
-rw-r--r--libjava/classpath/test/java.io/PipedStreamTest.java134
-rw-r--r--libjava/classpath/test/java.io/PrintStreamTest.java83
-rw-r--r--libjava/classpath/test/java.io/PrintWriterTest.java83
-rw-r--r--libjava/classpath/test/java.io/PushbackInputStreamTest.java133
-rw-r--r--libjava/classpath/test/java.io/PushbackReaderTest.java115
-rw-r--r--libjava/classpath/test/java.io/README12
-rw-r--r--libjava/classpath/test/java.io/RandomAccessFileTest.java269
-rw-r--r--libjava/classpath/test/java.io/SequenceInputStreamTest.java85
-rw-r--r--libjava/classpath/test/java.io/StreamTokenizerTest.java94
-rw-r--r--libjava/classpath/test/java.io/StringBufferInputStreamTest.java163
-rw-r--r--libjava/classpath/test/java.io/StringWriterTest.java91
-rw-r--r--libjava/classpath/test/java.io/Test.java52
-rw-r--r--libjava/classpath/test/java.io/UTF8EncodingTest.java100
-rw-r--r--libjava/classpath/test/java.io/calldefault.databin68 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/dataoutput-jdk.outbin113 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/external.databin38 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/graph.databin340 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/nocalldefault.databin93 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/notserial.databin282 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/notserialfield.databin347 -> 0 bytes
-rw-r--r--libjava/classpath/test/java.io/stream-tokenizer.data8
-rw-r--r--libjava/classpath/test/java.io/utf8test-jdk.out2
-rw-r--r--libjava/classpath/test/java.lang.reflect/ArrayTest.java184
-rw-r--r--libjava/classpath/test/java.lang.reflect/Makefile.am5
-rw-r--r--libjava/classpath/test/java.net/BUGS5
-rw-r--r--libjava/classpath/test/java.net/ClientDatagram.java112
-rw-r--r--libjava/classpath/test/java.net/ClientSocket.java189
-rw-r--r--libjava/classpath/test/java.net/Makefile.am9
-rw-r--r--libjava/classpath/test/java.net/MulticastClient.java65
-rw-r--r--libjava/classpath/test/java.net/MulticastServer.java57
-rw-r--r--libjava/classpath/test/java.net/ServerDatagram.java52
-rw-r--r--libjava/classpath/test/java.net/ServerSocketTest.java53
-rw-r--r--libjava/classpath/test/java.net/SubSocket.java6
-rw-r--r--libjava/classpath/test/java.net/TestNameLookups.java103
-rw-r--r--libjava/classpath/test/java.net/URLTest.java156
-rwxr-xr-xlibjava/classpath/test/java.net/runtest32
-rw-r--r--libjava/classpath/test/java.util/ArraysTest.java271
-rw-r--r--libjava/classpath/test/java.util/Makefile.am5
-rw-r--r--libjava/classpath/test/native/lib/JNILinkTest.java103
-rw-r--r--libjava/classpath/test/native/lib/MethodTester.c110
-rw-r--r--libjava/classpath/test/native/lib/MethodTester.h61
-rw-r--r--libjava/classpath/testsuite/config/tests22
-rw-r--r--libjava/classpath/testsuite/java.io/IsAbsoluteTest.java26
-rw-r--r--libjava/classpath/testsuite/java.io/RandomAccessFileTest.java50
-rw-r--r--libjava/classpath/testsuite/java.io/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.lang/ArrayTest.java100
-rw-r--r--libjava/classpath/testsuite/java.lang/BooleanTest.java177
-rw-r--r--libjava/classpath/testsuite/java.lang/ByteTest.java380
-rw-r--r--libjava/classpath/testsuite/java.lang/CastTest.java170
-rw-r--r--libjava/classpath/testsuite/java.lang/ClassForNameTest.java25
-rw-r--r--libjava/classpath/testsuite/java.lang/ExceptionTest.java21
-rw-r--r--libjava/classpath/testsuite/java.lang/FloatingDecimalTest.java19
-rw-r--r--libjava/classpath/testsuite/java.lang/IsInstanceTest.java32
-rw-r--r--libjava/classpath/testsuite/java.lang/JoinTest.java77
-rw-r--r--libjava/classpath/testsuite/java.lang/LongFieldTest.java12
-rw-r--r--libjava/classpath/testsuite/java.lang/NewInstanceTest.java24
-rw-r--r--libjava/classpath/testsuite/java.lang/NullcastTest.java20
-rw-r--r--libjava/classpath/testsuite/java.lang/OutOfMemoryErrorTest.java64
-rw-r--r--libjava/classpath/testsuite/java.lang/StringTest.java24
-rw-r--r--libjava/classpath/testsuite/java.lang/SyncronizedTest.java59
-rw-r--r--libjava/classpath/testsuite/java.lang/TestCasts.java477
-rw-r--r--libjava/classpath/testsuite/java.lang/ThreadTest.java48
-rw-r--r--libjava/classpath/testsuite/java.lang/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.net/DatagramSocketSendReceiveTest.java114
-rw-r--r--libjava/classpath/testsuite/java.net/DatagramSocketTest.java23
-rw-r--r--libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java113
-rw-r--r--libjava/classpath/testsuite/java.net/SocketTest.java34
-rw-r--r--libjava/classpath/testsuite/java.net/URLTest.java23
-rw-r--r--libjava/classpath/testsuite/java.net/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.opstack/LeftBehind.j64
-rw-r--r--libjava/classpath/testsuite/java.opstack/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.sun.awt/FrameMenuTest.java40
-rw-r--r--libjava/classpath/testsuite/java.sun.awt/FrameTest.java32
-rw-r--r--libjava/classpath/testsuite/java.sun.awt/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.sun.tools/ClassPathTest.java14
-rw-r--r--libjava/classpath/testsuite/java.sun.tools/JavacTest.java22
-rw-r--r--libjava/classpath/testsuite/java.sun.tools/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.text/MessageFormatTest.java25
-rw-r--r--libjava/classpath/testsuite/java.text/SimpleDateFormatTest.java17
-rw-r--r--libjava/classpath/testsuite/java.text/execute.exp7
-rw-r--r--libjava/classpath/testsuite/java.util/ResourceBundleTest.java20
-rw-r--r--libjava/classpath/testsuite/java.util/SimpleTimeZoneTest.java14
-rw-r--r--libjava/classpath/testsuite/java.util/execute.exp7
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/AllParserTests.java149
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/HTML_Test.java130
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Element_Test.java117
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Entity_Test.java119
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_parsing.java281
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_randomTable.java155
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserEntityResolverTest.java99
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserTest.java150
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Parser_Test.java162
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Text.java155
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Token_locations.java124
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/ReaderTokenizer_Test.java159
-rw-r--r--libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/textPreProcessor_Test.java150
-rw-r--r--libjava/classpath/testsuite/lib/java.exp212
-rw-r--r--libjava/classpath/testsuite/scheme/test.scm164
-rw-r--r--libjava/classpath/tools/.cvsignore3
-rwxr-xr-xlibjava/classpath/tools/Makefile.am45
-rw-r--r--libjava/classpath/tools/Makefile.in91
-rw-r--r--libjava/classpath/tools/README58
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/HelpPrinter.java41
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/common/CallbackUtil.java145
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/common/ProviderUtil.java163
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/common/SecurityProviderInfo.java99
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.java22
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.txt3
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/IorParser.java18
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/README3
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/CompilationError.java18
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/Generator.java18
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopIo.java18
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java33
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/HashFinder.java22
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java18
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/HashUtils.java122
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarSigner.java167
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarVerifier.java339
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/Main.java567
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/Messages.java115
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/jarsigner/SFHelper.java373
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/CertReqCmd.java405
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/Command.java1147
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/DeleteCmd.java235
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/ExportCmd.java266
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/GenKeyCmd.java511
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/IdentityDBCmd.java185
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/ImportCmd.java751
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/KeyCloneCmd.java344
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/KeyPasswdCmd.java339
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/ListCmd.java380
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/Main.java219
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/Messages.java115
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/PrintCertCmd.java123
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/SelfCertCmd.java371
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/keytool/StorePasswdCmd.java275
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/Persistent.java87
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentBidiHashTable.java268
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentHashTable.java246
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.java165
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.txt28
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.java23
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.txt2
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.java189
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.txt30
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl.java139
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Skel.java278
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Stub.java263
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java14
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java13
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java19
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav2
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav2
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl.java244
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java556
-rw-r--r--libjava/classpath/tools/jarsigner.sh.in63
-rw-r--r--libjava/classpath/tools/keytool.sh.in63
-rw-r--r--libjava/classpath/vm/reference/gnu/classpath/Unsafe.java328
-rw-r--r--libjava/classpath/vm/reference/gnu/classpath/jdwp/VMIdManager.java6
-rw-r--r--libjava/classpath/vm/reference/gnu/classpath/jdwp/VMMethod.java178
-rw-r--r--libjava/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java68
-rw-r--r--libjava/classpath/vm/reference/gnu/java/lang/VMInstrumentationImpl.java108
-rw-r--r--libjava/classpath/vm/reference/java/lang/VMClass.java181
-rw-r--r--libjava/classpath/vm/reference/java/lang/VMClassLoader.java92
-rw-r--r--libjava/classpath/vm/reference/java/lang/VMProcess.java46
-rw-r--r--libjava/classpath/vm/reference/java/lang/VMSystem.java71
-rw-r--r--libjava/classpath/vm/reference/java/lang/VMThread.java6
-rw-r--r--libjava/classpath/vm/reference/java/lang/reflect/Constructor.java163
-rw-r--r--libjava/classpath/vm/reference/java/lang/reflect/Field.java81
-rw-r--r--libjava/classpath/vm/reference/java/lang/reflect/Method.java213
-rw-r--r--libjava/classpath/vm/reference/java/lang/reflect/VMArray.java65
-rw-r--r--libjava/classpath/vm/reference/java/security/VMSecureRandom.java134
-rw-r--r--libjava/gcj/Makefile.in15
-rw-r--r--libjava/gcj/javaprims.h101
-rw-r--r--libjava/gnu/classpath/jdwp/VMMethod.java178
-rw-r--r--libjava/gnu/classpath/jdwp/VMVirtualMachine.java69
-rw-r--r--libjava/gnu/java/lang/VMInstrumentationImpl.java119
-rw-r--r--libjava/gnu/java/net/local/LocalSocketImpl.java310
-rw-r--r--libjava/include/Makefile.in15
-rw-r--r--libjava/java/lang/Class.h6
-rw-r--r--libjava/java/lang/Class.java93
-rw-r--r--libjava/java/lang/Math.java176
-rw-r--r--libjava/java/lang/Thread.java149
-rw-r--r--libjava/java/lang/natMath.cc5
-rw-r--r--libjava/java/lang/reflect/Constructor.java25
-rw-r--r--libjava/java/lang/reflect/Field.java5
-rw-r--r--libjava/java/lang/reflect/Method.java25
-rw-r--r--libjava/java/security/VMSecureRandom.java134
-rw-r--r--libjava/java/util/logging/LogManager.java912
-rw-r--r--libjava/java/util/logging/Logger.java91
-rwxr-xr-xlibjava/scripts/makemake.tcl2
-rw-r--r--libjava/sources.am520
-rw-r--r--libjava/testsuite/Makefile.in15
1640 files changed, 126119 insertions, 104442 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 7647cdf..1d0492f 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,35 @@
+2006-05-18 Mark Wielaard <mark@klomp.org>
+
+ Imported GNU Classpath 0.90
+ * scripts/makemake.tcl: LocaleData.java moved to gnu/java/locale.
+
+ * sources.am: Regenerated.
+ * gcj/javaprims.h: Regenerated.
+ * Makefile.in: Regenerated.
+ * gcj/Makefile.in: Regenerated.
+ * include/Makefile.in: Regenerated.
+ * testsuite/Makefile.in: Regenerated.
+
+ * gnu/java/lang/VMInstrumentationImpl.java: New override.
+ * gnu/java/net/local/LocalSocketImpl.java: Likewise.
+ * gnu/classpath/jdwp/VMMethod.java: Likewise.
+ * gnu/classpath/jdwp/VMVirtualMachine.java: Update to latest
+ interface.
+ * java/lang/Thread.java: Add UncaughtExceptionHandler.
+ * java/lang/reflect/Method.java: Implements GenericDeclaration and
+ isSynthetic(),
+ * java/lang/reflect/Field.java: Likewise.
+ * java/lang/reflect/Constructor.java
+ * java/lang/Class.java: Implements Type, GenericDeclaration,
+ getSimpleName() and getEnclosing*() methods.
+ * java/lang/Class.h: Add new public methods.
+ * java/lang/Math.java: Add signum(), ulp() and log10().
+ * java/lang/natMath.cc (log10): New function.
+ * java/security/VMSecureRandom.java: New override.
+ * java/util/logging/Logger.java: Updated to latest classpath
+ version.
+ * java/util/logging/LogManager.java: New override.
+
2006-05-15 Bryce McKinlay <mckinlay@redhat.com>
PR libgcj/27352
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 077b4f3..313f4dd8 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -157,13 +157,16 @@ am__DEPENDENCIES_2 = gnu/awt.lo gnu/awt/j2d.lo gnu/classpath.lo \
gnu/classpath/jdwp/transport.lo gnu/classpath/jdwp/util.lo \
gnu/gcj.lo gnu/gcj/convert.lo gnu/gcj/io.lo gnu/gcj/runtime.lo \
gnu/gcj/util.lo gnu/java/awt.lo gnu/java/awt/color.lo \
- gnu/java/awt/image.lo gnu/java/awt/peer.lo gnu/java/io.lo \
+ gnu/java/awt/font.lo gnu/java/awt/font/opentype.lo \
+ gnu/java/awt/font/opentype/truetype.lo gnu/java/awt/image.lo \
+ gnu/java/awt/java2d.lo gnu/java/awt/peer.lo gnu/java/io.lo \
gnu/java/lang.lo gnu/java/lang/reflect.lo gnu/java/locale.lo \
- gnu/java/math.lo gnu/java/net.lo gnu/java/net/protocol/file.lo \
- gnu/java/net/protocol/ftp.lo gnu/java/net/protocol/http.lo \
- gnu/java/net/protocol/https.lo gnu/java/net/protocol/jar.lo \
- gnu/java/nio.lo gnu/java/nio/channels.lo \
- gnu/java/nio/charset.lo gnu/java/rmi.lo gnu/java/rmi/dgc.lo \
+ gnu/java/math.lo gnu/java/net.lo gnu/java/net/local.lo \
+ gnu/java/net/protocol/file.lo gnu/java/net/protocol/ftp.lo \
+ gnu/java/net/protocol/http.lo gnu/java/net/protocol/https.lo \
+ gnu/java/net/protocol/jar.lo gnu/java/nio.lo \
+ gnu/java/nio/channels.lo gnu/java/nio/charset.lo \
+ gnu/java/rmi.lo gnu/java/rmi/activation.lo gnu/java/rmi/dgc.lo \
gnu/java/rmi/registry.lo gnu/java/rmi/server.lo \
gnu/java/security.lo gnu/java/security/action.lo \
gnu/java/security/ber.lo gnu/java/security/der.lo \
@@ -175,64 +178,74 @@ am__DEPENDENCIES_2 = gnu/awt.lo gnu/awt/j2d.lo gnu/classpath.lo \
gnu/java/security/sig.lo gnu/java/security/sig/dss.lo \
gnu/java/security/sig/rsa.lo gnu/java/security/util.lo \
gnu/java/security/x509.lo gnu/java/security/x509/ext.lo \
- gnu/java/text.lo gnu/java/util.lo gnu/java/util/prefs.lo \
- gnu/javax/crypto.lo gnu/javax/crypto/assembly.lo \
- gnu/javax/crypto/cipher.lo gnu/javax/crypto/jce.lo \
- gnu/javax/crypto/jce/cipher.lo gnu/javax/crypto/jce/key.lo \
- gnu/javax/crypto/jce/keyring.lo gnu/javax/crypto/jce/mac.lo \
- gnu/javax/crypto/jce/params.lo gnu/javax/crypto/jce/prng.lo \
- gnu/javax/crypto/jce/sig.lo gnu/javax/crypto/jce/spec.lo \
- gnu/javax/crypto/key.lo gnu/javax/crypto/key/dh.lo \
- gnu/javax/crypto/key/srp6.lo gnu/javax/crypto/keyring.lo \
- gnu/javax/crypto/mac.lo gnu/javax/crypto/mode.lo \
- gnu/javax/crypto/pad.lo gnu/javax/crypto/prng.lo \
- gnu/javax/crypto/sasl.lo gnu/javax/crypto/sasl/anonymous.lo \
+ gnu/java/text.lo gnu/java/util.lo gnu/java/util/jar.lo \
+ gnu/java/util/prefs.lo gnu/javax/crypto.lo \
+ gnu/javax/crypto/assembly.lo gnu/javax/crypto/cipher.lo \
+ gnu/javax/crypto/jce.lo gnu/javax/crypto/jce/cipher.lo \
+ gnu/javax/crypto/jce/key.lo gnu/javax/crypto/jce/keyring.lo \
+ gnu/javax/crypto/jce/mac.lo gnu/javax/crypto/jce/params.lo \
+ gnu/javax/crypto/jce/prng.lo gnu/javax/crypto/jce/sig.lo \
+ gnu/javax/crypto/jce/spec.lo gnu/javax/crypto/key.lo \
+ gnu/javax/crypto/key/dh.lo gnu/javax/crypto/key/srp6.lo \
+ gnu/javax/crypto/keyring.lo gnu/javax/crypto/mac.lo \
+ gnu/javax/crypto/mode.lo gnu/javax/crypto/pad.lo \
+ gnu/javax/crypto/prng.lo gnu/javax/crypto/sasl.lo \
+ gnu/javax/crypto/sasl/anonymous.lo \
gnu/javax/crypto/sasl/crammd5.lo \
gnu/javax/crypto/sasl/plain.lo gnu/javax/crypto/sasl/srp.lo \
gnu/javax/imageio/bmp.lo gnu/javax/net/ssl.lo \
- gnu/javax/net/ssl/provider.lo gnu/javax/security/auth.lo \
- gnu/javax/security/auth/callback.lo \
- gnu/javax/security/auth/login.lo \
+ gnu/javax/net/ssl/provider.lo gnu/javax/print.lo \
+ gnu/javax/print/ipp.lo gnu/javax/print/ipp/attribute.lo \
+ gnu/javax/print/ipp/attribute/defaults.lo \
+ gnu/javax/print/ipp/attribute/job.lo \
+ gnu/javax/print/ipp/attribute/printer.lo \
+ gnu/javax/print/ipp/attribute/supported.lo \
+ gnu/javax/security/auth.lo gnu/javax/security/auth/callback.lo \
+ gnu/javax/security/auth/login.lo gnu/javax/swing/plaf/gnu.lo \
+ gnu/javax/swing/plaf/metal.lo \
gnu/javax/swing/text/html/parser.lo \
gnu/javax/swing/text/html/parser/models.lo \
gnu/javax/swing/text/html/parser/support.lo \
- gnu/javax/swing/text/html/parser/support/low.lo gnu/regexp.lo \
- java/applet.lo java/awt.lo java/awt/color.lo \
- java/awt/datatransfer.lo java/awt/dnd.lo java/awt/dnd/peer.lo \
- java/awt/event.lo java/awt/font.lo java/awt/geom.lo \
- java/awt/im.lo java/awt/im/spi.lo java/awt/image.lo \
+ gnu/javax/swing/text/html/parser/support/low.lo \
+ gnu/javax/swing/tree.lo gnu/regexp.lo java/applet.lo \
+ java/awt.lo java/awt/color.lo java/awt/datatransfer.lo \
+ java/awt/dnd.lo java/awt/dnd/peer.lo java/awt/event.lo \
+ java/awt/font.lo java/awt/geom.lo java/awt/im.lo \
+ java/awt/im/spi.lo java/awt/image.lo \
java/awt/image/renderable.lo java/awt/peer.lo \
java/awt/print.lo java/beans.lo java/beans/beancontext.lo \
java/io.lo java/lang.lo java/lang/annotation.lo \
- java/lang/ref.lo java/lang/reflect.lo java/math.lo java/net.lo \
- java/nio.lo java/nio/channels.lo java/nio/channels/spi.lo \
- java/nio/charset.lo java/nio/charset/spi.lo java/rmi.lo \
- java/rmi/activation.lo java/rmi/dgc.lo java/rmi/registry.lo \
- java/rmi/server.lo java/security.lo java/security/acl.lo \
- java/security/cert.lo java/security/interfaces.lo \
- java/security/spec.lo java/sql.lo java/text.lo java/util.lo \
- java/util/jar.lo java/util/logging.lo java/util/prefs.lo \
- java/util/regex.lo java/util/zip.lo javax/accessibility.lo \
- javax/crypto.lo javax/crypto/interfaces.lo \
- javax/crypto/spec.lo javax/management.lo javax/naming.lo \
- javax/naming/directory.lo javax/naming/event.lo \
- javax/naming/ldap.lo javax/naming/spi.lo javax/net.lo \
- javax/net/ssl.lo javax/print.lo javax/print/attribute.lo \
- javax/print/attribute/standard.lo javax/print/event.lo \
- javax/security/auth.lo javax/security/auth/callback.lo \
- javax/security/auth/login.lo javax/security/auth/spi.lo \
- javax/security/auth/x500.lo javax/security/cert.lo \
- javax/security/sasl.lo javax/sound/midi.lo \
- javax/sound/midi/spi.lo javax/sound/sampled.lo \
- javax/sound/sampled/spi.lo javax/sql.lo javax/swing.lo \
- javax/swing/border.lo javax/swing/colorchooser.lo \
- javax/swing/event.lo javax/swing/filechooser.lo \
- javax/swing/plaf.lo javax/swing/plaf/basic.lo \
- javax/swing/plaf/metal.lo javax/swing/plaf/multi.lo \
- javax/swing/plaf/synth.lo javax/swing/table.lo \
- javax/swing/text.lo javax/swing/text/html.lo \
- javax/swing/text/html/parser.lo javax/swing/text/rtf.lo \
- javax/swing/tree.lo javax/swing/undo.lo javax/transaction.lo \
+ java/lang/instrument.lo java/lang/ref.lo java/lang/reflect.lo \
+ java/math.lo java/net.lo java/nio.lo java/nio/channels.lo \
+ java/nio/channels/spi.lo java/nio/charset.lo \
+ java/nio/charset/spi.lo java/rmi.lo java/rmi/activation.lo \
+ java/rmi/dgc.lo java/rmi/registry.lo java/rmi/server.lo \
+ java/security.lo java/security/acl.lo java/security/cert.lo \
+ java/security/interfaces.lo java/security/spec.lo java/sql.lo \
+ java/text.lo java/util.lo java/util/jar.lo \
+ java/util/logging.lo java/util/prefs.lo java/util/regex.lo \
+ java/util/zip.lo javax/accessibility.lo javax/crypto.lo \
+ javax/crypto/interfaces.lo javax/crypto/spec.lo \
+ javax/management.lo javax/naming.lo javax/naming/directory.lo \
+ javax/naming/event.lo javax/naming/ldap.lo javax/naming/spi.lo \
+ javax/net.lo javax/net/ssl.lo javax/print.lo \
+ javax/print/attribute.lo javax/print/attribute/standard.lo \
+ javax/print/event.lo javax/security/auth.lo \
+ javax/security/auth/callback.lo \
+ javax/security/auth/kerberos.lo javax/security/auth/login.lo \
+ javax/security/auth/spi.lo javax/security/auth/x500.lo \
+ javax/security/cert.lo javax/security/sasl.lo \
+ javax/sound/midi.lo javax/sound/midi/spi.lo \
+ javax/sound/sampled.lo javax/sound/sampled/spi.lo javax/sql.lo \
+ javax/swing.lo javax/swing/border.lo \
+ javax/swing/colorchooser.lo javax/swing/event.lo \
+ javax/swing/filechooser.lo javax/swing/plaf.lo \
+ javax/swing/plaf/basic.lo javax/swing/plaf/metal.lo \
+ javax/swing/plaf/multi.lo javax/swing/plaf/synth.lo \
+ javax/swing/table.lo javax/swing/text.lo \
+ javax/swing/text/html.lo javax/swing/text/html/parser.lo \
+ javax/swing/text/rtf.lo javax/swing/tree.lo \
+ javax/swing/undo.lo javax/transaction.lo \
javax/transaction/xa.lo org/ietf/jgss.lo
am__DEPENDENCIES_3 = gnu-CORBA.lo gnu-java-awt-peer-swing.lo \
gnu-java-beans.lo gnu-javax-rmi.lo gnu-javax-sound-midi.lo \
@@ -476,6 +489,7 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
+GREP = @GREP@
GTK_AWT_FALSE = @GTK_AWT_FALSE@
GTK_AWT_TRUE = @GTK_AWT_TRUE@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
@@ -577,6 +591,7 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
@@ -585,14 +600,8 @@ ZINCS = @ZINCS@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_GCJ = @ac_ct_GCJ@
-ac_ct_LD = @ac_ct_LD@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -612,7 +621,10 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -623,6 +635,7 @@ host_cpu = @host_cpu@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
@@ -630,13 +643,16 @@ libdir = @libdir@
libexecdir = @libexecdir@
libgcj_basedir = @libgcj_basedir@
libstdcxx_incdir = @libstdcxx_incdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
@@ -1035,6 +1051,7 @@ gnu_awt_xlib_header_files = $(patsubst %.java,%.h,$(gnu_awt_xlib_source_files))
gnu_classpath_source_files = \
classpath/gnu/classpath/ByteArray.java \
classpath/gnu/classpath/Configuration.java \
+classpath/gnu/classpath/NotImplementedException.java \
classpath/gnu/classpath/Pointer.java \
classpath/gnu/classpath/Pointer32.java \
classpath/gnu/classpath/Pointer64.java \
@@ -1055,10 +1072,12 @@ classpath/gnu/classpath/jdwp/Jdwp.java \
classpath/gnu/classpath/jdwp/JdwpConstants.java \
gnu/classpath/jdwp/VMFrame.java \
gnu/classpath/jdwp/VMIdManager.java \
+gnu/classpath/jdwp/VMMethod.java \
gnu/classpath/jdwp/VMVirtualMachine.java
gnu_classpath_jdwp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_source_files)))
gnu_classpath_jdwp_event_source_files = \
+classpath/gnu/classpath/jdwp/event/BreakpointEvent.java \
classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java \
classpath/gnu/classpath/jdwp/event/Event.java \
classpath/gnu/classpath/jdwp/event/EventManager.java \
@@ -1099,6 +1118,7 @@ classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java \
classpath/gnu/classpath/jdwp/exception/JdwpException.java \
classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java \
classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java \
+classpath/gnu/classpath/jdwp/exception/NativeMethodException.java \
classpath/gnu/classpath/jdwp/exception/NotImplementedException.java \
classpath/gnu/classpath/jdwp/exception/VmDeadException.java
@@ -1270,11 +1290,50 @@ classpath/gnu/java/awt/color/TagEntry.java \
classpath/gnu/java/awt/color/ToneReproductionCurve.java
gnu_java_awt_color_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_color_source_files)))
+gnu_java_awt_font_source_files = \
+classpath/gnu/java/awt/font/FontDelegate.java \
+classpath/gnu/java/awt/font/FontFactory.java \
+classpath/gnu/java/awt/font/GNUGlyphVector.java
+
+gnu_java_awt_font_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_source_files)))
+gnu_java_awt_font_opentype_source_files = \
+classpath/gnu/java/awt/font/opentype/CharGlyphMap.java \
+classpath/gnu/java/awt/font/opentype/GlyphNamer.java \
+classpath/gnu/java/awt/font/opentype/MacResourceFork.java \
+classpath/gnu/java/awt/font/opentype/NameDecoder.java \
+classpath/gnu/java/awt/font/opentype/OpenTypeFont.java \
+classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java \
+classpath/gnu/java/awt/font/opentype/Scaler.java
+
+gnu_java_awt_font_opentype_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_opentype_source_files)))
+gnu_java_awt_font_opentype_truetype_source_files = \
+classpath/gnu/java/awt/font/opentype/truetype/Fixed.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java \
+classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java \
+classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java \
+classpath/gnu/java/awt/font/opentype/truetype/Zone.java \
+classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java
+
+gnu_java_awt_font_opentype_truetype_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_opentype_truetype_source_files)))
gnu_java_awt_image_source_files = \
classpath/gnu/java/awt/image/ImageDecoder.java \
classpath/gnu/java/awt/image/XBMDecoder.java
gnu_java_awt_image_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_image_source_files)))
+gnu_java_awt_java2d_source_files = \
+classpath/gnu/java/awt/java2d/AbstractGraphics2D.java \
+classpath/gnu/java/awt/java2d/AlphaCompositeContext.java \
+classpath/gnu/java/awt/java2d/CubicSegment.java \
+classpath/gnu/java/awt/java2d/LineSegment.java \
+classpath/gnu/java/awt/java2d/PolyEdge.java \
+classpath/gnu/java/awt/java2d/PolyEdgeComparator.java \
+classpath/gnu/java/awt/java2d/QuadSegment.java \
+classpath/gnu/java/awt/java2d/RasterGraphics.java \
+classpath/gnu/java/awt/java2d/Segment.java
+
+gnu_java_awt_java2d_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_java2d_source_files)))
gnu_java_awt_peer_source_files = \
classpath/gnu/java/awt/peer/ClasspathFontPeer.java \
classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
@@ -1306,10 +1365,10 @@ classpath/gnu/java/awt/peer/gtk/GtkClipboard.java \
classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java \
classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java \
+classpath/gnu/java/awt/peer/gtk/GtkCursor.java \
classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
-classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java \
classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkImage.java \
@@ -1489,10 +1548,17 @@ gnu_java_lang_source_files = \
classpath/gnu/java/lang/ArrayHelper.java \
classpath/gnu/java/lang/CharData.java \
classpath/gnu/java/lang/ClassHelper.java \
-gnu/java/lang/MainThread.java
+classpath/gnu/java/lang/InstrumentationImpl.java \
+gnu/java/lang/MainThread.java \
+gnu/java/lang/VMInstrumentationImpl.java
gnu_java_lang_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_source_files)))
gnu_java_lang_reflect_source_files = \
+classpath/gnu/java/lang/reflect/ClassSignatureParser.java \
+classpath/gnu/java/lang/reflect/FieldSignatureParser.java \
+classpath/gnu/java/lang/reflect/GenericSignatureParser.java \
+classpath/gnu/java/lang/reflect/MethodSignatureParser.java \
+classpath/gnu/java/lang/reflect/TypeImpl.java \
classpath/gnu/java/lang/reflect/TypeSignature.java
gnu_java_lang_reflect_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_reflect_source_files)))
@@ -1501,6 +1567,7 @@ gnu/java/locale/Calendar.java \
gnu/java/locale/Calendar_de.java \
gnu/java/locale/Calendar_en.java \
gnu/java/locale/Calendar_nl.java \
+classpath/gnu/java/locale/LocaleData.java \
classpath/gnu/java/locale/LocaleHelper.java \
gnu/java/locale/LocaleInformation.java \
gnu/java/locale/LocaleInformation_af_ZA.java \
@@ -1662,6 +1729,13 @@ gnu/java/net/protocol/gcjlib/Connection.java \
gnu/java/net/protocol/gcjlib/Handler.java
gnu_java_net_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_source_files)))
+gnu_java_net_local_source_files = \
+classpath/gnu/java/net/local/LocalServerSocket.java \
+classpath/gnu/java/net/local/LocalSocket.java \
+classpath/gnu/java/net/local/LocalSocketAddress.java \
+gnu/java/net/local/LocalSocketImpl.java
+
+gnu_java_net_local_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_local_source_files)))
gnu_java_net_protocol_file_source_files = \
classpath/gnu/java/net/protocol/file/Connection.java \
classpath/gnu/java/net/protocol/file/Handler.java
@@ -1719,6 +1793,7 @@ gnu_java_nio_source_files = \
classpath/gnu/java/nio/ChannelInputStream.java \
classpath/gnu/java/nio/ChannelOutputStream.java \
classpath/gnu/java/nio/ChannelReader.java \
+classpath/gnu/java/nio/ChannelWriter.java \
gnu/java/nio/DatagramChannelImpl.java \
gnu/java/nio/DatagramChannelSelectionKey.java \
classpath/gnu/java/nio/FileLockImpl.java \
@@ -1821,10 +1896,18 @@ gnu/java/rmi/rmic/RMICException.java \
gnu/java/rmi/rmic/TabbedWriter.java
gnu_java_rmi_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_source_files)))
+gnu_java_rmi_activation_source_files = \
+classpath/gnu/java/rmi/activation/ActivationSystemTransient.java \
+classpath/gnu/java/rmi/activation/BidiTable.java \
+classpath/gnu/java/rmi/activation/DefaultActivationGroup.java \
+classpath/gnu/java/rmi/activation/DefaultActivationSystem.java
+
+gnu_java_rmi_activation_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_activation_source_files)))
gnu_java_rmi_dgc_source_files = \
classpath/gnu/java/rmi/dgc/DGCImpl.java \
classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java \
-classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java
+classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java \
+classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java
gnu_java_rmi_dgc_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_dgc_source_files)))
gnu_java_rmi_registry_source_files = \
@@ -1834,6 +1917,8 @@ classpath/gnu/java/rmi/registry/RegistryImpl_Stub.java
gnu_java_rmi_registry_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_registry_source_files)))
gnu_java_rmi_server_source_files = \
+classpath/gnu/java/rmi/server/ActivatableRef.java \
+classpath/gnu/java/rmi/server/ActivatableServerRef.java \
classpath/gnu/java/rmi/server/CombinedClassLoader.java \
classpath/gnu/java/rmi/server/ConnectionRunnerPool.java \
classpath/gnu/java/rmi/server/ProtocolConstants.java \
@@ -1983,6 +2068,7 @@ classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
gnu_java_security_key_rsa_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_key_rsa_source_files)))
gnu_java_security_pkcs_source_files = \
+classpath/gnu/java/security/pkcs/PKCS7Data.java \
classpath/gnu/java/security/pkcs/PKCS7SignedData.java \
classpath/gnu/java/security/pkcs/SignerInfo.java
@@ -2000,7 +2086,6 @@ classpath/gnu/java/security/prng/RandomEventListener.java
gnu_java_security_prng_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_prng_source_files)))
gnu_java_security_provider_source_files = \
classpath/gnu/java/security/provider/CollectionCertStoreImpl.java \
-classpath/gnu/java/security/provider/DSAParameterGenerator.java \
classpath/gnu/java/security/provider/DefaultPolicy.java \
classpath/gnu/java/security/provider/Gnu.java \
classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java \
@@ -2096,6 +2181,10 @@ classpath/gnu/java/util/EmptyEnumeration.java \
classpath/gnu/java/util/WeakIdentityHashMap.java
gnu_java_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_source_files)))
+gnu_java_util_jar_source_files = \
+classpath/gnu/java/util/jar/JarUtils.java
+
+gnu_java_util_jar_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_jar_source_files)))
gnu_java_util_prefs_source_files = \
classpath/gnu/java/util/prefs/EventDispatcher.java \
classpath/gnu/java/util/prefs/FileBasedFactory.java \
@@ -2442,10 +2531,13 @@ classpath/gnu/javax/crypto/sasl/srp/StoreEntry.java
gnu_javax_crypto_sasl_srp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_crypto_sasl_srp_source_files)))
gnu_javax_imageio_bmp_source_files = \
classpath/gnu/javax/imageio/bmp/BMPDecoder.java \
+classpath/gnu/javax/imageio/bmp/BMPEncoder.java \
classpath/gnu/javax/imageio/bmp/BMPException.java \
classpath/gnu/javax/imageio/bmp/BMPFileHeader.java \
classpath/gnu/javax/imageio/bmp/BMPImageReader.java \
classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java \
+classpath/gnu/javax/imageio/bmp/BMPImageWriter.java \
+classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java \
classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java \
classpath/gnu/javax/imageio/bmp/DecodeBF16.java \
classpath/gnu/javax/imageio/bmp/DecodeBF32.java \
@@ -2454,7 +2546,15 @@ classpath/gnu/javax/imageio/bmp/DecodeRGB24.java \
classpath/gnu/javax/imageio/bmp/DecodeRGB4.java \
classpath/gnu/javax/imageio/bmp/DecodeRGB8.java \
classpath/gnu/javax/imageio/bmp/DecodeRLE4.java \
-classpath/gnu/javax/imageio/bmp/DecodeRLE8.java
+classpath/gnu/javax/imageio/bmp/DecodeRLE8.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB1.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB16.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB24.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB32.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB4.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB8.java \
+classpath/gnu/javax/imageio/bmp/EncodeRLE4.java \
+classpath/gnu/javax/imageio/bmp/EncodeRLE8.java
gnu_javax_imageio_bmp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_imageio_bmp_source_files)))
gnu_javax_net_ssl_source_files = \
@@ -2531,6 +2631,105 @@ classpath/gnu/javax/net/ssl/provider/X509TrustManagerFactory.java \
classpath/gnu/javax/net/ssl/provider/XMLSessionContext.java
gnu_javax_net_ssl_provider_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_net_ssl_provider_source_files)))
+gnu_javax_print_source_files = \
+classpath/gnu/javax/print/CupsIppOperation.java \
+classpath/gnu/javax/print/CupsMediaMapping.java \
+classpath/gnu/javax/print/CupsPrintService.java \
+classpath/gnu/javax/print/CupsPrintServiceLookup.java \
+classpath/gnu/javax/print/CupsServer.java \
+classpath/gnu/javax/print/PrintAttributeException.java \
+classpath/gnu/javax/print/PrintFlavorException.java \
+classpath/gnu/javax/print/PrintUriException.java \
+classpath/gnu/javax/print/PrinterDialog.java
+
+gnu_javax_print_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_source_files)))
+gnu_javax_print_ipp_source_files = \
+classpath/gnu/javax/print/ipp/DocPrintJobImpl.java \
+classpath/gnu/javax/print/ipp/IppDelimiterTag.java \
+classpath/gnu/javax/print/ipp/IppException.java \
+classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java \
+classpath/gnu/javax/print/ipp/IppPrintService.java \
+classpath/gnu/javax/print/ipp/IppRequest.java \
+classpath/gnu/javax/print/ipp/IppResponse.java \
+classpath/gnu/javax/print/ipp/IppStatusCode.java \
+classpath/gnu/javax/print/ipp/IppUtilities.java \
+classpath/gnu/javax/print/ipp/IppValueTag.java \
+classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java
+
+gnu_javax_print_ipp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_source_files)))
+gnu_javax_print_ipp_attribute_source_files = \
+classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java \
+classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java \
+classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java \
+classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java \
+classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java \
+classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java \
+classpath/gnu/javax/print/ipp/attribute/StatusMessage.java \
+classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java
+
+gnu_javax_print_ipp_attribute_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_source_files)))
+gnu_javax_print_ipp_attribute_defaults_source_files = \
+classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java
+
+gnu_javax_print_ipp_attribute_defaults_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_defaults_source_files)))
+gnu_javax_print_ipp_attribute_job_source_files = \
+classpath/gnu/javax/print/ipp/attribute/job/AttributesCharset.java \
+classpath/gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobId.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobUri.java
+
+gnu_javax_print_ipp_attribute_job_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_job_source_files)))
+gnu_javax_print_ipp_attribute_printer_source_files = \
+classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java \
+classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java \
+classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java \
+classpath/gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java
+
+gnu_javax_print_ipp_attribute_printer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_printer_source_files)))
+gnu_javax_print_ipp_attribute_supported_source_files = \
+classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java
+
+gnu_javax_print_ipp_attribute_supported_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_supported_source_files)))
gnu_javax_rmi_source_files = \
classpath/gnu/javax/rmi/CORBA/CorbaInput.java \
classpath/gnu/javax/rmi/CORBA/CorbaOutput.java \
@@ -2572,6 +2771,14 @@ classpath/gnu/javax/sound/midi/alsa/AlsaPortDevice.java \
classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java \
classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java
+gnu_javax_swing_plaf_gnu_source_files = \
+classpath/gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
+
+gnu_javax_swing_plaf_gnu_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_plaf_gnu_source_files)))
+gnu_javax_swing_plaf_metal_source_files = \
+classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java
+
+gnu_javax_swing_plaf_metal_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_plaf_metal_source_files)))
gnu_javax_swing_text_html_parser_source_files = \
classpath/gnu/javax/swing/text/html/parser/HTML_401F.java \
classpath/gnu/javax/swing/text/html/parser/gnuDTD.java \
@@ -2607,9 +2814,15 @@ classpath/gnu/javax/swing/text/html/parser/support/low/node.java \
classpath/gnu/javax/swing/text/html/parser/support/low/pattern.java
gnu_javax_swing_text_html_parser_support_low_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_text_html_parser_support_low_source_files)))
+gnu_javax_swing_tree_source_files = \
+classpath/gnu/javax/swing/tree/GnuPath.java
+
+gnu_javax_swing_tree_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_tree_source_files)))
gnu_regexp_source_files = \
+classpath/gnu/regexp/BacktrackStack.java \
classpath/gnu/regexp/CharIndexed.java \
classpath/gnu/regexp/CharIndexedCharArray.java \
+classpath/gnu/regexp/CharIndexedCharSequence.java \
classpath/gnu/regexp/CharIndexedInputStream.java \
classpath/gnu/regexp/CharIndexedString.java \
classpath/gnu/regexp/CharIndexedStringBuffer.java \
@@ -2624,6 +2837,7 @@ classpath/gnu/regexp/RETokenAny.java \
classpath/gnu/regexp/RETokenBackRef.java \
classpath/gnu/regexp/RETokenChar.java \
classpath/gnu/regexp/RETokenEnd.java \
+classpath/gnu/regexp/RETokenEndOfPreviousMatch.java \
classpath/gnu/regexp/RETokenEndSub.java \
classpath/gnu/regexp/RETokenIndependent.java \
classpath/gnu/regexp/RETokenLookAhead.java \
@@ -2692,6 +2906,7 @@ classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java \
classpath/gnu/xml/dom/html2/DomHTMLDivElement.java \
classpath/gnu/xml/dom/html2/DomHTMLDocument.java \
classpath/gnu/xml/dom/html2/DomHTMLElement.java \
+classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFontElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFormElement.java \
@@ -3594,6 +3809,7 @@ classpath/java/lang/Comparable.java \
classpath/java/lang/Compiler.java \
java/lang/ConcreteProcess.java \
classpath/java/lang/Double.java \
+classpath/java/lang/Enum.java \
classpath/java/lang/EnumConstantNotPresentException.java \
classpath/java/lang/Error.java \
classpath/java/lang/Exception.java \
@@ -3613,6 +3829,7 @@ classpath/java/lang/InstantiationException.java \
classpath/java/lang/Integer.java \
classpath/java/lang/InternalError.java \
classpath/java/lang/InterruptedException.java \
+classpath/java/lang/Iterable.java \
classpath/java/lang/LinkageError.java \
classpath/java/lang/Long.java \
java/lang/Math.java \
@@ -3666,10 +3883,19 @@ classpath/java/lang/Void.java
java_lang_header_files = $(filter-out java/lang/Object.h java/lang/Class.h,$(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_source_files))))
java_lang_annotation_source_files = \
+classpath/java/lang/annotation/Annotation.java \
classpath/java/lang/annotation/AnnotationFormatError.java \
classpath/java/lang/annotation/AnnotationTypeMismatchException.java
java_lang_annotation_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_annotation_source_files)))
+java_lang_instrument_source_files = \
+classpath/java/lang/instrument/ClassDefinition.java \
+classpath/java/lang/instrument/ClassFileTransformer.java \
+classpath/java/lang/instrument/IllegalClassFormatException.java \
+classpath/java/lang/instrument/Instrumentation.java \
+classpath/java/lang/instrument/UnmodifiableClassException.java
+
+java_lang_instrument_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_instrument_source_files)))
java_lang_ref_source_files = \
classpath/java/lang/ref/PhantomReference.java \
java/lang/ref/Reference.java \
@@ -3680,13 +3906,16 @@ classpath/java/lang/ref/WeakReference.java
java_lang_ref_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_ref_source_files)))
java_lang_reflect_source_files = \
classpath/java/lang/reflect/AccessibleObject.java \
+classpath/java/lang/reflect/AnnotatedElement.java \
java/lang/reflect/Array.java \
java/lang/reflect/Constructor.java \
java/lang/reflect/Field.java \
classpath/java/lang/reflect/GenericArrayType.java \
+classpath/java/lang/reflect/GenericDeclaration.java \
classpath/java/lang/reflect/GenericSignatureFormatError.java \
classpath/java/lang/reflect/InvocationHandler.java \
classpath/java/lang/reflect/InvocationTargetException.java \
+classpath/java/lang/reflect/MalformedParameterizedTypeException.java \
classpath/java/lang/reflect/Member.java \
java/lang/reflect/Method.java \
java/lang/reflect/Modifier.java \
@@ -3694,6 +3923,7 @@ classpath/java/lang/reflect/ParameterizedType.java \
classpath/java/lang/reflect/Proxy.java \
classpath/java/lang/reflect/ReflectPermission.java \
classpath/java/lang/reflect/Type.java \
+classpath/java/lang/reflect/TypeVariable.java \
classpath/java/lang/reflect/UndeclaredThrowableException.java \
java/lang/reflect/VMProxy.java \
classpath/java/lang/reflect/WildcardType.java
@@ -4002,7 +4232,8 @@ classpath/java/security/SignatureSpi.java \
classpath/java/security/SignedObject.java \
classpath/java/security/Signer.java \
classpath/java/security/UnrecoverableKeyException.java \
-classpath/java/security/UnresolvedPermission.java
+classpath/java/security/UnresolvedPermission.java \
+java/security/VMSecureRandom.java
java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_source_files)))
java_security_acl_source_files = \
@@ -4189,7 +4420,6 @@ classpath/java/util/List.java \
classpath/java/util/ListIterator.java \
classpath/java/util/ListResourceBundle.java \
java/util/Locale.java \
-classpath/java/util/LocaleData.java \
classpath/java/util/Map.java \
classpath/java/util/MissingResourceException.java \
classpath/java/util/NoSuchElementException.java \
@@ -4237,7 +4467,7 @@ classpath/java/util/logging/Filter.java \
classpath/java/util/logging/Formatter.java \
classpath/java/util/logging/Handler.java \
classpath/java/util/logging/Level.java \
-classpath/java/util/logging/LogManager.java \
+java/util/logging/LogManager.java \
classpath/java/util/logging/LogRecord.java \
java/util/logging/Logger.java \
classpath/java/util/logging/LoggingPermission.java \
@@ -4291,12 +4521,14 @@ java_util_zip_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(ja
javax_accessibility_source_files = \
classpath/javax/accessibility/Accessible.java \
classpath/javax/accessibility/AccessibleAction.java \
+classpath/javax/accessibility/AccessibleAttributeSequence.java \
classpath/javax/accessibility/AccessibleBundle.java \
classpath/javax/accessibility/AccessibleComponent.java \
classpath/javax/accessibility/AccessibleContext.java \
classpath/javax/accessibility/AccessibleEditableText.java \
classpath/javax/accessibility/AccessibleExtendedComponent.java \
classpath/javax/accessibility/AccessibleExtendedTable.java \
+classpath/javax/accessibility/AccessibleExtendedText.java \
classpath/javax/accessibility/AccessibleHyperlink.java \
classpath/javax/accessibility/AccessibleHypertext.java \
classpath/javax/accessibility/AccessibleIcon.java \
@@ -4308,9 +4540,11 @@ classpath/javax/accessibility/AccessibleRole.java \
classpath/javax/accessibility/AccessibleSelection.java \
classpath/javax/accessibility/AccessibleState.java \
classpath/javax/accessibility/AccessibleStateSet.java \
+classpath/javax/accessibility/AccessibleStreamable.java \
classpath/javax/accessibility/AccessibleTable.java \
classpath/javax/accessibility/AccessibleTableModelChange.java \
classpath/javax/accessibility/AccessibleText.java \
+classpath/javax/accessibility/AccessibleTextSequence.java \
classpath/javax/accessibility/AccessibleValue.java
javax_accessibility_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_accessibility_source_files)))
@@ -4387,6 +4621,10 @@ classpath/javax/imageio/metadata/IIOMetadataFormat.java \
classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java \
classpath/javax/imageio/metadata/IIOMetadataNode.java \
classpath/javax/imageio/plugins/bmp/BMPImageWriteParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java \
+classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGQTable.java \
classpath/javax/imageio/spi/IIORegistry.java \
classpath/javax/imageio/spi/IIOServiceProvider.java \
classpath/javax/imageio/spi/ImageInputStreamSpi.java \
@@ -4497,6 +4735,8 @@ classpath/javax/naming/ldap/HasControls.java \
classpath/javax/naming/ldap/InitialLdapContext.java \
classpath/javax/naming/ldap/LdapContext.java \
classpath/javax/naming/ldap/LdapReferralException.java \
+classpath/javax/naming/ldap/StartTlsRequest.java \
+classpath/javax/naming/ldap/StartTlsResponse.java \
classpath/javax/naming/ldap/UnsolicitedNotification.java \
classpath/javax/naming/ldap/UnsolicitedNotificationEvent.java \
classpath/javax/naming/ldap/UnsolicitedNotificationListener.java
@@ -4569,6 +4809,7 @@ classpath/javax/print/MultiDocPrintService.java \
classpath/javax/print/PrintException.java \
classpath/javax/print/PrintService.java \
classpath/javax/print/PrintServiceLookup.java \
+classpath/javax/print/ServiceUI.java \
classpath/javax/print/ServiceUIFactory.java \
classpath/javax/print/SimpleDoc.java \
classpath/javax/print/StreamPrintService.java \
@@ -4725,6 +4966,15 @@ classpath/javax/security/auth/callback/TextOutputCallback.java \
classpath/javax/security/auth/callback/UnsupportedCallbackException.java
javax_security_auth_callback_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_callback_source_files)))
+javax_security_auth_kerberos_source_files = \
+classpath/javax/security/auth/kerberos/DelegationPermission.java \
+classpath/javax/security/auth/kerberos/KerberosKey.java \
+classpath/javax/security/auth/kerberos/KerberosPrincipal.java \
+classpath/javax/security/auth/kerberos/KerberosTicket.java \
+classpath/javax/security/auth/kerberos/KeyImpl.java \
+classpath/javax/security/auth/kerberos/ServicePermission.java
+
+javax_security_auth_kerberos_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_kerberos_source_files)))
javax_security_auth_login_source_files = \
classpath/javax/security/auth/login/AccountException.java \
classpath/javax/security/auth/login/AccountExpiredException.java \
@@ -4875,6 +5125,7 @@ classpath/javax/swing/CellEditor.java \
classpath/javax/swing/CellRendererPane.java \
classpath/javax/swing/ComboBoxEditor.java \
classpath/javax/swing/ComboBoxModel.java \
+classpath/javax/swing/CompatibilityFocusTraversalPolicy.java \
classpath/javax/swing/ComponentInputMap.java \
classpath/javax/swing/DebugGraphics.java \
classpath/javax/swing/DefaultBoundedRangeModel.java \
@@ -5342,6 +5593,7 @@ classpath/javax/swing/text/html/HTMLEditorKit.java \
classpath/javax/swing/text/html/HTMLFrameHyperlinkEvent.java \
classpath/javax/swing/text/html/HTMLTableView.java \
classpath/javax/swing/text/html/InlineView.java \
+classpath/javax/swing/text/html/ListView.java \
classpath/javax/swing/text/html/NullView.java \
classpath/javax/swing/text/html/ObjectView.java \
classpath/javax/swing/text/html/Option.java \
@@ -5499,6 +5751,7 @@ classpath/javax/xml/transform/stream/StreamResult.java \
classpath/javax/xml/transform/stream/StreamSource.java \
classpath/javax/xml/validation/Schema.java \
classpath/javax/xml/validation/SchemaFactory.java \
+classpath/javax/xml/validation/SchemaFactoryLoader.java \
classpath/javax/xml/validation/TypeInfoProvider.java \
classpath/javax/xml/validation/Validator.java \
classpath/javax/xml/validation/ValidatorHandler.java \
@@ -5956,7 +6209,6 @@ classpath/org/omg/PortableInterceptor/ObjectIdHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java \
-classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplate.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java \
@@ -6279,7 +6531,11 @@ all_packages_source_files = \
gnu/gcj/util.list \
gnu/java/awt.list \
gnu/java/awt/color.list \
+ gnu/java/awt/font.list \
+ gnu/java/awt/font/opentype.list \
+ gnu/java/awt/font/opentype/truetype.list \
gnu/java/awt/image.list \
+ gnu/java/awt/java2d.list \
gnu/java/awt/peer.list \
gnu/java/io.list \
gnu/java/lang.list \
@@ -6287,6 +6543,7 @@ all_packages_source_files = \
gnu/java/locale.list \
gnu/java/math.list \
gnu/java/net.list \
+ gnu/java/net/local.list \
gnu/java/net/protocol/file.list \
gnu/java/net/protocol/ftp.list \
gnu/java/net/protocol/http.list \
@@ -6296,6 +6553,7 @@ all_packages_source_files = \
gnu/java/nio/channels.list \
gnu/java/nio/charset.list \
gnu/java/rmi.list \
+ gnu/java/rmi/activation.list \
gnu/java/rmi/dgc.list \
gnu/java/rmi/registry.list \
gnu/java/rmi/server.list \
@@ -6321,6 +6579,7 @@ all_packages_source_files = \
gnu/java/security/x509/ext.list \
gnu/java/text.list \
gnu/java/util.list \
+ gnu/java/util/jar.list \
gnu/java/util/prefs.list \
gnu/javax/crypto.list \
gnu/javax/crypto/assembly.list \
@@ -6350,13 +6609,23 @@ all_packages_source_files = \
gnu/javax/imageio/bmp.list \
gnu/javax/net/ssl.list \
gnu/javax/net/ssl/provider.list \
+ gnu/javax/print.list \
+ gnu/javax/print/ipp.list \
+ gnu/javax/print/ipp/attribute.list \
+ gnu/javax/print/ipp/attribute/defaults.list \
+ gnu/javax/print/ipp/attribute/job.list \
+ gnu/javax/print/ipp/attribute/printer.list \
+ gnu/javax/print/ipp/attribute/supported.list \
gnu/javax/security/auth.list \
gnu/javax/security/auth/callback.list \
gnu/javax/security/auth/login.list \
+ gnu/javax/swing/plaf/gnu.list \
+ gnu/javax/swing/plaf/metal.list \
gnu/javax/swing/text/html/parser.list \
gnu/javax/swing/text/html/parser/models.list \
gnu/javax/swing/text/html/parser/support.list \
gnu/javax/swing/text/html/parser/support/low.list \
+ gnu/javax/swing/tree.list \
gnu/regexp.list \
java/applet.list \
java/awt.list \
@@ -6378,6 +6647,7 @@ all_packages_source_files = \
java/io.list \
java/lang.list \
java/lang/annotation.list \
+ java/lang/instrument.list \
java/lang/ref.list \
java/lang/reflect.list \
java/math.list \
@@ -6423,6 +6693,7 @@ all_packages_source_files = \
javax/print/event.list \
javax/security/auth.list \
javax/security/auth/callback.list \
+ javax/security/auth/kerberos.list \
javax/security/auth/login.list \
javax/security/auth/spi.list \
javax/security/auth/x500.list \
@@ -6474,7 +6745,11 @@ ordinary_header_files = \
$(gnu_gcj_util_header_files) \
$(gnu_java_awt_header_files) \
$(gnu_java_awt_color_header_files) \
+ $(gnu_java_awt_font_header_files) \
+ $(gnu_java_awt_font_opentype_header_files) \
+ $(gnu_java_awt_font_opentype_truetype_header_files) \
$(gnu_java_awt_image_header_files) \
+ $(gnu_java_awt_java2d_header_files) \
$(gnu_java_awt_peer_header_files) \
$(gnu_java_io_header_files) \
$(gnu_java_lang_header_files) \
@@ -6482,6 +6757,7 @@ ordinary_header_files = \
$(gnu_java_locale_header_files) \
$(gnu_java_math_header_files) \
$(gnu_java_net_header_files) \
+ $(gnu_java_net_local_header_files) \
$(gnu_java_net_protocol_file_header_files) \
$(gnu_java_net_protocol_ftp_header_files) \
$(gnu_java_net_protocol_http_header_files) \
@@ -6491,6 +6767,7 @@ ordinary_header_files = \
$(gnu_java_nio_channels_header_files) \
$(gnu_java_nio_charset_header_files) \
$(gnu_java_rmi_header_files) \
+ $(gnu_java_rmi_activation_header_files) \
$(gnu_java_rmi_dgc_header_files) \
$(gnu_java_rmi_registry_header_files) \
$(gnu_java_rmi_server_header_files) \
@@ -6516,6 +6793,7 @@ ordinary_header_files = \
$(gnu_java_security_x509_ext_header_files) \
$(gnu_java_text_header_files) \
$(gnu_java_util_header_files) \
+ $(gnu_java_util_jar_header_files) \
$(gnu_java_util_prefs_header_files) \
$(gnu_javax_crypto_header_files) \
$(gnu_javax_crypto_assembly_header_files) \
@@ -6545,13 +6823,23 @@ ordinary_header_files = \
$(gnu_javax_imageio_bmp_header_files) \
$(gnu_javax_net_ssl_header_files) \
$(gnu_javax_net_ssl_provider_header_files) \
+ $(gnu_javax_print_header_files) \
+ $(gnu_javax_print_ipp_header_files) \
+ $(gnu_javax_print_ipp_attribute_header_files) \
+ $(gnu_javax_print_ipp_attribute_defaults_header_files) \
+ $(gnu_javax_print_ipp_attribute_job_header_files) \
+ $(gnu_javax_print_ipp_attribute_printer_header_files) \
+ $(gnu_javax_print_ipp_attribute_supported_header_files) \
$(gnu_javax_security_auth_header_files) \
$(gnu_javax_security_auth_callback_header_files) \
$(gnu_javax_security_auth_login_header_files) \
+ $(gnu_javax_swing_plaf_gnu_header_files) \
+ $(gnu_javax_swing_plaf_metal_header_files) \
$(gnu_javax_swing_text_html_parser_header_files) \
$(gnu_javax_swing_text_html_parser_models_header_files) \
$(gnu_javax_swing_text_html_parser_support_header_files) \
$(gnu_javax_swing_text_html_parser_support_low_header_files) \
+ $(gnu_javax_swing_tree_header_files) \
$(gnu_regexp_header_files) \
$(java_applet_header_files) \
$(java_awt_header_files) \
@@ -6573,6 +6861,7 @@ ordinary_header_files = \
$(java_io_header_files) \
$(java_lang_header_files) \
$(java_lang_annotation_header_files) \
+ $(java_lang_instrument_header_files) \
$(java_lang_ref_header_files) \
$(java_lang_reflect_header_files) \
$(java_math_header_files) \
@@ -6618,6 +6907,7 @@ ordinary_header_files = \
$(javax_print_event_header_files) \
$(javax_security_auth_header_files) \
$(javax_security_auth_callback_header_files) \
+ $(javax_security_auth_kerberos_header_files) \
$(javax_security_auth_login_header_files) \
$(javax_security_auth_spi_header_files) \
$(javax_security_auth_x500_header_files) \
@@ -8671,6 +8961,36 @@ gnu/java/awt/color.list: $(gnu_java_awt_color_source_files)
-include gnu/java/awt/color.deps
+gnu/java/awt/font.list: $(gnu_java_awt_font_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font.list
+
+-include gnu/java/awt/font.deps
+
+gnu/java/awt/font/opentype.list: $(gnu_java_awt_font_opentype_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_opentype_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font/opentype.list
+
+-include gnu/java/awt/font/opentype.deps
+
+gnu/java/awt/font/opentype/truetype.list: $(gnu_java_awt_font_opentype_truetype_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_opentype_truetype_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font/opentype/truetype.list
+
+-include gnu/java/awt/font/opentype/truetype.deps
+
gnu/java/awt/image.list: $(gnu_java_awt_image_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_java_awt_image_source_files); do \
@@ -8681,6 +9001,16 @@ gnu/java/awt/image.list: $(gnu_java_awt_image_source_files)
-include gnu/java/awt/image.deps
+gnu/java/awt/java2d.list: $(gnu_java_awt_java2d_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_java2d_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/java2d.list
+
+-include gnu/java/awt/java2d.deps
+
gnu/java/awt/peer.list: $(gnu_java_awt_peer_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_java_awt_peer_source_files); do \
@@ -8771,6 +9101,16 @@ gnu/java/net.list: $(gnu_java_net_source_files)
-include gnu/java/net.deps
+gnu/java/net/local.list: $(gnu_java_net_local_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_net_local_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/net/local.list
+
+-include gnu/java/net/local.deps
+
gnu/java/net/protocol/file.list: $(gnu_java_net_protocol_file_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_java_net_protocol_file_source_files); do \
@@ -8861,6 +9201,16 @@ gnu/java/rmi.list: $(gnu_java_rmi_source_files)
-include gnu/java/rmi.deps
+gnu/java/rmi/activation.list: $(gnu_java_rmi_activation_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_rmi_activation_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/rmi/activation.list
+
+-include gnu/java/rmi/activation.deps
+
gnu/java/rmi/dgc.list: $(gnu_java_rmi_dgc_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_java_rmi_dgc_source_files); do \
@@ -9111,6 +9461,16 @@ gnu/java/util.list: $(gnu_java_util_source_files)
-include gnu/java/util.deps
+gnu/java/util/jar.list: $(gnu_java_util_jar_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_util_jar_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/util/jar.list
+
+-include gnu/java/util/jar.deps
+
gnu/java/util/prefs.list: $(gnu_java_util_prefs_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_java_util_prefs_source_files); do \
@@ -9401,6 +9761,76 @@ gnu/javax/net/ssl/provider.list: $(gnu_javax_net_ssl_provider_source_files)
-include gnu/javax/net/ssl/provider.deps
+gnu/javax/print.list: $(gnu_javax_print_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print.list
+
+-include gnu/javax/print.deps
+
+gnu/javax/print/ipp.list: $(gnu_javax_print_ipp_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp.list
+
+-include gnu/javax/print/ipp.deps
+
+gnu/javax/print/ipp/attribute.list: $(gnu_javax_print_ipp_attribute_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute.list
+
+-include gnu/javax/print/ipp/attribute.deps
+
+gnu/javax/print/ipp/attribute/defaults.list: $(gnu_javax_print_ipp_attribute_defaults_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_defaults_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/defaults.list
+
+-include gnu/javax/print/ipp/attribute/defaults.deps
+
+gnu/javax/print/ipp/attribute/job.list: $(gnu_javax_print_ipp_attribute_job_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_job_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/job.list
+
+-include gnu/javax/print/ipp/attribute/job.deps
+
+gnu/javax/print/ipp/attribute/printer.list: $(gnu_javax_print_ipp_attribute_printer_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_printer_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/printer.list
+
+-include gnu/javax/print/ipp/attribute/printer.deps
+
+gnu/javax/print/ipp/attribute/supported.list: $(gnu_javax_print_ipp_attribute_supported_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_supported_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/supported.list
+
+-include gnu/javax/print/ipp/attribute/supported.deps
+
gnu-javax-rmi.lo: $(gnu_javax_rmi_source_files)
@find classpath/lib/gnu/javax/rmi -name '*.class' > gnu-javax-rmi.list
$(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-rmi.lo @gnu-javax-rmi.list
@@ -9441,6 +9871,26 @@ gnu-javax-sound-midi.lo: $(gnu_javax_sound_midi_source_files)
$(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list
@rm -f gnu-javax-sound-midi.list
+gnu/javax/swing/plaf/gnu.list: $(gnu_javax_swing_plaf_gnu_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_plaf_gnu_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/plaf/gnu.list
+
+-include gnu/javax/swing/plaf/gnu.deps
+
+gnu/javax/swing/plaf/metal.list: $(gnu_javax_swing_plaf_metal_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_plaf_metal_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/plaf/metal.list
+
+-include gnu/javax/swing/plaf/metal.deps
+
gnu/javax/swing/text/html/parser.list: $(gnu_javax_swing_text_html_parser_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_javax_swing_text_html_parser_source_files); do \
@@ -9481,6 +9931,16 @@ gnu/javax/swing/text/html/parser/support/low.list: $(gnu_javax_swing_text_html_p
-include gnu/javax/swing/text/html/parser/support/low.deps
+gnu/javax/swing/tree.list: $(gnu_javax_swing_tree_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_tree_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/tree.list
+
+-include gnu/javax/swing/tree.deps
+
gnu/regexp.list: $(gnu_regexp_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(gnu_regexp_source_files); do \
@@ -9696,6 +10156,16 @@ java/lang/annotation.list: $(java_lang_annotation_source_files)
-include java/lang/annotation.deps
+java/lang/instrument.list: $(java_lang_instrument_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(java_lang_instrument_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > java/lang/instrument.list
+
+-include java/lang/instrument.deps
+
java/lang/ref.list: $(java_lang_ref_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(java_lang_ref_source_files); do \
@@ -10156,6 +10626,16 @@ javax/security/auth/callback.list: $(javax_security_auth_callback_source_files)
-include javax/security/auth/callback.deps
+javax/security/auth/kerberos.list: $(javax_security_auth_kerberos_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(javax_security_auth_kerberos_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > javax/security/auth/kerberos.list
+
+-include javax/security/auth/kerberos.deps
+
javax/security/auth/login.list: $(javax_security_auth_login_source_files)
@$(mkinstalldirs) $(dir $@)
@for file in $(javax_security_auth_login_source_files); do \
diff --git a/libjava/classpath/.cdtproject b/libjava/classpath/.cdtproject
deleted file mode 100644
index 2ec939f..0000000
--- a/libjava/classpath/.cdtproject
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version='1.0'?>
-<?eclipse-cdt version="2.0"?>
-<cdtproject/> \ No newline at end of file
diff --git a/libjava/classpath/.classpath b/libjava/classpath/.classpath
deleted file mode 100644
index 60e126d..0000000
--- a/libjava/classpath/.classpath
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry excluding=".externalToolBuilders/|.settings/|ChangeLog*|Makefile*|autom4te.cache/|compat/|config*|doc/|examples/|external/|gnu/javax/swing/plaf/|include/|install/|lib/|m4/|native/|resource/|scripts/|test/|testsuite/|vm/reference/|tools/|external/relaxngDatatype/" kind="src" path=""/>
- <classpathentry kind="src" path="external/relaxngDatatype"/>
- <classpathentry kind="src" path="tools"/>
- <classpathentry kind="src" path="resource"/>
- <classpathentry kind="src" path="vm/reference"/>
- <classpathentry kind="src" path="external/sax"/>
- <classpathentry kind="src" path="external/w3c_dom"/>
- <classpathentry kind="src" path="examples"/>
- <classpathentry kind="output" path="install/share/classpath"/>
-</classpath>
diff --git a/libjava/classpath/.externalToolBuilders/Autogen.launch b/libjava/classpath/.externalToolBuilders/Autogen.launch
deleted file mode 100644
index a6051b1..0000000
--- a/libjava/classpath/.externalToolBuilders/Autogen.launch
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version='1.0'?>
-<launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,auto,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/external/sax/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/external/w3c_dom/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/java.net/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/java-nio/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/midi-dssi/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/vmi/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/java.util/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/target/generic/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/lib/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/fdlibm/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/target/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/target/Linux/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/examples/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jawt/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/gtk-peer/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/classpath/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/midi-alsa/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/java.lang.reflect/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/java.io/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/external/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/xmlj/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/compat/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/qt-peer/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/vm/reference/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/java-util/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/test/gnu.java.lang.reflect/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/configure.ac&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/compat/java.net/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/include/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/java-lang/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/java-io/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/doc/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/gnu/test/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/doc/api/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/testsuite/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/java-net/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/vm/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native/jni/Makefile.am&quot; type=&quot;1&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='/bin/sh'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='./autogen.sh'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration> \ No newline at end of file
diff --git a/libjava/classpath/.externalToolBuilders/ClasspathHeaders.launch b/libjava/classpath/.externalToolBuilders/ClasspathHeaders.launch
deleted file mode 100644
index 0c84817..0000000
--- a/libjava/classpath/.externalToolBuilders/ClasspathHeaders.launch
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version='1.0'?>
-<launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,auto,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/include/Makefile&quot; type=&quot;1&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${system_path:make}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='-C ${build_project}/include CLASSDIR=install/share/classpath USER_CLASSLIB=../install/share/classpath all install'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration> \ No newline at end of file
diff --git a/libjava/classpath/.externalToolBuilders/ClasspathJar.launch b/libjava/classpath/.externalToolBuilders/ClasspathJar.launch
deleted file mode 100644
index e58a58b..0000000
--- a/libjava/classpath/.externalToolBuilders/ClasspathJar.launch
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/install/share/classpath&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-cf glibj.zip META-INF java gnu org javax vm"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project:install/share/classpath}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${system_path:jar}"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-</launchConfiguration>
diff --git a/libjava/classpath/.externalToolBuilders/CompileNative.launch b/libjava/classpath/.externalToolBuilders/CompileNative.launch
deleted file mode 100644
index c6a6b9f..0000000
--- a/libjava/classpath/.externalToolBuilders/CompileNative.launch
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version='1.0'?>
-<launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;working set&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,auto,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/native&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${system_path:make}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='-C ${build_project}/native all install'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration> \ No newline at end of file
diff --git a/libjava/classpath/.externalToolBuilders/Configure.launch b/libjava/classpath/.externalToolBuilders/Configure.launch
deleted file mode 100644
index 96bcda0..0000000
--- a/libjava/classpath/.externalToolBuilders/Configure.launch
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version='1.0'?>
-<launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,auto,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;workingSet&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/Makefile.in&quot; type=&quot;1&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${build_project}/configure'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='--prefix=${build_project}/install --enable-regen-headers --enable-gtk-cairo'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration> \ No newline at end of file
diff --git a/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch b/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch
deleted file mode 100644
index ff11b3c..0000000
--- a/libjava/classpath/.externalToolBuilders/CreateLocaleData.launch
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version='1.0'?>
-<launchConfiguration type='org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType'><stringAttribute key='org.eclipse.debug.core.ATTR_REFRESH_SCOPE' value='${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; name=&quot;working set&quot; editPageId=&quot;org.eclipse.ui.resourceWorkingSetPage&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/classpath/java/util&quot; type=&quot;2&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS' value='full,incremental,'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_LOCATION' value='${system_path:make}'/><booleanAttribute key='org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED' value='true'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY' value='${build_project}'/><stringAttribute key='org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS' value='-C ${build_project}/lib ../java/util/LocaleData.java'/><booleanAttribute key='org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND' value='false'/><booleanAttribute key='org.eclipse.debug.core.appendEnvironmentVariables' value='true'/></launchConfiguration> \ No newline at end of file
diff --git a/libjava/classpath/.project b/libjava/classpath/.project
deleted file mode 100644
index ebc689d..0000000
--- a/libjava/classpath/.project
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>classpath</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>auto,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/Autogen.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>auto,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/Configure.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/CreateLocaleData.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>auto,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/ClasspathHeaders.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>auto,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/CompileNative.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>auto,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
- <value>&lt;project&gt;/.externalToolBuilders/ClasspathJar.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/libjava/classpath/.settings/org.eclipse.core.resources.prefs b/libjava/classpath/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index e1373e6..0000000
--- a/libjava/classpath/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon Sep 20 12:53:19 MDT 2004
-eclipse.preferences.version=1
-encoding/ChangeLog=ISO-8859-1
diff --git a/libjava/classpath/.settings/org.eclipse.jdt.core.prefs b/libjava/classpath/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 849b3a1..0000000
--- a/libjava/classpath/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,306 +0,0 @@
-#Tue Feb 07 05:21:36 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=ignore
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.4
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=18
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=18
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=18
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=18
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=18
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=82
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=18
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=18
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=17
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=17
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=1
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=2
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line_shifted
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line_shifted
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true
-org.eclipse.jdt.core.formatter.comment.format_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=80
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=2
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs b/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 05d8922..0000000
--- a/libjava/classpath/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-#Sat Sep 17 22:04:29 MDT 2005
-eclipse.preferences.version=1
-formatter_settings_version=8
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates><template id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment" description\="Comment for getter method" context\="gettercomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @return Returns the ${bare_field_name}.\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment" description\="Comment for setter method" context\="settercomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @param ${param} The ${bare_field_name} to set.\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment" description\="Comment for created constructors" context\="constructorcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment" description\="Comment for created Java files" context\="filecomment_context" enabled\="true" deleted\="false" autoinsert\="false">/* ${file_name} -- FIXME describe the file briefly\n Copyright (C) ${year} Free Software Foundation, Inc.\n\nThis file is part of GNU Classpath.\n\nGNU Classpath is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nGNU Classpath is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with GNU Classpath; see the file COPYING. If not, write to the\nFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301 USA.\n\nLinking this library statically or dynamically with other modules is\nmaking a combined work based on this library. Thus, the terms and\nconditions of the GNU General Public License cover the whole\ncombination.\n\nAs a special exception, the copyright holders of this library give you\npermission to link this library with independent modules to produce an\nexecutable, regardless of the license terms of these independent\nmodules, and to copy and distribute the resulting executable under\nterms of your choice, provided that you also meet, for each linked\nindependent module, the terms and conditions of the license of that\nmodule. An independent module is a module which is not derived from\nor based on this library. If you modify this library, you may extend\nthis exception to your version of the library, but you are not\nobligated to do so. If you do not wish to do so, delete this\nexception statement from your version. */\n\n\n</template><template id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment" description\="Comment for created types" context\="typecomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment" description\="Comment for fields" context\="fieldcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * \n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment" description\="Comment for non-overriding methods" context\="methodcomment_context" enabled\="true" deleted\="false" autoinsert\="true">/**\n * ${tags}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment" description\="Comment for overriding methods" context\="overridecomment_context" enabled\="true" deleted\="false" autoinsert\="true">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype" description\="Newly created files" context\="newtype_context" enabled\="true" deleted\="false" autoinsert\="false">/* ${file_name} -- FIXME\: briefly describe file purpose\n Copyright (C) ${year} Free Software Foundation, Inc.\n\nThis file is part of GNU Classpath.\n\nGNU Classpath is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nGNU Classpath is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with GNU Classpath; see the file COPYING. If not, write to the\nFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301 USA.\n\nLinking this library statically or dynamically with other modules is\nmaking a combined work based on this library. Thus, the terms and\nconditions of the GNU General Public License cover the whole\ncombination.\n\nAs a special exception, the copyright holders of this library give you\npermission to link this library with independent modules to produce an\nexecutable, regardless of the license terms of these independent\nmodules, and to copy and distribute the resulting executable under\nterms of your choice, provided that you also meet, for each linked\nindependent module, the terms and conditions of the license of that\nmodule. An independent module is a module which is not derived from\nor based on this library. If you modify this library, you may extend\nthis exception to your version of the library, but you are not\nobligated to do so. If you do not wish to do so, delete this\nexception statement from your version. */\n\n\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock" description\="Code in new catch blocks" context\="catchblock_context" enabled\="true" deleted\="false" autoinsert\="true">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody" description\="Code in created method stubs" context\="methodbody_context" enabled\="true" deleted\="false" autoinsert\="true">// ${todo} Auto-generated method stub\n${body_statement}</template><template id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody" description\="Code in created constructor stubs" context\="constructorbody_context" enabled\="true" deleted\="false" autoinsert\="true">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody" description\="Code in created getters" context\="getterbody_context" enabled\="true" deleted\="false" autoinsert\="true">return ${field};</template><template id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody" description\="Code in created setters" context\="setterbody_context" enabled\="true" deleted\="false" autoinsert\="true">${field} \= ${param};</template></templates>
diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog
index f9b56b9..e19fd8e 100644
--- a/libjava/classpath/ChangeLog
+++ b/libjava/classpath/ChangeLog
@@ -1,7 +1,7977 @@
+2006-05-15 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (VERSION): Set to 0.91.
+
+2006-05-15 Mark Wielaard <mark@klomp.org>
+
+ * NEWS: Add release date and VMClassLoader.getBootPackages()
+ changes.
+
+2006-05-15 Christian Thalinger <twisti@complang.tuwien.ac.at>
+
+ * README: Added CACAO to list of VMs.
+
+2006-05-14 Mark Wielaard <mark@klomp.org>
+
+ * native/jni/java-net/javanet.c (_javanet_accept): Don't use C++
+ comments.
+
+2006-05-14 Chris Burdess <dog@gnu.org>
+
+ * gnu/xml/dom/DomNode.java: Permit comments and PIs in doctype
+ nodes to be preserved during cloneNode.
+
+2006-05-14 Mark Wielaard <mark@klomp.org>
+
+ PR 27459
+ * native/jni/java-net/javanet.c (_javanet_accept): Reset the
+ inherited timeout on socket.
+
+2006-05-14 Lillian Angel <langel@redhat.com>
+
+ * java/util/SimpleTimeZone.java: Reverted patch.
+ (SimpleTimeZone): Throw exception if startMonth ==
+ endMonth.
+ (SimpleTimeZone): Likewise.
+ (checkRule): Rewritten to properly check all values (more
+ efficently).
+ This code is now more stable, at least less buggy than before.
+ Fixed API documentation.
+ (setStartRule): Moved checkRule call to end.
+ (setStartRule): Likewise.
+ (setEndRule): Likewise.
+ (setEndRule): Likewise.
+
+2006-05-14 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/DefaultTreeSelectionModel.java (leadRow):
+ Initialise to -1.
+
+2006-05-14 Robert Schuster <robertschuster@fsfe.org>
+
+ PR classpath/27595
+ * javax/swing/text/AbstractDocument.java:
+ (insertString): Flipped if-expression and its blocks.
+ (remove): Dito.
+ (replace): Flipped if-expression and its blocks, added note, invoke
+ insertString and remove instead of insertStringImpl and removeImpl.
+
+2006-05-13 Tom Tromey <tromey@redhat.com>
+
+ * java/nio/ByteBufferImpl.java (compact): Always set position.
+
+2006-05-11 Mark Wielaard <mark@klomp.org>
+
+ * java/util/logging/Logger.java (global): Initialize inside static
+ PrivilegedAction.
+
+2006-05-11 Mark Wielaard <mark@klomp.org>
+
+ * java/awt/geom/GeneralPath.java (WIND_EVEN_ODD, WIND_NON_ZERO):
+ Fully qualify PathIterator constants
+
+2006-05-10 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27481
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java
+ (installDefaults): Set background of content pane to null, if
+ no custom color has been installed by the application yet.
+
+2006-05-10 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27481
+ * javax/swing/JRootPane.java
+ (createContentPane): Don't set background to null.
+
+2006-05-09 Robert Schuster <robertschuster@fsfe.org>
+
+ PR classpath/24216
+ * javax/swing/text/AbstractDocument.java:
+ (insertString): Added more documentation, added argument check.
+ (remove): Added more documentation.
+ (removeImpl): Added argument check.
+ (replace): Added more documentation, added argument check.
+
+2006-05-08 Lillian Angel <langel@redhat.com>
+
+ * java/net/URLClassLoader.java
+ (JarURLLoader): Added check to make sure the INDEX.LIST file
+ exists.
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27481
+ * javax/swing/JRootPane.java
+ (createContentPane): Set background of the content pane to null,
+ so that the content pane inherits its background from the
+ root pane.
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27480
+ * javax/swing/ButtonGroup.java
+ (add): Check if new button is selected and if so, deselect other
+ buttons in the group.
+
+2006-05-08 Lillian Angel <langel@redhat.com>
+
+ PR 27444
+ * java/net/URLClassLoader.java
+ (JarURLLoader): Added code to go through
+ META-INF/INDEX.LIST file to load all jars listed.
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27461
+ * javax/swing/ImageIcon.java
+ (ImageIcon(URL)): Set description to URL.toString().
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27482
+ * javax/swing/JTable.java
+ (IconCellRenderer.getTableCellRendererComponent): Set icon to
+ null when cell value is null.
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27484
+ * javax/swing/DefaultDesktopManager.java
+ (closeFrame): Don't perform default close action on the frame
+ to prevent endless loop.
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27485
+ * javax/swing/table/DefaultTableModel.java
+ (addExtraRows): New helper method.
+ (checkSize): New helper method.
+ (setRowCount): Use addExtraRows helper method.
+ (addColumn): Use addExtraRows helper method.
+ (getColumnName): Check and adjust size if necessary using
+ checkSize().
+
+2006-05-08 Roman Kennke <kennke@aicas.com>
+
+ PR classpath/27486
+ * javax/swing/JTable.java
+ (setValueAt): Allow setting values even when table is editable.
+
+2006-05-07 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ PR classpath/27435:
+ * java/util/zip/DeflaterEngine.java:
+ (deflateFast(boolean,boolean)): Empty buffer when full.
+
+2006-05-07 Sven de Marothy <sven@physto.se>
+
+ Fixed PR27343
+ * java/util/Calendar.java (setTimeZone): Force recalculation.
+
+2006-05-07 Sven de Marothy <sven@physto.se>
+
+ Fixed PR27463
+ * javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+ (propertyChange): Handle FRAME_ICON_PROPERTY property.
+
+2006-05-06 Sven de Marothy <sven@physto.se>
+
+ Fixed PR27454
+ * gnu/java/awt/peer/gtk/GtkImage: (drawPixels,drawPixelsScaled):
+ Check for zero image sizes.
+
+2006-05-07 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ PR classpath/27311:
+ * gnu/java/text/StringFormatBuffer.java:
+ (toString()): Implemented so we can see the contents.
+ * java/text/DecimalFormat.java:
+ (formatInternal(double,StringFormatBuffer,FieldPosition)):
+ Don't calculate the exponent when the number is 0 or less.
+ Also, use log10 instead of log now it's available.
+
+2006-05-07 Sven de Marothy <sven@physto.se>
+
+ Fixed PR27455
+ * gnu/java/awt/peer/GLightweightPeer.java (mouseEntered): Remove.
+ * java/awt/Component.java (processMouseEvent):
+ Do lightweight cursor handling.
+ * javax/swing/plaf/basic/BasicTableHeaderUI.java
+ (endResizing,mouseMoved): Save and reset original cursor, not the
+ default one.
+
+2006-05-07 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/RasterGraphics.java: New file.
+
+2006-05-07 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AbstractGraphics2D.java
+ (fillShape): Determine user space bounds of shape and feed them
+ into the actual rendering pipeline.
+ (rawSetPixel): Made non-abstract for now. Maybe remove later.
+ (rawSetForeground): Likewise.
+ (getDestinationColorModel): Removed.
+ (getDeviceBounds): Made non-abstract. Provide useful default impl.
+ (rawFillShape): Handle paint context.
+ (fillScanline): Implement painting and compositing.
+ (fillShapeAntialias): Handle paint context.
+ (fillScanlineAA): Implemented preliminary antialiasing based on
+ composite context. Not working yet.
+ (fillScanlineAlpha): Removed.
+ (init): Fetch destination raster.
+ (getDestinationRaster): New abstract method.
+ (updateRaster): New backend method.
+
+2006-05-07 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AlphaCompositeContext.java
+ (compose): Fixed loops, conditions and logic to make compositing
+ work correctly.
+
+2006-05-05 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/image/ColorModel.java
+ (getNormalizedComponents): Implemented.
+
+2006-05-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicRadioButtonUI.java
+ (paint): Query the button model for it's state, not the
+ button itself.
+
+2006-05-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTable.java
+ (tableChanged): Sync selection model with table model changes.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicButtonListener.java
+ (mouseEntered): Fixed conditions for changing states.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JOptionPane.java
+ (AccessibleJOptionPane.getAccessibleRole): Implemented method.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JLabel.java
+ (AccessibleJLabel.getSelectedText): Return null instead of "".
+ (AccessibleJLabel.getSelectionStart): Added comment why
+ return -1 is correct here.
+ (AccessibleJLabel.getSelectionEnd): Added comment why
+ return -1 is correct here.
+ (AccessibleJLabel.getCharacterAttribute): Added comment about
+ what to do here.
+ (AccessibleJLabel.getCharCount): Added comment about what
+ to do here.
+ (AccessibleJLabel.getCharacterBounds): Tagged as not
+ implemented.
+ (AccessibleJLabel.getIndexAtPoint): Tagged as not implemented.
+ (paramString): Return super.paramString() here, this provides
+ a more meaningful output.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComponent.java
+ (paint): Added null check to avoid NPE when clip == null.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractButton.java
+ (addImpl): New method. Installs an OverlayLayout if no
+ other layout has been installed before.
+ (setLayout): New method. Detect if a client app installs a
+ custom layout.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/table/DefaultTableCellModel.java
+ (noFocusBorder): Fixed width of empty border to 1.
+ (getTableCellRendererComponent): Don't change the colors for
+ focuses cells. Fixed border for focused cells.
+
+2006-05-04 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTable.java
+ (moveToCellBeingEdited): Adjust bounding box
+ of editing component to exactly cover the grid.
+ * javax/swing/plaf/basic/BasicTableUI.java
+ (paint): Paint grid to the bottom and right of
+ the cells instead of left and top. Adjust bounding
+ box of cells accordingly.
+ * javax/swing/plaf/metal/MetalLookAndFeel.java
+ (initComponentDefaults): Fixed color of JTable
+ selection border.
+ * javax/swing/plaf/metal/OceanTheme.java
+ (addCustomEntriesToTable): Fixed color of JTable
+ selection border.
+
+2006-05-04 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/keytool/ExportCmd.java (setup):
+ Use _alias instead of alias.
+
+2006-05-04 Lillian Angel <langel@redhat.com>
+
+ * javax/swing/JLabel.java
+ (JLabel): Pass in an empty string for the text parameter.
+ (JLabel): Likewise.
+ (JLabel): Likewise.
+
+2006-05-05 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java (paint): Return early
+ if there are no visible nodes to paint.
+
+2006-05-03 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * include/Makefile.am:
+ Added rules for gnu.java.net.local.LocalSocketImpl.h
+ * include/java_lang_VMSystem.h:
+ Regenerated correctly.
+
+2006-05-03 Sven de Marothy <sven@physto.se>
+
+ PR 24023, 24701
+ * java/awt/Image.java:
+ (getScaledInstance): Default to AreaAveraging for "smooth",
+ don't thrown an error on illegal flag values.
+ * java/awt/image/AreaAveragingScaleFilter.java: Implement.
+
+2006-05-03 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/FieldView.java:
+ (adjustAllocation): Added if-block to return null when shape argument
+ is null.
+ * javax/swing/text/PlainView.java:
+ (updateDamage): Added if-block to return early if a is null.
+
+2006-05-03 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (changeUpdate): Added note.
+ (removeUpdate): Dito.
+ (insertUpdate): Dito.
+ (damageRange): Added if-block to return early.
+ (modelToView): Added check of getVisibleEditorRect's return value.
+ (getVisibleEditorRect): Return null instead of empty rectangle.
+ * javax/swing/text/DefaultCaret.java:
+ (clearHighlight): Removed if-clause to create a highlight entry if it
+ did not exist before.
+ * javax/swing/text/WrappedPlainView.java:
+ (WrappedLine.modelToView): Throw exception if allocation area is empty,
+ removed 2nd part of if-expression.
+ (WrappedLine.updateDamage): Added more documentation, added check
+ whether allocation area rectangle is null.
+
+2006-05-03 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JSplitPane.java (setDividerLocation(int)):
+ Reset to preferred sizes if the argument is negative.
+
+2006-05-03 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JList.java: Added/updated API docs.
+
+2006-05-03 Lillian Angel <langel@redhat.com>
+
+ * javax/swing/JComponent.java
+ (getRoot): New private function. Gets the root appropriate
+ for painting. If an applet exists as a parent, then it is returned.
+ (paintDoubleBuffered): Changed to use new function.
+ * javax/swing/RepaintManager.java
+ (getRoot): New private function. Gets the root appropriate
+ for painting. If an applet exists as a parent, then it is returned.
+ (getOffscreenBuffer): Changed to use new function.
+ * javax/swing/SwingUtilties.java
+ (getRoot): Reverted last patch to return Window, even if
+ an Applet exists.
+
+2006-05-03 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/javax/crypto/jce/keyring/GnuKeyring.java: Re-implemented using
+ a pair of one public keyring and one private keyring.
+ * gnu/javax/crypto/keyring/GnuPublicKeyring.java (log): New field.
+ (containsCertificate): Added logging.
+ (getCertificate): Likewise.
+ (putCertificate): Likewsie.
+ (load): Likewise.
+ (store): Likewise.
+ * gnu/javax/crypto/keyring/GnuPrivateKeyring.java (log): New field.
+ (containsPrivateKey): Added logging.
+ (getPrivateKey): Likewise.
+ (putPrivateKey): Likewise.
+ (containsPublicKey): Likewise.
+ (getPublicKey): Likewise.
+ (putPublicKey): Likewise.
+ (containsCertPath): Likewise.
+ (getCertPath): Likewise.
+ (putCertPath): Likewise.
+ (load): Likewise.
+ (store): Likewise.
+
+2006-05-03 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AlphaCompositeContext.java: New class.
+ * java/awt/AlphaComposite.java
+ (createContext): Implemented.
+
+2006-05-03 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/awt/peer/gtk/GdkGraphics2D.java (drawRaster):
+ Set the current color again after drawing the raster.
+
+2006-05-03 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/text/WrappedPlainView.java (WrappedLine.modelToView):
+ Do not check pos < currLineEnd if currLineStart == currLineEnd.
+
+2006-05-03 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/keytool/Command.java (getCallbackHandler):
+ Assign returned value to field handler.
+ * tools/gnu/classpath/tools/jarsigner/Main.java (getCallbackHandler):
+ Likewise.
+
+2006-05-02 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/ScrollPaneLayout.java (layoutContainer):
+ Return without action if there is no view in the viewport.
+ * javax/swing/text/WrappedPlainView.java
+ (WrappedLine.getPreferredSpan): If metrics == null, update
+ metrics.
+ * javax/swing/tree/DefaultTreeModel.java (constructors):
+ Do not call setRoot, assign the root node directly.
+
+2006-05-02 Lillian Angel <langel@redhat.com>
+
+ * javax/swing/SwingUtilities.java
+ (getRoot): Should return the Applet if it exists.
+ Only return the Window if an Applet has not been
+ encountered.
+
+2006-05-02 Lillian Angel <langel@redhat.com>
+
+ * gnu/javax/swing/text/html/parser/support/Parser.java
+ (readAttributes): Reverted Audrius' last patch. There is
+ a slight difference in code between the NUMTOKEN and SLASH case.
+
+2006-05-02 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/JTextComponent.java:
+ (setText): Throw InternalError from catch-block.
+ * javax/swing/text/GapContent.java:
+ (removed): Removed if-expression, changed '>' to '>='.
+
+2006-05-02 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AbstractGraphics2D.java
+ (AA_SAMPLING): New constant.
+ (alpha): New field. Used in the antialiasing renderer.
+ (edgeTable): New field. Used in the antialiasing renderer.
+ (AbstractGraphics2D): Initialize rendering hints wrt
+ anti-aliasing.
+ (draw): Clip after stroking. Commented out clipping for now,
+ it seems to be buggy.
+ (fill): Commented out clipping for now, it seems to be buggy.
+ (setComposite): Don't create composite context.
+ (setPaint): Only change paint when parameter is not null.
+ (translate): Call setClip() so subclasses can update their clip
+ too.
+ (clip): Call setClip() so subclasses can update their clip
+ too.
+ (drawGlyphVector): Added clipping, but left it commented out
+ because it's buggy.
+ (getClipBounds): Returns null when clip is null.
+ (drawLine): Call rawDrawLine with translation applied.
+ (filLRect): Call rawFillRect with translation applied.
+ (fillShape): Added support for anti-aliasing.
+ (rawSetForeground(int,int,int)): New method.
+ (rawFillShape): A couple of painting fixes.
+ (fillScanline): Implemented to call rawDrawLine.
+ (fillShapeAntialias): New method. Implements an anti-aliasing
+ shape filler.
+ (fillScanlineAA): New method. Used for the anti-aliasing
+ shape filler.
+ (fillScanlineAlpha): New method. Used for the anti-aliasing
+ shape filler.
+ (init): Initialize clip with the device bounds.
+ (updateOptimization): Fixed the optimization condition.
+
+2006-05-02 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/GapContent.java:
+ (GapContent): Restrict size argument by 2.
+ (insertString): Changed expression from >= to >.
+ (remove): Changed right side of expression to 'length - 1', changed
+ exception message.
+ (getChars): Throw exception if where below 0.
+ (replace): Replaced call to setPositionsInRange() with
+ resetMarksAtZero(), removed note.
+
+2006-05-02 Roman Kennke <kennke@aicas.com>
+
+ PR 27326
+ * javax/swing/MenuSelectionManager.java
+ (setSelectedPath): Rewritten.
+
+2006-05-02 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/javax/swing/text/html/parser/support/Parser.java
+ (readAttributes): Merge case NUMTOKEN: and case SLASH:
+ sections.
+
+2006-05-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/.cvsignore: Added keytool.sh.
+ * configure.ac: Added tools/keytool.sh to AC_CONFIG_FILES.
+
+2006-05-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * doc/tools.texinfo: New file.
+ * doc/Makefile.am: Generate tools documentation.
+
+2006-05-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/keytool.sh.in: New file.
+ * tools/gnu/classpath/tools/keytool/CertReqCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/Command.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/DeleteCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/ExportCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/GenKeyCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/IdentityDBCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/ImportCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/KeyCloneCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/KeyPasswdCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/ListCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/Main.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/Messages.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/PrintCertCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/SelfCertCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/StorePasswdCmd.java: Likewise.
+ * tools/gnu/classpath/tools/keytool/keytool.txt: Likewise.
+ * tools/gnu/classpath/tools/keytool/package.html: Likewise.
+ * resource/gnu/classpath/tools/keytool/MessageBundle.properties: Likewise.
+
+2006-05-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/jarsigner.txt: Re-arranged to
+ resemble more closely man-page style text.
+ * tools/gnu/classpath/tools/jarsigner/SFHelper.java:
+ Mark (Eclipse) strings that need not be externalised.
+ (writeSF): Likewise.
+ (writeDSA): Likewise.
+ Use package-private Messages class to provide i18n-ready strings.
+ (startSigning):
+ Use package-private Messages class to provide i18n-ready strings.
+ (updateEntry): Likewise.
+ Mark (Eclipse) strings that need not be externalised.
+ (finishSigning): Likewise.
+ * tools/gnu/classpath/tools/jarsigner/Main.java:
+ Mark (Eclipse) strings that need not be externalised.
+ (main): Do not use constant strings as class name.
+ Use package-private Messages class to provide i18n-ready strings.
+ Reduced logging level so INFO becomes FINER, and WARNING becomes FINE.
+ (processArgs): Do not use constant strings as class name.
+ Mark (Eclipse) strings that need not be externalised.
+ Reduced logging level so INFO becomes FINER, and WARNING becomes FINE.
+ (start): Do not use constant strings as class name.
+ (teardown): Likewise.
+ Use ProviderUtil.
+ (setupCommonParams): Do not use constant strings as class name.
+ Use package-private Messages class to provide i18n-ready strings.
+ Reduced logging level so INFO becomes FINER, and WARNING becomes FINE.
+ (installNewProvider): Do not use constant strings as class name.
+ Use ProviderUtil.
+ (setupSigningParams): Do not use constant strings as class name.
+ Use package-private Messages class to provide i18n-ready strings.
+ Mark (Eclipse) strings that need not be externalised.
+ (getCallbackHandler): Use CallbackUtil.
+ * tools/gnu/classpath/tools/jarsigner/JarSigner.java (start):
+ Use package-private Messages class to provide i18n-ready strings.
+ Reduced logging level so INFO becomes FINER, and WARNING becomes FINE.
+ * tools/gnu/classpath/tools/jarsigner/JarVerifier.java (start): Likewise.
+ (verifySF): Likewise.
+ (verifySFEntries): Do not use constant strings as class name.
+ Use Boolean.valueOf instead of new Boolean().
+ (verifySFEntry): Mark (Eclipse) strings that need not be externalised.
+ * resource/gnu/classpath/tools/jarsigner/MessageBundle.properties:
+ New file.
+ * tools/gnu/classpath/tools/jarsigner/package.html: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/Messages.java: Likewise.
+
+2006-05-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/common/CallbackUtil.java: New file.
+ * tools/gnu/classpath/tools/common/ProviderUtil.java: Likewise.
+ * tools/gnu/classpath/tools/common/SecurityProviderInfo.java: Likewise.
+
+2006-05-01 Tom Tromey <tromey@redhat.com>
+
+ * java/nio/ByteBufferImpl.java (compact): Don't reset position
+ in empty case.
+ * gnu/java/nio/ChannelReader.java (read): Synchronize.
+ (close): Synchronize.
+ * java/nio/ShortBufferImpl.java (compact): Rewrote.
+ * java/nio/LongBufferImpl.java (compact): Rewrote.
+ * java/nio/IntBufferImpl.java (compact): Rewrote.
+ * java/nio/FloatBufferImpl.java (compact): Rewrote.
+ * java/nio/DoubleBufferImpl.java (compact): Rewrote.
+ * java/nio/CharBufferImpl.java (compact): Rewrote.
+ * gnu/java/nio/ChannelWriter.java: New file.
+ * java/nio/channels/Channels.java (newWriter): Implemented.
+
+2006-05-01 Lillian Angel <langel@redhat.com>
+
+ * java/util/SimpleTimeZone.java
+ (SimpleTimeZone): Do not throw exception if startMonth == endMonth.
+ (SimpleTimeZone): Likewise.
+ (checkRule): Rewritten to properly check all values (more efficently).
+ This code is now more stable, at least less buggy than before. Fixed
+ API documentation.
+ (setStartRule): Moved checkRule call to end.
+ (setStartRule): Likewise.
+ (setEndRule): Likewise.
+ (setEndRule): Likewise.
+
+2006-05-01 Tom Tromey <tromey@redhat.com>
+
+ * lib/.cvsignore: Added classes.2.
+
+2006-05-01 Tom Tromey <tromey@redhat.com>
+
+ * java/util/jar/JarFile.java (provider): Now package-private.
+ * java/lang/Enum.java (compareTo): Javadoc fix.
+ * java/lang/Boolean.java (compareTo): Javadoc fix.
+
+2006-05-01 Lillian Angel <langel@redhat.com>
+
+ * gnu/javax/swing/text/html/parser/support/Parser.java
+ (readAttributes): Formatted function. Added handling for
+ SLASH token. The value of an attribute may start with a slash
+ (i.e. a path). I added handling similar to to the NUMTOKEN code.
+ We should not be skipping over these type of attributes.
+
+2006-04-30 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
+ * include/gnu_java_awt_peer_gtk_GdkFontPeer.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphics2D.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h,
+ * include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h,
+ * include/gnu_java_awt_peer_gtk_GdkRobotPeer.h,
+ * include/gnu_java_awt_peer_gtk_GdkTextLayout.h,
+ * include/gnu_java_awt_peer_gtk_GtkButtonPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkChoicePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkClipboard.h,
+ * include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkFramePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkGenericPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkImage.h,
+ * include/gnu_java_awt_peer_gtk_GtkLabelPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkListPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkPanelPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkSelection.h,
+ * include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkToolkit.h,
+ * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h,
+ * include/gnu_java_awt_peer_qt_MainQtThread.h,
+ * include/gnu_java_awt_peer_qt_QMatrix.h,
+ * include/gnu_java_awt_peer_qt_QPainterPath.h,
+ * include/gnu_java_awt_peer_qt_QPen.h,
+ * include/gnu_java_awt_peer_qt_QtAudioClip.h,
+ * include/gnu_java_awt_peer_qt_QtButtonPeer.h,
+ * include/gnu_java_awt_peer_qt_QtCanvasPeer.h,
+ * include/gnu_java_awt_peer_qt_QtCheckboxPeer.h,
+ * include/gnu_java_awt_peer_qt_QtChoicePeer.h,
+ * include/gnu_java_awt_peer_qt_QtComponentPeer.h,
+ * include/gnu_java_awt_peer_qt_QtContainerPeer.h,
+ * include/gnu_java_awt_peer_qt_QtDialogPeer.h,
+ * include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFileDialogPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFontMetrics.h,
+ * include/gnu_java_awt_peer_qt_QtFontPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFramePeer.h,
+ * include/gnu_java_awt_peer_qt_QtGraphics.h,
+ * include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h,
+ * include/gnu_java_awt_peer_qt_QtImage.h,
+ * include/gnu_java_awt_peer_qt_QtLabelPeer.h,
+ * include/gnu_java_awt_peer_qt_QtListPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuBarPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuItemPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuPeer.h,
+ * include/gnu_java_awt_peer_qt_QtPanelPeer.h,
+ * include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h,
+ * include/gnu_java_awt_peer_qt_QtScreenDevice.h,
+ * include/gnu_java_awt_peer_qt_QtScrollPanePeer.h,
+ * include/gnu_java_awt_peer_qt_QtScrollbarPeer.h,
+ * include/gnu_java_awt_peer_qt_QtTextAreaPeer.h,
+ * include/gnu_java_awt_peer_qt_QtTextFieldPeer.h,
+ * include/gnu_java_awt_peer_qt_QtToolkit.h,
+ * include/gnu_java_awt_peer_qt_QtVolatileImage.h,
+ * include/gnu_java_awt_peer_qt_QtWindowPeer.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h,
+ * include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h,
+ * include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h,
+ * include/gnu_xml_libxmlj_dom_GnomeAttr.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocument.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocumentType.h,
+ * include/gnu_xml_libxmlj_dom_GnomeElement.h,
+ * include/gnu_xml_libxmlj_dom_GnomeEntity.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNode.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNodeList.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNotation.h,
+ * include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h,
+ * include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathResult.h,
+ * include/gnu_xml_libxmlj_sax_GnomeLocator.h,
+ * include/gnu_xml_libxmlj_sax_GnomeXMLReader.h,
+ * include/gnu_xml_libxmlj_transform_GnomeTransformer.h,
+ * include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h,
+ * include/java_lang_VMProcess.h:
+ Regenerated.
+ * native/jni/java-lang/java_lang_VMProcess.c:
+ Redirect when pipe_count is 2 not 3.
+
+2006-04-30 Sascha Brawer <sascha@brawer.ch>
+
+ * gnu/java/awt/font/FontDelegate.java,
+ * gnu/java/awt/font/FontFactory.java,
+ * gnu/java/awt/font/GNUGlyphVector.java,
+ * gnu/java/awt/font/opentype/CharGlyphMap.java,
+ * gnu/java/awt/font/opentype/GlyphNamer.java,
+ * gnu/java/awt/font/opentype/MacResourceFork.java,
+ * gnu/java/awt/font/opentype/NameDecoder.java,
+ * gnu/java/awt/font/opentype/OpenTypeFont.java,
+ * gnu/java/awt/font/opentype/OpenTypeFontFactory.java,
+ * gnu/java/awt/font/opentype/Scaler.java,
+ * gnu/java/awt/font/opentype/truetype/Fixed.java,
+ * gnu/java/awt/font/opentype/truetype/GlyphLoader.java,
+ * gnu/java/awt/font/opentype/truetype/GlyphLocator.java,
+ * gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java,
+ * gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java,
+ * gnu/java/awt/font/opentype/truetype/VirtualMachine.java,
+ * gnu/java/awt/font/opentype/truetype/Zone.java,
+ * gnu/java/awt/font/opentype/truetype/ZonePathIterator.java,
+ * gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.dia,
+ * gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.png:
+ New files. Imported font framework from:
+ http://www.brawer.ch/software/fonts/
+
+2006-04-30 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (lastTabInRun): Fix calculation of the last tab in a run. This
+ has caused painting problems sometimes, making the
+ last tab painted incorrectly.
+
+2006-04-30 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ PR 27297
+ * javax/swing/JComponent.java (paintChildrenWithOverlap):
+ Use for and not while to prevent the endless loop.
+
+2006-04-29 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JList.java
+ (paramString): Changed from public to protected.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/HelpPrinter.java (printHelp): New method.
+ (printHelpAndExit): Re-factored to use the above method.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/jarsigner.sh.in: Changed license to GPL + Exception.
+ Use -Xbootclasspath/p instead of -cp when invoking the main class.
+ * tools/gnu/classpath/tools/jarsigner/Main.java:
+ Changed license to GPL + Exception.
+ (handler): New field.
+ (getCallbackHandler): New method.
+ (setupSigningParams): Use above method.
+ * tools/gnu/classpath/tools/jarsigner/HashUtils.java:
+ Changed license to GPL + Exception.
+ * tools/gnu/classpath/tools/jarsigner/SFHelper.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/JarVerifier.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/JarSigner.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/jarsigner.txt: Updated copyright.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/javax/security/auth/callback/ConsoleCallbackHandler.java
+ (handleConfirmation): Use print instead of println.
+ (handleConfirmation): When case is YES_NO_OPTION, print default option
+ if one was set.
+ (handleLanguage): Use print instead of println.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/java/security/x509/X500DistinguishedName.java: Updated copyright.
+ (putComponent): Handle O and OU components.
+ (getDer): Use correct (it2) iterator.
+ (readAttributeValue): Read next character and break if end-of-stream.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/java/security/provider/Gnu.java (run):
+ Add "RSA" as an alias to MD5withRSA.
+ * gnu/java/security/key/rsa/RSAKeyPairX509Codec.java (encodePublicKey):
+ Always encode a NULL as the value of an algorithm parameters field.
+ * gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java (log): New field.
+ (encodePrivateKey): Added trace/log statements.
+ (decodePrivateKey): Likewise.
+ * gnu/java/security/key/rsa/RSAKeyPairGenerator.java (log): New field.
+ (setup): Added trace/log statements.
+ (generate): Likewise.
+ * gnu/java/security/key/rsa/GnuRSAPublicKey.java (str): New field.
+ (toString): New method.
+ * gnu/java/security/key/rsa/GnuRSAPrivateKey.java (DEBUG): New constant.
+ (str): New field.
+ (toString): New method.
+ * gnu/java/security/key/rsa/GnuRSAKey.java (str): New field.
+ (getEncoded): Use defaultFormat.
+ (toString): New method.
+ * gnu/java/security/key/dss/DSSKey.java (toString):
+ Include defaultFormat in string.
+ * gnu/java/security/jce/sig/RSAKeyFactory.java (engineGeneratePublic):
+ Break if successfully decoded public key.
+ (engineGeneratePrivate): Break if successfully decoded private key.
+
+2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * java/security/Security.java <clinit>: Add our Callback provider.
+ * resource/java/security/classpath.security: Likewise
+
+2006-04-28 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ PR 27296
+ * javax/swing/ScrollPaneLayout.java (layoutContainer):
+ Decide about scroll bars from the preferred view size, not
+ the current size.
+ * javax/swing/ViewportLayout.java (layoutContainer):
+ Do not change returned preferred size. Do not treat JScrollPane
+ specially.
+
+2006-04-28 Sven de Marothy <sven@physto.se>
+
+ * java/awt/image/ReplicateScaleFilter.java: Fix comment.
+ * javax/swing/ProgressMonitor.java (actionPerformed):
+ Avoid divide-by-zero.
+
+2006-04-28 Sven de Marothy <sven@physto.se>
+
+ * javax/swing/JSpinner.java: Fix default text justification.
+ * javax/swing/plaf/basic/BasicSpinnerUI.java: Fix spinner layout size.
+
+2006-04-28 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JList.java
+ (getMinSelectionIndex): Return correct value, added API docs,
+ (getMaxSelectionIndex): Added API docs.
+
+2006-04-28 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JList.java
+ (JList(Object[])): Pass new model directly to init(),
+ (JList(Vector)): Likewise,
+ (JList(ListModel)): Renamed argument and updated API docs,
+ (init): Throw IllegalArgumentException for null argument,
+ (setListData(Object[])): Delegate model creation,
+ (setListData(Vector)): Likewise,
+ (createListModel(Object[])): New private method,
+ (createListModel(Vector)): New private method,
+ (paramString): Implemented.
+
+2006-04-28 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/Class.java (SYNTHETIC, ENUM, ANNOTATION): New fields.
+ (isEnum): Rewrote.
+ (isSynthetic): Likewise.
+ (isAnnotation): Likewise.
+ * vm/reference/java/lang/VMClass.java (isSynthetic): Removed.
+ (isAnnotation): Likewise.
+ (isEnum): Likewise.
+
+2006-04-28 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/View.java:
+ (getNextVisualPositionFrom): Call modelToView and viewToModel on parent
+ view.
+
+2006-04-28 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/View.java:
+ (getNextVisualPositionFrom): Rewritten.
+ * javax/swing/text/CompositeView.java:
+ (getNextEastWestVisualPositionFrom): Partly implemented.
+ (getNextNorthSouthVisualPositionFrom): Partly implemented.
+
+2006-04-28 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JList.java
+ (setFixedCellHeight): Use correct property name for event.
+
+2006-04-28 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/Utilities.java:
+ (getNextWord): Use codePointAt instead of charAt, added note, changed
+ if-expression, added throwing of exception.
+ (getPreviousWord): Use codePointAt instead of charAt.
+
+2006-04-28 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/StringBuilder.java
+ (ensureCapacity, getChars, append(StringBuffer),
+ append(char[],int,int), delete, replace, insert(int,char[],int,int),
+ insert(int,String), insert(int,char), trimToSize): Replaced
+ System.arraycopy calls with VMSystem.arraycopy.
+
+2006-04-27 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/image/renderable/RenderableImageProducer.java
+ (requestTopDownLeftRightResend): Implemented.
+ (run): Likewise.
+ (startProduction): Add new consumer.
+
+2006-04-27 Sven de Marothy <sven@physto.se>
+
+ * javax/swing/JLabel.java (setIcon): Repaint on setting the icon.
+
+2006-04-27 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/LightweightDispatcher.java
+ Dispatch events only to targets that have a mouselistener
+ attached. Changed to also handle null targets.
+
+2006-04-27 Roman Kennke <kennke@aicas.com>
+
+ * NEWS: Added entries about accessibility support and L&F
+ window decorations.
+
+2006-04-27 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/Utilities.java:
+ (getTabbedTextOffset): Introduced width variable, rewritten the check
+ which ends the loop.
+ (getBreakLocation): Call getTabbedTextOffset with rounding argument set
+ to false.
+
+2006-04-27 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * examples/gnu/classpath/examples/swing/TreeDemo.java
+ (createContent): Added root visibility and selection listener demos.
+ * javax/swing/JTree.java (setRootVisible): If false, unselect
+ the root node, if it is selected.
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (TreeTraverseAction.actionPerformed): Do not select the root if it
+ is not visible.
+ * javax/swing/tree/DefaultTreeSelectionModel.java (removeSelectionPath,
+ removeSelectionPaths): Reset lead to null if the current lead path is
+ removed from selection.
+ * javax/swing/tree/TreePath.java (getParentPath): Cache the parent path.
+ * javax/swing/tree/FixedHeightLayoutCache.java (NodeRecord.getPath):
+ Return the same path regardless is root visible or not. (update):
+ Reduce the identation if the root is not visible.
+ * javax/swing/tree/VariableHeightLayoutCache.java (NodeRecord.getPath):
+ Return the same path regardless is root visible or not. (update):
+ Reduce the identation if the root is not visible.
+
+2006-04-26 Audrius Meskauskas <AudriusA@Bioinformatics.org
+
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (TreeAction.actionPerformed):Newly obtain the current lead
+ path that must stay visible.
+ (TreeTraverseAction.actionPerformed):Rewritten.
+ * javax/swing/tree/FixedHeightLayoutCache.java (countRows):
+ Do not treat root specially. (setModel): Assume the root node
+ initially expanded.
+ * javax/swing/tree/VariableHeightLayoutCache.java:(countRows):
+ Do not treat root specially. (setModel): Assume the root node
+ initially expanded.
+
+2006-04-26 Chris Burdess <dog@gnu.org>
+
+ Fixes PR 27290
+ * javax/xml/datatype/DatatypeFactory.java: Use complete
+ implementation resolution mechanism.
+
+2006-04-26 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/DefaultTreeModel.java (nodeStructureChanged):
+ Implemented.
+ * javax/swing/tree/DefaultTreeSelectionModel.java (toString):
+ Removed NoImplementException form the implemented method.
+
+2006-04-26 Tom Tromey <tromey@redhat.com>
+
+ * javax/net/ssl/HttpsURLConnection.java (HttpsURLConnection): Doesn't
+ throw IOException.
+
+2006-04-26 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/DefaultListSelectionModel.java
+ (clone): Initialise empty listener list,
+ (setSelectionMode): Throw IllegalArgumentException for bad input.
+
+2006-04-26 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/DefaultListSelectionModel.java
+ (clearSelection): Clear the Bitset.
+
+2006-04-26 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTree.java (setLeadSelectionPath):
+ Repaint the new and old lead pathes.
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (FocusHandler): Repaint the lead row when focus changes.
+ (PropertyChangeHandler): Use existing constants, not the
+ string literals for the property names.
+ (TreeIncrementAction): Shrink the selection when moving
+ from the selection edge to the selection anchor.
+ (TreeSelectionHandler.valueChanged): Repaint the
+ new and old lead pathes.
+ (paintRow): Treat row as focused only if it is the lead row.
+ * javax/swing/tree/DefaultTreeCellRenderer.java
+ (getTreeCellRendererComponent): Set the vertical alignment to CENTER.
+ (paint): Rewritten.
+ * javax/swing/tree/DefaultTreeSelectionModel.java
+ (addSelectionPath): Event construction fix (old and new lead were
+ always the same).
+ (addSelectionPaths): Likewise.
+ * javax/swing/JComponent.java (setOpaque): Explained.
+ * javax/swing/tree/FixedHeightLayoutCache.java (getBounds):
+ Accept null.
+ * javax/swing/tree/VariableHeightLayoutCache.java (getBounds):
+ Accept null.
+
+2006-04-26 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * examples/gnu/classpath/examples/swing/TreeDemo.java
+ (createContent): Call DefaultTreeModel.reload(), not the
+ tree.repaint(). Expand the parent of the added node.
+ * javax/swing/JTree.java (constructor): Do not call
+ UpdateUI (and documented why). (treeDidChange):
+ Added comment, excluding the misinterpretation of this method.
+ * javax/swing/plaf/basic/BasicTreeUI.java (componentListener,
+ focusListener, keyListener, mouseListener, propertyListener,
+ selectionModelPropertyChangeListener, treeModelListener,
+ treeSelectionListener): Made package private.
+ (PropertyChangeHandler): If the model changes, install the
+ listener on it. (installUI): Assign treeModel.
+ * javax/swing/tree/DefaultMutableTreeNode.java (add): Added
+ comment, excluding misinterpretation.
+ * javax/swing/tree/DefaultTreeModel.java (reload): Implemented.
+ (reload(TreeNode)): Implemented.
+
+2006-04-25 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java (MouseHandler.mousePressed):
+ If clicked on the other row, cancel the current editing session.
+
+2006-04-25 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (NodeDimensionsHandler.getRowX): Add half of the icon width.
+ (paintExpandControl): Always paint in one gap distance from the left
+ border of the path bounds.
+ (paintHorizontalPartOfLeg): Rewritted, taking the icon width
+ into consideration.
+ (paintVerticalPartOfLeg): Paint two gaps from the parent's bounds
+ left edge.
+
+2006-04-25 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java (paint): Rewritten.
+
+2006-04-25 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/javax/swing/text/html/parser/support/Parser.java (readAttributes):
+ Allow slashes (/) in the unquoted parameter value.
+
+2006-04-25 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AbstractGraphics2D.java
+ (drawString(String,int,int)): Implemented.
+ (drawString(String,float,float)): Implemented.
+ (drawString(AttributedCharacterIterator,int,int)): Implemented.
+ (drawString(AttributedCharacterIterator,float,float)): Implemented.
+ (getFontRenderContext): Implemented.
+ (drawGlyphVector): Implemented.
+ (getFont): Implemented.
+ (setFont): Don't change font setting when null.
+ (getFontMetrics): Implemented.
+ (fillShape): Re-written to fill call rawFillShape() with a list
+ of the edges instead of double arrays.
+ (rawFillShape): Implemented using a polygon scanline conversion.
+ (fillScanline): New helper method.
+ (init): Initialize foreground black. Set font.
+ * gnu/java/awt/java2d/PolyEdge.java: New file.
+ * gnu/java/awt/java2d/PolyEdgeComparator.java: New file.
+
+2006-04-25 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/DefaultTableColumnModel.java: More API doc updates.
+
+2006-04-25 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JTable.java: Fixed API doc tags,
+ * javax/swing/text/AsyncBoxView.java: Likewise,
+ * javax/swing/text/FlowView.java: Likewise.
+
+2006-04-25 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/DefaultTableColumnModel.java
+ (moveColumn): Call fireColumnMoved() not fireColumnAdded.
+
+2006-04-24 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/DefaultTableColumnModel.java
+ (DefaultTableColumnModel): Set selection model field and add 'this' as
+ listener directly,
+ (addColumn): Add 'this' as a PropertyChangeListener,
+ (removeColumn): Remove column before firing event, and remove 'this' as
+ a PropertyChangeListener,
+ (setSelectionModel): Remove 'this' as a listener from old model,
+ (propertyChange): Check for 'width' property rather than
+ TableColumn.COLUMN_WIDTH_PROPERTY.
+
+2006-04-24 Chris Burdess <dog@gnu.org>
+
+ Fixes PR 27262
+ * gnu/xml/dom/DomDocument.java: getElementById returns user-defined ID
+ attributes when no doctype exists.
+
+2006-04-24 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/event/ChangeEvent.java: Updated API docs,
+ * javax/swing/event/ChangeListener.java: Likewise,
+ * javax/swing/event/TableColumnModelEventListener.java: Likewise,
+ * javax/swing/table/DefaultTableColumnModel.java: Likewise,
+ * javax/swing/table/TableColumnModel.java: Likewise.
+
+2006-04-24 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/Utilities.java:
+ (getBreakLocation): Introduced shift variable, added notes.
+ * javax/swing/text/WrappedPlainView.java:
+ (calculateBreakPosition): Decrease allocation area bounds by insets,
+ added early return when allocation area is empty, provide start offset
+ as argument.
+ (WrappedPlainView.WrappedLine): Change default value for numLines to 1.
+ (WrappedPlainView.WrappedLine.paint): Added count variable, update
+ numLines after loop.
+ (WrappedPlainView.WrappedLine.determineNumLines): Added early return.
+ (WrappedPlainView.WrappedLine.getPreferredSpan): Removed if-statement.
+ (WrappedPlainView.WrappedLine.viewToModel): Changed note, removed
+ decreasing variable end by one, changed break condition in while-loop,
+ added check for return value.
+ (WrappedPlainView.WrappedLine.updateDamage): Set numLines to one if
+ allocation area is empty.
+
+2006-04-24 Sven de Marothy <sven@physto.se>
+
+ * gnu/java/awt/java2d/Segment.java: New file.
+ * gnu/java/awt/java2d/CubicSegment.java: New file.
+ * gnu/java/awt/java2d/QuadSegment.java: New file.
+ * gnu/java/awt/java2d/LineSegment.java: New file.
+ * java/awt/BasicStroke.java
+ (start): New field.
+ (end): New field.
+ (createStrokedShape): Implemented.
+ (solidStroke): New method.
+ (dashedStroke): New method.
+ (capEnds): New method.
+ (convertPath): New method.
+ (addSegments): New method.
+ (capEnd): New method.
+ (lineIntersection): New method.
+ (joinSegments): New method.
+
+2006-04-24 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AbstractGraphics2D.java: Made implements
+ Cloneable.
+ (font): New field.
+ (clip): Changed clip to be in user space not in target space.
+ (isOptimized): Added flag to allow optimized drawing for
+ primitive operations (e.g. for Swing).
+ (AbstractGraphics2D()): Set foreground in init() to avoid trouble
+ with the paint context etc.
+ (draw): Clip the shape before drawing it.
+ (fill): Clip the shape before drawing it.
+ (setComposite): Update isOptimized flag.
+ (setPaint): Likewise.
+ (setStroke): Likewise.
+ (translate): Update the clip.
+ (rotate): Likewise.
+ (scale): Likewise.
+ (shear): Likewise.
+ (transform): Likewise.
+ (setTransform): Likewise.
+ (clip): Added optimization for rectangle clips.
+ (create): Implemented.
+ (clone): New method.
+ (setFont): Basic implementation.
+ (setClip): Update opimization flag.
+ (drawLine): Added possible optimization.
+ (fillRect): Added possible optimization.
+ (fillShape): Implemented shape-filling by filling the flattended
+ shape using polygon fill.
+ (drawPixel): Added basic painting.
+ (rawSetPixel): Changed signature to only take coordinates.
+ (rawSetForeground): New abstract method.
+ (getUserBounds): Implemented default for this method.
+ (rawDrawLine): New method.
+ (rawFillRect): New method.
+ (rawFillPolygon): New method.
+ (init): New method.
+ (updateOptimization): New method.
+ (computeIntersection): New method.
+ (updateClip): New method.
+ (clipShape): New method.
+
+2006-04-23 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * examples/gnu/classpath/examples/swing/TreeDemo.java:
+ (createContent): Added check box to swith between single and
+ multiple selection.
+ * javax/swing/JTree.java (leadSelectionPath): Removed.
+ (addSelectionInterval): Explained. (getLeadSelectionPath):
+ Request the path from model. (getPathsBetweenRows): Explained.
+ (setLeadSelectionPath): Set the path in model.
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (TreeIncrementAction.actionPerformed, isMultiSelectionEvent,
+ isToggleSelectionEvent, selectPath, selectPathForEvent): Rewritten.
+ (MouseHandler.mousePressed): Call selectPathForEvent.
+
+2006-04-23 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/java2d/AbstractGraphics2D.java: New file.
+
+2006-04-23 Jeroen Frijters <jeroen@frijters.net>
+
+ * NEWS: Added entry about new Package constructor.
+ * java/lang/Package.java: Added compatibility constructor to ease
+ VM interface migration.
+
+2006-04-23 Jeroen Frijters <jeroen@frijters.net>
+
+ * NEWS: Added information about annotation support.
+ * java/lang/Class.java: Implement AnnotatedElement.
+ (equals): Reformatted to match generics branch.
+ (getEnumConstants): Implemented.
+ (getAnnotation, getAnnotations, getDeclaredAnnotations,
+ isAnnotationPresent): Merged from generics branch.
+ * vm/reference/java/lang/VMClass.java (getDeclaredAnnotations):
+ New method.
+
+2006-04-23 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/ClassLoader.java (definePackage): Added argument to
+ Package constructor.
+ * java/lang/Package.java (Package): Added ClassLoader argument.
+ (loader): New field.
+ (getAnnotation, getAnnotations, getDeclaredAnnotations,
+ isAnnotationPresent): Merged from generics branch.
+ * vm/reference/java/lang/VMClassLoader.java (static): Added argument
+ to Package constructor.
+
+2005-12-14 Nicolas Geoffray <nicolas.geoffray@menlina.com>
+
+ * java/lang/ClassLoader
+ (defineClass(String,byte[],int,int,ProtectionDomain)):
+ Calls VMClassLoader.defineClassWithTransformers instead
+ of VMClassLoader.defineClass.
+
+2006-04-22 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * NEWS:
+ Mention changes to VMProcess and VMSystem.
+ * doc/vmintegration.texinfo:
+ Change documentation on VMProcess and VMSystem.
+ * java/lang/reflect/Modifier.java:
+ (toString(int,StringBuilder)): Merged from generics
+ branch.
+ * vm/reference/java/lang/reflect/Constructor.java
+ (toString()): Use StringBuilder.
+ (toGenericString()): Likewise.
+ * vm/reference/java/lang/reflect/Field.java:
+ (toString()): Use StringBuilder.
+ (toGenericString()): Likewise.
+ * vm/reference/java/lang/reflect/Method.java
+ (toString()): Use StringBuilder.
+ (toGenericString()): Likewise.
+ * include/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
+ * include/gnu_java_awt_peer_gtk_GdkFontPeer.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphics.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphics2D.h,
+ * include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h,
+ * include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h,
+ * include/gnu_java_awt_peer_gtk_GdkRobotPeer.h,
+ * include/gnu_java_awt_peer_gtk_GdkTextLayout.h,
+ * include/gnu_java_awt_peer_gtk_GtkButtonPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkCheckboxPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkChoicePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkClipboard.h,
+ * include/gnu_java_awt_peer_gtk_GtkComponentPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkFramePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkGenericPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkImage.h,
+ * include/gnu_java_awt_peer_gtk_GtkLabelPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkListPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuComponentPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuItemPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkMenuPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkPanelPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkScrollPanePeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkScrollbarPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkSelection.h,
+ * include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h,
+ * include/gnu_java_awt_peer_gtk_GtkToolkit.h,
+ * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h,
+ * include/gnu_java_awt_peer_qt_MainQtThread.h,
+ * include/gnu_java_awt_peer_qt_QMatrix.h,
+ * include/gnu_java_awt_peer_qt_QPainterPath.h,
+ * include/gnu_java_awt_peer_qt_QPen.h,
+ * include/gnu_java_awt_peer_qt_QtAudioClip.h,
+ * include/gnu_java_awt_peer_qt_QtButtonPeer.h,
+ * include/gnu_java_awt_peer_qt_QtCanvasPeer.h,
+ * include/gnu_java_awt_peer_qt_QtCheckboxPeer.h,
+ * include/gnu_java_awt_peer_qt_QtChoicePeer.h,
+ * include/gnu_java_awt_peer_qt_QtComponentPeer.h,
+ * include/gnu_java_awt_peer_qt_QtContainerPeer.h,
+ * include/gnu_java_awt_peer_qt_QtDialogPeer.h,
+ * include/gnu_java_awt_peer_qt_QtEmbeddedWindowPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFileDialogPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFontMetrics.h,
+ * include/gnu_java_awt_peer_qt_QtFontPeer.h,
+ * include/gnu_java_awt_peer_qt_QtFramePeer.h,
+ * include/gnu_java_awt_peer_qt_QtGraphics.h,
+ * include/gnu_java_awt_peer_qt_QtGraphicsEnvironment.h,
+ * include/gnu_java_awt_peer_qt_QtImage.h,
+ * include/gnu_java_awt_peer_qt_QtLabelPeer.h,
+ * include/gnu_java_awt_peer_qt_QtListPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuBarPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuComponentPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuItemPeer.h,
+ * include/gnu_java_awt_peer_qt_QtMenuPeer.h,
+ * include/gnu_java_awt_peer_qt_QtPanelPeer.h,
+ * include/gnu_java_awt_peer_qt_QtPopupMenuPeer.h,
+ * include/gnu_java_awt_peer_qt_QtScreenDevice.h,
+ * include/gnu_java_awt_peer_qt_QtScrollPanePeer.h,
+ * include/gnu_java_awt_peer_qt_QtScrollbarPeer.h,
+ * include/gnu_java_awt_peer_qt_QtTextAreaPeer.h,
+ * include/gnu_java_awt_peer_qt_QtTextFieldPeer.h,
+ * include/gnu_java_awt_peer_qt_QtToolkit.h,
+ * include/gnu_java_awt_peer_qt_QtVolatileImage.h,
+ * include/gnu_java_awt_peer_qt_QtWindowPeer.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.h,
+ * include/gnu_javax_sound_midi_alsa_AlsaPortDevice.h,
+ * include/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.h,
+ * include/gnu_javax_sound_midi_dssi_DSSISynthesizer.h,
+ * include/gnu_xml_libxmlj_dom_GnomeAttr.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocument.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocumentBuilder.h,
+ * include/gnu_xml_libxmlj_dom_GnomeDocumentType.h,
+ * include/gnu_xml_libxmlj_dom_GnomeElement.h,
+ * include/gnu_xml_libxmlj_dom_GnomeEntity.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNamedNodeMap.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNode.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNodeList.h,
+ * include/gnu_xml_libxmlj_dom_GnomeNotation.h,
+ * include/gnu_xml_libxmlj_dom_GnomeProcessingInstruction.h,
+ * include/gnu_xml_libxmlj_dom_GnomeTypeInfo.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathExpression.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathNSResolver.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathNodeList.h,
+ * include/gnu_xml_libxmlj_dom_GnomeXPathResult.h,
+ * include/gnu_xml_libxmlj_sax_GnomeLocator.h,
+ * include/gnu_xml_libxmlj_sax_GnomeXMLReader.h,
+ * include/gnu_xml_libxmlj_transform_GnomeTransformer.h,
+ * include/gnu_xml_libxmlj_transform_GnomeTransformerFactory.h,
+ * include/java_lang_VMProcess.h,
+ * include/java_lang_VMSystem.h:
+ Regenerated with GCJ 4.1.
+
+2005-12-05 Casey Marshall <csm@gnu.org>
+
+ * native/jni/classpath/jcl.h (environ): define, or declare
+ 'extern.'
+ * native/jni/java-lang/java_lang_VMProcess.c: include <jcl.h>.
+ Remove 'extern' define.
+ * native/jni/java-lang/java_lang_VMSystem.c
+ (Java_java_lang_VMSystem_environ): don't declare 'environ.'
+
+2005-09-25 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/System.java,
+ vm/reference/java/lang/VMSystem.java: Removed generic type
+ from VMSystem.environ() signature.
+
+2005-05-04 Tom Tromey <tromey@redhat.com>
+
+ * native/jni/java-lang/java_lang_VMProcess.c
+ (Java_java_lang_VMProcess_nativeSpawn): Added 'redirect'
+ argument. Use defines instead of contents.
+ * vm/reference/java/lang/VMProcess.java (redirect): New field.
+ (spawn): Updated.
+ (setProcessInfo): Updated.
+ (VMProcess): Added 'redirect' argument.
+ (nativeSpawn): Likewise.
+ (exec): New overload.
+
+2005-01-20 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * include/java_lang_VMSystem.h:
+ (Java_java_lang_VMSystem_environ): added
+ * vm/reference/java/lang/VMSystem.java:
+ (environ()): new native method
+
+2006-04-22 Casey Marshall <csm@gnu.org>
+
+ Fixes PR classpath/27228.
+ * gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java
+ (initialize): also accept `DHParameterSpec.'
+ * gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java (setup):
+ handle a passed-in `DHParameterSpec' properly.
+ (generate): don't check if the random exponent is less than `q -
+ 1' if no `q' was specified.
+
+2006-04-22 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTree.java (TreeSelectionRedirector.valueChanged):
+ Only repaint the patches, speficied in the passed event.
+ (expandPath): Do nothing if the path is already expanded.
+ (scrollPathToVisible): Only scroll to visible, do nothing else.
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (TreeExpansionHandler.treeColapsed): Revalidate and repaint.
+ (TreeExpansionHandler.treeExpanded): Revalidate and repaint.
+ (TreeTraverseAction.actionPerformed): Collapse the node on the
+ action "selectParent". (selectPath): Rewritten.
+ * javax/swing/tree/DefaultTreeSelectionModel.java (clearSelection):
+ Fire change event. (notifyPathChange): Implemented. (setSelectionPath):
+ Do not reuse selection array.
+ * javax/swing/tree/FixedHeightLayoutCache.java (getRowForPath):
+ Accept null.
+ * javax/swing/tree/VariableHeightLayoutCache.java (getRowForPath):
+ Accept null.
+
+2006-04-22 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/DefaultTreeSelectionModel.java
+ (addSelectionPath): If the path cannot be added, set it.
+ (addSelectionPaths): Call insureRowContinuity.
+ (arePathsContiguous): Implemented.
+ (canPathBeAdded): New private method.
+ (canPathsBeAdded): Implemented.
+ (canPathsBeRemoved): Implemented.
+ (getPath): New private method.
+ (insureRowContinuity): Implemented.
+ (removeSelectionPath): Call insureRowContinuity.
+ (removeSelectionPaths): Call insureRowContinuity.
+ (resetRowSelection): Removed stub marking, not used in implementation
+ (nothing to do there).
+ (selectOne): New private method.
+ (setSelectionMode) Call insureRowContinuity.
+ (setSelectionPaths) Remove the current selection by clearing it.
+
+2006-04-22 Carsten Neumann <cn-develop@gmx.net>
+
+ * javax/sql/Array.java: Fixed eclipse API doc warnings, named method
+ parameters consistendly, documented some methods.
+ * java/sql/Blob.java: Likewise.
+ * java/sql/CallableStatement.java: Likewise.
+ * java/sql/Clob.java: Likewise.
+ * java/sql/Connection.java: Likewise.
+ * java/sql/DatabaseMetaData.java: Likewise.
+ * java/sql/Date.java: Likewise.
+ * java/sql/Driver.java: Likewise.
+ * java/sql/PreparedStatement.java: Likewise.
+ * java/sql/ResultSet.java: Likewise.
+ * java/sql/ResultSetMetaData.java: Likewise.
+ * java/sql/SQLData.java: Likewise.
+ * java/sql/SQLOutput.java: Likewise.
+ * java/sql/SQLWarning.java: Likewise.
+ * java/sql/Statement.java: Likewise.
+ * java/sql/Time.java: Likewise.
+ * java/sql/Timestamp.java: Likewise.
+
+2006-04-21 Tom Tromey <tromey@redhat.com>
+
+ PR classpath/27163:
+ * gnu/java/net/protocol/ftp/FTPConnection.java
+ (changeWorkingDirectory): Do nothing if path is empty.
+
+2006-04-21 Tom Tromey <tromey@redhat.com>
+
+ PR libgcj/27231:
+ * gnu/java/net/protocol/http/HTTPURLConnection.java (connect): Handle
+ case where no '/' appears in 'location'.
+
+2006-04-21 Tom Tromey <tromey@redhat.com>
+
+ * java/security/Security.java (<clinit>): Add all default providers.
+ * resource/java/security/classpath.security: Added comment.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/SpinnerDateModel.java: Updated API docs all over,
+ * javax/swing/SpinnerNumberModel.java: Likewise.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/SpinnerDateModel.java
+ (SpinnerDateModel(Date, Comparable, Comparable, int)): Fix argument
+ checking to call compareTo() on start and end.
+
+2006-04-21 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/reflect/AccessibleObject.java:
+ Implemented AnnotatedElement.
+ (getAnnotation, getAnnotations, getDeclaredAnnotations,
+ isAnnotationPresent): New methods.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/border/AbstractBorder.java: API doc updates,
+ * javax/swing/border/BevelBorder.java: Likewise,
+ * javax/swing/border/CompoundBorder.java: Likewise,
+ * javax/swing/border/EtchedBorder.java: Likewise,
+ * javax/swing/border/LineBorder.java: Likewise,
+ * javax/swing/border/MatteBorder.java: Likewise,
+ * javax/swing/border/TitledBorder.java: Likewise.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * gnu/javax/crypto/cipher/Anubis.java:
+ (selfTest): Use Boolean.valueOf() to avoid creating a new Boolean
+ instance,
+ * gnu/javax/crypto/cipher/Blowfish.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Cast5.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Khazad.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Rijndael.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Serpent.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Square.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/cipher/Twofish.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/mac/UMac32.java:
+ (selfTest): Likewise,
+ * gnu/javax/crypto/prng/CSPRNG.java:
+ (getSystemInstance): Likewise.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * gnu/java/security/hash/Haval.java:
+ (selfTest): Use Boolean.valueOf() to avoid creating new Boolean
+ instance,
+ * gnu/java/security/hash/MD2.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/MD4.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/MD5.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/RipeMD128.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/RipeMD160.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Sha160.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Sha256.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Sha384.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Sha512.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Tiger.java:
+ (selfTest): Likewise,
+ * gnu/java/security/hash/Whirlpool.java:
+ (selfTest): Likewise.
+
+2006-04-21 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (PropertyChangeHandler.propertyChange): Set the row mapper
+ for the selection model.
+ * javax/swing/tree/AbstractLayoutCache.java
+ (NodeDimensions.getNodeDimensions): Explained.
+ (getPreferredHeight, getPreferredWidth, isFixedRowHeight):
+ Implemented. (setRowHeight): Invalidate sizes.
+ * javax/swing/tree/DefaultTreeSelectionModel.java
+ (addSelectionPath, addSelectionPaths): Update lead row.
+ (removeSelectionPath, removeSelectionPaths): Do nothing if
+ selection is empty.
+ (clone): Only clone list selection model if it is not null.
+ (getRow): New method. (isRowSelected, getLeadSelectionRow,
+ setSelectionPath, setSelectionPaths, toString): Implemented.
+ * javax/swing/tree/FixedHeightLayoutCache.java (NodeRecord.getBounds):
+ Pass the empty rectangle. (isFixedRowHeight): New method.
+ * javax/swing/tree/VariableHeightLayoutCache.java
+ (NodeRecord.getBounds): Pass the empty rectangle.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * gnu/java/security/Properties.java
+ (init): Use Boolean.valueOf() to avoid creating new Boolean instances.
+
+2006-04-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * gnu/classpath/jdwp/util/Value.java
+ (getUntaggedObj(ByteBuffer, Class)): Use Boolean.valueOf() to avoid
+ creating new Boolean instances.
+
+2006-04-20 Mark Wielaard <mark@klomp.org>
+
+ * java/awt/Toolkit.java (getDefaultToolkit): Get classloader in
+ PrivilegedAction. Access awt.toolkit through SystemProperties.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/ActionMap.java: Removed unused imports,
+ * javax/swing/DefaultListSelectionModel.java
+ (clearSelection): Removed unused label,
+ * javax/swing/JScrollPane.java: Removed unused imports,
+ * javax/swing/UIManager.java: Likewise,
+ * javax/swing/table/DefaultTableCellRenderer.java: Likewise.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicSpinnerUI.java: Removed unused imports,
+ * javax/swing/plaf/basic/BasicTextAreaUI.java: Likewise,
+ * javax/swing/plaf/basic/BasicTextFieldUI.java: Likewise,
+ * javax/swing/plaf/basic/BasicTextUI.java: Likewise,
+ * javax/swing/plaf/basic/BasicTreeUI.java: Likewise.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/sql/Array.java: Fixed Eclipse API doc warnings,
+ * java/sql/Blob.java: Likewise,
+ * java/sql/CallableStatement.java: Likewise,
+ * java/sql/Clob.java: Likewise,
+ * java/sql/Connection.java: Likewise,
+ * java/sql/DatabaseMetaData.java: Likewise,
+ * java/sql/Date.java: Likewise,
+ * java/sql/Driver.java: Likewise,
+ * java/sql/PreparedStatement.java: Likewise,
+ * java/sql/ResultSet.java: Likewise,
+ * java/sql/ResultSetMetaData.java: Likewise,
+ * java/sql/SQLData.java: Likewise,
+ * java/sql/SQLOutput.java: Likewise,
+ * java/sql/SQLWarning.java: Likewise,
+ * java/sql/Statement.java: Likewise,
+ * java/sql/Time.java: Likewise,
+ * java/sql/Timestamp.java: Likewise.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/sql/DriverManager.java
+ (setLoginTimeout): Use incoming argument,
+ (setLogStream): Likewise,
+ (println): Fix API doc comment.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JMenuItem.java
+ (paramString): Updated API docs,
+ (getAccessibleContext): Added API docs,
+ (AccessibleJMenuItem.stateChanged): Marked as stub,
+ (AccessibleJMenuItem.getAccessibleRole): Added API docs,
+ * javax/swing/JSlider.java
+ (paramString): Fix for API docs,
+ * javax/swing/JToolTip.java
+ (getAccessibleContext): Fix for API docs.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JRadioButtonMenuItem.java
+ (paramString): Reimplemented,
+ (getAccessibleContext): API docs added,
+ (AccessibleJRadioButtonMenuItem.AccessibleJRadioButtonMenuItem()):
+ Likewise,
+ (AccessibleJRadioButtonMenuItem.getAccessibleRole): Likewise.
+
+2006-04-20 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java
+ (finish): Invalidate path bounds.
+ (getMaxHeight): Set the row height to the layout cache.
+ (startEditing): Do not request to recalculated
+ row height and preferred size.
+ * javax/swing/tree/DefaultTreeCellEditor.java
+ (ICON_TEXT_GAP, ICON_TREE_GAP): Removed, replacing
+ with 0.
+ * javax/swing/tree/FixedHeightLayoutCache.java:
+ Rewritten.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JDesktopPane.java
+ (paramString): Reimplemented,
+ plus API doc updates in AccessibleJDesktopPane.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/ImageIcon.java:
+ (AccessibleImageIcon.getAccessibleStateSet): Return null always,
+ (AccessibleImageIcon.getLocale): Declared exception and always return
+ null,
+ (getAccessibleContext): Updated API docs,
+ plus updated API docs all over AccessibleImageIcon.
+
+2006-04-20 Roman Kennke <kennke@aicas.com>
+
+ PR 27196
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (paintText): Fetch the ascent only once. Add the ascent to
+ the text rect also when tabs are disabled.
+
+2006-04-20 Christian Thalinger <twisti@complang.tuwien.ac.at>
+
+ * java/util/Locale.java (defaultLocale): Set to en_US per
+ default and use user.country but prioritize user.region if
+ defined.
+ (getLocale(String language, String country)): Renamed region to
+ country.
+ (getLocale(String language, String region, String variant)):
+ Likewise.
+ (getAvailableLocales): Likewise.
+
+2006-04-20 Roman Kennke <kennke@aicas.com>
+
+ PR 27222
+ * javax/swing/JList.java
+ (JList()): Call init() with DefaultListModel instance.
+ (JList(Object[])): Call init() with null.
+ (JList(Vector)): Call init() with null.
+ (JList(ListModel)): Call init() with model.
+ (init): Changed to take the model as argument. Don't call
+ setter methods and initialize stuff directly instead.
+ (getCellBounds): Check if UI is null.
+
+2006-04-20 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/WrappedPlainView.java: Initialize
+ WrappedLine.numLines with -1.
+ (WrappedPlainView.WrappedLine.getPreferredSpan): Check whether
+ numLines is -1 and reculcalate the value appropriately.
+ (WrappedPlainView.WrappedLine.updateDamage): Set numLines to -1 if
+ allocation area is empty.
+
+2006-04-20 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JTabbedPane.java
+ (AccessibleJTabbedPane.stateChanged): Marked as stub,
+ (AccessibleJTabbedPane.getAccessibleRole): Likewise,
+ (AccessibleJTabbedPane.getAccessibleChildrenCount): Likewise,
+ (AccessibleJTabbedPane.getAccessibleSelection): Likewise,
+ (AccessibleJTabbedPane.getAccessibleAt): Likewise,
+ (AccessibleJTabbedPane.getAccessibleSelectionCount): Likewise,
+ (AccessibleJTabbedPane.getAccessibleSelection(int)): Likewise,
+ (AccessibleJTabbedPane.isAccessibleChildSelected): Likewise,
+ (AccessibleJTabbedPane.addAccessibleSelection): Likewise,
+ (AccessibleJTabbedPane.removeAccessibleSelection): Likewise,
+ (AccessibleJTabbedPane.clearAccessibleSelection): Likewise,
+ (AccessibleJTabbedPane.selectAllAccessibleSelection): Likewise,
+ (Page.getAccessibleStateSet): Likewise,
+ (Page.getAccessibleIndexInParent): Likewise.
+
+2006-04-19 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JProgressBar.java
+ (paramString): Reimplemented.
+
+2006-04-19 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JButton.java: Updated API docs all over.
+
+2006-04-19 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Toolkit.java
+ (getDefaultToolkit): Use system classloader to load the
+ toolkit.
+
+2006-04-19 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (DefaultCaret.Bypass.setDot): Call DefaultCaret.setDotImpl
+ instead of DefaultCaret.setDot.
+
+2006-04-19 Roman Kennke <kennke@aicas.com>
+
+ * native/jni/java-net/local.c
+ (local_read): Handle EINTR correctly.
+ (local_write): Likewise.
+
+2006-04-19 Riccardo Mottola <multix@gmail.com>
+
+ PR classpath/27062, PR classpath/25650:
+ * native/fdlibm/ieeefp.h: Check for _POWER and _IBMR2.
+
+2006-04-19 Tom Tromey <tromey@redhat.com>
+
+ * java/text/SimpleDateFormat.java (formatWithAttribute): Take absolute
+ value of 'pureMinutes'. PR classpath/27189.
+
+2006-04-19 Olivier Jolly <olivier.jolly@pcedev.com>
+
+ * vm/reference/java/lang/VMClassLoader.java (getBootPackages): Loads
+ boot packages list from the META-INF/INDEX.LIST file if it exists.
+
+2006-04-19 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ Suggested by Stephen White <stephen-gnu-crypto@randomstuff.org.uk>
+ * gnu/javax/crypto/prng/IPBE.java: Updated documentation.
+ (ITERATION_COUNT): Removed modifiers.
+ (PASSWORD): Likewise.
+ (SALT): Likewise.
+ (PASSWORD_ENCODING): New property.
+ (DEFAULT_PASSWORD_ENCODING): New constant.
+ * gnu/javax/crypto/prng/PBKDF2.java (setup): Check for MAC's raw key
+ material (bytes) before a password (chars).
+
+2006-04-19 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JMenu.java
+ (getAccessibleChildrenCount): Marked as stub,
+ (getAccessibleChild): Likewise,
+ (getAccessibleSelection): Likewise,
+ (getAccessibleSelection(int)): Likewise,
+ (isAccessibleChildSelected): Likewise,
+ (getAccessibleSelectionCount): Likewise,
+ (addAccessibleSelection): Likewise,
+ (removeAccessibleSelection): Likewise,
+ (clearAccessibleSelection): Likewise,
+ (selectAllAccessibleSelection): Likewise.
+
+2006-04-19 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSplitPane.java
+ (getAccessibleContext): Added API docs,
+ (paramString): Reimplemented,
+ (setOrientation): Updated API docs,
+ (setResizeWeight): Added argument checking and event notification.
+
+2006-04-18 Casey Marshall <csm@gnu.org>
+
+ Fixes PR classpath/25673
+ * java/security/KeyStore.java (getDefaultType): return "gkr" if no
+ property is set. Update JavaDoc to reflect this.
+
+2006-04-18 Lillian Angel <langel@redhat.com>
+
+ * gnu/xml/dom/DomDocument.java
+ (setCheckingCharacters): New function used to set
+ checkingCharacters flag.
+ * gnu/xml/dom/html2/DomHTMLParser.java
+ (parseDocument): Added call to set checkingCharacters flag
+ to false.
+
+2006-04-18 Lillian Angel <langel@redhat.com>
+
+ * gnu/xml/dom/DomDocument.java
+ (checkNCName): Reverted last patch. Added check for colon at
+ last position back in.
+
+2006-04-18 Robert Schuster <robertschuster@fsfe.org>
+
+ * examples/gnu/classpath/examples/swing/NavigationFilterDemo.java:
+ New file.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (mkMenuBar): Added NavigationFilter demo.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSeparator.java: Updated API docs all over, plus
+ (setOrientation): Fire PropertyChangeEvent,
+ (paramString): Reimplemented.
+
+2006-04-18 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java: Implemented.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JPanel.java: Updated API docs all over, plus
+ (JPanel(LayoutManager, boolean)): Pass on null layout, set
+ double-buffer flag.
+
+2006-04-18 Robert Schuster <robertschuster@fsfe.org>
+
+ * examples/gnu/classpath/examples/swing/DocumentFilterDemo.java:
+ New file.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (mkMenuBar): Added DocumenFilter demo.
+
+2006-04-18 Tom Tromey <tromey@redhat.com>
+
+ * doc/www.gnu.org/include/layout.wml: Add FMJ.
+
+2006-04-18 Mark Wielaard <mark@klomp.org>
+
+ Reported by John Sullivan (johns@fsf.org)
+ * doc/www.gnu.org/stories.wml: Update JikesRVM location.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JInternalFrame.java
+ (JDesktopIcon.getAccessibleContext): Added API docs,
+ (getDefaultCloseOperation): Likewise,
+ (paramString): Added 'title' attribute,
+ (setDefaultCloseOperation): Added API docs.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSlider.java
+ (paramString): Reimplemented.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JComboBox.java
+ (paramString): Reimplemented,
+ (getAccessibleContext): Added API docs,
+ (AccessibleJComboBox.getAccessibleRole): Likewise.
+
+2006-04-18 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/RepaintManager.java
+ (dirtyComponentsWork): New field.
+ (ComponentComparator): Use dirtyComponentsWork instead of
+ dirtyComponents.
+ (RepaintManager): Initialize new field.
+ (paintDirtyRegions): Swap dirtyComponents with dirtyComponentsWork
+ and work on the copy.
+
+2006-04-18 Roman Kennke <kennke@aicas.com>
+
+ * gnu/java/awt/peer/swing/SwingComponentPeer.java
+ (setBounds): Call reshape().
+ * gnu/java/awt/peer/swing/SwingContainerPeer.java
+ (SwingContainerPeer): Changed argument to be a Component
+ instead a Container.
+ (getInsets): Call insets().
+ (handleMouseEvent): Added null check to avoid NPE.
+ (handleMouseMotionEvent): Added null check to avoid NPE.
+
+2006-04-18 Roman Kennke <kennke@aicas.com>
+
+ PR 27185
+ * javax/swing/JComponent.java
+ (paintChildrenWithOverlap): When one child is not opaque, propagate
+ the dirty rectangles to the next child.
+ (paintChildrenOptimized): Removed unnecessary 'optimization'.
+ This actually didn't work right and probably gained nothing.
+
+2006-04-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (getCallRect): Do not cache rectangles.
+ (moveToCellBeingEdited): Do not clone the rectangle here.
+
+2006-04-18 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicSliderUI.java
+ (getActionMap): Fixed lookup key,
+ (createActionMap): Modified actions to fetch slider/ui from the event
+ source.
+
+2006-04-17 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JToolBar.java
+ (AccessibleJToolBar.AccessibleJToolBar()): Updated API docs,
+ (AccessibleJToolBar.getAccessibleStateSet): Implemented,
+ (AccessibleJToolBar.getAccessibleRole): Updated API docs,
+ (getAccessibleContext): Likewise.
+
+2006-04-17 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Enum.java: Documented.
+
+2006-04-17 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * NEWS:
+ Mention merge of instrumentation classes.
+ * doc/vmintegration.texinfo:
+ Move instrumentation to correct section.
+
+2006-04-17 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * gnu/java/lang/InstrumentationImpl.java:
+ Moved from java.lang.
+ * java/lang/InstrumentationImpl.java:
+ Removed.
+ * vm/reference/gnu/java/lang/VMInstrumentationImpl.java:
+ Moved from java.lang.
+ * vm/reference/java/lang/VMClassLoader.java:
+ Corrected reference to InstrumentationImpl.
+ * vm/reference/java/lang/VMInstrumentationImpl.java:
+ Removed.
+
+2005-12-14 Nicolas Geoffray <nicolas.geoffray@menlina.com>
+
+ * vm/reference/java/lang/VMClassLoader
+ (defineClassWithTransformers): New method.
+ (instrumenter): New Field.
+
+2005-12-04 Nicolas Geoffray <nicolas.geoffray@menlina.com>
+
+ * vm/reference/java/lang/VMInstrumentationImpl.java
+ (redefineClasses): Added an extra parameter of type
+ java.lang.instrument.Instrument.
+ * java/lang/InstrumentationImpl.java
+ (redefineClasses): Added the Instrumentation object
+ to the arguments of VMInstrumentationImpl.redefineClasses
+ call.
+
+2005-12-03 Nicolas Geoffray <nicolas.geoffray@menlina.com>
+
+ * java/lang/InstrumentationImpl.java:
+ New file.
+ * vm/reference/java/lang/VMInstrumentationImpl.java:
+ New file.
+
+2006-04-17 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/util/Collection.java: Implemented java.lang.Iterable.
+
+2006-04-17 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/Boolean.java: Implemented Comparable.
+ * java/lang/ClassLoader.java
+ (getResources): Not final anymore in 1.5.
+ * java/lang/Enum.java, java/lang/Iterable.java:
+ Copied from generics branch.
+ * java/lang/Thread.java (destroy): Marked deprecated.
+ * java/lang/ThreadLocal.java (remove): New method.
+
+2006-04-17 Dalibor Topic <robilad@kaffe.org>
+
+ * configure.ac:
+ Added CLASSPATH_CONVENIENCE substitution for convenience library LDFLAGS.
+
+ * native/fdlibm/Makefile.am,
+ native/jni/classpath/Makefile.am:
+ Don't use -module and -version-info for convenience libraries LDFLAGS.
+ Fixes libtool warnings.
+
+2006-04-17 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicComboBoxUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicComboPopup.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicLabelUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicListUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicMenuBarUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicMenuUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicOptionPaneUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicPopupMenuUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicScrollBarUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicScrollPaneUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicSplitPaneUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicTableHeaderUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicTableUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise,
+ * javax/swing/plaf/basic/BasicToolBarUI.java:
+ (installKeyboardActions): Marked as stub,
+ (uninstallKeyboardActions): Likewise.
+
+2006-04-17 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicSliderUI.java
+ (installKeyboardActions): Implemented,
+ (uninstallKeyboardActions): Implemented,
+ (scrollByBlock): Accept any value for direction,
+ (scrollByUnit): Likewise,
+ (getInputMap): New method,
+ (getActionMap): New method,
+ (createActionMap): New method.
+
+2006-04-17 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/annotation/Annotation.java:
+ Documented.
+
+2005-06-09 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/reflect/AnnotatedElement.java: Documented.
+
+2005-01-07 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/reflect/AnnotatedElement.java:
+ Added import of java.lang.annotation.Annotation
+
+2004-08-26 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/reflect/AnnotatedElement.java: New file.
+
+2004-08-07 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/annotation/Annotation.java: New file.
+
+2005-12-13 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/instrument/ClassDefinition.java: Reformatted.
+ * java/lang/instrument/UnmodifiableClassException.java: Reformatted.
+ * java/lang/instrument/IllegalClassFormatException.java: Reformatted.
+
+2005-12-13 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/instrument/ClassDefinition.java (ClassDefinition): Now
+ public.
+
+2005-12-05 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/instrument/Instrumentation.java (redefineClasses): Javadoc
+ fix.
+ * java/lang/instrument/ClassFileTransformer.java (transform): Javadoc
+ fix.
+
+2005-12-03 Nicolas Geoffray <nicolas.geoffray@menlina.com>
+
+ * java/lang/instrument: New directory.
+ * java/lang/instrument/ClassDefinition.java:
+ New file.
+ * java/lang/instrument/ClassFileTransformer.java:
+ New file.
+ * java/lang/instrument/IllegalClassFormatException.java:
+ New file.
+ * java/lang/instrument/Instrumentation.java:
+ New file.
+ * java/lang/instrument/UnmodifiableClassException.java:
+ New file.
+
+2006-04-16 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * doc/vmintegration.texinfo:
+ Fix sectioning.
+
+2006-04-16 Tom Tromey <tromey@redhat.com>
+
+ * native/jni/java-net/Makefile.am (AM_CFLAGS): Removed --save-temps.
+
+2006-04-16 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * NEWS:
+ Mention generics additions to the VM interface.
+ * doc/vmintegration.texinfo:
+ Added information on VMClass 1.5 additions and
+ VMSecureRandom.
+
+2006-04-16 Casey Marshall <csm@gnu.org>
+
+ * NEWS: add an entry mentioning local socket support.
+
+2006-04-16 Casey Marshall <csm@gnu.org>
+
+ * configure.ac (--enable-local-sockets): new enable argument.
+ (ENABLE_LOCAL_SOCKETS): new define.
+ * native/jni/java-net/Makefile.am (local_sources): new variable.
+ (lib_javanet_la_SOURCES): append `local_sources.'
+ * native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c,
+ * native/jni/java-net/local.c,
+ * native/jni/java-net/local.h,
+ * include/gnu_java_net_local_LocalSocketImpl.h,
+ * gnu/java/net/local/LocalServerSocket.java,
+ * gnu/java/net/local/LocalSocket.java,
+ * gnu/java/net/local/LocalSocketAddress.java,
+ * gnu/java/net/local/LocalSocketImpl.java: new files.
+
+2006-04-15 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * javax/accessibility/AccessibleAction.java:
+ (DECREMENT): Added field.
+ (INCREMENT): Likewise.
+ (TOGGLE_EXPAND): Likewise.
+ * javax/accessibility/AccessibleRole.java:
+ (EDITBAR): Added field.
+ (FOOTER): Likewise.
+ (HEADER): Likewise.
+ (PARAGRAPH): Likewise.
+ (PROGRESS_MONITOR): Likewise.
+ (RULER): Likewise.
+ * javax/accessibility/AccessibleState.java:
+ (INDETERMINATE): Added field.
+ (MANAGES_DESCENDANTS): Likewise.
+ (TRUNCATED): Likewise.
+ * vm/reference/java/lang/reflect/Constructor.java:
+ Fixed copyright header to match generics branch.
+ * vm/reference/java/lang/reflect/Field.java:
+ Fixed copyright header to match generics branch.
+ (toGenericString()): Ported from generics branch.
+ (getGenericType()): Likewise.
+ (getSignature()): Likewise.
+
+2006-04-14 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (getBypass): New method.
+ (moveDot): Rewritten.
+ (moveDotImpl): New method.
+ (setDot): Rewritten.
+ (setDotImpl): New method.
+ (DefaultCaret.Bypass): New class.
+
+2006-04-14 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/AbstractDocument.java:
+ (getBypass): New method.
+ (insertString): Rewritten.
+ (remove): Rewritten.
+ (replace): Rewritten.
+ (insertStringImpl): New method.
+ (removeImpl): New method.
+ (replaceImpl): New method.
+ (AbstractDocument.Bypass): New class.
+
+2006-04-14 Casey Marshall <csm@gnu.org>
+
+ Fixes PR classpath/24642
+ * NEWS: add note about SecureRandom changes, and addition of
+ VMSecureRandom.
+ * java/security/SecureRandom.java (isSeeded): new field.
+ (setSeed, setSeed): set `isSeeded' to `true.'
+ (nextBytes): seed this instance if `isSeeded' is false.
+ (getSeed): call `generateSeed.'
+ (SECURERANDOM_SOURCE, JAVA_SECURITY_EGD, logger): new constants.
+ (generateSeed, generateSeed): new methods.
+ * vm/reference/java/security/VMSecureRandom.java: new file.
+
+2006-04-14 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/FieldView.java:
+ (paint): Apply clipping rectangle of the allocation area
+ before painting the text.
+ * javax/swing/text/DefaultHighlighter.java:
+ (DefaultHighlighter.DefaultHighlightPainter): Use SwingUtilities to
+ compute union and intersection, calculate intersection with allocation
+ area before painting, adjust x and width when painting multiple lines
+ by the range of the allocation area.
+
+2006-04-14 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultHighlighter.java:
+ (paintLayeredHighlights): Marked as stub.
+
+2006-04-14 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextFieldUI.java:
+ (propertyChanged): Added note, change color only if current background
+ is a ColorUIResource instance.
+
+2006-04-14 Tom Tromey <tromey@redhat.com>
+
+ * java/beans/beancontext/BeanContextSupport.java (hasNext): No longer
+ a stub.
+ (next): Likewise.
+
+2006-04-14 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/JComboBox.java (AccessibleJComboBox): Now public.
+
+2006-04-14 Mark Wielaard <mark@klomp.org>
+
+ * java/lang/Thread.java (getUncaughtExceptionHandler): Return
+ thread group when exceptionHandler isn't set.
+ * vm/reference/java/lang/VMThread.java (run): Use result of
+ thread.getUncaughtExceptionHandler directly.
+
+2006-04-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSplitPane.java
+ (AccessibleJSplitPane.getAccessibleStateSet): Implemented,
+ (AccessibleJSplitPane.getAccessibleRole): Implemented,
+ (AccessibleJSplitPane.getAccessibleValue): Implemented,
+ (AccessibleJSplitPane.getCurrentAccessibleValue): Implemented,
+ (AccessibleJSplitPane.setCurrentAccessibleValue): Implemented,
+ (AccessibleJSplitPane.getMinimumAccessibleValue): Implemented,
+ (AccessibleJSplitPane.getMaximumAccessibleValue): Implemented.
+
+2006-04-13 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * gnu/javax/crypto/assembly/Assembly.java,
+ * gnu/javax/crypto/assembly/Cascade.java,
+ * gnu/javax/crypto/assembly/CascadeStage.java,
+ * gnu/javax/crypto/assembly/CascadeTransformer.java,
+ * gnu/javax/crypto/assembly/Direction.java,
+ * gnu/javax/crypto/assembly/LoopbackTransformer.java,
+ * gnu/javax/crypto/assembly/ModeStage.java,
+ * gnu/javax/crypto/assembly/Operation.java,
+ * gnu/javax/crypto/assembly/PaddingTransformer.java,
+ * gnu/javax/crypto/assembly/Stage.java,
+ * gnu/javax/crypto/assembly/Transformer.java,
+ * gnu/javax/crypto/cipher/Square.java,
+ * gnu/javax/crypto/jce/cipher/AESSpi.java,
+ * gnu/javax/crypto/jce/cipher/ARCFourSpi.java,
+ * gnu/javax/crypto/jce/cipher/AnubisSpi.java,
+ * gnu/javax/crypto/jce/cipher/BlowfishSpi.java,
+ * gnu/javax/crypto/jce/cipher/CipherAdapter.java,
+ * gnu/javax/crypto/jce/cipher/DESSpi.java,
+ * gnu/javax/crypto/jce/cipher/KhazadSpi.java,
+ * gnu/javax/crypto/jce/cipher/NullCipherSpi.java,
+ * gnu/javax/crypto/jce/cipher/PBES2.java,
+ * gnu/javax/crypto/jce/cipher/RijndaelSpi.java,
+ * gnu/javax/crypto/jce/cipher/SerpentSpi.java,
+ * gnu/javax/crypto/jce/cipher/SquareSpi.java,
+ * gnu/javax/crypto/jce/cipher/TripleDESSpi.java,
+ * gnu/javax/crypto/jce/cipher/TwofishSpi.java,
+ * gnu/javax/crypto/jce/mac/HMacMD2Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacMD4Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacMD5Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacSHA160Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacSHA256Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacSHA384Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacSHA512Spi.java,
+ * gnu/javax/crypto/jce/mac/HMacTigerSpi.java,
+ * gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java,
+ * gnu/javax/crypto/jce/mac/MacAdapter.java,
+ * gnu/javax/crypto/jce/mac/TMMH16Spi.java,
+ * gnu/javax/crypto/jce/mac/UHash32Spi.java,
+ * gnu/javax/crypto/jce/mac/UMac32Spi.java,
+ * gnu/javax/crypto/key/dh/DiffieHellmanSender.java,
+ * gnu/javax/crypto/key/srp6/SRP6TLSServer.java,
+ * gnu/javax/crypto/keyring/PrivateKeyEntry.java,
+ * gnu/javax/crypto/mode/IAuthenticatedMode.java,
+ * gnu/javax/crypto/pad/WrongPaddingException.java,
+ * gnu/javax/crypto/prng/ICMGenerator.java,
+ * gnu/javax/crypto/prng/IPBE.java,
+ * gnu/javax/crypto/prng/PBKDF2.java,
+ * gnu/javax/crypto/sasl/ConfidentialityException.java,
+ * gnu/javax/crypto/sasl/IllegalMechanismStateException.java,
+ * gnu/javax/crypto/sasl/srp/IALG.java,
+ * gnu/javax/crypto/sasl/srp/SRPServer.java:
+ Remove CVS revision tags.
+
+2006-04-13 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTreeUI.java (getPreferredSize):
+ Removed debugging code.
+
+2006-04-13 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTree.java (getPreferredSize): Return the
+ cloned instance.
+ * javax/swing/ViewportLayout.java (layoutContainer):
+ Do not manage the view size and location if the view is
+ in the scroll pane. Also manage size and location for
+ Scrollable, if it is not in the scroll pane.
+ * javax/swing/plaf/basic/BasicTreeUI.java,
+ * javax/swing/tree/FixedHeightLayoutCache.java,
+ * javax/swing/tree/VariableHeightLayoutCache.java: Rewritten.
+ * gnu/javax/swing/tree/GnuPath.java: New file.
+
+2006-04-13 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JToolBar.java
+ (AccessibleJToolBar.getAccessibleStateSet): Marked as stub.
+
+2006-04-13 Robert Schuster <robertschuster@fsfe.org>
+
+ * examples/gnu/classpath/examples/swing/TextAreaDemo.java:
+ (createCustomColoredPanel): Set background color as demo intends,
+ changed custom selection color to red.
+ * examples/gnu/classpath/examples/swing/TextFieldDemo.java:
+ Replaced various single variables with a Compound instance, added
+ custom highlighter demo.
+ (TextFieldDemo.DemoHighlightPainter): New class (taken from
+ TextAreaDemo).
+ (TextFieldDemo.Compound): New class.
+ (createTextFieldCompound): New method.
+ (createLeftAlignedPanel): Rewritten.
+ (createRightAlignedPanel): Rewritten.
+ (createCenteredPanel): Rewritten.
+ (createCustomColoredPanel): Removed.
+ (createCustomColoredPanel1): New method.
+ (createCustomColoredPanel2): New method.
+ (createCustomBordersPanel): New method.
+ (createMiscPanel): Rewritten.
+ (actionPerformed): Rewritten.
+ (createContent): Add panels of new compounds to main panel, put
+ main panel in a JScrollPane.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (Demo): Put desktop in a scrollpane.
+ (mkMenuBar): Check availability of MetalLookAndFeel.getCurrentTheme()
+ method via reflection.
+
+2006-04-13 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/metal/MetalDesktopIconUI.java
+ (createUI): Return new instance rather than shared instance.
+
+2006-04-13 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/FieldView.java:
+ (checkContainer): Call updateVisibility() at the end.
+
+2006-04-13 Robert Schuster <robertschuster@fsfe.org>
+
+ * java/awt/event/MouseEvent.java:
+ (paramString): Add value of 'consumed' variable in string.
+
+2006-04-13 Robert Schuster <robertschuster@fsfe.org>
+
+ PR 26967
+ * javax/swing/JTextField.java: Removed scrollOffset variable.
+ (JTextField): Moved up initialization of horizontalVisibility field.
+ (getScrollOffset): Implemented.
+ (setScrollOffset): Implemented.
+ (getHorizonztalVisibility): Removed note.
+ (scrollRectToVisible): New method.
+ * javax/swing/text/FieldView.java: Added cachedSpan variable.
+ (checkContainer): New method.
+ (updateVisibility): New method.
+ (calculateHorizontalSpan): New method.
+ (adjustAllocation): Removed unneeded local variables, added code
+ to handle scrolling.
+ (getPreferredSpan): Use new method calculateHorizontalSpan,
+ avoid calculation by returning cached value cachedSpan.
+ (paint): Added check whether the hosted component is a JTextField.
+ (insertUpdate): Invalidate cached span value, update visibility
+ if neccessary.
+ (removeUpdate): Dito.
+ (changeUpdate): Dito.
+
+2006-04-13 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JInternalFrame.java
+ (setTitle): Set old value to 'this.title', not 'title'.
+
+2006-04-13 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JInternalFrame.java
+ (AccessibleJInternalFrame.getAccessibleName): Implemented,
+ (AccessibleJInternalFrame.getAccessibleRole): Implemented,
+ (AccessibleJInternalFrame.getAccessibleValue): Implemented,
+ (AccessibleJInternalFrame.getCurrentAccessibleValue): Implemented,
+ (AccessibleJInternalFrame.getMaximumAccessibleValue): Implemented,
+ (AccessibleJInternalFrame.getMinimumAccessibleValue): Implemented,
+ (AccessibleJInternalFrame.setCurrentAccessibleValue): Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.getAccessibleRole): Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.getAccessibleValue): Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.getCurrentAccessibleValue):
+ Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.getMaximumAccessibleValue):
+ Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.getMinimumAccessibleValue):
+ Implemented,
+ (JDesktopIcon.AccessibleJDesktopIcon.setCurrentAccessibleValue):
+ Implemented,
+ (JInternalFrame()): Use "" for default title,
+ (getAccessibleContext): Updated API docs,
+ (getDesktopIcon): Likewise,
+ (getLayer): Check for layer in client properties, and return
+ DEFAULT_LAYER if no setting is found,
+ (getTitle): Updated API docs,
+ (setDesktopIcon): Fire property change event.
+
+2006-04-13 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/ScrollPaneLayout.java (layoutContainer):
+ Mind that the presence of one scroll bar may cause the
+ need for another.
+
+2006-04-12 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/REToken.java(unicodeAware): New field,
+ (toLowerCase, toUpperCase): New methods.
+ * gnu/regexp/RETokenBackRef.java, gnu/regexp/RETokenChar.java,
+ gnu/regexp/RETokenNamedProperty.java, gnu/regexp/RETokenRange.java:
+ Use toLowerCase and toUpperCase defined in REToken instead of
+ those defined in java.lang.Character.
+ * gnu/regexp/gnu/regexp/RE.java(REG_ICASE_USASCII): New flag.
+ (initialize): Sets unicodeAware of the generated REToken to false if
+ REG_ICASE_USASCII is set.
+ * gnu/regexp/RETokenChar.java(constructor): Don't convert the character
+ to lower case and keep the original value.
+ (matchOneString): Use the new method charEquals to compare characters.
+ (charEquals): New method to compare characters.
+ * java/util/regex/Pattern.java: Sets the flag REG_ICASE_USASCII to true.
+
+2006-04-12 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/event/InternalFrameEvent.java:
+ (paramString): Implemented,
+ updated API docs all over.
+
+2006-04-12 Casey Marshall <csm@gnu.org>
+
+ * gnu/javax/crypto/prng/Fortuna.java (setup): call `fillBlock.'
+ (Generator.setup): call `fillBlock.'
+
+2006-04-12 Casey Marshall <csm@gnu.org>
+
+ Fixes PR classpath/24481.
+ * gnu/java/security/jce/prng/SecureRandomAdapter.java (<init>):
+ initialize the adaptee.
+ (setSeed): call `addRandomBytes;' don't re-initialize the adaptee.
+ * gnu/java/security/prng/MDGenerator.java (addRandomByte,
+ addRandomBytes): new methods.
+
+2006-04-12 Tom Tromey <tromey@redhat.com>
+
+ * java/io/DataOutputStream.java (writeUTF): Correctly handle zero
+ length strings.
+
+2006-04-12 Lillian Angel <langel@redhat.com>
+
+ * gnu/xml/dom/DomDocument.java
+ (checkNCName): Removed unneeded part of check.
+ * gnu/xml/dom/DomNode.java
+ (dispatchEvent): Added code to grow ancestors array
+ if needed. Changed checks to use depth of node instead.
+ Fixes an infinite loop and segmentation fault.
+ * gnu/xml/dom/html2/DomHTMLParser.java
+ (handleEndTag): No need to use/make a copy of the node.
+ Causes an infinite loop.
+
+2006-04-12 Tom Tromey <tromey@redhat.com>
+
+ PR classpath/27131:
+ * java/util/BitSet.java (get): Early return if to==from.
+
+2006-04-12 Mark Wielaard <mark@klomp.org>
+
+ * java/security/SecureRandom.java (algorithm): New private field.
+ (SecureRandom): Initialize algorithm.
+ (SecureRandom(SecureRandomSpi,Provider,String)): New private
+ constructor.
+ (getInstance): Call 3 argument constructor.
+ (getAlgorithm): New method.
+
+2006-04-12 Mark Wielaard <mark@klomp.org>
+
+ Port UncaughtExceptionHandler support from generics branch.
+ * NEWS: Document Thread.UncaughtExceptionHandler VMThread change.
+
+2006-04-12 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Thread.java:
+ (setUncaughtExceptionHandler(UncaughtExceptionHandler):
+ Added docs and security check.
+ (getUncaughtExceptionHandler()): Documented.
+ (setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler):
+ Added docs and security check.
+ (getDefaultUncaughtExceptionHandler()): Documented.
+ (getId()): Documented.
+
+2006-04-12 Tom Tromey <tromey@redhat.com>
+
+ * vm/reference/java/lang/VMThread.java (run): Use thread's
+ uncaught handler.
+ * java/lang/Thread.java (defaultHandler): New field.
+ (setDefaultUncaughtExceptionHandler,
+ getDefaultUncaughtExceptionHandler, setUncaughtExceptionHandler,
+ getUncaughtExceptionHandler): New methods.
+ * java/lang/ThreadGroup.java (ThreadGroup): Implements
+ UncaughtExceptionHandler.
+ (uncaughtException): Use getDefaultUncaughtExceptionHandler.
+
+2006-04-11 Bryce McKinlay <mckinlay@redhat.com>
+
+ * java/io/DataOutputStream.java (writeUTF): Re-use fixed length byte
+ buffer. Loop only once to determine Utf8 length when possible. Make
+ the inner loop bounded by buf.length.
+ (getUTFlength): New private method.
+ (buf): New private field.
+
+2006-04-11 Lillian Angel <langel@redhat.com>
+
+ * gnu/xml/dom/DomNodeIterator.java
+ (nextNode): Moved line of code to avoid an infinite loop.
+ * gnu/xml/dom/html2/DomHTMLAppletElement.java
+ (getCls): New function.
+ (setCls): Likewise.
+ (getSrc): Likewise.
+ (setSrc): Likewise.
+ * gnu/xml/dom/html2/DomHTMLDocument.java:
+ Added DomHTMLEmbedElement to map.
+ (getApplets): Added node name, 'embed'.
+ * gnu/xml/dom/html2/DomHTMLEmbedElement.java:
+ New class.
+ * gnu/xml/dom/html2/DomHTMLObjectElement.java
+ (getJavaCode): New function.
+ (setJavaCode): Likewise.
+ (getObject): Likewise.
+ (setObject): Likewise.
+ (getJavaObject): Likewise.
+ (setJavaObject): Likewise.
+ (getJavaArchive): Likewise.
+ (setJavaArchive): Likewise.
+ (getJavaCodeBase): Likewise.
+ (setJavaCodeBase): Likewise.
+ (getJavaType): Likewise.
+ (setJavaType): Likewise.
+ (setMayscript): Likewise.
+ (getMayscript): Likewise.
+ (setScriptable): Likewise.
+ (getScriptable): Likewise.
+ * gnu/xml/dom/html2/DomHTMLParser.java
+ (parseDocument): Should not check for well formedness
+ when parsing an html document.
+ * java/awt/Window.java
+ (dispatchEvent): Added check to avoid NPE.
+
+2006-04-10 Tom Tromey <tromey@redhat.com>
+
+ * javax/accessibility/AccessibleStreamable.java (getStream): Fixed
+ name.
+ * javax/accessibility/AccessibleRelation.java (EMBEDS): Fixed value.
+ (SUBWINDOW_OF, SUBWINDOW_OF_PROPERTY): Likewise.
+
+2006-04-10 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (getNextVisualPositionFrom): Marked as stub.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicLookAndFeel.java
+ (initSystemColorDefaults): Changed to use loadSystemColorDefaults
+ and create the defaults as strings constants.
+ (loadSystemColors): Implemented stubbed method.
+
+2006-04-10 Tom Tromey <tromey@redhat.com>
+
+ * .settings/org.eclipse.core.resources.prefs: Set encoding for
+ ChangeLog.
+
+2006-04-10 Tom Tromey <tromey@redhat.com>
+
+ * java/io/CharArrayWriter.java (append): Javadoc fix.
+ (append): Likewise.
+
+2006-04-10 Tom Tromey <tromey@redhat.com>
+
+ * javax/accessibility/AccessibleTextSequence.java: New file.
+ * javax/accessibility/AccessibleRelation.java (CHILD_NODE_OF): New
+ field.
+ (CHILD_NODE_OF_PROPERTY, EMBEDDED_BY, EMBEDDED_BY_PROPERTY, EMBEDS,
+ EMBEDS_PROPERTY, FLOWS_FROM, FLOWS_FROM_PROPERTY, FLOWS_TO,
+ FLOWS_TO_PROPERTY, PARENT_WINDOW_OF, PARENT_WINDOW_OF_PROPERTY,
+ SUBWINDOW_OF, SUBWINDOW_OF_PROPERTY): Likewise.
+ * javax/accessibility/AccessibleExtendedText.java: New file.
+ * javax/accessibility/AccessibleContext.java
+ (ACCESSIBLE_COMPONENT_BOUNDS_CHANGED): New field.
+ (ACCESSIBLE_INVALIDATE_CHILDREN): Likewise.
+ (ACCESSIBLE_TEXT_ATTRIBUTES_CHANGED): Likewise.
+ * javax/accessibility/AccessibleAttributeSequence.java: New file.
+ * javax/accessibility/AccessibleStreamable.java: New file.
+ * javax/accessibility/AccessibleText.java (getIndexAtPoint): Javadoc
+ fix.
+
+2006-04-10 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/AbstractLayoutCache.java
+ (getNodeDimensions, getRowsForPath): Implemented.
+ * javax/swing/tree/FixedHeightLayoutCache.java: Rewritten.
+ * javax/swing/tree/VariableHeightLayoutCache.java: Rewritten.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/tree/AbstractLayoutCache.java: Reformatted.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JInternalFrame.java
+ (AccessibleJInternalFrame): Marked all stubbed methods as such
+ by adding throws NotImplementedException.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JFileChooser.java
+ (getAccessibleContext): Don't create a new instance on each
+ call, instead store the accessible context in the
+ accessibleContext field.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComboBox.java
+ (AccessibleJComboBox): Marked all stubbed methods as such
+ by adding throws NotImplementedException.
+
+2006-04-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/ActionMap.java
+ (readObject): Removed.
+ (writeObject): Removed.
+
+2006-04-10 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/DefaultTreeSelectionModel.java
+ (addSelectionPaths, setSelectionPaths): Call
+ insureUniqueness. (clone, setRowMapper): Implemented.
+ * TreePath (path): Marked final.
+
+2006-04-10 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/tree/DefaultTreeSelectionModel.java:
+ Documented and autoformatted. (insureUniqueness):
+ Removed stub marking.
+
+2006-04-09 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/SizeSequence.java
+ (sizes): Don't initialise here,
+ (SizeSequence(int, int)): Initialise sizes field,
+ (SizeSequence(int[])): Clone argument instead of calling setSizes(),
+ (setSize): Do nothing when index is out of bounds,
+ (getIndex): Implemented,
+ (setSizes): Reimplemented,
+ (getSizes): Likewise,
+ (insertEntries): Likewise,
+ (removeEntries): Likewise,
+ plus added API docs all over.
+
+2006-04-09 Audrius Meskauskas <AudriusA@Bioinformatics.org
+
+ * gnu/CORBA/gnuRequest.java (submit): Do not read any response after
+ one way message and retry after any IOException.
+
+2006-04-09 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/CORBA/CDR/EncapsulationStream.java (constructor):
+ Set the byte order.
+
+2006-04-09 Wolfgang Baer <WBaer@gmx.de>
+
+ * org/omg/PortableServer/ServantLocatorPOA.java:
+ (preinvoke, postinvoke): Remove default implementation.
+ * org/omg/PortableServer/ServantActivatorPOA.java:
+ (incarnate, etherealize): Remove default implementation.
+ * org/omg/PortableInterceptor/ObjectReferenceFactory.java:
+ Extends from ValueBase and not from ObjectReferenceFactoryOperations.
+ (make_object): Moved method from ObjectReferenceFactoryOperations.
+ * org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java:
+ Removed unspecified interface.
+ * org/omg/DynamicAny/_DynAnyStub.java:
+ (_DynAnyStub(Delegate)): Removed constructor.
+ * org/omg/DynamicAny/_DynArrayStub.java,
+ * org/omg/DynamicAny/_DynAnyFactoryStub.java,
+ * org/omg/DynamicAny/_DynEnumStub.java,
+ * org/omg/DynamicAny/_DynFixedStub.java,
+ * org/omg/DynamicAny/_DynSequenceStub.java,
+ * org/omg/DynamicAny/_DynStructStub.java,
+ * org/omg/DynamicAny/_DynUnionStub.java,
+ * org/omg/DynamicAny/_DynValueStub.java:
+ Extend from ObjectImpl and not from _DynAnyStub.
+ (type, next, destroy, copy, rewind, assign, component_count,
+ current_component, equal, from_any, get_any, get_boolean, get_char,
+ get_double, get_dyn_any, get_float, get_long, get_longlong, get_octet,
+ get_reference, get_short, get_string, get_typecode, get_ulong,
+ get_ulonglong, get_ushort, get_val, get_wchar, get_wstring, insert_any,
+ insert_boolean, insert_char, insert_double, insert_dyn_any, insert_float,
+ insert_long, insert_longlong, insert_octet, insert_reference,
+ insert_short, insert_string, insert_typecode, insert_ulong,
+ insert_ulonglong, insert_ushort, insert_val, insert_wchar,
+ insert_wstring, seek, to_any): New methods copied from _DynAnyStub.
+ * org/omg/CosNaming/_BindingIteratorStub.java:
+ (_BindingIteratorStub(Delegate)): Made package private.
+ * org/omg/CosNaming/_NamingContextExtStub.java:
+ (_NamingContextExtStub(Delegate)): Made package private.
+ * org/omg/CosNaming/_NamingContextStub.java:
+ (_NamingContextStub(Delegate)): Made package private.
+ (throw4, throw5): Likewise.
+ * gnu/CORBA/NamingService/NameParser.java (resolve):
+ Adapt to package private constructor. Use _set_delegate instead.
+ * org/omg/CosNaming/NamingContextOperations.java: Do not extend IDLEntity.
+ * org/omg/CORBA/ORB.java:
+ (create_recursive_sequence_tc): Made abstract.
+ (get_default_context): Likewise.
+ * gnu/CORBA/OrbRestricted.java:
+ (create_recursive_sequence_tc): New moved method.
+ (get_default_context): Likewise.
+ * org/omg/CORBA/ParameterMode.java:
+ (PARAM_IN, PARAM_OUT, PARAM_INOUT): Made final.
+
+2006-04-09 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/CORBA/GIOP/MessageHeader.java (write):
+ More informative exception.
+ * gnu/CORBA/IorDelegate.java (release): Do not close the socket.
+ * gnu/CORBA/SocketRepository.java (get_socket):
+ Removed debugging code.
+
+2006-04-09 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/CORBA/gnuRequest.java (submit): Try to read the response for the
+ one way message, but ignore if EOF was received.
+ * gnu/CORBA/GIOP/MessageHeader.java (read): Set the minor code to
+ Minor.EOF if the end of file is received instead of the header.
+
+2006-04-09 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalRootPaneUI.java
+ (MetalTitlePane.IconifyAction): New inner class.
+ (MetalTitlePane.MaximizeAction): New inner class.
+ (MetalTitlePane.createActions): Create iconifyAction and
+ maximizeAction.
+ (MetalRootLayout.titlePane): New field.
+ (MetalRootLayout.MetalRootLayout): Take titlePane parameter in
+ constructor.
+ (MetalRootLayout.preferredLayoutSize): Changed to not make
+ assumptions about the actual component order.
+ (MetalRootLayout.layoutContainer): Changed to not make
+ assumptions about the actual component order.
+ (installWindowDecorations): Pass the titlePane as parameter to
+ the MetalRootLayout constructor.
+ (uninstallWindowDecorations): Changed to not make
+ assumptions about the actual component order.
+
+2006-04-08 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalRootPaneUI.java
+ (MetalTitlePane.MouseHandler): New inner class to handle dragging
+ of frames.
+ (MetalTitlePane.installListeners): Don't register a focus listener
+ on the window. This is a potential memory leak and must be
+ implemented on a different way. Install mouse listener here.
+ (installWindowDecorations): Fixed assertion condition. Always
+ insert the window decoration at index#1 in the layered
+ pane.
+
+2006-04-08 Roman Kennke <kennke@aicas.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+ (Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked):
+ Only resize window if actual width or height value changes.
+ Avoids nasty flicker when only setLocation() is beeing called
+ on a window.
+
+2006-04-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/CORBA/GIOP/MessageHeader.java (read): Throw more informative
+ exception if the magic sequence does not match.
+
+2006-04-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/CORBA/gnuRequest.java (p_invoke, submit): Do not try to read
+ response for the one way messages.
+
+2006-04-08 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/MenuSelectionManager.java
+ (processKeyEvent): Implemented stub method.
+ * javax/swing/JMenu.java
+ (processKeyEvent): Implemented stub method.
+ * javax/swing/JMenu.java
+ (processKeyEvent): Implemented stub method.
+ (processMenuKeyEvent): Implemented stub method.
+
+2006-04-08 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractAction.java
+ (readObject): Removed unneeded method.
+ (writeObject): Removed unneeded method.
+
+2006-04-08 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/swing/plaf/synth/SynthPainter.java:
+ (paintSplitPaneDividerBorder): Removed.
+
+2006-04-08 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java:
+ (CLOSE_CMD, ICONIFY_CMD, MAXIMIZE_CMD, MOVE_CMD, RESTORE_CMD, SIZE_CMD):
+ No longer constants.
+ (static_initializer): Added to initialize above fields.
+ * javax/accessibility/AccessibleRelation.java (LABEL_FOR, LABELED_BY,
+ MEMBER_OF, CONTROLLER_FOR, CONTROLLED_BY): No longer constants.
+ (static_initializer): Added to initialize above fields.
+
+2006-04-08 Wolfgang Baer <WBaer@gmx.de>
+
+ * java/awt/Dialog.java: Improved documentation all over.
+ (Dialog(Frame)): If gc is null use the owners GraphicsConfiguration.
+ (Dialog(Dialog)): Likewise.
+
+2006-04-08 Mark Wielaard <mark@klomp.org>
+
+ * java/util/jar/JarFile.java (provider): New static field.
+ (verify, verifyHashes, EntryInputStream.<init>): Pass provider
+ to `getInstance.'
+
+2006-04-08 Mark Wielaard <mark@klomp.org>
+
+ PR 27081
+ * java/lang/StackTraceElement.java (toString): Don't add space
+ between type and source indicator.
+
+2006-04-07 Casey Marshall <csm@gnu.org>
+
+ Fixes PR classpath/24464
+ * java/util/jar/JarFile.java (verify, verifyHashes,
+ EntryInputStream.<init>): pass the Gnu provider directly to
+ `getInstance.'
+
+2006-04-08 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ PR classpath/27071
+ * gnu/java/security/hash/Whirlpool.java: Updated documentation.
+ (DIGEST0): Use version 3 test vector.
+ (Sd): Removed.
+ (S_box): New field: Version 3 S-box values.
+ (<clinit>): Use Version 3 circulant matrix to construct lookup tables.
+ (transform): Formating.
+ (padBuffer): Likewise.
+ (getResult): Likewise.
+ (selfTest): Likewise.
+
+2006-04-07 Tom Tromey <tromey@redhat.com>
+
+ * java/util/InvalidPropertiesFormatException.java
+ (serialVersionUID): New field.
+ (readObject, writeObject): New methods.
+ * java/util/Arrays.java (toString): Javadoc fixes.
+ * java/net/URLConnection.java: Cleaned up imports.
+ * java/lang/reflect/ParameterizedType.java: Javadoc fix.
+ * java/lang/reflect/MalformedParameterizedTypeException.java
+ (serialVersionUID): New field.
+ * java/lang/reflect/GenericSignatureFormatError.java
+ (serialVersionUID): New field.
+ * java/lang/Class.java (Class): Javado fixes.
+ (getComponentType): Likewise.
+ (getGenericInterfaces): Likewise.
+ (getTypeParameters): Likewise.
+ * java/io/CharArrayWriter.java (append): Javadoc fixes.
+ * java/lang/annotation/AnnotationFormatError.java (serialVersionUID):
+ New field.
+ * java/lang/TypeNotPresentException.java (serialVersionUID): New
+ field.
+ * java/lang/EnumConstantNotPresentException.java (serialVersionUID):
+ New field.
+
+2006-04-07 Wolfgang Baer <WBaer@gmx.de>
+
+ * java/awt/Dialog.java
+ (AccessibleAWTDialog): Added api docs
+ (AccessibleAWTDialog.getAccessibleStateSet):
+ Renamed from getAccessibleState.
+ * java/awt/Frame.java
+ (AccessibleAWTFrame): Added api docs
+ (AccessibleAWTFrame.getAccessibleStateSet):
+ Renamed from getAccessibleState.
+
+2006-04-07 Wolfgang Baer <WBaer@gmx.de>
+
+ * java/awt/Dialog.java: Reformatted.
+
+2006-04-07 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Component.java
+ (eventTypeEnabled): Added code for HierarchyEvent.HIERARCHY_CHANGED,
+ HierarchyEvent.ANCESTOR_MOVED and HierarchyEvent.ANCESTOR_RESIZED.
+
+2006-04-07 Tom Tromey <tromey@redhat.com>
+
+ * java/beans/beancontext/BeanContextMembershipEvent.java
+ (serialVersionUID): New field.
+ * java/beans/beancontext/BeanContextServicesSupport.java
+ (addBeanContextServicesListener): Synchronize.
+ (addService): Implemented.
+ (createBCSChild): Implemented.
+ (BCSSChild): Added arguments.
+ (fireServiceAdded): Implemented.
+ (fireServiceRevoked): Implemented.
+ (getCurrentServiceSelectors): Implemented.
+ (hasService): Implemented.
+ (removeBeanContextServicesListener): Implemented.
+ (serviceAvailable): Implemented.
+ (serviceRevoked): Implemented.
+ * java/beans/beancontext/BeanContextSupport.java (BCSChild): Added
+ arguments.
+ (createBCSChild): Implemented.
+ (BeanContextSupport):
+ (addBeanContextMembershipListener): Synchronize.
+ (fireChildrenAdded): Implemented.
+ (fireChildrenRemoved): Implemented.
+ (BeanContextSupport): Use default locale.
+ (isEmpty): Implemented.
+ (isDesignTime): Implemented.
+ (size): Implemented.
+ (toArray): Synchronized.
+ (toArray): Likewise.
+ (iterator): Likewise.
+ (BCSIterator): Implemented.
+ (bcsChildren): Implemented.
+ (validatePendingAdd): Implemented.
+ (validatePendingRemove): Likewise.
+ (childJustAddedHook): Implemented.
+ (childJustRemovedHook): Likewise.
+ (classEquals): Likewise.
+ (toArray): Mark as stub.
+ (setDesignTime): Implemented.
+ (copyChildren): Implemented.
+ (containsKey): Implemented.
+ (contains): Likewise.
+ (containsAll): Likewise.
+ (getResource): Implemented.
+ (getResourceAsStream): Likewise.
+ (removeBeanContextMembershipListener): Likewise.
+ * java/beans/beancontext/BeanContextServiceRevokedEvent.java
+ (serialVersionUID): New field.
+ * java/beans/beancontext/BeanContextServiceAvailableEvent.java
+ (serialVersionUID): New field.
+ * java/beans/beancontext/BeanContext.java (instantiateChild): Javadoc
+ fix.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ PR 26937
+ * javax/swing/MenuSelectionManager.java
+ (setSelectedPath): Search one more item in the loop.
+
+2006-04-06 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/image/renderable/RenderableImageProducer.java
+ (image, context, consumers): New fields.
+ (RenderableImageProducer): Implemented.
+ (setRenderContext): Likewise.
+ (addConsumer): Likewise.
+ (isConsumer): Likewise.
+ (removeConsumer): Likewise.
+ (startProduction): Likewise.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Component.java
+ (AccessibleAWTComponent.getBounds): Return the component
+ bounds regardless of its showing state.
+ (AccessibleAWTComponent.getLocation): Return the component
+ location regardless of its showing state.
+ (AccessibleAWTComponent.getSize): Return the component
+ size regardless of its showing state.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JRootPane.java
+ (getAccessibleContext): New method. Provides an accessibleContext
+ for JRootPanes.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Toolkit.java
+ (initAccessibility): Use the 'gnu.classpath.home.url' property
+ to determine the system confiuration directory.
+ * java/awt/Component.java
+ (dispatchEvent): Trigger Toolkit dispatching here.
+ (dispatchEventImpl): Moved Toolkit dispatching to dispatchEvent,
+ so it can't be overridden by subclasses and is performed in
+ any case.
+
+2006-04-06 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/naming/Binding.java: Added API docs.
+ * javax/naming/NameClassPair.java: Added API docs.
+ (fullName): New field.
+ (setNameInNamespace): New 1.5 method.
+ (getNameInNamespace): Likewise.
+
+2006-04-06 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/naming/CompositeName.java:
+ (readObject): New deserialization method.
+ (writeObject): New serialization method.
+
+2006-03-29 Nektarios K. Papadopoulos <npapadop at inaccessnetworks.com>
+
+ * javax/security/auth/x500/X500Principal.java
+ (readAttributeValue) Check for separator after quoted value was
+ failing in all cases.
+
+2006-04-06 Mark Wielaard <mark@klomp.org>
+
+ * java/lang/Class.java (getClassLoader): Don't do security check
+ when loader is null.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Toolkit.java
+ (getDefaultToolkit): Initialize accessibility after setting
+ up the toolkit.
+ (initAccessibility): New helper method to setup accessibility.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractButton.java
+ (AccessibleAbstractButton.getAccessibleIcon): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleRelationSet): Implemented
+ stub.
+ (AccessibleAbstractButton.getIndexAtPoint): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleIcon): Implemented stub.
+ (AccessibleAbstractButton.getCharacterBounds): Implemented stub.
+ (AccessibleAbstractButton.getCharCount): Implemented stub.
+ (AccessibleAbstractButton.getCaretPosition): Implemented stub.
+ (AccessibleAbstractButton.getCharacterAttribute): Implemented stub.
+ (AccessibleAbstractButton.getSelectionStart): Implemented stub.
+ (AccessibleAbstractButton.getSelectionEnd): Implemented stub.
+ (AccessibleAbstractButton.getSelectedText): Implemented stub.
+ (AccessibleAbstractButton.getTextRectangle): Removed unneeded
+ private method.
+
+2006-04-06 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Component.java
+ (AccessibleAWTComponent.getAccessibleStateSet): Don't handle opaque
+ state here. This is only done in JComponent.
+ * javax/swing/JComponent.java
+ (AccessibleJComponent.getAccessibleStateSet): Handle opaque flag
+ here.
+ (getNextFocusableComponent): Implemented stub method.
+ (grabFocus): Implemented stub method.
+ (unregisterKeyboardAction): Implemented stub method.
+ (setNextFocusableComponent): Implemented stub method.
+ * javax/swing/CompatibilityFocusTraversalPolicy.java: New file.
+ This is a helper class for providing compatibility with the older
+ Swing focus API.
+
+2006-04-06 Wolfgang Baer <WBaer@gmx.de>
+
+ Fixes bug #26995
+ * javax/naming/directory/BasicAttribute.java,
+ * javax/naming/directory/BasicAttributes.java:
+ (readObject): New deserialization method.
+ (writeObject): New serialization method.
+
+2006-04-06 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/xml/validation/SchemaFactory.java: Corrected since tag.
+ (getErrorHandler): Made method abstract.
+ (setErrorHanlder): Likewise.
+ * gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java
+ (getErrorHandler): Implement abstract method from superclass.
+ (setErrorHandler): Likewise.
+ (errorHandler): New field.
+ * gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java:
+ (getErrorHandler): Implement abstract method from superclass.
+ (setErrorHandler): Likewise.
+ (errorHandler): New field.
+ * javax/xml/XMLConstants.java: Corrected since tag.
+ (XMLConstants): Added private constructor.
+ * javax/xml/datatype/Duration.java: Corrected since tag.
+ (multiply): Made method abstract.
+ * javax/xml/datatype/DatatypeConstants.java: Corrected since tag.
+ (DatatypeConstants): Added private constructor.
+ * javax/xml/xpath/XPathConstants.java: Corrected since tag.
+ (XPathConstants): Added private constructor.
+
+2006-04-05 Tom Tromey <tromey@redhat.com>
+
+ * javax/security/auth/kerberos/ServicePermission.java: Now final.
+
+2006-04-05 Tom Tromey <tromey@redhat.com>
+
+ PR libgcj/26625:
+ * lib/Makefile.am (compile-classes): Touch the output file.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractButton.java
+ (AccessibleAbstractButton.getAccessibleStateSet): Removed handling
+ of the focused state. This is already done in AccessibleAWTComponent.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComponent.java
+ (accessibleContext): Fixed API doc for this field.
+ (AccessibleJComponent.AccessibleFocusHandler): Fixed API docs.
+ (AccessibleJComponent.AccessibleFocusHandler.focusGained):
+ Implemented and added API docs.
+ (AccessibleJComponent.AccessibleFocusHandler.focusLost):
+ Implemented and added API docs.
+ (AccessibleJComponent.AccessibleContainerHandler): Fixed API docs.
+ (AccessibleJComponent.AccessibleContainerHandler.componentAdded):
+ Implemented and added API docs.
+ (AccessibleJComponent.AccessibleContainerHandler.componentRemoved):
+ Implemented and added API docs.
+ (AccessibleJComponent.accessibleContainerHandler): Added API docs.
+ (AccessibleJComponent.accessibleFocusHandler): Added API docs.
+ (AccessibleJComponent.addPropertyChangeListener): Added API docs.
+ (AccessibleJComponent.removePropertyChangeListener): Added API docs.
+ (AccessibleJComponent.getAccessibleStateSet): Simply return
+ super here. Added comment about this.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComponent.java
+ (AccessibleJComponent.addPropertyChangeListener): Install
+ ContainerHandler and FocusHandler here.
+ (AccessibleJComponent.removePropertyChangeListener): Uninstall
+ ContainerHandler and FocusHandler here.
+ (AccessibleJComponent.getAccessibleChildrenCount): Replaced
+ by super.getAccessibleChildrenCount().
+ (AccessibleJComponent.getAccessibleChild): Replaced
+ by super.getAccessibleChild().
+ (AccessibleJComponent.getAccessibleStateSet): Implemented by
+ adding OPAQUE to the supported states.
+ (AccessibleJComponent.getAccessibleName): Added titled border
+ and label fallbacks.
+ (AccessibleJComponent.getAccessibleDescription): Added tooltip
+ and label fallbacks.
+ (AccessibleJComponent.getAccessibleRole): Removed TODO.
+ (AccessibleJComponent.getAccessibleKeyBinding): Added comment
+ explaining why return null seems correct here.
+ * javax/swing/JLabel.java
+ (LABEL_PROPERTY): New constant.
+ (setLabelFor): Store label in labeled component's client properties
+ for the AccessibleJComponent to read.
+
+2006-04-05 Tom Tromey <tromey@redhat.com>
+
+ * java/util/zip/ZipFile.java (available): Defer to super if
+ entry's size is unknown.
+
+2006-04-05 Tom Tromey <tromey@redhat.com>
+
+ * java/net/MimeTypeMapper.java (MimeTypeMapper): Look for system
+ property with mime.types name.
+ * gnu/classpath/SystemProperties.java: Set
+ gnu.classpath.mime.types.file if not already set.
+ * java/net/URLConnection.java (defaultFactory): New field.
+ (guessContentTypeFromStream): Mark as unimplemented.
+ (getContentHandler): Updated with libgcj's implementation.
+ * gnu/java/net/DefaultContentHandlerFactory.java: New file,
+ from libgcj.
+
+2006-04-05 Bryce McKinlay <mckinlay@redhat.com>
+
+ PR classpath/27028
+ PR classpath/24752
+ * java/util/AbstractList.java (hasNext): Don't throw
+ ConcurrentModificationException. Update Javadoc.
+ (hasPrevious): Likewise.
+ (nextIndex): Likewise.
+ (previousIndex): Likewise.
+ * java/util/HashMap.java (hasNext): Likewise.
+ * java/util/Hashtable.java (hasNext): Likewise.
+ * java/util/IdentityHashMap.java (hasNext): Likewise.
+ * java/util/LinkedHashMap.java (hasNext): Likewise.
+ * java/util/LinkedList.java (nextIndex): Likewise.
+ (previousIndex): Likewise.
+ (hasNext): Likewise.
+ (hasPrevious): Likewise.
+ * java/util/TreeMap.java (hasNext): Likewise.
+ * java/util/WeakHashMap.java (hasNext): Likewise.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractButton.java
+ (AccessibleAbstractButton.getAccessibleStateSet): Implemented stub.
+ (AccessibleAbstractButton.doAccessibleAction): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleAction): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleActionCount): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleActionDescription):
+ Implemented stub.
+ (AccessibleAbstractButton.getAccessibleText): Implemented stub.
+ (AccessibleAbstractButton.getAccessibleAction): Implemented stub.
+ (AccessibleAbstractButton.getCurrentAccessibleValue): Implemented stub.
+ (AccessibleAbstractButton.setCurrentAccessibleValue): Implemented stub.
+ (AccessibleAbstractButton.getMinimumAccessibleValue): Implemented stub.
+ (AccessibleAbstractButton.getMaximumAccessibleValue): Implemented stub.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComboBox.java
+ (selectWithKeyChar): Implemented stubbed method.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/LookAndFeel.java
+ (installProperty): New method. Allows primitive typed properties
+ to be handled like UIResources.
+ * javax/swing/AbstractButton.java
+ (clientBorderPaintedSet): New field.
+ (clientRolloverEnabledSet): New field.
+ (clientIconTextGapSet): New field.
+ (clientContentAreaFilledSet): New field.
+ (setRolloverEnabled): Set the client field to true.
+ (setBorderPainted): Likewise.
+ (setIconTextGap): Likewise.
+ (setContentAreaFilled): Likewise.
+ (setUIProperty): New helper method.
+ * javax/swing/JComponent.java
+ (clientOpaqueSet): New field.
+ (clientAutoscrollsSet): New field.
+ (setAutoscrolls): Set the client field to true.
+ (setOpaque): Likewise.
+ (setUIProperty): New helper method.
+ * javax/swing/JDesktopPane.java
+ (clientDragModeSet): New field.
+ (setDragMode): Set the client field to true.
+ (setUIProperty): New helper method.
+ * javax/swing/JSplitPane.java
+ (clientDividerSizeSet): New field.
+ (clientOneTouchExpandableSet): New field.
+ (setDividerSize): Set the client field to true.
+ (setOneTouchExpandable): Likewise.
+ (setUIProperty): New helper method.
+ * javax/swing/JTable.java
+ (clientRowHeightSet): New field.
+ (setRowHeight): Set the client field to true.
+ (setUIProperty): New helper method.
+ * javax/swing/JTree.java
+ (clientRowHeightSet): New field.
+ (clientScrollsOnExpandSet): New field.
+ (clientShowsRootHandlesSet): New field.
+ (setRowHeight): Set the client field to true.
+ (setShowsRootHandles): Likewise.
+ (setScrollsOnExpand): Likewise.
+ (setUIProperty): New helper method.
+
+2006-04-05 Roman Kennke <kennke@aicas.com>
+
+ * java/awt/Component.java
+ (getFont): Don't request the font from the peer's graphics. The
+ graphics should instead get the font from the Component, which might
+ result in a loop.
+ (getFocusCycleAncestor): Don't special case Window.
+ (nextFocus): Moved implementation from the DefaultKeyboardFocusManager
+ to here. Correctly determine the focus cycle root.
+ (transferFocusBackward): Likewise.
+ (transferFocusUpCycle): Likewise.
+ * java/awt/Container.java
+ (transferFocusDownCycle): Moved implementation from
+ DefaultKeyboardFocusManager to here.
+ * java/awt/DefaultKeyboardFocusManager.java
+ (focusPreviousComponent): Moved implementation to
+ Component.transferFocusBackward().
+ (focusNextComponent): Moved implementation to
+ Component.nextFocus().
+ (upFocusCycle): Moved implementation to
+ Component.transferFocusUpCycle().
+ (downFocusCycle): Moved implementation to
+ Container.transferFocusDownCycle().
+
+2006-04-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/ComponentSampleModel.java
+ (equals): Implemented,
+ (hashCode): Likewise.
+
+2006-04-05 Jeroen Frijters <jeroen@frijters.net>
+
+ * java/lang/Class.java
+ (cast): New method.
+
+2006-04-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/ComponentSampleModel.java
+ (getBankIndices): Return a copy of the array, not a reference to the
+ original,
+ (getBandOffsets): Likewise.
+
+2006-04-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/ComponentSampleModel.java: Added API docs all over.
+
+2006-04-04 Tom Tromey <tromey@redhat.com>
+
+ * java/net/MimeTypeMapper.java (MimeTypeMapper): Fixed indices.
+
+2006-04-04 Tom Tromey <tromey@redhat.com>
+
+ * java/net/MimeTypeMapper.java (mime_types): No longer static.
+ (MimeTypeMapper): Initialize.
+ (fillFromFile): New method.
+ (main): New method.
+ (mime_strings): Updated.
+
+2006-04-04 Tom Tromey <tromey@redhat.com>
+
+ * lib/gen-classlist.sh.in: Correct handle generated files.
+
+2006-04-04 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/CharIndexed.java(setAnchor): New method.
+ * gnu/regexp/CharIndexedInputStream.java(setAnchor): New method.
+ * gnu/regexp/CharIndexedCharSequence.java: New file.
+ * gnu/regexp/CharIndexedCharArray.java: Rewritten as an extention of
+ gnu.regexp.CharIndexedCharSequence.
+ * gnu/regexp/CharIndexedString.java: Likewise.
+ * gnu/regexp/CharIndexedStringBuffer.java: Likewise.
+ * gnu/regexp/RE.java(makeCharIndexed): Make a new CharIndexed
+ using CharIndexedCharSequence. Use setAnchor when the input
+ object is already a CharIndexed.
+ * java/util/regex/Matcher.java(inputCharIndexed): New field
+ to be used as a parameter of the RE#getMatch.
+
+2006-04-04 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/SampleModel.java: Reformatted.
+
+2006-04-04 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/ComponentSampleModel.java
+ (ComponentSampleModel(int, int, int, int, int[])): Added API
+ documentation,
+ (ComponentSampleModel(int, int, int, int, int[], int[]): Throw
+ IllegalArgumentException for DataBuffer.TYPE_UNDEFINED, take copies
+ of the bandOffsets and bankIndices arguments, added API documentation,
+ * java/awt/image/SampleModel.java
+ (SampleModel(int, int, int, int): Throw IllegalArgumentException for
+ unrecognised dataTypes, w * h exceeds Integer.MAX_VALUE, and numBands
+ less than or equal to zero, added API documentation.
+
+2006-04-04 Lillian Angel <langel@redhat.com>
+
+ * java/util/zip/ZipFile.java
+ (getInputStream): Fixed to return size of ZipEntry
+ minus the total bytes read. This guarantees that the
+ right value is returned even if some bytes have already
+ been read.
+
+2006-04-04 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGImageWriteParam.java (messages):
+ Remove static modifier.
+
+2006-04-04 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/image/ComponentSampleModel.java: Reformatted.
+
+2006-04-03 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGImageWriteParam.java: New file.
+ * javax/imageio/plugins/jpeg/JPEGImageReadParam.java: Add
+ retrieval instructions to javadoc header.
+ * javax/imageio/ImageWriteParam.java: Fix javadoc for
+ compressionType field.
+ * lib/Makefile.am (propertydirs): Add javax directory.
+ (propertyfiles): Likewise.
+ * resource/javax/imageio/plugins/jpeg/MessagesBundle.properties:
+ New file.
+
+2006-04-03 Tom Tromey <tromey@redhat.com>
+
+ PR classpath/26971:
+ * javax/naming/directory/BasicAttribute.java: Added missing @since.
+ (BasicAttributeEnumeration.where): Initialize to 0.
+ (BasicAttributeEnumeration.nextElement): Post-increment 'where'.
+
+2006-04-03 Lillian Angel <langel@redhat.com>
+
+ PR classpath/24596 and PR classpath/26930
+ * java/util/zip/ZipFile.java
+ (getInputStream): Override available function for
+ InflaterInputStream instance.
+
+2006-04-03 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * gnu/java/lang/reflect/ClassSignatureParser.java,
+ * gnu/java/lang/reflect/FieldSignatureParser.java,
+ * gnu/java/lang/reflect/GenericSignatureParser.java,
+ * gnu/java/lang/reflect/MethodSignatureParser.java,
+ * gnu/java/lang/reflect/TypeImpl.java,
+ * java/lang/Class.java,
+ * java/lang/reflect/GenericDeclaration.java,
+ * java/lang/reflect/MalformedParameterizedTypeException.java,
+ * java/lang/reflect/TypeVariable.java,
+ * java/util/Arrays.java,
+ * vm/reference/java/lang/VMClass.java,
+ * vm/reference/java/lang/reflect/Constructor.java,
+ * vm/reference/java/lang/reflect/Method.java:
+ Incorporate changes from the generics branch.
+
+2005-10-01 Jeroen Frijters <jeroen@frijters.net>
+
+ * vm/reference/java/lang/reflect/Constructor.java
+ (getSignature): New method.
+ (getGenericExceptionTypes): New method.
+ (getGenericParameterTypes): New method.
+ * vm/reference/java/lang/reflect/Method.java
+ (getSignature): New method.
+ (getGenericExceptionTypes): New method.
+ (getGenericParameterTypes): New method.
+ (getGenericReturnType): New method.
+
+2005-09-30 Jeroen Frijters <jeroen@frijters.net>
+
+ * gnu/java/lang/reflect/FieldSignatureParser.java: New file.
+ * gnu/java/lang/reflect/ClassSignatureParser.java,
+ gnu/java/lang/reflect/GenericSignatureParser.java,
+ gnu/java/lang/reflect/MethodSignatureParser.java:
+ Finished implementation.
+
+2005-09-25 Jeroen Frijters <jeroen@frijters.net>
+
+ * gnu/java/lang/reflect/ClassSignatureParser.java,
+ gnu/java/lang/reflect/GenericSignatureParser.java,
+ gnu/java/lang/reflect/MethodSignatureParser.java: New files.
+ * java/lang/Class.java
+ (getGenericInterfaces, getGenericSuperclass, getTypeParameters):
+ Implemented.
+ * vm/reference/java/lang/VMClass.java
+ (getSimpleName, getDeclaredAnnotations, getCanonicalName,
+ getEnclosingClass, getEnclosingConstructor, getEnclosingMethod,
+ isAnonymousClass, isLocalClass, isMemberClass):
+ Removed generic types from signatures.
+ (getGenericInterfaces, getGenericSuperclass, getTypeParameters):
+ Removed.
+ (getClassSignature): New method.
+ * vm/reference/java/lang/reflect/Constructor.java
+ (getTypeParameters): Implemented.
+ * vm/reference/java/lang/reflect/Method.java
+ (getTypeParameters, getSignature): New methods.
+
+2005-06-09 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Class.java:
+ (asSubclass(Class)): Documented.
+ (getCanonicalName()): Implemented.
+ (getEnclosingClass()): Implemented.
+ (getEnclosingConstructor()): Implemented.
+ (getEnclosingMethod()): Implemented.
+ (getGenericInterfaces()): Implemented.
+ (getGenericSuperclass()): Implemented.
+ (getTypeParameters()): Implemented.
+ (isAnonymousClass()): Implemented.
+ (isLocalClass()): Implemented.
+ (isMemberClass()): Implemented.
+ * vm/reference/java/lang/VMClass.java:
+ (getSuperClass(Class<?>)): Updated return type.
+ (getSimpleName(Class<?>)): Use VM methods directly.
+ (getCanonicalName(Class<?>)): Implemented.
+ (getEnclosingClass(Class<?>)): New native method.
+ (getEnclosingConstructor(Class<?>)): New native method.
+ (getEnclosingMethod(Class<?>)): New native method.
+ (getGenericInterfaces(Class<?>)): New native method.
+ (getGenericSuperclass(Class<?>)): New native method.
+ (getTypeParameters(Class<T>)): New native method.
+ (isAnonymousClass(Class<?>)): New native method.
+ (isLocalClass(Class<?>)): New native method.
+ (isMemberClass(Class<?>)): New native method.
+ * vm/reference/java/lang/reflect/Constructor.java:
+ (getTypeParameters()): Changed to native method.
+
+2005-05-05 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Class.java:
+ (getSimpleName()): Implemented.
+ * vm/reference/java/lang/VMClass.java:
+ (getSimpleName()): Reference implementation.
+
+2005-04-20 Tom Tromey <tromey@redhat.com>
+
+ * java/util/Arrays.java (hashCode): New methods.
+ (deepHashCode): New method.
+ (deepEquals): Likewise.
+ (toString): New methods.
+ (deepToString): New method.
+
+2005-04-04 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Class.java:
+ (isEnum()): New method implemented.
+ (isSynthetic()): New method implemented.
+ (isAnnotation()): New method implemented.
+ * vm/reference/java/lang/VMClass.java:
+ (isEnum()): New native method.
+ (isSynthetic()): New native method.
+ (isAnnotation()): New native method.
+
+2005-03-21 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/lang/Class.java:
+ Implements java.lang.reflect.Type
+
+2006-04-03 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGImageReadParam.java: New file.
+
+2006-04-03 Tom Tromey <tromey@redhat.com>
+
+ * javax/security/auth/kerberos/ServicePermission.java: New file.
+ * javax/security/auth/kerberos/DelegationPermission.java: New file.
+ * javax/security/auth/kerberos/KerberosKey.java: New file.
+ * javax/security/auth/kerberos/KeyImpl.java: New file.
+ * javax/security/auth/kerberos/KerberosTicket.java: New file.
+ * javax/security/auth/kerberos/KerberosPrincipal.java: New file.
+
+2006-04-03 Sven de Marothy <sven@physto.se>
+
+ * gnu/java/awt/peer/gtk/GtkClipboard.java: Add support for
+ non-GtkImage images.
+
+2006-04-03 Mark Wielaard <mark@klomp.org>
+
+ * lib/gen-classlist.sh.in: Use classes.tmp, not classes.2
+ as temporary file name.
+
+2006-04-03 Dalibor Topic <robilad@kaffe.org>
+
+ * INSTALL: Documented --with-glibj-zip option.
+
+2006-04-03 Dalibor Topic <robilad@kaffe.org>
+
+ Fixed all pscan warnings.
+
+ * native/jni/classpath/jcl.c (JCL_ThrowException),
+ native/jni/classpath/jcl.h (DBG),
+ native/target/generic/target_generic.h (TARGET_NATIVE_LAST_ERROR_STRING_FORMAT),
+ native/target/generic/target_generic_misc.h (TARGET_NATIVE_MISC_FORMAT_STRING0):
+ Use "%s" format in fprintf and snprintf explicitely when printing a single
+ string to prevent format string exploits.
+
+ * native/jni/java-net/javanet.h (DBG): Removed duplicate
+ definition. Included jcl.h instead.
+
+2006-04-03 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/Main.java: Removed unused imports.
+ (provider): Made it protected.
+ (providerInstalled): New field.
+ (Main): Made it a 0-arguments constructor.
+ Removed throws clasue.
+ (main): Removed throws clause.
+ Call processArgs(args) after constructing instance.
+ Call teardown() before existing.
+ (processArgs): Added javadoc.
+ Reduced to throws Exception.
+ (start): Likewise.
+ (teardown): New method.
+ (setupCommonParams): Added javadoc.
+ Install designated provider if not already installed.
+ (installNewProvider): New method.
+ (setupSigningParams): Added javadoc.
+ Instantiate the KeyStore using type only.
+ * tools/gnu/classpath/tools/jarsigner/JarSigner.java:
+ Removed unused imports.
+ (start): Reduced to throws Exception.
+ * tools/gnu/classpath/tools/jarsigner/JarVerifier.java (start): Likewise.
+ * tools/gnu/classpath/tools/jarsigner/HashUtils.java:
+ Re-organized imports.
+ * gnu/java/security/key/KeyPairGeneratorFactory.java (getInstance):
+ Test ignoring case.
+ (getNames): Add "dsa" as an algorithm provided by this Factory.
+ (makeInstance): Construct IllegalArgumentException with 2 arguments.
+
+2006-04-03 Roman Kennke <kennke@aicas.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector):
+ Replaced g_free() with pango_item_free() to avoid problems
+ with the allocator.
+
+2006-04-03 Rafael H. Schloming <rafaels@redhat.com>
+
+ Fixes bug #26668
+ * java/util/logging/Level.java (parse): Document.
+ * java/util/logging/LogManager.java (rootLogger): Removed.
+ (LogManager): Just set loggers to new HashMap.
+ (getLogManager): Make synchronized. Create and init LogManager if it
+ doesn't exist yet.
+ (static): Removed block.
+ (MANAGER_PROPERTY): New private final string.
+ (makeLogManager): Use new property string, move warning to
+ createInstance() method.
+ (CONFIG_PROPERTY): New private final string.
+ (initLogManager): New method.
+ (addLogger): Use Logger.root, not rootLogger.
+ (findAncestor): Likewise.
+ (readConfiguration): Move warning to createInstance() method.
+ Add handlers directly to Logger.root. Warn about bad level values.
+ (getClassProperty): Use new locateClass() method.
+ (getInstanceProperty): Only catch specific newInstance Errors.
+ (createInstance): Make private and takes a string to use in warning
+ messages. Use new locateClass() method and generate appropriate
+ warning message.
+ (warn): New methods.
+ (locateClass): Locates a class through the context class loader and
+ system class loader as backup.
+ * java/util/logging/Logger.java (root): New static final field.
+ (Logger): Set parent to root.
+ (setParent): Directly check root field.
+
+2006-04-02 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/Segment.java:
+ (setPosition): Make exception message more verbose.
+ * javax/swing/text/WrappedPlainView.java:
+ (insertUpdate): Removed unneeded repaint call.
+ (changeUpdate): Dito.
+ (removeUpdate): Dito.
+ (WrappedLine.determineNumLines): Do not return numLines, break
+ from loop if no new break point has been calculated.
+ (WrappedLine.updateDamage): Rewritten.
+ (WrappedLine.insertUpdate): Removed unneeded update code.
+ (WrappedLine.removeUpdate): Removed unneeded update code, added
+ comment.
+
+2006-04-02 Dalibor Topic <robilad@kaffe.org>
+
+ * configure.ac (with-glibj-zip): Added new option.
+
+ * examples/Makefile.am,
+ lib/Makefile.am,
+ tools/Makefile.am: Adapted build classpath to use glibj.zip,
+ in addition to classes in lib directory.
+
+2006-04-02 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * tools/gnu/classpath/tools/giop/GRMIC.java,
+ tools/gnu/classpath/tools/giop/IorParser.java,
+ tools/gnu/classpath/tools/giop/grmic/CompilationError.java,
+ tools/gnu/classpath/tools/giop/grmic/Generator.java,
+ tools/gnu/classpath/tools/giop/grmic/GiopIo.java,
+ tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java,
+ tools/gnu/classpath/tools/giop/grmic/HashFinder.java,
+ tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java,
+ tools/gnu/classpath/tools/rmi/RMIC.java,
+ tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java,
+ tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java,
+ tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java: Removed
+ linking exception from the licensing header.
+ * tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java:
+ Added licensing header.
+
+2006-04-02 Mark Wielaard <mark@klomp.org>
+
+ * tools/Makefile.am (bin_SCRIPTS): Renamed to jarsigner.sh.
+ (jarsigner): Removed.
+
+2006-04-02 Dalibor Topic <robilad@kaffe.org>
+
+ * configure.ac: don't check for isnan function.
+ * native/fdlibm/fdlibm.h: Always use the isnan macro.
+
+2006-04-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * configure.ac: Added tools/jarsigner.sh to AC_CONFIG_FILES.
+ * tools/Makefile.am: Generate jarsigner shell script.
+ * tools/jarsigner.sh.in: New template.
+ * tools/.cvsignore: Added jarsigner.sh.
+
+2006-04-02 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/HashUtils.java: Use GPL.
+ * tools/gnu/classpath/tools/jarsigner/SFHelper.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/JarVerifier.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/JarSigner.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/Main.java: Likewise.
+ Re-organised imports.
+
+2006-04-01 Bernhard Rosenkraenzer <bero@arklinux.org>
+
+ PR classpath/25924:
+ * java/awt/image/DirectColorModel.java (extractAndNormalizeSample):
+ Handle case where alpha==0.
+
+2006-04-02 Robert Schuster <robertschuster@fsfe.org>
+
+ PR #26676
+ * javax/swing/text/Utilities.java:
+ (getTabbedTextOffset): Added check to decrement pos not below zero,
+ changed '>' comparison to '>='.
+ * javax/swing/text/WrappedPlainView.java:
+ (lineHeight): New field.
+ (calculateBreakPosition): Throw InternalError in catch block, removed
+ unneeded brackets, use specific version of
+ Utilities.getTabbedTextOffset.
+ (paint): Set various properties neccessary for drawing.
+ (WrappedLine.paint): Removed code to set field of outer class.
+ (WrappedLine.modelToView): Removed unneeded expression from
+ if-statement.
+ (WrappedLine.viewToModel): Initialize end with endOffset - 1, removed
+ -1 from return statement, copy only a subset into the Segment, removed
+ special handling of mark value - just return it, simplified
+ incrementation of currLineStart.
+ (WrappedLine.insertUpdate): Recalculate numLines, report preference
+ change to parent view.
+ (WrappedLine.removeUpdate): Dito.
+
+2006-04-02 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/Segment.java:
+ (toString): Return empty string when array is null.
+
+2006-04-02 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (damageRange): Use SwingUtilities.computeUnion to avoid
+ unneccessary Rectangle instantiation.
+
+2006-04-01 Tom Tromey <tromey@redhat.com>
+
+ * java/security/cert/Certificate.java (serialVersionUID): Fixed.
+
+2006-04-01 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/CompositeView.java: Fixed copyright header.
+ * javax/swing/text/BoxView.java: Fixed copyright header.
+ * javax/swing/text/WrappedPlainView.java: Fixed copyright header.
+ * javax/swing/text/Utilities.java: Fixed copyright header.
+
+2006-04-01 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/CompositeView.java:
+ (modelToView): Throw BadLocationException when no child
+ view can be found, restructed to throw exception as early
+ as possible.
+ (viewToModel): Use mutable allocation as argument for viewToModel
+ call on child view.
+ * javax/swing/text/BoxView.java:
+ (getViewAtPoint): Call setBounds() r before method returns with
+ suitable child view.
+ * javax/swing/text/Utilities.java:
+ (getPositionBelow): Added try-catch-block around modelToView call,
+ added method return when BadLocationException was thrown.
+ * javax/swing/text/WrappedPlainView.java:
+ (WrappedLine.viewToModel): Changed '<=' to '<' in if-expression,
+ added note about meaning of rect.x and rect.width, removed unneeded
+ checks, added code to not return the last possible document offset.
+
+2006-04-01 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/WrappedPlainView.java:
+ (WrappedLine.viewToModel): Change < to <= in if-statement,
+ removed addition of currLineStart to return value.
+ * javax/swing/text/BoxView.java:
+ (getViewAtPoint): Use copy instead of r for method call
+ which modifies the second argument.
+
+2006-04-01 Mark Wielaard <mark@klomp.org>
+
+ Fixes PR26973
+ * java/util/jar/Attributes.java: Fully qualify java.util.Map.
+
+2006-03-31 Tom Tromey <tromey@redhat.com>
+
+ * lib/split-for-gcj.sh: Updated for multi-field format.
+ * lib/Makefile.am (CLEANFILES): Added classes.2.
+ * lib/gen-classlist.sh.in (GCJ): Removed. Create classes.1 and
+ classes.2 using multiple fields.
+
+2006-03-31 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (columnSelectionChanged):
+ Removed print statement.
+ * javax/swing/DefaultListSelectionModel.java
+ (addSelectionInterval, removeSelectionInterval):
+ Fire the difference between selection. (setLeadSelectionIndex):
+ Fire the difference and mark current and previous lead
+ selection indexes for repaint.
+
+2006-03-31 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGHuffmanTable.java: Eliminate
+ unnecessary copying.
+ * javax/imageio/plugins/jpeg/JPEGQTable.java: Likewise.
+
+2006-03-31 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Component.java
+ (translateEvent): oldKey should be the value of the
+ key char.
+
+2006-03-31 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (columnSelectionChanged):
+ Treat second repaint parameter as width.
+
+2006-03-31 Lillian Angel <langel@redhat.com>
+
+ PR classpath/26924
+ * gnu/java/awt/peer/gtk/GtkCanvasPeer.java
+ (realize): New native function.
+ * include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h:
+ Added new function declaration.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
+ (realize): New function.
+
+2006-03-31 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/GapContent.java:
+ (replace): Move all Position instances from gap's end to
+ it's start before increasing the gap start.
+ * javax/swing/plaf/basic/BasicTextAreaUI.java:
+ (propertyChanged): Update the view only instead of
+ indicating a document change.
+
+2006-03-31 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTextField.java
+ (fireActionPerformed): Put the textfields text in the action
+ instead of the action name.
+
+2006-04-01 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/Main.java (setupCommonParams):
+ Check for null jar-file argument.
+ (setupSigningParams): Check for null alias argument.
+
+2006-03-31 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComponent.java
+ (paintChildren): Split up in two cases, depending on the
+ optimizedDrawingEnabled flag.
+ (paintChildrenWithOverlap): New method. Paints children when
+ not optimizedDrawingEnabled. This implements better painting
+ algorithm for overlapping components, so that the painted
+ regions are minimized.
+ (paintChildrenOptimized): New method. Paints children when
+ when optimizedDrawingEnabled. This implements a painting
+ algorithm that is optimized for the case when all children
+ are guaranteed to be tiled.
+
+2006-03-31 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/SFHelper.java (updateEntry): Use
+ Attributes.putValue(String,String).
+ (finishSigning): Likewise.
+ * gnu/java/util/jar/JarUtils.java (MANIFEST_VERSION): New constant.
+ (SIGNATURE_VERSION): Likewise.
+ (readSFManifest): Use local string constant.
+ (readMainSection): Likewise.
+ (readVersionInfo): Likewise.
+ * java/util/jar/Attributes.java (MANIFEST_VERSION):
+ Redefined using JarUtils constant.
+ (SIGNATURE_VERSION): Likewise.
+ (putValue(Name,String)): Made it private.
+
+2006-03-31 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/DefaultListSelectionModel.java (fireDifference):
+ New method. (clearSelection): Rewritten. (setSelectionInterval):
+ Fire the difference between current and new selection.
+ * javax/swing/JTable.java (columnSelectionChanged, valueChanged):
+ Only repaint the region, where selection has been changed.
+ * javax/swing/plaf/basic/BasicTableUI.java
+ (TableAction.actionPerformed): Do not change the column selection
+ when only row selection change is wanted (and in reverse) and
+ do not call the repaint() here.
+
+2006-03-31 David Gilbert <david.gilbert@object-refinery.com>
+
+ Fixes bug #26951
+ * javax/swing/DefaultComboBoxModel.java
+ (DefaultComboBoxModel(Vector)): Call getSize() instead of
+ vector.size(),
+ (addElement): Call list.addElement() rather than list.add(), and only
+ update selected item if it is currently null,
+ (removeElementAt): Update selected item, then remove the element.
+
+2006-03-31 David Gilbert <david.gilbert@object-refinery.com>
+
+ Fixes bug #26955
+ * java/awt/geom/Point2D.java
+ (distanceSq(double, double)): Fixed order of arguments,
+ (distanceSq(Point2D)): Likewise,
+ (distance(double, double)): Likewise,
+ (distance(Point2D)): Likewise.
+
+2006-03-30 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGQTable.java: New file.
+ * javax/imageio/plugins/jpeg/JPEGHuffmanTable.java
+ (ACChrominanceLengths, ACChrominanceValues, ACLuminanceLengths,
+ ACLuminanceValues, DCChrominanceLengths, DCChrominanceValues,
+ DCLuminanceLengths, DCLuminanceValues): Remove fields.
+
+2006-03-30 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax.swing.JTable (constructor): Initialize column
+ model column margin and table row margin before setting the
+ table column model. (initialiseLocalVars): Do not call
+ setIntercellSpacing.
+
+2006-03-30 Chris Burdess <dog@gnu.org>
+
+ * javax/xml/datatype/DatatypeFactory.java (newDurationDayTime): Fix
+ method signature.
+ * javax/xml/validation/SchemaFactoryLoader.java: New file.
+
+2006-03-30 Mark Wielaard <mark@klomp.org>
+
+ PR 26848
+ * java/awt/Window.java (dispatchEventImpl): On ComponentEvents
+ adjust bounds. On resize invalidate and validate container.
+ Always pass on ComponentEvents to Container super class.
+ * gnu/java/awt/peer/gtk/GtkFramePeer.java (setBounds): Adjust for
+ menuBar and pass to GtkWindowPeer super class.
+ (postConfigureEvent): Adjust menu bar width. Adjust y and height
+ bounds and pass to GtkWindowPeer super class.
+ * gnu/java/awt/peer/gtk/GtkWindowPeer.java (x, y, width, height):
+ New fields for local bounds.
+ (getX, getY): New methods.
+ (getWidth): Don't call into awtComponent.
+ (getHeight): Likewise.
+ (create): Cache local bounds.
+ (setLocation): Documented, made protected and just call
+ nativeSetLocation.
+ (setLocationUnlocked): Removed unused method.
+ (setBoundsUnlocked): Likewise.
+ (setBounds): Check whether bounds actually changed and cache local
+ bounds.
+ (setSize): Documented and made protected.
+ (setResizable): Documented and cache local bounds.
+ (postConfigureEvent): Update local bounds. Don't call awtComponent
+ directly but post ComponentEvents.
+ (show): Cache local bounds.
+ (getBounds): Override to return cached bounds.
+
+2006-03-30 Lillian Angel <langel@redhat.com>
+
+ * gnu/java/awt/peer/gtk/GdkGraphics.java
+ (drawImage): Added check to prevent NPE.
+ (drawImage): Likewise.
+ (drawImage): Likewise.
+ * java/awt/Choice.java
+ (dispatchEventImpl): New function. selectedIndex was
+ not being updated properly otherwise.
+
+2006-03-30 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (removeTabAt): Removed debug code.
+
+2006-03-30 Roman Kennke <kennke@aicas.com>
+
+ PR 26045
+ * javax/swing/plaf/basic/BasicTextUI.java
+ (installKeyboardActions): Simply call getKeymap() and install this.
+ (createKeymap): Reimplemented to fetch a keymap from the UIManager.
+
+2006-03-30 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (removeTabAt): Adjust selection correctly when removing a tab
+ before the selected tab. Also remove the component from the
+ container, not only the tab object. Repaint and revalidate the
+ component after the removal.
+ (removeAll): Set selection to -1 before removing the tabs.
+
+2006-03-29 Lillian Angel <langel@redhat.com>
+
+ Partial fix for bug #26929
+ * gnu/java/awt/peer/gtk/GtkPanelPeer.java
+ (updateComponent): Removed. We want to clear the panel
+ before painting.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect): Fixed typo.
+ Should set the background to the saved background color.
+
+2006-03-29 Mark Wielaard <mark@klomp.org>
+
+ Partial fix for bug #26848 (pack).
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (setVisible):
+ Always show instances of Window.
+
+2006-03-29 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSlider.java
+ (setPaintLabels): Only create standard labels if labelTable is null,
+ * javax/swing/plaf/basic/BasicSliderUI.java
+ (PropertyChangeHandler.propertyChange): Recalculate geometry for
+ "paintTicks" property change,
+ (calculateThumbSize): Updated API docs,
+ (calculateContentRect): Likewise,
+ (calculateTrackBuffer): Take into account the lowest and highest
+ labels when calculating buffer space,
+ (calculateTrackRect): Include labels, if visible, in the calculation of
+ the trackRect position,
+ (calculateTickRect): Height is zero if ticks are not painted,
+ (calculateLabelRect): Use max dimensions of actual labels,
+ (getWidthOfHighValueLabel): Use preferred size,
+ (getWidthOfLowValueLabel): Likewise,
+ (getHeightOfHighValueLabel): Likewise,
+ (getHeightOfLowValueLabel): Likewise,
+ (drawInverted): Just return slider setting,
+ (getHighestValueLabel): Updated API docs,
+ (paintTicks): Removed redundant (and buggy) code, replaced with calls
+ to xPositionForValue() and yPositionForValue(),
+ (paintHorizontalLabel): Removed full qualification of class name,
+ (paintVerticalLabel): Likewise,
+ (xPositionForValue): Reimplemented,
+ (yPositionForValue): Reimplemented,
+ * javax/swing/plaf/metal/MetalSliderUI.java
+ (paintTrack): Made track one pixel longer.
+
+2006-03-29 Tom Tromey <tromey@redhat.com>
+
+ PR gcc/26901:
+ * tools/Makefile.am (JCOMPILER): Added encoding options.
+ * examples/Makefile.am (JCOMPILER): Added encoding options.
+
+2006-03-29 Gary Benson <gbenson@redhat.com>
+
+ Partial fix for PR classpath/24895
+ * java/io/FilePermission.java (implies): Canonicalize paths.
+
+2006-03-29 Robert Schuster <robertschuster@fsfe.org>
+
+ PR 26888
+ * javax/swing/text/GapContent.java:
+ (replace): Added call to resetMarksAtZero.
+
+2006-03-29 Roman Kennke <kennke@aicas.com>
+
+ PR 23527
+ * javax/swing/plaf/basic/BasicMenuItemUI.java
+ (cachedRect): New field.
+ (BasicMenuItemUI): Initialize cachedRect field.
+ (getPreferredMenuItemSize): Use layoutMenuItem() helper method
+ to determine layout. Store maximum accelerator and text width
+ in client properties of parent to allow correct alignment
+ of accelerators among menu items of one menu.
+ (paintMenuItem): Outsourced menu item layout into layoutMenuItem
+ method. Align accelerators according to the values calculated
+ in getPreferredMenuItemSize.
+ (getAcceleratorString) New helper method.
+ (layoutMenuItem): New helper method.
+
+2006-03-29 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/ActivationSystemTransient.java: Rewritten.
+ * gnu/java/rmi/activation/BidiTable.java: Rewritten.
+ * gnu/java/rmi/dgc/LeaseRenewingTask.java (constructor, sheduleLeases):
+ Avoid NPEs.
+ * gnu/java/rmi/server/ActivatableServerRef.java (getRefClass,
+ readExternal, writeExternal): New methods.
+ * gnu/java/rmi/server/UnicastRef.java (invokeCommon): Splitten into
+ two stages, invokeCommon(Remote, ...) and
+ invokeCommen(UnicastConnection, ...).
+ * java/rmi/server/RemoteObject.java (readObject, writeObject): Expect
+ also the ActivatableRef. toString(): Documented.
+ * gnu/java/rmi/server/ActivatableRef.java,
+ tools/gnu/classpath/tools/rmi/Persistent.java,
+ tools/gnu/classpath/tools/rmi/PersistentBidiHashTable.java,
+ tools/gnu/classpath/tools/rmi/PersistentHashTable.java,
+ tools/gnu/classpath/tools/rmi/REGISTRY.java,
+ tools/gnu/classpath/tools/rmi/REGISTRY.txt,
+ tools/gnu/classpath/tools/rmi/RMID.java,
+ tools/gnu/classpath/tools/rmi/RMID.txt,
+ tools/gnu/classpath/tools/rmi/registry/RegistryImpl.java,
+ tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Skel.java,
+ tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Stub.java,
+ tools/gnu/classpath/tools/rmi/registry/package.html,
+ tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl.java,
+ tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java:
+ New files.
+ * tools/README: Documented.
+ * NEWS: Added entry about the activation.
+
+2006-03-29 Roman Kennke <kennke@aicas.com>
+
+ PR 23527
+ * javax/swing/plaf/basic/BasicMenuItemUI.java
+ (viewRect): New field.
+ (textRect): New field.
+ (accelRect): New field.
+ (iconRect): New field.
+ (arrowIconRect): New field.
+ (checkIconRect): New field.
+ (BasicMenuItemUI): Initialize new fields.
+ (paintMenuItem): Rewritten to correctly layout and paint
+ the menu item in a more straightforward way. Use cached rectangle
+ objects for layout.
+ (paintAccelerator): Pulled inside the paintMenuItem method.
+
+2006-03-29 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav:
+ Do not use initCause with UnexpectedException.
+ * tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav:
+ Likewise.
+
+2006-03-29 Mark Wielaard <mark@klomp.org>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ (setCursorID): Removed unused static variable.
+
+2006-03-29 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicSliderUI.java: Reformatted.
+
+2006-03-29 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26527
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ (gtkWidgetSetCursorUnlocked): Call gdk_flush().
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/UIManager.java
+ (installLookAndFeel): Implemented.
+ (setInstalledLookAndFeels): Implemented.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalButtonUI.java
+ (update): Paint gradient only when the background color
+ is not a UIResource and if the button is neither armed nor
+ pressed and if the button is contentAreaFilled.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JLayeredPane.java
+ (addImpl): Repaint added component.
+
+2006-03-28 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * java/util/regex/Matcher.java: Reverted.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/AsyncBoxView.java
+ (setEstimatedMajorSpan): Made method protected.
+ (getEstimatedMajorSpan): Made method protected.
+ * javax/swing/text/BoxView.java
+ (flipEastAndWestAtEnds): Fixed typo.
+ * javax/swing/text/InternationalFormatter.java
+ (getActions): Made method protected.
+ * javax/swing/text/Position.java
+ (Bias): Made class final.
+ * javax/swing/text/html/HTML.java
+ (MEDIA): Made field package private. Not specified.
+ (NOBR): Made field package private. Not specified.
+ * javax/swing/text/html/NullView.java
+ Made class package private.
+ * javax/swing/text/html/parser/Entity.java
+ Made class non-serializable as specified.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalButtonUI.java
+ (update): Don't paint gradient if the background color is
+ no UIResource. Removed double getModel() call. Don't check for
+ OceanTheme.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicMenuItemUI.java
+ (paint): Call paintMenuItem with the selectionBackground as
+ parameter.
+ (paintBackground): Fixed the condition and color for the background
+ painting.
+
+2006-03-28 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ (tabsOpaque): New field.
+ (paintLeftTabBorder): Paint some parts only when the tabs are
+ opaque. Determine the tab background using the paintLeftTabBorder()
+ helper method.
+ (paintRightTabBorder): Likewise.
+ (installDefaults): Fetch tabsOpaque property from the UIDefaults.
+
+2006-03-27 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/rmi/activation/ActivationGroup_Stub.java:
+ Made final.
+
+2006-03-27 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * java/io/CharArrayWriter.java:
+ (append(char)): Documented.
+ (append(CharSequence)): Likewise.
+ (append(CharSequence,int,int)): Likewise.
+
+2006-03-27 Tom Tromey <tromey@redhat.com>
+
+ * java/io/CharArrayWriter.java (append): New overloads.
+
+2006-03-27 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeDispose):
+ Added check for colormap. Prevents assertion error.
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor):
+ Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeCopyState):
+ Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II):
+ Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage):
+ Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked):
+ Likewise.
+
+2006-03-27 Dalibor Topic <robilad@kaffe.org>
+
+ * m4/acinclude.m4 (CLASSPATH_FIND_JAVAC): Use
+ AC_MSG_ERROR instead of echoing the error message
+ that no compiler has been found manually.
+
+2006-03-27 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/RepaintManager.java
+ (commitBuffer): Use simple drawImage() method instead of the
+ scaling version.
+
+2006-03-27 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/PlainView.java:
+ (drawLine): Use 'endOffset' instead of 'selectionEnd'
+ for painting the selected line.
+
+2006-03-27 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/basic/BasicSliderUI.java
+ (getThumbSize): Removed TODO and updated API docs.
+
+2006-03-27 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (mouseClicked): Word selection rewritten.
+ (paint): Draw line inside the bounding rectangle.
+ (damage): Retrieve caret height from line height.
+
+2006-03-28 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/Main.java (processArgs): Check
+ for null args.
+ Check for -help option.
+ * tools/gnu/classpath/tools/jarsigner/jarsigner.txt: Added -help option.
+
+2006-03-27 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/FieldView.java
+ (getPreferredSpan): Don't include trailing newline in
+ calculations.
+ * javax/swing/text/PlainView.java
+ (drawLine): Don't include trailing newline.
+ (determineMaxLineLength): Don't include trailing newline.
+ (getLineBuffer): Made method final.
+
+2006-03-27 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JSlider.java
+ (AccessibleJSlider.AccessibleJSlider): Minor API doc edit,
+ (AccessibleJSlider.getAccessibleRole): Removed declaration of
+ NotImplementedException,
+ (AccessibleJSlider.getAccessibleValue): Updated API docs.
+
+2006-03-26 Tom Tromey <tromey@redhat.com>
+
+ * NEWS: Updated.
+ * vm/reference/java/lang/reflect/Method.java (METHOD_MODIFIERS):
+ New constant.
+ (getModifiersInternal): Renamed from getModifiers.
+ (getModifiers): New method.
+ (isBridge): Likewise.
+ (isSynthetic): Likewise.
+ (isVarArgs): Likewise.
+ * vm/reference/java/lang/reflect/Field.java (FIELD_MODIFIERS):
+ New constant.
+ (getModifiersInternal): Renamed from getModifiers.
+ (getModifiers): New method.
+ (isSynthetic): Likewise.
+ (isEnumConstant): Likewise.
+ * vm/reference/java/lang/reflect/Constructor.java
+ (getModifiersInternal): Renamed from getModifiers.
+ (getModifiers): New method
+ (CONSTRUCTOR_MODIFIERS): New constant.
+ (isSynthetic): New method.
+ (isVarArgs): Likewise.
+ * java/lang/reflect/Member.java (isSynthetic): New method.
+
+2006-03-26 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * gnu/java/security/jce/hash/HavalSpi.java,
+ * gnu/java/security/jce/hash/MD2Spi.java,
+ * gnu/java/security/jce/hash/MD4Spi.java,
+ * gnu/java/security/jce/hash/MD5Spi.java,
+ * gnu/java/security/jce/hash/MessageDigestAdapter.java,
+ * gnu/java/security/jce/hash/RipeMD128Spi.java,
+ * gnu/java/security/jce/hash/RipeMD160Spi.java,
+ * gnu/java/security/jce/hash/Sha160Spi.java,
+ * gnu/java/security/jce/hash/Sha256Spi.java,
+ * gnu/java/security/jce/hash/Sha384Spi.java,
+ * gnu/java/security/jce/hash/Sha512Spi.java,
+ * gnu/java/security/jce/hash/TigerSpi.java,
+ * gnu/java/security/jce/hash/WhirlpoolSpi.java,
+ * gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java,
+ * gnu/java/security/jce/sig/DSSRawSignatureSpi.java,
+ * gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java,
+ * gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java,
+ * gnu/java/security/jce/sig/SignatureAdapter.java,
+ * gnu/java/security/key/IKeyPairCodec.java,
+ * gnu/java/security/key/IKeyPairGenerator.java,
+ * gnu/java/security/key/KeyPairGeneratorFactory.java,
+ * gnu/java/security/key/dss/DSSKey.java,
+ * gnu/java/security/key/dss/DSSKeyPairRawCodec.java,
+ * gnu/java/security/key/dss/DSSPrivateKey.java,
+ * gnu/java/security/key/dss/DSSPublicKey.java,
+ * gnu/java/security/key/dss/FIPS186.java,
+ * gnu/java/security/key/rsa/GnuRSAKey.java,
+ * gnu/java/security/key/rsa/GnuRSAPrivateKey.java,
+ * gnu/java/security/key/rsa/GnuRSAPublicKey.java,
+ * gnu/java/security/sig/ISignature.java,
+ * gnu/java/security/sig/ISignatureCodec.java,
+ * gnu/java/security/sig/dss/DSSSignature.java,
+ * gnu/java/security/sig/dss/DSSSignatureRawCodec.java,
+ * gnu/java/security/sig/rsa/RSAPSSSignature.java,
+ * gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java,
+ * gnu/java/security/util/Util.java:
+ Remove CVS revision tags.
+
+2006-03-26 Tom Tromey <tromey@redhat.com>
+
+ * java/io/InputStream.java (InputStream): Implements Closeable.
+
+2006-03-26 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/CharIndexed.java(setLastMatch, getLastMatch, getAnchor):
+ New methods.
+ * gnu/regexp/CharIndexedCharArray.java(setLastMatch, getLastMatch,
+ getAnchor): New methods.
+ * gnu/regexp/CharIndexedInputStream.java(setLastMatch, getLastMatch,
+ getAnchor): New methods.
+ * gnu/regexp/CharIndexedString.java(setLastMatch, getLastMatch,
+ getAnchor): New methods.
+ * gnu/regexp/CharIndexedStringBuffer.java(setLastMatch, getLastMatch,
+ getAnchor): New methods.
+ * gnu/regexp/REMatch.java(start1): New field.
+ * gnu/regexp/RE.java(initialize): Added support for \z and \G,
+ (match): set the starting position to start1[] instead of start[],
+ (getMatchImpl): Set the found REMatch to the input,
+ (makeCharIndexed): Made public.
+ * gnu/regexp/RETokenEndOfPreviousMatch.java: New file.
+ * gnu/regexp/RETokenEndSub.java(matchThis, findMatch):
+ set the value of start[] copying from start1[].
+ * gnu/regexp/RETokenLookBehind.java(matchThis): Added the settings of
+ offset.
+ * java/util/regex/Matcher.java(inputCharIndexed): New field
+ to be used as a parameter of the RE#getMatch.
+
+2006-03-26 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/DefaultActivationGroup.java:
+ Documented the default jre spawning strategy (none).
+ * java/rmi/activation/ActivationGroup.java (currentGroupId,
+ getSystem): Obtain the acticivation system from the
+ DefaultActivationSystem.
+
+2006-03-26 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/Main.java (setupSigningParams):
+ Ask user for keystore password if one was not provided.
+
+2006-03-26 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/README: Added Security tools section.
+ Documented the jarsigner tool.
+
+2006-03-25 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JScrollBar.java
+ (AccessibleJScrollBar.getAccessibleStateSet): Implemented,
+ (AccessibleJScrollBar.getAccessibleRole): Likewise,
+ (AccessibleJScrollBar.getAccessibleValue): Likewise,
+ (AccessibleJScrollBar.getCurrentAccessibleValue): Likewise,
+ (AccessibleJScrollBar.setCurrentAccessibleValue): Likewise,
+ (AccessibleJScrollBar.getMinimumAccessibleValue): Likewise,
+ (AccessibleJScrollBar.getMaximumAccessibleValue): Likewise,
+ (getAccessibleContext): Updated API docs.
+
+2006-03-25 Tom Tromey <tromey@redhat.com>
+
+ * .externalToolBuilders/CreateLocaleData.launch: Run if resource files
+ change or if generator script changes.
+
+2006-03-25 Tom Tromey <tromey@redhat.com>
+
+ * javax/naming/ldap/StartTlsRequest.java: New file.
+ * javax/naming/ldap/StartTlsResponse.java: New file.
+
+2006-03-25 Olivier Jolly <olivier.jolly@pcedev.com>
+
+ * java/net/URLClassLoader.java (FileURLLoader.getResource): Added test
+ to validate all components of a resource path.
+ (FileURLLoader.walkPathComponents): Helper which ensures that we are
+ allowed to walk through every component of a resource path.
+
+2006-03-25 Michael Koch <konqueror@gmx.de>
+
+ * NEWS: Added item for CLDR 1.3 update.
+
+2006-03-25 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_ar_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_IQ.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_KW.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_LY.properties,
+ resource/gnu/java/locale/LocaleInformation_mn_MN.properties,
+ resource/gnu/java/locale/LocaleInformation_uz_AF.properties:
+ Removed locales.
+
+2006-03-25 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_az.properties,
+ resource/gnu/java/locale/LocaleInformation_bs.properties,
+ resource/gnu/java/locale/LocaleInformation_byn.properties,
+ resource/gnu/java/locale/LocaleInformation_byn_ER.properties,
+ resource/gnu/java/locale/LocaleInformation_el_CY.properties,
+ resource/gnu/java/locale/LocaleInformation_gez.properties,
+ resource/gnu/java/locale/LocaleInformation_gez_ER.properties,
+ resource/gnu/java/locale/LocaleInformation_gez_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_haw.properties,
+ resource/gnu/java/locale/LocaleInformation_haw_US.properties,
+ resource/gnu/java/locale/LocaleInformation_kok.properties,
+ resource/gnu/java/locale/LocaleInformation_kok_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_sid.properties,
+ resource/gnu/java/locale/LocaleInformation_sid_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_sl_SI.properties,
+ resource/gnu/java/locale/LocaleInformation_sr_BA_Cyrl.properties,
+ resource/gnu/java/locale/LocaleInformation_sr_BA_Latn.properties,
+ resource/gnu/java/locale/LocaleInformation_sr_Cyrl.properties,
+ resource/gnu/java/locale/LocaleInformation_syr.properties,
+ resource/gnu/java/locale/LocaleInformation_syr_SY.properties,
+ resource/gnu/java/locale/LocaleInformation_tig.properties,
+ resource/gnu/java/locale/LocaleInformation_tig_ER.properties,
+ resource/gnu/java/locale/LocaleInformation_uz_AF_Arab.properties,
+ resource/gnu/java/locale/LocaleInformation_uz_Arab.properties,
+ resource/gnu/java/locale/LocaleInformation_uz_Latn.properties,
+ resource/gnu/java/locale/LocaleInformation_wal.properties,
+ resource/gnu/java/locale/LocaleInformation_wal_ET.properties:
+ New locales.
+
+2006-03-25 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_fa.properties,
+ resource/gnu/java/locale/LocaleInformation_kn.properties,
+ resource/gnu/java/locale/LocaleInformation_kn_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ko.properties,
+ resource/gnu/java/locale/LocaleInformation_sl.properties,
+ resource/gnu/java/locale/LocaleInformation_so.properties,
+ resource/gnu/java/locale/LocaleInformation_so_DJ.properties,
+ resource/gnu/java/locale/LocaleInformation_so_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_so_SO.properties,
+ resource/gnu/java/locale/LocaleInformation_sr.properties:
+ Random fixes I forgot to commit before.
+
+2006-03-25 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_ar_JO.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_QA.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_SA.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_SY.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_TN.properties,
+ resource/gnu/java/locale/LocaleInformation_ar_YE.properties,
+ resource/gnu/java/locale/LocaleInformation_as_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_be_BY.properties,
+ resource/gnu/java/locale/LocaleInformation_bn_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_en.properties,
+ resource/gnu/java/locale/LocaleInformation_en_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_en_PK.properties,
+ resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties,
+ resource/gnu/java/locale/LocaleInformation_es_PY.properties,
+ resource/gnu/java/locale/LocaleInformation_fa.properties,
+ resource/gnu/java/locale/LocaleInformation_fa_AF.properties,
+ resource/gnu/java/locale/LocaleInformation_fa_IR.properties,
+ resource/gnu/java/locale/LocaleInformation_gu_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_hi_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ja_JP.properties,
+ resource/gnu/java/locale/LocaleInformation_kn_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_mr_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_or_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_pa.properties,
+ resource/gnu/java/locale/LocaleInformation_pa_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ps_AF.properties,
+ resource/gnu/java/locale/LocaleInformation_ru_RU.properties,
+ resource/gnu/java/locale/LocaleInformation_sa.properties,
+ resource/gnu/java/locale/LocaleInformation_sa_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ta_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_te_IN.properties:
+ Updated currency formats.
+
+2006-03-25 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/AbstractDocument.java
+ (getAttributeContext): Made method final.
+ (getCurrentWriter): Likewise.
+ (getEndPosition): Likewise.
+ (getProperty): Likewise.
+ (getStartPosition): Likewise.
+ (putProperty): Likewise.
+ (readLock): Likewise.
+ (readUnlock): Likewise.
+ (writeLock): Likewise.
+ (writeUnlock): Likewise.
+
+2006-03-25 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/InputMap.java
+ (allKeys): Check if parent keys is null.
+ * javax/swing/KeyboardManager.java
+ (registerEntireMap): Also register map's parent keys.
+ * javax/swing/plaf/metal/MetalRootPaneUI.java
+ (propertyChange): Also call super.propertyChange().
+
+2006-03-25 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * tools/gnu/classpath/tools/jarsigner/HashUtils.java: New file.
+ * tools/gnu/classpath/tools/jarsigner/JarSigner.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/JarVerifier.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/Main.java (Main): Likewise.
+ * tools/gnu/classpath/tools/jarsigner/SFHelper.java: Likewise.
+ * tools/gnu/classpath/tools/jarsigner/jarsigner.txt: Likewise.
+
+2006-03-25 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/java/util/jar/JarUtils.java: New file.
+ * java/util/jar/Manifest.java (CRLF): Removed.
+ (read_main_section): Likewise.
+ (read_version_info): Likewise.
+ (expect_header(String,BufferedReader)): Likewise.
+ (expect_header(String,BufferedReader,String)): Likewise.
+ (read_header_value): Likewise.
+ (read_attributes): Likewise.
+ (read_attribute): Likewise.
+ (read_individual_sections): Likewise.
+ (read_section_name): Likewise.
+ (write_main_section): Likewise.
+ (write_version_info): Likewise.
+ (write_header): Likewise.
+ (write_main_attributes): Likewise.
+ (write_attribute_entry): Likewise.
+ (write_individual_sections): Likewise.
+ (write_entry_attributes): Likewise.
+ (read): use JarUtils.
+ (write): Likewise.
+
+2006-03-25 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * gnu/java/security/pkcs/SignerInfo.java (log): New field.
+ (DEBUG): Removed.
+ (debug): Likewise.
+ (SignerInfo(BERReader)): Updated javadoc.
+ Use JDK logging.
+ (SignerInfo(X500Principal,BigInteger,OID,byte[],OID,byte[],byte[])):
+ New constructor.
+ (encode): New method.
+ * gnu/java/security/pkcs/PKCS7SignedData.java (log): New field.
+ (PKCS7_DATA): Removed.
+ (DEBUG): Likewise.
+ (debug): Likewise.
+ (PKCS7SignedData(BERReader)): Updated javadoc.
+ Use JDK logging.
+ (PKCS7SignedData(Set,PKCS7Data,Certificate[],X509CRL[],Set)): New
+ constructor.
+ (encode): New method.
+ * gnu/java/security/pkcs/PKCS7Data.java: New file.
+ * gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java (log): New field.
+ (encodePrivateKey): Encode x (private MPN) as an OCTET STRING.
+ (decodePrivateKey): Decode x from an OCTET STRING.
+ * gnu/java/security/key/dss/DSSPublicKey.java (str): New field.
+ (toString): New method.
+ * gnu/java/security/key/dss/DSSPrivateKey.java (DEBUG): New field.
+ (str): Likewise.
+ (toString): New method.
+ * gnu/java/security/key/dss/DSSKey.java (str): New Field.
+ (toString): New method.
+ * gnu/java/security/provider/DSAParameterGenerator.java: Removed.
+
+2006-03-25 Roman Kennke <kennke@aicas.com>
+
+ * java/util/GregorianCalender.java
+ (computeTime): Fix comparison to correctly calculate the
+ calendar.
+
+2006-03-25 Wolfgang Baer <WBaer@gmx.de>
+
+ Fixes bug #26837
+ * java/awt/Window.java:
+ (setFocusCycleRoot): New overriden method.
+ (isFocusCycleRoot): Likewise.
+ (getFocusCycleRootAncestor): Likewise.
+ * java/awt/Container.java:
+ (getFocusTraversalPolicy): Check also for anchestor == null.
+
+2006-03-25 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26863 reported by John K Peterson <johnandtina@byu.net>
+ * gnu/java/util/prefs/NodeWriter.java (writeRoot): Don't immediately
+ close root tag.
+
+2006-03-24 Tom Tromey <tromey@redhat.com>
+
+ * javax/imageio/stream/ImageOutputStreamImpl.java (writeBytes):
+ Rewrote.
+ (writeChar): Removed useless cast.
+ (writeChars(String)): Implemented.
+ (writeDouble): Rewrote.
+ (writeFloat): Likewise.
+ (writeUTF): Implemented.
+ * javax/imageio/stream/ImageInputStreamImpl.java (byteOrder): Default
+ to big endian.
+
+2006-03-24 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JButton.java
+ (def): Replaced field with defaultCapable field.
+ (is_def): Removed field.
+ (JButton): Initialize defaultCapable with true.
+ (isDefaultButton): Documented and implemented method by querying
+ the button's root pane if present.
+ (isDefaultCapable): Changed def field to defaultCapable.
+ Added documentation.
+ (paramString): Call isDefaultButton() instead of accessing field,
+ which got removed.
+ (setDefaultCapable): Changed def field to defaultCapable.
+ Added documentation.
+ * javax/swing/JRootPane.java
+ (setDefaultButton): Only change the default button if the
+ new button is defaultCapable.
+ * javax/swing/plaf/basic/BasicRootPaneUI.java
+ (DefaultPressAction): New class.
+ (DefaultReleaseAction): New class.
+ (installKeyboardActions): Implemented.
+ (uninstallKeyboardActions): Implemented.
+ (propertyChange): Implemented.
+ * javax/swing/plaf/metal/MetalBorders.java
+ (ButtonBorder.paintBorder): 'Outsourced' default theme
+ painting to paintDefaultButtonBorder().
+ (ButtonBorder.paintDefaultButtonBorder): New helper method
+ to paint the border in the default theme. This also fixes
+ painting of the border for default buttons.
+ (ButtonBorder.paintOceanButtonBorder): Added support for
+ default button painting. Fixed border for pressed/default state.
+ * javax/swing/plaf/metal/MetalButtonUI.java
+ (update): Only paint gradient when in OceanTheme and when the
+ button is not armed.
+
+2006-03-24 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/ActivationSystemTransient.java:
+ Inherit from Activator.
+
+2006-03-24 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/DefaultActivationGroup.java (newInstance):
+ Print debug message if debug flag is set.
+ * gnu/java/rmi/activation/DefaultActivationSystem.java: Rewritten.
+ * gnu/java/rmi/server/ActivatableServerRef.java (activate): assign
+ detail, do not call iniCause(). (exportClass): New method.
+ * gnu/java/rmi/server/CombinedClassLoader.java (constructor):
+ Ignore null (bootstrap) class loader.
+ * gnu/java/rmi/server/UnicastServerRef.java (methods, skel, stub,
+ buildMethodHash, findStubSkelClass, getHelperClass): Changed
+ visibility to protected.
+ * java/rmi/activation/Activatable.java (export, register): Rewritten.
+ (toStub): New method.
+ * java/rmi/activation/ActivationGroup.java (getSystem): Rewritten.
+ * java/rmi/activation/ActivationSystem.java (SYSTEM_PORT):
+ Explained property java.rmi.activation.port.
+
+2006-03-24 Tom Tromey <tromey@redhat.com>
+
+ * .externalToolBuilders/CreateLocaleData.launch: Updated.
+ * gnu/java/locale/.cvsignore: New file.
+ * lib/Makefile.am (LocaleData.java): Put in gnu/java/locale.
+ * java/util/Locale.java (getAvailableLocales): Clone result.
+ (getISOCountries): Likewise.
+ (getISOLanguages): Likewise.
+ * scripts/generate-locale-list.sh: Make class public. Added new
+ array.
+ * gnu/java/locale/LocaleHelper.java (getCollatorLocales): New method.
+ (getLocaleCount): Likewise.
+ * java/text/Collator.java (getInstance): Javadoc typo fix.
+ (getAvailableLocales): Wrote.
+
+2006-03-24 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (getSelectedComponent): Return null when no component is
+ selected.
+
+2006-03-24 Mark Wielaard <mark@klomp.org>
+
+ * NEWS: Add cursor and selection improvements.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * java/awt/Component.java
+ (getAccessibleName): Just return accessibleName,
+ * javax/swing/AbstractButton.java
+ (getAccessibleStateSet): Mark as stub,
+ (getAccessibleName): Implemented,
+ (getAcessibleIcon): Mark as stub,
+ (getAccessibleRelationSet): Likewise,
+ (getAccessibleAction): Likewise,
+ (getAccessibleValue): Likewise,
+ (getAccessibleActionCount): Likewise,
+ (getAccessibleActionDescription): Likewise,
+ (doAccessibleAction): Likewise,
+ (getCurrentAccessibleValue): Likewise,
+ (setCurrentAccessibleValue): Likewise,
+ (getMinimumAccessibleValue): Likewise,
+ (getMaximumAccessibleValue): Likewise,
+ (getAccessibleText): Likewise,
+ (getIndexAtPoint): Likewise,
+ (getCharacterBounds): Likewise,
+ (getCharCount): Likewise,
+ (getCaretPosition): Likewise,
+ (getAtIndex): Likewise,
+ (getAfterIndex): Likewise,
+ (getBeforeIndex): Likewise,
+ (getCharacterAttribute): Likewise,
+ (getSelectionStart): Likewise,
+ (getSelectionEnd): Likewise,
+ (getSelectedText): Likewise,
+ (getTextRectangle): Likewise,
+ (setIconTextGap): Fire PropertyChangeEvent, not state changed,
+ (getIconTextGap): Added @since 1.4,
+ (setContentAreaFilled): Reordered code to make event sequence match
+ reference implementation,
+ * javax/swing/JButton.java
+ (getSelectedObjects): Removed,
+ *javax/swing/JComponent.java
+ (getAccessibleName): Call super.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JProgressBar.java
+ (AccessibleJProgressBar.getAccessibleStateSet): Implemented,
+ (AccessibleJProgressBar.getAccessibleRole): Added API docs,
+ (AccessibleJProgressBar.getAccessibleValue): Implemented,
+ (AccessibleJProgressBar.getCurrentAccessibleValue): Likewise,
+ (AccessibleJProgressBar.setCurrentAccessibleValue): Likewise,
+ (AccessibleJProgressBar.getMinimumAccessibleValue): Likewise,
+ (AccessibleJProgressBar.getMaximumAccessibleValue): Likewise,
+ (getAccessibleContext): Added API docs.
+
+2006-03-23 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (FocusListener.focusLost): Put current selection into the system
+ clipboard.
+
+2006-03-23 Robert Schuster <robertschuster@fsfe.org>
+
+ * java/awt/Component.java:
+ (processMouseEvent): Remove call to consume event.
+ (dispatchEventImpl): Handle specific events first, do focus request
+ only when mouse event was not yet consumed.
+ * javax/swing/text/DefaultCaret.java:
+ (mousePressed): Rewritten.
+ (setDot): Changed order of operations.
+ (moveDot): Dito.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JComponent.java
+ (AccessibleJComponent.changeSupport): Removed field,
+ (AccessibleJComponent.AccessibleJComponent): Updated for removed field,
+ (AccessibleJComponent.addPropertyChangeListener): Call super,
+ (AccessibleJComponent.removePropertyChangeListener): Likewise,
+ * javax/swing/JSlider.java
+ (AccessibleJSlider.getAccessibleStateSet): Implemented,
+ (AccessibleJSlider.getAccessibleRole): Likewise,
+ (AccessibleJSlider.getAccessibleValue): Likewise,
+ (AccessibleJSlider.getCurrentAccessibleValue): Likewise,
+ (AccessibleJSlider.setCurrentAccessibleValue): Likewise,
+ (AccessibleJSlider.getMinimumAccessibleValue): Likewise,
+ (AccessibleJSlider.getMaximumAccessibleValue): Likewise,
+ (getAccessibleContext): Added API docs.
+
+2006-03-23 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/ActivationSystemTransient.java
+ (debug): Made public. (constructor): Made protected.
+ (activate, getActivationDesc): Throw more informative exceptions.
+ * gnu/java/rmi/server/UnicastConnectionManager.java (toString):
+ New method.
+ * gnu/java/rmi/server/UnicastRef.java (remoteToString):
+ Stub, implemented.
+ * gnu/java/rmi/server/UnicastServer.java (incomingMessageCall):
+ Documented.
+ * gnu/java/rmi/server/UnicastServerRef.java (incomingMessageCall):
+ Better exception.
+ * java/rmi/activation/Activatable.java (obtainId): Use the activation
+ system, passed in the activation descriptor field.
+ * java/rmi/activation/ActivationGroup.java (createGroup): Likewise.
+ * java/rmi/activation/ActivationGroupID.java (system, uid): Changed
+ to package private final. (equals): Compare uid, not the system.
+ (hashCode): Forward to uid.hashCode(). toString(): New method.
+ * java/rmi/activation/ActivationID.java (readObject, writeObject):
+ Rewritten. (equals): Compare UID only. toString(): New method.
+ * java/rmi/server/ObjID.java (eq): New method. (equals): Compare also
+ UID (space). (hashCode, toString): Rewritten.
+ * java/rmi/server/RemoteObjectInvocationHandler.java (noArgs):
+ New method. (invoke): Treat null as an empty array for parameters.
+ * java/rmi/server/UID.java (toString): Rewritten. (hashCode):
+ Include count, do not include the static machineId.
+
+2006-03-23 Tom Tromey <tromey@redhat.com>
+
+ * java/net/URLConnection.java (getContent(Class[])): Implemented.
+
+2006-03-23 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * tools/gnu/classpath/tools/giop/GRMIC.java (main): Accept -force.
+ * tools/gnu/classpath/tools/giop/GRMIC.txt: Explain -force.
+ * tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java
+ (force): New field. (setForce): New method. (compile): Handle -force.
+ * tools/gnu/classpath/tools/rmi/RMIC.java (main): Accept -force.
+ * tools/gnu/classpath/tools/rmi/RMIC.txt: Explain -force.
+
+2006-03-23 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (Page.getBackground): Return the JTabbedPane's background,
+ rather than the page's component background.
+ (Page.getForeground): Return the JTabbedPane's foreground,
+ rather than the page's component foreground.
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (uninstallUI): Don't set colors to null.
+ * javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ (paintTabBackground): Correctly determine the tab background.
+ (getUnselectedBackground): New helper method to
+ handle the UI property 'TabbedPane.unselectedBackground'
+ correctly.
+
+2006-03-23 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java
+ (BorderListener.showingResizeCursor): New field.
+ (BorderListener.mouseMoved, BorderListner.mouseExited):
+ Implemented.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JComboBox.java
+ (selectWithKeyChar): Mark as stub,
+ * javax/swing/JFileChooser.java
+ (setDragEnabled): Mark as stub,
+ (getDragEnabled): Likewise,
+ * javax/swing/JSlider.java
+ (AccessibleJSlider.getAccessibleStateSet): Mark as stub,
+ (AccessibleJSlider.getAccessibleRole): Likewise,
+ (AccessibleJSlider.getAccessibleValue): Likewise,
+ (AccessibleJSlider.getCurrentAccessibleValue): Likewise,
+ (AccessibleJSlider.setCurrentAccessibleValue): Likewise,
+ (AccessibleJSlider.getMinimumAccessibleValue): Likewise,
+ (AccessibleJSlider.getMaximumAccessibleValue): Likewise,
+ * javax/swing/UIManager.java
+ (installLookAndFeel): Mark as stub,
+ (setInstalledLookAndFeels): Likewise.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/filechooser/UnixFileSystemView.java
+ (getSystemDisplayName): Mark as stub,
+ (getSystemIcon): Likewise,
+ (getSystemTypeDescription): Likewise.
+
+2006-03-23 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/AbstractLayoutCache.java
+ (getNodeDimensions): Mark as stub,
+ (getPreferredHeight): Likewise,
+ (getPreferredWidth): Likewise,
+ (getRowsForPaths): Likewise,
+ (isFixedRowHeight): Likewise,
+ * javax/swing/tree/DefaultTreeModel.java
+ (reload()): Mark as stub,
+ (reload(TreeNode)): Likewise,
+ (nodeStructureChanged): Likewise,
+ * javax/swing/tree/DefaultTreeSelectionModel.java
+ (clone): Mark as stub,
+ (setRowMapper): Likewise,
+ (setSelectionPaths): Likewise,
+ (isRowSelected): Likewise,
+ (resetRowSelection): Likewise,
+ (insureRowContinuity): Likewise,
+ (arePathsContiguous): Likewise,
+ (canPathsBeAdded): Likewise,
+ (canPathsBeRemoved): Likewise,
+ (notifyPathChange): Likewise,
+ (updateLeadIndex): Likewise,
+ (insureUniqueness): Likewise,
+ * javax/swing/tree/FixedHeightLayoutCache.java: Marked all methods as
+ stubs,
+ * javax/swing/tree/VariableHeightLayoutCache.java: Likewise.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/text/StyleContext.java (getStaticAttribute): Mark as
+ stub.
+ (getStaticAttributeKey): Likewise.
+ (readAttributeSet): Likewise.
+ (writeAttributeSet): Likewise.
+ (readAttributes): Likewise.
+ (writeAttributes): Likewise.
+ * javax/swing/text/html/HTMLEditorKit.java (insertAtBoundary): Mark
+ as stub.
+ * javax/swing/text/html/HTMLDocument.java (setParagraphAttributes):
+ Mark as stub.
+ (fireChangedUpdate): Likewise.
+ (start): Likewise.
+ (end): Likewise.
+ (handleEndOfLineString): Likewise.
+ (textAreaContent): Likewise.
+ (preContent): Likewise.
+ (addSpecialElement): Likewise.
+ (setInnerHTML): Likewise.
+ (setOuterHTML): Likewise.
+ (insertBeforeStart): Likewise.
+ (insertBeforeEnd): Likewise.
+ (insertAfterEnd): Likewise.
+ (insertAfterStart): Likewise.
+ * javax/swing/table/JTableHeader.java (AccessibleJTableHeaderEntry):
+ Mark all methods as stub.s
+ * javax/swing/plaf/metal/MetalTreeUI.java (decodeLineStyle): Mark
+ as stub.
+ (paintHorizontalSeparators): Likewise.
+ * javax/swing/plaf/basic/BasicLookAndFeel.java (loadSystemColors):
+ Mark as stub.
+ * javax/swing/MenuSelectionManager.java (processKeyEvent): Mark as
+ stub.
+ * java/beans/beancontext/BeanContextSupport.java: Mark most methods
+ as stubs.
+ * java/beans/beancontext/BeanContextServicesSupport.java: Mark most
+ methods as stubs.
+
+2006-03-22 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GtkCursor.java: New class.
+
+2006-03-22 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26527
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (gtkWidgetSetCursor):
+ Takes GtkImage, x and y coordinates.
+ (gtkWidgetSetCursorUnlocked): Likewise.
+ (GtkComponentPeer): Set cursor when set.
+ (setCursor): Handle GtkCursor.
+ * gnu/java/awt/peer/gtk/GtkToolkit.java (createCustomCursor):
+ New method.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ (gtkWidgetSetCursor): Takes GtkImage, x and y coordinates.
+ (gtkWidgetSetCursorUnlocked): Likewise. Handle custom image.
+ * include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerated.
+
+2006-03-23 Roman Kennke <kennke@aicas.com>
+
+ PR 26805
+ * gnu/java/security/Registry.java
+ (PKCS5_PAD): Added pad PKCS#5 algorithm.
+ * gnu/javax/crypto/pad/PadFactory.java
+ (getInstance): For PKCS#5, also return PKCS#7 pad
+ algorithm.
+ (getNames): Added PKCS#5.
+ * javax/crypto/KeyGenerator.java
+ (getInstance): Initialize key generator before returning
+ it.
+
+2006-03-23 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/RE.java(REG_X_COMMENTS): New copilation flag,
+ (initialize): Ignore whiltespaces and comments if REG_X_COMMENTS is set.
+ * java/util/regex/Pattern.java(constructor): Set RE.REG_X_COMMENTS
+ if COMMENTS is set.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/plaf/synth/SynthStyle.java (getInt): Implemented.
+ (getBoolean): Likewise.
+ (getString): Likewise.
+ (getIcon): Likewise.
+
+2006-03-22 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26301
+ * gnu/java/awt/peer/GLightweightPeer.java: Extend MouseAdapter.
+ (GLightweightPeer(Component)): Install MouseListener.
+ (setCursor): Implement.
+ (mouseEntered): New method.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/plaf/synth/ColorType.java (MAX_COUNT): No longer
+ constant.
+ * javax/swing/plaf/synth/SynthStyle.java (getColorForState): Now
+ protected.
+ (getFontForState): Likewise.
+ (getInsets): Added 'result' argument.
+ (getPainter): Renamed.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/plaf/synth/SynthPainter.java
+ (paintScrollBarThumbBackground): Added 'orientation' argument.
+ (paintScrollBarThumbBorder): Likewise.
+ (paintSliderThumbBackground): Likewise.
+ (paintSliderThumbBorder): Likewise.
+ (paintTabbedPaneTabBackground): Added 'index' argument.
+ (paintTabbedPaneTabBorder): Likewise.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/ScrollPaneAdjustable.java (paramString): Implemented.
+ (toString): New method.
+
+2006-03-22 Tom Tromey <tromey@redhat.com>
+
+ * doc/hacking.texinfo (Source Code Style Guide): Mention
+ NotImplementedException.
+ * javax/imageio/stream/MemoryCacheImageOutputStream.java
+ (flushBefore): Mark as stub.
+ (read): Likewise.
+ * javax/imageio/stream/MemoryCacheImageInputStream.java (flushBefore):
+ Mark as stub.
+ * javax/imageio/stream/ImageOutputStreamImpl.java (flushBits): Mark
+ as stub.
+ (write): Likewise.
+ (writeBit): Likewise.
+ (writeChars): Likewise.
+ (writeUTF): Likewise.
+ * javax/imageio/stream/FileCacheImageOutputStream.java (read): Mark
+ as stub.
+ (read): Likewise.
+ * java/net/URLConnection.java (getContent): Mark as stub.
+ * java/awt/Window.java (applyResourceBundle): Mark as stub.
+ * java/awt/TexturePaint.java (createContext): Mark as stub.
+ (getTransparency): Mark as stub.
+ * java/awt/ScrollPaneAdjustable.java (paramString): Mark as stub.
+ * java/awt/GridBagLayout.java (AdjustForGravity): Mark as stub.
+ * java/awt/GraphicsConfiguration.java (getBufferCapabilities): Mark as
+ stub.
+ (getImageCapabilities): Likewise.
+ * java/awt/BasicStroke.java (createStrokedShape): Mark as stub.
+ * java/awt/AlphaComposite.java (createContext): Mark as stub.
+ * java/awt/image/renderable/RenderableImageProducer.java: Mark all
+ methods as stubs.
+ * java/awt/font/TextMeasurer.java (deleteChar): Mark as stub.
+ (getAdvanceBetween): Likewise.
+ (getLayout): Likewise.
+ (insertChar): Likewise.
+ (getLineBreakIndex): Likewise.
+ * java/awt/font/ShapeGraphicAttribute.java (draw): Mark as stub.
+ (getAdvance): Likewise.
+ (getAscent): Likewise.
+ (getDescent): Likewise.
+ * java/awt/font/LineBreakMeasurer.java (deleteChar): Mark as stub.
+ (insertChar): Likewise.
+ (nextLayout): Likewise.
+ (nextLayout): Likewise.
+ (nextOffset): Likewise.
+ (nextOffset): Likewise.
+ * java/awt/font/ImageGraphicAttribute.java (draw): Mark as stub.
+ (equals): Likewise.
+ (getAdvance): Likewise.
+ (getAscent): Likewise.
+ (getBounds): Likewise.
+ (getDescent): Likewise.
+ (hashCode): Likewise.
+ (ImageGraphicAttribute): Likewise.
+ * java/awt/font/GraphicAttribute.java (getBounds): Mark as stub.
+ (getJustificationInfo): Likewise.
+ * java/awt/font/GlyphVector.java (getGlyphCharIndex): Mark as stub.
+ (getGlyphCharIndices): Likewise.
+ (getGlyphOutline): Likewise.
+ (getGlyphPixelBounds): Likewise.
+ (getLayoutFlags): Likewise.
+ (getPixelBounds): Likewise.
+ * java/awt/font/GlyphMetrics.java (getLSB): Mark as stub.
+ (getRSB): Likewise.
+ * java/nio/channels/Channels.java (newWriter): Mark as stub.
+ * java/awt/dnd/DragSourceContext.java: Marked most methods as stubs.
+ * java/awt/dnd/DragGestureRecognizer.java (fireDragGestureRecognized):
+ Mark as stub.
+ (resetRecognizer): Likewise.
+ * java/awt/datatransfer/SystemFlavorMap.java (getFlavorsForNative):
+ Mark as stub.
+ (getNativesForFlavor): Likewise.
+ * javax/swing/plaf/synth/SynthStyle.java: Mark all methods as stub.s
+ * javax/swing/plaf/synth/SynthLookAndFeel.java (updateStyles): Mark
+ as stub.
+ (getRegion): Likewise.
+ (createUI): Likewise.
+ (initialize): Likewise.
+ (uninitialize): Likewise.
+ (getDefaults): Likewise.
+ (load): Likewise.
+ (shouldUpdateStyleOnAncestorChanged): Likewise.
+ * javax/swing/plaf/synth/SynthGraphicsUtils.java (getMinimumSize):
+ Mark as stub.
+ (getPreferredSize): Likewise.
+ (getMaximumSize): Likewise.
+ (paintText): Likewise.
+ * java/text/RuleBasedCollator.java (getCollationElementIterator): Mark
+ as stub.
+ * java/text/Collator.java (getAvailableLocales): Mark as stub.
+
+2006-03-22 Wolfgang Baer <WBaer@gmx.de>
+
+ * java/io/ObjectStreamConstants.java: Added since tag.
+ (PROTOCOL_VERSION_1): Added javadoc.
+ (PROTOCOL_VERSION_2): Likewise.
+ * java/io/ObjectOutputStream.java:
+ (setDefaultProtocolVersion): Removed.
+ (useProtocolVersion): Fixed parameter tests. Updated javadoc.
+
+2006-03-21 Lillian Angel <langel@redhat.com>
+
+ * gnu/javax/imageio/bmp/BMPInfoHeader.java
+ (BMPInfoHeader): Removed debug lines.
+ * gnu/javax/imageio/bmp/EncodeRLE4.java
+ (encode): Implemented.
+ (uncompress): New function implemented to
+ uncompress the image before encoding.
+ * gnu/javax/imageio/bmp/EncodeRLE8.java
+ (encode): Implemented.
+ (uncompress): New function implemented to
+ uncompress the image before encoding.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/html/FormView.java
+ (getImageData): New helper method.
+
+2006-03-21 Tom Tromey <tromey@redhat.com>
+
+ * vm/reference/gnu/classpath/Unsafe.java (arrayBaseOffset): Javadoc
+ fix.
+ (Unsafe): Now final.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/html/FormView.java
+ (MouseEventListener): New inner class.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/html/ListView.java: New file.
+
+2006-03-21 Tom Tromey <tromey@redhat.com>
+
+ * java/text/Bidi.java: Completed.
+
+2006-03-21 Anthony Balkissoon <abalkiss@redhat.com>
+
+ * javax/swing/JTable.java:
+ (columnAtPoint): Removed the null check, this method should throw a NPE
+ if the argument is null.
+
+2006-03-21 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultHighlighter.java:
+ (DefaultHighlighter.DefaultHighlightPainter.paint): Rewritten.
+
+2006-03-21 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java: Added class variable denoting
+ the textcomponent having a selection.
+ (clearSelection): Clear 'componentWithSelection' variable.
+ (handleSelection): Clear selection of current component having a
+ selection before setting a new selection in another component.
+ (mouseDragged): Only react on left mouse button.
+ (mouseClicked): Only react on left mouse button.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ (paintContentBorderTopEdge): Implemented.
+ (paintContentBorderBottomEdge): Implemented.
+ (paintContentBorderLeftEdge): Implemented.
+ (paintContentBorderRightEdge): Implemented.
+ (isLastTabInRun): New helper method.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (Page.getForeground): Fall back to returning the tabbed pane's
+ foreground if no foreground has been exclicitly set.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxButton.java
+ (setEnabled): Update colors of button correctly.
+ * javax/swing/plaf/metal/MetalComboBoxUI.java
+ (MetalPropertyChangeListener.propertyChange): Update the colors
+ of the list and the button when any of the color properties
+ of the ComboBox change.
+
+2006-03-21 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicButtonUI.java
+ (uninstallDefaults): Only nullify button colors if they are
+ not UIResource instances.
+
+2006-03-21 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JComponent.java
+ (AccessibleJComponent.getAccessibleDescription): Call super,
+ * javax/swing/JToolTip.java: API doc updates all over, plus
+ (AccessibleJToolTip.getAccessibleDescription): Implemented,
+ (AccessibleJToolTip.getAccessibleRole): Implemented,
+ (getAccessibleContext): Implemented,
+ (paramString): Reimplemented,
+ (setComponent): Fire PropertyChangeEvent,
+ (setTipText): Likewise.
+
+2006-03-20 Tom Tromey <tromey@redhat.com>
+
+ * java/security/cert/PKIXCertPathChecker.java: Javadoc fix.
+ * java/security/cert/CertStoreSpi.java: Added import for javadoc.
+ (CertStoreSpi): Updated throws clause.
+ * java/security/cert/CertPathValidatorSpi.java: Added import for
+ javadoc.
+ (engineValidate): Updated 'throws' clause.
+ * java/security/cert/PKIXParameters.java: Javadoc fix.
+ * java/security/cert/X509CertSelector.java
+ (setAuthorityKeyIdentifier): Javadoc fix.
+
+2006-03-20 Tom Tromey <tromey@redhat.com>
+
+ * .classpath: Build gnu.javax.swing.plaf.
+
+2006-03-20 Lillian Angel <langel@redhat.com>
+
+ * gnu/javax/imageio/bmp/BMPDecoder.java:
+ Removed unneeded import.
+ * gnu/javax/imageio/bmp/BMPEncoder.java:
+ New class.
+ * gnu/javax/imageio/bmp/BMPFileHeader.java
+ (BMPFileHeader): New constructor used to create info header
+ for an output stream.
+ (write): Fixed indexes.
+ * gnu/javax/imageio/bmp/BMPImageReaderSpi.java:
+ Initialized writerSpiNames field.
+ * gnu/javax/imageio/bmp/BMPImageWriter.java:
+ New class.
+ * gnu/javax/imageio/bmp/BMPImageWriterSpi.java:
+ New class.
+ * gnu/javax/imageio/bmp/BMPInfoHeader.java:
+ Change visibility for fields.
+ (BMPInfoHeader): New constructor used to create
+ file header for an output stream.
+ (intToDWord): New method. Converts an int to a
+ double word.
+ (intToWord): New method. Converts an int to a word.
+ * gnu/javax/imageio/bmp/DecodeBF32.java:
+ Removed unneeded imports.
+ * gnu/javax/imageio/bmp/EncodeRGB1.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRGB16.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRGB24.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRGB32.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRGB4.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRGB8.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRLE4.java:
+ New class.
+ * gnu/javax/imageio/bmp/EncodeRLE8.java:
+ New class.
+ * javax/imageio/ImageIO.java:
+ Fixed comment.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalTabbedPaneUI.java
+ (TabbedPaneLayout.normalizeTabRuns): New method.
+ (createLayoutManager): Return the Metal TabbedPaneLayout, not super.
+ (paintTabBorder): Replaced if-else chain with switch.
+ (paintTopTabBorder): Rewritten to correctly paint tab. Also support
+ Ocean theme.
+ (paintBottomTabBorder): Rewritten to correctly paint tab. Also support
+ Ocean theme.
+ (paintLeftTabBorder): Rewritten to correctly paint tab. Also support
+ Ocean theme.
+ (paintRightTabBorder): Rewritten to correctly paint tab. Also support
+ Ocean theme.
+ (paintTabBackground): Fetch background color from the TabbedPane.
+ Fixed painting and improved by not using fillPolygon, and instead
+ using fillRectangle. Replaced if-else chain with switch.
+ (calculateMaxTabHeight): Added overridden method with FIXME.
+ (getTabRunOverlay): Overridden to provide overlay for LEFT or RIGHT
+ placement.
+ (paintContentBorderTopEdge): Added stub with FIXME.
+ (paintContentBorderBottomEdge): Added stub with FIXME.
+ (paintContentBorderLeftEdge): Added stub with FIXME.
+ (paintContentBorderRightEdge): Added stub with FIXME.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (tabsOpaque): New field.
+ (installDefaults): Fetch tabsOpaque property from UIManager.
+ (paintTab): Fill tab background when tabsOpaque property is true.
+ * javax/swing/plaf/basic/BasicLookAndFeel.java
+ (initComponentDefaults): Added TabbedPane.tabsOpaque property.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JTabbedPane.java
+ (Pane.getBackground): When no background was explicitly set, return
+ the JTabbedPane's background.
+
+2006-03-20 Wolfgang Baer <WBaer@gmx.de>
+
+ * org/omg/CORBA/ACTIVITY_COMPLETED.java,
+ * org/omg/CORBA/ACTIVITY_REQUIRED.java,
+ * org/omg/CORBA/BAD_INV_ORDER.java,
+ * org/omg/CORBA/BAD_CONTEXT.java,
+ * org/omg/CORBA/BAD_OPERATION.java,
+ * org/omg/CORBA/BAD_PARAM.java,
+ * org/omg/CORBA/BAD_QOS.java,
+ * org/omg/CORBA/BAD_TYPECODE.java,
+ * org/omg/CORBA/CODESET_INCOMPATIBLE.java,
+ * org/omg/CORBA/COMM_FAILURE.java,
+ * org/omg/CORBA/CurrentHolder.java,
+ * org/omg/CORBA/DATA_CONVERSION.java,
+ * org/omg/CORBA/FREE_MEM.java,
+ * org/omg/CORBA/IMP_LIMIT.java,
+ * org/omg/CORBA/INITIALIZE.java,
+ * org/omg/CORBA/INTERNAL.java,
+ * org/omg/CORBA/INTF_REPOS.java,
+ * org/omg/CORBA/INVALID_ACTIVITY.java,
+ * org/omg/CORBA/INVALID_TRANSACTION.java,
+ * org/omg/CORBA/INV_FLAG.java,
+ * org/omg/CORBA/INV_IDENT.java,
+ * org/omg/CORBA/INV_OBJREF.java,
+ * org/omg/CORBA/INV_POLICY.java,
+ * org/omg/CORBA/MARSHAL.java,
+ * org/omg/CORBA/NO_RESOURCES.java,
+ * org/omg/CORBA/NO_MEMORY.java,
+ * org/omg/CORBA/NO_IMPLEMENT.java,
+ * org/omg/CORBA/NO_PERMISSION.java,
+ * org/omg/CORBA/NO_RESPONSE.java,
+ * org/omg/CORBA/OBJECT_NOT_EXIST.java,
+ * org/omg/CORBA/OBJ_ADAPTER.java,
+ * org/omg/CORBA/ParameterModeHolder.java,
+ * org/omg/CORBA/PolicyError.java,
+ * org/omg/CORBA/PolicyErrorHolder.java,
+ * org/omg/CORBA/PolicyHolder.java,
+ * org/omg/CORBA/PolicyListHolder.java,
+ * org/omg/CORBA/REBIND.java,
+ * org/omg/CORBA/TIMEOUT.java,
+ * org/omg/CORBA/TRANSACTION_MODE.java,
+ * org/omg/CORBA/TRANSACTION_REQUIRED.java,
+ * org/omg/CORBA/TRANSACTION_ROLLEDBACK.java,
+ * org/omg/CORBA/TRANSACTION_UNAVAILABLE.java,
+ * org/omg/CORBA/TRANSIENT.java,
+ * org/omg/CORBA/TypeCodeHolder.java,
+ * org/omg/CORBA/UNKNOWN.java,
+ * org/omg/CORBA/UnionMember.java,
+ * org/omg/CORBA/UnknownUserException.java,
+ * org/omg/CORBA/UnknownUserExceptionHolder.java,
+ * org/omg/CORBA/WrongTransactionHolder.java,
+ * org/omg/IOP/IOR.java,
+ * org/omg/IOP/IORHolder.java,
+ * org/omg/IOP/MultipleComponentProfileHolder.java,
+ * org/omg/IOP/ServiceContextHolder.java,
+ * org/omg/IOP/ServiceContextListHolder.java,
+ * org/omg/IOP/TaggedComponentHolder.java,
+ * org/omg/IOP/TaggedProfileHolder.java,
+ * org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java,
+ * org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java,
+ * org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java,
+ * org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java:
+ Made class final, various javadoc fixlets.
+ * org/omg/CORBA/CompletionStatus.java,
+ * org/omg/CORBA/PERSIST_STORE.java,
+ * org/omg/CORBA/ValueMember.java,
+ * org/omg/PortableInterceptor/ForwardRequest.java,
+ * org/omg/PortableInterceptor/InvalidSlot.java,
+ * org/omg/IOP/CodecPackage/TypeMismatch.java,
+ * org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java,
+ * org/omg/IOP/CodecPackage/FormatMismatch.java,
+ * org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java,
+ * org/omg/IOP/Encoding.java,
+ * org/omg/IOP/TaggedComponent.java,
+ * org/omg/IOP/TaggedProfile.java: Made class final.
+ * org/omg/CORBA/SystemException.java: Made class abstract.
+ * org/omg/CORBA/UserException.java: Made class abstract.
+ (UserException): Now protected.
+ (UserException(String)): Likewise.
+ * org/omg/Messaging/SyncScopeHelper.java: Now abstract, javadoc fixes.
+ (typecode): Removed unused private variable.
+
+2006-03-20 Chris Burdess <dog@gnu.org>
+
+ Fixes PR 26761
+ * gnu/xml/stream/XMLParser.java: Permit U+fffd as XML Char.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (paintTabArea): Look up tab run indices in tabRuns array instead
+ of using the index directly.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (paintTab): Fixed painting.
+ (paintText): Fixed text painting.
+ (paintFocusIndicator): Fixed painting of the focus rectangle.
+ (paintContentBorder): Fixed painting of the content area.
+
+2006-03-20 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (pixbufLock): New
+ static lock Object field.
+ (produce): Synchronize on pixbufLock when calling initState(),
+ pumpBytes() and pumpDone().
+ (finalize): Likewise when calling finish().
+ (GdkPixbufWriter.write): Likewise when calling streamImage().
+ * gnu/java/awt/peer/gtk/GtkImage.java (GtkImage(String)): Likewise
+ when calling loadPixbuf. Chain exception.
+ (GtkImage(byte[])): Likewise when calling loadImageFromData.
+ (GtkImage(URL)): Likewise.
+ (GtkImage(int,int)): Likewise when calling createPixmap().
+ (GtkImage(GtkImage,int,int,int)): Likewise when calling
+ createScaledPixmap().
+ (GtkImage(Pointer)): Likewise when calling createFromPixbuf().
+ (setImage): Likewise when calling createPixmap() and setPixels().
+ (getSource): Likewise when calling getPixels().
+ (flush): Likewise when calling freePixmap().
+ (finalize): Likewise.
+ (drawImage): Likewise when calling drawPixelsScaledFlipped() and
+ drawPixelsScaledFlipped().
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+ (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState): Remove
+ gdk_threads_enter/leave().
+ (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes): Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+ (Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_getPixels): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_setPixels): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_freePixmap): Likewise.
+ (Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap): Likewise.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (calculateTabHeight): Not need to use SwingUtilities here.
+ (getTabInsets): Do not rotate insets.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (paint): Make sure the layout is valid before painting.
+ (paintTabArea): Made tab painting more straightforward and efficient.
+
+2006-03-20 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (ROWS_PER_WHEEL_CLICK): Removed.
+ (getScrollableUnitIncrement): Rewritten.
+ * javax/swing/JTree.java (ROWS_PER_WHEEL_CLICK): Removed.
+ (getScrollableUnitIncrement): Rewritten.
+ * javax/swing/plaf/basic/BasicScrollPaneUI.java
+ (ROWS_PER_WHEEL_CLICK): New field.
+ (MouseWheelHandler.mouseWheelMoved): Rewritten.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (paint): Make sure the layout is valid before painting.
+ (paintTabArea): Made tab painting more straightforward and efficient.
+
+2006-03-20 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicTabbedPaneUI.java
+ (MouseHandler.mousePressed): Rewritten for clearer and simpler
+ code.
+ (MouseHandler.mouseEntered): Implemented to set the rollover tab.
+ (MouseHandler.mouseMoved): Implemented to set the rollover tab.
+ (MouseHandler.mouseExited): Implemented to unset the rollover tab.
+ (TabbedPaneLayout.calculateLayoutInfo): Don't set the component's
+ bounds here. That is moved into layoutContainer().
+ (calculateSize): Correctly respect insets. Made code slightly more
+ clear and efficient.
+ (calculateTabRects): Rewritten completely. The old code was
+ not quite right and unstable in some situations.
+ (layoutContainer): Moved layout of tabbed pane's subcomponents
+ here.
+ (tabRunsDirty): New field.
+ (rolloverTab): New field.
+ (tabForCoordinate): Rewritten for simplicity and correctness.
+ (setRolloverTab): New method.
+ (getRolloverTab): New method.
+
+2006-03-20 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (getScrollableUnitIncrement): Rewritten.
+ * javax/swing/JTree.java (getScrollableUnitIncrement): Rewritten.
+ (getScrollableUnitIncrement
+ * javax/swing/Scrollable.java: Documented.
+ * javax/swing/plaf/basic/BasicScrollPaneUI.java
+ (MouseWheelHandler):Rewritten.
+
+2006-03-20 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * doc/vmintegration.texinfo:
+ Updated with gnu.classpath.Unsafe
+
+2006-03-20 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * NEWS:
+ Updated with VMArray and Unsafe changes.
+
+2006-03-20 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (ROWS_PER_WHEEL_CLICK): New field.
+ (getScrollableUnitIncrement): Rewritten.
+ * javax/swing/JTree.java (ROWS_PER_WHEEL_CLICK): New field.
+ (getScrollableUnitIncrement): Rewritten.
+ (getScrollableBlockIncrement): Rewritten.
+ * javax/swing/plaf/basic/BasicScrollPaneUI.java
+ (MouseWheelHandler): Implemented. (ViewportContainerListener):
+ New class. (containerListener): New field. (SCROLL_NON_SCROLABLES):
+ New field. (installListeners): Install wheel listeners.
+ (uninstallListeners): Uninstall wheel listeners.
+ * javax/swing/plaf/basic/BasicTableUI.java: Remove the implementation
+ of the MouseWheelListener. (installListeners): Do not install wheel
+ listener. (ROWS_PER_WHEEL_CLICK): Removed.
+
+2006-03-19 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * vm/reference/gnu/classpath/Unsafe.java:
+ Documented.
+ (getUnsafe()): Updated to handle security.
+
+2006-03-19 Tom Tromey <tromey@redhat.com>
+
+ * vm/reference/gnu/classpath/Unsafe.java:
+ New class to handle low-level facilities for concurrency.
+
+2006-03-19 Michael Barker <mike@middlesoft.co.uk>
+
+ * vm/reference/gnu/java/nio/VMChannel.java: Added, supports setting
+ non-blocking and scatter-gather io operations.
+ * gnu/java/nio/PipeImpl.java: Retrofitted to use VMChannel
+ * gnu/java/nio/SelectorImpl.java
+ (register) Added condition for gnu.java.nio.SocketChannelSelectionKeyImpl
+ * gnu/java/nio/SocketChannelSelectionKeyImpl.java Added.
+ * gnu/java/nio/channels/FileChannelImpl.java: Retrofitted to use VMChannel
+ * java/nio/FileChannel.java
+ (read (ByteBuffer)) Changed to call abstract method.
+ (write (ByteBuffer)) Changed to call abstract method.
+ * include/gnu_java_nio_VMChannel.h: Added.
+ * native/jni/java-nio/gnu_java_nio_VMChannel.c: Added.
+
+2006-03-19 Mark Wielaard <mark@klomp.org>
+
+ * include/Makefile.am: Rename PlainDatagramSocketImpl to
+ VMPlainDatagramSocketImpl and PlainSocketImpl to VMPlainSocketImpl.
+ * include/gnu_java_net_VMPlainDatagramSocketImpl.h: Regenerated.
+ * include/gnu_java_net_VMPlainSocketImpl.h: Likewise.
+
+2006-03-19 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GdkFontPeer.java (getPostScriptName): Return
+ familyName.
+ * gnu/java/awt/peer/gtk/GtkFontPeer.java: Removed unused file.
+
+2006-03-19 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_aa_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_am.properties,
+ resource/gnu/java/locale/LocaleInformation_am_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_as_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties,
+ resource/gnu/java/locale/LocaleInformation_bg.properties,
+ resource/gnu/java/locale/LocaleInformation_bn_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ca.properties,
+ resource/gnu/java/locale/LocaleInformation_cs.properties,
+ resource/gnu/java/locale/LocaleInformation_cy.properties,
+ resource/gnu/java/locale/LocaleInformation_da.properties,
+ resource/gnu/java/locale/LocaleInformation_de.properties,
+ resource/gnu/java/locale/LocaleInformation_dv.properties,
+ resource/gnu/java/locale/LocaleInformation_el.properties,
+ resource/gnu/java/locale/LocaleInformation_en.properties,
+ resource/gnu/java/locale/LocaleInformation_en_GB.properties,
+ resource/gnu/java/locale/LocaleInformation_en_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_en_PK.properties,
+ resource/gnu/java/locale/LocaleInformation_en_SG.properties,
+ resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties,
+ resource/gnu/java/locale/LocaleInformation_es.properties,
+ resource/gnu/java/locale/LocaleInformation_es_AR.properties,
+ resource/gnu/java/locale/LocaleInformation_es_BO.properties,
+ resource/gnu/java/locale/LocaleInformation_es_CL.properties,
+ resource/gnu/java/locale/LocaleInformation_es_CO.properties,
+ resource/gnu/java/locale/LocaleInformation_es_CR.properties,
+ resource/gnu/java/locale/LocaleInformation_es_DO.properties,
+ resource/gnu/java/locale/LocaleInformation_es_EC.properties,
+ resource/gnu/java/locale/LocaleInformation_es_ES.properties,
+ resource/gnu/java/locale/LocaleInformation_es_GT.properties,
+ resource/gnu/java/locale/LocaleInformation_es_HN.properties,
+ resource/gnu/java/locale/LocaleInformation_es_MX.properties,
+ resource/gnu/java/locale/LocaleInformation_es_NI.properties,
+ resource/gnu/java/locale/LocaleInformation_es_PA.properties,
+ resource/gnu/java/locale/LocaleInformation_es_PE.properties,
+ resource/gnu/java/locale/LocaleInformation_es_PR.properties,
+ resource/gnu/java/locale/LocaleInformation_es_PY.properties,
+ resource/gnu/java/locale/LocaleInformation_es_SV.properties,
+ resource/gnu/java/locale/LocaleInformation_es_US.properties,
+ resource/gnu/java/locale/LocaleInformation_es_UY.properties,
+ resource/gnu/java/locale/LocaleInformation_es_VE.properties,
+ resource/gnu/java/locale/LocaleInformation_fa.properties,
+ resource/gnu/java/locale/LocaleInformation_fa_AF.properties,
+ resource/gnu/java/locale/LocaleInformation_fa_IR.properties,
+ resource/gnu/java/locale/LocaleInformation_fi.properties,
+ resource/gnu/java/locale/LocaleInformation_fr.properties,
+ resource/gnu/java/locale/LocaleInformation_fr_CA.properties,
+ resource/gnu/java/locale/LocaleInformation_ga.properties,
+ resource/gnu/java/locale/LocaleInformation_gu_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_hi_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_hr.properties,
+ resource/gnu/java/locale/LocaleInformation_hu.properties,
+ resource/gnu/java/locale/LocaleInformation_id.properties,
+ resource/gnu/java/locale/LocaleInformation_is.properties,
+ resource/gnu/java/locale/LocaleInformation_it.properties,
+ resource/gnu/java/locale/LocaleInformation_ja.properties,
+ resource/gnu/java/locale/LocaleInformation_kk.properties,
+ resource/gnu/java/locale/LocaleInformation_kl.properties,
+ resource/gnu/java/locale/LocaleInformation_km.properties,
+ resource/gnu/java/locale/LocaleInformation_ky.properties,
+ resource/gnu/java/locale/LocaleInformation_lo.properties,
+ resource/gnu/java/locale/LocaleInformation_lo_LA.properties,
+ resource/gnu/java/locale/LocaleInformation_lt.properties,
+ resource/gnu/java/locale/LocaleInformation_lt_LT.properties,
+ resource/gnu/java/locale/LocaleInformation_lv.properties,
+ resource/gnu/java/locale/LocaleInformation_mk.properties,
+ resource/gnu/java/locale/LocaleInformation_mn.properties,
+ resource/gnu/java/locale/LocaleInformation_mr.properties,
+ resource/gnu/java/locale/LocaleInformation_mr_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_ms.properties,
+ resource/gnu/java/locale/LocaleInformation_ms_BN.properties,
+ resource/gnu/java/locale/LocaleInformation_mt.properties,
+ resource/gnu/java/locale/LocaleInformation_nb.properties,
+ resource/gnu/java/locale/LocaleInformation_nl.properties,
+ resource/gnu/java/locale/LocaleInformation_nn.properties,
+ resource/gnu/java/locale/LocaleInformation_om_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_or_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_pa.properties,
+ resource/gnu/java/locale/LocaleInformation_pl.properties,
+ resource/gnu/java/locale/LocaleInformation_pt.properties,
+ resource/gnu/java/locale/LocaleInformation_ru.properties,
+ resource/gnu/java/locale/LocaleInformation_ru_RU.properties,
+ resource/gnu/java/locale/LocaleInformation_ru_UA.properties,
+ resource/gnu/java/locale/LocaleInformation_sa.properties,
+ resource/gnu/java/locale/LocaleInformation_sa_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_sk.properties,
+ resource/gnu/java/locale/LocaleInformation_sr_Latn.properties,
+ resource/gnu/java/locale/LocaleInformation_sv.properties,
+ resource/gnu/java/locale/LocaleInformation_sw.properties,
+ resource/gnu/java/locale/LocaleInformation_sw_TZ.properties,
+ resource/gnu/java/locale/LocaleInformation_ta_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_te.properties,
+ resource/gnu/java/locale/LocaleInformation_te_IN.properties,
+ resource/gnu/java/locale/LocaleInformation_th.properties,
+ resource/gnu/java/locale/LocaleInformation_ti.properties,
+ resource/gnu/java/locale/LocaleInformation_ti_ER.properties,
+ resource/gnu/java/locale/LocaleInformation_ti_ET.properties,
+ resource/gnu/java/locale/LocaleInformation_tr.properties,
+ resource/gnu/java/locale/LocaleInformation_tt.properties,
+ resource/gnu/java/locale/LocaleInformation_uk.properties,
+ resource/gnu/java/locale/LocaleInformation_ur.properties,
+ resource/gnu/java/locale/LocaleInformation_uz.properties,
+ resource/gnu/java/locale/LocaleInformation_zh.properties,
+ resource/gnu/java/locale/LocaleInformation_zh_Hant.properties:
+ More updates for CLDR 1.3.
+
+2006-03-19 Andrew John Hughes <gnu_andrew@member.fsf.org>
+
+ * doc/vmintegration.texinfo:
+ Updated to include VMArray.
+ * include/Makefile.am:
+ Replace java_lang_reflect_Array.h with
+ java_lang_reflect_VMArray.h
+ * include/java_lang_reflect_VMArray.h:
+ New autogenerated header.
+ * include/java_lang_reflect_Array.h:
+ Removed.
+ * java/lang/reflect/Array.java:
+ (newInstance(Class,int)): Calls VMArray.
+ (createMultiArray(Class,int[],int)): Likewise.
+ (createObjectArray(Class,int)): Removed.
+ * native/jni/java-lang/Makefile.am:
+ Replaced java_lang_reflect_Array.c with
+ java_lang_reflect_VMArray.c
+ * native/jni/java-lang/java_lang_reflect_VMArray.c:
+ Renamed from java_lang_reflect_Array.c.
+ * vm/reference/java/lang/reflect/VMArray.java:
+ (createObjectArray(Class,int)): Native method moved
+ from java.lang.reflect.Array.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * gnu/javax/swing/plaf/metal/CustomizableTheme.java: New class.
+ * examples/gnu/classpath/examples/swing/MetalThemeEditor.java:
+ New class.
+ * examples/gnu/classpath/examples/swing/Demo.java
+ (mkButtonBar): Hook up theme editor.
+ (mkMenuBar): Hook up theme editor.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicFileChooserUI.java
+ (ApproveSelectionAction.actionPerformed): Added case for when
+ nothing has been selected but the user has typed a filename
+ into the textfield.
+ (getFileName): Return the value of the text field.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JColorChooser.java
+ (createDialog): Create JDialog instead of ModalDialog. Make this
+ dialog modal by calling setModal(true).
+ (ModalDialog): Removed unnecessary inner class.
+
+2006-03-19 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/font/NumericShaper.java: Rewrote.
+
+2006-03-19 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTableUI.java:
+ Implement MouseWheelListener. (ROWS_PER_WHEEL_CLICK):
+ New field. MouseInputHandler.mouseWheelMoved): New method.
+ (installListeners): Register MouseInputHandler as
+ wheel listener also.
+
+2006-03-19 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ PR 26746
+ * javax/swing/ViewportLayout.java (layoutContainer):
+ If Scrollable tracks dimension, set view size to the port size.
+ If port is larger than the view, move the view to the top/left.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/MenuSelectionManager.java
+ (isComponentPartOfCurrentMenu): Also consider the first element
+ in a menu selection list. Make a isDescendentFrom check instead
+ of simple equals to also catch sub components.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComboBox.java
+ (actionPerformed): Fetch selected item directly from the editor
+ instead of trying to get it from the event.
+
+2006-03-19 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboBoxEditor.java
+ (listener): Removed field.
+ (BasicComboBoxEditor): Removed initialization of listener field.
+ (addActionListener): Add listener directly to editor.
+ (removeActionListener): Remove listener directly from editor.
+ (ComboBoxEditorListener): Removed class.
+ * javax/swing/plaf/basic/BasicComboBoxUI.java
+ (getPreferredSize): Fixed to return the minimumSize.
+ (getMinimumSize): Improved code for more clearness.
+ (getMaximumSize): Return (32767,32767) as requested by the mauve test.
+ (rectangleForCurrentValue): Correctly respect insets.
+ (getDefaultSize): Return preferredSize here. Dont override height
+ with 100.
+ (getDisplaySize): Moved around code for more clearness. Added
+ handling of prototype renderer.
+ (ComboBoxLayoutManager.layoutContainer): Set editor bounds after
+ arrowButton bounds since the former depends on the latter.
+ * javax/swing/plaf/metal/MetalComboBoxButton.java:
+ (MetalComboBoxButton): Make button rollover disabled.
+ (isFocusTraversable): Return false unconditionally.
+ * javax/swing/plaf/metal/MetalComboBoxEditor.java:
+ (EditorTextField): New class. Fixes the size properties.
+ (MetalComboBoxEditor): Create instance of EditorTextField.
+ * javax/swing/plaf/metal/MetalComboBoxUI.java:
+ (getMinimumSize): Fixed editable size.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/JTable.java (BooleanCellRenderer): Rewritten.
+
+2006-03-18 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalToolBarUI.java
+ (update): Added overridden method to support OceanTheme.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax/swing/plaf/basic/BasicTableUI.java (KeyHandler.keyTyped):
+ Activate the cell editing on character keystroke.
+
+2006-03-18 Mark Wielaard <mark@klomp.org>
+
+ * java/awt/Component.java (eventTypeEnabled): Handle
+ MouseEvent.MOUSE_WHEEL.
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (postMouseWheelEvent):
+ New callback method.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ (AWT_MOUSE_WHEEL): New constant.
+ (AWT_WHEEL_UNIT_SCROLL): Likewise.
+ (postMouseWheelEventID): New static variable.
+ (cp_gtk_component_init_jni): Record postMouseWheelEventID.
+ (cp_gtk_component_connect_mouse_signals): Connect scroll-event.
+ (button_number): Renamed to ...
+ (button_number_direction): variable to hold button number or scroll
+ direction.
+ (component_button_press_cb): Use button_number_direction.
+ (component_scroll_cb): New static callback function.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax.swing.JTable.java (TableTextField.scrollRectToVisible):
+ Return without action.
+
+2006-03-18 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (paintComponent):
+ Don't cast graphics object to GdkGraphics.
+ (updateComponent): Likewise.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * examples/gnu/classpath/examples/swing/TableDemo.java
+ (TModel.getColumnClass): Set second column to Icon.
+ (TModel.isCellEditable): Say icons are not editable.
+ (createContent): Fill the in second column with some icons from
+ MetalIconFactory.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * examples/gnu/classpath/examples/swing/Demo.java
+ (mkButtonBar): Set maximal button bar height to the preferred height.
+
+2006-03-18 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboPopup.java
+ (show): Substract insets from scroller width.
+ (getPopupHeightForRowCount): If height==0, return a default of 100
+ instead for empty ComboBoxes.
+
+2006-03-18 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicLookAndFeel.java
+ (PopupHelper.autoClosePopups): Removed field.
+ (PopupHelper.mousePressed): Removed processing of registered
+ autoclose popups.
+ (registerForAutoClose): Removed unneeded method.
+ (autoClosePopups): Removed unneeded method.
+ (registerForAutoClose): Removed unneeded method.
+
+2006-03-18 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * javax.swing.JTable.java (TableTextField): Set border.
+ (moveToCellBeingEdited): Do not adjust the editor boundaries
+
+2006-03-18 Michael Koch <konqueror@gmx.de>
+
+ * resource/gnu/java/locale/LocaleInformation_aa.properties,
+ resource/gnu/java/locale/LocaleInformation_af.properties,
+ resource/gnu/java/locale/LocaleInformation_am.properties,
+ resource/gnu/java/locale/LocaleInformation_ar.properties,
+ resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties,
+ resource/gnu/java/locale/LocaleInformation_be.properties,
+ resource/gnu/java/locale/LocaleInformation_bg.properties,
+ resource/gnu/java/locale/LocaleInformation_bn.properties,
+ resource/gnu/java/locale/LocaleInformation_ca.properties,
+ resource/gnu/java/locale/LocaleInformation_cs.properties,
+ resource/gnu/java/locale/LocaleInformation_cy.properties,
+ resource/gnu/java/locale/LocaleInformation_da.properties,
+ resource/gnu/java/locale/LocaleInformation_de.properties,
+ resource/gnu/java/locale/LocaleInformation_de_CH.properties,
+ resource/gnu/java/locale/LocaleInformation_dz.properties,
+ resource/gnu/java/locale/LocaleInformation_en.properties,
+ resource/gnu/java/locale/LocaleInformation_eo.properties,
+ resource/gnu/java/locale/LocaleInformation_es.properties,
+ resource/gnu/java/locale/LocaleInformation_et.properties,
+ resource/gnu/java/locale/LocaleInformation_eu.properties,
+ resource/gnu/java/locale/LocaleInformation_fa.properties,
+ resource/gnu/java/locale/LocaleInformation_fa_AF.properties,
+ resource/gnu/java/locale/LocaleInformation_fi.properties,
+ resource/gnu/java/locale/LocaleInformation_fo.properties,
+ resource/gnu/java/locale/LocaleInformation_fr.properties,
+ resource/gnu/java/locale/LocaleInformation_ga.properties,
+ resource/gnu/java/locale/LocaleInformation_gl.properties,
+ resource/gnu/java/locale/LocaleInformation_gu.properties,
+ resource/gnu/java/locale/LocaleInformation_he.properties,
+ resource/gnu/java/locale/LocaleInformation_hi.properties,
+ resource/gnu/java/locale/LocaleInformation_hr.properties,
+ resource/gnu/java/locale/LocaleInformation_hu.properties,
+ resource/gnu/java/locale/LocaleInformation_hy.properties,
+ resource/gnu/java/locale/LocaleInformation_id.properties,
+ resource/gnu/java/locale/LocaleInformation_is.properties,
+ resource/gnu/java/locale/LocaleInformation_it.properties,
+ resource/gnu/java/locale/LocaleInformation_ja.properties,
+ resource/gnu/java/locale/LocaleInformation_ka.properties,
+ resource/gnu/java/locale/LocaleInformation_km.properties,
+ resource/gnu/java/locale/LocaleInformation_ko.properties,
+ resource/gnu/java/locale/LocaleInformation_lo.properties,
+ resource/gnu/java/locale/LocaleInformation_lt.properties,
+ resource/gnu/java/locale/LocaleInformation_lv.properties,
+ resource/gnu/java/locale/LocaleInformation_mk.properties,
+ resource/gnu/java/locale/LocaleInformation_mr.properties,
+ resource/gnu/java/locale/LocaleInformation_ms.properties,
+ resource/gnu/java/locale/LocaleInformation_mt.properties,
+ resource/gnu/java/locale/LocaleInformation_nb.properties,
+ resource/gnu/java/locale/LocaleInformation_nl.properties,
+ resource/gnu/java/locale/LocaleInformation_nn.properties,
+ resource/gnu/java/locale/LocaleInformation_om.properties,
+ resource/gnu/java/locale/LocaleInformation_pl.properties,
+ resource/gnu/java/locale/LocaleInformation_ps.properties,
+ resource/gnu/java/locale/LocaleInformation_pt.properties,
+ resource/gnu/java/locale/LocaleInformation_pt_PT.properties,
+ resource/gnu/java/locale/LocaleInformation_ro.properties,
+ resource/gnu/java/locale/LocaleInformation_ru.properties,
+ resource/gnu/java/locale/LocaleInformation_sk.properties,
+ resource/gnu/java/locale/LocaleInformation_sl.properties,
+ resource/gnu/java/locale/LocaleInformation_so.properties,
+ resource/gnu/java/locale/LocaleInformation_sq.properties,
+ resource/gnu/java/locale/LocaleInformation_sr.properties,
+ resource/gnu/java/locale/LocaleInformation_sr_Latn.properties,
+ resource/gnu/java/locale/LocaleInformation_sv.properties,
+ resource/gnu/java/locale/LocaleInformation_sw.properties,
+ resource/gnu/java/locale/LocaleInformation_ta.properties,
+ resource/gnu/java/locale/LocaleInformation_te.properties,
+ resource/gnu/java/locale/LocaleInformation_th.properties,
+ resource/gnu/java/locale/LocaleInformation_tr.properties,
+ resource/gnu/java/locale/LocaleInformation_uk.properties,
+ resource/gnu/java/locale/LocaleInformation_uz.properties,
+ resource/gnu/java/locale/LocaleInformation_vi.properties,
+ resource/gnu/java/locale/LocaleInformation_zh.properties,
+ resource/gnu/java/locale/LocaleInformation_zh_Hant.properties:
+ Updated to use the new localized strings for currencies, languages,
+ variants, territories, etc.
+
+2006-03-18 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/REMatch.java(matchedCharIndexed): New field,
+ (start, end): Added comment about the negative values of them,
+ (finish): Saves the input text in matchedCharIndexed,
+ (toString): If the start or end index is out of bounds of the
+ matched text, get the substring from matchedCharIndexed.
+ Added special handlings in case start/end index < -1,
+ (getSubStartIndex, getStartIndex, getSubEndIndex, getEndIndex):
+ Added special handlings in case start/end index < -1,
+ * gnu/regexp/RETokenLookAhead.java(matchThis): Return the newly
+ found match, but keep the index as the original match.
+ * gnu/regexp/RETokenLookBehind.java(matchThis): Return the newly
+ found match, but keep the index as the original match.
+ * gnu/regexp/RETokenBackRef.java(matchThis): Added special handlings
+ in case start/end index < -1.
+
+2006-03-17 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/activation/ActivationSystemTransient.java (debug):
+ Set to false.
+
+2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (mouseClicked) Use setDot() and moveDot() instead of
+ JTextComponent.select().
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxEditor.java
+ (MetalComboBoxEditorBorder.paintBorder): Implemented special
+ border painting for the Ocean theme.
+ (MetalComboBoxEditor): Create editor directly instead of going
+ to super.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/JTextComponent.java
+ (JTextComponent): Make text components opaque.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxUI.java
+ (MetalComboBoxLayoutManager.layoutContainer): Forward to
+ layoutComboBox().
+ (MetalPropertyChangeListener.propertyChange): Update focusable
+ flag according to the enable and editable state.
+ (editablePropertyChanged): Removed unnecessary code.
+ (getMinimumSize): Rewritten to correctly compute the
+ size, respecting the insets of the components and the icon,
+ the visual properties of the combobox, etc.
+ (configureEditor): Update listeners correctly.
+ (unconfigureEditor): Update listeners correctly.
+ (layoutComboBox): Implemented.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxEditor.java
+ (MetalComboBoxEditorBorder): Made this a subclass of AbstractBorder
+ instead of Flush3DBorder.
+ (paintBorder): Fixed border painting.
+ (editorBorderInsets): Fixed border's insets.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxButton.java
+ (rendererPane): Documented.
+ (MetalComboBoxButton): Set enabled flag from ComboBox.
+ Set focusable flag from ComboBox's enabled flag.
+ (isFocusTraversable): Make button focus traversable if
+ ComboBox is not editable but enable.
+ (paintComponent): Fixed painting to correctly adjust
+ the boxes of the renderer and button.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicButtonUI.java
+ (installDefaults): Only install UI margin if installed margin.
+ is null or a UIResource.
+ (uninstallDefaults): Only uninstall margin if it's
+ a UIResource.
+
+ 2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (mouseClicked) Use setDot() and moveDot() instead of
+ JTextComponent.select().
+
+2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultEditorKit.java: Refactored anonymous
+ inner classes into package-private inner classes, added actions
+ for caret movement and selection to the next and previous word
+ and an action which selects the whole text.
+
+2006-03-17 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/swing/Spring.java: Uncomment springdebug methods and
+ rename them toString.
+ * javax/swing/SpringLayout.java: Likewise.
+
+2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/FieldView.java:
+ (viewToModel): Added call to adjust allocation area.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboBoxUI.java
+ (mouseListener): Removed field.
+ (buttonBackground): Removed field.
+ (buttonShadow): Removed field.
+ (buttonDarkShadow): Removed field.
+ (buttonHighlight): Removed field.
+ (BasicComboBoxUI): Initialize currentValuePane and cachedMinimumSize.
+ (installUI): Initialize and configure renderer and editor here.
+ (uninstallUI): Close popup before uninitializing.
+ Message popup that we are uninitializing. Clear layout.
+ (installDefaults): Install UI border. Don't install colors.
+ (installListeners): Install listeners fetched from the popup.
+ Remove handling of mouseListener.
+ (uninstallDefaults): Uninstall border. Don't handle colors.
+ (uninstallListeners): Don't handle mouseListener. Uninstall
+ listener from the popup.
+ (createMouseListener): Removed method.
+ (createRenderer): Create UIResource.
+ (installComponents): Cleaned up.
+ (uninstallComponents): Only remove renderer when it is
+ a UIResource.
+ (addEditor): Remove editor before adding new one.
+ Fetch editor from comboBox.
+ (removeEditor): Only do something when editor != null. Unconfigure
+ editor before removing.
+ (configureEditor): Add key listener. Call comboBox.configureEditor.
+ (unconfigureEditor): Removed key listener.
+ (configureArrowButton): Only handle when arrowButton != null.
+ Add mouse listeners to arrow button.
+ (unconfigureArrowButton): Remove listeners.
+ (createArrowButton): Don't handle colors here.
+ (setPopupVisible): Don't handle focus here.
+ (paint): Only paint when comboBox is not editable. Update
+ hasFocus flag.
+ (getPreferredSize): Implemented to be minimumSize + 4 pixels width.
+ (getMinimumSize): Respect insets here.
+ (getMaximumSize): Return preferredSize with width of 32767.
+ (getInsets): Return ComboBox insets.
+ (paintCurrentValue): Paint using currentValuePane.
+ Install correct colors. Don't revalidate.
+ (paintCurrentValueBackground): Implemented.
+ (getDefaultSize): Reimplemented using a default renderer.
+ (getDisplaySize): Reimplemented to use renderer.
+ (ComboBoxLayoutManager.preferredLayoutSize): Forward to component.
+ (ComboBoxLayoutManager.minimumLayoutSize): Forward to component.
+ (ComboBoxLayoutManager.layoutContainer): Fixed layout.
+ (FocusHandler.focusGained): Don't invalidate minimumSize.
+ (FocusHandler.focusLost): Don't invalidate minimumSize.
+ Only close popup if focus change is not temporary.
+ (ItemHandler.itemStateChanged): Don't invalidate minimumSize.
+ Reconfigure editor if not null.
+ (ListDataHandler.contentsChanged): Revalidate and reconfigure
+ editor if necessary.
+ (ListDataHandler.intervalAdded): Fixed updating of the display size.
+ (ListDataHandler.intervalRemoved): Forward to contentsChanged.
+ (MouseHandler): Removed unnecessary class.
+
+2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (Demo): Set default closing operation to shutdown the runtime.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboPopup.java
+ (BasicComboPopup): Create listeners here.
+ Configure components here.
+ (show): Correctly calculate bounds using computePopupBounds().
+ Make scroller fixed-size. Removed special autocloser handling.
+ (hide): Rewritten to use MenuSelectionHandler.
+ (createList): Don't set selection mode here.
+ (configureList): Correctly install colors and fonts and selectionMode.
+ (createScroller): Set scrollpane policies.
+ (configureScroller): Make scroller and scrollbar not-focusable.
+ (configurePopup): Make popup opaque and borderPainted.
+ (installComboBoxListeners): Don't install mouse listener on ComboBox.
+ (delegateFocus): Implemented.
+ (convertMouseEvent): Implemented.
+ (updateListBoxSelectionForEvent): Implemented to also handle
+ autoscrolling.
+ (InvocationMouseHandler.mousePressed): Delegate focus correctly.
+ Only open popup on left mouse-click.
+ (InvocationMouseHandler.mouseReleased): Rewritten.
+ (InvocationMouseMotionHandler.mouseDragged): Rewritten to better
+ support autoscrolling.
+ (ItemHandler.itemStateChanged): Implemented to sync selection with
+ the comboBox.
+ (ListMouseHandler.mouseReleased): Fetch selected index directly
+ from list.
+ (ListMouseMotionHandler.mouseMoved): Only update when mouse is inside
+ the list box.
+ (PropertyChangeHandler.propertyChange): Don't revalidate/repaint here.
+ When model changes, then update listeners correctly.
+ (uninstallListeners): Don't uninstall list listeners.
+ (uninstallComboBoxListeners): Don't uninstall mouse listeners
+ from comboBox.
+ (syncSelection): New helper method.
+
+2006-03-17 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/PlainView.java:
+ (drawLine): Rewritten.
+ (drawSelectedText): Corrected last argument for
+ Utilities.drawTabbedText() call.
+ (paint): Store start and end of selection in object variables,
+ store constant values of for-loop in local variables.
+ * javax/swing/text/Utilities.java:
+ (drawTabbedText): Add 'pixelWidth' to the return value, store
+ constant value of for-loop in local variable.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboPopup.java
+ (BasicComboPopup): Create listeners here.
+ Configure components here.
+ (show): Correctly calculate bounds using computePopupBounds().
+ Make scroller fixed-size. Removed special autocloser handling.
+ (hide): Rewritten to use MenuSelectionHandler.
+ (createList): Don't set selection mode here.
+ (configureList): Correctly install colors and fonts and selectionMode.
+ (createScroller): Set scrollpane policies.
+ (configureScroller): Make scroller and scrollbar not-focusable.
+ (configurePopup): Make popup opaque and borderPainted.
+ (installComboBoxListeners): Don't install mouse listener on ComboBox.
+ (delegateFocus): Implemented.
+ (convertMouseEvent): Implemented.
+ (updateListBoxSelectionForEvent): Implemented to also handle
+ autoscrolling.
+ (InvocationMouseHandler.mousePressed): Delegate focus correctly.
+ Only open popup on left mouse-click.
+ (InvocationMouseHandler.mouseReleased): Rewritten.
+ (InvocationMouseMotionHandler.mouseDragged): Rewritten to better
+ support autoscrolling.
+ (ItemHandler.itemStateChanged): Implemented to sync selection with
+ the comboBox.
+ (ListMouseHandler.mouseReleased): Fetch selected index directly
+ from list.
+ (ListMouseMotionHandler.mouseMoved): Only update when mouse is inside
+ the list box.
+ (PropertyChangeHandler.propertyChange): Don't revalidate/repaint here.
+ When model changes, then update listeners correctly.
+ (uninstallListeners): Don't uninstall list listeners.
+ (uninstallComboBoxListeners): Don't uninstall mouse listeners
+ from comboBox.
+ (syncSelection): New helper method.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicComboBoxRenderer.java
+ (noFocusBorder): Make border with insets of (1,1,1,1).
+ (BasicComboBoxRenderer): Make renderer opaque.
+ No need to explicitly set alignment.
+ (getListCellRendererComponent): Rewritten to correctly initialize
+ color and font.
+
+2006-03-17 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JPopupMenu.java
+ (setVisible): Handle JPopupMenu opening and closing via
+ the MenuSelectionHandler.
+
+2006-03-17 Wolfgang Baer <WBaer@gmx.de>
+
+ * org/omg/DynamicAny/DynAnyPackage/InvalidValue.java: Now final.
+ * org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java: Likewise.
+ * org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java:
+ Likewise.
+ * org/omg/CORBA/portable/RemarshalException.java: Likewise
+ * org/omg/CORBA/TypeCodePackage/BadKind.java: Likewise.
+ * org/omg/CORBA/TypeCodePackage/Bounds.java: Likewise.
+ * org/omg/CORBA/ORBPackage/InvalidName.java: Likewise.
+ * org/omg/CORBA/ORBPackage/InconsistentTypeCode.java: Likewise.
+ * org/omg/CORBA/DynAnyPackage/TypeMismatch.java: Likewise.
+ * org/omg/CORBA/DynAnyPackage/InvalidValue.java: Likewise.
+ * org/omg/CORBA/DynAnyPackage/InvalidSeq.java: Likewise.
+ * org/omg/CORBA/DynAnyPackage/Invalid.java: Likewise.
+ * org/omg/Dynamic/Parameter.java: Now final, javadoc fixes.
+
+2006-03-17 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/activation/Activatable.java: Implemented.
+ java/rmi/activation/ActivationDesc.java: Implemented.
+ java/rmi/activation/ActivationGroup.java: Implemented.
+ java/rmi/activation/ActivationGroupDesc.java: Implemented.
+ java/rmi/activation/ActivationID.java: Implemented.
+ java/rmi/activation/ActivationSystem.java: Implemented.
+ * gnu/java/rmi/server/UnicastServerRef.java
+ (exportObject, incommingMessageCall): Documented.
+ * java/rmi/activation/package.html: Documented.
+ * java/rmi/server/ObjID.java (objNum, space): Made package
+ protected.
+ * gnu/java/rmi/server/UnicastServer.java: Rewritten.
+ * gnu/java/rmi/server/CombinedClassLoader.java (constructor):
+ Iteration bug fix.
+ * gnu/java/rmi/activation/ActivationSystemTransient.java: New file.
+ gnu/java/rmi/activation/BidiTable.java: New file.
+ gnu/java/rmi/activation/DefaultActivationGroup.java: New file.
+ gnu/java/rmi/activation/DefaultActivationSystem.java: New file.
+ gnu/java/rmi/server/ActivatableServerRef.java: New file.
+
+2006-03-17 Mark Wielaard <mark@klomp.org>
+
+ * java/security/BasicPermission.java (BasicPermission): Check
+ name equals empty string to force NullPointerException.
+
+2006-03-16 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ PR classpath/26606
+ Commit patch by Caolan McNamara <caolanm@redhat.com>
+ * javax/swing/Spring.java: Complete implementation
+ * javax/swing/SpringLayout.java: Likewise.
+
+2006-03-16 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/Jdwp.java (_mainThread): Not needed. Removed
+ all references.
+ (run): Remove catch clause for InterruptedException. It is no
+ longer necessary.
+
+2006-03-16 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ (getFontMetrics): Handle monospaced fonts specially.
+
+2006-03-16 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/Jdwp.java (getJdwpThreadGroup): New method.
+ * vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
+ (suspendAllThreads): Use Jdwp.getJdwpThreadGroup.
+ Don't suspend the current thread unless it is not part of the JDWP
+ thread group.
+
+2006-03-16 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * gnu/java/awt/peer/gtk/GdkFontMetrics.java (getLeading): Always
+ return 0.
+ * gnu/java/awt/peer/gtk/GdkFontPeer.java (getFontMetrics): Get
+ font metrics through toolkit.
+ * gnu/java/awt/peer/gtk/GdkGraphics.java (getFontMetrics):
+ Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+ (getFontMetrics): To calculate Java logical ascent and descent
+ values, average Pango ink and logical values.
+
+2006-03-16 Anthony Balkissoon <abalkiss@redhat.com>
+
+ * java/lang/Character.java: Updated header comment.
+
+2006-03-16 Tom Tromey <tromey@redhat.com>
+
+ * javax/sound/sampled/AudioSystem.java (getAudioFileFormat): New
+ constructor.
+ * javax/sound/sampled/FloatControl.java: Now abstract.
+ * javax/sound/sampled/EnumControl.java: Now abstract.
+ * javax/sound/sampled/CompoundControl.java: Now abstract.
+ * javax/sound/sampled/BooleanControl.java: Now abstract.
+
+2006-03-16 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/image/ConvolveOp.java (getBounds2D): Now final.
+
+2006-03-16 Roman Kennke <kennke@aicas.com>
+
+ * java/util/zip/ZipFile.java
+ (openFile): New helper method.
+ (ZipFile): Use new openFile method to ensure the proper
+ exception is thrown. This applies for all overloaded constructors.
+
+2006-03-16 Roman Kennke <kennke@aicas.com>
+
+ * java/text/DateFormatSymbols.java
+ (setAmPmStrings): Added null check and throw NPE.
+ (setEras): Likewise.
+ (setLocalPatternChars): Likewise.
+ (setMonths): Likewise.
+ (setShortMonths): Likewise.
+ (setShortWeekdays): Likewise.
+ (setWeekdays): Likewise.
+ (setZoneStrings): Likewise.
+
+2006-03-16 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/DefaultDesktopManager.java
+ (iconifyFrame): Repaint after removing the frame.
+ (removeIconFor): Repaint after removing the icon.
+
+2006-03-16 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JInternalFrame.java
+ (remove): Respect the rootPaneCheckingEnabled flag here.
+
+2006-03-16 Roman Kennke <kennke@aicas.com>
+
+ * gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
+ Moved from examples into gnu.javax.swing.. namespace.
+ * examples/gnu/classpath/examples/swing/GNULookAndFeel.java
+ Moved to gnu.javax.swing.. namespace.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (themesMenu): New field. Used to disable theme switch in
+ non-Metal-L&Fs.
+ (mkMenuBar): Added L&F menu.
+ (ChangeThemeAction.actionPerformed): Only switch theme when
+ in Metal L&F.
+ (ChangeLAFAction): New class used for changing themes.
+ * javax/swing/UIManager.java
+ (installed): Added GNU L&F as installed L&F.
+
+2006-03-16 Mark Wielaard <mark@klomp.org>
+
+ * examples/gnu/classpath/examples/swing/badge.png: Removed.
+ * examples/gnu/classpath/examples/icons/badge.png: Added.
+ * examples/gnu/classpath/examples/swing/DemoDesktop.java: Use badge
+ from icon directory.
+
+2006-03-15 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * examples/gnu/classpath/examples/awt/AnimationApplet.java: New
+ example.
+ * examples/gnu/classpath/examples/swing/FillRect.java: Likewise.
+ * examples/gnu/classpath/examples/awt/Demo.java: Add
+ AnimationApplet demo.
+ * examples/gnu/classpath/examples/swing/Demo.java: Add FillRect
+ demo.
+
+2006-03-15 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ PR classpath/26486
+ * gnu/java/awt/peer/gtk/GtkCanvasPeer.java (getGraphics): Remove
+ method.
+ (handleEvent): Likewise.
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (isInRepaint):
+ Remove field.
+ (beginNativeRepaint): Remove method.
+ (endNativeRepaint): Likewise.
+ (handleEvent): Call paintComponent and updateComponent.
+ (paintComponent): New method.
+ (updateComponent): Likewise.
+ (repaint): Return early if width or height is less than one.
+ (postExposeEvent): Remove isInRepaint reference.
+ * gnu/java/awt/peer/gtk/GtkContainerPeer.java: (getGraphics):
+ Remove method.
+ * gnu/java/awt/peer/gtk/GtkDialogPeer.java (getGraphics): Inherit
+ from GtkWindowPeer.
+ (postMouseEvent): Likewise.
+ (postExposeEvent): Likewise.
+ * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (updateComponent):
+ Override to do nothing.
+ * gnu/java/awt/peer/gtk/GtkFramePeer.java (getGraphics): Inherit
+ from GtkWindowPeer.
+ (postMouseEvent): Likewise.
+ (postExposeEvent): Likewise.
+ * gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Inherit
+ paint and update handling from GtkComponentPeer.
+ (updateComponent): Override to call paintComponent.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Replace
+ gdk_flush calls with schedule_flush calls.
+ (flush): New function.
+ (schedule_flush): Likewise.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * java/beans/beancontext/BeanContextSupport.java (BCSChild): New
+ constructor.
+ (BCSIterator): Likewise.
+ * java/beans/beancontext/BeanContextServicesSupport.java (BCSSChild):
+ New constructor.
+ (BCSSProxyServiceProvider): Likewise.
+ (BCSSServiceProvider): Likewise.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * javax/sound/midi/Track.java (Track): New constructor.
+ (events): Now package-private.
+ * javax/sound/midi/MidiUnavailableException.java
+ (MidiUnavailableException): Removed invalid constructors.
+ * javax/sound/midi/MidiSystem.java (MidiSystem): New constructor.
+ * javax/sound/midi/InvalidMidiDataException.java
+ (InvalidMidiDataException): Removed invalid constructors.
+ * javax/sound/midi/Sequencer.java (hashCode): Now final.
+ * javax/sound/midi/SysexMessage.java (SysexMessage): Now protected.
+ * javax/sound/midi/ShortMessage.java (ShortMessage): Now protected.
+ (SYSTEM_EXCLUSIVE): Removed.
+ (getDataLength): Updated.
+ * javax/sound/midi/MidiDevice.java (Info): Now protected.
+ (equals): Now final
+ (getName): Now final.
+ (getVendor): Now final.
+ (getDescription): Likewise.
+ (hashCode): Likewise.
+ (getVersion): Likewise.
+ (toString): Likewise.
+ * javax/sound/midi/MetaMessage.java (MetaMessage): Now protected.
+ * javax/sound/sampled/ReverbType.java (getDecayTime): Now final.
+ (getEarlyReflectionDelay): Likewise.
+ (getEarlyReflectionIntensity): Likewise.
+ (getLateReflectionDelay): Likewise.
+ (getLateReflectionIntensity): Likewise.
+ (toString): Likewise.
+ * javax/sound/sampled/Port.java (toString): Now final.
+ * javax/sound/sampled/LineEvent.java (getFramePosition): Now final.
+ (getLine): Likewise.
+ (getType): Likewise.
+ * javax/sound/sampled/Mixer.java (Info): Now protected.
+ (getDescription): Now final.
+ (getName): Likewise.
+ (getVendor): Likewise.
+ (getVersion): Likewise.
+ (toString): Likewise.
+ * javax/sound/sampled/Control.java: Now abstract.
+ (Type.toString): Now final.
+
+2006-03-15 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/util/LineTable.java (lines): Remove all occurances
+ of this redundant variable.
+ (LineTable): Assert that the number of line numbers and the number of
+ code indicies is the same.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * javax/imageio/stream/ImageOutputStreamImpl.java (flushBits): Now
+ final.
+ * javax/imageio/stream/ImageOutputStream.java (flushBefore): Javadoc
+ fix.
+ * java/util/zip/ZipFile.java (ENDNRD): New constant.
+ * java/util/zip/ZipConstants.java (ENDNRD, ENDDCD): Removed.
+ * java/util/zip/Inflater.java (end): Not deprecated.
+ * java/util/zip/Deflater.java (end): Not deprecated.
+ * java/text/Bidi.java (Bidi): Now final.
+ * java/nio/MappedByteBuffer.java (finalize): Now protected.
+
+2006-03-15 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/util/Location.java: Rewrite using VMMethod.
+ (Location): Index is a long, not an int.
+ (getMethod): New method.
+ (getIndex): New method.
+ (toString): New method.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/image/RescaleOp.java (getRenderingHints): Now final.
+ * java/awt/image/LookupOp.java (filter): Now final.
+ (getBounds2D): Likewise.
+ (getPoint2D): Likewise.
+ (getTable): Likewise.
+ (getRenderingHints): Likewise.
+ * java/awt/image/ConvolveOp.java (filter): Now final.
+ (getBounds2D): Likewise.
+ (getKernel): Likewise.
+ (getPoint2D): Likewise.
+ (getRenderingHints): Likewise.
+ * java/awt/image/BandCombineOp.java (getPoint2D): Now final.
+ (getMatrix): Likewise.
+ (getBounds2D): Likewise.
+ (getRenderingHints): Likewise.
+ * java/awt/image/AffineTransformOp.java (getPoint2D): Now final.
+ * java/awt/Button.java (AccessibleAWTButton.serialVersionUID): Now
+ private.
+ * java/awt/dnd/DropTargetContext.java (TransferableProxy): Now
+ protected.
+ * java/awt/dnd/DropTarget.java (DropTargetAutoScroller): Now
+ protected.
+ * java/awt/MenuItem.java (AccessibleAWTMenuItem): Now protected.
+
+2006-03-15 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java:
+ Update javadoc.
+ (matches): Implement.
+
+2006-03-15 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/event/BreakpointEvent.java: New file.
+
+ * gnu/classpath/jdwp/exception/NativeMethodException.java: New file.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/StrictMath.java (signum): New methods.
+
+2006-03-15 Tom Tromey <tromey@redhat.com>
+
+ * .settings/org.eclipse.jdt.core.prefs: Set tabs to 8 spaces.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ PR classpath/24211
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+ (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked):
+ Added check to avoid segmentation fault.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Container.java
+ (getComponentAt): Fixed documentation.
+ (getComponentAt): Likewise.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JComponent.java
+ (dragBuffer): New field.
+ (dragBufferInitialized): New field.
+ (paint): Added facility for buffered dragging of components.
+ (initializeDragBuffer): New method.
+ (getConditionForKeyStroke): Removed deprecated flag. Adjusted
+ API docs.
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java
+ (BorderListener.mouseDragged): Turn on buffered dragging.
+ (BorderListener.mouseReleased): Turn off buffered dragging.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Container.java
+ (getComponentAt): Fixed documentation.
+ (getComponentAt): Likewise.
+ (findComponentAt): Likewise.
+ (findComponentAt): Likewise.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ (PropertyChangeHandler.propertyChange): Call enableActions().
+ Fixed 'iconable' property name.
+
+2006-03-15 Chris Burdess <dog@gnu.org>
+
+ Fixes PR 26700
+ * gnu/xml/stream/XMLParser.java: Fix for detectEncoding false positive.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (desktop): New field.
+ (mkMenuBar): Added new subdemos.
+ (mkButtonWorld): Removed.
+ (CheckCellRenderer): Moved to ListDemo.
+ (LabelCellRenderer): Moved to ListDemo.
+ (mkTreeWorld): Moved to TreeDemo.
+ (mkDesktopWorld): Removed.
+ (mkTabWorld): Moved to TabbedPaneDemo.
+ (mkTabbedPane): Removed.
+ (Demo): Replaced 'worlds' tabbed pane with desktop.
+ (PopupAction): Made class non-static.
+ (PopupAction.actionPerformed): Bring up subdemos in internal
+ frame.
+ (mkButtonBar): Added new demos.
+ (createDesktop): New method.
+ * examples/gnu/classpath/examples/swing/DemoDesktop.java: New class.
+ * examples/gnu/classpath/examples/swing/ListDemo.java: New demo.
+ * examples/gnu/classpath/examples/swing/TreeDemo.java: New demo.
+ * examples/gnu/classpath/examples/swing/TabbedPaneDemo.java: New demo.
+ * examples/gnu/classpath/examples/swing/badge.png: New image file.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Container.java
+ (getComponentAt): Fixed mistake in comments.
+ (getComponentAt): Likewise.
+ (locate): Likewise. Also, handled lightweight components.
+ Heavyweights take precedence over lightweights, so we should
+ iterate through the heavyweights first.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Container.java
+ (getComponentAt): Added API documentation.
+ (getComponentAt): Likewise.
+ (locate): Likewise. Also, removed lines to ignore
+ invisible components.
+ (findComponentAt): Added API documentation.
+ (findComponentAt): Added API documentation.
+ (findComponentForMouseEvent): Removed, never used.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/Popup.java
+ (LightweightPopup.show): Repaint the panel after showing it.
+
+2006-03-15 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Component.java
+ (show): repaint should only be called if the component
+ isShowing and isLightweight.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JInternalFrame.java
+ (setClosable): Made this property bound.
+ (setResizable): Made this property bound.
+ (setIconifiable): Made this property bound.
+ (setMaximizable): Made this property bound.
+
+2006-03-15 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java
+ (sizeWidthToFit): Implemented.
+
+2006-03-15 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java: API docs updated all over, plus
+ (setIdentifier): Fire required PropertyChangeEvent,
+ (setCellEditor): Likewise.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * examples/gnu/classpath/examples/swing/ButtonDemo.java,
+ * examples/gnu/classpath/examples/swing/ComboBoxDemo.java,
+ * examples/gnu/classpath/examples/swing/FileChooserDemo.java,
+ * examples/gnu/classpath/examples/swing/ProgressBarDemo.java,
+ * examples/gnu/classpath/examples/swing/ScrollBarDemo.java,
+ * examples/gnu/classpath/examples/swing/SliderDemo.java,
+ * examples/gnu/classpath/examples/swing/SpinnerDemo.java,
+ * examples/gnu/classpath/examples/swing/TableDemo.java,
+ * examples/gnu/classpath/examples/swing/TextAreaDemo.java,
+ * examples/gnu/classpath/examples/swing/TextFieldDemo.java:
+ Reworked to implemented DemoFactory and lazy loading of Sub-demos.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ Cleaned up. Reworked handling of Sub-demos to load lazily.
+ * examples/gnu/classpath/examples/swing/DemoFactory.java:
+ New interface. Used for loading the subdemos lazily.
+
+2006-03-15 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicToolBarUI.java
+ (PropertyListener.propertyChange): Added null check to avoid NPE.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java
+ (COLUMN_WIDTH_PROPERTY): Updated API docs,
+ (width): Likewise.
+ (minWidth): Likewise,
+ (preferredWidth): Likewise,
+ (maxWidth): Likewise,
+ (headerRenderer): Likewise,
+ (cellRenderer): Likewise,
+ (cellEditor): Likewise,
+ (changeSupport): Likewise,
+ (firePropertyChange(String, Object, Object)): Removed,
+ (firePropertyChange(String, int. int)): Likewise,
+ (firePropertyChange(String, boolean, boolean)): Likewise,
+ (setModelIndex): Fire property change,
+ (setHeaderValue): Call changeSupport directly to generate event,
+ (setHeaderRenderer): Likewise,
+ (setCellRenderer): Likewise,
+ (setWidth): Likewise,
+ (setPreferredWidth): Likewise,
+ (setMinWidth): Likewise,
+ (setMaxWidth): Likewise,
+ (createDefaultHeaderRenderer): Added API docs.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * examples/gnu/classpath/examples/swing/Demo.java
+ Removed static initializer.
+ (mkMenuBar): Made method non-static. Added themes menu.
+ (ChangeThemeAction): New inner class, used to change themes.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java
+ (setMaxWidth): Updated width and preferredWidth if necessary,
+ (getMaxWidth): Updated API docs.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicSliderUI.java
+ (TrackListener.mouseDragged): Only process event when slider is
+ enabled.
+ (TrackListener.mouseReleased): Only process event when slider is
+ enabled.
+ (TrackListener.mousePressed): Only process event when slider is
+ enabled.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * NEWS: Added note about OceanTheme support.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalIconFactory.java
+ (HorizontalSliderThumbIcon.gradientMask): New field
+ (HorizontalSliderThumbIcon.paintIcon): Added support for the
+ OceanTheme.
+ (VerticalSliderThumbIcon.gradientMask): New field
+ (VerticalSliderThumbIcon.paintIcon): Added support for the
+ OceanTheme.
+ * javax/swing/plaf/metal/MetalUtils.java
+ (paintHorizontalGradient): Fixed painting of 'masked' gradients.
+ (paintVerticalGradient): Fixed painting of 'masked' gradients.
+
+2006-03-14 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26641
+ * java/awt/LightweightDispatcher.java (dispatchEvent): Return result
+ of handleMouseEvent.
+ (handleMouseEvent): Return boolean to indicate whether we handled the
+ event by passing it to a lightweight.
+
+2006-03-14 Wolfgang Baer <WBaer@gmx.de>
+
+ * org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java,
+ * org/omg/PortableServer/ServantActivatorPOA.java,
+ * org/omg/PortableServer/ServantLocatorPOA.java:
+ Make class abstract and minor api docs fixlets.
+ * org/omg/PortableServer/ForwardRequest.java,
+ * org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java,
+ * org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java,
+ * org/omg/PortableServer/POAPackage/AdapterNonExistent.java,
+ * org/omg/PortableServer/POAPackage/InvalidPolicy.java,
+ * org/omg/PortableServer/POAPackage/NoServant.java,
+ * org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java,
+ * org/omg/PortableServer/POAPackage/ObjectNotActive.java,
+ * org/omg/PortableServer/POAPackage/ServantAlreadyActive.java,
+ * org/omg/PortableServer/POAPackage/ServantNotActive.java,
+ * org/omg/PortableServer/POAPackage/WrongAdapter.java,
+ * org/omg/PortableServer/POAPackage/WrongPolicy.java,
+ * org/omg/PortableServer/POAManagerPackage/AdapterInactive.java,
+ * org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java,
+ * org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java,
+ * org/omg/PortableServer/CurrentPackage/NoContext.java: Make class final.
+
+2006-03-14 Wolfgang Baer <WBaer@gmx.de>
+
+ * NEWS: Added entry about printing support.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java
+ (COLUMN_WIDTH_PROPERTY): Updated API docs,
+ (isResizable): Likewise,
+ (setWidth): Likewise,
+ (getWidth): Likewise,
+ (setPreferredWidth): Likewise,
+ (getPreferredWidth): Likewise,
+ (setMinWidth): Check for negative argument and update width and
+ preferredWidth if necessary,
+ (getMinWidth): Updated API docs.
+
+2006-03-14 Lillian Angel <langel@redhat.com>
+
+ * java/awt/Container.java
+ (addImpl): Removed call to repaint. No need to repaint here.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalSliderUI.java
+ (paintTrack): Added OceanTheme support.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/table/TableColumn.java
+ (setResizable): Fire PropertyChangeEvent if the flag value changes,
+ (isResizable): Updated API docs.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/LookAndFeel.java: Updated API docs.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalUtils.java
+ (paintGradient): Added support for 'masked' gradients.
+ (paintHorizontalGradient): Likewise.
+ (paintVerticalGradient): Likewise.
+ * javax/swing/plaf/metal/MetalIconFactory.java
+ (RadioButtonIcon.gradientMask): New field.
+ (RadioButtonIcon.paintIcon): Added mask for gradient painting.
+
+2006-03-14 Mark Wielaard <mark@klomp.org>
+
+ Fixes bug #26645.
+ * javax/swing/plaf/basic/BasicComboBoxEditor.java (listener):
+ New field.
+ (removeActionListener): Add listener to ComboBoxEditorListener.
+ (removeActionListener): Remove listener from ComboBoxEditorListener.
+ (ComboBoxEditorListener): New static helper class.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalBorders.java
+ (getToolBarButtonBorder): Don't create a UIResource border
+ here.
+ * javax/swing/plaf/metal/MetalToolBarUI.java
+ (installUI): New overridden method. Installs the rollover property.
+ (uninstallUI): New overridden method. Resets the rollover property.
+ * javax/swing/plaf/metal/MetalUtils.java
+ (paintGradient): Fetch Float values from the UIManager. Adjusted
+ method signatures accordingly.
+ (paintHorizontalGradient): Adjusted signature to accept float
+ instead of double.
+ (paintVerticalGradient): Adjusted signature to accept float
+ instead of double.
+ * javax/swing/plaf/metal/OceanTheme.java
+ (addCustomEntriesToTable): Added missing UIDefaults entries,
+ except of Icons. Fixed gradient entries to use Float instead
+ of Double.
+
+2006-03-14 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JInternalFrame.java
+ (JInternalFrame): Make JInternalFrame opaque.
+ * javax/swing/JToolBarFrame.java
+ (JToolBar): Make JToolBar opaque.
+
+2006-03-14 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/TreeNode.java: Fixed bad API doc tags,
+ * javax/swing/tree/TreePath.java: Likewise.
+
+2006-03-13 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+ (executeMethods): Output number of methods.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/basic/BasicButtonUI.java
+ (uninstallDefaults): Only uninstall border if it's a UIResource.
+ * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+ (SystemMenuBar.isFocusTraversable): Fixed typo in signature.
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java
+ (installUI): Don't touch the opaque flag of the glassPane and
+ the frame. Don't invalidate.
+ * javax/swing/plaf/basic/BasicInternalFrameUI.java
+ (installUI): Don't touch the opaque flag of the glassPane.
+ * javax/swing/plaf/basic/BasicMenuBarUI.java
+ (properyChangeListener): Made field private.
+ (ChangeHandler): Made class private.
+ (ContainerHandler): Made class private.
+ (PropertyChangeHandler): Made class private.
+ * javax/swing/plaf/basic/BasicMenuUI.java
+ (MenuHandler): Made class private.
+ (PropertyChangeHandler): Removed unneeded class.
+ (MenuDragMouseHandler): Made class private.
+ (MenuKeyHandler): Made class private.
+ * javax/swing/plaf/basic/BasicPanelUI.java
+ (installDefaults): Made method protected. Don't set opaque
+ flag.
+ * javax/swing/plaf/basic/BasicScrollBarUI.java
+ (TrackListener.shouldScroll): Made method private.
+ * javax/swing/plaf/basic/BasicSplitPaneUI.java
+ (BasicHorizontalLayoutManager.BasicHorizontalLayoutManager):
+ Made constructor package private.
+ * javax/swing/plaf/basic/BasicTableHeaderUI.java
+ (cellBorder): Made field private.
+ * javax/swing/plaf/basic/BasicTextUI.java
+ (installDefaults): Don't make component opaque.
+ * javax/swing/plaf/basic/BasicToolBarUI.java
+ (createNonRollOverBorder): Don't create UIResource border.
+ (createRollOverBorder): Don't create UIResource border.
+ (installComponents): Moved setRolloverBorders call here.
+ (installDefaults): Moved setRolloverBorders call from here.
+ (installUI): Don't make toolbar opaque.
+ (setBorderToNonRollover): Handle AbstractButton instead of
+ JButton here.
+ (uninstallComponents): Don't nullify class fields here.
+
+2006-03-13 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/SwingUtilities.java
+ (calculateInnerArea): handle null component, and replace
+ getLocalBounds() with getBounds(Rectangle) to avoid unnecessary object
+ creation.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JColorChooser.java
+ (updateUI): Don't call revalidate().
+ * javax/swing/JComboBox.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JDesktopPane.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JFileChooser.java
+ (updateUI): Don't call revalidate().
+ * javax/swing/JMenu.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JMenuBar.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JMenuItem.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JOptionPane.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JPopupMenu.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JProgressBar.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JScrollBar.java
+ (updateUI): Don't call invalidate() and repaint().
+ * javax/swing/JScrollPane.java
+ (updateUI): Rewritten to be like the other updateUI()
+ methods.
+ * javax/swing/JSlider.java
+ (updateUI): Don't call invalidate() and repaint().
+ * javax/swing/JSplitPane.java
+ (updateUI): Don't call invalidate() and repaint().
+ * javax/swing/JTabbedPane.java
+ (updateUI): Don't call invalidate().
+ * javax/swing/JTable.java
+ (updateUI): Don't call revalidate() and repaint().
+ * javax/swing/JToolBar.java
+ (updateUI): Don't call revalidate() and repaint().
+ * javax/swing/JToolTip.java
+ (updateUI): Don't call revalidate() and repaint().
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/SwingUtilities.java
+ (updateComponentTreeUI): Rewritten to be more robust. Handling of
+ menus and non-Swing components is improved.
+ (updateComponentTreeUIImpl): New helper method.
+ (replaceUIActionMap): Added check for uiActionMap==parent to
+ avoid loop.
+ (replaceUIInputMap): Added check for uiInputMap==parent to
+ avoid loop.
+
+2006-03-13 Wolfgang Baer <WBaer@gmx.de>
+
+ * gnu/classpath/debug/Component.java:
+ (IPP) New component for IPP debugging.
+ (EVERYTHING): Adapted to include IPP.
+ * javax/print/PrintServiceLookup.java:
+ (registerServiceProvider): New method.
+ (registerService): Likewise.
+ (lookupPrintServices): Likewise.
+ (lookupMultiDocPrintServices): Likewise.
+ (lookupDefaultPrintService): Likewise.
+ (static_initializer): Likewise.
+ (printServiceLookups): New field for found service providers.
+ (printServices): New field for application registered providers.
+ (systemProvider): New field for the system provider.
+ * javax/print/ServiceUI.java: New file.
+ * javax/print/package.html: Added more usage content.
+ * javax/print/event/package.html: Likewise.
+ * javax/print/attribute/package.html: Likewise.
+ * javax/print/attribute/standard/package.html: Likewise.
+ * gnu/javax/print/PrintUriException.java,
+ gnu/javax/print/PrintFlavorException.java,
+ gnu/javax/print/PrinterDialog.java,
+ gnu/javax/print/PrintAttributeException.java,
+ gnu/javax/print/CupsPrintServiceLookup.java,
+ gnu/javax/print/CupsServer.java,
+ gnu/javax/print/CupsPrintService.java,
+ gnu/javax/print/CupsMediaMapping.java,
+ gnu/javax/print/CupsIppOperation.java:
+ New implementation files of the Java Print Service API.
+ * gnu/javax/print/ipp/IppValueTag.java,
+ gnu/javax/print/ipp/MultiDocPrintJobImpl.java,
+ gnu/javax/print/ipp/IppStatusCode.java,
+ gnu/javax/print/ipp/IppUtilities.java,
+ gnu/javax/print/ipp/IppResponse.java,
+ gnu/javax/print/ipp/IppException.java,
+ gnu/javax/print/ipp/IppPrintService.java,
+ gnu/javax/print/ipp/IppRequest.java,
+ gnu/javax/print/ipp/IppMultiDocPrintService.java,
+ gnu/javax/print/ipp/IppDelimiterTag.java,
+ gnu/javax/print/ipp/DocPrintJobImpl.java:
+ New files of the IPP client implementation.
+ * gnu/javax/print/ipp/attribute/UnknownAttribute.java,
+ gnu/javax/print/ipp/attribute/StatusMessage.java,
+ gnu/javax/print/ipp/attribute/RequestedAttributes.java,
+ gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java,
+ gnu/javax/print/ipp/attribute/DocumentAccessError.java,
+ gnu/javax/print/ipp/attribute/DetailedStatusMessage.java,
+ gnu/javax/print/ipp/attribute/DefaultValueAttribute.java,
+ gnu/javax/print/ipp/attribute/CharsetSyntax.java:
+ New attribute syntax/role files of the printing implementation.
+ * gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java,
+ gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java,
+ gnu/javax/print/ipp/attribute/supported/SidesSupported.java,
+ gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java,
+ gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java,
+ gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java,
+ gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java,
+ gnu/javax/print/ipp/attribute/supported/
+ OrientationRequestedSupported.java,
+ gnu/javax/print/ipp/attribute/supported/OperationsSupported.java,
+ gnu/javax/print/ipp/attribute/supported/
+ MultipleDocumentHandlingSupported.java,
+ gnu/javax/print/ipp/attribute/supported/
+ MultipleDocumentJobsSupported.java,
+ gnu/javax/print/ipp/attribute/supported/MediaSupported.java,
+ gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java,
+ gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java,
+ gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java,
+ gnu/javax/print/ipp/attribute/supported/
+ GeneratedNaturalLanguageSupported.java,
+ gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java,
+ gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java,
+ gnu/javax/print/ipp/attribute/supported/CompressionSupported.java,
+ gnu/javax/print/ipp/attribute/supported/CharsetSupported.java:
+ New supported attribute files.
+ * gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java,
+ gnu/javax/print/ipp/attribute/printer/DocumentFormat.java,
+ gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java,
+ gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java,
+ gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java,
+ gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java,
+ gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java,
+ gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java:
+ New printer description attribute files.
+ * gnu/javax/print/ipp/attribute/job/AttributesCharset.java,
+ gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java,
+ gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java,
+ gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java,
+ gnu/javax/print/ipp/attribute/job/JobPrinterUri.java,
+ gnu/javax/print/ipp/attribute/job/JobId.java,
+ gnu/javax/print/ipp/attribute/job/JobMoreInfo.java,
+ gnu/javax/print/ipp/attribute/job/JobUri.java,
+ gnu/javax/print/ipp/attribute/job/JobStateMessage.java:
+ New job description attribute files.
+ * gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/MediaDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/
+ MultipleDocumentHandlingDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java,
+ gnu/javax/print/ipp/attribute/defaults/SidesDefault.java:
+ New default printing attribute files.
+ * resource/gnu/javax/print/PrinterDialog.properties: New file.
+ * resource/gnu/javax/print/PrinterDialog_de.properties: Likewise.
+ * examples/gnu/classpath/examples/print/Demo.java:
+ New demo application of the current implemented functionality.
+
+2006-03-13 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/activation/ActivationGroupDesc.java: Implemented.
+ java/rmi/activation/ActivationDesc.java.java,
+ java/rmi/activation/ActivationGroup.java,
+ java/rmi/activation/ActivationID.java,
+ java/rmi/activation/ActivationMonitor.java,
+ java/rmi/activation/ActivationSystem.java,
+ java/rmi/activation/package.html: Documenting.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/JInternalFrame.java
+ (setSelected): Repaint frame when it is showing and the selection
+ state changes.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/AbstractButton.java
+ (AbstractAccessibleButton.getAccessibleRelationSet): Return super....()
+ instead of null.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/accessibility/AccessibleContext.java
+ (getAccessibleRelationSet): Return empty set instead of null.
+
+2006-03-13 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/ImageIcon.java
+ (loadImage): Remove completed images from the MediaTracker. This
+ avoids a potential memory leak.
+
+2006-03-12 Wolfgang Baer <WBaer@gmx.de>
+
+ * javax/print/MultiDocPrintService.java,
+ * javax/print/MultiDocPrintJob.java,
+ * javax/print/MultiDoc.java: Added and enhanced documentation.
+
+2006-03-12 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/activation/ActivationID.java (uid): New field.
+ (writeExternal, readExternal): New methods.
+ (equals, hashCode): Rewritten.
+ * java/rmi/activation/ActivationInstantiator.java,
+ * java/rmi/activation/ActivationSystem.java,
+ * java/rmi/activation/Activator.java,
+ * java/rmi/activation/Activatable.java,
+ * java/rmi/activation/ActivationGroup.java,
+ * java/rmi/activation/ActivationGroupDesc.java:
+ Documented and autoformatted.
+ * java/rmi/activation/package.html: Added content.
+
+2006-03-12 Chris Burdess <dog@gnu.org>
+
+ Fixes PR 26652
+ * gnu/xml/stream/XMLParser.java: Fix for case when both reader and
+ encoding are specified.
+
+2006-03-11 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/DefaultSingleSelectionModel.java: API docs all over, plus
+ (changeEvent): Initialise in fireStateChange(),
+ (setSelectedIndex): Check if change is made before firing event,
+ (clearSelection): Delegate to setSelectedIndex(),
+ (fireStateChanged): Initialise changeEvent if necessary,
+ * javax/swing/SingleSelectionModel.java: API docs all over.
+
+2006-03-11 Tom Tromey <tromey@redhat.com>
+
+ * java/util/zip/InflaterInputStream.java: Reverted previous
+ patch.
+
+2006-03-11 Mark Wielaard <mark@klomp.org>
+
+ * java/text/AttributedCharacterIterator.java (Attribute.readResolve):
+ Compare name.
+
+2006-03-11 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/event/TreeSelectionEvent.java
+ (isAddedPath(TreePath)): Throw IllegalArgumentException if path is
+ not one of the added/removed paths,
+ (cloneWithSource): Reformatted.
+
+2006-03-11 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/TreeCellEditor.java: Added API docs,
+ * javax/swing/tree/TreeCellRenderer.java: Likewise.
+
+2006-03-10 Casey Marshall <csm@gnu.org>
+
+ Fixes PR 23768.
+ * javax/crypto/Cipher.java (doFinal, doFinal, doFinal): don't
+ reset `state.'
+ (doFinal, update): new methods.
+ (init, init, init, init): initialize `state' after trying the
+ implementation, which can throw an exception.
+ * javax/crypto/CipherSpi.java (engineDoFinal, engineUpdate): new
+ methods.
+
+2006-03-11 Ito Kazumitsu <kaz@maczuka.gcd.org>
+
+ * gnu/regexp/BacktrackStack.java: New file.
+ * gnu/regexp/RE.java(findMatch): New method.
+ * gnu/regexp/REMatch.java(next,matchFlags,MF_FIND_ALL,
+ REMatchList): Removed. (backtrackStack): New field.
+ * gnu/regexp/REToken.java(match): Changed from an abstract
+ method to an ordinary method defined with the new method
+ matchThis. (matchThis, getNext, findMatch, returnsFixedLengthMatches,
+ findFixedLengthMatches, backtrack, toString): New methods.
+ * gnu/regexp/RETokenAny.java: Inplemented new methods of REToken.
+ * gnu/regexp/RETokenBackRef.java: Likewise.
+ * gnu/regexp/RETokenChar.java: Likewise.
+ * gnu/regexp/RETokenEnd.java: Likewise.
+ * gnu/regexp/RETokenEndSub.java: Likewise.
+ * gnu/regexp/RETokenIndependent.java: Likewise.
+ * gnu/regexp/RETokenLookAhead.java: Likewise.
+ * gnu/regexp/RETokenLookBehind.java: Likewise.
+ * gnu/regexp/RETokenNamedProperty.java: Likewise.
+ * gnu/regexp/RETokenPOSIX.java: Likewise.
+ * gnu/regexp/RETokenRange.java: Likewise.
+ * gnu/regexp/RETokenStart.java: Likewise.
+ * gnu/regexp/RETokenWordBoundary.java: Likewise
+ * gnu/regexp/RETokenOneOf.java: Rewriten.
+ * gnu/regexp/RETokenRepeated.java: Rewriten.
+
+2006-03-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalBorders.java
+ (RolloverButtonBorder.paintBorder): Only call super here.
+ * javax/swing/plaf/metal/MetalButtonListener.java
+ (propertyChange): Only call super here.
+ * javax/swing/plaf/metal/MetalButtonUI.java
+ (update): Changed condition from isOpaque() to isContentAreaFilled()
+ for the gradient fill.
+ * javax/swing/plaf/metal/MetalToggleButtonUI.java
+ (paintText): API doc fix. Makes paintText not deprecated as specified
+ but adds comment that this is obsolete.
+ * javax/swing/plaf/metal/MetalUtils.java
+ (fillMetalPattern): Fixed condition so that the Java2D is not
+ used when the noGraphics2D property is set.
+
+2006-03-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/MetalLookAndFeel.java
+ (createDefaultTheme): Set OceanTheme as default metal theme.
+
+2006-03-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/WrappedPlainView.java
+ (metrics): Made field package private to avoid accessor method.
+ (WrappedLine.paint): Call drawLine with y offset of the font ascent.
+ The drawLine (righly) interprets the y parameter as the baseline.
+ * javax/swing/text/Utilities.java
+ (getBreakLocation): Don't consider the offset. The returned value
+ for getTabbedTextOffset is already relative to the offset.
+
+2006-03-10 Wolfgang Baer <WBaer@gmx.de>
+
+ * gnu/java/net/protocol/http/Headers.java: Added documentation all over.
+ (dateFormat): Made private.
+ (put): Replace only the last occurance and the value.
+ (putAll): Save one iteration. Clarified documentation.
+
+2006-03-10 Tom Tromey <tromey@redhat.com>
+
+ * java/util/zip/InflaterInputStream.java (read): Replace with libgcj
+ implementation.
+ * java/util/zip/GZIPInputStream.java (readHeader): Use DEFLATED,
+ not '8'.
+
+2006-03-10 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
+ (comboboxgroup_get_widget): New function.
+ (removed): Fixed to use new function to get the correct widget.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ (nativeSetCheckboxGroup): Reverted last patch to use get_widget
+ function.
+
+2006-03-10 Lillian Angel <langel@redhat.com>
+
+ * java/awt/GridBagLayout.java
+ (ArrangeGrid): Added checks to determine if component
+ is placed last in a row or column. If so, the location
+ of the last component should be used to get the location
+ of the current component.
+
+2006-03-10 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ (nativeSetCheckboxGroup): No need to use new function here.
+ Should just pass in pointer.
+
+2006-03-10 Lillian Angel <langel@redhat.com>
+
+ * java/awt/GridBagLayout.java
+ (distributeSizeAndWeight): Change else if to else. This
+ allows for components to be added to a new row when
+ their gridheight is REMAINDER.
+
+2006-03-10 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/activation/ActivationDesc.java,
+ java/rmi/activation/ActivationGroupID.java,
+ java/rmi/activation/Activator.java,
+ java/rmi/server/Operation.java,
+ java/rmi/server/RemoteServer.java: Documented and formatted.
+
+2006-03-10 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/JToggleButton.java: Fixed API doc tags,
+ * javax/swing/OverlayLayout.java: Likewise.
+
+2006-03-10 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/DefaultCellEditor.java
+ (cancelCellEditing): Removed spurious API doc tag.
+
+2006-03-10 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+ (create): Put checkbox widget into an event box so it paints properly.
+ (connectSignals): Fixed to use new function.
+ (nativeSetCheckboxGroup): Likewise.
+ (gtkToggleButtonSetActive): Likewise.
+ (gtkWidgetModifyFont): Likewise.
+ (gtkButtonSetLabel): Likewise.
+ (combobox_get_widget): New function.
+
+2006-03-10 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/text/rtf/package.html: New file.
+
+2006-03-10 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/plaf/metal/OceanTheme.java
+ (addCustomEntriesToTable): Fixed ScrollBar.gradient value.
+ * javax/swing/plaf/metal/MetalScrollBarUI.java
+ (paintThumb): Only draw Metal pattern if theme is not OceanTheme.
+ (paintThumbHorizontal): Added handling of OceanTheme.
+ (paintThumbVertical): Added handling of OceanTheme.
+
+2006-03-10 Roman Kennke <kennke@aicas.com>
+
+ Reported by Fridjof Siebert <siebert@aicas.com>
+ * java/awt/MediaTracker.java
+ (removeImage): Only set prev to e when the the images of the
+ entries are not the same. This avoids a potentially corrupt list.
+
+2006-03-10 Chris Burdess <dog@gnu.org>
+
+ PR 26620:
+ * gnu/xml/transform/TransformerImpl.java: Suspend wellformedness
+ checking while reindenting.
+
+2006-03-10 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * javax/imageio/plugins/jpeg/JPEGHuffmanTable.java: New file.
+
+2006-03-09 Tom Tromey <tromey@redhat.com>
+
+ PR classpath/26585:
+ * tools/Makefile.am (TOOLSdir): Don't put tools.zip in tools
+ subdir. Added README.
+ (install-data-local): Removed.
+ (uninstall-local): Likewise.
+ (EXTRA_DIST): Removed.
+
+2006-03-09 Tom Tromey <tromey@redhat.com>
+
+ PR classpath/26623:
+ * native/jni/qt-peer/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/midi-alsa/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/java-net/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/java-lang/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/xmlj/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/gtk-peer/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/midi-dssi/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/java-io/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/java-nio/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jni/java-util/Makefile.am (nativeexeclib_LTLIBRARIES):
+ Renamed.
+ * native/jawt/Makefile.am (nativeexeclib_LTLIBRARIES): Renamed.
+ * configure.ac (nativeexeclibdir): Renamed from nativelibdir.
+
+2006-03-09 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/processor/MethodCommandSet.java
+ (executeVariableTable): Use VMMethod instead of reflection.
+ (executeLineTable): Likewise.
+ * gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+ (executeMethods): Rewrite to use new VMVirtualMachine.getAllClassMethods.
+ * vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
+ (getLineTable): Removed. Now resides in VMMethod.
+ (getVarTable): Likewise.
+ (getAllClassMethods): New method.
+
+2006-03-09 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/event/EventManager.java: Update javadoc.
+ * gnu/classpath/jdwp/event/ThreadStartEvent.java
+ (ThreadStartEvent): Likewise.
+ * gnu/classpath/jdwp/event/VmDeathEvent.java (VmDeathEvent): Likewise.
+ * gnu/classpath/jdwp/event/filters/ConditionalFilter.java
+ (ConditionalFilter): Likewise.
+ * gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java
+ (ExceptionOnlyFilter): Likewise.
+ * gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java
+ (FieldOnlyFilter): Likewise.
+ * gnu/classpath/jdwp/event/filters/StepFilter.java (getDepth): Likewise.
+ (getSize): Likewise.
+ (StepFilter): Likewise.
+ * gnu/classpath/jdwp/id/JdwpId.java: Likewise (for _tag).
+ * gnu/classpath/jdwp/transport/JdwpPacket.java
+ (JdwpPacket): Likewise.
+ (fromBytes): Likewise.
+ * gnu/classpath/jdwp/transport/JdwpReplyPacket.java
+ (JdwpReplyPacket): Likewise.
+ * gnu/classpath/jdwp/util/Value.java (getUntaggedObj): Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMIdManager.java
+ (getReferenceType): Likewise.
+ (newObjectId): Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMMethod.java (readId): Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
+ (getFrames): Fix typo in parameter name and update javadoc.
+ (getClassMethod): Update javadoc.
+
+2006-03-09 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/event/TreeSelectionEvent.java: Updated API docs,
+ * javax/swing/event/TreeSelectionListener.java: Likewise.
+
+2006-03-09 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ (getHScrollbarHeight): Fixed property name.
+ (getVScrollbarHeight): Likewise.
+
+2006-03-09 Lillian Angel <langel@redhat.com>
+
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+ (get_widget): New function.
+ (gtkWidgetSetParent): Changed to use new function.
+ (gtkWidgetSetCursorUnlocked): Likewise.
+ (gtkWidgetSetSensitive): Likewise.
+ (gtkWidgetRequestFocus): Likewise.
+ (gtkWindowGetLocationOnScreen): Likewise.
+ (gtkWidgetGetDimensions): Likewise.
+ (gtkWidgetGetPreferredDimensions): Likewise.
+ (setNativeBounds): Likewise.
+ (gtkWidgetGetBackground): Likewise.
+ (gtkWidgetGetForeground): Likewise.
+ (gtkWidgetSetBackground): Likewise.
+ (gtkWidgetSetForeground): Likewise.
+ (setVisibleNativeUnlocked): Likewise.
+ (isEnabled): Likewise.
+ (isRealized): Likewise.
+ (setNativeEventMask): Likewise.
+
+2006-03-09 Lillian Angel <langel@redhat.com>
+
+ PR Classpath\22163
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+ (create): Added combobox widget to an event box.
+ (connectSignals): Added call to choice_get_widget to get the
+ combobox out of the event box.
+ (append): Likewise.
+ (nativeRemoveAll): Likewise.
+ (nativeRemove): Likwise.
+ (nativeAdd): Likewise.
+ (selectNative): Likewise.
+ (choice_get_widget): New function.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+ (create): Added list scroll window widget to an event box.
+ (connectSignals): Changed call to use new function to get the
+ correct widget out of the event box.
+ (getWidgetModifyFont): Likewise.
+ (getWidgetRequestFocus): Likewise.
+ (append): Likewise.
+ (add): Likewise.
+ (delItems): Likewise.
+ (select): Likewise.
+ (deselect): Likewise.
+ (getSize): Likewise.
+ (getSelectedIndexes): Likewise.
+ (makeVisible): Likewise.
+ (setMultipleMode): Likewise.
+ (list_get_widget): New function.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+ (create): Added scrollpane to an eventbox.
+ (setScrollPosition): Changed call to use new function to get the
+ correct widget out of the event box.
+ (gtkScrolledWindowSetHScrollIncrement): Likewise.
+ (gtkScrolledWindowSetVScrollIncrement): Likewise.
+ (getHScrollbarHeight): Likewise.
+ (getVScrollbarWidth): Likewise.
+ (setPolicy): Likewise.
+ (scrollpane_get_widget): New function.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
+ (connectSignals): Changed call to use new function to get the
+ correct widget out of the event box.
+ (create): Added scrollbar to an eventbox.
+ (setLineIncrement): Changed call to use new function to get the
+ correct widget out of the event box.
+ (setPageIncrement): Likewise.
+ (setBarValues): Likewise.
+ (scrollbar_get_widget): New function.
+ * native/jni/gtk-peer/gnu_java_gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+ (create): Added text area scroll window widget to an event box.
+ (connectSignals): Changed call to use new function to get the
+ correct widget out of the event box.
+ (insert): Likewise.
+ (replaceRange): Likewise.
+ (gtkWidgetModifyFont): Likewise.
+ (gtkWidgetRequestFocus): Likewise.
+ (getHScrollbarHeight): Likewise.
+ (getVScrollbarWidth): Likewise.
+ (getCaretPosition): Likewise.
+ (setCaretPosition):Likewise.
+ (getSelectionStart): Likewise.
+ (getSelectionEnd): Likewise.
+ (select): Likewise.
+ (setEditable): Likewise.
+ (getText): Likewise.
+ (setText): Likewise.
+ (textarea_get_widget): New function.
+
+2006-03-09 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/dgc/VMID.java:
+ (equals, hashCode, static initializer): Rewritten.
+ * java/rmi/dgc/package.html: Documented.
+
+2006-03-09 Mark Wielaard <mark@klomp.org>
+
+ * gnu/java/awt/peer/gtk/GtkClipboard.java (clipboard, selection):
+ New static field.
+ (stringMimeType, imageMimeType, filesMimeType): Initialize directly.
+ (canCache): Likewise.
+ (GtkClipboard): Take String argument.
+ (getInstance): Removed.
+ (getClipboardInstance, getSelectionInstance): New static methods.
+ (setSystemContents): Make synchronized. Takes boolean argument.
+ (initNativeState): Add clipboard and selection.
+ * gnu/java/awt/peer/gtk/GtkClipboardNotifier.java
+ (announceClipboardChange, announcePrimaryChange): New static field.
+ (announce): Take GtkClipboard as argument.
+ (run): Check which clipboard to announce change for.
+ * gnu/java/awt/peer/gtk/GtkSelection.java (clipboard): New final
+ boolean field.
+ (GtkSelection): Take GtkClipboard as argument.
+ (requestText, requestImage, requestURIs, requestBytes): Add boolean
+ clipboard argument.
+ (requestMimeTypes): Likewise.
+ * gnu/java/awt/peer/gtk/GtkToolkit.java (getSystemSelection):
+ New method.
+ * java/awt/Toolkit.java (getSystemSelection): Document.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+ (cp_gtk_selection_instance): New var.
+ (current_selection, owner): Removed.
+ (clipboard_owner_change_cb): Use clipboard argument.
+ (initNativeState): Store clipboard and selection instances. Cache
+ setSystemContentsID, provideContentID, provideTextID, provideImageID,
+ and provideURIsID.
+ (clipboard_get_func): Use clipboard argument.
+ (clipboard_clear_func): Likewise. Always call method.
+ (advertiseContent): Don't cache method ids here. Check whether to
+ use clpboard or selection. Don't set owner or current_selection.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
+ (requestText, requestImage, requestURIs, requestBytes): Use extra
+ boolean argument to select clipboard.
+ * native/jni/gtk-peer/gtkpeer.h (cp_gtk_selection): New extern.
+ (cp_gtk_clipboard_instance, cp_gtk_selection_instance): Likewise.
+ * include/gnu_java_awt_peer_gtk_GtkClipboard.h: Regenerate.
+ * include/gnu_java_awt_peer_gtk_GtkSelection.h: Likewise.
+
+2006-03-09 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/Jdwp.java: Remove unused imports.
+ * gnu/classpath/jdwp/event/EventRequest.java: Likewise.
+ * gnu/classpath/jdwp/event/filters/ClassMatchFilter.java: Likewise.
+ * gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java: Likewise.
+ * gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java: Likewise.
+ * gnu/classpath/jdwp/transport/ITransport.java: Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMIdManager.java: Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMMethod.java: Likewise.
+ * vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java: Likewise.
+
+2006-03-09 Mark Wielaard <mark@klomp.org>
+
+ * javax/swing/JList.java (ensureIndexIsVisible): Check whether cell
+ bounds for index is valid.
+ * javax/swing/plaf/basic/BasicListUI.java (valueChanged): Likewise.
+ (paint): Likewise.
+ (getCellBounds): Update documentation.
+
+2006-03-09 Arnaud Vandyck <avdyk@gnu.org>
+
+ * .classpath: added exclude pattern on source folders
+ (Makefiles, README and .cvsignore)
+
+2006-03-08 Keith Seitz <keiths@redhat.com>
+
+ * vm/reference/gnu/classpath/jdwp/VMMethod.java: New file.
+ * vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
+ (getClassMethod): New method.
+
+2006-03-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/server/UID.java (getMachineId): Include the host IP address.
+
+2006-03-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/server/ObjID.java: Documented and autoformatted.
+
+2006-03-08 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ PR 26584
+ * tools/Makefile.am (install-data-local,
+ uninstall-local): Install/uninstall the tools/README only.
+ * tools/gnu/classpath/tools/giop/README: Updated.
+ * tools/README: New file.
+
+2006-03-08 Lillian Angel <langel@redhat.com>
+
+ * java/awt/GridBagLayout.java
+ (GetLayoutInfo): If the last component added had gridwidth == REMAINDER,
+ then the next item should be set to current_y (not 0).
+
+2006-03-08 Lillian Angel <langel@redhat.com>
+
+ * java/awt/GridBagLayout.java
+ (GetLayoutInfo): If gridy is RELATIVE and there is no component
+ in the bottom-most spot of the column, we need to place that component
+ at the y-location of the other components in that row. If there are
+ no other components in that row, then place it at y = 0.
+
+2006-03-08 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/ProgressMonitor.java: Updated API docs,
+ * javax/swing/ProgressMonitorInputStream.java: Likewise.
+
+2006-03-08 Michael Koch <konqueror@gmx.de>
+
+ * java/net/InetSocketAddress.java
+ (InetSocketAddress(String,int,resolve)): New private contructor.
+ (InetSocketAddress(String,int)): Use new private constructor.
+ (createUnresolved): New method.
+
+2006-03-07 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/server/UID.java (constructor): Assign last and time fields
+ after pause.
+
+2006-03-07 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/System.java (clearProperty): New method, merged from
+ generics branch.
+ (getProperty): Removed 'else'.
+ (getProperty): Check for empty key.
+ (setProperty): Likewise.
+ * gnu/classpath/SystemProperties.java (remove): New method, merged
+ from generics branch.
+
+2006-03-07 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * java/rmi/server/UID.java: New file (replacing).
+
+2006-03-08 Raif S. Naffah <raif@swiftdsl.com.au>
+
+ * java/util/jar/Manifest.java: Removed unused imports.
+ (CRLF): New constant.
+ (read): Added method documentation.
+ Use UTF-8 encoding instead of 8859_1.
+ (write): Added method documentation.
+ Use BufferedOutputStream (w/ 4K buffer) instead of PrintWriter.
+ (write_main_section): Replace PrintWriter arg with OutputStream.
+ Replace JarException with IOException.
+ (write_version_info): Likewise.
+ (write_main_attributes): Likewise.
+ (write_attribute_entry): Likewise.
+ (write_individual_sections): Likewise.
+ (write_entry_attributes): Likewise.
+ (write_header): Replace PrintWriter arg with OutputStream.
+ Re-implemented.
+
+2006-03-07 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/DefaultMutableTreeNode.java
+ (getFirstChild): Updated API docs,
+ (getLastChild): Likewise,
+ (getChildAfter): Likewise,
+ (getChildBefore): Likewise,
+ (isNodeSibling): Return true if node == this,
+ (getSiblingCount): Updated API docs,
+ (getNextSibling): Likewise,
+ (getPreviousSibling): Likewise,
+ (isLeaf): Likewise,
+ (getFirstLeaf): Likewise,
+ (getLastLeaf): Likewise,
+ (getNextLeaf): Implemented,
+ (getPreviousLeaf): Implemented.
+
+2006-03-07 Tom Tromey <tromey@redhat.com>
+
+ * java/awt/image/ColorModel.java (getComponents): Javadoc fix.
+ * java/awt/datatransfer/FlavorEvent.java: Added missing @since.
+ * java/awt/dnd/DropTargetEvent.java (serialVersionUID): New field.
+ * java/awt/DefaultFocusTraversalPolicy.java (serialVersionUID): New
+ field.
+
+2006-03-07 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/DefaultMutableTreeNode.java: API docs all over plus
+ (clone): Reimplemented,
+ (add): Throw IllegalArgumentException if child is an ancestor,
+ (remove(int)): Set child's parent to null,
+ (remove(MutableTreeNode)): Check arguments and set child's parent to
+ null,
+ (insert): Check allowsChildren flag, check for null argument, and
+ check for a node that is an ancestor,
+ (getIndex): Throw IllegalArgumentException for null argument,
+ (setAllowsChildren): If setting to false, remove existing children,
+ (removeAllChildren): Set parent to null for removed children.
+
+2006-03-07 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/tree/TreeNode.java: Reformatted and added API docs all
+ over.
+
+2006-03-06 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/StrictMath.java (ulp): New methods.
+ * java/lang/Math.java (ulp): New methods.
+
+2006-03-07 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/server/UnicastRef.java,
+ gnu/java/rmi/server/UnicastServer.java: Formatted.
+
+2006-03-07 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ * gnu/java/rmi/server/CombinedClassLoader.java (findClass,
+ findLibrary, findResouce, findResources): check all loaders in
+ array.
+
+2006-03-07 Audrius Meskauskas <AudriusA@Bioinformatics.org>
+
+ PR 25526
+ * gnu/java/rmi/dgc/DGCImpl.java (LeaseRecord, leaseCache): Removed.
+ (RefProtector): new inner class. (dirty): Rewritten.
+ * gnu/java/rmi/server/UnicastRef.java (dgcId, dgcInterfaceHash,
+ dgcSequence, DIRTY, this_id): New fields. (equals, hashCode, notifyDGC):
+ new methods. (readExternal): Create LeaseRenewingTask if non local.
+ * gnu/java/rmi/server/UnicastServer.java (objects):
+ Use WeakHashMap. (refcache): Use WeakIdentityHashMap.
+ (getExported): New method.
+ * gnu/java/rmi/dgc/LeaseRenewingTask.java: New file.
+
2006-03-06 Mark Wielaard <mark@klomp.org>
- * configure.ac: Set version to 0.90.
- * NEWS: Fix typos.
+ * doc/www.gnu.org/announce/20060306.wml: New file.
+ * doc/www.gnu.org/newsitems.txt: Add 0.90 release announcement.
+ * doc/www.gnu.org/downloads/downloads.wml: Add 0.90.
+
+2006-03-06 Mark Wielaard <mark@klomp.org>
+
+ * NEWS: Fix typo.
+
+2006-03-06 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/metal/MetalLookAndFeel.java
+ (initComponentDefaults): Use Boolean.TRUE for
+ 'CheckBoxMenuItem.borderPainted'.
+
+2006-03-06 Lillian Angel <langel@redhat.com>
+
+ PR classpath/26569
+ * java/awt/List.java
+ (preferredSize): Return the size of the list if the peer is null.
+ * gnu/java/awt/peer/gtk/GtkListPeer.java
+ (preferredSize): Code was returning the minimum size of the list.
+ Added adjustment to the width of the list so it is a proper size.
+
+2006-03-06 Wolfgang Baer <WBaer@gmx.de>
+
+ * gnu/java/net/protocol/http/HTTPURLConnection.java: Organized imports.
+ (getRequestProperty): Remove duplicated null check.
+ * java/net/URLConnection.java:
+ (URLConnection): Javadoc fix.
+ (addRequestProperty): Likewise.
+ (getDefaultRequestProperty): Likewise.
+ (getHeaderField): Likewise.
+ (getHeaderFieldDate): Likewise.
+ (getHeaderFieldKey): Likewise.
+ (getHeaderFields): Likewise.
+ (getRequestProperties): Likewise.
+ (getRequestProperty): Likewise.
+ (setDefaultRequestProperty): Likewise.
+ (setRequestProperty): Likewise.
+
+2006-03-06 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/plaf/synth/Region.java (FILE_CHOOSER): Renamed.
+ (FORMATTED_TEXT_FIELD): Likewise.
+
+2006-03-06 Tom Tromey <tromey@redhat.com>
+
+ * javax/swing/plaf/synth/SynthPainter.java: Finished.
2006-03-06 Mark Wielaard <mark@klomp.org>
@@ -9,24 +7979,26 @@
* native/fdlibm/fdlibm.h (__ieee754_rem_pio2): Return an int32_t.
(isnan): Define explicitly isnan if it is not a macro.
-2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+2006-03-06 Anthony Balkissoon <abalkiss@redhat.com>
- * javax/swing/text/GapContent.java:
- (insertString): Throw exception when argument is below
- zero.
+ * NEWS: Fixed typo.
2006-03-06 Robert Schuster <robertschuster@fsfe.org>
- * javax/swing/text/PlainDocument.java:
- (insertUpdate): Extended if-expression, added
- code to generate another Element when newly inserted characters
- and old ones will be on the same line.
+ * examples/gnu/classpath/examples/swing/Demo.java:
+ (mkMenuBar): Added menu entry that will display the VM's name,
+ version and distributor.
-2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+2006-03-06 Tom Tromey <tromey@redhat.com>
- * javax/swing/text/DefaultCaret.java:
- (mouseDragged): Do selection when shift is pressed.
- (mouseClicked): Implemented.
+ * javax/swing/plaf/synth/SynthLookAndFeel.java (getDescription):
+ Javadoc fix.
+ (getName): Likewise.
+
+2006-03-06 Mark Wielaard <mark@klomp.org>
+
+ * configure.ac (VERSION): Set to 0.91-pre.
+ * NEWS: Add updates for 0.90 release.
2006-03-06 Robert Schuster <robertschuster@fsfe.org>
@@ -42,9 +8014,107 @@
* native/jni/gtk-peer/Makefile.am (AM_LDFLAGS): Added FREETYPE2.
(AM_CFLAGS): Likewise.
-2006-03-06 Mark Wielaard <mark@klomp.org>
+2006-03-06 David Gilbert <david.gilbert@object-refinery.com>
- * NEWS: Add updates for 0.90 release.
+ * javax/swing/tree/FixedHeightLayoutCache.java: Reformatted and fixed
+ API doc tag warnings,
+ * javax/swing/tree/VariableHeightLayoutCache.java: Likewise.
+
+2006-03-06 Dalibor Topic <robilad@kaffe.org>
+
+ * gnu/java/net/protocol/file/Connection.java (unquote):
+ Update position in buffer after decoding a unicode character
+ outside of the basic plane.
+
+2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/plaf/basic/BasicTextUI.java:
+ (damageRange): Rewritten if-expressions to correctly identify the
+ break condition.
+
+2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/DefaultCaret.java:
+ (mouseDragged): Do selection when shift is pressed.
+ (mouseClicked): Implemented.
+
+2006-03-06 Dalibor Topic <robilad@kaffe.org>
+
+ * libraries/javalib/external/classpath/java/net/URI.java (quote):
+ Pass Unicode characters outside the basic plane through.
+
+2006-03-06 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/PlainDocument.java:
+ (insertUpdate): Extended if-expression, added
+ code to generate another Element when newly inserted characters
+ and old ones will be on the same line.
+
+2006-03-05 Robert Schuster <robertschuster@fsfe.org>
+
+ * javax/swing/text/GapContent.java:
+ (insertString): Throw exception when argument is below
+ zero.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/metal/MetalComboBoxButton.java
+ (MetalComboBoxButton(JComboBox, Icon, boolean, CellRendererPane,
+ JList)): Fixed API doc tag,
+ * javax/swing/plaf/metal/MetalInternalFrameTitlePane
+ (createLayout): Fixed API doc warning.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/DefaultFocusManager.java: Fixed bad API doc tags,
+ * javax/swing/FocusManager.java: Likewise.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/undo/StateEditable.java
+ (restoreState): Fixed bad API doc tag,
+ * javax/swing/undo/UndoableEdit.java: Copied API doc comments from
+ AbstractUndoableEdit.java,
+ * javax/swing/undo/UndoableEditSupport.java
+ (createCompoundEdit): Fixed bad API doc tag,
+ * javax/swing/undo/UndoManager.java
+ (editToBeUndone): Fixed bad API doc tag,
+ (editToBeRedone): Likewise.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/plaf/ComboBoxUI.java: Fixed typo in class description,
+ and corrected a bad API doc tag.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/colorchooser/ColorSelectionModel.java: Reformatted and
+ added API docs all over.
+
+2006-03-05 David Gilbert <david.gilbert@object-refinery.com>
+
+ * javax/swing/filechooser/FileFilter.java:
+ (accept): Fixed API doc tag,
+ (getDescription): Likewise,
+ * javax/swing/filechooser/FileView.java:
+ (isTraversable): Fixed API doc tag.
+
+2006-03-05 Tom Tromey <tromey@redhat.com>
+
+ * vm/reference/java/lang/reflect/Constructor.java (toString): Use
+ ClassHelper.getUserName.
+ * vm/reference/java/lang/reflect/Method.java (toString): Use
+ ClassHelper.getUserName.
+ (getUserTypeName): Removed.
+ * gnu/java/lang/ClassHelper.java (getUserName): New method.
+ * vm/reference/java/lang/reflect/Field.java (toString): Use
+ ClassHelper.getUserName.
+
+2006-03-05 Olivier Jolly <olivier.jolly@pcedev.com>
+
+ Fixes PR 22813
+ * java/net/URLClassLoader.java (FileURLLoader.getResource):
+ Allows directories as valid resources.
2006-03-04 Mark Wielaard <mark@klomp.org>
@@ -6224,7 +14294,7 @@
Added deprecated tag.
* javax/swing/text/JTextComponent.java
(AccessibleJTextComponent): Fixed API doc and
- partially implemented.
+ partiall9 implemented.
(getCaretPosition): Fixed API doc and implemented.
(getSelectedText): Fixed API doc.
(getSelectionStart): Likewise.
diff --git a/libjava/classpath/ChangeLog.usermap b/libjava/classpath/ChangeLog.usermap
deleted file mode 100644
index c0d43db..0000000
--- a/libjava/classpath/ChangeLog.usermap
+++ /dev/null
@@ -1,60 +0,0 @@
-abies:'Artur Biesiadowski <abies@pg.gda.pl>'
-alexl:'Alex Lancaster <alexl@gnu.org>'
-anwalt:'Andy Walter <anwalt_pop@aicas.com>'
-aph:'Andrew Haley <aph@redhat.com>'
-archie172:'Archie Cobbs <archie@dellroad.org>'
-arenn:'Aaron M. Renn <arenn@urbanophile.com>'
-aselkirk:'Andrew Selkirk <aselkirk@sympatico.ca>'
-audriusa:'Audrius Meskauskas <audriusa@Bioinformatics.org>'
-avdyk:'Arnaud Vandyck <arnaud.vandyck@ulg.ac.be>'
-brawer:'Sascha Brawer <brawer@dandelis.ch>'
-bryce:'Bryce McKinlay <mckinlay@redhat.com>'
-cbj:'Brian Jones <cbj@gnu.org>'
-corvus:'James E. Blair <corvus@gnu.org>'
-craig:'Craig Black <craig.black@aonix.com>'
-daryllee:'Daryl Lee <dlee@altaregos.com>'
-djee:'David Jee <djee@redhat.com>'
-dog:'Chris Burdess <dog@bluezoo.org>'
-egagnon:'Etienne M. Gagnon <etienne.gagnon@uqam.ca>'
-ericb:'Eric Blake <ebb9@byu.net>'
-fitzsim:'Thomas Fitzsimmons <fitzsim@redhat.com>'
-fnasser:'Fernando Nasser <fnasser@redhat.com>'
-gadek:'Grzegorz B. Prokopski <gadek@debian.org>'
-gcb:'Geoff Berry <gcb@gnu.org>'
-glavaux:'Guilhem Lavaux <guilhem@kaffe.org>'
-gnu_andrew:'Andrew John Hughes <gnu_andrew@member.fsf.org>'
-graydon:'graydon hoare <graydon@pobox.com>'
-green:'Anthony Green <green@redhat.com>'
-iproetel:'Ingo Proetel <proetel@aicas.com>'
-jaz:'Jon A. Zeppieri <jon@eease.com>'
-jewel:'John Leuner <jewel@pixie.co.za>'
-jfrijters:'Jeroen Frijters <jeroen@sumatra.nl>'
-jgeorgal:'Giannis Georgalis <jgeorgal@csd.uoc.gr>'
-jochen:'Jochen Hoenicke <jochen@gnu.org>'
-joey:'Joseph C. Lesh <joey@gnu.org>'
-jsturm:'Jeff Sturm <jsturm@one-point.com>'
-julian:'Julian Scheid <scheid@sektor37.de>'
-kho:'Kim Ho <kho@redhat.com>'
-mark:'Mark Wielaard <mark@klomp.org>'
-mcb:'Mark Benvenuto <mcb54@columbia.edu>'
-mkoch:'Michael Koch <konqueror@gmx.de>'
-nferrier:'Nic Ferrier <nferrier@gnu.org>'
-noa:'Noa Resare <noa@resare.com>'
-overholt:'Andrew Overholt <overholt@redhat.com>'
-patrik_reali:'Patrik Reali <patrik@reali.ch>'
-rabbit78:'Roman Kennke <roman@kennke.org>'
-raif:'Raif S. Naffah <raif@swiftdsl.com.au>'
-rao:'Paul Fisher <rao@gnu.org>'
-robilad:'Dalibor Topic <robilad@yahoo.com>'
-rodimina:'Olga Rodimina <rodimina@redhat.com>'
-rschuster:'Robert Schuster <theBohemian@gmx.net>'
-rsdio:'Casey Marshall <csm@gnu.org>'
-rupp:'Torsten Rupp <rupp@aicas.com>'
-rveldema:'Ronald Veldema <rveldema@cs.vu.nl>'
-saugart:'Steven Augart <augart@watson.ibm.com>'
-shalom:'John Keiser <shalom@gnu.org>'
-siebert:'Fridtjof Siebert <siebert@aicas.com>'
-smarothy:'Sven de Marothy <sven@physto.se>'
-stuart:'Stuart Ballard <stuart.ballard@mcmail.com>'
-tromey:'Tom Tromey <tromey@redhat.com>'
-warrenl:'Warren Levy <warrenl@redhat.com>'
diff --git a/libjava/classpath/INSTALL b/libjava/classpath/INSTALL
index 7da2366..96059a5 100644
--- a/libjava/classpath/INSTALL
+++ b/libjava/classpath/INSTALL
@@ -130,6 +130,8 @@ gives a complete list.
--with-gjdoc generate documentation using gjdoc default=no
--with-jay Regenerate the parsers with jay must be given the
path to the jay executable
+ --with-glibj-zip=ABS.PATH
+ use prebuilt glibj.zip class library
For more flags run configure --help.
diff --git a/libjava/classpath/Makefile.in b/libjava/classpath/Makefile.in
index ed5a754..0f02464 100644
--- a/libjava/classpath/Makefile.in
+++ b/libjava/classpath/Makefile.in
@@ -44,11 +44,9 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
ltmain.sh missing mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
- $(top_srcdir)/../../config/lead-dot.m4 \
- $(top_srcdir)/../../config/no-executables.m4 \
- $(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
- $(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ $(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ $(top_srcdir)/m4/acinclude.m4 \
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
@@ -96,6 +94,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -135,6 +134,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -155,6 +156,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -202,6 +204,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -220,8 +223,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -233,8 +239,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -251,7 +255,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -259,18 +266,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -462,7 +473,7 @@ distclean-tags:
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
- $(mkdir_p) $(distdir)/../.. $(distdir)/../../config $(distdir)/examples $(distdir)/gnu/classpath $(distdir)/lib $(distdir)/m4 $(distdir)/scripts
+ $(mkdir_p) $(distdir)/../.. $(distdir)/examples $(distdir)/gnu/classpath $(distdir)/lib $(distdir)/m4 $(distdir)/scripts $(distdir)/tools
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
diff --git a/libjava/classpath/NEWS b/libjava/classpath/NEWS
index 8a0ff98..d4f9e5a 100644
--- a/libjava/classpath/NEWS
+++ b/libjava/classpath/NEWS
@@ -1,3 +1,67 @@
+New in release 0.91 (May 15, 2006)
+
+* Experimental activation (java.rmi.activation) support, including RMI
+ activation daemon and persistent naming service tools.
+* Experimental printing support: The API implementation of the javax.print
+ packages has been finished and work on the printing provider implementation
+ started. Currently supported features from the Java Print Service API are
+ print service discovery (CUPS registered printers), single document print
+ jobs and support for client-formatted print data. An example application
+ (see: examples/gnu/classpath/examples/print/Demo) has been added to show
+ the API usage for service discovery and printing of files.
+* The GTKToolkit now gives access to the both the system clipboard and
+ system selection.
+* Custom mouse cursor support has been added to the gtk+ peers. And cursors
+ can now also be set on light-weight components.
+* Free Swing improvements: Support for OceanTheme has been mostly completed
+ and turned on as default Metal theme. X11-style Copy and Paste behavior in
+ text components with the middle mouse button. Support cursor changes on
+ various components when resizing. Support for Look and Feel window
+ decorations has been added.
+* Updated locale data information to CLDR 1.3.
+* Various bugs in Classpath's SecureRandom implementations have been
+ fixed; that class now respects the "securerandom.source" security
+ property and the "java.security.egd" system property.
+* Support for assistive technologies has been added to AWT and Swing.
+
+Runtime interface changes:
+
+* A new class, VMArray, is now available which separates the native
+ array creation method from java.lang.reflect.Array.
+* A new class, gnu.classpath.Unsafe, is provided for handling the
+ new low-level operations required by java.util.concurrent.
+* The reference implementations of Method, Constructor, and Field
+ now have a new native getModifiersInternal() method. The public
+ getModifiers() method in each case has been rewritten in terms of
+ this method.
+* The reference implementation of VMThread has been updated to handle
+ the new Thread.UncaughtExceptionHandler support.
+* A new class, java.security.VMSecureRandom, is now available that is
+ used to generate random numbers for seeding cryptographically-secure
+ pseudo-random number generators.
+* VMClass and the reference implementations of Method, Constructor and Field
+ now include a number of 1.5 methods imported from the generics branch.
+ These are all optional (in the sense that the methods associated with them
+ merely fail on use if the VM doesn't provide them, rather than the
+ VM failing altogether), but VMs should aim to support them where possible.
+* The implementation of java.lang.instrument has been merged to the main
+ branch from the generics branch.
+* The VM interfaces of the main branch and the generics branch are now
+ consistent with one another. As a result, the main branch includes an
+ additional environ() function in VMSystem and an additional argument has
+ been added to nativeSpawn() in VMProcess.
+* Annotation support is now available in the main branch, if the VM supports
+ it. The VM should implement VMClass.getDeclaredAnnotations,
+ Constructor.getAnnotation, Constructor.getDeclaredAnnotations,
+ Field.getAnnotation, Field.getDeclaredAnnotations, Method.getAnnotation and
+ Method.getDeclaredAnnotations.
+* java.lang.Package now has a new constructor that takes the defining
+ ClassLoader as an extra argument. If you use a custom version of
+ VMClassLoader, please switch it to use this constructor.
+* The reference implementation of VMClassLoader.getBootPackages() now
+ reads the META-INF/INDEX.LIST resource using the java.boot.class.path
+ system property.
+
New in release 0.90 (March 6, 2006)
* Free Swing improvements: JTable columns are rearrangeable and
diff --git a/libjava/classpath/README b/libjava/classpath/README
index 27e22dc..132fbe5 100644
--- a/libjava/classpath/README
+++ b/libjava/classpath/README
@@ -1,4 +1,4 @@
-GNU Classpath README - Last updated: August 31, 2005
+GNU Classpath README - Last updated: May 15, 2006
GNU Classpath, Essential Libraries for Java is a project to create a
free software implementation of the core class libraries for the java
@@ -29,6 +29,7 @@ Smaller environments (runtime only, no compilers, no tools) which work
with this GNU Classpath releases include
(tested by and recommended for GNU Classpath hackers):
+ * CACAO (http://www.cacaojvm.org/)
* JamVM (http://jamvm.sourceforge.net/)
* Jikes RVM (http://www.ibm.com/developerworks/oss/jikesrvm/)
* Kissme (http://kissme.sourceforge.net/)
diff --git a/libjava/classpath/aclocal.m4 b/libjava/classpath/aclocal.m4
index 88aac31..f0a3d72 100644
--- a/libjava/classpath/aclocal.m4
+++ b/libjava/classpath/aclocal.m4
@@ -547,6 +547,39 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
+# -*- Autoconf -*-
+# Copyright (C) 2003 Free Software Foundation, Inc.
+
+# 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, or (at your option)
+# 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.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
@@ -1053,9 +1086,6 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
-m4_include([../../config/depstand.m4])
-m4_include([../../config/lead-dot.m4])
-m4_include([../../config/no-executables.m4])
m4_include([../../libtool.m4])
m4_include([m4/acattribute.m4])
m4_include([m4/accross.m4])
diff --git a/libjava/classpath/compat/Makefile.am b/libjava/classpath/compat/Makefile.am
deleted file mode 100644
index 1376de3..0000000
--- a/libjava/classpath/compat/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-SUBDIRS = java.net
-
diff --git a/libjava/classpath/compat/java.net/GetSocketOptionInfo.java b/libjava/classpath/compat/java.net/GetSocketOptionInfo.java
deleted file mode 100644
index 1a5f351..0000000
--- a/libjava/classpath/compat/java.net/GetSocketOptionInfo.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Class to identify socket option constants.
-
-import java.io.*;
-import java.net.*;
-
-public class GetSocketOptionInfo extends Socket implements SocketImplFactory
-{
-
-public SocketImpl
-createSocketImpl()
-{
- return(new PlainSocketImpl());
-}
-
-public static void
-main(String[] argv) throws IOException
-{
- Socket.setSocketImplFactory(new GetSocketOptionInfo());
-
- Socket s = new Socket();
-
- System.err.println("Setting TCP_NODELAY on");
- s.setTcpNoDelay(true);
- System.err.println("Setting TCP_NODELAY off");
- s.setTcpNoDelay(false);
-
- System.err.println("Setting SO_LINGER on");
- s.setSoLinger(true, 10);
- System.err.println("Setting SO_LINGER off");
- s.setSoLinger(false, 1);
-
- System.err.println("Setting SO_TIMEOUT to 15");
- s.setSoTimeout(15);
- System.err.println("Setting SO_TIMEOUT to 0");
- s.setSoTimeout(0);
-}
-
-}
-
diff --git a/libjava/classpath/compat/java.net/Makefile.am b/libjava/classpath/compat/java.net/Makefile.am
deleted file mode 100644
index 34da4f3..0000000
--- a/libjava/classpath/compat/java.net/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-# Hmm.. This doesn't seem to work
-#noinst_JAVA = GetSocketOptionInfo.java PlainSocketImpl.java
-
-JAVAROOT = .
-
-compatdir = $(datadir)/compat/java.net
-
-compat_JAVA = GetSocketOptionInfo.java PlainSocketImpl.java
-
-
-EXTRA_DIST = README
-
diff --git a/libjava/classpath/compat/java.net/PlainSocketImpl.java b/libjava/classpath/compat/java.net/PlainSocketImpl.java
deleted file mode 100644
index 4a80eab..0000000
--- a/libjava/classpath/compat/java.net/PlainSocketImpl.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/* PlainSocketImpl.java -- Default socket implementation
- Copyright (c) 1998 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-import java.net.*;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Unless the application installs its own SocketImplFactory, this is the
- * default socket implemetation that will be used. It simply uses a
- * combination of Java and native routines to implement standard BSD
- * style sockets of family AF_INET and types SOCK_STREAM and SOCK_DGRAM
- *
- * @version 0.1
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-class PlainSocketImpl extends SocketImpl
-{
-
-/*************************************************************************/
-
-/*
- * Static Variables
- */
-
-/*
-// Static initializer to load native library
-static
-{
- System.loadLibrary("javanet");
-}
-*/
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the native file descriptor for this socket
- */
-protected int native_fd = -1;
-
-/*************************************************************************/
-
-/**
- * Default do nothing constructor
- */
-public
-PlainSocketImpl()
-{
- ;
-}
-
-/*************************************************************************/
-
-/**
- * Accepts a new connection on this socket and returns in in the
- * passed in SocketImpl.
- *
- * @param impl The SocketImpl object to accept this connection.
- */
-protected native void
-accept(SocketImpl impl) throws IOException;
-
-/*************************************************************************/
-
-/**
- * Returns the number of bytes that the caller can read from this socket
- * without blocking. //*****Figure out if we can do something here
- *
- * @return The number of readable bytes before blocking
- *
- * @exception IOException If an error occurs
- */
-protected int
-available() throws IOException
-{
- return(0);
-}
-
-/*************************************************************************/
-
-/**
- * Binds to the specified port on the specified addr. Note that this addr
- * must represent a local IP address. **** How bind to INADDR_ANY? ****
- *
- * @param addr The address to bind to
- * @param port The port number to bind to
- *
- * @exception IOException If an error occurs
- */
-protected native void
-bind(InetAddress addr, int port) throws IOException;
-
-/*************************************************************************/
-
-/**
- * Closes the socket. This will cause any InputStream or OutputStream
- * objects for this Socket to be closed as well.
- * <p>
- * Note that if the SO_LINGER option is set on this socket, then the
- * operation could block.
- *
- * @exception IOException If an error occurs
- */
-protected native void
-close() throws IOException;
-
-/*************************************************************************/
-
-/**
- * Connects to the remote address and port specified as arguments.
- *
- * @param addr The remote address to connect to
- * @param port The remote port to connect to
- *
- * @exception IOException If an error occurs
- */
-protected void
-connect(InetAddress addr, int port) throws IOException
-{
- return;
-}
-
-/*************************************************************************/
-
-/**
- * Connects to the remote hostname and port specified as arguments.
- *
- * @param hostname The remote hostname to connect to
- * @param port The remote port to connect to
- *
- * @exception IOException If an error occurs
- */
-protected void
-connect(String hostname, int port) throws IOException
-{
- InetAddress addr = InetAddress.getByName(hostname);
- connect(addr, port);
-}
-
-/*************************************************************************/
-
-/**
- * Creates a new socket that is not bound to any local address/port and
- * is not connected to any remote address/port. This will be created as
- * a stream socket if the stream parameter is true, or a datagram socket
- * if the stream parameter is false.
- *
- * @param stream true for a stream socket, false for a datagram socket
- */
-protected native void
-create(boolean stream) throws IOException;
-
-/*************************************************************************/
-
-/**
- * Starts listening for connections on a socket. The queuelen parameter
- * is how many pending connections will queue up waiting to be serviced
- * before being accept'ed. If the queue of pending requests exceeds this
- * number, additional connections will be refused.
- *
- * @param queuelen The length of the pending connection queue
- *
- * @exception IOException If an error occurs
- */
-protected native void
-listen(int queuelen) throws IOException;
-
-/*************************************************************************/
-
-/**
- * Sets the specified option on a socket to the passed in object. For
- * options that take an integer argument, the passed in object is an
- * Integer. The option_id parameter is one of the defined constants in
- * this interface.
- *
- * @param option_id The identifier of the option
- * @param val The value to set the option to
- *
- * @exception SocketException If an error occurs
- */
-public void
-setOption(int option_id, Object val) throws SocketException
-{
-//*** Do non-native for now
- System.err.println("Option Id=" + option_id);
- System.err.println("Object is: " + val.getClass().getName());
- System.err.println("Object value is: " + val);
-}
-
-/*************************************************************************/
-
-/**
- * Returns the current setting of the specified option. The Object returned
- * will be an Integer for options that have integer values. The option_id
- * is one of the defined constants in this interface.
- *
- * @param option_id The option identifier
- *
- * @return The current value of the option
- *
- * @exception SocketException If an error occurs
- */
-public Object
-getOption(int option_id) throws SocketException
-{
-//**** Do non-native for now
- System.err.println("Option Id=" + option_id);
- return(null);
-}
-
-/*************************************************************************/
-
-/**
- * Returns an InputStream object for reading from this socket. This will
- * be an instance of SocketInputStream.
- *
- * @return An InputStream
- *
- * @exception IOException If an error occurs
- */
-protected InputStream
-getInputStream() throws IOException
-{
- return(null);
-}
-
-/*************************************************************************/
-
-/**
- * Returns an OutputStream object for writing to this socket. This will
- * be an instance of SocketOutputStream.
- *
- * @return An OutputStream
- *
- * @exception IOException If an error occurs
- */
-protected OutputStream
-getOutputStream() throws IOException
-{
- return(null);
-}
-
-} // class PlainSocketImpl
-
diff --git a/libjava/classpath/compat/java.net/README b/libjava/classpath/compat/java.net/README
deleted file mode 100644
index f249b75..0000000
--- a/libjava/classpath/compat/java.net/README
+++ /dev/null
@@ -1,27 +0,0 @@
-This directory contains various "experiment" programs used to determine
-the behavior of the java.net class where such behavior is not sufficiently
-documented by Sun in order to write an implementation from docs alone.
-
-Some key findings:
-
-The setOption/getOption methods are discussed in the "Networking Enhancements"
-document for Java 1.1 but are not in the javadocs. However, the SocketImpl
-class is shown implementing a SocketOptions interface that is not documented.
-We assume this is a non-public interface which contains abstract declarations
-of the get/setOption methods as well as contants for the option_id's.
-
-TCP_NODELAY:
- The option id of this option is 1. The Object passed to setOption is
- a Boolean indicating whether this option should be on (true) or off (false).
-
-SO_LINGER:
- The option id of this option is 128. When SO_LINGER is to be disabled,
- the Object passed to setOption is Boolean with a value of false. When
- SO_LINGER is to be enabled, the Object passed to setOption is an Integer
- set to the linger value.
-
-SO_TIMEOUT:
- The option id of this option is 4102. The Object passed to setOption is
- an Integer that is the new timeout value (0 to disable).
-
-
diff --git a/libjava/classpath/configure b/libjava/classpath/configure
index eef7a68..dc8168e 100755
--- a/libjava/classpath/configure
+++ b/libjava/classpath/configure
@@ -1,10 +1,11 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for GNU Classpath 0.90.
+# Generated by GNU Autoconf 2.59d for GNU Classpath 0.91.
#
# Report bugs to <classpath@gnu.org>.
#
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
@@ -18,11 +19,35 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
@@ -31,8 +56,43 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
@@ -46,18 +106,19 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -65,157 +126,386 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+# CDPATH.
+$as_unset CDPATH
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
fi
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+for as_dir in /usr/bin/posix$PATH_SEPARATOR/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
+ case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells which exist, to save several forks.
+ if test -f $as_shell &&
+ { ($as_shell) 2> /dev/null <<\_ASEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { $as_shell 2> /dev/null <<\_ASEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell autoconf@gnu.org about your system,
+ echo including any error possibly output before this
+ echo message
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
+ chmod +x "$as_me.lineno" ||
{ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+if (dirname -- /) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -224,7 +514,19 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+# Find out whether ``test -x'' works. Don't use a zero-byte file, as
+# systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ as_executable_p="test -x"
+else
+ as_executable_p=:
+fi
+rm -f conf$$.file
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -233,44 +535,32 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
+exec 7<&0 </dev/null 6>&1
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-exec 6>&1
-
#
# Initializations.
#
ac_default_prefix=/usr/local
+ac_clean_files=
ac_config_libobj_dir=.
+LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
# Identity of this package.
PACKAGE_NAME='GNU Classpath'
PACKAGE_TARNAME='classpath'
-PACKAGE_VERSION='0.90'
-PACKAGE_STRING='GNU Classpath 0.90'
+PACKAGE_VERSION='0.91'
+PACKAGE_STRING='GNU Classpath 0.91'
PACKAGE_BUGREPORT='classpath@gnu.org'
ac_unique_file="java/lang/System.java"
@@ -303,17 +593,242 @@ ac_includes_default="\
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
+#endif
+#if HAVE_STDINT_H
+# include <stdint.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LIBVERSION CLASSPATH_MODULE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_COLLECTIONS_TRUE CREATE_COLLECTIONS_FALSE CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE GTK_CAIRO_ENABLED GTK_CAIRO_TRUE GTK_CAIRO_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE nativelibdir glibjdir CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP PERL COLLECTIONS_PREFIX LIBICONV LTLIBICONV WARNING_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS CAIRO_CFLAGS CAIRO_LIBS FREETYPE2_CFLAGS FREETYPE2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS QT_CFLAGS QT_LIBS MOC USER_JAVAH USER_SPECIFIED_JAVAH_TRUE USER_SPECIFIED_JAVAH_FALSE CLASSPATH_INCLUDES GCJ JIKES JIKESENCODING JIKESWARNINGS KJC GCJX ECJ FOUND_GCJ_TRUE FOUND_GCJ_FALSE FOUND_JIKES_TRUE FOUND_JIKES_FALSE FOUND_ECJ_TRUE FOUND_ECJ_FALSE FOUND_KJC_TRUE FOUND_KJC_FALSE FOUND_GCJX_TRUE FOUND_GCJX_FALSE USER_CLASSLIB USER_SPECIFIED_CLASSLIB_TRUE USER_SPECIFIED_CLASSLIB_FALSE vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP FASTJAR INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+LIBVERSION
+CLASSPATH_MODULE
+CLASSPATH_CONVENIENCE
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+CREATE_COLLECTIONS_TRUE
+CREATE_COLLECTIONS_FALSE
+CREATE_JNI_LIBRARIES_TRUE
+CREATE_JNI_LIBRARIES_FALSE
+CREATE_CORE_JNI_LIBRARIES_TRUE
+CREATE_CORE_JNI_LIBRARIES_FALSE
+default_toolkit
+CREATE_XMLJ_LIBRARY_TRUE
+CREATE_XMLJ_LIBRARY_FALSE
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CPP
+GREP
+EGREP
+CREATE_ALSA_LIBRARIES_TRUE
+CREATE_ALSA_LIBRARIES_FALSE
+CREATE_DSSI_LIBRARIES_TRUE
+CREATE_DSSI_LIBRARIES_FALSE
+CREATE_GTK_PEER_LIBRARIES_TRUE
+CREATE_GTK_PEER_LIBRARIES_FALSE
+GTK_CAIRO_ENABLED
+GTK_CAIRO_TRUE
+GTK_CAIRO_FALSE
+CREATE_QT_PEER_LIBRARIES_TRUE
+CREATE_QT_PEER_LIBRARIES_FALSE
+nativeexeclibdir
+glibjdir
+CREATE_JNI_HEADERS_TRUE
+CREATE_JNI_HEADERS_FALSE
+LN_S
+RANLIB
+LIBTOOL
+CXX
+CXXFLAGS
+ac_ct_CXX
+CXXDEPMODE
+am__fastdepCXX_TRUE
+am__fastdepCXX_FALSE
+CXXCPP
+PERL
+COLLECTIONS_PREFIX
+LIBICONV
+LTLIBICONV
+WARNING_CFLAGS
+STRICT_WARNING_CFLAGS
+ERROR_CFLAGS
+PKG_CONFIG
+XML_CFLAGS
+XML_LIBS
+XSLT_CFLAGS
+XSLT_LIBS
+XMKMF
+X_CFLAGS
+X_PRE_LIBS
+X_LIBS
+X_EXTRA_LIBS
+GTK_CFLAGS
+GTK_LIBS
+CAIRO_CFLAGS
+CAIRO_LIBS
+FREETYPE2_CFLAGS
+FREETYPE2_LIBS
+PANGOFT2_CFLAGS
+PANGOFT2_LIBS
+QT_CFLAGS
+QT_LIBS
+MOC
+USER_JAVAH
+USER_SPECIFIED_JAVAH_TRUE
+USER_SPECIFIED_JAVAH_FALSE
+CLASSPATH_INCLUDES
+GCJ
+JIKES
+JIKESENCODING
+JIKESWARNINGS
+KJC
+GCJX
+ECJ
+FOUND_GCJ_TRUE
+FOUND_GCJ_FALSE
+FOUND_JIKES_TRUE
+FOUND_JIKES_FALSE
+FOUND_ECJ_TRUE
+FOUND_ECJ_FALSE
+FOUND_KJC_TRUE
+FOUND_KJC_FALSE
+FOUND_GCJX_TRUE
+FOUND_GCJX_FALSE
+USER_CLASSLIB
+USER_SPECIFIED_CLASSLIB_TRUE
+USER_SPECIFIED_CLASSLIB_FALSE
+vm_classes
+MAINTAINER_MODE_TRUE
+MAINTAINER_MODE_FALSE
+MAINT
+LIBDEBUG
+INIT_LOAD_LIBRARY
+JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION
+REMOVE
+MKDIR
+CP
+DATE
+FIND
+ZIP
+FASTJAR
+INSTALL_GLIBJ_ZIP_TRUE
+INSTALL_GLIBJ_ZIP_FALSE
+INSTALL_CLASS_FILES_TRUE
+INSTALL_CLASS_FILES_FALSE
+BUILD_CLASS_FILES_TRUE
+BUILD_CLASS_FILES_FALSE
+EXAMPLESDIR
+GJDOC
+CREATE_API_DOCS_TRUE
+CREATE_API_DOCS_FALSE
+JAY
+JAY_SKELETON
+REGEN_PARSERS_TRUE
+REGEN_PARSERS_FALSE
+USE_PREBUILT_GLIBJ_ZIP_TRUE
+USE_PREBUILT_GLIBJ_ZIP_FALSE
+PATH_TO_GLIBJ_ZIP
+ENABLE_LOCAL_SOCKETS_TRUE
+ENABLE_LOCAL_SOCKETS_FALSE
+LIBOBJS
+LTLIBOBJS'
ac_subst_files=''
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+XMKMF'
+
# Initialize some variables set by options.
ac_init_help=
@@ -340,34 +855,48 @@ x_libraries=NONE
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
ac_prev=
+ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
+ eval $ac_prev=\$ac_option
ac_prev=
continue
fi
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_option in
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
@@ -389,12 +918,18 @@ do
--config-cache | -C)
cache_file=config.cache ;;
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ -datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
-disable-* | --disable-*)
ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
@@ -402,7 +937,17 @@ do
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
+ eval enable_$ac_feature=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
@@ -411,11 +956,7 @@ do
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_$ac_feature='$ac_optarg'" ;;
+ eval enable_$ac_feature=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -442,6 +983,12 @@ do
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
@@ -466,13 +1013,16 @@ do
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
-localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
+ | --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
@@ -537,6 +1087,16 @@ do
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
@@ -593,11 +1153,7 @@ do
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
+ eval with_$ac_package=\$ac_optarg ;;
-without-* | --without-*)
ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
@@ -606,7 +1162,7 @@ do
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=no" ;;
+ eval with_$ac_package=no ;;
--x)
# Obsolete; use --with-x.
@@ -637,8 +1193,7 @@ Try \`$0 --help' for more information." >&2
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
+ eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
@@ -658,27 +1213,19 @@ if test -n "$ac_prev"; then
{ (exit 1); exit 1; }; }
fi
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
+# Be sure to have absolute directory names.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
do
- eval ac_val=$`echo $ac_var`
+ eval ac_val=\$$ac_var
case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
done
# There might be people who depend on the old broken behavior: `$host'
@@ -705,86 +1252,76 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_confdir=`(dirname "$0") 2>/dev/null ||
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$0" ||
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$0" : 'X\(//\)[^/]' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
+ if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
{ (exit 1); exit 1; }; }
- fi
fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
{ (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
-ac_env_CXXCPP_set=${CXXCPP+set}
-ac_env_CXXCPP_value=$CXXCPP
-ac_cv_env_CXXCPP_set=${CXXCPP+set}
-ac_cv_env_CXXCPP_value=$CXXCPP
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
#
# Report the --help message.
@@ -793,7 +1330,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GNU Classpath 0.90 to adapt to many kinds of systems.
+\`configure' configures GNU Classpath 0.91 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -813,9 +1350,6 @@ Configuration:
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
-_ACEOF
-
- cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
@@ -833,15 +1367,22 @@ Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/classpath]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
@@ -864,7 +1405,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GNU Classpath 0.90:";;
+ short | recursive ) echo "Configuration of GNU Classpath 0.91:";;
esac
cat <<\_ACEOF
@@ -909,6 +1450,7 @@ Optional Features:
--enable-examples enable build of the examples default=yes
--enable-portable-native-sync
synchronize VM threads portably
+ --enable-local-sockets enables local (AF_LOCAL) socket API default: no
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -938,138 +1480,107 @@ Optional Packages:
--with-gjdoc generate documentation using gjdoc (default is NO)
--with-jay Regenerate the parsers with jay must be given the
path to the jay executable
+ --with-glibj-zip=ABS.PATH
+ use prebuilt glibj.zip class library
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
+ XMKMF Path to xmkmf, Makefile generator for X Window System
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <classpath@gnu.org>.
_ACEOF
+ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
test -d $ac_dir || continue
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
if test -f $ac_srcdir/configure.gnu; then
- echo
+ echo &&
$SHELL $ac_srcdir/configure.gnu --help=recursive
elif test -f $ac_srcdir/configure; then
- echo
+ echo &&
$SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
else
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GNU Classpath configure 0.90
-generated by GNU Autoconf 2.59
+GNU Classpath configure 0.91
+generated by GNU Autoconf 2.59d
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
- exit 0
+ exit
fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GNU Classpath $as_me 0.90, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+It was created by GNU Classpath $as_me 0.91, which was
+generated by GNU Autoconf 2.59d. Invocation command line was
$ $0 $@
_ACEOF
+exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
@@ -1088,7 +1599,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
@@ -1102,6 +1613,7 @@ do
test -z "$as_dir" && as_dir=.
echo "PATH: $as_dir"
done
+IFS=$as_save_IFS
} >&5
@@ -1134,7 +1646,7 @@ do
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ *\'*)
ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
@@ -1169,8 +1681,8 @@ $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
@@ -1183,20 +1695,34 @@ trap 'exit_status=$?
_ASBOX
echo
# The following way of writing the cache mishandles newlines in values,
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
(set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
*)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-}
+ esac |
+ sort
+)
echo
cat <<\_ASBOX
@@ -1207,22 +1733,22 @@ _ASBOX
echo
for ac_var in $ac_subst_vars
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
_ASBOX
echo
for ac_var in $ac_subst_files
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
@@ -1234,26 +1760,24 @@ _ASBOX
## ----------- ##
_ASBOX
echo
- sed "/^$/d" confdefs.h | sort
+ cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
echo "$as_me: caught signal $ac_signal"
echo "$as_me: exit $exit_status"
} >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
- ' 0
+' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
+rm -f -r conftest* confdefs.h
# Predefined preprocessor variables.
@@ -1284,14 +1808,17 @@ _ACEOF
# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
+if test -n "$CONFIG_SITE"; then
+ set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+ set x "$ac_default_prefix/share/config.site" \
+ "$ac_default_prefix/etc/config.site"
fi
-for ac_site_file in $CONFIG_SITE; do
+shift
+for ac_site_file
+do
if test -r "$ac_site_file"; then
{ echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
echo "$as_me: loading site script $ac_site_file" >&6;}
@@ -1320,12 +1847,11 @@ fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+for ac_var in $ac_precious_vars; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
{ echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
@@ -1350,8 +1876,7 @@ echo "$as_me: current value: $ac_new_val" >&2;}
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -1368,12 +1893,6 @@ echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start ov
{ (exit 1); exit 1; }; }
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
@@ -1398,6 +1917,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
@@ -1433,74 +1957,118 @@ $ac_config_sub sun4 >/dev/null 2>&1 ||
echo "$as_me: error: cannot run $ac_config_sub" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
if test "${ac_cv_build+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$ac_config_guess`
+test "x$ac_build_alias" = x &&
{ { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
{ (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ac_cv_build=`$ac_config_sub $ac_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_build_alias failed" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
if test "${ac_cv_host+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$ac_config_sub $host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $host_alias failed" >&2;}
{ (exit 1); exit 1; }; }
+fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking target system type" >&5
-echo $ECHO_N "checking target system type... $ECHO_C" >&6
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
if test "${ac_cv_target+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_target_alias=$target_alias
-test "x$ac_cv_target_alias" = "x" &&
- ac_cv_target_alias=$ac_cv_host_alias
-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$ac_config_sub $target_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $target_alias failed" >&2;}
{ (exit 1); exit 1; }; }
+fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-echo "${ECHO_T}$ac_cv_target" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
target=$ac_cv_target
-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
# The aliases save the names the user supplied, while $host etc.
@@ -1526,6 +2094,9 @@ esac
CLASSPATH_MODULE="${cp_module} -version-info ${LIBVERSION} -no-undefined"
+CLASSPATH_CONVENIENCE="-no-undefined"
+
+
am__api_version="1.9"
# Find a good install program. We prefer a C program (faster),
@@ -1541,8 +2112,8 @@ am__api_version="1.9"
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1564,7 +2135,7 @@ case $as_dir/ in
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; }; then
if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
@@ -1583,21 +2154,22 @@ case $as_dir/ in
;;
esac
done
+IFS=$as_save_IFS
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
- # removed, or if the path is relative.
+ # removed, or if the value is a relative name.
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -1607,8 +2179,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
# Just in case
sleep 1
echo timestamp > conftest.file
@@ -1650,20 +2222,20 @@ echo "$as_me: error: newly created file is older than distributed files!
Check your system clock" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
test "$program_prefix" != NONE &&
- program_transform_name="s,^,$program_prefix,;$program_transform_name"
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
- program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
# Double any \ or $. echo might interpret backslashes.
# By default was `s,x,x', remove it if useless.
cat <<\_ACEOF >conftest.sed
s/[\\$]/&&/g;s/;s,x,x,$//
_ACEOF
program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm conftest.sed
+rm -f conftest.sed
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
@@ -1715,8 +2287,8 @@ for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_AWK+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -1729,41 +2301,44 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_AWK="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
- echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6
+ { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$AWK" && break
done
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
all:
- @echo 'ac_maketemp="$(MAKE)"'
+ @echo 'ac_maketemp=X"$(MAKE)"'
_ACEOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
+if test "$ac_maketemp" != X ; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
@@ -1771,12 +2346,12 @@ fi
rm -f conftest.make
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
SET_MAKE=
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
@@ -1809,7 +2384,7 @@ fi
# Define the identity of the package.
PACKAGE='classpath'
- VERSION='0.90'
+ VERSION='0.91'
cat >>confdefs.h <<_ACEOF
@@ -1847,8 +2422,8 @@ if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_STRIP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -1861,32 +2436,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
+ { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -1899,27 +2476,41 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_STRIP="strip"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- STRIP=$ac_ct_STRIP
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
else
STRIP="$ac_cv_prog_STRIP"
fi
@@ -1934,8 +2525,8 @@ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AMTAR=${AMTAR-"${am_missing_run}tar"}
-echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
-echo $ECHO_N "checking how to create a ustar tar archive... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
+echo $ECHO_N "checking how to create a ustar tar archive... $ECHO_C" >&6; }
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar plaintar pax cpio none'
_am_tools=${am_cv_prog_tar_ustar-$_am_tools}
@@ -2013,23 +2604,22 @@ else
am_cv_prog_tar_ustar=$_am_tool
fi
-echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
-echo "${ECHO_T}$am_cv_prog_tar_ustar" >&6
+{ echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
+echo "${ECHO_T}$am_cv_prog_tar_ustar" >&6; }
- ac_config_headers="$ac_config_headers include/config.h"
+ac_config_headers="$ac_config_headers include/config.h"
+GCC_NO_EXECUTABLES
-
-# Check whether --enable-collections or --disable-collections was given.
+# Check whether --enable-collections was given.
if test "${enable_collections+set}" = set; then
- enableval="$enable_collections"
- case x"${enableval}" in
+ enableval=$enable_collections; case x"${enableval}" in
xyes) COMPILE_COLLECTIONS=yes; COLLECTIONS_PREFIX="\"gnu/java/util/collections\"" ;;
xno) COMPILE_COLLECTIONS=no ;;
x) COMPILE_COLLECTIONS=yes; COLLECTIONS_PREFIX="\"gnu/java/util/collections\"" ;;
@@ -2037,7 +2627,8 @@ if test "${enable_collections+set}" = set; then
esac
else
COMPILE_COLLECTIONS=no
-fi;
+fi
+
if test "x${COMPILE_COLLECTIONS}" = xyes; then
@@ -2049,17 +2640,17 @@ else
fi
-# Check whether --enable-jni or --disable-jni was given.
+# Check whether --enable-jni was given.
if test "${enable_jni+set}" = set; then
- enableval="$enable_jni"
- case "${enableval}" in
+ enableval=$enable_jni; case "${enableval}" in
yes) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
no) COMPILE_JNI=no ;;
*) COMPILE_JNI=yes; COMPILE_JAVA=yes ;;
esac
else
COMPILE_JNI=yes
-fi;
+fi
+
if test "x${COMPILE_JNI}" = xyes; then
@@ -2071,17 +2662,17 @@ else
fi
-# Check whether --enable-core-jni or --disable-core-jni was given.
+# Check whether --enable-core-jni was given.
if test "${enable_core_jni+set}" = set; then
- enableval="$enable_core_jni"
- case "${enableval}" in
+ enableval=$enable_core_jni; case "${enableval}" in
yes) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
no) COMPILE_CORE_JNI=no ;;
*) COMPILE_CORE_JNI=yes; COMPILE_JAVA=yes ;;
esac
else
COMPILE_CORE_JNI=yes
-fi;
+fi
+
if test "x${COMPILE_CORE_JNI}" = xyes; then
@@ -2093,40 +2684,40 @@ else
fi
-# Check whether --enable-Werror or --disable-Werror was given.
+# Check whether --enable-Werror was given.
if test "${enable_Werror+set}" = set; then
- enableval="$enable_Werror"
- case "${enableval}" in
+ enableval=$enable_Werror; case "${enableval}" in
yes) ENABLE_WERROR=yes ;;
no) ENABLE_WERROR=no ;;
*) ENABLE_WERROR=no ;;
esac
else
ENABLE_WERROR=no
-fi;
+fi
+
-# Check whether --enable-default-toolkit or --disable-default-toolkit was given.
+# Check whether --enable-default-toolkit was given.
if test "${enable_default_toolkit+set}" = set; then
- enableval="$enable_default_toolkit"
+ enableval=$enable_default_toolkit;
+fi
-fi;
default_toolkit=$enable_default_toolkit
if test "$default_toolkit" = ""; then
default_toolkit=gnu.java.awt.peer.gtk.GtkToolkit
fi
-# Check whether --enable-xmlj or --disable-xmlj was given.
+# Check whether --enable-xmlj was given.
if test "${enable_xmlj+set}" = set; then
- enableval="$enable_xmlj"
- case "${enableval}" in
+ enableval=$enable_xmlj; case "${enableval}" in
yes) COMPILE_XMLJ=yes ;;
no) COMPILE_XMLJ=no ;;
*) COMPILE_XMLJ=no ;;
esac
else
COMPILE_XMLJ=no
-fi;
+fi
+
if test "x${COMPILE_XMLJ}" = xyes; then
@@ -2140,7 +2731,7 @@ fi
DEPDIR="${am__leading_dot}deps"
- ac_config_commands="$ac_config_commands depfiles"
+ac_config_commands="$ac_config_commands depfiles"
am_make=${MAKE-make}
@@ -2150,8 +2741,8 @@ am__doit:
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
am__include="#"
am__quote=
_am_result=none
@@ -2178,15 +2769,15 @@ if test "$am__include" = "#"; then
fi
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
rm -f confinc confmf
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+# Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then
- enableval="$enable_dependency_tracking"
+ enableval=$enable_dependency_tracking;
+fi
-fi;
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
@@ -2211,8 +2802,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2225,32 +2816,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2263,36 +2856,51 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2305,74 +2913,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
+ fi
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2386,7 +2954,7 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
@@ -2397,6 +2965,7 @@ do
fi
done
done
+IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
@@ -2414,22 +2983,23 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2442,36 +3012,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2484,29 +3056,45 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CC" && break
done
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
fi
fi
@@ -2519,59 +3107,39 @@ See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
+echo "$as_me:$LINENO: checking for C compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version >&5\"") >&5
+ (eval $ac_compiler --version >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v >&5\"") >&5
+ (eval $ac_compiler -v >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V >&5\"") >&5
+ (eval $ac_compiler -V >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-int
-main ()
-{
+# List of possible output files. We want to start from the most likely,
+# but we have to check foo.exe before foo, because Cygwin `test -f' looks
+# also for foo.exe. b.out is created by i960 compilers.
+# As a last resort, we also try wildcards: `conftest.*' and `a.*'.
+# But we are not allowed to rm a.*, and we do not want always remove
+# conftest.*, so we will list them literally, when appropriate.
+ac_outfiles="a_out.exe a.out conftest.exe conftest a.exe b.out"
- ;
- return 0;
-}
-_ACEOF
-# FIXME: Cleanup?
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- gcc_no_link=no
-else
- gcc_no_link=yes
-fi
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions. Remove them first so a
+# subsequent execution test works.
+rm -f $ac_outfiles conftest.*
-if test x$gcc_no_link = xyes; then
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
-else
- cat >conftest.$ac_ext <<_ACEOF
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -2586,51 +3154,40 @@ main ()
return 0;
}
_ACEOF
+
ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files $ac_outfiles"
+
+# The following tests should remove their output except files matching conftest.*.
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
(eval $ac_link_default) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ for ac_file in $ac_outfiles a.* conftest.* NO
do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ * ) break;;
esac
done
+if test "$ac_file" = NO; then
+ { { echo "$as_me:$LINENO: error: no output file found
+See \`config.log' for more details." >&5
+echo "$as_me: error: no output file found
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
@@ -2642,14 +3199,12 @@ See \`config.log' for more details." >&2;}
{ (exit 77); exit 77; }; }
fi
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run. If not, either
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
@@ -2674,84 +3229,84 @@ See \`config.log' for more details." >&2;}
fi
fi
fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
+# Clean up; list also $ac_file, in case it matched a wildcard entry.
+rm -f $ac_outfiles $ac_file
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if test "${ac_cv_exeext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
- break;;
- * ) break;;
- esac
-done
+ # If both `conftest.exe' and `conftest' are `present' (well, observable),
+ # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+ # work properly (i.e., refer to `conftest.exe'), while it won't with `rm'.
+ for ac_file in conftest.exe conftest conftest.* NO; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+ done
+ if test "$ac_file" = NO; then
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: no output file found
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: no output file found
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ # Clean up; list also $ac_file, in case it matched conftest.*.
+ rm -f $ac_outfiles $ac_file
+
else
{ { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&5
echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
+
fi
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-rm -f conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-fi
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+
+
+ac_clean_files=$ac_clean_files_save
+
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
if test "${ac_cv_objext+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
+ rm -f conftest.o conftest.obj
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
@@ -2767,14 +3322,16 @@ See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+
+
+rm -f conftest.*
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
if test "${ac_cv_c_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -2805,8 +3362,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2823,24 +3379,28 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -2864,8 +3424,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2882,97 +3441,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
int
main ()
{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+
;
return 0;
}
_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
+rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
@@ -2981,8 +3466,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -2994,81 +3478,24 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
+ :
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
+
int
main ()
{
-exit (42);
+
;
return 0;
}
@@ -3082,8 +3509,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3095,30 +3521,104 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- :
+ ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-continue
+
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
int
main ()
{
-exit (42);
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
@@ -3127,8 +3627,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3140,27 +3639,36 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- break
+ ac_cv_prog_cc_c89=$ac_arg
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+ xno)
+ { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3169,8 +3677,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
depcc="$CC" am_compiler_list=
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3259,8 +3767,8 @@ else
fi
fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
@@ -3282,8 +3790,8 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -3343,9 +3851,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3383,6 +3892,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -3400,8 +3910,8 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
@@ -3450,9 +3960,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3490,6 +4001,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -3512,23 +4024,170 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
+ ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_executable_p "$ac_path_GREP"; } || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.*;;
+esac
+
+
+ $ac_path_GREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_GREP=$GREP
fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_executable_p "$ac_path_EGREP"; } || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.*;;
+esac
+
+
+ $ac_path_EGREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
if test "${ac_cv_header_stdc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -3560,8 +4219,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3578,8 +4236,9 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_stdc=no
+ ac_cv_header_stdc=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
@@ -3636,6 +4295,7 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ctype.h>
+#include <stdlib.h>
#if ((' ' & 0x0FF) == 0x020)
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
@@ -3655,8 +4315,8 @@ main ()
for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i))
|| toupper (i) != TOUPPER (i))
- exit(2);
- exit (0);
+ return 2;
+ return 0;
}
_ACEOF
rm -f conftest$ac_exeext
@@ -3679,12 +4339,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
ac_cv_header_stdc=no
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
if test $ac_cv_header_stdc = yes; then
cat >>confdefs.h <<\_ACEOF
@@ -3707,9 +4369,9 @@ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -3731,8 +4393,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3749,12 +4410,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
+ eval "$as_ac_Header=no"
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_Header'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
@@ -3765,10 +4428,9 @@ fi
done
-# Check whether --enable-alsa or --disable-alsa was given.
+# Check whether --enable-alsa was given.
if test "${enable_alsa+set}" = set; then
- enableval="$enable_alsa"
- case "${enableval}" in
+ enableval=$enable_alsa; case "${enableval}" in
yes) COMPILE_ALSA=yes ;;
no) COMPILE_ALSA=no ;;
*) COMPILE_ALSA=yes ;;
@@ -3778,18 +4440,19 @@ else
for ac_header in alsa/asoundlib.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
else
# Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -3808,8 +4471,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3826,15 +4488,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -3868,9 +4531,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
+
rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
@@ -3894,43 +4558,37 @@ echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
+ ( cat <<\_ASBOX
## -------------------------------- ##
## Report this to classpath@gnu.org ##
## -------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
eval "$as_ac_Header=\$ac_header_preproc"
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
fi
if test `eval echo '${'$as_ac_Header'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
- echo "$as_me:$LINENO: checking for snd_seq_open in -lasound" >&5
-echo $ECHO_N "checking for snd_seq_open in -lasound... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for snd_seq_open in -lasound" >&5
+echo $ECHO_N "checking for snd_seq_open in -lasound... $ECHO_C" >&6; }
if test "${ac_cv_lib_asound_snd_seq_open+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lasound $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -3938,17 +4596,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char snd_seq_open ();
int
main ()
{
-snd_seq_open ();
+return snd_seq_open ();
;
return 0;
}
@@ -3962,8 +4620,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -3980,14 +4637,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_asound_snd_seq_open=no
+ ac_cv_lib_asound_snd_seq_open=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_seq_open" >&5
-echo "${ECHO_T}$ac_cv_lib_asound_snd_seq_open" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_seq_open" >&5
+echo "${ECHO_T}$ac_cv_lib_asound_snd_seq_open" >&6; }
if test $ac_cv_lib_asound_snd_seq_open = yes; then
COMPILE_ALSA=yes
else
@@ -4000,7 +4658,8 @@ fi
done
-fi;
+fi
+
if test "x${COMPILE_ALSA}" = xyes; then
@@ -4012,10 +4671,9 @@ else
fi
-# Check whether --enable-dssi or --disable-dssi was given.
+# Check whether --enable-dssi was given.
if test "${enable_dssi+set}" = set; then
- enableval="$enable_dssi"
- case "${enableval}" in
+ enableval=$enable_dssi; case "${enableval}" in
yes) COMPILE_DSSI=yes ;;
no) COMPILE_DSSI=no ;;
*) COMPILE_DSSI=yes ;;
@@ -4025,18 +4683,19 @@ else
for ac_header in dssi.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
else
# Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4055,8 +4714,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -4073,15 +4731,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4115,9 +4774,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
+
rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
@@ -4141,25 +4801,24 @@ echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
+ ( cat <<\_ASBOX
## -------------------------------- ##
## Report this to classpath@gnu.org ##
## -------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
eval "$as_ac_Header=\$ac_header_preproc"
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
fi
if test `eval echo '${'$as_ac_Header'}'` = yes; then
@@ -4173,7 +4832,8 @@ fi
done
-fi;
+fi
+
if test "x${COMPILE_DSSI}" = xyes; then
@@ -4185,17 +4845,17 @@ else
fi
-# Check whether --enable-gtk-peer or --disable-gtk-peer was given.
+# Check whether --enable-gtk-peer was given.
if test "${enable_gtk_peer+set}" = set; then
- enableval="$enable_gtk_peer"
- case "${enableval}" in
+ enableval=$enable_gtk_peer; case "${enableval}" in
yes) COMPILE_GTK_PEER=yes ;;
no) COMPILE_GTK_PEER=no ;;
*) COMPILE_GTK_PEER=yes ;;
esac
else
COMPILE_GTK_PEER=yes
-fi;
+fi
+
if test "x${COMPILE_GTK_PEER}" = xyes; then
@@ -4207,25 +4867,25 @@ else
fi
-# Check whether --enable-gtk-peers or --disable-gtk-peers was given.
+# Check whether --enable-gtk-peers was given.
if test "${enable_gtk_peers+set}" = set; then
- enableval="$enable_gtk_peers"
- { { echo "$as_me:$LINENO: error: No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer" >&5
+ enableval=$enable_gtk_peers; { { echo "$as_me:$LINENO: error: No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer" >&5
echo "$as_me: error: No --enable-gtk-peers (or --disable-gtk-peers) option; you want --enable-gtk-peer" >&2;}
{ (exit 1); exit 1; }; }
-fi;
+fi
-# Check whether --enable-gtk-cairo or --disable-gtk-cairo was given.
+
+# Check whether --enable-gtk-cairo was given.
if test "${enable_gtk_cairo+set}" = set; then
- enableval="$enable_gtk_cairo"
- case "${enableval}" in
+ enableval=$enable_gtk_cairo; case "${enableval}" in
yes) GTK_CAIRO_ENABLED=true ;;
no) GTK_CAIRO_ENABLED=false ;;
*) GTK_CAIRO_ENABLED=true ;;
esac
else
GTK_CAIRO_ENABLED=false
-fi;
+fi
+
if test "x${GTK_CAIRO_ENABLED}" = xtrue; then
@@ -4245,17 +4905,17 @@ else
fi
-# Check whether --enable-qt-peer or --disable-qt-peer was given.
+# Check whether --enable-qt-peer was given.
if test "${enable_qt_peer+set}" = set; then
- enableval="$enable_qt_peer"
- case "${enableval}" in
+ enableval=$enable_qt_peer; case "${enableval}" in
yes) COMPILE_QT_PEER=yes ;;
no) COMPILE_QT_PEER=no ;;
*) COMPILE_QT_PEER=yes ;;
esac
else
COMPILE_QT_PEER=no
-fi;
+fi
+
if test "x${COMPILE_QT_PEER}" = xyes; then
@@ -4269,46 +4929,46 @@ fi
-# Check whether --with-native-libdir or --without-native-libdir was given.
+# Check whether --with-native-libdir was given.
if test "${with_native_libdir+set}" = set; then
- withval="$with_native_libdir"
-
- nativelibdir=${withval}
+ withval=$with_native_libdir;
+ nativeexeclibdir=${withval}
else
- nativelibdir='${libdir}/${PACKAGE}'
+ nativeexeclibdir='${libdir}/${PACKAGE}'
-fi;
+fi
-# Check whether --with-glibj-dir or --without-glibj-dir was given.
-if test "${with_glibj_dir+set}" = set; then
- withval="$with_glibj_dir"
+# Check whether --with-glibj-dir was given.
+if test "${with_glibj_dir+set}" = set; then
+ withval=$with_glibj_dir;
glibjdir=${withval}
else
glibjdir='${datadir}/${PACKAGE}'
-fi;
+fi
+
-# Check whether --enable-regen-headers or --disable-regen-headers was given.
+# Check whether --enable-regen-headers was given.
if test "${enable_regen_headers+set}" = set; then
- enableval="$enable_regen_headers"
- case "${enableval}" in
+ enableval=$enable_regen_headers; case "${enableval}" in
yes) REGENERATE_JNI_HEADERS=yes ;;
no) REGENERATE_JNI_HEADERS=no ;;
*) REGENERATE_JNI_HEADERS=no ;;
esac
else
REGENERATE_JNI_HEADERS=no
-fi;
+fi
+
if test "x${REGENERATE_JNI_HEADERS}" = xyes; then
@@ -4320,15 +4980,15 @@ else
fi
-echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
+ { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
fi
# Find a good install program. We prefer a C program (faster),
@@ -4344,8 +5004,8 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4367,7 +5027,7 @@ case $as_dir/ in
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; }; then
if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
@@ -4386,21 +5046,22 @@ case $as_dir/ in
;;
esac
done
+IFS=$as_save_IFS
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
- # removed, or if the path is relative.
+ # removed, or if the value is a relative name.
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -4412,10 +5073,9 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-# Check whether --enable-static or --disable-static was given.
+# Check whether --enable-static was given.
if test "${enable_static+set}" = set; then
- enableval="$enable_static"
- p=${PACKAGE-default}
+ enableval=$enable_static; p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
@@ -4433,11 +5093,11 @@ no) enable_static=no ;;
esac
else
enable_static=no
-fi;
-# Check whether --enable-shared or --disable-shared was given.
+fi
+
+# Check whether --enable-shared was given.
if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- p=${PACKAGE-default}
+ enableval=$enable_shared; p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
@@ -4455,11 +5115,11 @@ no) enable_shared=no ;;
esac
else
enable_shared=yes
-fi;
-# Check whether --enable-fast-install or --disable-fast-install was given.
+fi
+
+# Check whether --enable-fast-install was given.
if test "${enable_fast_install+set}" = set; then
- enableval="$enable_fast_install"
- p=${PACKAGE-default}
+ enableval=$enable_fast_install; p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
@@ -4477,20 +5137,21 @@ no) enable_fast_install=no ;;
esac
else
enable_fast_install=yes
-fi;
+fi
+
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
+# Check whether --with-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi;
+fi
+
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -4519,11 +5180,11 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
;;
esac
elif test "$with_gnu_ld" = yes; then
- echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
fi
if test "${lt_cv_path_LD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4552,17 +5213,17 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
+ { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
if test "${lt_cv_prog_gnu_ld+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4573,25 +5234,25 @@ else
lt_cv_prog_gnu_ld=no
fi
fi
-echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$lt_cv_prog_gnu_ld
-echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; }
if test "${lt_cv_ld_reload_flag+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
lt_cv_ld_reload_flag='-r'
fi
-echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; }
reload_flag=$lt_cv_ld_reload_flag
test -n "$reload_flag" && reload_flag=" $reload_flag"
-echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; }
if test "${lt_cv_path_NM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4626,11 +5287,11 @@ fi
fi
NM="$lt_cv_path_NM"
-echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
+{ echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6; }
-echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
-echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6; }
if test "${lt_cv_deplibs_check_method+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4792,8 +5453,8 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
esac
fi
-echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; }
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
@@ -4803,8 +5464,8 @@ deplibs_check_method=$lt_cv_deplibs_check_method
# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
# find the maximum length of command line arguments
-echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; }
if test "${lt_cv_sys_max_cmd_len+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4855,11 +5516,11 @@ else
fi
if test -n "$lt_cv_sys_max_cmd_len" ; then
- echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+ { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; }
else
- echo "$as_me:$LINENO: result: none" >&5
-echo "${ECHO_T}none" >&6
+ { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
fi
@@ -4867,8 +5528,8 @@ fi
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; }
if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4922,17 +5583,17 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
- echo "$as_me:$LINENO: checking for file" >&5
-echo $ECHO_N "checking for file... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6; }
if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -4986,11 +5647,11 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6
+ { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
else
@@ -5005,8 +5666,8 @@ esac
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5019,32 +5680,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
+ { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5057,27 +5720,41 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- RANLIB=$ac_ct_RANLIB
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
else
RANLIB="$ac_cv_prog_RANLIB"
fi
@@ -5085,8 +5762,8 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_STRIP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5099,32 +5776,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6
+ { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5137,27 +5816,41 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_STRIP="strip"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- STRIP=$ac_ct_STRIP
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
else
STRIP="$ac_cv_prog_STRIP"
fi
@@ -5172,22 +5865,22 @@ test "$GCC" = yes && libtool_flags="$libtool_flags --with-gcc"
test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+# Check whether --enable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
- enableval="$enable_libtool_lock"
+ enableval=$enable_libtool_lock;
+fi
-fi;
test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
-# Check whether --with-pic or --without-pic was given.
+# Check whether --with-pic was given.
if test "${with_pic+set}" = set; then
- withval="$with_pic"
- pic_mode="$withval"
+ withval=$with_pic; pic_mode="$withval"
else
pic_mode=default
-fi;
+fi
+
test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
@@ -5196,7 +5889,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
case $host in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5199 "configure"' > conftest.$ac_ext
+ echo '#line 5892 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -5301,25 +5994,19 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
- echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; }
if test "${lt_cv_cc_needs_belf+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -5343,8 +6030,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5361,8 +6047,9 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-lt_cv_cc_needs_belf=no
+ lt_cv_cc_needs_belf=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
ac_ext=c
@@ -5372,8 +6059,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; }
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS="$SAVE_CFLAGS"
@@ -5403,39 +6090,58 @@ _ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
+ ;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-} |
+ esac |
+ sort
+) |
sed '
+ /^ac_cv_env_/b end
t clear
- : clear
+ :clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
if diff $cache_file confcache >/dev/null 2>&1; then :; else
if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ test "x$cache_file" != "x/dev/null" &&
+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- echo "not updating unwritable cache $cache_file"
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -5495,8 +6201,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5509,32 +6215,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5547,36 +6255,51 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5589,74 +6312,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
+ fi
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5670,7 +6353,7 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
@@ -5681,6 +6364,7 @@ do
fi
done
done
+IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
@@ -5698,22 +6382,23 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5726,36 +6411,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5768,29 +6455,45 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CC" && break
done
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
fi
fi
@@ -5803,27 +6506,26 @@ See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
+echo "$as_me:$LINENO: checking for C compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version >&5\"") >&5
+ (eval $ac_compiler --version >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v >&5\"") >&5
+ (eval $ac_compiler -v >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V >&5\"") >&5
+ (eval $ac_compiler -V >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
if test "${ac_cv_c_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -5854,8 +6556,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5872,24 +6573,28 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -5913,8 +6618,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -5931,97 +6635,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
int
main ()
{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+
;
return 0;
}
_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
+rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
@@ -6030,8 +6660,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6043,81 +6672,24 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
+ :
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
+
int
main ()
{
-exit (42);
+
;
return 0;
}
@@ -6131,8 +6703,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6144,30 +6715,104 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- :
+ ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-continue
+
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
int
main ()
{
-exit (42);
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
-rm -f conftest.$ac_objext
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
@@ -6176,8 +6821,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6189,27 +6833,36 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- break
+ ac_cv_prog_cc_c89=$ac_arg
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+ xno)
+ { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -6218,8 +6871,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
depcc="$CC" am_compiler_list=
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -6308,8 +6961,8 @@ else
fi
fi
-echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
@@ -6330,8 +6983,8 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -6391,9 +7044,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6431,6 +7085,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -6448,8 +7103,8 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
@@ -6498,9 +7153,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6538,6 +7194,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -6559,18 +7216,22 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_ext=cc
+ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -6583,36 +7244,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
+ { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$CXX" && break
done
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -6625,55 +7288,70 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CXX" && break
done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
- CXX=$ac_ct_CXX
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
fi
-
+ fi
+fi
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C++ compiler version" >&5
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version >&5\"") >&5
+ (eval $ac_compiler --version >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v >&5\"") >&5
+ (eval $ac_compiler -v >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V >&5\"") >&5
+ (eval $ac_compiler -V >&5) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -6704,8 +7382,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6722,24 +7399,28 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
GXX=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
if test "${ac_cv_prog_cxx_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -6763,8 +7444,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6781,47 +7461,18 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
+ CXXFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
+
int
main ()
{
-exit (42);
+
;
return 0;
}
@@ -6835,8 +7486,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6853,20 +7503,19 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-$ac_declaration
+
int
main ()
{
-exit (42);
+
;
return 0;
}
@@ -6880,8 +7529,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -6893,21 +7541,40 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- break
+ ac_cv_prog_cxx_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -6916,8 +7583,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
depcc="$CXX" am_compiler_list=
-echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -7006,8 +7673,8 @@ else
fi
fi
-echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
@@ -7022,13 +7689,13 @@ else
am__fastdepCXX_FALSE=
fi
-ac_ext=cc
+ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
if test -z "$CXXCPP"; then
if test "${ac_cv_prog_CXXCPP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -7084,9 +7751,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -7124,6 +7792,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -7141,8 +7810,8 @@ fi
else
ac_cv_prog_CXXCPP=$CXXCPP
fi
-echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$CXXCPP" >&6
+{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6; }
ac_preproc_ok=false
for ac_cxx_preproc_warn_flag in '' yes
do
@@ -7191,9 +7860,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
# Broken: fails on valid input.
continue
fi
+
rm -f conftest.err conftest.$ac_ext
- # OK, works on sane cases. Now check whether non-existent headers
+ # OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -7231,6 +7901,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_preproc_ok=:
break
fi
+
rm -f conftest.err conftest.$ac_ext
done
@@ -7282,8 +7953,8 @@ exec 5>>./config.log
if test "x${COMPILE_COLLECTIONS}" = xyes; then
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PERL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -7298,38 +7969,39 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
PERL=$ac_cv_path_PERL
-
if test -n "$PERL"; then
- echo "$as_me:$LINENO: result: $PERL" >&5
-echo "${ECHO_T}$PERL" >&6
+ { echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- ac_config_files="$ac_config_files lib/mkcollections.pl"
- ac_config_commands="$ac_config_commands mkcollections.pl"
+ ac_config_files="$ac_config_files lib/mkcollections.pl"
+
+ ac_config_commands="$ac_config_commands mkcollections.pl"
fi
if test "x${COMPILE_JNI}" = xyes; then
- echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
if test "${ac_cv_header_stdc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -7361,8 +8033,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7379,8 +8050,9 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_stdc=no
+ ac_cv_header_stdc=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
@@ -7437,6 +8109,7 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ctype.h>
+#include <stdlib.h>
#if ((' ' & 0x0FF) == 0x020)
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
@@ -7456,8 +8129,8 @@ main ()
for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i))
|| toupper (i) != TOUPPER (i))
- exit(2);
- exit (0);
+ return 2;
+ return 0;
}
_ACEOF
rm -f conftest$ac_exeext
@@ -7480,12 +8153,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
ac_cv_header_stdc=no
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
if test $ac_cv_header_stdc = yes; then
cat >>confdefs.h <<\_ACEOF
@@ -7495,8 +8170,8 @@ _ACEOF
fi
- echo "$as_me:$LINENO: checking size of void *" >&5
-echo $ECHO_N "checking size of void *... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking size of void *" >&5
+echo $ECHO_N "checking size of void *... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_void_p+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -7528,8 +8203,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7546,7 +8220,9 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
if test x$ac_cv_sizeof_void_p != x ; then break; fi
done
@@ -7558,8 +8234,8 @@ if test x$ac_cv_sizeof_void_p = x ; then
echo "$as_me: error: cannot determine a size for void *" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
-echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
+echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
@@ -7567,8 +8243,8 @@ _ACEOF
- echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
if test "${ac_cv_c_bigendian+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -7602,8 +8278,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7644,8 +8319,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7662,14 +8336,17 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_bigendian=no
+ ac_cv_c_bigendian=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_c_bigendian = unknown; then
if test "$cross_compiling" = yes; then
@@ -7712,15 +8389,17 @@ sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
ac_cv_c_bigendian=yes
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
if test $ac_cv_c_bigendian = unknown; then
-echo "$as_me:$LINENO: checking to probe for byte ordering" >&5
-echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking to probe for byte ordering" >&5
+echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6; }
cat >conftest.c <<EOF
short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
@@ -7748,8 +8427,8 @@ EOF
echo $ac_n 'guessing bigendian ... ' >&6
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
fi
if test $ac_cv_c_bigendian = yes; then
@@ -7803,18 +8482,19 @@ for ac_header in unistd.h sys/types.h sys/config.h sys/ioctl.h \
sys/mman.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
else
# Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -7833,8 +8513,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -7851,15 +8530,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_header_compiler=no
+ ac_header_compiler=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -7893,9 +8573,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
+
rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
@@ -7919,25 +8600,24 @@ echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\
echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
+ ( cat <<\_ASBOX
## -------------------------------- ##
## Report this to classpath@gnu.org ##
## -------------------------------- ##
_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
+ ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
eval "$as_ac_Header=\$ac_header_preproc"
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
fi
if test `eval echo '${'$as_ac_Header'}'` = yes; then
@@ -8068,7 +8748,6 @@ rm -f conftest*
-
for ac_func in ftruncate fsync select \
gethostname socket strerror fork pipe execve open close \
lseek fstat read write htonl memset htons connect \
@@ -8078,20 +8757,15 @@ for ac_func in ftruncate fsync select \
strerror_r \
fcntl \
mmap munmap mincore msync madvise getpagesize sysconf \
- isnan
+
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -8114,30 +8788,24 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined __stub_$ac_func || defined __stub___$ac_func
choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != $ac_func;
+return $ac_func ();
;
return 0;
}
@@ -8151,8 +8819,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8169,13 +8836,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
@@ -8185,8 +8854,8 @@ fi
done
- echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
if test "${ac_cv_header_time+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8218,8 +8887,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8236,12 +8904,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_time=no
+ ac_cv_header_time=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6; }
if test $ac_cv_header_time = yes; then
cat >>confdefs.h <<\_ACEOF
@@ -8250,8 +8919,8 @@ _ACEOF
fi
- echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
-echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; }
if test "${ac_cv_struct_tm+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8281,8 +8950,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8299,12 +8967,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_struct_tm=sys/time.h
+ ac_cv_struct_tm=sys/time.h
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
-echo "${ECHO_T}$ac_cv_struct_tm" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6; }
if test $ac_cv_struct_tm = sys/time.h; then
cat >>confdefs.h <<\_ACEOF
@@ -8313,8 +8982,8 @@ _ACEOF
fi
- echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
-echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
+echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6; }
if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8347,8 +9016,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8365,7 +9033,7 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -8394,8 +9062,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8412,14 +9079,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_member_struct_tm_tm_zone=no
+ ac_cv_member_struct_tm_tm_zone=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
-echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
+echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6; }
if test $ac_cv_member_struct_tm_tm_zone = yes; then
cat >>confdefs.h <<_ACEOF
@@ -8436,31 +9105,100 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
else
- echo "$as_me:$LINENO: checking for tzname" >&5
-echo $ECHO_N "checking for tzname... $ECHO_C" >&6
-if test "${ac_cv_var_tzname+set}" = set; then
+ { echo "$as_me:$LINENO: checking whether tzname is declared" >&5
+echo $ECHO_N "checking whether tzname is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_tzname+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <time.h>
+
+int
+main ()
+{
+#ifndef tzname
+ char *p = (char *) tzname;
+ return !p;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_tzname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_tzname=no
fi
-cat >conftest.$ac_ext <<_ACEOF
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_tzname" >&5
+echo "${ECHO_T}$ac_cv_have_decl_tzname" >&6; }
+if test $ac_cv_have_decl_tzname = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME 0
+_ACEOF
+
+
+fi
+
+
+ { echo "$as_me:$LINENO: checking for tzname" >&5
+echo $ECHO_N "checking for tzname... $ECHO_C" >&6; }
+if test "${ac_cv_var_tzname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <time.h>
-#ifndef tzname /* For SGI. */
-extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
#endif
int
main ()
{
-atoi(*tzname);
+return tzname[0][0];
;
return 0;
}
@@ -8474,8 +9212,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8492,13 +9229,14 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_var_tzname=no
+ ac_cv_var_tzname=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
-echo "${ECHO_T}$ac_cv_var_tzname" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
+echo "${ECHO_T}$ac_cv_var_tzname" >&6; }
if test $ac_cv_var_tzname = yes; then
cat >>confdefs.h <<\_ACEOF
@@ -8509,8 +9247,8 @@ _ACEOF
fi
- echo "$as_me:$LINENO: checking for tm_gmtoff in struct tm" >&5
-echo $ECHO_N "checking for tm_gmtoff in struct tm... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for tm_gmtoff in struct tm" >&5
+echo $ECHO_N "checking for tm_gmtoff in struct tm... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -8535,8 +9273,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8553,16 +9290,16 @@ cat >>confdefs.h <<\_ACEOF
#define STRUCT_TM_HAS_GMTOFF 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking for global timezone variable" >&5
-echo $ECHO_N "checking for global timezone variable... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ { echo "$as_me:$LINENO: checking for global timezone variable" >&5
+echo $ECHO_N "checking for global timezone variable... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -8587,8 +9324,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8605,16 +9341,16 @@ cat >>confdefs.h <<\_ACEOF
#define HAVE_TIMEZONE 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking for global _timezone variable" >&5
-echo $ECHO_N "checking for global _timezone variable... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ { echo "$as_me:$LINENO: checking for global _timezone variable" >&5
+echo $ECHO_N "checking for global _timezone variable... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -8639,8 +9375,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8657,23 +9392,26 @@ cat >>confdefs.h <<\_ACEOF
#define HAVE_UNDERSCORE_TIMEZONE 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
if test "${ac_cv_c_const+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8713,6 +9451,7 @@ main ()
char const *s = 0 ? (char *) 0 : (char const *) 0;
*t++ = 0;
+ if (s) return 0;
}
{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
int x[] = {25, 17};
@@ -8731,7 +9470,9 @@ main ()
}
{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
const int foo = 10;
+ if (!foo) return 0;
}
+ return !x[0] && !zero.x;
#endif
;
@@ -8747,8 +9488,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8765,12 +9505,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_const=no
+ ac_cv_c_const=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
if test $ac_cv_c_const = no; then
cat >>confdefs.h <<\_ACEOF
@@ -8779,8 +9520,8 @@ _ACEOF
fi
- echo "$as_me:$LINENO: checking for __attribute__" >&5
-echo $ECHO_N "checking for __attribute__... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for __attribute__" >&5
+echo $ECHO_N "checking for __attribute__... $ECHO_C" >&6; }
if test "${ac_cv_c_attribute+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8803,8 +9544,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -8821,14 +9561,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_attribute=no
+ ac_cv_c_attribute=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_attribute" >&5
-echo "${ECHO_T}$ac_cv_c_attribute" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_attribute" >&5
+echo "${ECHO_T}$ac_cv_c_attribute" >&6; }
case $ac_cv_c_attribute in
@@ -8858,13 +9599,13 @@ esac
prefix="$acl_save_prefix"
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
+# Check whether --with-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- test "$withval" = no || with_gnu_ld=yes
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
else
with_gnu_ld=no
-fi;
+fi
+
# Prepare PATH_SEPARATOR.
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
@@ -8881,8 +9622,8 @@ fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -8911,11 +9652,11 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
;;
esac
elif test "$with_gnu_ld" = yes; then
- echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
else
- echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
fi
if test "${acl_cv_path_LD+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -8944,17 +9685,17 @@ fi
LD="$acl_cv_path_LD"
if test -n "$LD"; then
- echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6
+ { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
if test "${acl_cv_prog_gnu_ld+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8965,14 +9706,14 @@ else
acl_cv_prog_gnu_ld=no
fi
fi
-echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$acl_cv_prog_gnu_ld
- echo "$as_me:$LINENO: checking for shared library run path origin" >&5
-echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
if test "${acl_cv_rpath+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -8984,8 +9725,8 @@ else
acl_cv_rpath=done
fi
-echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
-echo "${ECHO_T}$acl_cv_rpath" >&6
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
wl="$acl_cv_wl"
libext="$acl_cv_libext"
shlibext="$acl_cv_shlibext"
@@ -8993,13 +9734,13 @@ echo "${ECHO_T}$acl_cv_rpath" >&6
hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
hardcode_direct="$acl_cv_hardcode_direct"
hardcode_minus_L="$acl_cv_hardcode_minus_L"
- # Check whether --enable-rpath or --disable-rpath was given.
+ # Check whether --enable-rpath was given.
if test "${enable_rpath+set}" = set; then
- enableval="$enable_rpath"
- :
+ enableval=$enable_rpath; :
else
enable_rpath=yes
-fi;
+fi
+
@@ -9021,10 +9762,9 @@ fi;
prefix="$acl_save_prefix"
-# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
+# Check whether --with-libiconv-prefix was given.
if test "${with_libiconv_prefix+set}" = set; then
- withval="$with_libiconv_prefix"
-
+ withval=$with_libiconv_prefix;
if test "X$withval" = "Xno"; then
use_additional=no
else
@@ -9047,7 +9787,8 @@ if test "${with_libiconv_prefix+set}" = set; then
fi
fi
-fi;
+fi
+
LIBICONV=
LTLIBICONV=
INCICONV=
@@ -9414,20 +10155,15 @@ fi;
done
- echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
if test "${am_cv_func_iconv+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -9454,8 +10190,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -9472,18 +10207,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test "$am_cv_func_iconv" != yes; then
am_save_LIBS="$LIBS"
LIBS="$LIBS $LIBICONV"
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -9510,8 +10242,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -9529,15 +10260,17 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS="$am_save_LIBS"
fi
fi
-echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
if test "$am_cv_func_iconv" = yes; then
cat >>confdefs.h <<\_ACEOF
@@ -9546,10 +10279,10 @@ _ACEOF
fi
if test "$am_cv_lib_iconv" = yes; then
- echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
- echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6
+ { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+ { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
else
CPPFLAGS="$am_save_CPPFLAGS"
LIBICONV=
@@ -9559,8 +10292,8 @@ echo "${ECHO_T}$LIBICONV" >&6
if test "$am_cv_func_iconv" = yes; then
- echo "$as_me:$LINENO: checking for iconv declaration" >&5
-echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
if test "${am_cv_proto_iconv+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -9601,8 +10334,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -9619,17 +10351,18 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-am_cv_proto_iconv_arg1="const"
+ am_cv_proto_iconv_arg1="const"
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
fi
am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- echo "$as_me:$LINENO: result: ${ac_t:-
+ { echo "$as_me:$LINENO: result: ${ac_t:-
}$am_cv_proto_iconv" >&5
echo "${ECHO_T}${ac_t:-
- }$am_cv_proto_iconv" >&6
+ }$am_cv_proto_iconv" >&6; }
cat >>confdefs.h <<_ACEOF
#define ICONV_CONST $am_cv_proto_iconv_arg1
@@ -9660,8 +10393,8 @@ _ACEOF
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -9676,28 +10409,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -9708,25 +10442,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for libxml-2.0 >= 2.6.8" >&5
-echo $ECHO_N "checking for libxml-2.0 >= 2.6.8... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for libxml-2.0 >= 2.6.8" >&5
+echo $ECHO_N "checking for libxml-2.0 >= 2.6.8... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "libxml-2.0 >= 2.6.8" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking XML_CFLAGS" >&5
-echo $ECHO_N "checking XML_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking XML_CFLAGS" >&5
+echo $ECHO_N "checking XML_CFLAGS... $ECHO_C" >&6; }
XML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.6.8"`
- echo "$as_me:$LINENO: result: $XML_CFLAGS" >&5
-echo "${ECHO_T}$XML_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $XML_CFLAGS" >&5
+echo "${ECHO_T}$XML_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking XML_LIBS" >&5
-echo $ECHO_N "checking XML_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking XML_LIBS" >&5
+echo $ECHO_N "checking XML_LIBS... $ECHO_C" >&6; }
XML_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.6.8"`
- echo "$as_me:$LINENO: result: $XML_LIBS" >&5
-echo "${ECHO_T}$XML_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $XML_LIBS" >&5
+echo "${ECHO_T}$XML_LIBS" >&6; }
else
XML_CFLAGS=""
XML_LIBS=""
@@ -9758,8 +10492,8 @@ echo "$as_me: error: Library requirements (libxml-2.0 >= 2.6.8) not met; conside
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -9774,28 +10508,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -9806,25 +10541,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for libxslt >= 1.1.11" >&5
-echo $ECHO_N "checking for libxslt >= 1.1.11... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for libxslt >= 1.1.11" >&5
+echo $ECHO_N "checking for libxslt >= 1.1.11... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "libxslt >= 1.1.11" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking XSLT_CFLAGS" >&5
-echo $ECHO_N "checking XSLT_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking XSLT_CFLAGS" >&5
+echo $ECHO_N "checking XSLT_CFLAGS... $ECHO_C" >&6; }
XSLT_CFLAGS=`$PKG_CONFIG --cflags "libxslt >= 1.1.11"`
- echo "$as_me:$LINENO: result: $XSLT_CFLAGS" >&5
-echo "${ECHO_T}$XSLT_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $XSLT_CFLAGS" >&5
+echo "${ECHO_T}$XSLT_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking XSLT_LIBS" >&5
-echo $ECHO_N "checking XSLT_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking XSLT_LIBS" >&5
+echo $ECHO_N "checking XSLT_LIBS... $ECHO_C" >&6; }
XSLT_LIBS=`$PKG_CONFIG --libs "libxslt >= 1.1.11"`
- echo "$as_me:$LINENO: result: $XSLT_LIBS" >&5
-echo "${ECHO_T}$XSLT_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $XSLT_LIBS" >&5
+echo "${ECHO_T}$XSLT_LIBS" >&6; }
else
XSLT_CFLAGS=""
XSLT_LIBS=""
@@ -9857,15 +10592,18 @@ echo "$as_me: error: Library requirements (libxslt >= 1.1.11) not met; consider
fi
if test "x${COMPILE_GTK_PEER}" = xyes; then
- echo "$as_me:$LINENO: checking for X" >&5
-echo $ECHO_N "checking for X... $ECHO_C" >&6
+if test "x$ac_path_x_has_been_run" != xyes; then
+ { echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6; }
+
+ac_path_x_has_been_run=yes
-# Check whether --with-x or --without-x was given.
+# Check whether --with-x was given.
if test "${with_x+set}" = set; then
- withval="$with_x"
+ withval=$with_x;
+fi
-fi;
# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
if test "x$with_x" = xno; then
# The user explicitly disabled X.
@@ -9880,7 +10618,7 @@ else
else
# One or both of the vars are not set, and there is no cached value.
ac_x_includes=no ac_x_libraries=no
-rm -fr conftest.dir
+rm -f -r conftest.dir
if mkdir conftest.dir; then
cd conftest.dir
# Make sure to not put "make" in the Imakefile rules, since we grep it out.
@@ -9888,7 +10626,7 @@ if mkdir conftest.dir; then
acfindx:
@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
_ACEOF
- if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
# Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
@@ -9902,7 +10640,7 @@ _ACEOF
# bogus both because they are the default anyway, and because
# using them would break gcc on systems where it needs fixed includes.
case $ac_im_incroot in
- /usr/include) ;;
+ /usr/include) ac_x_includes= ;;
*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
esac
case $ac_im_usrlibdir in
@@ -9911,7 +10649,7 @@ _ACEOF
esac
fi
cd ..
- rm -fr conftest.dir
+ rm -f -r conftest.dir
fi
# Standard set of common directories for X headers.
@@ -9952,7 +10690,7 @@ ac_x_header_dirs='
/usr/openwin/share/include'
if test "$ac_x_includes" = no; then
- # Guess where to find include files, by looking for Intrinsic.h.
+ # Guess where to find include files, by looking for Xlib.h.
# First, try using that file with no special directory specified.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -9960,7 +10698,7 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <X11/Intrinsic.h>
+#include <X11/Xlib.h.h>
_ACEOF
if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
@@ -9987,12 +10725,13 @@ else
sed 's/^/| /' conftest.$ac_ext >&5
for ac_dir in $ac_x_header_dirs; do
- if test -r "$ac_dir/X11/Intrinsic.h"; then
+ if test -r "$ac_dir/X11/Xlib.h"; then
ac_x_includes=$ac_dir
break
fi
done
fi
+
rm -f conftest.err conftest.$ac_ext
fi # $ac_x_includes = no
@@ -10002,22 +10741,17 @@ if test "$ac_x_libraries" = no; then
# Don't add to $LIBS permanently.
ac_save_LIBS=$LIBS
LIBS="-lXt $LIBS"
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <X11/Intrinsic.h>
+#include <X11/Xlib.h>
int
main ()
{
-XtMalloc (0)
+XrmInitialize ()
;
return 0;
}
@@ -10031,8 +10765,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10051,18 +10784,19 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-LIBS=$ac_save_LIBS
+ LIBS=$ac_save_LIBS
for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
do
# Don't even attempt the hair of trying to link an X program!
for ac_extension in a so sl; do
- if test -r $ac_dir/libXt.$ac_extension; then
+ if test -r $ac_dir/libX11.$ac_extension; then
ac_x_libraries=$ac_dir
break 2
fi
done
done
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi # $ac_x_libraries = no
@@ -10082,8 +10816,8 @@ fi
fi # $with_x != no
if test "$have_x" != yes; then
- echo "$as_me:$LINENO: result: $have_x" >&5
-echo "${ECHO_T}$have_x" >&6
+ { echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6; }
no_x=yes
else
# If each of the values was on the command line, it overrides each guess.
@@ -10092,10 +10826,15 @@ else
# Update the cache value to reflect the command line values.
ac_cv_have_x="have_x=yes \
ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
- echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+ # It might be that x_includes is empty (headers are found in the
+ # standard search path. Then output the corresponding message
+ ac_out_x_includes=$x_includes
+ test "x$x_includes" = x && ac_out_x_includes="in standard search path"
+ { echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6; }
fi
+fi
if test "$no_x" = yes; then
# Not all programs may use this symbol, but it does not hurt to define it.
@@ -10116,15 +10855,10 @@ else
# others require no space. Words are not sufficient . . . .
case `(uname -sr) 2>/dev/null` in
"SunOS 5"*)
- echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
-echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6; }
ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -10148,8 +10882,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10166,22 +10899,18 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_R_nospace=no
+ ac_R_nospace=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test $ac_R_nospace = yes; then
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
X_LIBS="$X_LIBS -R$x_libraries"
else
LIBS="$ac_xsave_LIBS -R $x_libraries"
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -10205,8 +10934,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10223,17 +10951,18 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_R_space=no
+ ac_R_space=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test $ac_R_space = yes; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
X_LIBS="$X_LIBS -R $x_libraries"
else
- echo "$as_me:$LINENO: result: neither works" >&5
-echo "${ECHO_T}neither works" >&6
+ { echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6; }
fi
fi
LIBS=$ac_xsave_LIBS
@@ -10251,29 +10980,24 @@ echo "${ECHO_T}neither works" >&6
# libraries were built with DECnet support. And Karl Berry says
# the Alpha needs dnet_stub (dnet does not exist).
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char XOpenDisplay ();
int
main ()
{
-XOpenDisplay ();
+return XOpenDisplay ();
;
return 0;
}
@@ -10287,8 +11011,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10305,18 +11028,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6; }
if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldnet $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -10324,17 +11042,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char dnet_ntoa ();
int
main ()
{
-dnet_ntoa ();
+return dnet_ntoa ();
;
return 0;
}
@@ -10348,8 +11066,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10366,31 +11083,27 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dnet_dnet_ntoa=no
+ ac_cv_lib_dnet_dnet_ntoa=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6; }
if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
fi
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
- echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
-echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6; }
if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldnet_stub $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -10398,17 +11111,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char dnet_ntoa ();
int
main ()
{
-dnet_ntoa ();
+return dnet_ntoa ();
;
return 0;
}
@@ -10422,8 +11135,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10440,20 +11152,22 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_dnet_stub_dnet_ntoa=no
+ ac_cv_lib_dnet_stub_dnet_ntoa=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
fi
fi
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS="$ac_xsave_LIBS"
@@ -10466,17 +11180,12 @@ rm -f conftest.err conftest.$ac_objext \
# on Irix 5.2, according to T.E. Dickey.
# The functions gethostbyname, getservbyname, and inet_addr are
# in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
- echo "$as_me:$LINENO: checking for gethostbyname" >&5
-echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6; }
if test "${ac_cv_func_gethostbyname+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -10499,30 +11208,24 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef gethostbyname
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char gethostbyname ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+#if defined __stub_gethostbyname || defined __stub___gethostbyname
choke me
-#else
-char (*f) () = gethostbyname;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != gethostbyname;
+return gethostbyname ();
;
return 0;
}
@@ -10536,8 +11239,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10554,27 +11256,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_gethostbyname=no
+ ac_cv_func_gethostbyname=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6; }
if test $ac_cv_func_gethostbyname = no; then
- echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6; }
if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lnsl $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -10582,17 +11280,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char gethostbyname ();
int
main ()
{
-gethostbyname ();
+return gethostbyname ();
;
return 0;
}
@@ -10606,8 +11304,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10624,31 +11321,27 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_nsl_gethostbyname=no
+ ac_cv_lib_nsl_gethostbyname=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6; }
if test $ac_cv_lib_nsl_gethostbyname = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
fi
if test $ac_cv_lib_nsl_gethostbyname = no; then
- echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
-echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6; }
if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lbsd $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -10656,17 +11349,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char gethostbyname ();
int
main ()
{
-gethostbyname ();
+return gethostbyname ();
;
return 0;
}
@@ -10680,8 +11373,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10698,14 +11390,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_bsd_gethostbyname=no
+ ac_cv_lib_bsd_gethostbyname=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6; }
if test $ac_cv_lib_bsd_gethostbyname = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
fi
@@ -10720,17 +11413,12 @@ fi
# variants that don't use the name server (or something). -lsocket
# must be given before -lnsl if both are needed. We assume that
# if connect needs -lnsl, so does gethostbyname.
- echo "$as_me:$LINENO: checking for connect" >&5
-echo $ECHO_N "checking for connect... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6; }
if test "${ac_cv_func_connect+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -10753,30 +11441,24 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef connect
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char connect ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_connect) || defined (__stub___connect)
+#if defined __stub_connect || defined __stub___connect
choke me
-#else
-char (*f) () = connect;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != connect;
+return connect ();
;
return 0;
}
@@ -10790,8 +11472,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10808,27 +11489,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_connect=no
+ ac_cv_func_connect=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
-echo "${ECHO_T}$ac_cv_func_connect" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6; }
if test $ac_cv_func_connect = no; then
- echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; }
if test "${ac_cv_lib_socket_connect+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -10836,17 +11513,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char connect ();
int
main ()
{
-connect ();
+return connect ();
;
return 0;
}
@@ -10860,8 +11537,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10878,14 +11554,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_socket_connect=no
+ ac_cv_lib_socket_connect=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6; }
if test $ac_cv_lib_socket_connect = yes; then
X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
fi
@@ -10893,17 +11570,12 @@ fi
fi
# Guillermo Gomez says -lposix is necessary on A/UX.
- echo "$as_me:$LINENO: checking for remove" >&5
-echo $ECHO_N "checking for remove... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6; }
if test "${ac_cv_func_remove+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -10926,30 +11598,24 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef remove
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char remove ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_remove) || defined (__stub___remove)
+#if defined __stub_remove || defined __stub___remove
choke me
-#else
-char (*f) () = remove;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != remove;
+return remove ();
;
return 0;
}
@@ -10963,8 +11629,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -10981,27 +11646,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_remove=no
+ ac_cv_func_remove=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
-echo "${ECHO_T}$ac_cv_func_remove" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6; }
if test $ac_cv_func_remove = no; then
- echo "$as_me:$LINENO: checking for remove in -lposix" >&5
-echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6; }
if test "${ac_cv_lib_posix_remove+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lposix $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -11009,17 +11670,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char remove ();
int
main ()
{
-remove ();
+return remove ();
;
return 0;
}
@@ -11033,8 +11694,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -11051,14 +11711,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_posix_remove=no
+ ac_cv_lib_posix_remove=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
-echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6; }
if test $ac_cv_lib_posix_remove = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
fi
@@ -11066,17 +11727,12 @@ fi
fi
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
- echo "$as_me:$LINENO: checking for shmat" >&5
-echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6; }
if test "${ac_cv_func_shmat+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -11099,30 +11755,24 @@ cat >>conftest.$ac_ext <<_ACEOF
#undef shmat
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char shmat ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_shmat) || defined (__stub___shmat)
+#if defined __stub_shmat || defined __stub___shmat
choke me
-#else
-char (*f) () = shmat;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != shmat;
+return shmat ();
;
return 0;
}
@@ -11136,8 +11786,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -11154,27 +11803,23 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_func_shmat=no
+ ac_cv_func_shmat=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
-echo "${ECHO_T}$ac_cv_func_shmat" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6; }
if test $ac_cv_func_shmat = no; then
- echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
-echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6; }
if test "${ac_cv_lib_ipc_shmat+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lipc $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -11182,17 +11827,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char shmat ();
int
main ()
{
-shmat ();
+return shmat ();
;
return 0;
}
@@ -11206,8 +11851,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -11224,14 +11868,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_ipc_shmat=no
+ ac_cv_lib_ipc_shmat=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
-echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6; }
if test $ac_cv_lib_ipc_shmat = yes; then
X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
fi
@@ -11248,18 +11893,13 @@ fi
# These have to be linked with before -lX11, unlike the other
# libraries we check for below, so use a different variable.
# John Interrante, Karl Berry
- echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
-echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6; }
if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -11267,17 +11907,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char IceConnectionNumber ();
int
main ()
{
-IceConnectionNumber ();
+return IceConnectionNumber ();
;
return 0;
}
@@ -11291,8 +11931,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -11309,14 +11948,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_ICE_IceConnectionNumber=no
+ ac_cv_lib_ICE_IceConnectionNumber=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
fi
@@ -11330,18 +11970,13 @@ fi
echo "$as_me: error: GTK+ peers requested but no X library available" >&2;}
{ (exit 1); exit 1; }; }
fi
- echo "$as_me:$LINENO: checking for XTestQueryExtension in -lXtst" >&5
-echo $ECHO_N "checking for XTestQueryExtension in -lXtst... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for XTestQueryExtension in -lXtst" >&5
+echo $ECHO_N "checking for XTestQueryExtension in -lXtst... $ECHO_C" >&6; }
if test "${ac_cv_lib_Xtst_XTestQueryExtension+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lXtst ${X_LIBS} $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -11349,17 +11984,17 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char XTestQueryExtension ();
int
main ()
{
-XTestQueryExtension ();
+return XTestQueryExtension ();
;
return 0;
}
@@ -11373,8 +12008,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -11391,14 +12025,15 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_Xtst_XTestQueryExtension=no
+ ac_cv_lib_Xtst_XTestQueryExtension=no
fi
+
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_Xtst_XTestQueryExtension" >&5
-echo "${ECHO_T}$ac_cv_lib_Xtst_XTestQueryExtension" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_Xtst_XTestQueryExtension" >&5
+echo "${ECHO_T}$ac_cv_lib_Xtst_XTestQueryExtension" >&6; }
if test $ac_cv_lib_Xtst_XTestQueryExtension = yes; then
true
else
@@ -11413,8 +12048,8 @@ fi
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11429,28 +12064,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -11461,25 +12097,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0" >&5
-echo $ECHO_N "checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0" >&5
+echo $ECHO_N "checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5
-echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5
+echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6; }
GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0"`
- echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5
-echo "${ECHO_T}$GTK_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5
+echo "${ECHO_T}$GTK_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking GTK_LIBS" >&5
-echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking GTK_LIBS" >&5
+echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6; }
GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gdk-pixbuf-2.0"`
- echo "$as_me:$LINENO: result: $GTK_LIBS" >&5
-echo "${ECHO_T}$GTK_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $GTK_LIBS" >&5
+echo "${ECHO_T}$GTK_LIBS" >&6; }
else
GTK_CFLAGS=""
GTK_LIBS=""
@@ -11513,8 +12149,8 @@ echo "$as_me: error: Library requirements (gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 gd
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11529,28 +12165,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -11561,25 +12198,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for cairo >= 0.5.0" >&5
-echo $ECHO_N "checking for cairo >= 0.5.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for cairo >= 0.5.0" >&5
+echo $ECHO_N "checking for cairo >= 0.5.0... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "cairo >= 0.5.0" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking CAIRO_CFLAGS" >&5
-echo $ECHO_N "checking CAIRO_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking CAIRO_CFLAGS" >&5
+echo $ECHO_N "checking CAIRO_CFLAGS... $ECHO_C" >&6; }
CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 0.5.0"`
- echo "$as_me:$LINENO: result: $CAIRO_CFLAGS" >&5
-echo "${ECHO_T}$CAIRO_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $CAIRO_CFLAGS" >&5
+echo "${ECHO_T}$CAIRO_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking CAIRO_LIBS" >&5
-echo $ECHO_N "checking CAIRO_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking CAIRO_LIBS" >&5
+echo $ECHO_N "checking CAIRO_LIBS... $ECHO_C" >&6; }
CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 0.5.0"`
- echo "$as_me:$LINENO: result: $CAIRO_LIBS" >&5
-echo "${ECHO_T}$CAIRO_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $CAIRO_LIBS" >&5
+echo "${ECHO_T}$CAIRO_LIBS" >&6; }
else
CAIRO_CFLAGS=""
CAIRO_LIBS=""
@@ -11613,8 +12250,8 @@ echo "$as_me: error: Library requirements (cairo >= 0.5.0) not met; consider adj
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11629,28 +12266,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -11661,25 +12299,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for freetype2" >&5
-echo $ECHO_N "checking for freetype2... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for freetype2" >&5
+echo $ECHO_N "checking for freetype2... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "freetype2" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking FREETYPE2_CFLAGS" >&5
-echo $ECHO_N "checking FREETYPE2_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking FREETYPE2_CFLAGS" >&5
+echo $ECHO_N "checking FREETYPE2_CFLAGS... $ECHO_C" >&6; }
FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2"`
- echo "$as_me:$LINENO: result: $FREETYPE2_CFLAGS" >&5
-echo "${ECHO_T}$FREETYPE2_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $FREETYPE2_CFLAGS" >&5
+echo "${ECHO_T}$FREETYPE2_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking FREETYPE2_LIBS" >&5
-echo $ECHO_N "checking FREETYPE2_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking FREETYPE2_LIBS" >&5
+echo $ECHO_N "checking FREETYPE2_LIBS... $ECHO_C" >&6; }
FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2"`
- echo "$as_me:$LINENO: result: $FREETYPE2_LIBS" >&5
-echo "${ECHO_T}$FREETYPE2_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $FREETYPE2_LIBS" >&5
+echo "${ECHO_T}$FREETYPE2_LIBS" >&6; }
else
FREETYPE2_CFLAGS=""
FREETYPE2_LIBS=""
@@ -11711,8 +12349,8 @@ echo "$as_me: error: Library requirements (freetype2) not met; consider adjustin
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11727,28 +12365,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -11759,25 +12398,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for pangoft2" >&5
-echo $ECHO_N "checking for pangoft2... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for pangoft2" >&5
+echo $ECHO_N "checking for pangoft2... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "pangoft2" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking PANGOFT2_CFLAGS" >&5
-echo $ECHO_N "checking PANGOFT2_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking PANGOFT2_CFLAGS" >&5
+echo $ECHO_N "checking PANGOFT2_CFLAGS... $ECHO_C" >&6; }
PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2"`
- echo "$as_me:$LINENO: result: $PANGOFT2_CFLAGS" >&5
-echo "${ECHO_T}$PANGOFT2_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $PANGOFT2_CFLAGS" >&5
+echo "${ECHO_T}$PANGOFT2_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking PANGOFT2_LIBS" >&5
-echo $ECHO_N "checking PANGOFT2_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking PANGOFT2_LIBS" >&5
+echo $ECHO_N "checking PANGOFT2_LIBS... $ECHO_C" >&6; }
PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2"`
- echo "$as_me:$LINENO: result: $PANGOFT2_LIBS" >&5
-echo "${ECHO_T}$PANGOFT2_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $PANGOFT2_LIBS" >&5
+echo "${ECHO_T}$PANGOFT2_LIBS" >&6; }
else
PANGOFT2_CFLAGS=""
PANGOFT2_LIBS=""
@@ -11821,8 +12460,8 @@ echo "$as_me: error: Library requirements (pangoft2) not met; consider adjusting
if test -z "$PKG_CONFIG"; then
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11837,28 +12476,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-
if test -n "$PKG_CONFIG"; then
- echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-echo "${ECHO_T}$PKG_CONFIG" >&6
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "$PKG_CONFIG" = "no" ; then
@@ -11869,25 +12509,25 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for QtCore QtGui >= 4.1.0" >&5
-echo $ECHO_N "checking for QtCore QtGui >= 4.1.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for QtCore QtGui >= 4.1.0" >&5
+echo $ECHO_N "checking for QtCore QtGui >= 4.1.0... $ECHO_C" >&6; }
if $PKG_CONFIG --exists "QtCore QtGui >= 4.1.0" ; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
succeeded=yes
- echo "$as_me:$LINENO: checking QT_CFLAGS" >&5
-echo $ECHO_N "checking QT_CFLAGS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking QT_CFLAGS" >&5
+echo $ECHO_N "checking QT_CFLAGS... $ECHO_C" >&6; }
QT_CFLAGS=`$PKG_CONFIG --cflags "QtCore QtGui >= 4.1.0"`
- echo "$as_me:$LINENO: result: $QT_CFLAGS" >&5
-echo "${ECHO_T}$QT_CFLAGS" >&6
+ { echo "$as_me:$LINENO: result: $QT_CFLAGS" >&5
+echo "${ECHO_T}$QT_CFLAGS" >&6; }
- echo "$as_me:$LINENO: checking QT_LIBS" >&5
-echo $ECHO_N "checking QT_LIBS... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking QT_LIBS" >&5
+echo $ECHO_N "checking QT_LIBS... $ECHO_C" >&6; }
QT_LIBS=`$PKG_CONFIG --libs "QtCore QtGui >= 4.1.0"`
- echo "$as_me:$LINENO: result: $QT_LIBS" >&5
-echo "${ECHO_T}$QT_LIBS" >&6
+ { echo "$as_me:$LINENO: result: $QT_LIBS" >&5
+echo "${ECHO_T}$QT_LIBS" >&6; }
else
QT_CFLAGS=""
QT_LIBS=""
@@ -11915,9 +12555,9 @@ echo "${ECHO_T}$QT_LIBS" >&6
QT_INCLUDE_DIR=$($PKG_CONFIG --variable=includedir QtGui)
EXTRA_QT_INCLUDE_DIR="$QT_INCLUDE_DIR/Qt"
as_ac_File=`echo "ac_cv_file_$QT_INCLUDE_DIR/QWidget" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $QT_INCLUDE_DIR/QWidget" >&5
-echo $ECHO_N "checking for $QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6
-if eval "test \"\${$as_ac_File+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $QT_INCLUDE_DIR/QWidget" >&5
+echo $ECHO_N "checking for $QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
test "$cross_compiling" = yes &&
@@ -11930,16 +12570,17 @@ else
eval "$as_ac_File=no"
fi
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ac_res=`eval echo '${'$as_ac_File'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_File'}'` = yes; then
{ echo "$as_me:$LINENO: No extra QT_INCLUDE_DIR needed" >&5
echo "$as_me: No extra QT_INCLUDE_DIR needed" >&6;}
else
as_ac_File=`echo "ac_cv_file_$EXTRA_QT_INCLUDE_DIR/QWidget" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $EXTRA_QT_INCLUDE_DIR/QWidget" >&5
-echo $ECHO_N "checking for $EXTRA_QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6
-if eval "test \"\${$as_ac_File+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $EXTRA_QT_INCLUDE_DIR/QWidget" >&5
+echo $ECHO_N "checking for $EXTRA_QT_INCLUDE_DIR/QWidget... $ECHO_C" >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
test "$cross_compiling" = yes &&
@@ -11952,8 +12593,9 @@ else
eval "$as_ac_File=no"
fi
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ac_res=`eval echo '${'$as_ac_File'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_File'}'` = yes; then
QT_CFLAGS="$QT_CFLAGS -I$EXTRA_QT_INCLUDE_DIR"
else
@@ -11965,8 +12607,8 @@ fi
# Extract the first word of "moc", so it can be a program name with args.
set dummy moc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_MOC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -11979,25 +12621,27 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_MOC="moc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
MOC=$ac_cv_prog_MOC
if test -n "$MOC"; then
- echo "$as_me:$LINENO: result: $MOC" >&5
-echo "${ECHO_T}$MOC" >&6
+ { echo "$as_me:$LINENO: result: $MOC" >&5
+echo "${ECHO_T}$MOC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$HAVE_QT4" = "xno"; then
{ echo "$as_me:$LINENO: Looking for QT_CFLAGS and QT_LIBS without pkg-config" >&5
@@ -12005,23 +12649,23 @@ echo "$as_me: Looking for QT_CFLAGS and QT_LIBS without pkg-config" >&6;}
case "$host_os" in
darwin*)
-# Check whether --with-qt4dir or --without-qt4dir was given.
+# Check whether --with-qt4dir was given.
if test "${with_qt4dir+set}" = set; then
- withval="$with_qt4dir"
- QT4DIR=$withval
+ withval=$with_qt4dir; QT4DIR=$withval
+
+fi
-fi;
if test x"$QT4DIR" = x ; then
{ { echo "$as_me:$LINENO: error: *** No path for Qt4 --with-qt4dir option given" >&5
echo "$as_me: error: *** No path for Qt4 --with-qt4dir option given" >&2;}
{ (exit 1); exit 1; }; }
fi
- echo "$as_me:$LINENO: result: QT4DIR... $QT4DIR" >&5
-echo "${ECHO_T}QT4DIR... $QT4DIR" >&6
+ { echo "$as_me:$LINENO: result: QT4DIR... $QT4DIR" >&5
+echo "${ECHO_T}QT4DIR... $QT4DIR" >&6; }
# Extract the first word of "moc", so it can be a program name with args.
set dummy moc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_MOC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12034,25 +12678,27 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_MOC="$QT4DIR/bin/moc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
MOC=$ac_cv_prog_MOC
if test -n "$MOC"; then
- echo "$as_me:$LINENO: result: $MOC" >&5
-echo "${ECHO_T}$MOC" >&6
+ { echo "$as_me:$LINENO: result: $MOC" >&5
+echo "${ECHO_T}$MOC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test x"$MOC" = x; then
{ { echo "$as_me:$LINENO: error: *** This is not the right Qt installation" >&5
echo "$as_me: error: *** This is not the right Qt installation" >&2;}
@@ -12081,10 +12727,9 @@ fi
-# Check whether --with-javah or --without-javah was given.
+# Check whether --with-javah was given.
if test "${with_javah+set}" = set; then
- withval="$with_javah"
-
+ withval=$with_javah;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -12093,8 +12738,8 @@ if test "${with_javah+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12109,34 +12754,35 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
for javah_name in gcjh javah; do
# Extract the first word of ""$javah_name"", so it can be a program name with args.
set dummy "$javah_name"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12151,27 +12797,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "x${USER_JAVAH}" != x; then
break
fi
@@ -12191,8 +12838,8 @@ fi
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12207,34 +12854,35 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
for javah_name in gcjh javah; do
# Extract the first word of ""$javah_name"", so it can be a program name with args.
set dummy "$javah_name"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12249,27 +12897,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "x${USER_JAVAH}" != x; then
break
fi
@@ -12292,8 +12941,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12308,34 +12957,35 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
for javah_name in gcjh javah; do
# Extract the first word of ""$javah_name"", so it can be a program name with args.
set dummy "$javah_name"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_USER_JAVAH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12350,27 +13000,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_USER_JAVAH="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
USER_JAVAH=$ac_cv_path_USER_JAVAH
-
if test -n "$USER_JAVAH"; then
- echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
-echo "${ECHO_T}$USER_JAVAH" >&6
+ { echo "$as_me:$LINENO: result: $USER_JAVAH" >&5
+echo "${ECHO_T}$USER_JAVAH" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "x${USER_JAVAH}" != x; then
break
fi
@@ -12383,7 +13034,8 @@ fi
# fi
-fi;
+fi
+
if test "x${USER_JAVAH}" != x; then
@@ -12401,11 +13053,11 @@ CLASSPATH_INCLUDES="-I\$(top_srcdir)/include -I\$(top_srcdir)/native/jni/classpa
if test "x${COMPILE_JNI}" = xyes; then
- echo "$as_me:$LINENO: checking jni_md.h support" >&5
-echo $ECHO_N "checking jni_md.h support... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking jni_md.h support" >&5
+echo $ECHO_N "checking jni_md.h support... $ECHO_C" >&6; }
if test -f ${srcdir}/include/jni_md-${target_cpu}-${target_os}.h; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
target_cpu=x86
target_os=linux-gnu
@@ -12419,7 +13071,7 @@ echo "$as_me: WARNING: no" >&2;}
set $ac_sources; ac_source=$1; shift; ac_sources=$*
ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
done
- ac_config_links="$ac_config_links $ac_config_links_1"
+ ac_config_links="$ac_config_links $ac_config_links_1"
fi
@@ -12428,10 +13080,9 @@ fi
-# Check whether --with-gcj or --without-gcj was given.
+# Check whether --with-gcj was given.
if test "${with_gcj+set}" = set; then
- withval="$with_gcj"
-
+ withval=$with_gcj;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -12440,8 +13091,8 @@ if test "${with_gcj+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12456,33 +13107,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcj"", so it can be a program name with args.
set dummy "gcj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12497,31 +13149,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$GCJ" != x; then
- echo "$as_me:$LINENO: checking gcj version 4.0" >&5
-echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6; }
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12537,8 +13190,8 @@ _ACEOF
$GCJ -E conftest.c > /dev/null
gcj_4_result=$?
if test "x$gcj_4_result" = "x0"; then
- echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
-echo "${ECHO_T}4.0 or higher found" >&6
+ { echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+echo "${ECHO_T}4.0 or higher found" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
echo "$as_me: WARNING: 4.0 or higher required" >&2;}
@@ -12560,8 +13213,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12576,33 +13229,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcj"", so it can be a program name with args.
set dummy "gcj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12617,31 +13271,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$GCJ" != x; then
- echo "$as_me:$LINENO: checking gcj version 4.0" >&5
-echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6; }
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12657,8 +13312,8 @@ _ACEOF
$GCJ -E conftest.c > /dev/null
gcj_4_result=$?
if test "x$gcj_4_result" = "x0"; then
- echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
-echo "${ECHO_T}4.0 or higher found" >&6
+ { echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+echo "${ECHO_T}4.0 or higher found" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
echo "$as_me: WARNING: 4.0 or higher required" >&2;}
@@ -12684,8 +13339,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12700,33 +13355,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcj"", so it can be a program name with args.
set dummy "gcj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12741,31 +13397,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJ=$ac_cv_path_GCJ
-
if test -n "$GCJ"; then
- echo "$as_me:$LINENO: result: $GCJ" >&5
-echo "${ECHO_T}$GCJ" >&6
+ { echo "$as_me:$LINENO: result: $GCJ" >&5
+echo "${ECHO_T}$GCJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$GCJ" != x; then
- echo "$as_me:$LINENO: checking gcj version 4.0" >&5
-echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking gcj version 4.0" >&5
+echo $ECHO_N "checking gcj version 4.0... $ECHO_C" >&6; }
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12781,8 +13438,8 @@ _ACEOF
$GCJ -E conftest.c > /dev/null
gcj_4_result=$?
if test "x$gcj_4_result" = "x0"; then
- echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
-echo "${ECHO_T}4.0 or higher found" >&6
+ { echo "$as_me:$LINENO: result: 4.0 or higher found" >&5
+echo "${ECHO_T}4.0 or higher found" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: 4.0 or higher required" >&5
echo "$as_me: WARNING: 4.0 or higher required" >&2;}
@@ -12796,15 +13453,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-fi;
+fi
-# Check whether --with-jikes or --without-jikes was given.
-if test "${with_jikes+set}" = set; then
- withval="$with_jikes"
+# Check whether --with-jikes was given.
+if test "${with_jikes+set}" = set; then
+ withval=$with_jikes;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -12813,8 +13470,8 @@ if test "${with_jikes+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12829,33 +13486,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""jikes"", so it can be a program name with args.
set dummy "jikes"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12870,31 +13528,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: checking jikes version" >&5
-echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking jikes version" >&5
+echo $ECHO_N "checking jikes version... $ECHO_C" >&6; }
JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
@@ -12904,8 +13563,8 @@ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
fi
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
-echo "${ECHO_T}$JIKES_VERSION" >&6
+ { echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+echo "${ECHO_T}$JIKES_VERSION" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
@@ -12936,8 +13595,8 @@ echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12952,33 +13611,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""jikes"", so it can be a program name with args.
set dummy "jikes"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -12993,31 +13653,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: checking jikes version" >&5
-echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking jikes version" >&5
+echo $ECHO_N "checking jikes version... $ECHO_C" >&6; }
JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
@@ -13027,8 +13688,8 @@ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
fi
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
-echo "${ECHO_T}$JIKES_VERSION" >&6
+ { echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+echo "${ECHO_T}$JIKES_VERSION" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
@@ -13063,8 +13724,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13079,33 +13740,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""jikes"", so it can be a program name with args.
set dummy "jikes"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JIKES+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13120,31 +13782,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JIKES="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
JIKES=$ac_cv_path_JIKES
-
if test -n "$JIKES"; then
- echo "$as_me:$LINENO: result: $JIKES" >&5
-echo "${ECHO_T}$JIKES" >&6
+ { echo "$as_me:$LINENO: result: $JIKES" >&5
+echo "${ECHO_T}$JIKES" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: checking jikes version" >&5
-echo $ECHO_N "checking jikes version... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking jikes version" >&5
+echo $ECHO_N "checking jikes version... $ECHO_C" >&6; }
JIKES_VERSION=`$JIKES --version | awk '/^Jikes Compiler/' | cut -d ' ' -f 5`
JIKES_VERSION_MAJOR=`echo "$JIKES_VERSION" | cut -d '.' -f 1`
JIKES_VERSION_MINOR=`echo "$JIKES_VERSION" | cut -d '.' -f 2`
@@ -13154,8 +13817,8 @@ echo $ECHO_N "checking jikes version... $ECHO_C" >&6
fi
fi
if test "x$JIKES" != "x"; then
- echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
-echo "${ECHO_T}$JIKES_VERSION" >&6
+ { echo "$as_me:$LINENO: result: $JIKES_VERSION" >&5
+echo "${ECHO_T}$JIKES_VERSION" >&6; }
else
{ echo "$as_me:$LINENO: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&5
echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
@@ -13178,15 +13841,15 @@ echo "$as_me: WARNING: $JIKES_VERSION: jikes 1.19 or higher required" >&2;}
fi
-fi;
+fi
+
-# Check whether --with-kjc or --without-kjc was given.
+# Check whether --with-kjc was given.
if test "${with_kjc+set}" = set; then
- withval="$with_kjc"
-
+ withval=$with_kjc;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -13195,8 +13858,8 @@ if test "${with_kjc+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13211,33 +13874,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""kJC"", so it can be a program name with args.
set dummy "kJC"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13252,27 +13916,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
@@ -13284,8 +13949,8 @@ fi
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13300,33 +13965,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""kJC"", so it can be a program name with args.
set dummy "kJC"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13341,27 +14007,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
fi
@@ -13377,8 +14044,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13393,33 +14060,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""kJC"", so it can be a program name with args.
set dummy "kJC"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_KJC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13434,39 +14102,40 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_KJC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
KJC=$ac_cv_path_KJC
-
if test -n "$KJC"; then
- echo "$as_me:$LINENO: result: $KJC" >&5
-echo "${ECHO_T}$KJC" >&6
+ { echo "$as_me:$LINENO: result: $KJC" >&5
+echo "${ECHO_T}$KJC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
-fi;
+fi
+
-# Check whether --with-gcjx or --without-gcjx was given.
+# Check whether --with-gcjx was given.
if test "${with_gcjx+set}" = set; then
- withval="$with_gcjx"
-
+ withval=$with_gcjx;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -13475,8 +14144,8 @@ if test "${with_gcjx+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13491,33 +14160,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcjx"", so it can be a program name with args.
set dummy "gcjx"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13532,27 +14202,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
@@ -13564,8 +14235,8 @@ fi
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13580,33 +14251,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcjx"", so it can be a program name with args.
set dummy "gcjx"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13621,27 +14293,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
fi
@@ -13657,8 +14330,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13673,33 +14346,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""gcjx"", so it can be a program name with args.
set dummy "gcjx"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GCJX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13714,39 +14388,40 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GCJX="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
GCJX=$ac_cv_path_GCJX
-
if test -n "$GCJX"; then
- echo "$as_me:$LINENO: result: $GCJX" >&5
-echo "${ECHO_T}$GCJX" >&6
+ { echo "$as_me:$LINENO: result: $GCJX" >&5
+echo "${ECHO_T}$GCJX" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
-fi;
+fi
-# Check whether --with-ecj or --without-ecj was given.
-if test "${with_ecj+set}" = set; then
- withval="$with_ecj"
+# Check whether --with-ecj was given.
+if test "${with_ecj+set}" = set; then
+ withval=$with_ecj;
if test "x${withval}" != x && test "x${withval}" != xyes && test "x${withval}" != xno; then
if test "x${withval}" != x; then
@@ -13755,8 +14430,8 @@ if test "${with_ecj+set}" = set; then
else
# Extract the first word of ""${withval}"", so it can be a program name with args.
set dummy "${withval}"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13771,33 +14446,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""ecj"", so it can be a program name with args.
set dummy "ecj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13812,27 +14488,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
@@ -13844,8 +14521,8 @@ fi
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13860,33 +14537,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""ecj"", so it can be a program name with args.
set dummy "ecj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13901,27 +14579,28 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
fi
@@ -13937,8 +14616,8 @@ else
else
# Extract the first word of """", so it can be a program name with args.
set dummy ""; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13953,33 +14632,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
else
# Extract the first word of ""ecj"", so it can be a program name with args.
set dummy "ecj"; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ECJ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -13994,31 +14674,33 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ECJ="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ECJ=$ac_cv_path_ECJ
-
if test -n "$ECJ"; then
- echo "$as_me:$LINENO: result: $ECJ" >&5
-echo "${ECHO_T}$ECJ" >&6
+ { echo "$as_me:$LINENO: result: $ECJ" >&5
+echo "${ECHO_T}$ECJ" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
-fi;
+fi
+
@@ -14107,41 +14789,41 @@ fi
if test "x${GCJ}" = x && test "x${JIKES}" = x && test "x${user_specified_javac}" != xkjc && test "x${user_specified_javac}" != xgcjx && test "x${user_specified_javac}" != xecj; then
- # FIXME: use autoconf error function
- echo "configure: cannot find javac, try --with-gcj, --with-jikes, --with-kjc, --with-ecj, or --with-gcjx" 1>&2
- exit 1
+ { { echo "$as_me:$LINENO: error: cannot find javac, try --with-gcj, --with-jikes, --with-kjc, --with-ecj, or --with-gcjx" >&5
+echo "$as_me: error: cannot find javac, try --with-gcj, --with-jikes, --with-kjc, --with-ecj, or --with-gcjx" >&2;}
+ { (exit 1); exit 1; }; }
fi
-# Check whether --with-classpath or --without-classpath was given.
+# Check whether --with-classpath was given.
if test "${with_classpath+set}" = set; then
- withval="$with_classpath"
-
+ withval=$with_classpath;
if test "x${withval}" = xyes; then
# set user classpath to CLASSPATH from env
- echo "$as_me:$LINENO: checking for classlib" >&5
-echo $ECHO_N "checking for classlib... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for classlib" >&5
+echo $ECHO_N "checking for classlib... $ECHO_C" >&6; }
USER_CLASSLIB=${CLASSPATH}
- echo "$as_me:$LINENO: result: ${USER_CLASSLIB}" >&5
-echo "${ECHO_T}${USER_CLASSLIB}" >&6
+ { echo "$as_me:$LINENO: result: ${USER_CLASSLIB}" >&5
+echo "${ECHO_T}${USER_CLASSLIB}" >&6; }
conditional_with_classlib=true
elif test "x${withval}" != x && test "x${withval}" != xno; then
# set user classpath to specified value
- echo "$as_me:$LINENO: checking for classlib" >&5
-echo $ECHO_N "checking for classlib... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for classlib" >&5
+echo $ECHO_N "checking for classlib... $ECHO_C" >&6; }
USER_CLASSLIB=${withval}
- echo "$as_me:$LINENO: result: ${withval}" >&5
-echo "${ECHO_T}${withval}" >&6
+ { echo "$as_me:$LINENO: result: ${withval}" >&5
+echo "${ECHO_T}${withval}" >&6; }
conditional_with_classlib=true
fi
else
conditional_with_classlib=false
-fi;
+fi
+
if test "x${conditional_with_classlib}" = xtrue; then
@@ -14154,27 +14836,27 @@ fi
-# Check whether --with-vm-classes or --without-vm-classes was given.
+# Check whether --with-vm-classes was given.
if test "${with_vm_classes+set}" = set; then
- withval="$with_vm_classes"
- vm_classes="$with_vm_classes"
+ withval=$with_vm_classes; vm_classes="$with_vm_classes"
else
vm_classes='${top_srcdir}/vm/reference'
-fi;
+fi
+
-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; }
+ # Check whether --enable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
- enableval="$enable_maintainer_mode"
- USE_MAINTAINER_MODE=$enableval
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
else
USE_MAINTAINER_MODE=no
-fi;
- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+fi
+
+ { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; }
if test $USE_MAINTAINER_MODE = yes; then
@@ -14189,10 +14871,9 @@ fi
-# Check whether --enable-debug or --disable-debug was given.
+# Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then
- enableval="$enable_debug"
- case "${enableval}" in
+ enableval=$enable_debug; case "${enableval}" in
yes)
LIBDEBUG="true"
@@ -14208,13 +14889,13 @@ echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;}
esac
else
LIBDEBUG="false"
-fi;
+fi
+
-# Check whether --enable-load-library or --disable-load-library was given.
+# Check whether --enable-load-library was given.
if test "${enable_load_library+set}" = set; then
- enableval="$enable_load_library"
- case "${enableval}" in
+ enableval=$enable_load_library; case "${enableval}" in
yes) INIT_LOAD_LIBRARY="true" ;;
no) INIT_LOAD_LIBRARY="false" ;;
*) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-load-library" >&5
@@ -14223,14 +14904,14 @@ echo "$as_me: error: bad value ${enableval} for --enable-load-library" >&2;}
esac
else
INIT_LOAD_LIBRARY="true"
-fi;
+fi
-# Check whether --enable-java-lang-system-explicit-initialization or --disable-java-lang-system-explicit-initialization was given.
+
+# Check whether --enable-java-lang-system-explicit-initialization was given.
if test "${enable_java_lang_system_explicit_initialization+set}" = set; then
- enableval="$enable_java_lang_system_explicit_initialization"
- case "${enableval}" in
+ enableval=$enable_java_lang_system_explicit_initialization; case "${enableval}" in
yes|true) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="true" ;;
no|false) JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false" ;;
*) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-java-lang-system-explicit-initialization" >&5
@@ -14239,7 +14920,8 @@ echo "$as_me: error: bad value ${enableval} for --enable-java-lang-system-explic
esac
else
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION="false"
-fi;
+fi
+
@@ -14248,8 +14930,8 @@ REMOVE=""
# Extract the first word of "mkdir", so it can be a program name with args.
set dummy mkdir; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_MKDIR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14264,31 +14946,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
MKDIR=$ac_cv_path_MKDIR
-
if test -n "$MKDIR"; then
- echo "$as_me:$LINENO: result: $MKDIR" >&5
-echo "${ECHO_T}$MKDIR" >&6
+ { echo "$as_me:$LINENO: result: $MKDIR" >&5
+echo "${ECHO_T}$MKDIR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
# Extract the first word of "cp", so it can be a program name with args.
set dummy cp; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_CP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14303,31 +14986,32 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
CP=$ac_cv_path_CP
-
if test -n "$CP"; then
- echo "$as_me:$LINENO: result: $CP" >&5
-echo "${ECHO_T}$CP" >&6
+ { echo "$as_me:$LINENO: result: $CP" >&5
+echo "${ECHO_T}$CP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
# Extract the first word of "date", so it can be a program name with args.
set dummy date; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_DATE+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14342,32 +15026,33 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
DATE=$ac_cv_path_DATE
-
if test -n "$DATE"; then
- echo "$as_me:$LINENO: result: $DATE" >&5
-echo "${ECHO_T}$DATE" >&6
+ { echo "$as_me:$LINENO: result: $DATE" >&5
+echo "${ECHO_T}$DATE" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
# Extract the first word of "find", so it can be a program name with args.
set dummy find; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_FIND+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14382,33 +15067,34 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
FIND=$ac_cv_path_FIND
-
if test -n "$FIND"; then
- echo "$as_me:$LINENO: result: $FIND" >&5
-echo "${ECHO_T}$FIND" >&6
+ { echo "$as_me:$LINENO: result: $FIND" >&5
+echo "${ECHO_T}$FIND" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
# Extract the first word of "zip", so it can be a program name with args.
set dummy zip; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_ZIP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14423,43 +15109,43 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
ZIP=$ac_cv_path_ZIP
-
if test -n "$ZIP"; then
- echo "$as_me:$LINENO: result: $ZIP" >&5
-echo "${ECHO_T}$ZIP" >&6
+ { echo "$as_me:$LINENO: result: $ZIP" >&5
+echo "${ECHO_T}$ZIP" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-# Check whether --with-fastjar or --without-fastjar was given.
-if test "${with_fastjar+set}" = set; then
- withval="$with_fastjar"
- echo "$as_me:$LINENO: checking for user supplied fastjar" >&5
-echo $ECHO_N "checking for user supplied fastjar... $ECHO_C" >&6
+# Check whether --with-fastjar was given.
+if test "${with_fastjar+set}" = set; then
+ withval=$with_fastjar;
+ { echo "$as_me:$LINENO: checking for user supplied fastjar" >&5
+echo $ECHO_N "checking for user supplied fastjar... $ECHO_C" >&6; }
FASTJAR=${withval}
- echo "$as_me:$LINENO: result: ${FASTJAR}" >&5
-echo "${ECHO_T}${FASTJAR}" >&6
+ { echo "$as_me:$LINENO: result: ${FASTJAR}" >&5
+echo "${ECHO_T}${FASTJAR}" >&6; }
else
# Extract the first word of "fastjar", so it can be a program name with args.
set dummy fastjar; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_FASTJAR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14474,37 +15160,38 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_FASTJAR="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
;;
esac
fi
FASTJAR=$ac_cv_path_FASTJAR
-
if test -n "$FASTJAR"; then
- echo "$as_me:$LINENO: result: $FASTJAR" >&5
-echo "${ECHO_T}$FASTJAR" >&6
+ { echo "$as_me:$LINENO: result: $FASTJAR" >&5
+echo "${ECHO_T}$FASTJAR" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
fi
-fi;
if test x"${FASTJAR}" != x; then
ZIP=""
fi
-# Check whether --with-glibj or --without-glibj was given.
+# Check whether --with-glibj was given.
if test "${with_glibj+set}" = set; then
- withval="$with_glibj"
-
+ withval=$with_glibj;
if test "x${withval}" = xyes || test "x${withval}" = xzip; then
install_class_files=no
build_class_files=yes
@@ -14536,7 +15223,8 @@ else
install_class_files=no
use_zip=yes
-fi;
+fi
+
if test "x${use_zip}" = xyes; then
@@ -14568,10 +15256,9 @@ else
fi
- # Check whether --enable-examples or --disable-examples was given.
+ # Check whether --enable-examples was given.
if test "${enable_examples+set}" = set; then
- enableval="$enable_examples"
- case "${enableval}" in
+ enableval=$enable_examples; case "${enableval}" in
yes) EXAMPLESDIR="examples" ;;
no) EXAMPLESDIR="" ;;
*) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-examples" >&5
@@ -14580,7 +15267,8 @@ echo "$as_me: error: bad value ${enableval} for --enable-examples" >&2;}
esac
else
EXAMPLESDIR="examples"
-fi;
+fi
+
if test "x${use_zip}" = xno && test "x${install_class_files}" = xno; then
EXAMPLESDIR=""
fi
@@ -14589,17 +15277,16 @@ fi;
-# Check whether --with-gjdoc or --without-gjdoc was given.
+# Check whether --with-gjdoc was given.
if test "${with_gjdoc+set}" = set; then
- withval="$with_gjdoc"
- if test "x${withval}" = xno; then
+ withval=$with_gjdoc; if test "x${withval}" = xno; then
WITH_GJDOC=no;
elif test "x${withval}" = xyes -o "x{withval}" = x; then
WITH_GJDOC=yes;
# Extract the first word of "gjdoc", so it can be a program name with args.
set dummy gjdoc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_GJDOC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14614,28 +15301,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_GJDOC="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_GJDOC" && ac_cv_path_GJDOC=""no""
;;
esac
fi
GJDOC=$ac_cv_path_GJDOC
-
if test -n "$GJDOC"; then
- echo "$as_me:$LINENO: result: $GJDOC" >&5
-echo "${ECHO_T}$GJDOC" >&6
+ { echo "$as_me:$LINENO: result: $GJDOC" >&5
+echo "${ECHO_T}$GJDOC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "x${GJDOC}" = xno; then
{ { echo "$as_me:$LINENO: error: \"gjdoc executable not found\"" >&5
echo "$as_me: error: \"gjdoc executable not found\"" >&2;}
@@ -14645,9 +15333,9 @@ echo "$as_me: error: \"gjdoc executable not found\"" >&2;}
WITH_GJDOC=yes
GJDOC="${withval}"
as_ac_File=`echo "ac_cv_file_${GJDOC}" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for ${GJDOC}" >&5
-echo $ECHO_N "checking for ${GJDOC}... $ECHO_C" >&6
-if eval "test \"\${$as_ac_File+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for ${GJDOC}" >&5
+echo $ECHO_N "checking for ${GJDOC}... $ECHO_C" >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
test "$cross_compiling" = yes &&
@@ -14660,8 +15348,9 @@ else
eval "$as_ac_File=no"
fi
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ac_res=`eval echo '${'$as_ac_File'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_File'}'` = yes; then
:
else
@@ -14673,7 +15362,8 @@ fi
fi
else
WITH_GJDOC=no
-fi;
+fi
+
@@ -14689,16 +15379,15 @@ fi
-# Check whether --with-jay or --without-jay was given.
+# Check whether --with-jay was given.
if test "${with_jay+set}" = set; then
- withval="$with_jay"
-
+ withval=$with_jay;
if test -d "${withval}"; then
JAY_DIR_PATH="${withval}"
# Extract the first word of "jay", so it can be a program name with args.
set dummy jay; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_JAY+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14713,28 +15402,29 @@ do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_JAY="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_path_JAY" && ac_cv_path_JAY=""no""
;;
esac
fi
JAY=$ac_cv_path_JAY
-
if test -n "$JAY"; then
- echo "$as_me:$LINENO: result: $JAY" >&5
-echo "${ECHO_T}$JAY" >&6
+ { echo "$as_me:$LINENO: result: $JAY" >&5
+echo "${ECHO_T}$JAY" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "x${JAY}" = xno; then
{ { echo "$as_me:$LINENO: error: \"jay executable not found\"" >&5
echo "$as_me: error: \"jay executable not found\"" >&2;}
@@ -14747,9 +15437,9 @@ echo "$as_me: error: \"jay executable not found\"" >&2;}
fi
JAY_SKELETON="${JAY_DIR_PATH}/skeleton"
as_ac_File=`echo "ac_cv_file_${JAY_SKELETON}" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for ${JAY_SKELETON}" >&5
-echo $ECHO_N "checking for ${JAY_SKELETON}... $ECHO_C" >&6
-if eval "test \"\${$as_ac_File+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for ${JAY_SKELETON}" >&5
+echo $ECHO_N "checking for ${JAY_SKELETON}... $ECHO_C" >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
test "$cross_compiling" = yes &&
@@ -14762,8 +15452,9 @@ else
eval "$as_ac_File=no"
fi
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+ac_res=`eval echo '${'$as_ac_File'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_File'}'` = yes; then
:
else
@@ -14778,7 +15469,8 @@ else
JAY_FOUND=no
-fi;
+fi
+
if test "x${JAY_FOUND}" = xyes; then
@@ -14791,10 +15483,9 @@ fi
-# Check whether --enable-portable-native-sync or --disable-portable-native-sync was given.
+# Check whether --enable-portable-native-sync was given.
if test "${enable_portable_native_sync+set}" = set; then
- enableval="$enable_portable_native_sync"
- case "${enableval}" in
+ enableval=$enable_portable_native_sync; case "${enableval}" in
yes)
cat >>confdefs.h <<\_ACEOF
@@ -14809,11 +15500,12 @@ echo "$as_me: error: bad value ${enableval} for --enable-portable-native-sync" >
{ (exit 1); exit 1; }; }
;;
esac
-fi;
+fi
+
# ------ AX CREATE STDINT H -------------------------------------
-echo "$as_me:$LINENO: checking for stdint types" >&5
-echo $ECHO_N "checking for stdint types... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stdint types" >&5
+echo $ECHO_N "checking for stdint types... $ECHO_C" >&6; }
ac_stdint_h=`echo include/config-int.h`
# try to shortcircuit - if the default include path of the compiler
# can find a "stdint.h" header then we assume that all compilers can.
@@ -14848,8 +15540,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -14867,8 +15558,9 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_header_stdint_t=""
+ ac_cv_header_stdint_t=""
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
CXXFLAGS="$old_CXXFLAGS"
CPPFLAGS="$old_CPPFLAGS"
@@ -14878,18 +15570,18 @@ fi
v="... $ac_cv_header_stdint_h"
if test "$ac_stdint_h" = "stdint.h" ; then
- echo "$as_me:$LINENO: result: (are you sure you want them in ./stdint.h?)" >&5
-echo "${ECHO_T}(are you sure you want them in ./stdint.h?)" >&6
+ { echo "$as_me:$LINENO: result: (are you sure you want them in ./stdint.h?)" >&5
+echo "${ECHO_T}(are you sure you want them in ./stdint.h?)" >&6; }
elif test "$ac_stdint_h" = "inttypes.h" ; then
- echo "$as_me:$LINENO: result: (are you sure you want them in ./inttypes.h?)" >&5
-echo "${ECHO_T}(are you sure you want them in ./inttypes.h?)" >&6
+ { echo "$as_me:$LINENO: result: (are you sure you want them in ./inttypes.h?)" >&5
+echo "${ECHO_T}(are you sure you want them in ./inttypes.h?)" >&6; }
elif test "_$ac_cv_header_stdint_t" = "_" ; then
- echo "$as_me:$LINENO: result: (putting them into $ac_stdint_h)$v" >&5
-echo "${ECHO_T}(putting them into $ac_stdint_h)$v" >&6
+ { echo "$as_me:$LINENO: result: (putting them into $ac_stdint_h)$v" >&5
+echo "${ECHO_T}(putting them into $ac_stdint_h)$v" >&6; }
else
ac_cv_header_stdint="$ac_cv_header_stdint_t"
- echo "$as_me:$LINENO: result: $ac_cv_header_stdint (shortcircuit)" >&5
-echo "${ECHO_T}$ac_cv_header_stdint (shortcircuit)" >&6
+ { echo "$as_me:$LINENO: result: $ac_cv_header_stdint (shortcircuit)" >&5
+echo "${ECHO_T}$ac_cv_header_stdint (shortcircuit)" >&6; }
fi
if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
@@ -14899,20 +15591,20 @@ inttype_headers=`echo | sed -e 's/,/ /g'`
ac_cv_stdint_result="(no helpful system typedefs seen)"
-echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
-echo $ECHO_N "checking for stdint uintptr_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
+echo $ECHO_N "checking for stdint uintptr_t... $ECHO_C" >&6; }
if test "${ac_cv_header_stdint_x+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
- echo "$as_me:$LINENO: result: (..)" >&5
-echo "${ECHO_T}(..)" >&6
+ { echo "$as_me:$LINENO: result: (..)" >&5
+echo "${ECHO_T}(..)" >&6; }
for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers ; do
unset ac_cv_type_uintptr_t
unset ac_cv_type_uint64_t
- echo "$as_me:$LINENO: checking for uintptr_t" >&5
-echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uintptr_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14924,12 +15616,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$i>
+typedef uintptr_t ac__type_new_;
int
main ()
{
-if ((uintptr_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uintptr_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -14944,8 +15637,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -14962,20 +15654,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uintptr_t=no
+ ac_cv_type_uintptr_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
if test $ac_cv_type_uintptr_t = yes; then
ac_cv_header_stdint_x=$i
else
continue
fi
- echo "$as_me:$LINENO: checking for uint64_t" >&5
-echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for uint64_t" >&5
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uint64_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -14987,12 +15680,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include<$i>
+typedef uint64_t ac__type_new_;
int
main ()
{
-if ((uint64_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uint64_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15007,8 +15701,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15025,12 +15718,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uint64_t=no
+ ac_cv_type_uint64_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
-echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6; }
if test $ac_cv_type_uint64_t = yes; then
and64="/uint64_t"
else
@@ -15040,30 +15734,30 @@ fi
stdint.h inttypes.h sys/inttypes.h $inttype_headers
break
done
- echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
-echo $ECHO_N "checking for stdint uintptr_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for stdint uintptr_t" >&5
+echo $ECHO_N "checking for stdint uintptr_t... $ECHO_C" >&6; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdint_x" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_x" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_x" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_x" >&6; }
if test "_$ac_cv_header_stdint_x" = "_" ; then
-echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
-echo $ECHO_N "checking for stdint uint32_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
+echo $ECHO_N "checking for stdint uint32_t... $ECHO_C" >&6; }
if test "${ac_cv_header_stdint_o+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
- echo "$as_me:$LINENO: result: (..)" >&5
-echo "${ECHO_T}(..)" >&6
+ { echo "$as_me:$LINENO: result: (..)" >&5
+echo "${ECHO_T}(..)" >&6; }
for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers ; do
unset ac_cv_type_uint32_t
unset ac_cv_type_uint64_t
- echo "$as_me:$LINENO: checking for uint32_t" >&5
-echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for uint32_t" >&5
+echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uint32_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15075,12 +15769,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$i>
+typedef uint32_t ac__type_new_;
int
main ()
{
-if ((uint32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uint32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15095,8 +15790,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15113,20 +15807,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uint32_t=no
+ ac_cv_type_uint32_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
-echo "${ECHO_T}$ac_cv_type_uint32_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint32_t" >&6; }
if test $ac_cv_type_uint32_t = yes; then
ac_cv_header_stdint_o=$i
else
continue
fi
- echo "$as_me:$LINENO: checking for uint64_t" >&5
-echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for uint64_t" >&5
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6; }
if test "${ac_cv_type_uint64_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15138,12 +15833,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include<$i>
+typedef uint64_t ac__type_new_;
int
main ()
{
-if ((uint64_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (uint64_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15158,8 +15854,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15176,12 +15871,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_uint64_t=no
+ ac_cv_type_uint64_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
-echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6; }
if test $ac_cv_type_uint64_t = yes; then
and64="/uint64_t"
else
@@ -15192,32 +15888,32 @@ fi
break
break;
done
- echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
-echo $ECHO_N "checking for stdint uint32_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for stdint uint32_t" >&5
+echo $ECHO_N "checking for stdint uint32_t... $ECHO_C" >&6; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdint_o" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_o" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_o" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_o" >&6; }
fi
if test "_$ac_cv_header_stdint_x" = "_" ; then
if test "_$ac_cv_header_stdint_o" = "_" ; then
-echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
-echo $ECHO_N "checking for stdint u_int32_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
+echo $ECHO_N "checking for stdint u_int32_t... $ECHO_C" >&6; }
if test "${ac_cv_header_stdint_u+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
- echo "$as_me:$LINENO: result: (..)" >&5
-echo "${ECHO_T}(..)" >&6
+ { echo "$as_me:$LINENO: result: (..)" >&5
+echo "${ECHO_T}(..)" >&6; }
for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do
unset ac_cv_type_u_int32_t
unset ac_cv_type_u_int64_t
- echo "$as_me:$LINENO: checking for u_int32_t" >&5
-echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for u_int32_t" >&5
+echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6; }
if test "${ac_cv_type_u_int32_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15229,12 +15925,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$i>
+typedef u_int32_t ac__type_new_;
int
main ()
{
-if ((u_int32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15249,8 +15946,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15267,20 +15963,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int32_t=no
+ ac_cv_type_u_int32_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
-echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6; }
if test $ac_cv_type_u_int32_t = yes; then
ac_cv_header_stdint_u=$i
else
continue
fi
- echo "$as_me:$LINENO: checking for u_int64_t" >&5
-echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for u_int64_t" >&5
+echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6; }
if test "${ac_cv_type_u_int64_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15292,12 +15989,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include<$i>
+typedef u_int64_t ac__type_new_;
int
main ()
{
-if ((u_int64_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (u_int64_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15312,8 +16010,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15330,12 +16027,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_u_int64_t=no
+ ac_cv_type_u_int64_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
-echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6; }
if test $ac_cv_type_u_int64_t = yes; then
and64="/u_int64_t"
else
@@ -15346,23 +16044,23 @@ fi
break
break;
done
- echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
-echo $ECHO_N "checking for stdint u_int32_t... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for stdint u_int32_t" >&5
+echo $ECHO_N "checking for stdint u_int32_t... $ECHO_C" >&6; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdint_u" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_u" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_u" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_u" >&6; }
fi fi
if test "_$ac_cv_header_stdint_x" = "_" ; then
- echo "$as_me:$LINENO: checking for stdint datatype model" >&5
-echo $ECHO_N "checking for stdint datatype model... $ECHO_C" >&6
- echo "$as_me:$LINENO: result: (..)" >&5
-echo "${ECHO_T}(..)" >&6
+ { echo "$as_me:$LINENO: checking for stdint datatype model" >&5
+echo $ECHO_N "checking for stdint datatype model... $ECHO_C" >&6; }
+ { echo "$as_me:$LINENO: result: (..)" >&5
+echo "${ECHO_T}(..)" >&6; }
- echo "$as_me:$LINENO: checking for char" >&5
-echo $ECHO_N "checking for char... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for char" >&5
+echo $ECHO_N "checking for char... $ECHO_C" >&6; }
if test "${ac_cv_type_char+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15373,12 +16071,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef char ac__type_new_;
int
main ()
{
-if ((char *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (char))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15393,8 +16092,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15411,20 +16109,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_char=no
+ ac_cv_type_char=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
-echo "${ECHO_T}$ac_cv_type_char" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+echo "${ECHO_T}$ac_cv_type_char" >&6; }
-echo "$as_me:$LINENO: checking size of char" >&5
-echo $ECHO_N "checking size of char... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of char" >&5
+echo $ECHO_N "checking size of char... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_char+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_char" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
@@ -15437,10 +16136,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -15456,8 +16156,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15478,10 +16177,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -15497,8 +16197,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15515,30 +16214,32 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -15554,8 +16255,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15576,10 +16276,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -15595,8 +16296,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15613,23 +16313,26 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo= ac_hi=
+ ac_lo= ac_hi=
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
@@ -15641,10 +16344,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef char ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -15660,8 +16364,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15678,26 +16381,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_char=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
+echo "$as_me: error: cannot compute sizeof (char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
esac
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -15705,8 +16402,9 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-long longval () { return (long) (sizeof (char)); }
-unsigned long ulongval () { return (long) (sizeof (char)); }
+ typedef char ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -15715,22 +16413,22 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (char))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (char))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (char))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return ferror (f) || fclose (f) != 0;
;
return 0;
@@ -15754,29 +16452,28 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
+echo "$as_me: error: cannot compute sizeof (char)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_char=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
-echo "${ECHO_T}$ac_cv_sizeof_char" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_CHAR $ac_cv_sizeof_char
_ACEOF
- echo "$as_me:$LINENO: checking for short" >&5
-echo $ECHO_N "checking for short... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6; }
if test "${ac_cv_type_short+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -15787,12 +16484,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef short ac__type_new_;
int
main ()
{
-if ((short *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (short))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -15807,8 +16505,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15825,20 +16522,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_short=no
+ ac_cv_type_short=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
-echo "${ECHO_T}$ac_cv_type_short" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6; }
-echo "$as_me:$LINENO: checking size of short" >&5
-echo $ECHO_N "checking size of short... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_short+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_short" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
@@ -15851,10 +16549,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -15870,8 +16569,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15892,10 +16590,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -15911,8 +16610,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15929,30 +16627,32 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -15968,8 +16668,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -15990,10 +16689,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -16009,8 +16709,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16027,23 +16726,26 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo= ac_hi=
+ ac_lo= ac_hi=
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
@@ -16055,10 +16757,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef short ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -16074,8 +16777,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16092,26 +16794,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_short=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
+echo "$as_me: error: cannot compute sizeof (short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
esac
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -16119,8 +16815,9 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-long longval () { return (long) (sizeof (short)); }
-unsigned long ulongval () { return (long) (sizeof (short)); }
+ typedef short ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -16129,22 +16826,22 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (short))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (short))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (short))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return ferror (f) || fclose (f) != 0;
;
return 0;
@@ -16168,29 +16865,28 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
+echo "$as_me: error: cannot compute sizeof (short)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_short=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
-echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_SHORT $ac_cv_sizeof_short
_ACEOF
- echo "$as_me:$LINENO: checking for int" >&5
-echo $ECHO_N "checking for int... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6; }
if test "${ac_cv_type_int+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -16201,12 +16897,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef int ac__type_new_;
int
main ()
{
-if ((int *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -16221,8 +16918,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16239,20 +16935,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int=no
+ ac_cv_type_int=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
-echo "${ECHO_T}$ac_cv_type_int" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6; }
-echo "$as_me:$LINENO: checking size of int" >&5
-echo $ECHO_N "checking size of int... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_int+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_int" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
@@ -16265,10 +16962,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -16284,8 +16982,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16306,10 +17003,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -16325,8 +17023,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16343,30 +17040,32 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -16382,8 +17081,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16404,10 +17102,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -16423,8 +17122,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16441,23 +17139,26 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo= ac_hi=
+ ac_lo= ac_hi=
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
@@ -16469,10 +17170,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef int ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -16488,8 +17190,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16506,26 +17207,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_int=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
+echo "$as_me: error: cannot compute sizeof (int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
esac
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -16533,8 +17228,9 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-long longval () { return (long) (sizeof (int)); }
-unsigned long ulongval () { return (long) (sizeof (int)); }
+ typedef int ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -16543,22 +17239,22 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (int))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (int))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (int))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return ferror (f) || fclose (f) != 0;
;
return 0;
@@ -16582,29 +17278,28 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
+echo "$as_me: error: cannot compute sizeof (int)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_int=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_INT $ac_cv_sizeof_int
_ACEOF
- echo "$as_me:$LINENO: checking for long" >&5
-echo $ECHO_N "checking for long... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6; }
if test "${ac_cv_type_long+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -16615,12 +17310,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef long ac__type_new_;
int
main ()
{
-if ((long *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (long))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -16635,8 +17331,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16653,20 +17348,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_long=no
+ ac_cv_type_long=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
-echo "${ECHO_T}$ac_cv_type_long" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6; }
-echo "$as_me:$LINENO: checking size of long" >&5
-echo $ECHO_N "checking size of long... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_long+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_long" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
@@ -16679,10 +17375,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -16698,8 +17395,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16720,10 +17416,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -16739,8 +17436,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16757,30 +17453,32 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -16796,8 +17494,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16818,10 +17515,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -16837,8 +17535,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16855,23 +17552,26 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo= ac_hi=
+ ac_lo= ac_hi=
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
@@ -16883,10 +17583,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef long ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -16902,8 +17603,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -16920,26 +17620,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
+echo "$as_me: error: cannot compute sizeof (long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
esac
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -16947,8 +17641,9 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-long longval () { return (long) (sizeof (long)); }
-unsigned long ulongval () { return (long) (sizeof (long)); }
+ typedef long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -16957,22 +17652,22 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (long))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (long))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (long))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return ferror (f) || fclose (f) != 0;
;
return 0;
@@ -16996,29 +17691,28 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
+echo "$as_me: error: cannot compute sizeof (long)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_long=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_LONG $ac_cv_sizeof_long
_ACEOF
- echo "$as_me:$LINENO: checking for void*" >&5
-echo $ECHO_N "checking for void*... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for void*" >&5
+echo $ECHO_N "checking for void*... $ECHO_C" >&6; }
if test "${ac_cv_type_voidp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -17029,12 +17723,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+typedef void* ac__type_new_;
int
main ()
{
-if ((void* *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (void*))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -17049,8 +17744,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17067,20 +17761,21 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_voidp=no
+ ac_cv_type_voidp=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_voidp" >&5
-echo "${ECHO_T}$ac_cv_type_voidp" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_voidp" >&5
+echo "${ECHO_T}$ac_cv_type_voidp" >&6; }
-echo "$as_me:$LINENO: checking size of void*" >&5
-echo $ECHO_N "checking size of void*... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking size of void*" >&5
+echo $ECHO_N "checking size of void*... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_voidp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$ac_cv_type_voidp" = yes; then
- # The cast to unsigned long works around a bug in the HP C Compiler
+ # The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
@@ -17093,10 +17788,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef void* ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
test_array [0] = 0
;
@@ -17112,8 +17808,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17134,10 +17829,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef void* ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -17153,8 +17849,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17171,30 +17866,32 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef void* ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) < 0)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
test_array [0] = 0
;
@@ -17210,8 +17907,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17232,10 +17928,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef void* ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) >= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
test_array [0] = 0
;
@@ -17251,8 +17948,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17269,23 +17965,26 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo= ac_hi=
+ ac_lo= ac_hi=
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
# Binary search between lo and hi bounds.
while test "x$ac_lo" != "x$ac_hi"; do
@@ -17297,10 +17996,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
+ typedef void* ac__type_sizeof_;
int
main ()
{
-static int test_array [1 - 2 * !(((long) (sizeof (void*))) <= $ac_mid)];
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
test_array [0] = 0
;
@@ -17316,8 +18016,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17334,26 +18033,20 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_lo=`expr '(' $ac_mid ')' + 1`
+ ac_lo=`expr '(' $ac_mid ')' + 1`
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
case $ac_lo in
?*) ac_cv_sizeof_voidp=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void*)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
+echo "$as_me: error: cannot compute sizeof (void*)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; } ;;
+ { (exit 77); exit 77; }; } ;;
esac
else
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -17361,8 +18054,9 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
-long longval () { return (long) (sizeof (void*)); }
-unsigned long ulongval () { return (long) (sizeof (void*)); }
+ typedef void* ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
#include <stdio.h>
#include <stdlib.h>
int
@@ -17371,22 +18065,22 @@ main ()
FILE *f = fopen ("conftest.val", "w");
if (! f)
- exit (1);
- if (((long) (sizeof (void*))) < 0)
+ return 1;
+ if (((long int) (sizeof (ac__type_sizeof_))) < 0)
{
- long i = longval ();
- if (i != ((long) (sizeof (void*))))
- exit (1);
+ long int i = longval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%ld\n", i);
}
else
{
- unsigned long i = ulongval ();
- if (i != ((long) (sizeof (void*))))
- exit (1);
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (ac__type_sizeof_))))
+ return 1;
fprintf (f, "%lu\n", i);
}
- exit (ferror (f) || fclose (f) != 0);
+ return ferror (f) || fclose (f) != 0;
;
return 0;
@@ -17410,22 +18104,21 @@ echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void*), 77
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void*)
See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void*), 77
+echo "$as_me: error: cannot compute sizeof (void*)
See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ { (exit 77); exit 77; }; }
fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f conftest.val
else
ac_cv_sizeof_voidp=0
fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5
-echo "${ECHO_T}$ac_cv_sizeof_voidp" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_voidp" >&5
+echo "${ECHO_T}$ac_cv_sizeof_voidp" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
_ACEOF
@@ -17439,8 +18132,8 @@ _ACEOF
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
- echo "$as_me:$LINENO: checking data model" >&5
-echo $ECHO_N "checking data model... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking data model" >&5
+echo $ECHO_N "checking data model... $ECHO_C" >&6; }
case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;;
122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;;
@@ -17460,8 +18153,8 @@ echo $ECHO_N "checking data model... $ECHO_C" >&6
ac_cv_data_model="iDSP" ; n="unusual dsptype" ;;
*) ac_cv_data_model="none" ; n="very unusual model" ;;
esac
- echo "$as_me:$LINENO: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5
-echo "${ECHO_T}$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6
+ { echo "$as_me:$LINENO: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5
+echo "${ECHO_T}$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; }
fi
@@ -17475,14 +18168,14 @@ else
ac_cv_header_stdint="stddef.h"
fi
-echo "$as_me:$LINENO: checking for extra inttypes in chosen header" >&5
-echo $ECHO_N "checking for extra inttypes in chosen header... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: ($ac_cv_header_stdint)" >&5
-echo "${ECHO_T}($ac_cv_header_stdint)" >&6
+{ echo "$as_me:$LINENO: checking for extra inttypes in chosen header" >&5
+echo $ECHO_N "checking for extra inttypes in chosen header... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: ($ac_cv_header_stdint)" >&5
+echo "${ECHO_T}($ac_cv_header_stdint)" >&6; }
unset ac_cv_type_int_least32_t
unset ac_cv_type_int_fast32_t
-echo "$as_me:$LINENO: checking for int_least32_t" >&5
-echo $ECHO_N "checking for int_least32_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for int_least32_t" >&5
+echo $ECHO_N "checking for int_least32_t... $ECHO_C" >&6; }
if test "${ac_cv_type_int_least32_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -17494,12 +18187,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$ac_cv_header_stdint>
+typedef int_least32_t ac__type_new_;
int
main ()
{
-if ((int_least32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int_least32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -17514,8 +18208,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17532,15 +18225,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int_least32_t=no
+ ac_cv_type_int_least32_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5
-echo "${ECHO_T}$ac_cv_type_int_least32_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least32_t" >&6; }
-echo "$as_me:$LINENO: checking for int_fast32_t" >&5
-echo $ECHO_N "checking for int_fast32_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for int_fast32_t" >&5
+echo $ECHO_N "checking for int_fast32_t... $ECHO_C" >&6; }
if test "${ac_cv_type_int_fast32_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -17552,12 +18246,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include<$ac_cv_header_stdint>
+typedef int_fast32_t ac__type_new_;
int
main ()
{
-if ((int_fast32_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (int_fast32_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -17572,8 +18267,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17590,15 +18284,16 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_int_fast32_t=no
+ ac_cv_type_int_fast32_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5
-echo "${ECHO_T}$ac_cv_type_int_fast32_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast32_t" >&6; }
-echo "$as_me:$LINENO: checking for intmax_t" >&5
-echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for intmax_t" >&5
+echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6; }
if test "${ac_cv_type_intmax_t+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
@@ -17610,12 +18305,13 @@ cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <$ac_cv_header_stdint>
+typedef intmax_t ac__type_new_;
int
main ()
{
-if ((intmax_t *) 0)
+if ((ac__type_new_ *) 0)
return 0;
-if (sizeof (intmax_t))
+if (sizeof (ac__type_new_))
return 0;
;
return 0;
@@ -17630,8 +18326,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
@@ -17648,12 +18343,13 @@ else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_type_intmax_t=no
+ ac_cv_type_intmax_t=no
fi
+
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_type_intmax_t" >&5
-echo "${ECHO_T}$ac_cv_type_intmax_t" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_type_intmax_t" >&5
+echo "${ECHO_T}$ac_cv_type_intmax_t" >&6; }
fi # shortcircut to system "stdint.h"
@@ -17664,19 +18360,333 @@ else
ac_cv_stdint_message="using $CC"
fi
-echo "$as_me:$LINENO: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5
-echo "${ECHO_T}make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6
+{ echo "$as_me:$LINENO: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5
+echo "${ECHO_T}make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; }
# ----------------- DONE inttypes.h checks START header -------------
- ac_config_commands="$ac_config_commands $ac_stdint_h"
+ac_config_commands="$ac_config_commands $ac_stdint_h"
+
+
+
+
+# Check whether --with-glibj_zip was given.
+if test "${with_glibj_zip+set}" = set; then
+ withval=$with_glibj_zip;
+fi
+
+
+case "$with_glibj_zip" in
+"")
+ use_glibj_zip=false
+ ;;
+"no" )
+ use_glibj_zip=false
+ ;;
+"yes")
+ { { echo "$as_me:$LINENO: error: Please suply an absolute path to a prebuilt glibj.zip" >&5
+echo "$as_me: error: Please suply an absolute path to a prebuilt glibj.zip" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+*)
+ use_glibj_zip=true
+ PATH_TO_GLIBJ_ZIP=$with_glibj_zip
+ ;;
+esac;
+
+
+
+if test x$use_glibj_zip = xtrue; then
+ USE_PREBUILT_GLIBJ_ZIP_TRUE=
+ USE_PREBUILT_GLIBJ_ZIP_FALSE='#'
+else
+ USE_PREBUILT_GLIBJ_ZIP_TRUE='#'
+ USE_PREBUILT_GLIBJ_ZIP_FALSE=
+fi
+
+
+
+
+# Check whether --enable-local-sockets was given.
+if test "${enable_local_sockets+set}" = set; then
+ enableval=$enable_local_sockets; case "${enableval}" in
+ yes)
+ ENABLE_LOCAL_SOCKETS=yes
+ ;;
+ *)
+ ENABLE_LOCAL_SOCKETS=no
+ ;;
+ esac
+fi
+
+if test "x$ENABLE_LOCAL_SOCKETS" = "xyes"
+then
+ if test "${ac_cv_header_sys_un_h+set}" = set; then
+ { echo "$as_me:$LINENO: checking for sys/un.h" >&5
+echo $ECHO_N "checking for sys/un.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_un_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_un_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_un_h" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/un.h usability" >&5
+echo $ECHO_N "checking sys/un.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <sys/un.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/un.h presence" >&5
+echo $ECHO_N "checking sys/un.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/un.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/un.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/un.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/un.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/un.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/un.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/un.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/un.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: sys/un.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/un.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to classpath@gnu.org ##
+## -------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/un.h" >&5
+echo $ECHO_N "checking for sys/un.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_un_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_sys_un_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_un_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_un_h" >&6; }
+fi
- ac_config_files="$ac_config_files Makefile doc/Makefile doc/api/Makefile external/Makefile external/sax/Makefile external/w3c_dom/Makefile external/relaxngDatatype/Makefile gnu/classpath/Configuration.java include/Makefile native/Makefile native/fdlibm/Makefile native/jawt/Makefile native/jni/Makefile native/jni/classpath/Makefile native/jni/java-io/Makefile native/jni/java-lang/Makefile native/jni/java-net/Makefile native/jni/java-nio/Makefile native/jni/java-util/Makefile native/jni/gtk-peer/Makefile native/jni/qt-peer/Makefile native/jni/xmlj/Makefile native/jni/midi-alsa/Makefile native/jni/midi-dssi/Makefile native/target/Makefile native/target/Linux/Makefile native/target/generic/Makefile resource/Makefile scripts/Makefile scripts/classpath.spec lib/Makefile lib/gen-classlist.sh lib/copy-vmresources.sh tools/Makefile examples/Makefile examples/Makefile.jawt"
- ac_config_commands="$ac_config_commands gen-classlist"
- ac_config_commands="$ac_config_commands copy-vmresources"
+
+
+
+
+for ac_func in read write bind listen accept shutdown
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ { { echo "$as_me:$LINENO: error: networking support not available" >&5
+echo "$as_me: error: networking support not available" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+done
+
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_LOCAL_SOCKETS 1
+_ACEOF
+
+fi
+
+
+if test "x$ENABLE_LOCAL_SOCKETS" = "xyes"; then
+ ENABLE_LOCAL_SOCKETS_TRUE=
+ ENABLE_LOCAL_SOCKETS_FALSE='#'
+else
+ ENABLE_LOCAL_SOCKETS_TRUE='#'
+ ENABLE_LOCAL_SOCKETS_FALSE=
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile doc/Makefile doc/api/Makefile external/Makefile external/sax/Makefile external/w3c_dom/Makefile external/relaxngDatatype/Makefile gnu/classpath/Configuration.java include/Makefile native/Makefile native/fdlibm/Makefile native/jawt/Makefile native/jni/Makefile native/jni/classpath/Makefile native/jni/java-io/Makefile native/jni/java-lang/Makefile native/jni/java-net/Makefile native/jni/java-nio/Makefile native/jni/java-util/Makefile native/jni/gtk-peer/Makefile native/jni/qt-peer/Makefile native/jni/xmlj/Makefile native/jni/midi-alsa/Makefile native/jni/midi-dssi/Makefile native/target/Makefile native/target/Linux/Makefile native/target/generic/Makefile resource/Makefile scripts/Makefile scripts/classpath.spec lib/Makefile lib/gen-classlist.sh lib/copy-vmresources.sh tools/Makefile tools/jarsigner.sh tools/keytool.sh examples/Makefile examples/Makefile.jawt"
+
+ac_config_commands="$ac_config_commands gen-classlist"
+
+ac_config_commands="$ac_config_commands copy-vmresources"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -17696,39 +18706,58 @@ _ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
+ ;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-} |
+ esac |
+ sort
+) |
sed '
+ /^ac_cv_env_/b end
t clear
- : clear
+ :clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
if diff $cache_file confcache >/dev/null 2>&1; then :; else
if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ test "x$cache_file" != "x/dev/null" &&
+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- echo "not updating unwritable cache $cache_file"
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -17737,32 +18766,18 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
@@ -17979,6 +18994,20 @@ echo "$as_me: error: conditional \"REGEN_PARSERS\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${USE_PREBUILT_GLIBJ_ZIP_TRUE}" && test -z "${USE_PREBUILT_GLIBJ_ZIP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"USE_PREBUILT_GLIBJ_ZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"USE_PREBUILT_GLIBJ_ZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_LOCAL_SOCKETS_TRUE}" && test -z "${ENABLE_LOCAL_SOCKETS_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"ENABLE_LOCAL_SOCKETS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_LOCAL_SOCKETS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
@@ -18010,11 +19039,35 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
as_unset=unset
@@ -18023,8 +19076,43 @@ else
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
@@ -18038,18 +19126,19 @@ do
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
@@ -18057,159 +19146,120 @@ fi
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
+# CDPATH.
+$as_unset CDPATH
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+if (dirname -- /) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
@@ -18218,7 +19268,19 @@ else
as_mkdir_p=false
fi
-as_executable_p="test -f"
+# Find out whether ``test -x'' works. Don't use a zero-byte file, as
+# systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ as_executable_p="test -x"
+else
+ as_executable_p=:
+fi
+rm -f conf$$.file
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -18227,31 +19289,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
exec 6>&1
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# Save the log message, to keep $[0] and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by GNU Classpath $as_me 0.90, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by GNU Classpath $as_me 0.91, which was
+generated by GNU Autoconf 2.59d. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -18259,30 +19304,21 @@ generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
+_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
-
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
@@ -18312,19 +19348,21 @@ Configuration commands:
$config_commands
Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
+_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-GNU Classpath config.status 0.90
-configured by $0, generated by GNU Autoconf 2.59,
+GNU Classpath config.status 0.91
+configured by $0, generated by GNU Autoconf 2.59d,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2006 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
@@ -18335,39 +19373,24 @@ while test $# != 0
do
case $1 in
--*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
- -*)
+ *)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
esac
case $ac_option in
# Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
@@ -18377,18 +19400,24 @@ Try \`$0 --help' for more information." >&2;}
$ac_shift
CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
+ -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; } ;;
- *) ac_config_targets="$ac_config_targets $1" ;;
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
esac
shift
@@ -18404,17 +19433,28 @@ fi
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ CONFIG_SHELL=$SHELL
+ export CONFIG_SHELL
+ exec $SHELL "$0" $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
fi
_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ echo "$ac_log"
+} >&5
+_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
#
-# INIT-COMMANDS section.
+# INIT-COMMANDS
#
-
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
# variables for create stdint.h replacement
PACKAGE="$PACKAGE"
@@ -18437,63 +19477,66 @@ ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
_ACEOF
-
-
cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
for ac_config_target in $ac_config_targets
do
- case "$ac_config_target" in
- # Handling of arguments.
- "lib/mkcollections.pl" ) CONFIG_FILES="$CONFIG_FILES lib/mkcollections.pl" ;;
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
- "doc/api/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/api/Makefile" ;;
- "external/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/Makefile" ;;
- "external/sax/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/sax/Makefile" ;;
- "external/w3c_dom/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/w3c_dom/Makefile" ;;
- "external/relaxngDatatype/Makefile" ) CONFIG_FILES="$CONFIG_FILES external/relaxngDatatype/Makefile" ;;
- "gnu/classpath/Configuration.java" ) CONFIG_FILES="$CONFIG_FILES gnu/classpath/Configuration.java" ;;
- "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "native/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/Makefile" ;;
- "native/fdlibm/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/fdlibm/Makefile" ;;
- "native/jawt/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jawt/Makefile" ;;
- "native/jni/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/Makefile" ;;
- "native/jni/classpath/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/classpath/Makefile" ;;
- "native/jni/java-io/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-io/Makefile" ;;
- "native/jni/java-lang/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-lang/Makefile" ;;
- "native/jni/java-net/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-net/Makefile" ;;
- "native/jni/java-nio/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-nio/Makefile" ;;
- "native/jni/java-util/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/java-util/Makefile" ;;
- "native/jni/gtk-peer/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/gtk-peer/Makefile" ;;
- "native/jni/qt-peer/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/qt-peer/Makefile" ;;
- "native/jni/xmlj/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/xmlj/Makefile" ;;
- "native/jni/midi-alsa/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/midi-alsa/Makefile" ;;
- "native/jni/midi-dssi/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/jni/midi-dssi/Makefile" ;;
- "native/target/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/Makefile" ;;
- "native/target/Linux/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/Linux/Makefile" ;;
- "native/target/generic/Makefile" ) CONFIG_FILES="$CONFIG_FILES native/target/generic/Makefile" ;;
- "resource/Makefile" ) CONFIG_FILES="$CONFIG_FILES resource/Makefile" ;;
- "scripts/Makefile" ) CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
- "scripts/classpath.spec" ) CONFIG_FILES="$CONFIG_FILES scripts/classpath.spec" ;;
- "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
- "lib/gen-classlist.sh" ) CONFIG_FILES="$CONFIG_FILES lib/gen-classlist.sh" ;;
- "lib/copy-vmresources.sh" ) CONFIG_FILES="$CONFIG_FILES lib/copy-vmresources.sh" ;;
- "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
- "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
- "examples/Makefile.jawt" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile.jawt" ;;
- "$ac_config_links_1" ) CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "mkcollections.pl" ) CONFIG_COMMANDS="$CONFIG_COMMANDS mkcollections.pl" ;;
- "$ac_stdint_h" ) CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;;
- "gen-classlist" ) CONFIG_COMMANDS="$CONFIG_COMMANDS gen-classlist" ;;
- "copy-vmresources" ) CONFIG_COMMANDS="$CONFIG_COMMANDS copy-vmresources" ;;
- "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+ case $ac_config_target in
+ "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "lib/mkcollections.pl") CONFIG_FILES="$CONFIG_FILES lib/mkcollections.pl" ;;
+ "mkcollections.pl") CONFIG_COMMANDS="$CONFIG_COMMANDS mkcollections.pl" ;;
+ "$ac_config_links_1") CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
+ "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/api/Makefile") CONFIG_FILES="$CONFIG_FILES doc/api/Makefile" ;;
+ "external/Makefile") CONFIG_FILES="$CONFIG_FILES external/Makefile" ;;
+ "external/sax/Makefile") CONFIG_FILES="$CONFIG_FILES external/sax/Makefile" ;;
+ "external/w3c_dom/Makefile") CONFIG_FILES="$CONFIG_FILES external/w3c_dom/Makefile" ;;
+ "external/relaxngDatatype/Makefile") CONFIG_FILES="$CONFIG_FILES external/relaxngDatatype/Makefile" ;;
+ "gnu/classpath/Configuration.java") CONFIG_FILES="$CONFIG_FILES gnu/classpath/Configuration.java" ;;
+ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+ "native/Makefile") CONFIG_FILES="$CONFIG_FILES native/Makefile" ;;
+ "native/fdlibm/Makefile") CONFIG_FILES="$CONFIG_FILES native/fdlibm/Makefile" ;;
+ "native/jawt/Makefile") CONFIG_FILES="$CONFIG_FILES native/jawt/Makefile" ;;
+ "native/jni/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/Makefile" ;;
+ "native/jni/classpath/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/classpath/Makefile" ;;
+ "native/jni/java-io/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/java-io/Makefile" ;;
+ "native/jni/java-lang/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/java-lang/Makefile" ;;
+ "native/jni/java-net/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/java-net/Makefile" ;;
+ "native/jni/java-nio/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/java-nio/Makefile" ;;
+ "native/jni/java-util/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/java-util/Makefile" ;;
+ "native/jni/gtk-peer/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/gtk-peer/Makefile" ;;
+ "native/jni/qt-peer/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/qt-peer/Makefile" ;;
+ "native/jni/xmlj/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/xmlj/Makefile" ;;
+ "native/jni/midi-alsa/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/midi-alsa/Makefile" ;;
+ "native/jni/midi-dssi/Makefile") CONFIG_FILES="$CONFIG_FILES native/jni/midi-dssi/Makefile" ;;
+ "native/target/Makefile") CONFIG_FILES="$CONFIG_FILES native/target/Makefile" ;;
+ "native/target/Linux/Makefile") CONFIG_FILES="$CONFIG_FILES native/target/Linux/Makefile" ;;
+ "native/target/generic/Makefile") CONFIG_FILES="$CONFIG_FILES native/target/generic/Makefile" ;;
+ "resource/Makefile") CONFIG_FILES="$CONFIG_FILES resource/Makefile" ;;
+ "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+ "scripts/classpath.spec") CONFIG_FILES="$CONFIG_FILES scripts/classpath.spec" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "lib/gen-classlist.sh") CONFIG_FILES="$CONFIG_FILES lib/gen-classlist.sh" ;;
+ "lib/copy-vmresources.sh") CONFIG_FILES="$CONFIG_FILES lib/copy-vmresources.sh" ;;
+ "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+ "tools/jarsigner.sh") CONFIG_FILES="$CONFIG_FILES tools/jarsigner.sh" ;;
+ "tools/keytool.sh") CONFIG_FILES="$CONFIG_FILES tools/keytool.sh" ;;
+ "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+ "examples/Makefile.jawt") CONFIG_FILES="$CONFIG_FILES examples/Makefile.jawt" ;;
+ "gen-classlist") CONFIG_COMMANDS="$CONFIG_COMMANDS gen-classlist" ;;
+ "copy-vmresources") CONFIG_COMMANDS="$CONFIG_COMMANDS copy-vmresources" ;;
+
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
esac
done
+
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
@@ -18506,703 +19549,734 @@ if $ac_need_defaults; then
fi
# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
+# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
-
# Create a (secure) tmp directory for tmp files.
{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
} ||
{
echo "$me: cannot create a temporary directory in ." >&2
{ (exit 1); exit 1; }
}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
#
-# CONFIG_FILES section.
+# Set up the sed scripts for CONFIG_FILES section.
#
# No need to generate the scripts if there are no CONFIG_FILES.
# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@target@,$target,;t t
-s,@target_cpu@,$target_cpu,;t t
-s,@target_vendor@,$target_vendor,;t t
-s,@target_os@,$target_os,;t t
-s,@LIBVERSION@,$LIBVERSION,;t t
-s,@CLASSPATH_MODULE@,$CLASSPATH_MODULE,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@CYGPATH_W@,$CYGPATH_W,;t t
-s,@PACKAGE@,$PACKAGE,;t t
-s,@VERSION@,$VERSION,;t t
-s,@ACLOCAL@,$ACLOCAL,;t t
-s,@AUTOCONF@,$AUTOCONF,;t t
-s,@AUTOMAKE@,$AUTOMAKE,;t t
-s,@AUTOHEADER@,$AUTOHEADER,;t t
-s,@MAKEINFO@,$MAKEINFO,;t t
-s,@install_sh@,$install_sh,;t t
-s,@STRIP@,$STRIP,;t t
-s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-s,@mkdir_p@,$mkdir_p,;t t
-s,@AWK@,$AWK,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@am__leading_dot@,$am__leading_dot,;t t
-s,@AMTAR@,$AMTAR,;t t
-s,@am__tar@,$am__tar,;t t
-s,@am__untar@,$am__untar,;t t
-s,@CREATE_COLLECTIONS_TRUE@,$CREATE_COLLECTIONS_TRUE,;t t
-s,@CREATE_COLLECTIONS_FALSE@,$CREATE_COLLECTIONS_FALSE,;t t
-s,@CREATE_JNI_LIBRARIES_TRUE@,$CREATE_JNI_LIBRARIES_TRUE,;t t
-s,@CREATE_JNI_LIBRARIES_FALSE@,$CREATE_JNI_LIBRARIES_FALSE,;t t
-s,@CREATE_CORE_JNI_LIBRARIES_TRUE@,$CREATE_CORE_JNI_LIBRARIES_TRUE,;t t
-s,@CREATE_CORE_JNI_LIBRARIES_FALSE@,$CREATE_CORE_JNI_LIBRARIES_FALSE,;t t
-s,@default_toolkit@,$default_toolkit,;t t
-s,@CREATE_XMLJ_LIBRARY_TRUE@,$CREATE_XMLJ_LIBRARY_TRUE,;t t
-s,@CREATE_XMLJ_LIBRARY_FALSE@,$CREATE_XMLJ_LIBRARY_FALSE,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@DEPDIR@,$DEPDIR,;t t
-s,@am__include@,$am__include,;t t
-s,@am__quote@,$am__quote,;t t
-s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
-s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
-s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-s,@CCDEPMODE@,$CCDEPMODE,;t t
-s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@CREATE_ALSA_LIBRARIES_TRUE@,$CREATE_ALSA_LIBRARIES_TRUE,;t t
-s,@CREATE_ALSA_LIBRARIES_FALSE@,$CREATE_ALSA_LIBRARIES_FALSE,;t t
-s,@CREATE_DSSI_LIBRARIES_TRUE@,$CREATE_DSSI_LIBRARIES_TRUE,;t t
-s,@CREATE_DSSI_LIBRARIES_FALSE@,$CREATE_DSSI_LIBRARIES_FALSE,;t t
-s,@CREATE_GTK_PEER_LIBRARIES_TRUE@,$CREATE_GTK_PEER_LIBRARIES_TRUE,;t t
-s,@CREATE_GTK_PEER_LIBRARIES_FALSE@,$CREATE_GTK_PEER_LIBRARIES_FALSE,;t t
-s,@GTK_CAIRO_ENABLED@,$GTK_CAIRO_ENABLED,;t t
-s,@GTK_CAIRO_TRUE@,$GTK_CAIRO_TRUE,;t t
-s,@GTK_CAIRO_FALSE@,$GTK_CAIRO_FALSE,;t t
-s,@CREATE_QT_PEER_LIBRARIES_TRUE@,$CREATE_QT_PEER_LIBRARIES_TRUE,;t t
-s,@CREATE_QT_PEER_LIBRARIES_FALSE@,$CREATE_QT_PEER_LIBRARIES_FALSE,;t t
-s,@nativelibdir@,$nativelibdir,;t t
-s,@glibjdir@,$glibjdir,;t t
-s,@CREATE_JNI_HEADERS_TRUE@,$CREATE_JNI_HEADERS_TRUE,;t t
-s,@CREATE_JNI_HEADERS_FALSE@,$CREATE_JNI_HEADERS_FALSE,;t t
-s,@LN_S@,$LN_S,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@LIBTOOL@,$LIBTOOL,;t t
-s,@CXX@,$CXX,;t t
-s,@CXXFLAGS@,$CXXFLAGS,;t t
-s,@ac_ct_CXX@,$ac_ct_CXX,;t t
-s,@CXXDEPMODE@,$CXXDEPMODE,;t t
-s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-s,@CXXCPP@,$CXXCPP,;t t
-s,@PERL@,$PERL,;t t
-s,@COLLECTIONS_PREFIX@,$COLLECTIONS_PREFIX,;t t
-s,@LIBICONV@,$LIBICONV,;t t
-s,@LTLIBICONV@,$LTLIBICONV,;t t
-s,@WARNING_CFLAGS@,$WARNING_CFLAGS,;t t
-s,@STRICT_WARNING_CFLAGS@,$STRICT_WARNING_CFLAGS,;t t
-s,@ERROR_CFLAGS@,$ERROR_CFLAGS,;t t
-s,@PKG_CONFIG@,$PKG_CONFIG,;t t
-s,@XML_CFLAGS@,$XML_CFLAGS,;t t
-s,@XML_LIBS@,$XML_LIBS,;t t
-s,@XSLT_CFLAGS@,$XSLT_CFLAGS,;t t
-s,@XSLT_LIBS@,$XSLT_LIBS,;t t
-s,@X_CFLAGS@,$X_CFLAGS,;t t
-s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
-s,@X_LIBS@,$X_LIBS,;t t
-s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
-s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t
-s,@GTK_LIBS@,$GTK_LIBS,;t t
-s,@CAIRO_CFLAGS@,$CAIRO_CFLAGS,;t t
-s,@CAIRO_LIBS@,$CAIRO_LIBS,;t t
-s,@FREETYPE2_CFLAGS@,$FREETYPE2_CFLAGS,;t t
-s,@FREETYPE2_LIBS@,$FREETYPE2_LIBS,;t t
-s,@PANGOFT2_CFLAGS@,$PANGOFT2_CFLAGS,;t t
-s,@PANGOFT2_LIBS@,$PANGOFT2_LIBS,;t t
-s,@QT_CFLAGS@,$QT_CFLAGS,;t t
-s,@QT_LIBS@,$QT_LIBS,;t t
-s,@MOC@,$MOC,;t t
-s,@USER_JAVAH@,$USER_JAVAH,;t t
-s,@USER_SPECIFIED_JAVAH_TRUE@,$USER_SPECIFIED_JAVAH_TRUE,;t t
-s,@USER_SPECIFIED_JAVAH_FALSE@,$USER_SPECIFIED_JAVAH_FALSE,;t t
-s,@CLASSPATH_INCLUDES@,$CLASSPATH_INCLUDES,;t t
-s,@GCJ@,$GCJ,;t t
-s,@JIKES@,$JIKES,;t t
-s,@JIKESENCODING@,$JIKESENCODING,;t t
-s,@JIKESWARNINGS@,$JIKESWARNINGS,;t t
-s,@KJC@,$KJC,;t t
-s,@GCJX@,$GCJX,;t t
-s,@ECJ@,$ECJ,;t t
-s,@FOUND_GCJ_TRUE@,$FOUND_GCJ_TRUE,;t t
-s,@FOUND_GCJ_FALSE@,$FOUND_GCJ_FALSE,;t t
-s,@FOUND_JIKES_TRUE@,$FOUND_JIKES_TRUE,;t t
-s,@FOUND_JIKES_FALSE@,$FOUND_JIKES_FALSE,;t t
-s,@FOUND_ECJ_TRUE@,$FOUND_ECJ_TRUE,;t t
-s,@FOUND_ECJ_FALSE@,$FOUND_ECJ_FALSE,;t t
-s,@FOUND_KJC_TRUE@,$FOUND_KJC_TRUE,;t t
-s,@FOUND_KJC_FALSE@,$FOUND_KJC_FALSE,;t t
-s,@FOUND_GCJX_TRUE@,$FOUND_GCJX_TRUE,;t t
-s,@FOUND_GCJX_FALSE@,$FOUND_GCJX_FALSE,;t t
-s,@USER_CLASSLIB@,$USER_CLASSLIB,;t t
-s,@USER_SPECIFIED_CLASSLIB_TRUE@,$USER_SPECIFIED_CLASSLIB_TRUE,;t t
-s,@USER_SPECIFIED_CLASSLIB_FALSE@,$USER_SPECIFIED_CLASSLIB_FALSE,;t t
-s,@vm_classes@,$vm_classes,;t t
-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-s,@MAINT@,$MAINT,;t t
-s,@LIBDEBUG@,$LIBDEBUG,;t t
-s,@INIT_LOAD_LIBRARY@,$INIT_LOAD_LIBRARY,;t t
-s,@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@,$JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION,;t t
-s,@REMOVE@,$REMOVE,;t t
-s,@MKDIR@,$MKDIR,;t t
-s,@CP@,$CP,;t t
-s,@DATE@,$DATE,;t t
-s,@FIND@,$FIND,;t t
-s,@ZIP@,$ZIP,;t t
-s,@FASTJAR@,$FASTJAR,;t t
-s,@INSTALL_GLIBJ_ZIP_TRUE@,$INSTALL_GLIBJ_ZIP_TRUE,;t t
-s,@INSTALL_GLIBJ_ZIP_FALSE@,$INSTALL_GLIBJ_ZIP_FALSE,;t t
-s,@INSTALL_CLASS_FILES_TRUE@,$INSTALL_CLASS_FILES_TRUE,;t t
-s,@INSTALL_CLASS_FILES_FALSE@,$INSTALL_CLASS_FILES_FALSE,;t t
-s,@BUILD_CLASS_FILES_TRUE@,$BUILD_CLASS_FILES_TRUE,;t t
-s,@BUILD_CLASS_FILES_FALSE@,$BUILD_CLASS_FILES_FALSE,;t t
-s,@EXAMPLESDIR@,$EXAMPLESDIR,;t t
-s,@GJDOC@,$GJDOC,;t t
-s,@CREATE_API_DOCS_TRUE@,$CREATE_API_DOCS_TRUE,;t t
-s,@CREATE_API_DOCS_FALSE@,$CREATE_API_DOCS_FALSE,;t t
-s,@JAY@,$JAY,;t t
-s,@JAY_SKELETON@,$JAY_SKELETON,;t t
-s,@REGEN_PARSERS_TRUE@,$REGEN_PARSERS_TRUE,;t t
-s,@REGEN_PARSERS_FALSE@,$REGEN_PARSERS_FALSE,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
- cat >>$CONFIG_STATUS <<\_ACEOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+LIBVERSION!$LIBVERSION$ac_delim
+CLASSPATH_MODULE!$CLASSPATH_MODULE$ac_delim
+CLASSPATH_CONVENIENCE!$CLASSPATH_CONVENIENCE$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+CREATE_COLLECTIONS_TRUE!$CREATE_COLLECTIONS_TRUE$ac_delim
+CREATE_COLLECTIONS_FALSE!$CREATE_COLLECTIONS_FALSE$ac_delim
+CREATE_JNI_LIBRARIES_TRUE!$CREATE_JNI_LIBRARIES_TRUE$ac_delim
+CREATE_JNI_LIBRARIES_FALSE!$CREATE_JNI_LIBRARIES_FALSE$ac_delim
+CREATE_CORE_JNI_LIBRARIES_TRUE!$CREATE_CORE_JNI_LIBRARIES_TRUE$ac_delim
+CREATE_CORE_JNI_LIBRARIES_FALSE!$CREATE_CORE_JNI_LIBRARIES_FALSE$ac_delim
+default_toolkit!$default_toolkit$ac_delim
+CREATE_XMLJ_LIBRARY_TRUE!$CREATE_XMLJ_LIBRARY_TRUE$ac_delim
+CREATE_XMLJ_LIBRARY_FALSE!$CREATE_XMLJ_LIBRARY_FALSE$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+_ACEOF
+
+ if test `grep -c "$ac_delim\$" conf$$subs.sed` = 97; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
-fi # test -n "$CONFIG_FILES"
+done
+
+ac_eof=
+if grep '^CEOF$' conf$$subs.sed >/dev/null; then
+ ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF//p' conf$$subs.sed | sort -nru | sed 1q`
+ ac_eof=`expr 0$ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+CREATE_ALSA_LIBRARIES_TRUE!$CREATE_ALSA_LIBRARIES_TRUE$ac_delim
+CREATE_ALSA_LIBRARIES_FALSE!$CREATE_ALSA_LIBRARIES_FALSE$ac_delim
+CREATE_DSSI_LIBRARIES_TRUE!$CREATE_DSSI_LIBRARIES_TRUE$ac_delim
+CREATE_DSSI_LIBRARIES_FALSE!$CREATE_DSSI_LIBRARIES_FALSE$ac_delim
+CREATE_GTK_PEER_LIBRARIES_TRUE!$CREATE_GTK_PEER_LIBRARIES_TRUE$ac_delim
+CREATE_GTK_PEER_LIBRARIES_FALSE!$CREATE_GTK_PEER_LIBRARIES_FALSE$ac_delim
+GTK_CAIRO_ENABLED!$GTK_CAIRO_ENABLED$ac_delim
+GTK_CAIRO_TRUE!$GTK_CAIRO_TRUE$ac_delim
+GTK_CAIRO_FALSE!$GTK_CAIRO_FALSE$ac_delim
+CREATE_QT_PEER_LIBRARIES_TRUE!$CREATE_QT_PEER_LIBRARIES_TRUE$ac_delim
+CREATE_QT_PEER_LIBRARIES_FALSE!$CREATE_QT_PEER_LIBRARIES_FALSE$ac_delim
+nativeexeclibdir!$nativeexeclibdir$ac_delim
+glibjdir!$glibjdir$ac_delim
+CREATE_JNI_HEADERS_TRUE!$CREATE_JNI_HEADERS_TRUE$ac_delim
+CREATE_JNI_HEADERS_FALSE!$CREATE_JNI_HEADERS_FALSE$ac_delim
+LN_S!$LN_S$ac_delim
+RANLIB!$RANLIB$ac_delim
+LIBTOOL!$LIBTOOL$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+CXXDEPMODE!$CXXDEPMODE$ac_delim
+am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim
+am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim
+CXXCPP!$CXXCPP$ac_delim
+PERL!$PERL$ac_delim
+COLLECTIONS_PREFIX!$COLLECTIONS_PREFIX$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+WARNING_CFLAGS!$WARNING_CFLAGS$ac_delim
+STRICT_WARNING_CFLAGS!$STRICT_WARNING_CFLAGS$ac_delim
+ERROR_CFLAGS!$ERROR_CFLAGS$ac_delim
+PKG_CONFIG!$PKG_CONFIG$ac_delim
+XML_CFLAGS!$XML_CFLAGS$ac_delim
+XML_LIBS!$XML_LIBS$ac_delim
+XSLT_CFLAGS!$XSLT_CFLAGS$ac_delim
+XSLT_LIBS!$XSLT_LIBS$ac_delim
+XMKMF!$XMKMF$ac_delim
+X_CFLAGS!$X_CFLAGS$ac_delim
+X_PRE_LIBS!$X_PRE_LIBS$ac_delim
+X_LIBS!$X_LIBS$ac_delim
+X_EXTRA_LIBS!$X_EXTRA_LIBS$ac_delim
+GTK_CFLAGS!$GTK_CFLAGS$ac_delim
+GTK_LIBS!$GTK_LIBS$ac_delim
+CAIRO_CFLAGS!$CAIRO_CFLAGS$ac_delim
+CAIRO_LIBS!$CAIRO_LIBS$ac_delim
+FREETYPE2_CFLAGS!$FREETYPE2_CFLAGS$ac_delim
+FREETYPE2_LIBS!$FREETYPE2_LIBS$ac_delim
+PANGOFT2_CFLAGS!$PANGOFT2_CFLAGS$ac_delim
+PANGOFT2_LIBS!$PANGOFT2_LIBS$ac_delim
+QT_CFLAGS!$QT_CFLAGS$ac_delim
+QT_LIBS!$QT_LIBS$ac_delim
+MOC!$MOC$ac_delim
+USER_JAVAH!$USER_JAVAH$ac_delim
+USER_SPECIFIED_JAVAH_TRUE!$USER_SPECIFIED_JAVAH_TRUE$ac_delim
+USER_SPECIFIED_JAVAH_FALSE!$USER_SPECIFIED_JAVAH_FALSE$ac_delim
+CLASSPATH_INCLUDES!$CLASSPATH_INCLUDES$ac_delim
+GCJ!$GCJ$ac_delim
+JIKES!$JIKES$ac_delim
+JIKESENCODING!$JIKESENCODING$ac_delim
+JIKESWARNINGS!$JIKESWARNINGS$ac_delim
+KJC!$KJC$ac_delim
+GCJX!$GCJX$ac_delim
+ECJ!$ECJ$ac_delim
+FOUND_GCJ_TRUE!$FOUND_GCJ_TRUE$ac_delim
+FOUND_GCJ_FALSE!$FOUND_GCJ_FALSE$ac_delim
+FOUND_JIKES_TRUE!$FOUND_JIKES_TRUE$ac_delim
+FOUND_JIKES_FALSE!$FOUND_JIKES_FALSE$ac_delim
+FOUND_ECJ_TRUE!$FOUND_ECJ_TRUE$ac_delim
+FOUND_ECJ_FALSE!$FOUND_ECJ_FALSE$ac_delim
+FOUND_KJC_TRUE!$FOUND_KJC_TRUE$ac_delim
+FOUND_KJC_FALSE!$FOUND_KJC_FALSE$ac_delim
+FOUND_GCJX_TRUE!$FOUND_GCJX_TRUE$ac_delim
+FOUND_GCJX_FALSE!$FOUND_GCJX_FALSE$ac_delim
+USER_CLASSLIB!$USER_CLASSLIB$ac_delim
+USER_SPECIFIED_CLASSLIB_TRUE!$USER_SPECIFIED_CLASSLIB_TRUE$ac_delim
+USER_SPECIFIED_CLASSLIB_FALSE!$USER_SPECIFIED_CLASSLIB_FALSE$ac_delim
+vm_classes!$vm_classes$ac_delim
+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim
+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim
+MAINT!$MAINT$ac_delim
+LIBDEBUG!$LIBDEBUG$ac_delim
+INIT_LOAD_LIBRARY!$INIT_LOAD_LIBRARY$ac_delim
+JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION!$JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION$ac_delim
+REMOVE!$REMOVE$ac_delim
+MKDIR!$MKDIR$ac_delim
+CP!$CP$ac_delim
+DATE!$DATE$ac_delim
+FIND!$FIND$ac_delim
+ZIP!$ZIP$ac_delim
+FASTJAR!$FASTJAR$ac_delim
+INSTALL_GLIBJ_ZIP_TRUE!$INSTALL_GLIBJ_ZIP_TRUE$ac_delim
+INSTALL_GLIBJ_ZIP_FALSE!$INSTALL_GLIBJ_ZIP_FALSE$ac_delim
+_ACEOF
+
+ if test `grep -c "$ac_delim\$" conf$$subs.sed` = 97; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=
+if grep '^CEOF$' conf$$subs.sed >/dev/null; then
+ ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF//p' conf$$subs.sed | sort -nru | sed 1q`
+ ac_eof=`expr 0$ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+INSTALL_CLASS_FILES_TRUE!$INSTALL_CLASS_FILES_TRUE$ac_delim
+INSTALL_CLASS_FILES_FALSE!$INSTALL_CLASS_FILES_FALSE$ac_delim
+BUILD_CLASS_FILES_TRUE!$BUILD_CLASS_FILES_TRUE$ac_delim
+BUILD_CLASS_FILES_FALSE!$BUILD_CLASS_FILES_FALSE$ac_delim
+EXAMPLESDIR!$EXAMPLESDIR$ac_delim
+GJDOC!$GJDOC$ac_delim
+CREATE_API_DOCS_TRUE!$CREATE_API_DOCS_TRUE$ac_delim
+CREATE_API_DOCS_FALSE!$CREATE_API_DOCS_FALSE$ac_delim
+JAY!$JAY$ac_delim
+JAY_SKELETON!$JAY_SKELETON$ac_delim
+REGEN_PARSERS_TRUE!$REGEN_PARSERS_TRUE$ac_delim
+REGEN_PARSERS_FALSE!$REGEN_PARSERS_FALSE$ac_delim
+USE_PREBUILT_GLIBJ_ZIP_TRUE!$USE_PREBUILT_GLIBJ_ZIP_TRUE$ac_delim
+USE_PREBUILT_GLIBJ_ZIP_FALSE!$USE_PREBUILT_GLIBJ_ZIP_FALSE$ac_delim
+PATH_TO_GLIBJ_ZIP!$PATH_TO_GLIBJ_ZIP$ac_delim
+ENABLE_LOCAL_SOCKETS_TRUE!$ENABLE_LOCAL_SOCKETS_TRUE$ac_delim
+ENABLE_LOCAL_SOCKETS_FALSE!$ENABLE_LOCAL_SOCKETS_FALSE$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+ if test `grep -c "$ac_delim\$" conf$$subs.sed` = 19; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+ac_eof=
+if grep '^CEOF$' conf$$subs.sed >/dev/null; then
+ ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF//p' conf$$subs.sed | sort -nru | sed 1q`
+ ac_eof=`expr 0$ac_eof + 1`
+fi
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ ac_file_inputs="$ac_file_inputs $ac_f"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input="Generated from "`IFS=:
+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ fi
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin";;
+ esac
+ ;;
esac
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+_ACEOF
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=
+
+case `sed -n '/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
$extrasub
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out
+
+ rm -f "$tmp/stdin"
case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
+ -) cat "$tmp/out"; rm -f "$tmp/out";;
+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+
+ # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+ # NAME is the cpp macro being defined, VALUE is the value it is being given.
+ # PARAMS is the parameter list in the macro definition--in most cases, it's
+ # just an empty string.
+ #
+ ac_dA='s,^\([ ]*#[ ]*\)[^ ]*\([ ][ ]*'
+ ac_dB='\)[ (].*$,\1define\2'
+ ac_dC=' '
+ ac_dD=' ,'
+
+ ac_word_regexp=[_$as_cr_Letters][_$as_cr_alnum]*
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status. If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless. But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+uniq confdefs.h |
+ sed -n '
+ t rset
+ :rset
+ s/^[ ]*#[ ]*define[ ][ ]*//
+ t ok
+ d
+ :ok
+ s/[\\&,]/\\&/g
+ s/[\\$`]/\\&/g
+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/${ac_dA}\1$ac_dB\2${ac_dC}\3$ac_dD/p
+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/${ac_dA}\1$ac_dB${ac_dC}\2$ac_dD/p
+ ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments. This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[ #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=96
+
+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ # Write a here document:
+ echo ' # First, check the format of the line:
+ cat >"$tmp/defines.sed" <<CEOF
+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_regexp[ ]*$/b def
+/^[ ]*#[ ]*define[ ][ ]*$ac_word_regexp[( ]/b def
+b
+:def' >>$CONFIG_STATUS
+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+ grep . conftest.tail >/dev/null || break
rm -f conftest.defines
mv conftest.tail conftest.defines
done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
+rm -f conftest.defines conftest.tail
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ echo "/* $configure_input */" >"$tmp/config.h"
+ cat "$ac_result" >>"$tmp/config.h"
+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
{ echo "$as_me:$LINENO: $ac_file is unchanged" >&5
echo "$as_me: $ac_file is unchanged" >&6;}
else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
rm -f $ac_file
- mv $tmp/config.h $ac_file
+ mv "$tmp/config.h" $ac_file
fi
else
- cat $tmp/config.h
- rm -f $tmp/config.h
+ echo "/* $configure_input */"
+ cat "$ac_result"
fi
+ rm -f "$tmp/out12"
# Compute $ac_file's index in $config_headers.
_am_stamp_count=1
for _am_header in $config_headers :; do
@@ -19213,273 +20287,65 @@ for _am_header in $config_headers :; do
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
-echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file ||
$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X$ac_file : 'X\(//\)[^/]' \| \
X$ac_file : 'X\(//\)$' \| \
- X$ac_file : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X$ac_file : 'X\(/\)' \| . 2>/dev/null ||
echo X$ac_file |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`/stamp-h$_am_stamp_count
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_LINKS section.
-#
-
-for ac_file in : $CONFIG_LINKS; do test "x$ac_file" = x: && continue
- ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+ :L)
+ #
+ # CONFIG_LINK
+ #
- { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_dest" >&5
-echo "$as_me: linking $srcdir/$ac_source to $ac_dest" >&6;}
+ { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5
+echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;}
if test ! -r $srcdir/$ac_source; then
{ { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5
echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;}
{ (exit 1); exit 1; }; }
fi
- rm -f $ac_dest
-
- # Make relative symlinks.
- ac_dest_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_dest" : 'X\(//\)[^/]' \| \
- X"$ac_dest" : 'X\(//\)$' \| \
- X"$ac_dest" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dest_dir"
- else
- as_dir="$ac_dest_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dest_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dest_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dest_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dest_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dest_dir";;
-*)
- case "$ac_dest_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dest_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dest_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
+ rm -f $ac_file
+ # Try a relative symlink, then a hard link, then a copy.
case $srcdir in
[\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;;
- *) ac_rel_source=$ac_top_builddir$srcdir/$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;;
esac
-
- # Try a symlink, then a hard link, then a copy.
- ln -s $ac_rel_source $ac_dest 2>/dev/null ||
- ln $srcdir/$ac_source $ac_dest 2>/dev/null ||
- cp -p $srcdir/$ac_source $ac_dest ||
- { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&5
-echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&2;}
+ ln -s $ac_rel_source $ac_file 2>/dev/null ||
+ ln $srcdir/$ac_source $ac_file 2>/dev/null ||
+ cp -p $srcdir/$ac_source $ac_file ||
+ { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5
+echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;}
{ (exit 1); exit 1; }; }
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_COMMANDS section.
-#
-for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
- ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_dest" : 'X\(//\)[^/]' \| \
- X"$ac_dest" : 'X\(//\)$' \| \
- X"$ac_dest" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_dest" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- ac_builddir=.
-
-if test "$ac_dir" != .; then
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ ;;
+ :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-echo "$as_me: executing $ac_dest commands" >&6;}
- case $ac_dest in
- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
@@ -19489,18 +20355,29 @@ echo "$as_me: executing $ac_dest commands" >&6;}
# each Makefile.in and add a new line on top of each file to say so.
# So let's grep whole file.
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
- dirpart=`(dirname "$mf") 2>/dev/null ||
+ dirpart=`$as_dirname -- "$mf" ||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$mf" : 'X\(//\)[^/]' \| \
X"$mf" : 'X\(//\)$' \| \
- X"$mf" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$mf" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
else
continue
fi
@@ -19522,50 +20399,77 @@ echo X"$mf" |
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
- fdir=`(dirname "$file") 2>/dev/null ||
+ fdir=`$as_dirname -- "$file" ||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$file" : 'X\(//\)[^/]' \| \
X"$file" : 'X\(//\)$' \| \
- X"$file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p $dirpart/$fdir
- else
- as_dir=$dirpart/$fdir
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir=$dirpart/$fdir
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
;;
- mkcollections.pl ) chmod 755 lib/mkcollections.pl ;;
- $ac_stdint_h )
+ "mkcollections.pl":C) chmod 755 lib/mkcollections.pl ;;
+ "$ac_stdint_h":C)
{ echo "$as_me:$LINENO: creating $ac_stdint_h : $_ac_stdint_h" >&5
echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;}
ac_stdint=$tmp/_stdint.h
@@ -20001,54 +20905,80 @@ fi
{ echo "$as_me:$LINENO: $ac_stdint_h is unchanged" >&5
echo "$as_me: $ac_stdint_h is unchanged" >&6;}
else
- ac_dir=`(dirname "$ac_stdint_h") 2>/dev/null ||
+ ac_dir=`$as_dirname -- "$ac_stdint_h" ||
$as_expr X"$ac_stdint_h" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_stdint_h" : 'X\(//\)[^/]' \| \
X"$ac_stdint_h" : 'X\(//\)$' \| \
- X"$ac_stdint_h" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$ac_stdint_h" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$ac_stdint_h" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
rm -f $ac_stdint_h
mv $ac_stdint $ac_stdint_h
fi
;;
- gen-classlist ) chmod 755 lib/gen-classlist.sh ;;
- copy-vmresources ) chmod 755 lib/copy-vmresources.sh ;;
+ "gen-classlist":C) chmod 755 lib/gen-classlist.sh ;;
+ "copy-vmresources":C) chmod 755 lib/copy-vmresources.sh ;;
+
esac
-done
-_ACEOF
+done # for ac_tag
-cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
_ACEOF
diff --git a/libjava/classpath/configure.ac b/libjava/classpath/configure.ac
index f4ef351..658b375 100644
--- a/libjava/classpath/configure.ac
+++ b/libjava/classpath/configure.ac
@@ -6,7 +6,7 @@ dnl -----------------------------------------------------------
dnl define([AC_CACHE_LOAD], )dnl
dnl define([AC_CACHE_SAVE], )dnl
-AC_INIT([GNU Classpath],[0.90],[classpath@gnu.org],[classpath])
+AC_INIT([GNU Classpath],[0.91],[classpath@gnu.org],[classpath])
AC_CONFIG_SRCDIR(java/lang/System.java)
AC_CANONICAL_TARGET
@@ -33,6 +33,9 @@ esac
CLASSPATH_MODULE="${cp_module} -version-info ${LIBVERSION} -no-undefined"
AC_SUBST(CLASSPATH_MODULE)
+CLASSPATH_CONVENIENCE="-no-undefined"
+AC_SUBST(CLASSPATH_CONVENIENCE)
+
AC_PREREQ(2.59)
AM_INIT_AUTOMAKE([1.9.0 gnu std-options tar-ustar])
AC_CONFIG_HEADERS([include/config.h])
@@ -202,13 +205,13 @@ dnl -----------------------------------------------------------
AC_ARG_WITH([native-libdir],
[AS_HELP_STRING(--with-native-libdir,sets the installation directore for native libraries [default='${libdir}/${PACKAGE}'])],
[
- nativelibdir=${withval}
+ nativeexeclibdir=${withval}
],
[
- nativelibdir='${libdir}/${PACKAGE}'
+ nativeexeclibdir='${libdir}/${PACKAGE}'
])
-AC_SUBST(nativelibdir)
+AC_SUBST(nativeexeclibdir)
dnl -----------------------------------------------------------
dnl Sets the Java library installation dir.
@@ -297,7 +300,7 @@ if test "x${COMPILE_JNI}" = xyes; then
strerror_r \
fcntl \
mmap munmap mincore msync madvise getpagesize sysconf \
- isnan])
+ ])
AC_HEADER_TIME
AC_STRUCT_TM
@@ -588,6 +591,57 @@ AC_ARG_ENABLE([portable-native-sync],
AX_CREATE_STDINT_H([include/config-int.h])
+dnl -----------------------------------------------------------------------
+dnl Support for using a prebuilt class library
+dnl -----------------------------------------------------------------------
+AC_ARG_WITH([glibj_zip],
+ AS_HELP_STRING([--with-glibj-zip=ABS.PATH],
+ [use prebuilt glibj.zip class library]))
+
+case "$with_glibj_zip" in
+"")
+ use_glibj_zip=false
+ ;;
+"no" )
+ use_glibj_zip=false
+ ;;
+"yes")
+ AC_MSG_ERROR([Please suply an absolute path to a prebuilt glibj.zip])
+ ;;
+*)
+ use_glibj_zip=true
+ PATH_TO_GLIBJ_ZIP=$with_glibj_zip
+ ;;
+esac;
+
+AM_CONDITIONAL(USE_PREBUILT_GLIBJ_ZIP, test x$use_glibj_zip = xtrue)
+AC_SUBST(PATH_TO_GLIBJ_ZIP)
+
+
+dnl -----------------------------------------------------------
+dnl Check if local socket support should be included.
+dnl -----------------------------------------------------------
+AC_ARG_ENABLE([local-sockets],
+ [AS_HELP_STRING(--enable-local-sockets,enables local (AF_LOCAL) socket API [default: no])],
+ [case "${enableval}" in
+ yes)
+ ENABLE_LOCAL_SOCKETS=yes
+ ;;
+ *)
+ ENABLE_LOCAL_SOCKETS=no
+ ;;
+ esac],
+ [])
+if test "x$ENABLE_LOCAL_SOCKETS" = "xyes"
+then
+ AC_CHECK_HEADER([sys/un.h])
+ AC_CHECK_FUNCS([read write bind listen accept shutdown], [],
+ AC_MSG_ERROR([networking support not available]))
+ AC_DEFINE(ENABLE_LOCAL_SOCKETS, [1], [Define to enable support for local sockets.])
+fi
+AM_CONDITIONAL(ENABLE_LOCAL_SOCKETS, test "x$ENABLE_LOCAL_SOCKETS" = "xyes")
+
+
dnl -----------------------------------------------------------
dnl output files
dnl -----------------------------------------------------------
@@ -625,6 +679,8 @@ lib/Makefile
lib/gen-classlist.sh
lib/copy-vmresources.sh
tools/Makefile
+tools/jarsigner.sh
+tools/keytool.sh
examples/Makefile
examples/Makefile.jawt])
AC_CONFIG_COMMANDS([gen-classlist],[chmod 755 lib/gen-classlist.sh])
diff --git a/libjava/classpath/doc/Makefile.am b/libjava/classpath/doc/Makefile.am
index f0be6c8..c4a7856 100644
--- a/libjava/classpath/doc/Makefile.am
+++ b/libjava/classpath/doc/Makefile.am
@@ -11,4 +11,4 @@ EXTRA_DIST = README.jaxp
%.ps : %.dvi
dvips -o $@ $<
-docs: hacking.ps vmintegration.ps
+docs: hacking.ps vmintegration.ps tools.ps
diff --git a/libjava/classpath/doc/Makefile.in b/libjava/classpath/doc/Makefile.in
index 8c5bc87..b3c7077 100644
--- a/libjava/classpath/doc/Makefile.in
+++ b/libjava/classpath/doc/Makefile.in
@@ -78,6 +78,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -117,6 +118,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -137,6 +140,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -184,6 +188,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -202,8 +207,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -215,8 +223,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -233,7 +239,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -241,18 +250,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -567,7 +580,7 @@ uninstall-info: uninstall-info-recursive
%.ps : %.dvi
dvips -o $@ $<
-docs: hacking.ps vmintegration.ps
+docs: hacking.ps vmintegration.ps tools.ps
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libjava/classpath/doc/api/Makefile.in b/libjava/classpath/doc/api/Makefile.in
index fbdc5f7..6123ba9 100644
--- a/libjava/classpath/doc/api/Makefile.in
+++ b/libjava/classpath/doc/api/Makefile.in
@@ -71,6 +71,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -110,6 +111,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -130,6 +133,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -177,6 +181,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -195,8 +200,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -208,8 +216,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -226,7 +232,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -234,18 +243,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/doc/hacking.texinfo b/libjava/classpath/doc/hacking.texinfo
index 34b1099..efb7aa9 100644
--- a/libjava/classpath/doc/hacking.texinfo
+++ b/libjava/classpath/doc/hacking.texinfo
@@ -653,7 +653,11 @@ have @code{serialVersionUID} declared.
@item
Don't declare unchecked exceptions in the @code{throws} clause of a
method. However, if throwing an unchecked exception is part of the
-method's API, you should mention it in the Javadoc.
+method's API, you should mention it in the Javadoc. There is one
+important exception to this rule, which is that a stub method should
+be marked as throwing @code{gnu.classpath.NotImplementedException}.
+This will let our API comparison tools note that the method is not
+fully implemented.
@item
When overriding @code{Object.equals}, remember that @code{instanceof}
diff --git a/libjava/classpath/doc/native.api b/libjava/classpath/doc/native.api
deleted file mode 100644
index c10301f..0000000
--- a/libjava/classpath/doc/native.api
+++ /dev/null
@@ -1,81 +0,0 @@
-GNU Classpath Native State API - Version 0.99.1
-Written by Paul Fisher (rao@gnu.org)
-
-For all function calls, if an error occurs, such that `NULL' or a
-negative value is returned, it's very possible that an exception has
-been thrown from within the function. The exception is not cleared,
-and you are responsible for dealing with the thrown exception.
-
-High level API:
-
-For using the highlevel API, in all cases, OBJ must contain a `final
-int' field called "native_state", which has been previously set to the
-value of java.lang.System.identityHashCode(OBJ).
-
-Function: struct state_table * init_state_table (JNIEnv *ENV,
- jclass CLAZZ)
-
- Creates a state table of default size. Returns `NULL' on error.
-
-Function: struct state_table * init_state_table_with_size (JNIEnv *ENV,
- jclass CLAZZ,
- jint SIZE)
-
- Creates a state table, with a tablesize of SIZE. SIZE should
- always be prime. Returns `NULL' on error.
-
-Function: jint set_state (JNIEnv *ENV, jobject OBJ,
- struct state_table *TABLE, void *STATE)
-
- Associates STATE with OBJ, in TABLE. Returns 0 on success, and a
- negative value on failure. STATE must not be `NULL'. set_state is
- reentrant, and calls to set_state/get_state/remove_state_slot may be
- made at the same time.
-
-Function: void * get_state (JNIEnv *ENV, jobject OBJ,
- struct state_table *TABLE)
-
- Retrieves the state associated with OBJ, in TABLE. Returns `NULL'
- if no value is associated with OBJ, or if a failure occurs.
- get_state is reentrant, and calls to
- get_state/set_state/remove_state_slot may be made at the same time.
-
-Function: void * remove_state_slot (JNIEnv *ENV, jobject OBJ,
- struct state_table *TABLE)
-
- Removes the internal slot associated with OBJ, in TABLE. Returns a
- pointer to the C state if a state was associated with OBJ,
- otherwise, `NULL' is returned. After `remove_state' is called,
- `get_state' passing OBJ, will result in `NULL' being returned. This
- function is generally called in the `finalize' method of a class.
- remove_state_slot is reentrant, and calls to
- get_state/set_state/remove_state_slot may be made at the same time.
-
-Low level API:
-
-Function: void set_state_oid (JNIEnv *ENV, jobject LOCK,
- struct state_table *TABLE,
- jint OBJECT_ID, void *STATE)
-
- Associates STATE with OBJECT_ID, in TABLE. STATE must not be
- `NULL'. On entering, a lock is obtained on LOCK. On exiting, the
- lock is released.
-
-Function: void * get_state_oid (JNIEnv *ENV, jobject LOCK,
- struct state_table *TABLE,
- jint OBJECT_ID)
-
- Retrieves the state associated with OBJECT_ID, in TABLE. Returns
- `NULL' if no value is associated with OBJECT_ID. On entering, a
- lock is obtained on LOCK. On exiting, the lock is released.
-
-Function: void * remove_state_oid (JNIEnv *ENV, jobject LOCK,
- struct state_table *TABLE,
- jint OBJECT_ID)
-
- Removes the value associated with OBJECT_ID, in TABLE. Returns a
- pointer to the C state if a state was associated with OBJECT_ID,
- otherwise, `NULL' is returned. After `remove_state_oid' is called,
- `get_state_oid' passing OBJECT_ID, will result in `NULL' being
- returned. On entering, a lock is obtained on LOCK. On exiting, the
- lock is released.
diff --git a/libjava/classpath/doc/testing.framework.text b/libjava/classpath/doc/testing.framework.text
deleted file mode 100644
index 484b6ee..0000000
--- a/libjava/classpath/doc/testing.framework.text
+++ /dev/null
@@ -1,102 +0,0 @@
-Guile Testing Framework for GNU Classpath
-Written by Paul Fisher (rao@gnu.org)
-
-GNU Classpath tests are written in Java. Guile is responsible for
-executing the tests and organizing the results. Guile and Java
-communicate through JNI. If JNI is unavailable, see the section on
-modifying the framework to allow for an alternate means of
-communication. [This has not been written. -PF]
-
-All tests must implement gnu.test.Test. gnu.test.Test contains two
-methods:
-
-1. String getName()
-2. Result test()
-
-When getName() is called, your test should return the name of the
-test. When test() is called, your test should be performed. Upon
-completion of the test (either through success or failure), a Result
-object is returned. test() may throw runtime exceptions and errors --
-if this happens, an implicit error result is returned.
-
-There are seven predefined result types, including the POSIX 1003.3
-result codes. All result objects may optionally be constructed with a
-single String argument specifying additional information about the
-result.
-
-gnu.test.Pass : Test passed and was excepted to pass.
-gnu.test.XPass : Test passed but was expected to fail.
-gnu.test.Fail : Test failed but was expected to pass.
-gnu.test.XFail : Test failed and was expected to fail.
-gnu.test.Unresolved : Test produced indeterminate results.
-gnu.test.Untested : Test was not run -- a placeholder.
-gnu.test.Unsupported : Test does not have the required support to run.
-
-(Error is also a valid result type, but only in Guile/JNI code.)
-
-System.out and System.err are used for directing additional
-information about the running test. System.out should be used to send
-status messages when tests are expected to take large amounts of time.
-System.err should be used to send messages which are logged to the
-verbose log.
-
-Example test:
-
-import gnu.test.*;
-public class StringCharAtZeroTest implements Test
-{
- public getName() {
- return "java.lang.String.charAt(0)";
- }
-
- public Result test() {
- char ch = "foobar".charAt(0);
- if (ch == 'f')
- return new Pass();
- else
- return new Fail("zero index of \"foobar\" is '" + ch + "'");
- }
-}
-
-It's often desirable to group multiple tests together into one file.
-In this case, inner classes should be used. There's also the added
-benefit that tests can easily share data through static variables in
-the parent class.
-
-For example:
-
-import gnu.test.*;
-public class TestContainer {
- public static class test1 implements Test {
- String getName() {
- return "test1";
- }
- Result test() {
- // test1 ...
- }
- }
- public static class test2 implements Test {
- String getName() {
- return "test2";
- }
- Result test() {
- // test2 ...
- }
- }
-}
-
-The testsuite contains a file known as "tests.to.run" which contains a
-newline delimited listing of all tests to be executed. Just add the
-name of the new test to the file and it'll be included in future runs
-of the testsuite.
-
-Running the testsuite:
-guile-jvm -s test.scm tests.to.run
-
-(It would be more natural for the testsuite to read from standard in
-if a file was not specified, but read-line in Guile 1.3a is broken.)
-
-Classes are located via the environmental variable CLASSPATH.
-
-Results are sent to two log files -- one summary (classpath.sum) and
-one verbose (classpath.log).
diff --git a/libjava/classpath/doc/tools.texinfo b/libjava/classpath/doc/tools.texinfo
new file mode 100644
index 0000000..53eadfa
--- /dev/null
+++ b/libjava/classpath/doc/tools.texinfo
@@ -0,0 +1,781 @@
+\input texinfo @c -*-texinfo-*-
+
+@c %**start of header
+@setfilename tools.info
+@settitle GNU Classpath Tools Guide
+@c %**end of header
+
+@setchapternewpage off
+
+@ifinfo
+This file documents the Tools included in a standard distribution of the GNU
+Classpath project deliverables.
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+
+@ifnotplaintext
+@dircategory GNU Libraries
+@direntry
+* Classpath Tools: (tools). GNU Classpath Tools Guide
+@end direntry
+@end ifnotplaintext
+@end ifinfo
+
+@titlepage
+@title GNU Classpath Tools Guide
+@author Raif S. Naffah
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 2006 Free Software Foundation, Inc.
+@sp 2
+Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.
+
+@end titlepage
+
+@ifinfo
+@node Top, Security Tools, (dir), (dir)
+@top GNU Classpath Tools Guide
+
+This document contains important information you need to know in order to use
+the tools included in the GNU Classpath project deliverables.
+
+The Tools aim at providing a free replacement, similar in their behavior, to
+their counter-parts found in the Reference Implementation (RI) of the Java
+Software Development Kit (SDK).
+
+@end ifinfo
+
+@menu
+* Security Tools:: Work securely with Java applications
+* I18N Issues:: How to add support for non-English languages
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Security Tools
+
+* jarsigner Tool:: Sign and verify .JAR files
+* keytool Tool:: Manage private keys and public certificates
+
+I18N Issues
+
+* Language Resources:: Where resources are located
+* Message Formats:: How messages are internationalized
+
+@end detailmenu
+@end menu
+
+@comment ----------------------------------------------------------------------
+
+@node Security Tools, I18N Issues, Top, Top
+@comment node-name, next, previous, up
+@chapter Security Tools
+
+Two Security Tools are available with GNU Classpath: @b{jarsugner} and @b{keytool}.
+
+@menu
+* jarsigner Tool:: Sign and verify .JAR files
+* keytool Tool:: Manage private keys and public certificates
+@end menu
+
+If while using these tools you think you found a bug, then please report it at @uref{http://www.gnu.org/software/classpath/bugs.html,classpath-bugs}.
+
+@comment ----------------------------------------------------------------------
+
+@node jarsigner Tool, keytool Tool, Security Tools, Security Tools
+@comment node-name, next, previous, up
+@section The @code{jarsigner} Tool
+
+@table @b
+
+@item SYNOPSIS
+@code{jarsigner [OPTION]... FILE ALIAS}@*
+@code{jarsigner -verify [OPTION]... FILE}
+
+@item DESCRIPTION
+When the first form is used, the tool signs the designated JAR file.
+
+The second form, on the other hand, is used to verify a previously signed JAR file.
+
+@code{FILE} is the .JAR file to process; i.e. to sign if the first syntax form is used, or to verify if the second syntax form is used instead.
+
+@code{ALIAS} must be a known @i{Alias} of a @i{Key Entry} in the designated key store. The private key material associated with this @i{Alias} is then used for signing the designated .JAR file.
+
+@item SIGNING OPTIONS
+@table @b
+@item -keystore URL
+Use this option to specify the location of the key store to use. The default value is a file URL referencing the file named @file{.keystore} located in the path returned by the call to @code{java.lang.System#getProperty(String)} using @code{user.home} as argument.
+
+If a URL was specified, but was found to be malformed --e.g. missing protocol element-- the tool will attempt to use the URL value as a file-name (with absolute or relative path-name) of a key store --as if the protocol was @code{file:}.
+
+@item -storetype STORE_TYPE
+Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property @code{keystore.type} in the security properties file, which is obtained by invoking the static method call @code{getDefaultType()} in @code{java.security.KeyStore}.
+
+@item -storepass PASSWORD
+Use this option to specify the password which will be used to unlock the key store. If this option is missing, the User will be prompted to provide a password.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.
+
+If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -sigfile NAME
+Use this option to designate a literal that will be used to construct file names for both the @code{.SF} and @code{.DSA} signature files. These files will be generated, by the tool, and placed in the @file{META-INF} directory of the signed JAR. Permissible characters for @code{NAME} must be in the range "a-zA-Z0-9_-". All characters will be converted to upper-case ones.
+
+If this option is missing, the first eight characters of the @code{ALIAS} argument will be used. When this is the case, any character in @code{ALIAS} that is outside the permissible range of characters will be replaced by an underscore.
+
+@item -signedjar FILE_NAME
+Use this option to specify the file name of the signed JAR. If this option is omitted, then the signed JAR will be named the same as @code{FILE}; i.e. the input JAR file will be replaced with the signed copy.
+
+@end table
+
+@item VERIFICATION OPTIONS
+@table @b
+@item -verify
+Use this option to indicate that the tool is to be used for verification purposes.
+
+@item -certs
+This option is used in conjunction with the @code{-verbose} option. When present, along with the @code{-verbose} option, the tool will print more detailed information about the certificates of the signer(s) being processed.
+
+@end table
+
+@item COMMON OPTIONS
+@table @b
+@item -verbose
+Use this option to force the tool to generate more verbose messages, during its processing.
+
+@item -internalsf
+When present, the tool will include --which otherwise it does not-- the @code{.SF} file in the @code{.DSA} generated file.
+
+@item -sectionsonly
+When present, the tool will include in the @code{.SF} generated file --which otherwise it does not-- a header containing a hash of the whole manifest file. When that header is included, the tool can quickly check, during verification, if the hash (in the header) matches or not the manifest file.
+
+@item -provider PROVIDER_CLASS_NAME
+A fully qualified class name of a @i{Security Provider} to add to the current list of @i{Security Providers} already installed in the JVM in-use. If a provider class is specified with this option, and was successfully added to the runtime --i.e. it was not already installed-- then the tool will attempt to remove this @i{Security Provider} before exiting.
+
+@item -help
+Prints a help text similar to this one.
+
+@end table
+@end table
+
+@comment ----------------------------------------------------------------------
+
+@node keytool Tool, , jarsigner Tool, Security Tools
+@comment node-name, next, previous, up
+@section The @code{keytool} Tool
+
+@table @b
+@item SYNOPSIS
+@code{keytool [COMMAND]...}
+
+@item DESCRIPTION
+A Java-based tool for managing both @i{Key Entries} as well as @i{Trusted Certificates}.
+
+Multiple @code{COMMAND}s may be specified at once, each complete with its own options. @b{keytool} will parse all the arguments, before processing, and executing, each @code{COMMAND}. If an exception occurs while executing one @code{COMMAND} @b{keytool} will abort.
+
+A @code{COMMAND} can be one of the followings:
+
+@table @b
+@item -genkey [OPTION]@dots{}
+Generate a new @i{Key Entry}, eventually creating a new key store.
+
+@item -import [OPTION]@dots{}
+Add, to a key store, @i{Key Entries} (private keys and certificate chains authenticating the public keys) and @i{Trusted Certificates} (3rd party certificates which can be used as @i{Trust Anchors} when building chains-of-trust).
+
+@item -selfcert [OPTION]@dots{}
+Generate a new self-signed @i{Trusted Certificate}.
+
+@item -identitydb [OPTION]@dots{}
+@b{NOT IMPLEMENTED YET}.@*
+Import a JDK 1.1 style Identity Database.
+
+@item -certreq [OPTION]@dots{}
+Issue a @i{Certificate Signing Request} (CSR) which can be then sent to a @i{Certification Authority} (CA) to issue a certificate signed (by the CA) and authenticating the @i{Subject} of the request.
+
+@item -export [OPTION]@dots{}
+Export a certificate from a key store.
+
+@item -list [OPTION]@dots{}
+Print one or all certificates in a key store to @code{STDOUT}.
+
+@item -printcert [OPTION]@dots{}
+Print a human-readable form of a certificate, in a designated file, to @code{STDOUT}.
+
+@item -keyclone [OPTION]@dots{}
+Clone a @i{Key Entry} in a key store.
+
+@item -storepasswd [OPTION]@dots{}
+Change the password protecting a key store.
+
+@item -keypasswd [OPTION]@dots{}
+Change the password protecting a @i{Key Entry} in a key store.
+
+@item -delete [OPTION]@dots{}
+Delete a @i{Key Entry} or a @i{Trusted Certificate} from a key store.
+
+@item -help
+Prints a help text similar to this one.
+
+@end table
+
+@item OPTIONS COMMON TO MORE THAN ONE COMMAND
+The following @code{OPTION}s are used in more than one @code{COMMAND}. They are described here to reduce redundancy.
+
+@table @b
+@anchor{alias}
+@item -alias ALIAS
+Every entry, be it a @i{Key Entry} or a @i{Trusted Certificate}, in a key store is uniquely identified by a user-defined @i{Alias} string. Use this option to specify the @i{Alias} to use when referring to an entry in the key store. Unless specified otherwise, a default value of @code{mykey} shall be used when this option is omitted from the command line.
+
+@anchor{keyalg}
+@item -keyalg ALGORITHM
+Use this option to specify the canonical name of the key-pair generation algorithm. The default value for this option is @code{DSS} (a synonym for the Digital Signature Algorithm also known as DSA).
+
+@anchor{keysize}
+@item -keysize SIZE
+Use this option to specify the number of bits of the shared modulus (for both the public and private keys) to use when generating new keys. A default value of @code{1024} will be used if this option is omitted from the command line.
+
+@anchor{validity}
+@item -validity DAY_COUNT
+Use this option to specify the number of days a newly generated certificate will be valid for. The default value is @code{90} (days) if this option is omitted from the command line.
+
+@anchor{storetype}
+@item -storetype STORE_TYPE
+Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property @code{keystore.type} in the security properties file, which is obtained by invoking the static method call @code{getDefaultType()} in @code{java.security.KeyStore}.
+
+@anchor{storepass}
+@item -storepass PASSWORD
+Use this option to specify the password protecting the key store. If this option is omitted from the command line, you will be prompted to provide a password.
+
+@anchor{keystore}
+@item -keystore URL
+Use this option to specify the location of the key store to use. The default value is a file URL referencing the file named @file{.keystore} located in the path returned by the call to @code{java.lang.System#getProperty(String)} using @code{user.home} as argument.
+
+If a URL was specified, but was found to be malformed --e.g. missing protocol element-- the tool will attempt to use the URL value as a file-name (with absolute or relative path-name) of a key store --as if the protocol was @code{file:}.
+
+@anchor{provider}
+@item -provider PROVIDER_CLASS_NAME
+A fully qualified class name of a @i{Security Provider} to add to the current list of @i{Security Providers} already installed in the JVM in-use. If a provider class is specified with this option, and was successfully added to the runtime --i.e. it was not already installed-- then the tool will attempt to removed this @i{Security Provider} before exiting.
+
+@anchor{file}
+@item -file FILE_NAME
+Use this option to designate a file to use with a command. When specified with this option, the value is expected to be the fully qualified path of a file accessible by the File System. Depending on the command, the file may be used as input or as output. When this option is omitted from the command line, @code{STDIN} will be used instead, as the source of input, and @code{STDOUT} will be used instead as the output destination.
+
+@anchor{verbose}
+@item -v
+Unless specified otherwise, use this option to enable more verbose output.
+
+@end table
+
+@anchor{dn}
+@item X.500 DISTINGUISHED NAME
+A @i{Distinguished Name} (or DN) MUST be supplied with some of the @code{COMMAND}s using a @code{-dname} option. The syntax of a valid value for this option MUST follow RFC-2253 specifications. Namely the following components (with their accepted meaning) will be recognized. Note that the component name is case-insensitive:
+
+@ftable @var
+@item CN
+The Common Name; e.g. @kbd{host.domain.com}
+@item OU
+The Organizational Unit; e.g. @kbd{IT Department}
+@item O
+The Organization Name; e.g. @kbd{The Sample Company}
+@item L
+The Locality Name; e.g. @kbd{Sydney}
+@item ST
+The State Name; e.g. @kbd{New South Wales}
+@item C
+The 2-letter Country identifier; e.g. @kbd{AU}
+@end ftable
+
+When specified with a @code{-dname} option, each pair of component/value will be separated from the other with a comma. Each component and value pair MUST be separated by an equal sign. For example, the following is a valid DN value:@*
+
+@format
+CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
+@end format
+@*
+If the @i{Distinguished Name} is required, and no valid default value can be used, the tool will prompt you to enter the information through the console.
+
+@item -genkey COMMAND
+Generate a new key-pair (both private and public keys), and save these credentials in the key store as a @i{Key Entry}, associated with the designated (if was specified in the @code{-alias} option) or default (if the @code{-alias} option is omitted) @i{Alias}.
+
+The private key material will be protected with a user-defined password (see @code{-keypass} option). The public key on the other hand will be part of a self-signed X.509 certificate, which will form a 1-element chain and will be saved in the key store.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -keyalg ALGORITHM
+For more details @pxref{keyalg,, ALGORITHM}.
+
+@item -keysize KEY_SIZE
+For more details @pxref{keysize,, KEY_SIZE}.
+
+@item -sigalg ALGORITHM
+The canonical name of the digital signature algorithm to use for signing certificates. If this option is omitted, a default value will be chosen based on the type of the key-pair; i.e. the algorithm that ends up being used by the -keyalg option. If the key-pair generation algorithm is @code{DSA}, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the key-pair generation algorithm is @code{RSA}, then the tool will use @code{MD5withRSA} as the signature algorithm.
+
+@item -dname NAME
+This a mandatory value for the command. If no value is specified --i.e. the @code{-dname} option is omitted-- the tool will prompt you to enter a @i{Distinguished Name} to use as both the @i{Owner} and @i{Issuer} of the generated self-signed certificate.
+
+For more details @pxref{dn,, X.500 DISTINGUISHED NAME}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to protect the newly created @i{Key Entry}.
+
+If this option is omitted, you will be prompted to provide a password.
+
+@item -validity DAY_COUNT
+For more details @pxref{validity,, DAY_COUNT}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -import COMMAND
+Read an X.509 certificate, or a PKCS#7 @i{Certificate Reply} from a designated input source and incorporate the certificates into the key store.
+
+If the @i{Alias} does not already exist in the key store, the tool treats the certificate read from the input source as a new @i{Trusted Certificate}. It then attempts to discover a chain-of-trust, starting from that certificate and ending at another @i{Trusted Certificate}, already stored in the key store. If the @code{-trustcacerts} option is present, an additional key store, of type @code{JKS} named @file{cacerts}, and assumed to be present in @file{$@{JAVA_HOME@}/lib/security} will also be consulted if found --@code{$@{JAVA_HOME@}} refers to the location of an installed @i{Java Runtime Environment} (JRE). If no chain-of-trust can be established, and unless the @code{-noprompt} option has been specified, the certificate is printed to @code{STDOUT} and the user is prompted for a confirmation.
+
+If @i{Alias} exists in the key store, the tool will treat the certificate(s) read from the input source as a @i{Certificate Reply}, which can be a chain of certificates, that eventually would replace the chain of certificates associated with the @i{Key Entry} of that @i{Alias}. The substitution of the certificates only occurs if a chain-of-trust can be established between the bottom certificate of the chain read from the input file and the @i{Trusted Certificates} already present in the key store. Again, if the @code{-trustcacerts} option is specified, additional @i{Trusted Certificates} in the same @file{cacerts} key store will be considered. If no chain-of-trust can be established, the operation will abort.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -file FILE_NAME
+For more details @pxref{file,, FILE_NAME}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to protect the @i{Key Entry} associated with the designated @i{Alias}, when replacing this @i{Alias}' chain of certificates with that found in the certificate reply.
+
+If this option is omitted, and the chain-of-trust for the certificate reply has been established, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -noprompt
+Use this option to prevent the tool from prompting the user.
+
+@item -trustcacerts
+Use this option to indicate to the tool that a key store, of type @code{JKS}, named @file{cacerts}, and usually located in @file{lib/security} in an installed @i{Java Runtime Environment} should be considered when trying to establish chain-of-trusts.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -selfcert COMMAND
+Generate a self-signed X.509 version 1 certificate. The newly generated certificate will form a chain of one element which will replace the previous chain associated with the designated @i{Alias} (if @code{-alias} option was specified), or the default @i{Alias} (if @code{-alias} option was omitted).
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -sigalg ALGORITHM
+The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated @i{Alias}. If the private key is a @code{DSA} one, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the private key is an @code{RSA} one, then the tool will use @code{MD5withRSA} as the signature algorithm.
+
+@item -dname NAME
+Use this option to specify the @i{Distinguished Name} of the newly generated self-signed certificate. If this option is omitted, the existing @i{Distinguished Name} of the base certificate in the chain associated with the designated @i{Alias} will be used instead.
+
+For more details @pxref{dn,, X.500 DISTINGUISHED NAME}.
+
+@item -validity DAY_COUNT
+For more details @pxref{validity,, DAY_COUNT}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.
+
+If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -identitydb COMMAND
+@b{NOT IMPLEMENTED YET}.
+
+Import a JDK 1.1 style Identity Database.
+
+@table @b
+@item -file FILE_NAME
+For more details @pxref{file,, FILE_NAME}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -certreq COMMAND
+Generate a PKCS#10 @i{Certificate Signing Request} (CSR) and writes it to a designated output destination. The contents of the destination should look something like the following:
+
+@example
+-----BEGIN NEW CERTIFICATE REQUEST-----
+MI...QAwXzEUMBIGA1UEAwwLcnNuQGdudS5vcmcxGzAZBgNVBAoMElUg
+Q2...A0GA1UEBwwGU3lkbmV5MQwwCgYDVQQIDANOU1cxCzAJBgNVBACC
+...
+FC...IVwNVOfQLRX+O5kAhQ/a4RTZme2L8PnpvgRwrf7Eg8D6w==
+-----END NEW CERTIFICATE REQUEST-----
+@end example
+
+@b{IMPORTANT}: Some documentation (e.g. RSA examples) claims that the @code{Attributes} field, in the CSR is @code{OPTIONAL} while RFC-2986 implies the opposite. This implementation considers this field, by default, as @code{OPTIONAL}, unless the option @code{-attributes} is specified on the command line.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -sigalg ALGORITHM
+The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated @i{Alias}. If the private key is a @code{DSA} one, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the private key is an @code{RSA} one, then the tool will use @code{MD5withRSA} as the signature algorithm.
+
+@item -file FILE_NAME
+For more details @pxref{file,, FILE_NAME}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.
+
+If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@item -attributes
+Use this option to force the tool to encode a @code{NULL} DER value in the CSR as the value of the @code{Attributes} field.
+
+@end table
+
+@item -export COMMAND
+Export a certificate stored in the key store to a designated output destination, either in binary format (if the @code{-v} option is specified), or in RFC-1421 compliant encoding (if the @code{-rfc} option is specified
+instead).
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -file FILE_NAME
+For more details @pxref{file,, FILE_NAME}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -rfc
+Use RFC-1421 specifications when encoding the output.
+
+@item -v
+Output the certificate in binary DER encoding. This is the default output format of the command if neither @code{-rfc} nor @code{-v} options were detected on the command line. If both this option and the @code{-rfc} option are detected on the command line, the tool will opt for the RFC-1421 style encoding.
+
+@end table
+
+@item -list COMMAND
+Print one or all of the key store entries to @code{STDOUT}. Usually this command will only print a @i{fingerprint} of the certificate, unless either the @code{-rfc} or the @code{-v} option is specified.
+
+@table @b
+@item -alias ALIAS
+If this option is omitted, the tool will print ALL the entries found in the key store.
+
+For more details @pxref{alias,, ALIAS}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -rfc
+Use RFC-1421 specifications when encoding the output.
+
+@item -v
+Output the certificate in human-readable format. If both this option and the @code{-rfc} option are detected on the command line, the tool will opt for the human-readable form and will not abort the command.
+
+@end table
+
+@item -printcert COMMAND
+Read a certificate from a designated input source and print it to @code{STDOUT} in a human-readable form.
+
+@table @b
+@item -file FILE_NAME
+For more details @pxref{file,, FILE_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -keyclone COMMAND
+Clone an existing @i{Key Entry} and store it under a new (different) @i{Alias} protecting, its private key material with possibly a new password.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -dest ALIAS
+Use this option to specify the new @i{Alias} which will be used to identify the cloned copy of the @i{Key Entry}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.
+
+If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -new PASSWORD
+Use this option to specify the password protecting the private key material of the newly cloned copy of the @i{Key Entry}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -storepasswd COMMAND
+Change the password protecting a key store.
+
+@table @b
+@item -new PASSWORD
+The new, and different, password which will be used to protect the designated key store.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -keypasswd COMMAND
+Change the password protecting the private key material of a designated @i{Key Entry}.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -keypass PASSWORD
+Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.
+
+If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+
+@item -new PASSWORD
+The new, and different, password which will be used to protect the private key material of the designated @i{Key Entry}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+
+@item -delete COMMAND
+Delete a designated key store entry.
+
+@table @b
+@item -alias ALIAS
+For more details @pxref{alias,, ALIAS}.
+
+@item -storetype STORE_TYPE
+For more details @pxref{storetype,, STORE_TYPE}.
+
+@item -keystore URL
+For more details @pxref{keystore,, URL}.
+
+@item -storepass PASSWORD
+For more details @pxref{storepass,, PASSWORD}.
+
+@item -provider PROVIDER_CLASS_NAME
+For more details @pxref{provider,, PROVIDER_CLASS_NAME}.
+
+@item -v
+For more details @pxref{verbose}.
+
+@end table
+@end table
+
+@comment ----------------------------------------------------------------------
+
+@node I18N Issues, , Security Tools, Top
+@comment node-name, next, previous, up
+@chapter I18N Issues
+
+Some tools --@pxref{Security Tools}-- allow using other than the English language when prompting the User for input, and outputing messages. This chapter describes the elements used to offer this support and how they can be adapted for use with specific languages.
+
+@menu
+* Language Resources:: Where resources are located
+* Message Formats:: How messages are internationalized
+@end menu
+
+@comment ----------------------------------------------------------------------
+
+@node Language Resources, Message Formats, I18N Issues, I18N Issues
+@comment node-name, next, previous, up
+@section Language-Specific Resources
+
+The Tools use Java @code{ResourceBundle}s to store messages, and message templates they use at runtime to generate the message text itself, depending on the locale in use at the time.
+
+The @i{Resource Bundles} these tools use are essentially Java @i{Properties} files consisting of a set of @i{Name/Value} pairs. The @i{Name} is the @i{Propery Name} and the @i{Value} is a substitution string that is used when the code references the associated @i{Name}. For example the following is a line in a @i{Resource Bundle} used by the @code{keytool} Tool:
+
+@example
+Command.23=A correct key password MUST be provided
+@end example
+
+When the tool needs to signal a mandatory but missing key password, it would reference the property named @code{Command.23} and the message "@kbd{A correct key password MUST be provided}" will be used instead. This indirect referencing of "resources" permits replacing, as late as possible, the English strings with strings in other languages, provided of course @i{Resource Bundles} in those languages are provided.
+
+For the GNU Classpath Tools described in this Guide, the @i{Resource Bundles} are files named @file{MessageBundle[_ll[_CC[_VV]]].properties} where:
+
+@ftable @var
+@item ll
+Is the 2-letter code for the Language,
+@item CC
+Is the 2-letter code for the Region, and
+@item VV
+Is the 2-letter code for the Variant of the language.
+@end ftable
+
+The complete list of language codes can be found at @uref{http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt, Code for the representation of names of languages}. A similar list for the region codes can be found at @uref{http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html, ISO 3166 Codes (Countries)}.
+
+The location of the @i{Resource Bundles} for the GNU Classpath Tools is specific to each tool. The next table shows where these files are found in a standard GNU Classpath distribution:
+
+@ftable @code
+@item jarsigner
+@file{gnu/classpath/tools/jarsigner}
+@item keytool
+@file{gnu/classpath/tools/keytool}
+@end ftable
+
+The collection of @i{Resource Bundles} in a location act as an inverted tree with a parent-child relationship. For example suppose in the @file{gnu/classpath/tools/keytool} there are 3 message bundles named:
+
+@enumerate
+@item @code{MessageBundle.properties}
+@item @code{MessageBundle_fr.properties}
+@item @code{MessageBundle_fr_FR.properties}
+@end enumerate
+
+In the above example, bundle #1 will act as the parent of bundle #2, which in turn will act as the parent for bundle #3. This ordering is used by the Java runtime to choose which file to load based on the set Locale. For example if the Locale is @code{fr_CH}, @code{MessageBundle_fr.properties} will be used because (a) @code{MessageBundle_fr_CH.properties} does not exist, but (b) @code{MessageBundle_fr.properties} is the parent for the required bundle, and it exists. As another example, suppose the Locale was set to @code{en_AU}; then the tool will end up using @code{MessageBundle.properties} because (a) @code{MessageBundle_en_AU.properties} does not exist, (b) @code{MessageBundle_en.properties} which is the parent for the required bundle does not exist, but (c) @code{MessageBundle.properties} exists and is the root of the hierarchy.
+
+You can see from the examples above that @file{MessageBundle.properties} is the safety net that the Java runtime falls back to when failing to find a specific bunlde and its parent(s). This file is always provided with the Tool. In time, more localized versions will be included to cater for other languages.
+
+In the meantime, if you are willing to contribute localized versions of these resources, grab the @file{MessageBundle.properties} for a specific tool; translate it; save it with the appropriate language and region suffix and mail it to @code{classpath@@gnu.org}.
+
+@comment ----------------------------------------------------------------------
+
+@node Message Formats, , Language Resources, I18N Issues
+@comment node-name, next, previous, up
+@section Message Formats
+
+If you open any of the @file{MessageBundle.properties} described in the previous section, you may see properties that look like so:
+
+@example
+Command.67=Issuer: @{0@}
+Command.68=Serial number: @{0,number@}
+Command.69=Valid from: @{0,date,full@} - @{0,time,full@}
+Command.70=\ \ \ \ \ until: @{0,date,full@} - @{0,time,full@}
+@end example
+
+These are @i{Message Formats} used by the tools to customize a text string that will then be used either as a prompt for User input or as output.
+
+If you are translating a @file{MessageBundle.properties} be careful not to alter text between curly braces.
+
+@comment ----------------------------------------------------------------------
+
+@bye
diff --git a/libjava/classpath/doc/unicode/BLOCKS.TXT b/libjava/classpath/doc/unicode/BLOCKS.TXT
deleted file mode 100644
index 7cf3d08..0000000
--- a/libjava/classpath/doc/unicode/BLOCKS.TXT
+++ /dev/null
@@ -1,90 +0,0 @@
-# Start Code; End Code; Block Name
-0000; 007F; Basic Latin
-0080; 00FF; Latin-1 Supplement
-0100; 017F; Latin Extended-A
-0180; 024F; Latin Extended-B
-0250; 02AF; IPA Extensions
-02B0; 02FF; Spacing Modifier Letters
-0300; 036F; Combining Diacritical Marks
-0370; 03FF; Greek
-0400; 04FF; Cyrillic
-0530; 058F; Armenian
-0590; 05FF; Hebrew
-0600; 06FF; Arabic
-0700; 074F; Syriac
-0780; 07BF; Thaana
-0900; 097F; Devanagari
-0980; 09FF; Bengali
-0A00; 0A7F; Gurmukhi
-0A80; 0AFF; Gujarati
-0B00; 0B7F; Oriya
-0B80; 0BFF; Tamil
-0C00; 0C7F; Telugu
-0C80; 0CFF; Kannada
-0D00; 0D7F; Malayalam
-0D80; 0DFF; Sinhala
-0E00; 0E7F; Thai
-0E80; 0EFF; Lao
-0F00; 0FFF; Tibetan
-1000; 109F; Myanmar
-10A0; 10FF; Georgian
-1100; 11FF; Hangul Jamo
-1200; 137F; Ethiopic
-13A0; 13FF; Cherokee
-1400; 167F; Unified Canadian Aboriginal Syllabics
-1680; 169F; Ogham
-16A0; 16FF; Runic
-1780; 17FF; Khmer
-1800; 18AF; Mongolian
-1E00; 1EFF; Latin Extended Additional
-1F00; 1FFF; Greek Extended
-2000; 206F; General Punctuation
-2070; 209F; Superscripts and Subscripts
-20A0; 20CF; Currency Symbols
-20D0; 20FF; Combining Marks for Symbols
-2100; 214F; Letterlike Symbols
-2150; 218F; Number Forms
-2190; 21FF; Arrows
-2200; 22FF; Mathematical Operators
-2300; 23FF; Miscellaneous Technical
-2400; 243F; Control Pictures
-2440; 245F; Optical Character Recognition
-2460; 24FF; Enclosed Alphanumerics
-2500; 257F; Box Drawing
-2580; 259F; Block Elements
-25A0; 25FF; Geometric Shapes
-2600; 26FF; Miscellaneous Symbols
-2700; 27BF; Dingbats
-2800; 28FF; Braille Patterns
-2E80; 2EFF; CJK Radicals Supplement
-2F00; 2FDF; Kangxi Radicals
-2FF0; 2FFF; Ideographic Description Characters
-3000; 303F; CJK Symbols and Punctuation
-3040; 309F; Hiragana
-30A0; 30FF; Katakana
-3100; 312F; Bopomofo
-3130; 318F; Hangul Compatibility Jamo
-3190; 319F; Kanbun
-31A0; 31BF; Bopomofo Extended
-3200; 32FF; Enclosed CJK Letters and Months
-3300; 33FF; CJK Compatibility
-3400; 4DB5; CJK Unified Ideographs Extension A
-4E00; 9FFF; CJK Unified Ideographs
-A000; A48F; Yi Syllables
-A490; A4CF; Yi Radicals
-AC00; D7A3; Hangul Syllables
-D800; DB7F; High Surrogates
-DB80; DBFF; High Private Use Surrogates
-DC00; DFFF; Low Surrogates
-E000; F8FF; Private Use
-F900; FAFF; CJK Compatibility Ideographs
-FB00; FB4F; Alphabetic Presentation Forms
-FB50; FDFF; Arabic Presentation Forms-A
-FE20; FE2F; Combining Half Marks
-FE30; FE4F; CJK Compatibility Forms
-FE50; FE6F; Small Form Variants
-FE70; FEFE; Arabic Presentation Forms-B
-FEFF; FEFF; Specials
-FF00; FFEF; Halfwidth and Fullwidth Forms
-FFF0; FFFD; Specials
-
diff --git a/libjava/classpath/doc/unicode/Blocks-3.txt b/libjava/classpath/doc/unicode/Blocks-3.txt
deleted file mode 100644
index 15c8957..0000000
--- a/libjava/classpath/doc/unicode/Blocks-3.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-# Start Code; End Code; Block Name
-0000; 007F; Basic Latin
-0080; 00FF; Latin-1 Supplement
-0100; 017F; Latin Extended-A
-0180; 024F; Latin Extended-B
-0250; 02AF; IPA Extensions
-02B0; 02FF; Spacing Modifier Letters
-0300; 036F; Combining Diacritical Marks
-0370; 03FF; Greek
-0400; 04FF; Cyrillic
-0530; 058F; Armenian
-0590; 05FF; Hebrew
-0600; 06FF; Arabic
-0700; 074F; Syriac
-0780; 07BF; Thaana
-0900; 097F; Devanagari
-0980; 09FF; Bengali
-0A00; 0A7F; Gurmukhi
-0A80; 0AFF; Gujarati
-0B00; 0B7F; Oriya
-0B80; 0BFF; Tamil
-0C00; 0C7F; Telugu
-0C80; 0CFF; Kannada
-0D00; 0D7F; Malayalam
-0D80; 0DFF; Sinhala
-0E00; 0E7F; Thai
-0E80; 0EFF; Lao
-0F00; 0FFF; Tibetan
-1000; 109F; Myanmar
-10A0; 10FF; Georgian
-1100; 11FF; Hangul Jamo
-1200; 137F; Ethiopic
-13A0; 13FF; Cherokee
-1400; 167F; Unified Canadian Aboriginal Syllabics
-1680; 169F; Ogham
-16A0; 16FF; Runic
-1780; 17FF; Khmer
-1800; 18AF; Mongolian
-1E00; 1EFF; Latin Extended Additional
-1F00; 1FFF; Greek Extended
-2000; 206F; General Punctuation
-2070; 209F; Superscripts and Subscripts
-20A0; 20CF; Currency Symbols
-20D0; 20FF; Combining Marks for Symbols
-2100; 214F; Letterlike Symbols
-2150; 218F; Number Forms
-2190; 21FF; Arrows
-2200; 22FF; Mathematical Operators
-2300; 23FF; Miscellaneous Technical
-2400; 243F; Control Pictures
-2440; 245F; Optical Character Recognition
-2460; 24FF; Enclosed Alphanumerics
-2500; 257F; Box Drawing
-2580; 259F; Block Elements
-25A0; 25FF; Geometric Shapes
-2600; 26FF; Miscellaneous Symbols
-2700; 27BF; Dingbats
-2800; 28FF; Braille Patterns
-2E80; 2EFF; CJK Radicals Supplement
-2F00; 2FDF; Kangxi Radicals
-2FF0; 2FFF; Ideographic Description Characters
-3000; 303F; CJK Symbols and Punctuation
-3040; 309F; Hiragana
-30A0; 30FF; Katakana
-3100; 312F; Bopomofo
-3130; 318F; Hangul Compatibility Jamo
-3190; 319F; Kanbun
-31A0; 31BF; Bopomofo Extended
-3200; 32FF; Enclosed CJK Letters and Months
-3300; 33FF; CJK Compatibility
-3400; 4DB5; CJK Unified Ideographs Extension A
-4E00; 9FFF; CJK Unified Ideographs
-A000; A48F; Yi Syllables
-A490; A4CF; Yi Radicals
-AC00; D7A3; Hangul Syllables
-D800; DB7F; High Surrogates
-DB80; DBFF; High Private Use Surrogates
-DC00; DFFF; Low Surrogates
-E000; F8FF; Private Use
-F900; FAFF; CJK Compatibility Ideographs
-FB00; FB4F; Alphabetic Presentation Forms
-FB50; FDFF; Arabic Presentation Forms-A
-FE20; FE2F; Combining Half Marks
-FE30; FE4F; CJK Compatibility Forms
-FE50; FE6F; Small Form Variants
-FE70; FEFE; Arabic Presentation Forms-B
-FEFF; FEFF; Specials
-FF00; FFEF; Halfwidth and Fullwidth Forms
-FFF0; FFFD; Specials
-
diff --git a/libjava/classpath/doc/unicode/Blocks-4.0.0.txt b/libjava/classpath/doc/unicode/Blocks-4.0.0.txt
deleted file mode 100644
index 6dc2bd2..0000000
--- a/libjava/classpath/doc/unicode/Blocks-4.0.0.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-# Blocks-4.0.0.txt
-# Correlated with Unicode 4.0
-# Note: The casing of block names is not normative.
-# For example, "Basic Latin" and "BASIC LATIN" are equivalent.
-#
-# Code points not explicitly listed in this file are given the value No_Block.
-#
-# Start Code..End Code; Block Name
-0000..007F; Basic Latin
-0080..00FF; Latin-1 Supplement
-0100..017F; Latin Extended-A
-0180..024F; Latin Extended-B
-0250..02AF; IPA Extensions
-02B0..02FF; Spacing Modifier Letters
-0300..036F; Combining Diacritical Marks
-0370..03FF; Greek and Coptic
-0400..04FF; Cyrillic
-0500..052F; Cyrillic Supplementary
-0530..058F; Armenian
-0590..05FF; Hebrew
-0600..06FF; Arabic
-0700..074F; Syriac
-0780..07BF; Thaana
-0900..097F; Devanagari
-0980..09FF; Bengali
-0A00..0A7F; Gurmukhi
-0A80..0AFF; Gujarati
-0B00..0B7F; Oriya
-0B80..0BFF; Tamil
-0C00..0C7F; Telugu
-0C80..0CFF; Kannada
-0D00..0D7F; Malayalam
-0D80..0DFF; Sinhala
-0E00..0E7F; Thai
-0E80..0EFF; Lao
-0F00..0FFF; Tibetan
-1000..109F; Myanmar
-10A0..10FF; Georgian
-1100..11FF; Hangul Jamo
-1200..137F; Ethiopic
-13A0..13FF; Cherokee
-1400..167F; Unified Canadian Aboriginal Syllabics
-1680..169F; Ogham
-16A0..16FF; Runic
-1700..171F; Tagalog
-1720..173F; Hanunoo
-1740..175F; Buhid
-1760..177F; Tagbanwa
-1780..17FF; Khmer
-1800..18AF; Mongolian
-1900..194F; Limbu
-1950..197F; Tai Le
-19E0..19FF; Khmer Symbols
-1D00..1D7F; Phonetic Extensions
-1E00..1EFF; Latin Extended Additional
-1F00..1FFF; Greek Extended
-2000..206F; General Punctuation
-2070..209F; Superscripts and Subscripts
-20A0..20CF; Currency Symbols
-20D0..20FF; Combining Diacritical Marks for Symbols
-2100..214F; Letterlike Symbols
-2150..218F; Number Forms
-2190..21FF; Arrows
-2200..22FF; Mathematical Operators
-2300..23FF; Miscellaneous Technical
-2400..243F; Control Pictures
-2440..245F; Optical Character Recognition
-2460..24FF; Enclosed Alphanumerics
-2500..257F; Box Drawing
-2580..259F; Block Elements
-25A0..25FF; Geometric Shapes
-2600..26FF; Miscellaneous Symbols
-2700..27BF; Dingbats
-27C0..27EF; Miscellaneous Mathematical Symbols-A
-27F0..27FF; Supplemental Arrows-A
-2800..28FF; Braille Patterns
-2900..297F; Supplemental Arrows-B
-2980..29FF; Miscellaneous Mathematical Symbols-B
-2A00..2AFF; Supplemental Mathematical Operators
-2B00..2BFF; Miscellaneous Symbols and Arrows
-2E80..2EFF; CJK Radicals Supplement
-2F00..2FDF; Kangxi Radicals
-2FF0..2FFF; Ideographic Description Characters
-3000..303F; CJK Symbols and Punctuation
-3040..309F; Hiragana
-30A0..30FF; Katakana
-3100..312F; Bopomofo
-3130..318F; Hangul Compatibility Jamo
-3190..319F; Kanbun
-31A0..31BF; Bopomofo Extended
-31F0..31FF; Katakana Phonetic Extensions
-3200..32FF; Enclosed CJK Letters and Months
-3300..33FF; CJK Compatibility
-3400..4DBF; CJK Unified Ideographs Extension A
-4DC0..4DFF; Yijing Hexagram Symbols
-4E00..9FFF; CJK Unified Ideographs
-A000..A48F; Yi Syllables
-A490..A4CF; Yi Radicals
-AC00..D7AF; Hangul Syllables
-D800..DB7F; High Surrogates
-DB80..DBFF; High Private Use Surrogates
-DC00..DFFF; Low Surrogates
-E000..F8FF; Private Use Area
-F900..FAFF; CJK Compatibility Ideographs
-FB00..FB4F; Alphabetic Presentation Forms
-FB50..FDFF; Arabic Presentation Forms-A
-FE00..FE0F; Variation Selectors
-FE20..FE2F; Combining Half Marks
-FE30..FE4F; CJK Compatibility Forms
-FE50..FE6F; Small Form Variants
-FE70..FEFF; Arabic Presentation Forms-B
-FF00..FFEF; Halfwidth and Fullwidth Forms
-FFF0..FFFF; Specials
-10000..1007F; Linear B Syllabary
-10080..100FF; Linear B Ideograms
-10100..1013F; Aegean Numbers
-10300..1032F; Old Italic
-10330..1034F; Gothic
-10380..1039F; Ugaritic
-10400..1044F; Deseret
-10450..1047F; Shavian
-10480..104AF; Osmanya
-10800..1083F; Cypriot Syllabary
-1D000..1D0FF; Byzantine Musical Symbols
-1D100..1D1FF; Musical Symbols
-1D300..1D35F; Tai Xuan Jing Symbols
-1D400..1D7FF; Mathematical Alphanumeric Symbols
-20000..2A6DF; CJK Unified Ideographs Extension B
-2F800..2FA1F; CJK Compatibility Ideographs Supplement
-E0000..E007F; Tags
-E0100..E01EF; Variation Selectors Supplement
-F0000..FFFFF; Supplementary Private Use Area-A
-100000..10FFFF; Supplementary Private Use Area-B
diff --git a/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt b/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt
deleted file mode 100644
index 506f155..0000000
--- a/libjava/classpath/doc/unicode/ReadMe-2.1.1.txt
+++ /dev/null
@@ -1,344 +0,0 @@
-
-UNICODE 2.1 CHARACTER DATABASE
-
-Copyright (c) 1991-1998 Unicode, Inc.
-All Rights reserved.
-
-DISCLAIMER
-
-The Unicode Character Database "UNIDAT21.TXT" is provided as-is by
-Unicode, Inc. (The Unicode Consortium). No claims are made as to fitness for any
-particular purpose. No warranties of any kind are expressed or implied. The
-recipient agrees to determine applicability of information provided. If this
-file has been purchased on magnetic or optical media from Unicode, Inc.,
-the sole remedy for any claim will be exchange of defective media within
-90 days of receipt.
-
-This disclaimer is applicable for all other data files accompanying the
-Unicode Character Database, some of which have been compiled by the
-Unicode Consortium, and some of which have been supplied by other vendors.
-
-LIMITATIONS ON RIGHTS TO REDISTRIBUTE THIS DATA
-
-Recipient is granted the right to make copies in any form for internal
-distribution and to freely use the information supplied in the creation of
-products supporting the Unicode (TM) Standard. This file can be redistributed
-to third parties or other organizations (whether for profit or not) as long
-as this notice and the disclaimer notice are retained.
-
-EXPLANATORY INFORMATION
-
-The Unicode Character Database defines the default Unicode character
-properties, and internal mappings. Particular implementations may choose to
-override the properties and mappings that are not normative. If that is done,
-it is up to the implementer to establish a protocol to convey that
-information. For more information about character properties and mappings,
-see "The Unicode Standard, Worldwide Character Encoding, Version 2.0",
-published by Addison-Wesley. For information about other data files
-accompanying the Unicode Character Database, see the section of the
-Unicode Standard they were extracted from, or the explanatory readme
-files and/or header sections with those files.
-
-The Unicode Character Database has been updated to reflect Version 2.1
-of the Unicode Standard, with two additional characters added to those
-published in Version 2.0:
-
- U+20AC EURO SIGN
- U+FFFC OBJECT REPLACEMENT CHARACTER
-
-A number of corrections have also been made to case mappings or other
-errors in the database noted since the publication of Version 2.0. And
-a few normative bidirectional properties have been modified to reflect
-decisions of the Unicode Technical Committee.
-
-The Unicode Character Database is a plain ASCII text file consisting of lines
-containing fields terminated by semicolons. Each line represents the data for
-one encoded character in the Unicode Standard, Version 2.1. Every encoded
-character has a data entry, with the exception of certain special ranges, as
-detailed below.
-
-There are five special ranges of characters that are represented only by
-their start and end characters, since the properties in the file are uniform,
-except for code values (which are all sequential and assigned). The names of CJK
-ideograph characters and Hangul syllable characters are algorithmically
-derivable. (See the Unicode Standard for more information). Surrogate
-characters and private use characters have no names.
-
-The exact ranges represented by start and end characters are:
-
- The CJK Ideographs Area (U+4E00 - U+9FFF)
- The Hangul Syllables Area (U+AC00 - U+D7A3)
- The Surrogates Area (U+D800 - U+DFFF)
- The Private Use Area (U+E000 - U+F8FF)
- CJK Compatibility Ideographs (U+F900 - U+FAFF)
-
-The following table describes the format and meaning of each field in a
-data entry in the Unicode Character Database. Fields which contain
-normative information are so indicated.
-
-Field Explanation
------ -----------
-
- 0 Code value in 4-digit hexadecimal format.
- This field is normative.
-
- 1 Unicode 2.1 Character Name. These names match exactly the
- names published in Chapter 7 of the Unicode Standard, Version
- 2.0, except for the two additional characters.
- This field is normative.
-
- 2 General Category. This is a useful breakdown into various "character
- types" which can be used as a default categorization in implementations.
- Some of the values are normative, and some are informative.
- See below for a brief explanation.
-
- 3 Canonical Combining Classes. The classes used for the
- Canonical Ordering Algorithm in the Unicode Standard. These
- classes are also printed in Chapter 4 of the Unicode Standard.
- This field is normative. See below for a brief explanation.
-
- 4 Bidirectional Category. See the list below for an explanation of the
- abbreviations used in this field. These are the categories required
- by the Bidirectional Behavior Algorithm in the Unicode Standard.
- These categories are summarized in Chapter 4 of the Unicode Standard.
- This field is normative.
-
- 5 Character Decomposition. In the Unicode Standard, not all of
- the decompositions are full decompositions. Recursive
- application of look-up for decompositions will, in all cases, lead to
- a maximal decomposition. The decompositions match exactly the
- decompositions published with the character names in Chapter 7
- of the Unicode Standard. This field is normative.
-
- 6 Decimal digit value. This is a numeric field. If the character
- has the decimal digit property, as specified in Chapter 4 of
- the Unicode Standard, the value of that digit is represented
- with an integer value in this field. This field is normative.
-
- 7 Digit value. This is a numeric field. If the character represents a
- digit, not necessarily a decimal digit, the value is here. This
- covers digits which do not form decimal radix forms, such as the
- compatibility superscript digits. This field is informative.
-
- 8 Numeric value. This is a numeric field. If the character has the
- numeric property, as specified in Chapter 4 of the Unicode
- Standard, the value of that character is represented with an
- integer or rational number in this field. This includes fractions as,
- e.g., "1/5" for U+2155 VULGAR FRACTION ONE FIFTH.
- Also included are numerical values for compatibility characters
- such as circled numbers. This field is normative.
-
- 9 If the characters has been identified as a "mirrored" character in
- bidirectional text, this field has the value "Y"; otherwise "N".
- The list of mirrored characters is also printed in Chapter 4 of
- the Unicode Standard. This field is normative.
-
- 10 Unicode 1.0 Name. This is the old name as published in Unicode 1.0.
- This name is only provided when it is significantly different from
- the Unicode 2.1 name for the character. This field is informative.
-
- 11 10646 Comment field. This field is informative.
-
- 12 Upper case equivalent mapping. If a character is part of an
- alphabet with case distinctions, and has an upper case equivalent,
- then the upper case equivalent is in this field. See the explanation
- below on case distinctions. These mappings are always one-to-one,
- not one-to-many or many-to-one. This field is informative.
-
- 13 Lower case equivalent mapping. Similar to 12. This field is informative.
-
- 14 Title case equivalent mapping. Similar to 12. This field is informative.
-
-GENERAL CATEGORY
-
-The values in this field are abbreviations for the following. Some of the
-values are normative, and some are informative. For more information, see
-the Unicode Standard. Note: the standard does not assign information to
-control characters (except for TAB in the Bidirectonal Algorithm).
-Implementations will generally also assign categories to certain control
-characters, notably CR and LF, according to platform conventions.
-
-
-Normative
- Mn = Mark, Non-Spacing
- Mc = Mark, Spacing Combining
- Me = Mark, Enclosing
-
- Nd = Number, Decimal Digit
- Nl = Number, Letter
- No = Number, Other
-
- Zs = Separator, Space
- Zl = Separator, Line
- Zp = Separator, Paragraph
-
- Cc = Other, Control
- Cf = Other, Format
- Cs = Other, Surrogate
- Co = Other, Private Use
- Cn = Other, Not Assigned
-
-Informative
- Lu = Letter, Uppercase
- Ll = Letter, Lowercase
- Lt = Letter, Titlecase
- Lm = Letter, Modifier
- Lo = Letter, Other
-
- Pc = Punctuation, Connector
- Pd = Punctuation, Dash
- Ps = Punctuation, Open
- Pe = Punctuation, Close
- Po = Punctuation, Other
-
- Sm = Symbol, Math
- Sc = Symbol, Currency
- Sk = Symbol, Modifier
- So = Symbol, Other
-
-BIDIRECTIONAL PROPERTIES
-
-Please refer to the Unicode Standard for an explanation of the algorithm for
-Bidirectional Behavior and an explanation of the sigificance of these categories.
-These values are normative.
-
-Strong types:
- L Left-Right; Most alphabetic, syllabic, and logographic
- characters (e.g., CJK ideographs)
- R Right-Left; Arabic, Hebrew, and
- punctuation specific to those scripts
-Weak types:
- EN European Number
- ES European Number Separator
- ET European Number Terminator
- AN Arabic Number
- CS Common Number Separator
-
-Separators:
- B Block Separator
- S Segment Separator
-
-Neutrals:
- WS Whitespace
- ON Other Neutrals ; All other characters: punctuation, symbols
-
-CHARACTER DECOMPOSITION TAGS
-
-The decomposition is a normative property of a character. The tags supplied
-with certain decompositions generally indicate formatting information.
-Where no such tag is given, the decomposition is designated as canonical.
-Conversely, the presence of a formatting tag also indicates
-that the decomposition is a compatibility decomposition and not a canonical
-decomposition. In the absence of other formatting information in a
-compatibility decomposition, the tag <compat> is used to distinguish it from
-canonical decompositions.
-
-In some instances a canonical decomposition or a compatibility decomposition
-may consist of a single character. For a canonical decomposition, this
-indicates that the character is a canonical equivalent of another single
-character. For a compatibility decomposition, this indicates that the
-character is a compatibility equivalent of another single character.
-
-The compatibility formatting tags used are:
-
- <font> A font variant (e.g. a blackletter form).
- <noBreak> A no-break version of a space or hyphen.
- <initial> An initial presentation form (Arabic).
- <medial> A medial presentation form (Arabic).
- <final> A final presentation form (Arabic).
- <isolated> An isolated presentation form (Arabic).
- <circle> An encircled form.
- <super> A superscript form.
- <sub> A subscript form.
- <vertical> A vertical layout presentation form.
- <wide> A wide (or zenkaku) compatibility character.
- <narrow> A narrow (or hankaku) compatibility character.
- <small> A small variant form (CNS compatibility).
- <square> A CJK squared font variant.
- <fraction> A vulgar fraction form.
- <compat> Otherwise unspecified compatibility character.
-
-CANONICAL COMBINING CLASSES
-
- 0: Spacing, enclosing, reordrant, and surrounding
- 1: Overlays and interior
- 6: Tibetan subjoined Letters
- 7: Nuktas
- 8: Hiragana/Katakana voiced marks
- 9: Viramas
- 10: Start of fixed position classes
-199: End of fixed position classes
-200: Below left attached
-202: Below attached
-204: Below right attached
-208: Left attached (reordrant around single base character)
-210: Right attached
-212: Above left attached
-214: Above attached
-216: Above right attached
-218: Below left
-220: Below
-222: Below right
-224: Left (reordrant around single base character)
-226: Right
-228: Above left
-230: Above
-232: Above right
-234: Double above
-
-Note: some of the combining classes in this list do not currently have
-members but are specified here for completeness.
-
-CASE MAPPINGS
-
-In addition to uppercase and lowercase, because of the inclusion of certain
-composite characters for compatibility, such as "01F1;LATIN CAPITAL LETTER
-DZ", there is a third case, called titlecase, which is used where the first
-character of a word is to be capitalized (e.g. UPPERCASE, Titlecase,
-lowercase). An example of such a character is "01F2;LATIN CAPITAL LETTER D
-WITH SMALL LETTER Z".
-
-The uppercase, titlecase and lowercase fields are only included for characters
-that have a single corresponding character of that type. Composite characters
-(such as "339D;SQUARE CM") that do not have a single corresponding character
-of that type can be cased by decomposition.
-
-The case mapping is an informative, default mapping. Certain languages, such
-as Turkish, German, French, or Greek may have small deviations from the
-default mappings listed in the Unicode Character Database.
-
-MODIFICATION HISTORY
-
-Modifications made in updating the Unicode Character Database for
-the Unicode Standard, Version 2.1 (from Version 2.0) are:
-* Added two characters (U+20AC and U+FFFC).
-* Amended bidi properties for U+0026, U+002E, U+0040, U+2007.
-* Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275,
- U+03C2, U+1E9B.
-* Changed combining order class for U+0F71.
-* Corrected canonical decompositions for U+0F73, U+1FBE.
-* Changed decomposition for U+FB1F from compatibility to canonical.
-* Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB.
-* Corrected compatibility decompositions for U+2469, U+246A, U+3358.
-
-
-Some of the modifications made in updating the Unicode Character Database
-for the Unicode Standard, Version 2.0 are:
-* Fixed decompositions with TONOS to use correct NSM: 030D.
-* Removed old Hangul Syllables; mapping to new characters are
- in a separate table.
-* Marked compability decompositions with additional tags.
-* Changed old tag names for clarity.
-* Revision of decompositions to use first-level decomposition, instead
- of maximal decomposition.
-* Correction of all known errors in decompositions from earlier versions.
-* Added control code names (as old Unicode names).
-* Added Hangul Jamo decompositions.
-* Added Number category to match properties list in book.
-* Fixed categories of Koranic Arabic marks.
-* Fixed categories of precomposed characters to match decomposition where possible.
-* Added Hebrew cantillation marks and the Tibetan script.
-* Added place holders for ranges such as CJK Ideographic Area and the
- Private Use Area.
-* Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of mistakes in the
- database.
diff --git a/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt b/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt
deleted file mode 100644
index 3ccda68..0000000
--- a/libjava/classpath/doc/unicode/ReadMe-3.0.0.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-June 23, 1999
-
-This directory contains the initial release for Unicode 3.0.
-
-This release consists of corrections and additions to the
-Unicode Character Database, to match the publication of
-The Unicode Standard, Version 3.0.
-
-Detailed documentation of the files constituting the
-Unicode Character Database (contributory data files for
-the standard itself) can now be found in
-UnicodeCharacterDatabase.html.
-
diff --git a/libjava/classpath/doc/unicode/SpecialCasing-2.txt b/libjava/classpath/doc/unicode/SpecialCasing-2.txt
deleted file mode 100644
index af002ef..0000000
--- a/libjava/classpath/doc/unicode/SpecialCasing-2.txt
+++ /dev/null
@@ -1,219 +0,0 @@
-# SpecialCasing-2.txt
-#
-# Special Casing Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It contains additional information about the casing of Unicode characters.
-# (For compatibility, the UnicodeData.txt file only contains case mappings for
-# characters where they are 1-1, and does not have locale-specific mappings.)
-# These are informative character properties.
-#
-# Send comments to mark@unicode.org
-#
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <entry> := <case_mapping> <condition_list>? (<s>* "#" <comment>)?
-#
-# <case_mapping> := <source> <sep> <lower> <sep> <title> <sep> <upper> <sep>
-#
-# <source> := <code_point>
-# <sep> := <s>* ";" <s>*
-# <lower> := <code_point_list>
-# <title> := <code_point_list>
-# <upper> := <code_point_list>
-# <code_point_list> := <code_point> (<s>+ <code_point>)*
-# <code_point> := <hex><hex><hex><hex>
-# <hex> := [0-1A-Fa-f]
-# <s> := <space>
-#
-# <condition_list> := <locale>? (<s>+ <context>)*
-# <locale> := <ISO_3166_code> ( "_" <ISO_639_code> )? ( "_" <variant> )?
-# <ISO_3166_code> := 2-letter country code,
-# as in http://www.unicode.org/unicode/onlinedat/countries.html
-# <ISO_639_code> := 2-letter code,
-# as in http://www.unicode.org/unicode/onlinedat/languages.html
-# <context> := "FINAL" | "NON_FINAL" | "MODERN" | "NON_MODERN"
-#
-# A condition list overrides the normal behavior if any of the listed conditions is true.
-# FINAL: The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).
-# MODERN: The mapping is only used for modern text.
-# Conditions preceded by "NON_" represent the negation of the condition
-#
-# New contexts may be added in the future.
-# Parsers of this file must be prepared to deal with that situation.
-# Additional whitespace around elements is optional. Blank lines are ignored in parsing.
-# On any line, all text following "#" is a comment, and are ignored in parsing.
-# ================================================================================
-
-# ================================================================================
-# Unconditional mappings
-# ================================================================================
-
-# The German es-zed is special--the normal mapping is to SS.
-# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
-
-00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
-
-# Ligatures
-
-FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
-FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
-FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
-FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
-FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
-FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
-FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
-
-0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
-FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
-FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
-FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
-FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
-FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
-
-# No corresponding uppercase precomposed character
-
-0149; 0149; 02BC 006E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
-1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
-1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
-1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
-1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
-1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
-1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-
-# IMPORTANT-when capitalizing iota-subscript (0345)
-# It MUST be in normalized form--moved to the end of any sequence of combining marks.
-# This is because logically it represents a following base character!
-# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
-# It should never be the first character in a word, so in titlecasing it can be left as is.
-
-# The following cases are already in the UnicodeData file, so are only commented here.
-
-# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
-
-# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
-# have special uppercases.
-# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
-
-1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-
-1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-
-# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
-
-1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-
-1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-
-# ================================================================================
-# Conditional mappings
-# ================================================================================
-
-# Special case for final form of sigma
-
-03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA
-
-# Note: the following cases for non-final are already in the UnicodeData file.
-
-# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
-# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
-
-# Note: the following cases are not included, since they would normalize in lowercasing
-
-# 03C3; 03C2; 03A3; 03A3; FINAL; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C3; 03A3; 03A3; NON_FINAL; # GREEK SMALL LETTER FINAL SIGMA
-
-# ================================================================================
-# Locale-sensitive mappings
-# ================================================================================
-
-# Turkish
-
-0049; 0131; 0049; 0049; TR; # LATIN CAPITAL LETTER I
-0069; 0069; 0130; 0130; TR; # LATIN SMALL LETTER I
-
-# Note: the following cases are already in the UnicodeData file.
-
-# 0131; 0131; 0049; 0049; TR; # LATIN SMALL LETTER DOTLESS I
-# 0130; 0069; 0130; 0130; TR; # LATIN CAPITAL LETTER I WITH DOT ABOVE
diff --git a/libjava/classpath/doc/unicode/SpecialCasing-4.0.0.txt b/libjava/classpath/doc/unicode/SpecialCasing-4.0.0.txt
deleted file mode 100644
index 34d1c61..0000000
--- a/libjava/classpath/doc/unicode/SpecialCasing-4.0.0.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-# SpecialCasing-4.0.0.txt
-# Date: 2003-03-14, 20:22:04 GMT [MD]
-#
-# Special Casing Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It contains additional information about the casing of Unicode characters.
-# (For compatibility, the UnicodeData.txt file only contains case mappings for
-# characters where they are 1-1, and does not have locale-specific mappings.)
-# For more information, see the discussion of Case Mappings in the Unicode Standard.
-#
-# All code points not listed in this file that do not have a simple case mappings
-# in UnicodeData.txt map to themselves.
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment>
-#
-# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than
-# one character, they are separated by spaces. Other than as used to separate elements,
-# spaces are to be ignored.
-#
-# The <condition_list> is optional. Where present, it consists of one or more locales or contexts,
-# separated by spaces. In these conditions:
-# - A condition list overrides the normal behavior if all of the listed conditions are true.
-# - The context is always the context of the characters in the original string,
-# NOT in the resulting string.
-# - Case distinctions in the condition list are not significant.
-# - Conditions preceded by "Not_" represent the negation of the condition.
-#
-# A locale is defined as:
-# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )?
-# <ISO_3166_code> := 2-letter ISO country code,
-# <ISO_639_code> := 2-letter ISO language code
-#
-# A context is one of the following, as defined in the Unicode Standard:
-# Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I
-#
-# Parsers of this file must be prepared to deal with future additions to this format:
-# * Additional contexts
-# * Additional fields
-# ================================================================================
-
-# ================================================================================
-# Unconditional mappings
-# ================================================================================
-
-# The German es-zed is special--the normal mapping is to SS.
-# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
-
-00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
-
-# Preserve canonical equivalence for I with dot. Turkic is handled below.
-
-0130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-
-# Ligatures
-
-FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
-FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
-FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
-FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
-FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
-FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
-FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
-
-0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
-FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
-FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
-FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
-FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
-FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
-
-# No corresponding uppercase precomposed character
-
-0149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
-1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
-1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
-1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
-1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
-1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
-1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-
-# IMPORTANT-when capitalizing iota-subscript (0345)
-# It MUST be in normalized form--moved to the end of any sequence of combining marks.
-# This is because logically it represents a following base character!
-# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
-# It should never be the first character in a word, so in titlecasing it can be left as is.
-
-# The following cases are already in the UnicodeData file, so are only commented here.
-
-# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
-
-# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
-# have special uppercases.
-# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
-
-1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-
-# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
-
-1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-
-1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-
-# ================================================================================
-# Conditional mappings
-# ================================================================================
-
-# Special case for final form of sigma
-
-03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
-
-# Note: the following cases for non-final are already in the UnicodeData file.
-
-# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
-# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
-
-# Note: the following cases are not included, since they would case-fold in lowercasing
-
-# 03C3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
-
-# ================================================================================
-# Locale-sensitive mappings
-# ================================================================================
-
-# Lithuanian
-
-# Lithuanian retains the dot in a lowercase i when followed by accents.
-
-# Remove DOT ABOVE after "i" with upper or titlecase
-
-0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
-
-# Introduce an explicit dot above when lowercasing capital I's and J's
-# whenever there are more accents above.
-# (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
-
-0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
-004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
-012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
-00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
-00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
-0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
-
-# ================================================================================
-
-# Turkish and Azeri
-
-# I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
-# The following rules handle those cases.
-
-0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-
-# When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
-# This matches the behavior of the canonically equivalent I-dot_above
-
-0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
-0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
-
-# When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
-
-0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
-0049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I
-
-# When uppercasing, i turns into a dotted capital I
-
-0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
-0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
-
-# Note: the following case is already in the UnicodeData file.
-
-# 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
diff --git a/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html b/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html
deleted file mode 100644
index 113d311..0000000
--- a/libjava/classpath/doc/unicode/UnicodeCharacterDatabase-3.0.0.html
+++ /dev/null
@@ -1,345 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-
- "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html>
-
-
-
-<head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-
-<meta http-equiv="Content-Language" content="en-us">
-
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-
-<meta name="ProgId" content="FrontPage.Editor.Document">
-
-<link rel="stylesheet" href="http://www.unicode.org/unicode.css" type="text/css">
-
-<title>Unicode Character Database</title>
-
-</head>
-
-
-
-<body>
-
-
-
-<h1>UNICODE CHARACTER DATABASE<br>
-Version 3.0.0</h1>
-
-<table border="1" cellspacing="2" cellpadding="0" height="87" width="100%">
-
- <tr>
-
- <td valign="TOP" width="144">Revision</td>
-
- <td valign="TOP">3.0.0</td>
-
- </tr>
-
- <tr>
-
- <td valign="TOP" width="144">Authors</td>
-
- <td valign="TOP">Mark Davis and Ken Whistler</td>
-
- </tr>
-
- <tr>
-
- <td valign="TOP" width="144">Date</td>
-
- <td valign="TOP">1999-09-11</td>
-
- </tr>
-
- <tr>
-
- <td valign="TOP" width="144">This Version</td>
-
- <td valign="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html</a></td>
-
- </tr>
-
- <tr>
-
- <td valign="TOP" width="144">Previous Version</td>
-
- <td valign="TOP">n/a</td>
-
- </tr>
-
- <tr>
-
- <td valign="TOP" width="144">Latest Version</td>
-
- <td valign="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html</a></td>
-
- </tr>
-
-</table>
-
-<p align="center">Copyright © 1995-1999 Unicode, Inc. All Rights reserved.</p>
-
-<h2>Disclaimer</h2>
-
-<p>The Unicode Character Database is provided as is by Unicode, Inc. No claims
-
-are made as to fitness for any particular purpose. No warranties of any kind are
-
-expressed or implied. The recipient agrees to determine applicability of
-
-information provided. If this file has been purchased on magnetic or optical
-
-media from Unicode, Inc., the sole remedy for any claim will be exchange of
-
-defective media within 90 days of receipt.</p>
-
-<p>This disclaimer is applicable for all other data files accompanying the
-
-Unicode Character Database, some of which have been compiled by the Unicode
-
-Consortium, and some of which have been supplied by other sources.</p>
-
-<h2>Limitations on Rights to Redistribute This Data</h2>
-
-<p>Recipient is granted the right to make copies in any form for internal
-
-distribution and to freely use the information supplied in the creation of
-
-products supporting the Unicode<sup>TM</sup> Standard. The files in the Unicode
-
-Character Database can be redistributed to third parties or other organizations
-
-(whether for profit or not) as long as this notice and the disclaimer notice are
-
-retained. Information can be extracted from these files and used in
-
-documentation or programs, as long as there is an accompanying notice indicating
-
-the source.</p>
-
-<h2>Introduction</h2>
-
-<p>The Unicode Character Database is a set of files that define the Unicode
-
-character properties and internal mappings. For more information about character
-
-properties and mappings, see <i><a href="http://www.unicode.org/unicode/uni2book/u2.html">The
-
-Unicode Standard</a></i>.</p>
-
-<p>The Unicode Character Database has been updated to reflect Version 3.0 of the
-
-Unicode Standard, with many characters added to those published in Version 2.0.
-
-A number of corrections have also been made to case mappings or other errors in
-
-the database noted since the publication of Version 2.0. Normative bidirectional
-
-properties have also been modified to reflect decisions of the Unicode Technical
-
-Committee.</p>
-
-<p>For more information on versions of the Unicode Standard and how to reference
-
-them, see <a href="http://www.unicode.org/unicode/standard/versions/">http://www.unicode.org/unicode/standard/versions/</a>.</p>
-
-<h2>Conformance</h2>
-
-<p>Character properties may be either normative or informative. <i>Normative</i>
-
-means that implementations that claim conformance to the Unicode Standard (at a
-
-particular version) and which make use of a particular property or field must
-
-follow the specifications of the standard for that property or field in order to
-
-be conformant. The term <i>normative</i> when applied to a property or field of
-
-the Unicode Character Database, does <i>not</i> mean that the value of that
-
-field will never change. Corrections and extensions to the standard in the
-
-future may require minor changes to normative values, even though the Unicode
-
-Technical Committee strives to minimize such changes. An<i> informative </i>property
-
-or field is strongly recommended, but a conformant implementation is free to use
-
-or change such values as it may require while still being conformant to the
-
-standard. Particular implementations may choose to override the properties and
-
-mappings that are not normative. In that case, it is up to the implementer to
-
-establish a protocol to convey that information.</p>
-
-<h2>Files</h2>
-
-<p>The following summarizes the files in the Unicode Character Database. &nbsp;For
-
-more information about these files, see the referenced technical report or
-
-section of Unicode Standard, Version 3.0.</p>
-
-<p><b>UnicodeData.txt (Chapter 4)</b>
-
-<ul>
-
- <li>The main file in the Unicode Character Database.</li>
-
- <li>For detailed information on the format, see <a href="UnicodeData.html">UnicodeData.html</a>.
-
- This file also characterizes which properties are normative and which are
-
- informative.</li>
-
-</ul>
-
-<p><b>PropList.txt (Chapter 4)</b>
-
-<ul>
-
- <li>Additional informative properties list: <i>Alphabetic, Ideographic,</i>
-
- and <i>Mathematical</i>, among others.</li>
-
-</ul>
-
-<p><b>SpecialCasing.txt (Chapter 4)</b>
-
-<ul>
-
- <li>List of informative special casing properties, including one-to-many
-
- mappings such as SHARP S =&gt; &quot;SS&quot;, and locale-specific mappings,
-
- such as for Turkish <i>dotless i</i>.</li>
-
-</ul>
-
-<p><b>Blocks.txt (Chapter 14)</b>
-
-<ul>
-
- <li>List of normative block names.</li>
-
-</ul>
-
-<p><b>Jamo.txt (Chapter 4)</b>
-
-<ul>
-
- <li>List of normative Jamo short names, used in deriving HANGUL SYLLABLE names
-
- algorithmically.</li>
-
-</ul>
-
-<p><b>ArabicShaping.txt (Section 8.2)</b>
-
-<ul>
-
- <li>Basic Arabic and Syriac character shaping properties, such as initial,
-
- medial and final shapes. These properties are normative for minimal shaping
-
- of Arabic and Syriac. </li>
-
-</ul>
-
-<p><b>NamesList.txt (Chapter 14)</b>
-
-<ul>
-
- <li>This file duplicates some of the material in the UnicodeData file, and
-
- adds informative annotations uses in the character charts, as printed in the
-
- Unicode Standard. </li>
-
- <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches
-
- the appropriate version of the book. Changes in the Unicode Character
-
- Database since then may not be reflected in these files, since they are
-
- primarily of archival interest.</li>
-
-</ul>
-
-<p><b>Index.txt (Chapter 14)</b>
-
-<ul>
-
- <li>Informative index to Unicode characters, as printed in the Unicode
-
- Standard</li>
-
- <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches
-
- the appropriate version of the book. Changes in the Unicode Character
-
- Database since then may not be reflected in these files, since they are
-
- primarily of archival interest.</li>
-
-</ul>
-
-<p><b>CompositionExclusions.txt (<a href="http://www.unicode.org/unicode/reports/tr15/">UTR#15
-
-Unicode Normalization Forms</a>)</b>
-
-<ul>
-
- <li>Normative properties for normalization.</li>
-
-</ul>
-
-<p><b>LineBreak.txt (<a href="http://www.unicode.org/unicode/reports/tr14/">UTR
-
-#14: Line Breaking Properties</a>)</b>
-
-<ul>
-
- <li>Normative and informative properties for line breaking. To see which
-
- properties are informative and which are normative, consult UTR#14.</li>
-
-</ul>
-
-<p><b>EastAsianWidth.txt (<a href="http://www.unicode.org/unicode/reports/tr11/">UTR
-
-#11: East Asian Character Width</a>)</b>
-
-<ul>
-
- <li>Informative properties for determining the choice of wide vs. narrow
-
- glyphs in East Asian contexts.</li>
-
-</ul>
-
-<p><b>diffXvY.txt</b>
-
-<ul>
-
- <li>Mechanically-generated informative files containing accumulated
-
- differences between successive versions of UnicodeData.txt</li>
-
-</ul>
-
-
-
-</body>
-
-
-
-</html>
-
diff --git a/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt b/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt
deleted file mode 100644
index 39c4cf6..0000000
--- a/libjava/classpath/doc/unicode/UnicodeData-2.1.2.txt
+++ /dev/null
@@ -1,6590 +0,0 @@
-0000;<control>;Cc;0;ON;;;;;N;NULL;;;;
-0001;<control>;Cc;0;ON;;;;;N;START OF HEADING;;;;
-0002;<control>;Cc;0;ON;;;;;N;START OF TEXT;;;;
-0003;<control>;Cc;0;ON;;;;;N;END OF TEXT;;;;
-0004;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION;;;;
-0005;<control>;Cc;0;ON;;;;;N;ENQUIRY;;;;
-0006;<control>;Cc;0;ON;;;;;N;ACKNOWLEDGE;;;;
-0007;<control>;Cc;0;ON;;;;;N;BELL;;;;
-0008;<control>;Cc;0;ON;;;;;N;BACKSPACE;;;;
-0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
-000A;<control>;Cc;0;ON;;;;;N;LINE FEED;;;;
-000B;<control>;Cc;0;ON;;;;;N;VERTICAL TABULATION;;;;
-000C;<control>;Cc;0;ON;;;;;N;FORM FEED;;;;
-000D;<control>;Cc;0;ON;;;;;N;CARRIAGE RETURN;;;;
-000E;<control>;Cc;0;ON;;;;;N;SHIFT OUT;;;;
-000F;<control>;Cc;0;ON;;;;;N;SHIFT IN;;;;
-0010;<control>;Cc;0;ON;;;;;N;DATA LINK ESCAPE;;;;
-0011;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL ONE;;;;
-0012;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL TWO;;;;
-0013;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL THREE;;;;
-0014;<control>;Cc;0;ON;;;;;N;DEVICE CONTROL FOUR;;;;
-0015;<control>;Cc;0;ON;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
-0016;<control>;Cc;0;ON;;;;;N;SYNCHRONOUS IDLE;;;;
-0017;<control>;Cc;0;ON;;;;;N;END OF TRANSMISSION BLOCK;;;;
-0018;<control>;Cc;0;ON;;;;;N;CANCEL;;;;
-0019;<control>;Cc;0;ON;;;;;N;END OF MEDIUM;;;;
-001A;<control>;Cc;0;ON;;;;;N;SUBSTITUTE;;;;
-001B;<control>;Cc;0;ON;;;;;N;ESCAPE;;;;
-001C;<control>;Cc;0;ON;;;;;N;FILE SEPARATOR;;;;
-001D;<control>;Cc;0;ON;;;;;N;GROUP SEPARATOR;;;;
-001E;<control>;Cc;0;ON;;;;;N;RECORD SEPARATOR;;;;
-001F;<control>;Cc;0;ON;;;;;N;UNIT SEPARATOR;;;;
-0020;SPACE;Zs;0;WS;;;;;N;;;;;
-0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
-0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
-0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
-0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
-0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
-0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
-0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
-002A;ASTERISK;Po;0;ON;;;;;N;;;;;
-002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-002C;COMMA;Po;0;CS;;;;;N;;;;;
-002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
-002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
-002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
-0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
-0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
-0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
-0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
-0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
-0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
-0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
-0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
-0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
-0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
-003A;COLON;Po;0;CS;;;;;N;;;;;
-003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
-003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
-003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
-0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
-0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
-0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
-0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
-0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
-0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
-0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
-0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
-0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
-0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
-004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
-004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
-004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
-004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
-004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
-004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
-0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
-0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
-0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
-0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
-0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
-0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
-0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
-0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
-0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
-0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
-005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
-005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
-005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
-005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
-005E;CIRCUMFLEX ACCENT;Sk;0;ON;<compat> 0020 0302;;;;N;SPACING CIRCUMFLEX;;;;
-005F;LOW LINE;Pc;0;ON;<compat> 0020 0332;;;;N;SPACING UNDERSCORE;;;;
-0060;GRAVE ACCENT;Sk;0;ON;<compat> 0020 0300;;;;N;SPACING GRAVE;;;;
-0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
-0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
-0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
-0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
-0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
-0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
-0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
-0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
-0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
-006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
-006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
-006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
-006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
-006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
-006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
-0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
-0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
-0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
-0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
-0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
-0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
-0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
-0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
-0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
-0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
-007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
-007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
-007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
-007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
-007E;TILDE;Sm;0;ON;;;;;N;;;;;
-007F;<control>;Cc;0;ON;;;;;N;DELETE;;;;
-0080;<control>;Cc;0;ON;;;;;N;;;;;
-0081;<control>;Cc;0;ON;;;;;N;;;;;
-0082;<control>;Cc;0;ON;;;;;N;;;;;
-0083;<control>;Cc;0;ON;;;;;N;;;;;
-0084;<control>;Cc;0;ON;;;;;N;;;;;
-0085;<control>;Cc;0;ON;;;;;N;;;;;
-0086;<control>;Cc;0;ON;;;;;N;;;;;
-0087;<control>;Cc;0;ON;;;;;N;;;;;
-0088;<control>;Cc;0;ON;;;;;N;;;;;
-0089;<control>;Cc;0;ON;;;;;N;;;;;
-008A;<control>;Cc;0;ON;;;;;N;;;;;
-008B;<control>;Cc;0;ON;;;;;N;;;;;
-008C;<control>;Cc;0;ON;;;;;N;;;;;
-008D;<control>;Cc;0;ON;;;;;N;;;;;
-008E;<control>;Cc;0;ON;;;;;N;;;;;
-008F;<control>;Cc;0;ON;;;;;N;;;;;
-0090;<control>;Cc;0;ON;;;;;N;;;;;
-0091;<control>;Cc;0;ON;;;;;N;;;;;
-0092;<control>;Cc;0;ON;;;;;N;;;;;
-0093;<control>;Cc;0;ON;;;;;N;;;;;
-0094;<control>;Cc;0;ON;;;;;N;;;;;
-0095;<control>;Cc;0;ON;;;;;N;;;;;
-0096;<control>;Cc;0;ON;;;;;N;;;;;
-0097;<control>;Cc;0;ON;;;;;N;;;;;
-0098;<control>;Cc;0;ON;;;;;N;;;;;
-0099;<control>;Cc;0;ON;;;;;N;;;;;
-009A;<control>;Cc;0;ON;;;;;N;;;;;
-009B;<control>;Cc;0;ON;;;;;N;;;;;
-009C;<control>;Cc;0;ON;;;;;N;;;;;
-009D;<control>;Cc;0;ON;;;;;N;;;;;
-009E;<control>;Cc;0;ON;;;;;N;;;;;
-009F;<control>;Cc;0;ON;;;;;N;;;;;
-00A0;NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
-00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
-00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
-00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
-00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
-00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
-00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
-00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
-00AA;FEMININE ORDINAL INDICATOR;Ll;0;ON;<super> 0061;;;;N;;;;;
-00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING GUILLEMET;;;;
-00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
-00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
-00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
-00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
-00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
-00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
-00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
-00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
-00B5;MICRO SIGN;Ll;0;ON;<compat> 03BC;;;;N;;;;;
-00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
-00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
-00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
-00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
-00BA;MASCULINE ORDINAL INDICATOR;Ll;0;ON;<super> 006F;;;;N;;;;;
-00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING GUILLEMET;;;;
-00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
-00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
-00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
-00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
-00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
-00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
-00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
-00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
-00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
-00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
-00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;
-00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
-00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
-00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
-00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
-00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
-00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
-00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
-00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
-00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
-00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
-00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
-00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
-00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
-00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
-00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
-00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
-00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
-00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
-00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
-00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
-00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
-00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
-00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
-00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
-00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
-00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
-00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
-00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
-00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
-00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
-00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
-00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6
-00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
-00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
-00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
-00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
-00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
-00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
-00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
-00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
-00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
-00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
-00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
-00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
-00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
-00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
-00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
-00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
-00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
-00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
-00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
-00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
-00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
-00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
-00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
-00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
-0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
-0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
-0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
-0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
-0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
-0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
-0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
-0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
-0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
-0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
-010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
-010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
-010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
-010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
-010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
-010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
-0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
-0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
-0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
-0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
-0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
-0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
-0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
-0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
-0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
-0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
-011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
-011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
-011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
-011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
-011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
-011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
-0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
-0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
-0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
-0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
-0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
-0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
-0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
-0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
-0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
-0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
-012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
-012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
-012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
-012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
-012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
-012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
-0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
-0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
-0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
-0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
-0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
-0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
-0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
-0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
-0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
-0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
-013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
-013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
-013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
-013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
-013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
-013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
-0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
-0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
-0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
-0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
-0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
-0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
-0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
-0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
-0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
-0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
-014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
-014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
-014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
-014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
-014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
-014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
-0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
-0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
-0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
-0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
-0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
-0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
-0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
-0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
-0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
-0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
-015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
-015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
-015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
-015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
-015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;
-015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E
-0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
-0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
-0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;
-0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162
-0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
-0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
-0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
-0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
-0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
-0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
-016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
-016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
-016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
-016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
-016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
-016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
-0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
-0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
-0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
-0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
-0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
-0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
-0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
-0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
-0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
-0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
-017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
-017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
-017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
-017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
-017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
-017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
-0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
-0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
-0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
-0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
-0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
-0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
-0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
-0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
-0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
-0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;
-018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
-018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
-018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
-018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
-018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
-018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
-0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
-0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
-0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
-0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
-0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
-0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;;;
-0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
-0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
-0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
-0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
-019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
-019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
-019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
-019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
-019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
-019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;
-01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
-01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
-01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;
-01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2
-01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
-01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
-01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;;
-01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
-01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
-01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
-01AA;LATIN LETTER REVERSED ESH LOOP;Lo;0;L;;;;;N;;;;;
-01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
-01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
-01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
-01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
-01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
-01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
-01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
-01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
-01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
-01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
-01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
-01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
-01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
-01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
-01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
-01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
-01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
-01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
-01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
-01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
-01BF;LATIN LETTER WYNN;Lo;0;L;;;;;N;;;;;
-01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
-01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
-01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
-01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
-01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
-01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
-01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
-01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
-01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
-01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
-01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
-01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
-01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
-01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
-01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
-01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
-01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
-01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
-01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
-01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
-01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
-01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
-01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
-01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
-01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
-01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
-01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
-01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
-01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
-01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
-01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
-01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
-01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0041 0307 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
-01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0061 0307 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
-01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;
-01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2
-01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
-01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
-01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
-01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
-01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
-01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
-01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
-01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
-01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
-01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
-01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
-01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
-01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
-01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
-01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
-01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
-01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
-01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
-01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
-01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
-01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;
-01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC
-01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
-01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
-0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
-0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
-0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
-0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
-0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
-0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
-0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
-0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
-0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
-0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
-020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
-020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
-020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
-020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
-020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
-020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
-0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
-0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
-0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
-0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
-0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
-0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
-0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
-0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
-0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
-0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
-0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
-0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
-0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
-0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
-0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
-0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
-0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
-0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
-025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
-025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
-025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
-025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
-025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
-025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
-0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
-0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
-0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
-0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
-0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
-0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
-0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
-0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
-0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
-0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
-026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
-026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
-026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
-026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
-026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
-026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
-0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
-0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
-0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
-0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
-0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;;019F;
-0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
-0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
-0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
-0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
-027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
-027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
-027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
-027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
-0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;;;
-0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
-0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
-0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
-0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
-0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
-0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
-0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
-0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
-0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
-028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
-028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
-028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
-028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
-028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
-028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
-0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
-0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
-0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
-0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
-0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
-0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
-0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
-0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
-029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
-029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
-029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
-029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
-029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
-029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
-02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
-02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
-02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
-02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
-02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
-02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
-02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
-02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
-02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
-02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
-02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
-02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
-02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
-02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
-02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
-02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
-02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
-02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
-02B9;MODIFIER LETTER PRIME;Sk;0;L;;;;;N;;;;;
-02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;L;;;;;N;;;;;
-02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
-02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
-02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
-02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
-02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;L;;;;;N;;;;;
-02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;L;;;;;N;;;;;
-02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;L;;;;;N;;;;;
-02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;L;;;;;N;;;;;
-02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
-02C7;CARON;Sk;0;L;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
-02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;L;;;;;N;;;;;
-02C9;MODIFIER LETTER MACRON;Sk;0;L;;;;;N;;Mandarin Chinese first tone;;;
-02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
-02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
-02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;L;;;;;N;;;;;
-02CD;MODIFIER LETTER LOW MACRON;Sk;0;L;;;;;N;;;;;
-02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
-02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;L;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
-02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
-02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;L;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
-02D4;MODIFIER LETTER UP TACK;Sk;0;L;;;;;N;;;;;
-02D5;MODIFIER LETTER DOWN TACK;Sk;0;L;;;;;N;;;;;
-02D6;MODIFIER LETTER PLUS SIGN;Sk;0;L;;;;;N;;;;;
-02D7;MODIFIER LETTER MINUS SIGN;Sk;0;L;;;;;N;;;;;
-02D8;BREVE;Sk;0;L;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
-02D9;DOT ABOVE;Sk;0;L;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
-02DA;RING ABOVE;Sk;0;L;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
-02DB;OGONEK;Sk;0;L;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
-02DC;SMALL TILDE;Sk;0;L;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
-02DD;DOUBLE ACUTE ACCENT;Sk;0;L;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
-02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;L;;;;;N;;;;;
-02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
-02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
-02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
-02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
-02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
-02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
-02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;L;;;;;N;;;;;
-02E7;MODIFIER LETTER MID TONE BAR;Sk;0;L;;;;;N;;;;;
-02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;L;;;;;N;;;;;
-02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;L;;;;;N;;;;;
-0300;COMBINING GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING GRAVE;Varia;;;
-0301;COMBINING ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING ACUTE;Oxia;;;
-0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;L;;;;;N;NON-SPACING CIRCUMFLEX;;;;
-0303;COMBINING TILDE;Mn;230;L;;;;;N;NON-SPACING TILDE;;;;
-0304;COMBINING MACRON;Mn;230;L;;;;;N;NON-SPACING MACRON;;;;
-0305;COMBINING OVERLINE;Mn;230;L;;;;;N;NON-SPACING OVERSCORE;;;;
-0306;COMBINING BREVE;Mn;230;L;;;;;N;NON-SPACING BREVE;Vrachy;;;
-0307;COMBINING DOT ABOVE;Mn;230;L;;;;;N;NON-SPACING DOT ABOVE;;;;
-0308;COMBINING DIAERESIS;Mn;230;L;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
-0309;COMBINING HOOK ABOVE;Mn;230;L;;;;;N;NON-SPACING HOOK ABOVE;;;;
-030A;COMBINING RING ABOVE;Mn;230;L;;;;;N;NON-SPACING RING ABOVE;;;;
-030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
-030C;COMBINING CARON;Mn;230;L;;;;;N;NON-SPACING HACEK;;;;
-030D;COMBINING VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
-030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;L;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
-030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;L;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
-0310;COMBINING CANDRABINDU;Mn;230;L;0306 0307;;;;N;NON-SPACING CANDRABINDU;;;;
-0311;COMBINING INVERTED BREVE;Mn;230;L;;;;;N;NON-SPACING INVERTED BREVE;;;;
-0312;COMBINING TURNED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
-0313;COMBINING COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
-0314;COMBINING REVERSED COMMA ABOVE;Mn;230;L;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
-0315;COMBINING COMMA ABOVE RIGHT;Mn;232;L;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
-0316;COMBINING GRAVE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING GRAVE BELOW;;;;
-0317;COMBINING ACUTE ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING ACUTE BELOW;;;;
-0318;COMBINING LEFT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
-0319;COMBINING RIGHT TACK BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
-031A;COMBINING LEFT ANGLE ABOVE;Mn;232;L;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
-031B;COMBINING HORN;Mn;216;L;;;;;N;NON-SPACING HORN;;;;
-031C;COMBINING LEFT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
-031D;COMBINING UP TACK BELOW;Mn;220;L;;;;;N;NON-SPACING UP TACK BELOW;;;;
-031E;COMBINING DOWN TACK BELOW;Mn;220;L;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
-031F;COMBINING PLUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
-0320;COMBINING MINUS SIGN BELOW;Mn;220;L;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
-0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
-0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;L;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
-0323;COMBINING DOT BELOW;Mn;220;L;;;;;N;NON-SPACING DOT BELOW;;;;
-0324;COMBINING DIAERESIS BELOW;Mn;220;L;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
-0325;COMBINING RING BELOW;Mn;220;L;;;;;N;NON-SPACING RING BELOW;;;;
-0326;COMBINING COMMA BELOW;Mn;220;L;;;;;N;NON-SPACING COMMA BELOW;;;;
-0327;COMBINING CEDILLA;Mn;202;L;;;;;N;NON-SPACING CEDILLA;;;;
-0328;COMBINING OGONEK;Mn;202;L;;;;;N;NON-SPACING OGONEK;;;;
-0329;COMBINING VERTICAL LINE BELOW;Mn;220;L;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
-032A;COMBINING BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING BRIDGE BELOW;;;;
-032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
-032C;COMBINING CARON BELOW;Mn;220;L;;;;;N;NON-SPACING HACEK BELOW;;;;
-032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;L;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
-032E;COMBINING BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING BREVE BELOW;;;;
-032F;COMBINING INVERTED BREVE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
-0330;COMBINING TILDE BELOW;Mn;220;L;;;;;N;NON-SPACING TILDE BELOW;;;;
-0331;COMBINING MACRON BELOW;Mn;220;L;;;;;N;NON-SPACING MACRON BELOW;;;;
-0332;COMBINING LOW LINE;Mn;220;L;;;;;N;NON-SPACING UNDERSCORE;;;;
-0333;COMBINING DOUBLE LOW LINE;Mn;220;L;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
-0334;COMBINING TILDE OVERLAY;Mn;1;L;;;;;N;NON-SPACING TILDE OVERLAY;;;;
-0335;COMBINING SHORT STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
-0336;COMBINING LONG STROKE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
-0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
-0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
-0339;COMBINING RIGHT HALF RING BELOW;Mn;220;L;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
-033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;L;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
-033B;COMBINING SQUARE BELOW;Mn;220;L;;;;;N;NON-SPACING SQUARE BELOW;;;;
-033C;COMBINING SEAGULL BELOW;Mn;220;L;;;;;N;NON-SPACING SEAGULL BELOW;;;;
-033D;COMBINING X ABOVE;Mn;230;L;;;;;N;NON-SPACING X ABOVE;;;;
-033E;COMBINING VERTICAL TILDE;Mn;230;L;;;;;N;NON-SPACING VERTICAL TILDE;;;;
-033F;COMBINING DOUBLE OVERLINE;Mn;230;L;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
-0340;COMBINING GRAVE TONE MARK;Mn;230;L;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
-0341;COMBINING ACUTE TONE MARK;Mn;230;L;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
-0342;COMBINING GREEK PERISPOMENI;Mn;230;L;;;;;N;;;;;
-0343;COMBINING GREEK KORONIS;Mn;230;L;0313;;;;N;;;;;
-0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;L;0308 030D;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
-0345;COMBINING GREEK YPOGEGRAMMENI;Mn;220;L;;;;;N;GREEK NON-SPACING IOTA BELOW;;;;
-0360;COMBINING DOUBLE TILDE;Mn;234;L;;;;;N;;;;;
-0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;L;;;;;N;;;;;
-0374;GREEK NUMERAL SIGN;Po;0;L;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
-0375;GREEK LOWER NUMERAL SIGN;Po;0;L;;;;;N;;Aristeri keraia;;;
-037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
-037E;GREEK QUESTION MARK;Po;0;L;003B;;;;N;;Erotimatiko;;;
-0384;GREEK TONOS;Sk;0;L;<compat> 0020 030D;;;;N;GREEK SPACING TONOS;;;;
-0385;GREEK DIALYTIKA TONOS;Sk;0;L;00A8 030D;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
-0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 030D;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
-0387;GREEK ANO TELEIA;Po;0;L;00B7;;;;N;;;;;
-0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 030D;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
-0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 030D;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
-038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 030D;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
-038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 030D;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
-038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 030D;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
-038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 030D;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
-0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03B9 0344;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
-0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
-0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
-0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
-0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
-0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
-0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
-0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
-0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
-0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
-039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
-039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
-039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
-039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
-039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
-039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
-03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
-03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
-03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
-03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
-03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
-03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
-03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
-03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
-03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
-03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
-03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
-03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 030D;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
-03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 030D;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
-03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 030D;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
-03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 030D;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
-03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03C5 0344;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
-03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
-03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
-03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
-03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
-03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
-03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
-03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
-03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
-03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
-03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
-03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
-03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
-03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
-03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
-03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
-03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
-03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
-03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
-03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
-03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
-03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
-03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
-03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
-03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
-03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
-03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 030D;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
-03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 030D;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
-03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 030D;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
-03D0;GREEK BETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;
-03D1;GREEK THETA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;
-03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
-03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 030D;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
-03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
-03D5;GREEK PHI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;
-03D6;GREEK PI SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;
-03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;;
-03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;;
-03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;;
-03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;;
-03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
-03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
-03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
-03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
-03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
-03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
-03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
-03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
-03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
-03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
-03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
-03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
-03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
-03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
-03F0;GREEK KAPPA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;
-03F1;GREEK RHO SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;
-03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;;;
-03F3;GREEK LETTER YOT;Lo;0;L;;;;;N;;;;;
-0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
-0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
-0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
-0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
-0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
-0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
-0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
-0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
-0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
-040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
-040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
-040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
-040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
-040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
-0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
-0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
-0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
-0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
-0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
-0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
-0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
-0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
-0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
-0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
-041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
-041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
-041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
-041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
-041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
-041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
-0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
-0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
-0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
-0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
-0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
-0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
-0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
-0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
-0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
-0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
-042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
-042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
-042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
-042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
-042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
-042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
-0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
-0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
-0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
-0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
-0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
-0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
-0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
-0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
-0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
-0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
-043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
-043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
-043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
-043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
-043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
-043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
-0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
-0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
-0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
-0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
-0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
-0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
-0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
-0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
-0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
-0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
-044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
-044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
-044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
-044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
-044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
-044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
-0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
-0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
-0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
-0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
-0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
-0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
-0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
-0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
-0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
-045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
-045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
-045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
-045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
-045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
-0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
-0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
-0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
-0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
-0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
-0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
-0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
-0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
-0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
-0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
-046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
-046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
-046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
-046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
-046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
-046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
-0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
-0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
-0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
-0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
-0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
-0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
-0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
-0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
-0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
-0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
-047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
-047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
-047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
-047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
-047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
-047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
-0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
-0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
-0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
-0483;COMBINING CYRILLIC TITLO;Mn;230;L;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
-0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
-0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
-0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;L;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
-0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
-0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
-0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
-0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
-0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
-0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
-0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
-0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
-0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
-0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
-049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
-049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
-049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
-049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
-049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
-049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
-04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
-04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
-04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
-04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
-04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
-04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
-04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
-04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
-04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
-04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
-04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
-04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
-04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
-04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
-04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
-04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
-04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
-04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
-04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
-04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
-04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
-04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
-04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
-04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
-04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
-04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
-04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
-04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
-04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
-04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
-04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
-04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
-04C0;CYRILLIC LETTER PALOCHKA;Lo;0;L;;;;;N;CYRILLIC LETTER I;;;;
-04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
-04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
-04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
-04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
-04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
-04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
-04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
-04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
-04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
-04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
-04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
-04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
-04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;00C6;;;;N;;;;04D5;
-04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;00E6;;;;N;;;04D4;;04D4
-04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
-04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
-04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;018F;;;;N;;;;04D9;
-04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;0259;;;;N;;;04D8;;04D8
-04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;018F 0308;;;;N;;;;04DB;
-04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;0259 0308;;;;N;;;04DA;;04DA
-04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
-04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
-04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
-04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
-04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;01B7;;;;N;;;;04E1;
-04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;0292;;;;N;;;04E0;;04E0
-04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
-04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
-04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
-04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
-04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
-04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
-04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;019F;;;;N;;;;04E9;
-04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;0275;;;;N;;;04E8;;04E8
-04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;019F 0308;;;;N;;;;04EB;
-04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;0275 0308;;;;N;;;04EA;;04EA
-04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
-04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
-04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
-04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
-04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
-04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
-04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
-04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
-04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
-04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
-0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
-0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
-0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
-0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
-0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
-0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
-0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
-0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
-0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
-053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
-053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
-053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
-053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
-053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
-053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
-0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
-0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
-0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
-0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
-0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
-0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
-0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
-0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
-0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
-0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
-054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
-054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
-054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
-054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
-054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
-054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
-0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
-0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
-0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
-0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
-0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
-0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
-0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
-0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
-055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
-055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
-055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
-055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
-055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
-0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
-0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
-0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
-0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
-0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
-0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
-0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
-0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
-0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
-056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
-056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
-056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
-056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
-056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
-056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
-0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
-0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
-0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
-0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
-0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
-0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
-0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
-0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
-0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
-0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
-057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
-057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
-057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
-057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
-057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
-057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
-0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
-0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
-0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
-0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
-0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
-0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
-0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
-0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
-0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
-0591;HEBREW ACCENT ETNAHTA;Mn;220;R;;;;;N;;;;;
-0592;HEBREW ACCENT SEGOL;Mn;230;R;;;;;N;;;;;
-0593;HEBREW ACCENT SHALSHELET;Mn;230;R;;;;;N;;;;;
-0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;R;;;;;N;;;;;
-0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;R;;;;;N;;;;;
-0596;HEBREW ACCENT TIPEHA;Mn;220;R;;;;;N;;;;;
-0597;HEBREW ACCENT REVIA;Mn;230;R;;;;;N;;;;;
-0598;HEBREW ACCENT ZARQA;Mn;230;R;;;;;N;;;;;
-0599;HEBREW ACCENT PASHTA;Mn;230;R;;;;;N;;;;;
-059A;HEBREW ACCENT YETIV;Mn;222;R;;;;;N;;;;;
-059B;HEBREW ACCENT TEVIR;Mn;220;R;;;;;N;;;;;
-059C;HEBREW ACCENT GERESH;Mn;230;R;;;;;N;;;;;
-059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;R;;;;;N;;;;;
-059E;HEBREW ACCENT GERSHAYIM;Mn;230;R;;;;;N;;;;;
-059F;HEBREW ACCENT QARNEY PARA;Mn;230;R;;;;;N;;;;;
-05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;R;;;;;N;;;;;
-05A1;HEBREW ACCENT PAZER;Mn;230;R;;;;;N;;;;;
-05A3;HEBREW ACCENT MUNAH;Mn;220;R;;;;;N;;;;;
-05A4;HEBREW ACCENT MAHAPAKH;Mn;220;R;;;;;N;;;;;
-05A5;HEBREW ACCENT MERKHA;Mn;220;R;;;;;N;;;;;
-05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;R;;;;;N;;;;;
-05A7;HEBREW ACCENT DARGA;Mn;220;R;;;;;N;;;;;
-05A8;HEBREW ACCENT QADMA;Mn;230;R;;;;;N;;;;;
-05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;R;;;;;N;;;;;
-05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;R;;;;;N;;;;;
-05AB;HEBREW ACCENT OLE;Mn;230;R;;;;;N;;;;;
-05AC;HEBREW ACCENT ILUY;Mn;230;R;;;;;N;;;;;
-05AD;HEBREW ACCENT DEHI;Mn;222;R;;;;;N;;;;;
-05AE;HEBREW ACCENT ZINOR;Mn;230;R;;;;;N;;;;;
-05AF;HEBREW MARK MASORA CIRCLE;Mn;230;R;;;;;N;;;;;
-05B0;HEBREW POINT SHEVA;Mn;10;R;;;;;N;;;;;
-05B1;HEBREW POINT HATAF SEGOL;Mn;11;R;;;;;N;;;;;
-05B2;HEBREW POINT HATAF PATAH;Mn;12;R;;;;;N;;;;;
-05B3;HEBREW POINT HATAF QAMATS;Mn;13;R;;;;;N;;;;;
-05B4;HEBREW POINT HIRIQ;Mn;14;R;;;;;N;;;;;
-05B5;HEBREW POINT TSERE;Mn;15;R;;;;;N;;;;;
-05B6;HEBREW POINT SEGOL;Mn;16;R;;;;;N;;;;;
-05B7;HEBREW POINT PATAH;Mn;17;R;;;;;N;;;;;
-05B8;HEBREW POINT QAMATS;Mn;18;R;;;;;N;;;;;
-05B9;HEBREW POINT HOLAM;Mn;19;R;;;;;N;;;;;
-05BB;HEBREW POINT QUBUTS;Mn;20;R;;;;;N;;;;;
-05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;R;;;;;N;HEBREW POINT DAGESH;;;;
-05BD;HEBREW POINT METEG;Mn;22;R;;;;;N;;;;;
-05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
-05BF;HEBREW POINT RAFE;Mn;23;R;;;;;N;;;;;
-05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;
-05C1;HEBREW POINT SHIN DOT;Mn;24;R;;;;;N;;;;;
-05C2;HEBREW POINT SIN DOT;Mn;25;R;;;;;N;;;;;
-05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;
-05C4;HEBREW MARK UPPER DOT;Mn;230;R;;;;;N;;;;;
-05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
-05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
-05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
-05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
-05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
-05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
-05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
-05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
-05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
-05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
-05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
-05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
-05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
-05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
-05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
-05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
-05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
-05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
-05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
-05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
-05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
-05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
-05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
-05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
-05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
-05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
-05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
-05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
-05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
-05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
-05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
-05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
-060C;ARABIC COMMA;Po;0;R;;;;;N;;;;;
-061B;ARABIC SEMICOLON;Po;0;R;;;;;N;;;;;
-061F;ARABIC QUESTION MARK;Po;0;R;;;;;N;;;;;
-0621;ARABIC LETTER HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH;;;;
-0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
-0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
-0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
-0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
-0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
-0627;ARABIC LETTER ALEF;Lo;0;R;;;;;N;;;;;
-0628;ARABIC LETTER BEH;Lo;0;R;;;;;N;ARABIC LETTER BAA;;;;
-0629;ARABIC LETTER TEH MARBUTA;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
-062A;ARABIC LETTER TEH;Lo;0;R;;;;;N;ARABIC LETTER TAA;;;;
-062B;ARABIC LETTER THEH;Lo;0;R;;;;;N;ARABIC LETTER THAA;;;;
-062C;ARABIC LETTER JEEM;Lo;0;R;;;;;N;;;;;
-062D;ARABIC LETTER HAH;Lo;0;R;;;;;N;ARABIC LETTER HAA;;;;
-062E;ARABIC LETTER KHAH;Lo;0;R;;;;;N;ARABIC LETTER KHAA;;;;
-062F;ARABIC LETTER DAL;Lo;0;R;;;;;N;;;;;
-0630;ARABIC LETTER THAL;Lo;0;R;;;;;N;;;;;
-0631;ARABIC LETTER REH;Lo;0;R;;;;;N;ARABIC LETTER RA;;;;
-0632;ARABIC LETTER ZAIN;Lo;0;R;;;;;N;;;;;
-0633;ARABIC LETTER SEEN;Lo;0;R;;;;;N;;;;;
-0634;ARABIC LETTER SHEEN;Lo;0;R;;;;;N;;;;;
-0635;ARABIC LETTER SAD;Lo;0;R;;;;;N;;;;;
-0636;ARABIC LETTER DAD;Lo;0;R;;;;;N;;;;;
-0637;ARABIC LETTER TAH;Lo;0;R;;;;;N;;;;;
-0638;ARABIC LETTER ZAH;Lo;0;R;;;;;N;ARABIC LETTER DHAH;;;;
-0639;ARABIC LETTER AIN;Lo;0;R;;;;;N;;;;;
-063A;ARABIC LETTER GHAIN;Lo;0;R;;;;;N;;;;;
-0640;ARABIC TATWEEL;Lm;0;R;;;;;N;;;;;
-0641;ARABIC LETTER FEH;Lo;0;R;;;;;N;ARABIC LETTER FA;;;;
-0642;ARABIC LETTER QAF;Lo;0;R;;;;;N;;;;;
-0643;ARABIC LETTER KAF;Lo;0;R;;;;;N;ARABIC LETTER CAF;;;;
-0644;ARABIC LETTER LAM;Lo;0;R;;;;;N;;;;;
-0645;ARABIC LETTER MEEM;Lo;0;R;;;;;N;;;;;
-0646;ARABIC LETTER NOON;Lo;0;R;;;;;N;;;;;
-0647;ARABIC LETTER HEH;Lo;0;R;;;;;N;ARABIC LETTER HA;;;;
-0648;ARABIC LETTER WAW;Lo;0;R;;;;;N;;;;;
-0649;ARABIC LETTER ALEF MAKSURA;Lo;0;R;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
-064A;ARABIC LETTER YEH;Lo;0;R;;;;;N;ARABIC LETTER YA;;;;
-064B;ARABIC FATHATAN;Mn;27;R;;;;;N;;;;;
-064C;ARABIC DAMMATAN;Mn;28;R;;;;;N;;;;;
-064D;ARABIC KASRATAN;Mn;29;R;;;;;N;;;;;
-064E;ARABIC FATHA;Mn;30;R;;;;;N;ARABIC FATHAH;;;;
-064F;ARABIC DAMMA;Mn;31;R;;;;;N;ARABIC DAMMAH;;;;
-0650;ARABIC KASRA;Mn;32;R;;;;;N;ARABIC KASRAH;;;;
-0651;ARABIC SHADDA;Mn;33;R;;;;;N;ARABIC SHADDAH;;;;
-0652;ARABIC SUKUN;Mn;34;R;;;;;N;;;;;
-0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
-0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
-0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
-0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
-0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
-0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
-0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
-0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
-0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
-0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
-066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
-066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
-066D;ARABIC FIVE POINTED STAR;Po;0;R;;;;;N;;;;;
-0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;R;;;;;N;ARABIC ALEF ABOVE;;;;
-0671;ARABIC LETTER ALEF WASLA;Lo;0;R;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
-0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
-0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;R;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
-0674;ARABIC LETTER HIGH HAMZA;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
-0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
-0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
-0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
-0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;R;;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
-0679;ARABIC LETTER TTEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
-067A;ARABIC LETTER TTEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
-067B;ARABIC LETTER BEEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
-067C;ARABIC LETTER TEH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH RING;;;;
-067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
-067E;ARABIC LETTER PEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
-067F;ARABIC LETTER TEHEH;Lo;0;R;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
-0680;ARABIC LETTER BEHEH;Lo;0;R;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
-0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
-0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
-0683;ARABIC LETTER NYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
-0684;ARABIC LETTER DYEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
-0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
-0686;ARABIC LETTER TCHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
-0687;ARABIC LETTER TCHEHEH;Lo;0;R;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
-0688;ARABIC LETTER DDAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
-0689;ARABIC LETTER DAL WITH RING;Lo;0;R;;;;;N;;;;;
-068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;R;;;;;N;;;;;
-068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;R;;;;;N;;;;;
-068C;ARABIC LETTER DAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
-068D;ARABIC LETTER DDAHAL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
-068E;ARABIC LETTER DUL;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
-068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;R;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
-0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-0691;ARABIC LETTER RREH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
-0692;ARABIC LETTER REH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
-0693;ARABIC LETTER REH WITH RING;Lo;0;R;;;;;N;ARABIC LETTER RA WITH RING;;;;
-0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
-0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;R;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
-0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
-0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
-0698;ARABIC LETTER JEH;Lo;0;R;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
-0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;R;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
-069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;R;;;;;N;;;;;
-069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;R;;;;;N;;;;;
-069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
-069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06A1;ARABIC LETTER DOTLESS FEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS FA;;;;
-06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
-06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
-06A4;ARABIC LETTER VEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
-06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
-06A6;ARABIC LETTER PEHEH;Lo;0;R;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
-06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
-06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06A9;ARABIC LETTER KEHEH;Lo;0;R;;;;;N;ARABIC LETTER OPEN CAF;;;;
-06AA;ARABIC LETTER SWASH KAF;Lo;0;R;;;;;N;ARABIC LETTER SWASH CAF;;;;
-06AB;ARABIC LETTER KAF WITH RING;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH RING;;;;
-06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
-06AD;ARABIC LETTER NG;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
-06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
-06AF;ARABIC LETTER GAF;Lo;0;R;;;;;N;;;;;
-06B0;ARABIC LETTER GAF WITH RING;Lo;0;R;;;;;N;;;;;
-06B1;ARABIC LETTER NGOEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
-06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;R;;;;;N;;;;;
-06B3;ARABIC LETTER GUEH;Lo;0;R;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
-06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;R;;;;;N;;;;;
-06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
-06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06BA;ARABIC LETTER NOON GHUNNA;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
-06BB;ARABIC LETTER RNOON;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
-06BC;ARABIC LETTER NOON WITH RING;Lo;0;R;;;;;N;;;;;
-06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;R;;;;;N;ARABIC LETTER KNOTTED HA;;;;
-06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
-06C1;ARABIC LETTER HEH GOAL;Lo;0;R;;;;;N;ARABIC LETTER HA GOAL;;;;
-06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
-06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;R;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
-06C4;ARABIC LETTER WAW WITH RING;Lo;0;R;;;;;N;;;;;
-06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
-06C6;ARABIC LETTER OE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
-06C7;ARABIC LETTER U;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
-06C8;ARABIC LETTER YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
-06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
-06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;R;;;;;N;;;;;
-06CB;ARABIC LETTER VE;Lo;0;R;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
-06CC;ARABIC LETTER FARSI YEH;Lo;0;R;;;;;N;ARABIC LETTER DOTLESS YA;;;;
-06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
-06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;R;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
-06D0;ARABIC LETTER E;Lo;0;R;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;
-06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;R;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
-06D2;ARABIC LETTER YEH BARREE;Lo;0;R;;;;;N;ARABIC LETTER YA BARREE;;;;
-06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;R;;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
-06D4;ARABIC FULL STOP;Po;0;R;;;;;N;ARABIC PERIOD;;;;
-06D5;ARABIC LETTER AE;Lo;0;R;;;;;N;;;;;
-06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
-06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;R;;;;;N;;;;;
-06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;R;;;;;N;;;;;
-06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;R;;;;;N;;;;;
-06DA;ARABIC SMALL HIGH JEEM;Mn;230;R;;;;;N;;;;;
-06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;R;;;;;N;;;;;
-06DC;ARABIC SMALL HIGH SEEN;Mn;230;R;;;;;N;;;;;
-06DD;ARABIC END OF AYAH;Me;0;R;;;;;N;;;;;
-06DE;ARABIC START OF RUB EL HIZB;Me;0;R;;;;;N;;;;;
-06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;R;;;;;N;;;;;
-06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;R;;;;;N;;;;;
-06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;R;;;;;N;;;;;
-06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;R;;;;;N;;;;;
-06E3;ARABIC SMALL LOW SEEN;Mn;220;R;;;;;N;;;;;
-06E4;ARABIC SMALL HIGH MADDA;Mn;230;R;;;;;N;;;;;
-06E5;ARABIC SMALL WAW;Lm;0;R;;;;;N;;;;;
-06E6;ARABIC SMALL YEH;Lm;0;R;;;;;N;;;;;
-06E7;ARABIC SMALL HIGH YEH;Mn;230;R;;;;;N;;;;;
-06E8;ARABIC SMALL HIGH NOON;Mn;230;R;;;;;N;;;;;
-06E9;ARABIC PLACE OF SAJDAH;So;0;R;;;;;N;;;;;
-06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;R;;;;;N;;;;;
-06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;R;;;;;N;;;;;
-06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;R;;;;;N;;;;;
-06ED;ARABIC SMALL LOW MEEM;Mn;220;R;;;;;N;;;;;
-06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
-06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
-06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
-06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
-06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
-06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
-06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
-06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
-06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
-06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
-0901;DEVANAGARI SIGN CANDRABINDU;Mn;37;L;;;;;N;;;;;
-0902;DEVANAGARI SIGN ANUSVARA;Mn;36;L;;;;;N;;;;;
-0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
-0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
-0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
-0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
-0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
-090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
-090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
-090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
-090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
-0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
-0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
-0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
-0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
-0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
-0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
-0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
-0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
-091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
-091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
-091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
-091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
-091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
-091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
-0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
-0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
-0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
-0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
-092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
-092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
-092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
-092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
-092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
-092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
-0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
-0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
-0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
-0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
-0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
-0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
-0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
-093C;DEVANAGARI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
-093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0941;DEVANAGARI VOWEL SIGN U;Mn;38;L;;;;;N;;;;;
-0942;DEVANAGARI VOWEL SIGN UU;Mn;39;L;;;;;N;;;;;
-0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;40;L;;;;;N;;;;;
-0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;41;L;;;;;N;;;;;
-0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;42;L;;;;;N;;;;;
-0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;43;L;;;;;N;;;;;
-0947;DEVANAGARI VOWEL SIGN E;Mn;44;L;;;;;N;;;;;
-0948;DEVANAGARI VOWEL SIGN AI;Mn;45;L;;;;;N;;;;;
-0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
-094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-094D;DEVANAGARI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0950;DEVANAGARI OM;So;0;L;;;;;N;;;;;
-0951;DEVANAGARI STRESS SIGN UDATTA;Mn;46;L;;;;;N;;;;;
-0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;47;L;;;;;N;;;;;
-0953;DEVANAGARI GRAVE ACCENT;Mn;230;L;;;;;N;;;;;
-0954;DEVANAGARI ACUTE ACCENT;Mn;230;L;;;;;N;;;;;
-0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
-0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
-095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
-095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
-095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
-095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
-095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
-095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
-0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;48;L;;;;;N;;;;;
-0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;49;L;;;;;N;;;;;
-0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
-0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
-0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
-0981;BENGALI SIGN CANDRABINDU;Mn;50;L;;;;;N;;;;;
-0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
-0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
-0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
-0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
-0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
-098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
-098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
-0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
-0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
-0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
-0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
-0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
-0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
-099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
-099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
-099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
-099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
-099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
-099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
-09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
-09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
-09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
-09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
-09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
-09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
-09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
-09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
-09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
-09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
-09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
-09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
-09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
-09B0;BENGALI LETTER RA;Lo;0;L;09AC 09BC;;;;N;;;;;
-09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
-09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
-09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
-09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
-09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
-09BC;BENGALI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
-09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-09C1;BENGALI VOWEL SIGN U;Mn;51;L;;;;;N;;;;;
-09C2;BENGALI VOWEL SIGN UU;Mn;52;L;;;;;N;;;;;
-09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;53;L;;;;;N;;;;;
-09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;54;L;;;;;N;;;;;
-09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
-09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
-09CD;BENGALI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
-09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
-09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
-09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;55;L;;;;;N;;;;;
-09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;56;L;;;;;N;;;;;
-09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
-09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
-09F2;BENGALI RUPEE MARK;Sc;0;L;;;;;N;;;;;
-09F3;BENGALI RUPEE SIGN;Sc;0;L;;;;;N;;;;;
-09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
-09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
-09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
-09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
-09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;-1;N;;;;;
-09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
-09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
-0A02;GURMUKHI SIGN BINDI;Mn;57;L;;;;;N;;;;;
-0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
-0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
-0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
-0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
-0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
-0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
-0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
-0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
-0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
-0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
-0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
-0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
-0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
-0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
-0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
-0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
-0A33;GURMUKHI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
-0A36;GURMUKHI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
-0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
-0A3C;GURMUKHI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
-0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0A41;GURMUKHI VOWEL SIGN U;Mn;58;L;;;;;N;;;;;
-0A42;GURMUKHI VOWEL SIGN UU;Mn;59;L;;;;;N;;;;;
-0A47;GURMUKHI VOWEL SIGN EE;Mn;60;L;;;;;N;;;;;
-0A48;GURMUKHI VOWEL SIGN AI;Mn;61;L;;;;;N;;;;;
-0A4B;GURMUKHI VOWEL SIGN OO;Mn;62;L;;;;;N;;;;;
-0A4C;GURMUKHI VOWEL SIGN AU;Mn;63;L;;;;;N;;;;;
-0A4D;GURMUKHI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
-0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
-0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
-0A5C;GURMUKHI LETTER RRA;Lo;0;L;0A21 0A3C;;;;N;;;;;
-0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
-0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0A70;GURMUKHI TIPPI;Mn;64;L;;;;;N;;;;;
-0A71;GURMUKHI ADDAK;Mn;65;L;;;;;N;;;;;
-0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
-0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
-0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
-0A81;GUJARATI SIGN CANDRABINDU;Mn;67;L;;;;;N;;;;;
-0A82;GUJARATI SIGN ANUSVARA;Mn;66;L;;;;;N;;;;;
-0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
-0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
-0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
-0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
-0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
-0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
-0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
-0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
-0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
-0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
-0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
-0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
-0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
-0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
-0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
-0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
-0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
-0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
-0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
-0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
-0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
-0ABC;GUJARATI SIGN NUKTA;Mn;7;L;;;;;N;;;;;
-0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0AC1;GUJARATI VOWEL SIGN U;Mn;68;L;;;;;N;;;;;
-0AC2;GUJARATI VOWEL SIGN UU;Mn;69;L;;;;;N;;;;;
-0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;70;L;;;;;N;;;;;
-0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;71;L;;;;;N;;;;;
-0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;72;L;;;;;N;;;;;
-0AC7;GUJARATI VOWEL SIGN E;Mn;73;L;;;;;N;;;;;
-0AC8;GUJARATI VOWEL SIGN AI;Mn;74;L;;;;;N;;;;;
-0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-0ACD;GUJARATI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0AD0;GUJARATI OM;So;0;L;;;;;N;;;;;
-0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B01;ORIYA SIGN CANDRABINDU;Mn;75;L;;;;;N;;;;;
-0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
-0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
-0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
-0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
-0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
-0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
-0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
-0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
-0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
-0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
-0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
-0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
-0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
-0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
-0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
-0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
-0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
-0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
-0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
-0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
-0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
-0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
-0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
-0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
-0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
-0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
-0B3C;ORIYA SIGN NUKTA;Mn;7;L;;;;;N;;;;;
-0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0B3F;ORIYA VOWEL SIGN I;Mn;76;L;;;;;N;;;;;
-0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0B41;ORIYA VOWEL SIGN U;Mn;77;L;;;;;N;;;;;
-0B42;ORIYA VOWEL SIGN UU;Mn;78;L;;;;;N;;;;;
-0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;79;L;;;;;N;;;;;
-0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
-0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
-0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
-0B4D;ORIYA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0B56;ORIYA AI LENGTH MARK;Mn;230;L;;;;;N;;;;;
-0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
-0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
-0B5F;ORIYA LETTER YYA;Lo;0;L;0B2F 0B3C;;;;N;;;;;
-0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
-0B82;TAMIL SIGN ANUSVARA;Mn;0;L;;;;;N;;;;;
-0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
-0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
-0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
-0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
-0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
-0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
-0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
-0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
-0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
-0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
-0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
-0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
-0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
-0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
-0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
-0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
-0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
-0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
-0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
-0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
-0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
-0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
-0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
-0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
-0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
-0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
-0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
-0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
-0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
-0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
-0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
-0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0BC0;TAMIL VOWEL SIGN II;Mn;80;L;;;;;N;;;;;
-0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
-0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
-0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
-0BCD;TAMIL SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
-0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
-0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
-0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
-0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
-0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
-0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
-0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
-0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
-0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
-0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
-0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
-0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
-0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
-0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
-0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
-0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
-0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
-0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
-0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
-0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
-0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
-0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
-0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
-0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
-0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
-0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
-0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
-0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
-0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
-0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
-0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
-0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
-0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
-0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
-0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
-0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
-0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
-0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
-0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
-0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
-0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
-0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
-0C3E;TELUGU VOWEL SIGN AA;Mn;81;L;;;;;N;;;;;
-0C3F;TELUGU VOWEL SIGN I;Mn;82;L;;;;;N;;;;;
-0C40;TELUGU VOWEL SIGN II;Mn;83;L;;;;;N;;;;;
-0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0C46;TELUGU VOWEL SIGN E;Mn;84;L;;;;;N;;;;;
-0C47;TELUGU VOWEL SIGN EE;Mn;85;L;;;;;N;;;;;
-0C48;TELUGU VOWEL SIGN AI;Mn;86;L;0C46 0C56;;;;N;;;;;
-0C4A;TELUGU VOWEL SIGN O;Mn;87;L;;;;;N;;;;;
-0C4B;TELUGU VOWEL SIGN OO;Mn;88;L;;;;;N;;;;;
-0C4C;TELUGU VOWEL SIGN AU;Mn;89;L;;;;;N;;;;;
-0C4D;TELUGU SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0C55;TELUGU LENGTH MARK;Mn;90;L;;;;;N;;;;;
-0C56;TELUGU AI LENGTH MARK;Mn;91;L;;;;;N;;;;;
-0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
-0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
-0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
-0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
-0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
-0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
-0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
-0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
-0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
-0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
-0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
-0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
-0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
-0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
-0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
-0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
-0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
-0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
-0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
-0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
-0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
-0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
-0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
-0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
-0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
-0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
-0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
-0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
-0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
-0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
-0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0CBF;KANNADA VOWEL SIGN I;Mn;92;L;;;;;N;;;;;
-0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
-0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0CC6;KANNADA VOWEL SIGN E;Mn;93;L;;;;;N;;;;;
-0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
-0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
-0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
-0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CC6 0CC2 0CD5;;;;N;;;;;
-0CCC;KANNADA VOWEL SIGN AU;Mn;94;L;;;;;N;;;;;
-0CCD;KANNADA SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
-0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
-0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
-0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
-0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
-0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
-0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
-0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
-0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
-0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
-0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
-0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
-0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
-0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
-0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
-0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
-0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
-0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
-0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
-0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
-0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
-0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
-0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
-0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
-0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
-0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
-0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
-0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
-0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
-0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
-0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
-0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
-0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
-0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
-0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
-0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
-0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
-0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
-0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
-0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
-0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
-0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
-0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
-0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
-0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
-0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
-0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0D41;MALAYALAM VOWEL SIGN U;Mn;95;L;;;;;N;;;;;
-0D42;MALAYALAM VOWEL SIGN UU;Mn;96;L;;;;;N;;;;;
-0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;97;L;;;;;N;;;;;
-0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
-0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
-0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
-0D4D;MALAYALAM SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
-0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
-0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
-0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
-0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
-0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
-0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
-0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
-0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
-0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
-0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
-0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
-0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
-0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
-0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
-0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
-0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
-0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
-0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
-0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
-0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
-0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
-0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
-0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
-0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
-0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
-0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
-0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
-0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
-0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
-0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
-0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
-0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
-0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
-0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
-0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
-0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
-0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
-0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
-0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
-0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
-0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
-0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
-0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
-0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
-0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
-0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
-0E2F;THAI CHARACTER PAIYANNOI;Po;0;L;;;;;N;THAI PAI YAN NOI;;;;
-0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
-0E31;THAI CHARACTER MAI HAN-AKAT;Mn;98;L;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
-0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
-0E33;THAI CHARACTER SARA AM;Lo;0;L;0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
-0E34;THAI CHARACTER SARA I;Mn;99;L;;;;;N;THAI VOWEL SIGN SARA I;;;;
-0E35;THAI CHARACTER SARA II;Mn;100;L;;;;;N;THAI VOWEL SIGN SARA II;;;;
-0E36;THAI CHARACTER SARA UE;Mn;101;L;;;;;N;THAI VOWEL SIGN SARA UE;;;;
-0E37;THAI CHARACTER SARA UEE;Mn;102;L;;;;;N;THAI VOWEL SIGN SARA UEE;;;;
-0E38;THAI CHARACTER SARA U;Mn;103;L;;;;;N;THAI VOWEL SIGN SARA U;;;;
-0E39;THAI CHARACTER SARA UU;Mn;104;L;;;;;N;THAI VOWEL SIGN SARA UU;;;;
-0E3A;THAI CHARACTER PHINTHU;Mn;105;L;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
-0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;L;;;;;N;THAI BAHT SIGN;;;;
-0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
-0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
-0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
-0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;
-0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;
-0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;
-0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;
-0E47;THAI CHARACTER MAITAIKHU;Mn;106;L;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;
-0E48;THAI CHARACTER MAI EK;Mn;107;L;;;;;N;THAI TONE MAI EK;;;;
-0E49;THAI CHARACTER MAI THO;Mn;108;L;;;;;N;THAI TONE MAI THO;;;;
-0E4A;THAI CHARACTER MAI TRI;Mn;109;L;;;;;N;THAI TONE MAI TRI;;;;
-0E4B;THAI CHARACTER MAI CHATTAWA;Mn;110;L;;;;;N;THAI TONE MAI CHATTAWA;;;;
-0E4C;THAI CHARACTER THANTHAKHAT;Mn;111;L;;;;;N;THAI THANTHAKHAT;;;;
-0E4D;THAI CHARACTER NIKHAHIT;Mn;112;L;;;;;N;THAI NIKKHAHIT;;;;
-0E4E;THAI CHARACTER YAMAKKAN;Mn;128;L;;;;;N;THAI YAMAKKAN;;;;
-0E4F;THAI CHARACTER FONGMAN;So;0;L;;;;;N;THAI FONGMAN;;;;
-0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
-0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
-0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
-0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
-0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
-0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
-0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
-0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
-0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
-0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
-0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
-0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
-0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
-0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
-0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
-0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
-0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
-0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
-0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
-0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
-0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
-0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
-0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
-0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
-0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
-0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
-0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
-0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
-0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
-0EAF;LAO ELLIPSIS;Po;0;L;;;;;N;;;;;
-0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
-0EB1;LAO VOWEL SIGN MAI KAN;Mn;113;L;;;;;N;;;;;
-0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
-0EB3;LAO VOWEL SIGN AM;Lo;0;L;0ECD 0EB2;;;;N;;;;;
-0EB4;LAO VOWEL SIGN I;Mn;114;L;;;;;N;;;;;
-0EB5;LAO VOWEL SIGN II;Mn;115;L;;;;;N;;;;;
-0EB6;LAO VOWEL SIGN Y;Mn;116;L;;;;;N;;;;;
-0EB7;LAO VOWEL SIGN YY;Mn;117;L;;;;;N;;;;;
-0EB8;LAO VOWEL SIGN U;Mn;118;L;;;;;N;;;;;
-0EB9;LAO VOWEL SIGN UU;Mn;119;L;;;;;N;;;;;
-0EBB;LAO VOWEL SIGN MAI KON;Mn;120;L;;;;;N;;;;;
-0EBC;LAO SEMIVOWEL SIGN LO;Mn;121;L;;;;;N;;;;;
-0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
-0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
-0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
-0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
-0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
-0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
-0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
-0EC8;LAO TONE MAI EK;Mn;122;L;;;;;N;;;;;
-0EC9;LAO TONE MAI THO;Mn;123;L;;;;;N;;;;;
-0ECA;LAO TONE MAI TI;Mn;124;L;;;;;N;;;;;
-0ECB;LAO TONE MAI CATAWA;Mn;125;L;;;;;N;;;;;
-0ECC;LAO CANCELLATION MARK;Mn;126;L;;;;;N;;;;;
-0ECD;LAO NIGGAHITA;Mn;127;L;;;;;N;;;;;
-0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
-0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
-0F00;TIBETAN SYLLABLE OM;So;0;L;;;;;N;;;;;
-0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
-0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
-0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
-0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;;yik go dun ma;;;
-0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
-0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
-0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
-0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;;drul shey;;;
-0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
-0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
-0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;;tsek;;;
-0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;;;;;N;;tsek tar;;;
-0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;;shey;;;
-0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;;nyi shey;;;
-0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
-0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
-0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;;rinchen pung shey;;;
-0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
-0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
-0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;;ter tsek;;;
-0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
-0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
-0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
-0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;L;;;;;N;;kyu pa;;;
-0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;L;;;;;N;;dong tsu;;;
-0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
-0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
-0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
-0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
-0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
-0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
-0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
-0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
-0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
-0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
-0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
-0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
-0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
-0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
-0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
-0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
-0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
-0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;230;L;;;;;N;;nge zung nyi da;;;
-0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
-0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;230;L;;;;;N;;nge zung gor ta;;;
-0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
-0F39;TIBETAN MARK TSA -PHRU;Mn;216;L;;;;;N;;tsa tru;;;
-0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;L;;;;;N;;gug ta yun;;;
-0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;L;;;;;N;;gug ta ye;;;
-0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;L;;;;;N;;ang kang yun;;;
-0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;L;;;;;N;;ang kang ye;;;
-0F3E;TIBETAN SIGN YAR TSHES;Mc;220;L;;;;;N;;yar tse;;;
-0F3F;TIBETAN SIGN MAR TSHES;Mc;220;L;;;;;N;;mar tse;;;
-0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
-0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
-0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
-0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
-0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
-0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
-0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
-0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;;;;;
-0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;;;;;
-0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
-0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;;;;;
-0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
-0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
-0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
-0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
-0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
-0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
-0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
-0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
-0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
-0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
-0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
-0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
-0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
-0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
-0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
-0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;;;;;
-0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
-0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;
-0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
-0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;;;;;
-0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
-0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
-0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
-0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
-0F71;TIBETAN VOWEL SIGN AA;Mn;145;L;;;;;N;;;;;
-0F72;TIBETAN VOWEL SIGN I;Mn;130;L;;;;;N;;;;;
-0F73;TIBETAN VOWEL SIGN II;Mn;131;L;0F72 0F71;;;;N;;;;;
-0F74;TIBETAN VOWEL SIGN U;Mn;132;L;;;;;N;;;;;
-0F75;TIBETAN VOWEL SIGN UU;Mn;133;L;0F74 0F71;;;;N;;;;;
-0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;134;L;0FB2 0F80;;;;N;;;;;
-0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;135;L;0F76 0F71;;;;N;;;;;
-0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;136;L;0FB3 0F80;;;;N;;;;;
-0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;137;L;0F78 0F71;;;;N;;;;;
-0F7A;TIBETAN VOWEL SIGN E;Mn;138;L;;;;;N;;;;;
-0F7B;TIBETAN VOWEL SIGN EE;Mn;139;L;;;;;N;;;;;
-0F7C;TIBETAN VOWEL SIGN O;Mn;140;L;;;;;N;;;;;
-0F7D;TIBETAN VOWEL SIGN OO;Mn;141;L;;;;;N;;;;;
-0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;142;L;;;;;N;;je su nga ro;;;
-0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;;nam chey;;;
-0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;143;L;;;;;N;;;;;
-0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;144;L;0F80 0F71;;;;N;;;;;
-0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;L;;;;;N;;nyi da na da;;;
-0F83;TIBETAN SIGN SNA LDAN;Mn;230;L;;;;;N;;nan de;;;
-0F84;TIBETAN MARK HALANTA;Mn;9;L;;;;;N;;;;;
-0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;;;;;
-0F86;TIBETAN SIGN LCI RTAGS;Mn;230;L;;;;;N;;ji ta;;;
-0F87;TIBETAN SIGN YANG RTAGS;Mn;230;L;;;;;N;;yang ta;;;
-0F88;TIBETAN SIGN LCE TSA CAN;Mn;230;L;;;;;N;;che tsa chen;;;
-0F89;TIBETAN SIGN MCHU CAN;Mn;230;L;;;;;N;;chu chen;;;
-0F8A;TIBETAN SIGN GRU CAN RGYINGS;Mn;230;L;;;;;N;;tru chen ging;;;
-0F8B;TIBETAN SIGN GRU MED RGYINGS;Mn;230;L;;;;;N;;tru me ging;;;
-0F90;TIBETAN SUBJOINED LETTER KA;Mn;6;L;;;;;N;;;;;
-0F91;TIBETAN SUBJOINED LETTER KHA;Mn;6;L;;;;;N;;;;;
-0F92;TIBETAN SUBJOINED LETTER GA;Mn;6;L;;;;;N;;;;;
-0F93;TIBETAN SUBJOINED LETTER GHA;Mn;6;L;0F92 0FB7;;;;N;;;;;
-0F94;TIBETAN SUBJOINED LETTER NGA;Mn;6;L;;;;;N;;;;;
-0F95;TIBETAN SUBJOINED LETTER CA;Mn;6;L;;;;;N;;;;;
-0F97;TIBETAN SUBJOINED LETTER JA;Mn;6;L;;;;;N;;;;;
-0F99;TIBETAN SUBJOINED LETTER NYA;Mn;6;L;;;;;N;;;;;
-0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;6;L;;;;;N;;;;;
-0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;6;L;;;;;N;;;;;
-0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;6;L;;;;;N;;;;;
-0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;6;L;0F9C 0FB7;;;;N;;;;;
-0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;6;L;;;;;N;;;;;
-0F9F;TIBETAN SUBJOINED LETTER TA;Mn;6;L;;;;;N;;;;;
-0FA0;TIBETAN SUBJOINED LETTER THA;Mn;6;L;;;;;N;;;;;
-0FA1;TIBETAN SUBJOINED LETTER DA;Mn;6;L;;;;;N;;;;;
-0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;6;L;0FA1 0FB7;;;;N;;;;;
-0FA3;TIBETAN SUBJOINED LETTER NA;Mn;6;L;;;;;N;;;;;
-0FA4;TIBETAN SUBJOINED LETTER PA;Mn;6;L;;;;;N;;;;;
-0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;6;L;;;;;N;;;;;
-0FA6;TIBETAN SUBJOINED LETTER BA;Mn;6;L;;;;;N;;;;;
-0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;6;L;0FA6 0FB7;;;;N;;;;;
-0FA8;TIBETAN SUBJOINED LETTER MA;Mn;6;L;;;;;N;;;;;
-0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;6;L;;;;;N;;;;;
-0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;6;L;;;;;N;;;;;
-0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;6;L;;;;;N;;;;;
-0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;6;L;0FAB 0FB7;;;;N;;;;;
-0FAD;TIBETAN SUBJOINED LETTER WA;Mn;6;L;;;;;N;;;;;
-0FB1;TIBETAN SUBJOINED LETTER YA;Mn;6;L;;;;;N;;;;;
-0FB2;TIBETAN SUBJOINED LETTER RA;Mn;6;L;;;;;N;;;;;
-0FB3;TIBETAN SUBJOINED LETTER LA;Mn;6;L;;;;;N;;;;;
-0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;6;L;;;;;N;;;;;
-0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;6;L;;;;;N;;;;;
-0FB6;TIBETAN SUBJOINED LETTER SA;Mn;6;L;;;;;N;;;;;
-0FB7;TIBETAN SUBJOINED LETTER HA;Mn;6;L;;;;;N;;;;;
-0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;6;L;0F90 0FB5;;;;N;;;;;
-10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;10D0;
-10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;10D1;
-10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;10D2;
-10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;10D3;
-10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;10D4;
-10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;10D5;
-10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;10D6;
-10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7;
-10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;10D8;
-10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;10D9;
-10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;10DA;
-10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;10DB;
-10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;10DC;
-10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;10DD;
-10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;10DE;
-10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;10DF;
-10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;10E0;
-10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;10E1;
-10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;10E2;
-10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;10E3;
-10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;10E4;
-10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;10E5;
-10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;10E6;
-10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;10E7;
-10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;10E8;
-10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;10E9;
-10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;10EA;
-10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;10EB;
-10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;10EC;
-10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;10ED;
-10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;10EE;
-10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;10EF;
-10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;10F0;
-10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;10F1;
-10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;10F2;
-10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;10F3;
-10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;10F4;
-10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;10F5;
-10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
-1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;<compat> 1100 1100;;;;N;;;;;
-1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
-1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
-1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;<compat> 1103 1103;;;;N;;;;;
-1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;
-1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;
-1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;
-1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;<compat> 1107 1107;;;;N;;;;;
-1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;
-110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;<compat> 1109 1109;;;;N;;;;;
-110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
-110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;
-110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;<compat> 110C 110C;;;;N;;;;;
-110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
-110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
-1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
-1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
-1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;
-1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 1102 1100;;;;N;;;;;
-1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;<compat> 1102 1102;;;;N;;;;;
-1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 1102 1103;;;;N;;;;;
-1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;<compat> 1102 1107;;;;N;;;;;
-1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 1103 1100;;;;N;;;;;
-1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;<compat> 1105 1102;;;;N;;;;;
-1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;<compat> 1105 1105;;;;N;;;;;
-111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;<compat> 1105 1112;;;;N;;;;;
-111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;<compat> 1105 110B;;;;N;;;;;
-111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;<compat> 1106 1107;;;;N;;;;;
-111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 1106 110B;;;;N;;;;;
-111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;<compat> 1107 1100;;;;N;;;;;
-111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;<compat> 1107 1102;;;;N;;;;;
-1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;<compat> 1107 1103;;;;N;;;;;
-1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;<compat> 1107 1109;;;;N;;;;;
-1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1107 1109 1100;;;;N;;;;;
-1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1107 1109 1103;;;;N;;;;;
-1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;<compat> 1107 1109 1107;;;;N;;;;;
-1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;<compat> 1107 1109 1109;;;;N;;;;;
-1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;<compat> 1107 1109 110C;;;;N;;;;;
-1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;<compat> 1107 110C;;;;N;;;;;
-1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;<compat> 1107 110E;;;;N;;;;;
-1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;<compat> 1107 1110;;;;N;;;;;
-112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 1107 1111;;;;N;;;;;
-112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 1107 110B;;;;N;;;;;
-112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 1107 1107 110B;;;;N;;;;;
-112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;<compat> 1109 1100;;;;N;;;;;
-112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;<compat> 1109 1102;;;;N;;;;;
-112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;<compat> 1109 1103;;;;N;;;;;
-1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;<compat> 1109 1105;;;;N;;;;;
-1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;<compat> 1109 1106;;;;N;;;;;
-1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;<compat> 1109 1107;;;;N;;;;;
-1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;<compat> 1109 1107 1100;;;;N;;;;;
-1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;<compat> 1109 1109 1109;;;;N;;;;;
-1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;<compat> 1109 110B;;;;N;;;;;
-1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;<compat> 1109 110C;;;;N;;;;;
-1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;<compat> 1109 110E;;;;N;;;;;
-1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;<compat> 1109 110F;;;;N;;;;;
-1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;<compat> 1109 1110;;;;N;;;;;
-113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;<compat> 1109 1111;;;;N;;;;;
-113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;<compat> 1109 1112;;;;N;;;;;
-113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
-113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;<compat> 113C 113C;;;;N;;;;;
-113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
-113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;<compat> 113E 113E;;;;N;;;;;
-1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 110B 1100;;;;N;;;;;
-1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;<compat> 110B 1103;;;;N;;;;;
-1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;<compat> 110B 1106;;;;N;;;;;
-1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;<compat> 110B 1107;;;;N;;;;;
-1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;<compat> 110B 1109;;;;N;;;;;
-1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;<compat> 110B 1140;;;;N;;;;;
-1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;<compat> 110B 110B;;;;N;;;;;
-1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;<compat> 110B 110C;;;;N;;;;;
-1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;<compat> 110B 110E;;;;N;;;;;
-114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;<compat> 110B 1110;;;;N;;;;;
-114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;<compat> 110B 1111;;;;N;;;;;
-114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;<compat> 110C 110B;;;;N;;;;;
-114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
-114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;<compat> 114E 114E;;;;N;;;;;
-1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
-1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;<compat> 1150 1150;;;;N;;;;;
-1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;<compat> 110E 110F;;;;N;;;;;
-1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;<compat> 110E 1112;;;;N;;;;;
-1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 1111 1107;;;;N;;;;;
-1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1111 110B;;;;N;;;;;
-1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;<compat> 1112 1112;;;;N;;;;;
-1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
-1162;HANGUL JUNGSEONG AE;Lo;0;L;<compat> 1161 1175;;;;N;;;;;
-1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
-1164;HANGUL JUNGSEONG YAE;Lo;0;L;<compat> 1163 1175;;;;N;;;;;
-1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
-1166;HANGUL JUNGSEONG E;Lo;0;L;<compat> 1165 1175;;;;N;;;;;
-1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
-1168;HANGUL JUNGSEONG YE;Lo;0;L;<compat> 1167 1175;;;;N;;;;;
-1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
-116A;HANGUL JUNGSEONG WA;Lo;0;L;<compat> 1169 1161;;;;N;;;;;
-116B;HANGUL JUNGSEONG WAE;Lo;0;L;<compat> 1169 1161 1175;;;;N;;;;;
-116C;HANGUL JUNGSEONG OE;Lo;0;L;<compat> 1169 1175;;;;N;;;;;
-116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
-116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
-116F;HANGUL JUNGSEONG WEO;Lo;0;L;<compat> 116E 1165;;;;N;;;;;
-1170;HANGUL JUNGSEONG WE;Lo;0;L;<compat> 116E 1165 1175;;;;N;;;;;
-1171;HANGUL JUNGSEONG WI;Lo;0;L;<compat> 116E 1175;;;;N;;;;;
-1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
-1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
-1174;HANGUL JUNGSEONG YI;Lo;0;L;<compat> 1173 1175;;;;N;;;;;
-1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
-1176;HANGUL JUNGSEONG A-O;Lo;0;L;<compat> 1161 1169;;;;N;;;;;
-1177;HANGUL JUNGSEONG A-U;Lo;0;L;<compat> 1161 116E;;;;N;;;;;
-1178;HANGUL JUNGSEONG YA-O;Lo;0;L;<compat> 1163 1169;;;;N;;;;;
-1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;<compat> 1163 116D;;;;N;;;;;
-117A;HANGUL JUNGSEONG EO-O;Lo;0;L;<compat> 1165 1169;;;;N;;;;;
-117B;HANGUL JUNGSEONG EO-U;Lo;0;L;<compat> 1165 116E;;;;N;;;;;
-117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;<compat> 1165 1173;;;;N;;;;;
-117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;<compat> 1167 1169;;;;N;;;;;
-117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;<compat> 1167 116E;;;;N;;;;;
-117F;HANGUL JUNGSEONG O-EO;Lo;0;L;<compat> 1169 1165;;;;N;;;;;
-1180;HANGUL JUNGSEONG O-E;Lo;0;L;<compat> 1169 1166;;;;N;;;;;
-1181;HANGUL JUNGSEONG O-YE;Lo;0;L;<compat> 1169 1168;;;;N;;;;;
-1182;HANGUL JUNGSEONG O-O;Lo;0;L;<compat> 1169 1169;;;;N;;;;;
-1183;HANGUL JUNGSEONG O-U;Lo;0;L;<compat> 1169 116E;;;;N;;;;;
-1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;<compat> 116D 1163;;;;N;;;;;
-1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;<compat> 116D 1164;;;;N;;;;;
-1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;<compat> 116D 1167;;;;N;;;;;
-1187;HANGUL JUNGSEONG YO-O;Lo;0;L;<compat> 116D 1169;;;;N;;;;;
-1188;HANGUL JUNGSEONG YO-I;Lo;0;L;<compat> 116D 1175;;;;N;;;;;
-1189;HANGUL JUNGSEONG U-A;Lo;0;L;<compat> 116E 1161;;;;N;;;;;
-118A;HANGUL JUNGSEONG U-AE;Lo;0;L;<compat> 116E 1162;;;;N;;;;;
-118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;<compat> 116E 1165 1173;;;;N;;;;;
-118C;HANGUL JUNGSEONG U-YE;Lo;0;L;<compat> 116E 1168;;;;N;;;;;
-118D;HANGUL JUNGSEONG U-U;Lo;0;L;<compat> 116E 116E;;;;N;;;;;
-118E;HANGUL JUNGSEONG YU-A;Lo;0;L;<compat> 1172 1161;;;;N;;;;;
-118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;<compat> 1172 1165;;;;N;;;;;
-1190;HANGUL JUNGSEONG YU-E;Lo;0;L;<compat> 1172 1166;;;;N;;;;;
-1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;<compat> 1172 1167;;;;N;;;;;
-1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;<compat> 1172 1168;;;;N;;;;;
-1193;HANGUL JUNGSEONG YU-U;Lo;0;L;<compat> 1172 116E;;;;N;;;;;
-1194;HANGUL JUNGSEONG YU-I;Lo;0;L;<compat> 1172 1175;;;;N;;;;;
-1195;HANGUL JUNGSEONG EU-U;Lo;0;L;<compat> 1173 116E;;;;N;;;;;
-1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;<compat> 1173 1173;;;;N;;;;;
-1197;HANGUL JUNGSEONG YI-U;Lo;0;L;<compat> 1174 116E;;;;N;;;;;
-1198;HANGUL JUNGSEONG I-A;Lo;0;L;<compat> 1175 1161;;;;N;;;;;
-1199;HANGUL JUNGSEONG I-YA;Lo;0;L;<compat> 1175 1163;;;;N;;;;;
-119A;HANGUL JUNGSEONG I-O;Lo;0;L;<compat> 1175 1169;;;;N;;;;;
-119B;HANGUL JUNGSEONG I-U;Lo;0;L;<compat> 1175 116E;;;;N;;;;;
-119C;HANGUL JUNGSEONG I-EU;Lo;0;L;<compat> 1175 1173;;;;N;;;;;
-119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;<compat> 1175 119E;;;;N;;;;;
-119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
-119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;<compat> 119E 1165;;;;N;;;;;
-11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;<compat> 119E 116E;;;;N;;;;;
-11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;<compat> 119E 1175;;;;N;;;;;
-11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;<compat> 119E 119E;;;;N;;;;;
-11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
-11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;<compat> 11A8 11A8;;;;N;;;;;
-11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;<compat> 11A8 11BA;;;;N;;;;;
-11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;
-11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;<compat> 11AB 11BD;;;;N;;;;;
-11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;<compat> 11AB 11C2;;;;N;;;;;
-11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;
-11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;
-11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;<compat> 11AF 11A8;;;;N;;;;;
-11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;<compat> 11AF 11B7;;;;N;;;;;
-11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;<compat> 11AF 11B8;;;;N;;;;;
-11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;<compat> 11AF 11BA;;;;N;;;;;
-11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;<compat> 11AF 11C0;;;;N;;;;;
-11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;<compat> 11AF 11C1;;;;N;;;;;
-11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;<compat> 11AF 11C2;;;;N;;;;;
-11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;
-11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;
-11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;<compat> 11B8 11BA;;;;N;;;;;
-11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;
-11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;<compat> 11BA 11BA;;;;N;;;;;
-11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;
-11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;
-11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;
-11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;
-11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;
-11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;
-11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;
-11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;<compat> 11A8 11AF;;;;N;;;;;
-11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;<compat> 11A8 11BA 11A8;;;;N;;;;;
-11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;<compat> 11AB 11A8;;;;N;;;;;
-11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;<compat> 11AB 11AE;;;;N;;;;;
-11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;<compat> 11AB 11BA;;;;N;;;;;
-11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;<compat> 11AB 11EB;;;;N;;;;;
-11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;<compat> 11AB 11C0;;;;N;;;;;
-11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;<compat> 11AE 11A8;;;;N;;;;;
-11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;<compat> 11AE 11AF;;;;N;;;;;
-11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11AF 11A8 11BA;;;;N;;;;;
-11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;<compat> 11AF 11AB;;;;N;;;;;
-11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;<compat> 11AF 11AE;;;;N;;;;;
-11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;<compat> 11AF 11AE 11C2;;;;N;;;;;
-11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;<compat> 11AF 11AF;;;;N;;;;;
-11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;<compat> 11AF 11B7 11A8;;;;N;;;;;
-11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;<compat> 11AF 11B7 11BA;;;;N;;;;;
-11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11AF 11B8 11BA;;;;N;;;;;
-11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;<compat> 11AF 11B8 11C2;;;;N;;;;;
-11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;<compat> 11AF 11B8 11BC;;;;N;;;;;
-11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;<compat> 11AF 11BA 11BA;;;;N;;;;;
-11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;<compat> 11AF 11EB;;;;N;;;;;
-11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;<compat> 11AF 11BF;;;;N;;;;;
-11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11AF 11F9;;;;N;;;;;
-11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;<compat> 11B7 11A8;;;;N;;;;;
-11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;<compat> 11B7 11AF;;;;N;;;;;
-11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;<compat> 11B7 11B8;;;;N;;;;;
-11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;<compat> 11B7 11BA;;;;N;;;;;
-11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;<compat> 11B7 11BA 11BA;;;;N;;;;;
-11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;<compat> 11B7 11EB;;;;N;;;;;
-11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;<compat> 11B7 11BE;;;;N;;;;;
-11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;<compat> 11B7 11C2;;;;N;;;;;
-11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;<compat> 11B7 11BC;;;;N;;;;;
-11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;<compat> 11B8 11AF;;;;N;;;;;
-11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;<compat> 11B8 11C1;;;;N;;;;;
-11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;<compat> 11B8 11C2;;;;N;;;;;
-11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;<compat> 11B8 11BC;;;;N;;;;;
-11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;<compat> 11BA 11A8;;;;N;;;;;
-11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;<compat> 11BA 11AE;;;;N;;;;;
-11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;<compat> 11BA 11AF;;;;N;;;;;
-11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;<compat> 11BA 11B8;;;;N;;;;;
-11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;<compat> 11BC 11A8;;;;N;;;;;
-11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;<compat> 11BC 11A8 11A8;;;;N;;;;;
-11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;<compat> 11BC 11BC;;;;N;;;;;
-11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;<compat> 11BC 11BF;;;;N;;;;;
-11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;<compat> 11F0 11BA;;;;N;;;;;
-11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F0 11EB;;;;N;;;;;
-11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;<compat> 11C1 11B8;;;;N;;;;;
-11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;<compat> 11C1 11BC;;;;N;;;;;
-11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;<compat> 11C2 11AB;;;;N;;;;;
-11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;<compat> 11C2 11AF;;;;N;;;;;
-11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;<compat> 11C2 11B7;;;;N;;;;;
-11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;<compat> 11C2 11B8;;;;N;;;;;
-11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
-1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
-1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
-1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
-1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
-1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
-1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
-1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
-1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
-1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
-1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
-1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
-1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
-1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
-1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
-1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
-1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
-1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
-1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
-1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
-1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
-1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
-1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
-1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
-1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
-1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
-1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
-1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
-1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0114 0327;;;;N;;;;1E1D;
-1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0115 0327;;;;N;;;1E1C;;1E1C
-1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
-1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
-1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
-1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
-1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
-1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
-1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
-1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
-1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
-1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
-1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
-1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
-1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
-1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
-1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
-1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
-1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
-1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
-1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
-1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
-1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
-1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
-1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
-1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
-1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
-1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
-1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
-1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
-1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
-1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
-1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
-1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
-1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
-1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
-1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
-1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
-1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
-1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
-1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
-1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
-1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
-1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
-1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
-1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
-1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
-1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
-1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
-1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
-1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
-1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
-1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
-1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
-1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
-1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
-1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
-1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
-1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
-1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
-1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
-1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
-1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
-1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
-1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
-1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
-1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
-1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
-1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
-1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
-1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
-1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
-1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
-1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
-1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
-1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
-1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
-1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
-1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
-1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
-1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
-1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
-1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
-1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
-1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
-1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
-1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
-1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
-1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
-1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
-1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
-1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
-1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
-1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
-1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
-1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
-1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
-1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
-1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
-1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
-1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
-1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
-1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
-1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
-1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
-1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
-1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
-1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
-1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
-1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
-1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
-1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
-1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
-1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
-1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
-1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
-1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
-1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
-1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
-1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
-1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
-1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
-1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
-1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
-1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
-1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
-1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;;;;;N;;;;;
-1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
-1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
-1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
-1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
-1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
-1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
-1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
-1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
-1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
-1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
-1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
-1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
-1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
-1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00C2 0323;;;;N;;;;1EAD;
-1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00E2 0323;;;;N;;;1EAC;;1EAC
-1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
-1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
-1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
-1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
-1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
-1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
-1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
-1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
-1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;0102 0323;;;;N;;;;1EB7;
-1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;0103 0323;;;;N;;;1EB6;;1EB6
-1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
-1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
-1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
-1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
-1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
-1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
-1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
-1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
-1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
-1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
-1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
-1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
-1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
-1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
-1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00CA 0323;;;;N;;;;1EC7;
-1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00EA 0323;;;;N;;;1EC6;;1EC6
-1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
-1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
-1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
-1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
-1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
-1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
-1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
-1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
-1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
-1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
-1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
-1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
-1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
-1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
-1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
-1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
-1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;00D4 0323;;;;N;;;;1ED9;
-1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;00F4 0323;;;;N;;;1ED8;;1ED8
-1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
-1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
-1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
-1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
-1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
-1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
-1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
-1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
-1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
-1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
-1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
-1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
-1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
-1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
-1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
-1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
-1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
-1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
-1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
-1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
-1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
-1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
-1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
-1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
-1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
-1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
-1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
-1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
-1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
-1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
-1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
-1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
-1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
-1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
-1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
-1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
-1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
-1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
-1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
-1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
-1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
-1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
-1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
-1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
-1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
-1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
-1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
-1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
-1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
-1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
-1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
-1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
-1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
-1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
-1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
-1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
-1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
-1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
-1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
-1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
-1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
-1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
-1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
-1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
-1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
-1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
-1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
-1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
-1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
-1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
-1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
-1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
-1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
-1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
-1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
-1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
-1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
-1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
-1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
-1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
-1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
-1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
-1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
-1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
-1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
-1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
-1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
-1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
-1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
-1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
-1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
-1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
-1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
-1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
-1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
-1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
-1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
-1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
-1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
-1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
-1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
-1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
-1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
-1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
-1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
-1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
-1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
-1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
-1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
-1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
-1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
-1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
-1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
-1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
-1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
-1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
-1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
-1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
-1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
-1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
-1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
-1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
-1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
-1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
-1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
-1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
-1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
-1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
-1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
-1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
-1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
-1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
-1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
-1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03B1 0301;;;;N;;;1FBB;;1FBB
-1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
-1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03B5 0301;;;;N;;;1FC9;;1FC9
-1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
-1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03B7 0301;;;;N;;;1FCB;;1FCB
-1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
-1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03B9 0301;;;;N;;;1FDB;;1FDB
-1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
-1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03BF 0301;;;;N;;;1FF9;;1FF9
-1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
-1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03C5 0301;;;;N;;;1FEB;;1FEB
-1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
-1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03C9 0301;;;;N;;;1FFB;;1FFB
-1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
-1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
-1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
-1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
-1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
-1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
-1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
-1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
-1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F08 0345;;;;N;;;;1F80;
-1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F09 0345;;;;N;;;;1F81;
-1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0A 0345;;;;N;;;;1F82;
-1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F0B 0345;;;;N;;;;1F83;
-1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0C 0345;;;;N;;;;1F84;
-1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F0D 0345;;;;N;;;;1F85;
-1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0E 0345;;;;N;;;;1F86;
-1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F0F 0345;;;;N;;;;1F87;
-1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
-1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
-1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
-1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
-1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
-1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
-1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
-1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
-1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F28 0345;;;;N;;;;1F90;
-1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F29 0345;;;;N;;;;1F91;
-1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2A 0345;;;;N;;;;1F92;
-1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F2B 0345;;;;N;;;;1F93;
-1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2C 0345;;;;N;;;;1F94;
-1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F2D 0345;;;;N;;;;1F95;
-1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2E 0345;;;;N;;;;1F96;
-1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F2F 0345;;;;N;;;;1F97;
-1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
-1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
-1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
-1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
-1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
-1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
-1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
-1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
-1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lu;0;L;1F68 0345;;;;N;;;;1FA0;
-1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lu;0;L;1F69 0345;;;;N;;;;1FA1;
-1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6A 0345;;;;N;;;;1FA2;
-1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lu;0;L;1F6B 0345;;;;N;;;;1FA3;
-1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6C 0345;;;;N;;;;1FA4;
-1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lu;0;L;1F6D 0345;;;;N;;;;1FA5;
-1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6E 0345;;;;N;;;;1FA6;
-1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lu;0;L;1F6F 0345;;;;N;;;;1FA7;
-1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
-1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
-1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
-1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
-1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F71 0345;;;;N;;;;;
-1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
-1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
-1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
-1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
-1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
-1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0391 0301;;;;N;;;;1F71;
-1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lu;0;L;0391 0345;;;;N;;;;1FB3;
-1FBD;GREEK KORONIS;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
-1FBE;GREEK PROSGEGRAMMENI;Lu;0;L;03B9;;;;N;;;;;
-1FBF;GREEK PSILI;Sk;0;L;<compat> 0020 0313;;;;N;;;;;
-1FC0;GREEK PERISPOMENI;Sk;0;L;<compat> 0020 0342;;;;N;;;;;
-1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;L;00A8 0342;;;;N;;;;;
-1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
-1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
-1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F75 0345;;;;N;;;;;
-1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
-1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
-1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
-1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0395 0301;;;;N;;;;1F73;
-1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
-1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0397 0301;;;;N;;;;1F75;
-1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lu;0;L;0397 0345;;;;N;;;;1FC3;
-1FCD;GREEK PSILI AND VARIA;Sk;0;L;1FBF 0300;;;;N;;;;;
-1FCE;GREEK PSILI AND OXIA;Sk;0;L;1FBF 0301;;;;N;;;;;
-1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;L;1FBF 0342;;;;N;;;;;
-1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
-1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
-1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
-1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;03CA 0301;;;;N;;;;;
-1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
-1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
-1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
-1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
-1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
-1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;0399 0301;;;;N;;;;1F77;
-1FDD;GREEK DASIA AND VARIA;Sk;0;L;1FFE 0300;;;;N;;;;;
-1FDE;GREEK DASIA AND OXIA;Sk;0;L;1FFE 0301;;;;N;;;;;
-1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;L;1FFE 0342;;;;N;;;;;
-1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
-1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
-1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
-1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03CB 0301;;;;N;;;;;
-1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
-1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
-1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
-1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
-1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
-1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
-1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
-1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;03A5 0301;;;;N;;;;1F7B;
-1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
-1FED;GREEK DIALYTIKA AND VARIA;Sk;0;L;00A8 0300;;;;N;;;;;
-1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;L;00A8 0301;;;;N;;;;;
-1FEF;GREEK VARIA;Sk;0;L;0060;;;;N;;;;;
-1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
-1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
-1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;1F79 0345;;;;N;;;;;
-1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
-1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
-1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
-1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;039F 0301;;;;N;;;;1F79;
-1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
-1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;03A9 0301;;;;N;;;;1F7D;
-1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lu;0;L;03A9 0345;;;;N;;;;1FF3;
-1FFD;GREEK OXIA;Sk;0;L;00B4;;;;N;;;;;
-1FFE;GREEK DASIA;Sk;0;L;<compat> 0020 0314;;;;N;;;;;
-2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
-2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
-2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2007;FIGURE SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
-2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200B;ZERO WIDTH SPACE;Zs;0;WS;;;;;N;;;;;
-200C;ZERO WIDTH NON-JOINER;Cf;0;ON;;;;;N;;;;;
-200D;ZERO WIDTH JOINER;Cf;0;ON;;;;;N;;;;;
-200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
-200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
-2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
-2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
-2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
-2013;EN DASH;Pd;0;ON;;;;;N;;;;;
-2014;EM DASH;Pd;0;ON;;;;;N;;;;;
-2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
-2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
-2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
-2018;LEFT SINGLE QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
-2019;RIGHT SINGLE QUOTATION MARK;Pe;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
-201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
-201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
-201C;LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
-201D;RIGHT DOUBLE QUOTATION MARK;Pe;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
-201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
-201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
-2020;DAGGER;Po;0;ON;;;;;N;;;;;
-2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
-2022;BULLET;Po;0;ON;;;;;N;;;;;
-2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
-2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
-2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
-2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
-2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
-2028;LINE SEPARATOR;Zl;0;B;;;;;N;;;;;
-2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
-202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;ON;;;;;N;;;;;
-202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;ON;;;;;N;;;;;
-202C;POP DIRECTIONAL FORMATTING;Cf;0;ON;;;;;N;;;;;
-202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;ON;;;;;N;;;;;
-202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;ON;;;;;N;;;;;
-2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
-2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
-2032;PRIME;Po;0;ET;;;;;N;;;;;
-2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
-2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
-2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
-2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
-2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
-2038;CARET;Po;0;ON;;;;;N;;;;;
-2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Ps;0;ON;;;;;N;LEFT POINTING SINGLE GUILLEMET;;;;
-203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pe;0;ON;;;;;N;RIGHT POINTING SINGLE GUILLEMET;;;;
-203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
-203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
-203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
-203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
-203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
-2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
-2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
-2042;ASTERISM;Po;0;ON;;;;;N;;;;;
-2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
-2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
-2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
-2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
-206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
-206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;ON;;;;;N;;;;;
-206C;INHIBIT ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
-206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;ON;;;;;N;;;;;
-206E;NATIONAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
-206F;NOMINAL DIGIT SHAPES;Cf;0;ON;;;;;N;;;;;
-2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
-2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
-2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
-2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
-2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
-2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
-2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
-207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
-207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
-207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
-207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
-207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
-207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;ON;<super> 006E;;;;N;;;;;
-2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
-2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
-2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
-2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
-2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
-2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
-2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
-2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
-2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
-2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
-208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
-208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
-208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
-208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
-208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
-20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
-20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
-20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
-20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
-20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
-20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
-20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
-20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
-20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
-20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
-20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
-20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
-20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
-20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;L;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
-20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
-20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
-20D6;COMBINING LEFT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
-20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;L;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
-20D8;COMBINING RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING RING OVERLAY;;;;
-20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
-20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;L;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
-20DB;COMBINING THREE DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
-20DC;COMBINING FOUR DOTS ABOVE;Mn;230;L;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
-20DD;COMBINING ENCLOSING CIRCLE;Me;0;L;;;;;N;ENCLOSING CIRCLE;;;;
-20DE;COMBINING ENCLOSING SQUARE;Me;0;L;;;;;N;ENCLOSING SQUARE;;;;
-20DF;COMBINING ENCLOSING DIAMOND;Me;0;L;;;;;N;ENCLOSING DIAMOND;;;;
-20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;L;;;;;N;ENCLOSING CIRCLE SLASH;;;;
-20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;1;L;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
-2100;ACCOUNT OF;So;0;ON;;;;;N;;;;;
-2101;ADDRESSED TO THE SUBJECT;So;0;ON;;;;;N;;;;;
-2102;DOUBLE-STRUCK CAPITAL C;Lu;0;ON;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
-2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
-2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
-2105;CARE OF;So;0;ON;;;;;N;;;;;
-2106;CADA UNA;So;0;ON;;;;;N;;;;;
-2107;EULER CONSTANT;Lu;0;ON;<compat> 0190;;;;N;EULERS;;;;
-2108;SCRUPLE;So;0;ON;;;;;N;;;;;
-2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
-210A;SCRIPT SMALL G;Ll;0;ON;<font> 0067;;;;N;;;;;
-210B;SCRIPT CAPITAL H;Lu;0;ON;<font> 0048;;;;N;SCRIPT H;;;;
-210C;BLACK-LETTER CAPITAL H;Lu;0;ON;<font> 0048;;;;N;BLACK-LETTER H;;;;
-210D;DOUBLE-STRUCK CAPITAL H;Lu;0;ON;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
-210E;PLANCK CONSTANT;Ll;0;ON;<font> 0068;;;;N;;;;;
-210F;PLANCK CONSTANT OVER TWO PI;Ll;0;ON;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
-2110;SCRIPT CAPITAL I;Lu;0;ON;<font> 0049;;;;N;SCRIPT I;;;;
-2111;BLACK-LETTER CAPITAL I;Lu;0;ON;<font> 0049;;;;N;BLACK-LETTER I;;;;
-2112;SCRIPT CAPITAL L;Lu;0;ON;<font> 004C;;;;N;SCRIPT L;;;;
-2113;SCRIPT SMALL L;Ll;0;ON;<font> 006C;;;;N;;;;;
-2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
-2115;DOUBLE-STRUCK CAPITAL N;Lu;0;ON;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
-2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
-2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
-2118;SCRIPT CAPITAL P;Lu;0;ON;<font> 0050;;;;N;SCRIPT P;;;;
-2119;DOUBLE-STRUCK CAPITAL P;Lu;0;ON;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
-211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;ON;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
-211B;SCRIPT CAPITAL R;Lu;0;ON;<font> 0052;;;;N;SCRIPT R;;;;
-211C;BLACK-LETTER CAPITAL R;Lu;0;ON;<font> 0052;;;;N;BLACK-LETTER R;;;;
-211D;DOUBLE-STRUCK CAPITAL R;Lu;0;ON;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
-211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
-211F;RESPONSE;So;0;ON;;;;;N;;;;;
-2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
-2121;TELEPHONE SIGN;So;0;ON;<super> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
-2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
-2123;VERSICLE;So;0;ON;;;;;N;;;;;
-2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
-2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
-2126;OHM SIGN;Lu;0;ON;03A9;;;;N;OHM;;;;
-2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
-2128;BLACK-LETTER CAPITAL Z;Lu;0;ON;<font> 005A;;;;N;BLACK-LETTER Z;;;;
-2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
-212A;KELVIN SIGN;Lu;0;ON;004B;;;;N;DEGREES KELVIN;;;;
-212B;ANGSTROM SIGN;Lu;0;ON;00C5;;;;N;ANGSTROM UNIT;;;;
-212C;SCRIPT CAPITAL B;Lu;0;ON;<font> 0042;;;;N;SCRIPT B;;;;
-212D;BLACK-LETTER CAPITAL C;Lu;0;ON;<font> 0043;;;;N;BLACK-LETTER C;;;;
-212E;ESTIMATED SYMBOL;Ll;0;ON;;;;;N;;;;;
-212F;SCRIPT SMALL E;Ll;0;ON;<font> 0065;;;;N;;;;;
-2130;SCRIPT CAPITAL E;Lu;0;ON;<font> 0045;;;;N;SCRIPT E;;;;
-2131;SCRIPT CAPITAL F;Lu;0;ON;<font> 0046;;;;N;SCRIPT F;;;;
-2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
-2133;SCRIPT CAPITAL M;Lu;0;ON;<font> 004D;;;;N;SCRIPT M;;;;
-2134;SCRIPT SMALL O;Ll;0;ON;<font> 006F;;;;N;;;;;
-2135;ALEF SYMBOL;Lo;0;ON;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
-2136;BET SYMBOL;Lo;0;ON;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
-2137;GIMEL SYMBOL;Lo;0;ON;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
-2138;DALET SYMBOL;Lo;0;ON;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
-2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
-2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
-2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
-2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
-2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
-2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
-2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
-215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
-215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
-215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
-215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
-215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
-215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
-2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
-2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
-2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
-2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
-2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
-2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
-2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
-2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
-2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
-2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
-216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
-216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
-216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
-216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
-216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
-216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
-2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
-2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
-2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
-2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
-2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
-2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
-2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
-2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
-2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
-2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
-217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
-217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
-217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
-217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
-217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
-217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
-2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
-2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
-2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
-2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
-2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
-2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
-2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
-2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
-2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
-2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
-2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
-2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
-2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
-219A;LEFTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;LEFT ARROW WITH STROKE;;;;
-219B;RIGHTWARDS ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT ARROW WITH STROKE;;;;
-219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
-219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
-219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
-219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
-21A0;RIGHTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
-21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
-21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
-21A3;RIGHTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
-21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
-21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
-21A6;RIGHTWARDS ARROW FROM BAR;So;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
-21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
-21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
-21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
-21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
-21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
-21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
-21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
-21AE;LEFT RIGHT ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
-21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
-21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
-21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
-21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
-21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
-21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
-21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
-21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
-21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
-21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
-21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
-21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
-21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
-21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
-21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
-21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
-21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
-21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
-21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
-21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
-21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
-21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
-21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
-21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
-21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
-21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
-21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
-21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;;;;;
-21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
-21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
-21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
-21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
-21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
-21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
-21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
-21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
-21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
-21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
-21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
-21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
-21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
-21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
-21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
-21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
-21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
-21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
-21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
-21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
-21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
-21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
-21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
-21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
-21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
-21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
-2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
-2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
-2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
-2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
-2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
-2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
-2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
-2207;NABLA;Sm;0;ON;;;;;N;;;;;
-2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
-220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
-220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
-220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
-2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
-2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
-2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
-2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
-2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
-2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
-221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
-221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
-221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
-221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
-221E;INFINITY;Sm;0;ON;;;;;N;;;;;
-221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
-2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
-2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
-2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
-2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
-2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
-2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
-2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
-222A;UNION;Sm;0;ON;;;;;N;;;;;
-222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
-222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
-222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
-2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
-2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
-2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
-2236;RATIO;Sm;0;ON;;;;;N;;;;;
-2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
-2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
-2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
-223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
-223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
-223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;
-223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
-223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
-2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2241;NOT TILDE;Sm;0;ON;007E 0338;;;;Y;;;;;
-2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
-2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
-2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
-2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
-224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
-224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
-2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
-2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
-2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
-2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
-2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
-225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
-225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
-225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
-225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
-225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
-225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
-2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
-2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
-2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
-2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
-2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
-2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
-2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
-2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
-226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
-226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
-226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
-226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
-226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
-226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
-2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
-2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
-2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
-2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
-2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
-2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
-2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
-2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
-2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
-2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
-227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
-227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
-2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
-2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
-2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
-2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
-2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
-2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
-2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
-228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
-228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
-228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
-228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
-228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
-228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
-2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
-2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
-2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
-2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
-2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
-229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
-229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
-229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
-22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
-22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
-22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
-22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
-22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
-22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
-22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
-22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
-22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
-22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
-22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
-22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
-22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
-22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
-22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
-22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
-22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
-22BB;XOR;Sm;0;ON;;;;;N;;;;;
-22BC;NAND;Sm;0;ON;;;;;N;;;;;
-22BD;NOR;Sm;0;ON;;;;;N;;;;;
-22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
-22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
-22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
-22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
-22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
-22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
-22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
-22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
-22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
-22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
-22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
-22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
-22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
-22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
-22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
-22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
-22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
-22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
-22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
-22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
-22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
-22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
-22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
-22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
-22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
-22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
-22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
-22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
-2302;HOUSE;So;0;ON;;;;;N;;;;;
-2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
-2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
-2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
-2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
-2307;WAVY LINE;So;0;ON;;;;;N;;;;;
-2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
-2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
-230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
-230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
-230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
-230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
-2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
-2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
-2312;ARC;So;0;ON;;;;;N;;;;;
-2313;SEGMENT;So;0;ON;;;;;N;;;;;
-2314;SECTOR;So;0;ON;;;;;N;;;;;
-2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
-2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
-2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
-2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
-2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
-231A;WATCH;So;0;ON;;;;;N;;;;;
-231B;HOURGLASS;So;0;ON;;;;;N;;;;;
-231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
-231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
-231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
-231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
-2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2322;FROWN;So;0;ON;;;;;N;;;;;
-2323;SMILE;So;0;ON;;;;;N;;;;;
-2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
-2325;OPTION KEY;So;0;ON;;;;;N;;;;;
-2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
-2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
-2328;KEYBOARD;So;0;ON;;;;;N;;;;;
-2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
-232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
-232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
-232C;BENZENE RING;So;0;ON;;;;;N;;;;;
-232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
-232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
-232F;SYMMETRY;So;0;ON;;;;;N;;;;;
-2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
-2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
-2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
-2333;SLOPE;So;0;ON;;;;;N;;;;;
-2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
-2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
-2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
-2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
-2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
-2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
-233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
-233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
-233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
-233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
-233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
-233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
-2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
-2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
-2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
-2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
-2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
-2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
-2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
-2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
-2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
-2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
-234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;
-234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
-234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
-234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
-234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;
-234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
-2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
-2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;
-2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
-2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
-2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
-2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;
-2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
-2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
-2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
-2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
-235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
-235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
-235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
-235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
-235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
-235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
-2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
-2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;
-2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
-2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
-2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
-2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
-2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
-2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
-2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
-2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
-236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
-236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
-236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
-236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
-236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
-236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
-2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
-2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
-2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
-2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
-2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
-2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
-2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
-2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
-2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
-2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
-237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
-2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
-2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
-2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
-2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
-2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
-2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
-2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
-2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
-2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
-2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
-240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
-240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
-240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
-240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
-240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
-240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
-2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
-2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
-2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
-2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
-2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
-2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
-2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
-2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
-2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
-2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
-241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
-241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
-241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
-241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
-241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
-241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
-2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
-2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
-2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
-2423;OPEN BOX;So;0;ON;;;;;N;;;;;
-2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
-2440;OCR HOOK;So;0;ON;;;;;N;;;;;
-2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
-2442;OCR FORK;So;0;ON;;;;;N;;;;;
-2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
-2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
-2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
-2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
-2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
-2448;OCR DASH;So;0;ON;;;;;N;;;;;
-2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
-244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
-2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
-2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
-2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
-2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
-2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
-2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
-2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
-2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
-2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
-2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
-246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
-246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
-246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
-246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
-246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
-246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
-2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
-2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
-2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
-2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
-2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
-2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
-2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
-2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
-2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
-2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
-247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
-247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
-247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
-247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
-247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
-247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
-2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
-2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
-2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
-2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
-2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
-2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
-2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
-2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
-2488;DIGIT ONE FULL STOP;No;0;ON;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
-2489;DIGIT TWO FULL STOP;No;0;ON;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
-248A;DIGIT THREE FULL STOP;No;0;ON;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
-248B;DIGIT FOUR FULL STOP;No;0;ON;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
-248C;DIGIT FIVE FULL STOP;No;0;ON;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
-248D;DIGIT SIX FULL STOP;No;0;ON;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
-248E;DIGIT SEVEN FULL STOP;No;0;ON;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
-248F;DIGIT EIGHT FULL STOP;No;0;ON;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
-2490;DIGIT NINE FULL STOP;No;0;ON;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
-2491;NUMBER TEN FULL STOP;No;0;ON;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
-2492;NUMBER ELEVEN FULL STOP;No;0;ON;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
-2493;NUMBER TWELVE FULL STOP;No;0;ON;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
-2494;NUMBER THIRTEEN FULL STOP;No;0;ON;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
-2495;NUMBER FOURTEEN FULL STOP;No;0;ON;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
-2496;NUMBER FIFTEEN FULL STOP;No;0;ON;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
-2497;NUMBER SIXTEEN FULL STOP;No;0;ON;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
-2498;NUMBER SEVENTEEN FULL STOP;No;0;ON;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
-2499;NUMBER EIGHTEEN FULL STOP;No;0;ON;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
-249A;NUMBER NINETEEN FULL STOP;No;0;ON;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
-249B;NUMBER TWENTY FULL STOP;No;0;ON;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
-249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;ON;<compat> 0028 0061 0029;;;;N;;;;;
-249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;ON;<compat> 0028 0062 0029;;;;N;;;;;
-249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;ON;<compat> 0028 0063 0029;;;;N;;;;;
-249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;ON;<compat> 0028 0064 0029;;;;N;;;;;
-24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;ON;<compat> 0028 0065 0029;;;;N;;;;;
-24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;ON;<compat> 0028 0066 0029;;;;N;;;;;
-24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;ON;<compat> 0028 0067 0029;;;;N;;;;;
-24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;ON;<compat> 0028 0068 0029;;;;N;;;;;
-24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;ON;<compat> 0028 0069 0029;;;;N;;;;;
-24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;ON;<compat> 0028 006A 0029;;;;N;;;;;
-24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;ON;<compat> 0028 006B 0029;;;;N;;;;;
-24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;ON;<compat> 0028 006C 0029;;;;N;;;;;
-24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;ON;<compat> 0028 006D 0029;;;;N;;;;;
-24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;ON;<compat> 0028 006E 0029;;;;N;;;;;
-24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;ON;<compat> 0028 006F 0029;;;;N;;;;;
-24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;ON;<compat> 0028 0070 0029;;;;N;;;;;
-24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;ON;<compat> 0028 0071 0029;;;;N;;;;;
-24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;ON;<compat> 0028 0072 0029;;;;N;;;;;
-24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;ON;<compat> 0028 0073 0029;;;;N;;;;;
-24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;ON;<compat> 0028 0074 0029;;;;N;;;;;
-24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;ON;<compat> 0028 0075 0029;;;;N;;;;;
-24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;ON;<compat> 0028 0076 0029;;;;N;;;;;
-24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;ON;<compat> 0028 0077 0029;;;;N;;;;;
-24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;ON;<compat> 0028 0078 0029;;;;N;;;;;
-24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;ON;<compat> 0028 0079 0029;;;;N;;;;;
-24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;ON;<compat> 0028 007A 0029;;;;N;;;;;
-24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;ON;<circle> 0041;;;;N;;;;24D0;
-24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;ON;<circle> 0042;;;;N;;;;24D1;
-24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;ON;<circle> 0043;;;;N;;;;24D2;
-24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;ON;<circle> 0044;;;;N;;;;24D3;
-24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;ON;<circle> 0045;;;;N;;;;24D4;
-24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;ON;<circle> 0046;;;;N;;;;24D5;
-24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;ON;<circle> 0047;;;;N;;;;24D6;
-24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;ON;<circle> 0048;;;;N;;;;24D7;
-24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;ON;<circle> 0049;;;;N;;;;24D8;
-24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;ON;<circle> 004A;;;;N;;;;24D9;
-24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;ON;<circle> 004B;;;;N;;;;24DA;
-24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;ON;<circle> 004C;;;;N;;;;24DB;
-24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;ON;<circle> 004D;;;;N;;;;24DC;
-24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;ON;<circle> 004E;;;;N;;;;24DD;
-24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;ON;<circle> 004F;;;;N;;;;24DE;
-24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;ON;<circle> 0050;;;;N;;;;24DF;
-24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;ON;<circle> 0051;;;;N;;;;24E0;
-24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;ON;<circle> 0052;;;;N;;;;24E1;
-24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;ON;<circle> 0053;;;;N;;;;24E2;
-24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;ON;<circle> 0054;;;;N;;;;24E3;
-24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;ON;<circle> 0055;;;;N;;;;24E4;
-24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;ON;<circle> 0056;;;;N;;;;24E5;
-24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;ON;<circle> 0057;;;;N;;;;24E6;
-24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;ON;<circle> 0058;;;;N;;;;24E7;
-24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;ON;<circle> 0059;;;;N;;;;24E8;
-24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;ON;<circle> 005A;;;;N;;;;24E9;
-24D0;CIRCLED LATIN SMALL LETTER A;So;0;ON;<circle> 0061;;;;N;;;24B6;;24B6
-24D1;CIRCLED LATIN SMALL LETTER B;So;0;ON;<circle> 0062;;;;N;;;24B7;;24B7
-24D2;CIRCLED LATIN SMALL LETTER C;So;0;ON;<circle> 0063;;;;N;;;24B8;;24B8
-24D3;CIRCLED LATIN SMALL LETTER D;So;0;ON;<circle> 0064;;;;N;;;24B9;;24B9
-24D4;CIRCLED LATIN SMALL LETTER E;So;0;ON;<circle> 0065;;;;N;;;24BA;;24BA
-24D5;CIRCLED LATIN SMALL LETTER F;So;0;ON;<circle> 0066;;;;N;;;24BB;;24BB
-24D6;CIRCLED LATIN SMALL LETTER G;So;0;ON;<circle> 0067;;;;N;;;24BC;;24BC
-24D7;CIRCLED LATIN SMALL LETTER H;So;0;ON;<circle> 0068;;;;N;;;24BD;;24BD
-24D8;CIRCLED LATIN SMALL LETTER I;So;0;ON;<circle> 0069;;;;N;;;24BE;;24BE
-24D9;CIRCLED LATIN SMALL LETTER J;So;0;ON;<circle> 006A;;;;N;;;24BF;;24BF
-24DA;CIRCLED LATIN SMALL LETTER K;So;0;ON;<circle> 006B;;;;N;;;24C0;;24C0
-24DB;CIRCLED LATIN SMALL LETTER L;So;0;ON;<circle> 006C;;;;N;;;24C1;;24C1
-24DC;CIRCLED LATIN SMALL LETTER M;So;0;ON;<circle> 006D;;;;N;;;24C2;;24C2
-24DD;CIRCLED LATIN SMALL LETTER N;So;0;ON;<circle> 006E;;;;N;;;24C3;;24C3
-24DE;CIRCLED LATIN SMALL LETTER O;So;0;ON;<circle> 006F;;;;N;;;24C4;;24C4
-24DF;CIRCLED LATIN SMALL LETTER P;So;0;ON;<circle> 0070;;;;N;;;24C5;;24C5
-24E0;CIRCLED LATIN SMALL LETTER Q;So;0;ON;<circle> 0071;;;;N;;;24C6;;24C6
-24E1;CIRCLED LATIN SMALL LETTER R;So;0;ON;<circle> 0072;;;;N;;;24C7;;24C7
-24E2;CIRCLED LATIN SMALL LETTER S;So;0;ON;<circle> 0073;;;;N;;;24C8;;24C8
-24E3;CIRCLED LATIN SMALL LETTER T;So;0;ON;<circle> 0074;;;;N;;;24C9;;24C9
-24E4;CIRCLED LATIN SMALL LETTER U;So;0;ON;<circle> 0075;;;;N;;;24CA;;24CA
-24E5;CIRCLED LATIN SMALL LETTER V;So;0;ON;<circle> 0076;;;;N;;;24CB;;24CB
-24E6;CIRCLED LATIN SMALL LETTER W;So;0;ON;<circle> 0077;;;;N;;;24CC;;24CC
-24E7;CIRCLED LATIN SMALL LETTER X;So;0;ON;<circle> 0078;;;;N;;;24CD;;24CD
-24E8;CIRCLED LATIN SMALL LETTER Y;So;0;ON;<circle> 0079;;;;N;;;24CE;;24CE
-24E9;CIRCLED LATIN SMALL LETTER Z;So;0;ON;<circle> 007A;;;;N;;;24CF;;24CF
-24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
-2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
-2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
-2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
-2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
-2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
-2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
-2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
-2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
-2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
-2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
-250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
-250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
-250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
-250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
-250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
-250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
-2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
-2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
-2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
-2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
-2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
-2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
-2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
-2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
-2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
-2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
-251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
-251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
-251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
-251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
-251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
-251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
-2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
-2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
-2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
-2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
-2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
-2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
-2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
-2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
-2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
-252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
-252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
-252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
-252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
-252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
-252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
-2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
-2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
-2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
-2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
-2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
-2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
-2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
-2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
-2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
-2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
-253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
-253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
-253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
-253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
-253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
-253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
-2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
-2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
-2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
-2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
-2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
-2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
-2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
-2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
-2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
-254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
-254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
-254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
-254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
-254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
-254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
-2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
-2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
-2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
-2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
-2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
-2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
-2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
-2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
-2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
-2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
-255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
-255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
-255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
-255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
-255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
-255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
-2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
-2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
-2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
-2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
-2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
-2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
-2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
-2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
-2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
-2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
-256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
-256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
-256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
-256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
-256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
-256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
-2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
-2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
-2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
-2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
-2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
-2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
-2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
-2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
-2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
-2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
-257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
-257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
-257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
-257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
-257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
-257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
-2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
-2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
-2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
-258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
-258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
-2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
-2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
-2593;DARK SHADE;So;0;ON;;;;;N;;;;;
-2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
-25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
-25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
-25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
-25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
-25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
-25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
-25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
-25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
-25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
-25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
-25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
-25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
-25B7;WHITE RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
-25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
-25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
-25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
-25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
-25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
-25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
-25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
-25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
-25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
-25C1;WHITE LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
-25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
-25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
-25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
-25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
-25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
-25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
-25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
-25C9;FISHEYE;So;0;ON;;;;;N;;;;;
-25CA;LOZENGE;So;0;ON;;;;;N;;;;;
-25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
-25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
-25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
-25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
-25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
-25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
-25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
-25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
-25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
-2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-2601;CLOUD;So;0;ON;;;;;N;;;;;
-2602;UMBRELLA;So;0;ON;;;;;N;;;;;
-2603;SNOWMAN;So;0;ON;;;;;N;;;;;
-2604;COMET;So;0;ON;;;;;N;;;;;
-2605;BLACK STAR;So;0;ON;;;;;N;;;;;
-2606;WHITE STAR;So;0;ON;;;;;N;;;;;
-2607;LIGHTNING;So;0;ON;;;;;N;;;;;
-2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
-2609;SUN;So;0;ON;;;;;N;;;;;
-260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
-260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
-260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
-260D;OPPOSITION;So;0;ON;;;;;N;;;;;
-260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
-260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
-2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
-2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
-2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
-2613;SALTIRE;So;0;ON;;;;;N;;;;;
-261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
-261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
-2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
-2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
-2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
-2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
-2624;CADUCEUS;So;0;ON;;;;;N;;;;;
-2625;ANKH;So;0;ON;;;;;N;;;;;
-2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
-2627;CHI RHO;So;0;ON;;;;;N;;;;;
-2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
-2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
-262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
-262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
-262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
-262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
-262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
-262F;YIN YANG;So;0;ON;;;;;N;;;;;
-2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
-2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
-2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
-2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
-2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
-2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
-2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
-2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
-2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
-263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
-263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
-263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263F;MERCURY;So;0;ON;;;;;N;;;;;
-2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
-2641;EARTH;So;0;ON;;;;;N;;;;;
-2642;MALE SIGN;So;0;ON;;;;;N;;;;;
-2643;JUPITER;So;0;ON;;;;;N;;;;;
-2644;SATURN;So;0;ON;;;;;N;;;;;
-2645;URANUS;So;0;ON;;;;;N;;;;;
-2646;NEPTUNE;So;0;ON;;;;;N;;;;;
-2647;PLUTO;So;0;ON;;;;;N;;;;;
-2648;ARIES;So;0;ON;;;;;N;;;;;
-2649;TAURUS;So;0;ON;;;;;N;;;;;
-264A;GEMINI;So;0;ON;;;;;N;;;;;
-264B;CANCER;So;0;ON;;;;;N;;;;;
-264C;LEO;So;0;ON;;;;;N;;;;;
-264D;VIRGO;So;0;ON;;;;;N;;;;;
-264E;LIBRA;So;0;ON;;;;;N;;;;;
-264F;SCORPIUS;So;0;ON;;;;;N;;;;;
-2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
-2651;CAPRICORN;So;0;ON;;;;;N;;;;;
-2652;AQUARIUS;So;0;ON;;;;;N;;;;;
-2653;PISCES;So;0;ON;;;;;N;;;;;
-2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
-2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
-2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
-2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
-2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
-265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
-265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
-265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
-265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
-265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
-2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
-2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
-2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
-2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
-2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
-2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
-2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
-2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
-266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
-266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
-266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
-266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
-266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
-266F;MUSIC SHARP SIGN;So;0;ON;;;;;N;SHARP;;;;
-2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
-2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
-2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
-2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
-2708;AIRPLANE;So;0;ON;;;;;N;;;;;
-2709;ENVELOPE;So;0;ON;;;;;N;;;;;
-270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
-270D;WRITING HAND;So;0;ON;;;;;N;;;;;
-270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-270F;PENCIL;So;0;ON;;;;;N;;;;;
-2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-2711;WHITE NIB;So;0;ON;;;;;N;;;;;
-2712;BLACK NIB;So;0;ON;;;;;N;;;;;
-2713;CHECK MARK;So;0;ON;;;;;N;;;;;
-2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2717;BALLOT X;So;0;ON;;;;;N;;;;;
-2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
-2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
-271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
-271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
-271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
-271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
-271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
-271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
-2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
-2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
-2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
-272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
-272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
-272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
-272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
-2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
-2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
-2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
-273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
-273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
-2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
-2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2747;SPARKLE;So;0;ON;;;;;N;;;;;
-2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
-2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
-2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
-2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
-2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
-2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
-2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
-2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
-2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
-2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
-2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
-277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
-277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
-277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
-277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
-277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
-277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
-2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
-2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
-2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
-2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
-2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
-2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
-2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
-2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
-278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
-278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
-278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
-278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
-278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
-278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
-2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
-2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
-2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
-2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
-2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
-279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
-279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
-279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
-279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
-279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
-279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
-27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
-27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
-27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
-27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
-27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
-27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
-27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
-27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
-27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
-27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
-27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
-27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
-27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
-27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
-27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
-27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
-27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
-27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
-3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
-3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
-3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
-3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
-3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
-3005;IDEOGRAPHIC ITERATION MARK;Lm;0;ON;;;;;N;;;;;
-3006;IDEOGRAPHIC CLOSING MARK;Po;0;ON;;;;;N;;;;;
-3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;ON;;;;0;N;;;;;
-3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
-3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
-300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
-300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
-300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
-300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
-300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
-300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
-3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
-3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
-3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
-3013;GETA MARK;So;0;ON;;;;;N;;;;;
-3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
-3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
-3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
-3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
-3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
-3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
-301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
-301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
-301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
-301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
-301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
-3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
-3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
-3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
-3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
-3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
-3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
-3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
-3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
-3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
-302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;L;;;;;N;;;;;
-302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;L;;;;;N;;;;;
-302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;L;;;;;N;;;;;
-302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;L;;;;;N;;;;;
-302E;HANGUL SINGLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
-302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;L;;;;;N;;;;;
-3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
-3031;VERTICAL KANA REPEAT MARK;Lm;0;ON;;;;;N;;;;;
-3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;ON;;;;;N;;;;;
-3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
-3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;ON;;;;;N;;;;;
-3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;ON;;;;;N;;;;;
-3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
-3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
-303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
-3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
-3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
-3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
-3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
-3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
-304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
-304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
-304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
-304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
-304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
-3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
-3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
-3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
-3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
-3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
-3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
-3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
-3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
-3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
-3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
-305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
-305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
-305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
-305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
-305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
-305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
-3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
-3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
-3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
-3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
-3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
-3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
-3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
-3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
-3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
-306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
-306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
-306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
-306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
-306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
-306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
-3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
-3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
-3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
-3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
-3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
-3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
-3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
-3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
-3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
-3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
-307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
-307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
-307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
-307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
-307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
-307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
-3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
-3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
-3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
-3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
-3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
-3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
-3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
-308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
-308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
-308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
-308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
-308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
-3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
-3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
-3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
-3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
-3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
-3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
-309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;L;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
-309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Lm;0;L;<compat> 0020 3099;;;;N;;;;;
-309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Lm;0;L;<compat> 0020 309A;;;;N;;;;;
-309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
-30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
-30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
-30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
-30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
-30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
-30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
-30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
-30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
-30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
-30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
-30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
-30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
-30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
-30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
-30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
-30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
-30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
-30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
-30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
-30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
-30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
-30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
-30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
-30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
-30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
-30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
-30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
-30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
-30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
-30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
-30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
-30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
-30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
-30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
-30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
-30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
-30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
-30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
-30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
-30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
-30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
-30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
-30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
-30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
-30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
-30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
-30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
-30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
-30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
-30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
-30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
-30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
-30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
-30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
-30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
-30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
-30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
-30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
-30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
-30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
-30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
-30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
-30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
-30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
-30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
-30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
-30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
-30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
-30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
-30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
-30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
-30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
-30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
-30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
-30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
-30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
-30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
-30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
-30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
-30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
-30FB;KATAKANA MIDDLE DOT;Po;0;L;;;;;N;;;;;
-30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
-30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
-3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
-3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
-3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
-3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
-3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
-310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
-310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
-310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
-310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
-310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
-310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
-3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
-3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
-3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
-3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
-3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
-3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
-3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
-3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
-3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
-3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
-311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
-311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
-311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
-311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
-311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
-311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
-3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
-3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
-3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
-3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
-3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
-3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
-3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
-3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
-3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
-3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
-312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
-312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
-312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
-3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
-3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
-3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
-3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
-3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
-3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
-3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
-3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
-3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
-313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
-313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
-313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
-313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
-313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
-313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
-3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
-3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
-3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
-3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
-3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
-3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
-3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
-3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
-3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
-3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
-314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
-314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
-314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
-314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
-314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
-314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
-3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
-3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
-3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
-3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
-3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
-3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
-3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
-3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
-3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
-3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
-315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
-315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
-315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
-315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
-315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
-315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
-3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
-3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
-3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
-3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
-3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
-3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
-3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
-3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
-3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
-3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
-316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
-316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
-316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
-316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
-316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
-316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
-3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
-3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
-3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
-3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
-3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
-3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
-3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
-3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
-3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
-3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
-317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
-317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
-317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
-317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
-317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
-317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
-3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
-3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
-3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
-3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
-3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
-3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
-3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
-3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
-3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
-3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
-318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
-318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
-318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
-318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
-318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
-3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
-3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
-3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
-3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
-3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
-3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
-3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
-3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
-3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
-3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
-319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
-319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
-319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
-319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
-319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
-319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
-3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
-3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
-3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
-3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
-3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
-3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
-3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
-3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
-3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
-3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
-320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
-320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
-320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
-320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
-320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
-320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
-3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
-3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
-3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
-3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
-3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
-3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
-3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
-3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
-3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
-3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
-321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
-321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
-321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
-3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
-3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
-3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
-3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
-3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
-3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
-3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
-3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
-3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
-3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
-322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
-322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
-322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
-322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
-322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
-322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
-3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
-3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
-3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
-3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
-3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
-3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
-3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
-3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
-3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
-3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
-323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
-323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
-323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
-323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
-323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
-323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
-3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
-3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
-3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
-3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
-3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
-3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
-3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
-3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
-3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
-3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
-3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
-3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
-3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
-3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
-326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
-326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
-326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
-326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
-326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
-326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
-3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
-3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
-3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
-3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
-3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
-3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
-3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
-3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
-3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
-3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
-327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
-327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
-327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
-3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
-3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
-3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
-3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
-3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
-3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
-3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
-3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
-3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
-3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
-328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
-328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
-328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
-328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
-328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
-328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
-3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
-3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
-3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
-3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
-3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
-3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
-3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
-3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
-3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
-3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
-329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
-329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
-329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
-329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
-329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
-329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
-32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
-32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
-32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
-32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
-32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
-32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
-32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
-32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
-32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
-32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
-32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
-32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
-32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
-32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
-32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
-32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
-32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
-32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
-32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
-32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
-32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
-32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
-32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
-32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
-32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
-32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
-32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
-32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
-32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
-32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
-32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
-32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
-32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
-32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
-32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
-32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
-32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
-32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
-32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
-32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
-32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
-32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
-32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
-32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
-32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
-32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
-32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
-32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
-32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
-32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
-32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
-32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
-32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
-32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
-32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
-32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
-32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
-32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
-32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
-32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
-32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
-32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
-32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
-32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
-32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
-32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
-32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
-32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
-32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
-32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
-32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
-32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
-32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
-32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
-32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
-32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
-3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
-3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
-3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
-3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
-3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
-3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
-3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
-3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
-3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
-3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
-330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
-330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
-330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
-330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
-330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
-330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
-3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
-3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
-3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
-3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
-3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
-3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
-3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
-3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
-3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
-3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
-331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
-331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
-331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
-331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
-331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
-331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
-3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
-3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
-3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
-3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
-3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
-3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
-3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
-3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
-3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
-3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
-332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
-332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
-332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
-332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
-332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
-332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
-3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
-3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
-3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
-3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
-3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
-3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
-3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
-3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
-3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
-3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
-333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
-333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
-333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
-333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
-333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
-333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
-3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
-3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
-3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
-3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
-3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
-3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
-3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
-3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
-3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
-3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
-334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
-334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
-334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
-334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
-334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
-334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
-3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
-3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
-3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
-3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
-3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
-3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
-3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
-3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
-3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
-3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
-335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
-335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
-335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
-335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
-335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
-335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
-3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
-3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
-3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
-3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
-3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
-3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
-3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
-3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
-3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
-3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
-336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
-336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
-336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
-336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
-336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
-336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
-3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
-3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
-3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
-3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
-3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
-3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
-3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
-337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
-337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
-337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
-337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
-337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
-3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
-3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
-3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
-3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
-3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
-3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
-3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
-3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
-3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
-3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
-338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
-338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
-338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
-338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
-338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
-338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
-3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
-3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
-3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
-3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
-3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
-3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
-3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
-3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
-3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
-3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
-339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
-339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
-339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
-339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
-339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
-339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
-33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
-33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
-33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
-33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
-33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
-33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
-33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
-33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
-33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
-33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
-33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
-33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
-33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
-33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
-33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
-33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
-33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
-33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
-33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
-33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
-33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
-33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
-33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
-33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
-33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
-33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
-33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
-33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
-33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
-33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
-33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
-33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
-33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
-33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
-33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
-33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
-33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
-33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
-33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
-33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
-33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
-33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
-33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
-33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
-33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
-33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
-33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
-33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
-33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
-33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
-33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
-33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
-33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
-33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
-33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
-33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
-33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
-33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
-33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
-33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
-33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
-33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
-33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
-33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
-33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
-33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
-33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
-33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
-33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
-33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
-33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
-33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
-33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
-33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
-33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
-33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
-33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
-33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
-33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
-33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
-33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
-33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
-33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
-33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
-33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
-33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
-33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
-33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
-33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
-33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
-33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
-33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
-33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
-4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
-AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
-D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
-D800;<Unassigned High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DB7F;<Unassigned High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
-F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
-F900;<CJK Compatibility Ideograph, First>;Lo;0;L;;;;;N;;;;;
-FA2D;<CJK Compatibility Ideograph, Last>;Lo;0;L;;;;;N;;;;;
-FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
-FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
-FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
-FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
-FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
-FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
-FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
-FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
-FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
-FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
-FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
-FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
-FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;R;;;;;N;HEBREW POINT VARIKA;;;;
-FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
-FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
-FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
-FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
-FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
-FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
-FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
-FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
-FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
-FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
-FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;R;<font> 002B;;;;N;;;;;
-FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
-FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
-FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;05E9 05BC 05C1;;;;N;;;;;
-FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;05E9 05BC 05C2;;;;N;;;;;
-FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
-FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
-FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
-FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
-FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
-FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
-FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
-FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
-FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
-FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
-FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
-FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
-FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
-FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
-FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
-FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
-FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
-FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
-FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
-FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
-FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
-FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
-FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
-FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
-FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
-FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
-FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
-FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
-FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
-FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;R;<isolated> 0671;;;;N;;;;;
-FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;R;<final> 0671;;;;N;;;;;
-FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;R;<isolated> 067B;;;;N;;;;;
-FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;R;<final> 067B;;;;N;;;;;
-FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;R;<initial> 067B;;;;N;;;;;
-FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;R;<medial> 067B;;;;N;;;;;
-FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;R;<isolated> 067E;;;;N;;;;;
-FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;R;<final> 067E;;;;N;;;;;
-FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;R;<initial> 067E;;;;N;;;;;
-FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;R;<medial> 067E;;;;N;;;;;
-FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;R;<isolated> 0680;;;;N;;;;;
-FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;R;<final> 0680;;;;N;;;;;
-FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;R;<initial> 0680;;;;N;;;;;
-FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;R;<medial> 0680;;;;N;;;;;
-FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;R;<isolated> 067A;;;;N;;;;;
-FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;R;<final> 067A;;;;N;;;;;
-FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;R;<initial> 067A;;;;N;;;;;
-FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;R;<medial> 067A;;;;N;;;;;
-FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;R;<isolated> 067F;;;;N;;;;;
-FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;R;<final> 067F;;;;N;;;;;
-FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;R;<initial> 067F;;;;N;;;;;
-FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;R;<medial> 067F;;;;N;;;;;
-FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;R;<isolated> 0679;;;;N;;;;;
-FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;R;<final> 0679;;;;N;;;;;
-FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;R;<initial> 0679;;;;N;;;;;
-FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;R;<medial> 0679;;;;N;;;;;
-FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;R;<isolated> 06A4;;;;N;;;;;
-FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;R;<final> 06A4;;;;N;;;;;
-FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;R;<initial> 06A4;;;;N;;;;;
-FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;R;<medial> 06A4;;;;N;;;;;
-FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A6;;;;N;;;;;
-FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;R;<final> 06A6;;;;N;;;;;
-FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;R;<initial> 06A6;;;;N;;;;;
-FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;R;<medial> 06A6;;;;N;;;;;
-FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;R;<isolated> 0684;;;;N;;;;;
-FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;R;<final> 0684;;;;N;;;;;
-FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;R;<initial> 0684;;;;N;;;;;
-FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;R;<medial> 0684;;;;N;;;;;
-FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;R;<isolated> 0683;;;;N;;;;;
-FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;R;<final> 0683;;;;N;;;;;
-FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;R;<initial> 0683;;;;N;;;;;
-FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;R;<medial> 0683;;;;N;;;;;
-FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;R;<isolated> 0686;;;;N;;;;;
-FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;R;<final> 0686;;;;N;;;;;
-FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;R;<initial> 0686;;;;N;;;;;
-FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;R;<medial> 0686;;;;N;;;;;
-FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;R;<isolated> 0687;;;;N;;;;;
-FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;R;<final> 0687;;;;N;;;;;
-FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;R;<initial> 0687;;;;N;;;;;
-FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;R;<medial> 0687;;;;N;;;;;
-FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;R;<isolated> 068D;;;;N;;;;;
-FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;R;<final> 068D;;;;N;;;;;
-FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;R;<isolated> 068C;;;;N;;;;;
-FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;R;<final> 068C;;;;N;;;;;
-FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;R;<isolated> 068E;;;;N;;;;;
-FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;R;<final> 068E;;;;N;;;;;
-FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;R;<isolated> 0688;;;;N;;;;;
-FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;R;<final> 0688;;;;N;;;;;
-FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;R;<isolated> 0698;;;;N;;;;;
-FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;R;<final> 0698;;;;N;;;;;
-FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;R;<isolated> 0691;;;;N;;;;;
-FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;R;<final> 0691;;;;N;;;;;
-FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;R;<isolated> 06A9;;;;N;;;;;
-FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;R;<final> 06A9;;;;N;;;;;
-FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;R;<initial> 06A9;;;;N;;;;;
-FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;R;<medial> 06A9;;;;N;;;;;
-FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;R;<isolated> 06AF;;;;N;;;;;
-FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;R;<final> 06AF;;;;N;;;;;
-FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;R;<initial> 06AF;;;;N;;;;;
-FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;R;<medial> 06AF;;;;N;;;;;
-FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;R;<isolated> 06B3;;;;N;;;;;
-FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;R;<final> 06B3;;;;N;;;;;
-FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;R;<initial> 06B3;;;;N;;;;;
-FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;R;<medial> 06B3;;;;N;;;;;
-FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;R;<isolated> 06B1;;;;N;;;;;
-FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;R;<final> 06B1;;;;N;;;;;
-FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;R;<initial> 06B1;;;;N;;;;;
-FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;R;<medial> 06B1;;;;N;;;;;
-FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;R;<isolated> 06BA;;;;N;;;;;
-FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;R;<final> 06BA;;;;N;;;;;
-FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;R;<isolated> 06BB;;;;N;;;;;
-FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;R;<final> 06BB;;;;N;;;;;
-FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;R;<initial> 06BB;;;;N;;;;;
-FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;R;<medial> 06BB;;;;N;;;;;
-FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06C0;;;;N;;;;;
-FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;R;<final> 06C0;;;;N;;;;;
-FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;R;<isolated> 06C1;;;;N;;;;;
-FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;R;<final> 06C1;;;;N;;;;;
-FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;R;<initial> 06C1;;;;N;;;;;
-FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;R;<medial> 06C1;;;;N;;;;;
-FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;R;<isolated> 06BE;;;;N;;;;;
-FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;R;<final> 06BE;;;;N;;;;;
-FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;R;<initial> 06BE;;;;N;;;;;
-FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;R;<medial> 06BE;;;;N;;;;;
-FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;R;<isolated> 06D2;;;;N;;;;;
-FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;R;<final> 06D2;;;;N;;;;;
-FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 06D3;;;;N;;;;;
-FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 06D3;;;;N;;;;;
-FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;R;<isolated> 06AD;;;;N;;;;;
-FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;R;<final> 06AD;;;;N;;;;;
-FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;R;<initial> 06AD;;;;N;;;;;
-FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;R;<medial> 06AD;;;;N;;;;;
-FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;R;<isolated> 06C7;;;;N;;;;;
-FBD8;ARABIC LETTER U FINAL FORM;Lo;0;R;<final> 06C7;;;;N;;;;;
-FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;R;<isolated> 06C6;;;;N;;;;;
-FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;R;<final> 06C6;;;;N;;;;;
-FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;R;<isolated> 06C8;;;;N;;;;;
-FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;R;<final> 06C8;;;;N;;;;;
-FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0677;;;;N;;;;;
-FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;R;<isolated> 06CB;;;;N;;;;;
-FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;R;<final> 06CB;;;;N;;;;;
-FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;R;<isolated> 06C5;;;;N;;;;;
-FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;R;<final> 06C5;;;;N;;;;;
-FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;R;<isolated> 06C9;;;;N;;;;;
-FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;R;<final> 06C9;;;;N;;;;;
-FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;R;<isolated> 06D0;;;;N;;;;;
-FBE5;ARABIC LETTER E FINAL FORM;Lo;0;R;<final> 06D0;;;;N;;;;;
-FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;R;<initial> 06D0;;;;N;;;;;
-FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;R;<medial> 06D0;;;;N;;;;;
-FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0649;;;;N;;;;;
-FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;R;<medial> 0649;;;;N;;;;;
-FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0626 0627;;;;N;;;;;
-FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;R;<final> 0626 0627;;;;N;;;;;
-FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;R;<isolated> 0626 06D5;;;;N;;;;;
-FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;R;<final> 0626 06D5;;;;N;;;;;
-FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;R;<isolated> 0626 0648;;;;N;;;;;
-FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;R;<final> 0626 0648;;;;N;;;;;
-FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;R;<isolated> 0626 06C7;;;;N;;;;;
-FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;R;<final> 0626 06C7;;;;N;;;;;
-FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;R;<isolated> 0626 06C6;;;;N;;;;;
-FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;R;<final> 0626 06C6;;;;N;;;;;
-FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;R;<isolated> 0626 06C8;;;;N;;;;;
-FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;R;<final> 0626 06C8;;;;N;;;;;
-FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;R;<isolated> 0626 06D0;;;;N;;;;;
-FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;R;<final> 0626 06D0;;;;N;;;;;
-FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;R;<initial> 0626 06D0;;;;N;;;;;
-FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
-FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
-FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;R;<initial> 0626 0649;;;;N;;;;;
-FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;R;<isolated> 06CC;;;;N;;;;;
-FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;R;<final> 06CC;;;;N;;;;;
-FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;R;<initial> 06CC;;;;N;;;;;
-FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;R;<medial> 06CC;;;;N;;;;;
-FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 062C;;;;N;;;;;
-FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0626 062D;;;;N;;;;;
-FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0626 0645;;;;N;;;;;
-FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0626 0649;;;;N;;;;;
-FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0626 064A;;;;N;;;;;
-FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 062C;;;;N;;;;;
-FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062D;;;;N;;;;;
-FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0628 062E;;;;N;;;;;
-FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0628 0645;;;;N;;;;;
-FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0628 0649;;;;N;;;;;
-FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0628 064A;;;;N;;;;;
-FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 062C;;;;N;;;;;
-FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062D;;;;N;;;;;
-FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 062A 062E;;;;N;;;;;
-FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062A 0645;;;;N;;;;;
-FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062A 0649;;;;N;;;;;
-FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062A 064A;;;;N;;;;;
-FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 062C;;;;N;;;;;
-FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062B 0645;;;;N;;;;;
-FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062B 0649;;;;N;;;;;
-FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062B 064A;;;;N;;;;;
-FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062C 062D;;;;N;;;;;
-FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062C 0645;;;;N;;;;;
-FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 062C;;;;N;;;;;
-FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062D 0645;;;;N;;;;;
-FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 062C;;;;N;;;;;
-FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 062E 062D;;;;N;;;;;
-FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 062E 0645;;;;N;;;;;
-FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 062C;;;;N;;;;;
-FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062D;;;;N;;;;;
-FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0633 062E;;;;N;;;;;
-FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0633 0645;;;;N;;;;;
-FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0635 062D;;;;N;;;;;
-FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0635 0645;;;;N;;;;;
-FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 062C;;;;N;;;;;
-FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062D;;;;N;;;;;
-FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0636 062E;;;;N;;;;;
-FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0636 0645;;;;N;;;;;
-FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0637 062D;;;;N;;;;;
-FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0637 0645;;;;N;;;;;
-FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0638 0645;;;;N;;;;;
-FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 062C;;;;N;;;;;
-FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0639 0645;;;;N;;;;;
-FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 062C;;;;N;;;;;
-FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 063A 0645;;;;N;;;;;
-FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 062C;;;;N;;;;;
-FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062D;;;;N;;;;;
-FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0641 062E;;;;N;;;;;
-FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0641 0645;;;;N;;;;;
-FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0641 0649;;;;N;;;;;
-FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0641 064A;;;;N;;;;;
-FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0642 062D;;;;N;;;;;
-FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0642 0645;;;;N;;;;;
-FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0642 0649;;;;N;;;;;
-FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0642 064A;;;;N;;;;;
-FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0643 0627;;;;N;;;;;
-FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 062C;;;;N;;;;;
-FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062D;;;;N;;;;;
-FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0643 062E;;;;N;;;;;
-FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;R;<isolated> 0643 0644;;;;N;;;;;
-FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0643 0645;;;;N;;;;;
-FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0643 0649;;;;N;;;;;
-FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0643 064A;;;;N;;;;;
-FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 062C;;;;N;;;;;
-FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062D;;;;N;;;;;
-FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0644 062E;;;;N;;;;;
-FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0644 0645;;;;N;;;;;
-FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0644 0649;;;;N;;;;;
-FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0644 064A;;;;N;;;;;
-FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 062C;;;;N;;;;;
-FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062D;;;;N;;;;;
-FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0645 062E;;;;N;;;;;
-FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645 0645;;;;N;;;;;
-FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0645 0649;;;;N;;;;;
-FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0645 064A;;;;N;;;;;
-FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 062C;;;;N;;;;;
-FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062D;;;;N;;;;;
-FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0646 062E;;;;N;;;;;
-FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0646 0645;;;;N;;;;;
-FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0646 0649;;;;N;;;;;
-FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0646 064A;;;;N;;;;;
-FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 062C;;;;N;;;;;
-FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0647 0645;;;;N;;;;;
-FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0647 0649;;;;N;;;;;
-FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0647 064A;;;;N;;;;;
-FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 062C;;;;N;;;;;
-FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062D;;;;N;;;;;
-FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 064A 062E;;;;N;;;;;
-FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 064A 0645;;;;N;;;;;
-FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 064A 0649;;;;N;;;;;
-FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 064A 064A;;;;N;;;;;
-FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0630 0670;;;;N;;;;;
-FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0631 0670;;;;N;;;;;
-FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0649 0670;;;;N;;;;;
-FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064C;;;;N;;;;;
-FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064D;;;;N;;;;;
-FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064E;;;;N;;;;;
-FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 064F;;;;N;;;;;
-FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0650;;;;N;;;;;
-FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;R;<isolated> 0020 0651 0670;;;;N;;;;;
-FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;R;<final> 0626 0631;;;;N;;;;;
-FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;R;<final> 0626 0632;;;;N;;;;;
-FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;R;<final> 0626 0645;;;;N;;;;;
-FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;R;<final> 0626 0646;;;;N;;;;;
-FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0626 0649;;;;N;;;;;
-FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;R;<final> 0626 064A;;;;N;;;;;
-FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;R;<final> 0628 0631;;;;N;;;;;
-FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 0628 0632;;;;N;;;;;
-FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;R;<final> 0628 0645;;;;N;;;;;
-FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;R;<final> 0628 0646;;;;N;;;;;
-FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0628 0649;;;;N;;;;;
-FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 064A;;;;N;;;;;
-FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;R;<final> 062A 0631;;;;N;;;;;
-FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062A 0632;;;;N;;;;;
-FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062A 0645;;;;N;;;;;
-FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;R;<final> 062A 0646;;;;N;;;;;
-FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0649;;;;N;;;;;
-FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 064A;;;;N;;;;;
-FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;R;<final> 062B 0631;;;;N;;;;;
-FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 062B 0632;;;;N;;;;;
-FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;R;<final> 062B 0645;;;;N;;;;;
-FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;R;<final> 062B 0646;;;;N;;;;;
-FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062B 0649;;;;N;;;;;
-FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;R;<final> 062B 064A;;;;N;;;;;
-FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0641 0649;;;;N;;;;;
-FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;R;<final> 0641 064A;;;;N;;;;;
-FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0642 0649;;;;N;;;;;
-FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;R;<final> 0642 064A;;;;N;;;;;
-FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;R;<final> 0643 0627;;;;N;;;;;
-FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;R;<final> 0643 0644;;;;N;;;;;
-FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645;;;;N;;;;;
-FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0643 0649;;;;N;;;;;
-FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;R;<final> 0643 064A;;;;N;;;;;
-FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 0645;;;;N;;;;;
-FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 0649;;;;N;;;;;
-FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 064A;;;;N;;;;;
-FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;R;<final> 0645 0627;;;;N;;;;;
-FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0645 0645;;;;N;;;;;
-FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;R;<final> 0646 0631;;;;N;;;;;
-FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;R;<final> 0646 0632;;;;N;;;;;
-FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 0645;;;;N;;;;;
-FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;R;<final> 0646 0646;;;;N;;;;;
-FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0649;;;;N;;;;;
-FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;R;<final> 0646 064A;;;;N;;;;;
-FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;R;<final> 0649 0670;;;;N;;;;;
-FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;R;<final> 064A 0631;;;;N;;;;;
-FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;R;<final> 064A 0632;;;;N;;;;;
-FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645;;;;N;;;;;
-FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;R;<final> 064A 0646;;;;N;;;;;
-FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 064A 0649;;;;N;;;;;
-FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 064A;;;;N;;;;;
-FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0626 062C;;;;N;;;;;
-FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;R;<initial> 0626 062D;;;;N;;;;;
-FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0626 062E;;;;N;;;;;
-FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0626 0645;;;;N;;;;;
-FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;R;<initial> 0626 0647;;;;N;;;;;
-FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0628 062C;;;;N;;;;;
-FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0628 062D;;;;N;;;;;
-FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0628 062E;;;;N;;;;;
-FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0628 0645;;;;N;;;;;
-FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 0628 0647;;;;N;;;;;
-FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C;;;;N;;;;;
-FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 062D;;;;N;;;;;
-FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 062E;;;;N;;;;;
-FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645;;;;N;;;;;
-FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 062A 0647;;;;N;;;;;
-FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062B 0645;;;;N;;;;;
-FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 062D;;;;N;;;;;
-FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062C 0645;;;;N;;;;;
-FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062D 062C;;;;N;;;;;
-FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062D 0645;;;;N;;;;;
-FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062E 062C;;;;N;;;;;
-FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062E 0645;;;;N;;;;;
-FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062C;;;;N;;;;;
-FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062D;;;;N;;;;;
-FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0633 062E;;;;N;;;;;
-FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645;;;;N;;;;;
-FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D;;;;N;;;;;
-FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0635 062E;;;;N;;;;;
-FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645;;;;N;;;;;
-FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0636 062C;;;;N;;;;;
-FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;R;<initial> 0636 062D;;;;N;;;;;
-FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0636 062E;;;;N;;;;;
-FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 0645;;;;N;;;;;
-FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 062D;;;;N;;;;;
-FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0638 0645;;;;N;;;;;
-FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C;;;;N;;;;;
-FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645;;;;N;;;;;
-FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 063A 062C;;;;N;;;;;
-FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 063A 0645;;;;N;;;;;
-FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0641 062C;;;;N;;;;;
-FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0641 062D;;;;N;;;;;
-FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0641 062E;;;;N;;;;;
-FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 0645;;;;N;;;;;
-FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 062D;;;;N;;;;;
-FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0642 0645;;;;N;;;;;
-FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0643 062C;;;;N;;;;;
-FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;R;<initial> 0643 062D;;;;N;;;;;
-FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0643 062E;;;;N;;;;;
-FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;R;<initial> 0643 0644;;;;N;;;;;
-FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645;;;;N;;;;;
-FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C;;;;N;;;;;
-FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 062D;;;;N;;;;;
-FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0644 062E;;;;N;;;;;
-FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 0645;;;;N;;;;;
-FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;R;<initial> 0644 0647;;;;N;;;;;
-FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C;;;;N;;;;;
-FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062D;;;;N;;;;;
-FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062E;;;;N;;;;;
-FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 0645;;;;N;;;;;
-FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C;;;;N;;;;;
-FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062D;;;;N;;;;;
-FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0646 062E;;;;N;;;;;
-FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 0645;;;;N;;;;;
-FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;R;<initial> 0646 0647;;;;N;;;;;
-FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 062C;;;;N;;;;;
-FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645;;;;N;;;;;
-FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;R;<initial> 0647 0670;;;;N;;;;;
-FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 064A 062C;;;;N;;;;;
-FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;R;<initial> 064A 062D;;;;N;;;;;
-FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;R;<initial> 064A 062E;;;;N;;;;;
-FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645;;;;N;;;;;
-FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;R;<initial> 064A 0647;;;;N;;;;;
-FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0626 0645;;;;N;;;;;
-FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0626 0647;;;;N;;;;;
-FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0628 0645;;;;N;;;;;
-FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0628 0647;;;;N;;;;;
-FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062A 0645;;;;N;;;;;
-FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062A 0647;;;;N;;;;;
-FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 062B 0645;;;;N;;;;;
-FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 062B 0647;;;;N;;;;;
-FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0633 0645;;;;N;;;;;
-FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0633 0647;;;;N;;;;;
-FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0634 0645;;;;N;;;;;
-FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0634 0647;;;;N;;;;;
-FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;R;<medial> 0643 0644;;;;N;;;;;
-FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0643 0645;;;;N;;;;;
-FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0644 0645;;;;N;;;;;
-FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0646 0645;;;;N;;;;;
-FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;R;<medial> 0646 0647;;;;N;;;;;
-FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 064A 0645;;;;N;;;;;
-FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;R;<medial> 064A 0647;;;;N;;;;;
-FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064E;;;;N;;;;;
-FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 064F;;;;N;;;;;
-FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0651 0650;;;;N;;;;;
-FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0637 0649;;;;N;;;;;
-FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0637 064A;;;;N;;;;;
-FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0639 0649;;;;N;;;;;
-FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0639 064A;;;;N;;;;;
-FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 063A 0649;;;;N;;;;;
-FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 063A 064A;;;;N;;;;;
-FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0633 0649;;;;N;;;;;
-FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0633 064A;;;;N;;;;;
-FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0634 0649;;;;N;;;;;
-FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0634 064A;;;;N;;;;;
-FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062D 0649;;;;N;;;;;
-FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062D 064A;;;;N;;;;;
-FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062C 0649;;;;N;;;;;
-FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062C 064A;;;;N;;;;;
-FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 062E 0649;;;;N;;;;;
-FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 062E 064A;;;;N;;;;;
-FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0635 0649;;;;N;;;;;
-FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0635 064A;;;;N;;;;;
-FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0636 0649;;;;N;;;;;
-FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;R;<isolated> 0636 064A;;;;N;;;;;
-FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 062C;;;;N;;;;;
-FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062D;;;;N;;;;;
-FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;R;<isolated> 0634 062E;;;;N;;;;;
-FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;R;<isolated> 0634 0645;;;;N;;;;;
-FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0634 0631;;;;N;;;;;
-FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0633 0631;;;;N;;;;;
-FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0635 0631;;;;N;;;;;
-FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;R;<isolated> 0636 0631;;;;N;;;;;
-FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0637 0649;;;;N;;;;;
-FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;R;<final> 0637 064A;;;;N;;;;;
-FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0649;;;;N;;;;;
-FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;R;<final> 0639 064A;;;;N;;;;;
-FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0649;;;;N;;;;;
-FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;R;<final> 063A 064A;;;;N;;;;;
-FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 0649;;;;N;;;;;
-FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0633 064A;;;;N;;;;;
-FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0634 0649;;;;N;;;;;
-FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;R;<final> 0634 064A;;;;N;;;;;
-FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0649;;;;N;;;;;
-FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062D 064A;;;;N;;;;;
-FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0649;;;;N;;;;;
-FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 064A;;;;N;;;;;
-FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062E 0649;;;;N;;;;;
-FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062E 064A;;;;N;;;;;
-FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0635 0649;;;;N;;;;;
-FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;R;<final> 0635 064A;;;;N;;;;;
-FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 0649;;;;N;;;;;
-FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;R;<final> 0636 064A;;;;N;;;;;
-FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;R;<final> 0634 062C;;;;N;;;;;
-FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;R;<final> 0634 062D;;;;N;;;;;
-FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 062E;;;;N;;;;;
-FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645;;;;N;;;;;
-FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;R;<final> 0634 0631;;;;N;;;;;
-FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;R;<final> 0633 0631;;;;N;;;;;
-FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;R;<final> 0635 0631;;;;N;;;;;
-FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;R;<final> 0636 0631;;;;N;;;;;
-FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0634 062C;;;;N;;;;;
-FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;R;<initial> 0634 062D;;;;N;;;;;
-FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 062E;;;;N;;;;;
-FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645;;;;N;;;;;
-FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0633 0647;;;;N;;;;;
-FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;R;<initial> 0634 0647;;;;N;;;;;
-FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645;;;;N;;;;;
-FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0633 062C;;;;N;;;;;
-FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0633 062D;;;;N;;;;;
-FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0633 062E;;;;N;;;;;
-FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;R;<medial> 0634 062C;;;;N;;;;;
-FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;R;<medial> 0634 062D;;;;N;;;;;
-FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;R;<medial> 0634 062E;;;;N;;;;;
-FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0637 0645;;;;N;;;;;
-FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;R;<medial> 0638 0645;;;;N;;;;;
-FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;R;<final> 0627 064B;;;;N;;;;;
-FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0627 064B;;;;N;;;;;
-FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
-FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
-FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062C 0645;;;;N;;;;;
-FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;R;<final> 062A 062D 062C;;;;N;;;;;
-FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 062C;;;;N;;;;;
-FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062D 0645;;;;N;;;;;
-FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 062A 062E 0645;;;;N;;;;;
-FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 062A 0645 062C;;;;N;;;;;
-FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062D;;;;N;;;;;
-FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 062A 0645 062E;;;;N;;;;;
-FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 062C 0645 062D;;;;N;;;;;
-FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 062C 0645 062D;;;;N;;;;;
-FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 0645 064A;;;;N;;;;;
-FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062D 0645 0649;;;;N;;;;;
-FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 062D 062C;;;;N;;;;;
-FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 062C 062D;;;;N;;;;;
-FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062C 0649;;;;N;;;;;
-FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0633 0645 062D;;;;N;;;;;
-FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0633 0645 062D;;;;N;;;;;
-FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 062C;;;;N;;;;;
-FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0633 0645 0645;;;;N;;;;;
-FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0633 0645 0645;;;;N;;;;;
-FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;R;<final> 0635 062D 062D;;;;N;;;;;
-FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;R;<initial> 0635 062D 062D;;;;N;;;;;
-FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0635 0645 0645;;;;N;;;;;
-FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 062D 0645;;;;N;;;;;
-FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 062D 0645;;;;N;;;;;
-FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062C 064A;;;;N;;;;;
-FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;R;<final> 0634 0645 062E;;;;N;;;;;
-FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0634 0645 062E;;;;N;;;;;
-FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0634 0645 0645;;;;N;;;;;
-FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0634 0645 0645;;;;N;;;;;
-FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0636 062D 0649;;;;N;;;;;
-FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0636 062E 0645;;;;N;;;;;
-FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0636 062E 0645;;;;N;;;;;
-FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0637 0645 062D;;;;N;;;;;
-FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0637 0645 062D;;;;N;;;;;
-FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0637 0645 0645;;;;N;;;;;
-FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0637 0645 064A;;;;N;;;;;
-FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 062C 0645;;;;N;;;;;
-FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0639 0645 0645;;;;N;;;;;
-FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 0645 0645;;;;N;;;;;
-FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0639 0645 0649;;;;N;;;;;
-FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 063A 0645 0645;;;;N;;;;;
-FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 063A 0645 064A;;;;N;;;;;
-FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 063A 0645 0649;;;;N;;;;;
-FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0641 062E 0645;;;;N;;;;;
-FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0641 062E 0645;;;;N;;;;;
-FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0642 0645 062D;;;;N;;;;;
-FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0642 0645 0645;;;;N;;;;;
-FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062D 0645;;;;N;;;;;
-FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062D 064A;;;;N;;;;;
-FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0644 062D 0649;;;;N;;;;;
-FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 062C;;;;N;;;;;
-FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;R;<final> 0644 062C 062C;;;;N;;;;;
-FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062E 0645;;;;N;;;;;
-FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062E 0645;;;;N;;;;;
-FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0644 0645 062D;;;;N;;;;;
-FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0644 0645 062D;;;;N;;;;;
-FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 062C;;;;N;;;;;
-FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062D 0645;;;;N;;;;;
-FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062D 064A;;;;N;;;;;
-FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062D;;;;N;;;;;
-FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062C 0645;;;;N;;;;;
-FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 062C;;;;N;;;;;
-FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0645 062E 0645;;;;N;;;;;
-FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;R;<initial> 0645 062C 062E;;;;N;;;;;
-FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 062C;;;;N;;;;;
-FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0647 0645 0645;;;;N;;;;;
-FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062D 0645;;;;N;;;;;
-FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062D 0649;;;;N;;;;;
-FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0646 062C 0645;;;;N;;;;;
-FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0646 062C 0645;;;;N;;;;;
-FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 062C 0649;;;;N;;;;;
-FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 0645 064A;;;;N;;;;;
-FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0646 0645 0649;;;;N;;;;;
-FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 064A 0645 0645;;;;N;;;;;
-FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 064A 0645 0645;;;;N;;;;;
-FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062E 064A;;;;N;;;;;
-FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062C 064A;;;;N;;;;;
-FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062C 0649;;;;N;;;;;
-FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 062A 062E 064A;;;;N;;;;;
-FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 062E 0649;;;;N;;;;;
-FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062A 0645 064A;;;;N;;;;;
-FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062A 0645 0649;;;;N;;;;;
-FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062C 0645 064A;;;;N;;;;;
-FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 062D 0649;;;;N;;;;;
-FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 062C 0645 0649;;;;N;;;;;
-FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0633 062E 0649;;;;N;;;;;
-FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0635 062D 064A;;;;N;;;;;
-FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0634 062D 064A;;;;N;;;;;
-FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0636 062D 064A;;;;N;;;;;
-FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 062C 064A;;;;N;;;;;
-FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0644 0645 064A;;;;N;;;;;
-FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062D 064A;;;;N;;;;;
-FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 062C 064A;;;;N;;;;;
-FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 064A 0645 064A;;;;N;;;;;
-FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 0645 064A;;;;N;;;;;
-FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0642 0645 064A;;;;N;;;;;
-FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062D 064A;;;;N;;;;;
-FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0642 0645 062D;;;;N;;;;;
-FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062D 0645;;;;N;;;;;
-FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0639 0645 064A;;;;N;;;;;
-FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0643 0645 064A;;;;N;;;;;
-FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;R;<initial> 0646 062C 062D;;;;N;;;;;
-FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062E 064A;;;;N;;;;;
-FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0644 062C 0645;;;;N;;;;;
-FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0643 0645 0645;;;;N;;;;;
-FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;R;<final> 0644 062C 0645;;;;N;;;;;
-FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;R;<final> 0646 062C 062D;;;;N;;;;;
-FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 062C 062D 064A;;;;N;;;;;
-FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 062D 062C 064A;;;;N;;;;;
-FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0645 062C 064A;;;;N;;;;;
-FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0641 0645 064A;;;;N;;;;;
-FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;R;<final> 0628 062D 064A;;;;N;;;;;
-FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0643 0645 0645;;;;N;;;;;
-FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0639 062C 0645;;;;N;;;;;
-FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;R;<initial> 0635 0645 0645;;;;N;;;;;
-FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;R;<final> 0633 062E 064A;;;;N;;;;;
-FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;R;<final> 0646 062C 064A;;;;N;;;;;
-FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 06D2;;;;N;;;;;
-FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;R;<isolated> 0642 0644 06D2;;;;N;;;;;
-FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;R;<isolated> 0627 0644 0644 0647;;;;N;;;;;
-FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;R;<isolated> 0627 0643 0628 0631;;;;N;;;;;
-FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;R;<isolated> 0645 062D 0645 062F;;;;N;;;;;
-FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0639 0645;;;;N;;;;;
-FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;R;<isolated> 0631 0633 0648 0644;;;;N;;;;;
-FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;R;<isolated> 0639 0644 064A 0647;;;;N;;;;;
-FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;R;<isolated> 0648 0633 0644 0645;;;;N;;;;;
-FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;R;<isolated> 0635 0644 0649;;;;N;;;;;
-FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;R;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
-FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;R;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
-FE20;COMBINING LIGATURE LEFT HALF;Mn;230;ON;;;;;N;;;;;
-FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
-FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;ON;;;;;N;;;;;
-FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;ON;;;;;N;;;;;
-FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
-FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
-FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
-FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
-FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
-FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
-FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
-FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
-FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
-FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
-FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
-FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
-FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
-FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
-FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
-FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
-FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
-FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
-FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
-FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
-FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
-FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
-FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
-FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
-FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
-FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
-FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
-FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
-FE50;SMALL COMMA;Po;0;ON;<small> 002C;;;;N;;;;;
-FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
-FE52;SMALL FULL STOP;Po;0;ON;<small> 002E;;;;N;SMALL PERIOD;;;;
-FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
-FE55;SMALL COLON;Po;0;ON;<small> 003A;;;;N;;;;;
-FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
-FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
-FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
-FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
-FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
-FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
-FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
-FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
-FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
-FE5F;SMALL NUMBER SIGN;Po;0;ON;<small> 0023;;;;N;;;;;
-FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
-FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
-FE62;SMALL PLUS SIGN;Sm;0;ON;<small> 002B;;;;N;;;;;
-FE63;SMALL HYPHEN-MINUS;Pd;0;ON;<small> 002D;;;;N;;;;;
-FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
-FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
-FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
-FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
-FE69;SMALL DOLLAR SIGN;Sc;0;ON;<small> 0024;;;;N;;;;;
-FE6A;SMALL PERCENT SIGN;Po;0;ON;<small> 0025;;;;N;;;;;
-FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
-FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
-FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;R;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
-FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
-FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;R;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
-FE76;ARABIC FATHA ISOLATED FORM;Lo;0;R;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
-FE77;ARABIC FATHA MEDIAL FORM;Lo;0;R;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
-FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;R;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
-FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;R;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
-FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;R;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
-FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;R;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
-FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;R;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
-FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;R;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
-FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;R;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
-FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;R;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
-FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;R;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
-FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
-FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
-FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
-FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
-FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
-FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
-FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
-FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
-FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
-FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
-FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;R;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
-FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;R;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
-FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;R;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
-FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;R;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
-FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;R;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
-FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;R;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
-FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;R;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
-FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;R;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
-FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;R;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
-FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;R;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
-FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;R;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
-FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;R;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
-FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;R;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
-FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;R;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
-FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;R;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
-FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;R;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
-FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;R;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
-FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;R;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
-FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;R;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
-FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;R;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
-FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;R;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
-FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;R;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
-FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;R;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
-FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;R;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
-FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;R;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
-FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;R;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
-FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;R;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
-FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;R;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
-FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;R;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
-FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;R;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
-FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;R;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
-FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;R;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
-FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;R;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
-FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;R;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
-FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;R;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
-FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;R;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
-FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;R;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
-FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;R;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
-FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;R;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
-FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;R;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
-FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;R;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
-FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;R;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
-FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;R;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
-FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;R;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
-FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;R;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
-FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;R;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
-FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;R;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
-FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;R;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
-FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;R;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
-FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;R;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
-FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;R;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
-FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;R;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
-FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;R;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
-FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;R;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
-FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;R;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
-FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;R;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
-FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;R;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
-FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;R;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
-FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;R;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
-FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;R;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
-FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;R;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
-FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;R;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
-FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;R;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
-FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;R;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
-FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;R;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
-FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;R;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
-FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;R;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
-FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;R;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
-FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;R;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
-FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;R;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
-FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;R;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
-FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;R;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
-FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;R;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
-FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;R;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
-FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;R;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
-FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;R;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
-FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;R;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
-FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;R;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
-FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;R;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
-FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;R;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
-FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;R;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
-FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;R;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
-FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;R;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
-FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;R;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
-FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;R;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
-FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;R;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
-FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;R;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
-FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;R;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
-FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;R;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
-FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;R;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
-FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;R;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
-FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;R;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
-FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;R;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
-FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;R;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
-FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;R;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
-FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;R;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
-FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;R;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
-FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;R;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
-FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;R;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
-FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;R;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
-FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;R;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
-FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;R;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
-FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;R;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
-FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;R;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
-FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;R;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
-FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;R;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
-FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;R;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;R;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;R;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;R;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;R;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
-FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;R;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
-FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;ON;;;;;N;BYTE ORDER MARK;;;;
-FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
-FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
-FF03;FULLWIDTH NUMBER SIGN;Po;0;ON;<wide> 0023;;;;N;;;;;
-FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ON;<wide> 0024;;;;N;;;;;
-FF05;FULLWIDTH PERCENT SIGN;Po;0;ON;<wide> 0025;;;;N;;;;;
-FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
-FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
-FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
-FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
-FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ON;<wide> 002B;;;;N;;;;;
-FF0C;FULLWIDTH COMMA;Po;0;ON;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ON;<wide> 002D;;;;N;;;;;
-FF0E;FULLWIDTH FULL STOP;Po;0;ON;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;ON;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
-FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
-FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
-FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
-FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
-FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
-FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
-FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
-FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
-FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
-FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
-FF1A;FULLWIDTH COLON;Po;0;ON;<wide> 003A;;;;N;;;;;
-FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
-FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
-FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
-FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
-FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
-FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
-FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
-FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
-FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
-FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
-FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
-FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
-FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
-FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
-FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
-FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
-FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
-FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
-FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
-FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
-FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
-FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
-FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
-FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
-FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
-FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
-FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
-FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
-FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
-FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
-FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
-FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
-FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
-FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
-FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
-FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
-FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
-FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
-FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
-FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
-FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
-FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
-FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
-FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
-FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
-FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
-FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
-FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
-FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
-FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
-FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
-FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
-FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
-FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
-FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
-FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
-FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
-FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
-FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
-FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
-FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
-FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
-FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
-FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
-FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
-FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
-FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
-FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
-FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
-FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
-FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
-FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
-FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;L;<narrow> 30FB;;;;N;;;;;
-FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
-FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
-FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
-FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
-FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
-FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
-FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
-FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
-FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
-FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
-FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
-FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
-FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
-FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
-FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
-FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
-FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
-FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
-FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
-FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
-FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
-FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
-FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
-FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
-FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
-FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
-FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
-FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
-FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
-FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
-FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
-FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
-FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
-FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
-FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
-FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
-FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
-FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
-FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
-FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
-FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
-FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
-FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
-FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
-FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
-FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
-FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
-FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
-FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
-FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
-FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
-FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
-FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
-FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
-FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
-FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
-FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 309B;;;;N;;;;;
-FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309C;;;;N;;;;;
-FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
-FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
-FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
-FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
-FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
-FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
-FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
-FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
-FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
-FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
-FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
-FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
-FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
-FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
-FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
-FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
-FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
-FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
-FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
-FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
-FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
-FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
-FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
-FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
-FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
-FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
-FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
-FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
-FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
-FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
-FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
-FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
-FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
-FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
-FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
-FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
-FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
-FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
-FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
-FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
-FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
-FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
-FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
-FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
-FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
-FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
-FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
-FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
-FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
-FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
-FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
-FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
-FFE0;FULLWIDTH CENT SIGN;Sc;0;ON;<wide> 00A2;;;;N;;;;;
-FFE1;FULLWIDTH POUND SIGN;Sc;0;ON;<wide> 00A3;;;;N;;;;;
-FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
-FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;
-FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
-FFE5;FULLWIDTH YEN SIGN;Sc;0;ON;<wide> 00A5;;;;N;;;;;
-FFE6;FULLWIDTH WON SIGN;Sc;0;ON;<wide> 20A9;;;;N;;;;;
-FFE8;HALFWIDTH FORMS LIGHT VERTICAL;Sm;0;ON;<narrow> 2502;;;;N;;;;;
-FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
-FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
-FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
-FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
-FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
-FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
-FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html b/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html
deleted file mode 100644
index a08a25e..0000000
--- a/libjava/classpath/doc/unicode/UnicodeData-3.0.0.html
+++ /dev/null
@@ -1,1988 +0,0 @@
-<html>
-
-
-
-<head>
-
-<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0">
-
-<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
-
-<link REL="stylesheet" HREF="http://www.unicode.org/unicode.css" TYPE="text/css">
-
-<title>UnicodeData File Format</title>
-
-</head>
-
-
-
-<body>
-
-
-
-<h1>UnicodeData File Format<br>
-Version 3.0.0</h1>
-
-
-
-<table BORDER="1" CELLSPACING="2" CELLPADDING="0" HEIGHT="87" WIDTH="100%">
-
- <tr>
-
- <td VALIGN="TOP" width="144">Revision</td>
-
- <td VALIGN="TOP">3.0.0</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP" width="144">Authors</td>
-
- <td VALIGN="TOP">Mark Davis and Ken Whistler</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP" width="144">Date</td>
-
- <td VALIGN="TOP">1999-09-12</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP" width="144">This Version</td>
-
- <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP" width="144">Previous Version</td>
-
- <td VALIGN="TOP">n/a</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP" width="144">Latest Version</td>
-
- <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
-
- </tr>
-
-</table>
-
-
-
-<p align="center">Copyright © 1995-1999 Unicode, Inc. All Rights reserved.<br>
-
-<i>For more information, including Disclamer and Limitations, see <a HREF="UnicodeCharacterDatabase-3.0.0.html">UnicodeCharacterDatabase-3.0.0.html</a> </i></p>
-
-
-
-<p>This document describes the format of the UnicodeData.txt file, which is one of the
-
-files in the Unicode Character Database. The document is divided into the following
-
-sections:
-
-
-
-<ul>
-
- <li><a HREF="#Field Formats">Field Formats</a> <ul>
-
- <li><a HREF="#General Category">General Category</a> </li>
-
- <li><a HREF="#Bidirectional Category">Bidirectional Category</a> </li>
-
- <li><a HREF="#Character Decomposition">Character Decomposition Mapping</a> </li>
-
- <li><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </li>
-
- <li><a HREF="#Decompositions and Normalization">Decompositions and Normalization</a> </li>
-
- <li><a HREF="#Case Mappings">Case Mappings</a> </li>
-
- </ul>
-
- </li>
-
- <li><a HREF="#Property Invariants">Property Invariants</a> </li>
-
- <li><a HREF="#Modification History">Modification History</a> </li>
-
-</ul>
-
-
-
-<p><b>Warning: </b>the information in this file does not completely describe the use and
-
-interpretation of Unicode character properties and behavior. It must be used in
-
-conjunction with the data in the other files in the Unicode Character Database, and relies
-
-on the notation and definitions supplied in <i><a href="http://www.unicode.org/unicode/standard/versions/Unicode3.0.html"> The Unicode
-Standard</a></i>. All chapter references
-
-are to Version 3.0 of the standard.</p>
-
-
-
-<h2><a NAME="Field Formats"></a>Field Formats</h2>
-
-
-
-<p>The file consists of lines containing fields terminated by semicolons. Each line
-
-represents the data for one encoded character in the Unicode Standard. Every encoded
-
-character has a data entry, with the exception of certain special ranges, as detailed
-
-below.
-
-
-
-<ul>
-
- <li>There are six special ranges of characters that are represented only by their start and
-
- end characters, since the properties in the file are uniform, except for code values
-
- (which are all sequential and assigned). </li>
-
- <li>The names of CJK ideograph characters and the names and decompositions of Hangul
-
- syllable characters are algorithmically derivable. (See the Unicode Standard and <a
-
- HREF="http://www.unicode.org/unicode/reports/tr15/">Unicode Technical Report #15</a> for
-
- more information). </li>
-
- <li>Surrogate code values and private use characters have no names. </li>
-
- <li>The Private Use character outside of the BMP (U+F0000..U+FFFFD, U+100000..U+10FFFD) are
-
- not listed. These correspond to surrogate pairs where the first surrogate is in the High
-
- Surrogate Private Use section. </li>
-
-</ul>
-
-
-
-<p>The exact ranges represented by start and end characters are:
-
-
-
-<ul>
-
- <li>CJK Ideographs Extension A (U+3400 - U+4DB5) </li>
-
- <li>CJK Ideographs (U+4E00 - U+9FA5) </li>
-
- <li>Hangul Syllables (U+AC00 - U+D7A3) </li>
-
- <li>Non-Private Use High Surrogates (U+D800 - U+DB7F) </li>
-
- <li>Private Use High Surrogates (U+DB80 - U+DBFF) </li>
-
- <li>Low Surrogates (U+DC00 - U+DFFF) </li>
-
- <li>The Private Use Area (U+E000 - U+F8FF) </li>
-
-</ul>
-
-
-
-<p>The following table describes the format and meaning of each field in a data entry in
-
-the UnicodeData file. Fields which contain normative information are so indicated.</p>
-
-
-
-<table BORDER="1" CELLSPACING="2" CELLPADDING="2">
-
- <tr>
-
- <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Field</th>
-
- <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Name</th>
-
- <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Status</th>
-
- <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Explanation</th>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">0</th>
-
- <td VALIGN="top">Code value</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">Code value in 4-digit hexadecimal format.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">1</th>
-
- <td VALIGN="top">Character name</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">These names match exactly the names published in Chapter 14 of the
-
- Unicode Standard, Version 3.0.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">2</th>
-
- <td VALIGN="top"><a HREF="#General Category">General Category</a> </td>
-
- <td VALIGN="top">normative / informative<br>
-
- (see below)</td>
-
- <td VALIGN="top">This is a useful breakdown into various &quot;character types&quot; which
-
- can be used as a default categorization in implementations. See below for a brief
-
- explanation.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">3</th>
-
- <td VALIGN="top"><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">The classes used for the Canonical Ordering Algorithm in the Unicode
-
- Standard. These classes are also printed in Chapter 4 of the Unicode Standard.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">4</th>
-
- <td VALIGN="top"><a HREF="#Bidirectional Category">Bidirectional Category</a> </td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">See the list below for an explanation of the abbreviations used in this
-
- field. These are the categories required by the Bidirectional Behavior Algorithm in the
-
- Unicode Standard. These categories are summarized in Chapter 3 of the Unicode Standard.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">5</th>
-
- <td VALIGN="top"><a HREF="#Character Decomposition">Character Decomposition
- Mapping</a></td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">In the Unicode Standard, not all of the mappings are full (maximal)
-
- decompositions. Recursive application of look-up for decompositions will, in all cases,
-
- lead to a maximal decomposition. The decomposition mappings match exactly the
-
- decomposition mappings published with the character names in the Unicode Standard.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">6</th>
-
- <td VALIGN="top">Decimal digit value</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">This is a numeric field. If the character has the decimal digit property,
-
- as specified in Chapter 4 of the Unicode Standard, the value of that digit is represented
-
- with an integer value in this field</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">7</th>
-
- <td VALIGN="top">Digit value</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">This is a numeric field. If the character represents a digit, not
-
- necessarily a decimal digit, the value is here. This covers digits which do not form
-
- decimal radix forms, such as the compatibility superscript digits</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">8</th>
-
- <td VALIGN="top">Numeric value</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">This is a numeric field. If the character has the numeric property, as
-
- specified in Chapter 4 of the Unicode Standard, the value of that character is represented
-
- with an integer or rational number in this field. This includes fractions as, e.g.,
-
- &quot;1/5&quot; for U+2155 VULGAR FRACTION ONE FIFTH Also included are numerical values
-
- for compatibility characters such as circled numbers.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">8</th>
-
- <td VALIGN="top">Mirrored</td>
-
- <td VALIGN="top">normative</td>
-
- <td VALIGN="top">If the character has been identified as a &quot;mirrored&quot; character
-
- in bidirectional text, this field has the value &quot;Y&quot;; otherwise &quot;N&quot;.
-
- The list of mirrored characters is also printed in Chapter 4 of the Unicode Standard.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">10</th>
-
- <td VALIGN="top">Unicode 1.0 Name</td>
-
- <td VALIGN="top">informative</td>
-
- <td VALIGN="top">This is the old name as published in Unicode 1.0. This name is only
-
- provided when it is significantly different from the Unicode 3.0 name for the character.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">11</th>
-
- <td VALIGN="top">10646 comment field</td>
-
- <td VALIGN="top">informative</td>
-
- <td VALIGN="top">This is the ISO 10646 comment field. It is in parantheses in the 10646
-
- names list.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">12</th>
-
- <td VALIGN="top"><a HREF="#Case Mappings">Uppercase Mapping</a></td>
-
- <td VALIGN="top">informative</td>
-
- <td VALIGN="top">Upper case equivalent mapping. If a character is part of an alphabet with
-
- case distinctions, and has an upper case equivalent, then the upper case equivalent is in
-
- this field. See the explanation below on case distinctions. These mappings are always
-
- one-to-one, not one-to-many or many-to-one. This field is informative.</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">13</th>
-
- <td VALIGN="top"><a HREF="#Case Mappings">Lowercase Mapping</a></td>
-
- <td VALIGN="top">informative</td>
-
- <td VALIGN="top">Similar to Uppercase mapping</td>
-
- </tr>
-
- <tr>
-
- <th VALIGN="top">14</th>
-
- <td VALIGN="top"><a HREF="#Case Mappings">Titlecase Mapping</a></td>
-
- <td VALIGN="top">informative</td>
-
- <td VALIGN="top">Similar to Uppercase mapping</td>
-
- </tr>
-
-</table>
-
-
-
-<h3><a NAME="General Category"></a>General Category</h3>
-
-
-
-<p>The values in this field are abbreviations for the following. Some of the values are
-
-normative, and some are informative. For more information, see the Unicode Standard.</p>
-
-
-
-<p><b>Note:</b> the standard does not assign information to control characters (except for
-
-certain cases in the Bidirectional Algorithm). Implementations will generally also assign
-
-categories to certain control characters, notably CR and LF, according to platform
-
-conventions.</p>
-
-
-
-<h4>Normative Categories</h4>
-
-
-
-<table BORDER="0" CELLSPACING="2" CELLPADDING="0">
-
- <tr>
-
- <th><p ALIGN="LEFT">Abbr.</th>
-
- <th><p ALIGN="LEFT">Description</th>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Lu</td>
-
- <td>Letter, Uppercase</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Ll</td>
-
- <td>Letter, Lowercase</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Lt</td>
-
- <td>Letter, Titlecase</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Mn</td>
-
- <td>Mark, Non-Spacing</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Mc</td>
-
- <td>Mark, Spacing Combining</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Me</td>
-
- <td>Mark, Enclosing</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Nd</td>
-
- <td>Number, Decimal Digit</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Nl</td>
-
- <td>Number, Letter</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">No</td>
-
- <td>Number, Other</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Zs</td>
-
- <td>Separator, Space</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Zl</td>
-
- <td>Separator, Line</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Zp</td>
-
- <td>Separator, Paragraph</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Cc</td>
-
- <td>Other, Control</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Cf</td>
-
- <td>Other, Format</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Cs</td>
-
- <td>Other, Surrogate</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Co</td>
-
- <td>Other, Private Use</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Cn</td>
-
- <td>Other, Not Assigned (no characters in the file have this property)</td>
-
- </tr>
-
-</table>
-
-
-
-<h4>Informative Categories</h4>
-
-
-
-<table BORDER="0" CELLSPACING="2" CELLPADDING="0">
-
- <tr>
-
- <th><p ALIGN="LEFT">Abbr.</th>
-
- <th><p ALIGN="LEFT">Description</th>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Lm</td>
-
- <td>Letter, Modifier</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Lo</td>
-
- <td>Letter, Other</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Pc</td>
-
- <td>Punctuation, Connector</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Pd</td>
-
- <td>Punctuation, Dash</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Ps</td>
-
- <td>Punctuation, Open</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Pe</td>
-
- <td>Punctuation, Close</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Pi</td>
-
- <td>Punctuation, Initial quote (may behave like Ps or Pe depending on usage)</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Pf</td>
-
- <td>Punctuation, Final quote (may behave like Ps or Pe depending on usage)</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Po</td>
-
- <td>Punctuation, Other</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Sm</td>
-
- <td>Symbol, Math</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Sc</td>
-
- <td>Symbol, Currency</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">Sk</td>
-
- <td>Symbol, Modifier</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">So</td>
-
- <td>Symbol, Other</td>
-
- </tr>
-
-</table>
-
-
-
-<h3><a NAME="Bidirectional Category"></a>Bidirectional Category</h3>
-
-
-
-<p>Please refer to Chapter 3 for an explanation of the algorithm for Bidirectional
-
-Behavior and an explanation of the significance of these categories. An up-to-date version
-
-can be found on <a HREF="http://www.unicode.org/unicode/reports/tr9/">Unicode Technical
-
-Report #9: The Bidirectional Algorithm</a>. These values are normative.</p>
-
-
-
-<table BORDER="0" CELLPADDING="2">
-
- <tr>
-
- <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Type</th>
-
- <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Description</th>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>L</b></td>
-
- <td VALIGN="TOP">Left-to-Right</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>LRE</b></td>
-
- <td VALIGN="TOP">Left-to-Right Embedding</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>LRO</b></td>
-
- <td VALIGN="TOP">Left-to-Right Override</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>R</b></td>
-
- <td VALIGN="TOP">Right-to-Left</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>AL</b></td>
-
- <td VALIGN="TOP">Right-to-Left Arabic</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>RLE</b></td>
-
- <td VALIGN="TOP">Right-to-Left Embedding</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>RLO</b></td>
-
- <td VALIGN="TOP">Right-to-Left Override</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>PDF</b></td>
-
- <td VALIGN="TOP">Pop Directional Format</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>EN</b></td>
-
- <td VALIGN="TOP">European Number</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>ES</b></td>
-
- <td VALIGN="TOP">European Number Separator</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>ET</b></td>
-
- <td VALIGN="TOP">European Number Terminator</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>AN</b></td>
-
- <td VALIGN="TOP">Arabic Number</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>CS</b></td>
-
- <td VALIGN="TOP">Common Number Separator</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>NSM</b></td>
-
- <td VALIGN="TOP">Non-Spacing Mark</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>BN</b></td>
-
- <td VALIGN="TOP">Boundary Neutral</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>B</b></td>
-
- <td VALIGN="TOP">Paragraph Separator</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>S</b></td>
-
- <td VALIGN="TOP">Segment Separator</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>WS</b></td>
-
- <td VALIGN="TOP">Whitespace</td>
-
- </tr>
-
- <tr>
-
- <td VALIGN="TOP"><b>ON</b></td>
-
- <td VALIGN="TOP">Other Neutrals</td>
-
- </tr>
-
-</table>
-
-
-
-<h3><a NAME="Character Decomposition"></a>Character Decomposition Mapping</h3>
-
-
-
-<p>The decomposition is a normative property of a character. The tags supplied with
-
-certain decomposition mappings generally indicate formatting information. Where no such
-
-tag is given, the mapping is designated as canonical. Conversely, the presence of a
-
-formatting tag also indicates that the mapping is a compatibility mapping and not a
-
-canonical mapping. In the absence of other formatting information in a compatibility
-
-mapping, the tag is used to distinguish it from canonical mappings.</p>
-
-
-
-<p>In some instances a canonical mapping or a compatibility mapping may consist of a
-
-single character. For a canonical mapping, this indicates that the character is a
-
-canonical equivalent of another single character. For a compatibility mapping, this
-
-indicates that the character is a compatibility equivalent of another single character.
-
-The compatibility formatting tags used are:</p>
-
-
-
-<table BORDER="0" CELLSPACING="2" CELLPADDING="0">
-
- <tr>
-
- <th>Tag</th>
-
- <th><p ALIGN="LEFT">Description</th>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;font&gt;&nbsp;&nbsp;</td>
-
- <td>A font variant (e.g. a blackletter form).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;noBreak&gt;&nbsp;&nbsp;</td>
-
- <td>A no-break version of a space or hyphen.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;initial&gt;&nbsp;&nbsp;</td>
-
- <td>An initial presentation form (Arabic).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;medial&gt;&nbsp;&nbsp;</td>
-
- <td>A medial presentation form (Arabic).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;final&gt;&nbsp;&nbsp;</td>
-
- <td>A final presentation form (Arabic).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;isolated&gt;&nbsp;&nbsp;</td>
-
- <td>An isolated presentation form (Arabic).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;circle&gt;&nbsp;&nbsp;</td>
-
- <td>An encircled form.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;super&gt;&nbsp;&nbsp;</td>
-
- <td>A superscript form.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;sub&gt;&nbsp;&nbsp;</td>
-
- <td>A subscript form.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;vertical&gt;&nbsp;&nbsp;</td>
-
- <td>A vertical layout presentation form.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;wide&gt;&nbsp;&nbsp;</td>
-
- <td>A wide (or zenkaku) compatibility character.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;narrow&gt;&nbsp;&nbsp;</td>
-
- <td>A narrow (or hankaku) compatibility character.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;small&gt;&nbsp;&nbsp;</td>
-
- <td>A small variant form (CNS compatibility).</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;square&gt;&nbsp;&nbsp;</td>
-
- <td>A CJK squared font variant.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;fraction&gt;&nbsp;&nbsp;</td>
-
- <td>A vulgar fraction form.</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="CENTER">&lt;compat&gt;&nbsp;&nbsp;</td>
-
- <td>Otherwise unspecified compatibility character.</td>
-
- </tr>
-
-</table>
-
-
-
-<p><b>Reminder: </b>There is a difference between decomposition and decomposition mapping.
-
-The decomposition mappings are defined in the UnicodeData, while the decomposition (also
-
-termed &quot;full decomposition&quot;) is defined in Chapter 3 to use those mappings
-<i>
-
-recursively.</i>
-
-
-
-<ul>
-
- <li>The canonical decomposition is formed by recursively applying the canonical mappings,
-
- then applying the canonical reordering algorithm. </li>
-
- <li>The compatibility decomposition is formed by recursively applying the canonical <em>and</em>
-
- compatibility mappings, then applying the canonical reordering algorithm. </li>
-
-</ul>
-
-
-
-<h3><a NAME="Canonical Combining Classes"></a>Canonical Combining Classes</h3>
-
-
-
-<table BORDER="0" CELLSPACING="2" CELLPADDING="0">
-
- <tr>
-
- <th><p ALIGN="LEFT">Value</th>
-
- <th><p ALIGN="LEFT">Description</th>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">0:</td>
-
- <td>Spacing, split, enclosing, reordrant, and Tibetan subjoined</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">1:</td>
-
- <td>Overlays and interior</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">7:</td>
-
- <td>Nuktas</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">8:</td>
-
- <td>Hiragana/Katakana voicing marks</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">9:</td>
-
- <td>Viramas</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">10:</td>
-
- <td>Start of fixed position classes</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">199:</td>
-
- <td>End of fixed position classes</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">200:</td>
-
- <td>Below left attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">202:</td>
-
- <td>Below attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">204:</td>
-
- <td>Below right attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">208:</td>
-
- <td>Left attached (reordrant around single base character)</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">210:</td>
-
- <td>Right attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">212:</td>
-
- <td>Above left attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">214:</td>
-
- <td>Above attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">216:</td>
-
- <td>Above right attached</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">218:</td>
-
- <td>Below left</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">220:</td>
-
- <td>Below</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">222:</td>
-
- <td>Below right</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">224:</td>
-
- <td>Left (reordrant around single base character)</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">226:</td>
-
- <td>Right</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">228:</td>
-
- <td>Above left</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">230:</td>
-
- <td>Above</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">232:</td>
-
- <td>Above right</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">233:</td>
-
- <td>Double below</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">234:</td>
-
- <td>Double above</td>
-
- </tr>
-
- <tr>
-
- <td ALIGN="RIGHT">240:</td>
-
- <td>Below (iota subscript)</td>
-
- </tr>
-
-</table>
-
-
-
-<p><strong>Note: </strong>some of the combining classes in this list do not currently have
-
-members but are specified here for completeness.</p>
-
-
-
-<h3><a NAME="Decompositions and Normalization"></a>Decompositions and Normalization</h3>
-
-
-
-<p>Decomposition is specified in Chapter 3. <a href="http://www.unicode.org/unicode/reports/tr15/"><i>Unicode Technical Report #15:
-
-Normalization Forms</i></a> specifies the interaction between decomposition and normalization. The
-
-most up-to-date version is found on <a HREF="http://www.unicode.org/unicode/reports/tr15/">http://www.unicode.org/unicode/reports/tr15/</a>.
-
-That report specifies how the decompositions defined in UnicodeData.txt are used to derive
-
-normalized forms of Unicode text.</p>
-
-
-
-<p>Note that as of the 2.1.9 update of the Unicode Character Database, the decompositions
-
-in the UnicodeData.txt file can be used to recursively derive the full decomposition in
-
-canonical order, without the need to separately apply canonical reordering. However,
-
-canonical reordering of combining character sequences must still be applied in
-
-decomposition when normalizing source text which contains any combining marks.</p>
-
-
-
-<h3><a NAME="Case Mappings"></a>Case Mappings</h3>
-
-
-
-<p>The case mapping is an informative, default mapping. Case itself, on the other hand,
-
-has normative status. Thus, for example, 0041 LATIN CAPITAL LETTER A is normatively
-
-uppercase, but its lowercase mapping the 0061 LATIN SMALL LETTER A is informative. The
-
-reason for this is that case can be considered to be an inherent property of a particular
-
-character (and is usually, but not always, derivable from the presence of the terms
-
-&quot;CAPITAL&quot; or &quot;SMALL&quot; in the character name), but case mappings between
-
-characters are occasionally influenced by local conventions. For example, certain
-
-languages, such as Turkish, German, French, or Greek may have small deviations from the
-
-default mappings listed in UnicodeData.</p>
-
-
-
-<p>In addition to uppercase and lowercase, because of the inclusion of certain composite
-
-characters for compatibility, such as 01F1 LATIN CAPITAL LETTER DZ, there is a third case,
-
-called <i>titlecase</i>, which is used where the first letter of a word is to be
-
-capitalized (e.g. UPPERCASE, Titlecase, lowercase). An example of such a titlecase letter
-
-is 01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z.</p>
-
-
-
-<p>The uppercase, titlecase and lowercase fields are only included for characters that
-
-have a single corresponding character of that type. Composite characters (such as
-
-&quot;339D SQUARE CM&quot;) that do not have a single corresponding character of that type
-
-can be cased by decomposition.</p>
-
-
-
-<p>For compatibility with existing parsers, UnicodeData only contains case mappings for
-
-characters where they are one-to-one mappings; it also omits information about
-
-context-sensitive case mappings. Information about these special cases can be found in a
-
-separate data file, SpecialCasing.txt,
-
-which has been added starting with the 2.1.8 update to the Unicode data files.
-
-SpecialCasing.txt contains additional informative case mappings that are either not
-
-one-to-one or which are context-sensitive.</p>
-
-
-
-<h2><a NAME="Property Invariants"></a>Property Invariants</h2>
-
-
-
-<p>Values in UnicodeData.txt are subject to correction as errors are found; however, some
-
-characteristics of the categories themselves can be considered invariants. Applications
-
-may wish to take these invariants into account when choosing how to implement character
-
-properties. The following is a partial list of known invariants for the Unicode Character
-
-Database.</p>
-
-
-
-<h4>Database Fields</h4>
-
-
-
-<ul>
-
- <li>The number of fields in UnicodeData.txt is fixed. </li>
-
- <li>The order of the fields is also fixed. <ul>
-
- <li>Any additional information about character properties to be added in the future will
-
- appear in separate data tables, rather than being added on to the existing table or by
-
- subdivision or reinterpretation of existing fields. </li>
-
- </ul>
-
- </li>
-
-</ul>
-
-
-
-<h4>General Category</h4>
-
-
-
-<ul>
-
- <li>There will never be more than 32 General Category values. <ul>
-
- <li>It is very unlikely that the Unicode Technical Committee will subdivide the General
-
- Category partition any further, since that can cause implementations to misbehave. Because
-
- the General Category is limited to 32 values, 5 bits can be used to represent the
-
- information, and a 32-bit integer can be used as a bitmask to represent arbitrary sets of
-
- categories. </li>
-
- </ul>
-
- </li>
-
-</ul>
-
-
-
-<h4>Combining Classes</h4>
-
-
-
-<ul>
-
- <li>Combining classes are limited to the values 0 to 255. <ul>
-
- <li>In practice, there are far fewer than 256 values used. Implementations may take
-
- advantage of this fact for compression, since only the ordering of the non-zero values
-
- matters for the Canonical Reordering Algorithm. It is possible for up to 256 values to be
-
- used in the future; however, UTC decisions in the future may restrict the number of values
-
- to 128, since this has implementation advantages. [Signed bytes can be used without
-
- widening to ints in Java, for example.] </li>
-
- </ul>
-
- </li>
-
- <li>All characters other than those of General Category M* have the combining class 0. <ul>
-
- <li>Currently, all characters other than those of General Category Mn have the value 0.
-
- However, some characters of General Category Me or Mc may be given non-zero values in the
-
- future. </li>
-
- <li>The precise values above the value 0 are not invariant--only the relative ordering is
-
- considered normative. For example, it is not guaranteed in future versions that the class
-
- of U+05B4 will be precisely 14. </li>
-
- </ul>
-
- </li>
-
-</ul>
-
-
-
-<h4>Case</h4>
-
-
-
-<ul>
-
- <li>Characters of type Lu, Lt, or Ll are called <i>cased</i>. All characters with an Upper,
-
- Lower, or Titlecase mapping are cased characters. <ul>
-
- <li>However, characters with the General Categories of Lu, Ll, or Lt may not always have
-
- case mappings, and case mappings may vary by locale. (See
-
- ftp://ftp.unicode.org/Public/UNIDATA/SpecialCasing.txt). </li>
-
- </ul>
-
- </li>
-
-</ul>
-
-
-
-<h4>Canonical Decomposition</h4>
-
-
-
-<ul>
-
- <li>Canonical mappings are always in canonical order. </li>
-
- <li>Canonical mappings have only the first of a pair possibly further decomposing. </li>
-
- <li>Canonical decompositions are &quot;transparent&quot; to other character data: <ul>
-
- <li><tt>BIDI(a) = BIDI(principal(canonicalDecomposition(a))</tt> </li>
-
- <li><tt>Category(a) = Category(principal(canonicalDecomposition(a))</tt> </li>
-
- <li><tt>CombiningClass(a) = CombiningClass(principal(canonicalDecomposition(a))</tt><br>
-
- where principal(a) is the first character not of type Mn, or the first character if all
-
- characters are of type Mn. </li>
-
- </ul>
-
- </li>
-
- <li>However, because there are sometimes missing case pairs, and because of some legacy
-
- characters, it is only generally true that: <ul>
-
- <li><tt>upper(canonicalDecomposition(a)) = canonicalDecomposition(upper(a))</tt> </li>
-
- <li><tt>lower(canonicalDecomposition(a)) = canonicalDecomposition(lower(a))</tt> </li>
-
- <li><tt>title(canonicalDecomposition(a)) = canonicalDecomposition(title(a))</tt> </li>
-
- </ul>
-
- </li>
-
-</ul>
-
-
-
-<h2><a NAME="Modification History"></a>Modification History</h2>
-
-
-
-<p>This section provides a summary of the changes between update versions of the Unicode
-
-Standard.</p>
-
-
-
-<h3><a href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 3.0.0"> Unicode 3.0.0</a></h3>
-
-
-
-<p>Modifications made for Version 3.0.0 of UnicodeData.txt include many new characters and
-
-a number of property changes. These are summarized in Appendex D of <em>The Unicode
-
-Standard, Version 3.0.</em></p>
-
-
-
-<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.9">Unicode 2.1.9</a> </h3>
-
-
-
-<p>Modifications made for Version 2.1.9 of UnicodeData.txt include:
-
-
-
-<ul>
-
- <li>Corrected combining class for U+05AE HEBREW ACCENT ZINOR. </li>
-
- <li>Corrected combining class for U+20E1 COMBINING LEFT RIGHT ARROW ABOVE </li>
-
- <li>Corrected combining class for U+0F35 and U+0F37 to 220. </li>
-
- <li>Corrected combining class for U+0F71 to 129. </li>
-
- <li>Added a decomposition for U+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR. </li>
-
- <li>Added&nbsp; decompositions for several Greek symbol letters: U+03D0..U+03D2, U+03D5,
-
- U+03D6, U+03F0..U+03F2. </li>
-
- <li>Removed&nbsp; decompositions from the conjoining jamo block: U+1100..U+11F8. </li>
-
- <li>Changes to decomposition mappings for some Tibetan vowels for consistency in
-
- normalization. (U+0F71, U+0F73, U+0F77, U+0F79, U+0F81) </li>
-
- <li>Updated the decomposition mappings for several Vietnamese characters with two diacritics
-
- (U+1EAC, U+1EAD, U+1EB6, U+1EB7, U+1EC6, U+1EC7, U+1ED8, U+1ED9), so that the recursive
-
- decomposition can be generated directly in canonically reordered form (not a normative
-
- change). </li>
-
- <li>Updated the decomposition mappings for several Arabic compatibility characters involving
-
- shadda (U+FC5E..U+FC62, U+FCF2..U+FCF4), and two Latin characters (U+1E1C, U+1E1D), so
-
- that the decompositions are generated directly in canonically reordered form (not a
-
- normative change). </li>
-
- <li>Changed BIDI category for: U+00A0 NO-BREAK SPACE, U+2007 FIGURE SPACE, U+2028 LINE
-
- SEPARATOR. </li>
-
- <li>Changed BIDI category for extenders of General Category Lm: U+3005, U+3021..U+3035,
-
- U+FF9E, U+FF9F. </li>
-
- <li>Changed General Category and BIDI category for the Greek numeral signs: U+0374, U+0375. </li>
-
- <li>Corrected General Category for U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL. </li>
-
- <li>Added Unicode 1.0 names for many Tibetan characters (informative). </li>
-
-</ul>
-
-
-
-<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.8">Unicode 2.1.8</a> </h3>
-
-
-
-<p>Modifications made for Version 2.1.8 of UnicodeData.txt include:
-
-
-
-<ul>
-
- <li>Added combining class 240 for U+0345 COMBINING GREEK YPOGEGRAMMENI so that
-
- decompositions involving iota subscript are derivable directly in canonically reordered
-
- form; this also has a bearing on simplification of casing of polytonic Greek. </li>
-
- <li>Changes in decompositions related to Greek tonos. These result from the clarification
-
- that monotonic Greek &quot;tonos&quot; should be equated with U+0301 COMBINING ACUTE,
-
- rather than with U+030D COMBINING VERTICAL LINE ABOVE. (All Greek characters in the Greek
-
- block involving &quot;tonos&quot;; some Greek characters in the polytonic Greek in the
-
- 1FXX block.) </li>
-
- <li>Changed decompositions involving dialytika tonos. (U+0390, U+03B0) </li>
-
- <li>Changed ternary decompositions to binary. (U+0CCB, U+FB2C, U+FB2D) These changes
-
- simplify normalization. </li>
-
- <li>Removed canonical decomposition for Latin Candrabindu. (U+0310) </li>
-
- <li>Corrected error in canonical decomposition for U+1FF4. </li>
-
- <li>Added compatibility decompositions to clarify collation tables. (U+2100, U+2101, U+2105,
-
- U+2106, U+1E9A) </li>
-
- <li>A series of general category changes to assist the convergence of of Unicode definition
-
- of identifier with ISO TR 10176: <ul>
-
- <li>So &gt; Lo: U+0950, U+0AD0, U+0F00, U+0F88..U+0F8B </li>
-
- <li>Po &gt; Lo: U+0E2F, U+0EAF, U+3006 </li>
-
- <li>Lm &gt; Sk: U+309B, U+309C </li>
-
- <li>Po &gt; Pc: U+30FB, U+FF65 </li>
-
- <li>Ps/Pe &gt; Mn: U+0F3E, U+0F3F </li>
-
- </ul>
-
- </li>
-
- <li>A series of bidi property changes for consistency. <ul>
-
- <li>L &gt; ET: U+09F2, U+09F3 </li>
-
- <li>ON &gt; L: U+3007 </li>
-
- <li>L &gt; ON: U+0F3A..U+0F3D, U+037E, U+0387 </li>
-
- </ul>
-
- </li>
-
- <li>Add case mapping: U+01A6 &lt;-&gt; U+0280 </li>
-
- <li>Updated symmetric swapping value for guillemets: U+00AB, U+00BB, U+2039, U+203A. </li>
-
- <li>Changes to combining class values. Most Indic fixed position class non-spacing marks
-
- were changed to combining class 0. This fixes some inconsistencies in how canonical
-
- reordering would apply to Indic scripts, including Tibetan. Indic interacting top/bottom
-
- fixed position classes were merged into single (non-zero) classes as part of this change.
-
- Tibetan subjoined consonants are changed from combining class 6 to combining class 0. Thai
-
- pinthu (U+0E3A) moved to combining class 9. Moved two Devanagari stress marks into generic
-
- above and below combining classes (U+0951, U+0952). </li>
-
- <li>Corrected placement of semicolon near symmetric swapping field. (U+FA0E, etc., scattered
-
- positions to U+FA29) </li>
-
-</ul>
-
-
-
-<h3>Version 2.1.7</h3>
-
-
-
-<p><i>This version was for internal change tracking only, and never publicly released.</i></p>
-
-
-
-<h3>Version 2.1.6</h3>
-
-
-
-<p><i>This version was for internal change tracking only, and never publicly released.</i></p>
-
-
-
-<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.5">Unicode 2.1.5</a> </h3>
-
-
-
-<p>Modifications made for Version 2.1.5 of UnicodeData.txt include:
-
-
-
-<ul>
-
- <li>Changed decomposition for U+FF9E and U+FF9F so that correct collation weighting will
-
- automatically result from the canonical equivalences. </li>
-
- <li>Removed canonical decompositions for U+04D4, U+04D5, U+04D8, U+04D9, U+04E0, U+04E1,
-
- U+04E8, U+04E9 (the implication being that no canonical equivalence is claimed between
-
- these 8 characters and similar Latin letters), and updated 4 canonical decompositions for
-
- U+04DB, U+04DC, U+04EA, U+04EB to reflect the implied difference in the base character. </li>
-
- <li>Added Pi, and Pf categories and assigned the relevant quotation marks to those
-
- categories, based on the Unicode Technical Corrigendum on Quotation Characters. </li>
-
- <li>Updating of many bidi properties, following the advice of the ad hoc committee on bidi,
-
- and to make the bidi properties of compatibility characters more consistent. </li>
-
- <li>Changed category of several Tibetan characters: U+0F3E, U+0F3F, U+0F88..U+0F8B to make
-
- them non-combining, reflecting the combined opinion of Tibetan experts. </li>
-
- <li>Added case mapping for U+03F2. </li>
-
- <li>Corrected case mapping for U+0275. </li>
-
- <li>Added titlecase mappings for U+03D0, U+03D1, U+03D5, U+03D6, U+03F0.. U+03F2. </li>
-
- <li>Corrected compatibility label for U+2121. </li>
-
- <li>Add specific entries for all the CJK compatibility ideographs, U+F900..U+FA2D, so the
-
- canonical decomposition for each (the URO character it is equivalent to) can be carried in
-
- the database. </li>
-
-</ul>
-
-
-
-<h3>Version 2.1.4</h3>
-
-
-
-<p><i>This version was for internal change tracking only, and never publicly released.</i></p>
-
-
-
-<h3>Version 2.1.3</h3>
-
-
-
-<p><i>This version was for internal change tracking only, and never publicly released.</i></p>
-
-
-
-<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.2">Unicode 2.1.2</a> </h3>
-
-
-
-<p>Modifications made in updating UnicodeData.txt to Version 2.1.2 for the Unicode
-
-Standard, Version 2.1 (from Version 2.0) include:
-
-
-
-<ul>
-
- <li>Added two characters (U+20AC and U+FFFC). </li>
-
- <li>Amended bidi properties for U+0026, U+002E, U+0040, U+2007. </li>
-
- <li>Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275, U+03C2, U+1E9B. </li>
-
- <li>Changed combining order class for U+0F71. </li>
-
- <li>Corrected canonical decompositions for U+0F73, U+1FBE. </li>
-
- <li>Changed decomposition for U+FB1F from compatibility to canonical. </li>
-
- <li>Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB. </li>
-
- <li>Corrected compatibility decompositions for U+2469, U+246A, U+3358. </li>
-
-</ul>
-
-
-
-<h3>Version 2.1.1</h3>
-
-
-
-<p><i>This version was for internal change tracking only, and never publicly released.</i></p>
-
-
-
-<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.0.0">Unicode 2.0.0</a> </h3>
-
-
-
-<p>The modifications made in updating UnicodeData.txt for the Unicode
-
-Standard, Version 2.0 include:
-
-
-
-<ul>
-
- <li>Fixed decompositions with TONOS to use correct NSM: 030D. </li>
-
- <li>Removed old Hangul Syllables; mapping to new characters are in a separate table. </li>
-
- <li>Marked compatibility decompositions with additional tags. </li>
-
- <li>Changed old tag names for clarity. </li>
-
- <li>Revision of decompositions to use first-level decomposition, instead of maximal
-
- decomposition. </li>
-
- <li>Correction of all known errors in decompositions from earlier versions. </li>
-
- <li>Added control code names (as old Unicode names). </li>
-
- <li>Added Hangul Jamo decompositions. </li>
-
- <li>Added Number category to match properties list in book. </li>
-
- <li>Fixed categories of Koranic Arabic marks. </li>
-
- <li>Fixed categories of precomposed characters to match decomposition where possible. </li>
-
- <li>Added Hebrew cantillation marks and the Tibetan script. </li>
-
- <li>Added place holders for ranges such as CJK Ideographic Area and the Private Use Area. </li>
-
- <li>Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of mistakes in the
-
- database. </li>
-
-</ul>
-
-</body>
-
-</html>
-
diff --git a/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt b/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt
deleted file mode 100644
index 6a54d3d..0000000
--- a/libjava/classpath/doc/unicode/UnicodeData-3.0.0.txt
+++ /dev/null
@@ -1,10617 +0,0 @@
-0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
-0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
-0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
-0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
-0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
-0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
-0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
-0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
-0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
-0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
-000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
-000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
-000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
-000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
-000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
-000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
-0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
-0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
-0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
-0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
-0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
-0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
-0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
-0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
-0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
-0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
-001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
-001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
-001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
-001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
-001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
-001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
-0020;SPACE;Zs;0;WS;;;;;N;;;;;
-0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
-0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
-0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
-0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
-0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
-0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
-0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
-002A;ASTERISK;Po;0;ON;;;;;N;;;;;
-002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-002C;COMMA;Po;0;CS;;;;;N;;;;;
-002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
-002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
-002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
-0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
-0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
-0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
-0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
-0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
-0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
-0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
-0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
-0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
-0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
-003A;COLON;Po;0;CS;;;;;N;;;;;
-003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
-003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
-003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
-0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
-0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
-0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
-0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
-0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
-0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
-0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
-0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
-0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
-0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
-004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
-004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
-004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
-004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
-004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
-004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
-0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
-0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
-0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
-0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
-0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
-0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
-0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
-0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
-0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
-0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
-005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
-005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
-005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
-005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
-005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
-005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
-0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
-0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
-0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
-0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
-0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
-0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
-0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
-0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
-0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
-0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
-006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
-006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
-006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
-006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
-006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
-006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
-0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
-0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
-0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
-0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
-0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
-0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
-0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
-0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
-0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
-0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
-007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
-007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
-007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
-007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
-007E;TILDE;Sm;0;ON;;;;;N;;;;;
-007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
-0080;<control>;Cc;0;BN;;;;;N;;;;;
-0081;<control>;Cc;0;BN;;;;;N;;;;;
-0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
-0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
-0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
-0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
-0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
-0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
-0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
-0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
-008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
-008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
-008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
-008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
-008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
-008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
-0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
-0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
-0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
-0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
-0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
-0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
-0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
-0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
-0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
-0099;<control>;Cc;0;BN;;;;;N;;;;;
-009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
-009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
-009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
-009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
-009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
-009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
-00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
-00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
-00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
-00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
-00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
-00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
-00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
-00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
-00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
-00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
-00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
-00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
-00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
-00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
-00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
-00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
-00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
-00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
-00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
-00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
-00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
-00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
-00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
-00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
-00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
-00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
-00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
-00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
-00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
-00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
-00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
-00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
-00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
-00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
-00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
-00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
-00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
-00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
-00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
-00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
-00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
-00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
-00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
-00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
-00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
-00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
-00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
-00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
-00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
-00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
-00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
-00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
-00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
-00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
-00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
-00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
-00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
-00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
-00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
-00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
-00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
-00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
-00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
-00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
-00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
-00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
-00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
-00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
-00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
-00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
-00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
-00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
-00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
-00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
-00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
-00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
-00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
-00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
-00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
-00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
-00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
-00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
-00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
-00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
-00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
-00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
-00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
-00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
-00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
-00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
-00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
-00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
-0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
-0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
-0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
-0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
-0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
-0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
-0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
-0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
-0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
-0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
-010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
-010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
-010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
-010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
-010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
-010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
-0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
-0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
-0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
-0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
-0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
-0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
-0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
-0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
-0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
-0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
-011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
-011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
-011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
-011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
-011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
-011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
-0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
-0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
-0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
-0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
-0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
-0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
-0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
-0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
-0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
-0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
-012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
-012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
-012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
-012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
-012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
-012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
-0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
-0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
-0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
-0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
-0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
-0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
-0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
-0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
-0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
-0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
-013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
-013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
-013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
-013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
-013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
-013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
-0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
-0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
-0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
-0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
-0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
-0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
-0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
-0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
-0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
-0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
-014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
-014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
-014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
-014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
-014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
-014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
-0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
-0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
-0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
-0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
-0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
-0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
-0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
-0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
-0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
-0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
-015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
-015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
-015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
-015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
-015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
-015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
-0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
-0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
-0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
-0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
-0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
-0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
-0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
-0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
-0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
-0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
-016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
-016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
-016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
-016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
-016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
-016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
-0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
-0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
-0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
-0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
-0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
-0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
-0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
-0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
-0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
-0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
-017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
-017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
-017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
-017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
-017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
-017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
-0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
-0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
-0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
-0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
-0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
-0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
-0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
-0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
-0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
-0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
-018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
-018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
-018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
-018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
-018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
-018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
-0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
-0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
-0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
-0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
-0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
-0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
-0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
-0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
-0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
-0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
-019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
-019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
-019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
-019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
-019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
-019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
-01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
-01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
-01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
-01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
-01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
-01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
-01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
-01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
-01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
-01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
-01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
-01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
-01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
-01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
-01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
-01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
-01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
-01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
-01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
-01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
-01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
-01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
-01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
-01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
-01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
-01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
-01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
-01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
-01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
-01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
-01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
-01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
-01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
-01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
-01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
-01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
-01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
-01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
-01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
-01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
-01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
-01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
-01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
-01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
-01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
-01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
-01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
-01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
-01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
-01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
-01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
-01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
-01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
-01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
-01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
-01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
-01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
-01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
-01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
-01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
-01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
-01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
-01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
-01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
-01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
-01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
-01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
-01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
-01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
-01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
-01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
-01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
-01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
-01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
-01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
-01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
-01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
-01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
-01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
-01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
-01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
-01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
-01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
-01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
-01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
-01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
-01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
-01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
-01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
-01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
-01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
-01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
-01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
-01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
-01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
-01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
-0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
-0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
-0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
-0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
-0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
-0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
-0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
-0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
-0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
-0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
-020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
-020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
-020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
-020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
-020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
-020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
-0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
-0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
-0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
-0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
-0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
-0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
-0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
-0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
-0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
-0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
-021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
-021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
-021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
-021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
-021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
-021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
-0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
-0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
-0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
-0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
-0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
-0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
-0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
-0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
-022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
-022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
-022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
-022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
-022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
-022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
-0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
-0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
-0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
-0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
-0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
-0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
-0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
-0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
-0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
-0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
-0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
-0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
-0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
-0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
-025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
-025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
-025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
-025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
-025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
-025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
-0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
-0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
-0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
-0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
-0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
-0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
-0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
-0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
-0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
-0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
-026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
-026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
-026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
-026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
-026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
-026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
-0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
-0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
-0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
-0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
-0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
-0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
-0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
-0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
-0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
-027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
-027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
-027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
-027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
-0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
-0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
-0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
-0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
-0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
-0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
-0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
-0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
-0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
-0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
-028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
-028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
-028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
-028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
-028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
-028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
-0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
-0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
-0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
-0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
-0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
-0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
-0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
-0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
-029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
-029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
-029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
-029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
-029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
-029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
-02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
-02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
-02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
-02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
-02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
-02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
-02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
-02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
-02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
-02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
-02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
-02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
-02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
-02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
-02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
-02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
-02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
-02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
-02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
-02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
-02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
-02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
-02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
-02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
-02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
-02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
-02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
-02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
-02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
-02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
-02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
-02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
-02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
-02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
-02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
-02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
-02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
-02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
-02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
-02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
-02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
-02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
-02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
-02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
-02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
-02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
-02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
-02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
-02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
-02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
-02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
-02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
-02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
-02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
-0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
-0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
-0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
-0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
-0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
-0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
-0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
-0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
-0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
-0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
-030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
-030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
-030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
-030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
-030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
-030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
-0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
-0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
-0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
-0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
-0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
-0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
-0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
-0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
-0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
-0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
-031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
-031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
-031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
-031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
-031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
-031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
-0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
-0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
-0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
-0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
-0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
-0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
-0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
-0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
-0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
-0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
-032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
-032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
-032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
-032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
-032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
-032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
-0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
-0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
-0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
-0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
-0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
-0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
-0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
-0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
-0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
-0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
-033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
-033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
-033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
-033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
-033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
-033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
-0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
-0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
-0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
-0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
-0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
-0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
-0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
-0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
-034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
-034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
-034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
-034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
-0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
-0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
-0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
-0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
-037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
-037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
-0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
-0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
-0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
-0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
-0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
-0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
-038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
-038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
-038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
-038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
-0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
-0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
-0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
-0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
-0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
-0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
-0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
-0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
-0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
-0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
-039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
-039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
-039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
-039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
-039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
-039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
-03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
-03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
-03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
-03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
-03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
-03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
-03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
-03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
-03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
-03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
-03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
-03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
-03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
-03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
-03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
-03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
-03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
-03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
-03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
-03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
-03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
-03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
-03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
-03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
-03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
-03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
-03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
-03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
-03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
-03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
-03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
-03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
-03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
-03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
-03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
-03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
-03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
-03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
-03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
-03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
-03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
-03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
-03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
-03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
-03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
-03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
-03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
-03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
-03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
-03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
-03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
-03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
-03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
-03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
-03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
-03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
-03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
-03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
-03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
-03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
-03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
-03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
-03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
-03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
-03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
-03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
-03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
-03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
-03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
-03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
-03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
-03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
-03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
-03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
-03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
-03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
-03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
-03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
-0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
-0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
-0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
-0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
-0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
-0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
-0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
-0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
-0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
-0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
-040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
-040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
-040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
-040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
-040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
-040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
-0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
-0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
-0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
-0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
-0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
-0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
-0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
-0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
-0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
-0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
-041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
-041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
-041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
-041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
-041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
-041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
-0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
-0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
-0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
-0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
-0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
-0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
-0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
-0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
-0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
-0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
-042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
-042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
-042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
-042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
-042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
-042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
-0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
-0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
-0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
-0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
-0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
-0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
-0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
-0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
-0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
-0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
-043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
-043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
-043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
-043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
-043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
-043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
-0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
-0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
-0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
-0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
-0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
-0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
-0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
-0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
-0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
-0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
-044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
-044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
-044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
-044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
-044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
-044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
-0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
-0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
-0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
-0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
-0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
-0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
-0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
-0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
-0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
-0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
-045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
-045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
-045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
-045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
-045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
-045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
-0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
-0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
-0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
-0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
-0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
-0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
-0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
-0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
-0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
-0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
-046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
-046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
-046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
-046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
-046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
-046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
-0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
-0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
-0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
-0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
-0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
-0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
-0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
-0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
-0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
-0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
-047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
-047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
-047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
-047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
-047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
-047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
-0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
-0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
-0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
-0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
-0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
-0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
-0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
-0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
-0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
-048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
-048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
-048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
-048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
-0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
-0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
-0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
-0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
-0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
-0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
-0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
-0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
-0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
-0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
-049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
-049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
-049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
-049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
-049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
-049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
-04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
-04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
-04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
-04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
-04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
-04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
-04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
-04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
-04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
-04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
-04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
-04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
-04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
-04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
-04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
-04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
-04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
-04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
-04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
-04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
-04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
-04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
-04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
-04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
-04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
-04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
-04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
-04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
-04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
-04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
-04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
-04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
-04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
-04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
-04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
-04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
-04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
-04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
-04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
-04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
-04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
-04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
-04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
-04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
-04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
-04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
-04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
-04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
-04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
-04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
-04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
-04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
-04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
-04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
-04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
-04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
-04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
-04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
-04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
-04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
-04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
-04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
-04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
-04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
-04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
-04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
-04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
-04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
-04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
-04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
-04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
-04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
-04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
-04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
-04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
-04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
-04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
-04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
-04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
-04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
-04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
-0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
-0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
-0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
-0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
-0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
-0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
-0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
-0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
-0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
-053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
-053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
-053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
-053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
-053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
-053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
-0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
-0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
-0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
-0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
-0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
-0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
-0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
-0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
-0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
-0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
-054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
-054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
-054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
-054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
-054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
-054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
-0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
-0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
-0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
-0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
-0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
-0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
-0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
-0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
-055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
-055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
-055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
-055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
-055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
-0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
-0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
-0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
-0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
-0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
-0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
-0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
-0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
-0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
-056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
-056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
-056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
-056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
-056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
-056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
-0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
-0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
-0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
-0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
-0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
-0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
-0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
-0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
-0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
-0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
-057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
-057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
-057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
-057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
-057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
-057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
-0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
-0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
-0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
-0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
-0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
-0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
-0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
-0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
-0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
-058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
-0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
-0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
-0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
-0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
-0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
-0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
-0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
-0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
-0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
-059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
-059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
-059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
-059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
-059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
-059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
-05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
-05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
-05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
-05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
-05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
-05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
-05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
-05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
-05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
-05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
-05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
-05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
-05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
-05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
-05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
-05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
-05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
-05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
-05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
-05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
-05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
-05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
-05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
-05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
-05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
-05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
-05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
-05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
-05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
-05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
-05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
-05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
-05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
-05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
-05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
-05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
-05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
-05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
-05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
-05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
-05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
-05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
-05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
-05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
-05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
-05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
-05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
-05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
-05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
-05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
-05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
-05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
-05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
-05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
-05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
-05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
-05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
-05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
-05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
-05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
-05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
-05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
-05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
-05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
-05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
-05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
-05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
-060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
-061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
-061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
-0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
-0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
-0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
-0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
-0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
-0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
-0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
-0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
-0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
-062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
-062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
-062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
-062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
-062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
-062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
-0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
-0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
-0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
-0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
-0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
-0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
-0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
-0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
-0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
-063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
-0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
-0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
-0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
-0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
-0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
-0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
-0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
-0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
-0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
-064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
-064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
-064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
-064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
-064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
-064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
-0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
-0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
-0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
-0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
-0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
-0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
-0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
-0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
-0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
-0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
-0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
-0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
-0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
-0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
-0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
-066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
-066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
-066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
-0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
-0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
-0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
-0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
-0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
-0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
-0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
-0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
-0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
-0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
-067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
-067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
-067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
-067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
-067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
-067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
-0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
-0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
-0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
-0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
-0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
-0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
-0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
-0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
-0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
-0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
-068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
-068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
-068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
-068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
-068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
-0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
-0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
-0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
-0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
-0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
-0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
-0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
-0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
-0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
-069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
-06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
-06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
-06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
-06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
-06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
-06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
-06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
-06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
-06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
-06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
-06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
-06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
-06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
-06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
-06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
-06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
-06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
-06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
-06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
-06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
-06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
-06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
-06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
-06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
-06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
-06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
-06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
-06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
-06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
-06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
-06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
-06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
-06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
-06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
-06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
-06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
-06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
-06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
-06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
-06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
-06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
-06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
-06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
-06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
-06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
-06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
-06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
-06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
-06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
-06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
-06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
-06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
-06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
-06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
-06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
-06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
-06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
-06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
-06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
-06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
-06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
-06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
-06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
-06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
-06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
-06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
-06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
-06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
-06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
-06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
-06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
-06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
-06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
-06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
-0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
-0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
-0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
-0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
-0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
-070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
-070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
-070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
-070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
-0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
-0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
-0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
-0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
-0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
-0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
-0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
-0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
-0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
-071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
-071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
-071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
-071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
-071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
-0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
-0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
-0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
-0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
-0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
-0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
-0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
-0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
-0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
-0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
-072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
-072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
-072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
-0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
-0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
-073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
-073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
-0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
-0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
-0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
-0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
-074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
-0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
-0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
-0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
-0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
-0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
-0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
-0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
-0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
-078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
-078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
-078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
-078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
-078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
-078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
-0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
-0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
-0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
-0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
-0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
-0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
-0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
-0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
-0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
-079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
-079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
-079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
-079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
-079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
-079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
-07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
-07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
-07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
-07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
-07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
-07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
-07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
-07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
-07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
-07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
-07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
-07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
-07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
-07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
-07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
-07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
-07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
-0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
-0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
-0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
-0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
-0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
-090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
-090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
-090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
-090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
-0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
-0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
-0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
-0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
-0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
-0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
-0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
-0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
-091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
-091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
-091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
-091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
-091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
-091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
-0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
-0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
-0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
-0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
-092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
-092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
-092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
-092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
-092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
-092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
-0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
-0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
-0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
-0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
-0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
-0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
-0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
-093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
-0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
-094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
-0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
-0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
-0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
-0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
-095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
-095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
-095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
-095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
-095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
-095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
-0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
-0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
-0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
-0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
-0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
-0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
-0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
-0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
-098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
-098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
-0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
-0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
-0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
-0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
-0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
-0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
-099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
-099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
-099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
-099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
-099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
-099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
-09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
-09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
-09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
-09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
-09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
-09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
-09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
-09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
-09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
-09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
-09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
-09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
-09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
-09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
-09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
-09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
-09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
-09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
-09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
-09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
-09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
-09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
-09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
-09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
-09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
-09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
-09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
-09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
-09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
-09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
-09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
-09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
-09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
-09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
-09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
-0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
-0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
-0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
-0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
-0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
-0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
-0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
-0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
-0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
-0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
-0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
-0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
-0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
-0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
-0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
-0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
-0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
-0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
-0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
-0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
-0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
-0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
-0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
-0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
-0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
-0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
-0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
-0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
-0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
-0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
-0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
-0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
-0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
-0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
-0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
-0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
-0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
-0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
-0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
-0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
-0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
-0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
-0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
-0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
-0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
-0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
-0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
-0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
-0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
-0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
-0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
-0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
-0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
-0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
-0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
-0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
-0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
-0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
-0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
-0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
-0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
-0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
-0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
-0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
-0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
-0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
-0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
-0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
-0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
-0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
-0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
-0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
-0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
-0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
-0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
-0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
-0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
-0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
-0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
-0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
-0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
-0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
-0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
-0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
-0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
-0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
-0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
-0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
-0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
-0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
-0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
-0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
-0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
-0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
-0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
-0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
-0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
-0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
-0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
-0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
-0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
-0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
-0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
-0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
-0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
-0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
-0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
-0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
-0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
-0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
-0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
-0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
-0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
-0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
-0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
-0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
-0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
-0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
-0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
-0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
-0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
-0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
-0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
-0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
-0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
-0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
-0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
-0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
-0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
-0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
-0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
-0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
-0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
-0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
-0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
-0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
-0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
-0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
-0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
-0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
-0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
-0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
-0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
-0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
-0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
-0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
-0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
-0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
-0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
-0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
-0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
-0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
-0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
-0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
-0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
-0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
-0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
-0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
-0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
-0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
-0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
-0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
-0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
-0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
-0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
-0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
-0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
-0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
-0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
-0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
-0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
-0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
-0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
-0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
-0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
-0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
-0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
-0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
-0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
-0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
-0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
-0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
-0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
-0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
-0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
-0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
-0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
-0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
-0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
-0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
-0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
-0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
-0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
-0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
-0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
-0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
-0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
-0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
-0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
-0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
-0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
-0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
-0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
-0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
-0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
-0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
-0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
-0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
-0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
-0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
-0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
-0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
-0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
-0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
-0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
-0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
-0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
-0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
-0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
-0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
-0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
-0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
-0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
-0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
-0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
-0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
-0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
-0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
-0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
-0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
-0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
-0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
-0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
-0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
-0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
-0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
-0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
-0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
-0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
-0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
-0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
-0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
-0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
-0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
-0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
-0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
-0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
-0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
-0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
-0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
-0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
-0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
-0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
-0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
-0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
-0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
-0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
-0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
-0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
-0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
-0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
-0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
-0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
-0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
-0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
-0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
-0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
-0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
-0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
-0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
-0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
-0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
-0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
-0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
-0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
-0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
-0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
-0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
-0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
-0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
-0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
-0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
-0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
-0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
-0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
-0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
-0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
-0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
-0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
-0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
-0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
-0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
-0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
-0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
-0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
-0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
-0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
-0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
-0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
-0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
-0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
-0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
-0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
-0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
-0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
-0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
-0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
-0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
-0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
-0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
-0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
-0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
-0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
-0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
-0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
-0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
-0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
-0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
-0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
-0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
-0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
-0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
-0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
-0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
-0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
-0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
-0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
-0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
-0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
-0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
-0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
-0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
-0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
-0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
-0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
-0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
-0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
-0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
-0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
-0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
-0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
-0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
-0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
-0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
-0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
-0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
-0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
-0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
-0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
-0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
-0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
-0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
-0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
-0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
-0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
-0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
-0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
-0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
-0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
-0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
-0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
-0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
-0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
-0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
-0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
-0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
-0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
-0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
-0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
-0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
-0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
-0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
-0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
-0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
-0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
-0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
-0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
-0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
-0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
-0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
-0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
-0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
-0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
-0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
-0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
-0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
-0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
-0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
-0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
-0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
-0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
-0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
-0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
-0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
-0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
-0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
-0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
-0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
-0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
-0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
-0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
-0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
-0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
-0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
-0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
-0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
-0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
-0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
-0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
-0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
-0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
-0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
-0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
-0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
-0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
-0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
-0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
-0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
-0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
-0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
-0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
-0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
-0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
-0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
-0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
-0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
-0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
-0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
-0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
-0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
-0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
-0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
-0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
-0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
-0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
-0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
-0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
-0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
-0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
-0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
-0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
-0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
-0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
-0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
-0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
-0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
-0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
-0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
-0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
-0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
-0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
-0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
-0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
-0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
-0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
-0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
-0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
-0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
-0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
-0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
-0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
-0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
-0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
-0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
-0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
-0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
-0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
-0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
-0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
-0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
-0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
-0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
-0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
-0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
-0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
-0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
-0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
-0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
-0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
-0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
-0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
-0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
-0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
-0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
-0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
-0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
-0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
-0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
-0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
-0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
-0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
-0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
-0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
-0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
-0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
-0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
-0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
-0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
-0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
-0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
-0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
-0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
-0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
-0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
-0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
-0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
-0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
-0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
-0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
-0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
-0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
-0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
-0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
-0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
-0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
-0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
-0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
-0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
-0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
-0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
-0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
-0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
-0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
-0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
-0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
-0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
-0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
-0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
-0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
-0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
-0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
-0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
-0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
-0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
-0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
-0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
-0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
-0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
-0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
-0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
-0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
-0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
-0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
-0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
-0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
-0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
-0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
-0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
-0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
-0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
-0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
-0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
-0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
-0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
-0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
-0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
-0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
-0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
-0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
-0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
-0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
-0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
-0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
-0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
-0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
-0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
-0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
-0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
-0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
-0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
-0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
-0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
-0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
-0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
-0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
-0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
-0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
-0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
-0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
-0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
-0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
-0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
-0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
-0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
-0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
-0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
-0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
-0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
-0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
-0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
-0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
-0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
-0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
-0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
-1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
-1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
-1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
-1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
-1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
-1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
-1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
-1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
-1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
-1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
-100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
-100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
-100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
-100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
-100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
-100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
-1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
-1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
-1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
-1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
-1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
-1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
-1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
-1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
-1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
-1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
-101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
-101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
-101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
-101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
-101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
-101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
-1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
-1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
-1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
-1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
-1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
-1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
-1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
-1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
-102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
-102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
-1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
-104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
-104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
-104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
-104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
-104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
-1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
-1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
-1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
-10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
-10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
-10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
-10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
-1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
-1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
-1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
-110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
-110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
-1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
-1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
-111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
-111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
-1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
-1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
-1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
-112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
-112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
-112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
-1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
-1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
-113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
-113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
-113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
-113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
-113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
-1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
-1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
-1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
-1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
-114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
-114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
-114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
-114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
-114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
-1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
-1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
-1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
-1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
-1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
-1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
-1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
-1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
-1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
-1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
-1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
-116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
-116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
-116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
-116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
-116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
-116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
-1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
-1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
-1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
-1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
-1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
-1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
-1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
-1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
-1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
-1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
-117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
-117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
-117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
-117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
-117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
-117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
-1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
-1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
-1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
-1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
-1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
-1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
-1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
-1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
-1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
-1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
-118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
-118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
-118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
-118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
-118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
-118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
-1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
-1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
-1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
-1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
-1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
-1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
-1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
-1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
-1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
-1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
-119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
-119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
-119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
-119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
-119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
-119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
-11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
-11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
-11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
-11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
-11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
-11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
-11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
-11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
-11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
-11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
-11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
-11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
-11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
-11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
-11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
-11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
-11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
-11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
-11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
-11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
-11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
-11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
-11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
-11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
-11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
-11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
-11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
-11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
-11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
-11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
-11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
-11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
-11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
-11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
-11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
-1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
-1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
-1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
-1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
-120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
-120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
-1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
-1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
-1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
-1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
-1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
-1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
-1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
-1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
-1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
-121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
-121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
-1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
-1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
-1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
-1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
-1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
-1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
-1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
-1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
-1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
-122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
-122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
-122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
-1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
-1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
-1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
-1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
-123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
-123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
-123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
-1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
-1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
-1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
-1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
-1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
-124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
-124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
-124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
-124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
-1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
-1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
-1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
-1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
-1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
-1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
-1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
-1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
-125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
-125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
-125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
-125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
-1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
-1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
-1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
-1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
-126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
-126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
-126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
-1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
-1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
-1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
-1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
-127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
-127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
-1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
-1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
-1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
-1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
-1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
-1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
-128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
-128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
-128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
-128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
-1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
-1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
-1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
-1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
-1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
-129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
-129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
-129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
-12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
-12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
-12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
-12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
-12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
-12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
-12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
-12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
-12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
-12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
-12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
-12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
-12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
-12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
-12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
-12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
-12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
-12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
-12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
-12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
-12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
-12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
-12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
-12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
-12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
-12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
-12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
-12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
-12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
-12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
-12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
-12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
-12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
-12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
-12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
-12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
-12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
-12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
-12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
-12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
-12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
-12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
-12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
-12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
-12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
-12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
-12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
-12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
-12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
-12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
-12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
-12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
-12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
-12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
-1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
-1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
-1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
-1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
-1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
-1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
-130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
-130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
-1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
-1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
-1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
-1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
-1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
-131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
-131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
-1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
-1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
-1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
-1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
-1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
-1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
-1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
-1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
-132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
-132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
-132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
-1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
-1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
-1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
-1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
-1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
-1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
-1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
-1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
-1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
-1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
-133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
-133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
-133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
-133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
-133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
-133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
-1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
-1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
-1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
-1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
-1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
-1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
-1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
-1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
-134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
-134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
-134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
-1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
-1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
-1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
-1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
-1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
-1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
-135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
-1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
-1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
-1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
-1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
-1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
-1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
-1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
-1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
-1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
-1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
-1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
-1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
-1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
-1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
-1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
-137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
-137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
-137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
-13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
-13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
-13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
-13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
-13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
-13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
-13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
-13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
-13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
-13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
-13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
-13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
-13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
-13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
-13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
-13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
-13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
-13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
-13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
-13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
-13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
-13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
-13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
-13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
-13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
-13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
-13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
-13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
-13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
-13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
-13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
-13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
-13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
-13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
-13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
-13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
-13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
-13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
-13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
-13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
-13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
-13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
-13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
-13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
-13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
-13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
-13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
-13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
-13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
-13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
-13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
-13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
-13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
-13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
-13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
-13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
-13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
-13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
-13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
-13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
-13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
-13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
-13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
-13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
-13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
-13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
-13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
-13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
-13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
-13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
-13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
-13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
-13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
-13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
-13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
-13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
-13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
-13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
-13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
-13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
-13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
-13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
-13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
-13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
-13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
-1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
-1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
-1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
-1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
-1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
-1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
-1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
-1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
-1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
-140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
-140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
-140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
-140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
-140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
-140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
-1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
-1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
-1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
-1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
-1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
-1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
-1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
-1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
-1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
-1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
-141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
-141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
-141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
-141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
-141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
-141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
-1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
-1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
-1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
-1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
-1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
-1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
-1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
-1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
-1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
-1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
-142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
-142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
-142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
-142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
-142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
-142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
-1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
-1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
-1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
-1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
-1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
-1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
-1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
-1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
-1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
-1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
-143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
-143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
-143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
-143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
-143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
-143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
-1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
-1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
-1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
-1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
-1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
-1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
-1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
-1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
-144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
-144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
-144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
-144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
-144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
-144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
-1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
-1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
-1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
-1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
-1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
-1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
-1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
-1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
-1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
-1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
-145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
-145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
-145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
-145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
-145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
-145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
-1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
-1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
-1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
-1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
-1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
-1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
-1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
-1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
-1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
-1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
-146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
-146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
-146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
-146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
-146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
-146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
-1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
-1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
-1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
-1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
-1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
-1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
-1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
-1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
-1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
-1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
-147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
-147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
-147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
-147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
-147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
-147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
-1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
-1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
-1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
-1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
-1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
-1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
-1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
-1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
-1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
-1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
-148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
-148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
-148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
-148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
-148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
-148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
-1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
-1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
-1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
-1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
-1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
-1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
-1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
-1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
-1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
-1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
-149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
-149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
-149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
-149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
-149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
-149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
-14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
-14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
-14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
-14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
-14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
-14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
-14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
-14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
-14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
-14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
-14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
-14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
-14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
-14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
-14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
-14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
-14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
-14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
-14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
-14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
-14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
-14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
-14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
-14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
-14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
-14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
-14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
-14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
-14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
-14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
-14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
-14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
-14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
-14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
-14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
-14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
-14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
-14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
-14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
-14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
-14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
-14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
-14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
-14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
-14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
-14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
-14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
-14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
-14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
-14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
-14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
-14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
-14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
-14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
-14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
-14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
-14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
-14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
-14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
-14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
-14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
-14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
-14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
-14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
-14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
-14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
-14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
-14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
-14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
-14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
-14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
-14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
-14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
-14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
-14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
-14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
-14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
-14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
-14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
-14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
-14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
-14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
-14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
-14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
-14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
-14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
-14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
-14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
-14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
-14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
-14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
-14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
-14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
-14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
-14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
-14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
-1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
-1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
-1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
-1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
-1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
-1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
-1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
-1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
-1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
-1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
-150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
-150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
-150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
-150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
-150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
-150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
-1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
-1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
-1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
-1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
-1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
-1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
-1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
-1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
-1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
-1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
-151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
-151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
-151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
-151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
-151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
-151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
-1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
-1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
-1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
-1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
-1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
-1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
-1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
-1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
-1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
-1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
-152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
-152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
-152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
-152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
-152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
-152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
-1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
-1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
-1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
-1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
-1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
-1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
-1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
-1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
-1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
-1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
-153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
-153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
-153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
-153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
-153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
-153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
-1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
-1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
-1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
-1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
-1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
-1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
-1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
-1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
-1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
-1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
-154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
-154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
-154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
-154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
-154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
-154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
-1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
-1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
-1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
-1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
-1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
-1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
-1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
-1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
-1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
-1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
-155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
-155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
-155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
-155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
-155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
-155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
-1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
-1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
-1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
-1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
-1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
-1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
-1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
-1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
-1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
-1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
-156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
-156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
-156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
-156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
-156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
-156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
-1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
-1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
-1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
-1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
-1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
-1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
-1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
-1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
-1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
-1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
-157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
-157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
-157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
-157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
-157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
-157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
-1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
-1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
-1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
-1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
-1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
-1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
-1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
-1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
-1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
-1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
-158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
-158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
-158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
-158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
-158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
-158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
-1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
-1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
-1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
-1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
-1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
-1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
-1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
-1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
-1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
-1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
-159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
-159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
-159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
-159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
-159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
-159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
-15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
-15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
-15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
-15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
-15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
-15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
-15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
-15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
-15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
-15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
-15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
-15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
-15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
-15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
-15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
-15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
-15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
-15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
-15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
-15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
-15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
-15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
-15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
-15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
-15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
-15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
-15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
-15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
-15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
-15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
-15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
-15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
-15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
-15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
-15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
-15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
-15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
-15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
-15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
-15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
-15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
-15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
-15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
-15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
-15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
-15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
-15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
-15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
-15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
-15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
-15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
-15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
-15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
-15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
-15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
-15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
-15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
-15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
-15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
-15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
-15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
-15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
-15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
-15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
-15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
-15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
-15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
-15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
-15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
-15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
-15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
-15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
-15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
-15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
-15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
-15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
-15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
-15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
-15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
-15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
-15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
-15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
-15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
-15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
-15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
-15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
-15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
-15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
-15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
-15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
-15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
-15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
-15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
-15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
-15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
-15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
-1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
-1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
-1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
-1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
-1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
-1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
-1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
-1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
-1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
-1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
-160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
-160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
-160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
-160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
-160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
-160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
-1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
-1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
-1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
-1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
-1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
-1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
-1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
-1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
-1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
-1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
-161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
-161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
-161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
-161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
-161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
-161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
-1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
-1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
-1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
-1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
-1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
-1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
-1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
-1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
-1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
-1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
-162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
-162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
-162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
-162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
-162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
-162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
-1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
-1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
-1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
-1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
-1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
-1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
-1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
-1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
-1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
-1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
-163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
-163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
-163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
-163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
-163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
-163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
-1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
-1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
-1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
-1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
-1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
-1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
-1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
-1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
-1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
-1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
-164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
-164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
-164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
-164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
-164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
-164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
-1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
-1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
-1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
-1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
-1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
-1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
-1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
-1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
-1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
-1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
-165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
-165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
-165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
-165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
-165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
-165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
-1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
-1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
-1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
-1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
-1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
-1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
-1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
-1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
-1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
-1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
-166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
-166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
-166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
-166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
-166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
-166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
-1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
-1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
-1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
-1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
-1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
-1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
-1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
-1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
-1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
-1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
-1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
-1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
-1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
-1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
-1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
-1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
-1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
-168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
-168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
-168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
-168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
-168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
-168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
-1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
-1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
-1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
-1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
-1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
-1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
-1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
-1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
-1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
-1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
-169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
-169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
-169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
-16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
-16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
-16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
-16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
-16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
-16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
-16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
-16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
-16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
-16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
-16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
-16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
-16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
-16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
-16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
-16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
-16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
-16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
-16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
-16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
-16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
-16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
-16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
-16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
-16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
-16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
-16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
-16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
-16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
-16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
-16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
-16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
-16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
-16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
-16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
-16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
-16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
-16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
-16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
-16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
-16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
-16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
-16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
-16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
-16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
-16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
-16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
-16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
-16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
-16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
-16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
-16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
-16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
-16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
-16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
-16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
-16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
-16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
-16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
-16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
-16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
-16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
-16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
-16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
-16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
-16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
-16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
-16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
-16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
-16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
-16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
-16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
-16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
-16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
-1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
-1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
-1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
-1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
-1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
-1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
-1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
-1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
-1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
-1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
-178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
-178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
-178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
-178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
-178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
-178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
-1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
-1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
-1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
-1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
-1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
-1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
-1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
-1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
-1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
-1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
-179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
-179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
-179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
-179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
-179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
-179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
-17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
-17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
-17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
-17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
-17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
-17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
-17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
-17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
-17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
-17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
-17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
-17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
-17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
-17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
-17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
-17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
-17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
-17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
-17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
-17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
-17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
-17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
-17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
-17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
-17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
-17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
-17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
-17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
-17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
-17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
-17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
-17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
-17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
-17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
-17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
-17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
-17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
-17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
-17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
-17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
-17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
-17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
-17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
-17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
-17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
-17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
-17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
-17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
-17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
-17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
-17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
-17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
-1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
-1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
-1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
-1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
-1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
-1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
-1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
-1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
-180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
-180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
-180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
-180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
-180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
-1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
-1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
-1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
-1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
-1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
-1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
-1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
-1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
-1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
-1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
-182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
-182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
-182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
-182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
-182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
-182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
-1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
-1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
-1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
-1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
-1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
-1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
-1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
-1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
-183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
-183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
-183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
-1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
-1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
-1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
-1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
-1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
-1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
-1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
-1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
-1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
-1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
-184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
-184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
-184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
-184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
-184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
-184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
-1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
-1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
-1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
-1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
-1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
-1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
-1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
-1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
-1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
-1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
-185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
-185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
-185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
-185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
-185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
-185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
-1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
-1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
-1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
-1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
-1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
-1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
-1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
-1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
-1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
-1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
-186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
-186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
-186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
-186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
-186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
-186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
-1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
-1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
-1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
-1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
-1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
-1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
-1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
-1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
-1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
-1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
-1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
-1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
-1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
-1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
-1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
-1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
-1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
-1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
-188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
-188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
-188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
-188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
-1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
-1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
-1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
-1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
-1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
-189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
-189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
-189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
-18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
-18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
-18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
-18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
-18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
-18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
-18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
-1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
-1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
-1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
-1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
-1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
-1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
-1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
-1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
-1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
-1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
-1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
-1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
-1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
-1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
-1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
-1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
-1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
-1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
-1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
-1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
-1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
-1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
-1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
-1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
-1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
-1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
-1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
-1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
-1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
-1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
-1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
-1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
-1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
-1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
-1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
-1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
-1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
-1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
-1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
-1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
-1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
-1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
-1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
-1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
-1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
-1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
-1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
-1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
-1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
-1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
-1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
-1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
-1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
-1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
-1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
-1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
-1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
-1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
-1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
-1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
-1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
-1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
-1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
-1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
-1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
-1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
-1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
-1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
-1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
-1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
-1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
-1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
-1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
-1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
-1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
-1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
-1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
-1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
-1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
-1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
-1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
-1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
-1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
-1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
-1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
-1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
-1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
-1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
-1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
-1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
-1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
-1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
-1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
-1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
-1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
-1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
-1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
-1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
-1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
-1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
-1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
-1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
-1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
-1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
-1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
-1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
-1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
-1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
-1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
-1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
-1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
-1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
-1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
-1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
-1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
-1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
-1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
-1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
-1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
-1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
-1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
-1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
-1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
-1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
-1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
-1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
-1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
-1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
-1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
-1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
-1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
-1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
-1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
-1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
-1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
-1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
-1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
-1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
-1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
-1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
-1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
-1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
-1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
-1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
-1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
-1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
-1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
-1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
-1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
-1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
-1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
-1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
-1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
-1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
-1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
-1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
-1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
-1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
-1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
-1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
-1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
-1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
-1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
-1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
-1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
-1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
-1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
-1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
-1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
-1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
-1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
-1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
-1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
-1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
-1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
-1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
-1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
-1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
-1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
-1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
-1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
-1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
-1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
-1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
-1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
-1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
-1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
-1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
-1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
-1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
-1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
-1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
-1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
-1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
-1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
-1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
-1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
-1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
-1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
-1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
-1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
-1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
-1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
-1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
-1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
-1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
-1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
-1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
-1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
-1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
-1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
-1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
-1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
-1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
-1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
-1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
-1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
-1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
-1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
-1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
-1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
-1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
-1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
-1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
-1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
-1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
-1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
-1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
-1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
-1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
-1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
-1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
-1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
-1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
-1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
-1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
-1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
-1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
-1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
-1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
-1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
-1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
-1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
-1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
-1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
-1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
-1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
-1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
-1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
-1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
-1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
-1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
-1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
-1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
-1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
-1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
-1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
-1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
-1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
-1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
-1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
-1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
-1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
-1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
-1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
-1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
-1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
-1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
-1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
-1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
-1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
-1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
-1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
-1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
-1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
-1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
-1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
-1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
-1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
-1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
-1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
-1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
-1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
-1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
-1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
-1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
-1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
-1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
-1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
-1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
-1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
-1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
-1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
-1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
-1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
-1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
-1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
-1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
-1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
-1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
-1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
-1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
-1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
-1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
-1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
-1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
-1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
-1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
-1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
-1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
-1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
-1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
-1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
-1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
-1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
-1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
-1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
-1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
-1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
-1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
-1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
-1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
-1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
-1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
-1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
-1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
-1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
-1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
-1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
-1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
-1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
-1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
-1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
-1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
-1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
-1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
-1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
-1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
-1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
-1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
-1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
-1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
-1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
-1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
-1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
-1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
-1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
-1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
-1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
-1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
-1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
-1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
-1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
-1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
-1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
-1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
-1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
-1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
-1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
-1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
-1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
-1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
-1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
-1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
-1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
-1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
-1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
-1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
-1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
-1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
-1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
-1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
-1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
-1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
-1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
-1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
-1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
-1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
-1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
-1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
-1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
-1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
-1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
-1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
-1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
-1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
-1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
-1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
-1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
-1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
-1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
-1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
-1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
-1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
-1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
-1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
-1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
-1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
-1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
-1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
-1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
-1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
-1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
-1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
-1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
-1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
-1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
-1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
-1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
-1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
-1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
-1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
-1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
-1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
-1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
-1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
-1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
-1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
-1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
-1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
-1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
-1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
-1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
-1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
-1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
-1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
-1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
-1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
-1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
-1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
-1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
-1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
-1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
-1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
-1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
-1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
-1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
-1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
-1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
-1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
-1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
-1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
-1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
-1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
-1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
-1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
-1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
-1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
-1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
-1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
-1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
-1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
-1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
-1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
-1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
-1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
-1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
-1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
-1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
-1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
-1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
-1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
-1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
-1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
-1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
-1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
-1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
-1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
-1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
-1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
-1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
-1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
-1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
-1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
-1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
-1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
-1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
-2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
-2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
-2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
-200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
-200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
-200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
-200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
-2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
-2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
-2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
-2013;EN DASH;Pd;0;ON;;;;;N;;;;;
-2014;EM DASH;Pd;0;ON;;;;;N;;;;;
-2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
-2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
-2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
-2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
-2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
-201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
-201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
-201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
-201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
-201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
-201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
-2020;DAGGER;Po;0;ON;;;;;N;;;;;
-2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
-2022;BULLET;Po;0;ON;;;;;N;;;;;
-2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
-2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
-2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
-2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
-2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
-2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
-2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
-202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
-202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
-202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
-202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
-202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
-202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
-2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
-2032;PRIME;Po;0;ET;;;;;N;;;;;
-2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
-2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
-2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
-2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
-2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
-2038;CARET;Po;0;ON;;;;;N;;;;;
-2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
-203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
-203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
-203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
-203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
-203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
-203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
-2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
-2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
-2042;ASTERISM;Po;0;ON;;;;;N;;;;;
-2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
-2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
-2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
-2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
-2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
-2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
-204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
-204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
-204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
-2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
-2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
-2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
-2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
-2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
-2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
-207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
-207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
-207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
-207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
-207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
-207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
-2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
-2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
-2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
-2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
-2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
-2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
-2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
-2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
-2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
-2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
-208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
-208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
-208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
-208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
-208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
-20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
-20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
-20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
-20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
-20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
-20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
-20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
-20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
-20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
-20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
-20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
-20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
-20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
-20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
-20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
-20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
-20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
-20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
-20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
-20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
-20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
-20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
-20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
-20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
-20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
-20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
-20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
-20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
-20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
-20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
-20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
-20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
-20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
-2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
-2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
-2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
-2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
-2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
-2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
-2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
-2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
-2108;SCRUPLE;So;0;ON;;;;;N;;;;;
-2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
-210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
-210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
-210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
-210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
-210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
-2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
-2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
-2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
-2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
-2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
-2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
-2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
-2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
-2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
-211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
-211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
-211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
-211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
-211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
-211F;RESPONSE;So;0;ON;;;;;N;;;;;
-2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
-2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
-2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
-2123;VERSICLE;So;0;ON;;;;;N;;;;;
-2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
-2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
-2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
-2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
-2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
-2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
-212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
-212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
-212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
-212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
-212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
-212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
-2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
-2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
-2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
-2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
-2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
-2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
-2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
-2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
-213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
-2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
-2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
-2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
-2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
-2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
-2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
-2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
-215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
-215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
-215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
-215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
-215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
-215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
-2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
-2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
-2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
-2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
-2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
-2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
-2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
-2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
-2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
-2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
-216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
-216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
-216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
-216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
-216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
-216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
-2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
-2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
-2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
-2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
-2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
-2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
-2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
-2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
-2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
-2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
-217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
-217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
-217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
-217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
-217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
-217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
-2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
-2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
-2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
-2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
-2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
-2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
-2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
-2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
-2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
-2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
-2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
-2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
-2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
-2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
-219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
-219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
-219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
-219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
-219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
-219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
-21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
-21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
-21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
-21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
-21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
-21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
-21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
-21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
-21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
-21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
-21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
-21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
-21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
-21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
-21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
-21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
-21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
-21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
-21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
-21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
-21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
-21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
-21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
-21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
-21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
-21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
-21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
-21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
-21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
-21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
-21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
-21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
-21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
-21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
-21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
-21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
-21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
-21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
-21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
-21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
-21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
-21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
-21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
-21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
-21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
-21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
-21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
-21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
-21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
-21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
-21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
-21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
-21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
-21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
-21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
-21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
-21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
-21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
-21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
-21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
-21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
-21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
-21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
-21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
-21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
-21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
-21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
-21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
-21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
-21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
-21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
-21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
-21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
-2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
-2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
-2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
-2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
-2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
-2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
-2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
-2207;NABLA;Sm;0;ON;;;;;N;;;;;
-2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
-220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
-220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
-220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
-2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
-2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
-2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
-2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
-2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
-2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
-221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
-221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
-221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
-221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
-221E;INFINITY;Sm;0;ON;;;;;N;;;;;
-221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
-2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
-2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
-2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
-2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
-2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
-2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
-2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
-222A;UNION;Sm;0;ON;;;;;N;;;;;
-222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
-222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
-222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
-2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
-2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
-2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
-2236;RATIO;Sm;0;ON;;;;;N;;;;;
-2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
-2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
-2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
-223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
-223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
-223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
-223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
-223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
-2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
-2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
-2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
-2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
-2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
-224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
-224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
-2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
-2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
-2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
-2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
-2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
-225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
-225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
-225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
-225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
-225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
-225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
-2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
-2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
-2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
-2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
-2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
-2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
-2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
-2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
-226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
-226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
-226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
-226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
-226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
-226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
-2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
-2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
-2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
-2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
-2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
-2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
-2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
-2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
-2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
-2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
-227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
-227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
-2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
-2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
-2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
-2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
-2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
-2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
-2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
-228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
-228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
-228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
-228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
-228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
-228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
-2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
-2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
-2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
-2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
-2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
-229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
-229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
-229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
-22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
-22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
-22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
-22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
-22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
-22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
-22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
-22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
-22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
-22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
-22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
-22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
-22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
-22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
-22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
-22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
-22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
-22BB;XOR;Sm;0;ON;;;;;N;;;;;
-22BC;NAND;Sm;0;ON;;;;;N;;;;;
-22BD;NOR;Sm;0;ON;;;;;N;;;;;
-22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
-22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
-22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
-22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
-22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
-22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
-22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
-22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
-22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
-22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
-22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
-22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
-22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
-22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
-22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
-22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
-22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
-22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
-22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
-22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
-22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
-22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
-22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
-22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
-22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
-22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
-22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
-22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
-2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
-2302;HOUSE;So;0;ON;;;;;N;;;;;
-2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
-2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
-2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
-2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
-2307;WAVY LINE;So;0;ON;;;;;N;;;;;
-2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
-2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
-230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
-230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
-230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
-230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
-2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
-2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
-2312;ARC;So;0;ON;;;;;N;;;;;
-2313;SEGMENT;So;0;ON;;;;;N;;;;;
-2314;SECTOR;So;0;ON;;;;;N;;;;;
-2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
-2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
-2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
-2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
-2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
-231A;WATCH;So;0;ON;;;;;N;;;;;
-231B;HOURGLASS;So;0;ON;;;;;N;;;;;
-231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
-231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
-231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
-231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
-2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2322;FROWN;So;0;ON;;;;;N;;;;;
-2323;SMILE;So;0;ON;;;;;N;;;;;
-2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
-2325;OPTION KEY;So;0;ON;;;;;N;;;;;
-2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
-2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
-2328;KEYBOARD;So;0;ON;;;;;N;;;;;
-2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
-232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
-232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
-232C;BENZENE RING;So;0;ON;;;;;N;;;;;
-232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
-232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
-232F;SYMMETRY;So;0;ON;;;;;N;;;;;
-2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
-2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
-2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
-2333;SLOPE;So;0;ON;;;;;N;;;;;
-2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
-2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
-2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
-2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
-2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
-2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
-233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
-233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
-233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
-233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
-233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
-233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
-2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
-2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
-2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
-2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
-2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
-2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
-2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
-2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
-2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
-2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
-234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
-234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
-234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
-234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
-234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
-234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
-2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
-2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
-2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
-2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
-2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
-2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
-2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
-2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
-2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
-2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
-235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
-235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
-235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
-235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
-235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
-235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
-2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
-2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
-2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
-2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
-2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
-2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
-2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
-2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
-2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
-2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
-236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
-236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
-236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
-236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
-236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
-236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
-2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
-2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
-2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
-2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
-2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
-2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
-2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
-2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
-2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
-2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
-237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
-237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
-237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
-237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
-237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
-2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
-2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
-2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
-2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
-2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
-2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
-2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
-238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
-238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
-238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
-238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
-238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
-238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
-2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
-2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
-2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
-2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
-2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
-2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
-2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
-2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
-2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
-2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
-2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
-2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
-2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
-2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
-240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
-240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
-240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
-240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
-240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
-240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
-2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
-2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
-2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
-2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
-2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
-2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
-2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
-2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
-2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
-2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
-241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
-241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
-241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
-241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
-241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
-241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
-2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
-2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
-2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
-2423;OPEN BOX;So;0;ON;;;;;N;;;;;
-2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
-2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
-2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
-2440;OCR HOOK;So;0;ON;;;;;N;;;;;
-2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
-2442;OCR FORK;So;0;ON;;;;;N;;;;;
-2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
-2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
-2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
-2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
-2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
-2448;OCR DASH;So;0;ON;;;;;N;;;;;
-2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
-244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
-2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
-2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
-2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
-2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
-2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
-2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
-2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
-2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
-2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
-2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
-246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
-246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
-246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
-246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
-246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
-246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
-2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
-2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
-2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
-2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
-2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
-2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
-2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
-2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
-2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
-2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
-247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
-247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
-247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
-247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
-247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
-247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
-2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
-2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
-2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
-2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
-2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
-2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
-2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
-2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
-2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
-2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
-248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
-248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
-248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
-248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
-248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
-248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
-2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
-2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
-2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
-2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
-2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
-2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
-2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
-2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
-2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
-2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
-249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
-249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
-249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
-249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
-249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
-249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
-24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
-24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
-24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
-24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
-24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
-24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
-24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
-24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
-24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
-24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
-24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
-24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
-24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
-24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
-24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
-24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
-24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
-24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
-24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
-24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
-24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
-24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
-24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
-24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
-24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
-24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
-24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
-24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
-24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
-24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
-24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
-24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
-24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
-24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
-24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
-24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
-24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
-24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
-24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
-24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
-24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
-24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
-24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
-24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
-24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
-24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
-24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
-24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
-24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
-24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
-24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
-24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
-24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
-24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
-24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
-24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
-24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
-24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
-24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
-24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
-24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
-24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
-24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
-24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
-24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
-24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
-24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
-24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
-24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
-24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
-24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
-24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
-24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
-24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
-24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
-2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
-2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
-2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
-2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
-2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
-2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
-2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
-2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
-2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
-2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
-250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
-250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
-250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
-250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
-250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
-250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
-2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
-2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
-2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
-2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
-2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
-2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
-2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
-2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
-2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
-2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
-251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
-251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
-251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
-251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
-251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
-251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
-2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
-2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
-2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
-2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
-2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
-2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
-2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
-2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
-2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
-252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
-252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
-252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
-252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
-252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
-252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
-2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
-2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
-2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
-2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
-2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
-2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
-2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
-2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
-2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
-2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
-253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
-253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
-253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
-253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
-253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
-253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
-2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
-2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
-2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
-2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
-2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
-2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
-2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
-2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
-2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
-254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
-254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
-254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
-254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
-254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
-254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
-2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
-2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
-2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
-2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
-2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
-2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
-2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
-2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
-2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
-2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
-255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
-255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
-255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
-255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
-255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
-255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
-2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
-2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
-2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
-2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
-2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
-2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
-2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
-2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
-2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
-2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
-256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
-256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
-256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
-256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
-256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
-256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
-2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
-2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
-2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
-2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
-2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
-2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
-2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
-2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
-2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
-2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
-257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
-257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
-257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
-257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
-257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
-257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
-2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
-2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
-2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
-258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
-258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
-2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
-2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
-2593;DARK SHADE;So;0;ON;;;;;N;;;;;
-2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
-25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
-25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
-25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
-25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
-25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
-25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
-25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
-25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
-25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
-25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
-25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
-25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
-25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
-25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
-25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
-25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
-25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
-25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
-25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
-25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
-25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
-25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
-25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
-25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
-25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
-25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
-25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
-25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
-25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
-25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
-25C9;FISHEYE;So;0;ON;;;;;N;;;;;
-25CA;LOZENGE;So;0;ON;;;;;N;;;;;
-25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
-25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
-25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
-25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
-25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
-25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
-25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
-25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
-25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
-25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-2601;CLOUD;So;0;ON;;;;;N;;;;;
-2602;UMBRELLA;So;0;ON;;;;;N;;;;;
-2603;SNOWMAN;So;0;ON;;;;;N;;;;;
-2604;COMET;So;0;ON;;;;;N;;;;;
-2605;BLACK STAR;So;0;ON;;;;;N;;;;;
-2606;WHITE STAR;So;0;ON;;;;;N;;;;;
-2607;LIGHTNING;So;0;ON;;;;;N;;;;;
-2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
-2609;SUN;So;0;ON;;;;;N;;;;;
-260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
-260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
-260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
-260D;OPPOSITION;So;0;ON;;;;;N;;;;;
-260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
-260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
-2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
-2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
-2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
-2613;SALTIRE;So;0;ON;;;;;N;;;;;
-2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
-261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
-2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
-2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
-2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
-2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
-2624;CADUCEUS;So;0;ON;;;;;N;;;;;
-2625;ANKH;So;0;ON;;;;;N;;;;;
-2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
-2627;CHI RHO;So;0;ON;;;;;N;;;;;
-2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
-2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
-262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
-262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
-262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
-262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
-262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
-262F;YIN YANG;So;0;ON;;;;;N;;;;;
-2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
-2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
-2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
-2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
-2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
-2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
-2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
-2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
-2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
-263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
-263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
-263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263F;MERCURY;So;0;ON;;;;;N;;;;;
-2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
-2641;EARTH;So;0;ON;;;;;N;;;;;
-2642;MALE SIGN;So;0;ON;;;;;N;;;;;
-2643;JUPITER;So;0;ON;;;;;N;;;;;
-2644;SATURN;So;0;ON;;;;;N;;;;;
-2645;URANUS;So;0;ON;;;;;N;;;;;
-2646;NEPTUNE;So;0;ON;;;;;N;;;;;
-2647;PLUTO;So;0;ON;;;;;N;;;;;
-2648;ARIES;So;0;ON;;;;;N;;;;;
-2649;TAURUS;So;0;ON;;;;;N;;;;;
-264A;GEMINI;So;0;ON;;;;;N;;;;;
-264B;CANCER;So;0;ON;;;;;N;;;;;
-264C;LEO;So;0;ON;;;;;N;;;;;
-264D;VIRGO;So;0;ON;;;;;N;;;;;
-264E;LIBRA;So;0;ON;;;;;N;;;;;
-264F;SCORPIUS;So;0;ON;;;;;N;;;;;
-2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
-2651;CAPRICORN;So;0;ON;;;;;N;;;;;
-2652;AQUARIUS;So;0;ON;;;;;N;;;;;
-2653;PISCES;So;0;ON;;;;;N;;;;;
-2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
-2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
-2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
-2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
-2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
-265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
-265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
-265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
-265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
-265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
-2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
-2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
-2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
-2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
-2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
-2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
-2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
-2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
-266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
-266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
-266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
-266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
-266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
-266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
-2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
-2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
-2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
-2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
-2708;AIRPLANE;So;0;ON;;;;;N;;;;;
-2709;ENVELOPE;So;0;ON;;;;;N;;;;;
-270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
-270D;WRITING HAND;So;0;ON;;;;;N;;;;;
-270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-270F;PENCIL;So;0;ON;;;;;N;;;;;
-2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-2711;WHITE NIB;So;0;ON;;;;;N;;;;;
-2712;BLACK NIB;So;0;ON;;;;;N;;;;;
-2713;CHECK MARK;So;0;ON;;;;;N;;;;;
-2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2717;BALLOT X;So;0;ON;;;;;N;;;;;
-2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
-2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
-271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
-271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
-271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
-271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
-271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
-271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
-2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
-2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
-2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
-272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
-272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
-272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
-272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
-2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
-2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
-2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
-273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
-273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
-2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
-2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2747;SPARKLE;So;0;ON;;;;;N;;;;;
-2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
-2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
-2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
-2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
-2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
-2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
-2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
-2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
-2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
-2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
-2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
-277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
-277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
-277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
-277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
-277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
-277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
-2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
-2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
-2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
-2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
-2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
-2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
-2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
-2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
-278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
-278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
-278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
-278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
-278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
-278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
-2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
-2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
-2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
-2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
-2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
-279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
-279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
-279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
-279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
-279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
-279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
-27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
-27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
-27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
-27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
-27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
-27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
-27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
-27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
-27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
-27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
-27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
-27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
-27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
-27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
-27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
-27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
-27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
-27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
-2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
-2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
-2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
-2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
-2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
-2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
-2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
-2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
-2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
-2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
-280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
-280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
-280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
-280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
-280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
-280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
-2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
-2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
-2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
-2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
-2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
-2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
-2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
-2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
-2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
-2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
-281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
-281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
-281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
-281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
-281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
-281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
-2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
-2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
-2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
-2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
-2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
-2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
-2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
-2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
-2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
-2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
-282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
-282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
-282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
-282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
-282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
-282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
-2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
-2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
-2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
-2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
-2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
-2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
-2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
-2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
-2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
-2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
-283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
-283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
-283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
-283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
-283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
-283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
-2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
-2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
-2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
-2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
-2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
-2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
-2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
-2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
-2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
-2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
-284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
-284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
-284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
-284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
-284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
-284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
-2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
-2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
-2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
-2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
-2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
-2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
-2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
-2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
-2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
-2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
-285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
-285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
-285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
-285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
-285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
-285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
-2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
-2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
-2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
-2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
-2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
-2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
-2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
-2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
-2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
-2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
-286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
-286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
-286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
-286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
-286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
-286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
-2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
-2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
-2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
-2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
-2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
-2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
-2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
-2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
-2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
-2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
-287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
-287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
-287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
-287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
-287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
-287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
-2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
-2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
-2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
-2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
-2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
-2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
-2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
-2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
-2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
-2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
-288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
-288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
-288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
-288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
-288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
-288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
-2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
-2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
-2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
-2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
-2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
-2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
-2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
-2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
-2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
-2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
-289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
-289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
-289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
-289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
-289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
-289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
-28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
-28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
-28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
-28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
-28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
-28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
-28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
-28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
-28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
-28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
-28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
-28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
-28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
-28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
-28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
-28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
-28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
-28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
-28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
-28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
-28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
-28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
-28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
-28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
-28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
-28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
-28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
-28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
-28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
-28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
-28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
-28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
-28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
-28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
-28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
-28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
-28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
-28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
-28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
-28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
-28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
-28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
-28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
-28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
-28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
-28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
-28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
-28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
-28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
-28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
-28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
-28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
-28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
-28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
-28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
-28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
-28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
-28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
-28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
-28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
-28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
-28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
-28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
-28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
-28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
-28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
-28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
-28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
-28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
-28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
-28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
-28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
-28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
-28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
-28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
-28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
-28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
-28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
-28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
-28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
-28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
-28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
-28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
-28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
-28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
-28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
-28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
-28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
-28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
-28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
-28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
-28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
-28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
-28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
-28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
-28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
-2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
-2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
-2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
-2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
-2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
-2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
-2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
-2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
-2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
-2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
-2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
-2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
-2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
-2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
-2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
-2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
-2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
-2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
-2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
-2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
-2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
-2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
-2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
-2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
-2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
-2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
-2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
-2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
-2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
-2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
-2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
-2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
-2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
-2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
-2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
-2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
-2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
-2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
-2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
-2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
-2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
-2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
-2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
-2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
-2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
-2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
-2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
-2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
-2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
-2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
-2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
-2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
-2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
-2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
-2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
-2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
-2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
-2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
-2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
-2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
-2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
-2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
-2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
-2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
-2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
-2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
-2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
-2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
-2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
-2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
-2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
-2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
-2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
-2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
-2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
-2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
-2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
-2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
-2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
-2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
-2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
-2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
-2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
-2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
-2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
-2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
-2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
-2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
-2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
-2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
-2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
-2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
-2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
-2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
-2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
-2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
-2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
-2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
-2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
-2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
-2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
-2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
-2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
-2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
-2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
-2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
-2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
-2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
-2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
-2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
-2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
-2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
-2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
-2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
-2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
-2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
-2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
-2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
-2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
-2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
-2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
-2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
-2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
-2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
-2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
-2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
-2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
-2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
-2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
-2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
-2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
-2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
-2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
-2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
-2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
-2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
-2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
-2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
-2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
-2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
-2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
-2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
-2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
-2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
-2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
-2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
-2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
-2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
-2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
-2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
-2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
-2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
-2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
-2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
-2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
-2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
-2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
-2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
-2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
-2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
-2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
-2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
-2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
-2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
-2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
-2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
-2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
-2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
-2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
-2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
-2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
-2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
-2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
-2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
-2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
-2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
-2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
-2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
-2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
-2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
-2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
-2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
-2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
-2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
-2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
-2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
-2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
-2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
-2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
-2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
-2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
-2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
-2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
-2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
-2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
-2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
-2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
-2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
-2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
-2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
-2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
-2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
-2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
-2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
-2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
-2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
-2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
-2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
-2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
-2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
-2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
-2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
-2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
-2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
-2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
-2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
-2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
-2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
-2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
-2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
-2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
-2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
-2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
-2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
-2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
-2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
-2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
-2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
-2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
-2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
-2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
-2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
-2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
-2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
-2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
-2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
-2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
-2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
-2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
-2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
-2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
-2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
-2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
-2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
-2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
-2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
-2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
-2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
-2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
-2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
-2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
-2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
-2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
-2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
-2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
-2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
-2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
-2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
-2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
-2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
-2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
-2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
-2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
-2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
-2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
-2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
-2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
-2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
-2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
-2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
-2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
-2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
-2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
-2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
-2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
-2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
-2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
-2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
-2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
-2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
-2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
-2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
-2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
-2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
-2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
-2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
-2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
-2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
-2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
-2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
-2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
-2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
-2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
-2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
-2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
-2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
-2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
-2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
-2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
-2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
-2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
-2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
-2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
-2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
-2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
-2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
-2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
-2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
-2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
-2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
-2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
-2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
-2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
-2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
-2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
-2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
-2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
-2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
-2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
-2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
-2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
-2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
-2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
-2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
-2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
-2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
-2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
-2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
-2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
-2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
-2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
-2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
-2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
-2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
-2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
-3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
-3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
-3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
-3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
-3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
-3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
-3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
-3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
-3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
-3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
-300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
-300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
-300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
-300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
-300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
-300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
-3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
-3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
-3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
-3013;GETA MARK;So;0;ON;;;;;N;;;;;
-3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
-3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
-3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
-3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
-3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
-3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
-301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
-301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
-301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
-301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
-301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
-3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
-3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
-3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
-3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
-3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
-3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
-3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
-3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
-3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
-302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
-302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
-302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
-302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
-302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
-3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
-3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
-3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
-3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
-3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
-3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
-3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
-303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
-303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
-303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
-3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
-3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
-3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
-3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
-3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
-304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
-304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
-304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
-304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
-304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
-3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
-3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
-3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
-3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
-3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
-3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
-3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
-3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
-3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
-3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
-305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
-305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
-305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
-305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
-305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
-305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
-3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
-3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
-3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
-3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
-3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
-3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
-3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
-3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
-3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
-306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
-306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
-306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
-306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
-306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
-306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
-3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
-3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
-3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
-3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
-3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
-3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
-3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
-3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
-3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
-3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
-307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
-307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
-307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
-307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
-307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
-307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
-3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
-3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
-3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
-3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
-3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
-3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
-3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
-308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
-308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
-308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
-308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
-308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
-3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
-3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
-3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
-3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
-3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
-3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
-309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
-309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
-309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
-309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
-30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
-30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
-30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
-30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
-30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
-30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
-30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
-30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
-30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
-30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
-30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
-30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
-30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
-30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
-30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
-30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
-30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
-30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
-30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
-30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
-30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
-30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
-30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
-30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
-30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
-30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
-30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
-30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
-30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
-30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
-30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
-30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
-30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
-30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
-30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
-30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
-30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
-30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
-30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
-30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
-30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
-30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
-30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
-30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
-30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
-30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
-30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
-30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
-30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
-30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
-30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
-30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
-30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
-30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
-30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
-30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
-30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
-30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
-30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
-30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
-30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
-30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
-30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
-30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
-30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
-30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
-30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
-30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
-30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
-30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
-30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
-30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
-30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
-30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
-30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
-30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
-30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
-30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
-30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
-30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
-30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
-30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
-30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
-3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
-3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
-3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
-3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
-3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
-310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
-310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
-310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
-310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
-310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
-310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
-3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
-3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
-3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
-3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
-3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
-3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
-3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
-3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
-3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
-3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
-311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
-311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
-311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
-311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
-311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
-311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
-3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
-3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
-3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
-3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
-3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
-3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
-3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
-3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
-3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
-3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
-312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
-312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
-312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
-3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
-3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
-3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
-3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
-3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
-3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
-3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
-3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
-3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
-313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
-313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
-313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
-313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
-313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
-313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
-3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
-3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
-3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
-3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
-3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
-3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
-3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
-3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
-3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
-3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
-314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
-314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
-314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
-314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
-314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
-314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
-3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
-3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
-3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
-3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
-3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
-3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
-3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
-3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
-3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
-3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
-315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
-315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
-315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
-315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
-315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
-315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
-3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
-3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
-3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
-3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
-3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
-3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
-3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
-3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
-3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
-3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
-316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
-316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
-316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
-316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
-316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
-316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
-3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
-3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
-3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
-3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
-3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
-3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
-3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
-3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
-3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
-3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
-317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
-317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
-317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
-317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
-317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
-317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
-3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
-3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
-3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
-3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
-3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
-3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
-3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
-3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
-3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
-3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
-318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
-318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
-318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
-318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
-318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
-3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
-3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
-3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
-3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
-3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
-3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
-3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
-3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
-3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
-3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
-319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
-319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
-319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
-319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
-319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
-319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
-31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
-31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
-31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
-31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
-31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
-31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
-31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
-31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
-31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
-31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
-31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
-31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
-31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
-31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
-31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
-31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
-31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
-31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
-31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
-31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
-31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
-31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
-31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
-31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
-3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
-3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
-3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
-3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
-3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
-3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
-3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
-3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
-3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
-3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
-320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
-320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
-320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
-320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
-320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
-320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
-3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
-3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
-3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
-3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
-3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
-3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
-3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
-3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
-3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
-3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
-321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
-321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
-321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
-3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
-3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
-3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
-3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
-3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
-3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
-3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
-3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
-3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
-3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
-322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
-322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
-322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
-322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
-322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
-322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
-3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
-3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
-3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
-3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
-3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
-3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
-3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
-3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
-3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
-3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
-323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
-323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
-323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
-323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
-323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
-323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
-3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
-3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
-3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
-3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
-3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
-3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
-3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
-3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
-3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
-3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
-3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
-3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
-3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
-3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
-326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
-326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
-326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
-326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
-326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
-326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
-3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
-3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
-3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
-3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
-3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
-3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
-3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
-3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
-3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
-3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
-327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
-327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
-327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
-3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
-3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
-3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
-3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
-3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
-3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
-3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
-3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
-3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
-3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
-328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
-328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
-328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
-328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
-328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
-328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
-3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
-3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
-3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
-3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
-3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
-3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
-3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
-3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
-3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
-3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
-329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
-329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
-329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
-329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
-329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
-329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
-32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
-32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
-32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
-32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
-32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
-32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
-32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
-32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
-32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
-32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
-32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
-32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
-32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
-32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
-32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
-32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
-32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
-32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
-32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
-32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
-32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
-32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
-32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
-32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
-32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
-32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
-32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
-32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
-32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
-32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
-32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
-32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
-32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
-32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
-32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
-32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
-32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
-32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
-32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
-32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
-32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
-32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
-32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
-32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
-32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
-32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
-32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
-32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
-32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
-32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
-32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
-32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
-32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
-32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
-32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
-32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
-32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
-32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
-32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
-32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
-32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
-32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
-32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
-32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
-32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
-32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
-32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
-32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
-32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
-32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
-32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
-32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
-32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
-32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
-32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
-32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
-3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
-3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
-3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
-3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
-3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
-3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
-3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
-3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
-3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
-3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
-330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
-330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
-330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
-330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
-330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
-330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
-3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
-3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
-3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
-3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
-3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
-3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
-3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
-3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
-3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
-3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
-331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
-331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
-331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
-331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
-331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
-331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
-3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
-3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
-3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
-3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
-3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
-3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
-3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
-3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
-3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
-3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
-332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
-332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
-332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
-332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
-332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
-332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
-3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
-3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
-3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
-3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
-3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
-3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
-3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
-3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
-3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
-3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
-333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
-333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
-333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
-333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
-333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
-333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
-3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
-3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
-3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
-3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
-3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
-3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
-3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
-3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
-3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
-3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
-334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
-334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
-334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
-334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
-334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
-334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
-3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
-3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
-3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
-3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
-3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
-3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
-3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
-3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
-3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
-3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
-335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
-335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
-335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
-335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
-335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
-335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
-3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
-3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
-3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
-3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
-3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
-3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
-3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
-3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
-3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
-3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
-336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
-336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
-336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
-336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
-336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
-336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
-3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
-3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
-3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
-3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
-3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
-3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
-3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
-337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
-337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
-337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
-337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
-337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
-3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
-3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
-3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
-3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
-3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
-3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
-3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
-3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
-3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
-3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
-338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
-338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
-338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
-338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
-338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
-338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
-3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
-3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
-3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
-3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
-3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
-3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
-3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
-3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
-3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
-3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
-339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
-339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
-339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
-339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
-339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
-339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
-33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
-33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
-33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
-33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
-33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
-33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
-33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
-33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
-33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
-33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
-33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
-33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
-33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
-33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
-33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
-33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
-33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
-33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
-33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
-33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
-33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
-33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
-33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
-33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
-33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
-33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
-33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
-33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
-33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
-33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
-33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
-33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
-33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
-33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
-33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
-33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
-33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
-33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
-33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
-33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
-33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
-33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
-33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
-33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
-33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
-33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
-33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
-33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
-33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
-33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
-33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
-33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
-33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
-33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
-33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
-33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
-33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
-33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
-33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
-33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
-33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
-33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
-33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
-33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
-33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
-33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
-33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
-33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
-33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
-33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
-33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
-33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
-33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
-33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
-33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
-33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
-33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
-33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
-33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
-33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
-33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
-33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
-33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
-33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
-33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
-33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
-33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
-33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
-33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
-33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
-33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
-33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
-33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
-3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
-4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
-A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
-A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
-A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
-A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
-A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
-A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
-A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
-A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
-A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
-A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
-A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
-A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
-A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
-A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
-A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
-A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
-A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
-A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
-A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
-A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
-A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
-A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
-A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
-A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
-A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
-A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
-A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
-A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
-A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
-A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
-A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
-A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
-A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
-A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
-A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
-A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
-A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
-A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
-A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
-A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
-A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
-A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
-A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
-A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
-A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
-A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
-A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
-A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
-A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
-A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
-A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
-A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
-A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
-A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
-A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
-A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
-A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
-A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
-A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
-A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
-A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
-A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
-A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
-A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
-A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
-A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
-A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
-A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
-A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
-A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
-A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
-A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
-A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
-A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
-A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
-A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
-A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
-A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
-A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
-A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
-A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
-A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
-A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
-A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
-A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
-A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
-A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
-A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
-A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
-A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
-A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
-A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
-A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
-A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
-A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
-A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
-A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
-A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
-A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
-A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
-A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
-A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
-A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
-A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
-A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
-A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
-A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
-A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
-A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
-A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
-A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
-A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
-A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
-A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
-A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
-A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
-A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
-A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
-A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
-A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
-A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
-A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
-A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
-A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
-A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
-A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
-A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
-A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
-A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
-A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
-A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
-A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
-A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
-A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
-A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
-A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
-A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
-A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
-A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
-A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
-A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
-A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
-A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
-A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
-A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
-A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
-A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
-A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
-A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
-A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
-A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
-A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
-A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
-A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
-A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
-A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
-A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
-A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
-A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
-A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
-A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
-A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
-A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
-A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
-A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
-A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
-A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
-A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
-A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
-A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
-A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
-A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
-A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
-A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
-A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
-A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
-A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
-A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
-A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
-A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
-A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
-A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
-A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
-A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
-A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
-A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
-A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
-A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
-A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
-A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
-A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
-A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
-A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
-A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
-A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
-A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
-A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
-A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
-A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
-A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
-A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
-A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
-A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
-A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
-A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
-A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
-A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
-A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
-A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
-A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
-A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
-A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
-A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
-A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
-A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
-A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
-A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
-A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
-A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
-A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
-A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
-A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
-A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
-A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
-A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
-A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
-A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
-A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
-A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
-A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
-A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
-A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
-A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
-A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
-A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
-A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
-A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
-A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
-A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
-A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
-A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
-A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
-A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
-A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
-A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
-A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
-A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
-A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
-A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
-A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
-A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
-A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
-A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
-A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
-A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
-A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
-A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
-A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
-A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
-A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
-A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
-A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
-A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
-A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
-A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
-A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
-A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
-A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
-A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
-A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
-A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
-A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
-A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
-A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
-A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
-A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
-A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
-A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
-A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
-A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
-A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
-A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
-A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
-A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
-A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
-A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
-A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
-A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
-A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
-A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
-A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
-A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
-A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
-A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
-A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
-A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
-A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
-A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
-A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
-A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
-A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
-A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
-A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
-A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
-A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
-A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
-A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
-A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
-A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
-A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
-A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
-A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
-A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
-A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
-A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
-A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
-A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
-A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
-A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
-A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
-A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
-A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
-A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
-A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
-A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
-A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
-A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
-A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
-A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
-A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
-A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
-A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
-A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
-A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
-A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
-A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
-A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
-A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
-A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
-A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
-A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
-A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
-A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
-A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
-A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
-A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
-A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
-A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
-A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
-A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
-A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
-A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
-A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
-A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
-A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
-A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
-A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
-A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
-A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
-A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
-A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
-A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
-A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
-A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
-A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
-A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
-A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
-A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
-A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
-A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
-A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
-A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
-A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
-A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
-A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
-A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
-A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
-A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
-A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
-A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
-A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
-A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
-A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
-A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
-A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
-A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
-A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
-A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
-A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
-A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
-A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
-A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
-A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
-A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
-A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
-A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
-A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
-A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
-A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
-A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
-A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
-A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
-A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
-A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
-A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
-A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
-A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
-A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
-A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
-A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
-A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
-A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
-A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
-A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
-A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
-A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
-A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
-A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
-A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
-A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
-A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
-A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
-A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
-A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
-A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
-A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
-A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
-A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
-A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
-A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
-A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
-A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
-A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
-A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
-A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
-A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
-A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
-A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
-A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
-A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
-A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
-A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
-A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
-A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
-A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
-A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
-A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
-A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
-A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
-A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
-A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
-A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
-A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
-A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
-A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
-A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
-A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
-A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
-A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
-A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
-A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
-A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
-A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
-A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
-A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
-A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
-A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
-A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
-A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
-A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
-A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
-A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
-A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
-A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
-A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
-A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
-A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
-A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
-A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
-A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
-A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
-A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
-A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
-A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
-A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
-A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
-A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
-A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
-A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
-A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
-A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
-A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
-A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
-A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
-A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
-A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
-A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
-A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
-A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
-A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
-A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
-A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
-A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
-A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
-A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
-A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
-A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
-A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
-A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
-A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
-A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
-A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
-A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
-A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
-A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
-A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
-A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
-A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
-A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
-A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
-A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
-A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
-A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
-A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
-A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
-A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
-A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
-A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
-A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
-A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
-A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
-A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
-A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
-A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
-A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
-A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
-A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
-A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
-A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
-A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
-A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
-A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
-A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
-A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
-A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
-A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
-A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
-A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
-A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
-A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
-A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
-A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
-A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
-A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
-A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
-A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
-A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
-A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
-A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
-A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
-A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
-A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
-A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
-A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
-A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
-A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
-A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
-A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
-A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
-A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
-A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
-A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
-A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
-A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
-A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
-A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
-A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
-A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
-A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
-A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
-A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
-A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
-A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
-A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
-A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
-A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
-A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
-A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
-A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
-A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
-A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
-A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
-A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
-A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
-A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
-A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
-A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
-A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
-A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
-A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
-A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
-A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
-A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
-A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
-A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
-A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
-A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
-A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
-A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
-A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
-A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
-A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
-A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
-A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
-A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
-A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
-A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
-A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
-A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
-A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
-A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
-A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
-A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
-A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
-A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
-A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
-A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
-A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
-A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
-A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
-A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
-A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
-A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
-A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
-A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
-A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
-A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
-A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
-A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
-A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
-A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
-A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
-A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
-A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
-A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
-A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
-A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
-A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
-A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
-A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
-A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
-A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
-A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
-A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
-A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
-A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
-A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
-A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
-A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
-A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
-A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
-A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
-A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
-A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
-A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
-A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
-A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
-A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
-A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
-A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
-A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
-A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
-A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
-A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
-A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
-A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
-A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
-A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
-A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
-A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
-A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
-A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
-A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
-A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
-A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
-A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
-A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
-A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
-A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
-A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
-A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
-A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
-A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
-A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
-A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
-A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
-A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
-A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
-A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
-A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
-A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
-A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
-A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
-A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
-A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
-A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
-A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
-A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
-A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
-A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
-A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
-A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
-A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
-A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
-A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
-A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
-A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
-A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
-A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
-A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
-A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
-A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
-A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
-A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
-A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
-A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
-A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
-A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
-A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
-A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
-A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
-A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
-A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
-A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
-A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
-A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
-A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
-A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
-A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
-A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
-A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
-A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
-A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
-A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
-A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
-A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
-A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
-A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
-A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
-A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
-A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
-A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
-A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
-A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
-A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
-A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
-A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
-A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
-A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
-A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
-A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
-A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
-A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
-A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
-A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
-A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
-A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
-A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
-A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
-A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
-A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
-A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
-A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
-A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
-A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
-A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
-A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
-A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
-A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
-A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
-A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
-A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
-A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
-A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
-A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
-A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
-A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
-A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
-A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
-A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
-A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
-A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
-A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
-A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
-A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
-A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
-A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
-A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
-A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
-A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
-A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
-A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
-A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
-A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
-A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
-A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
-A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
-A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
-A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
-A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
-A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
-A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
-A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
-A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
-A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
-A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
-A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
-A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
-A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
-A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
-A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
-A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
-A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
-A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
-A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
-A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
-A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
-A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
-A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
-A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
-A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
-A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
-A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
-A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
-A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
-A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
-A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
-A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
-A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
-A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
-A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
-A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
-A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
-A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
-A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
-A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
-A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
-A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
-A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
-A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
-A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
-A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
-A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
-A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
-A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
-A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
-A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
-A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
-A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
-A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
-A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
-A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
-A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
-A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
-A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
-A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
-A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
-A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
-A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
-A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
-A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
-A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
-A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
-A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
-A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
-A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
-A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
-A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
-A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
-A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
-A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
-A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
-A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
-A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
-A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
-A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
-A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
-A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
-A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
-A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
-A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
-A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
-A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
-A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
-A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
-A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
-A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
-A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
-A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
-A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
-A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
-A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
-A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
-A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
-A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
-A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
-A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
-A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
-A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
-A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
-A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
-A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
-A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
-A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
-A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
-A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
-A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
-A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
-A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
-A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
-A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
-A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
-A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
-A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
-A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
-A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
-A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
-A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
-A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
-A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
-A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
-A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
-A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
-A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
-A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
-A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
-A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
-A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
-A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
-A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
-A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
-A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
-A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
-A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
-A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
-A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
-A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
-A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
-A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
-A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
-A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
-A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
-A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
-A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
-A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
-A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
-A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
-A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
-A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
-A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
-A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
-A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
-A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
-A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
-A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
-A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
-A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
-A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
-A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
-A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
-A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
-A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
-A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
-A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
-A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
-A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
-A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
-A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
-A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
-A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
-A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
-A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
-A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
-A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
-A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
-A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
-A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
-A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
-A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
-A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
-A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
-A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
-A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
-A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
-A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
-A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
-A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
-A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
-A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
-A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
-A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
-A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
-A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
-A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
-A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
-A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
-A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
-A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
-A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
-A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
-A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
-A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
-A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
-A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
-A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
-A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
-A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
-A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
-A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
-A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
-A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
-A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
-A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
-A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
-A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
-A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
-A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
-A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
-A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
-A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
-A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
-A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
-A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
-A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
-A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
-A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
-A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
-A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
-A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
-A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
-A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
-A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
-A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
-A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
-A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
-A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
-A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
-A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
-A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
-A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
-A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
-A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
-A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
-A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
-A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
-A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
-A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
-A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
-A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
-A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
-A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
-A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
-A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
-A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
-A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
-A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
-A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
-A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
-A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
-A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
-A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
-A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
-A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
-A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
-A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
-A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
-A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
-A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
-A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
-A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
-A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
-A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
-A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
-A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
-A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
-A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
-A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
-A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
-A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
-A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
-A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
-A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
-A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
-A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
-A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
-A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
-A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
-A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
-A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
-A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
-A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
-AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
-D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
-D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
-F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
-F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
-F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
-F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
-F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
-F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
-F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
-F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
-F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
-F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
-F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
-F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
-F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
-F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
-F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
-F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
-F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
-F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
-F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
-F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
-F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
-F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
-F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
-F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
-F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
-F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
-F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
-F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
-F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
-F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
-F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
-F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
-F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
-F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
-F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
-F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
-F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
-F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
-F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
-F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
-F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
-F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
-F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
-F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
-F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
-F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
-F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
-F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
-F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
-F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
-F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
-F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
-F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
-F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
-F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
-F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
-F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
-F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
-F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
-F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
-F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
-F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
-F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
-F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
-F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
-F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
-F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
-F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
-F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
-F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
-F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
-F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
-F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
-F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
-F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
-F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
-F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
-F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
-F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
-F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
-F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
-F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
-F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
-F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
-F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
-F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
-F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
-F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
-F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
-F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
-F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
-F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
-F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
-F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
-F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
-F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
-F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
-F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
-F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
-F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
-F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
-F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
-F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
-F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
-F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
-F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
-F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
-F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
-F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
-F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
-F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
-F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
-F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
-F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
-F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
-F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
-F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
-F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
-F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
-F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
-F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
-F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
-F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
-F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
-F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
-F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
-F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
-F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
-F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
-F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
-F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
-F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
-F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
-F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
-F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
-F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
-F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
-F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
-F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
-F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
-F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
-F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
-F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
-F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
-F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
-F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
-F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
-F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
-F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
-F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
-F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
-F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
-F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
-F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
-F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
-F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
-F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
-F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
-F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
-F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
-F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
-F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
-F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
-F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
-F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
-F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
-F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
-F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
-F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
-F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
-F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
-F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
-F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
-F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
-F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
-F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
-F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
-F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
-F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
-F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
-F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
-F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
-F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
-F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
-F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
-F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
-F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
-F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
-F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
-F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
-F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
-F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
-F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
-F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
-F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
-F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
-F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
-F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
-F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
-F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
-F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
-F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
-F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
-F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
-F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
-F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
-F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
-F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
-F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
-F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
-F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
-F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
-F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
-F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
-F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
-F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
-F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
-F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
-F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
-F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
-F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
-F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
-F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
-F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
-F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
-F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
-F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
-F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
-F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
-F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
-F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
-F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
-F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
-F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
-F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
-F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
-F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
-F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
-F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
-F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
-F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
-F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
-F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
-F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
-F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
-F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
-F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
-F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
-F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
-F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
-F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
-F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
-F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
-F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
-F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
-F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
-F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
-FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
-FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
-FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
-FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
-FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
-FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
-FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
-FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
-FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
-FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
-FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
-FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
-FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
-FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
-FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
-FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
-FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
-FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
-FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
-FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
-FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
-FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
-FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
-FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
-FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
-FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
-FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
-FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
-FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
-FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
-FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
-FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
-FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
-FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
-FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
-FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
-FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
-FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
-FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
-FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
-FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
-FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
-FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
-FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
-FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
-FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
-FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
-FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
-FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
-FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
-FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
-FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
-FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
-FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
-FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
-FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
-FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
-FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
-FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
-FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
-FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
-FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
-FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
-FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
-FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
-FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
-FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
-FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
-FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
-FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
-FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
-FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
-FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
-FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
-FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
-FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
-FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
-FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
-FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
-FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
-FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
-FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
-FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
-FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
-FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
-FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
-FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
-FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
-FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
-FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
-FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
-FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
-FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
-FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
-FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
-FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
-FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
-FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
-FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
-FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
-FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
-FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
-FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
-FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
-FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
-FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
-FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
-FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
-FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
-FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
-FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
-FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
-FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
-FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
-FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
-FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
-FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
-FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
-FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
-FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
-FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
-FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
-FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
-FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
-FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
-FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
-FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
-FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
-FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
-FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
-FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
-FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
-FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
-FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
-FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
-FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
-FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
-FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
-FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
-FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
-FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
-FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
-FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
-FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
-FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
-FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
-FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
-FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
-FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
-FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
-FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
-FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
-FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
-FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
-FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
-FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
-FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
-FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
-FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
-FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
-FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
-FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
-FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
-FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
-FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
-FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
-FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
-FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
-FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
-FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
-FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
-FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
-FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
-FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
-FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
-FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
-FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
-FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
-FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
-FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
-FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
-FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
-FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
-FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
-FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
-FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
-FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
-FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
-FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
-FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
-FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
-FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
-FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
-FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
-FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
-FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
-FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
-FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
-FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
-FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
-FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
-FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
-FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
-FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
-FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
-FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
-FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
-FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
-FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
-FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
-FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
-FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
-FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
-FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
-FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
-FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
-FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
-FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
-FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
-FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
-FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
-FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
-FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
-FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
-FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
-FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
-FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
-FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
-FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
-FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
-FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
-FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
-FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
-FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
-FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
-FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
-FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
-FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
-FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
-FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
-FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
-FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
-FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
-FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
-FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
-FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
-FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
-FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
-FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
-FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
-FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
-FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
-FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
-FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
-FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
-FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
-FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
-FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
-FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
-FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
-FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
-FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
-FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
-FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
-FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
-FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
-FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
-FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
-FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
-FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
-FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
-FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
-FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
-FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
-FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
-FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
-FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
-FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
-FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
-FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
-FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
-FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
-FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
-FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
-FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
-FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
-FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
-FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
-FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
-FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
-FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
-FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
-FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
-FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
-FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
-FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
-FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
-FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
-FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
-FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
-FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
-FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
-FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
-FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
-FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
-FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
-FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
-FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
-FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
-FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
-FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
-FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
-FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
-FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
-FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
-FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
-FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
-FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
-FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
-FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
-FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
-FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
-FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
-FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
-FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
-FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
-FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
-FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
-FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
-FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
-FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
-FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
-FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
-FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
-FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
-FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
-FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
-FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
-FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
-FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
-FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
-FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
-FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
-FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
-FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
-FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
-FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
-FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
-FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
-FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
-FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
-FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
-FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
-FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
-FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
-FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
-FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
-FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
-FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
-FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
-FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
-FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
-FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
-FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
-FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
-FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
-FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
-FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
-FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
-FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
-FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
-FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
-FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
-FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
-FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
-FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
-FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
-FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
-FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
-FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
-FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
-FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
-FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
-FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
-FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
-FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
-FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
-FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
-FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
-FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
-FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
-FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
-FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
-FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
-FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
-FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
-FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
-FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
-FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
-FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
-FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
-FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
-FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
-FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
-FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
-FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
-FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
-FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
-FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
-FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
-FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
-FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
-FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
-FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
-FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
-FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
-FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
-FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
-FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
-FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
-FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
-FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
-FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
-FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
-FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
-FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
-FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
-FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
-FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
-FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
-FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
-FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
-FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
-FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
-FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
-FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
-FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
-FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
-FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
-FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
-FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
-FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
-FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
-FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
-FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
-FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
-FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
-FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
-FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
-FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
-FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
-FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
-FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
-FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
-FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
-FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
-FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
-FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
-FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
-FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
-FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
-FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
-FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
-FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
-FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
-FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
-FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
-FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
-FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
-FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
-FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
-FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
-FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
-FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
-FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
-FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
-FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
-FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
-FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
-FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
-FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
-FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
-FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
-FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
-FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
-FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
-FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
-FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
-FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
-FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
-FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
-FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
-FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
-FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
-FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
-FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
-FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
-FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
-FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
-FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
-FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
-FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
-FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
-FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
-FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
-FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
-FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
-FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
-FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
-FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
-FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
-FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
-FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
-FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
-FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
-FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
-FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
-FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
-FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
-FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
-FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
-FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
-FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
-FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
-FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
-FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
-FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
-FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
-FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
-FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
-FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
-FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
-FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
-FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
-FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
-FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
-FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
-FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
-FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
-FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
-FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
-FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
-FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
-FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
-FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
-FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
-FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
-FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
-FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
-FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
-FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
-FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
-FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
-FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
-FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
-FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
-FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
-FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
-FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
-FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
-FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
-FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
-FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
-FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
-FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
-FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
-FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
-FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
-FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
-FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
-FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
-FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
-FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
-FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
-FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
-FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
-FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
-FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
-FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
-FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
-FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
-FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
-FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
-FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
-FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
-FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
-FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
-FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
-FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
-FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
-FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
-FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
-FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
-FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
-FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
-FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
-FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
-FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
-FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
-FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
-FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
-FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
-FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
-FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
-FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
-FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
-FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
-FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
-FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
-FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
-FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
-FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
-FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
-FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
-FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
-FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
-FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
-FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
-FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
-FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
-FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
-FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
-FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
-FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
-FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
-FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
-FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
-FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
-FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
-FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
-FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
-FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
-FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
-FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
-FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
-FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
-FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
-FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
-FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
-FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
-FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
-FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
-FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
-FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
-FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
-FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
-FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
-FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
-FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
-FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
-FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
-FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
-FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
-FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
-FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
-FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
-FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
-FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
-FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
-FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
-FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
-FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
-FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
-FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
-FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
-FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
-FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
-FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
-FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
-FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
-FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
-FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
-FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
-FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
-FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
-FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
-FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
-FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
-FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
-FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
-FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
-FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
-FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
-FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
-FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
-FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
-FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
-FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
-FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
-FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
-FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
-FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
-FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
-FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
-FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
-FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
-FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
-FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
-FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
-FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
-FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
-FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
-FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
-FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
-FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
-FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
-FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
-FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
-FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
-FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
-FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
-FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
-FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
-FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
-FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
-FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
-FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
-FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
-FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
-FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
-FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
-FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
-FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
-FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
-FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
-FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
-FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
-FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
-FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
-FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
-FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
-FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
-FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
-FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
-FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
-FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
-FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
-FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
-FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
-FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
-FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
-FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
-FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
-FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
-FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
-FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
-FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
-FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
-FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
-FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
-FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
-FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
-FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
-FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
-FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
-FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
-FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
-FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
-FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
-FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
-FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
-FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
-FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
-FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
-FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
-FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
-FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
-FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
-FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
-FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
-FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
-FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
-FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
-FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
-FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
-FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
-FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
-FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
-FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
-FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
-FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
-FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
-FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
-FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
-FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
-FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
-FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
-FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
-FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
-FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
-FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
-FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
-FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
-FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
-FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
-FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
-FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
-FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
-FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
-FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
-FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
-FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
-FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
-FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
-FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
-FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
-FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
-FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
-FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
-FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
-FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
-FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
-FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
-FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
-FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
-FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
-FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
-FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
-FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
-FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
-FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
-FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
-FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
-FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
-FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
-FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
-FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
-FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
-FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
-FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
-FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
-FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
-FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
-FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
-FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
-FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
-FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
-FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
-FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
-FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
-FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
-FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
-FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
-FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
-FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
-FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
-FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
-FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
-FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
-FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
-FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
-FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
-FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
-FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
-FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
-FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
-FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
-FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
-FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
-FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
-FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
-FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
-FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
-FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
-FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
-FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
-FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
-FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
-FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
-FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
-FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
-FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
-FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
-FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
-FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
-FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
-FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
-FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
-FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
-FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
-FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
-FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
-FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
-FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
-FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
-FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
-FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
-FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
-FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
-FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
-FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
-FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
-FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
-FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
-FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
-FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
-FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
-FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
-FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
-FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
-FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
-FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
-FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
-FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
-FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
-FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
-FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
-FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
-FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
-FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
-FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
-FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
-FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
-FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
-FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
-FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
-FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
-FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
-FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
-FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
-FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
-FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
-FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
-FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
-FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
-FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
-FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
-FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
-FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
-FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
-FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
-FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
-FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
-FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
-FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
-FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
-FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
-FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
-FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
-FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
-FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
-FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
-FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
-FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
-FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
-FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
-FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
-FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
-FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
-FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
-FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
-FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
-FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
-FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
-FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
-FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
-FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
-FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
-FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
-FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
-FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
-FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
-FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
-FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
-FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
-FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
-FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
-FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
-FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
-FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
-FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
-FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
-FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
-FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
-FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
-FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
-FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
-FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
-FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
-FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
-FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
-FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
-FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
-FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
-FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
-FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
-FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
-FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
-FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
-FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
-FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
-FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
-FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
-FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
-FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
-FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
-FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
-FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
-FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
-FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
-FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
-FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
-FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
-FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
-FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
-FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
-FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
-FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
-FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
-FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
-FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
-FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
-FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
-FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
-FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
-FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
-FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
-FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
-FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
-FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
-FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
-FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
-FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
-FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
-FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
-FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
-FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
-FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
-FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
-FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
-FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
-FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
-FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
-FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
-FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
-FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
-FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
-FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
-FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
-FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
-FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
-FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
-FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
-FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
-FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
-FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
-FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
-FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
-FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
-FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
-FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
-FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
-FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
-FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
-FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
-FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
-FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
-FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
-FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
-FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
-FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
-FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
-FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
-FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
-FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
-FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
-FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
-FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
-FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
-FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
-FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
-FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
-FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
-FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
-FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
-FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
-FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
-FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
-FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
-FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
-FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
-FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
-FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
-FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
-FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
-FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
-FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
-FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
-FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
-FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
-FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
-FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
-FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
-FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
-FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
-FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
-FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
-FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
-FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
-FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
-FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
-FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
-FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
-FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
-FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
diff --git a/libjava/classpath/doc/unicode/UnicodeData-4.0.0.txt b/libjava/classpath/doc/unicode/UnicodeData-4.0.0.txt
deleted file mode 100644
index 86ea1cf..0000000
--- a/libjava/classpath/doc/unicode/UnicodeData-4.0.0.txt
+++ /dev/null
@@ -1,15100 +0,0 @@
-0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
-0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
-0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
-0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
-0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
-0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
-0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
-0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
-0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
-0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
-000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
-000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
-000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
-000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
-000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
-000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
-0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
-0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
-0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
-0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
-0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
-0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
-0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
-0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
-0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
-0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
-001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
-001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
-001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
-001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
-001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
-001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
-0020;SPACE;Zs;0;WS;;;;;N;;;;;
-0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
-0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
-0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
-0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
-0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
-0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
-0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
-002A;ASTERISK;Po;0;ON;;;;;N;;;;;
-002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-002C;COMMA;Po;0;CS;;;;;N;;;;;
-002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
-002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
-002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
-0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
-0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
-0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
-0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
-0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
-0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
-0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
-0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
-0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
-0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
-003A;COLON;Po;0;CS;;;;;N;;;;;
-003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
-003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
-003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
-0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
-0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
-0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
-0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
-0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
-0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
-0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
-0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
-0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
-0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
-004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
-004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
-004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
-004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
-004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
-004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
-0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
-0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
-0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
-0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
-0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
-0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
-0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
-0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
-0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
-0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
-005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
-005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
-005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
-005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
-005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
-005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
-0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
-0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
-0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
-0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
-0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
-0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
-0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
-0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
-0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
-0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
-006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
-006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
-006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
-006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
-006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
-006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
-0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
-0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
-0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
-0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
-0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
-0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
-0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
-0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
-0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
-0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
-007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
-007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
-007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
-007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
-007E;TILDE;Sm;0;ON;;;;;N;;;;;
-007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
-0080;<control>;Cc;0;BN;;;;;N;;;;;
-0081;<control>;Cc;0;BN;;;;;N;;;;;
-0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
-0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
-0084;<control>;Cc;0;BN;;;;;N;;;;;
-0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
-0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
-0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
-0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
-0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
-008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
-008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
-008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
-008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
-008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
-008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
-0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
-0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
-0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
-0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
-0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
-0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
-0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
-0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
-0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
-0099;<control>;Cc;0;BN;;;;;N;;;;;
-009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
-009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
-009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
-009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
-009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
-009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
-00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
-00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
-00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
-00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
-00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
-00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
-00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
-00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
-00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
-00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
-00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
-00AD;SOFT HYPHEN;Cf;0;ON;;;;;N;;;;;
-00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
-00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
-00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
-00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
-00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
-00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
-00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
-00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
-00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
-00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
-00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
-00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
-00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
-00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
-00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
-00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
-00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
-00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
-00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
-00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
-00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
-00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
-00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
-00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
-00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
-00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
-00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
-00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
-00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
-00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
-00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
-00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
-00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
-00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
-00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
-00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
-00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
-00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
-00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
-00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
-00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
-00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
-00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
-00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
-00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
-00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
-00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
-00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
-00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
-00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
-00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
-00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
-00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
-00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
-00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
-00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
-00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
-00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
-00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
-00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
-00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
-00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
-00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
-00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
-00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
-00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
-00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
-00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
-00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
-00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
-00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
-00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
-00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
-00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
-00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
-00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
-00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
-00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
-00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
-00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
-00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
-0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
-0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
-0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
-0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
-0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
-0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
-0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
-0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
-0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
-0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
-010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
-010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
-010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
-010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
-010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
-010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
-0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
-0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
-0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
-0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
-0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
-0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
-0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
-0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
-0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
-0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
-011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
-011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
-011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
-011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
-011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
-011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
-0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
-0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
-0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
-0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
-0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
-0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
-0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
-0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
-0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
-0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
-012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
-012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
-012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
-012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
-012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
-012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
-0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
-0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
-0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
-0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
-0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
-0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
-0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
-0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
-0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
-0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
-013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
-013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
-013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
-013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
-013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
-013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
-0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
-0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
-0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
-0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
-0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
-0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
-0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
-0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
-0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
-0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
-014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
-014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
-014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
-014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
-014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
-014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
-0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
-0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
-0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
-0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
-0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
-0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
-0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
-0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
-0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
-0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
-015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
-015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
-015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
-015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
-015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
-015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
-0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
-0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
-0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
-0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
-0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
-0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
-0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
-0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
-0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
-0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
-016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
-016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
-016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
-016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
-016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
-016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
-0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
-0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
-0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
-0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
-0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
-0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
-0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
-0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
-0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
-0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
-017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
-017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
-017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
-017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
-017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
-017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
-0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
-0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
-0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
-0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
-0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
-0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
-0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
-0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
-0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
-0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
-018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
-018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
-018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
-018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
-018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
-018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
-0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
-0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
-0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
-0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
-0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
-0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
-0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
-0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
-0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
-0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
-019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
-019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
-019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
-019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
-019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
-019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
-01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
-01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
-01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
-01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
-01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
-01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
-01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280;
-01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
-01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
-01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
-01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
-01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
-01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
-01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
-01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
-01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
-01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
-01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
-01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
-01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
-01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
-01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
-01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
-01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
-01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
-01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
-01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
-01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
-01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
-01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
-01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
-01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
-01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
-01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
-01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
-01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
-01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
-01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
-01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
-01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
-01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
-01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
-01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
-01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
-01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
-01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
-01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
-01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
-01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
-01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
-01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
-01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
-01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
-01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
-01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
-01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
-01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
-01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
-01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
-01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
-01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
-01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
-01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
-01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
-01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
-01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
-01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
-01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
-01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
-01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
-01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
-01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
-01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
-01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
-01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
-01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
-01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
-01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
-01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
-01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
-01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
-01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
-01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
-01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
-01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
-01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
-01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
-01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
-01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
-01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
-01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
-01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
-01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
-01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
-01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
-01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
-0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
-0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
-0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
-0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
-0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
-0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
-0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
-0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
-0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
-0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
-020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
-020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
-020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
-020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
-020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
-020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
-0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
-0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
-0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
-0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
-0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
-0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
-0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
-0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
-0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
-0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
-021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
-021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
-021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
-021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
-021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
-021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
-0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
-0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
-0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
-0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
-0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
-0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
-0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
-0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
-0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
-0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
-022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
-022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
-022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
-022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
-022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
-022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
-0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
-0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
-0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
-0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
-0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
-0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
-0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
-0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
-0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
-0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
-0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
-0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
-0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
-0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
-0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
-0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
-0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
-025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
-025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
-025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
-025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
-025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
-025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
-0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
-0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
-0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
-0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
-0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
-0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
-0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
-0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
-0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
-0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
-026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
-026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
-026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
-026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
-026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
-026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
-0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
-0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
-0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
-0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
-0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
-0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
-0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
-0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
-0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
-027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
-027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
-027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
-027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
-0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
-0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
-0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
-0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
-0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
-0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
-0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
-0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
-0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
-0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
-028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
-028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
-028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
-028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
-028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
-028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
-0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
-0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
-0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
-0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
-0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
-0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
-0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
-0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
-029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
-029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
-029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
-029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
-029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
-029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
-02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
-02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
-02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
-02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
-02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
-02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
-02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
-02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
-02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
-02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK ;Ll;0;L;;;;;N;;;;;
-02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
-02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
-02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
-02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
-02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
-02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
-02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
-02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
-02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
-02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
-02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
-02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
-02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
-02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
-02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
-02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
-02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
-02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
-02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
-02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;;
-02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
-02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
-02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
-02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
-02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
-02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
-02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
-02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
-02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
-02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
-02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
-02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
-02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
-02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
-02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
-02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
-02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
-02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
-02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
-02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
-02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
-02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
-02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
-02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
-02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
-02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
-02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
-02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
-02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
-02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
-02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
-02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
-02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
-02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
-02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
-02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
-02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
-02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
-02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
-0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
-0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;;
-0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
-0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
-0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
-0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
-0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
-0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
-0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
-0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
-030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
-030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
-030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
-030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
-030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
-030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
-0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
-0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
-0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
-0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
-0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
-0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
-0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
-0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
-0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
-0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
-031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
-031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
-031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
-031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
-031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
-031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
-0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
-0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
-0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
-0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
-0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
-0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
-0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
-0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
-0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
-0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
-032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
-032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
-032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
-032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
-032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
-032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
-0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
-0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
-0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
-0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
-0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
-0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
-0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
-0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
-0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
-0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
-033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
-033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
-033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
-033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
-033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
-033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
-0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
-0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
-0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
-0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
-0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
-0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
-0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
-0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
-034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
-034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
-034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
-034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
-0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
-0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
-0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
-0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
-0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
-0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
-0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
-0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
-035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
-035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
-035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
-0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
-0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
-0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
-0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
-0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
-0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
-0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
-0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
-0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
-0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
-036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
-036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
-036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
-036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
-036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
-036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
-0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
-0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
-037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
-037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
-0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
-0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
-0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
-0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
-0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
-0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
-038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
-038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
-038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
-038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
-0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
-0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
-0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
-0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
-0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
-0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
-0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
-0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
-0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
-0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
-039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
-039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
-039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
-039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
-039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
-039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
-03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
-03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
-03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
-03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
-03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
-03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
-03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
-03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
-03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
-03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
-03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
-03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
-03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
-03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
-03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
-03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
-03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
-03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
-03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
-03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
-03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
-03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
-03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
-03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
-03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
-03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
-03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
-03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
-03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
-03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
-03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
-03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
-03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
-03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
-03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
-03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
-03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
-03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
-03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
-03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
-03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
-03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
-03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
-03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
-03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
-03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
-03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
-03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
-03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
-03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
-03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
-03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
-03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
-03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
-03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
-03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
-03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
-03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
-03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
-03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
-03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
-03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
-03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
-03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
-03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
-03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
-03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
-03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
-03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
-03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
-03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
-03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
-03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
-03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
-03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
-03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
-03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
-03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
-03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
-03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
-03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
-03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
-03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
-03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
-03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
-03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
-03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
-03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
-0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
-0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
-0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
-0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
-0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
-0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
-0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
-0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
-0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
-0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
-040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
-040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
-040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
-040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
-040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
-040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
-0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
-0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
-0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
-0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
-0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
-0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
-0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
-0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
-0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
-0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
-041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
-041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
-041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
-041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
-041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
-041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
-0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
-0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
-0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
-0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
-0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
-0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
-0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
-0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
-0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
-0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
-042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
-042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
-042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
-042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
-042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
-042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
-0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
-0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
-0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
-0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
-0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
-0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
-0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
-0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
-0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
-0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
-043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
-043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
-043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
-043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
-043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
-043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
-0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
-0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
-0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
-0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
-0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
-0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
-0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
-0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
-0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
-0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
-044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
-044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
-044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
-044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
-044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
-044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
-0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
-0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
-0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
-0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
-0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
-0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
-0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
-0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
-0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
-0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
-045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
-045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
-045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
-045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
-045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
-045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
-0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
-0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
-0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
-0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
-0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
-0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
-0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
-0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
-0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
-0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
-046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
-046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
-046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
-046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
-046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
-046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
-0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
-0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
-0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
-0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
-0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
-0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
-0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
-0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
-0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
-0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
-047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
-047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
-047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
-047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
-047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
-047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
-0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
-0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
-0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
-0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
-0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
-0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
-0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
-0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
-0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
-048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
-048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
-048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
-048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
-048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
-048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
-0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
-0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
-0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
-0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
-0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
-0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
-0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
-0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
-0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
-0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
-049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
-049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
-049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
-049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
-049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
-049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
-04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
-04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
-04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
-04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
-04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
-04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
-04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
-04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
-04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
-04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
-04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
-04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
-04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
-04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
-04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
-04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
-04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
-04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
-04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
-04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
-04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
-04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
-04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
-04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
-04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
-04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
-04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
-04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
-04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
-04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
-04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
-04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
-04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
-04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
-04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
-04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
-04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
-04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
-04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
-04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
-04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
-04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
-04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
-04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
-04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
-04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
-04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
-04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
-04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
-04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
-04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
-04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
-04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
-04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
-04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
-04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
-04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
-04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
-04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
-04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
-04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
-04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
-04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
-04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
-04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
-04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
-04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
-04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
-04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
-04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
-04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
-04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
-04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
-04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
-04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
-04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
-04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
-04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
-04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
-04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
-04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
-04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
-04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
-04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
-04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
-04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
-04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
-0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
-0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
-0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
-0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
-0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
-0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
-0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
-0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
-0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
-0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
-050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
-050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
-050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
-050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
-050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
-050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
-0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
-0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
-0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
-0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
-0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
-0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
-0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
-0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
-0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
-053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
-053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
-053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
-053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
-053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
-053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
-0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
-0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
-0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
-0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
-0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
-0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
-0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
-0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
-0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
-0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
-054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
-054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
-054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
-054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
-054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
-054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
-0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
-0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
-0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
-0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
-0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
-0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
-0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
-0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
-055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
-055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
-055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
-055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
-055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
-0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
-0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
-0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
-0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
-0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
-0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
-0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
-0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
-0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
-056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
-056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
-056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
-056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
-056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
-056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
-0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
-0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
-0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
-0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
-0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
-0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
-0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
-0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
-0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
-0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
-057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
-057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
-057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
-057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
-057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
-057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
-0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
-0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
-0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
-0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
-0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
-0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
-0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
-0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
-0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
-058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
-0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
-0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
-0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
-0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
-0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
-0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
-0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
-0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
-0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
-059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
-059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
-059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
-059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
-059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
-059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
-05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
-05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
-05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
-05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
-05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
-05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
-05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
-05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
-05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
-05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
-05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
-05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
-05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
-05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
-05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
-05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
-05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
-05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
-05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
-05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
-05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
-05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
-05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
-05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
-05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
-05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
-05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
-05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
-05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
-05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
-05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
-05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
-05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
-05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
-05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
-05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
-05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
-05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
-05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
-05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
-05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
-05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
-05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
-05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
-05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
-05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
-05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
-05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
-05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
-05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
-05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
-05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
-05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
-05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
-05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
-05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
-05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
-05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
-05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
-05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
-05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
-05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
-05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
-05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
-05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
-05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
-05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
-0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
-0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
-0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
-0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
-060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
-060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
-060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
-060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
-0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
-0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
-0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
-0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
-0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
-0615;ARABIC SMALL HIGH TAH ;Mn;230;NSM;;;;;N;;;;;
-061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
-061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
-0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
-0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
-0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
-0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
-0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
-0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
-0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
-0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
-0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
-062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
-062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
-062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
-062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
-062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
-062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
-0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
-0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
-0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
-0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
-0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
-0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
-0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
-0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
-0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
-063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
-0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
-0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
-0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
-0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
-0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
-0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
-0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
-0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
-0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
-064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
-064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
-064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
-064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
-064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
-064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
-0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
-0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
-0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
-0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
-0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
-0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
-0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
-0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
-0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
-0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
-0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
-0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
-0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
-0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
-0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
-0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
-0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
-0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
-066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
-066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
-066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
-066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
-066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
-0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
-0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
-0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
-0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
-0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
-0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
-0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
-0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
-0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
-0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
-067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
-067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
-067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
-067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
-067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
-067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
-0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
-0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
-0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
-0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
-0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
-0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
-0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
-0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
-0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
-0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
-068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
-068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
-068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
-068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
-068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
-0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
-0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
-0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
-0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
-0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
-0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
-0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
-0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
-0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
-069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
-06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
-06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
-06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
-06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
-06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
-06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
-06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
-06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
-06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
-06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
-06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
-06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
-06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
-06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
-06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
-06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
-06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
-06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
-06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
-06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
-06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
-06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
-06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
-06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
-06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
-06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
-06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
-06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
-06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
-06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
-06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
-06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
-06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
-06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
-06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
-06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
-06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
-06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
-06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
-06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
-06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
-06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
-06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
-06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
-06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
-06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
-06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
-06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
-06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
-06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
-06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
-06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
-06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
-06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
-06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
-06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
-06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
-06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
-06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
-06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
-06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
-06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
-06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
-06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
-06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
-06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
-06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
-06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
-06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
-06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
-06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
-06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
-06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
-06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
-06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
-06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
-06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
-0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
-0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
-0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
-0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
-0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
-070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
-070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
-070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
-070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
-0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
-0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
-0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
-0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
-0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
-0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
-0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
-0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
-0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
-071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
-071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
-071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
-071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
-071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
-0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
-0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
-0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
-0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
-0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
-0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
-0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
-0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
-0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
-0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
-072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
-072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
-072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
-072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
-072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
-072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
-0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
-0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
-073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
-073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
-0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
-0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
-0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
-0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
-074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
-074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
-074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
-074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
-0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
-0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
-0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
-0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
-0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
-0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
-0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
-0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
-078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
-078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
-078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
-078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
-078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
-078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
-0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
-0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
-0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
-0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
-0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
-0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
-0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
-0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
-0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
-079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
-079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
-079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
-079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
-079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
-079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
-07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
-07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
-07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
-07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
-07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
-07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
-07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
-07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
-07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
-07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
-07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
-07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
-07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
-07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
-07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
-07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
-07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
-07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
-0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
-0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
-0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
-0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
-0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
-0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
-090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
-090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
-090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
-090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
-0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
-0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
-0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
-0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
-0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
-0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
-0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
-0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
-091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
-091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
-091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
-091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
-091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
-091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
-0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
-0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
-0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
-0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
-092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
-092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
-092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
-092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
-092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
-092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
-0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
-0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
-0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
-0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
-0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
-0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
-0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
-093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
-0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
-094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
-0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
-0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
-0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
-0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
-095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
-095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
-095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
-095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
-095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
-095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
-0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
-0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
-0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
-0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
-0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
-0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
-0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
-0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
-098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
-098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
-0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
-0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
-0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
-0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
-0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
-0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
-099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
-099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
-099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
-099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
-099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
-099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
-09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
-09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
-09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
-09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
-09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
-09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
-09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
-09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
-09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
-09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
-09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
-09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
-09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
-09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
-09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
-09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
-09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
-09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
-09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
-09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
-09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
-09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
-09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
-09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
-09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
-09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
-09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
-09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
-09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
-09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
-09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
-09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
-09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
-09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
-09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
-0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
-0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
-0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
-0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
-0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
-0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
-0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
-0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
-0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
-0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
-0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
-0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
-0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
-0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
-0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
-0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
-0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
-0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
-0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
-0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
-0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
-0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
-0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
-0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
-0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
-0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
-0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
-0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
-0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
-0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
-0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
-0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
-0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
-0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
-0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
-0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
-0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
-0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
-0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
-0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
-0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
-0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
-0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
-0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
-0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
-0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
-0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
-0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
-0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
-0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
-0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
-0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
-0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
-0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
-0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
-0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
-0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
-0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
-0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
-0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
-0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
-0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
-0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
-0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
-0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
-0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
-0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
-0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
-0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
-0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
-0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
-0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
-0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
-0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
-0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
-0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
-0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
-0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
-0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
-0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
-0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
-0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
-0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
-0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
-0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
-0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
-0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
-0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
-0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
-0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
-0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
-0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
-0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
-0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
-0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
-0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
-0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
-0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
-0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
-0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
-0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
-0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
-0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
-0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
-0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
-0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
-0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
-0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
-0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
-0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
-0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
-0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
-0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
-0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
-0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
-0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
-0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
-0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
-0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
-0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
-0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
-0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
-0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
-0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
-0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
-0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
-0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
-0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
-0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
-0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
-0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;;
-0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;;
-0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;;
-0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;;
-0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;;
-0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;;
-0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;;
-0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;;
-0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
-0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
-0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
-0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
-0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
-0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
-0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
-0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
-0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
-0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
-0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
-0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
-0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
-0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
-0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
-0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
-0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
-0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
-0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
-0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
-0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
-0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
-0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
-0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
-0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
-0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
-0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
-0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
-0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
-0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
-0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
-0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
-0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
-0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
-0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
-0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
-0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
-0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
-0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
-0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
-0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
-0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
-0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
-0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
-0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
-0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
-0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
-0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
-0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
-0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
-0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
-0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
-0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
-0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
-0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
-0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
-0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
-0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
-0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
-0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
-0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
-0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
-0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
-0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
-0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
-0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
-0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
-0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
-0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
-0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
-0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
-0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
-0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
-0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
-0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
-0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
-0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
-0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
-0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
-0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
-0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
-0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
-0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
-0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
-0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
-0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
-0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
-0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
-0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
-0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
-0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
-0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
-0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
-0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
-0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
-0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
-0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
-0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
-0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
-0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
-0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
-0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
-0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
-0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
-0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
-0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
-0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
-0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
-0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
-0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
-0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
-0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
-0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
-0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
-0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
-0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
-0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
-0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
-0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
-0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
-0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
-0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
-0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
-0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
-0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
-0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
-0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
-0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
-0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
-0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
-0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
-0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
-0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
-0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
-0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
-0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
-0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
-0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
-0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
-0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
-0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
-0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
-0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
-0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
-0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
-0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
-0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
-0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
-0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
-0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
-0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
-0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
-0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
-0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
-0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
-0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
-0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
-0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
-0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
-0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
-0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
-0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
-0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
-0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
-0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
-0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
-0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
-0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
-0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
-0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
-0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
-0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
-0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
-0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
-0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
-0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
-0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
-0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
-0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
-0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
-0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
-0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
-0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
-0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
-0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
-0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
-0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
-0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
-0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
-0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
-0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
-0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
-0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
-0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
-0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
-0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
-0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
-0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
-0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
-0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
-0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
-0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
-0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
-0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
-0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
-0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
-0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
-0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
-0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
-0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
-0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
-0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
-0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
-0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
-0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
-0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
-0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
-0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
-0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
-0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
-0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
-0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
-0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
-0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
-0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
-0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
-0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
-0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
-0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
-0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
-0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
-0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
-0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
-0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
-0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
-0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
-0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
-0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
-0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
-0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
-0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
-0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
-0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
-0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
-0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
-0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
-0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
-0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
-0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
-0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
-0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
-0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
-0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
-0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
-0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
-0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
-0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
-0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
-0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
-0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
-0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
-0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
-0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
-0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
-0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
-0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
-0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
-0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
-0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
-0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
-0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
-0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
-0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
-0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
-0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
-0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
-0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
-0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
-0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
-0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
-0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
-0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
-0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
-0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
-0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
-0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
-0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
-0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
-0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
-0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
-0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
-0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
-0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
-0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
-0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
-0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
-0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
-0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
-0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
-0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
-0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
-0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
-0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
-0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
-0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
-0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
-0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
-0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
-0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
-0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
-0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
-0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
-0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
-0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
-0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
-0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
-0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
-0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
-0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
-0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
-0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
-0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
-0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
-0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
-0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
-0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
-0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
-0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
-0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
-0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
-0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
-0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
-0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
-0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
-0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
-0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
-0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
-0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
-0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
-0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
-0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
-0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
-0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
-0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
-0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
-0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
-0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
-0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
-0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
-0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
-0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
-0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
-0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
-0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
-0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
-0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
-0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
-0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
-0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
-0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
-0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
-0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
-0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
-0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
-0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
-0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
-0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
-0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
-0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
-0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
-0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
-0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
-0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
-0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
-0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
-0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
-0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
-0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
-0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
-0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
-0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
-0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
-0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
-0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
-0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
-0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
-0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
-0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
-0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
-0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
-0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
-0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
-0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
-0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
-0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
-0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
-0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
-0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
-0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
-0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
-0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
-0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
-0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
-0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
-0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
-0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
-0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
-0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
-0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
-0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
-0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
-0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
-0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
-0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
-0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
-0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
-0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
-0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
-0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
-0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
-0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
-0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
-0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
-0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
-0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
-0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
-0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
-0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
-0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
-0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
-0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
-0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
-0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
-0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
-0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
-0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
-0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
-0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
-0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
-0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
-0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
-0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
-0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
-0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
-0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
-0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
-0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
-0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
-0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
-0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
-0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
-0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
-0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
-0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
-0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
-0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
-0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
-0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
-0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
-0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
-0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
-0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
-0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
-0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
-0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
-0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
-0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
-0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
-0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
-0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
-0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
-1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
-1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
-1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
-1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
-1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
-1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
-1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
-1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
-1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
-1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
-100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
-100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
-100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
-100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
-100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
-100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
-1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
-1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
-1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
-1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
-1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
-1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
-1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
-1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
-1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
-1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
-101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
-101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
-101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
-101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
-101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
-101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
-1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
-1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
-1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
-1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
-1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
-1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
-1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
-1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
-102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
-102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
-1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
-104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
-104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
-104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
-104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
-104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
-1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
-1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
-1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
-10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
-10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
-10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
-10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
-10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
-10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
-1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
-1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
-1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
-110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
-110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
-1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
-1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
-111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
-111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
-1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
-1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
-1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
-112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
-112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
-112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
-1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
-1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
-113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
-113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
-113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
-113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
-113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
-1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
-1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
-1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
-1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
-114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
-114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
-114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
-114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
-114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
-1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
-1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
-1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
-1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
-1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
-1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
-1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
-1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
-1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
-1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
-1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
-116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
-116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
-116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
-116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
-116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
-116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
-1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
-1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
-1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
-1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
-1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
-1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
-1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
-1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
-1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
-1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
-117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
-117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
-117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
-117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
-117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
-117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
-1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
-1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
-1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
-1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
-1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
-1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
-1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
-1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
-1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
-1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
-118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
-118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
-118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
-118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
-118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
-118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
-1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
-1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
-1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
-1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
-1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
-1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
-1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
-1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
-1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
-1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
-119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
-119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
-119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
-119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
-119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
-119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
-11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
-11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
-11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
-11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
-11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
-11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
-11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
-11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
-11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
-11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
-11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
-11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
-11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
-11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
-11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
-11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
-11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
-11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
-11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
-11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
-11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
-11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
-11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
-11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
-11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
-11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
-11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
-11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
-11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
-11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
-11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
-11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
-11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
-11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
-11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
-1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
-1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
-1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
-1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
-120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
-120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
-1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
-1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
-1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
-1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
-1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
-1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
-1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
-1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
-1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
-121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
-121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
-1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
-1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
-1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
-1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
-1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
-1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
-1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
-1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
-1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
-122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
-122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
-122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
-1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
-1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
-1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
-1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
-123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
-123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
-123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
-1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
-1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
-1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
-1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
-1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
-124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
-124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
-124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
-124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
-1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
-1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
-1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
-1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
-1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
-1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
-1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
-1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
-125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
-125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
-125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
-125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
-1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
-1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
-1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
-1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
-126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
-126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
-126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
-1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
-1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
-1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
-1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
-127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
-127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
-1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
-1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
-1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
-1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
-1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
-1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
-128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
-128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
-128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
-128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
-1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
-1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
-1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
-1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
-1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
-129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
-129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
-129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
-12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
-12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
-12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
-12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
-12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
-12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
-12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
-12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
-12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
-12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
-12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
-12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
-12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
-12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
-12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
-12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
-12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
-12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
-12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
-12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
-12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
-12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
-12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
-12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
-12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
-12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
-12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
-12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
-12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
-12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
-12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
-12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
-12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
-12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
-12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
-12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
-12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
-12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
-12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
-12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
-12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
-12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
-12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
-12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
-12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
-12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
-12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
-12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
-12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
-12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
-12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
-12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
-12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
-12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
-1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
-1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
-1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
-1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
-1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
-1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
-130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
-130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
-1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
-1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
-1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
-1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
-1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
-131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
-131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
-1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
-1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
-1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
-1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
-1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
-1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
-1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
-1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
-132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
-132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
-132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
-1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
-1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
-1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
-1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
-1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
-1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
-1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
-1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
-1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
-1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
-133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
-133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
-133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
-133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
-133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
-133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
-1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
-1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
-1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
-1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
-1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
-1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
-1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
-1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
-134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
-134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
-134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
-1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
-1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
-1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
-1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
-1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
-1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
-135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
-1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
-1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
-1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
-1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
-1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
-1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
-1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
-1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
-1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
-1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
-1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
-1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
-1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
-1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
-1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
-137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
-137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
-137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
-13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
-13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
-13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
-13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
-13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
-13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
-13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
-13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
-13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
-13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
-13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
-13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
-13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
-13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
-13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
-13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
-13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
-13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
-13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
-13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
-13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
-13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
-13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
-13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
-13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
-13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
-13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
-13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
-13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
-13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
-13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
-13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
-13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
-13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
-13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
-13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
-13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
-13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
-13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
-13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
-13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
-13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
-13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
-13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
-13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
-13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
-13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
-13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
-13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
-13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
-13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
-13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
-13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
-13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
-13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
-13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
-13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
-13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
-13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
-13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
-13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
-13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
-13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
-13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
-13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
-13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
-13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
-13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
-13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
-13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
-13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
-13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
-13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
-13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
-13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
-13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
-13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
-13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
-13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
-13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
-13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
-13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
-13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
-13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
-13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
-1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
-1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
-1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
-1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
-1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
-1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
-1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
-1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
-1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
-140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
-140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
-140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
-140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
-140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
-140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
-1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
-1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
-1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
-1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
-1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
-1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
-1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
-1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
-1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
-1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
-141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
-141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
-141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
-141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
-141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
-141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
-1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
-1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
-1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
-1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
-1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
-1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
-1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
-1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
-1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
-1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
-142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
-142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
-142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
-142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
-142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
-142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
-1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
-1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
-1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
-1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
-1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
-1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
-1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
-1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
-1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
-1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
-143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
-143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
-143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
-143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
-143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
-143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
-1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
-1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
-1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
-1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
-1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
-1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
-1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
-1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
-144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
-144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
-144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
-144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
-144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
-144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
-1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
-1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
-1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
-1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
-1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
-1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
-1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
-1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
-1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
-1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
-145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
-145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
-145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
-145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
-145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
-145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
-1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
-1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
-1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
-1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
-1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
-1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
-1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
-1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
-1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
-1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
-146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
-146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
-146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
-146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
-146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
-146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
-1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
-1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
-1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
-1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
-1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
-1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
-1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
-1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
-1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
-1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
-147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
-147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
-147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
-147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
-147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
-147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
-1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
-1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
-1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
-1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
-1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
-1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
-1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
-1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
-1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
-1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
-148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
-148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
-148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
-148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
-148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
-148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
-1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
-1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
-1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
-1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
-1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
-1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
-1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
-1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
-1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
-1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
-149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
-149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
-149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
-149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
-149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
-149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
-14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
-14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
-14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
-14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
-14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
-14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
-14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
-14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
-14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
-14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
-14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
-14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
-14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
-14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
-14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
-14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
-14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
-14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
-14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
-14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
-14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
-14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
-14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
-14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
-14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
-14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
-14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
-14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
-14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
-14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
-14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
-14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
-14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
-14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
-14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
-14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
-14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
-14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
-14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
-14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
-14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
-14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
-14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
-14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
-14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
-14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
-14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
-14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
-14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
-14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
-14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
-14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
-14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
-14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
-14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
-14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
-14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
-14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
-14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
-14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
-14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
-14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
-14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
-14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
-14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
-14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
-14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
-14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
-14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
-14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
-14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
-14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
-14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
-14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
-14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
-14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
-14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
-14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
-14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
-14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
-14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
-14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
-14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
-14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
-14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
-14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
-14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
-14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
-14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
-14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
-14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
-14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
-14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
-14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
-14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
-14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
-1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
-1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
-1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
-1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
-1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
-1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
-1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
-1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
-1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
-1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
-150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
-150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
-150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
-150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
-150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
-150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
-1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
-1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
-1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
-1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
-1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
-1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
-1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
-1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
-1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
-1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
-151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
-151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
-151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
-151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
-151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
-151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
-1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
-1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
-1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
-1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
-1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
-1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
-1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
-1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
-1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
-1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
-152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
-152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
-152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
-152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
-152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
-152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
-1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
-1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
-1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
-1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
-1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
-1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
-1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
-1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
-1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
-1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
-153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
-153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
-153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
-153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
-153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
-153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
-1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
-1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
-1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
-1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
-1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
-1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
-1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
-1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
-1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
-1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
-154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
-154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
-154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
-154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
-154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
-154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
-1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
-1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
-1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
-1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
-1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
-1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
-1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
-1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
-1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
-1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
-155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
-155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
-155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
-155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
-155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
-155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
-1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
-1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
-1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
-1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
-1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
-1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
-1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
-1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
-1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
-1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
-156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
-156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
-156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
-156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
-156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
-156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
-1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
-1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
-1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
-1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
-1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
-1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
-1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
-1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
-1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
-1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
-157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
-157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
-157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
-157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
-157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
-157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
-1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
-1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
-1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
-1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
-1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
-1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
-1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
-1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
-1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
-1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
-158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
-158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
-158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
-158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
-158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
-158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
-1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
-1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
-1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
-1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
-1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
-1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
-1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
-1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
-1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
-1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
-159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
-159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
-159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
-159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
-159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
-159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
-15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
-15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
-15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
-15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
-15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
-15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
-15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
-15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
-15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
-15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
-15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
-15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
-15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
-15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
-15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
-15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
-15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
-15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
-15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
-15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
-15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
-15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
-15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
-15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
-15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
-15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
-15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
-15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
-15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
-15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
-15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
-15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
-15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
-15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
-15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
-15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
-15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
-15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
-15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
-15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
-15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
-15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
-15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
-15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
-15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
-15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
-15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
-15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
-15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
-15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
-15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
-15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
-15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
-15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
-15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
-15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
-15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
-15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
-15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
-15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
-15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
-15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
-15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
-15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
-15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
-15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
-15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
-15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
-15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
-15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
-15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
-15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
-15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
-15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
-15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
-15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
-15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
-15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
-15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
-15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
-15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
-15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
-15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
-15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
-15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
-15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
-15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
-15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
-15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
-15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
-15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
-15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
-15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
-15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
-15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
-15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
-1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
-1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
-1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
-1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
-1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
-1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
-1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
-1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
-1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
-1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
-160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
-160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
-160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
-160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
-160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
-160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
-1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
-1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
-1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
-1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
-1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
-1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
-1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
-1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
-1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
-1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
-161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
-161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
-161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
-161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
-161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
-161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
-1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
-1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
-1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
-1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
-1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
-1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
-1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
-1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
-1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
-1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
-162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
-162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
-162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
-162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
-162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
-162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
-1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
-1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
-1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
-1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
-1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
-1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
-1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
-1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
-1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
-1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
-163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
-163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
-163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
-163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
-163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
-163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
-1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
-1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
-1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
-1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
-1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
-1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
-1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
-1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
-1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
-1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
-164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
-164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
-164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
-164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
-164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
-164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
-1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
-1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
-1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
-1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
-1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
-1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
-1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
-1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
-1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
-1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
-165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
-165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
-165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
-165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
-165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
-165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
-1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
-1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
-1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
-1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
-1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
-1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
-1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
-1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
-1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
-1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
-166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
-166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
-166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
-166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
-166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
-166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
-1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
-1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
-1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
-1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
-1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
-1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
-1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
-1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
-1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
-1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
-1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
-1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
-1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
-1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
-1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
-1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
-1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
-168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
-168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
-168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
-168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
-168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
-168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
-1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
-1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
-1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
-1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
-1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
-1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
-1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
-1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
-1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
-1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
-169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
-169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
-169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
-16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
-16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
-16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
-16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
-16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
-16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
-16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
-16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
-16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
-16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
-16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
-16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
-16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
-16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
-16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
-16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
-16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
-16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
-16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
-16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
-16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
-16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
-16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
-16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
-16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
-16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
-16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
-16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
-16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
-16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
-16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
-16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
-16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
-16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
-16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
-16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
-16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
-16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
-16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
-16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
-16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
-16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
-16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
-16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
-16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
-16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
-16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
-16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
-16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
-16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
-16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
-16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
-16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
-16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
-16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
-16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
-16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
-16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
-16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
-16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
-16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
-16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
-16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
-16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
-16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
-16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
-16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
-16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
-16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
-16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
-16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
-16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;;
-16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;;
-16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;;
-1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
-1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
-1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
-1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
-1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
-1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
-1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
-1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
-1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
-1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
-170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
-170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
-170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
-170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
-170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
-1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
-1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
-1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
-1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
-1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
-1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
-1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
-1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
-1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
-1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
-1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
-1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
-172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
-172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
-172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
-172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
-172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
-172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
-1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
-1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
-1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
-1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
-1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
-1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
-1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
-1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
-1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
-1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
-1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
-1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
-1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
-174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
-174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
-174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
-174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
-174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
-174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
-1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
-1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
-1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
-1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
-1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
-1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
-1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
-1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
-1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
-1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
-1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
-1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
-176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
-176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
-176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
-176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
-176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
-1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
-1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
-1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
-1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
-1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
-1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
-1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
-1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
-1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
-1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
-1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
-178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
-178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
-178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
-178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
-178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
-178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
-1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
-1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
-1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
-1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
-1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
-1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
-1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
-1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
-1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
-1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
-179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
-179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
-179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
-179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
-179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
-179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
-17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
-17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
-17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
-17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;;
-17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;;
-17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
-17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
-17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
-17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
-17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
-17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
-17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
-17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
-17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
-17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
-17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
-17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
-17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
-17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
-17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
-17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;;
-17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;;
-17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
-17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
-17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
-17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
-17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
-17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
-17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
-17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
-17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
-17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
-17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
-17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
-17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
-17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
-17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
-17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
-17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
-17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
-17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
-17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;;
-17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
-17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
-17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
-17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
-17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;;
-17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
-17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
-17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
-17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
-17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
-17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
-17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
-17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
-17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
-17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
-17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
-17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
-17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
-17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
-17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
-1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
-1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
-1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
-1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
-1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
-1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
-1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
-1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
-1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
-180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
-180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
-180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
-180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
-180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
-1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
-1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
-1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
-1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
-1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
-1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
-1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
-1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
-1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
-1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
-182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
-182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
-182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
-182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
-182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
-182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
-1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
-1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
-1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
-1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
-1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
-1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
-1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
-1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
-183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
-183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
-183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
-1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
-1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
-1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
-1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
-1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
-1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
-1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
-1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
-1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
-1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
-184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
-184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
-184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
-184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
-184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
-184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
-1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
-1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
-1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
-1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
-1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
-1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
-1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
-1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
-1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
-1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
-185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
-185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
-185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
-185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
-185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
-185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
-1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
-1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
-1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
-1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
-1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
-1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
-1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
-1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
-1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
-1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
-186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
-186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
-186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
-186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
-186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
-186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
-1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
-1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
-1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
-1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
-1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
-1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
-1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
-1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
-1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
-1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
-1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
-1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
-1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
-1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
-1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
-1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
-1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
-1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
-188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
-188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
-188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
-188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
-1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
-1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
-1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
-1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
-1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
-189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
-189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
-189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
-18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
-18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
-18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
-18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
-18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
-18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
-18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
-1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
-1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
-1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
-1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
-1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
-1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
-1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
-1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
-1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
-1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
-190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
-190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
-190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
-190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
-190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
-190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
-1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
-1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
-1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
-1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
-1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
-1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
-1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
-1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
-1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
-1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
-191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
-191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
-191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
-1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
-1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
-1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;;
-192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;;
-192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;;
-1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
-1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
-1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
-1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
-1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
-1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
-1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
-1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
-1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
-193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
-193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
-1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
-1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
-1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
-1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
-1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
-1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
-1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
-1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
-1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
-1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
-1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
-1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
-195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
-195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
-195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
-195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
-195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
-195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
-1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
-1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
-1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
-1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
-1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
-1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
-1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
-1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
-1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
-1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
-196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
-196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
-196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
-196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
-1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
-1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
-1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
-1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
-1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
-19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
-19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
-19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
-19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
-19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
-19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
-19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
-19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
-19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
-19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
-19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
-19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
-19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
-19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
-19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
-19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
-19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
-19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
-19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
-19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
-19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
-19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
-19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
-19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
-19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
-19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
-19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
-19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
-19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
-19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
-19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
-19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
-1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
-1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
-1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
-1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
-1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
-1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
-1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
-1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
-1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
-1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
-1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
-1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
-1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
-1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
-1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
-1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
-1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
-1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
-1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
-1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
-1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
-1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
-1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
-1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
-1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
-1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
-1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
-1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
-1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
-1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
-1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
-1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
-1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
-1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
-1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
-1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
-1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
-1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
-1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
-1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
-1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
-1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
-1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
-1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
-1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
-1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
-1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
-1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
-1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
-1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
-1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
-1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
-1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
-1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
-1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
-1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
-1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
-1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
-1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
-1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
-1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
-1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
-1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
-1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
-1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
-1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
-1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
-1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
-1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
-1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
-1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
-1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
-1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
-1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
-1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
-1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
-1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
-1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
-1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
-1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
-1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
-1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
-1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
-1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
-1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
-1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
-1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
-1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
-1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
-1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
-1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
-1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
-1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
-1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
-1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
-1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
-1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
-1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
-1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L;<sub> 0069;;;;N;;;;;
-1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;;
-1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;;
-1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;;
-1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;;
-1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;;
-1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;;
-1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
-1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
-1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
-1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
-1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
-1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
-1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
-1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
-1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
-1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
-1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
-1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
-1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
-1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
-1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
-1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
-1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
-1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
-1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
-1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
-1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
-1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
-1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
-1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
-1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
-1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
-1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
-1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
-1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
-1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
-1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
-1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
-1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
-1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
-1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
-1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
-1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
-1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
-1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
-1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
-1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
-1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
-1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
-1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
-1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
-1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
-1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
-1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
-1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
-1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
-1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
-1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
-1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
-1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
-1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
-1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
-1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
-1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
-1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
-1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
-1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
-1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
-1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
-1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
-1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
-1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
-1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
-1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
-1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
-1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
-1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
-1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
-1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
-1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
-1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
-1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
-1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
-1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
-1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
-1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
-1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
-1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
-1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
-1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
-1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
-1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
-1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
-1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
-1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
-1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
-1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
-1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
-1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
-1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
-1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
-1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
-1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
-1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
-1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
-1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
-1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
-1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
-1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
-1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
-1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
-1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
-1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
-1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
-1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
-1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
-1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
-1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
-1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
-1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
-1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
-1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
-1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
-1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
-1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
-1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
-1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
-1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
-1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
-1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
-1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
-1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
-1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
-1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
-1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
-1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
-1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
-1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
-1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
-1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
-1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
-1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
-1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
-1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
-1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
-1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
-1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
-1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
-1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
-1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
-1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
-1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
-1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
-1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
-1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
-1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
-1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
-1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
-1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
-1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
-1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
-1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
-1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
-1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
-1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
-1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
-1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
-1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
-1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
-1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
-1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
-1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
-1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
-1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
-1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
-1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
-1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
-1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
-1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
-1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
-1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
-1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
-1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
-1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
-1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
-1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
-1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
-1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
-1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
-1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
-1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
-1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
-1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
-1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
-1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
-1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
-1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
-1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
-1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
-1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
-1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
-1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
-1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
-1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
-1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
-1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
-1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
-1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
-1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
-1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
-1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
-1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
-1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
-1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
-1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
-1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
-1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
-1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
-1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
-1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
-1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
-1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
-1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
-1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
-1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
-1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
-1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
-1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
-1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
-1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
-1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
-1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
-1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
-1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
-1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
-1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
-1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
-1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
-1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
-1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
-1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
-1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
-1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
-1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
-1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
-1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
-1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
-1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
-1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
-1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
-1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
-1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
-1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
-1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
-1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
-1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
-1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
-1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
-1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
-1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
-1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
-1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
-1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
-1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
-1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
-1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
-1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
-1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
-1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
-1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
-1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
-1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
-1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
-1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
-1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
-1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
-1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
-1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
-1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
-1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
-1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
-1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
-1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
-1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
-1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
-1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
-1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
-1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
-1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
-1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
-1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
-1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
-1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
-1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
-1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
-1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
-1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
-1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
-1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
-1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
-1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
-1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
-1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
-1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
-1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
-1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
-1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
-1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
-1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
-1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
-1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
-1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
-1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
-1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
-1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
-1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
-1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
-1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
-1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
-1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
-1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
-1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
-1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
-1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
-1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
-1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
-1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
-1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
-1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
-1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
-1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
-1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
-1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
-1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
-1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
-1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
-1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
-1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
-1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
-1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
-1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
-1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
-1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
-1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
-1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
-1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
-1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
-1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
-1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
-1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
-1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
-1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
-1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
-1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
-1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
-1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
-1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
-1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
-1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
-1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
-1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
-1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
-1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
-1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
-1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
-1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
-1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
-1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
-1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
-1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
-1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
-1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
-1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
-1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
-1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
-1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
-1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
-1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
-1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
-1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
-1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
-1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
-1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
-1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
-1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
-1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
-1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
-1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
-1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
-1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
-1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
-1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
-1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
-1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
-1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
-1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
-1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
-1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
-1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
-1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
-1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
-1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
-1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
-1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
-1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
-1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
-1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
-1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
-1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
-1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
-1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
-1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
-1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
-1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
-1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
-1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
-1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
-1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
-1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
-1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
-1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
-1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
-1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
-1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
-1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
-1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
-1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
-1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
-1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
-1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
-1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
-1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
-1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
-1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
-1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
-1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
-1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
-1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
-1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
-1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
-1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
-1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
-1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
-1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
-1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
-1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
-1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
-1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
-1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
-1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
-1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
-1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
-1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
-1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
-1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
-1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
-1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
-1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
-1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
-1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
-1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
-1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
-1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
-1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
-1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
-1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
-1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
-1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
-1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
-1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
-1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
-1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
-1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
-1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
-1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
-1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
-1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
-1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
-1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
-1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
-1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
-1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
-1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
-1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
-1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
-1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
-2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
-2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
-2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
-200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
-200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
-200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
-200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
-2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
-2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
-2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
-2013;EN DASH;Pd;0;ON;;;;;N;;;;;
-2014;EM DASH;Pd;0;ON;;;;;N;;;;;
-2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
-2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
-2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
-2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
-2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
-201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
-201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
-201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
-201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
-201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
-201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
-2020;DAGGER;Po;0;ON;;;;;N;;;;;
-2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
-2022;BULLET;Po;0;ON;;;;;N;;;;;
-2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
-2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
-2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
-2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
-2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
-2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
-2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
-202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
-202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
-202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
-202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
-202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
-202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
-2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
-2032;PRIME;Po;0;ET;;;;;N;;;;;
-2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
-2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
-2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
-2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
-2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
-2038;CARET;Po;0;ON;;;;;N;;;;;
-2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
-203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
-203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
-203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
-203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
-203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
-203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
-2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
-2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
-2042;ASTERISM;Po;0;ON;;;;;N;;;;;
-2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
-2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
-2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
-2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
-2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
-2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
-2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
-204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
-204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
-204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
-204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
-2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
-2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
-2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
-2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
-2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
-2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
-205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
-2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
-2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
-2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
-206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
-2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L;<super> 0069;;;;N;;;;;
-2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
-2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
-2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
-2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
-2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
-2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
-207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
-207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
-207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
-207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
-207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
-207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
-2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
-2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
-2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
-2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
-2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
-2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
-2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
-2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
-2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
-2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
-208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
-208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
-208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
-208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
-208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
-20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
-20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
-20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
-20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
-20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
-20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
-20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
-20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
-20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
-20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
-20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
-20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
-20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
-20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
-20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
-20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
-20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
-20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
-20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
-20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
-20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
-20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
-20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
-20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
-20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
-20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
-20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
-20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
-20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
-20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
-20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
-20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
-20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
-20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
-20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
-20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
-20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
-20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
-20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
-20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
-20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
-20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
-2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
-2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
-2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
-2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
-2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
-2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
-2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
-2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
-2108;SCRUPLE;So;0;ON;;;;;N;;;;;
-2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
-210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
-210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
-210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
-210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
-210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
-2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
-2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
-2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
-2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
-2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
-2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
-2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
-2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
-2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
-211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
-211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
-211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
-211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
-211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
-211F;RESPONSE;So;0;ON;;;;;N;;;;;
-2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
-2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
-2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
-2123;VERSICLE;So;0;ON;;;;;N;;;;;
-2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
-2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
-2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
-2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
-2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
-2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
-212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
-212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
-212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
-212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
-212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
-212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
-2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
-2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
-2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
-2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
-2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
-2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
-2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
-2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
-213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
-213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
-213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
-2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
-2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
-2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
-2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
-2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
-214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
-2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
-2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
-2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
-2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
-2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
-2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
-2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
-215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
-215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
-215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
-215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
-215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
-215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
-2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
-2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
-2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
-2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
-2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
-2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
-2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
-2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
-2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
-2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
-216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
-216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
-216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
-216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
-216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
-216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
-2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
-2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
-2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
-2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
-2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
-2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
-2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
-2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
-2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
-2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
-217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
-217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
-217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
-217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
-217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
-217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
-2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
-2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
-2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
-2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
-2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
-2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
-2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
-2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
-2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
-2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
-2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
-2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
-2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
-2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
-219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
-219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
-219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
-219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
-219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
-219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
-21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
-21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
-21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
-21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
-21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
-21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
-21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
-21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
-21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
-21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
-21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
-21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
-21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
-21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
-21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
-21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
-21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
-21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
-21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
-21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
-21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
-21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
-21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
-21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
-21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
-21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
-21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
-21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
-21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
-21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
-21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
-21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
-21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
-21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
-21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
-21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
-21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
-21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
-21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
-21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
-21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
-21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
-21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
-21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
-21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
-21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
-21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
-21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
-21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
-21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
-21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
-21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
-21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
-21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
-21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
-21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
-21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
-21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
-21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
-21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
-21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
-21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
-21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
-21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
-21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
-21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
-21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
-21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
-21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
-21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
-21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
-21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
-21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
-21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
-21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
-21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
-21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
-21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
-2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
-2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
-2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
-2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
-2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
-2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
-2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
-2207;NABLA;Sm;0;ON;;;;;N;;;;;
-2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
-220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
-220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
-220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
-2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
-2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
-2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
-2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
-2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
-2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
-221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
-221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
-221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
-221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
-221E;INFINITY;Sm;0;ON;;;;;N;;;;;
-221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
-2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
-2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
-2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
-2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
-2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
-2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
-2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
-222A;UNION;Sm;0;ON;;;;;N;;;;;
-222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
-222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
-222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
-2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
-2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
-2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
-2236;RATIO;Sm;0;ON;;;;;N;;;;;
-2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
-2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
-2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
-223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
-223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
-223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
-223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
-223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
-2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
-2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
-2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
-2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
-2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
-224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
-224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
-2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
-2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
-2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
-2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
-2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
-225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
-225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
-225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
-225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
-225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
-225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
-2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
-2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
-2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
-2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
-2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
-2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
-2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
-2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
-226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
-226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
-226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
-226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
-226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
-226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
-2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
-2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
-2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
-2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
-2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
-2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
-2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
-2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
-2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
-2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
-227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
-227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
-2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
-2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
-2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
-2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
-2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
-2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
-2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
-228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
-228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
-228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
-228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
-228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
-228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
-2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
-2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
-2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
-2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
-2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
-229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
-229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
-229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
-22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
-22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
-22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
-22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
-22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
-22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
-22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
-22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
-22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
-22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
-22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
-22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
-22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
-22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
-22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
-22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
-22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
-22BB;XOR;Sm;0;ON;;;;;N;;;;;
-22BC;NAND;Sm;0;ON;;;;;N;;;;;
-22BD;NOR;Sm;0;ON;;;;;N;;;;;
-22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
-22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
-22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
-22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
-22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
-22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
-22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
-22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
-22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
-22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
-22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
-22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
-22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
-22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
-22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
-22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
-22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
-22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
-22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
-22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
-22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
-22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
-22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
-22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
-22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
-22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
-22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
-22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
-22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
-22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
-2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
-2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
-2302;HOUSE;So;0;ON;;;;;N;;;;;
-2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
-2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
-2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
-2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
-2307;WAVY LINE;So;0;ON;;;;;N;;;;;
-2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
-2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
-230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
-230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
-230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
-230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
-2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
-2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
-2312;ARC;So;0;ON;;;;;N;;;;;
-2313;SEGMENT;So;0;ON;;;;;N;;;;;
-2314;SECTOR;So;0;ON;;;;;N;;;;;
-2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
-2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
-2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
-2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
-2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
-231A;WATCH;So;0;ON;;;;;N;;;;;
-231B;HOURGLASS;So;0;ON;;;;;N;;;;;
-231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
-231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
-231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
-231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
-2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2322;FROWN;So;0;ON;;;;;N;;;;;
-2323;SMILE;So;0;ON;;;;;N;;;;;
-2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
-2325;OPTION KEY;So;0;ON;;;;;N;;;;;
-2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
-2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
-2328;KEYBOARD;So;0;ON;;;;;N;;;;;
-2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
-232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
-232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
-232C;BENZENE RING;So;0;ON;;;;;N;;;;;
-232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
-232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
-232F;SYMMETRY;So;0;ON;;;;;N;;;;;
-2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
-2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
-2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
-2333;SLOPE;So;0;ON;;;;;N;;;;;
-2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
-2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
-2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
-2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
-2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
-2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
-233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
-233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
-233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
-233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
-233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
-233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
-2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
-2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
-2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
-2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
-2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
-2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
-2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
-2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
-2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
-2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
-234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
-234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
-234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
-234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
-234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
-234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
-2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
-2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
-2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
-2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
-2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
-2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
-2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
-2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
-2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
-2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
-235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
-235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
-235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
-235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
-235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
-235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
-2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
-2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
-2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
-2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
-2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
-2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
-2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
-2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
-2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
-2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
-236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
-236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
-236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
-236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
-236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
-236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
-2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
-2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
-2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
-2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
-2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
-2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
-2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
-2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
-2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
-2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
-237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
-237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
-237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
-237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
-237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
-237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
-2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
-2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
-2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
-2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
-2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
-2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
-2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
-238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
-238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
-238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
-238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
-238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
-238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
-2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
-2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
-2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
-2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
-2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
-239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
-239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
-239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
-239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
-23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
-23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
-23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
-23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
-23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
-23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
-23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
-23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
-23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
-23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
-23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
-23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
-23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
-23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
-23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
-23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
-23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
-23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
-23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
-23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
-23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;;
-23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;;
-23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;;
-23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
-23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
-23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
-23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
-23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
-23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
-23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
-23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
-23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
-23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
-23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
-23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
-23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
-23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
-23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
-23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
-23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
-23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
-23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
-23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
-23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
-23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
-23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
-23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
-23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
-23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
-2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
-2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
-2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
-2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
-2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
-2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
-2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
-2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
-2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
-2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
-240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
-240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
-240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
-240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
-240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
-240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
-2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
-2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
-2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
-2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
-2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
-2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
-2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
-2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
-2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
-2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
-241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
-241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
-241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
-241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
-241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
-241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
-2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
-2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
-2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
-2423;OPEN BOX;So;0;ON;;;;;N;;;;;
-2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
-2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
-2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
-2440;OCR HOOK;So;0;ON;;;;;N;;;;;
-2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
-2442;OCR FORK;So;0;ON;;;;;N;;;;;
-2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
-2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
-2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
-2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
-2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
-2448;OCR DASH;So;0;ON;;;;;N;;;;;
-2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
-244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
-2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
-2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
-2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
-2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
-2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
-2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
-2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
-2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
-2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
-2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
-246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
-246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
-246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
-246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
-246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
-246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
-2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
-2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
-2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
-2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
-2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
-2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
-2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
-2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
-2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
-2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
-247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
-247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
-247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
-247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
-247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
-247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
-2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
-2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
-2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
-2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
-2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
-2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
-2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
-2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
-2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
-2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
-248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
-248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
-248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
-248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
-248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
-248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
-2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
-2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
-2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
-2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
-2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
-2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
-2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
-2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
-2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
-2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
-249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
-249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
-249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
-249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
-249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
-249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
-24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
-24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
-24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
-24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
-24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
-24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
-24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
-24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
-24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
-24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
-24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
-24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
-24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
-24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
-24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
-24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
-24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
-24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
-24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
-24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
-24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
-24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
-24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
-24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
-24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
-24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
-24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
-24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
-24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
-24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
-24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
-24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
-24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
-24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
-24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
-24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
-24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
-24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
-24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
-24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
-24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
-24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
-24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
-24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
-24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
-24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
-24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
-24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
-24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
-24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
-24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
-24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
-24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
-24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
-24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
-24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
-24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
-24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
-24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
-24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
-24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
-24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
-24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
-24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
-24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
-24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
-24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
-24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
-24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
-24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
-24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
-24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
-24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
-24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
-24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
-24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
-24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
-24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
-24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
-24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
-24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
-24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
-24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
-24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
-24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
-24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
-24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
-24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
-24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
-24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
-24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
-24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
-24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
-24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
-24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
-24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
-2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
-2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
-2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
-2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
-2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
-2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
-2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
-2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
-2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
-2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
-250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
-250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
-250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
-250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
-250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
-250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
-2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
-2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
-2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
-2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
-2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
-2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
-2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
-2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
-2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
-2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
-251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
-251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
-251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
-251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
-251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
-251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
-2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
-2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
-2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
-2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
-2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
-2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
-2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
-2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
-2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
-252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
-252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
-252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
-252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
-252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
-252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
-2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
-2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
-2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
-2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
-2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
-2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
-2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
-2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
-2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
-2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
-253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
-253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
-253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
-253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
-253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
-253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
-2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
-2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
-2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
-2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
-2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
-2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
-2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
-2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
-2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
-254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
-254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
-254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
-254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
-254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
-254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
-2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
-2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
-2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
-2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
-2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
-2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
-2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
-2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
-2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
-2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
-255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
-255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
-255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
-255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
-255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
-255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
-2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
-2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
-2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
-2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
-2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
-2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
-2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
-2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
-2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
-2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
-256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
-256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
-256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
-256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
-256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
-256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
-2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
-2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
-2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
-2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
-2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
-2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
-2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
-2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
-2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
-2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
-257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
-257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
-257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
-257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
-257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
-257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
-2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
-2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
-2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
-258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
-258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
-2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
-2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
-2593;DARK SHADE;So;0;ON;;;;;N;;;;;
-2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
-2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
-2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
-2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
-259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
-259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
-259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
-259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
-259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
-259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
-25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
-25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
-25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
-25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
-25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
-25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
-25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
-25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
-25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
-25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
-25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
-25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
-25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
-25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
-25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
-25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
-25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
-25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
-25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
-25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
-25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
-25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
-25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
-25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
-25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
-25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
-25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
-25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
-25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
-25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
-25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
-25C9;FISHEYE;So;0;ON;;;;;N;;;;;
-25CA;LOZENGE;So;0;ON;;;;;N;;;;;
-25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
-25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
-25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
-25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
-25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
-25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
-25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
-25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
-25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
-25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
-25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
-25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
-25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
-25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
-25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
-25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
-25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
-2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-2601;CLOUD;So;0;ON;;;;;N;;;;;
-2602;UMBRELLA;So;0;ON;;;;;N;;;;;
-2603;SNOWMAN;So;0;ON;;;;;N;;;;;
-2604;COMET;So;0;ON;;;;;N;;;;;
-2605;BLACK STAR;So;0;ON;;;;;N;;;;;
-2606;WHITE STAR;So;0;ON;;;;;N;;;;;
-2607;LIGHTNING;So;0;ON;;;;;N;;;;;
-2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
-2609;SUN;So;0;ON;;;;;N;;;;;
-260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
-260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
-260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
-260D;OPPOSITION;So;0;ON;;;;;N;;;;;
-260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
-260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
-2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
-2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
-2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
-2613;SALTIRE;So;0;ON;;;;;N;;;;;
-2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
-2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
-2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
-2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
-2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
-261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
-2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
-2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
-2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
-2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
-2624;CADUCEUS;So;0;ON;;;;;N;;;;;
-2625;ANKH;So;0;ON;;;;;N;;;;;
-2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
-2627;CHI RHO;So;0;ON;;;;;N;;;;;
-2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
-2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
-262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
-262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
-262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
-262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
-262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
-262F;YIN YANG;So;0;ON;;;;;N;;;;;
-2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
-2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
-2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
-2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
-2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
-2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
-2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
-2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
-2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
-263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
-263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
-263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263F;MERCURY;So;0;ON;;;;;N;;;;;
-2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
-2641;EARTH;So;0;ON;;;;;N;;;;;
-2642;MALE SIGN;So;0;ON;;;;;N;;;;;
-2643;JUPITER;So;0;ON;;;;;N;;;;;
-2644;SATURN;So;0;ON;;;;;N;;;;;
-2645;URANUS;So;0;ON;;;;;N;;;;;
-2646;NEPTUNE;So;0;ON;;;;;N;;;;;
-2647;PLUTO;So;0;ON;;;;;N;;;;;
-2648;ARIES;So;0;ON;;;;;N;;;;;
-2649;TAURUS;So;0;ON;;;;;N;;;;;
-264A;GEMINI;So;0;ON;;;;;N;;;;;
-264B;CANCER;So;0;ON;;;;;N;;;;;
-264C;LEO;So;0;ON;;;;;N;;;;;
-264D;VIRGO;So;0;ON;;;;;N;;;;;
-264E;LIBRA;So;0;ON;;;;;N;;;;;
-264F;SCORPIUS;So;0;ON;;;;;N;;;;;
-2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
-2651;CAPRICORN;So;0;ON;;;;;N;;;;;
-2652;AQUARIUS;So;0;ON;;;;;N;;;;;
-2653;PISCES;So;0;ON;;;;;N;;;;;
-2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
-2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
-2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
-2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
-2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
-265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
-265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
-265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
-265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
-265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
-2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
-2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
-2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
-2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
-2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
-2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
-2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
-2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
-266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
-266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
-266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
-266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
-266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
-266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
-2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
-2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;;
-2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;;
-2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;;
-2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;;
-2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;;
-2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;;
-2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;;
-267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
-267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
-267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
-267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
-2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
-2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
-2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
-2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
-2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
-2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
-2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
-2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
-2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
-2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
-268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
-268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
-268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
-268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
-268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
-268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
-2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
-2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
-26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
-26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
-2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
-2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
-2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
-2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
-2708;AIRPLANE;So;0;ON;;;;;N;;;;;
-2709;ENVELOPE;So;0;ON;;;;;N;;;;;
-270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
-270D;WRITING HAND;So;0;ON;;;;;N;;;;;
-270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-270F;PENCIL;So;0;ON;;;;;N;;;;;
-2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-2711;WHITE NIB;So;0;ON;;;;;N;;;;;
-2712;BLACK NIB;So;0;ON;;;;;N;;;;;
-2713;CHECK MARK;So;0;ON;;;;;N;;;;;
-2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2717;BALLOT X;So;0;ON;;;;;N;;;;;
-2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
-2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
-271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
-271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
-271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
-271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
-271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
-271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
-2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
-2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
-2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
-272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
-272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
-272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
-272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
-2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
-2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
-2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
-273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
-273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
-2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
-2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2747;SPARKLE;So;0;ON;;;;;N;;;;;
-2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
-2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
-2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
-2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
-2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
-2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
-2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
-2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
-2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
-2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
-2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
-2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
-2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
-277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
-277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
-277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
-277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
-277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
-277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
-2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
-2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
-2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
-2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
-2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
-2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
-2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
-2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
-278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
-278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
-278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
-278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
-278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
-278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
-2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
-2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
-2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
-2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
-2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
-279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
-279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
-279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
-279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
-279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
-279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
-27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
-27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
-27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
-27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
-27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
-27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
-27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
-27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
-27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
-27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
-27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
-27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
-27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
-27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
-27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
-27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
-27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
-27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
-27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
-27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
-27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
-27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
-27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
-27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
-27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
-27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
-27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
-27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
-27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
-27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
-27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
-27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
-27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
-27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
-27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
-27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
-27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
-27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
-27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
-27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
-27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
-27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
-27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
-27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
-27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
-27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
-27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
-27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
-27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
-27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
-27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
-27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
-2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
-2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
-2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
-2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
-2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
-2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
-2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
-2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
-2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
-2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
-280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
-280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
-280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
-280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
-280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
-280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
-2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
-2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
-2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
-2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
-2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
-2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
-2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
-2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
-2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
-2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
-281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
-281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
-281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
-281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
-281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
-281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
-2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
-2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
-2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
-2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
-2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
-2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
-2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
-2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
-2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
-2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
-282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
-282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
-282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
-282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
-282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
-282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
-2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
-2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
-2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
-2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
-2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
-2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
-2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
-2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
-2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
-2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
-283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
-283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
-283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
-283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
-283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
-283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
-2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
-2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
-2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
-2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
-2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
-2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
-2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
-2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
-2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
-2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
-284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
-284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
-284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
-284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
-284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
-284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
-2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
-2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
-2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
-2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
-2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
-2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
-2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
-2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
-2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
-2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
-285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
-285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
-285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
-285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
-285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
-285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
-2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
-2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
-2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
-2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
-2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
-2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
-2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
-2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
-2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
-2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
-286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
-286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
-286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
-286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
-286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
-286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
-2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
-2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
-2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
-2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
-2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
-2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
-2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
-2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
-2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
-2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
-287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
-287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
-287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
-287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
-287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
-287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
-2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
-2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
-2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
-2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
-2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
-2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
-2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
-2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
-2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
-2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
-288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
-288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
-288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
-288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
-288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
-288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
-2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
-2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
-2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
-2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
-2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
-2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
-2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
-2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
-2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
-2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
-289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
-289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
-289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
-289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
-289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
-289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
-28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
-28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
-28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
-28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
-28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
-28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
-28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
-28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
-28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
-28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
-28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
-28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
-28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
-28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
-28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
-28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
-28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
-28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
-28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
-28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
-28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
-28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
-28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
-28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
-28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
-28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
-28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
-28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
-28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
-28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
-28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
-28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
-28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
-28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
-28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
-28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
-28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
-28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
-28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
-28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
-28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
-28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
-28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
-28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
-28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
-28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
-28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
-28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
-28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
-28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
-28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
-28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
-28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
-28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
-28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
-28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
-28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
-28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
-28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
-28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
-28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
-28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
-28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
-28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
-28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
-28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
-28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
-28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
-28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
-28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
-28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
-28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
-28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
-28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
-28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
-28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
-28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
-28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
-28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
-28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
-28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
-28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
-28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
-28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
-28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
-28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
-28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
-28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
-28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
-28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
-28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
-28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
-28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
-28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
-28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
-28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
-2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
-2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
-2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
-290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
-290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
-290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
-290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
-290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
-290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
-2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
-2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
-2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
-2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
-2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
-2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
-291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
-291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
-291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
-291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
-291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
-291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
-2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
-2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
-2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
-2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
-2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
-2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
-2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
-292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
-292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
-292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
-292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
-2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
-2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
-2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
-2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
-2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
-2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
-2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
-293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
-293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
-2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
-2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
-2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
-2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
-2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
-2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
-2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
-294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
-294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
-294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
-294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
-294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
-294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
-2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
-2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
-2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
-2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
-2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
-2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
-2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
-2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
-2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
-2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
-295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
-295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
-295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
-295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
-295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
-295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
-2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
-2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
-2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
-2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
-2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
-2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
-2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
-2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
-2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
-2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
-296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
-296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
-296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
-296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
-296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
-296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
-2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
-2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
-2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
-2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
-2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
-297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
-297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
-297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
-297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
-297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
-2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
-2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
-2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
-2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
-2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
-2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
-2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
-2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
-2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
-2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
-298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
-298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
-298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
-298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
-298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
-298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
-2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
-2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
-2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
-2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
-2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
-2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
-2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
-2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
-2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
-2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
-299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
-299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
-299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
-299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
-299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
-299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
-29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
-29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
-29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
-29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
-29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
-29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
-29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
-29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
-29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
-29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
-29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
-29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
-29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
-29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
-29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
-29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
-29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
-29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
-29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
-29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
-29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
-29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
-29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
-29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
-29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
-29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
-29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
-29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
-29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
-29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
-29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
-29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
-29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
-29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
-29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
-29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
-29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
-29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
-29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
-29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
-29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
-29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
-29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
-29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
-29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
-29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
-29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
-29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
-29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
-29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
-29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
-29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
-29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
-29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
-29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
-29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
-29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
-29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
-29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
-29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
-29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
-29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
-29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
-29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
-29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
-29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
-29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
-29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
-29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
-29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
-29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
-29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
-29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
-29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
-29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
-29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
-29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
-29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
-29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
-29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
-29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
-29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
-29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
-29FE;TINY;Sm;0;ON;;;;;N;;;;;
-29FF;MINY;Sm;0;ON;;;;;N;;;;;
-2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
-2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
-2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
-2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
-2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
-2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
-2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
-2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
-2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
-2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
-2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
-2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
-2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
-2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
-2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
-2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
-2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
-2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
-2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
-2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
-2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
-2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
-2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
-2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
-2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
-2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
-2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
-2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
-2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
-2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
-2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
-2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
-2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
-2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
-2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
-2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
-2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
-2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
-2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
-2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
-2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
-2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
-2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
-2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
-2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
-2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
-2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
-2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
-2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
-2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
-2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
-2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
-2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
-2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
-2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
-2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
-2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
-2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
-2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
-2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
-2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
-2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
-2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
-2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
-2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
-2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
-2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
-2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
-2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
-2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
-2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
-2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
-2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
-2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
-2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
-2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
-2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
-2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
-2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
-2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
-2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
-2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
-2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
-2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
-2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
-2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
-2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
-2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
-2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
-2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
-2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
-2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
-2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
-2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
-2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
-2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
-2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
-2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
-2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
-2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
-2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
-2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
-2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
-2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
-2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
-2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
-2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
-2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
-2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
-2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
-2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
-2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
-2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
-2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
-2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
-2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
-2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
-2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
-2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
-2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
-2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;;
-2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;;
-2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
-2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
-2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
-2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
-2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
-2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
-2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
-2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
-2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
-2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
-2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
-2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
-2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
-2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
-2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
-2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
-2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
-2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
-2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
-2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
-2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
-2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
-2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
-2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
-2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
-2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
-2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
-2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
-2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
-2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
-2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
-2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
-2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
-2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
-2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
-2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
-2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
-2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
-2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
-2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
-2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
-2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
-2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
-2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
-2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
-2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
-2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
-2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
-2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
-2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
-2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
-2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
-2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
-2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
-2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
-2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
-2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
-2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
-2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
-2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
-2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
-2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
-2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
-2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
-2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
-2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
-2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
-2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
-2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
-2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
-2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
-2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
-2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
-2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
-2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
-2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
-2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
-2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
-2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
-2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
-2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
-2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
-2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
-2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
-2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
-2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
-2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
-2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
-2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
-2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
-2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
-2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
-2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
-2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
-2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
-2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
-2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
-2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
-2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
-2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
-2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
-2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
-2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
-2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
-2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
-2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
-2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
-2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
-2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
-2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
-2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
-2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
-2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
-2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
-2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
-2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
-2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
-2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
-2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
-2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
-2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
-2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
-2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
-2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
-2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
-2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
-2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
-2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
-2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
-2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
-2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
-2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
-2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
-2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
-2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
-2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
-2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
-2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
-2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
-2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
-2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
-2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
-2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
-2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
-2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
-2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
-2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
-2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
-2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
-2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
-2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
-2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
-2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
-2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
-2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
-2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
-2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
-2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
-2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
-2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
-2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
-2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
-2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
-2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
-2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
-2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
-2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
-2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
-2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
-2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
-2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
-2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
-2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
-2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
-2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
-2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
-2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
-2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
-2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
-2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
-2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
-2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
-2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
-2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
-2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
-2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
-2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
-2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
-2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
-2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
-2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
-2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
-2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
-2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
-2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
-2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
-2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
-2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
-2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
-2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
-2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
-2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
-2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
-2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
-2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
-2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
-2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
-2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
-2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
-2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
-2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
-2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
-2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
-2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
-2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
-2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
-2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
-2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
-2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
-2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
-2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
-2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
-2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
-2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
-2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
-2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
-2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
-2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
-2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
-2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
-2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
-2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
-2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
-2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
-2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
-2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
-2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
-2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
-2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
-2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
-2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
-2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
-2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
-2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
-2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
-2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
-2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
-2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
-2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
-2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
-2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
-2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
-2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
-2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
-2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
-2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
-2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
-2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
-2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
-2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
-2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
-2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
-2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
-2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
-2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
-2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
-2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
-2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
-2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
-2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
-2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
-2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
-2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
-2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
-2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
-2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
-2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
-2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
-2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
-2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
-2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
-2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
-2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
-2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
-2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
-2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
-2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
-2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
-2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
-2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
-2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
-2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
-2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
-2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
-2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
-2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
-2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
-2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
-2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
-2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
-2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
-2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
-2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
-2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
-2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
-2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
-2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
-2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
-2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
-2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
-2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
-2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
-2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
-2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
-2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
-2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
-2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
-2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
-2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
-2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
-2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
-2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
-2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
-2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
-2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
-2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
-2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
-2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
-2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
-2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
-2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
-2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
-2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
-2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
-2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
-2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
-2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
-2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
-2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
-2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
-2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
-2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
-2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
-2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
-2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
-2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
-2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
-2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
-2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
-2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
-2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
-2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
-2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
-2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
-2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
-2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
-2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
-2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
-2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
-2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
-2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
-2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
-2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
-2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
-2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
-2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
-2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
-2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
-3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
-3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
-3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
-3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
-3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
-3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
-3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
-3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
-3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
-3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
-300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
-300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
-300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
-300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
-300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
-300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
-3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
-3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
-3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
-3013;GETA MARK;So;0;ON;;;;;N;;;;;
-3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
-3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
-3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
-3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
-3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
-3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
-301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
-301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
-301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
-301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
-301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
-3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
-3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
-3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
-3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
-3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
-3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
-3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
-3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
-3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
-302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
-302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
-302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
-302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
-302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
-3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
-3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
-3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
-3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
-3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
-3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
-3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
-303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
-303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
-303C;MASU MARK;Lo;0;L;;;;;N;;;;;
-303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
-303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
-303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
-3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
-3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
-3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
-3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
-3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
-304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
-304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
-304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
-304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
-304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
-3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
-3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
-3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
-3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
-3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
-3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
-3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
-3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
-3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
-3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
-305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
-305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
-305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
-305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
-305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
-305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
-3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
-3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
-3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
-3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
-3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
-3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
-3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
-3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
-3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
-306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
-306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
-306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
-306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
-306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
-306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
-3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
-3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
-3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
-3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
-3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
-3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
-3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
-3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
-3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
-3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
-307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
-307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
-307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
-307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
-307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
-307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
-3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
-3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
-3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
-3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
-3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
-3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
-3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
-308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
-308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
-308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
-308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
-308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
-3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
-3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
-3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
-3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
-3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
-3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
-3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
-3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
-309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
-309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
-309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
-309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
-309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
-30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
-30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
-30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
-30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
-30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
-30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
-30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
-30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
-30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
-30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
-30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
-30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
-30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
-30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
-30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
-30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
-30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
-30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
-30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
-30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
-30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
-30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
-30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
-30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
-30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
-30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
-30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
-30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
-30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
-30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
-30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
-30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
-30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
-30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
-30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
-30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
-30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
-30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
-30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
-30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
-30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
-30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
-30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
-30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
-30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
-30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
-30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
-30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
-30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
-30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
-30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
-30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
-30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
-30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
-30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
-30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
-30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
-30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
-30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
-30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
-30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
-30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
-30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
-30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
-30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
-30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
-30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
-30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
-30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
-30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
-30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
-30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
-30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
-30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
-30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
-30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
-30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
-30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
-30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
-30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
-30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
-30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
-30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
-30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
-30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
-3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
-3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
-3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
-3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
-3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
-310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
-310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
-310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
-310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
-310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
-310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
-3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
-3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
-3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
-3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
-3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
-3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
-3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
-3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
-3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
-3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
-311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
-311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
-311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
-311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
-311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
-311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
-3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
-3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
-3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
-3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
-3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
-3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
-3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
-3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
-3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
-3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
-312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
-312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
-312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
-3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
-3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
-3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
-3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
-3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
-3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
-3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
-3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
-3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
-313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
-313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
-313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
-313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
-313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
-313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
-3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
-3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
-3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
-3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
-3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
-3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
-3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
-3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
-3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
-3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
-314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
-314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
-314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
-314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
-314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
-314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
-3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
-3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
-3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
-3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
-3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
-3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
-3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
-3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
-3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
-3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
-315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
-315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
-315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
-315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
-315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
-315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
-3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
-3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
-3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
-3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
-3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
-3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
-3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
-3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
-3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
-3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
-316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
-316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
-316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
-316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
-316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
-316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
-3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
-3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
-3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
-3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
-3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
-3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
-3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
-3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
-3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
-3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
-317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
-317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
-317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
-317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
-317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
-317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
-3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
-3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
-3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
-3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
-3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
-3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
-3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
-3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
-3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
-3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
-318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
-318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
-318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
-318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
-318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
-3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
-3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
-3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;;
-3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;;
-3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;;
-3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;;
-3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
-3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
-3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
-3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
-319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
-319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
-319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
-319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
-319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
-319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
-31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
-31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
-31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
-31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
-31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
-31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
-31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
-31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
-31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
-31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
-31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
-31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
-31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
-31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
-31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
-31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
-31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
-31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
-31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
-31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
-31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
-31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
-31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
-31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
-31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
-31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
-31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
-31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
-31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
-31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
-31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
-31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
-31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
-31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
-31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
-31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
-31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
-31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
-31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
-31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
-3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
-3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
-3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
-3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
-3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
-3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
-3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
-3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
-3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
-3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
-320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
-320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
-320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
-320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
-320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
-320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
-3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
-3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
-3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
-3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
-3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
-3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
-3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
-3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
-3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
-3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
-321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
-321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
-321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
-321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
-321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
-3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
-3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
-3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
-3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
-3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
-3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
-3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
-3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
-3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
-3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
-322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
-322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
-322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
-322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
-322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
-322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
-3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
-3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
-3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
-3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
-3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
-3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
-3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
-3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
-3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
-3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
-323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
-323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
-323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
-323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
-323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
-323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
-3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
-3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
-3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
-3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
-3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
-3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
-3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
-3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
-3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
-3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
-3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
-3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
-3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
-3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
-325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
-325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
-325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
-325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
-325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
-325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
-3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
-3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
-3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
-3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
-3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
-3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
-3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
-3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
-3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
-3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
-326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
-326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
-326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
-326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
-326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
-326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
-3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
-3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
-3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
-3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
-3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
-3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
-3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
-3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
-3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
-3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
-327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
-327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
-327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
-327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
-327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
-3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
-3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
-3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
-3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
-3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
-3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
-3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
-3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
-3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
-3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
-328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
-328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
-328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
-328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
-328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
-328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
-3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
-3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
-3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
-3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
-3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
-3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
-3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
-3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
-3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
-3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
-329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
-329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
-329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
-329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
-329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
-329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
-32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
-32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
-32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
-32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
-32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
-32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
-32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
-32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
-32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
-32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
-32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
-32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
-32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
-32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
-32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
-32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
-32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
-32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
-32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
-32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
-32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
-32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
-32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
-32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
-32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
-32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
-32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
-32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
-32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
-32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
-32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
-32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
-32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
-32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
-32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
-32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
-32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
-32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
-32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
-32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
-32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
-32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
-32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
-32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
-32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
-32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
-32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
-32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
-32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
-32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
-32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
-32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
-32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
-32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
-32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
-32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
-32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
-32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
-32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
-32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
-32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
-32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
-32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
-32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
-32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
-32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
-32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
-32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
-32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
-32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
-32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
-32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
-32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
-32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
-32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
-32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
-32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
-32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
-32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
-32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
-32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
-32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
-32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
-32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
-32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
-32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
-32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
-32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
-32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
-32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
-32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
-32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
-32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
-32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
-32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
-3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
-3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
-3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
-3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
-3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
-3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
-3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
-3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
-3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
-3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
-330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
-330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
-330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
-330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
-330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
-330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
-3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
-3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
-3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
-3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
-3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
-3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
-3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
-3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
-3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
-3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
-331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
-331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
-331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
-331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
-331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
-331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
-3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
-3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
-3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
-3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
-3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
-3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
-3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
-3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
-3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
-3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
-332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
-332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
-332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
-332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
-332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
-332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
-3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
-3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
-3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
-3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
-3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
-3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
-3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
-3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
-3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
-3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
-333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
-333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
-333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
-333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
-333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
-333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
-3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
-3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
-3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
-3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
-3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
-3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
-3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
-3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
-3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
-3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
-334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
-334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
-334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
-334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
-334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
-334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
-3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
-3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
-3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
-3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
-3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
-3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
-3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
-3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
-3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
-3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
-335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
-335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
-335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
-335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
-335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
-335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
-3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
-3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
-3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
-3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
-3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
-3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
-3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
-3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
-3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
-3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
-336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
-336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
-336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
-336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
-336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
-336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
-3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
-3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
-3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
-3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
-3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
-3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
-3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
-3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
-3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
-3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
-337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
-337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
-337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
-337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
-337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
-337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
-3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
-3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
-3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
-3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
-3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
-3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
-3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
-3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
-3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
-3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
-338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
-338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
-338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
-338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
-338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
-338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
-3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
-3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
-3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
-3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
-3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
-3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
-3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
-3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
-3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
-3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
-339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
-339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
-339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
-339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
-339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
-339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
-33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
-33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
-33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
-33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
-33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
-33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
-33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
-33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
-33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
-33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
-33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
-33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
-33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
-33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
-33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
-33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
-33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
-33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
-33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
-33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
-33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
-33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
-33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
-33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
-33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
-33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
-33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
-33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
-33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
-33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
-33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
-33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
-33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
-33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
-33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
-33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
-33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
-33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
-33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
-33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
-33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
-33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
-33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
-33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
-33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
-33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
-33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
-33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
-33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
-33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
-33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
-33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
-33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
-33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
-33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
-33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
-33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
-33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
-33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
-33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
-33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
-33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
-33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
-33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
-33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
-33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
-33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
-33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
-33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
-33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
-33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
-33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
-33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
-33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
-33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
-33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
-33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
-33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
-33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
-33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
-33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
-33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
-33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
-33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
-33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
-33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
-33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
-33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
-33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
-33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
-33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
-33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
-33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
-33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
-33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
-33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
-3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
-4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
-4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
-4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
-4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
-4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
-4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
-4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
-4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
-4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
-4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
-4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
-4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
-4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
-4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
-4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
-4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
-4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
-4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
-4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
-4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
-4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
-4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
-4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
-4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
-4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
-4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
-4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
-4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
-4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
-4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
-4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
-4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
-4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
-4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
-4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
-4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
-4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
-4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
-4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
-4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
-4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
-4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
-4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
-4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
-4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
-4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
-4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
-4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
-4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
-4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
-4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
-4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
-4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
-4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
-4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
-4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
-4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
-4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
-4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
-4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
-4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
-4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
-4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
-4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
-4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
-A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
-A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
-A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
-A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
-A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
-A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
-A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
-A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
-A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
-A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
-A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
-A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
-A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
-A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
-A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
-A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
-A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
-A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
-A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
-A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
-A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
-A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
-A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
-A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
-A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
-A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
-A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
-A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
-A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
-A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
-A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
-A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
-A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
-A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
-A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
-A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
-A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
-A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
-A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
-A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
-A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
-A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
-A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
-A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
-A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
-A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
-A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
-A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
-A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
-A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
-A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
-A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
-A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
-A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
-A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
-A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
-A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
-A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
-A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
-A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
-A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
-A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
-A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
-A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
-A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
-A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
-A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
-A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
-A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
-A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
-A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
-A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
-A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
-A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
-A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
-A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
-A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
-A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
-A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
-A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
-A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
-A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
-A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
-A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
-A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
-A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
-A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
-A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
-A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
-A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
-A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
-A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
-A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
-A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
-A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
-A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
-A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
-A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
-A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
-A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
-A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
-A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
-A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
-A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
-A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
-A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
-A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
-A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
-A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
-A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
-A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
-A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
-A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
-A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
-A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
-A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
-A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
-A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
-A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
-A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
-A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
-A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
-A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
-A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
-A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
-A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
-A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
-A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
-A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
-A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
-A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
-A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
-A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
-A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
-A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
-A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
-A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
-A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
-A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
-A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
-A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
-A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
-A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
-A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
-A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
-A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
-A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
-A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
-A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
-A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
-A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
-A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
-A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
-A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
-A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
-A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
-A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
-A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
-A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
-A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
-A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
-A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
-A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
-A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
-A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
-A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
-A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
-A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
-A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
-A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
-A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
-A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
-A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
-A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
-A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
-A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
-A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
-A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
-A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
-A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
-A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
-A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
-A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
-A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
-A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
-A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
-A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
-A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
-A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
-A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
-A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
-A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
-A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
-A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
-A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
-A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
-A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
-A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
-A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
-A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
-A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
-A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
-A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
-A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
-A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
-A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
-A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
-A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
-A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
-A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
-A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
-A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
-A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
-A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
-A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
-A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
-A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
-A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
-A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
-A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
-A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
-A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
-A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
-A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
-A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
-A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
-A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
-A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
-A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
-A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
-A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
-A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
-A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
-A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
-A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
-A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
-A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
-A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
-A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
-A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
-A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
-A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
-A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
-A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
-A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
-A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
-A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
-A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
-A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
-A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
-A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
-A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
-A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
-A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
-A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
-A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
-A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
-A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
-A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
-A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
-A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
-A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
-A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
-A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
-A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
-A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
-A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
-A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
-A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
-A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
-A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
-A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
-A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
-A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
-A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
-A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
-A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
-A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
-A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
-A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
-A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
-A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
-A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
-A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
-A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
-A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
-A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
-A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
-A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
-A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
-A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
-A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
-A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
-A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
-A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
-A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
-A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
-A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
-A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
-A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
-A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
-A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
-A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
-A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
-A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
-A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
-A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
-A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
-A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
-A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
-A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
-A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
-A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
-A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
-A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
-A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
-A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
-A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
-A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
-A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
-A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
-A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
-A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
-A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
-A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
-A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
-A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
-A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
-A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
-A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
-A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
-A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
-A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
-A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
-A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
-A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
-A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
-A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
-A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
-A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
-A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
-A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
-A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
-A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
-A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
-A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
-A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
-A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
-A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
-A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
-A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
-A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
-A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
-A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
-A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
-A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
-A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
-A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
-A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
-A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
-A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
-A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
-A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
-A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
-A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
-A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
-A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
-A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
-A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
-A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
-A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
-A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
-A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
-A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
-A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
-A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
-A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
-A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
-A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
-A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
-A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
-A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
-A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
-A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
-A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
-A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
-A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
-A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
-A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
-A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
-A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
-A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
-A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
-A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
-A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
-A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
-A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
-A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
-A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
-A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
-A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
-A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
-A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
-A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
-A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
-A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
-A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
-A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
-A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
-A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
-A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
-A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
-A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
-A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
-A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
-A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
-A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
-A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
-A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
-A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
-A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
-A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
-A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
-A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
-A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
-A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
-A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
-A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
-A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
-A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
-A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
-A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
-A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
-A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
-A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
-A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
-A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
-A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
-A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
-A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
-A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
-A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
-A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
-A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
-A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
-A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
-A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
-A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
-A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
-A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
-A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
-A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
-A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
-A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
-A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
-A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
-A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
-A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
-A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
-A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
-A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
-A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
-A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
-A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
-A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
-A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
-A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
-A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
-A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
-A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
-A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
-A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
-A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
-A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
-A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
-A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
-A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
-A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
-A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
-A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
-A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
-A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
-A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
-A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
-A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
-A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
-A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
-A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
-A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
-A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
-A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
-A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
-A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
-A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
-A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
-A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
-A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
-A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
-A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
-A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
-A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
-A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
-A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
-A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
-A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
-A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
-A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
-A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
-A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
-A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
-A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
-A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
-A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
-A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
-A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
-A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
-A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
-A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
-A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
-A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
-A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
-A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
-A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
-A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
-A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
-A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
-A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
-A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
-A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
-A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
-A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
-A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
-A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
-A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
-A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
-A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
-A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
-A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
-A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
-A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
-A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
-A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
-A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
-A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
-A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
-A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
-A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
-A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
-A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
-A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
-A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
-A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
-A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
-A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
-A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
-A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
-A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
-A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
-A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
-A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
-A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
-A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
-A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
-A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
-A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
-A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
-A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
-A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
-A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
-A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
-A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
-A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
-A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
-A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
-A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
-A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
-A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
-A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
-A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
-A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
-A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
-A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
-A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
-A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
-A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
-A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
-A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
-A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
-A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
-A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
-A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
-A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
-A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
-A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
-A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
-A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
-A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
-A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
-A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
-A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
-A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
-A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
-A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
-A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
-A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
-A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
-A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
-A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
-A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
-A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
-A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
-A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
-A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
-A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
-A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
-A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
-A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
-A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
-A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
-A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
-A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
-A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
-A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
-A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
-A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
-A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
-A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
-A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
-A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
-A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
-A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
-A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
-A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
-A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
-A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
-A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
-A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
-A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
-A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
-A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
-A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
-A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
-A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
-A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
-A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
-A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
-A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
-A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
-A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
-A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
-A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
-A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
-A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
-A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
-A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
-A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
-A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
-A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
-A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
-A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
-A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
-A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
-A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
-A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
-A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
-A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
-A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
-A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
-A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
-A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
-A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
-A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
-A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
-A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
-A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
-A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
-A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
-A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
-A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
-A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
-A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
-A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
-A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
-A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
-A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
-A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
-A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
-A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
-A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
-A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
-A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
-A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
-A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
-A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
-A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
-A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
-A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
-A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
-A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
-A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
-A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
-A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
-A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
-A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
-A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
-A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
-A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
-A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
-A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
-A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
-A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
-A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
-A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
-A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
-A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
-A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
-A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
-A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
-A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
-A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
-A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
-A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
-A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
-A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
-A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
-A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
-A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
-A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
-A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
-A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
-A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
-A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
-A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
-A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
-A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
-A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
-A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
-A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
-A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
-A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
-A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
-A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
-A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
-A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
-A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
-A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
-A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
-A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
-A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
-A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
-A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
-A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
-A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
-A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
-A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
-A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
-A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
-A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
-A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
-A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
-A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
-A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
-A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
-A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
-A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
-A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
-A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
-A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
-A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
-A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
-A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
-A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
-A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
-A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
-A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
-A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
-A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
-A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
-A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
-A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
-A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
-A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
-A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
-A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
-A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
-A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
-A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
-A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
-A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
-A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
-A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
-A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
-A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
-A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
-A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
-A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
-A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
-A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
-A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
-A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
-A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
-A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
-A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
-A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
-A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
-A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
-A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
-A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
-A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
-A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
-A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
-A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
-A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
-A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
-A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
-A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
-A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
-A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
-A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
-A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
-A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
-A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
-A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
-A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
-A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
-A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
-A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
-A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
-A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
-A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
-A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
-A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
-A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
-A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
-A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
-A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
-A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
-A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
-A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
-A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
-A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
-A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
-A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
-A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
-A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
-A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
-A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
-A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
-A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
-A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
-A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
-A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
-A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
-A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
-A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
-A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
-A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
-A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
-A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
-A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
-A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
-A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
-A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
-A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
-A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
-A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
-A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
-A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
-A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
-A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
-A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
-A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
-A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
-A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
-A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
-A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
-A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
-A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
-A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
-A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
-A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
-A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
-A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
-A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
-A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
-A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
-A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
-A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
-A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
-A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
-A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
-A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
-A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
-A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
-A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
-A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
-A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
-A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
-A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
-A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
-A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
-A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
-A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
-A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
-A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
-A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
-A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
-A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
-A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
-A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
-A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
-A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
-A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
-A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
-A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
-A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
-A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
-A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
-A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
-A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
-A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
-A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
-A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
-A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
-A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
-A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
-A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
-A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
-A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
-A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
-A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
-A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
-A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
-A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
-A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
-A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
-A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
-A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
-A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
-A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
-A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
-A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
-A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
-A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
-A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
-A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
-A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
-A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
-A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
-A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
-A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
-A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
-A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
-A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
-A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
-A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
-A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
-A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
-A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
-A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
-A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
-A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
-A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
-A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
-A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
-A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
-A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
-A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
-A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
-A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
-A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
-A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
-A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
-A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
-A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
-A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
-A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
-A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
-A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
-A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
-A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
-A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
-A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
-A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
-A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
-A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
-A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
-A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
-A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
-A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
-A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
-A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
-A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
-A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
-A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
-A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
-A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
-A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
-A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
-A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
-A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
-A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
-A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
-A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
-A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
-A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
-A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
-A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
-A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
-A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
-A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
-A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
-A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
-A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
-A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
-A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
-A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
-A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
-A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
-A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
-A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
-A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
-A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
-A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
-A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
-A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
-A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
-A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
-A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
-A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
-A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
-A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
-A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
-A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
-A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
-A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
-A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
-A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
-A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
-A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
-A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
-A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
-A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
-A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
-A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
-A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
-A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
-A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
-A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
-A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
-A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
-A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
-A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
-A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
-A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
-A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
-A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
-A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
-A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
-A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
-A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
-A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
-A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
-A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
-A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
-A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
-A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
-A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
-A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
-A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
-A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
-A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
-A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
-A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
-A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
-A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
-A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
-A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
-A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
-A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
-A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
-A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
-A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
-A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
-A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
-A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
-A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
-A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
-A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
-A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
-A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
-A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
-A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
-A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
-A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
-A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
-A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
-A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
-A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
-A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
-A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
-A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
-A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
-A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
-A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
-A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
-AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
-D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
-D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
-F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
-F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
-F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
-F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
-F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
-F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
-F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
-F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
-F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
-F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
-F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
-F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
-F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
-F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
-F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
-F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
-F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
-F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
-F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
-F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
-F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
-F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
-F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
-F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
-F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
-F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
-F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
-F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
-F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
-F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
-F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
-F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
-F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
-F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
-F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
-F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
-F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
-F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
-F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
-F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
-F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
-F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
-F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
-F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
-F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
-F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
-F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
-F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
-F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
-F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
-F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
-F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
-F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
-F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
-F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
-F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
-F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
-F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
-F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
-F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
-F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
-F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
-F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
-F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
-F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
-F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
-F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
-F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
-F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
-F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
-F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
-F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
-F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
-F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
-F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
-F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
-F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
-F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
-F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
-F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
-F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
-F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
-F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
-F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
-F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
-F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
-F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
-F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
-F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
-F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
-F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
-F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
-F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
-F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
-F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
-F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
-F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
-F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
-F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
-F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
-F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
-F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
-F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
-F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
-F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
-F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
-F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
-F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
-F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
-F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
-F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
-F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
-F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
-F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
-F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
-F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
-F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
-F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
-F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
-F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
-F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
-F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
-F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
-F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
-F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
-F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
-F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
-F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
-F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
-F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
-F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
-F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
-F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
-F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
-F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
-F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
-F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
-F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
-F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
-F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
-F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
-F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
-F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
-F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
-F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
-F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
-F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
-F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
-F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
-F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
-F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
-F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
-F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
-F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
-F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
-F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
-F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
-F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
-F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
-F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
-F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
-F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
-F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
-F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
-F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
-F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
-F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
-F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
-F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
-F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
-F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
-F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
-F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
-F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
-F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
-F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
-F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
-F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
-F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
-F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
-F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
-F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
-F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
-F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
-F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
-F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
-F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
-F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
-F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
-F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
-F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
-F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
-F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
-F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
-F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
-F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
-F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
-F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
-F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
-F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
-F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
-F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
-F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
-F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
-F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
-F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
-F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
-F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
-F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
-F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
-F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
-F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
-F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
-F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
-F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
-F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
-F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
-F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
-F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
-F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
-F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
-F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
-F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
-F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
-F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
-F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
-F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
-F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
-F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
-F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
-F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
-F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
-F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
-F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
-F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
-F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
-F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
-F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
-F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
-F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
-F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
-F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
-F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
-F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
-F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
-F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
-F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
-F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
-F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
-F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
-F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
-F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
-F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
-F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
-F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
-F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
-F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
-FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
-FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
-FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
-FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
-FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
-FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
-FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
-FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
-FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
-FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
-FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
-FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
-FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
-FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
-FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
-FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
-FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
-FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
-FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
-FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
-FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
-FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
-FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
-FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
-FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
-FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
-FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
-FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
-FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
-FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
-FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
-FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
-FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
-FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
-FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
-FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
-FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
-FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
-FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
-FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
-FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
-FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
-FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
-FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
-FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
-FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
-FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
-FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
-FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
-FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
-FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
-FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
-FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
-FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
-FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
-FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
-FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
-FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
-FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
-FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
-FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
-FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
-FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
-FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
-FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
-FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
-FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
-FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
-FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
-FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
-FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
-FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
-FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
-FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
-FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
-FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
-FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
-FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
-FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
-FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
-FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
-FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
-FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
-FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
-FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
-FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
-FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
-FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
-FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
-FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
-FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
-FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
-FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
-FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
-FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
-FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
-FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
-FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
-FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
-FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
-FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
-FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
-FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
-FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
-FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
-FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
-FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
-FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
-FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
-FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
-FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
-FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
-FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
-FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
-FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
-FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
-FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
-FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
-FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
-FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
-FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
-FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
-FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
-FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
-FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
-FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
-FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
-FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
-FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
-FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
-FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
-FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
-FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
-FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
-FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
-FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
-FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
-FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
-FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
-FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
-FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
-FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
-FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
-FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
-FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
-FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
-FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
-FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
-FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
-FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
-FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
-FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
-FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
-FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
-FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
-FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
-FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
-FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
-FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
-FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
-FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
-FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
-FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
-FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
-FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
-FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
-FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
-FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
-FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
-FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
-FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
-FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
-FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
-FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
-FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
-FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
-FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
-FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
-FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
-FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
-FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
-FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
-FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
-FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
-FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
-FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
-FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
-FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
-FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
-FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
-FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
-FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
-FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
-FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
-FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
-FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
-FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
-FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
-FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
-FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
-FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
-FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
-FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
-FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
-FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
-FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
-FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
-FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
-FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
-FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
-FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
-FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
-FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
-FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
-FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
-FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
-FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
-FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
-FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
-FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
-FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
-FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
-FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
-FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
-FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
-FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
-FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
-FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
-FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
-FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
-FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
-FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
-FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
-FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
-FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
-FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
-FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
-FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
-FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
-FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
-FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
-FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
-FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
-FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
-FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
-FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
-FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
-FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
-FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
-FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
-FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
-FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
-FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
-FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
-FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
-FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
-FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
-FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
-FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
-FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
-FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
-FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
-FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
-FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
-FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
-FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
-FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
-FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
-FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
-FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
-FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
-FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
-FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
-FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
-FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
-FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
-FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
-FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
-FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
-FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
-FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
-FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
-FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
-FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
-FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
-FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
-FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
-FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
-FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
-FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
-FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
-FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
-FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
-FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
-FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
-FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
-FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
-FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
-FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
-FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
-FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
-FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
-FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
-FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
-FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
-FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
-FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
-FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
-FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
-FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
-FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
-FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
-FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
-FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
-FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
-FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
-FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
-FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
-FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
-FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
-FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
-FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
-FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
-FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
-FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
-FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
-FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
-FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
-FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
-FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
-FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
-FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
-FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
-FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
-FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
-FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
-FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
-FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
-FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
-FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
-FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
-FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
-FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
-FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
-FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
-FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
-FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
-FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
-FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
-FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
-FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
-FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
-FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
-FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
-FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
-FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
-FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
-FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
-FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
-FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
-FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
-FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
-FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
-FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
-FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
-FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
-FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
-FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
-FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
-FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
-FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
-FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
-FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
-FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
-FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
-FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
-FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
-FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
-FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
-FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
-FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
-FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
-FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
-FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
-FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
-FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
-FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
-FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
-FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
-FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
-FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
-FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
-FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
-FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
-FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
-FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
-FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
-FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
-FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
-FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
-FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
-FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
-FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
-FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
-FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
-FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
-FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
-FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
-FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
-FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
-FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
-FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
-FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
-FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
-FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
-FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
-FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
-FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
-FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
-FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
-FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
-FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
-FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
-FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
-FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
-FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
-FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
-FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
-FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
-FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
-FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
-FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
-FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
-FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
-FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
-FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
-FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
-FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
-FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
-FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
-FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
-FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
-FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
-FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
-FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
-FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
-FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
-FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
-FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
-FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
-FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
-FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
-FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
-FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
-FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
-FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
-FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
-FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
-FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
-FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
-FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
-FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
-FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
-FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
-FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
-FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
-FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
-FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
-FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
-FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
-FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
-FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
-FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
-FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
-FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
-FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
-FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
-FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
-FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
-FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
-FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
-FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
-FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
-FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
-FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
-FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
-FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
-FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
-FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
-FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
-FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
-FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
-FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
-FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
-FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
-FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
-FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
-FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
-FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
-FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
-FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
-FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
-FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
-FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
-FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
-FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
-FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
-FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
-FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
-FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
-FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
-FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
-FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
-FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
-FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
-FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
-FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
-FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
-FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
-FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
-FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
-FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
-FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
-FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
-FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
-FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
-FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
-FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
-FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
-FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
-FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
-FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
-FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
-FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
-FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
-FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
-FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
-FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
-FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
-FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
-FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
-FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
-FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
-FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
-FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
-FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
-FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
-FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
-FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
-FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
-FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
-FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
-FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
-FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
-FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
-FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
-FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
-FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
-FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
-FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
-FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
-FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
-FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
-FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
-FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
-FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
-FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
-FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
-FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
-FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
-FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
-FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
-FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
-FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
-FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
-FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
-FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
-FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
-FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
-FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
-FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
-FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
-FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
-FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
-FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
-FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
-FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
-FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
-FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
-FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
-FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
-FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
-FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
-FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
-FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
-FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
-FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
-FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
-FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
-FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
-FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
-FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
-FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
-FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
-FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
-FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
-FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
-FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
-FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
-FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
-FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
-FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
-FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
-FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
-FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
-FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
-FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
-FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
-FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
-FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
-FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
-FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
-FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
-FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
-FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
-FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
-FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
-FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
-FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
-FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
-FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
-FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
-FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
-FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
-FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
-FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
-FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
-FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
-FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
-FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
-FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
-FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
-FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
-FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
-FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
-FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
-FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
-FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
-FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
-FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
-FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
-FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
-FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
-FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
-FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
-FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
-FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
-FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
-FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
-FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
-FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
-FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
-FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
-FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
-FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
-FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
-FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
-FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
-FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
-FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
-FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
-FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
-FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
-FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
-FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
-FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
-FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
-FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
-FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
-FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
-FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
-FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
-FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
-FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
-FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
-FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
-FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
-FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
-FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
-FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
-FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
-FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
-FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
-FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
-FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
-FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
-FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
-FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
-FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
-FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
-FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
-FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
-FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
-FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
-FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
-FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
-FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
-FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
-FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
-FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
-FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
-FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
-FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
-FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
-FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
-FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
-FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
-FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
-FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
-FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
-FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
-FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
-FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
-FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
-FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
-FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
-FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
-FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
-FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
-FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
-FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
-FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
-FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
-FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
-FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
-FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
-FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
-FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
-FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
-FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
-FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
-FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
-FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
-FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
-FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
-FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
-FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
-FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
-FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
-FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
-FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
-FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
-FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
-FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
-FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
-FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
-FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
-FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
-FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
-FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
-FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
-FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
-FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
-FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
-FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
-FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
-FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
-FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
-FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
-FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
-FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
-FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
-FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
-FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
-FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
-FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
-FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
-FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
-FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
-FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
-FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
-FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
-FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
-FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
-FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
-FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
-FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
-FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
-FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
-FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
-FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
-FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
-FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
-FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
-FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
-FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
-FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
-FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
-FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
-FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
-FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
-FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
-FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
-FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
-FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
-FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
-FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
-FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
-FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
-FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
-FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
-FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
-FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
-FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
-FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
-FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
-FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
-FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
-FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
-FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
-FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
-FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
-FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
-FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
-FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
-FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
-FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
-FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
-FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
-FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
-FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
-FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
-FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
-FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
-FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
-FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
-FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
-FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
-FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
-FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
-FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
-FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
-FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
-FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
-FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
-FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
-FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
-FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
-FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
-FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
-FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
-FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
-FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
-FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
-FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
-FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
-FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
-FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
-FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
-FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
-FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
-FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
-FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
-FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
-FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
-FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
-FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
-FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
-FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
-FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
-FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
-FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
-FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
-FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
-FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
-FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
-FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
-FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
-FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
-FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
-FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
-FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
-FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
-FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
-FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
-FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
-FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
-FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
-FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
-FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
-FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
-FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
-FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
-FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
-FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
-FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
-FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
-FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
-FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
-FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
-FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
-FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
-FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
-FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
-FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
-FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
-FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
-FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
-FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
-FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
-FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
-FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
-FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
-FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
-FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
-FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
-FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
-FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
-FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
-FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
-FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
-FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
-FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
-FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
-FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
-FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
-FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
-FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
-FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
-FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
-FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
-FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
-FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
-FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
-FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
-FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
-FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
-FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
-FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
-FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
-FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
-FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
-FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
-FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
-FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
-FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
-FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
-FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
-FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
-FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
-FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
-FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
-FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
-FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
-FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
-FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
-FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
-FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
-FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
-FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
-FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
-FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
-FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
-FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
-FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
-FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
-FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
-FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
-FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
-FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
-FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
-FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
-FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
-FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
-FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
-FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
-FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
-FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
-FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
-FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
-FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
-FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
-FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
-FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
-FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
-FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
-FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
-FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
-FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
-FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
-FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
-FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
-FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
-FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
-FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
-FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
-FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
-FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
-FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
-FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
-FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
-FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
-FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
-FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
-FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
-FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
-FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
-FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
-FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
-FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
-FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
-FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
-FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
-FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
-FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
-FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
-FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
-FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
-FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
-FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
-FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
-FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
-FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
-FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
-FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
-FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
-FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
-FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
-FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
-FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
-FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
-FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
-FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
-FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
-FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
-FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
-FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
-FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
-FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
-FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
-FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
-FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
-FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
-FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
-FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
-FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
-FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
-FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
-FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
-FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
-FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
-FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
-FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
-FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
-FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;;
-FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;;
-FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
-FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
-FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
-FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
-FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
-FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
-FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
-FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
-FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
-FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
-FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
-FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
-FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
-FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
-FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
-FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
-FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
-FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
-FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
-FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
-FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
-FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
-FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
-FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
-FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
-FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
-FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
-FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
-FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
-FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
-FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
-FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
-FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
-FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
-FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
-FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
-FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
-FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
-FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
-FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
-FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
-FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
-FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
-FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
-FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
-FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
-FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
-FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
-FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
-FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
-FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
-FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
-FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
-FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
-FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
-FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
-FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
-FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
-FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
-FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
-FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
-FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
-FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
-FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
-FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
-FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
-FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
-FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
-FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
-FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
-FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
-FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
-FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
-FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
-FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
-FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
-FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
-FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
-FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
-FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
-FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
-FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
-FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
-FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
-FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
-FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
-FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
-FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
-FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
-FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
-FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
-FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
-FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
-FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
-FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
-FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
-FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
-FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
-FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
-FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
-FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
-FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
-FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
-FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
-FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
-FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
-FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
-FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
-FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
-FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
-FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
-FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
-FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
-FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
-FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
-FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
-FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
-FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
-FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
-FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
-FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
-FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
-FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
-FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
-FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
-FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
-FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
-FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
-FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
-FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
-FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
-FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
-FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
-10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
-10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
-10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
-10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
-10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
-10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
-10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
-10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
-10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
-1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
-1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
-1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
-1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
-1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
-10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
-10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
-10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
-10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
-10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
-10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
-10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
-10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
-10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
-10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
-1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
-1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
-1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
-1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
-1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
-1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
-10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
-10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
-10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
-10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
-10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
-10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
-10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
-10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
-10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
-1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
-1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
-1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
-1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
-1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
-1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
-10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
-10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
-10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
-10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
-10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
-10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
-10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
-10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
-10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
-10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
-1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
-1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
-1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
-1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
-10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
-10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
-10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
-10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
-10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
-10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
-10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
-10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
-10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
-10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
-1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
-1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
-1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
-1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
-10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
-10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
-10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
-10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
-10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
-10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
-10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
-10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
-10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
-10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
-1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
-1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
-1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
-1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
-10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
-10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
-10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
-10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
-10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
-10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
-10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
-10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
-10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
-10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
-1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
-1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
-1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
-1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
-1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
-1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
-10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
-10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
-10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
-10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
-10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
-10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
-10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
-10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
-10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
-10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
-1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
-1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
-1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
-1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
-1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
-1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
-100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
-100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
-100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
-100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
-100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
-100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
-100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
-100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
-100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
-100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
-100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
-100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
-100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
-100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
-100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
-100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
-100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
-100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
-100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
-100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
-100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
-100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
-100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
-100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
-100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
-100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
-100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
-100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
-100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
-100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
-100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
-100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
-100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
-100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
-100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
-100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
-100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
-100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
-100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
-100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
-100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
-100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;;
-100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
-100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;;
-100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
-100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
-100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
-100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
-100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
-100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
-100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
-100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
-100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
-100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
-100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
-100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
-100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
-100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
-100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
-100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
-100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
-100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
-100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
-100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
-100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
-100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
-100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
-100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
-100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
-100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
-100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
-100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
-100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
-100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
-100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
-100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
-100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
-100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
-100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
-100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
-100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
-100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
-100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
-100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
-100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
-100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
-100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
-100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
-100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
-100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
-100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
-10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
-10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
-10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;;
-10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
-10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
-10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
-1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
-1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
-1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
-1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
-1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
-1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
-10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
-10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
-10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
-10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
-10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
-10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
-10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
-10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
-10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
-10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
-1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
-1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
-1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
-1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
-1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
-1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
-10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
-10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
-10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
-10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
-10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
-10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
-10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
-10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
-10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
-10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
-1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
-1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
-1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
-1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
-1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
-1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
-10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
-10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
-10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
-10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
-10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
-10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
-10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
-1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
-1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
-1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
-1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
-1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
-1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
-10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
-10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
-10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
-10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
-10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
-10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
-10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
-10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
-10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
-10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
-1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
-1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
-1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
-1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
-1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
-1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;;
-10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
-10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
-10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
-10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
-10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
-10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
-10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
-10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;;
-10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
-10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
-1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
-1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;;
-1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;;
-1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;;
-1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;;
-10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
-10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
-10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
-10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
-10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
-10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
-10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
-10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
-10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
-10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
-10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
-10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
-10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
-10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
-1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
-1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
-1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
-1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
-1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
-1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
-10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
-10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;;
-10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
-10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
-10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
-10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
-10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
-10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
-10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
-10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
-1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;;
-10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
-10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
-10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
-10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
-10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
-10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
-10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
-10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
-10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
-10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
-1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
-1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
-1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
-1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
-1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
-1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
-10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
-10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
-10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
-10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
-10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
-10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
-10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
-10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
-10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
-10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
-1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
-1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
-1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
-1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
-1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
-10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
-10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
-10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
-10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
-10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
-10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
-10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
-10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
-10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
-10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
-1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
-1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
-1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
-1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
-1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
-1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
-10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
-10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
-10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
-10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
-10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
-10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
-10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
-10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
-10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
-10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
-1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
-1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
-1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
-1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
-1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
-1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
-10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
-10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
-10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
-10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
-10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
-10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
-10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
-10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
-10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
-10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
-1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
-1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
-1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
-1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
-1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
-1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
-10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
-10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
-10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
-10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
-10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
-10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
-10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
-10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
-10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
-10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
-1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
-1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
-1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
-1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
-1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
-1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
-10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
-10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
-10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
-10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
-10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
-10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
-10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
-10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
-10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
-10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
-1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
-1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
-1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
-1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
-1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
-1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
-10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
-10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
-10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
-10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
-10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
-10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
-10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
-10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
-10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
-10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
-1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
-1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
-1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
-1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
-1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
-1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
-10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
-10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
-10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
-10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
-10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
-10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
-10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
-10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
-10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
-10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
-1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
-1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
-1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
-1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
-1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
-1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
-10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
-10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
-10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
-10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
-10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
-10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
-10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
-10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
-10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
-10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
-1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
-1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
-1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
-1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
-1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
-1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
-10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
-10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
-10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
-10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
-10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
-10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
-10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
-10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
-10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
-10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
-1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
-1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
-1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
-1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
-1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
-1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
-10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
-10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
-10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
-10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
-10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
-10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
-10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
-10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
-10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
-10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
-1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
-1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
-1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
-1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
-104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
-10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
-10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
-10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
-10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
-10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
-10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
-1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
-1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
-1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
-1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
-1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
-1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
-10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
-10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
-10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
-10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
-10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
-10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
-10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
-10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
-10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
-10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
-1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
-1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
-1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
-1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
-1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
-1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
-10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
-10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
-10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
-10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
-10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
-10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
-10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
-10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
-10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
-10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
-1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
-1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
-1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
-1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
-1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
-1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
-10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
-10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
-10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
-10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
-10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
-10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
-10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
-10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
-1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
-1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
-1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
-1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
-1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
-1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
-1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
-1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
-1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
-1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
-1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
-1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
-1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
-1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
-1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
-1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
-1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
-1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
-1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
-1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
-1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
-1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
-1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
-1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
-1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
-1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
-1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
-1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
-1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
-1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
-1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
-1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
-1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
-1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
-1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
-1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
-1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
-1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
-1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
-1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
-1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
-1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
-1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
-1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
-1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
-1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
-1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
-1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
-1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
-1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
-1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
-1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
-1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
-1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
-1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
-1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
-1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
-1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
-1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
-1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
-1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
-1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
-1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
-1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
-1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
-1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
-1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
-1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
-1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
-1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
-1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
-1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
-1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
-1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
-1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
-1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
-1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
-1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
-1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
-1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
-1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
-1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
-1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
-1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
-1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
-1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
-1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
-1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
-1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
-1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
-1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
-1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
-1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
-1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
-1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
-1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
-1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
-1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
-1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
-1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
-1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
-1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
-1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
-1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
-1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
-1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
-1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
-1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
-1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
-1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
-1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
-1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
-1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
-1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
-1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
-1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
-1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
-1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
-1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
-1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
-1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
-1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
-1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
-1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
-1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
-1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
-1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
-1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
-1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
-1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
-1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
-1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
-1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
-1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
-1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
-1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
-1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
-1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
-1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
-1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
-1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
-1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
-1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
-1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
-1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
-1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
-1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
-1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
-1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
-1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
-1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
-1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
-1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
-1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
-1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
-1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
-1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
-1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
-1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
-1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
-1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
-1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
-1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
-1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
-1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
-1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
-1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
-1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
-1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
-1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
-1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
-1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
-1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
-1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
-1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
-1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
-1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
-1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
-1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
-1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
-1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
-1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
-1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
-1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
-1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
-1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
-1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
-1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
-1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
-1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
-1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
-1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
-1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
-1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
-1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
-1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
-1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
-1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
-1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
-1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
-1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
-1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
-1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
-1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
-1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
-1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
-1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
-1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
-1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
-1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
-1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
-1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
-1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
-1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
-1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
-1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
-1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
-1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
-1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
-1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
-1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
-1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
-1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
-1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
-1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
-1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
-1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
-1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
-1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
-1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
-1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
-1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
-1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
-1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
-1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
-1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
-1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
-1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
-1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
-1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
-1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
-1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
-1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
-1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
-1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
-1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
-1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
-1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
-1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
-1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
-1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
-1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
-1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
-1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
-1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
-1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
-1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
-1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
-1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
-1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
-1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
-1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
-1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
-1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
-1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
-1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
-1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
-1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
-1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
-1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
-1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
-1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
-1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
-1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
-1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
-1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
-1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
-1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
-1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
-1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
-1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
-1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
-1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
-1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
-1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
-1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
-1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
-1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
-1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
-1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
-1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
-1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
-1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
-1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
-1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
-1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
-1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
-1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
-1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
-1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
-1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
-1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
-1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
-1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
-1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
-1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
-1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
-1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
-1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
-1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
-1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
-1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
-1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
-1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
-1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
-1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
-1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
-1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
-1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
-1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
-1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
-1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
-1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
-1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
-1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
-1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
-1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
-1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
-1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
-1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
-1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
-1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
-1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
-1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
-1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
-1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
-1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
-1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
-1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
-1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
-1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
-1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
-1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
-1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
-1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
-1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
-1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
-1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
-1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
-1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
-1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
-1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
-1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
-1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
-1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
-1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
-1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
-1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
-1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
-1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
-1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
-1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
-1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
-1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
-1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
-1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
-1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
-1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
-1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
-1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
-1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
-1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
-1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
-1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
-1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
-1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
-1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
-1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
-1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
-1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
-1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
-1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
-1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
-1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
-1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
-1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
-1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
-1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
-1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
-1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
-1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
-1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
-1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
-1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
-1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
-1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
-1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
-1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
-1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
-1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
-1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
-1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
-1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
-1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
-1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
-1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
-1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
-1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
-1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
-1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
-1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
-1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
-1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
-1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
-1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
-1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
-1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
-1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
-1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
-1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
-1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
-1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
-1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
-1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
-1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
-1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
-1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
-1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
-1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
-1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
-1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
-1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
-1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
-1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
-1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
-1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
-1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
-1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
-1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
-1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
-1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
-1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
-1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
-1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
-1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
-1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
-1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
-1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
-1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
-1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
-1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
-1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
-1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
-1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
-1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
-1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
-1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
-1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
-1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
-1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
-1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
-1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
-1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
-1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
-1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
-1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
-1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
-1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
-1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
-1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
-1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
-1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
-1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
-1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
-1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
-1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
-1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
-1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
-1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
-1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
-1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
-1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
-1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
-1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
-1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
-1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
-1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
-1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
-1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
-1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
-1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
-1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
-1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
-1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
-1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
-1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
-1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
-1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
-1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
-1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
-1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
-1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
-1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
-1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
-1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
-1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
-1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
-1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
-1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
-1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
-1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
-1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
-1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
-1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
-1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
-1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
-1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
-1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
-1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
-1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
-1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
-1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
-1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
-1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
-1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
-1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
-1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
-1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
-1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
-1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
-1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
-1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
-1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
-1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
-1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
-1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
-1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
-1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
-1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
-1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
-1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
-1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
-1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
-1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
-1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
-1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
-1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
-1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
-1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
-1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
-1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
-1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
-1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
-1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
-1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
-1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
-1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
-1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
-1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
-1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
-1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
-1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
-1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
-1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
-1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
-1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
-1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
-1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
-1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
-1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
-1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
-1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
-1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
-1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
-1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
-1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
-1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
-1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
-1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
-1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
-1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
-1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
-1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
-1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
-1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
-1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
-1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
-1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
-1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
-1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
-1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
-1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
-1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
-1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
-1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
-1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
-1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
-1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
-1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
-1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
-1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
-1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
-1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
-1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
-1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
-1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
-1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
-1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
-1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
-1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
-1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
-1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
-1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
-1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
-1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
-1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
-1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
-1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
-1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
-1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
-1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
-1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
-1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
-1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
-1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
-1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
-1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
-1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
-1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
-1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
-1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
-1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
-1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
-1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
-1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
-1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
-1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
-1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
-1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
-1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
-1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
-1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
-1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
-1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
-1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
-1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
-1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
-1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
-1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
-1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
-1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
-1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
-1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
-1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
-1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
-1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
-1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
-1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
-1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
-1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
-1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
-1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
-1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
-1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
-1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
-1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
-1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
-1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
-1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
-1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
-1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
-1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
-1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
-1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
-1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
-1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
-1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
-1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
-1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
-1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
-1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
-1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
-1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
-1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
-1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
-1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
-1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
-1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
-1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
-1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
-1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
-1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
-1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
-1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
-1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
-1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
-1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
-1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
-1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
-1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
-1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
-1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
-1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
-1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
-1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
-1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
-1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
-1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
-1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
-1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
-1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
-1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
-1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
-1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
-1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
-1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
-1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
-1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
-1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
-1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
-1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
-1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
-1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
-1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
-1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
-1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
-1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
-1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
-1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
-1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
-1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
-1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
-1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
-1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
-1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
-1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
-1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
-1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
-1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
-1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
-1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
-1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
-1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
-1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
-1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
-1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
-1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
-1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
-1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
-1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
-1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
-1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
-1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
-1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
-1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
-1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
-1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
-1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
-1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
-1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
-1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
-1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
-1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
-1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
-1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
-1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
-1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
-1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
-1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
-1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
-1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
-1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
-1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
-1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
-1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
-1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
-1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
-1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
-1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
-1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
-1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
-1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
-1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
-1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
-1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
-1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
-1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
-1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
-1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
-1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
-1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
-1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
-1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
-1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
-1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
-1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
-1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
-1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
-1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
-1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
-1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
-1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
-1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
-1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
-1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
-1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
-1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
-1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
-1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
-1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
-1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
-1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
-1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
-1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
-1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
-1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
-1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
-1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
-1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
-1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
-1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
-1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
-1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
-1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
-1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
-1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
-1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
-1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
-1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
-1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
-1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
-1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
-1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
-1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
-1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
-1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
-1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
-1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
-1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
-1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
-1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
-1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
-1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
-1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
-1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
-1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
-1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
-1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
-1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
-1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
-1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
-1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
-1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
-1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
-1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
-1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
-1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
-1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
-1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
-1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
-1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
-1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
-1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
-1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
-1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
-1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
-1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
-1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
-1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
-1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
-1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
-1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
-1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
-1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
-1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
-1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
-1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
-1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
-1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
-1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
-1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
-1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
-1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
-1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
-1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
-1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
-1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
-1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
-1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
-1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
-1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
-1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
-1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
-1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
-1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
-1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
-1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
-1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
-1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
-1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
-1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
-1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
-1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
-1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
-1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
-1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
-1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
-1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
-1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
-1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
-1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
-1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
-1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
-1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
-1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
-1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
-1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
-1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
-1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
-1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
-1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
-1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
-1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
-1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
-1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
-1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
-1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
-1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
-20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
-2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
-2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
-2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
-2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
-2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
-2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
-2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
-2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
-2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
-2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
-2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
-2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
-2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
-2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
-2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
-2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
-2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
-2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
-2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
-2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
-2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
-2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
-2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
-2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
-2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
-2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
-2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
-2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
-2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
-2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
-2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
-2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
-2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
-2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
-2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
-2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
-2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
-2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
-2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
-2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
-2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
-2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
-2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
-2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
-2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
-2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
-2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
-2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
-2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
-2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
-2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
-2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
-2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
-2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
-2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
-2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
-2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
-2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
-2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
-2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
-2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
-2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
-2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
-2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
-2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
-2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
-2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
-2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
-2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
-2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
-2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
-2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
-2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
-2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
-2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
-2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
-2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
-2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
-2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
-2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
-2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
-2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
-2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
-2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
-2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
-2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
-2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
-2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
-2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
-2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
-2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
-2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
-2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
-2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
-2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
-2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
-2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
-2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
-2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
-2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
-2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
-2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
-2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
-2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
-2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
-2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
-2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
-2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
-2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
-2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
-2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
-2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
-2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
-2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
-2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
-2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
-2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
-2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
-2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
-2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
-2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
-2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
-2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
-2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
-2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
-2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
-2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
-2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
-2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
-2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
-2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
-2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
-2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
-2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
-2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
-2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
-2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
-2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
-2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
-2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
-2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
-2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
-2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
-2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
-2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;;
-2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
-2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
-2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
-2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
-2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
-2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
-2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
-2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
-2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
-2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
-2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
-2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
-2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
-2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
-2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
-2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
-2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
-2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
-2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
-2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
-2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
-2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
-2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
-2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
-2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
-2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
-2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
-2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
-2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
-2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
-2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
-2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
-2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
-2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
-2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
-2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
-2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
-2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
-2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
-2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
-2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
-2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
-2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
-2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
-2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
-2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
-2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
-2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
-2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
-2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
-2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
-2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
-2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
-2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
-2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
-2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
-2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
-2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
-2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
-2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
-2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
-2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
-2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
-2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
-2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
-2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
-2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
-2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
-2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
-2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
-2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
-2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
-2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
-2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
-2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
-2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
-2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
-2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
-2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
-2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
-2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
-2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
-2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
-2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
-2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
-2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
-2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
-2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
-2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
-2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
-2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
-2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
-2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
-2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
-2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
-2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
-2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
-2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
-2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
-2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
-2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
-2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
-2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
-2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
-2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
-2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
-2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
-2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
-2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
-2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
-2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
-2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
-2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
-2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
-2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
-2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
-2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
-2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
-2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
-2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
-2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
-2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
-2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
-2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
-2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
-2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
-2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
-2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
-2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
-2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
-2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
-2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
-2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
-2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
-2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
-2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
-2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
-2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
-2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
-2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
-2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
-2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
-2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
-2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
-2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
-2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
-2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
-2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
-2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
-2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
-2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
-2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
-2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
-2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
-2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
-2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
-2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
-2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
-2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
-2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
-2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
-2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
-2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
-2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
-2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
-2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
-2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
-2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
-2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
-2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
-2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
-2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
-2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
-2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
-2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
-2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
-2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
-2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
-2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
-2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
-2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
-2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
-2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
-2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
-2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
-2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
-2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
-2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
-2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
-2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
-2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
-2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
-2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
-2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
-2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
-2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
-2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
-2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
-2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
-2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
-2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
-2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
-2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
-2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
-2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
-2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
-2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
-2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
-2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
-2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
-2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
-2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
-2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
-2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
-2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
-2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
-2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
-2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
-2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
-2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
-2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
-2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
-2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
-2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
-2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
-2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
-2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
-2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
-2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
-2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
-2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
-2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
-2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
-2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
-2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
-2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
-2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
-2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
-2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
-2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
-2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
-2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
-2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
-2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
-2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
-2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
-2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
-2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
-2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
-2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
-2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
-2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
-2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
-2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
-2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
-2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
-2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
-2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
-2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
-2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
-2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
-2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
-2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
-2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
-2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
-2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
-2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
-2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
-2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
-2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
-2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
-2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
-2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
-2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
-2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
-2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
-2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
-2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
-2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
-2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
-2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
-2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
-2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
-2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
-2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
-2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
-2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
-2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
-2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
-2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
-2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
-2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
-2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
-2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
-2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
-2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
-2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
-2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
-2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
-2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
-2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
-2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
-2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
-2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
-2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
-2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
-2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
-2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
-2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
-2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
-2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
-2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
-2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
-2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
-2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
-2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
-2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
-2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
-2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
-2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
-2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
-2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
-2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
-2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
-2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
-2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
-2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
-2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
-2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
-2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
-2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
-2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
-2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
-2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
-2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
-2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
-2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
-2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
-2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
-2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
-2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
-2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
-2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
-2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
-2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
-2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
-2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
-2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
-2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
-2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
-2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
-2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
-2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
-2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
-2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
-2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
-2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
-2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
-2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
-2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
-2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
-2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
-2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
-2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
-2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
-2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
-2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
-2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
-2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
-2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
-2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
-2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
-2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
-2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
-2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
-2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
-2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
-2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
-2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
-2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
-2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
-2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
-2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
-2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
-2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
-2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
-2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
-2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
-2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
-2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
-2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
-2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
-2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
-2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
-2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
-2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
-2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
-E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
-E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
-E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
-E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
-E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
-E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
-E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
-E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
-E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
-E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
-E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
-E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
-E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
-E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
-E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
-E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
-E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
-E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
-E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
-E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
-E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
-E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
-E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
-E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
-E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
-E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
-E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
-E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
-E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
-E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
-E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
-E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
-E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
-E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
-E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
-E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
-E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
-E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
-E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
-E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
-E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
-E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
-E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
-E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
-E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
-E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
-E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
-E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
-E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
-E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
-E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
-E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
-E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
-E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
-E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
-E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
-E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
-E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
-E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
-E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
-E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
-E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
-E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
-E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
-E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
-E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
-E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
-E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
-E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
-E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
-E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
-E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
-E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
-E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
-E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
-E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
-E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
-E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
-E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
-E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
-E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
-E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
-E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
-E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
-E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
-E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
-E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
-E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
-E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
-E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
-E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
-E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
-E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
-E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
-E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
-E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
-E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
-E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
-E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
-E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
-E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
-E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
-E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
-E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
-E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
-E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
-E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
-E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
-E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
-E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
-E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
-E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
-E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
-E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
-E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
-E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
-E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
-E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
-E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
-E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
-E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
-E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
-E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
-E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
-E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
-E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
-E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
-E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
-E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
-E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
-E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
-E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
-E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
-E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
-E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
-E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
-E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
-E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
-E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
-E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
-E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
-E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
-E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
-E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
-E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
-E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
-E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
-E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
-E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
-E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
-E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
-E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
-E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
-E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
-E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
-E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
-E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
-E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
-E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
-E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
-E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
-E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
-E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
-E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
-E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
-E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
-E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
-E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
-E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
-E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
-E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
-E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
-E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
-E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
-E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
-E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
-E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
-E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
-E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
-E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
-E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
-E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
-E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
-E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
-E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
-E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
-E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
-E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
-E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
-E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
-E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
-E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
-E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
-E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
-E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
-E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
-E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
-E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
-E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
-E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
-E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
-E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
-E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
-E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
-E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
-E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
-E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
-E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
-E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
-E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
-E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
-E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
-E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
-E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
-E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
-E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
-E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
-E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
-E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
-E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
-E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
-E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
-E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
-E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
-E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
-E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
-E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
-E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
-E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
-E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
-E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
-E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
-E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
-E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
-E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
-E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
-E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
-E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
-E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
-E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
-E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
-E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
-E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
-E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
-E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
-E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
-E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
-E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
-E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
-E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
-E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
-E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
-E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
-E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
-E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
-E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
-E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
-E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
-E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
-E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
-E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
-E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
-E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
-E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
-E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
-E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
-E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
-E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
-E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
-E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
-E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
-E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
-E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
-E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
-E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
-E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
-E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
-E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
-E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
-E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
-E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
-E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
-E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
-E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
-E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
-E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
-E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
-E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
-E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
-E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
-E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
-E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
-E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
-E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
-E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
-E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
-E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
-E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
-E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
-E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
-E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
-E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
-E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
-E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
-E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
-E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
-E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
-E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
-E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
-E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
-E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
-E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
-E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
-E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
-E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
-E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
-E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
-E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
-E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
-E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
-E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
-E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
-E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
-E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
-E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
-E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
-E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
-E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
-E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
-E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
-E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
-E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
-E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
-E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
-E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
-E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
-E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
-F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
-FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
-100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
-10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
diff --git a/libjava/classpath/doc/vmintegration.texinfo b/libjava/classpath/doc/vmintegration.texinfo
index e9f1046..a784e6f 100644
--- a/libjava/classpath/doc/vmintegration.texinfo
+++ b/libjava/classpath/doc/vmintegration.texinfo
@@ -200,6 +200,8 @@ implementation.
* java.nio::
* java.nio.channels::
* gnu.java.nio::
+* java.lang.reflect::
+* gnu.java.lang::
* Classpath Callbacks::
@end menu
@@ -226,7 +228,6 @@ become operable.
* java.lang.VMRuntime::
* java.lang.VMString::
* java.lang.VMThread::
-* java.lang.VMInstrumentationImpl::
* java.lang.VMMath::
@end menu
@@ -274,9 +275,12 @@ VM should filter out non-public classes.
@item @code{getDeclaredConstructors(Class,boolean)} -- And constructors.
@item @code{getClassLoader(Class)} -- Returns the @code{ClassLoader} instance
which is responsible for the specified class.
-@item @code{forName(String)} -- The VM should create a @code{Class} instance
-corresponding to the named class. As noted in @ref{VM Hooks}, the internal
-content of the instance is the responsibility of the VM.
+@item @code{forName(String, boolean, ClassLoader)} -- The VM should create a
+@code{Class} instance corresponding to the named class. As noted in
+@ref{VM Hooks}, the internal content of the instance is the
+responsibility of the VM. The supplied class loader is recorded as that
+which loaded the class, and the boolean specifies whether or not to
+run the class initializer.
@item @code{isArray(Class)} -- Another property test, corresponding to a
class file flag.
@item @code{initialize(Class)} -- The VM should initialize the class fully,
@@ -307,15 +311,44 @@ information stored in the class file.
an inner or member class, or @code{null} if the instance refers to a top-level
class.
@end itemize
+@item 1.5
+@itemize @bullet
+@item @code{isSynthetic(Class)} -- Returns true if the flags for this class
+mark it as synthetic.
+@item @code{isAnnotation(Class)} -- Returns true if the flags for this class
+mark it as an annotation.
+@item @code{isEnum(Class)} -- Returns true if the flags for this class
+mark it as an enumeration.
+@item @code{getSimpleName(Class)} -- Returns the simple name of the class.
+A default implementation is provided, but a more efficient version may instead
+be provided by the VM.
+@item @code{getCanonicalName(Class)} -- Returns the canonical name of the
+class. A default implementation is provided, but a more efficient
+version may instead be provided by the VM.
+@item @code{getEnclosingClass(Class)} -- Returns the immediately enclosing
+class (null for a top-level class).
+@item @code{getEnclosingConstructor(Class)} -- Returns the constructor
+which immediately encloses the supplied class.
+@item @code{getEnclosingMethod(Class)} -- Returns the method
+which immediately encloses the supplied class.
+@item @code{getClassSignature(Class)} -- Returns the generic signature of
+the class or null if there isn't one.
+@item @code{isAnonymousClass(Class)} -- Returns true if the class is an
+anonymous class.
+@item @code{isLocalClass(Class)} -- Returns true if the class is an
+local class.
+@item @code{isMemberClass(Class)} -- Returns true if the class is an
+member class.
+@end itemize
@end itemize
@node java.lang.VMObject, java.lang.VMClassLoader, java.lang.VMClass, java.lang
@subsection @code{java.lang.VMObject}
-@code{VMObject} is the bridge between the low level @code{Object} facilities
-such as making a clone, getting the class of the object and the wait/notify
-semantics. This is accomplished using the following @code{native}
-methods.
+@code{VMObject} is the bridge between the low level @code{Object}
+facilities such as making a clone, getting the class of the object and
+the wait/notify semantics. This is accomplished using the following
+@code{native} methods.
@itemize @bullet
@item @code{getClass(Object)} -- Returns the @code{Class} instance for the
@@ -413,13 +446,15 @@ and direct memory manipulation than would have been achieved by using Java.
@item @code{currentTimeMillis()} -- Gets the system time in milliseconds.
@item @code{getenv(String)} -- Returns the value of the specified environment
variable.
+@item @code{getenv()} -- Returns a list of `name=value' pairs which correspond
+to the environment variables.
@end itemize
@item Java Methods
@itemize @bullet
@item @code{makeStandardInputStream()} -- Helps provide the functionality of
-@code{System.in} by wrapping the appropriate file descriptor in a buffered
-file input stream. VMs may choose to create the stream from the descriptor
-differently rather than using this method.
+@code{System.in} by wrapping the appropriate file descriptor in a
+buffered file input stream. VMs may choose to create the stream from
+the descriptor differently rather than using this method.
@item @code{makeStandardOutputStream()} -- Helps provide the functionality of
@code{System.out} by wrapping the appropriate file descriptor in a buffered
file output stream. VMs may choose to create the stream from the descriptor
@@ -540,11 +575,14 @@ for all three by Classpath, making VM implementation optional. These use
the POSIX functions, @code{fork()}, @code{waitpid()} and @code{kill()}.
@itemize @bullet
-@item @code{nativeSpawn(String[],String[],File)} -- The VM should create a
-new process which uses the specified command-line arguments, environment
-variables and working directory. Unlike the other two methods, this
-method is linked to an instance, and must call @code{setProcessInfo()} with
-the results before returning.
+@item @code{nativeSpawn(String[],String[],File,boolean)} -- The VM should
+create a new process which uses the specified command-line arguments,
+environment variables and working directory. Unlike the other two
+methods, this method is linked to an instance, and must call
+@code{setProcessInfo()} with the results before returning. The
+boolean argument maps to the @code{redirectErrorStream} property of
+@code{java.lang.ProcessBuilder}. When true, the output and error streams
+are merged.
@item @code{nativeReap()} -- This is called to perform a reap of any
zombie processes, and should not block, instead returning a boolean as to
whether reaping actually took place.
@@ -609,7 +647,7 @@ A new mapping is created for each new string being @code{intern}ed.
A VM may implement this differently by implementing this method,
which is @code{static} and the only one in @code{VMString}.
-@node java.lang.VMThread,java.lang.VMInstrumentationImpl, java.lang.VMString, java.lang
+@node java.lang.VMThread, java.lang.VMMath, java.lang.VMString, java.lang
@subsection @code{java.lang.VMThread}
@code{VMThread} provides the link between Java's threads and the platform
@@ -685,49 +723,7 @@ having returned true, and is thus deprecated as a result.
@end itemize
@end itemize
-@node java.lang.VMInstrumentationImpl, java.lang.VMMath, java.lang.VMThread, java.lang
-@subsection @code{java.lang.VMInstrumentationImpl}
-
-The @code{java.lang.VMInstrumentationImpl} and
-@code{java.lang.InstrumentationImpl} classes provide an implementation of the
-@code{java.lang.instrument.Instrument} interface. This interface is for java
-1.5 and is only in the generics branch.
-A @code{InstrumentationImpl} object should be created by the VM when agents
-are given in the command line (see the @code{java.lang.instrument} package
-documentation). The VM has to set the static field
-@code{VMClassLoader.instrumenter} to this object. The VM should implement the
-static native methods of the @code{VMInstrumentationImpl} class.
-
-@itemize @bullet
-@item @code{isRedefineClassesSupported()} -- Returns true if the JVM supports
-class redefinition.
-@item @code{redefineClasses()} -- Gives a set of classes with new bytecodes.
-The VM must redefine the classes by reading the new bytecodes.
-@item @code{getAllLoadedClass()} -- Returns an array of all loaded classes.
-@item @code{getInitiatedClass()} -- Returns an array of all classes loaded
-by a specific class loader.
-@item @code{getObjectSize()} -- Gives the size of an object.
-@end itemize
-
-Instrumentation allows to modify the bytecode of a class before it gets read
-by the VM. In GNU Classpath, the @code{ClassLoader.defineClass} method calls
-the @code{VMClassLoader.defineClassWithTransformers} method which first checks
-if @code{VMClassLoader.instrumenter} is @code{null}. If it's the case, it
-directly calls @code{VMClassLoader.defineClass}. If it's not the case, the
-method calls at first the @code{InstrumentationImpl.callTransformers} method,
-which calls each transformer registered to the @code{InstrumentationImpl}
-object and returns a new bytecode array. Then, it calls the
-@code{VMClassLoader.defineClass} method with this new bytecode array.
-
-The second use of instrumentation is to redefine a class after it has been
-loaded by the VM. This is done in the Java application by calling the
-@code{Instrumentation.redefineClasses} method of the standard interface on
-a @code{Instrumentation} object. The @code{InstrumentationImpl.redefineClasses}
-method calls the @code{VMInstrumentationImpl.redefineClasses} native method
-which must be implemented by the VM. The implementation should call the
-@code{InstrumentationImpl.callTransformers} method.
-
-@node java.lang.VMMath, , java.lang.VMInstrumentationImpl, java.lang
+@node java.lang.VMMath,, java.lang.VMThread, java.lang
@subsection @code{java.lang.VMMath}
The @code{VMMath} class provides a series of native methods
@@ -786,6 +782,7 @@ includes the context of a class (the stack) and the system properties.
@menu
* gnu.classpath.VMStackWalker::
* gnu.classpath.VMSystemProperties::
+* gnu.classpath.Unsafe::
@end menu
@node gnu.classpath.VMStackWalker,gnu.classpath.VMSystemProperties,gnu.classpath,gnu.classpath
@@ -809,7 +806,7 @@ accessing @code{getCallingClass()}.
loader of the class.
@end itemize
-@node gnu.classpath.VMSystemProperties,,gnu.classpath.VMStackWalker,gnu.classpath
+@node gnu.classpath.VMSystemProperties,gnu.classpath.Unsafe,gnu.classpath.VMStackWalker,gnu.classpath
@subsection @code{gnu.classpath.VMSystemProperties}
@code{VMSystemProperties} allows the VM to hook into the property creation
@@ -834,6 +831,38 @@ Classpath properties have been added. The main purpose of this is to allow
the VM to alter the properties added by GNU Classpath to suit it.
@end itemize
+@node gnu.classpath.Unsafe,,gnu.classpath.VMSystemProperties,gnu.classpath
+@subsection @code{gnu.classpath.Unsafe}
+
+The @code{Unsafe} class provides access to some low-level unsafe operations
+as required by the addition of the java.util.concurrent classes. These
+focus on direct memory access to the fields within the VM and providing
+atomic update methods.
+
+@itemize @bullet
+@item @code{objectFieldOffset(Field)} -- Provides the caller with the memory
+offset of a particular field.
+@item @code{compareAndSwap*(Object,long,*,*)} -- One of these methods is
+provided for each of int, long and Object (hence the *s). The value of
+a field pointed to by the given Object and offset is compared with the
+first value and replaced with the second if they are the same. The reason
+for this method is to make this change operation atomic.
+@item @code{put/get*(Object,long,*)} -- These are like the last set of
+methods, handling integers, longs and Objects, but the field is always
+changed on a put. Different methods are provided for different semantics.
+Ordered variants perform a lazy put, in that the change does not
+immediately propogate to other threads, while the others provide
+volatile or 'normal' semantics.
+@item @code{arrayBaseOffset(Class)} and @code{arrayIndexScale(Class)} --
+These two methods allow an array class to be traversed by pointer
+arithmetic, by gaining the address of the first element and then
+scaling appropriately for the later ones.
+@item @code{park(boolean,long)} and @code{unpark(Thread)} -- These methods
+block and unblock threads respectively, with an optional timeout being
+provided for the blocking. @code{unpark} is unsafe as the thread may have
+been destroyed by native code.
+@end itemize
+
@node java.util, java.io, gnu.classpath, Classpath Hooks
@section java.util
@@ -970,14 +999,14 @@ is optional.
@section java.security
The @code{java.security} package provides support for Java's security
-architecture. At present, @code{VMAccessController} represents the sole
-VM hook for this.
+architecture.
@menu
* java.security.VMAccessController::
+* java.security.VMSecureRandom::
@end menu
-@node java.security.VMAccessController,,java.security,java.security
+@node java.security.VMAccessController,java.security.VMSecureRandom,java.security,java.security
@subsection @code{java.security.VMAccessController}
The @code{AccessController} is used to perform privileged actions. Its
@@ -1000,6 +1029,23 @@ arrays of classes and method names. The actual implementation returns
an empty array, indicating that there are no permissions.
@end itemize
+@node java.security.VMSecureRandom,,java.security.VMAccessController,java.security
+@subsection @code{java.security.VMSecureRandom}
+
+The @code{VMSecureRandom} class is used to provide access to
+cryptographically secure random numbers. The default implementation
+of the class runs eight threads that increment counters in a tight
+loop, and XORs each counter to produce one byte of seed data. This is
+not very efficient, and is not guaranteed to be random (the thread
+scheduler is probably deterministic, after all). VM implementors
+should provide a version of this class, which implements the method
+@code{generateSeed(byte[],int,int)}, so that it fills the buffer using
+a random seed from a system facility, such as a system entropy
+gathering device or hardware random number generator. The parameters
+are the usual set of buffer, offset and length and the method returns
+the number of bytes actually generated, which may be less than that
+requested.
+
@node java.net, java.nio, java.security, Classpath Hooks
@section java.net
@@ -1111,7 +1157,7 @@ in a @code{FileInputStream}.
in a @code{FileOutputStream}.
@end itemize
-@node gnu.java.nio, Classpath Callbacks, java.nio.channels, Classpath Hooks
+@node gnu.java.nio, java.lang.reflect, java.nio.channels, Classpath Hooks
@section gnu.java.nio
The @code{gnu.java.nio} class provides Classpath implementations of the
@@ -1142,7 +1188,77 @@ operation to be performed. This is represented by the @code{static}
@code{native} method, @code{select(int[],int[],int[],long)}, and a default
implementation of this is provided.
-@node Classpath Callbacks, , gnu.java.nio, Classpath Hooks
+@node java.lang.reflect, gnu.java.lang, gnu.java.nio, Classpath Hooks
+@section @code{java.lang.reflect}
+@code{java.lang.reflect} provides the interface to Java's reflection
+facilities. Via reflection, programmers can obtain type information about
+a particular instance at runtime or dynamically create new instances.
+
+@menu
+* java.lang.reflect.VMArray::
+@end menu
+
+@node java.lang.reflect.VMArray,,,java.lang.reflect
+@subsection @code{java.lang.reflect.VMArray}
+
+The @code{VMArray} class provides a hook, @code{createObjectArray},
+which the VM uses to generate a new non-primitive array of a
+particular class and size. The default implementation simply passes
+the job down to the standard JNI function, @code{NewObjectArray}.
+
+@node gnu.java.lang, Classpath Callbacks, java.lang.reflect, Classpath Hooks
+@section @code{gnu.java.lang}
+
+@code{gnu.java.lang} provides VM interfaces for the GNU
+implementations of features in java.lang. Currently, this includes the
+implementation of instrumentation.
+
+@menu
+* gnu.java.lang.VMInstrumentationImpl::
+@end menu
+
+@node gnu.java.lang.VMInstrumentationImpl,,,gnu.java.lang
+@subsection @code{gnu.java.lang.VMInstrumentationImpl}
+
+The @code{gnu.java.lang.VMInstrumentationImpl} and
+@code{gnu.java.lang.InstrumentationImpl} classes provide an implementation of the
+@code{java.lang.instrument.Instrument} interface.
+A @code{InstrumentationImpl} object should be created by the VM when agents
+are given in the command line (see the @code{java.lang.instrument} package
+documentation). The VM has to set the static field
+@code{VMClassLoader.instrumenter} to this object. The VM should implement the
+static native methods of the @code{VMInstrumentationImpl} class.
+
+@itemize @bullet
+@item @code{isRedefineClassesSupported()} -- Returns true if the JVM supports
+class redefinition.
+@item @code{redefineClasses()} -- Gives a set of classes with new bytecodes.
+The VM must redefine the classes by reading the new bytecodes.
+@item @code{getAllLoadedClass()} -- Returns an array of all loaded classes.
+@item @code{getInitiatedClass()} -- Returns an array of all classes loaded
+by a specific class loader.
+@item @code{getObjectSize()} -- Gives the size of an object.
+@end itemize
+
+Instrumentation allows to modify the bytecode of a class before it gets read
+by the VM. In GNU Classpath, the @code{ClassLoader.defineClass} method calls
+the @code{VMClassLoader.defineClassWithTransformers} method which first checks
+if @code{VMClassLoader.instrumenter} is @code{null}. If it's the case, it
+directly calls @code{VMClassLoader.defineClass}. If it's not the case, the
+method calls at first the @code{InstrumentationImpl.callTransformers} method,
+which calls each transformer registered to the @code{InstrumentationImpl}
+object and returns a new bytecode array. Then, it calls the
+@code{VMClassLoader.defineClass} method with this new bytecode array.
+
+The second use of instrumentation is to redefine a class after it has been
+loaded by the VM. This is done in the Java application by calling the
+@code{Instrumentation.redefineClasses} method of the standard interface on
+a @code{Instrumentation} object. The @code{InstrumentationImpl.redefineClasses}
+method calls the @code{VMInstrumentationImpl.redefineClasses} native method
+which must be implemented by the VM. The implementation should call the
+@code{InstrumentationImpl.callTransformers} method.
+
+@node Classpath Callbacks, , gnu.java.lang, Classpath Hooks
Some of the classes you implement for the VM will need to call back to
package-private methods in Classpath:
diff --git a/libjava/classpath/doc/www.gnu.org/Makefile b/libjava/classpath/doc/www.gnu.org/Makefile
deleted file mode 100644
index 2724a18..0000000
--- a/libjava/classpath/doc/www.gnu.org/Makefile
+++ /dev/null
@@ -1,46 +0,0 @@
-SUBDIRS := announce downloads docs faq events cp-tools
-
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-all : $(WML_OBJS) subdirs
-
-%.texinfo :
- cp ../$(notdir $(@)) docs
-
-# home and news html includes newsitems.txt so we list that here explicitly
-home.html: home.wml include/macros.wml include/layout.wml newsitems.txt
- $(WML) -o $@ $<
-news.html: news.wml include/macros.wml include/layout.wml newsitems.txt
- $(WML) -o $@ $<
-
-%.html: %.wml include/macros.wml include/layout.wml
- $(WML) -o $@ $<
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), \
- sh -c "mkdir -p $(CLASSPATH_WEBROOT)/$(dir);\
- cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)
- -cp -f *.css $(CLASSPATH_WEBROOT)
- # -cp -f *.jpg $(CLASSPATH_WEBROOT)
-
diff --git a/libjava/classpath/doc/www.gnu.org/README b/libjava/classpath/doc/www.gnu.org/README
deleted file mode 100644
index beb8d63..0000000
--- a/libjava/classpath/doc/www.gnu.org/README
+++ /dev/null
@@ -1,109 +0,0 @@
-All HTML files are generated from WML source.
-
-If you wish to generate/view the HTML files locally, you'll need to
-have wml and texi2html installed. To make the HTML files, just
-type "make".
-
-
-Quick and dirty "How To"
-
-How to create a webpage:
-
-1. When working in a subdirectory, begin the page with:
- #!wml --include=..
-
-2. Add:
- #include "include/layout.wml"
-
-3. Add <subject "page title">
-
- this will set the page title to:
- "page title - GNU Project -Free Software Foundation (FSF)"
-
-4. Write your contents. Use the following pattern:
-
- <box>
- <boxtitle>...section title...</boxtitle>
- <boxitem>...section contents...</boxitem>
-
- <boxtitle>...section title...</boxtitle>
- <boxitem>...section contents...</boxitem>
- </box>
-
-5. To change the menu entries, edit include/layout.wml
-
-6. Call make to build the pages.
-
-7. Set "CLASSPATH_WEBROOT" to a directory before calling "make publish"
- to deploy the pages locally
-
-A few useful tags (defined in layout.wml)
-
-* <createlink name="name" url="url>
-
-creates a <a href="url">name</a> entry
-
-Some pages define their own tags (e.g. faq.wml, tools.wml, downloads.wml)
-to organize their content.
-
-
-Guide to the custom-defined tags
---------------------------------
-
-Links
- Description:
- creates a <a href="url">name</a> entry; if name is missing, uses the url
- as name
- Availability:
- everywhere (defined in macros.wml)
- Format:
- <createlink name="name" url="url>
- <createlink url="url>
-
-Commented code
- Description:
- creates a commented code example
- Availability:
- everywhere (defined in macros.wml)
- Format:
- <commented-code>
- <code-line code="1st code-line">comment to 1st line of code</code-line>
- <code-line code="2nd code-line">comment to 2nd line of code</code-line>
- <code-line code="3rd code-line" />
- </commented-code>
-
-
-FAQ-Lists
-
- <faq-section name="section name">
- <faq question="1st question">
- 1st answer
- </faq>
- <faq question="2nd question">
- 2nd answer
- </faq>
- </faq-section>
- <faq-section name="section name">
- <faq question="1st question">
- 1st answer
- </faq>
- </faq-section>
-
-Project Tables
- Description:
- Define a project in a project table
- Example:
- stories.wml
- Availability:
- everywhere (defined in macros.wml)
- Format:
- <project-list>
- <project name="proj name" url="proj url">
- project description
- </project>
- <project name="proj name" url="proj url">
- project description
- </project>
- </project-list>
-
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/19990206.txt b/libjava/classpath/doc/www.gnu.org/announce/19990206.txt
deleted file mode 100644
index 8dc6305..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/19990206.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-I am pleased to announce the first development release of GNU Classpath,
-a project to create a free software replacement for Sun's proprietary
-Java class libraries. The project is initially providing class library
-support for the Japhar JVM.
-
-Here are the answers to some questions you might have about this project
-and this release.
-
-1). Where can I get it?
-
-GNU Classpath 0.00 can be downloaded from:
-
-ftp://alpha.gnu.ai.mit.edu/pub/gnu/classpath-0.00.tar.gz
-
-2). What is included?
-
-The following java packages are supported:
- -- java.beans
- -- java.io
- -- java.lang
- -- java.lang.reflect
- -- java.math
- -- java.net
- -- java.security (partial and non-functioning)
- -- java.security.acl
- -- java.security.interfaces
- -- java.util
-
-This is enough to run many non-awt programs. Not all classes and methods
-are implemented in this release, but most are. The major missing piece
-of core functionality is java.text. Many of the implemented classes are
-already up to the Java 1.2 spec.
-
-3). What is required to build/install/run?
-
-GNU Classpath requires that Japhar 0.07 be installed. Information on
-obtaining Japhar is available from http://www.japhar.org/. A working
-C compiler is also required. You will need the Sun JDK installed if you
-elect to recompile the Java classes.
-
-4). What platforms are supported?
-
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-
-5). Who should use this software?
-
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-
-6). Where do I go for more information?
-
-The project has a web page at
-
-http://www.classpath.org/
-
-and
-
-http://www.gnu.org/software/classpath/classpath.html
-
-Information on our mailing list is available at the web site.
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/19990206.wml b/libjava/classpath/doc/www.gnu.org/announce/19990206.wml
deleted file mode 100644
index 9b541f8..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/19990206.wml
+++ /dev/null
@@ -1,130 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="cbj">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath Annoucement (1999-02-06)</en>">
-
-<p>
-<en>
-I am pleased to announce the first development release of GNU Classpath,
-a project to create a free software replacement for Sun's proprietary
-Java class libraries. The project is initially providing class library
-support for the Japhar JVM.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.00 can be downloaded from:
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partial and non-functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and methods
-are implemented in this release, but most are. The major missing piece
-of core functionality is java.text. Many of the implemented classes are
-already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.07 be installed. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need the Sun JDK installed if you elect to recompile the Java
-classes.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20001120.wml b/libjava/classpath/doc/www.gnu.org/announce/20001120.wml
deleted file mode 100644
index eeff38d..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20001120.wml
+++ /dev/null
@@ -1,137 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="cbj">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath Annoucement (2000-11-20)</en>">
-
-<p>
-<en>
-I am pleased to announce a new development release of GNU Classpath,
-a project to create a free software replacement for Sun's proprietary
-Java class libraries. The project is initially providing class library
-support for the Japhar JVM. There are a few other JVMs which have taken
-the project libraries and used them in their own projects as well.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.01 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partial and non-functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.09 be installed. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need IBM's Jikes Java compiler installed if you elect to
-recompile the Java classes and Sun's 1.1.8 JDK javah installed to
-create native header files. RPMs compatible with Red Hat 7 have been
-created of Japhar, NSPR, a cross platform thread library Japhar uses,
-and GNU Classpath. Installing onto a Gnome workstation should
-provide the rest of the required libraries automatically. Otherwise,
-you may need to install libart and other packages detailed more
-precisely in the HACKING file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-<p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20010106.wml b/libjava/classpath/doc/www.gnu.org/announce/20010106.wml
deleted file mode 100644
index 7f07400..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20010106.wml
+++ /dev/null
@@ -1,141 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="cbj">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath Annoucement (2001-01-05)</en>">
-
-<p>
-<en>
-I am pleased to announce a new development
-release of GNU Classpath, a project to create a free software
-replacement for Sun's proprietary Java class libraries. The project
-is initially providing class library support for the Japhar JVM, but
-will soon provide out of the box support SableVM, Intel's ORP, and
-Kaffe. The major improvements for this release are the addition of a
-correct security policy file and exception stack traces are now
-printed when using Japhar.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.02 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partially functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.09 be installed along with a
-single patch to Japhar 0.09 included with the release. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need IBM's Jikes Java compiler installed if you elect to
-recompile the Java classes and Sun's 1.1.8 JDK javah installed to
-create native header files. RPMs compatible with Red Hat 7 have been
-created of Japhar, NSPR, a cross platform thread library Japhar uses,
-and GNU Classpath. Installing onto a Gnome workstation should provide
-the rest of the required libraries automatically. Otherwise, you may
-need to install libart and other packages detailed more precisely in
-the HACKING file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20020208.wml b/libjava/classpath/doc/www.gnu.org/announce/20020208.wml
deleted file mode 100644
index 471d2a0..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20020208.wml
+++ /dev/null
@@ -1,166 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="mjw">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath 0.03 Announcement (2002-02-08)</en>">
-
-<p>
-<en>
-We are pleased to announce a new development release of GNU Classpath.
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with virtual machines and compilers for the
-Java language.
-</en>
-</p>
-<p>
-<en>
-New in this release are the addition of java.util.zip and java.rmi
-packages, VM independent jni.h, more flexible build environment to
-separate class and native code generation, out of the box support for
-the ORP VM, and lots of bug fixes and updates to make GNU Classpath more
-compliant with the 1.2, 1.3 and 1.4 API specification. The copyleft
-has been clarified and all code in the library is now distributed under
-the same terms.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.03 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following packages (some with subpackages) are supported:
-</en>
-</p>
-<UL>
- <LI>java.applet (untested)</LI>
- <LI>java.awt (very experimental)</LI>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.rmi</LI>
- <LI>java.security (partially functioning)</LI>
- <LI>java.sql</LI>
- <LI>java.text (untested)</LI>
- <LI>java.util</LI>
- <LI>java.util.jar</LI>
- <LI>java.util.zip</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the 1.2 API spec. Some are
-already compliant with the 1.3 and (preliminary) 1.4 API specification.
-
-More information on the current status of each package can be found at
-<createlink url="http://www.gnu.org/software/classpath/status.html"
- name="http://www.gnu.org/software/classpath/status.html">
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development libraries
-(gtk+, libart and gdk-pixbuf). More information on the precise version
-numbers for the tools and libraries can be found in the INSTALL file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms and VMs are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-This release support ORP 1.0.9 out of the box. But other compilers and
-virtual machines such as gcj, Kissme, SableVM, Jupiter and Jaos also work
-with slightly customized versions of GNU Classpath. Please check if there
-is a customized version available for the VM you use before trying the bare
-bones GNU Classpath release. We are working with the VM creators to keep
-the differences between the core classes as small as possible.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-Although it is already capable of supporting many Java applications,
-this is a development release. As such, there are still many unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in Classpath development or reporting bugs. We
-appreciate both.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project home page with information on our mailing list can be found at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-or
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-</en>
-</p>
-<p>
-<en>
-The bug database, CVS, task-manager and latest news can be found on Savannah at
-<createlink url="http://savannah.gnu.org/projects/classpath/"
- name="http://savannah.gnu.org/projects/classpath/">
-</en>
-</p>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20040313.wml b/libjava/classpath/doc/www.gnu.org/announce/20040313.wml
deleted file mode 100755
index 71b1213..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20040313.wml
+++ /dev/null
@@ -1,108 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath 0.08 Announcement (2004-03-15)</en>">
-<pre>
-We are pleased to announce a new development release of GNU Classpath.
-
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with virtual machines and compilers for the
-java programming language.
-
-GNU Classpath 0.08 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.08.tar.gz<br>
-MD5sum: 17f200744c31f36fdbe15347745562fb
-
-New in GNU Classpath 0.08:
-
-* java.util.regexp implementation through gnu.regexp wrappers.
-* java.net.URI implementation.
-* Working implementation of javax.swing.undo.
-* java.awt.geom.CubicCurve2D/QuadCurve2D: Can now solve cubic and
- quadratic equations; implementation adapted from the GNU Scientific
- Library.
-* Lots of java.awt and gtk+ peer improvements. Also more Swing work.
- Start of EmbeddedWindow support.
-* BufferedReader speed improvements.
-* Improved useabilty of java.text implementation for several
- applications.
-* ObjectInputStream is much faster and more compatible with other
- implementations.
-* Fix handling of alias methods, where a method has been deprecated in
- favour of a new one with the same funtion but a different name.
- (See Deprecated Methods section in the GNU Classpath Hacking Guide.)
-* javax.print.attribute.standard added.
-* Lots of java.nio, java.net, java.io fixes and updates.
-* Depend on autoconf 2.59+ and automake 1.7+, GCJ 3.3+, jikes 1.18+.
-
-VM Interface changes:
-* Split native methods in java.lang.Runtime into java.lang.VMRuntime.
-* Resources are now also loaded/needed through the bootstrap classloader
- (gnu.regexp needs MessageBundle included in glibj.zip
-
-Fixed Classpath bugs:
- #6095 java.awt.geom.QuadCurve2D.solveQuadratic sometimes gives
- wrong results
- #7099 EventListenerList.getListenerCount should accept null argument
- #7104 EventListenerList.add does not work
- #7105 EventListenerList.remove does not work
- #7107 DefaultBoundedRangeModel.setValue and friends should not throw
- And lots more.
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-A list of virtual machines and compilers known to work with GNU
-Classpath can be found at our website:
-http://www.gnu.org/software/classpath/stories.htm
-
-2). What platforms are supported?
-
-GNU/Linux is the only platform that has been tested.
-We plan to eventually support many others.
-
-3). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-
-4). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found http://www.gnu.org/software/classpath/.
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20040502.wml b/libjava/classpath/doc/www.gnu.org/announce/20040502.wml
deleted file mode 100755
index 35a2cd9..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20040502.wml
+++ /dev/null
@@ -1,133 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath 0.09 Announcement (2004-05-02)</en>">
-<pre>
-We are pleased to announce a new development release of GNU Classpath.
-
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with virtual machines and compilers for the
-java programming language.
-
-GNU Classpath 0.09 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.09.tar.gz
-MD5sum: 1c4bcf2e6b5201c6496ba55ee8aac04d
-
-New in GNU Classpath 0.09:
-
-* Includes updated GNU JAXP version from 2004-02-01.
-* Native C code is now -ansi -pedantic (C89) clean and (almost) -Wall clean.
-* java.io is now implemented by delegating most tasks directly to java.nio.
-* Reworked/Optimized implementations of java.nio.Buffer and subclasses.
-* New javax.print, javax.print.attribute[.standard] and javax.print.event
- packages and classes.
-* java.text attributed iterators support.
-* New javax.imageio, javax.imageio.event and javax.imageio.spi packages and
- classes.
-* GNU Classpath can now load service providers that are described via
- META-INF/services/* resources in extension JARs. This is useful for
- implementing the various APIs that are supposed to be extensible via
- custom plugins. For details, please see the documentation of
- gnu.classpath.ServiceFactory.
- Application developers are strongly discouraged from calling glibj
- internal packages. Instead, they might want invoke the newly implemented
- javax.imageio.spi.ServiceRegistry.lookupProviders, which is a standard
- method for loading plug-ins.
-* New developers wanting to help the GNU Classpath project might want to
- review the greatly expanded Hacker Guide included in the doc directory
- or online at http://www.gnu.org/software/classpath/docs/hacking.html
- Also the FAQ has been expanded. And when working from CVS you can now use
- a simple autogen.sh script to get all autotools magic done automagically.
-* New configure option --with-glibj which defines how to install the glibj
- class files as zip, as flat directory files or both (zip|flat|both)
- [default=zip]. When working with multiple runtimes some of which might
- not support bootstrap classes in zip files the --with-glibj=both option
- is recommended (this does take extra disc space).
-* Two big code drops from the libgcj gui branch updating various java.awt
- and javax.swing classes.
-* Multiple java.net.InetAdress fixes and java.rmi fixes.
-* ServerSocket.accept() now restarts listening when system call interrupted.
-* Much cleanups to make standard API doc valid XHTML (not completed yet).
-* A scan for unused variables and non-static invocation of static methods
- turned up a couple of subtle bugs which have now all been fixed.
-* The Mauve testsuite has been cleaned up considerable and lots of issues
- in the GNU Classpath core class implementation have been fixed.
-
-VM Interface changes:
-
-* java.lang.Class/VMClass interface was changed. The interface now no
- longer requires an instance of VMClass for each Class instance. Instead
- the field vmdata in Class is now of type Object.
-* GNU Classpath now assumes that JNI calls SetXField can modify final
- fields. This was previously used silently for System.in/out/err and should
- be considered as a feature now.
-* A new VMProcess and a sample JNI C implementation are now provided to
- make Runtime.exec() work out of the box on some systems. This requires
- a small change to VMRuntime.exec() when a runtime wants to use it as the
- default java.lang.Process implementation.
-* The implementation of most of java.io through java.nio moved serveral
- runtime specific I/O methods. Most methods do have a generic default native
- C JNI implementation in native/jni/java-nio.
-* Runtime support methods for java.io.File have been moved to VMFile which
- also comes with a default JNI C implementation.
-* To support the new service provider mechanism runtimes must make sure that
- extension JARs are made accessible via the default context class loader.
-
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-A list of virtual machines and compilers known to work with GNU
-Classpath can be found at our website:
-http://www.gnu.org/software/classpath/stories.htm
-
-2). What platforms are supported?
-
-GNU/Linux is the only platform that has been tested.
-We plan to eventually support many others.
-
-3). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-
-4). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found http://www.gnu.org/software/classpath/.
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20040712.wml b/libjava/classpath/doc/www.gnu.org/announce/20040712.wml
deleted file mode 100755
index 3814a1d..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20040712.wml
+++ /dev/null
@@ -1,159 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.10 Announcement (2004-07-09)">
-<pre>
-We are pleased to announce a new development release of GNU Classpath.
-
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with virtual machines and compilers for the
-java programming language.
-
-GNU Classpath 0.10 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.10.tar.gz
-MD5sum: a59a5040f9c1237dbf27bfc668919943
-
-New in release 0.10 (Jul 9, 2004)
-
-* java.net.URL now uses application classloader to load URLStreamHandlers
- and reuses URLStreamHandlers when URL is reset (but protocol isn't changed).
-* java.io.File.deleteOnExit() implementation.
-* java.text multiple new features and bug fixes
- (only 2 out of the 1000+ java.text Mauve tests now fail).
-* Better (non-black) default AWT System colors.
-* AWT lists use GTK treeviews.
-* Proper AWT focus management has been implemented.
-* Swing menus and scrollpanes are beginning to work.
-* Swing splitpanes, dialogs and internal frames were added.
-* Swing repainting / double buffering was redone.
-* Font management and Pango DPI conversion fixes.
-* A lot of AWT imaging and event bugs have been picked out.
-* More of javax.swing.text has been implemented.
-* javax.swing.Timer has been reimplemented.
-* java.security.AccessController has been implemented
- (see runtime section).
-* The default java.lang.SecurityManager now uses AccessController.
-* New java.beans.Statement and Expression implementations.
-* Small FileChannel implementation speed improvement for traditional
- JNI based systems.
-* Regenerated all included JNI header files with gcjh (3.5 CVS),
- removes extra extern modifier and allows stricter compiler warning.
-* More C code cleanups (-Wmissing-declarations, -Wmissing-prototypes and
- -Wstring-prototypes) and jni.h fixes (a few funtion prototype fixes,
- made it compilable with C++ compilers and jni.h got renamed from jni.h.in).
-* Double.toString() and Float.toString() now work properly on 64-bit
- PowerPC systems.
-* PPC Darwin, arm, x86-64 and s/390 JNI C code compilation fixes.
-* Build system refactored and removed old Japhar specific support.
-* The gnu.java.awt.EmbeddedWindow class has been improved, and now
- supports embedding AWT windows in other top-level X windows.
- This functionality is required by gcjwebplugin.
-* gcjwebplugin, an applet viewer that can be embedded into several web
- browsers, has been extensively tested with this release of classpath.
- (See http://www.nongnu.org/gcjwebplugin/)
-* Runtime environments based on GNU Classpath 0.10 should be able to
- start up Eclipse 3.0 out of the box now.
-
-Runtime interface Changes:
-
-* VMProcess.destroy() default implementation fixes.
-* Fixed the "portable native sync" code; it had been broken since
- Classpath release 0.06, when we upgraded to GTK+2.
- Classpath's AWT peers use GTK+. GTK+ uses GLIB. GLIB by default uses
- the platform's native threading model -- pthreads in most cases.
- If the Java runtime doesn't use the native threading model, then you should
- specify --portable-native-sync when configuring Classpath, so that GLIB will
- use the Java threading primitives instead. (For a superior alternative,
- see below.)
-* The VM can set the system property
- gnu.classpath.awt.gtk.portable.native.sync instead of using the
- --portable-native-sync configure-type option.
- See doc/vmintegration.texinfo for details.
-* We intend that the next release of GNU Classpath will require the VM
- to provide JNI 1.2. Classpath currently uses only JNI 1.1, except for
- one JNI 1.2 function: GetEnv(), in the JNI Invocation API.
- If this poses problems, please raise them on the classpath mailing list.
-* The reference implementation of VMThread.holdsLock(Object) now has
- a default implementation written in java. For efficiency and to
- prevent spurious wakeups a real 'native' runtime version can be supplied.
-* There is a new java.security.VMAccessController class that runtimes need
- to implement to properly support SecurityManagers. The default
- implementation that comes with GNU Classpath makes sure that ANY attempt
- to access a protected resource is denied when a SecurityManager is
- installed. Which is pretty secure, but also no very useful.
- Please see the documentation in
- vm/reference/java/security/VMAccessController.java,
- and please give feedback on the GNU Classpath mailinglist whether or not
- the current AccessController framework is flexible enough.
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. The following environments
-have been tested to work out of the box with this release:
-
- * JamVM (http://jamvm.sourceforge.net/)
- * Jikes RVM (http://www.ibm.com/developerworks/oss/jikesrvm/)
- * Kissme (http://kissme.sourceforge.net/)
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-2). What platforms are supported?
-
-GNU/Linux is the only platform that has been tested.
-We plan to eventually support many others.
-
-3). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-4). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found http://www.gnu.org/software/classpath/.
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20040913.wml b/libjava/classpath/doc/www.gnu.org/announce/20040913.wml
deleted file mode 100755
index 8d0ad34..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20040913.wml
+++ /dev/null
@@ -1,245 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.11 Announcement (2004-09-13)">
-<pre>
-We are pleased to announce a new developer snapshot release of GNU Classpath.
-
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-GNU Classpath 0.11 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.11.tar.gz
-MD5sum: fa0e0f2532b838e67f9d9f93d45556a2
-
-Some highlights of this release (more extensive list below):
-
-Inclusion of full javax.crypto, javax.security, javax.net and
-subpackages. Complete implementation of java.awt.geom. GTK+ 2.4 AWT
-peer implementation for AWT FileDialog, better java.awt.image
-LookupTable, Kernel and BufferedImage support. AWT 1.0 Event Model
-implemented, and new Swing classes (Spring, SpringLayout, JMenu,
-JPopupMenu, JColorChooser, JComboBox, JTextField, internal JFrame
-support and start of JTable and JTree implementations). The Collection
-classes have seen extensive documentation updates. GNU Classpath
-Examples have been added - a GPL demo framework for AWT and Swing.
-
-Included, but not activated by default in this release is a Graphics2D
-implementation based on the Cairo Graphics framework
-(http://www.cairographics.org). Enabling this makes programs like
-JFreeChart work on GNU Classpath based runtimes.
-
-[It is recommended that people wanting to experiment with the
-Graphics2D implementation follow the instructions for building gcj
-with jhbuild which automatically builds the latest CVS version of GCJ
-and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-GNU Classpath uses the Mauve test suite for Compatibility, Completeness
-and Correctness checking. This release passes 16816 of 17102 mauve tests.
-Free Software programs and libraries tested against this release are
-Ant, Eclipse 2.1, Eclipse 3.0 (starts up, but does not yet completely
-run), JFreeChart (see above), the Nice programming language
-environment (which can now be bootstrapped with any GNU Classpath
-based runtime and which works out of the box with Kaffe and GCJ for
-creating native executables), gcjwebplugin and many other programs,
-libraries and applets.
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. The following runtime
-environments should work out of the box with GNU Classpath
-
- * JamVM (http://jamvm.sourceforge.net/)
- * Jikes RVM (http://www.ibm.com/developerworks/oss/jikesrvm/)
- * Kissme (http://kissme.sourceforge.net/)
-
-Note that these are just byte code execution runtimes. For development
-of programs written in the java programming language you will also
-need compilers and other tools for creating libraries and/or
-executables (see question 1).
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-2). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. We plan to eventually support many others.
-
-5). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-
-The following presentation given during the Desktop Developers
-Conference shows how to integrate GNU Claspath and GCJ more with the
-Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
-
-6). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, xml, activation, infobus, servlet) check
-out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries might already have been included in the
-various platforms that also integrate GNU Classpath like done by the
-Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.11 (Sep 13, 2004)
-(See the ChangeLog file for a full list of changes.)
-
-* javax.swing.Spring and SpringLayout support.
-* Added pluggable look and feel support for BasicTextFieldUI and
- BasicToolBarSeparatorUI.
-* java.swing.text support for (Default and Layered) Highlighter, FieldView,
- PlainView, TabExpander and TabableView added.
-* Start of JTable and JTree implementation.
-* Internal Swing frames work.
-* JMenu and JPopupMenu work.
-* New gtk+ AWT FileDialog peer now based on gtk+2.4 or higher.
-* java.awt.image LookupTables and kernel support.
-* Improved java.awt.image.BufferedImage support.
-* AWT 1.0 event model support.
-* GNU Classpath now comes with some example programs (see examples/README).
-* New javax.crypto, javax.crypto.interfaces, javax.crypto.spec, javax.net,
- javax.net.ssl, javax.security.auth, javax.security.auth.callback,
- javax.security.auth.login, javax.security.auth.x500, javax.security.sasl
- and org.ietf.jgss packages are now officially part of GNU Classpath.
- Extra crypto algorithms can be obtained from the GNU Crypto project,
- a full TLS implementation is provided by the Jessie project.
- http://www.gnu.org/software/gnu-crypto/
- http://www.nongnu.org/jessie/
-* Frame.setIconImage() support.
-* AWT GDKGraphics scaling.
-* New configure flag --enable-gtk-cairo to build Graphics2D implementation
- build on cairo and pangoft2. Enabled at runtime by defining the system
- property gnu.java.awt.peer.gtk.Graphics=Graphics2D.
-* javax.swing.JSpinner implemented.
-* Extensive documentation update for java.util collection classes.
-* java.awt.geom completed. Area, Arc2D, Ellipse2D and Line2D implemented.
-* GNU JAXP is no longer included with GNU Classpath. Runtime, compiler and
- tool integrators are encouraged to directly integrate GNU JAXP.
- This release has been tested against GNU JAXP 1.1.
- http://www.gnu.org/software/classpathx/jaxp/jaxp.html
-* JColorChooser, JComboBox and JTextField implemented, including example
- uses in GNU Classpath Examples swing Demo.
-
-Runtime interface Changes:
-
-* java.lang.Compiler now uses the new java.lang.VMCompiler; there is
- a reference implementation that most VMs can use.
-* java.lang.VMSystem has a new getenv(String) method and a reference C/JNI
- implementation that should work on most Posix like systems.
-* java.util.TimeZone has been split into a platform independent class and
- a platform dependent class VMTimeZone. GNU Classpath comes with a generic
- way to get at the default time zone for Posix/GNU-like platforms.
-* [VM]AccessController improvements. In particular it handles
- `doPrivileged' calls better, and allows for recursive `doPrivileged'
- calls in the same Thread. (see vm/reference/java/security/)
-
-The following people helped with this release:
-
-Andreas Tobler (libgcj merging), Andrew Haley (object streams), Andrew
-John Hughes (documentation, swing and acessibility), Archie Cobbs
-(freebsd testing and bugfixing), Bryce McKinlay (libgcj merging, image
-producers, access controller actions), Casey Marshall (crypto,
-security and access controller implementation), Craig Black (image
-scaling, round rect support, awt tear-off menus), Dalibor Topic (kaffe
-merging), David Gilbert (documentation updates, mauve tests, awt and
-geom bug fixes), David Jee (awt gtk+ image and choice fixes, frame
-icon support, focus manger), Florian Weimer (bug reporting), Graydon
-Hoare (lots of Swing and Graphics2D implementation and fixes), Guilhem
-Lavaux (java.text bug fixing), Jerry Quinn (java.awt.image lookup
-table and kernel implemented), Jeroen Frijters (Runtime loadlibrary,
-encoding manager, file and classloader fixes), Ka-Hing Cheung
-(jspinner implementation), Kim Ho (jcolorchooser, jtooltip, internal
-jfram implementations, event and repaint manager fixes), Mark Wielaard
-(packaging and coordination), Michael Koch (javax.swing.text
-implementation, build environment, embedded window support, libgcj
-merging, bug fixes), Olga Rodimina (swing combobox, jmenu and popup
-menu support), Patrik Reali (web master, nio vm class restructuring),
-Roman Kennke (boxlayout, spring and springlayout), Sven de Marothy
-(java.awt.geom), Thomas Fitzsimmons (lots of gtk+ peers work, awt 1.0
-event model), Tom Tromey (bug fixing, libgcj merging, vmcompiler).
-
-
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20041115.wml b/libjava/classpath/doc/www.gnu.org/announce/20041115.wml
deleted file mode 100644
index c877a9b..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20041115.wml
+++ /dev/null
@@ -1,237 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.12 Announcement (2004-11-15)">
-<pre>
-
-We are pleased to announce a new developer snapshot release of GNU
-Classpath.
-
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-GNU Classpath 0.12 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.12.tar.gz
-MD5sum: ce1f7fbe6f2e3b738bae3b46f01a9670
-
-Some highlights of this release (more extensive list below):
-
-X.509 certificate path checking, signed JAR file support, full
-java.awt.color implementation, java.beans 1.4 updates, improved
-build process, better AWT focus management, much faster and better
-fonts support, AWT Choice fixes, HTTP POST fixes, better collection
-documentation, Calendar bug fixes, lookahead support for regular
-expressions, jtree starts working and improved Eclipse 3 support.
-
-Included, but not activated by default in this release is a Graphics2D
-implementation based on the Cairo Graphics framework
-(http://www.cairographics.org). Enabling this makes programs like
-JFreeChart work on GNU Classpath based runtimes. Note that this release
-needs a cairo CVS build.
-
-[It is recommended that people wanting to experiment with the
-Graphics2D implementation follow the instructions for building gcj
-with jhbuild which automatically builds the latest CVS version of GCJ
-and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-GNU Classpath uses the Mauve test suite for Compatibility, Completeness
-and Correctness checking. This release passes 21245 of 21593 mauve
-tests.
-Free Software programs and libraries tested against this release are
-Eclipse 3.0, JFreeChart (see above), gcjwebplugin and many other
-programs,
-libraries and applets.
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. The following runtime
-environments should work out of the box with GNU Classpath
-
- * JamVM (http://jamvm.sourceforge.net/)
- * Jikes RVM (http://www.ibm.com/developerworks/oss/jikesrvm/)
- * Kissme (http://kissme.sourceforge.net/)
-
-Note that these are just byte code execution runtimes. For development
-of programs written in the java programming language you will also
-need compilers and other tools for creating libraries and/or
-executables (see question 1).
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-2). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. Since 0.12 there is also support for cygwin.
-We plan to eventually support many others.
-
-5). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-
-The following presentation given during the Desktop Developers
-Conference shows how to integrate GNU Claspath and GCJ more with the
-Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
-
-6). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, xml, activation, infobus, servlet) check
-out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries might already have been included in the
-various platforms that also integrate GNU Classpath like done by the
-Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.12 (Nov 14, 2004)
-(See the ChangeLog file for a full list of changes.)
-
-* GNU Classpath's JAR implementation now has preliminary support for
- signed entries, for so called "signed JAR" file support. Signed JAR
- files are one of the key security features of managed runtimes, and
- allows code to run privileged given unforgeable proofs of identity.
-* A much improved version of X.509 certificates has been added,
- including a robust certificate path checking algorithm. Also
- included is an implementation of the RSA signature scheme.
-* Full java.awt.color implementation, with all standard ICC profiles,
- except for PhotoYCC color space.
-* java.beans 1.4 updates and bug fixes.
-* java.awt.image support updated to 1.4.
-* Improved build process. Uses less memory with gcj and C code is
- buildable with -Werror on most platform. Please configure with
- --enable-Werror and report any remaining issues.
-* Big-endian (PowerPC) fixes for native awt GTK+ peers.
-* Checkstyle support, see scripts/checkstyle-config.xml.
-* Better AWT focus management fro GTK+ peers.
-* Much faster and better fonts support
- (for both gdk Graphics and cairo Graphics2D)
-* AWT Choice fixes for hidden components.
-* HTTP Connection Handler fixes for POST support.
-* Much fuller collection documentation.
-* Lots of Calendar bug fixes.
-* More javax.imageio support.
-* Better AWT Help MenuBar support.
-* Lookahead support for regular expressions.
-* Serialization object stream fixes for multiple ClassLoader scenarios.
-* Swing TabbedPane, ColorChooser and ComboBox improvements.
-* Start of JTree functionality.
-* Improved Eclipse 3 support for GNU Classpath based runtimes.
-
-Runtime interface Changes:
-
-* New --enable-java-lang-system-explicit-initialization configuration
- option. (Warning, will be replaced in next release, please consult
- the mailinglist.)
-* The reference implementation of VMClassLoader has default
- implementations for getResource(s) and provides support for a new
- default getSystemClassLoader implementation.
-
-The following people helped with this release:
-
-Andreas Tobler (gtk/c compilation and PPC fixes), Andrew Haley
-(Object stream serialization fixes), Andrew John Hughes (java.util
-documentation updates), Bryce McKinlay (Calendar bugfixes), Casey
-Marshall (X.509 certificate path checking and signed jar file
-support), Dalibor Topic (AWT Component postevent fix), David Daney
-(URL bug fixes), David Gilbert (geom documentation updates and mauve
-checking), David Jee (AWT HelpMenuBar fixes), Graydon Hoare
-(Graphics2D and Swing work), Ilya Perminov (RMI fixes), Jeroen
-Frijters (Application Classloader updates and IKVM integration), Jerry
-Quinn (AWT image work), Kim Ho (Swing TabbedPane and ColorChooser
-fixes), Mark Wielaard (libgcj merging and packaging), Mattias Rehnberg
-(Inet6Address and serialization fixes), Michael Koch (Build
-system/compiler updates, libgcj merging, code cleanups, swing, net,
-imageio and other fixes and improvements), Noa Resare (Calendar, net,
-AWT choice and GeneralPath fixes, kaffe integration), Olga Rodimina
-(Swing ComboBox fixes), Patrik Reali (Website), Paul Jenner (AWT Image
-raster and Swing JTree fixes), Per Bothner (Collections efficiency),
-Robert Schuster (java.beans 1.4 updates and bug fixes), Shashank Bapat
-(Regex lookahead support), Steven Augart (JikesRVM integration), Sven
-de Marothy (AWT color package implementation, Polygon, GeneralPath,
-Double parsing and nio fixes), Thomas Fitzsimmons (AWT gtk+ peer
-work), Tom Tromey (Code cleanups all over), Torsten Rupp (Native
-java.net cleanups and fixes)
-
-</pre>
-
-<footer>
-
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050107.wml b/libjava/classpath/doc/www.gnu.org/announce/20050107.wml
deleted file mode 100644
index ed603e2..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050107.wml
+++ /dev/null
@@ -1,256 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.13 Announcement (2005-01-07)">
-<pre>
-We are pleased to announce a new developer snapshot release of GNU Classpath.
-
-GNU Classpath, essential libraries for the java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-GNU Classpath 0.13 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.13.tar.gz
-MD5sum: 9920904c15f2cdb15e38c4a44968c4f9
-SHA1sum: f431a24d7f25259123ae8a897b4d71be76ac76ea
-
-Some highlights of this release (more extensive list below):
-
-Includes HTTP/1.1 and FTP URL handlers. Added java.beans XMLEncoder and
-XMLDecoder classes. More than 250 locales are supported now. SAX, DOM,
-XSL and XPath implementations for javax.xml (JAXP 1.3) have been added.
-Better AWT on gtk+ and Swing support. An AWT Robot implementation based
-on the XServer XTest Extension for the gtk+ peers has been added.
-
-GNU Classpath uses the Mauve test suite for Compatibility, Completeness
-and Correctness checking. This release passes 23131 of 23729 mauve tests.
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-22 people are listed in the ChangeLog file (full list below)
-and there were 245 commits to CVS since the last release.
-
-Included, but not activated by default in this release is a Graphics2D
-implementation based on the Cairo Graphics framework
-(http://www.cairographics.org/). Enabling this makes programs like
-JFreeChart work on GNU Classpath based runtimes. Note that this release
-needs a cairo CVS build.
-
-[It is recommended that people wanting to experiment with the
-Graphics2D implementation follow the instructions for building gcj
-with jhbuild which automatically builds the latest CVS version of GCJ
-and Cairo at http://people.redhat.com/fitzsim/gcj-and-jhbuild.html]
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-Both projects have CVS versions which track GNU Classpath closely.
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. The following runtime
-environments (which don't include compilers or other tools, see above)
-work out of the box with GNU Classpath (tested by and recommended for
-GNU Classpath hackers).
-
- * JamVM (1.2.3) (http://jamvm.sourceforge.net/)
- * Kissme (CVS) (http://kissme.sourceforge.net/)
-
-Other runtimes known to work with the latest or a previous release are
-JikesRVM, IKVM.NET, JC, SableVM (-Xgnuclasspath) and CACAO.
-(You might need staging, development or CVS versions for support of the
-latest GNU Classpath release with some of these.)
-
-Note that these are just byte code execution runtimes. For development
-of programs written in the java programming language you will also
-need compilers and other tools for creating libraries and/or
-executables (see question 1).
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-2). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. Since 0.12 there is also support for cygwin.
-We plan to eventually support many others.
-
-5). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-A good overview of the current status can be found on the GNU Classpath
-at FOSDEM'04 page which describes the last GNU Classpath hacker meeting.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/fosdem04.html
-
-The following presentation given during the Desktop Developers
-Conference shows how to integrate GNU Claspath and GCJ more with the
-Free Desktop environments: http://people.redhat.com/fitzsim/ddc2004/
-
-6). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, activation, infobus, servlet, etc.)
-check out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries might already have been included in the
-various platforms that also integrate GNU Classpath like done by the
-Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.13 (Jan 6, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* The http url protocol handler has been replaced with a full HTTP/1.1
- version from GNU inetlib.
-* A new ftp url protocol handler has been added also from GNU inetlib.
-* java.beans has been updated to 1.4 including support for XMLEncoder
- and XMLDecoder.
-* The java.util.Locale support is now based on the Common Locale Data
- Repository (CLDR) Project (see http://www.unicode.org/cldr/).
- GNU Classpath provides support for more than 250 locales now.
- This new support is experimental and the GNU Classpath hackers are
- working together with runtime developers and the unicode consortium
- to improve them in the future.
- If your runtime misdetects your locale or if the default locale gives
- problems please try running with -Duser.language=en and -Duser.region=US
- to fall back on a known good locale.
-* Added implementations of javax.xml (JAXP 1.3), org.xml.sax (SAX2) and
- org.w3c.dom (DOM Level 3) interfaces. It is possible to switch between
- different implementations AElfred2, GNU DOM, GNU XSL, libxmlj SAX,
- libxmlj DOM and libxmlj XSL by setting different system properties.
- Also provided is a preliminary XPath 1.0 implementation.
- The libxmlj versions are build around libxml2 and libxslt and have to
- be enabled during build time by the --enable-xmlj configure flag.
- The current support is equal to the last released GNU JAXP 1.3 release.
- These packages will be maintained as part of the GNU Classpath core classes
- in the future. For more information, conformance results and documentation
- on selecting different implementations see doc/README.jaxp.
-* More AWT accessible support.
-* AWT gtk+ peers component layout, dialog placement, keyboard focus
- handling and text positioning have been improved.
-* ImageIO interfaces are more complete.
-* JList, JTable and JTree have been hugely improved.
-* java.awt.Robot support with GdkRobot in the gtk+ awt peers.
- Needs XTest Extension (libXtst) XServer support.
-* New --disable-examples configure argument.
-
-Runtime interface changes:
-
-* Added a new method (VMRuntime.enableShutdownHooks) that enables the VM
- to lazily register an exit handler.
-* The java.lang.Class constructor now automatically sets the protection
- domain for array classes, based on the protection domain of the component
- type class.
-* New gnu.classpath.VMSystemProperties class. This replaces the
- system properties initialization in VMRuntime. Note that it is
- now the VMs responsibility to set one additional property:
- gnu.cpu.endian should be set to "big" or "little".
-* VMRuntime.nativeGetLibname() has been renamed to VMRuntime.mapLibraryName()
- and has only one argument, the name of the library.
-* String and StringBuffer now call VMSystem.arraycopy() directly and don't
- go through java.lang.System. Be careful to not initialize java.lang.System
- early in the bootstrap sequence in your VM runtime interface classes.
-* Some (wrong) documentation about the behavior of VMThread.sleep(0, 0)
- has been updated. Also, VMThread.sleep() now has a default non-native
- implementation, but it is a generic implementation that ignores the
- nano-seconds argument. Runtime hackers are encouraged to provide a more
- efficient version.
-* There is prelimenary support for nio direct byte buffers.
- See VMDirectByteBuffer. Please contact the GNU Classpath mailinglist when
- you add support for this to your runtime.
-
-The following people helped with this release:
-
-Andrew John Hughes (Locale, Currency and java.text updates), Archie Cobbs
-(Thread improvements), Bryce McKinlay (ResourceBundle speedups), Casey
-Marshall (FileLock fixes), Chris Burdess (locale generator, xml integration,
-http and ftp handlers), Craig Black (BeanInfoEmbryo improvements), David
-Gilbert (AWT and geom documentation), Graydon Hoare (Graphics2D and
-BufferedImage improvements), Guilhem Lavaux (CLDR parser and Object stream
-serialization improvements), Ito Kazumitsu (nio ByteBuffer fixes), Jeroen
-Frijters (Runtime interfaces improvements, including shutdown hooks and
-system properties, nio and zip fixes), Jerry Quinn (AWT accessibility
-support), Mark Wielaard (packaging and integration), Michael Koch (Locale,
-Swing, InetAddress, ImageIO, nio improvements and libgcj integration),
-Olga Rodimina (JTable improvements), Patrik Reali (website maintenance),
-Paul Jenner (ImageIcon additions), Ranjit Mathew (IdentityHashMap fix),
-Robert Schuster (java.beans updates, XMLEncode and XMLDecoder
-implementations and JComboBox improvements), Sven de Marothy (Graphics2D,
-java.awt.image and java.awt.geom fixes), Thomas Fitzsimmons (GdkRobot,
-gtk+ peers component layout, dialog placement, keyboard focus handling and
-text positioning), Tom Tromey (gcjx support, zip and ResourceBundle fixes)
-</pre>
-
-<footer>
-
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050226.wml b/libjava/classpath/doc/www.gnu.org/announce/20050226.wml
deleted file mode 100644
index 2cea8b8..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050226.wml
+++ /dev/null
@@ -1,240 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.14 Announcement (2005-02-26)">
-<pre>
-"GNU Classpath delivers core libraries for upcoming GCC and Kaffe releases"
-
-We are pleased to announce a new developer snapshot release of GNU Classpath.
-
-GNU Classpath, essential libraries for java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed at
-the end user but are meant to be integrated into larger development
-platforms. This 0.14 release snapshot can be seen as the feature complete
-base library that will be used in the upcoming GCC 4.0 (gcj) and Kaffe
-1.1.5 runtimes, compilers and tools collections.
-
-Developers wanting to have a look at the core library classes provided by
-these upcoming releases can take a look at the new GNU Classpath developers
-site. http://developer.classpath.org/ provides detailed information
-on how to start with helping the GNU Classpath project and gives an
-overview of the core class library packages currently provided.
-With this release generated documentation is provided through the new
-GNU Classpath Tools gjdoc 0.7.x series. A large update of the documentation
-generation framework for java source files used by the GNU project.
-See http://developer.classpath.org/doc/.
-
-One of the major focusses of the GNU Classpath project is expanding and
-using the Mauve test suite for Compatibility, Completeness and Correctness
-checking. Various groups around GNU Classpath collaborate on the free
-software Mauve test suite which contains more then 25.000 library tests.
-Mauve has various modules for testing core class library implementations,
-byte code verifiers, source to byte code and native code compiler tests.
-Mauve also contains the Wonka visual test suite and the Jacks Compiler
-Killer Suite. This release passes 25442 of the mauve core library tests.
-
-The GNU Classpath developer recently held a conference during Fosdem.
-This was a standing room event and provided lot of communication between
-the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
-and users. The presentations of this event have been publised and should
-give a good overview of the current status and future plans of the project:
-http://www.gnu.org/software/classpath/events/escape_fosdem05.html
-
-Some highlights of changes in this release (more extensive list below):
-
-ImageIO support through gdkpixbuf, lots of new nio character encoders
-and decoders, fully automated class documentation generation, generic
-VMStackWalker support for runtimes, lots of bug fixes, optimizations and
-new swing support.
-
-Included, but not activated by default in this release is a Graphics2D
-implementation based on the Cairo Graphics framework
-(http://www.cairographics.org). Enabling this makes programs like
-JFreeChart work and JEdit start up on GNU Classpath based runtimes.
-To enable this support install the cairo 0.3.0 snapshot, configure
-GNU Classpath with --enable-gtk-cairo and make sure the system
-property gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-29 people actively contributed code to this release and made 232 CVS
-commits during the last two months of development. diffstat since 0.13:
-1189 files changed, 31388 insertions(+), 13744 deletions(-)
-More details below.
-
-GNU Classpath 0.14 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.14.tar.gz
-MD5sum: 227beb20b927c042628539601c867614
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. The following runtime
-environments should work out of the box with GNU Classpath
-
- * JamVM (http://jamvm.sourceforge.net/)
- * Jikes RVM (http://www.ibm.com/developerworks/oss/jikesrvm/)
- * Kissme (http://kissme.sourceforge.net/)
-
-Note that these are just byte code execution runtimes. For development
-of programs written in the java programming language you will also
-need compilers and other tools for creating libraries and/or
-executables (see question 1).
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-2). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. Many more architectures and platforms are supported.
-Check the actual runtime you use together with GNU Classpath for
-detailed information on the supported platforms.
-
-5). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-A good overview of the current status can be found on the GNU Classpath
-Escape The Java Trap event held at FOSDEM this year.
-It includes reports and presentations on the current status and future
-plans: http://www.gnu.org/software/classpath/events/escape-fosdem05.html
-
-6). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, xml, activation, infobus, servlet) check
-out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries may already be available in some platforms
-that integrate GNU Classpath, such as in the Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.14 (Feb 25, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* Character encoders and decoders have been added for:
- iso-8859-6 (arabic), iso-8859-7 (greek), iso-8859-8 (hebrew),
- iso-8859-9 (latin-5), iso-8859-13, iso-8859-15 (latin-9), cp1047 (ebcdic),
- ebcdic-xml-us,ascii, windows-1250, windows-1252, UTF-16BE (Big Endian),
- UTF-16LE (Little Endian), UTF-32BE (Big Endian), UTF-32LE (Little Endian).
-* Full documentation for all classes can be generated (again) by using
- the --with-gjdoc configure option.
-* javax.awt.imageio support through gdkpixbuf.
-
-Runtime interface changes:
-
-* VMSecurityManager has been replaced by gnu.classpath.VMStackWalker.
- currentClassLoader() is no longer needed, and there are also two new
- methods with non-native implementations. VM implementors are encouraged
- to provide more efficient versions.
-* VMRuntime.nativeLoad() now takes an additional ClassLoader parameter.
-
-The following people helped with this release:
-
-Andrew Haley (nio optimizations)
-Andrew John Hughes (Locale, java.text fixes and generics work)
-Anthony Green (rmi cleanup)
-Archie Cobbs (Throwable simplification)
-Audrius Meskauskas (Swing JComboBox, JTextArea, and Timer fixes)
-Bryce McKinlay (serialization fixes)
-C. Brian Jones (rmi cleanups)
-Chris Burdess (Base64 fix, gnu.xml cleanups, http connection fixes)
-Craig Black (native state library, and gtk+ awt peer fixes)
-Dalibor Topic (PropertyAction cleanups, inner class and dead code cleanups)
-David Gilbert (DefaultListModel, Font text transform fixes and documentation)
-Graydon Hoare (Lots of GdkGraphics updates)
-Ito Kazumitsu (nio charset provider, FileChannel and SimpleDateFormat fixes)
-Jeroen Frijters (Serialization and Collator fixes)
-Julian Scheid (UTF8 fix and lots of gjdoc work)
-Mark Wielaard (JarFile, TimeZone, URLClassLoader, serialization and packaging)
-Michael Koch (AWT Window and Checkbox fixes, code cleanup, LocalInformation
-maintenance, checkstyle cleanups, swing and nio updates)
-Olga Rodimina (Jtable updates)
-Patrik Reali (Website maintenance)
-Quentin Anciaux (Lots of new character encoders and decoders)
-Ranjit Mathew (IdentityHashMap bug fix)
-Robert Schuster (nio charset and ChannelReader implementations)
-Roman Kennke (Better swing BasicLookAndFeel)
-Rutger Ovidius (GNU security provider update)
-Steven Augart (OpenBSD script fixes and stack walker documentation)
-Sven de Marothy (Lots of Calendar and TimeZone fixes and SpinnerDateModel)
-Thomas Fitzsimmons (Much awt gtk+ peer and Robot work)
-Timo Lindfors (regex fixes)
-Tom Tromey (generics work, classloader and xml fixes)
-</pre>
-
-<footer>
-
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050429.wml b/libjava/classpath/doc/www.gnu.org/announce/20050429.wml
deleted file mode 100644
index 16f0dd7..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050429.wml
+++ /dev/null
@@ -1,309 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.15 Announcement (2005-04-29)">
-<pre>
-We are pleased to announce a new developer snapshot release of GNU Classpath.
-
-GNU Classpath, essential libraries for java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions.
-
-Some highlights of changes in this release (more extensive list below):
-
-Optimized nio and nio.charset plus io streams integration leading to
-large speedups in character stream performance. To compliment this
-new framework a native iconv based charset provider was added. Better
-support for free swing metal and pluggable lafs. Some org.omg.CORBA
-support added. Better java.beans support for the Eclipse Visual Editor
-Project. Completely lock free ThreadLocal implementation added. More
-javax.swing.text support for RTF and HTML. More flexible runtime
-interfaces and build configuration options.
-
-26 people actively contributed code to this release and made 299 CVS
-commits during the last two months of development. diffstat since 0.14:
-993 files changed, 74259 insertions(+), 15666 deletions(-)
-More details about the various changes and contributions below.
-
-GNU Classpath 0.15 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.15.tar.gz
-MD5sum: 036c23aec7cb53a43b7b9dc63a92fbbe
-SHA1sum: 971bdd436b8010ab30096869f689a44d41e5a01c
-
-Included, but not activated by default in this release is a Graphics2D
-implementation based on the Cairo Graphics framework
-(http://www.cairographics.org). Enabling this makes programs like
-JFreeChart work and JEdit start up on GNU Classpath based runtimes.
-To enable this support install the cairo 0.3.0 snapshot, configure
-GNU Classpath with --enable-gtk-cairo and make sure the system
-property gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-One of the major focusses of the GNU Classpath project is expanding
-and using the Mauve test suite for Compatibility, Completeness and
-Correctness checking. Various groups around GNU Classpath collaborate
-on the free software Mauve test suite which contains more then 27.500
-library tests. Mauve has various modules for testing core class
-library implementations, byte code verifiers, source to byte code and
-native code compiler tests. Mauve also contains the Wonka visual test
-suite and the Jacks Compiler Killer Suite. This release passes 27.325
-of the mauve core library tests.
-See for more information: http://sources.redhat.com/mauve/
-
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source files
-used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-Both projects have CVS versions which track GNU Classpath closely.
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. Most active GNU Classpath
-hackers use JamVM (http://jamvm.sourceforge.net/) and the gcj or Jikes
-bytecode compiler (http://www.jikes.org) for quick development. But
-other environments can certainly be used to hack on the GNU Classpath
-core libraries.
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-Note that these are just byte code execution compilers and/or
-runtimes. For development of programs written in the java programming
-language you will also need compilers and other tools for creating
-libraries and/or executables (see question 1).
-
-2). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. Since 0.12 there is also support for cygwin. We plan to
-eventually support many others. Many more architectures and platforms
-are supported. Check the actual runtime you use together with GNU
-Classpath for detailed information on the supported platforms.
-
-5). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-The GNU Classpath developer recently held a conference during Fosdem.
-This was a standing room event and provided lot of communication between
-the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
-and users. The presentations of this event have been publised and should
-give a good overview of the current status and future plans of the project:
-http://www.gnu.org/software/classpath/events/escape_fosdem05.html
-
-Developers wanting to help out with the project will find more
-information and tools on http://developer.classpath.org/
-
-6). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, activation, infobus, servlet, etc.) check
-out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries might already have been included in the
-various platforms that also integrate GNU Classpath like done by the
-Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.15 (Apr 29, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* The old character encoding framework (gnu.java.io.EncodingManager)
-has been replaced by a system based completely on nio.charset
-providers. Many converters have been added, both the io, lang and nio
-frameworks now use the same set of converters and the whole character
-stream framework (Readers and Writers) have been optimized. For some
-workloads this leads to 2x till 20x speedups.
-
-The default charsets supported are:
-
- Cp424, Cp437, Cp737, Cp775, Cp850, Cp852, Cp855, Cp857, Cp860, Cp861,
- Cp862, Cp863, Cp864, Cp865, Cp866, Cp869, Cp874, ISO_8859_1, ISO_8859_13,
- ISO_8859_15, ISO_8859_2, ISO_8859_3, ISO_8859_4, ISO_8859_5, ISO_8859_6,
- ISO_8859_7, ISO_8859_8, ISO_8859_9, KOI_8, MS874, MacCentralEurope,
- MacCroatian, MacCyrillic, MacDingbat, MacGreek, MacIceland, MacRoman,
- MacRomania, MacSymbol, MacThai, MacTurkish, US_ASCII, UTF_16, UTF_16BE,
- UTF_16Decoder, UTF_16Encoder, UTF_16LE, UTF_8, UnicodeLittle, Windows1250,
- Windows1251, Windows1252, Windows1253, Windows1254, Windows1255,
- Windows1256, Windows1257, Windows1258.
-
-Many more encoding are supported through the new IconvProvider
-depending on the platform iconv support. GNU libiconv is recommended.
-The IconvProvider is currently not enabled by default. To enable it
-define the system property gnu.classpath.nio.charset.provider.iconv=true.
-Some runtimes might choose to enable this by default by setting it
-through VMSystemProperties. We would like to get feedback on whether
-enabling or disabling the IconvProvider by default results in the
-highest speedups.
-
-* Free swing metal and pluggable look and feels have been improved.
-The GNU Classpath free swing example can now be run with different
-"skins" by setting the system property swing.defaultlaf to the GNU,
-Basic or Metal look and feel.
-
-* Some of the org.omg.CORBA classes and packages have now been
-implemented. The Savannah bug tracker contains additional tasks for
-which we are seeking help.
-
-* Fixed compatibility problems in the java.beans which affected
-Eclipse's Visual Editor Project.
-
-* New completely lock free (Inheritable)ThreadLocal implementation.
-
-* javax.swing.text.rtf framework added which can handle simple (plain)
-text tokens.
-
-* Support for parsing html files into Level 2 Document Object Model
-(org.w3c.dom.html2 and javax.swing.text.html.parser). And a start of
-javax.swing.text.html framework added.
-
-Runtime interface changes:
-
-* jni.h changed to better support compiling runtimes implementing jni;
- see VM integration guide for details.
-* New --enable-default-toolkit option to configure can be used to set
- the fully qualified class name of the default AWT toolkit to use.
- If not given, the old default of gnu.java.awt.peerk.gtk.GtkToolkit
- is used.
-* New --disable-core-jni option can be used to disable building the
- "core" JNI libraries. This is primarily useful if your VM can use the
- Gtk peers but not the core JNI libraries.
-* New system property "gnu.classpath.boot.library.path" can be specified
- to define the location of the JNI libraries. It is by all means meant
- ONLY for VM implementors and GNU Classpath hackers. See the hacking
- guide for more information.
-* The helper methods currentLoader() and allocateObject() for
- java.io.ObjectInputStream have been moved to a VMObjectInputStream class.
- Reference implementations are provided.
-* java.net.InetAddress now uses VMInetAddress for runtime/platform
- specific methods getLocalHostname(), getHostByAddr() and
- getHostByName(). java.net.NetworkInterface now uses VMNetworkInterface
- for runtime/platform specific getInterfaces() support. Default
- (Posix/GNU JNI) implementations are provided.
-* VMClass has a new method getModifiers(Class, boolean) which can be
- used to get the real modifiers for an inner class or the ones
- specified by the InnerClasses attribute.
-* All (possible) runtime specific methods of Object and Double are now
- in VMObject and VMDouble. Where possible generic reference
- implementations are provided.
-* The reference implementation of VMClassLoader now handles zip files
- on the boot loader class path in getResources().
-
-The following people helped with this release:
-
-Andreas Tobler (Security warning fixes, fdlibm merging and cleanups)
-Andrew Haley (FileChannel optimizations)
-Andrew John Hughes (URL/URI, rmi.naming, java.text, Currency and generics)
-Archie Cobbs (RPM spec file, VMClassLoader fixes, jni cleanups)
-Audrius Meskauskas (Lots of corba work, javax.swing.text.html and dom parser)
-Casey Marshall (x509 and asn1/der fixes)
-Chris Burdess (writeUTF optimization, html2 dom support and net protocols)
-Dalibor Topic (FileChannel fixes, kaffe porting)
-David Daney (InetAddress fixes)
-David Gilbert (awt documentation, font fixes)
-Guilhem Lavaux (VMSelector and IndexColorModel fixes)
-Ito Kazumitsu (DecimalFormat parse fixes)
-Jeroen Frijters (nio optimizations, VMClass fixes, ThreadLocal rewrite)
-Luca Barbieri (FileChannel.tryLock fixes)
-Mark Wielaard (cleanups and packaging)
-Michael Franz (OSX testing)
-Michael Koch (VM interface restructuring, libgcj merging, lots of bug fixing)
-Mike Stump (fdlibm ppc64 fixes)
-Olafur Bragason (PipedInputStream bug reporting)
-Patrik Reali (Website maintenance)
-Rei Odaira (VMSelector bug reporting)
-Riccardo Mottola (Darwin6 testing)
-Robert Schuster (java.beans, boot.library.path, jni fixes, mediation work)
-Roman Kennke (Lots of free swing work, MediaTracker and RTF work)
-Sven de Marothy (io, nio and charset optimizations and rewrites)
-Thomas Fitzsimmons (URL, gtk-peers and free swing work)
-Tom Tromey (build and code cleanups, jni merging with libgcj and generics)
-
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050630.wml b/libjava/classpath/doc/www.gnu.org/announce/20050630.wml
deleted file mode 100644
index 1784e2f..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050630.wml
+++ /dev/null
@@ -1,329 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.16 Announcement (2005-04-29)">
-<pre>
-GNU Classpath 0.16 "Harmony!" released.
-
-We are pleased to announce a new developer snapshot of GNU Classpath.
-
-GNU Classpath, essential libraries for java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions.
-
-This is the first release of GNU Classpath since our Harmony
-collaboration with the Apache group. Instructions for developers
-wanting to try out and help with the core library implementation can
-be found at: http://developer.classpath.org/
-
-New is our wiki with simple steps to setup a quick development
-environment. For example developers using cygwin can find examples
-here: http://developer.classpath.org/mediation/ClasspathOnCygwin
-
-Some highlights of changes in this release (more extensive list below):
-
-AWT GtkScrollBar and GtkImage improvements. All image operations are
-now working correctly. Graphics2D has been upgraded to use Cairo
-0.5.x. Free Swing updates for 1.5 top-level compatibility. JTree
-interface completed. JFileChooser has been implemented. Completed
-implementations of BoxLayout, GrayFilter and SplitPane. Upgraded the
-Corba features to 1.3 and included new CORBA 2.3 features. Start of
-generic JDWP framework. And lots of bug fixes based on real world
-application usage.
-
-31 people actively contributed code to this release and made 389 CVS
-commits during the last two months of development. diffstat since 0.15:
-1248 files changed, 133649 insertions(+), 41802 deletions(-)
-
-More details about the various changes and contributions below.
-
-GNU Classpath 0.16 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.16.tar.gz
-MD5sum: 220a9c86719a2c6bd7ba9b9877495113
-SHA1sum: be6d30fbfe4d71015a455a367411a6d55df3484e
-
-This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
-higher is recommended. Included, but not activated by default in this
-release is a Graphics2D implementation based on the Cairo Graphics
-framework (http://www.cairographics.org). Enabling this makes programs
-like JEdit start up on GNU Classpath based runtimes. To enable this
-support install the cairo 0.5.x snapshot, configure GNU Classpath with
---enable-gtk-cairo and make sure the system property
-gnu.java.awt.peer.gtk.Graphics=Graphics2D is set.
-
-This release was explicitly tested against the last Eclipse 3.1
-release (thanks to various eclipse hackers for the support). For end
-user we do however recommend to use the GCJ4 packaged version of
-Eclipse 3.1 that have been prepared for the various distributions:
-
-Fedora Core
- http://overholt.ca/wp/?p=27
-Debian GNU/Linux
- http://gnu.wildebeest.org/diary-man-di/index.php?p=19
-Ubuntu
- http://www.larvalstage.net/index.php?/archives/2-Introducing-Eclipse-3.1.html
-
-Not yet included is an implementation of Generic collection classes
-and classes for other 1.5 language extensions. Work on this is being
-done on a special development branch that will be included in a future
-GNU Classpath release when free runtimes, compilers and tools have all
-been upgraded to support these new language features.
-
-One of the major focuses of the GNU Classpath project is expanding
-and using the Mauve test suite for Compatibility, Completeness and
-Correctness checking. Various groups around GNU Classpath collaborate
-on the free software Mauve test suite which contains ~30.000 core
-library tests. Mauve has various modules for testing core class
-library implementations, byte code verifiers, source to byte code and
-native code compiler tests. Mauve also contains the Wonka visual test
-suite and the Jacks Compiler Killer Suite. This release passes 28801
-of the mauve core library tests. See for more information:
-http://www.sourceware.org/mauve/
-
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source files
-used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-Here are answers to some questions you might have about this project and
-this release.
-
-1). Who should use this software?
-
-Although GNU Classpath is already capable of supporting many
-applications written in the java programming language, this is a
-development release. As such, there are still some unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in GNU Classpath development or reporting bugs.
-We appreciate both.
-
-For end users we recommend to use one of the development environments
-based on GNU Classpath which combine the core libraries with compilers
-and other tools needed for creating applications and libraries.
-
- * GCC with GCJ (http://gcc.gnu.org/java/)
- * Kaffe (http://www.kaffe.org/)
-
-Both projects have CVS versions which track GNU Classpath closely.
-
-2). What is required to build/install/run?
-
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development
-libraries (gtk+, libart and gdk-pixbuf). More information on the
-precise version numbers for the tools and libraries can be found in
-the INSTALL file.
-
-You will also need a runtime environment. Most active GNU Classpath
-hackers use JamVM (http://jamvm.sourceforge.net/) and the gcj or Jikes
-bytecode compiler (http://www.jikes.org) for quick development. But
-other environments can certainly be used to hack on the GNU Classpath
-core libraries.
-
-For other environments that might need modified version of the current
-release see the README file. A complete list of virtual machines and
-compilers known to be based on GNU Classpath can be found at our
-website: http://www.gnu.org/software/classpath/stories.html
-
-Note that these are just byte code execution compilers and/or
-runtimes. For development of programs written in the java programming
-language you will also need compilers and other tools for creating
-libraries and/or executables (see question 1).
-
-3). What platforms are supported?
-
-GNU/Linux and FreeBSD on x86 and powerpc are regularly tested by the
-developers. Since 0.12 there is also support for cygwin. We plan to
-eventually support many others. Many more architectures and platforms
-are supported. Check the actual runtime you use together with GNU
-Classpath for detailed information on the supported platforms.
-
-4). Where do I go for more information?
-
-The project home page with information on our mailing list can be
-found at http://www.gnu.org/software/classpath/
-
-The GNU Classpath developer recently held a conference during Fosdem.
-This was a standing room event and provided lot of communication between
-the GNU Classpath, Kaffe, GCJ, IKVM, Apache, java-gnome and Cacao hackers
-and users. The presentations of this event have been publised and should
-give a good overview of the current status and future plans of the project:
-http://www.gnu.org/software/classpath/events/escape_fosdem05.html
-
-Developers wanting to help out with the project will find more
-information and tools on http://developer.classpath.org/
-
-5). How do I extend the functionality of the core classes?
-
-Besides combining GNU Classpath with the runtimes and compilers above
-you might want to add support for additional encryption libraries and
-algorithms as provided by GNU Crypto
-(http://www.gnu.org/software/gnu-crypto/). And for additional
-extension libraries (mail, activation, infobus, servlet, etc.) check
-out GNU ClasspathX (http://www.gnu.org/software/classpathx).
-
-Additional network protocol support is provided by a sub-project
-called GNU Classpath Inetlib, an extension library to provide extra
-network protocol support (ftp, finger, gopher) for GNU Classpath, but
-it can also standalone to ease adding http, imap, pop3 and smtp client
-support to applictions. Also distributed from
-<ftp://ftp.gnu.org/gnu/classpath/>
-
-The following projects extend the functionality of GNU Classpath
-with additional algorithms, new core packages and tools.
-All are released under GPL compatible licenses:
-
-* Jessie: A free implementation of the JSSE. Secure Sockets Extension.
- http://www.nongnu.org/jessie/
-* Tritonus: A implementation of the javax.sound API.
- http://www.tritonus.org/
-* gcjwebplugin: A plugin for the execution of applets in web browsers.
- http://www.nongnu.org/gcjwebplugin/
-
-Note that the above libraries might already have been included in the
-various platforms that also integrate GNU Classpath like done by the
-Kaffe project.
-
-6). What is new in this release?
-
-New in release 0.16 (Jun 30, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* Better GTK scrollbar peer implementation when using GTK >= 2.6.
-* GdkGraphics2D has been updated to use Cairo 0.5.x APIs.
-* BufferedImage and GtkImage rewrites. All image drawing operations
- should now work correctly (flipping requires gtk+ >= 2.6)
-* Future Graphics2D, Image and Text work is documented at:
- http://developer.classpath.org/mediation/ClasspathGraphicsImagesText
-* Free Swing Top-Level Compatibility. JFrame, JDialog, JApplet,
- JInternalFrame, and JWindow are now 1.5 compatible in the sense that you
- can call add() and setLayout() directly on them, which will have the same
- effect as calling getContentPane().add() and getContentPane().setLayout().
-* The JTree interface has been completed. JTrees now recognizes mouse clicks
- and selections work, but the visual implementation is not yet complete.
- Work on expansion and collapsing of the tree nodes is being implemented.
-* BoxLayout works properly now.
-* Fixed GrayFilter to actually work.
-* Metal SplitPane implemented.
-* Lots of free swing text and editor stuff work now.
-
-* When gtk+ 2.6 or higher is installed the default log handler will produce
- stack traces whenever a WARNING, CRITICAL or ERROR message is produced.
-
-* The CORBA implementation is now a working prototype that should support
- features up till 1.3 inclusive.
- We would invite groups writing CORBA dependent applications to
- try Classpath implementation, reporting any possible bugs.
-
- The CORBA prototype is interoperable with Sun's implementation v 1.4,
- transferring object references, primitive types, narrow and wide
- strings, arrays, structures, trees, abstract interfaces and
- value types (feature of CORBA 2.3) between these two platforms.
- The remote exceptions are transferred and handled correctly.
- The stringified object references (IORs) from various sources are
- parsed as required.
- The transient (for current session) and permanent (till jre restart)
- redirections work.
- Both Little and Big Endian encoded messages are accepted.
- The implementation is verified using tests from the former cost.omg.org.
- The current release includes working examples (see the examples directory),
- demonstrating the client-server communication, using either CORBA Request
- or IDL-based stub (usually generated by a IDL to java compiler).
- These examples also show how to use the Classpath CORBA naming service.
- The IDL to java compiler is not yet written, but as our library must be
- compatible, it naturally accepts the output of other idlj implementations.
-
-* New --with-vm-classes configure option, and new 'build' setting
- for --with-glibj. (Only for integrators.)
-
-Runtime interface changes:
-
-* Start of a generic JDWP framework in gnu/classpath/jdwp.
- This is unfinished, but feedback (at classpath@gnu.org) from runtime
- hackers is greatly appreciated. Although most of the work is currently
- being done around gcj/gij we want this framework to be as VM neutral as
- possible. Early design is described in:
- http://gcc.gnu.org/ml/java/2005-05/msg00260.html
-* Native method VMClass.getModifiers() now takes an additional
- boolean parameter.
-* Deprecated native method VMClassLoader.defineClass(ClassLoader,
- String, byte[], int, int) has been replaced by
- VMClassLoader.defineClass(ClassLoader, String, byte[], int, int,
- ProtectionDomain)
-* VMClassLoader.loadClass(String name, boolean resolve) is now native,
- replacing the former version which just returned null.
-* Deprecated native method VMClassLoader.getPrimitiveClass(String) has
- been replaced by new native method VMClassLoader.getPrimitiveClass(char).
-* Previously empty implementations of methods VMThread.countStackFrames(),
- VMThrowable.fillInStackTrace(), and VMThrowable.getStackTrace() have
- been removed; these methods are now native methods.
-* Fields "exceptionTypes" and "parameterTypes" have been removed from
- Contructor.java and getExceptionTypes() and getParameterTypes() are
- now native methods.
-
-The following people helped with this release:
-
-Andreas Jaeger (mprec updates)
-Andreas Tobler (Darwin support)
-Andrew John Hughes (Locale and net fixes, URI RFC2986 updates)
-Andrew Overholt (File locking)
-Anthony Balkissoon (JList, Free Swing 1.5 updates and mouse event fixes)
-Archie Cobbs (VM interface updates)
-Audrius Meskauskas (Corba and HTML work)
-Bryce McKinlay (RMI work)
-Chris Burdess (XML work)
-Christian Thalinger (fdlibm updates)
-Dalibor Topic (SHA1PRNG and GdkPixbugDecoder updates)
-David Daney (BitSet bugfixes)
-David Gilbert (Lots and lots of documentation and awt/swing fixes)
-Gary Benson (MessageFormat fixes)
-Goffredo Baroncelli (HTTPURLConnection fixes)
-Jan Roehrich (JTree fixes)
-Jeroen Frijters (ClassLoader and nio cleanups)
-Ka-Hing Cheung (TreePath and TreeSelection fixes)
-Kalle Olavi Niemitalo (Build fixes)
-Keith Seitz (JDWP work)
-Kim Ho (JFileChooser implementation)
-Lillian Angel (JTree implementation and lots of bug fixes)
-Mark Wielaard (build fixes, GdkPixpufDecoder fixes and packaging)
-Michael Koch (Locale updates, bug and build fixes)
-Olga Rodimina (MenuSelectionManager)
-Robert Schuster (charset and awt fixes)
-Roman Kennke (BoxLayout, GrayFilter and SplitPane, plus bugfixes all over)
-Sven de Marothy (GtkImage rewrite, 2D, awt, free swing and date/time fixes)
-Thomas Fitzsimmons (Lot of upgrades to the gtk+ AWT and cairo 2D support)
-Tom Tromey (libgcj merging, build infrastructure and bug fixes)
-Ziga Mahkovec (Graphics2D upgraded to cairo 0.5 and new regex features)
-
-We would also like to thank the numerous bug reporters and testers!
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050715.wml b/libjava/classpath/doc/www.gnu.org/announce/20050715.wml
deleted file mode 100644
index 8f40c58..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050715.wml
+++ /dev/null
@@ -1,132 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="prr">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpatchy 0.17 Announcement (2005-07-15)">
-<pre>
-GNU Classpatchy 0.17 released.
-
-We are pleased to announce a new developer snapshot of GNU Classpath.
-
-GNU Classpath, essential libraries for java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions.
-
-This is mainly a bug fix release for issues found with eclipse 3.1 and
-Free Swing applications just after our 0.16 release. But it also
-includes some exciting new features.
-
-Some highlights of changes in this release (more extensive list below):
-
-XML DOM, XPATH and XSL fixes. Free Swing is much more responsive.
-JInternalFram, JTree, JMenu, JTable, JButton and JFileChooser fixes.
-FileChannel lock and force implementations added. The logging
-FileHandler now rotates files. Clean locking and namespace for gtkpeer
-library. System call interrupts and timeouts are now handled correctly
-for net and nio. Corba bug fixes. Lots of documentation updates. The
-VM Integration Guide now comes with a full section on the VM/Classpath
-hooks. GNU Classpath Examples now includes a Tree World demo.
-
-21 people actively contributed code to this release and made 171 CVS
-commits during the two weeks of development. diffstat since 0.16:
-3638 files changed, 25798 insertions(+), 15596 deletions(-)
-
-More details about the various changes and contributions below.
-
-This release passes 29508 out of 30320 Mauve core library tests.
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-GNU Classpath 0.17 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.17.tar.gz
-MD5sum: eb620987422878e05ea889d5e7496c63
-SHA1sum: 3b47cb37c91803fbc9d0426d97e1faa6a993615a
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source files
-used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-New in release 0.17 (Jul 15, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* gnu.xml fix for nodes created outside a namespace context.
-* Add support for output indenting and cdata-section-elements output
- instruction in xml.transform.
-* xml.xpath corrections for cases where elements/attributes might have
- been created in non-namespace-aware mode. Corrections to handling of
- XSL variables and minor conformance updates.
-* DefaultMutableTreeNode preorder, postorder, depthFirst and breadthFirst
- traversal enumerations implemented.
-* JInternalFrame colors and titlebar draw properly.
-* JTree is working up to par (icons, selection and keyboard traversal).
-* JMenus were made more compatible in visual and programmatic behavior.
-* JTable changeSelection and multiple selections implemented.
-* JButton and JToggleButton change states work properly now.
-* JFileChooser fixes.
-* revalidate and repaint fixes which make Free Swing much more responsive.
-* Correctly handle system call interrupts and timeouts in native nio
- and net functions.
-* MetalIconFactory implemented.
-* Handle image loading errors correctly for gdkpixbuf and MediaTracker.
-* Added Tree World to GNU Classpath examples Free Swing demo.
-* FileChannel.lock() and FileChannel.force() implemented.
-* java.util.logging.FileHandler now rotates files.
-* Better handle GDK lock. Properly prefix gtkpeer native functions (cp_gtk).
-* Corba bug fixes and documentation updates.
-* Updated gcj build infrastructure.
-* Documentation fixes all over the place.
- See http://developer.classpath.org/doc/
-* VM Integration Guide updates with a full section on VM/Classpath hooks.
-
-The following people helped with this release:
-
-Aaron Luchko (JDWP updates and documentation fixes)
-Andrew John Hughes (VMIntegration guide update)
-Anthony Balkissoon (Lots of Free Swing updates)
-Archie Cobbs (build and URLClassLoader updates)
-Audrius Meskauskas (Corba and text and html parser fixes)
-Casey Marshall (FileChannel lock, SystemLogger and FileHandler rotate impl.)
-Chris Burdess (Lots of gnu.xml and http protocol fixes)
-Dalibor Topic (Better DEBUG support)
-Daniel Bonniot (Serialization fixes)
-David Gilbert (Lots of documentation and MetalIconFactory implementation)
-Guilhem Lavaux (Logger bug fixes)
-Jeroen Frijters (Serialization fixes)
-Lillian Angel (Lots of Free Swing updates)
-Mark Wielaard (System call interrupts, timeouts and packaging)
-Robert Schuster (TreeNode enumerations and ActionCommand and various fixes)
-Roman Kennke (Lots of Free Swing updates)
-Sven de Marothy (GtkImage fixes)
-Thomas Fitzsimmons (gtk peer updates and restructuring)
-Simon Kitching (String cleanups and optimization suggestions)
-Tom Tromey (gcj build update)
-Ziga Mahkovec (build fixes)
-
-We would also like to thank the numerous bug reporters and testers!
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20050906.wml b/libjava/classpath/doc/www.gnu.org/announce/20050906.wml
deleted file mode 100644
index 2f95d58..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20050906.wml
+++ /dev/null
@@ -1,221 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="mjw">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.18 Announcement (2005-09-06)">
-<pre>
-GNU Classpath 0.18 released.
-
-We are pleased to announce a new developer snapshot of GNU Classpath.
-
-GNU Classpath, essential libraries for java, is a project to create free
-core class libraries for use with runtimes, compilers and tools for the
-java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions.
-
-This is our first release after "The Big Merge" with GCC/GCJ. GNU
-Classpath can now be used as a subdirectory of libgcj inside the GCC
-tree so it will be much easier to keep GCC up-to-date with the latest
-GNU Classpath developer release snapshots.
-
-Some highlights of changes in this release (more extensive list below):
-
- Added GNU JAWT for awt native interface support. Datatransfer
- clipboard updated to 1.5 including support for copy/paste of
- serialized objects, images and files. Completed the org.omg
- PortableInterceptor, DynamicAny and Portable Object Adapter
- packages. Multi plaf support for Free Swing. Editing support for
- JTree and JTable. Lots of icons and look and feel improvements for
- Free Swing basic and metal themes. NIO FileChannel.map implemented
- and DirectByteBuffer put method speedups. Image loading speedups for
- awt. Support for darwin and solaris out of the box.
-
-29 people actively contributed to this release and made 535 CVS
-commits during the two months of development. diffstat since 0.17:
- 994 files changed, 114744 insertions(+), 13663 deletions(-)
-
-More details about the various changes and contributions below.
-
-A full list of bug reports fixed for this release can be found at:
-http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&target_milestone=0.18
-
-This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
-higher is recommended. Included, but not activated by default in this
-release is a Graphics2D implementation based on the Cairo Graphics
-framework (http://www.cairographics.org). Enabling this makes programs
-like JFreeChart and JEdit start up on GNU Classpath based runtimes.
-To enable this support install the cairo 0.5.x snapshot, configure GNU
-Classpath with --enable-gtk-cairo.
-
-One of the major focuses of the GNU Classpath project is expanding
-and using the Mauve test suite for Compatibility, Completeness and
-Correctness checking. Various groups around GNU Classpath collaborate
-on the free software Mauve test suite which contains 32.000+ core
-library tests. Mauve has various modules for testing core class
-library implementations, byte code verifiers, source to byte code and
-native code compiler tests. Mauve also contains the Wonka visual test
-suite and the Jacks Compiler Killer Suite.
-See for more information: http://www.sourceware.org/mauve/
-This release passes 31194 out of 32253 Mauve core library tests.
-
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-GNU Classpath 0.18 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.18.tar.gz
-MD5sum: c0650c257aa93eafb709553f172f0bbb
-SHA1sum: 28061c750244cac4ff0151da6aba183b94b98b25
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source
-files used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-New in release 0.18 (Sep 6, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* GNU JAWT implementation, the AWT Native Interface, which allows
- direct access to native screen resources from within a Canvas's
- paint method. GNU Classpath Examples comes with a Demo, see
- examples/README.
-* awt.datatransfer updated to 1.5 with supports for FlavorEvents.
- The gtk+ awt peers now allow copy/paste of text, images, uris/files
- and serialized objects with other applications and tracking
- clipboard change events with gtk+ 2.6 (for gtk+ 2.4 only text and
- serialized objects are supported). A GNU Classpath Examples
- datatransfer Demo was added to show the new functionality.
-* org.omg.PortableInterceptor and related functionality in other
- packages is now implemented:
- - The sever and client interceptors work as required since 1.4.
- - The IOR interceptor works as needed for 1.5.
-* The org.omg.DynamicAny package is completed and passes the prepared
- tests.
-* The Portable Object Adapter should now support the output of the
- recent IDL to java compilers. These compilers now generate servants and
- not CORBA objects as before, making the output depended on the existing
- POA implementation. Completing POA means that such code can already be
- tried to run on Classpath. Our POA is tested for the following usager
- scenarios:
- - POA converts servant to the CORBA object.
- - Servant provides to the CORBA object.
- - POA activates new CORBA object with the given Object Id
- (byte array) that is later accessible for the servant.
- - During the first call, the ServantActivator provides servant for
- this and all subsequent calls on the current object.
- - During each call, the ServantLocator provides servant for this call
- only.
- - ServantLocator or ServantActivator forwards call to another server.
- - POA has a single servant, responsible for all objects.
- - POA has a default servant, but some objects are explicitly
- connected to they specific servants.
- The POA is verified using tests from the former cost.omg.org.
-* The javax.swing.plaf.multi.* package is now implemented.
-* Editing and several key actions for JTree and JTable were implemented.
-* Lots of icons and look and feel improvements for Free Swing basic
- and metal themes were added. Try running the GNU Classpath Swing
- Demo in examples (gnu.classpath.examples.swing.Demo) with:
- -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFeel
- -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel
-* Start of styled text capabilites for java.swing.text.
-* NIO FileChannel.map implementation, fast bulk put implementation for
- DirectByteBuffer (speeds up this method 10x).
-* Split gtk+ awt peers event handling in two threads and improve gdk
- lock handling (solves several AWT lock ups).
-* Speed up awt Image loading.
-* Updated TimeZone data against Olson tzdata2005l.
-* Make zip and jar UTF-8 "clean".
-* "native" code builds and compiles (warning free) on Darwin and
- Solaris.
-
-Runtime interface changes:
-
-* All native resource "pointers" in the VM interface classes are now
- exposed as gnu.classpath.Pointer objects. This might impact runtimes
- that optimize and support java.nio.DirectByteBuffers. Creating these
- classes and accessing the contents as void * pointers for the native
- reference JNI implementation is done through the
- JCL_NewRawDataObject and JCL_GetRawData functions.
-* Simplified the Class/VMClass interface.
-* Removed loadedClasses map from ClassLoader. It's now the VMs
- responsibility to manage the list of defined and loaded classes for
- each class loader.
-* Moved native methods from java.lang.reflect.Proxy to VMProxy.
-* Added hook to VMClassLoader to allow VM to do class caching.
-
-New Untested/Disabled Features:
-
- The following new features are included, but not ready for
- production yet. They are explicitly disabled and not supported. But
- if you want to help with the development of these new features we
- are interested in feedback. You will have to explicitly enable them
- to try them out (and they will most likely contain bugs). If you are
- interested in any of these then please join the mailing-list and
- follow development in CVS.
-
-* QT4 AWT peers, enable by giving configure --enable-qt-peer.
-* JDWP framework, enable by deleting the jdwp references from
- lib/standard.omit and vm/reference/standard.omit. No default
- implementation is provided. Work is being done on gcj/gij
- integration.
-* StAX java.xml.stream, enable by deleting the gnu.xml.stream and
- java.xml.stream references in lib/standard.omit.
-
-The following people helped with this release:
-
-Aaron Luchko (Lots of JDWP work)
-Andreas Tobler (Darwin and Solaris testing and fixing
-Andrew Haley (gcj build speedups)
-Anthony Balkissoon (Lots of Free Swing work including JTable editing)
-Archie Cobbs (Build fixes)
-Audrius Meskauskas (Lots of omg corba work plus testing and documenting)
-Bastiaan Huisman (TimeZone bug fixing)
-Casey Marshall (NIO FileChannel.map support, security and policy updates)
-Chris Burdess (StAX work and gnu xml fixes)
-Christian Schlichtherle (Zip fixes and cleanups)
-Christian Thalinger (64-bit cleanups)
-Dalibor Topic (Qt4 build infrastructure)
-David Gilbert (Basic and Metal icon and plaf and lots of documenting)
-Guilhem Lavaux (JCL native Pointer updates)
-Ingo Proetel (Image, Logger and URLClassLoader updates)
-Ito Kazumitsu (NetworkInterfaces implementation and updates)
-Jan Roehrich (BasicTreeUI updates)
-Jeroen Frijters (VMProxy and VMClassLoader updates, RMIClassLoader fixes)
-Keith Seitz (Lots of JDWP work)
-Kelley Cook (Build fixes)
-Lillian Angel (Lots of Free Swing work including JTree editing)
-Mark Wielaard (Clipboard implementation, build and release infrastructure)
-Rainer Orth (Build fixes)
-Robert Schuster (Documentation updates and beans fixes)
-Roman Kennke (Lots of Free Swing work including styled text)
-Sven de Marothy (Qt4 peers)
-Thomas Fitzsimmons (Lots of gtk+ awt peer work)
-Tom Tromey (Lots of fixes including coordinating The Big Merge)
-Wolfgang Baer (GapContent bug fixes)
-
-We would also like to thank the numerous bug reporters and testers!
-
-</pre>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20051102.wml b/libjava/classpath/doc/www.gnu.org/announce/20051102.wml
deleted file mode 100644
index e39a4ea..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20051102.wml
+++ /dev/null
@@ -1,247 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="mjw">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.19 Announcement (2005-11-02)">
-<pre>
-GNU Classpath "95% and counting" 0.19 released
-
-GNU Classpath, essential libraries for java, is a project to create
-free core class libraries for use with runtimes, compilers and tools
-for the java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions.
-
-Some highlights of changes in this release (more extensive list below):
-
- Much more efficient painting for large Free Swing GUIs. Improved
- accessibility support. HttpURLConnection rewrite. Official CORBA
- VMCID assigned. Start of RMI over IIOP support. Qt4 support for
- OS-X. Much improved Free Swing Metal theme. Free Swing Demo includes
- theme switcher example (Metal, Ocean, GNU). JBoss now starts up and
- Jonas testsuite passes for 95%. Support for the javax.sound.midi
- framework and experimental DSSI and ALSA service providers. Early
- version of the popular StAX API. Now has 96% coverage of 1.4 API.
-
-This is the first time we also have a pre-release of our 1.5 generics
-work. classpath-0.19-generics contains a version of the core library
-that uses the new 1.5 language features such as generics and
-enumerations. ECJ and JamVM are known to support the generics release
-out of the box. And you should be able to run Eclipse 3.1 with it to
-develop programs that use the new 1.5 language and core library
-additions. classpath-generics is a work in progress and not as
-extensively tested as our regular releases. But please try it out if
-you want to help us test the new 1.5 support of the core libraries.
-
-For this release we setup a Free Swing Test Application page
-http://developer.classpath.org/mediation/FreeSwingTestApps
-Please see that page for showcases of applications that work with this
-release and to help test other applications.
-
-It is also the first release that has GNU Classpath promotion banners.
-http://developer.classpath.org/mediation/ClasspathBanners
-Please feel free to add them to your project pages if your project is
-known to work with GNU Classpath or just to promote the project.
-
-32 people actively contributed to this release and made
-787 CVS commits during the last two months of development
-(excluding the generics branch work). diffstat since 0.18:
- 1158 files changed, 93916 insertions(+), 36407 deletions(-)
-
-More details about the various changes and contributions below.
-
-A full list of bug reports fixed for this release can be found at:
-http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&target_milestone=0.19
-
-This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
-higher is recommended. Included, but not activated by default in this
-release is a Graphics2D implementation based on the Cairo Graphics
-framework (http://www.cairographics.org). Enabling this makes programs
-like JFreeChart and JEdit start up on GNU Classpath based runtimes.
-To enable this support install the cairo 0.5.x snapshot, configure GNU
-Classpath with --enable-gtk-cairo.
-
-One of the major focuses of the GNU Classpath project is expanding and
-using the Mauve test suite for Compatibility, Completeness and
-Correctness checking. Various groups around GNU Classpath collaborate
-on the free software Mauve test suite which contains around 34.000
-core library tests. Mauve has various modules for testing core class
-library implementations, byte code verifiers, source to byte code and
-native code compiler tests. Mauve also contains the Wonka visual test
-suite and the Jacks Compiler Killer Suite.
-See for more information: http://www.sourceware.org/mauve/
-This release passes 33.381 out of 34.262 Mauve core library tests.
-
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-GNU Classpath 0.19 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.19.tar.gz
-MD5sum: 0b93b1c1dd3d33ef7fb6a47dbb29e41d
-SHA1sum: 43d499e8b83e04a7fc4a1d4d301638c5cec6c679
-
-File: classpath-0.19-generics.tar.gz (EXPERIMENTAL)
-MD5sum: 4c0ccc91a147af4010d19f48dbf441b3
-SHA1sum: b2a2b968523b3af35cd7e44bcc4f940621b3ca66
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source
-files used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-New in release 0.19 (Nov 2, 2005)
-(See the ChangeLog file for a full list of changes.)
-
-* The Swing RepaintManager has been reworked for more efficient
- painting, especially for large GUIs.
-
-* The Swing layout manager OverlayLayout has been implemented, the
- BoxLayout has been rewritten to make use of the SizeRequirements
- utility class and caching for more efficient layout.
-
-* Improved accessibility support for Swing.
-
-* The java.net.HttpURLConnection implementation no longer buffers the
- entire response body in memory. This means that response bodies
- larger than available memory can now be handled.
-
-* The Andrew Watson, Vice President and Technical Director of the
- Object Management Group, has officially assigned us 20 bit Vendor
- Minor Code Id: 0x47430 ("GC") that will mark remote Classpath -
- specific system exceptions. Obtaining the VMCID means that GNU
- Classpath now is a recogniseable type of node in a highly
- interoperable CORBA world.
-
-* Classpath now includes the first working draft to support the RMI
- over IIOP protocol. The current implementation is capable for remote
- invocations, transferring various Serializables and Externalizables
- via RMI-IIOP protocol. It can flatten graphs and, at least for the
- simple cases, is interoperable with Sun's jdk 1.5.
-
-* Qt4 configury switches for OS-X. Additional to the --enable-qt-peer,
- OS-X users with a Qt4 installation can build the qt-peers with the
- argument --with-qt4dir=<Qt4-installation-dir>.
-
-* Significant progress has been made in the implementation of the
- javax.swing.plaf.metal.* package, with most UI delegates in a
- working state now. Please test this with your own applications and
- provide feedback that will help us to improve this package.
-
-* The GUI demo (gnu.classpath.examples.swing.Demo) has been extended
- to highlight various features in our free-swing implementation. And
- includes a look and feel switcher (Metal default, Ocean or GNU).
-
-Runtime interface changes:
-
-* Changed implementation of VMClassLoader.getPackage(s) : new method
- VMClassLoader.getBootPackages should be implemented by the vm, and
- sould return a string array of boot package names ("java.lang",
- "java.net", ...). Feedback from vm implementors for usability and
- relevance of the getBootPackages method would be greatly
- appreciated.
-
-New Untested/Disabled Features:
-
- The following new features are included, but not ready for
- production yet. They are explicitly disabled and not supported. But
- if you want to help with the development of these new features we
- are interested in feedback. You will have to explicitly enable them
- to try them out (and they will most likely contain bugs). If you are
- interested in any of these then please join the mailing-list and
- follow development in CVS.
-
-* Cairo Gtk+ Graphics2D support, enabled by giving configure
- --enable-gtk-cairo.
-* QT4 AWT peers, enable by giving configure --enable-qt-peer.
-
-The following people helped with this release:
-
-Andreas Tobler
- Qt4 support for Darwin/OSX, Graphics2D support, gtk+ updates.
-Andrew Haley
- Serialization and URLClassLoader fixes.
-Andrew John Hughes
- Serialization fixes, Properties XML support and generic branch work.
-Anthony Balkissoon
- Lots of Free Swing additions.
-Anthony Green
- MIDI framework, ALSA and DSSI providers.
-Audrius Meskauskas
- Lots of new CORBA and RMI work and bugfixes.
-Casey Marshall
- Crypto algorithm fixes.
-Chris Burdess
- StAX and dom xml:id support.
-Christian Thalinger
- Configuration and VM inteface fixes and CACAO integration.
-Dalibor Topic
- Build cleanups and Kaffe integration.
-David Daney
- HttpURLConnection rewrite and improvements.
-David Gilbert
- Lots of Free Swing and metal theme additions.
-David Lichteblau
- JCL support library global/local reference cleanups.
-Gael Thomas
- VMClassLoader boot packages support sugestions.
-Guilhem Lavaux
- Configuration, thread and channel fixes and Kaffe integration.
-Jan Roehrich
- BasicTreeUI fixes.
-Jeroen Frijters
- Serialization fixes, better Proxy support, bug fixes and IKVM integration.
-Julian Scheid
- Documentation updates and gjdoc support.
-Keith Seitz
- JDWP support.
-Lillian Angel
- Lots of Free Swing additions.
-Mark Wielaard
- Bug fixes, packaging and release management
-Martin Cordova
- Suggestions for better SocketTimeoutException.
-Michael Koch
- Configuration fixes.
-Nicolas Geoffray
- VMClassLoader and AccessController improvements.
-Paul Jenner
- Better -Werror support.
-Robert Schuster
- XML and URL, AWT and Free Swing bug fixes
-Roman Kennke
- Lots of Free Swing additions.
-Santiago Gala
- AccessControlContext fixes.
-Stuart Ballard
- RMI constant fixes.
-Sven de Marothy
- BMP imageio support, CSS and TextLayout fixes.
-Thomas Fitzsimmons
- Lots of imageio framework additions, lots of AWT and Free Swing bug fixes.
-Tom Tromey
- Eclipse integration, generics work, lots of bug fixes and gcj integration.
-
-We would also like to thank the numerous bug reporters and testers!
-</pre>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/20060113.wml b/libjava/classpath/doc/www.gnu.org/announce/20060113.wml
deleted file mode 100644
index 054185d..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/20060113.wml
+++ /dev/null
@@ -1,289 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:star:slice:>
-
-<set-var last-modified-author="mjw">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath 0.20 Announcement (2006-01-13)">
-<pre>
-GNU Classpath 0.20 released
-
-GNU Classpath, essential libraries for java, is a project to create
-free core class libraries for use with runtimes, compilers and tools
-for the java programming language.
-
-The GNU Classpath developer snapshot releases are not directly aimed
-at the end user but are meant to be integrated into larger development
-platforms. For example the GCC (gcj) and Kaffe projects will use the
-developer snapshots as a base for future versions. More projects based
-on GNU Classpath: http://www.gnu.org/software/classpath/stories.html
-
-Some highlights of changes in this release (more extensive list below):
-
- New StAX pull parser and SAX-over-StAX driver. Full XMLEncoder
- implementation. The packages javax.sound.sampled, javax.print.attribute
- and javax.print.event have been implemented. Lots of new datatransfer,
- print, swing and swing.text work. Performance improvements in the
- painting/layout mechanism. Additional 1.5 support, including (separate)
- generic branch release. SecurityManager cleanups and start of review
- of all Permission checks. Buildable on cygwin. Fully buildable as
- "in-workspace" library-plus-vm inside (native) Eclipse. Real world
- Free Swing and CORBA example added.
-
-GNU Classpath 0.20 also comes in a "generic" version.
-classpath-0.20-generics contains a version of the core library
-that uses the new 1.5 language features such as generics and
-enumerations. ECJ, JamVM, IKVM and Cacao are known to support the
-generics release (*). And you should be able to run Eclipse 3.1 with
-it to develop programs that use the new 1.5 language and core library
-additions. classpath-generics is a work in progress and not as
-extensively tested as our regular releases. But please try it out if
-you want to help us test the new 1.5 support of the core libraries.
-
-(*) There is one additional VM interface needed for the VMClassLoader
- static final Class defineClassWithTransformers(ClassLoader loader,
- String name, byte[] data, int offset, int len, ProtectionDomain pd)
- Which is used for the new java.management.instrumentation support.
- See the VM Integration Guide for more details:
- http://www.gnu.org/software/classpath/docs/vmintegration.html
-
-Thanks to a donation of Berkeley Signal Inc GNU Classpath now has an
-official autobuilder machine which is used for quality assurance,
-regression testing, conformance reports and for publishing continous
-snapshots. The machine can be reached as http://builder.classpath.org/
-
-40 people actively contributed to this release and made
-605 CVS commits during the last two months of development
-(excluding the generics branch work). diffstat since 0.19:
- 617 files changed, 89622 insertions(+), 37478 deletions(-)
-
-More details about the various changes and contributions below.
-
-A full list of bug reports fixed for this release can be found at:
-http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&target_milestone=0.20
-
-The GNU Classpath developers site http://developer.classpath.org/
-provides detailed information on how to start with helping the GNU
-Classpath project and gives an overview of the core class library
-packages currently provided. For each snapshot release generated
-documentation is provided through the GNU Classpath Tools gjdoc
-project. A documentation generation framework for java source
-files used by the GNU project. Full documentation on the currently
-implementated packages and classes can be found at:
-http://developer.classpath.org/doc/
-
-For more information about the project see also:
-
-- GNU Classpath home page:
- http://www.gnu.org/software/classpath/
-
-- Developer information (wiki):
- http://developer.classpath.org/
-
-- Full class documentation
- http://developer.classpath.org/doc/
-
-- GNU Classpath hackers:
- http://planet.classpath.org/
-
-- Autobuilder, current build status, build snapshots:
- http://builder.classpath.org/
-
-- Application test pages (wiki)
- http://developer.classpath.org/mediation/FreeAWTTestApps
- http://developer.classpath.org/mediation/FreeSwingTestApps
- http://developer.classpath.org/mediation/FreeSWTTestApps
-
-- GNU Classpath hacking with Eclipse (wiki)
- http://developer.classpath.org/mediation/ClasspathHackingWithEclipse
-
-- GNU Classpath promotion banners:
- http://developer.classpath.org/mediation/ClasspathBanners
-
-- GNU Classpath and Friends meeting (Feb 25/26, Brussels, Fosdem):
- http://www.gnu.org/software/classpath/events/fosdem06.html
-
-This release depends on gtk+ 2.4 for AWT support. But gtk+ 2.6 or
-higher is recommended. Included, but not activated by default in this
-release is a Graphics2D implementation based on the Cairo Graphics
-framework (http://www.cairographics.org). Enabling this makes programs
-like JFreeChart and JEdit start up on GNU Classpath based runtimes.
-To enable this support install the cairo 0.5.x snapshot, configure GNU
-Classpath with --enable-gtk-cairo.
-
-One of the major focuses of the GNU Classpath project is expanding and
-using the Mauve test suite for Compatibility, Completeness and
-Correctness checking. Various groups around GNU Classpath collaborate
-on the free software Mauve test suite which contains around 36.000
-core library tests. Mauve has various modules for testing core class
-library implementations, byte code verifiers, source to byte code and
-native code compiler tests. Mauve also contains the Wonka visual test
-suite and the Jacks Compiler Killer Suite.
-See for more information: http://www.sourceware.org/mauve/
-This release passes 35534 out of 36255 Mauve core library tests.
-
-Conformance reports for the included jaxp support can be found in the
-doc/README.jaxp file.
-
-GNU Classpath 0.20 can be downloaded from
-ftp://ftp.gnu.org/pub/gnu/classpath/
-or one of the ftp.gnu.org mirrors
-http://www.gnu.org/order/ftp.html
-
-File: classpath-0.20.tar.gz
-MD5sum: 21e34b8e8acb4f7b31296bfaf4ad560a
-SHA1sum: c1a38c6c6b67d8c8092cc6af6d86d8c99dad272a
-
-File: classpath-0.20-generics.tar.gz (EXPERIMENTAL)
-MD5sum: db3c235b1ea497d7d2e5852f167d2b31
-SHA1sum: 3d5f5cdd3dc51651f8b2c3765e30454931f45419
-
-New in release 0.20 (Jan 13, 2006)
-(See the ChangeLog file for a full list of changes.)
-
-* New StAX pull parser and SAX-over-StAX driver. Lots of DOM, SAX/StAX,
- XPath and XSLT improvements. Support for XInclude and XML Base added.
- Conformance is now regularly tested against various test-suites at
- http://builder.classpath.org/xml/ See also doc/README.jaxp.
-
-* Full beans XMLEncoder implementation.
-
-* javax.sound.sampled implementation.
-
-* javax.print.attribute and javax.print.event implementated.
-
-* Lots of new datatransfer, print swing and swing.text work and optimization.
-
-* Additional 1.5 support. Including new (separate) generic branch release.
-
-* SecurityManager cleanups and start of review of all Permission checks
- (includes adding lots of new checks to the Mauve test-suite).
-
-* Buildable on cygwin.
-
-* Fully buildable as "in-workspace" library-plus-vm inside (native) Eclipse
- see http://developer.classpath.org/mediation/ClasspathHackingWithEclipse
-
-* Full example that shows a real world CORBA and Free Swing implementation.
- See examples/gnu/classpath/examples/CORBA/swing/README.html
-
-Runtime interface changes:
-
-* New method VMStackWalker.getClassLoader() was added to avoid an infinite
- loop between getCallingClassLoader() and Class.getClassLoader().
-
-* The included fdlibm implementation has seen several cleanups to handle
- new architectures and namespacing issues (in particular for ppc, darwin
- and non-C99 compilers). Please double check any arithmetic test against
- new platforms/runtimes.
-
-* The gnu.java.net.Plain[Datagram]Socket implementations have been
- turned into VM reference classes with JNI/Posix implementations.
-
-New/Untested/Disabled Features:
-
- The following new features are included, but not ready for
- production yet. They are explicitly disabled and not supported. But
- if you want to help with the development of these new features we
- are interested in feedback. You will have to explicitly enable them
- to try them out (and they will most likely contain bugs). If you are
- interested in any of these then please join the mailing-list and
- follow development in CVS.
-
-* Cairo Gtk+ Graphics2D support, enabled by giving configure
- --enable-gtk-cairo.
-* QT4 AWT peers, enable by giving configure --enable-qt-peer.
-
-The following people helped with this release:
-
-Andreas Tobler
- Qt-4.1 support
-Andrew Haley
- Jar work and Jonas fixes
-Andrew John Hughes
- 1.5 generics language work
-Anthony Balkissoon
- Free Swing work
-Anthony Green
- Socket work
-Archie Cobbs
- New VMStackWalker work and JCVM integration
-Audrius Meskauskas
- Free CORBA work and various Free Swing fixes
-Bryce McKinlay
- Jar fixes
-Caolan McNamara
- Dom fixes and OpenOffice fixes
-Casey Marshall
- Crypto work
-Chris Burdess
- XML GNU JAXP work
-Christian Thalinger
- Various fixes, 64bit work and Cacao integration
-Dalibor Topic
- Build cleanups and Kaffe integration
-David Daney
- libgcj integration
-David Gilbert
- Free Swing work
-Freebeans
- Mysaifu Windows CE port and bug reports
-Fridjof Siebert
- Hashtable work
-Gary Benson
- Securitymanager and Permission work
-Guilhem Lavaux
- fdlibm cleanups, performance work and Kaffe integration
-Ingo Proetel
- Various fixes
-Ito Kazumitsu
- Regex, text and character conversion support
-Jan Roehrich
- Datatransfer work
-Jeroen Frijters
- SecurityManager, collections and IKVM integration
-Joao Victor
- Free Swing Timer work
-John Zigman
- SocketChannel testing
-Keith Seitz
- JDWP work
-Lillian Angel
- Free Swing work
-Mark Wielaard
- Bug fixes, packaging and release management
-Nicolas Geoffray
- 1.5 Class Instrumentation work
-Paul Jenner
- Installation and cygwin work
-Petteri Raty
- Configuration and Gentoo integration work
-Raif S. Naffah
- Security work and Eclipse integration
-Riccardo Mottola
- Powerpc work
-Robert Schuster
- XMLEncoder and beans work
-Roman Kennke
- Free Swing and AWT work, VM interface
-Roman Schnider
- AWT work
-Sven de Marothy
- Print and GTK+ work
-Thomas Fitzsimmons
- Free Swing and AWT work
-Tom Tromey
- Eclipse, gcj and gcjx integration
-Wolfgang Baer
- javax.print and friends
-
-We would also like to thank the numerous bug reporters and testers!
-</pre>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/announce/Makefile b/libjava/classpath/doc/www.gnu.org/announce/Makefile
deleted file mode 100644
index f260bda..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html: %.wml ../include/macros.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/announce/
-
diff --git a/libjava/classpath/doc/www.gnu.org/announce/announcements.wml b/libjava/classpath/doc/www.gnu.org/announce/announcements.wml
deleted file mode 100644
index 1e0c1b5..0000000
--- a/libjava/classpath/doc/www.gnu.org/announce/announcements.wml
+++ /dev/null
@@ -1,25 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="cbj">
-
-#include <include/macros.wml>
-
-<header title="<en>GNU Classpath Annoucements</en>">
-
-<H4><en>Announcements</en></H4>
-<UL>
-<LI><createlink url="/software/classpath/announce/20020208.html" name="GNU Classpath Version 0.03"> (2002-02-08)</LI>
-<LI><createlink url="/software/classpath/announce/20010106.html" name="GNU Classpath Version 0.02"> (2001-01-06)</LI>
-<LI><createlink url="/software/classpath/announce/20001120.html" name="GNU Classpath Version 0.01"> (2000-11-20)</LI>
-<LI><createlink url="/software/classpath/announce/19990206.html" name="GNU Classpath Version 0.00"> (1999-02-06)</LI>
-</UL>
-
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/benchmarks.wml b/libjava/classpath/doc/www.gnu.org/benchmarks.wml
deleted file mode 100644
index 011cd57..0000000
--- a/libjava/classpath/doc/www.gnu.org/benchmarks.wml
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath Test and Benchmark Page">
-
-<box>
-<boxtitle><a name="testing">Classpath::Testing</a></boxtitle>
-<boxitem>
-<p>
-The test framework for GNU Classpath is called
-<createlink url="http://sources.redhat.com/mauve/" name="Mauve">. There
-are instructions within the Mauve website on how to download and use Mauve.
-Writing Mauve tests is the most important thing GNU Classpath developers
-could do for the project at this time.
-</p>
-<p>
-Java API compatibility testing can be performed using
-<createlink url="http://www.kaffe.org/~stuart/japi/"
-name="japitools">. Japitools already does
-full API comparisons but it doesn't have the capability to extract
-APIs from the documentation - instead, the "japize" tool uses the
-jode.bytecode library to identify the public members of a given set of
-packages from the binary jars or zips. But japitools does separate the
-API-inspection phase ("japize") from the compatibility-testing phase
-("japicompat") so it would be easy to offer an alternative to japize
-that worked on API documentation.
-</p>
-<p>
-Another method of API compatibility testing is to use <createlink
-url="http://majestix.ucnet.uoc.gr/~jgeorgal/pub/jdiff.sh"
-name="jdiff.sh">, at least until this functionality is merged into
-japitools.
-</boxitem>
-
-
-<boxtitle><a name="benchmarks">Classpath::Benchmarks</a></boxtitle>
-<boxitem>
-Many free benchmarks are available. Benchmarks are a good way to test the functionality of a VM and at the same time get results that can be compared.
-
-<table border="0">
-<tr>
- <th>Name</th><th>Description</th>
-</tr>
-<tr>
- <td><createlink name="Ashes" url="http://www.sable.mcgill.ca/ashes/"></td>
- <td>The Ashes benchmark</td>
-</tr>
-</table>
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/bugs.wml b/libjava/classpath/doc/www.gnu.org/bugs.wml
deleted file mode 100755
index e1b7ddf..0000000
--- a/libjava/classpath/doc/www.gnu.org/bugs.wml
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "include/layout.wml"
-
-<subject "GNU Classpath Bug Reports">
-
-<box>
-
-<boxtitle>GNU Classpath::Bugs</boxtitle>
-<boxitem>
-Unfortunately GNU Classpath is not bug free yet.
-<br>
-But you can help!
-<br>
-If you find a bug please report it here.
-</boxitem>
-
-<boxtitle>Query</boxtitle>
-<boxitem>
-Please first check the following lists:
-<ul>
-<li><a href="http://gcc.gnu.org/bugzilla/query.cgi?product=classpath">Query bugs</a></li>
-<li><a href="http://gcc.gnu.org/bugzilla/buglist.cgi?product=classpath&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=SUSPENDED&bug_status=WAITING&bug_status=REOPENED">All open bugs</a></li>
-<li><a href="http://gcc.gnu.org/bugzilla/duplicates.cgi?sortby=count&product=classpath">Most Frequently Reported Bugs</a></li>
-</ul>
-<p>
-</boxitem>
-
-<boxtitle>Report</boxtitle>
-<boxitem>
-If your bug wasn't in any of the above lists, please
-<ul>
-<li><a href="http://gcc.gnu.org/bugzilla/enter_bug.cgi?product=classpath">Report it</a></li>
-<ul>
-<p>
-</boxitem>
-
-<boxtitle>Overview</boxtitle>
-<boxitem>
-You can also look at some pretty
-<ul>
-<li><a href="http://gcc.gnu.org/bugzilla/reports.cgi?product=classpath&datasets=NEW%3A&datasets=ASSIGNED%3A&datasets=REOPENED%3A&datasets=UNCONFIRMED%3A&datasets=RESOLVED%3A&datasets=VERIFIED%3A&datasets=CLOSED%3A&datasets=FIXED%3A&datasets=INVALID%3A&datasets=WONTFIX%3A&datasets=DUPLICATE%3A&datasets=WORKSFORME%3A">Status Counts</a></li>
-<li><a href="http://gcc.gnu.org/bugzilla/report.cgi?bug_file_loc_type=allwordssubstr&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=SUSPENDED&bug_status=WAITING&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&cumulate=1&gccbuild_type=allwordssubstr&gcchost_type=allwordssubstr&gcctarget_type=allwordssubstr&keywords_type=allwords&known_to_fail_type=allwordssubstr&known_to_work_type=allwordssubstr&long_desc_type=substring&product=classpath&short_desc_type=allwordssubstr&x_axis_field=component&y_axis_field=bug_status&width=600&height=350&action=wrap&format=table">Component/Status Tables</a></li>
-</ul>
-<p>
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/corba.wml b/libjava/classpath/doc/www.gnu.org/corba.wml
deleted file mode 100644
index cb9d7c5..0000000
--- a/libjava/classpath/doc/www.gnu.org/corba.wml
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "include/layout.wml"
-
-<subject "GNU Classpath CORBA interoperability page">
-
-<box>
-
-<boxtitle>GNU Classpath::Object management group</boxtitle>
-<boxitem>
-This page is referenced from the official
-<a href="http://doc.omg.org/vendor-tags">OMG Vendor tag list</a>,
-maintained by the <a href = "http://www.corba.org/">OMG</a>.
-It is is designed to help programmers debugging interoperation
-with our ORB.
-</boxitem>
-
-<boxtitle>GNU Classpath::CORBA interoperability</boxtitle>
-<boxitem>
-<ol>
-<li><a href="http://developer.classpath.org/mediation/CorbaInteroperability">
-Interoperability information (system exception minor codes, etc).</a></li>
-<li><a href="http://developer.classpath.org/doc/">GNU Classpath API Specification</a></li>
-<li><a href="bugs.html">Bug database.</a></li>
-<li>GNU Classpath CORBA vs:
-<a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk12-classpath.html">JDK 1.2</a>
-<a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk13-classpath.html">JDK 1.3</a>
-<a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html">JDK 1.4</a>
- (updated nightly)</li>
-<li><a href="http://www.gnu.org/software/classpath/classpath.html">Project home page</a></li>
-</ol>
-Registered information
-<ul>
-<li>GNU Classpath Vendor Minor Code Id (VMCID) is 0x47430xxx
-("GC\x00\x00" - "GC\x0f\xff").</li>
-</ul>
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile b/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile
deleted file mode 100644
index 93ec48c..0000000
--- a/libjava/classpath/doc/www.gnu.org/cp-tools/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html: %.wml ../include/macros.wml ../include/layout.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/cp-tools/
-
diff --git a/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml b/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml
deleted file mode 100755
index a5139fb..0000000
--- a/libjava/classpath/doc/www.gnu.org/cp-tools/cp-tools.wml
+++ /dev/null
@@ -1,68 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<set-var last-modified-author="mjw">
-<subject "GNU Classpath Tools">
-
-<box>
-<boxtitle><a name="Tools">GNU Classpath::Tools</a></boxtitle>
-<boxitem>
-GNU Classpath Tools is a collection of tools for programmers using the
-GNU Classpath library including a byte code disassembler, a JNI C header
-file generator, serial version uid calculator, character converter, remote
-method invocation tools and a documentation generation framework for java
-source files. Plus tools specific to GNU Classpath development for generating
-locale, currency and timezone information.
-</boxitem>
-</box>
-
-<box>
-<boxtitle><a name="Programs">GNU Classpath::Tools::Programs</a></boxtitle>
-<boxitem>
-GNU Classpath Tools contains the following tools. Some have their own
-page describing them in more detail:
-<ul>
-<li><b>gjdoc</b>
- A documentation generation framework for java source files.</li>
-<li><b><createlink url="cp-tools/texidoclet.html" name="texidoclet"/></b>
- A "doclet" for converting comments into GNU TexInfo source.</li>
-<li>RMI tools such as rmic and rmiregistry.</li>
-<li>Miscellaneous tools such as javap, javah, serialver and native2ascii/</a>
-<li>GNU Classpath specific tools localgen and currencygen.</li>
-</lu>
-</boxitem>
-</box>
-
-<box>
-<boxtitle><a name="Development">GNU Classpath::Tools::Downloads</a></boxtitle>
-<boxitem>
-At the moment there are only official releases of gjdoc on
-<createlink url="ftp://ftp.gnu.org/gnu/classpath/" name="ftp.gnu.org"/>.
-All other tools are available from CVS from the savannah project page below.
-</boxitem>
-</box>
-
-<box>
-<boxtitle><a name="Development">GNU Classpath::Tools::Development</a></boxtitle>
-<boxitem>
-GNU Classpath Tools is part of the GNU Classpath project which is hosted at
-Savannah. The project page is
-<createlink url="http://savannah.gnu.org/projects/classpath/"/>.
-From there you can submit bug reports, check the latest news, find tasks
-yet to be done, and most importantly submit patches!
-<p>
-There is one general discussion list for Classpath-tools. You may
-<createlink url="" name="subscribe"/> to the mailing list via the web.
-However, you may also just send an email message with a subject of "subscribe"
-to <createlink url="mailto:cp-tools-discuss-request@gnu.org"/>.
-You may <createlink url="" name="unsubscribe"/> from the mailing list via the
-web as well.
-</boxitem>
-
-<boxtitle><a name="License">GNU Classpath::Tools::Distribution Terms</a></boxtitle>
-<boxitem>
-All GNU Classpath Tools are distributed under the terms of the
-<createlink url="/copyleft/gpl.html" name="GNU General Public License">.
-</boxitem>
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html b/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html
deleted file mode 100644
index 1395442..0000000
--- a/libjava/classpath/doc/www.gnu.org/cp-tools/texidoclet.html
+++ /dev/null
@@ -1,597 +0,0 @@
-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
-<HTML>
-<HEAD>
-<TITLE>GNU texidoclet - GNU Project - Free Software Foundation (FSF)</TITLE>
-<A HREF=""></A>
-</HEAD>
-<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
-<H1>GNU texidoclet</H1>
-
-<h2>Table Of Contents</h2>
-<ol>
- </li><li><a href="#Introduction">Introduction</a>
-
- <ul>
- <li><a href="#whatis">What is TexiDoclet?</a>
- </li><li><a href="#whyuse">Why use the info format?</a>
- </li><li><a href="#howstart">How do I get started?</a>
- </li></ul>
-
- </li><li><a href="#Requirements">Requirements</a>
-
- </li><li><a href="#Download">Download</a>
-
- </li><li><a href="#Installation">Installation</a>
-
- </li><li><a href="#configure">Configure</a>
-
- </li><li><a href="#Usage">Usage</a>
- </li><li><a href="#Bugs">BUGS</a>
- </li><li><a href="#History">History</a>
- </li><li><a href="#Todo">TODO</a>
- </li>
-</ol>
-
-<hr>
-
-<a name="Introduction"></a> <h2>1. Introduction</h2>
-
-<h3><a name="whatis"></a>What is GNU TexiDoclet?</h3>
-
-GNU TexiDoclet is a system for creating <b>info</b> pages from Java
-source documentation. It is part of the <a
-href="/software/classpath/">GNU Classpath</a> project, however it can
-also be used as standalone doclet used with any Java-compatible
-platform.
-
-<p>You can use TexiDoclet to create API documentation in <b>info</b>
-format for any set of Java packages (including classpath). The latter
-will reproduce the full Java API documentation for use on text-only
-displays, or for integrating it into the GNU Emacs online help
-facility. </p><p>TexiDoclet also includes an Elisp package which adds
-context-sensitive help features to GNU Emacs.
-</p>
-
-<table bgcolor="#cccccc" border="0" cols="1" width="100%">
- <tbody>
- <tr>
- <td><b>Note:</b> This is alpha software. You should not use
- TexiDoclet in a production environment, because it has not yet
- been tested for reliability. Also, see <a href="#Bugs">Bugs</a>
- for a list of currently missing
- features.</td></tr></tbody></table> <h3><a name="whyuse"></a>Why
- use the <b>info</b> format?</h3>Although the <b>info</b> format
- is raw text with nearly no formatting or highlighting, using the
- <b>info</b> version of the Java API documentation can have a
- number of advantages even on graphical displays - especially if
- you are using GNU Emacs:
-
-<ul>
- <li>Because it is text-only, <b>info</b> is pretty fast.
- </li><li>You can easily navigate through <b>info</b> pages using only the keyboard
- - which doesn't hold true for most HTML browsers available today, where you
- always have to grab the mouse or tab the focus.
- </li><li>You can use all the powerful Emacs facilities to browse the documentation
- (e.g. incremental search, regular expressions, bookmarks).
- </li><li>You can copy documentation fragments (like the definition of a method you
- want to overload) easily using the keyboard, again having all Emacs facilities
- right at hand, such as the ring buffer.
- </li><li>You have no frames in <b>info</b>, but you can use the Speedbar contained
- in recent Emacs distributions for the same purpose [not tested as yet].
- </li></ul>
-
-<h3><a name="howstart"></a>How do I get started?</h3>
-<ul>
- <li>Check the <a href="#Requirements">Requirements</a>
- section and download/install any missing tools.
- </li><li><a href="#Download">Download</a>
- and <a href="#Installation">unpack</a>
- the TexiDoclet package.
- </li><li>See section <a href="#configure">Configure</a>
- for further instructions. </li></ul>
-
-<h3>Thanks!</h3>
-<p>TexiDoclet was originally written as a standalone doclet by <a
-href="http://savannah.gnu.org/users/julian/">Julian Scheid</a> and was
-contributed to the GNU Project as part of GNU Classpath.</a>
-</p>
-
-
-<hr>
-
-<a name="Requirements"></a>
-
-<h2>2. Requirements</h2>In order to use TexiDoclet, you need the
-following software installed:
-
-<ul>
- <li>A Java platform 1.2 or better. The intention is to be able have
- TexiDoclet work first and foremost with <a
- href="/software/classpath/">GNU Classpath</a> and other completely
- free toolchains (<em>with <a href="gjdoc.en.html">gjdoc</a> we are
- 99% there!</em>) although it can be used with non-free VMs.</li>
-
- <li>GNU Make and GNU makeinfo. Note: makeinfo is contained in the GNU
- texinfo package. </li>
-
- <li>A Unix environment:
- <ul>
- <li><tt>bash</tt> and the standard commands like <tt>cp</tt> are essential
- </li><li><tt>which</tt> and <tt>awk</tt> are required for checking the setup
- </li><li><tt>gzip</tt> is used to compress the <b>info</b> pages. </li>
- </ul>
-
-<!--
- </li><li>The Java Community source code, if you want to reproduce
- documentation for the Java core API. <strong>Note: this is
- <em>not</em> distributed with TexiDoclet because it is released
- under a non-free software license, the SCSL, which is incompatible
- with the GNU GPL. If you wish to create the Java API documentation
- you must download and agree to it's terms (we cannot do
- this).</strong></li>
--->
-
- </ul>
-
- Makeinfo is required to convert the texinfo source into the
- <b>info</b> format. If you only need the texinfo source, you don't
- need makeinfo. Unix users will probably find a makeinfo preinstalled
- on their system. Windows users can find free precompiled binaries
- on the Internet (look for the Texinfo package). <br> 
-
-<table bgcolor="#cccccc" border="0" cols="1" width="100%">
- <tbody>
- <tr>
- <td><b>Note:</b> There are some 16-bit makeinfo binaries available online,
- but they won't work. You need to look for an up-to-date 32-bit
- binary.</td></tr></tbody>
-</table>
-
-<p>GNU Make is required because if you want to generate the full
-standard Java API documentation, each package must be processed
-individually. The Makefile works with patterns to process the packages
-individually and merge the results.</p>
-
-<p>Again, Unix users will find Make preinstalled. Windows users can
-find precompiled binaries on the Internet for free. <br> 
-</p>
-
-<table bgcolor="#cccccc" border="0" cols="1" width="100%">
- <tbody>
- <tr>
- <td><b>Note:</b> Use only GNU Make - you will probably get into
- trouble if you try to use a different Make tool, because the
- TexiDoclet Makefile uses some GNU-specific
- features.</td></tr>
- </tbody>
-</table>
-
-<!--
-<p>You need the Java community source code if you want to reproduce the full
-core API documentation. Get it from <a href="http://developer.java.sun.com/">Sun's Java Developer Website</a>. Having
-the source at hand is generally recommended. <br> 
-</p>
--->
-
-<table bgcolor="#cccccc" border="0" cols="1" width="100%">
- <tbody>
- <tr>
- <td><b>Tip:</b> Configuring TexiDoclet is much easier if you make sure
- that all utilities (including the Java tools) are on your system search
- path.</td></tr></tbody></table>
-
-<p>
-TexiDoclet has been tested on the following systems:
-</p><p>
-
-</p><table border="1" cols="3" width="100%">
- <tbody>
- <tr>
- <td><b>Operating System</b></td>
- <td><b>JDK</b></td>
- <td><b>Other</b></td></tr>
-
-<!-- Windows untested at the moment
- <tr>
- <td>Windows 98</td>
- <td>Sun JDK 1.3 RC2</td>
- <td>Cygwin B-20 (GNU bash 2.02.1) <br>GNU Make 3.78.1 <br>GNU makeinfo
- 1.68 (GNU texinfo 3.12)  <br>GNU Emacs 20.6.1</td>
- </tr>
--->
- <tr>
- <td>Linux kernel 2.2.16 on Intel / Red Hat 7.0 distribution</td>
- <td>Sun JDK 1.2.2</td>
-
- <td>GNU bash 2.04.11 <br>GNU Make 3.79.1 <br>GNU makeinfo 4.0
- <br>GNU Emacs 20.3.1</td></tr>
-
- <tr>
- <td>Linux kernel 2.2.9-27mdk / Mandrake distribution
- <em>(thanks to Owen Lydiard for the report)</em></td>
- <td>JDK 1.3</td>
- <td> GNU make 3.77<br>
- makeinfo (GNU texinfo) 4.0<br>
- GNU Emacs 20.3.1</td>
- </tr>
-
- <tr>
-
- <td colspan="3">As of the date of this document, no other
- configurations have been tested. If you install TexiDoclet on a
- different system, be it successful or not, please contact the <a
- href="http://savannah.gnu.org/project/memberlist.php?group_id=508">developers</a>
- so that this list can be extended.</td></tr></tbody>
-</table>
-
-
-<h3>3.1 Tool download locations for Windows users [untested]</h3>
-
-<p>Although the present version of TexiDoclet has not been tested on
-Windows, a previous incarnation was working using the following:
-Windows 98 / Sun JDK 1.3 RC2 / Cygwin B-20 (GNU bash 2.02.1) / GNU
-Make 3.78.1 / GNU makeinfo 1.68 (GNU texinfo 3.12) / GNU Emacs
-20.6.1</p>
-
-<p>Here are a few URLs for getting the Windows ports of the required
-software:</p>
-
-<ul>
-<li><a href="http://sourceware.cygnus.com/cygwin/">The Cygwin project</a> offers the most
- sophisticated port of Unix utilities for free download. Their "full" package
- includes a Bash and a full-featured Unix environment (including <tt>grep</tt>, <tt>less</tt>, <tt>awk</tt> and other
- useful commands.) With regard to TexiDoclet, only GNU <tt>make</tt> and <tt>makeinfo</tt>
- are missing.
-
-</li><li><a href="http://www.tertius.com/projects/library/#cygwin32">tertius.com</a> contains a
- link to a Windows port of the texinfo package,
- including the required <tt>makeinfo</tt> tool. It also includes a standalone <b>info</b> viewer.
-
-</li>
-
-<li>Refer to the <a
-href="http://www.gnu.org/software/make/make.html">GNU Make
-homepage</a> and to <a
-href="http://ftp.gnu.org/pub/gnu/">http://ftp.gnu.org</a> for
-downloading the GNU Make binaries for Windows. </li></ul>
-
-<hr>
-
-<a name="Download"></a>
-
-<a name="Download">
-<h2>3. Download</a></h2>
-
-The old (pre-GNU) version of TexiDoclet is still located at our old
-development site on sourceforge and is available from <a
-href="http://sourceforge.net/project/showfiles.php?group_id=7984">SourceForge</a>.
-This (old) 0.5 version is provided purely as a convenience, and will
-soon be replaced by a new version . Subsequent releases will be made
-available at via the GNU ftp site (<a
-href="http://ftp.gnu.org/pub/gnu/">http://ftp.gnu.org/pub/gnu/).</a>
-
-<p>The package includes an autoconfiguration system, the full source
-code, and additional Emacs add-ons. It unpacks into a separate
-directory named "<tt>texidoclet-(version)</tt>". </p>
-
-<p>If you want to take a look at TexiDoclet's output first, here is a
-<a
-href="http://texidoclet.sf.net/texidoclet-api-info-0.5.tar.gz">sample
-(32 K gzipped tar)</a>. It's the converted `info' docs for the
-TexiDoclet API (please note that the package name
-<tt>gnu.texidoclet</tt> is now obsoleted by
-<tt>gnu.classpath.tools.doclets.texidoclet</tt>) itself. [To view run
-the standalone <tt>info</tt> viewer: <tt>info -f
-texidoclet.info</tt>.]
-</p>
-
-<hr>
-
-<a name="Installation"></a>
-
-<h2>4. Installation</h2>
-
-
-<p><strong>Please note the following instructions relate purely to the
-old 0.5 version of GNU texidoclet, which is currently the only
-release</strong></p>
-
-<p>In order to install TexiDoclet, you should unpack it to a location
-of your choice. TexiDoclet will unpack into a separate subdirectory,
-which contains the following files and directories:</p>
-
-<table>
- <tbody>
- <tr>
- <td><tt>Makefile </tt></td>
- <td></td>
- <td>the TexiDoclet main Makefile.</td></tr>
- <tr>
- <td><tt>COPYING </tt></td>
- <td> </td>
- <td>the GNU public license (Version 2)</td></tr>
- <tr>
- <td><tt>etc/ </tt></td> <td></td>
-
- <td>contains Makefile template for generating the docs for Sun's
- code.</td></tr>
- <tr>
- <td><tt>lisp/ </tt></td>
- <td></td>
- <td>contains add-ons for enabling context-sensitive help in Emacs.</td></tr>
- <tr>
- <td><tt>source/ </tt></td>
- <td></td>
- <td>contains the full Java source code for TexiDoclet</td></tr>
-</tbody></table>
-
-<p>After you have unpacked the archive, you should configure TexiDoclet as
-described in the following section, <a href="#configure">Configure</a>.</p>
-
-<hr>
-
-<a name="configure"></a>
-
-<h2>6. Configure</h2>
-
-<p><strong>Please note the following instructions relate purely to the
-old 0.5 version of GNU texidoclet, which is currently the only
-release</strong></p>
-
-[Taken from the <tt>README</tt> file in the distribution]
-
-<pre>
-Installation:
-============
-
-1. The usual GNU autoconf procedure applies:
-
- ./configure
- make
-
- Read the generic INSTALL file for the details.
-
-2. Extra texidoclet-specific options for `configure':
-
- `--with-jdkdir=DIR'
-
- DIR specifies the location of the JDK (if it's not on the PATH)
-
- `--with-javadocjar=FILE'
-
- Use FILE as jar file with javadoc support.
-
-3. This will generate the jar file in source/TexiDoclet.jar. You can
- choose to run "make install" at this point, although this is not,
- strictly speaking, necessary.
-
-4. To see an example of the invocation of TexiDoclet, type "make
- check". This will build the `info' docs for texidoclet itself in
- the "source" subdirectory.
-</pre>
-
-<hr>
-
-<a name="Usage"></a>
-
-<h2>8. Usage</h2>
-
-<p><strong>Please note the following instructions relate purely to the
-old 0.5 version of GNU texidoclet, which is currently the only
-release</strong></p>
-
-[Taken from the <tt>README</tt> file in the distribution]
-
-<pre>
-Usage:
-=====
-
-1. TexiDoclet now works like any other doclet [Consult
- http://java.sun.com/j2se/javadoc/ for further information on
- Javadoc and the Javadoc API], it can be invoked with default
- options by merely supplying the path the doclet and the doclet
- invocation class (which is `gnu.texidoclet.Driver'):
-
-javadoc -docletpath TexiDoclet.jar -doclet gnu.texidoclet.Driver &lt;filename&gt; ...
-
-2. It also accepts all the Standard Sun doclet options, in addition
- to some TexiDoclet-specific ones, which are listed if you invoke
- javadoc without any Java source files or packages. Here are those
- options:
-
--d &lt;directory&gt; Destination directory for output files
--tocbase &lt;base&gt; Prefix for all package-level texi files (default 'packages'
--indexbase &lt;base&gt; Prefix for package index
--allclassesbase &lt;base&gt; Prefix for all class list
--treebase &lt;base&gt; Prefix for tree output
--etagsname &lt;base&gt; Prefix for package etags
--tocheader &lt;text&gt; Header for each texi file
--tocfooter &lt;text&gt; Footer for each texi file
--copyrightnotice &lt;text&gt; Copyright information on each texi page
--wordwrappos &lt;chars&gt; Number of columns at which to wrap
--firstlineindent &lt;chars&gt; Number of columns to indent
--includeauthor Include author information?
--fulltreealignment &lt;type&gt; 'replace' or null
--heritagealignment &lt;type&gt; 'replace' or null
-
- Most of these options are self-explanatory and all have
- `reasonable' defaults, and are in the process of being more fully
- documented.
-
-3. To generate the `info' documentation, invoke `makeinfo' on the
- resultant `.texi' file. See the documentation accompanying your
- texinfo installation for more details. [Note you can use texinfo
- to also generate printed and HTML documentation from the `.texi'
- files, but note that there are more specialised doclets for that
- purpose].
-</pre>
-
-<hr>
-
-<a name="Bugs"></a>
-
-<h2>7. Bugs</h2>
-
-<p><strong>Please note the following instructions relate purely to the
-old 0.5 version of GNU texidoclet, which is currently the only
-release</strong></p>
-
-[Taken from <tt>BUGS</tt> in the distribution]
-
-<pre>Known Bugs, or "features not yet implemented", in roughly the order
-they will be attacked. New versions of this software implementing all
-or part of the missing features can be expected soon.
-
-* No cross-links for parameter types, return types, and thrown exceptions.
-
-* No support for {@link}.
-
-* Not very configurable at the time.
-
-* Various small improvements on Info page layout pending.
-
-* Elisp scripts for context sensitive help are preliminary. (Can
- anyone help me out here? I am new to Lisp and would need some
- advice.)
-
-* Autoconf support for the Cygnus environment (simply untested at the
- moment).</pre>
-
-<hr>
-
-<a name="History"></a>
-
-<h2>8. History</h2>
-
- [Taken from <tt>NEWS</tt> in the distribution]
-
-<pre>
-
-2002-01-24 -- CVS
-
-* now a GNU project (part of classpath)
-* all copyright changed to FSF.
-* distribution now based at http://savannah.gnu.org/projects/cp-tools/
-
-2001-04-02 -- 0.5
-
-* complete overhaul of distribution
-* distribution now based at SourceForge.
-* rewrote Makefile system to use GNU automake/autoconf
-* added a new Driver class to generate the .texi in one pass
-
-2000.04.02 -- 0.4.1
-
-* features full information - all documentation nodes are implemented
-* added "implements" information
-* added post-processing to include information about derived and
- implementing classes.
-* removed self-reference in heritage tree
-* improved node reference formatting ("(package) class" instead of
- "(package)class")
-* added switch to control inclusion of author information
-* added caption to index, all classes, and full tree node
-* added "abstract" keyword and class prototype to class node
-* added serialization node
-* added ability to split the full index into 27 parts (A-Z|_)
- (not configurable yet)
-
-2000.04.01 -- 0.3.3
-
-* index is now sorted case-insensitive
-* major revision of configuration file structure
-* added preliminary version of inherited fields and methods
-* took preparations for adding derivation information after generating
- the texi files.
-
-2000.04.01 -- 0.3.2
-
-* improved front page layout
-* added copyright messages as requested by Sun Microsystems Inc. so
- that the core API docs
-* can be distributed in converted format.
-* removed heritage chart from interfaces
-* added "extends" line to class node
-* added @author tag to all nodes
-
-2000.03.30 -- 0.3.1
-
-* added Interfaces, Exceptions and Errors to package node
-* fixed bug: bad layout when HTML paragraph ends with &lt;br&gt;
-* added @deprecated and @since info to all nodes
-* added support for multiple source paths
-
-2000.03.29 -- 0.2.1
-
-* fixed bug: class node only displayed first description line.
-* added @since tag for all nodes.
-* fixed bug: generated text displayed bogus texi tags.
-* corrected/finished full tree layout.
-* fixed bug: field prototype was missing.
-* &lt;sup&gt; is now translated to ^ (caret) for denoting powers.
-* Method listing in class node is now sorted.
-* added "see also" for classes
-
-2000.03.28 -- 0.1.2
-
-* Source code structure significantly improved.
-* added "all classes", full index, and full tree.
-* added preliminary emacs .el-script for context-sensitive help.
-
-2000.03.27 -- 0.1.1
-
-* Initial non-public pre-alpha release.
-</pre>
-
-<hr>
-
-<a name="Todo"></a>
-
-<h2>9. TODO</h2>
-
-[Taken from <tt>TODO</tt> in distribution]
-
-<pre>
-* Check bug list.
-
-* Improve source code documentation and this page.
-
-* Check Speedbar compatibility.
-
-* Look for a way to add a link to the corresponding Java source code
- into all Info nodes.
-
-* Same for original HTML documentation (using browse-url)
-
-* Perhaps integrate XML/XSL support when it becomes part of the Java
- standard. Currently, the user would have had to download a package
- of some MB and install it, if an XML library would have been
- employed for TexiDoclet.
-</pre>
-
-<BR>
-<HR>
-
-Return to <A HREF="/home.html">GNU's home page</A>.
-<P>
-Please send FSF &amp; GNU inquiries &amp; questions to
-<A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
-There are also <A HREF="/home.html#ContactInfo">other ways to
-contact</A> the FSF.
-<P>
-Please send comments on these web pages to
-<A HREF="mailto:webmasters@www.gnu.org"><EM>webmasters@www.gnu.org</EM></A>,
-send other questions to
-<A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
-<P>
-Copyright (C) 1999, 2005 Free Software Foundation, Inc.,
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-<P>
-Verbatim copying and distribution of this entire article is
-permitted in any medium, provided this notice is preserved.<P>
-Updated:
-
-$Date: 2005/07/02 20:32:08 $ by $Author: mark $
-<HR>
-</BODY>
-</HTML>
diff --git a/libjava/classpath/doc/www.gnu.org/docs/Makefile b/libjava/classpath/doc/www.gnu.org/docs/Makefile
deleted file mode 100644
index 1b7f8ca..0000000
--- a/libjava/classpath/doc/www.gnu.org/docs/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-SUBDIRS=
-
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-TEXI_SRC := $(wildcard ../../*.texinfo)
-VPATH = ../..
-WML_SRC = $(patsubst ../../%, %, $(TEXI_SRC:.texinfo=.html)) $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html : %.texinfo
- texi2html -monolithic --ifinfo --ifhtml $<
-# texi2html -monolithic $<;
-# cp $< $@
-# echo '#!wml --include=..' > $@
-# sed -e 's/<HTML>/\^\#use wml::std::lang\^\#use wml::fmt::isolatin\^\#use wml::std::case global=upper\^<lang:new id=en short>\^<lang:star:slice:>\^\#include <include\/macros.wml>\^<HTML>/' -e 's/<BODY>/<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">/' -e 's/<\/BODY>/<footer>\^<\/BODY>/' $(subst .wml,.html,$(@)) > $@.sed;
-# tr "\\^" "\n" < $@.sed >> $@
-# -rm -f $(subst .wml,.html,$(@)) $@.sed
-
-%.html: %.wml ../include/macros.wml ../include/layout.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-.PHONY : all
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
- -rm -f hacking.wml vmintegration.wml
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/docs/
-
diff --git a/libjava/classpath/doc/www.gnu.org/docs/docs.wml b/libjava/classpath/doc/www.gnu.org/docs/docs.wml
deleted file mode 100644
index c94b7ba..0000000
--- a/libjava/classpath/doc/www.gnu.org/docs/docs.wml
+++ /dev/null
@@ -1,37 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<subject "GNU Classpath Documentation">
-
-<box>
-<boxtitle>Classpath::Legal Information</boxtitle>
-
-<boxitem>
-<blockquote>
- <createlink url="license.html#documentation" name="Documentation Redistribution Policy"><br/>
- <createlink url="license.html" name="Copyright and License Terms"><br/>
-</blockquote>
-
-</boxitem>
-
-<boxtitle>Classpath::API & Language Documentation</boxtitle>
-<boxitem>
-<blockquote>
- <createlink url="http://developer.classpath.org/doc/" name="GNU Classpath API Specification">
-</blockquote>
-
-</boxitem>
-
-<boxtitle>Classpath::Developer's Documentation</boxtitle>
-
-<boxitem>
-<blockquote>
- <createlink url="docs/hacking.html" name="GNU Classpath Hacker's Guide"><br/>
- <createlink url="docs/vmintegration.html" name="Virtual Machine Integration Guide"><br/>
- <createlink url="http://developer.classpath.org/mediation/" name="GNU Classpath Wiki"><br/>
-</blockquote>
-</boxitem>
-
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml b/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml
deleted file mode 100644
index 1fb3996..0000000
--- a/libjava/classpath/doc/www.gnu.org/docs/jikesrvm.wml
+++ /dev/null
@@ -1,100 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="<mjw>">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath and Jikes RVM">
-<en>
-<p>
-</p>
-
-<H4>Steps to use Jikes RVM and GNU Classpath on GNU/Linux</H4>
-<OL>
- <LI>
- Install jikes-1.18 on your machine, if you do not already have it.
- Jikes can be retrieved from <createlink url="http://oss.software.ibm.com/developerworks/opensource/jikes/" name="http://oss.software.ibm.com/developerworks/opensource/jikes/">
- </LI>
- <LI>
- Check out the GNU Classpath head into some directory (hereinafter
- called &lt;classpathdir&gt;)
- <UL>
- <LI>CVS root for GNU Classpath is :psevser:anoncvs@subversions.gnu.org:/cvsroot/classpath</LI>
- <LI>Given that root, in &lt;classpathdir&gt; do `cvs checkout classpath'</LI>
- </UL>
- </LI>
- <LI>
- Build and configure GNU Classpath
- <UL>
- <LI>Do the aclocal; autoheader; automake; autoconf thing in &lt;classpathdir&gt;/classpath (see HACKING for details)</LI>
- <LI>Make a directory '&lt;classpathdir&gt;i686' (i.e. &lt;classpathdir&gt; now contains a 'classpath' and a 'i686')</LI>
- <LI>In i686, do a '../classpath/configure --enable-jni --with-jikes'</LI>
- <LI>In i686, do 'make'</LI>
- </UL>
- <p>
- You can, of course, use your own classpath tree if you have one.
- But you must make an 'i686' directory parallel to the top of your tree,
- and do configure there as specified above.
- </p>
- </LI>
- <LI>Download Jikes RVM into some directory (hereinafter &lt;rvmroot&gt;)
- <UL>
- <LI>:pserver:anoncvs@www-124.ibm.com:/usr/cvs/jikesrvm</LI>
- <LI>Given that root, in &lt;rvmroot&gt;, do 'cvs checkout rvm'</LI>
- </UL>
- </LI>
- <LI>
- Edit &lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb to reflect your system.
- Everything should be fine, except CLASSPATH_SRC, which should become
- &lt;classpathdir&gt;
- </LI>
- <LI>
- Set the following environment variables (bash style below,
- mutatis mutandum)<br>
- <pre>
- export RVM_ROOT=&lt;rvmroot&gt;
- export RVM_HOST_CONFIG=&lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb
- export RVM_TARGET_CONFIG=&lt;rvmroot&gt;/rvm/config/i686-pc-linux.eb
- export RVM_BUILD=&lt;some directory that can be trashed or created&gt;
- export PATH=&lt;rvmroot&gt;/rvm/bin:${PATH}
- </pre>
- </LI>
- <LI>
- Build Jikes RVM
- <UL>
- <LI>jconfigure -D RVM_WITH_GNU_CLASSPATH=1 BaseBaseSemiSpace</LI>
- <LI>cd $RVM_BUILD</LI>
- <LI>./jbuild</LI>
- </UL>
- </LI>
-</OL>
-
-<p>
-Many variations are possible. Be warned that BaseBaseSemiSpace instructs
-jconfigure to prepare a version of JikesRVM that is slow to run but quick
-to build. After verifying that that works, you may want to try
-FastAdaptiveSemiSpace instead (just change the last argument to jconfigure;
-you will probably want to change RVM_BUILD so that the FastAdaptive image
-does not destroy the BaseBase one). That will prepare a Jikes RVM version
-that takes much longer to build (~25 minutes on a fast machine) but will run
-programs much faster. Also be warned that you currently need rather a
-lot of memory to build the FastAdaptiveSemiSpace image; recommended at least
-512MB.
-</p>
-<p>
-If you have problems, refer to specific install documentation for each
-project. Thank you to Julian Dolby for providing these instructions.
-</p>
-<ul>
-<li><createlink url="http://www-124.ibm.com/developerWorks/opensource/jikesrvm/" name="Jikes RVM"></li>
-</ul>
-</en>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/docs/orp.wml b/libjava/classpath/doc/www.gnu.org/docs/orp.wml
deleted file mode 100644
index b8a81ea..0000000
--- a/libjava/classpath/doc/www.gnu.org/docs/orp.wml
+++ /dev/null
@@ -1,92 +0,0 @@
-#!wml --include=..
-
-#use wml::std::page
-#use wml::std::lang
-#use wml::fmt::isolatin
-#use wml::std::case global=upper
-
-<lang:new id=en short>
-<lang:star:slice:>
-
-<set-var last-modified-author="<mjw>">
-
-#include <include/macros.wml>
-
-<header title="GNU Classpath and ORP">
-<en>
-<p>
-The Open Runtime Platform (<link
-url="http://orp.sourceforge.net/" name="ORP">) provides a
-covenient and simple platform for both using and testing GNU
-Classpath. With the release of ORP 1.0.9, GNU Classpath's native
-libraries are supported out of the box.
-</p>
-
-<H4>Steps to use ORP+GNU Classpath on GNU/Linux</H4>
-<p>
-Example assumes ORP 1.0.9, see above. In the example, GNU Classpath sources
-are in ~/src/classpath/.
-</p>
-<UL>
- <LI>Obtain <createlink url="http://sourceforge.net/projects/orp/"
- name="ORP"> from the Sourceforge project page</LI>
- <OL>
- <LI><tt>wget
- http://prdownloads.sourceforge.net/orp/orp-1.0.9.tgz</tt></LI>
- <LI><tt>tar -xzvf orp-1.0.9.tgz</tt></LI>
- </OL>
- <LI>On some systems you might need to apply a patch to work around
- gcc compile problems</LI>
- <OL>
- <LI><tt>cd orp-1.0.9</tt></LI>
- <LI><tt>patch -p1 < ~/src/classpath/resource/orp-1.0.9.patch</tt></LI>
- </OL>
- <LI>Build ORP</LI>
- <OL>
- <LI><tt>make NON_ORP_NATIVE_LIBS=-DNON_ORP_NATIVE_LIBS dbg</tt></LI>
- </OL>
-</UL>
-<p>
-ORP should now be built and ready, orp-1.0.9/mains/orp/Linux/dbg/orp.
-</p>
-<H4>Using ORP+GNU Classpath on GNU/Linux</H4>
-<p>
-ORP needs to load shared libraries and the class library bytecode.
-The recommended method is to use the environment variable
-LD_LIBRARY_PATH to provide a colon separated list of directories in
-which to look for GNU Classpath's shared libraries. The example below
-assumes the user built and installed GNU Classpath without modifing
-the default prefix.
-</p>
-<UL>
- <LI>Set the LD_LIBRARY_PATH variable (assumes Bash shell)</LI>
- <OL>
- <LI><tt>export LD_LIBRARY_PATH=/usr/local/classpath/lib/classpath</tt></LI>
- </OL>
-</UL>
-<UL>
- <LI>Set the CLASSPATH variable (ORP doesn't yet use this but it
- makes the command line easier).</LI>
- <OL>
- <LI><tt>export CLASSPATH=/usr/local/classpath/share/classpath/:.</tt></LI>
- </OL>
-</UL>
-<UL>
- <LI>Running HelloWorld with ORP</LI>
- <OL>
- <LI>Create a <tt>HelloWorld.java</tt> file and compile to a class file
- with <tt>jikes</tt> or <tt>gcj -C</tt></LI>
- <LI><tt>orp-1.0.9/mains/orp/Linux/dbg/orp -swapjit 0 1 -classpath
- $CLASSPATH HelloWorld</tt></LI>
- </OL>
-</UL>
-<p>
-ORP contains two JITs at this time. By default ORP uses a
-so-called JIT 3 and for some things it appears to have more problems
-than when using JIT 1. This is the reasoning behind adding the
--swapjit 0 1 argument to ORP. ORP does not have the ability at this
-time to execute raw bytecode and must use one of these two JIT
-compilers.
-</p>
-</en>
-<footer>
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml b/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml
deleted file mode 100644
index fe5181b..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/19990206.wml
+++ /dev/null
@@ -1,128 +0,0 @@
-#!wml --include=..
-
-<set-var last-modified-author="cbj">
-
-##
-# Ignore <en> tags without removing them (may be used in future)
-#
-<define-tag en endtag=required>
-%body
-</define-tag>
-
-#include <include/layout.wml>
-
-<subject "GNU Classpath 0.00 Annoucement (1999-02-06)">
-<h1>GNU Classpath 0.00 Annoucement (1999-02-06)</h1>
-
-<p>
-<en>
-I am pleased to announce the first development release of GNU Classpath,
-a project to create a free software replacement for Sun's proprietary
-Java class libraries. The project is initially providing class library
-support for the Japhar JVM.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.00 can be downloaded from:
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.00.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partial and non-functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and methods
-are implemented in this release, but most are. The major missing piece
-of core functionality is java.text. Many of the implemented classes are
-already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.07 be installed. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need the Sun JDK installed if you elect to recompile the Java
-classes.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml b/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml
deleted file mode 100644
index 28a3992..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/20001120.wml
+++ /dev/null
@@ -1,137 +0,0 @@
-#!wml --include=..
-
-
-<set-var last-modified-author="cbj">
-##
-# Ignore <en> tags without removing them (may be used in future)
-#
-<define-tag en endtag=required>
-%body
-</define-tag>
-
-
-#include <include/layout.wml>
-
-<subject "GNU Classpath 0.01 Annoucement (2000-11-20)">
-<h1>GNU Classpath 0.01 Annoucement (2000-11-20)</h1>
-
-<p>
-<en>
-I am pleased to announce a new development release of GNU Classpath,
-a project to create a free software replacement for Sun's proprietary
-Java class libraries. The project is initially providing class library
-support for the Japhar JVM. There are a few other JVMs which have taken
-the project libraries and used them in their own projects as well.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.01 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.01.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partial and non-functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.09 be installed. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need IBM's Jikes Java compiler installed if you elect to
-recompile the Java classes and Sun's 1.1.8 JDK javah installed to
-create native header files. RPMs compatible with Red Hat 7 have been
-created of Japhar, NSPR, a cross platform thread library Japhar uses,
-and GNU Classpath. Installing onto a Gnome workstation should
-provide the rest of the required libraries automatically. Otherwise,
-you may need to install libart and other packages detailed more
-precisely in the HACKING file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-<p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml b/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml
deleted file mode 100644
index 36a0d8b..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/20010106.wml
+++ /dev/null
@@ -1,141 +0,0 @@
-#!wml --include=..
-
-<set-var last-modified-author="cbj">
-
-##
-# Ignore <en> tags without removing them (may be used in future)
-#
-<define-tag en endtag=required>
-%body
-</define-tag>
-
-#include <include/layout.wml>
-
-<subject "GNU Classpath 0.02 Annoucement (2001-01-05)">
-<h1>GNU Classpath 0.02 Annoucement (2001-01-05)</h1>
-
-
-<p>
-<en>
-I am pleased to announce a new development
-release of GNU Classpath, a project to create a free software
-replacement for Sun's proprietary Java class libraries. The project
-is initially providing class library support for the Japhar JVM, but
-will soon provide out of the box support SableVM, Intel's ORP, and
-Kaffe. The major improvements for this release are the addition of a
-correct security policy file and exception stack traces are now
-printed when using Japhar.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.02 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.02.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following java packages are supported:
-</en>
-</p>
-<UL>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.lang.reflect</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.security (partially functioning)</LI>
- <LI>java.security.acl</LI>
- <LI>java.security.interfaces</LI>
- <LI>java.util</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the Java 1.2 spec.
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires that Japhar 0.09 be installed along with a
-single patch to Japhar 0.09 included with the release. Information on
-obtaining Japhar is available from <createlink url="http://www.hungry.com/old-hungry/products/japhar/"
-name="http://www.hungry.com/old-hungry/products/japhar/">. A working C compiler is also required. You
-will need IBM's Jikes Java compiler installed if you elect to
-recompile the Java classes and Sun's 1.1.8 JDK javah installed to
-create native header files. RPMs compatible with Red Hat 7 have been
-created of Japhar, NSPR, a cross platform thread library Japhar uses,
-and GNU Classpath. Installing onto a Gnome workstation should provide
-the rest of the required libraries automatically. Otherwise, you may
-need to install libart and other packages detailed more precisely in
-the HACKING file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-This is a development release only. You should only install it if you
-are interested in Classpath development or reporting bugs. We appreciate
-both. You might also be interested if you enjoy installing random alpha
-software.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project has a web page at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-and
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-
-Information on our mailing list is available at the web site.
-</en>
-</p>
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml b/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml
deleted file mode 100644
index 2833d93..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/20020208.wml
+++ /dev/null
@@ -1,166 +0,0 @@
-#!wml --include=..
-
-<set-var last-modified-author="mjw">
-
-##
-# Ignore <en> tags without removing them (may be used in future)
-#
-<define-tag en endtag=required>
-%body
-</define-tag>
-
-#include <include/layout.wml>
-
-<subject "GNU Classpath 0.03 Announcement (2002-02-08)">
-<h1>GNU Classpath 0.03 Announcement (2002-02-08)</h1>
-
-
-<p>
-<en>
-We are pleased to announce a new development release of GNU Classpath.
-GNU Classpath, Essential Libraries for Java, is a project to create free
-core class libraries for use with virtual machines and compilers for the
-Java language.
-</en>
-</p>
-<p>
-<en>
-New in this release are the addition of java.util.zip and java.rmi
-packages, VM independent jni.h, more flexible build environment to
-separate class and native code generation, out of the box support for
-the ORP VM, and lots of bug fixes and updates to make GNU Classpath more
-compliant with the 1.2, 1.3 and 1.4 API specification. The copyleft
-has been clarified and all code in the library is now distributed under
-the same terms.
-</en>
-</p>
-<p>
-<en>
-Here are the answers to some questions you might have about this project
-and this release.
-</en>
-</p>
-<p>
-<en>
-1). Where can I get it?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath 0.03 can be downloaded from:
-
-<createlink url="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz"
- name="ftp://alpha.gnu.org/pub/gnu/classpath/classpath-0.03.tar.gz">
-</en>
-</p>
-<p>
-<en>
-2). What is included?
-</en>
-</p>
-<p>
-<en>
-The following packages (some with subpackages) are supported:
-</en>
-</p>
-<UL>
- <LI>java.applet (untested)</LI>
- <LI>java.awt (very experimental)</LI>
- <LI>java.beans</LI>
- <LI>java.io</LI>
- <LI>java.lang</LI>
- <LI>java.math</LI>
- <LI>java.net</LI>
- <LI>java.rmi</LI>
- <LI>java.security (partially functioning)</LI>
- <LI>java.sql</LI>
- <LI>java.text (untested)</LI>
- <LI>java.util</LI>
- <LI>java.util.jar</LI>
- <LI>java.util.zip</LI>
-</UL>
-<p>
-<en>
-This is enough to run many non-awt programs. Not all classes and
-methods are implemented in this release, but most are. Many of the
-implemented classes are already up to the 1.2 API spec. Some are
-already compliant with the 1.3 and (preliminary) 1.4 API specification.
-
-More information on the current status of each package can be found at
-<createlink url="http://www.gnu.org/software/classpath/status.html"
- name="http://www.gnu.org/software/classpath/status.html">
-</en>
-</p>
-<p>
-<en>
-3). What is required to build/install/run?
-</en>
-</p>
-<p>
-<en>
-GNU Classpath requires a working GNU build environment and a byte code
-compiler such as jikes, gcj or kjc. When creating native code you will
-also need a working C compiler and up to date Gnome development libraries
-(gtk+, libart and gdk-pixbuf). More information on the precise version
-numbers for the tools and libraries can be found in the INSTALL file.
-</en>
-</p>
-<p>
-<en>
-4). What platforms and VMs are supported?
-</en>
-</p>
-<p>
-<en>
-GNU/Linux is the only platform that has been tested. We plan to
-eventually support many others.
-</en>
-</p>
-<p>
-<en>
-This release support ORP 1.0.9 out of the box. But other compilers and
-virtual machines such as gcj, Kissme, SableVM, Jupiter and Jaos also work
-with slightly customized versions of GNU Classpath. Please check if there
-is a customized version available for the VM you use before trying the bare
-bones GNU Classpath release. We are working with the VM creators to keep
-the differences between the core classes as small as possible.
-</en>
-</p>
-<p>
-<en>
-5). Who should use this software?
-</en>
-</p>
-<p>
-<en>
-Although it is already capable of supporting many Java applications,
-this is a development release. As such, there are still many unfinished
-components, and some problems are to be expected. You should install it
-if you are interested in Classpath development or reporting bugs. We
-appreciate both.
-</en>
-</p>
-<p>
-<en>
-6). Where do I go for more information?
-</en>
-</p>
-<p>
-<en>
-The project home page with information on our mailing list can be found at
-
-<createlink url="http://www.classpath.org/" name="http://www.classpath.org/">
-
-or
-
-<createlink url="http://www.gnu.org/software/classpath/classpath.html"
- name="http://www.gnu.org/software/classpath/classpath.html">
-</en>
-</p>
-<p>
-<en>
-The bug database, CVS, task-manager and latest news can be found on Savannah at
-<createlink url="http://savannah.gnu.org/projects/classpath/"
- name="http://savannah.gnu.org/projects/classpath/">
-</en>
-</p>
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/Makefile b/libjava/classpath/doc/www.gnu.org/downloads/Makefile
deleted file mode 100644
index 9f21702..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html: %.wml ../include/macros.wml ../include/layout.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/downloads/
-
diff --git a/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml b/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml
deleted file mode 100644
index 3f0180d..0000000
--- a/libjava/classpath/doc/www.gnu.org/downloads/downloads.wml
+++ /dev/null
@@ -1,229 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-##
-#
-# Special Tags
-#
-
-<:
-sub mylink {
- my ($name, $url) = @_;
-
- if ($url eq "") {
- return "not available";
- } else {
- return '<a href="$url">$name</a>';
- }
-}
-:>
-
-<define-tag maybelink>
- <preserve name>
- <preserve url>
- <set-var %attributes>
- <:{
- my $name = qq|<get-var name>|;
- my $url = qq|<get-var url>|;
-
- if ($url eq '') {
- print "not available";
- } else {
- print "<a href=\"$url\">$name</a>";
- }
- }:>
- <restore url>
- <restore name>
-</define-tag>
-
-<define-tag download-block endtag=required>
- <div align="center">
- <table cellspacing="2" cellpadding="4">
- <tr><th>Version</th><th colspan="2">Links</th></tr>
- %body
- </table>
- </div>
-</define-tag>
-
-<define-tag download>
- <preserve date>
- <preserve version>
- <preserve url>
- <preserve notes>
- <set-var %attributes>
-
- <tr bgcolor="#CCCCCC">
- <td align="center"><strong><get-var version></strong> / <get-var date></td>
- <td align="center"><maybelink name="download" url="<get-var url>"></td>
- <td align="center">[ <maybelink name="release notes" url="<get-var notes>"> ]</td>
- </tr>
-
- <restore notes>
- <restore url>
- <restore version>
- <restore date>
-</define-tag>
-
-<set-var last-modified-author="prk">
-
-<subject "GNU Classpath Downloads">
-
-<box>
-<boxtitle><a name="downloads">Classpath Downloads::Current Version</a></boxtitle>
-
-<boxitem>
-
-<download-block>
-
-<download
- date="13 January 2006"
- version="0.20"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.20.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20060113.html"
->
-
-<!-- download
- date="yesterday"
- version="tarball"
- url=""
- notes=""
---->
-
-</download-block>
-</boxitem>
-
-
-<boxtitle><a name="downloads">Classpath Downloads::Archive</a></boxtitle>
-
-<boxitem>
-
-<download-block>
-<download
- date="02 November 2005"
- version="0.19"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.19.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20051102.html"
->
-<download
- date="06 September 2005"
- version="0.18"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.18.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050906.html"
->
-<download
- date="15 July 2005"
- version="0.17"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.17.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050715.html"
->
-<download
- date="30 June 2005"
- version="0.16"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.16.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050630.html"
->
-<download
- date="29 April 2005"
- version="0.15"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.15.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050429.html"
->
-<download
- date="26 February 2005"
- version="0.14"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.14.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050226.html"
->
-
-<download
- date="6 January 2005"
- version="0.13"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.13.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20050107.html"
->
-
-<download
- date="15 November 2004"
- version="0.12"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.12.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20041115.html"
->
-
-<download
- date="13 September 2004"
- version="0.11"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.11.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20040913.html"
->
-<download
- date="12 July 2004"
- version="0.10"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.10.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20040712.html"
->
-<download
- date="02 May 2004"
- version="0.09"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.09.tar.gz"
- notes="http://www.gnu.org/software/classpath/announce/20040502.html"
->
-<download
- date="13 Mar. 2004"
- version="0.08"
- url="ftp://ftp.gnu.org/gnu/classpath/classpath-0.08.tar.gz"
->
-<download
- date="05 Dec. 2003"
- version="0.07"
- url="ftp://alpha.gnu.org/gnu/classpath/classpath-0.07.tar.gz"
->
-
-<download
- date="09 Sep. 2003"
- version="0.06"
- url="ftp://alpha.gnu.org/gnu/classpath/classpath-0.06.tar.gz"
- notes="http://savannah.gnu.org/forum/forum.php?forum_id=2466"
->
-
-<download
- date="16 Feb. 2003"
- version="0.05"
- notes="http://mail.gnu.org/archive/html/classpath/2003-02/msg00043.html"
->
-
-<download
- date="06 May. 2002"
- version="0.04"
- notes="http://mail.gnu.org/archive/html/classpath/2002-05/msg00061.html"
->
-
-<download
- date="08 Feb. 2002"
- version="0.03"
- notes="downloads/20020208.html"
->
-
-<download
- date="06 Jan. 2001"
- version="0.02"
- notes="downloads/20010106.html"
->
-
-<download
- date="20 Nov. 2000"
- version="0.01"
- notes="downloads/20001120.html"
->
-
-<download
- date="06 Feb. 1999"
- version="0.00"
- notes="downloads/19990206.html"
->
-
-
-</download-block>
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/events/Makefile b/libjava/classpath/doc/www.gnu.org/events/Makefile
deleted file mode 100644
index 6214527..0000000
--- a/libjava/classpath/doc/www.gnu.org/events/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html: %.wml ../include/macros.wml ../include/layout.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/events/
-
diff --git a/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml b/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml
deleted file mode 100644
index 78fe412..0000000
--- a/libjava/classpath/doc/www.gnu.org/events/escape_fosdem05.wml
+++ /dev/null
@@ -1,149 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<set-var last-modified-author="mjw">
-<subject "Escape the Java Trap @ Fosdem 2005">
-
-<box>
-<boxitem>
-<h2>Escape the Java Trap! - GNU Classpath Hacker Room</h2>
-
-<i>Fosdem, Saturday/Sunday 26/27 February 2005, Brussels, Belgium</i>
-<p>
-<b>UPDATE: Presentations are now linked below!</b>
-<p>
-The Fosdem organisation has generously offered the developers of
-various projects around GNU classpath the opportunity to meet face
-to face in their own developer room.
-<p>
-We have brought together a wide range of different speakers from
-various projects that together provide a free software alternative to
-the proprietary java platform. Developers from these various projects
-will come from all over the world to discuss cooperation and to make
-development plans to the next year.
-<p>
-You are very welcome to join us and learn about the IKVM architecture
-and how to freely mix and match traditional java and .net applications
-and libraries, how GNU and Apache developers can and should work
-together, how you can do rapid GNOME desktop development through
-java-gnome, how researchers are using GNU Classpath to do cutting edge
-research into Just In Time compilation, see demonstrations of
-lightning fast native eclipse, learn what will be possible with GNU
-Classpath and GCC 4.0, whether Kaffe will ever release their version
-1.1.5, what we think about compatibility, freedom vs control and
-learn how you can create your own GNU Compiler Collection frontend for
-languages such as the 1.5 java programming language.
-<p>
-Full schedule and abstracts at <a
-href="http://www.fosdem.org/2005/index/dev_room_classpath/schedule">http://www.fosdem.org/2005/index/dev_room_classpath/schedule</a>
-<p>
-</boxitem>
-
-<boxitem>
- <h3>Saturday 14:00 - 17:00 - "Building Bridges"</h3>
-
- <p>
- Reaching out to other communities.
- How can GNU Classpath, GCC/GCJ and Kaffe hackers
- learn from and work together with others?
- </p>
- <p>
- <b>14:00 - 14:50</b> <i>Jeroen Frijters</i>
- <a href="http://www.frijters.net/fosdem2005.sxi">IKVM.NET -- Motivation and Architecture</a> (sxi)
- </p>
- <p>
- <b>15:00 - 15:50</b> <i>Leo Simons</i>
- <a href="http://www.apache.org/~leosimons/presentations/fosdem2005/gump@fosdem.pdf">Apache Gump -- Continuous integration on steroids</a> (pdf)
- </p>
-
- <p>
- <b>16:00 - 16:50</b> <i>Jeffrey Morgan</i>
- <a href="http://java-gnome.sourceforge.net/presentations/fosdem05/img0.html">Liberation through Binding! -- Using java-gnome to build desktop applications</a> (html)
- </p>
- <p>
- <b>17:00 - 17:30</b> <i>Christian Thalinger</i>
- <a href="http://www.complang.tuwien.ac.at/cacaojvm/papers/fosdem2005.ps">CACAO -- From the fastest JIT to a JVM</a> (ps)
- </p>
-<p>
-</boxitem>
-
-<boxitem>
- <h3>Sunday 10:00 - 13:00 - "Demo Time!"</h3>
- <p>
- Public presentations and overviews of the current state of the
- GNU Classpath library , GCC/GCJ(X) compiler and Kaffe runtime.
- </p>
- <p>
- <b>10:00 - 10:50</b>
- <i>Thomas Fitzsimmons</i>
- <a href="http://people.redhat.com/fitzsim/fosdem-2005/html/fosdem-2005-presentation.html">Free AWT and Swing -- The GUI parts of GNU Classpath</a> (html)
- (<a href="http://people.redhat.com/fitzsim/fosdem-2005/fosdem-2005-presentation.sxi">sxi</a>)
- </p>
- <p>
- <b>11:00 - 11:50</b>
- <i>Tom Tromey</i>
- <a href="http://www.peakpeak.com/~tromey/fosdem-2005.sxi">GCJX -- Writing a new GCC front end</a> (sxi)
- </p>
- <p>
- <b>12:00 - 12:50</b>
- <i>Dalibor Topic</i>
- <a href="http://www.kaffe.org/~robilad/kaffe-past-present-future-FOSDEM05.pdf">Kaffe -- Past, Present and Future</a> (pdf)
- </p>
-<p>
-<boxitem>
-
-<boxitem>
- <b>Extra (13h15 - 13h30) GCJ & Native Eclipse</b>
- <p>
- <i>Bryce McKinlay</i> -- Lightning Talk.
- GCJ and the Eclipse IDE: desktop application development with Java-gnome.
- </p>
-<p>
-</boxitem>
-
-<boxitem>
- <h3>Sunday 14:00 - 17:00 - "The Future"</h3>
- <p>
-
- Technical Planning Session
- <p>
- This 3 hour session for hackers will consist of:
- <ul>
- <li> A general part explaining what is needed.
- <li> Splitting up in groups to discuss specific topics to
- solve the problems and make development plans.
- <li> A short present by each group about the ideas discussed.
- </ul>
- <p>
- Please add ideas and suggestions to the WIKI:
-<a href="http://developer.classpath.org/mediation/Fosdem2005">http://developer.classpath.org/mediation/Fosdem2005</a>
-<p>
-</boxitem>
-
-<boxitem>
-<b>Additional Resources:</b>
-<ul>
-<li><createlink name="Free But Shackled - The Java Trap"
- url="http://www.gnu.org/philosophy/java-trap.html">
- (by Richard Stallman)
-</li>
-</ul>
-<p>
-<boxitem>
-
-<boxitem>
-<b>Official links:</b>
-<ul>
-<li><createlink name="FOSDEM Homepage"
- url="http://www.fosdem.org/">
-</li>
-<li><createlink name="GNU Classpath Room"
- url="http://www.fosdem.org/2005/index/dev_room_classpath/">
-</li>
-<li><createlink name="GNU Classpath Room Schedule"
- url="http://www.fosdem.org/2005/index/dev_room_classpath/schedule/">
-</li>
-</ul>
-<boxitem>
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/events/events.wml b/libjava/classpath/doc/www.gnu.org/events/events.wml
deleted file mode 100644
index 7d9514b..0000000
--- a/libjava/classpath/doc/www.gnu.org/events/events.wml
+++ /dev/null
@@ -1,73 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath Events">
-
-<box>
-<boxitem>
-<strong>Upcoming Events:</strong><br>
-<ul>
-<li>[25+26 Feb. 2006] FOSDEM'06 in Brussels, Belgium. [<createlink name="GNU Classpath and friends" url="events/fosdem06.html">]</li>
-</ul>
-</boxitem>
-
-<boxitem>
-<strong>Past Events:</strong><br>
-<ul>
-
-<li>
-[1-5 Aug 2005] <a href="http://conferences.oreillynet.com/os2005/">OSCON</a>, Portland, Oregon - USA
-<ul>
-<li><a href="http://conferences.oreillynet.com/cs/os2005/view/e_sess/6730">The State of Free JVMs</a>
-Tom Tromey</li>
-</ul>
-
-<li>
-[29-31 May 2005] <a href="http://2005.guadec.org/">Guadec</a>, Stuttgart - Germany
-<ul>
-<li><a href="http://2005.guadec.org/schedule/gnometalks.html#eclipseyou">The Eclipse IDE and you</a>
-Ben Konrath and Andrew Overholt
-(<a href="http://overholt.ca/eclipse/GUADEC2005-EclipseIDE.pdf">slides</a>)</li>
-<li><a href="http://2005.guadec.org/schedule/gnometalks.html#javagnome">Eclipse, Java-GNOME, and GCJ</a>
-Andrew Cowie and Ben Konrath</li>
-</ul>
-<p>
-<li>
-[1-4 Jun. 2005] <a href="http://fisl.softwarelivre.org/6.0/">6th International Free Software Forum</a> (fisl), Porto Alegre/RS, Brazil
-<ul>
-<li><a href="http://fisl.softwarelivre.org/papers/pub/programacao/360">Encontro Javali: Escape the Java Trap: GNU Classpath and Kaffe</a>
-Dalibor Topic and Mark Wielaard
-(<a href="http://www.klomp.org/mark/classpath/GNUClasspathKaffe/">slides</a>)</li>
-</ul>
-<p>
-<li>
-[22-25 Jun 2005] <a href="http://www.linuxtag.org/">LinuxTag</a>, Karlsruhe - Germany
-<ul>
-<li><a href="http://www.linuxtag.org/vcc/details.pl?id=162">GNU Classpath</a>
-Robert Schuster (in German)
-(<a href="http://www.inf.fu-berlin.de/%7Erschuste/GNUClasspath-LinuxTag2005-English.pdf">slides</a>)</li>
-<li><a href="http://www.linuxtag.org/vcc/details.pl?id=166">GCJ and Classpath: A Free Implementation of the Java programming language</a>
-Andrew Haley (in English)
-(<a href="http://people.redhat.com/~aph/linuxtag.tar.gz">slides</a>)</li>
-</ul>
-<p>
-<li>[26+27 Feb. 2005] FOSDEM'05 in Brussels, Belgium. [<createlink name="Escape The Java Trap!" url="events/escape_fosdem05.html">]
-<p>
-<li>[21+22 Feb. 2004] FOSDEM'04 in Brussels, Belgium. [<createlink name="report" url="events/fosdem04.html">]
-<p>
-<li>[14+15 Oct. 2003] Linux Kongress '03 in Saarbr&uuml;cken, Germany.
-<ul>
-<li>Hacking on the VM Interface: GNU Classpath workshop, Mark Wielaard
-(<a href="http://www.klomp.org/mark/classpath/slides/gnu_classpath_workshop.html">slides</a>).
-<li>Agile2D: implementing Graphics2D over OpenGL, Jean-Daniel Fekete
-(<a href="http://www.klomp.org/mark/classpath/Agile2D.pdf">slides</a>).
-</ul>
-
-</ul>
-<br><br><br>
-</boxitem>
-
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml b/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml
deleted file mode 100644
index 257a7b6..0000000
--- a/libjava/classpath/doc/www.gnu.org/events/fosdem04.wml
+++ /dev/null
@@ -1,100 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath: FOSDEM'04">
-
-<box>
-<boxitem>
-<h2>GNU Classpath at FOSDEM'04</h2>
-
-Saturday, 21 February 2004
-
-A whole room was devoted to Free Java Developers. The following talks took place:
-<ul>
-<li><strong>GNU Classpath -- Core Classes for a Diversity of Free Java Virtual Machines</strong>, Sascha Brawer and Mark Wielaard (GNU Classpath)<br>
-[<createlink name="slides" url="http://www.dandelis.ch/people/brawer/articles/classpathFeb2004/">]<br>
-<i>Mark presented an overview of the GNU Classpath project, the current development state, and the problems encountered, in particular the ability to fit so many JVM with different requirements and constraints</i>
-
-<li><strong>SableVM - the Apache of Java Virtual Machines</strong>, Grzegorz B. Prokopski (SableVM)<br>
-[<createlink name="slides" url="http://gadek.debian.net/FOSDEM/">]<br>
-<i>Grzegorz presented the SableVM JVM and its technical details; a whole unter the hood tour, including the use of m4 macro expansion for generating the VM code and an overview of interpreter and JIT techniques used.</i><br>
-
-
-<li><strong>fbAWT - Direct to your buffer</strong>, Stephane Meslin-Weber<br>
-<i>Stephane presented his project to map AWT directly to a framebuffer and VNC, and made a short demo of it.</i>
-
-</ul>
-
-Sunday, 22 February 2004
-
-There was a whole track of Java-related presentations:
-
-<ul>
-<li><strong>JOnAS</strong>, Florent Benoit (WebObjects)
-<li><strong>GCJ</strong>, Tom Tromey (GCJ, Red Hat)<br>
-[<createlink name="slides" url="http://www.peakpeak.com/~tromey/FOSDEM/gcj.html">]<br>
-<i>Tom presented the GCJ project and its goals. Many details on performance and status.</i><br>
-
-<li><strong>NetBeans</strong>, Ian Formanek (Sun)
-<li><strong>Java Security: How Free Software Is Secured Using the Java Language
-</strong>, Sascha Brawer (GNU Classpath, Dandelis)<br>
-Abstract: After a general introduction to why Java seems a reasonable choice for
-writing large and robust free software packages, the talk discusses the
-security features of the Java platform. It is shown how several actors
-play together to ensure type safety, encapsulation and declarative access
-control. Four concrete denial-of-service attacks illustrate the
-importance of enhancing the platform by techniques for managing resource
-consumption.
-<br>[<createlink name="slides" url="http://www.dandelis.ch/people/brawer/articles/classpathSecurity/">]
-</ul>
-
-</ul>
-
-In the afternoon, more discussions took place in the Free Java Developers room.
-
-<ul>
-<li><strong>Packaging Free Java Applications For Free Operating Systems</strong>, Dalibor Topic (Kaffe) and Arnaud Vandyck (Debian)<br>
-[<createlink name="Wiki" url="http://java.debian.net">]<br>
-<i>Dalibor and Arnaud explained the problems encountered while packaging Java for Debian.</i>
-
-<li><strong>Free Discussion</strong><br>
-<i>A proposal by Andrew Haley (GCJ) for the standardization of the JIT interface in the VM was discussed.</i>
-
-</ul>
-
-</boxitem>
-<boxitem>
-In Mark Wielaard's words
-<ul>
-<li> <i>There were between 20 and 50 people following the different
-presentations, talks and discussions in our developer room. And Tom
-Tromey his talk on gcj in the big room got 120 interested people.</li>
-<li> <i>We could have had more in depth technical discussions. Most of the
-presentations now were more overviews of what was already there. Which
-is great for attracting new developers and explaining our goals to
-outsiders. But for next time we must really appoint people that lead
-some technical issue. Many thanks to Andrew for just standing up and
-starting the pluggable JIT interface discussion by telling how gcj would
-like to support it.
-</i>
-
-</ul>
-
-See his whole message in the <createlink name="mail archive" url="http://mail.gnu.org/archive/html/classpath/2004-02/msg00051.html">.
-</boxitem>
-<boxitem>
-Additional Resources:
-<ul>
-<li><createlink name="GNU Classpath's Flyer" url="http://www.klomp.org/mark/classpath/fosdem/"> (Kudos to Mark Wielaard)
-<li><createlink name="Group Picture" url="http://adorphuye.com/gallery/FOSDEM2004/IMGP0234"> (thanks to Stephane Meslin-Weber)
-</ul>
-
-Official links:
-<ul>
-<li><createlink name="FOSDEM Homepage" url="http://www.fosdem.org">
-<li><createlink name="FOSDEM Java Dev Room" url="http://www.fosdem.org/2004/index/dev_room_java/">
-<li><createlink name="FOSDEM Java Dev Room Schedule" url="http://www.fosdem.org/2004/index/dev_room_java/schedule/">
-</ul>
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/events/fosdem06.wml b/libjava/classpath/doc/www.gnu.org/events/fosdem06.wml
deleted file mode 100644
index 2623ef0..0000000
--- a/libjava/classpath/doc/www.gnu.org/events/fosdem06.wml
+++ /dev/null
@@ -1,191 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-<set-var last-modified-author="mjw">
-<subject "GNU Classpath and friends @ Fosdem 2006">
-
-<box>
-<boxitem>
-<h2>GNU Classpath and friends meeting during Fosdem 2006</h2>
-
-<i>Fosdem, Saturday/Sunday 25/26 February 2006, Brussels, Belgium</i>
-<p>
-The various free software library, runtimes, compiler and tool
-projects around GNU Classpath will meet in Brussel to discuss what has
-happened in the last year in the Free Software community and what the
-next year will bring us during Fosdem.
-<p>
-The 6th edition of FOSDEM (Free and Opensource Software Developers'
-European Meeting) will take place on February 25+26 2006 in Brussels
-(Belgium), at the Solbosch Campus of the ULB (Free University of
-Brussels). FOSDEM is a free and non-commercial event for the community
-and organized by the community.
-See <a href="http://www.fosdem.org/">http://www.fosdem.org/</a>.
-</boxitem>
-
-<boxitem>
- <h3>Saturday from 13:00 to 17:00 - "End-User talks"</h3>
-
- <p>
- Presentations that show what cool stuff can be done with the Free
- Stack right now.
- </p>
-
- <p>
- <b>Putting the 'Free' into JFreeChart</b>
- <i>Dave Gilbert, JFreeChart Project Leader</i>
- <p>
- A review of the efforts to make JFreeChart work with GNU
- Classpath-based runtimes, including a brief history, a demonstration
- of the current state (using the java bindings for Cairo), and an
- overview of the work that remains to be done.
- </p>
- </p>
-
- <p>
- <b>Using Eclipse for GNU Classpath development</b>
- <i>Tom Tromey</i>
- <p>
- Learn how to setup a fully working development environment based
- on GNU Classpath in Eclipse that can be used to bootstrap the full
- free toolchain (and can be used to run Eclipse itself) in just 10
- minutes.
- </p>
- </p>
-
- <p>
- <b>Eclipse RCP and GCJ/GIJ</b>
- <i>Wayne Beaton</i>
- <p>
- Eclipse Rich Client Platform (RCP) is a runtime platform for
- delivering your Java applications on multiple platforms. RCP is far
- more than just a windowing toolkit; it is rich client "middleware"
- that provides a comprehensive framework for building and deploying
- applications that are modular, extensible, and updatable. The kinds
- of applications you can build with Eclipse RCP are limited only by
- your imagination. During this talk, we will discuss how the Eclipse
- RCP can be used in conjunction with the Eclipse Eco-system and
- GCJ/GIJ to build high quality applications.
- </p>
- </p>
-
-<p>
-</boxitem>
-
-<boxitem>
- <h3>Sunday from 09:00 to 13:00 - "Developer talks"</h3>
-
- <p>
- Presentations of (core) libraries and runtimes that are in progress,
- made a lot of progress in the last year and are in active development.
- </p>
-
- <p>
- <b>Free Swing, past, present and future</b>
- <i>Roman Kennke</i>
- <p>
- An overview of that state of Free Swing one year ago, what has been
- done in the meantime, what still must be done and which applications
- work now.
- </p>
- </p>
-
- <p>
- <b>The Free CORBA comes</b>
- <i>Dr Audrius Meskauskas</i>
- <p>
- If the Free world does not want to step back in the battle, we need
- a complete set of the Free tools for advanced communication over
- the network. For our CORBA implementation we needed:
- <p>
- <ol>
- <li> Free. No classes with restricted license.
- <li> Fully workable, interoperable and pass tests, recognized by
- the CORBA user community as serious (we needed to find a well
- known Free testing suite).
- <li> Properly commented, being ready for the long life in the Free
- world.
- <li> No pressure to use the outdated approaches.
- CORBA 3.0.3 and jdk 1.5.
- </ol>
- <p>
- To reach these goals, we have chosen for implementing a clean room
- implementation, using the published standard specifications only.
- During the recent year of the GNU Classpath development, this goal
- is in large degree achieved. The important directions of future
- development could be providing features that are outside the scope
- of the both CORBA standard and Sun API, but included in the near all
- proprietary implementations (SSH, HTTP and other bridges, get rid of
- rmic code generator for RMI/IIOP, fault tolerant behavior, reduced
- the footprint and others).
- </p>
- </p>
-
- <p>
- <b>The JamVM runtime</b>
- <i>Robert Lougher</i>
- <p>
- An overview of the JamVM virtual machine, with comparisons to other
- GNU Classpath runtimes, and a section on the VM interface.
- </p>
- </p>
-
- <p>
- <b>Integrating Vmgen-based interpreters</b>
- <i>Christian Thalinger</i>
- <p>
- Vmgen is a tool for writing efficient interpreters. The Cacao
- runtime recently added a Vmgen based interpreter in addition to
- the JIT engine.
- </p>
- </p>
-
-<p>
-<boxitem>
-
-<boxitem>
- <h3>Sunday from 14:00 to 17:30 - "The Future"</h3>
-
- <p>
- Interactive technical hacker discussions on how to integrate
- the projects more and move forward in the next year.
- </p>
-
- <p>
- <b>State of the world, beyond japi</b>
- <i>Mark Wielaard, GNU Classpath Maintainer</i>
- <p>
- After a short overview of the various free stacks, libraries,
- compilers, tools and runtimes this session is mostly open discussion
- about what work remains to be done and how to integrate the various
- efforts better. Ideas for work items welcome.
- </p>
- </p>
-
-<p>
-</boxitem>
-
-<boxitem>
-<b>Additional Resources:</b>
-<ul>
-<li><createlink name="Free But Shackled - The Java Trap"
- url="http://www.gnu.org/philosophy/java-trap.html">
- (by Richard Stallman)
-</li>
-<li><createlink name="Escaping the Java Trap: A practical road map to the Free Software and Open Source alternatives"
- url="http://developer.classpath.org/support/">
-</li>
-</ul>
-<p>
-</boxitem>
-
-<boxitem>
-<b>Official links:</b>
-<ul>
-<li><createlink name="FOSDEM Homepage"
- url="http://www.fosdem.org/">
-</li>
-</ul>
-</boxitem>
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/external.wml b/libjava/classpath/doc/www.gnu.org/external.wml
deleted file mode 100644
index f3624a8..0000000
--- a/libjava/classpath/doc/www.gnu.org/external.wml
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "include/layout.wml"
-
-
-##
-#
-# Special Tags
-#
-
-<define-tag tool endtag=required>
- <preserve maintainer>
- <preserve name>
- <preserve url>
- <set-var %attributes>
-
- <boxtitle><a name="<get-var name>">Classpath External Tools::<get-var name></a></boxtitle>
- <boxitem>
- <table cellspacing="4">
- <tr><td valign="top"><strong>Maintainer</strong></td><td><get-var maintainer></td></tr>
- <tr><td valign="top"><strong>Link</strong></td><td><createlink name="<get-var url>" url="<get-var url>"></td></tr>
- <tr><td valign="top"><strong>Description</strong></td><td>%body</td></tr>
- </table>
- </boxitem>
- <restore url>
- <restore name>
- <restore maintainer>
-</define-tag>
-
-
-
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath External Tools">
-
-<box>
-<boxtitle><a name="packages">Classpath::External Packages</a></boxtitle>
-
-<boxitem>
-<en>
-<p>Below is a table of providers for free core packages not part of GNU Classpath
-</p>
-
-<project-list>
-<project name="GNU ClasspathX" url="http://www.gnu.org/software/classpathx/">
-<ul>
-<li>javax.activation
-<li>javax.infobus
-<li>javax.xml
-<li>javax.mail
-<li>javax.servlet
-<li>javax.speech
-</ul>
-</project>
-
-<project name="GNU Crypto" url="http://www.gnu.org/software/gnu-crypto/">
-<ul>
-<li>javax.crypto
-</ul>
-</project>
-
-<project name="Jessie" url="http://www.nongnu.org/jessie/">
-<ul>
-<li>javax.net.ssl
-</ul>
-</project>
-
-<project name="Tritonus" url="http://tritonus.org/">
-<ul>
-<li>javax.sound
-</ul>
-</project>
-
-</project-list>
-</en>
-
-</boxitem>
-
-<tool
- name="Jalopy"
- maintainer="Tom Tromey"
- url="ftp://sources.redhat.com/pub/java/jalopy-console-1.0.4.tar.gz"
->
-Jalopy is a pretty-printer to format Java code. To do our coding style you also need this
-<a href="ftp://sources.redhat.com/pub/java/GNU.xml">style definition file</a>.
-</tool>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/faq/Makefile b/libjava/classpath/doc/www.gnu.org/faq/Makefile
deleted file mode 100644
index 584db90..0000000
--- a/libjava/classpath/doc/www.gnu.org/faq/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-ifndef WMK
- export WMK=wmk
-endif
-ifndef WML
- export WML=wml
-endif
-
-WML_SRC = $(wildcard *.wml)
-WML_OBJS = $(patsubst %.wml,%.html,$(WML_SRC))
-
-%.html: %.wml ../include/macros.wml ../include/layout.wml
- $(WML) -o $@ $<
-# -rm -f $(patsubst %.wml,%.html,$<)
-
-all : $(WML_OBJS) subdirs
-
-.PHONY : clean
-clean :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) clean";)
- -rm -f *.html
-
-.PHONY : subdirs
-subdirs :
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE)";)
-
-.PHONY : publish
-publish :
- @sh -c "if [ "$(CLASSPATH_WEBROOT)x" = x ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- @sh -c "if [ ! -d $(CLASSPATH_WEBROOT) ]; then echo 'You must set CLASSPATH_WEBROOT in your environment first'; exit 1; fi"
- $(foreach dir, $(SUBDIRS), sh -c "cd $(dir) && $(MAKE) publish";)
- -cp -f *.html $(CLASSPATH_WEBROOT)/faq/
-
diff --git a/libjava/classpath/doc/www.gnu.org/faq/faq.wml b/libjava/classpath/doc/www.gnu.org/faq/faq.wml
deleted file mode 100644
index 67ae91f..0000000
--- a/libjava/classpath/doc/www.gnu.org/faq/faq.wml
+++ /dev/null
@@ -1,607 +0,0 @@
-#!wml --include=..
-
-#include "include/layout.wml"
-
-##
-#
-# Special Tags
-#
-
-
-
-#
-# <faq-section name="XYZ>
-# <faq question="ABC">answer</faq>
-# <faq question="ABC">answer</faq>
-# </faq-section>
-#
-
-# the section counter
-#
-<set-var __SECCNT=1>
-
-<define-tag faq-section endtag=required>
- <preserve name>
- <set-var %attributes>
-{#FAQINDEX#:
- <boxtitle><get-var __SECCNT>. <get-var name></boxtitle>
- <boxitem>
-:#FAQINDEX#}
- <boxtitle><get-var __SECCNT>. <get-var name></boxtitle>
- <set-var __FAQCNT=1>
- <boxitem>%body</boxitem>
-{#FAQINDEX#:
- <br>
- </boxitem>
-:#FAQINDEX#}
- <increment __SECCNT>
- <restore name>
-</define-tag>
-
-<define-tag faq endtag=required>
-<preserve question>
-<set-var %attributes>
-{#FAQINDEX#:
- <strong><a href="faq/faq.html#faq<get-var __SECCNT>_<get-var __FAQCNT>"><get-var __SECCNT>.<get-var __FAQCNT> <get-var question></a></strong><br>
-:#FAQINDEX#}
- <h3><a name="faq<get-var __SECCNT>_<get-var __FAQCNT>"><get-var __SECCNT>.<get-var __FAQCNT> <get-var question></a></h3>
- %body
- <br>
-<increment __FAQCNT>
-<restore question>
-</define-tag>
-
-
-<set-var last-modified-author="prk">
-
-<subject "GNU Classpath FAQ">
-
-<box>
-{#FAQINDEX#}
-
-<faq-section name="introduction">
-<faq question="What is GNU Classpath?">
-<p>GNU Classpath is a set of essential libraries for supporting
-the Java programming language.</p>
-
-<p>Classpath serves the same role that <a
-href="http://www.gnu.org/software/libc/libc.html">libc</a> has for C,
-but is much richer in functionality. The broadness of the standard
-library is an important reason why Java has been so successful. For
-example, the library includes frameworks to convert between character
-encodings, for accessing relational databases, for building Graphical
-User Interfaces, for encryption, for logging, and for numerous other
-tasks that are needed to build complex applications.</p>
-
-</faq>
-
-<faq question="Why Java?">
-<p>On the GNU operating system, we want to run software independent of
-the programming language in which it was written. Because Java is
-widespread, and because Java has some nice features, we want to
-support Java as well.</p>
-
-</faq>
-
-<faq question="But isn't Java free already?">
-<p>Sun Microsystems, the company who has created Java, currently
-distributes the &#x201c;Java Development Kit&#x201d; and &#x201c;Java
-Runtime Environment&#x201d; at no cost. The former even comes with the
-source code of the standard class library. However, the &#x201c;Sun
-Community Source License&#x201d; <a
-href="http://www.gnu.org/licenses/license-list.html#SunCommunitySourceLicense">does
-not grant essential freedoms</a>, for example the right to distribute
-a modified version of the code.</p>
-
-<p>Therefore, Sun&#x2019;s implementation does not qualify as Free
-Software.</p>
-
-</faq>
-
-<faq question="What do we need to make Java free?">
-
-<p>Though it would be helpful if Sun would open their sources, this is not the
-most important step toward a free Java. Even more important for a free Java are:
-<ul>
-<li>Access to the TCK (Technology Compatibility Kits) on acceptable terms
-<li>Involvement in the JCP without contamination or other unacceptable
- constraints
-<li>Easing of the requirements on subsetting. The free software
- community doesn't work well with the "one big perfect release"
- model that Sun seems to want.
-</ul>
-
-<p>There was already a lot of discussions around this topic on other sites:
-<ul>
-<li><createlink name="Sys-Con: <i>Let's Bundle Free Java with Linux</i>, Says IBM's Sutor" url="http://sys-con.com/story/print.cfm?storyid=43969">
-<li><createlink name="Hacking Log 4.0: RE: JCP 2.6 - Are we there yet?" url="http://linuxintegrators.com/blog/acoliver/news/?permalink=0124.html">
-<li><createlink name="Javalobby: ESR - Open Letter to Sun: Let Java Go" url="http://www.javalobby.org/thread.jspa?forumID=61&threadID=11412">
-</ul>
-
-
-</faq>
-
-<faq question="Is GNU Classpath all that is needed for running Java programs?">
-<p>GNU Classpath is a free implementation of Java&#x2019;s standard
-library. To execute Java programs, it is also necessary to have a
-Java Virtual Machine (JVM). This component manages memory, enforces
-security restrictions, compiles Java bytecodes to the instruction set
-of your computer, and provides other runtime services. There exist
-several projects for <createlink name="free JVMs" url="stories.html#jvm">. Most use GNU Classpath as the
-up-stream source for their library.</p>
-
-<p>Java programs can also be compiled &#x201c;ahead of time,&#x201d;
-like C++ or other compiled languages. The GNU Compiler Collection
-(GCC) does this, and its Java library is mostly derived from GNU
-Classpath.</p>
-</faq>
-
-</faq-section>
-
-<faq-section name="licensing">
-
-<faq question="Under which licence is GNU Classpath released?">
-GNU Classpath is licensed under the GPL plus a special exception:
-
-<blockquote>
-<p>
-<code>
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-</code>
-</p>
-<p>
-<code>
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version.
-</code>
-</p>
-</blockquote>
-
-</faq>
-
-<faq question="Where can I find more about the GPL?">
-Please check the FSF FAQ on the GNU GPL: <createlink name="http://www.fsf.org/licenses/gpl-faq.html" url="http://www.fsf.org/licenses/gpl-faq.html">.
-</faq>
-
-<faq question="What does the exception allow me to do?">
-<p>If you combine GNU Classpath <em>with independent modules to produce an
-executable</em> you can <em>copy and distribute the resulting executable under
-terms of your choice</em>.</p>
-
-<p>So you can use and distribute GNU Classpath as is in your program without changing the license of your software.</p>
-</faq>
-
-<faq question="I have a question about licensing GNU Classpath. Who can I ask?">
-Direct such questions to <a href="mailto:licensing@gnu.org">licensing@gnu.org</a>. The FSF is the
-official copyright holder of Classpath and sets the distribution terms
-</faq>
-
-<faq question="How can I be sure that my application does not break the license?">
-The FSF has a GPL-compliance lab which offers consulting services for
-companies who are working to develop products that incorporate Free
-Software so that they can do so in ways that comply with the terms of
-the GPL and other Free Software licenses. If you are interested in this
-service, please write to <a href="mailto:compliance-lab@fsf.org">compliance-lab@fsf.org</a>.
-</faq>
-</faq-section>
-
-<faq-section name="Classpath Development">
-
-<faq question="I would like to contribute, where shall I start?">
-<p>See the <a
-href="docs/">documentation page</a>, especially the <a
-href="docs/hacking.html">GNU
-Classpath Hacker&#x2019;s Guide</a>, and pick up a <createlink name="task" url="tasks.html"> from the list!
-</faq>
-
-<faq question="Can I look at source code distributed with other
-implementations to get inspiration?">
-If you are going to contribute source code to GNU Classpath we must
-make sure that you have not studied the source code of the JDK/JRE or
-decompiled any of its classes. Furthermore you must not have signed
-any non-disclosure agreements with Sun or other companies in regard
-with java technology that might cover the core class libaries or
-tools. The reason for this requirement is that we want to make sure
-that Sun or any other company cannot rightfully claim that GNU
-Classpath infringes their copyright. You are therefore questioned
-about your experience with other implementations of similar source
-code and any agreements with companies you might have signed when you
-request to contribute to GNU Classpath.
-<p>
-Please note that this does not mean you cannot help GNU Classpath at
-all in such a case. Here is a list of things you can do instead:
-<ul>
- <li>write Mauve test cases</li>
- <li>write example applications demonstrating the usage of the packages</li>
- <li>writing/fixing helper programs (like japitools) and scripts</li>
- <li>report bugs</li>
- <li>help fixing the documentation</li>
- <li>help in other related Free software projects
- (e.g. virtual machine development,
- <createlink name="GUMP" url="http://gump.apache.org/">)
-</ul>
-<p>
-Here are some rough guidelines for deciding whether or not it would be
-wise to accept a contribution from someone that studied source code
-for another implementation of the core libraries or is under contract
-with some company covering implementations of core library classes.
-<p>
-If the developer got access to the source code by signing some
-contract (like the SCSL) with Sun then it would be best to examine
-that contract (by FSF legal) before deciding.
-<p>
-If the developer just accidentally saw some of the source code and had
-no intention (and didn't actually) study the implementation (with the
-intention of contributing to GNU Classpath) there is no problem.
-<p>
-Studying a proprietary implementation with the intention of
-implementing it (better) for GNU Classpath is a clear no-no.
-<strong>The general rule is that if you have looked at or studied any
-(proprietary) implementation of a package you should not work on that
-package for GNU Classpath.</strong> That is because it would be
-difficult to proof that you really did an independent
-implementation. Since what you create might look very similar (which
-is not unlikely). Working on something completely unrelated is OK (as
-long as there are no contractual obligations with Sun or some other
-company to not do this of course).
-<p>
-The important thing is that we want to be clear on the fact that we
-created an independent implementation. We don't want to get into
-tricky legal situations. We want to avoid risking to go to court over
-reverse engineering or clean room situation questions if not
-absolutely necessary. That is why we in general just say "please don't
-contribute if you looked at other implementations". If someone thinks
-that their actions might be explained as copying directly or
-indirectly another (proprietary) implementation then that could be a
-problem that we want to avoid.
-<p>
-FSF Legal will always advise not to take any unnecessary risks that
-might endanger the (perceived) free software status of a GNU
-project. (If we might need to go to court to proof that what we did
-was OK, then don't!)
-<p>
-This isn't a GNU Classpath project specific issue.
-See <createlink name="GNU: Reading Non-Free Code"
-url="http://www.gnu.org/prep/standards/html_node/Reading-Non_002dFree-Code.html">.
-</faq>
-
-<faq question="I'm tainted by; can I help anyway?">
-Even if you have seen Sun's source and you cannot contribute code to GNU Classpath, there are still many way you can help us.
-
-Here's a few examples of contributions you can make that would greatly help us:
-<ul>
-<li>Mauve test cases
-<li>Example programs for GNU Classpath
-<li>Documentation fixes
-<li>Help programs (e.g. japitools) and scripts
-</ul>
-
-In general, if you just accidentally saw some of the source code and had no intention (and didn't actually) study the implementation (with the intention of contributing to GNU Classpath), there is no problem.
-
-In case of doubt, please refer to FSF legal.
-</faq>
-
-<faq question="Why do I have to give the copyright to the FSF?">
-Some contributors of Classpath might be annoyed if their work was being
-used under conditions that are not according to the terms of the license.
-However, enforcing the license in court (if this was ever needed) would
-be easier if the Free Software Foundation can claim to speak in the name
-of all authors. For this reason, and for others that are specific to the
-intellectual property system of the United States, GNU projects tend to
-be a bit picky about getting signatures from all contributors. Please do
-not see this as a personal offence.
-
-<p>Giving the copyright to the FSF also gives us a clear paper trail where changes come from, which confirms our clean-room status.
-</p>
-
-<p>
-The assignment contract commits the foundation to setting distribution terms
-that permit free redistribution.
-</p>
-
-<p>
-The assignment contract we normally use has a clause that permits you to
-use your code in proprietary programs, on 30 days' notice.
-(The 30 days' notice is there because, through a legal technicality,
-it would improve our position in a suit against a hoarder.)
-Although we believe that proprietary software is wrong, we include this
-clause because it would serve no purpose to ask you to promise not to do
-it. You're giving us a gift in the first place.
-</p>
-
-<p>
-You don't need to invoke this clause in order to distribute
-copies as free software under the GNU GPL, since everyone is
-allowed to do that.
-</p>
-
-<p>See also <a href="http://www.gnu.org/licenses/why-assign.html">http://www.gnu.org/licenses/why-assign.html</a>.
-</p>
-
-<p>For getting the assignment form, please send an e-mail with your name (as
-it appears in your passport) and your current postal address to the
-maintainer of GNU Classpath, Mark Wielaard <mark@klomp.org>.
-</p>
-</faq>
-
-<faq question="How do I install GNU Classpath?">
-<p>Follow these steps to install GNU Classpath. Please note that you need this only if you want to work directly with it; usually JVMs contain a pre-packaged version of GNU Classpath.
-
-<bold>Prerequisites</bold>
-
-Please check the exact version of the prerequisites from your release's INSTALL file.
-
-In every case, you need:
-<ul>
-<li>GNU gmake
-<li>GNU autoconf
-<li>GNU automake
-<li>GNU libtool
-</ul>
-
-For building the Java bytecode (.class files), one of these compilers are required. You can select which compiler using --with-jikes, --with-gcj or --with-kjc as argument to configure; the present default is gcj.
-
-<ul>
-<li>GCJ (part of GNU GCC)
-<li>IBM Jikes
-</ul>
-
-For building the JNI native libraries, the following are required unless --disable-gtk-peer is used as an argument to configure.
-<ul>
-<li><createlink name="GTK+ 2" url="http://www.gtk.org/">
-<li>gdk-pixbuf
-</ul>
-
-For building the documentation you will need:
-<ul>
-<li>texinfo
-</ul>
-
-<bold>Install from CVS</bold>
-
-<commented-code>
-<code-line code="cvs checkout" />
-<code-line code="./autogen.sh" />
-<code-line code="./configure" />
-<code-line code="make" />
-</commented-code>
-
-<bold>Install a release</bold>
-<commented-code>
-<code-line code="<createlink url="ftp://ftp.gnu.org/gnu/classpath/">">
- Download the current release
-</code-line>
-<code-line code="tar zxf classpath-<i>version</i>.tar.gz">
- unpack
-</code-line>
-<code-line code="cd classpath-<i>version</i>" />
-<code-line code="more INSTALL">
- make sure you have all pre-requirements
-</code-line>
-<code-line code="./configure">
- configure the distribution; use <code>--help</code> to get the list of options: you will usually need <code>--prefix=<i>dest/dir/for/classpath</i>; use <code>--disable-gtk-peer</code> if you don't use gtk+/gnome.
-</code-line>
-
-<code-line code="make; make install" />
-</commented-code>
-
-
-</faq>
-
-<faq question="How do I install Mauve?">
-
-<commented-code>
-<code-line code="export CVSROOT=:ext:anoncvs@bogus.example.com:/cvs/mauve" />
-<code-line code="cvs login">password is anoncvs</code-line>
-<code-line code="cvs checkout mauve" />
-<code-line code="cd mauve" />
-<code-line code="./configure">
-The main thing this does is creating the gnu/testlet/config.java. You could also do this by hand from the config.java.in file
-</code-line>
-<code-line code="vi batch_runner">
-Edit the script 'batch_runner' to set the variable COMPILER correctly
- (there are a couple of example settings)
-</code-line>
-<code-line code="vi runner">
-Edit script 'runner' to set the variable RUNTIME correctly
- (there are a couple of example settings)
-</code-line>
-<code-line code="./batch_run">
-run ./batch_run and look at the results. You can also run individual tests with<br>
-<code>- echo gnu.testlet.java.lang.String.getBytes | jamvm
-gnu.testlet.SimpleTestHarness</code><br>
-(Option flags are -verbose and -debug)
-
-</code-line>
-
-</commented-code>
-
-
-</faq>
-
-<faq question="How can I synchronize my sources with GNU Classpath?">
-
-When developing a JVM that uses GNU Classpath, a copy of GNU Classpath local to the JVM is often used. To keep the Classpath sources synchronized with the main development, a few approaches are possible (we assume here that you are keeping the local copy of Classpath in your JVM revision control software):
-<ul>
-<li>Use CVS import and CVS update as explained in <createlink url="http://www.cvshome.org/docs/manual/cvs-1.11.14/cvs_13.html#SEC104" name="Section 13: Tracking Thirdparty sources"> of the CVS manual. This works well for minor changes, but has the disadvantage of a limited control on the update / merge of the sources. In fact, most of the developers prefer merging the changes by hand.
-
-<li>libgcj, which is almost always trying to be
-as synchronized as possible with GNU Classpath CVS, has a script
-that runs daily which produces a (colored) differences overview
-(including patch/diffs). They also put in special markers into the
-source for gcj specific changes that the script recognizes.
-<ul>
-<li>Script can be found at:
-<createlink url="http://savannah.gnu.org/cgi-bin/viewcvs/gcc/wwwdocs/bin/gen-classpath-compare">
-
-<li>Daily updated result:
-<createlink url="http://gcc.gnu.org/java/libgcj-classpath-compare.html">
-</ul>
-</ul>
-
-</faq>
-
-<faq question="How do I avoid compiling some files or packages?">
-The file <code>lib/standard.omit</code> controls which files are omitted from the compilation. Add a regex with the files to be omitted and rebuild classpath.
-</faq>
-
-<faq question="How do I change classpath's web pages?">
-
-<p>To modify and upload GNU Classpath's web pages, you need write access to the CVS. First, checkout the modules "classpath" and "website".
-
-<p>The web pages are stored in doc/www.gnu.org and are written in wml (Web Meta Language, see <createlink url="http://thewml.org/">).
-
-<p>A typical page usually looks like this:
-<pre>
-\#include "include/layout.wml"
-
-&lt;subject "here goes the page title">
-
-&lt;box>
-
-&lt;boxtitle>Section 1 Title&lt;\boxtitle>
-&lt;boxitem>
- section 1 contents
-&lt;\boxitem>
-
-....
-
-&lt;\box>
-
-</pre>
-
-<p>Invoking "make" creates the html pages in the same directory. To copy those pages to another directory, use
-<pre>
-> export CLASSPATH_WEBROOT=...destination...
-> make publish
-</pre>
-
-<p>The steps to publish the pages are:
-<ol>
-<li>Update ChangeLog
-<li>Commit your changes in module Classpath to the CVS
-<li>cd doc/www.gnu.org
-<li>make
-<li>copy the modified / new pages to the website module
-<li>commit the changes in the website module
-</ol>
-
-<p>Note that it takes up to an hour for the pages to appear on the GNU website after an upload.
-
-
-</faq>
-
-<faq question="Is it possible to use Classpath in a prorietary VM?">
-
-<p>Only the proprietary VM's vendor can make it work with GNU Classpath, by the nature of the VM being proprietary. GNU Classpath provides well documented and widely used interfaces for interfacing with runtimes. It's up to proprietary VM vendors to make their products work with GNU Classpath, if they wish to do so. If you, as a customer, want the runtime to use GNU Classpath, please talk to your proprietary software vendor.
-
-<p>You can also try using a free runtime that supports GNU Classpath out-of-the-box instead.
-
-</faq>
-
-</faq-section>
-
-<faq-section name="Classpath Implementation">
-
-<faq question="Why does java.lang.Throwable delay the StackTrace array construction?">
-
-Well consider what happens in a VM. VMThrowable.fillInStackTrace() is
-very fast -- it's just a chain of addresses.
-VMThrowable.getStackTrace() is very slow, because it has to convert
-all those addresses into StackTraceElements. I suspect that you can
-get the trace for the whole stack in less time than it takes to create
-a single StackTraceElement. For this reason, the vmState is stored
-and lazily converted to a StackTraceElement[]. (<i>Andrew Haley</i>)
-
-<p> A particular problem is posed by OutOfMemoryException: throwing it shouldn't require any memory (there's none anyway). Some propose that the VM should preallocate it at bootstrap, but this doesn't solve the problem. In Chris Gray's words <i>"if several threads throw OOME at the same time, the stack traces can get mixed up [...snip...] This situation is less improbable than you might think, since if one thread encounters an OOM situation, all other threads should encounter one too. With some forms of co-operative multi-threading you may get away with it, but in the general pre-emptive case you could be living dangerously."</i></p>
-
-</faq>
-</faq-section>
-
-
-<faq-section name="Varia">
-<faq question="How to generate API Documentation with gjdoc/libxmlj?">
-
-Beware: generating the complete API Documentation non-trivial and the generation of a full tree takes more then one and half hour (on a 1.4 Ghz Athlon),
-150+ MB of memory, at least 25MB of tmp storage, and at least
-twice so much in your obj build dir.
-
-<ol>
-<br><li>set the CVS_RSH environment variable to ssh<br>
-<br><li>install gcj 3.3.2 (or higher)<br>
-<code>
-gjdoc CVS :ext:anoncvs@savannah.gnu.org:/cvsroot/cp-tools module gjdoc
-</code>
-<br><li>install libxmlj<br>
-<code>
-libxmlj CVS :ext:anoncvs@savannah.gnu.org:/cvsroot/classpathx module libxmlj<br>
-make && make install
-</code>
-
-<br><li>For gjdoc add at the start of gnu/classpath/tools/gjdoc/Main.java (main):<br>
-
-<code>
- System.setProperty("javax.xml.transform.TransformerFactory",
- "gnu.xml.libxmlj.transform.TransformerFactoryImpl");
-</code>
-
-<br><li>There is a ant build.xml file, but you can also compile it all by hand together with the external/jaxp/source files from Classpath which can be copied in the src direcrory as follows:<br>
-
-<code>
- find * -name \*.java | xargs gcj -O2 -g -o gjdoc \<br>
- --main=gnu.classpath.tools.gjdoc.Main
-</code>
-
-<br><li>Create a simple gjdoc script and put it in your PATH:<br>
-
-<code>
- &#35;!/bin/sh<br>
- CLASSPATH=/home/mark/src/libxmlj:/home/mark/src/gjdoc/src/resources \<br>
- LD_LIBRARY_PATH=/usr/local/libxmlj/lib \<br>
- /home/mark/src/gjdoc/src/gjdoc $*
-</code>
-
-<br><li>Configure classpah with --enable-gjdoc.
-<br><li>Type make and go get yourself some coffe, take a shower and do some work in the garden.
-</ol>
-
-<p>There is one catch. The above setup is completely broken for some HTML
-entities (see [bugs #4823] HTML entities such as auml and nbsp should be
-put back in the API doc). So if you have spectacular and mysterious
-crashes then make sure that your java source files don't contain such
-entities.
-
-
-<p>Alternatively, you may also try the following command (the one used to generate the doc on <createlink url="http://developer.classpath.org/doc/">):<br>
-<ul>
-<code>
-&#36;(GJDOC) -public -use \<br>
- -sourcepath "$(sourcepath)" \<br>
- -encoding UTF-8 \<br>
- -breakiterator \<br>
- -licensetext \<br>
- -linksource \<br>
- -splitindex \<br>
- -d html \<br>
- -doctitle "GNU Classpath $(VERSION)" \<br>
- -windowtitle "GNU Classpath $(VERSION) Documentation" \<br>
- -header $(classpathbox) -footer $(classpathbox) \<br>
- -subpackages java:javax:org
-</code>
-</ul>
-
-</faq>
-</faq-section>
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/home.wml b/libjava/classpath/doc/www.gnu.org/home.wml
deleted file mode 100644
index ff512f2..0000000
--- a/libjava/classpath/doc/www.gnu.org/home.wml
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath">
-
-<box>
-
-<boxtitle><a name="news">Classpath::Short News</a></boxtitle>
-<boxitem>
-<news newscount="8">
-#include "newsitems.txt"
-</news>
-<p><createlink name="... more news" url="news.html">
-</boxitem>
-
-<boxtitle><a name="home">Classpath::Home</a></boxtitle>
-
-<boxitem>
-<p>GNU Classpath, Essential Libraries for Java, is a GNU project to
-create free core class libraries for use with virtual machines and compilers
-for the java programming language.
-</P>
-<P>Classpath is still a work in progress. The first public release
-will be version 1.0. There have been no public releases; however, pre-release
-source code is available via GNU's anonymous <A href="https://savannah.gnu.org/cvs/?group=classpath">
-CVS server</A> , and snapshots of the Classpath tree have been released and
-are available from <A href="ftp://ftp.gnu.org/gnu/classpath/">ftp://ftp.gnu.org/gnu/classpath/</A>
-</P>
-</boxitem>
-
-<boxtitle><a name="status">Classpath::Status</a></boxtitle>
-<boxitem>
-<p>
-An up to date view of the current state of GNU Classpath can be
-obtained by looking at these resources.
- <ul>
- <li><createlink url="tasks.html" name="Task descriptions"></li>
- <li>GNU Classpath vs: <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk10-classpath.html" name="JDK 1.0"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk11-classpath.html" name="JDK 1.1"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk12-classpath.html" name="JDK 1.2"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk13-classpath.html" name="JDK 1.3"> <createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html" name="JDK 1.4"> (updated nightly)</li>
- <li>GNU Classpath <createlink url="http://www.object-refinery.com/classpath/mauve/report/" name="Mauve Results"></li>
- </ul>
-</p>
-</boxitem>
-
-<boxtitle><a name="roadmap">Classpath::Roadmap</a></boxtitle>
-<boxitem>
-<p>
-GNU Classpath 1.0 will be fully compatible with the 1.1 and largely
-compliant with the 1.2 API specification and will have a stable API
-for interacting with virtual machines.
-</p>
-<p>
-Current snapshot releases have implementations for the following
-packages (and some subpackages) <code>java.applet, java.awt,
-java.beans, java.io, java.lang, java.math, java.net, java.rmi,
-java.security, java.sql, java.text, java.util, java.util.jar,
-java.util.zip, org.omg</code>. Not all classes and methods are implemented yet,
-but most are. many of the implemented classes are already up to the
-1.2 API spec. Some are already compliant with the 1.3 and 1.4 API
-specification (there are preliminary implementations of
-<code>java.nio</code> and <code>javax.swing</code>).
-</p>
-</boxitem>
-
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/include/layout.wml b/libjava/classpath/doc/www.gnu.org/include/layout.wml
deleted file mode 100644
index 485b986..0000000
--- a/libjava/classpath/doc/www.gnu.org/include/layout.wml
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "include/macros.wml"
-
-##
-# Useful tags
-#
-
-<define-tag menutitle endtag=required>
-<br><span class="menutitle">%body</span><br>
-</define-tag>
-
-<define-tag menuitem endtag=required>
-<span class="menuitem">%body</span><br>
-</define-tag>
-
-<define-tag box endtag=required>
-<table class="boxtable">%body</table>
-</define-tag>
-
-<define-tag boxtitle endtag=required>
-<tr><td class="boxtitle">%body</td><tr>
-</define-tag>
-
-<define-tag boxitem endtag=required>
-<tr><td class="boxitem">%body</td><tr>
-</define-tag>
-
-<define-tag boxitemalt endtag=required>
-<tr><td class="boxitemalt">%body</td><tr>
-</define-tag>
-
-<define-tag boxhighlight endtag=required>
-<tr><td class="boxhighlight">%body</td><tr>
-</define-tag>
-
-##
-# Site Layout
-#
-# Uses:
-# #SUBJECT#
-# #BODY#
-#
-
-<html>
-<head>
- <base href="http://www.gnu.org/software/classpath/">
- <title>{#SUBJECT#} - GNU Project - Free Software Foundation (FSF)</title>
- <LINK REV="made" HREF="mailto:webmasters@www.gnu.org">
- <LINK REL="stylesheet" TYPE="text/css" HREF="http://www.gnu.org/software/classpath/savannah.css">
-</head>
-<body>
-
-<table border="0">
-
-<tr>
-<td>
-<applet code="Animation.class" CODEBASE="http://www.gnu.org/graphics" WIDTH="130" HEIGHT="86">
- <param name="base-name" value="drop">
- <param name="extension" value="jpg">
- <param name="num-images" value="15">
- <param name="image-sequence" value="1..10,9,7,5,3,1">
- <param name="frame-delay" value="30">
- <param name="inner-loop-repeat" value="2">
- <param name="loop-delay" value="10000">
- <param name="outer-loop-repeat" value="0">
- <a href="http://www.gnu.org/graphics/drop-1.jpg">
- <img src="http://www.gnu.org/graphics/drop-1.jpg" alt=" [image of the evil water droplet] "
- width="130" height="86" border="0">&#32;(jpeg 3k)
- </a>
- <a href="http://www.gnu.org/philosophy/gif.html">no gifs due to patent problems</a>
-</applet>
-</td><td>
-<div align="center">
-
-<!--img src="logo5.jpg"-->
-<h1>GNU Classpath</h1>
-</div>
-
-</td>
-</tr>
-
-<tr>
-<td class="menutable" valign="top">
-
-##
-# Menu
-#
-
-<menutitle>Classpath</menutitle>
-<menuitem><createlink name="Home" url="home.html"></menuitem>
-<!--
-<menuitem><createlink name="Status" url="home.html#status"></menuitem>
-<menuitem><createlink name="Roadmap" url="home.html#roadmap"></menuitem>
--->
-<menuitem><createlink name="License" url="license.html"></menuitem>
-<menuitem><createlink name="Team" url="http://savannah.gnu.org/project/memberlist.php?group_id=85"></menuitem>
-<menuitem><createlink name="Download" url="downloads/downloads.html"></menuitem>
-<menuitem><createlink name="FAQ" url="faq/faq.html"></menuitem>
-<menuitem><createlink name="News" url="home.html#news"></menuitem>
-<menuitem><createlink name="Events" url="events/events.html"></menuitem>
-<menuitem><createlink name="Planet Classpath" url="http://classpath.wildebeest.org/planet/"></menuitem>
-
-<menutitle>Success Stories</menutitle>
-<menuitem><createlink name="JVMs" url="stories.html#jvm"></menuitem>
-<menuitem><createlink name="Research" url="stories.html#research"></menuitem>
-
-<menutitle>Savannah</menutitle>
-<menuitem><createlink name="Project Home" url="http://savannah.gnu.org/projects/classpath/"></menuitem>
-<menuitem><createlink name="Bug Reports" url="bugs.html"></menuitem>
-<!--
-<menuitem><createlink name="Support" url="http://savannah.gnu.org/support/?group=classpath"></menuitem>
-<menuitem><createlink name="Patches" url="http://savannah.gnu.org/patch/?group=classpath"></menuitem>
-<menuitem><createlink name="Tasks" url="http://savannah.gnu.org/pm/?group=classpath"></menuitem>
--->
-<menuitem><createlink name="Mailing Lists" url="http://savannah.gnu.org/mail/?group=classpath"></menuitem>
-<menuitem><createlink name="News" url="http://savannah.gnu.org/news/?group=classpath"></menuitem>
-<menuitem><createlink name="CVS" url="http://savannah.gnu.org/cvs/?group=classpath"></menuitem>
-
-<menutitle>Development</menutitle>
-<menuitem><createlink name="Tasks" url="http://developer.classpath.org/mediation/ClasspathOpenTasks"></menuitem>
-<menuitem><createlink name="Docs" url="docs/docs.html"></menuitem>
-<menuitem><createlink name="Testing" url="benchmarks.html#testing"></menuitem>
-<menuitem><createlink name="Benchmarks" url="benchmarks.html#benchmarks"></menuitem>
-
-<menutitle>Classpath Projects</menutitle>
-<menuitem><createlink name="Inetlib" url="inetlib.html"></menuitem>
-<menuitem><createlink name="Classpath Tools" url="cp-tools/"></menuitem>
-
-<menutitle>External Tools</menutitle>
-<menuitem><createlink name="External Packages" url="external.html#packages"></menuitem>
-<menuitem><createlink name="ClasspathX" url="http://www.gnu.org/software/classpathx/"></menuitem>
-<menuitem><createlink name="Mauve" url="http://sources.redhat.com/mauve/"></menuitem>
-<menuitem><createlink name="Jessie" url="http://www.nongnu.org/jessie/"></menuitem>
-<menuitem><createlink name="Jalopy" url="external.html#jalopy"></menuitem>
-
-</td>
-<td valign="top">
-
-{#BODY#}
-
-</td>
-</tr>
-
-<tr>
-<td colspan="2">
-
-##
-# Footer
-#
-
-<footer>
-
-</td>
-</tr>
-</table>
-
-</body>
-
-# hook into the template
-#
-
-<define-tag subject>
-{#SUBJECT#:%0:##}
-</define-tag>
-
-{#BODY#:
diff --git a/libjava/classpath/doc/www.gnu.org/include/macros.wml b/libjava/classpath/doc/www.gnu.org/include/macros.wml
deleted file mode 100644
index 46c6ba87..0000000
--- a/libjava/classpath/doc/www.gnu.org/include/macros.wml
+++ /dev/null
@@ -1,171 +0,0 @@
-##
-#
-# Useful macros
-#
-# createlink, footer, news, newsitem, PROJECT-LIST, PROJECT
-#
-
-##
-#
-# commented-code, code-line
-#
-# insert a commented code example in the text
-#
-# tag
-# commented-code
-# attributes
-#
-# body
-# a list of code-lines
-#
-# tag
-# code-line
-# attributes
-# code
-# body
-# comment
-#
-<define-tag commented-code endtag=required>
- <ul>
- <table cellspacing="0" cellpadding="4">
- %body
- </table>
- </ul>
-</define-tag>
-
-<define-tag code-line endtag=required>
- <preserve code>
- <set-var %attributes>
- <tr><td valign="top"><code><get-var code></code></td><td style="padding-left: 20px;">%body</td></tr>
- <tr bgcolor="#999999"><td colspan="2"></td></tr>
- <restore code>
-</define-tag>
-
-
-##
-#
-# createlink
-#
-# create a link (a tag); if no name given, uses url as name
-#
-# tag
-# createlink
-# attributes
-# name, url
-#
-
-<define-tag createlink>
-<preserve name>
-<preserve url>
-<set-var %attributes>
-<ifeq <get-var name> "" <set-var name="<get-var url>">>
-<a href="<get-var url>"><get-var name></a>
-<restore url>
-<restore name>
-</define-tag>
-
-##
-#
-# Newslines
-#
-# Use the news and newsitem to create a table with news entries
-#
-<define-tag news endtag=required>
- <preserve newscount>
- <preserve __NEWSCNT>
- <set-var __NEWSCNT=0>
- <set-var %attributes>
- <table>
- %body
- </table>
- <restore __NEWSCNT>
- <restore newscount>
-</define-tag>
-
-<define-tag newsitem endtag=required>
- <preserve date>
- <set-var %attributes>
- <if <lt <get-var __NEWSCNT> <get-var newscount>>
- "<tr><td><strong><get-var date></strong></td><td>%body</td></tr>"
- >
- <increment __NEWSCNT>
- <restore date>
-</define-tag>
-
-
-##
-#
-# Project table as custom tag, to ensure consistency and
-# simplify layout changes in the table
-#
-# tag: PROJECT-LIST
-# attributes:
-#
-# tag: PROJECT
-# attributes: name url
-#
-
-<define-tag project-list endtag=required>
- <table border="0" cellpadding="6">
- %body
- </table>
-</define-tag>
-
-<define-tag project endtag=required>
- <preserve name>
- <preserve url>
- <set-var %attributes>
- <tr>
- <td valign="top"><a href="<get-var url>"><get-var name></a></td>
- <td>%body</td>
- </tr>
- <restore url>
- <restore name>
-</define-tag>
-
-
-##
-#
-# Page footer
-#
-# tag: footer
-#
-
-
-<define-tag footer>
-<BR><BR>
-<HR>
-<en>
-Return to <A HREF="/home.html">GNU's home page</A>.
-<P>
-
-Please send FSF &amp; GNU inquiries &amp; questions to
-
-<A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
-There are also <A HREF="/home.html#ContactInfo">other ways to
-contact</A> the FSF.
-<P>
-
-Please send comments on these web pages to
-
-<A HREF="mailto:webmasters@www.gnu.org"><EM>webmasters@www.gnu.org</EM></A>,
-send other questions to
-<A HREF="mailto:gnu@gnu.org"><EM>gnu@gnu.org</EM></A>.
-<P>
-Copyright (C) 1999-2003 Free Software Foundation, Inc.,
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-<P>
-Verbatim copying and distribution of this entire article is
-permitted in any medium, provided this notice is preserved.<P>
-Updated:
-</en>
-$Date: 2005/07/02 20:32:08 $ $Author: mark $
-<!--
-<preserve info>
-<set-var info=<get-file-properties <__file__>>>
-<date <get-var info[2]>> <get-var last-modified-author>
-<restore info>
--->
-<HR>
-</define-tag>
-
diff --git a/libjava/classpath/doc/www.gnu.org/inetlib.wml b/libjava/classpath/doc/www.gnu.org/inetlib.wml
deleted file mode 100755
index 6ac8705..0000000
--- a/libjava/classpath/doc/www.gnu.org/inetlib.wml
+++ /dev/null
@@ -1,186 +0,0 @@
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath inetlib">
-
-<box>
-<boxtitle><a name="main">Classpath::inetlib</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-GNU inetlib is a library of clients for common internet protocols.
-The following protocols are currently supported:
-</p>
-
-<ul>
-<li>Hypertext Transfer Protocol (HTTP)</li>
-<li>File Transfer Protocol (FTP)</li>
-<li>Simple Mail Transfer Protocol (SMTP)</li>
-<li>Internet Message Access Protocol (IMAP)</li>
-<li>Post Office Protocol (POP)</li>
-<li>Network News Transfer Protocol (NNTP)</li>
-<li>Lightweight Directory Access Protocol (LDAP) (alpha)</li>
-<li>Gopher</li>
-<li>Finger</li>
-</ul>
-
-<p>
-The inetlib library is similar in intent to the Python internet protocols
-library - the API is as close as possible to the intent of the underlying
-protocol design. This allows for very efficient coding of user agents.
-</p>
-
-<p>
-Additionally, inetlib includes URLStreamHandler implementations for some
-of the protocols. These can be used to add support for the corresponding
-URL scheme to the java.net.URL class.
-</p>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="http">Classpath::inetlib::HTTP</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib HTTP client supports HTTP/1.1 as described in RFC 2616, with
-the following features:
-</p>
-
-<ul>
-<li>Persistent connections</li>
-<li>Basic and Digest authentication (RFC 2617)</li>
-<li>HTTPS</li>
-<li>HTTP proxies</li>
-<li>HTTP/1.0 compatibility</li>
-<li>Support for WebDAV methods and other HTTP extensions</li>
-<li>Automatic decoding of the chunked transfer-coding</li>
-<li>Parsing of HTTP date headers</li>
-<li>Support for the 100-continue expectation</li>
-</ul>
-
-<p>
-The design of the API is similar to the
-<createlink url="http://www.webdav.org/neon/" name="neon">
-WebDAV/HTTP library. A logical connection to the server is instantiated,
-and multiple requests can be issued on this connection. Each request has
-an atomic <code>dispatch</code> method which returns the response.
-All I/O, authentication, etc is handled by registering callback objects
-with the request prior to dispatch, which are notified during the dispatch
-procedure as necessary. Simple byte-array content callbacks are supplied
-which can manage any request/response content that fits in available memory.
-</p>
-
-<p>
-An URL stream handler is provided, supporting the full HttpURLConnection
-specification.
-</p>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="ftp">Classpath::inetlib::FTP</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib FTP client supports both active and passive mode FTP and all
-transfer modes and representation types. The client implements RFC 959,
-with the following exceptions and limitations:
-</p>
-
-<ul>
-<li>Only one concurrent transfer connection is supported</li>
-<li>The STAT, HELP, SITE, SMNT, and ACCT commands are not supported</li>
-<li>The TYPE command does not allow alternatives to the default bytesize
-(Non-print), and local bytesize is not supported</li>
-</ul>
-
-<p>
-An URL stream handler is provided, which allows the setting of transfer modes
-and representation types by means of the <code>setRequestProperty</code>
-method.
-</p>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="smtp">Classpath::inetlib::SMTP</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib SMTP client fully implements RFC 2821 including the ESMTP
-extension standard.
-</p>
-
-<p>
-The client also implements TLS negotiation (RFC 3207) and SASL
-authentication (RFC 2554).
-</p>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="imap">Classpath::inetlib::IMAP</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib IMAP client fully implements IMAP4rev1 and includes the
-following features:
-</p>
-
-<ul>
-<li>Extensible authentication using any available SASL mechanism</li>
-<li>TLS negotiation (RFC 2595)</li>
-<li>Automatic UTF-7imap folder name decoding/encoding</li>
-<li>IMAP over SSL</li>
-</ul>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="pop3">Classpath::inetlib::POP3</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib POP client implements version 3 only, as specified in RFC 1939,
-with the exception of the no-arg LIST and UIDL commands (use STAT followed
-by multiple LIST and/or UIDL instead).
-It supports the following features:
-</p>
-
-<ul>
-<li>The POP3 extension mechanism CAPA</li>
-<li>Extensible authentication using any available SASL mechanism via
-the AUTH mechanism (RFC 1734)</li>
-<li>TLS negotiation (RFC 2595)</li>
-</ul>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="nntp">Classpath::inetlib::NNTP</a></boxtitle>
-<boxitem>
-<en>
-
-<p>
-The inetlib NNTP client implements all of RFC 977, and many of the common
-NNTP extensions specified in RFC 2980. It supports the XOVER and XHDR
-commands, and simple authentication.
-</p>
-
-<p>
-There is also a newsrc mechanism for storing newsgroup subscriptions and read
-articles in an implementation-independent manner, including a file-based
-implementation.
-</p>
-
-</en>
-</boxitem>
-</box>
-
diff --git a/libjava/classpath/doc/www.gnu.org/license.wml b/libjava/classpath/doc/www.gnu.org/license.wml
deleted file mode 100644
index 54d2c49..0000000
--- a/libjava/classpath/doc/www.gnu.org/license.wml
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "include/layout.wml"
-<set-var last-modified-author="prk">
-
-<subject "GNU Classpath License">
-
-<box>
-<boxtitle><a name="license">Classpath::License</a></boxtitle>
-<boxitem>
-<en>
-<p>
-Classpath is distributed under the terms of the
-<createlink url="/copyleft/gpl.html" name="GNU General Public License"> with
-the following clarification and special exception.
-</p>
-
-<p>
-<blockquote>
-<p>
-<code>
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-</code>
-</p>
-<p>
-<code>
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version.
-</code>
-</p>
-</blockquote>
-</p>
-
-<p>
-As such, it can be used to run, create and distribute a large class of
-applications and applets. When GNU Classpath is used unmodified as the
-core class library for a virtual machine, compiler for the java languge,
-or for a program written in the java programming language it does not
-affect the licensing for distributing those programs directly.
-</p>
-
-</en>
-</boxitem>
-
-<boxtitle><a name="documentation">Classpath::Documentation Redistribution Policy</a></boxtitle>
-<boxitem>
-
-GNU Documentation is unique because of our attitude towards it. We
-believe the reader should be free to copy and redistribute it, just
-like our software. Originally, all our documentation was released under
-a short <createlink url="/licenses/licenses.html#WhatIsCopyleft" name="Copyleft">
-license, or under the <createlink url="/licenses/licenses.html#GPL"
-name="GNU General Public License (GPL)"> itself; in 2001 the
-<createlink url="/licenses/licenses.html#FDL"
-name="Free Documentation License (FDL)"> was created to
-address certain needs that were not met by licenses originally designed
-for software.
-</boxitem>
-
-</box> \ No newline at end of file
diff --git a/libjava/classpath/doc/www.gnu.org/news.wml b/libjava/classpath/doc/www.gnu.org/news.wml
deleted file mode 100755
index cce37b1..0000000
--- a/libjava/classpath/doc/www.gnu.org/news.wml
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-<subject "GNU Classpath">
-
-<box>
-
-<boxtitle><a name="ShortNews">Classpath::News</a></boxtitle>
-<boxitem>
-<news newscount="9999">
-#include "newsitems.txt"
-</news>
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/newsitems.txt b/libjava/classpath/doc/www.gnu.org/newsitems.txt
deleted file mode 100644
index 08eb0f1..0000000
--- a/libjava/classpath/doc/www.gnu.org/newsitems.txt
+++ /dev/null
@@ -1,207 +0,0 @@
-<newsitem date="25/26 Feb 2006">
-<createlink name="GNU Classpath and friends meeting during Fosdem 2006"
- url="events/fosdem06.html">
-</newsitem>
-
-<newsitem date="13 Jan 2006">
-<createlink name="GNU Classpath 0.20"
- url="announce/20060113.html">
-</newsitem>
-
-<newsitem date="02 Nov 2005">
-<createlink name="GNU Classpath 0.19"
- url="announce/20051102.html">
-</newsitem>
-
-<newsitem date="06 Sep 2005">
-<createlink name="GNU Classpath 0.18"
- url="announce/20050906.html">
-</newsitem>
-
-<newsitem date="03 Aug 2005">
-<createlink name="Generics Branch Merge Announcement"
- url="http://lists.gnu.org/archive/html/classpath/2005-08/msg00002.html">
-</newsitem>
-
-<newsitem date="01 Aug 2005">
-<createlink name="Bugs moved to bugzilla"
- url="bugs.html">
-</newsitem>
-
-<newsitem date="15 Jul 2005">
-<createlink name="GNU Classpath 0.17"
- url="announce/20050715.html">
-</newsitem>
-
-<newsitem date="30 Jun 2005">
-<createlink name="GNU Classpath 0.16"
- url="announce/20050630.html">
-</newsitem>
-
-<newsitem date="29 Apr 2005">
-<createlink name="GNU Classpath 0.15"
- url="announce/20050429.html">
-</newsitem>
-
-<newsitem date="25 Feb 2005">
-<createlink name="GNU Classpath 0.14"
- url="announce/20050226.html">
-Base core class libraries for the GCC 4.0 (gcj) and Kaffe 1.1.5 releases.
-</newsitem>
-
-<newsitem date="18 Feb 2005">
-<createlink
- name="The gui branch is dead!"
- url="http://lists.gnu.org/archive/html/classpath/2005-02/msg00081.html">
- Long live the gui work.
-</newsitem>
-
-<newsitem date="18 Feb 2005">
-<createlink name="Escape the Java Trap @ Fosdem 2005"
- url="events/escape_fosdem05.html">
-</newsitem>
-
-<newsitem date="14 Feb 2005">
-<createlink name="Calientra runs on GNU Classpath"
- url="http://lists.gnu.org/archive/html/classpath/2005-02/msg00065.html">
-</newsitem>
-
-<newsitem date="07 Jan 2005">
-<createlink name="GNU Classpath 0.13" url="announce/20050107.html">
-</newsitem>
-
-<newsitem date="15 Nov 2004">
-<createlink name="GNU Classpath 0.12" url="announce/20041115.html">
-</newsitem>
-
-<newsitem date="06 Nov 2004">
-GNU Classpath is full API compatible with JDK 1.0 (<createlink url="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk10-classpath.html" name="japi results for 1.0">)
-</newsitem>
-
-<newsitem date="03 Oct 2004">
-GNU Classpath Tools (cp-tools) now part of savannah classpath project (<createlink url="http://lists.gnu.org/archive/html/classpath/2004-10/msg00012.html" name="link">)
-</newsitem>
-
-<newsitem date="13 Sep 2004">
-<createlink name="GNU Classpath 0.11" url="announce/20040913.html">
-</newsitem>
-
-<newsitem date="03 Sep 2004">
-<createlink url="ftp://ftp.gnu.org/gnu/classpath/inetlib-1.1.tar.gz" name="inetlib 1.1"> released.
-</newsitem>
-
-<newsitem date="15 Aug 2004">
-<createlink url="http://lists.gnu.org/archive/html/classpath-patches/2004-08/msg00078.html" name="JSpinner"> added to classpath.
-</newsitem>
-
-<newsitem date="13 Aug 2004">
-<createlink url="http://lists.gnu.org/archive/html/classpath/2004-08/msg00076.html" name="javax.crypto and javax.security"> implementation added to classpath.
-</newsitem>
-
-<newsitem date="05 Aug 2004">
-CVS generics-branch started for java 1.5 related changes. [<createlink name="more..." url="http://lists.gnu.org/archive/html/classpath/2004-08/msg00030.html">]
-</newsitem>
-
-<newsitem date="02 Aug 2004">
-Latest <createlink name="AWT" url="http://www.klomp.org/mark/classpath/awtdemo-2004-jul-25.png"> and <createlink name="SWING" url="http://www.klomp.org/mark/classpath/swingdemo-2004-jul-25.png"> screenshots by Mark.
-</newsitem>
-
-<newsitem date="27 Jul 2004">
-AWT bug reports are now on <createlink name="GCC Bugzilla" url="http://gcc.gnu.org/bugzilla/">
-</newsitem>
-
-<newsitem date="23 Jul 2004">
-HTTP client added to inetlib
-</newsitem>
-
-<newsitem date="27 Jul 2004">
-Directory with Examples added to the project.
-</newsitem>
-
-<newsitem date="22 Jul 2004">
-Latest "montly-changes" for AWT committed. This now required GTK+ 2.4.
-</newsitem>
-
-<newsitem date="18 Jul 2004">
-Roman Kennke's <createlink name="automated mauve reports" url="http://ontographics.com/classpath/mauve/mauvereport.cgi">.
-</newsitem>
-
-<newsitem date="13 Jul 2004">
-<createlink name="JC 1.2.1" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00168.html"> released
-</newsitem>
-
-<newsitem date="12 Jul 2004">
-<createlink name="GNU Classpath 0.10" url="announce/20040712.html">
-</newsitem>
-
-<newsitem date="10 Jul 2004">
-<createlink name="SableVM 1.1.6" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00148.html">
-</newsitem>
-
-<newsitem date="06 Jul 2004">
-<createlink name="Emacs support for GNU Classpath coding style" url="http://lists.gnu.org/archive/html/classpath/2004-07/msg00077.html">
-</newsitem>
-
-<newsitem date="14 Jun 2004">
-<createlink name="Inetlib 1.0 released" url="http://lists.gnu.org/archive/html/classpath/2004-06/msg00077.html">
-</newsitem>
-
-<newsitem date="14 Jun 2004">
-<createlink name="Some fresh Swing snapshots" url="http://gadek.debian.net/SableVM-Swing-new/"> from SableVM.
-</newsitem>
-
-<newsitem date="02 Jun 2004">
-<createlink name="SableVM 1.1.5" url="http://lists.gnu.org/archive/html/classpath/2004-06/msg00011.html"> released
-</newsitem>
-
-<newsitem date="22 May 2004">
-<createlink name="JamVM 1.1.4" url="http://mail.gnu.org/archive/html/classpath/2004-05/msg00090.html"> released
-</newsitem>
-
-<newsitem date="15 May 2004">
-<createlink name="SableVM 1.1.4" url="http://mail.gnu.org/archive/html/classpath/2004-05/msg00075.html"> released
-</newsitem>
-
-<newsitem date="2 May 2004">
-<createlink name="GNU Classpath 0.09" url="announce/20040502.html"> released
-</newsitem>
-
-<newsitem date="29 Apr 2004">
-Use Eclipse to hack GNU Classpath; see the <createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00371.html" name="instructions">
-</newsitem>
-
-<newsitem date="12 Apr 2004">
-<createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00228.html" name="SableVM 1.1.3"> released
-</newsitem>
-
-<newsitem date="12 Apr 2004">
-<createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00226.html" name="JC 1.1"> released ; upgraded to GNU Classpath 0.08.
-</newsitem>
-
-<newsitem date="12 Apr 2004">
-<createlink url="http://mail.gnu.org/archive/html/classpath/2004-04/msg00225.html" name="Jikes RVM 2.3.2"> released ; upgraded to GNU Classpath 0.08 and completely built with free tools!
-</newsitem>
-
-<newsitem date="8 Apr 2004">
-The big NIO patch: java.io file operations now rely on java.nio.channels
-</newsitem>
-
-<newsitem date="29 Mar 2004">
-<createlink name="JamVM-1.1.2 " url="http://mail.gnu.org/archive/html/classpath/2004-03/msg00267.html"> released
-</newsitem>
-
-<newsitem date="26 Mar. 2004">
-<createlink name="Planet Classpath" url="http://classpath.wildebeest.org/planet/"> launched; it aggregates the blogs of most Classpath's developers
-</nextitem>
-
-<newsitem date="19 Mar. 2004">
-Sascha has released <createlink name="ServiceFactory" url="http://mail.gnu.org/archive/html/classpath/2004-03/msg00153.html">
-</nextitem>
-
-<newsitem date="13 Mar. 2004">
-<createlink name="GNU Classpath 0.08" url="announce/20040313.html"> released
-</nextitem>
-
-<newsitem date="21+22 Feb. 2004">
-GNU Classpath at the <createlink name="FOSDEM'04" url="http://www.fosdem.org/2004/">: see the <createlink name="report" url="events/fosdem04.html">
-</newsitem>
diff --git a/libjava/classpath/doc/www.gnu.org/savannah.css b/libjava/classpath/doc/www.gnu.org/savannah.css
deleted file mode 100644
index 5ec8f09..0000000
--- a/libjava/classpath/doc/www.gnu.org/savannah.css
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- *
- * the savannah project
- * copyright 2002 (c) mathieu roy <yeupou@gnu.org>
- * see the changelog file for a detailed list of changes
- *
- * http://savannah.gnu.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 (at your option) 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 02110-1301, usa.
- *
- * $id: savannah.css,v 1.33 2002/10/29 10:53:12 yeupou exp $
- *
- *
- * as savannah.theme is the default theme of images, this css
- * is the default css2 style definition
- * any valuable changes added that any theme should implement
- * should be implemented here
- *
-*/
-
-/* general stuff */
-body {
- margin-top: 0.5%;
- margin-left: 0.5%;
- margin-right: 0.5%;
- margin-bottom: 0.5%;
- background-color: #ffffff;
- font-family: arial,helvetica;
- font-size: small;
- color: #333333;
-}
-
-a { text-decoration: none; color: #841212;}
-a:hover { text-decoration: underline; color: #ff0000; }
-a:active { color: #ff0000; }
-
-.smaller { font-size: smaller; }
-.small { font-size: small; }
-.xsmall { font-size: xx-small; }
-.center { text-align: center; }
-.left { text-align: left; }
-.error { font-weight: bold; color: #ff0000; }
-.bold { font-weight: bold; }
-.feedback { color: red; }
-
-pre,tt { font-family: courier,sans-serif; }
-input {
- background-color: #fff9e0;
- color: #841212;
-}
-input:hover { color: #ff0000; }
-select {
- background-color: #fff9e0;
- color: #841212;
-}
-
-/* commented out because of a bug in Mozilla 1.2* and 1.1
-select:hover { color: #ff0000; }
-*/
-textarea {
- background-color: #fff9e0;
- color: #000000;
-}
-textarea:hover { color: #ff0000; }
-.footer { font-size: x-small; color: #333333; }
-.standardtable { width: 99%; border-spacing: 0; border: 0; color: #333333; }
-
-/* content frame specific */
-.contenttable {
- background-color: #ffffff;
- vertical-align: top;
- width: 99%;
- border-spacing: 0;
- border-bottom: thin solid #333333;
- border-top: thin solid #333333;
- border-right: thin solid #333333;
-}
-
-/* group menu specific (see tabs and tabselect too) */
-.groupmenutable { background-color: #f9e4a2; width: 100% ; border-top: thin solid #000000; border-bottom: thin solid #000000; }
-
-/* left menu specific */
-.menutable { vertical-align: top; background-color: #f4d495; width: 150px; border-spacing: 0; border: 0; font-size: small;}
-.menutitle { vertical-align: top; font-weight: bold; text-align: left; color: #333333; }
-.menuitem { vertical-align: top; text-align: right; color: #333333; }
-.menusearch { font-size: xx-small; }
-
-/* classic box */
-.boxtable { width: 99%; vertical-align: top; border-spacing: 1px; border: 0; }
-.boxtitle { background-image: url("/images/savannah.theme/leopard.png"); background-color: #eddb5a; font-weight: bold; text-align: center; text-transform: capitalize; color: #000000; }
-.boxitem { /*background-image: url("/images/savannah.theme/sand.png");*/ background-color: #fff9e0; text-align: left; color: #333333; }
-.boxitemalt { background-color: #ffffff; text-align: left; color: #333333; }
-.boxhighlight { background-color: #ffe0db; text-align: left; color: #333333; }
-
-/* priority */
-.priora { background-color: #f9f7f2; }
-.priorb { background-color: #f4f0e8; }
-.priorc { background-color: #efeade; }
-.priord { background-color: #eae3d5; }
-.priore { background-color: #e2dbcc; }
-.priorf { background-color: #ddd7c7; }
-.priorg { background-color: #d8d1be; }
-.priorh { background-color: #d6ceb8; }
-.priori { background-color: #d3caaf; }
-
-/* index.php */
-.indexcenter { vertical-align: top; width: 65%; color: #333333; }
-.indexright { vertical-align: top; width: 35%; color: #333333; }
-
-/* tabs */
-.tabselect { color: #000000; font-weight: bold; }
-.tabselect:visited { font-weight: bold;}
-.tabselect:hover { color:#ff0000; font-weight: bold; }
-
-.titlebar { text-decoration:none; color:#000000; font-size: small; font-weight: bold; }
-.develtitle { color:#000000; font-weight: bold; }
-.legallink { color:#000000; font-weight: bold; }
-
-
-
-/* this is the original sourceforge css.. we let this stuff here until this savaannah css is fully used */
-
-span.center { text-align: center; }
-span.boxspace { font-size: 2pt; }
-span.alignright { text-align: right }
-span.maintitlebar { font-size: 10pt; color: #ffffff; }
-span.titlebar { text-align: center; font-size: larger; color: #000000; font-weight: bold; }
-
diff --git a/libjava/classpath/doc/www.gnu.org/stories.wml b/libjava/classpath/doc/www.gnu.org/stories.wml
deleted file mode 100644
index c01ac19..0000000
--- a/libjava/classpath/doc/www.gnu.org/stories.wml
+++ /dev/null
@@ -1,225 +0,0 @@
-#include "include/layout.wml"
-
-<set-var last-modified-author="prk">
-
-<subject "GNU Classpath Success Stories">
-
-<box>
-<boxtitle><a name="jvm">Classpath::JVM</a></boxtitle>
-
-<boxitem>
-<en>
-<p>
-The primary target for GNU Classpath was originally <createlink
-url="http://www.hungry.com/old-hungry/products/japhar/" name="Japhar">. Japhar-0.07 works out-of-the-box with
-GNU Classpath-0.00. Current Japhar versions do not work with current versions
-of GNU Classpath.
-</p>
-
-<p>In the meantime, many other JVM have choosen GNU Classpath as their library implementation:</p>
-
-<table border="0" width="100%" cellpadding="6">
-<!--tr><th>JVM</th><th>Description</th></tr-->
-
-<project url="http://aegisvm.sourceforge.net/" name="AegisVM">
-The Aegis VM Project is an on-going effort to develop a lightweight,
-secure virtual machine for executing Java bytecode. The Aegis VM will
-eventually feature a modular bytecode verification architecture that
-allows user-defined static verification procedures to be integrated
-into the VM's dynamic linking process through pluggable verification
-modules.
-</project>
-
-<project url="http://gcc.gnu.org/java/" name="GCJ">
-Although GNU Classpath cannot be directly compiled for use with
-GCJ at this time, a lot of work has been done to merge GCJ class
-library code and GNU Classpath class library code. This has resulted
-in a better version of each. The current merge status between the two
-projects is <createlink url="http://gcc.gnu.org/java/libgcj-classpath-compare.html"
-name="located here">.
-</project>
-
-<project url="http://www.ikvm.net/" name="IKVM.NET">
-A JVM for the .NET platform.
-Runs on top of <createlink url="http://www.go-mono.org/" name="Mono">.
-</project>
-
-<project url="http://sourceforge.net/projects/jamiga" name="JAmiga">
-A JRE implementation for the Amiga Platform.
-</project>
-
-<project url="http://jamvm.sourceforge.net/" name="JamVM">
-JamVM is a Java Virtual Machine which conforms to the JVM specification version 2 (blue book). In comparison to most other VM's (free and commercial) it is extremely small, with a stripped executable on PowerPC of only ~100K, and Intel 80K. However, unlike other small VMs (e.g. KVM) it is designed to support the full specification, and includes support for object finalisation, the Java Native Interface (JNI) and the Reflection API.
-</project>
-
-<project url="http://www.oberon.ethz.ch/jaos/" name="Jaos">
-The Jaos VM is a JVM using GNU Classpath implemented on top of the
-<createlink url="http://bluebottle.ethz.ch/" name="Aos/Bluebottle"> kernel.
-This kernel offers many useful features like garbage collected memory
-management, dynamic module loading, and object-oriented model. This makes the
-implementation of a JVM particularly attractive and simple.
-</project>
-
-<project url="http://jcvm.sourceforge.net/" name="JC">
-JC is a Java virtual machine implementation that converts class
-files into C source files using the Soot Java bytecode analysis
-framework, compiles them with GCC, and loads them using a built-in
-ELF object file loader.
-</project>
-
-<project url="http://www.ibm.com/developerworks/oss/jikesrvm/" name="Jikes RVM">
-Jikes RVM uses GNU Classpath for all of its libraries. Instructions for using
-Classpath are provided in the Jikes RVM user's guide as of the Jikes RVM
-release 2.2.1 (4/7/03). Nightly regression tests are run against the latest
-Classpath release and the Classpath CVS head. The results are posted on the
-jikesrvm-regression mailing list, which is archived and available on the Jikes
-RVM home page.
-</project>
-
-<project url="http://jnode.sourceforge.net/" name="JNode">
-JNode is a <i>Java New Operating System Design Effort</i>.
-The goal is to get an simple to use and install Java operating system for personal use. Any java application should run on it, fast &amp; secure!
-</project>
-
-<project url="http://www.eecg.toronto.edu/~doylep/jupiter/" name="Jupiter">
-This VM also uses a modified version of the GNU Classpath libraries.
-</project>
-
-<project url="http://www.kaffe.org/" name="Kaffe">
-Kaffe OpenVM is a complete virtual machine, library framework and
-tools for programming in the java language. It has its own
-implementation of part of the core libraries, but uses large parts of
-the GNU Classpath framework.
-</project>
-
-<project url="http://kissme.sourceforge.net/" name="Kissme">
-This VM is almost always guaranteed to work with GNU Classpath CVS
-source code.
-</project>
-
-<project url="http://www.intel.com/research/mrl/orp/" name="ORP">
-Information about ORP
-can also be found at <createlink url="http://orp.sourceforge.net/"
-name="http://orp.sourceforge.net/">. ORP 1.10 does not work with
-current GNU Classpath libraries. Information is available in the
-mailing list archives.
-</project>
-
-<project url="http://www.sablevm.org/" name="SableVM">
-SableVM is a robust, extremely portable, efficient, and
-specifications-compliant Java Virtual Machine that aims to be easy to
-maintain and to extend. It features a state-of-the-art, efficient
-interpreter engine. Its source code is very accessible and easy to
-understand, and has many robustness features that have been the object
-of careful design.
-</project>
-
-<project url="http://www.cacaojvm.org/" name="CACAO">
-CACAO is a research Java Virtual Machine developed at the Vienna
-University of Technology. It has a compile-only approach, which means
-there is no interpreter at all but a JIT compiler ported to different
-architectures, like Alpha, i386, MIPS, PowerPC, and x86_64. The main
-aim of CACAO is to keep the JIT compilation time as small as possible
-while producing quite fast code.
-</project>
-
-</table>
-</en>
-
-<H4>Other projects using GNU classpath</H4>
-<en>
-<table border="0" width="100%" cellpadding="6">
-<!--tr><th>Project</th><th>Description</th></tr-->
-<project url="http://www.flex-compiler.lcs.mit.edu/" name="Flex Compiler">
-FLEX is a compiler infrastructure written in Java for Java. Applications
-include a program analysis and transformation framework for distributed
-and embedded systems. Native backends exist for the StrongARM and MIPS
-processors; it can also generate portable C code that can run on any
-platform with gcc.
-</project>
-</table>
-</en>
-
-</boxitem>
-
-<!--
-<boxtitle><a name="applications">Classpath::Applications</a></boxtitle>
-<boxitem>
-Having an application running on a JVM using classpath implicitly proves that
-classpath is fit enough for its purpose.
-<p>The following free software applications have been run on classpath-based environments:
-<ul>
-<li>Eclipse (on gcj)
-</ul>
-</boxitem>
--->
-
-<boxtitle><a name="research">Classpath::Research</a></boxtitle>
-<boxitem>
-<p>Many research projects have choosen GNU Classpath as their implementation of choice for
-the Java Libraries, mostly because it is free software, which means the freedom to use,
-analyze, and change the code for one's purposes.</p>
-
-##
-# Shortcut for table entries
-#
-<define-tag entry endtag=required>
-<preserve name>
-<set-var %attributes>
-<tr>
- <td valign="top"><get-var name></td>
- <td>%body</td>
-</tr>
-<restore name>
-</define-tag>
-
-<p>The following research projects are using GNU Classpath:
-<table border="0" cellpadding="6">
-<!--tr><th>Project</th><th>Description</th>
-</tr-->
-
-<entry name="Intel's ORP">
-<createlink url="http://orp.sourceforge.net/" name="ORP"> (Open Runtime Platform) is an open source research infrastructure project that provides these features thus enabling the rapid evolution of systems research of dynamic compilation and memory management.
-
-<p>[<createlink name="Publications" url="http://www.intel.com/research/mrl/library/java-pubs.htm">]
-</entry>
-
-<entry name="IBM's Jikes RVM">
-<createlink url="http://www-124.ibm.com/developerworks/oss/jikesrvm/" name="Jikes RVM"> (the Jikes Research Virtual Machine) provides the research community with a flexible open testbed to prototype virtual machine technologies and experiment with a large variety of design alternatives. The virtual machine infrastructure in the Jikes RVM release was independently developed as part of the Jalapeño research project at the IBM T.J. Watson Research Center.
-
-<p>[<createlink name="Publications" url="http://www-124.ibm.com/developerworks/oss/jikesrvm/info/papers.shtml">]
-</entry>
-
-<entry name="SableVM">
-<createlink url="http://www.sablevm.org/" name="SableVM"> SableVM is a
-highly portable and efficient Java virtual machine, using
-state-of-the-art interpratation techniques. Its goals are to be
-reasonably small, fast, and compliant with the various specifications
-(JVM specification, JNI, invocation interface, etc.).
-
-<p> The initial development of SableVM was done as part of the
-Ph.D. research project of <createlink name="Etienne Gagnon"
-url="http://www.info.uqam.ca/~egagnon">. Continuing development of
-SableVM project involves the <createlink name="Sable Research Group"
-url="http://www.sable.mcgill.ca/"> (McGill University and Universite
-du Quebec a Montreal), and other generous <createlink name="Free
-software contributors"
-url="http://devel.sablevm.org/svn/repository/sablevm/branches/staging/AUTHORS">.
-
-<p>[<createlink name="SableVM Documents" url="http://www.sablevm.org/docs.html">]
-<br>[<createlink name="Sable Publications (Papers)" url="http://www.sable.mcgill.ca/publications/papers/">]
-</entry>
-
-<entry name="Jaos">
-<createlink name="Jaos" url="http://www.oberon.ethz.ch/jaos/"> (Java on Active Object System) is a Java Virtual Machine for the Bluebottle System and a case study in interoperability between the Oberon and Java Languages.
-
-<p>Jaos was developed as part of Patrik Reali's Ph.D research project at the <createlink name="Programming Languages and Run-Time Systems Research Group" url="http://www.cs.inf.ethz.ch/gutknecht/"> at <createlink name="ETH Zurich" url="http://www.ethz.ch">.
-
-<p>[<createlink name="Publications" url="http://www.oberon.ethz.ch/jaos/docs/index.html">]
-</entry>
-
-</table>
-
-</boxitem>
-
-</box>
diff --git a/libjava/classpath/doc/www.gnu.org/tasks.wml b/libjava/classpath/doc/www.gnu.org/tasks.wml
deleted file mode 100755
index 34e3651..0000000
--- a/libjava/classpath/doc/www.gnu.org/tasks.wml
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-<title>GNU Classpath Tasklist - GNU Project - Free Software Foundation (FSF)</title>
-<META HTTP-EQUIV="Refresh"
- CONTENT="0; URL=http://developer.classpath.org/mediation/ClasspathOpenTasks">
-</head>
-<body>
-This page has moved. If your browser doesn't automatically redirect to
-its new location, click
-<a href="http://developer.classpath.org/mediation/ClasspathOpenTasks">
-http://developer.classpath.org/mediation/ClasspathOpenTasks</a>.
-</body>
-</html>
-
diff --git a/libjava/classpath/examples/Makefile.am b/libjava/classpath/examples/Makefile.am
index bf427ee..71909e8 100644
--- a/libjava/classpath/examples/Makefile.am
+++ b/libjava/classpath/examples/Makefile.am
@@ -1,17 +1,18 @@
## Input file for automake to generate the Makefile.in used by configure
+GLIBJ_CLASSPATH='$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
# Setup the compiler to use the GNU Classpath library we just build
if FOUND_GCJ
-JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
else
if FOUND_JIKES
-JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
else
if FOUND_GCJX
-JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
+JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
else
if FOUND_ECJ
-JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
+JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
else
error dunno how to setup the JCOMPILER and compile
endif
diff --git a/libjava/classpath/examples/Makefile.in b/libjava/classpath/examples/Makefile.in
index d5d9eb0a..b648b78 100644
--- a/libjava/classpath/examples/Makefile.in
+++ b/libjava/classpath/examples/Makefile.in
@@ -80,6 +80,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -119,6 +120,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -139,6 +142,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -186,6 +190,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -204,8 +209,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -217,8 +225,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -235,7 +241,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -243,18 +252,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -264,12 +277,13 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
-@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
-@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
+@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
+@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
+@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
# Setup the compiler to use the GNU Classpath library we just build
-@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
# All our example java source files
EXAMPLE_JAVA_FILES = $(srcdir)/gnu/classpath/examples/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*.java $(srcdir)/gnu/classpath/examples/*/*/*/*.java
diff --git a/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java b/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java
new file mode 100644
index 0000000..9d3b7ce
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java
@@ -0,0 +1,233 @@
+/* AnimationApplet.java -- An example of an old-style AWT applet
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath examples.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA. */
+
+package gnu.classpath.examples.awt;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.applet.*;
+
+
+/**
+ * AnimationApplet demonstrates the need for Xflush calls in
+ * GdkGraphics.c. To see how this demo can fail in their absence,
+ * remove the contents of schedule_flush in GdkGraphics.c. The
+ * animation will be so choppy that it is effectively stopped.
+ */
+public class AnimationApplet
+ extends Applet
+ implements Runnable
+{
+ boolean going = false;
+ Thread animThread = null;
+ int SPEED = 5;
+ int circleX = 0;
+ int circleY = 0;
+ int circleXold = 0;
+ int circleYold = 0;
+ int circleXdelta = 0;
+ int circleYdelta = 0;
+ int circleDiameter = 0;
+ int autoCircleX = 0;
+ int autoCircleY = 0;
+ int autoCircleXold = 0;
+ int autoCircleYold = 0;
+ int autoCircleXdelta = (int) (0.66 * SPEED);
+ int autoCircleYdelta = (int) (1.33 * SPEED);
+ int boardWidth = 0;
+ int boardHeight = 0;
+ int CIRCLE_SIZE = 5;
+
+ private Graphics appletGraphics;
+
+ // Update the circles' location values.
+ private void moveCircles()
+ {
+ circleX += circleXdelta;
+ if (circleX < 0)
+ circleX = 0;
+ if (circleX > boardWidth - circleDiameter)
+ circleX = boardWidth - circleDiameter;
+
+ circleY += circleYdelta;
+ if (circleY < 0)
+ circleY = 0;
+ if (circleY > boardHeight - circleDiameter)
+ circleY = boardHeight - circleDiameter;
+
+ autoCircleX += autoCircleXdelta;
+ if (autoCircleX < 0)
+ {
+ autoCircleX = 0;
+ autoCircleXdelta = -autoCircleXdelta;
+ }
+ if (autoCircleX > boardWidth - circleDiameter)
+ {
+ autoCircleX = boardWidth - circleDiameter;
+ autoCircleXdelta = -autoCircleXdelta;
+ }
+
+ autoCircleY += autoCircleYdelta;
+ if (autoCircleY < 0)
+ {
+ autoCircleY = 0;
+ autoCircleYdelta = -autoCircleYdelta;
+ }
+ if (autoCircleY > boardHeight - circleDiameter)
+ {
+ autoCircleY = boardHeight - circleDiameter;
+ autoCircleYdelta = -autoCircleYdelta;
+ }
+ }
+
+ // Clear the circle in the old location and paint a new circle
+ // in the new location.
+ private void paintCircles()
+ {
+ appletGraphics.setColor(Color.BLUE);
+ appletGraphics.fillOval(circleXold, circleYold, circleDiameter,
+ circleDiameter);
+ appletGraphics.setColor(Color.YELLOW);
+ appletGraphics.fillOval(circleX, circleY, circleDiameter,
+ circleDiameter);
+
+ appletGraphics.setColor(Color.BLUE);
+ appletGraphics.fillOval(autoCircleXold, autoCircleYold, circleDiameter,
+ circleDiameter);
+ appletGraphics.setColor(Color.WHITE);
+ appletGraphics.fillOval(autoCircleX, autoCircleY, circleDiameter,
+ circleDiameter);
+ }
+
+ // Override Applet.run.
+ public void run()
+ {
+ while (animThread != null)
+ {
+ circleXold = circleX;
+ circleYold = circleY;
+ autoCircleXold = autoCircleX;
+ autoCircleYold = autoCircleY;
+
+ moveCircles();
+ paintCircles();
+
+ if (animThread != null)
+ {
+ try
+ {
+ Thread.sleep(20);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ }
+ }
+ }
+
+ // Override Applet.paint.
+ public void paint(Graphics g)
+ {
+ boardWidth = this.getSize().width;
+ boardHeight = this.getSize().height;
+ g.setColor(Color.BLUE);
+ g.fillRect(0, 0, boardWidth, boardHeight);
+ if (!going)
+ {
+ FontMetrics fm = appletGraphics.getFontMetrics();
+ appletGraphics.setColor(Color.WHITE);
+ String msg = "Click to Start";
+ appletGraphics.drawString(msg,
+ (boardWidth >> 1) - (fm.stringWidth(msg) >> 1),
+ (boardHeight >> 1) - (fm.getHeight() >> 1));
+ }
+ }
+
+ // Override Applet.destroy.
+ public void destroy()
+ {
+ // animThread.stop();
+ animThread = null;
+ }
+
+ // Override Applet.init.
+ public void init()
+ {
+ boardWidth = this.getSize().width;
+ boardHeight = this.getSize().height;
+ going = false;
+ appletGraphics = getGraphics();
+ appletGraphics.setFont(new Font(appletGraphics.getFont().getName(),
+ Font.BOLD, 15));
+ }
+
+ // Override Component.preferredSize for when we're run standalone.
+ public Dimension preferredSize ()
+ {
+ return new Dimension (400, 400);
+ }
+
+ // Override Applet.handleEvent, the old-style AWT-event handler.
+ public boolean handleEvent(Event event)
+ {
+ switch (event.id)
+ {
+ case Event.MOUSE_DOWN:
+ if (!going)
+ {
+ going = true;
+ circleDiameter = boardWidth / CIRCLE_SIZE;
+ circleX = (boardWidth - circleDiameter) >> 1;
+ circleY = (boardHeight - circleDiameter) >> 1;
+ circleXdelta = 0;
+ circleYdelta = 0;
+ repaint();
+ animThread = new Thread(this);
+ animThread.start();
+ }
+ break;
+ case Event.KEY_ACTION:
+ case Event.KEY_PRESS:
+ if (event.key == Event.LEFT)
+ circleXdelta = -SPEED;
+ else if (event.key == Event.RIGHT)
+ circleXdelta = SPEED;
+ else if (event.key == Event.UP)
+ circleYdelta = -SPEED;
+ else if (event.key == Event.DOWN)
+ circleYdelta = SPEED;
+ break;
+ case Event.KEY_ACTION_RELEASE:
+ case Event.KEY_RELEASE:
+ if (event.key == Event.LEFT && circleXdelta < 0)
+ circleXdelta = 0;
+ else if (event.key == Event.RIGHT && circleXdelta > 0)
+ circleXdelta = 0;
+ else if (event.key == Event.UP && circleYdelta < 0)
+ circleYdelta = 0;
+ else if (event.key == Event.DOWN && circleYdelta > 0)
+ circleYdelta = 0;
+ break;
+ default:
+ break;
+ }
+ return false;
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java b/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java
index dbb6600..64594e4 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/awt/Demo.java
@@ -1,5 +1,5 @@
/* Demo.java -- Shows examples of AWT components
- Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath examples.
@@ -153,7 +153,8 @@ class Demo
addSubWindow ("TextField", new TextFieldWindow ());
addSubWindow ("RandomTests", new TestWindow (this));
addSubWindow ("RoundRect", new RoundRectWindow ());
-
+ addSubWindow ("Animation", new AnimationWindow ());
+
Panel sp = new Panel();
PrettyPanel p = new PrettyPanel();
p.setLayout (new GridLayout (windows.size(), 1));
@@ -864,4 +865,35 @@ class Demo
}
}
+ static class AnimationWindow extends SubFrame
+ {
+ AnimationApplet a;
+ public void init ()
+ {
+ initted = true;
+ setTitle("Animation");
+ Button cb = new Button ("Close");
+ cb.addActionListener(new ActionListener () {
+ public void actionPerformed (ActionEvent e)
+ {
+ if (a != null)
+ {
+ a.destroy();
+ dispose();
+ }
+ }
+ });
+ a = new AnimationApplet();
+ add(a, "Center");
+ add(cb, "South");
+ pack();
+ }
+
+ public void show()
+ {
+ super.show();
+ a.init();
+ a.run();
+ }
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/icons/badge.png b/libjava/classpath/examples/gnu/classpath/examples/icons/badge.png
new file mode 100644
index 0000000..2f80ad9
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/icons/badge.png
Binary files differ
diff --git a/libjava/classpath/examples/gnu/classpath/examples/print/Demo.java b/libjava/classpath/examples/gnu/classpath/examples/print/Demo.java
new file mode 100644
index 0000000..0f6a5c8
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/print/Demo.java
@@ -0,0 +1,391 @@
+/* Demo.java -- Simple Java Print Service Demo
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.print;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.print.DocFlavor;
+import javax.print.DocPrintJob;
+import javax.print.PrintException;
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+import javax.print.ServiceUI;
+import javax.print.SimpleDoc;
+import javax.print.attribute.Attribute;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+
+
+/**
+ * A simple demo showing the use of the Java Print Service API.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class Demo extends JFrame
+ implements ActionListener
+{
+ // The discovered print services
+ private static PrintService[] services;
+
+ // variables for the PrintPanel demo
+ private HashPrintRequestAttributeSet atts;
+ private PrintService dialogSelectedService;
+ private JTextField dialogSelectedService_Tf;
+ private JList dialogSelectedServiceAtts;
+ private JComboBox dialogSelectedServicedocFormat;
+ private JTextField selectedFileTf;
+ private File selectedFile;
+
+ // variables for the PrintServicePanel demo
+ private JComboBox serviceBox;
+ private JList docFormat;
+ private JList attCategories;
+
+ static
+ {
+ // lookup all services without any constraints
+ services = PrintServiceLookup.lookupPrintServices(null, null);
+ }
+
+ /**
+ * Constructs the Print Demo
+ * @param title - the demo title.
+ */
+ public Demo(String title)
+ {
+ super(title);
+ JPanel content = new JPanel(new BorderLayout());
+
+ JTabbedPane tabbed = new JTabbedPane();
+ tabbed.addTab("Discover print services", createPrintServicePanel());
+ tabbed.addTab("Print a file", createPrintPanel());
+
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+
+ content.add(tabbed, BorderLayout.CENTER);
+ content.add(closePanel, BorderLayout.SOUTH);
+ getContentPane().add(content);
+ }
+
+ private JPanel createPrintServicePanel()
+ {
+ JPanel panel = new JPanel(new GridBagLayout());
+ GridBagConstraints c = new GridBagConstraints();
+
+ c.insets = new Insets(5,5,5,5);
+ c.gridx = 0;
+ c.gridy = 0;
+ c.anchor = GridBagConstraints.WEST;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ JLabel serviceBoxLb = new JLabel("Available print services: ");
+ panel.add(serviceBoxLb, c);
+
+ c.gridx = 1;
+ c.gridy = 0;
+ serviceBox = new JComboBox(services);
+ serviceBox.setActionCommand("SERVICE");
+ serviceBox.addActionListener(this);
+ panel.add(serviceBox, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ JLabel docFormatLb = new JLabel("Supported DocFormat: ");
+ panel.add(docFormatLb, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ docFormat = new JList(services[0].getSupportedDocFlavors());
+ docFormat.setVisibleRowCount(3);
+ JScrollPane scrollPane = new JScrollPane(docFormat);
+ panel.add(scrollPane, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ JLabel categoriesLb = new JLabel("Supported Attribute categories: ");
+ panel.add(categoriesLb, c);
+
+ c.gridx = 1;
+ c.gridy = 2;
+ attCategories = new JList(services[0].getSupportedAttributeCategories());
+ attCategories.setVisibleRowCount(3);
+ JScrollPane scrollPane2 = new JScrollPane(attCategories);
+ panel.add(scrollPane2, c);
+
+ return panel;
+ }
+
+ private JPanel createPrintPanel()
+ {
+ JPanel panel = new JPanel(new GridBagLayout());
+ GridBagConstraints c = new GridBagConstraints();
+
+ c.insets = new Insets(5,5,5,5);
+ c.gridx = 0;
+ c.gridy = 0;
+ c.gridwidth = 2;
+ JButton serviceBtn = new JButton("Show print dialog ...");
+ serviceBtn.addActionListener(this);
+ panel.add(serviceBtn, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ c.gridwidth = 1;
+ c.anchor = GridBagConstraints.WEST;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ JLabel selectedLb = new JLabel("Selected print service: ");
+ panel.add(selectedLb, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ dialogSelectedService_Tf = new JTextField(25);
+ panel.add(dialogSelectedService_Tf, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ JLabel selectedAttsLb = new JLabel("Selected Attributes: ");
+ panel.add(selectedAttsLb, c);
+
+ c.gridx = 1;
+ c.gridy = 2;
+ c.weighty = 1.5;
+ c.fill = GridBagConstraints.BOTH;
+ dialogSelectedServiceAtts = new JList();
+ dialogSelectedServiceAtts.setVisibleRowCount(3);
+ JScrollPane scrollPane = new JScrollPane(dialogSelectedServiceAtts);
+ panel.add(scrollPane, c);
+
+ c.gridx = 0;
+ c.gridy = 3;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ JLabel fileLb = new JLabel("File to print: ");
+ panel.add(fileLb, c);
+
+ c.gridx = 1;
+ c.gridy = 3;
+ selectedFileTf = new JTextField(25);
+ panel.add(selectedFileTf, c);
+
+ c.gridx = 2;
+ c.gridy = 3;
+ c.fill = GridBagConstraints.NONE;
+ JButton fileBt = new JButton("Choose file");
+ fileBt.addActionListener(this);
+ panel.add(fileBt, c);
+
+ c.gridx = 0;
+ c.gridy = 4;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ JLabel docFormatLb = new JLabel("Document format of file: ");
+ panel.add(docFormatLb, c);
+
+ c.gridx = 1;
+ c.gridy = 4;
+ dialogSelectedServicedocFormat = new JComboBox();
+ panel.add(dialogSelectedServicedocFormat, c);
+
+ c.gridx = 0;
+ c.gridy = 5;
+ c.gridwidth = 2;
+ c.anchor = GridBagConstraints.CENTER;
+ c.fill = GridBagConstraints.NONE;
+ JButton printBt = new JButton("Print");
+ printBt.setActionCommand("PRINT");
+ printBt.addActionListener(this);
+ panel.add(printBt, c);
+
+ return panel;
+ }
+
+ /**
+ * Simple action control - only one listener
+ * @param event
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ if (event.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
+ else if (event.getActionCommand().equals("Choose file"))
+ {
+ JFileChooser chooser = new JFileChooser();
+ chooser.showOpenDialog(this);
+
+ selectedFile = chooser.getSelectedFile();
+
+ if (selectedFile != null)
+ selectedFileTf.setText(selectedFile.getName());
+ else
+ selectedFileTf.setText("None selected");
+ }
+ else if (event.getActionCommand().equals("Show print dialog ..."))
+ {
+ atts = new HashPrintRequestAttributeSet();
+ dialogSelectedService = ServiceUI.printDialog(null, 50, 50, services,
+ null, null, atts);
+
+ if (dialogSelectedService != null)
+ {
+ dialogSelectedService_Tf.setText(dialogSelectedService.getName());
+
+ // we do not want to have the class representation in the dialog
+ // as we later always use an InputStream to open the file selected
+
+ // use set to remove duplicates
+ DocFlavor[] docflavors = dialogSelectedService.getSupportedDocFlavors();
+ HashSet set = new HashSet();
+ for (int i=0; i < docflavors.length; i++)
+ {
+ String charset = docflavors[i].getParameter("charset");
+ String mimetype = docflavors[i].getMediaType() + "/" + docflavors[i].getMediaSubtype();
+ if (charset != null)
+ mimetype += "; charset=" + charset;
+ set.add(mimetype);
+ }
+
+ dialogSelectedServicedocFormat.removeAllItems();
+ for (Iterator it = set.iterator(); it.hasNext(); )
+ dialogSelectedServicedocFormat.addItem(it.next());
+ }
+ else
+ dialogSelectedService_Tf.setText("None selected");
+
+ Attribute[] attsArray = atts.toArray();
+ String[] attsSTr = new String[attsArray.length];
+ for (int i = 0; i < attsSTr.length; i++)
+ attsSTr[i] = attsArray[i].getName() + " - " + attsArray[i].toString();
+
+ dialogSelectedServiceAtts.setListData(attsSTr);
+
+ validate();
+ }
+ else if (event.getActionCommand().equals("PRINT"))
+ {
+ if (selectedFile != null && dialogSelectedService != null)
+ {
+ DocPrintJob job = dialogSelectedService.createPrintJob();
+
+ // choose correct docflavor
+ String mimetype = (String) dialogSelectedServicedocFormat.getSelectedItem();
+
+ DocFlavor flavor = null;
+ if (mimetype.equals(DocFlavor.INPUT_STREAM.GIF.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.GIF;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.AUTOSENSE.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.JPEG.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.JPEG;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.PCL.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.PCL;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.PDF.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.PDF;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.PNG.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.PNG;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.POSTSCRIPT.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.TEXT_HTML_HOST.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.TEXT_HTML_HOST;
+ else if (mimetype.equals(DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST.getMimeType()))
+ flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST;
+ else
+ flavor = new DocFlavor(mimetype, "java.io.InputStream");
+
+ try
+ {
+ SimpleDoc doc = new SimpleDoc(new FileInputStream(selectedFile), flavor, null);
+ job.print(doc, atts);
+ }
+ catch (FileNotFoundException e)
+ {
+ JOptionPane.showMessageDialog(this, "The file was not found.");
+ e.printStackTrace();
+ }
+ catch (PrintException e)
+ {
+ JOptionPane.showMessageDialog(this, e, "PrintException", JOptionPane.ERROR_MESSAGE);
+ e.printStackTrace();
+ }
+ }
+ else
+ JOptionPane.showMessageDialog(this, "Please select a file to print using the FileChooser", "No file selected", JOptionPane.INFORMATION_MESSAGE);
+ }
+ else if (event.getActionCommand().equals("SERVICE"))
+ { // A new service was selected
+ PrintService selected = (PrintService) serviceBox.getSelectedItem();
+
+ DocFlavor[] flavors = selected.getSupportedDocFlavors();
+ docFormat.setListData(flavors);
+ attCategories.setListData(selected.getSupportedAttributeCategories());
+ }
+ }
+
+ /**
+ * Main method.
+ * @param args - nothing defined.
+ */
+ public static void main(String[] args)
+ {
+ Demo app = new Demo("GNU Classpath printing demo");
+ app.pack();
+ app.setVisible(true);
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java
index 856917f..1c6dfa0 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/ButtonDemo.java
@@ -31,22 +31,22 @@ import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
import javax.swing.plaf.metal.MetalIconFactory;
/**
* A simple button demo showing various buttons in different states.
*/
public class ButtonDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
-
- private JPanel content;
private JCheckBox buttonState;
private JButton button1;
@@ -72,13 +72,10 @@ public class ButtonDemo
/**
* Creates a new demo instance.
- *
- * @param title the frame title.
*/
- public ButtonDemo(String title)
+ public ButtonDemo()
{
- super(title);
- JPanel content = createContent();
+ createContent();
// initFrameContent() is only called (from main) when running this app
// standalone
}
@@ -90,15 +87,14 @@ public class ButtonDemo
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -108,19 +104,15 @@ public class ButtonDemo
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = new JPanel(new GridLayout(4, 1));
- panel.add(createButtonPanel());
- panel.add(createTogglePanel());
- panel.add(createCheckBoxPanel());
- panel.add(createRadioPanel());
- content.add(panel);
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = new JPanel(new GridLayout(4, 1));
+ panel.add(createButtonPanel());
+ panel.add(createTogglePanel());
+ panel.add(createCheckBoxPanel());
+ panel.add(createRadioPanel());
+ add(panel);
}
private JPanel createButtonPanel()
@@ -294,10 +286,34 @@ public class ButtonDemo
public static void main(String[] args)
{
- ButtonDemo app = new ButtonDemo("Button Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ ButtonDemo app = new ButtonDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("ButtonDemo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+ /**
+ * Returns a DemoFactory that creates a ButtonDemo.
+ *
+ * @return a DemoFactory that creates a ButtonDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new ButtonDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch b/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch
deleted file mode 100644
index 7d041a0..0000000
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/ClasspathSwingActivityBoard.launch
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.cdt.launch.localCLaunch">
-<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="org.eclipse.cdt.debug.mi.core.CDebugger"/>
-<stringAttribute key="org.eclipse.cdt.launch.protocol" value="mi"/>
-<booleanAttribute key="org.eclipse.cdt.debug.mi.core.STOP_ON_SOLIB_EVENTS" value="false"/>
-<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
-<listAttribute key="org.eclipse.cdt.debug.mi.core.SOLIB_PATH"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
-<booleanAttribute key="org.eclipse.cdt.debug.mi.core.AUTO_SOLIB" value="true"/>
-<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
-<booleanAttribute key="org.eclipse.cdt.launch.use_terminal" value="true"/>
-<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="jamvm"/>
-<booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
-<stringAttribute key="org.eclipse.cdt.debug.mi.core.DEBUG_NAME" value="gdb"/>
-<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="src/jamvm"/>
-<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel gnu.classpath.examples.swing.Demo"/>
-<stringAttribute key="org.eclipse.cdt.debug.mi.core.GDB_INIT" value=""/>
-</launchConfiguration>
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java
index 2af619c..61dee06 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/ComboBoxDemo.java
@@ -37,17 +37,18 @@ import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
-import javax.swing.UIManager;
+import javax.swing.SwingUtilities;
import javax.swing.plaf.metal.MetalIconFactory;
/**
* A simple demo showing various combo boxes in different states.
*/
public class ComboBoxDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
@@ -69,7 +70,6 @@ public class ComboBoxDemo
}
}
- private JPanel content;
private JCheckBox comboState1;
private JComboBox combo1;
private JComboBox combo2;
@@ -96,15 +96,11 @@ public class ComboBoxDemo
/**
* Creates a new demo instance.
- *
- * @param title the frame title.
*/
- public ComboBoxDemo(String title)
+ public ComboBoxDemo()
{
- super(title);
- JPanel content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ super();
+ createContent();
}
/**
@@ -114,15 +110,14 @@ public class ComboBoxDemo
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -132,21 +127,17 @@ public class ComboBoxDemo
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = new JPanel(new GridLayout(6, 1));
- panel.add(createPanel1());
- panel.add(createPanel2());
- panel.add(createPanel3());
- panel.add(createPanel4());
- panel.add(createPanel5());
- panel.add(createPanel6());
- content.add(panel);
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = new JPanel(new GridLayout(6, 1));
+ panel.add(createPanel1());
+ panel.add(createPanel2());
+ panel.add(createPanel3());
+ panel.add(createPanel4());
+ panel.add(createPanel5());
+ panel.add(createPanel6());
+ add(panel);
}
private JPanel createPanel1()
@@ -362,17 +353,34 @@ public class ComboBoxDemo
public static void main(String[] args)
{
- try
- {
- UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- ComboBoxDemo app = new ComboBoxDemo("ComboBox Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ ComboBoxDemo app = new ComboBoxDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame();
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+ /**
+ * Returns a DemoFactory that creates a ComboBoxDemo.
+ *
+ * @return a DemoFactory that creates a ComboBoxDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new ComboBoxDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java
index 7cb7226..0f0b355 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/Demo.java
@@ -27,74 +27,34 @@ import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
-import javax.swing.border.*;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
+import javax.swing.plaf.metal.MetalTheme;
import javax.swing.plaf.metal.OceanTheme;
+import java.lang.reflect.Method;
import java.net.URL;
public class Demo
{
JFrame frame;
- static Color blueGray = new Color(0xdc, 0xda, 0xd5);
- static
- {
- try
- {
- if (System.getProperty("swing.defaultlaf") == null)
- {
- StringBuffer text = new StringBuffer();
- text.append("You may change the Look and Feel of this\n");
- text.append("Demo by setting the system property\n");
- text.append("-Dswing.defaultlaf=<LAFClassName>\n");
- text.append("\n");
- text.append("Possible values for <LAFClassName> are:\n");
- text.append("\n");
- text.append("* javax.swing.plaf.metal.MetalLookAndFeel\n");
- text.append(" the default GNU Classpath L&F\n");
- text.append("\n");
- text.append("* gnu.classpath.examples.swing.GNULookAndFeel\n");
- text.append(" the GNU Look and Feel\n");
- text.append(" (derived from javax.swing.plaf.basic.BasicLookAndFeel)\n");
- text.append("\n");
- text.append("MetalLookAndFeel supports different Themes.\n");
- text.append("DefaultMetalTheme (the default) and OceanTheme (in development)\n");
-
- final String DEFAULT = "MetalLookAndFeel (default)";
- final String OCEAN = "MetalLookAndFeel (Ocean)";
- final String GNU = "GNULookAndFeel";
- final String[] lafs = new String[] { DEFAULT, OCEAN, GNU };
-
- int laf = JOptionPane.showOptionDialog(null, text /* textPane */,
- "Look and Feel choice",
- JOptionPane.OK_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null, lafs, DEFAULT);
- if (laf == 0)
- {
- MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
- UIManager.setLookAndFeel(new MetalLookAndFeel());
- }
- if (laf == 1)
- {
- MetalLookAndFeel.setCurrentTheme(new OceanTheme());
- UIManager.setLookAndFeel(new MetalLookAndFeel());
- }
- else if (laf == 2)
- UIManager.setLookAndFeel(new GNULookAndFeel());
- }
- }
- catch (UnsupportedLookAndFeelException e)
- {
- System.err.println("Cannot install GNULookAndFeel, exiting");
- System.exit(1);
- }
- }
+ /**
+ * The main desktop. This is package private to avoid synthetic accessor
+ * method.
+ */
+ JDesktopPane desktop;
+
+ /**
+ * The themes menu. This is implemented as a field so that the L&F switcher
+ * can disable the menu when a non-Metal L&F is selected.
+ */
+ JMenu themesMenu;
+
+ static Color blueGray = new Color(0xdc, 0xda, 0xd5);
- static Icon stockIcon(String s)
+ private static Icon stockIcon(String s)
{
return getIcon("/gnu/classpath/examples/icons/stock-" + s + ".png", s);
}
@@ -104,14 +64,14 @@ public class Demo
return getIcon("/gnu/classpath/examples/icons/big-" + s + ".png", s);
}
- static Icon getIcon(String location, String name)
+ private static Icon getIcon(String location, String name)
{
URL url = Demo.class.getResource(location);
if (url == null) System.err.println("WARNING " + location + " not found.");
return new ImageIcon(url, name);
}
- static JMenuBar mkMenuBar()
+ private JMenuBar mkMenuBar()
{
JMenuBar bar = new JMenuBar();
@@ -160,90 +120,135 @@ public class Demo
edit.add(preferences);
JMenu examples = new JMenu("Examples");
- new PopUpAction("Buttons",
- (new ButtonDemo("Button Demo")).createContent(),
- examples);
-
- new PopUpAction("Slider",
- (new SliderDemo("Slider Demo")).createContent(),
- examples);
-
- new PopUpAction("ProgressBar",
- ProgressBarDemo.createContent(),
- examples);
-
- new PopUpAction("List",
- mkListPanel(new String[] { "hello",
- "this",
- "is",
- "a",
- "list",
- "that",
- "wraps",
- "over"}),
- examples);
-
- new PopUpAction("Scrollbar",
- (new ScrollBarDemo("ScrollBarDemo")).createContent(),
- examples);
-
- new PopUpAction("Viewport",
- mkViewportBox(mkBigButton("View Me!")),
- examples);
-
- new PopUpAction("ScrollPane",
- mkScrollPane(mkBigButton("Scroll Me!")),
- examples);
-
- new PopUpAction("TabPane",
- mkTabs(new String[] {"happy",
- "sad",
- "indifferent"}),
- examples);
-
- new PopUpAction("Spinner",
- new SpinnerDemo("Spinner Demo").createContent(), examples);
-
- new PopUpAction("TextField",
- (new TextFieldDemo("TextField Demo")).createContent(),
- examples);
-
- new PopUpAction("FileChooser",
- (new FileChooserDemo("FileChooser Demo")).createContent(),
- examples);
-
- new PopUpAction("ColorChooser",
- mkColorChooser(),
- examples);
-
- new PopUpAction("ComboBox",
- (new ComboBoxDemo("ComboBox Demo")).createContent(),
- examples);
-
- new PopUpAction("Editor",
- mkEditorPane(),
- examples);
+ examples.add(new JMenuItem(new PopupAction("Buttons",
+ ButtonDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("Slider",
+ SliderDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("ProgressBar",
+ ProgressBarDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("Scrollbar",
+ ScrollBarDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("Spinner",
+ SpinnerDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("TextField",
+ TextFieldDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("TextArea",
+ TextAreaDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("FileChooser",
+ FileChooserDemo.createDemoFactory())));
+
+ examples.add(new JMenuItem(new PopupAction("ComboBox",
+ ComboBoxDemo.createDemoFactory())));
+
+ examples.add(new JMenuItem(new PopupAction("Table",
+ TableDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("List",
+ ListDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("TabbedPane",
+ TabbedPaneDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("Tree",
+ TreeDemo.createDemoFactory())));
+ examples.add(new JMenuItem(new PopupAction("Theme Editor",
+ MetalThemeEditor.createDemoFactory())));
+
+ examples.add(new JMenuItem(new PopupAction("DocumentFilter",
+ DocumentFilterDemo.createDemoFactory())));
+
+ examples.add(new JMenuItem(new PopupAction("NavigationFilter",
+ NavigationFilterDemo.createDemoFactory())));
+
+ final JMenuItem vmMenu;
- new PopUpAction("Tree",
- mkTree(),
- examples);
-
- new PopUpAction("Table",
- mkTable(),
- examples);
-
help.add(new JMenuItem("just play with the widgets"));
help.add(new JMenuItem("and enjoy the sensation of"));
help.add(new JMenuItem("your neural connections growing"));
+ help.add(new JSeparator());
+ help.add(vmMenu = new JMenuItem("Really, which VM is this running on?"));
+ vmMenu.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ae)
+ {
+ String message = "This is "
+ + System.getProperty("java.vm.name")
+ + " Version "
+ + System.getProperty("java.vm.version")
+ + " distributed by "
+ + System.getProperty("java.vm.vendor")
+ + ".";
+
+ String gnuClasspath = System.getProperty("gnu.classpath.version");
+ if(gnuClasspath != null)
+ message += "\nThe runtime's libraries are "
+ + "kindly provided by the "
+ + "members of GNU Classpath and are in version "
+ + gnuClasspath + ".";
+
+ JOptionPane.showMessageDialog(vmMenu, message);
+ }
+ });
+
+ // Create L&F menu.
+ JMenu lafMenu = new JMenu("Look and Feel");
+ ButtonGroup lafGroup = new ButtonGroup();
+ UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
+ String currentLaf = UIManager.getLookAndFeel().getClass().getName();
+ for (int i = 0; i < lafs.length; ++i)
+ {
+ UIManager.LookAndFeelInfo laf = lafs[i];
+ ChangeLAFAction action = new ChangeLAFAction(laf);
+ JRadioButtonMenuItem lafItem = new JRadioButtonMenuItem(action);
+ boolean selected = laf.getClassName().equals(currentLaf);
+ lafItem.setSelected(selected);
+ lafMenu.add(lafItem);
+ }
+
+ // Create themes menu.
+ themesMenu = new JMenu("Themes");
+ ButtonGroup themesGroup = new ButtonGroup();
+ // In order to make the demo runable on a 1.4 type VM we have to avoid calling
+ // MetalLookAndFeel.getCurrentTheme(). We simply check whether this method exists
+ // and is public.
+ Method m = null;
+ try
+ {
+ m = MetalLookAndFeel.class.getMethod("getCurrentTheme", null);
+ }
+ catch (NoSuchMethodException nsme)
+ {
+ // Ignore it.
+ }
+
+ if (m != null)
+ {
+ JRadioButtonMenuItem ocean =
+ new JRadioButtonMenuItem(new ChangeThemeAction(new OceanTheme()));
+ ocean.setSelected(MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme);
+ themesMenu.add(ocean);
+ themesGroup.add(ocean);
+
+ JRadioButtonMenuItem steel =
+ new JRadioButtonMenuItem(new ChangeThemeAction(new DefaultMetalTheme()));
+ ocean.setSelected(MetalLookAndFeel.getCurrentTheme()
+ instanceof DefaultMetalTheme);
+ themesMenu.add(steel);
+ themesGroup.add(steel);
+ }
+ else
+ {
+ themesMenu.setEnabled(false);
+ }
+
bar.add(file);
bar.add(edit);
bar.add(examples);
+ bar.add(lafMenu);
+ bar.add(themesMenu);
bar.add(help);
return bar;
}
- static void triggerDialog(final JButton but, final String dir)
+ private static void triggerDialog(final JButton but, final String dir)
{
but.addActionListener(new ActionListener()
{
@@ -277,7 +282,7 @@ public class Demo
return bar;
}
- static String valign2str(int a)
+ private static String valign2str(int a)
{
switch (a)
{
@@ -307,9 +312,9 @@ public class Demo
}
}
- static JButton mkButton(String title, Icon icon,
- int hAlign, int vAlign,
- int hPos, int vPos)
+ private static JButton mkButton(String title, Icon icon,
+ int hAlign, int vAlign,
+ int hPos, int vPos)
{
JButton b;
if (icon == null)
@@ -338,93 +343,7 @@ public class Demo
}
- static JPanel mkButtonWorld()
- {
- Icon ii = bigStockIcon("home");
- int CENTER = SwingConstants.CENTER;
- int TOP = SwingConstants.TOP;
- int BOTTOM = SwingConstants.BOTTOM;
-
- int[] valigns = new int[] {SwingConstants.CENTER,
- SwingConstants.TOP,
- SwingConstants.BOTTOM};
-
- int[] haligns = new int[] {SwingConstants.CENTER,
- SwingConstants.RIGHT,
- SwingConstants.LEFT};
-
- Border[] borders = new Border[] {
- new SoftBevelBorder(BevelBorder.RAISED),
- new SoftBevelBorder(BevelBorder.LOWERED),
- new BevelBorder(BevelBorder.RAISED),
-
- LineBorder.createBlackLineBorder(),
- new MatteBorder(2, 2, 2, 2, Color.GREEN),
- LineBorder.createGrayLineBorder(),
-
- new BevelBorder(BevelBorder.LOWERED),
- new EtchedBorder(EtchedBorder.RAISED),
- new EtchedBorder(EtchedBorder.LOWERED)
- };
-
- JComponent[] comps = new JComponent[3*3];
-
- int q = 0;
-
- JPanel panel = new JPanel();
- panel.setLayout(new GridLayout(3, 3));
-
- for (int i = 0; i < 3; ++i)
- for (int j = 0; j < 3; ++j)
- {
- JButton b = mkButton(halign2str(haligns[i])
- + valign2str(valigns[j]),
- ii,
- -1, -1, haligns[i], valigns[j]);
- b.setBorder(borders[q++]);
- JPanel tmp = new JPanel();
- tmp.setBorder(new MatteBorder(5, 5, 5, 5, blueGray));
- tmp.add(b);
- panel.add(tmp);
- }
-
- return panel;
- }
-
- private static class CheckCellRenderer
- extends JCheckBox implements ListCellRenderer
- {
- public Component getListCellRendererComponent(JList list,
- Object value,
- int index,
- boolean isSelected,
- boolean cellHasFocus)
- {
- setSelected(isSelected);
- setText(value.toString());
-
- return this;
- }
- }
-
- private static class LabelCellRenderer
- extends DefaultListCellRenderer
- {
- public Component getListCellRendererComponent(JList list,
- Object value,
- int index,
- boolean isSelected,
- boolean cellHasFocus)
- {
- Component c = super.getListCellRendererComponent(list, value, index,
- isSelected,
- cellHasFocus);
-
- return c;
- }
- }
-
- public static JScrollPane mkScrollPane(JComponent inner)
+ private static JScrollPane mkScrollPane(JComponent inner)
{
JScrollPane jsp;
jsp = new JScrollPane(inner,
@@ -434,275 +353,24 @@ public class Demo
return jsp;
}
- private static JPanel mkTreeWorld()
- {
- // non-leafs
- DefaultMutableTreeNode root = new DefaultMutableTreeNode("Exotic Subsistence");
- DefaultMutableTreeNode fruit = new DefaultMutableTreeNode("Interesting Fruit");
- DefaultMutableTreeNode veg = new DefaultMutableTreeNode("Extraordinary Vegetables");
- DefaultMutableTreeNode liq = new DefaultMutableTreeNode("Peculiar Liquids");
-
- // leafs
- DefaultMutableTreeNode f1 = new DefaultMutableTreeNode("Abiu");
- DefaultMutableTreeNode f2 = new DefaultMutableTreeNode("Bamboo Shoots");
- DefaultMutableTreeNode f3 = new DefaultMutableTreeNode("Breadfruit");
- DefaultMutableTreeNode f4 = new DefaultMutableTreeNode("Canistel");
- DefaultMutableTreeNode f5 = new DefaultMutableTreeNode("Duku");
- DefaultMutableTreeNode f6 = new DefaultMutableTreeNode("Guava");
- DefaultMutableTreeNode f7 = new DefaultMutableTreeNode("Jakfruit");
- DefaultMutableTreeNode f8 = new DefaultMutableTreeNode("Quaribea");
-
- DefaultMutableTreeNode v1 = new DefaultMutableTreeNode("Amaranth");
- DefaultMutableTreeNode v2 = new DefaultMutableTreeNode("Kiwano");
- DefaultMutableTreeNode v3 = new DefaultMutableTreeNode("Leeks");
- DefaultMutableTreeNode v4 = new DefaultMutableTreeNode("Luffa");
- DefaultMutableTreeNode v5 = new DefaultMutableTreeNode("Chayote");
- DefaultMutableTreeNode v6 = new DefaultMutableTreeNode("Jicama");
- DefaultMutableTreeNode v7 = new DefaultMutableTreeNode("Okra");
-
- DefaultMutableTreeNode l1 = new DefaultMutableTreeNode("Alcoholic");
- DefaultMutableTreeNode l11 = new DefaultMutableTreeNode("Caipirinha");
- DefaultMutableTreeNode l21 = new DefaultMutableTreeNode("Mojito");
- DefaultMutableTreeNode l31 = new DefaultMutableTreeNode("Margarita");
- DefaultMutableTreeNode l41 = new DefaultMutableTreeNode("Martini");
- DefaultMutableTreeNode l5 = new DefaultMutableTreeNode("Non Alcoholic");
- DefaultMutableTreeNode l55 = new DefaultMutableTreeNode("Babaji");
- DefaultMutableTreeNode l65 = new DefaultMutableTreeNode("Chikita");
-
- root.add(fruit);
- root.add(veg);
- root.add(liq);
- fruit.add(f1);
- fruit.add(f2);
- fruit.add(f3);
- fruit.add(f4);
- fruit.add(f5);
- fruit.add(f6);
- fruit.add(f7);
- fruit.add(f8);
- veg.add(v1);
- veg.add(v2);
- veg.add(v3);
- veg.add(v4);
- veg.add(v5);
- veg.add(v6);
- veg.add(v7);
- liq.add(l1);
- l1.add(l11);
- l1.add(l21);
- l1.add(l31);
- l1.add(l41);
- liq.add(l5);
- l5.add(l55);
- l5.add(l65);
-
- final JTree tree = new JTree(root);
- tree.setLargeModel(true);
- tree.setEditable(true);
- DefaultTreeSelectionModel dtsm = new DefaultTreeSelectionModel();
- dtsm.setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
- tree.setSelectionModel(dtsm);
-
- // buttons to add and delete
- JButton add = mkButton("add element");
- add.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- for (int i = 0; i < tree.getRowCount(); i++)
- {
- if (tree.isRowSelected(i))
- {
- TreePath p = tree.getPathForRow(i);
- DefaultMutableTreeNode n = (DefaultMutableTreeNode) p.
- getLastPathComponent();
- n.add(new DefaultMutableTreeNode("New Element"));
- tree.repaint();
- break;
- }
- }
- }
- });
-
-
- JPanel p1 = new JPanel();
- p1.setLayout(new BorderLayout());
-
- JPanel p2 = new JPanel();
- p2.add(add);
-
- p1.add(p2, BorderLayout.NORTH);
- p1.add(mkScrollPane(tree), BorderLayout.CENTER);
-
- return p1;
- }
-
- public static JPanel mkListWorld()
- {
-
- String foo[] = new String[] {
- "non alcoholic ",
- "carbonated ",
- "malted ",
- "fresh squeezed ",
- "imported ",
- "high fructose ",
- "enriched "
- };
-
- String bar[] = new String[] {
- "orange juice",
- "ginger beer",
- "yak milk",
- "corn syrup",
- "herbal remedy"
- };
-
- final DefaultListModel mod = new DefaultListModel();
- final JList list1 = new JList(mod);
- final JList list2 = new JList(mod);
-
- list2.setSelectionModel(list1.getSelectionModel());
- for (int i = 0; i < bar.length; ++i)
- for (int j = 0; j < foo.length; ++j)
- mod.addElement(foo[j] + bar[i]);
-
- list1.setCellRenderer(new LabelCellRenderer());
- list2.setCellRenderer(new CheckCellRenderer());
-
- JButton add = mkButton("add element");
- add.addActionListener(new ActionListener()
- {
- int i = 0;
- public void actionPerformed(ActionEvent e)
- {
- mod.addElement("new element " + i);
- ++i;
- }
- });
-
- JButton del = mkButton("delete selected");
- del.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- for (int i = 0; i < mod.getSize(); ++i)
- if (list1.isSelectedIndex(i))
- mod.remove(i);
- }
- });
-
-
- JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
- splitter.add(mkScrollPane(list1), JSplitPane.LEFT);
- splitter.add(mkScrollPane(list2), JSplitPane.RIGHT);
-
- JPanel p1 = new JPanel();
- p1.setLayout(new BorderLayout());
-
- JPanel p2 = new JPanel();
- p2.setLayout(new GridLayout(1, 2));
- p2.add(add);
- p2.add(del);
-
- p1.add(p2, BorderLayout.NORTH);
- p1.add(splitter, BorderLayout.CENTER);
- return p1;
- }
-
-
- static JPanel mkDesktopWorld()
- {
-
- final JDesktopPane desk = new JDesktopPane();
- desk.setDesktopManager(new DefaultDesktopManager());
- desk.setPreferredSize(new Dimension(300,300));
- desk.setMinimumSize(new Dimension(300,300));
- JButton but = mkButton("add frame");
- but.addActionListener(new ActionListener()
- {
- int i = 10;
- public void actionPerformed(ActionEvent e)
- {
- JInternalFrame f;
- f = new JInternalFrame("internal", true, true, true, true);
- f.getContentPane().setLayout(new BorderLayout());
- f.getContentPane().add(mkToolBar(), BorderLayout.NORTH);
- f.getContentPane().add(mkButton(bigStockIcon("fullscreen")),
- BorderLayout.CENTER);
- desk.add(f);
- f.setBounds(i, i, 250, 200);
- f.setVisible(true);
- i += 30;
- }
- });
-
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());
- panel.add(desk, BorderLayout.CENTER);
- panel.add(but, BorderLayout.NORTH);
- but.doClick();
- but.doClick();
- JInternalFrame palette = new JInternalFrame("Palette", true, true, true,
- true);
- palette.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
- desk.add(palette, JDesktopPane.PALETTE_LAYER);
- JLabel label = new JLabel("This is a floating palette!");
- palette.getContentPane().add(label);
- palette.pack();
- palette.setVisible(true);
- return panel;
- }
-
- static JPanel mkTabWorld()
- {
- JPanel panel = new JPanel(new GridLayout(2, 2));
- panel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
- JTabbedPane tabs1 = new JTabbedPane(SwingConstants.TOP);
- tabs1.add("Top Item 1", new JButton("Button"));
- tabs1.add("Top Item 2", new JButton("Button"));
- JTabbedPane tabs2 = new JTabbedPane(SwingConstants.LEFT);
- tabs2.add("Left Item 1", new JButton("Button"));
- tabs2.add("Left Item 2", new JButton("Button"));
- JTabbedPane tabs3 = new JTabbedPane(SwingConstants.BOTTOM);
- tabs3.add("Bottom Item 1", new JButton("Button"));
- tabs3.add("Bottom Item 2", new JButton("Button"));
- JTabbedPane tabs4 = new JTabbedPane(SwingConstants.RIGHT);
- tabs4.add("Right Item 1", new JButton("Button"));
- tabs4.add("Right Item 2", new JButton("Button"));
- panel.add(tabs1);
- panel.add(tabs2);
- panel.add(tabs3);
- panel.add(tabs4);
- return panel;
- }
-
- static JTabbedPane mkTabbedPane()
- {
- JTabbedPane tabs = new JTabbedPane();
-
- tabs.add("Button world!", mkButtonWorld());
- tabs.add("List world!", mkListWorld());
- tabs.add("Desktop world!", mkDesktopWorld());
- tabs.add("Tree world!", mkTreeWorld());
- tabs.add("Tab world!", mkTabWorld());
- return tabs;
- }
-
public Demo()
{
frame = new JFrame("Swing Activity Board");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar(mkMenuBar());
JComponent component = (JComponent) frame.getContentPane();
component.setLayout(new BorderLayout());
component.add(mkToolBar(), BorderLayout.NORTH);
JPanel main = new JPanel();
main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
- main.add(mkTabbedPane());
+ desktop = createDesktop();
+
+ // Put the desktop in a scrollpane. The scrollbars may show then
+ // up when the them or LaF is changed.
+ main.add(new JScrollPane(desktop));
main.add(mkButtonBar());
component.add(main, BorderLayout.CENTER);
frame.pack();
- frame.setSize(800, 600);
frame.show();
}
@@ -720,38 +388,14 @@ public class Demo
SwingUtilities.invokeLater(new LaterMain());
}
- public static JList mkList(Object[] elts)
- {
- JList list = new JList(elts);
- list.setFont(new Font("Luxi", Font.PLAIN, 14));
- return list;
- }
-
- public static JTabbedPane mkTabs(String[] names)
- {
- JTabbedPane tabs = new JTabbedPane();
- for (int i = 0; i < names.length; ++i)
- {
- tabs.addTab(names[i], mkButton(names[i]));
- }
- return tabs;
- }
-
- public static JComboBox mkComboBox(String[] names)
- {
- JComboBox box = new JComboBox(names);
- return box;
- }
-
- public static JButton mkBigButton(String title)
+ private static JButton mkBigButton(String title)
{
JButton b = new JButton(title);
b.setMargin(new Insets(5,5,5,5));
- //b.setFont(new Font("Luxi", Font.PLAIN, 14));
return b;
}
- public static JPanel mkPanel(JComponent[] inners)
+ private static JPanel mkPanel(JComponent[] inners)
{
JPanel p = new JPanel();
for (int i = 0; i < inners.length; ++i)
@@ -761,85 +405,7 @@ public class Demo
return p;
}
- public static JScrollBar mkScrollBar()
- {
- JScrollBar scrollbar = new JScrollBar();
- return scrollbar;
- }
-
- public static JPanel mkViewportBox(final JComponent inner)
- {
- final JViewport port = new JViewport();
- port.setView(inner);
- JButton left = mkBigButton("left");
- JButton right = mkBigButton("right");
-
- left.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- Point p = port.getViewPosition();
- port.setViewPosition(new Point(p.x - 10, p.y));
- }
- });
-
- right.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- Point p = port.getViewPosition();
- port.setViewPosition(new Point(p.x + 10, p.y));
- }
- });
-
- return mkPanel(new JComponent[] {port, left, right});
- }
-
- public static JPanel mkListPanel(Object[] elts)
- {
- final DefaultListModel mod = new DefaultListModel();
- final JList list1 = new JList(mod);
- list1.setLayoutOrientation(JList.VERTICAL_WRAP);
- list1.setVisibleRowCount(4);
- final JList list2 = new JList(mod);
- list2.setLayoutOrientation(JList.VERTICAL_WRAP);
- list2.setVisibleRowCount(4);
-
- list2.setSelectionModel(list1.getSelectionModel());
- for (int i = 0; i < elts.length; ++i)
- mod.addElement(elts[i]);
- list1.setCellRenderer(new LabelCellRenderer());
- list2.setCellRenderer(new CheckCellRenderer());
-
- JButton add = mkBigButton("add element");
- add.addActionListener(new ActionListener()
- {
- int i = 0;
- public void actionPerformed(ActionEvent e)
- {
- mod.addElement("new element " + i);
- ++i;
- }
- });
-
- JButton del = mkBigButton("delete selected");
- del.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- for (int i = 0; i < mod.getSize(); ++i)
- if (list1.isSelectedIndex(i))
- mod.remove(i);
- }
- });
-
- return mkPanel(new JComponent[] {list1, //mkScrollPane(list1),
- list2, //mkScrollPane(list2),
- mkPanel(new JComponent[] {add, del})});
- }
-
-
- public static JButton mkDisposerButton(final JFrame c)
+ static JButton mkDisposerButton(final JFrame c)
{
JButton close = mkBigButton("Close");
close.addActionListener(new ActionListener()
@@ -857,50 +423,50 @@ public class Demo
return new JColorChooser();
}
- private static class PopUpAction
- implements ActionListener
- {
- private JComponent inner;
- private String name;
-
- PopUpAction(String n, JComponent i, JMenu m)
- {
- name = n;
- inner = i;
-
- JMenuItem item = new JMenuItem(name);
- item.addActionListener(this);
- m.add(item);
- }
-
- PopUpAction(String n, JComponent i, JPanel p)
+ /**
+ * This action brings up a new Window with the specified content.
+ */
+ private class PopupAction
+ extends AbstractAction
+ {
+ /**
+ * The component to be shown.
+ */
+ private DemoFactory demoFactory;
+
+ /**
+ * Creates a new PopupAction with the specified name and showing the
+ * component created by the specified DemoFactory when activated.
+ *
+ * @param n the name of the action
+ * @param factory the demo factory
+ */
+ PopupAction(String n, DemoFactory factory)
{
- name = n;
- inner = i;
-
- JButton b = mkBigButton(name);
- b.addActionListener(this);
- p.add(b);
+ putValue(NAME, n);
+ demoFactory = factory;
}
+ /**
+ * Brings up the new window showing the component stored in the
+ * constructor.
+ *
+ * @param e the action event that triggered the action
+ */
public void actionPerformed(ActionEvent e)
{
- JFrame frame = new JFrame(name);
- frame.getContentPane().setLayout(new BorderLayout());
- frame.getContentPane().add(inner, BorderLayout.CENTER);
- frame.getContentPane().add(mkDisposerButton(frame), BorderLayout.SOUTH);
+ JInternalFrame frame = new JInternalFrame((String) getValue(NAME));
+ frame.setClosable(true);
+ frame.setIconifiable(true);
+ frame.setMaximizable(true);
+ frame.setResizable(true);
+ frame.setContentPane(demoFactory.createDemo());
frame.pack();
- frame.show();
+ desktop.add(frame);
+ frame.setVisible(true);
}
}
- private static JEditorPane mkEditorPane()
- {
- JEditorPane editorPane = new JEditorPane();
- editorPane.setEditable(true);
- return editorPane;
- }
-
/**
* Create the tree.
*
@@ -947,93 +513,42 @@ public class Demo
}
}
- /**
- * Make a sample table component.
- */
- private static JPanel mkTable()
- {
- return new TableDemo("Table demo, double click to edit")
- .createContent();
- }
-
private JPanel mkButtonBar()
{
- JPanel panel = new JPanel(new FlowLayout());
- new PopUpAction("Buttons",
- (new ButtonDemo("Button Demo")).createContent(),
- panel);
-
- new PopUpAction("Slider",
- (new SliderDemo("Slider Demo")).createContent(),
- panel);
-
- new PopUpAction("ProgressBar",
- ProgressBarDemo.createContent(),
- panel);
-
-
- new PopUpAction("List",
- mkListPanel(new String[] { "hello",
- "this",
- "is",
- "a",
- "list",
- "that",
- "wraps",
- "over"}),
- panel);
-
- new PopUpAction("Scrollbar",
- (new ScrollBarDemo("ScrollBar Demo")).createContent(),
- panel);
-
- new PopUpAction("Viewport",
- mkViewportBox(mkBigButton("View Me!")),
- panel);
-
- new PopUpAction("ScrollPane",
- mkScrollPane(mkBigButton("Scroll Me!")),
- panel);
-
- new PopUpAction("TabPane",
- mkTabs(new String[] {"happy",
- "sad",
- "indifferent"}),
- panel);
-
- new PopUpAction("Spinner",
- new SpinnerDemo("Spinner Demo").createContent(), panel);
-
- new PopUpAction("TextField",
- (new TextFieldDemo("TextField Demo")).createContent(),
- panel);
-
- new PopUpAction("FileChooser",
- (new FileChooserDemo("FileChooser Demo")).createContent(),
- panel);
-
- new PopUpAction("ColorChooser",
- mkColorChooser(),
- panel);
-
- new PopUpAction("ComboBox",
- (new ComboBoxDemo("ComboBox Demo")).createContent(),
- panel);
-
- new PopUpAction("Editor",
- mkEditorPane(),
- panel);
-
- new PopUpAction("Tree",
- mkTree(),
- panel);
-
- new PopUpAction("Table",
- mkTable(),
- panel);
-
+ JPanel panel = new JPanel(new GridLayout(3, 1, 5, 5));
+ panel.add(new JButton(new PopupAction("Buttons",
+ ButtonDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("Slider",
+ SliderDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("ProgressBar",
+ ProgressBarDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("ScrollBar",
+ ScrollBarDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("Spinner",
+ SpinnerDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("TextField",
+ TextFieldDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("TextArea",
+ TextAreaDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("FileChooser",
+ FileChooserDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("ComboBox",
+ ComboBoxDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("Table",
+ TableDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("List",
+ ListDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("TabbedPane",
+ TabbedPaneDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("Tree",
+ TreeDemo.createDemoFactory())));
+ panel.add(new JButton(new PopupAction("Theme Editor",
+ MetalThemeEditor.createDemoFactory())));
JButton exitDisposer = mkDisposerButton(frame);
panel.add(exitDisposer);
+
+ panel.setMaximumSize(new Dimension(Integer.MAX_VALUE,
+ panel.getPreferredSize().height));
exitDisposer.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
@@ -1043,4 +558,104 @@ public class Demo
});
return panel;
}
+
+ /**
+ * Creates and returns the main desktop.
+ *
+ * @return the main desktop
+ */
+ private JDesktopPane createDesktop()
+ {
+ JDesktopPane d = new DemoDesktop();
+ d.setPreferredSize(new Dimension(900, 500));
+ return d;
+ }
+
+ /**
+ * This Action is used to switch Metal themes.
+ */
+ class ChangeThemeAction extends AbstractAction
+ {
+ /**
+ * The theme to switch to.
+ */
+ MetalTheme theme;
+
+ /**
+ * Creates a new ChangeThemeAction for the specified theme.
+ *
+ * @param t the theme to switch to
+ */
+ ChangeThemeAction(MetalTheme t)
+ {
+ theme = t;
+ putValue(NAME, t.getName());
+ }
+
+ /**
+ * Changes the theme to the one specified in the constructor.
+ *
+ * @param event the action event that triggered this action
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ MetalLookAndFeel.setCurrentTheme(theme);
+ try
+ {
+ // Only switch theme if we have a metal L&F. It is still necessary
+ // to install a new MetalLookAndFeel instance.
+ if (UIManager.getLookAndFeel() instanceof MetalLookAndFeel)
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
+ }
+ catch (UnsupportedLookAndFeelException ex)
+ {
+ ex.printStackTrace();
+ }
+ SwingUtilities.updateComponentTreeUI(frame);
+ }
+
+ }
+
+ /**
+ * This Action is used to switch Metal themes.
+ */
+ class ChangeLAFAction extends AbstractAction
+ {
+ /**
+ * The theme to switch to.
+ */
+ private UIManager.LookAndFeelInfo laf;
+
+ /**
+ * Creates a new ChangeLAFAction for the specified L&F.
+ *
+ * @param l the L&F to switch to
+ */
+ ChangeLAFAction(UIManager.LookAndFeelInfo l)
+ {
+ laf = l;
+ putValue(NAME, laf.getName());
+ }
+
+ /**
+ * Changes the theme to the one specified in the constructor.
+ *
+ * @param event the action event that triggered this action
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ try
+ {
+ UIManager.setLookAndFeel(laf.getClassName());
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ SwingUtilities.updateComponentTreeUI(frame);
+ themesMenu.setEnabled(laf.getClassName()
+ .equals("javax.swing.plaf.metal.MetalLookAndFeel"));
+ }
+
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/DemoDesktop.java b/libjava/classpath/examples/gnu/classpath/examples/swing/DemoDesktop.java
new file mode 100644
index 0000000..edfaf36
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/DemoDesktop.java
@@ -0,0 +1,82 @@
+/* DemoDesktop.java -- A custom desktop for the demo
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.Graphics;
+
+import javax.swing.ImageIcon;
+import javax.swing.JDesktopPane;
+
+/**
+ * A customized Desktop for the GNU Classpath Swing demo that paints the
+ * GNU Classpath Icon in the middle of the desktop.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class DemoDesktop
+ extends JDesktopPane
+{
+
+ /**
+ * The icon that's painted centered on the desktop.
+ */
+ private ImageIcon image;
+
+ /**
+ * Creates a new desktop.
+ */
+ DemoDesktop()
+ {
+ super();
+ String badge = "/gnu/classpath/examples/icons/badge.png";
+ image = new ImageIcon(getClass().getResource(badge));
+ }
+
+ /**
+ * Paints the desktop including the icon.
+ *
+ * @param g the graphics to use for painting
+ */
+ protected void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+ image.paintIcon(this, g, (getWidth() - image.getIconWidth()) / 2,
+ (getHeight() - image.getIconHeight()) / 2);
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/DemoFactory.java b/libjava/classpath/examples/gnu/classpath/examples/swing/DemoFactory.java
new file mode 100644
index 0000000..0320f31
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/DemoFactory.java
@@ -0,0 +1,57 @@
+/* DemoFactory.java -- Creates components used as separate Swing demos
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import javax.swing.JComponent;
+
+/**
+ * Creates components used in the Swing demo as separate demos.
+ *
+ * @author Roman Kennke (kennke@aicas.de)
+ */
+public interface DemoFactory
+{
+
+ /**
+ * Creates the component that should be as demo application.
+ *
+ * @return the component that should be as demo application
+ */
+ JComponent createDemo();
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/DocumentFilterDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/DocumentFilterDemo.java
new file mode 100644
index 0000000..28dce1c
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/DocumentFilterDemo.java
@@ -0,0 +1,289 @@
+/* DpocumentFilterDemo.java -- An example for the DocumentFilter class.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath examples.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+*/
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.text.AbstractDocument;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DocumentFilter;
+import javax.swing.text.TextAction;
+
+/**
+ * A demonstration of the <code>javax.swing.text.DocumentFilter</code> class.
+ *
+ * <p>Similar to a dialog in a popular programming IDE the user can insert
+ * a CVS URL into a textfield and the filter will split the components apart
+ * and will put them into the right textfields saving the user a lot of
+ * typing time.</p>
+ *
+ * @author Robert Schuster
+ */
+public class DocumentFilterDemo
+ extends JPanel
+ implements ActionListener
+{
+ JTextField target;
+
+ JTextField host;
+ JTextField repositoryPath;
+ JTextField user;
+ JTextField password;
+ JComboBox connectionType;
+
+ /**
+ * Creates a new demo instance.
+ */
+ public DocumentFilterDemo()
+ {
+ createContent();
+ // initFrameContent() is only called (from main) when running this app
+ // standalone
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board,
+ * only the demo content panel is used, the frame itself is never displayed,
+ * so we can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ private void createContent()
+ {
+ setLayout(new BorderLayout());
+
+ JPanel panel = new JPanel(new GridLayout(7, 2));
+ panel.add(new JLabel("CVS URL:"));
+ panel.add(target = new JTextField(20));
+ target.setBackground(Color.RED);
+
+ panel.add(new JLabel("Host:"));
+ panel.add(host = new JTextField(20));
+
+ panel.add(new JLabel("Repository Path:"));
+ panel.add(repositoryPath = new JTextField(20));
+
+ panel.add(new JLabel("Username:"));
+ panel.add(user = new JTextField(20));
+
+ panel.add(new JLabel("Password:"));
+ panel.add(password = new JTextField(20));
+
+ panel.add(new JLabel("Connection Type:"));
+ panel.add(connectionType = new JComboBox());
+
+ JButton helpButton = new JButton("Help");
+ panel.add(helpButton);
+
+ helpButton.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ae)
+ {
+ JOptionPane.showMessageDialog(DocumentFilterDemo.this,
+ "Paste a CVS URL into the red " +
+ "textfield.\nIf you do not want to " +
+ "look up a CVS URL yourself click " +
+ "on the 'provide me an example' " +
+ "button.\nThis will paste a proper " +
+ "string into your clipboard.");
+ }
+ });
+
+ JButton exampleButton = new JButton("Provide me an example!");
+ panel.add(exampleButton);
+ exampleButton.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ae)
+ {
+ try
+ {
+ Toolkit tk = Toolkit.getDefaultToolkit();
+ Clipboard cb = tk.getSystemSelection();
+ StringSelection selection
+ = new StringSelection(":extssh:gnu@cvs.savannah.gnu.org:" +
+ "/cvs/example/project");
+
+ cb.setContents(selection, selection);
+
+ // Confirm success with a beep.
+ tk.beep();
+ }
+ catch (IllegalStateException ise)
+ {
+ JOptionPane.showMessageDialog(DocumentFilterDemo.this,
+ "Clipboard is currently" +
+ " unavailable.",
+ "Error",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ connectionType.addItem("pserver");
+ connectionType.addItem("ext");
+ connectionType.addItem("extssh");
+
+ add(panel);
+
+ AbstractDocument doc = (AbstractDocument) target.getDocument();
+ doc.setDocumentFilter(new CVSFilter());
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ System.exit(0);
+
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ DocumentFilterDemo app = new DocumentFilterDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("DocumentFilterDemo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a DocumentFilterDemo.
+ *
+ * @return a DemoFactory that creates a DocumentFilterDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new DocumentFilterDemo();
+ }
+ };
+ }
+
+ class CVSFilter extends DocumentFilter
+ {
+ // example: pserver:anonymous@cvs.sourceforge.net:/cvsroot/fmj
+ String cvsPattern = ":?(pserver|ext|extssh):(\\w)+(:(\\w)+)?@(\\w|\\.)+:/(\\w|/)*";
+
+ public void insertString(DocumentFilter.FilterBypass fb,
+ int offset, String string,
+ AttributeSet attr)
+ throws BadLocationException
+ {
+ filterString(fb, offset, 0, string, attr, true);
+ }
+
+ public void replace(DocumentFilter.FilterBypass fb,
+ int offset, int length,
+ String string,
+ AttributeSet attr)
+ throws BadLocationException
+ {
+ filterString(fb, offset, length, string, attr, false);
+ }
+
+ public void filterString(DocumentFilter.FilterBypass fb,
+ int offset, int length, String string,
+ AttributeSet attr, boolean insertion)
+ throws BadLocationException
+ {
+ if(string.matches(cvsPattern))
+ {
+ // Split off the connection type part.
+ String[] result = string.split(":", 2);
+
+ // If the string contained a leading colon, result[0]
+ // will be empty at that point. We simply repeat the split
+ // operation on the remaining string and continue.
+ if(result[0].equals(""))
+ result = result[1].split(":", 2);
+
+ connectionType.setSelectedItem(result[0]);
+
+ // Split off the username and password part
+ result = result[1].split("@", 2);
+
+ // Break username and password in half
+ String[] userCredentials = result[0].split(":");
+ user.setText(userCredentials[0]);
+
+ // If the result has two entries the second one will
+ // be the password.
+ if (userCredentials.length == 2)
+ password.setText(userCredentials[1]);
+
+ // Now break the host part apart.
+ result = result[1].split(":");
+
+ host.setText(result[0]);
+
+ repositoryPath.setText(result[1]);
+ }
+
+ // The unmodified string is put into the document.
+ if (insertion)
+ fb.insertString(offset, string, attr);
+ else
+ fb.replace(offset, length, string, attr);
+ }
+
+ }
+
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java
index de86d23..86cc015 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/FileChooserDemo.java
@@ -30,19 +30,23 @@ import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
+import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
/**
* A simple demo showing the {@link JFileChooser} component used in different
* ways.
*/
-public class FileChooserDemo extends JFrame implements ActionListener
+public class FileChooserDemo
+ extends JPanel
+ implements ActionListener
{
/**
* A file filter for Java source files.
@@ -64,8 +68,6 @@ public class FileChooserDemo extends JFrame implements ActionListener
}
}
- private JPanel content;
-
/** A label to display the selected file. */
JLabel selectedFileLabel;
@@ -80,15 +82,11 @@ public class FileChooserDemo extends JFrame implements ActionListener
/**
* Creates a new demo instance.
- *
- * @param frameTitle the frame title.
*/
- public FileChooserDemo(String frameTitle)
+ public FileChooserDemo()
{
- super(frameTitle);
- JPanel content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ super();
+ createContent();
}
/**
@@ -98,15 +96,14 @@ public class FileChooserDemo extends JFrame implements ActionListener
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -116,57 +113,52 @@ public class FileChooserDemo extends JFrame implements ActionListener
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- JPanel panel = new JPanel(new BorderLayout());
+ setLayout(new BorderLayout());
- // create a panel of buttons to select the different styles of file
- // chooser...
- JPanel buttonPanel = new JPanel(new GridLayout(5, 1));
- JButton openButton = new JButton("Open...");
- openButton.setActionCommand("OPEN");
- openButton.addActionListener(this);
- buttonPanel.add(openButton);
- JButton saveButton = new JButton("Save...");
- saveButton.setActionCommand("SAVE");
- saveButton.addActionListener(this);
- buttonPanel.add(saveButton);
- JButton queryButton = new JButton("Select Directory...");
- queryButton.setActionCommand("SELECT_DIRECTORY");
- queryButton.addActionListener(this);
- buttonPanel.add(queryButton);
- JButton openJavaButton = new JButton("Open Java file...");
- openJavaButton.setActionCommand("OPEN_JAVA");
- openJavaButton.addActionListener(this);
- buttonPanel.add(openJavaButton);
- JButton openMultiButton = new JButton("Open multiple files...");
- openMultiButton.setActionCommand("OPEN_MULTI");
- openMultiButton.addActionListener(this);
- buttonPanel.add(openMultiButton);
- panel.add(buttonPanel, BorderLayout.WEST);
+ // create a panel of buttons to select the different styles of file
+ // chooser...
+ JPanel buttonPanel = new JPanel(new GridLayout(5, 1));
+ JButton openButton = new JButton("Open...");
+ openButton.setActionCommand("OPEN");
+ openButton.addActionListener(this);
+ buttonPanel.add(openButton);
+ JButton saveButton = new JButton("Save...");
+ saveButton.setActionCommand("SAVE");
+ saveButton.addActionListener(this);
+ buttonPanel.add(saveButton);
+ JButton queryButton = new JButton("Select Directory...");
+ queryButton.setActionCommand("SELECT_DIRECTORY");
+ queryButton.addActionListener(this);
+ buttonPanel.add(queryButton);
+ JButton openJavaButton = new JButton("Open Java file...");
+ openJavaButton.setActionCommand("OPEN_JAVA");
+ openJavaButton.addActionListener(this);
+ buttonPanel.add(openJavaButton);
+ JButton openMultiButton = new JButton("Open multiple files...");
+ openMultiButton.setActionCommand("OPEN_MULTI");
+ openMultiButton.addActionListener(this);
+ buttonPanel.add(openMultiButton);
+ add(buttonPanel, BorderLayout.WEST);
- // create a panel to display the selected file(s) and the return code
- JPanel displayPanel = new JPanel(new BorderLayout());
+ // create a panel to display the selected file(s) and the return code
+ JPanel displayPanel = new JPanel(new BorderLayout());
- selectedFileLabel = new JLabel("-");
- selectedFileLabel.setBorder(BorderFactory.createTitledBorder("Selected File/Directory: "));
- displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
+ selectedFileLabel = new JLabel("-");
+ selectedFileLabel.setBorder(BorderFactory.createTitledBorder("Selected File/Directory: "));
+ displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
- selectedFilesList = new JList();
- JScrollPane sp = new JScrollPane(selectedFilesList);
- sp.setBorder(BorderFactory.createTitledBorder("Selected Files: "));
- displayPanel.add(sp);
+ selectedFilesList = new JList();
+ JScrollPane sp = new JScrollPane(selectedFilesList);
+ sp.setBorder(BorderFactory.createTitledBorder("Selected Files: "));
+ displayPanel.add(sp);
- returnCodeLabel = new JLabel("0");
- returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code:"));
- displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
+ returnCodeLabel = new JLabel("0");
+ returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code:"));
+ displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
- panel.add(displayPanel);
- content = panel;
- }
- return content;
+ add(displayPanel);
}
/**
@@ -239,10 +231,34 @@ public class FileChooserDemo extends JFrame implements ActionListener
public static void main(String[] args)
{
- FileChooserDemo app = new FileChooserDemo("File Chooser Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ FileChooserDemo app = new FileChooserDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("FileChooser Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+ /**
+ * Returns a DemoFactory that creates a FileChooserDemo.
+ *
+ * @return a DemoFactory that creates a FileChooserDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new FileChooserDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ListDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/ListDemo.java
new file mode 100644
index 0000000..7ed15be
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/ListDemo.java
@@ -0,0 +1,231 @@
+/* ListDemo.java -- Demostrates JList
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.ListCellRenderer;
+import javax.swing.SwingUtilities;
+
+public class ListDemo
+ extends JPanel
+ implements ActionListener
+{
+
+ private static class LabelCellRenderer
+ extends DefaultListCellRenderer
+ {
+ public Component getListCellRendererComponent(JList list,
+ Object value,
+ int index,
+ boolean isSelected,
+ boolean cellHasFocus)
+ {
+ Component c = super.getListCellRendererComponent(list, value, index,
+ isSelected,
+ cellHasFocus);
+ return c;
+ }
+ }
+
+ private static class CheckCellRenderer
+ extends JCheckBox
+ implements ListCellRenderer
+ {
+ public Component getListCellRendererComponent(JList list,
+ Object value,
+ int index,
+ boolean isSelected,
+ boolean cellHasFocus)
+ {
+ setSelected(isSelected);
+ setText(value.toString());
+
+ return this;
+ }
+ }
+
+ ListDemo()
+ {
+ super();
+ createContent();
+ }
+
+ private void createContent()
+ {
+
+ String foo[] = new String[] {
+ "non alcoholic ",
+ "carbonated ",
+ "malted ",
+ "fresh squeezed ",
+ "imported ",
+ "high fructose ",
+ "enriched "
+ };
+
+ String bar[] = new String[] {
+ "orange juice",
+ "ginger beer",
+ "yak milk",
+ "corn syrup",
+ "herbal remedy"
+ };
+
+ final DefaultListModel mod = new DefaultListModel();
+ final JList list1 = new JList(mod);
+ final JList list2 = new JList(mod);
+
+ list2.setSelectionModel(list1.getSelectionModel());
+ for (int i = 0; i < bar.length; ++i)
+ for (int j = 0; j < foo.length; ++j)
+ mod.addElement(foo[j] + bar[i]);
+
+ list1.setCellRenderer(new LabelCellRenderer());
+ list2.setCellRenderer(new CheckCellRenderer());
+
+ JButton add = new JButton("add element");
+ add.addActionListener(new ActionListener()
+ {
+ int i = 0;
+ public void actionPerformed(ActionEvent e)
+ {
+ mod.addElement("new element " + i);
+ ++i;
+ }
+ });
+
+ JButton del = new JButton("delete selected");
+ del.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ for (int i = 0; i < mod.getSize(); ++i)
+ if (list1.isSelectedIndex(i))
+ mod.remove(i);
+ }
+ });
+
+
+ JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+ splitter.add(new JScrollPane(list1), JSplitPane.LEFT);
+ splitter.add(new JScrollPane(list2), JSplitPane.RIGHT);
+
+ setLayout(new BorderLayout());
+ JPanel p2 = new JPanel();
+ p2.setLayout(new GridLayout(1, 2));
+ p2.add(add);
+ p2.add(del);
+
+ add(p2, BorderLayout.NORTH);
+ add(splitter, BorderLayout.CENTER);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board,
+ * only the demo content panel is used, the frame itself is never displayed,
+ * so we can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ ListDemo app = new ListDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("List Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a ListDemo.
+ *
+ * @return a DemoFactory that creates a ListDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new ListDemo();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/MetalThemeEditor.java b/libjava/classpath/examples/gnu/classpath/examples/swing/MetalThemeEditor.java
new file mode 100644
index 0000000..d3be0b8
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/MetalThemeEditor.java
@@ -0,0 +1,585 @@
+/* MetalThemeEditor.java -- Edit themes using this application
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import gnu.javax.swing.plaf.metal.CustomizableTheme;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+
+/**
+ * This application serves two purposes: 1. demonstrate the color chooser
+ * component, 2. make creating new Metal themes as easy as possible.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class MetalThemeEditor
+ extends JPanel
+{
+ /**
+ * An icon to display a chosen color in a button.
+ */
+ private class ColorIcon implements Icon
+ {
+ /**
+ * The color to be shown on the icon.
+ */
+ Color color;
+
+ /**
+ * Creates a new ColorIcon.
+ *
+ * @param c the color to be displayed
+ */
+ ColorIcon(Color c)
+ {
+ color = c;
+ }
+
+ /**
+ * Returns the icon height, which is 10.
+ *
+ * @return 10
+ */
+ public int getIconHeight()
+ {
+ return 10;
+ }
+
+ /**
+ * Returns the icon width, which is 30.
+ *
+ * @return 30
+ */
+ public int getIconWidth()
+ {
+ return 30;
+ }
+
+ /**
+ * Paints the icon.
+ *
+ * @param c the component to paint on
+ * @param g the graphics to use
+ * @param x the x location
+ * @param y the y location
+ */
+ public void paintIcon(Component c, Graphics g, int x, int y)
+ {
+ g.setColor(color);
+ g.fillRect(x, y, 30, 10);
+ }
+
+ }
+
+ /**
+ * Opens up a color chooser and lets the user select a color for the theme.
+ */
+ private class ChooseColorAction implements ActionListener
+ {
+
+ /**
+ * The button that will get updated when a new color is selected.
+ */
+ private JButton button;
+
+ /**
+ * Specifies which color of the theme should be updated. See constants in
+ * the MetalThemeEditor class.
+ */
+ private int colorType;
+
+ /**
+ * Creates a new ChooseColorAction. The specified button will have its
+ * icon updated to the new color if appropriate.
+ *
+ * @param b the button to update
+ * @param type the color type to update
+ */
+ ChooseColorAction(JButton b, int type)
+ {
+ button = b;
+ colorType = type;
+ }
+
+ /**
+ * Opens a color chooser and lets the user select a color.
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ Color c = JColorChooser.showDialog(button, "Choose a color",
+ getColor(colorType));
+ if (c != null)
+ {
+ setColor(colorType, c);
+ button.setIcon(new ColorIcon(c));
+ }
+ }
+ }
+
+ /**
+ * Denotes the primary1 color of the theme.
+ */
+ private static final int PRIMARY1 = 0;
+
+ /**
+ * Denotes the primary2 color of the theme.
+ */
+ private static final int PRIMARY2 = 1;
+
+ /**
+ * Denotes the primary3 color of the theme.
+ */
+ private static final int PRIMARY3 = 2;
+
+ /**
+ * Denotes the secondary1 color of the theme.
+ */
+ private static final int SECONDARY1 = 3;
+
+ /**
+ * Denotes the secondary2 color of the theme.
+ */
+ private static final int SECONDARY2 = 4;
+
+ /**
+ * Denotes the secondary3 color of the theme.
+ */
+ private static final int SECONDARY3 = 5;
+
+ /**
+ * The theme that is edited.
+ */
+ CustomizableTheme theme;
+
+ /**
+ * Creates a new instance of the MetalThemeEditor.
+ */
+ MetalThemeEditor()
+ {
+ theme = new CustomizableTheme();
+ setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+ add(createConfigurationPanel());
+ add(Box.createVerticalStrut(17));
+ add(createButtonPanel());
+ }
+
+ /**
+ * Creates the main panel of the MetalThemeEditor. This is the upper
+ * area where the colors can be selected.
+ *
+ * @return the main panel
+ */
+ private JPanel createConfigurationPanel()
+ {
+ JPanel p = new JPanel();
+ p.setLayout(new GridBagLayout());
+ GridBagConstraints c = new GridBagConstraints();
+ c.weightx = 1;
+ c.weighty = 0;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ Insets labelInsets = new Insets(0, 0, 11, 6);
+ Insets buttonInsets = new Insets(0, 0, 11, 0);
+
+ // Primary 1
+ JLabel primary1Label = new JLabel("Primary 1:");
+ c.gridx = 0;
+ c.gridy = 0;
+ c.insets = labelInsets;
+ p.add(primary1Label, c);
+
+ Icon p1Icon = new ColorIcon(theme.getPrimary1());
+ JButton primary1Button = new JButton(p1Icon);
+ primary1Button.addActionListener(new ChooseColorAction(primary1Button,
+ PRIMARY1));
+ //c.weightx = 0;
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(primary1Button, c);
+ primary1Label.setLabelFor(primary1Button);
+
+ // Primary 2
+ JLabel primary2Label = new JLabel("Primary 2:");
+ c.gridx = 0;
+ c.gridy = 1;
+ c.insets = labelInsets;
+ p.add(primary2Label, c);
+
+ Icon p2Icon = new ColorIcon(theme.getPrimary2());
+ JButton primary2Button = new JButton(p2Icon);
+ primary2Button.addActionListener(new ChooseColorAction(primary2Button,
+ PRIMARY2));
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(primary2Button, c);
+ primary2Label.setLabelFor(primary2Button);
+
+ // Primary 3
+ JLabel primary3Label = new JLabel("Primary 3:");
+ c.gridx = 0;
+ c.gridy = 2;
+ c.insets = labelInsets;
+ p.add(primary3Label, c);
+
+ Icon p3Icon = new ColorIcon(theme.getPrimary3());
+ JButton primary3Button = new JButton(p3Icon);
+ primary3Button.addActionListener(new ChooseColorAction(primary3Button,
+ PRIMARY3));
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(primary3Button, c);
+ primary3Label.setLabelFor(primary3Button);
+
+ // Secondary 1
+ JLabel secondary1Label = new JLabel("Secondary 1:");
+ c.gridx = 0;
+ c.gridy = 3;
+ c.insets = labelInsets;
+ p.add(secondary1Label, c);
+
+ Icon s1Icon = new ColorIcon(theme.getSecondary1());
+ JButton secondary1Button = new JButton(s1Icon);
+ secondary1Button.addActionListener(new ChooseColorAction(secondary1Button,
+ SECONDARY1));
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(secondary1Button, c);
+ secondary1Label.setLabelFor(secondary1Button);
+
+ // Secondary 2
+ JLabel secondary2Label = new JLabel("Secondary 2:");
+ c.gridx = 0;
+ c.gridy = 4;
+ c.insets = labelInsets;
+ p.add(secondary2Label, c);
+
+ Icon s2Icon = new ColorIcon(theme.getSecondary2());
+ JButton secondary2Button = new JButton(s2Icon);
+ secondary2Button.addActionListener(new ChooseColorAction(secondary2Button,
+ SECONDARY2));
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(secondary2Button, c);
+ secondary2Label.setLabelFor(secondary2Button);
+
+ // Secondary 3
+ JLabel secondary3Label = new JLabel("Secondary 3:");
+ c.gridx = 0;
+ c.gridy = 5;
+ c.insets = labelInsets;
+ p.add(secondary3Label, c);
+
+ Icon s3Icon = new ColorIcon(theme.getSecondary3());
+ JButton secondary3Button = new JButton(s3Icon);
+ secondary3Button.addActionListener(new ChooseColorAction(secondary3Button,
+ SECONDARY3));
+ c.gridx = 1;
+ c.insets = buttonInsets;
+ p.add(secondary3Button, c);
+ secondary3Label.setLabelFor(secondary3Button);
+
+ return p;
+ }
+
+ /**
+ * Creates the button panel at the bottom of the MetalThemeEditor.
+ *
+ * @return the button panel
+ */
+ private JPanel createButtonPanel()
+ {
+ JPanel p = new JPanel();
+ p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
+ p.add(Box.createHorizontalGlue());
+
+ JButton applyButton = new JButton("Apply");
+ applyButton.addActionListener
+ (new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ try
+ {
+ CustomizableTheme copy = (CustomizableTheme) theme.clone();
+ MetalLookAndFeel.setCurrentTheme(copy);
+ UIManager.setLookAndFeel(new MetalLookAndFeel());
+ Window w = SwingUtilities.getWindowAncestor(MetalThemeEditor.this);
+ SwingUtilities.updateComponentTreeUI(w);
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ });
+ p.add(applyButton);
+
+ p.add(Box.createHorizontalStrut(5));
+
+ JButton exportButton = new JButton("Export as Java File");
+ exportButton.addActionListener
+ (new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ export();
+ }
+ });
+ p.add(exportButton);
+
+ return p;
+ }
+
+ /**
+ * Exports the current theme as Java source file. This will prompt the user
+ * to choose a filename.
+ */
+ void export()
+ {
+ JFileChooser chooser = new JFileChooser();
+ int confirm = chooser.showSaveDialog(this);
+ if (confirm == JFileChooser.APPROVE_OPTION)
+ exportToFile(chooser.getSelectedFile());
+ }
+
+ /**
+ * Writes out the current configured Metal theme as Java source file.
+ *
+ * @param file the file to write into
+ */
+ void exportToFile(File file)
+ {
+ String fileName = file.getName();
+ if (! fileName.endsWith(".java"))
+ {
+ JOptionPane.showMessageDialog(this,
+ "Filename does not denote a Java source file",
+ "Invalid filename",
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ String className = fileName.substring(0, fileName.length() - 5);
+ Color p1 = theme.getPrimary1();
+ Color p2 = theme.getPrimary2();
+ Color p3 = theme.getPrimary3();
+ Color s1 = theme.getSecondary1();
+ Color s2 = theme.getSecondary2();
+ Color s3 = theme.getSecondary3();
+
+ try
+ {
+ FileOutputStream out = new FileOutputStream(file);
+ Writer writer = new OutputStreamWriter(out);
+ writer.write("import javax.swing.plaf.ColorUIResource;\n");
+ writer.write("import javax.swing.plaf.metal.DefaultMetalTheme;\n");
+ writer.write("public class " + className + " extends DefaultMetalTheme\n");
+ writer.write("{\n");
+ writer.write(" protected ColorUIResource getPrimary1()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + p1.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write(" protected ColorUIResource getPrimary2()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + p2.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write(" protected ColorUIResource getPrimary3()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + p3.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write(" protected ColorUIResource getSecondary1()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + s1.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write(" protected ColorUIResource getSecondary2()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + s2.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write(" protected ColorUIResource getSecondary3()\n");
+ writer.write(" {\n");
+ writer.write(" return new ColorUIResource(" + s3.getRGB() + ");\n");
+ writer.write(" }\n");
+ writer.write("}\n");
+ writer.close();
+ out.close();
+ }
+ catch (FileNotFoundException ex)
+ {
+ ex.printStackTrace();
+ }
+ catch (IOException ex)
+ {
+ ex.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Returns the color of the theme with the specified type. For the possible
+ * types see the constants of this class.
+ *
+ * @param colorType the color type to fetch from the theme
+ *
+ * @return the current color of the specified type
+ *
+ * @throws IllegalArgumentException for illegal color types
+ */
+ Color getColor(int colorType)
+ {
+ Color color = null;
+ switch (colorType)
+ {
+ case PRIMARY1:
+ color = theme.getPrimary1();
+ break;
+ case PRIMARY2:
+ color = theme.getPrimary2();
+ break;
+ case PRIMARY3:
+ color = theme.getPrimary3();
+ break;
+ case SECONDARY1:
+ color = theme.getSecondary1();
+ break;
+ case SECONDARY2:
+ color = theme.getSecondary2();
+ break;
+ case SECONDARY3:
+ color = theme.getSecondary3();
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown color type: " + colorType);
+ }
+ return color;
+ }
+
+ /**
+ * Sets the color of the specified type in the current theme.
+ *
+ * @param colorType the color type
+ * @param color the color to set
+ *
+ * @throws IllegalArgumentException for illegal color types
+ */
+ void setColor(int colorType, Color color)
+ {
+ switch (colorType)
+ {
+ case PRIMARY1:
+ theme.setPrimary1(color);
+ break;
+ case PRIMARY2:
+ theme.setPrimary2(color);
+ break;
+ case PRIMARY3:
+ theme.setPrimary3(color);
+ break;
+ case SECONDARY1:
+ theme.setSecondary1(color);
+ break;
+ case SECONDARY2:
+ theme.setSecondary2(color);
+ break;
+ case SECONDARY3:
+ theme.setSecondary3(color);
+ break;
+ default:
+ throw new IllegalArgumentException("Illegal color type: " + colorType);
+ }
+ }
+
+ /**
+ * The entry point to the application.
+ *
+ * @param args ignored
+ */
+ public static void main(String[] args)
+ {
+ JFrame f = new JFrame("MetalThemeEditor");
+ f.setContentPane(new MetalThemeEditor());
+ f.pack();
+ f.setVisible(true);
+ }
+
+ /**
+ * Returns a DemoFactory that creates a MetalThemeEditor.
+ *
+ * @return a DemoFactory that creates a MetalThemeEditor
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new MetalThemeEditor();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java
new file mode 100644
index 0000000..6c1be74
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/NavigationFilterDemo.java
@@ -0,0 +1,206 @@
+/* NavigationFilterDemo.java -- An example for the NavigationFilter class.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath examples.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+*/
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.NavigationFilter;
+import javax.swing.text.Position;
+import javax.swing.text.Utilities;
+
+/**
+ * A demonstration of the <code>javax.swing.text.NavigationFilter</code> class.
+ *
+ * <p>It shows a NavigationFilter which lets you walk word-wise
+ * through a text.</p>
+ *
+ * @author Robert Schuster
+ */
+public class NavigationFilterDemo
+ extends JPanel
+ implements ActionListener
+{
+
+ JTextArea textArea;
+
+ /**
+ * Creates a new demo instance.
+ */
+ public NavigationFilterDemo()
+ {
+ createContent();
+ // initFrameContent() is only called (from main) when running this app
+ // standalone
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board,
+ * only the demo content panel is used, the frame itself is never displayed,
+ * so we can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ private void createContent()
+ {
+ setLayout(new BorderLayout());
+
+ add(textArea = new JTextArea(10, 20));
+
+ textArea.setWrapStyleWord(true);
+
+ textArea.setLineWrap(true);
+
+ textArea.setNavigationFilter(new WordFilter());
+
+ textArea.setText("GNU Classpath, Essential Libraries for Java, " +
+ "is a GNU project to create free core class " +
+ "libraries for use with virtual machines and " +
+ "compilers for the java programming language.");
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ System.exit(0);
+
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ NavigationFilterDemo app = new NavigationFilterDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("NavigationFilterDemo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a NavigationFilterDemo.
+ *
+ * @return a DemoFactory that creates a NavigationFilterDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new NavigationFilterDemo();
+ }
+ };
+ }
+
+ class WordFilter extends NavigationFilter
+ {
+ public int getNextVisualPositionFrom(JTextComponent text,
+ int pos,
+ Position.Bias bias,
+ int direction,
+ Position.Bias[] biasRet)
+ throws BadLocationException
+ {
+ Point pt;
+
+ int newpos = pos;
+ switch (direction)
+ {
+ case SwingConstants.NORTH:
+ // Find out where the caret want to be positioned ideally.
+ pt = text.getCaret().getMagicCaretPosition();
+
+ // Calculate its position above.
+ newpos = Utilities.getPositionAbove(text, pos, pt.x);
+
+ // If we have a valid position, then calculate the next word start
+ // from there.
+ if (newpos != -1)
+ return Utilities.getWordStart(text, newpos);
+ else
+ return pos;
+ case SwingConstants.SOUTH:
+ // Find out where the caret want to be positioned ideally.
+ pt = text.getCaret().getMagicCaretPosition();
+
+ // Calculate its position below.
+ newpos = Utilities.getPositionBelow(text, pos, pt.x);
+
+ // If we have a valid position, then calculate the next word start
+ // from there.
+ if (newpos != -1)
+ return Utilities.getWordStart(text, newpos);
+ else
+ return pos;
+ case SwingConstants.WEST:
+ // Calculate the next word start.
+ newpos = Utilities.getWordStart(text, newpos);;
+
+ // If that means that the caret will not move, return
+ // the start of the previous word.
+ if (newpos != pos)
+ return newpos;
+ else
+ return Utilities.getPreviousWord(text, newpos);
+ case SwingConstants.EAST:
+ // Simply calculate the next word's start offset.
+ return Utilities.getNextWord(text, newpos);
+ default:
+ // Do whatever the super implementation did.
+ return super.getNextVisualPositionFrom(text, pos, bias,
+ direction, biasRet);
+ }
+ }
+
+ }
+
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java
index d62175b..1391a00 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/ProgressBarDemo.java
@@ -38,13 +38,13 @@ exception statement from your version. */
package gnu.classpath.examples.swing;
-import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
@@ -54,38 +54,37 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ProgressBarDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
/**
* Creates a new ProgressBarDemo window with the specified title.
- *
- * @param title the title of the program window
*/
- ProgressBarDemo(String title)
+ ProgressBarDemo()
+ {
+ super();
+ createContent();
+ }
+
+ void initFrameContent()
{
- super(title);
- JPanel content = createContent();
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- getContentPane().add(content);
- getContentPane().add(closePanel, BorderLayout.SOUTH);
+ add(closePanel);
}
- static JPanel createContent()
+ private void createContent()
{
- JPanel content = new JPanel();
- content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel horizontalProgressBar = createHorizontalProgressBar();
- content.add(horizontalProgressBar);
- content.add(Box.createVerticalStrut(10));
+ add(horizontalProgressBar);
+ add(Box.createVerticalStrut(10));
JPanel verticalProgressBar = createVerticalProgressBar();
- content.add(verticalProgressBar);
- return content;
+ add(verticalProgressBar);
}
private static JPanel createHorizontalProgressBar()
@@ -194,8 +193,10 @@ public class ProgressBarDemo
public void actionPerformed(ActionEvent event)
{
- // TODO Auto-generated method stub
-
+ if (event.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
}
/**
@@ -210,10 +211,29 @@ public class ProgressBarDemo
{
public void run()
{
- ProgressBarDemo app = new ProgressBarDemo("ProgressBar Demo");
- app.pack();
- app.setVisible(true);
+ ProgressBarDemo app = new ProgressBarDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("ProgressBar Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
}
});
}
+
+ /**
+ * Returns a DemoFactory that creates a ProgressBarDemo.
+ *
+ * @return a DemoFactory that creates a ProgressBarDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new ProgressBarDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java
index f90ffd4..505991e 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/ScrollBarDemo.java
@@ -28,31 +28,27 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
+import javax.swing.SwingUtilities;
/**
* A simple scroll bar demo showing various scroll bars in different states.
*/
public class ScrollBarDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
- private JPanel content;
-
/**
* Creates a new demo instance.
- *
- * @param title the frame title.
*/
- public ScrollBarDemo(String title)
+ public ScrollBarDemo()
{
- super(title);
- JPanel content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ super();
+ createContent();
}
/**
@@ -62,15 +58,14 @@ public class ScrollBarDemo
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -80,15 +75,11 @@ public class ScrollBarDemo
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = createScrollBarPanel();
- content.add(panel);
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = createScrollBarPanel();
+ add(panel);
}
private JPanel createScrollBarPanel()
@@ -151,10 +142,33 @@ public class ScrollBarDemo
public static void main(String[] args)
{
- ScrollBarDemo app = new ScrollBarDemo("ScrollBar Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
- }
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ ScrollBarDemo app = new ScrollBarDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("ScrollBar Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }});
+ }
+ /**
+ * Returns a DemoFactory that creates a ScrollBarDemo.
+ *
+ * @return a DemoFactory that creates a ScrollBarDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new ScrollBarDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java
index 2bc5107..df84cc6 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/SliderDemo.java
@@ -29,15 +29,17 @@ import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
+import javax.swing.SwingUtilities;
-public class SliderDemo extends JFrame implements ActionListener
+public class SliderDemo
+ extends JPanel
+ implements ActionListener
{
- private JPanel content;
-
JSlider hslider1;
JSlider hslider2;
JSlider hslider3;
@@ -58,12 +60,9 @@ public class SliderDemo extends JFrame implements ActionListener
JCheckBox enabledCheckBox;
- public SliderDemo(String frameTitle)
+ public SliderDemo()
{
- super(frameTitle);
- content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ createContent();
}
/**
@@ -73,15 +72,14 @@ public class SliderDemo extends JFrame implements ActionListener
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -91,26 +89,22 @@ public class SliderDemo extends JFrame implements ActionListener
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = new JPanel(new GridLayout(1, 2));
- panel.add(createHorizontalPanel());
- panel.add(createVerticalPanel());
- enabledCheckBox = new JCheckBox("Enabled");
- enabledCheckBox.setSelected(true);
- enabledCheckBox.setActionCommand("TOGGLE_ENABLED");
- enabledCheckBox.addActionListener(this);
- JPanel checkBoxPanel = new JPanel();
- checkBoxPanel.add(enabledCheckBox);
- JPanel panel2 = new JPanel(new BorderLayout());
- panel2.add(panel);
- panel2.add(checkBoxPanel, BorderLayout.SOUTH);
- content.add(panel2);
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = new JPanel(new GridLayout(1, 2));
+ panel.add(createHorizontalPanel());
+ panel.add(createVerticalPanel());
+ enabledCheckBox = new JCheckBox("Enabled");
+ enabledCheckBox.setSelected(true);
+ enabledCheckBox.setActionCommand("TOGGLE_ENABLED");
+ enabledCheckBox.addActionListener(this);
+ JPanel checkBoxPanel = new JPanel();
+ checkBoxPanel.add(enabledCheckBox);
+ JPanel panel2 = new JPanel(new BorderLayout());
+ panel2.add(panel);
+ panel2.add(checkBoxPanel, BorderLayout.SOUTH);
+ add(panel2);
}
private JPanel createHorizontalPanel()
@@ -259,10 +253,35 @@ public class SliderDemo extends JFrame implements ActionListener
}
public static void main(String[] args)
{
- SliderDemo app = new SliderDemo("Slider Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ SliderDemo app = new SliderDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("Slider Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+
+ /**
+ * Returns a DemoFactory that creates a SliderDemo.
+ *
+ * @return a DemoFactory that creates a SliderDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new SliderDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/SpinnerDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/SpinnerDemo.java
index 4a05bc4..d0edd96 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/SpinnerDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/SpinnerDemo.java
@@ -33,24 +33,22 @@ import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
-import javax.swing.UIManager;
-import javax.swing.plaf.metal.DefaultMetalTheme;
-import javax.swing.plaf.metal.MetalLookAndFeel;
+import javax.swing.SwingUtilities;
/**
* A simple demo showing various spinners in different states.
*/
public class SpinnerDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
- private JPanel content;
private JCheckBox spinnerState1;
private JSpinner spinner1;
private JSpinner spinner2;
@@ -65,15 +63,11 @@ public class SpinnerDemo
/**
* Creates a new demo instance.
- *
- * @param title the frame title.
*/
- public SpinnerDemo(String title)
+ public SpinnerDemo()
{
- super(title);
- JPanel content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ super();
+ createContent();
}
/**
@@ -83,15 +77,14 @@ public class SpinnerDemo
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -101,18 +94,14 @@ public class SpinnerDemo
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = new JPanel(new GridLayout(3, 1));
- panel.add(createPanel1());
- panel.add(createPanel2());
- panel.add(createPanel3());
- content.add(panel);
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = new JPanel(new GridLayout(3, 1));
+ panel.add(createPanel1());
+ panel.add(createPanel2());
+ panel.add(createPanel3());
+ add(panel);
}
private JPanel createPanel1()
@@ -213,18 +202,34 @@ public class SpinnerDemo
public static void main(String[] args)
{
- try
- {
- MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
- UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- SpinnerDemo app = new SpinnerDemo("Spinner Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ SpinnerDemo app = new SpinnerDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("Spinner Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+ /**
+ * Returns a DemoFactory that creates a SpinnerDemo.
+ *
+ * @return a DemoFactory that creates a SpinnerDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new SpinnerDemo();
+ }
+ };
+ }
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/TabbedPaneDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/TabbedPaneDemo.java
new file mode 100644
index 0000000..9d797d2
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/TabbedPaneDemo.java
@@ -0,0 +1,145 @@
+/* TabbedPaneDemo.java -- Demonstrates JTabbedPane
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+
+public class TabbedPaneDemo
+ extends JPanel
+ implements ActionListener
+{
+ TabbedPaneDemo()
+ {
+ super();
+ createContent();
+ }
+
+ private void createContent()
+ {
+ JPanel p = new JPanel();
+ p.setLayout(new GridLayout(2, 2));
+ JTabbedPane tabs1 = new JTabbedPane(SwingConstants.TOP);
+ tabs1.add("Top Item 1", new JButton("Button"));
+ tabs1.add("Top Item 2", new JButton("Button"));
+ JTabbedPane tabs2 = new JTabbedPane(SwingConstants.LEFT);
+ tabs2.add("Left Item 1", new JButton("Button"));
+ tabs2.add("Left Item 2", new JButton("Button"));
+ JTabbedPane tabs3 = new JTabbedPane(SwingConstants.BOTTOM);
+ tabs3.add("Bottom Item 1", new JButton("Button"));
+ tabs3.add("Bottom Item 2", new JButton("Button"));
+ JTabbedPane tabs4 = new JTabbedPane(SwingConstants.RIGHT);
+ tabs4.add("Right Item 1", new JButton("Button"));
+ tabs4.add("Right Item 2", new JButton("Button"));
+ p.add(tabs1);
+ p.add(tabs2);
+ p.add(tabs3);
+ p.add(tabs4);
+ setLayout(new BorderLayout());
+ add(p, BorderLayout.CENTER);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board,
+ * only the demo content panel is used, the frame itself is never displayed,
+ * so we can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ TabbedPaneDemo app = new TabbedPaneDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("TabbedPane Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a TabbedPaneDemo.
+ *
+ * @return a DemoFactory that creates a TabbedPaneDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new TabbedPaneDemo();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/TableDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/TableDemo.java
index 1fbf2de..e661ee3 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/TableDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/TableDemo.java
@@ -41,10 +41,14 @@ package gnu.classpath.examples.swing;
import java.awt.BorderLayout;
import java.awt.Dimension;
+import javax.swing.Icon;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.plaf.metal.MetalIconFactory;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
@@ -54,7 +58,7 @@ import javax.swing.table.TableColumn;
*
* @author Audrius Meskauskas (audriusa@bioinformatics.org)
*/
-public class TableDemo extends JFrame
+public class TableDemo extends JPanel
{
/**
* The initial row count for this table.
@@ -74,11 +78,12 @@ public class TableDemo extends JFrame
{
/**
- * Return true if the cell is editable. All cells are editable.
+ * Return true if the cell is editable.
+ * Icons are not editable, other cells are editable.
*/
- public boolean isCellEditable(int parm1, int parm2)
+ public boolean isCellEditable(int row, int column)
{
- return true;
+ return column!=1;
}
/**
@@ -124,19 +129,20 @@ public class TableDemo extends JFrame
}
/**
- * The first column contains booleans, others - default class.
+ * The first column contains booleans, the second - icons,
+ * others - default class.
*/
public Class getColumnClass(int column)
{
if (column == 0)
return Boolean.class;
+ else if (column == 1)
+ return Icon.class;
else
return super.getColumnClass(column);
}
}
- private JPanel content;
-
/**
* The table being displayed.
*/
@@ -154,13 +160,11 @@ public class TableDemo extends JFrame
/**
* Create the table demo with the given titel.
- *
- * @param title the frame title.
*/
- public TableDemo(String title)
+ public TableDemo()
{
- super(title);
- getContentPane().add(createContent(), BorderLayout.CENTER);
+ super();
+ createContent();
}
/**
@@ -169,55 +173,59 @@ public class TableDemo extends JFrame
* the bottom of the panel if they want to (a close button is added if this
* demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
+ setLayout(new BorderLayout());
+ values = new Object[rows][];
+
+ // The icons that appear in the icon column.
+ Icon[] icons = new Icon[]
+ {
+ MetalIconFactory.getTreeComputerIcon(),
+ MetalIconFactory.getTreeHardDriveIcon(),
+ MetalIconFactory.getTreeFolderIcon(),
+ };
+
+ for (int i = 0; i < values.length; i++)
{
- JPanel p = new JPanel();
- p.setLayout(new BorderLayout());
- values = new Object[rows][];
- for (int i = 0; i < values.length; i++)
+ values[i] = new Object[cols];
+ for (int j = 2; j < cols; j++)
{
- values[i] = new Object[cols];
- for (int j = 1; j < cols; j++)
- {
- values[i][j] = "" + ((char) ('a' + j)) + i;
- }
- values [i][0] = i % 2 == 0? Boolean.TRUE : Boolean.FALSE;
+ values[i][j] = "" + ((char) ('a' + j)) + i;
}
+ values [i][0] = i % 2 == 0? Boolean.TRUE : Boolean.FALSE;
+ values [i][1] = icons [ i % icons.length ];
+ }
- table.setModel(model);
+ table.setModel(model);
- // Make the columns with gradually increasing width:
- DefaultTableColumnModel cm = new DefaultTableColumnModel();
- for (int i = 0; i < cols; i++)
- {
- TableColumn column = new TableColumn(i);
+ // Make the columns with gradually increasing width:
+ DefaultTableColumnModel cm = new DefaultTableColumnModel();
+ for (int i = 0; i < cols; i++)
+ {
+ TableColumn column = new TableColumn(i);
- // Showing the variable width columns.
- int width = 100+20*i;
- column.setPreferredWidth(width);
+ // Showing the variable width columns.
+ int width = 100+10*i;
+ column.setPreferredWidth(width);
- // If we do not set the header value here, the value, returned
- // by model, is used.
- column.setHeaderValue("Width +"+(20*i));
+ // If we do not set the header value here, the value, returned
+ // by model, is used.
+ column.setHeaderValue("Width +"+(20*i));
- cm.addColumn(column);
- }
+ cm.addColumn(column);
+ }
- table.setColumnModel(cm);
+ table.setColumnModel(cm);
- // Create the table, place it into scroll pane and place
- // the pane into this frame.
- JScrollPane scroll = new JScrollPane();
+ // Create the table, place it into scroll pane and place
+ // the pane into this frame.
+ JScrollPane scroll = new JScrollPane();
- // The horizontal scroll bar is never needed.
- scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- scroll.getViewport().add(table);
- p.add(scroll, BorderLayout.CENTER);
- content = p;
- }
- return content;
+ // The horizontal scroll bar is never needed.
+ scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ scroll.getViewport().add(table);
+ add(scroll, BorderLayout.CENTER);
}
/**
@@ -228,9 +236,33 @@ public class TableDemo extends JFrame
*/
public static void main(String[] args)
{
- TableDemo frame = new TableDemo("Table double click on the cell to edit.");
- frame.setSize(new Dimension(640, 100));
- frame.validate();
- frame.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ TableDemo demo = new TableDemo();
+ JFrame frame = new JFrame();
+ frame.getContentPane().add(demo);
+ frame.setSize(new Dimension(640, 100));
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a TableDemo.
+ *
+ * @return a DemoFactory that creates a TableDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new TableDemo();
+ }
+ };
}
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/TextAreaDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/TextAreaDemo.java
new file mode 100644
index 0000000..b72997c
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/TextAreaDemo.java
@@ -0,0 +1,620 @@
+/* TextAreaDemo.java -- An example showing various textareas in Swing.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath examples.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+ */
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultCaret;
+import javax.swing.text.Highlighter;
+import javax.swing.text.JTextComponent;
+import javax.swing.text.View;
+import javax.swing.text.LayeredHighlighter.LayerPainter;
+
+/**
+ * A simple textare demo showing various textareas in different states.
+ */
+public class TextAreaDemo
+ extends JPanel
+ implements ActionListener
+{
+
+ /**
+ * A custom caret for demonstration purposes. This class is inspired by the
+ * CornerCaret from the OReilly Swing book.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+ static class CornerCaret
+ extends DefaultCaret
+ {
+ public CornerCaret()
+ {
+ super();
+ setBlinkRate(500);
+ }
+
+ protected synchronized void damage(Rectangle r)
+ {
+ if (r == null)
+ return;
+ x = r.x;
+ y = r.y + (r.height * 4 / 5 - 3);
+ width = 5;
+ height = 5;
+ repaint();
+ }
+
+ public void paint(Graphics g)
+ {
+ JTextComponent comp = getComponent();
+ if (comp == null)
+ return;
+ int dot = getDot();
+ Rectangle r = null;
+ try
+ {
+ r = comp.modelToView(dot);
+ }
+ catch (BadLocationException e)
+ {
+ return;
+ }
+ if (r == null)
+ return;
+ int dist = r.height * 4 / 5 - 3;
+ if ((x != r.x) || (y != r.y + dist))
+ {
+ repaint();
+ x = r.x;
+ y = r.y + dist;
+ width = 5;
+ height = 5;
+ }
+ if (isVisible())
+ {
+ g.drawLine(r.x, r.y + dist, r.x, r.y + dist + 4);
+ g.drawLine(r.x, r.y + dist + 4, r.x + 4, r.y + dist + 4);
+ }
+ }
+ }
+
+ static class DemoHighlightPainter
+ extends LayerPainter
+ {
+ static DemoHighlightPainter INSTANCE = new DemoHighlightPainter();
+
+ static Color[] colors = { Color.BLUE, Color.CYAN, Color.GRAY, Color.GREEN,
+ Color.MAGENTA, Color.ORANGE, Color.PINK,
+ Color.ORANGE, Color.RED, Color.BLUE, Color.YELLOW };
+
+ public DemoHighlightPainter()
+ {
+ super();
+ }
+
+ private void paintHighlight(Graphics g, Rectangle rect)
+ {
+ g.fillRect(rect.x, rect.y, rect.width, rect.height);
+ }
+
+ public void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent t)
+ {
+ try
+ {
+
+ for (int i = p0; i < p1; i++)
+ {
+ Rectangle r = t.modelToView(i);
+ Point l1 = t.modelToView(i + 1).getLocation();
+
+ g.setColor(colors[(int) (Math.random() * colors.length)]);
+ g.fillOval(r.x, r.y, l1.x - r.x, r.height);
+ }
+ }
+ catch (BadLocationException ble)
+ {
+ }
+
+ }
+
+ public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
+ JTextComponent c, View view)
+ {
+ paint(g, p0, p1, bounds, c);
+
+ return bounds;
+ }
+ }
+
+ /**
+ * The non wrapping text areas and state buttons.
+ */
+ JTextArea textarea1;
+
+ JTextArea textarea2;
+
+ JTextArea textarea3;
+
+ JCheckBox enabled1;
+
+ JCheckBox editable1;
+
+ JPanel panel1;
+
+ /**
+ * The char wrapping textareas and state buttons.
+ */
+ JTextArea textarea4;
+
+ JTextArea textarea5;
+
+ JTextArea textarea6;
+
+ JCheckBox enabled2;
+
+ JCheckBox editable2;
+
+ /**
+ * The word wrapping textareas and state buttons.
+ */
+ JTextArea textarea7;
+
+ JTextArea textarea8;
+
+ JTextArea textarea9;
+
+ JCheckBox enabled3;
+
+ JCheckBox editable3;
+
+ /**
+ * The custom colored textareas and state buttons.
+ */
+ JTextArea textarea10;
+
+ JTextArea textarea11;
+
+ JTextArea textarea12;
+
+ JTextArea textarea13;
+
+ JTextArea textarea14;
+
+ JTextArea textarea14b;
+
+ JCheckBox enabled4;
+
+ JCheckBox editable4;
+
+ /**
+ * Some miscellaneous textarea demos.
+ */
+ JTextArea textarea15;
+
+ JTextArea textarea16;
+
+ JTextArea textarea17;
+
+ JCheckBox enabled5;
+
+ JCheckBox editable5;
+
+ /**
+ * Creates a new demo instance.
+ */
+ public TextAreaDemo()
+ {
+ super();
+ createContent();
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board, only
+ * the demo content panel is used, the frame itself is never displayed, so we
+ * can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ /**
+ * Returns a panel with the demo content. The panel uses a BorderLayout(), and
+ * the BorderLayout.SOUTH area is empty, to allow callers to add controls to
+ * the bottom of the panel if they want to (a close button is added if this
+ * demo is being run as a standalone demo).
+ */
+ private void createContent()
+ {
+ setLayout(new BorderLayout());
+ JTabbedPane tabPane = new JTabbedPane();
+ tabPane.addTab("Non-wrap", createNonWrapPanel());
+ tabPane.addTab("Char-wrap", createCharWrapPanel());
+ tabPane.addTab("Word-wrap", createWordWrapPanel());
+ tabPane.addTab("Custom colors", createCustomColoredPanel());
+ tabPane.addTab("Misc", createMiscPanel());
+ add(tabPane);
+ }
+
+ private JPanel createNonWrapPanel()
+ {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createTitledBorder("Not wrapping"));
+
+ panel1 = new JPanel(new GridLayout(2, 2));
+
+ textarea1 = new JTextArea("Hello World!");
+ textarea1.setFont(new Font("Dialog", Font.PLAIN, 8));
+ panel1.add(new JScrollPane(textarea1));
+
+ textarea2 = new JTextArea("Hello World!");
+ textarea2.setFont(new Font("Dialog", Font.ITALIC, 12));
+ panel1.add(new JScrollPane(textarea2));
+
+ textarea3 = new JTextArea("Hello World!");
+ textarea3.setFont(new Font("Dialog", Font.BOLD, 14));
+ panel1.add(new JScrollPane(textarea3));
+
+ panel.add(panel1);
+
+ JPanel statePanel = new JPanel();
+ statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+ statePanel.add(Box.createVerticalGlue());
+ enabled1 = new JCheckBox("enabled");
+ enabled1.setSelected(true);
+ enabled1.addActionListener(this);
+ enabled1.setActionCommand("ENABLED1");
+ statePanel.add(enabled1);
+ editable1 = new JCheckBox("editable");
+ editable1.setSelected(true);
+ editable1.addActionListener(this);
+ editable1.setActionCommand("EDITABLE1");
+ statePanel.add(editable1);
+ statePanel.add(Box.createVerticalGlue());
+ panel.add(statePanel, BorderLayout.EAST);
+
+ return panel;
+ }
+
+ private JPanel createCharWrapPanel()
+ {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createTitledBorder("Wrap at char bounds"));
+
+ JPanel innerPanel = new JPanel(new GridLayout(2, 2));
+
+ textarea4 = new JTextArea("Hello World!");
+ textarea4.setLineWrap(true);
+ textarea4.setFont(new Font("Dialog", Font.PLAIN, 8));
+ innerPanel.add(new JScrollPane(textarea4));
+
+ textarea5 = new JTextArea("Hello World!");
+ textarea5.setLineWrap(true);
+ textarea5.setFont(new Font("Dialog", Font.ITALIC, 12));
+ innerPanel.add(new JScrollPane(textarea5));
+
+ textarea6 = new JTextArea("Hello World!");
+ textarea6.setLineWrap(true);
+ textarea6.setFont(new Font("Dialog", Font.BOLD, 14));
+ innerPanel.add(new JScrollPane(textarea6));
+
+ panel.add(innerPanel);
+
+ JPanel statePanel = new JPanel();
+ statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+ statePanel.add(Box.createVerticalGlue());
+ enabled2 = new JCheckBox("enabled");
+ enabled2.setSelected(true);
+ enabled2.addActionListener(this);
+ enabled2.setActionCommand("ENABLED2");
+ statePanel.add(enabled2);
+ editable2 = new JCheckBox("editable");
+ editable2.setSelected(true);
+ editable2.addActionListener(this);
+ editable2.setActionCommand("EDITABLE2");
+ statePanel.add(editable2);
+ statePanel.add(Box.createVerticalGlue());
+ panel.add(statePanel, BorderLayout.EAST);
+
+ return panel;
+ }
+
+ private JPanel createWordWrapPanel()
+ {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createTitledBorder("Wrap at word bounds"));
+
+ JPanel innerPanel = new JPanel(new GridLayout(2, 2));
+
+ textarea7 = new JTextArea("Hello World!");
+ textarea7.setWrapStyleWord(true);
+ textarea7.setLineWrap(true);
+ textarea7.setFont(new Font("Dialog", Font.PLAIN, 8));
+ innerPanel.add(new JScrollPane(textarea7));
+
+ textarea8 = new JTextArea("Hello World!");
+ textarea8.setWrapStyleWord(true);
+ textarea8.setLineWrap(true);
+ textarea8.setFont(new Font("Dialog", Font.ITALIC, 12));
+ innerPanel.add(new JScrollPane(textarea8));
+
+ textarea9 = new JTextArea("Hello World!");
+ textarea9.setWrapStyleWord(true);
+ textarea9.setLineWrap(true);
+ textarea9.setFont(new Font("Dialog", Font.BOLD, 14));
+ innerPanel.add(new JScrollPane(textarea9));
+
+ panel.add(innerPanel);
+
+ JPanel statePanel = new JPanel();
+ statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+ statePanel.add(Box.createVerticalGlue());
+ enabled3 = new JCheckBox("enabled");
+ enabled3.setSelected(true);
+ enabled3.addActionListener(this);
+ enabled3.setActionCommand("ENABLED3");
+ statePanel.add(enabled3);
+ editable3 = new JCheckBox("editable");
+ editable3.setSelected(true);
+ editable3.addActionListener(this);
+ editable3.setActionCommand("EDITABLE3");
+ statePanel.add(editable3);
+ statePanel.add(Box.createVerticalGlue());
+ panel.add(statePanel, BorderLayout.EAST);
+
+ return panel;
+ }
+
+ private JPanel createCustomColoredPanel()
+ {
+ JPanel panel = new JPanel(new BorderLayout());
+
+ JPanel innerPanel = new JPanel(new GridLayout(3, 2));
+ panel.setBorder(BorderFactory.createTitledBorder("Custom colors"));
+
+ textarea10 = new JTextArea("custom foreground", 10, 15);
+ textarea10.setForeground(Color.GREEN);
+ innerPanel.add(new JScrollPane(textarea10));
+
+ textarea11 = new JTextArea("custom background", 10, 15);
+ textarea11.setBackground(Color.YELLOW);
+ innerPanel.add(new JScrollPane(textarea11));
+
+ textarea12 = new JTextArea("custom disabled textcolor", 10, 15);
+ textarea12.setDisabledTextColor(Color.BLUE);
+ innerPanel.add(new JScrollPane(textarea12));
+
+ textarea13 = new JTextArea("custom selected text color", 10, 15);
+ textarea13.setSelectedTextColor(Color.RED);
+ innerPanel.add(new JScrollPane(textarea13));
+
+ textarea14 = new JTextArea("custom selection color", 10, 15);
+ textarea14.setSelectionColor(Color.RED);
+ innerPanel.add(new JScrollPane(textarea14));
+
+ textarea14b = new JTextArea("custom selection and selected text color", 10, 15);
+ textarea14b.setSelectedTextColor(Color.WHITE);
+ textarea14b.setSelectionColor(Color.BLACK);
+ innerPanel.add(new JScrollPane(textarea14b));
+
+ panel.add(innerPanel);
+
+ JPanel statePanel = new JPanel();
+ statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+ statePanel.add(Box.createVerticalGlue());
+ enabled4 = new JCheckBox("enabled");
+ enabled4.setSelected(true);
+ enabled4.addActionListener(this);
+ enabled4.setActionCommand("ENABLED4");
+ statePanel.add(enabled4);
+ editable4 = new JCheckBox("editable");
+ editable4.setSelected(true);
+ editable4.addActionListener(this);
+ editable4.setActionCommand("EDITABLE4");
+ statePanel.add(editable4);
+ statePanel.add(Box.createVerticalGlue());
+ panel.add(statePanel, BorderLayout.EAST);
+
+ return panel;
+ }
+
+ private JPanel createMiscPanel()
+ {
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createTitledBorder("Miscellaneous"));
+
+ JPanel innerPanel = new JPanel(new GridLayout(2, 2));
+
+ textarea15 = new JTextArea("Custom Caret");
+ textarea15.setCaret(new CornerCaret());
+ innerPanel.add(new JScrollPane(textarea15));
+
+ textarea16 = new JTextArea("Custom Caret color");
+ textarea16.setCaretColor(Color.MAGENTA);
+ innerPanel.add(new JScrollPane(textarea16));
+
+ textarea16 = new JTextArea("Custom Selection painter");
+ textarea16.setFont(new Font("Dialog", Font.PLAIN, 24));
+ textarea16.setCaret(new DefaultCaret()
+ {
+ public Highlighter.HighlightPainter getSelectionPainter()
+ {
+ return DemoHighlightPainter.INSTANCE;
+ }
+ });
+
+ innerPanel.add(new JScrollPane(textarea16));
+
+ panel.add(innerPanel);
+
+ JPanel statePanel = new JPanel();
+ statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
+ statePanel.add(Box.createVerticalGlue());
+ enabled5 = new JCheckBox("enabled");
+ enabled5.setSelected(true);
+ enabled5.addActionListener(this);
+ enabled5.setActionCommand("ENABLED5");
+ statePanel.add(enabled5);
+ editable5 = new JCheckBox("editable");
+ editable5.setSelected(true);
+ editable5.addActionListener(this);
+ editable5.setActionCommand("EDITABLE5");
+ statePanel.add(editable5);
+ statePanel.add(Box.createVerticalGlue());
+ panel.add(statePanel, BorderLayout.EAST);
+
+ return panel;
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
+ else if (e.getActionCommand().equals("ENABLED1"))
+ {
+ boolean enabled = enabled1.isSelected();
+ textarea1.setEnabled(enabled);
+ textarea2.setEnabled(enabled);
+ textarea3.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE1"))
+ {
+ boolean editable = editable1.isSelected();
+ textarea1.setEditable(editable);
+ textarea2.setEditable(editable);
+ textarea3.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED2"))
+ {
+ boolean enabled = enabled2.isSelected();
+ textarea4.setEnabled(enabled);
+ textarea5.setEnabled(enabled);
+ textarea6.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE2"))
+ {
+ boolean editable = editable2.isSelected();
+ textarea4.setEditable(editable);
+ textarea5.setEditable(editable);
+ textarea6.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED3"))
+ {
+ boolean enabled = enabled3.isSelected();
+ textarea7.setEnabled(enabled);
+ textarea8.setEnabled(enabled);
+ textarea9.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE3"))
+ {
+ boolean editable = editable3.isSelected();
+ textarea7.setEditable(editable);
+ textarea8.setEditable(editable);
+ textarea9.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED4"))
+ {
+ boolean enabled = enabled4.isSelected();
+ textarea10.setEnabled(enabled);
+ textarea11.setEnabled(enabled);
+ textarea12.setEnabled(enabled);
+ textarea13.setEnabled(enabled);
+ textarea14.setEnabled(enabled);
+ textarea14b.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE4"))
+ {
+ boolean editable = editable4.isSelected();
+ textarea10.setEditable(editable);
+ textarea11.setEditable(editable);
+ textarea12.setEditable(editable);
+ textarea13.setEditable(editable);
+ textarea14.setEditable(editable);
+ textarea14b.setEditable(editable);
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ TextAreaDemo app = new TextAreaDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame();
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a TextAreaDemo.
+ *
+ * @return a DemoFactory that creates a TextAreaDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new TextAreaDemo();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java
index 6eda469..ba0fefa 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/TextFieldDemo.java
@@ -1,5 +1,5 @@
/* TextFieldDemo.java -- An example showing various textfields in Swing.
- Copyright (C) 2005, 2006, Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath examples.
@@ -27,7 +27,9 @@ import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
+import java.awt.Point;
import java.awt.Rectangle;
+import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -36,18 +38,28 @@ import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
+import javax.swing.JScrollPane;
import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.LineBorder;
+import javax.swing.border.TitledBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultCaret;
+import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
+import javax.swing.text.View;
+import javax.swing.text.LayeredHighlighter.LayerPainter;
/**
* A simple textfield demo showing various textfields in different states.
*/
public class TextFieldDemo
- extends JFrame
+ extends JPanel
implements ActionListener
{
@@ -106,66 +118,96 @@ public class TextFieldDemo
}
}
}
+
+ static class DemoHighlightPainter
+ extends LayerPainter
+ {
+
+ static DemoHighlightPainter INSTANCE = new DemoHighlightPainter();
+
- private JPanel content;
+ static Color[] colors = { Color.BLUE, Color.CYAN, Color.GRAY, Color.GREEN,
+ Color.MAGENTA, Color.ORANGE, Color.PINK,
+ Color.ORANGE, Color.RED, Color.BLUE, Color.YELLOW };
+
+
+ public DemoHighlightPainter()
+ {
+ super();
+ }
+
+ private void paintHighlight(Graphics g, Rectangle rect)
+ {
+ g.fillRect(rect.x, rect.y, rect.width, rect.height);
+ }
+
+ public void paint(Graphics g, int p0, int p1, Shape bounds, JTextComponent t)
+ {
+ try
+ {
+
+ for (int i = p0; i < p1; i++)
+ {
+ Rectangle r = t.modelToView(i);
+ Point l1 = t.modelToView(i + 1).getLocation();
+
+ g.setColor(colors[(int) (Math.random() * colors.length)]);
+ g.fillOval(r.x, r.y, l1.x - r.x, r.height);
+ }
+ }
+ catch (BadLocationException ble)
+ {
+ }
+ }
+
+ public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
+ JTextComponent c, View view)
+ {
+ paint(g, p0, p1, bounds, c);
+
+ return bounds;
+ }
+
+ }
/**
* The left aligned textfields and state buttons.
*/
- JTextField textfield1;
- JTextField textfield2;
- JTextField textfield3;
- JCheckBox enabled1;
- JCheckBox editable1;
- JPanel textFieldPanel1;
+ Compound compound1;
+
/**
* The right aligned textfields and state buttons.
*/
- JTextField textfield4;
- JTextField textfield5;
- JTextField textfield6;
- JCheckBox enabled2;
- JCheckBox editable2;
+ Compound compound2;
/**
* The centered textfields and state buttons.
*/
- JTextField textfield7;
- JTextField textfield8;
- JTextField textfield9;
- JCheckBox enabled3;
- JCheckBox editable3;
+ Compound compound3;
/**
* The custom colored textfields and state buttons.
*/
- JTextField textfield10;
- JTextField textfield11;
- JTextField textfield12;
- JTextField textfield13;
- JTextField textfield14;
- JCheckBox enabled4;
- JCheckBox editable4;
+ Compound compound4;
+ Compound compound5;
/**
- * Some miscallenous textfield demos.
+ * Some miscellaneous textfield demos.
*/
- JTextField textfield15;
- JTextField textfield16;
- JCheckBox enabled5;
- JCheckBox editable5;
+ Compound compound6;
+
+ /**
+ * Some textfields with custom borders.
+ */
+ Compound compound7;
/**
* Creates a new demo instance.
- *
- * @param title the frame title.
*/
- public TextFieldDemo(String title)
+ public TextFieldDemo()
{
- super(title);
- JPanel content = createContent();
- // initFrameContent() is only called (from main) when running this app
- // standalone
+ super();
+ createContent();
}
/**
@@ -175,15 +217,14 @@ public class TextFieldDemo
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
- public void initFrameContent()
+ void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
- content.add(closePanel, BorderLayout.SOUTH);
- getContentPane().add(content);
+ add(closePanel, BorderLayout.SOUTH);
}
/**
@@ -193,239 +234,185 @@ public class TextFieldDemo
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
- JPanel createContent()
+ private void createContent()
{
- if (content == null)
- {
- content = new JPanel(new BorderLayout());
- JPanel panel = new JPanel(new GridLayout(5, 1));
- panel.add(createLeftAlignedPanel());
- panel.add(createRightAlignedPanel());
- panel.add(createCenteredPanel());
- panel.add(createCustomColoredPanel());
- panel.add(createMiscPanel());
- content.add(panel);
- //content.setPreferredSize(new Dimension(400, 300));
- }
- return content;
+ setLayout(new BorderLayout());
+ JPanel panel = new JPanel(new GridLayout(7, 1));
+ panel.add(createLeftAlignedPanel());
+ panel.add(createRightAlignedPanel());
+ panel.add(createCenteredPanel());
+ panel.add(createCustomColorPanel1());
+ panel.add(createCustomColorPanel2());
+ panel.add(createCustomBordersPanel());
+ panel.add(createMiscPanel());
+
+ // Put everything in a scroll pane to make it neccessary
+ // to reach the bottom inner panels if the screen is to small.
+ add(new JScrollPane(panel));
}
private JPanel createLeftAlignedPanel()
{
- JPanel panel = new JPanel(new BorderLayout());
- panel.setBorder(BorderFactory.createTitledBorder("Left aligned"));
+ compound1 = createTextFieldCompound("Left aligned", 1);
+
+ compound1.setupTextfields("Hello World!",
+ JTextField.LEFT,
+ new Font[] { new Font("Dialog", Font.PLAIN, 8),
+ new Font("Dialog", Font.ITALIC, 12),
+ new Font("Dialog", Font.BOLD, 14)
+ });
- textFieldPanel1 = new JPanel();
- textFieldPanel1.setLayout(new BoxLayout(textFieldPanel1, BoxLayout.X_AXIS));
-
- textfield1 = new JTextField("Hello World!");
- textfield1.setHorizontalAlignment(JTextField.LEFT);
- textfield1.setFont(new Font("Dialog", Font.PLAIN, 8));
- textFieldPanel1.add(textfield1);
-
- textfield2 = new JTextField("Hello World!");
- textfield2.setHorizontalAlignment(JTextField.LEFT);
- textfield2.setFont(new Font("Dialog", Font.ITALIC, 12));
- textFieldPanel1.add(textfield2);
-
- textfield3 = new JTextField("Hello World!");
- textfield3.setHorizontalAlignment(JTextField.LEFT);
- textfield3.setFont(new Font("Dialog", Font.BOLD, 14));
- textFieldPanel1.add(textfield3);
+ return compound1.panel;
+ }
+
+ private Compound createTextFieldCompound(String title, int actionCommandNo)
+ {
+ Compound compound = new Compound();
+ compound.panel = new JPanel(new BorderLayout());
+ compound.panel.setBorder(BorderFactory.createTitledBorder(title));
+
+ compound.textFieldPanel = new JPanel();
+ compound.textFieldPanel.setLayout(new BoxLayout(compound.textFieldPanel, BoxLayout.X_AXIS));
- panel.add(textFieldPanel1);
+ compound.panel.add(compound.textFieldPanel);
JPanel statePanel = new JPanel();
statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
statePanel.add(Box.createVerticalGlue());
- enabled1 = new JCheckBox("enabled");
- enabled1.setSelected(true);
- enabled1.addActionListener(this);
- enabled1.setActionCommand("ENABLED1");
- statePanel.add(enabled1);
- editable1 = new JCheckBox("editable");
- editable1.setSelected(true);
- editable1.addActionListener(this);
- editable1.setActionCommand("EDITABLE1");
- statePanel.add(editable1);
+ compound.enabled = new JCheckBox("enabled");
+ compound.enabled.setSelected(true);
+ compound.enabled.addActionListener(this);
+ compound.enabled.setActionCommand("ENABLED" + actionCommandNo);
+ statePanel.add(compound.enabled);
+ compound.editable = new JCheckBox("editable");
+ compound.editable.setSelected(true);
+ compound.editable.addActionListener(this);
+ compound.editable.setActionCommand("EDITABLE" + actionCommandNo);
+ statePanel.add(compound.editable);
statePanel.add(Box.createVerticalGlue());
- panel.add(statePanel, BorderLayout.EAST);
+ compound.panel.add(statePanel, BorderLayout.EAST);
- return panel;
+ return compound;
}
private JPanel createRightAlignedPanel()
{
- JPanel panel = new JPanel(new BorderLayout());
- panel.setBorder(BorderFactory.createTitledBorder("Right aligned"));
+ compound2 = createTextFieldCompound("Right aligned", 2);
+
+ compound2.setupTextfields("Hello World!",
+ JTextField.RIGHT,
+ new Font[] { new Font("Dialog", Font.PLAIN, 8),
+ new Font("Dialog", Font.ITALIC, 12),
+ new Font("Dialog", Font.BOLD, 14)
+ });
- JPanel textFieldPanel = new JPanel();
- textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
-
- textfield4 = new JTextField("Hello World!");
- textfield4.setHorizontalAlignment(JTextField.RIGHT);
- textfield4.setFont(new Font("Dialog", Font.PLAIN, 8));
- textFieldPanel.add(textfield4);
-
- textfield5 = new JTextField("Hello World!");
- textfield5.setHorizontalAlignment(JTextField.RIGHT);
- textfield5.setFont(new Font("Dialog", Font.ITALIC, 12));
- textFieldPanel.add(textfield5);
-
- textfield6 = new JTextField("Hello World!");
- textfield6.setHorizontalAlignment(JTextField.RIGHT);
- textfield6.setFont(new Font("Dialog", Font.BOLD, 14));
- textFieldPanel.add(textfield6);
-
- panel.add(textFieldPanel);
-
- JPanel statePanel = new JPanel();
- statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
- statePanel.add(Box.createVerticalGlue());
- enabled2 = new JCheckBox("enabled");
- enabled2.setSelected(true);
- enabled2.addActionListener(this);
- enabled2.setActionCommand("ENABLED2");
- statePanel.add(enabled2);
- editable2 = new JCheckBox("editable");
- editable2.setSelected(true);
- editable2.addActionListener(this);
- editable2.setActionCommand("EDITABLE2");
- statePanel.add(editable2);
- statePanel.add(Box.createVerticalGlue());
- panel.add(statePanel, BorderLayout.EAST);
-
- return panel;
+ return compound2.panel;
}
private JPanel createCenteredPanel()
{
- JPanel panel = new JPanel(new BorderLayout());
- panel.setBorder(BorderFactory.createTitledBorder("Centered"));
-
- JPanel textFieldPanel = new JPanel();
- textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
-
- textfield7 = new JTextField("Hello World!");
- textfield7.setHorizontalAlignment(JTextField.CENTER);
- textfield7.setFont(new Font("Dialog", Font.PLAIN, 8));
- textFieldPanel.add(textfield7);
-
- textfield8 = new JTextField("Hello World!");
- textfield8.setHorizontalAlignment(JTextField.CENTER);
- textfield8.setFont(new Font("Dialog", Font.ITALIC, 12));
- textFieldPanel.add(textfield8);
-
- textfield9 = new JTextField("Hello World!");
- textfield9.setHorizontalAlignment(JTextField.CENTER);
- textfield9.setFont(new Font("Dialog", Font.BOLD, 14));
- textFieldPanel.add(textfield9);
-
- panel.add(textFieldPanel);
-
- JPanel statePanel = new JPanel();
- statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
- statePanel.add(Box.createVerticalGlue());
- enabled3 = new JCheckBox("enabled");
- enabled3.setSelected(true);
- enabled3.addActionListener(this);
- enabled3.setActionCommand("ENABLED3");
- statePanel.add(enabled3);
- editable3 = new JCheckBox("editable");
- editable3.setSelected(true);
- editable3.addActionListener(this);
- editable3.setActionCommand("EDITABLE3");
- statePanel.add(editable3);
- statePanel.add(Box.createVerticalGlue());
- panel.add(statePanel, BorderLayout.EAST);
-
- return panel;
+ compound3 = createTextFieldCompound("Centered", 3);
+
+ compound3.setupTextfields("Hello World!",
+ JTextField.CENTER,
+ new Font[] { new Font("Dialog", Font.PLAIN, 8),
+ new Font("Dialog", Font.ITALIC, 12),
+ new Font("Dialog", Font.BOLD, 14)
+ });
+
+ return compound3.panel;
}
- private JPanel createCustomColoredPanel()
+ private JPanel createCustomColorPanel1()
{
- JPanel panel = new JPanel(new BorderLayout());
-
- JPanel textFieldPanel = new JPanel();
- panel.setBorder(BorderFactory.createTitledBorder("Custom colors"));
- textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ compound4 = createTextFieldCompound("Custom colors I", 4);
- textfield10 = new JTextField("custom foreground");
- textfield10.setForeground(Color.GREEN);
- textFieldPanel.add(textfield10);
+ compound4.textfield1 = new JTextField("custom foreground");
+ compound4.textfield1.setForeground(Color.RED);
+ compound4.textFieldPanel.add(compound4.textfield1);
- textfield11 = new JTextField("custom background");
- textfield11.setForeground(Color.YELLOW);
- textFieldPanel.add(textfield11);
+ compound4.textfield2 = new JTextField("custom background");
+ compound4.textfield2.setBackground(Color.YELLOW);
+ compound4.textFieldPanel.add(compound4.textfield2);
- textfield12 = new JTextField("custom disabled textcolor");
- textfield12.setDisabledTextColor(Color.BLUE);
- textFieldPanel.add(textfield12);
-
- textfield13 = new JTextField("custom selected text color");
- textfield13.setSelectedTextColor(Color.RED);
- textFieldPanel.add(textfield13);
+ compound4.textfield3 = new JTextField("custom foreground and background");
+ compound4.textfield3.setForeground(Color.RED);
+ compound4.textfield3.setBackground(Color.YELLOW);
+ compound4.textFieldPanel.add(compound4.textfield3);
+
+ return compound4.panel;
+
+ }
+
+ private JPanel createCustomColorPanel2()
+ {
+ compound5 = createTextFieldCompound("Custom colors II", 5);
- textfield14 = new JTextField("custom selection color");
- textfield14.setSelectionColor(Color.CYAN);
- textFieldPanel.add(textfield14);
+ compound5.textfield1 = new JTextField("custom disabled textcolor");
+ compound5.textfield1.setDisabledTextColor(Color.BLUE);
+ compound5.textFieldPanel.add(compound5.textfield1);
- panel.add(textFieldPanel);
+ compound5.textfield2 = new JTextField("custom selected text color");
+ compound5.textfield2.setSelectedTextColor(Color.RED);
+ compound5.textFieldPanel.add(compound5.textfield2);
- JPanel statePanel = new JPanel();
- statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
- statePanel.add(Box.createVerticalGlue());
- enabled4 = new JCheckBox("enabled");
- enabled4.setSelected(true);
- enabled4.addActionListener(this);
- enabled4.setActionCommand("ENABLED4");
- statePanel.add(enabled4);
- editable4 = new JCheckBox("editable");
- editable4.setSelected(true);
- editable4.addActionListener(this);
- editable4.setActionCommand("EDITABLE4");
- statePanel.add(editable4);
- statePanel.add(Box.createVerticalGlue());
- panel.add(statePanel, BorderLayout.EAST);
-
- return panel;
+ compound5.textfield3 = new JTextField("custom selection color");
+ compound5.textfield3.setSelectionColor(Color.BLACK);
+ compound5.textFieldPanel.add(compound5.textfield3);
+
+ return compound5.panel;
+
}
private JPanel createMiscPanel()
{
- JPanel panel = new JPanel(new BorderLayout());
- panel.setBorder(BorderFactory.createTitledBorder("Miscallenous"));
-
- JPanel textFieldPanel = new JPanel();
- textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.X_AXIS));
+ compound6 = createTextFieldCompound("Miscellaneous", 6);
+
+ compound6.textfield1 = new JTextField("Custom Caret");
+ compound6.textfield1.setCaret(new CornerCaret());
+ compound6.textFieldPanel.add(compound6.textfield1);
+
+ compound6.textfield2 = new JTextField("Custom Caret color");
+ compound6.textfield2.setForeground(Color.LIGHT_GRAY);
+ compound6.textfield2.setBackground(Color.BLACK);
+ compound6.textfield2.setSelectedTextColor(Color.BLACK);
+ compound6.textfield2.setCaretColor(Color.WHITE);
+ compound6.textfield2.setSelectionColor(Color.DARK_GRAY);
+ compound6.textFieldPanel.add(compound6.textfield2);
+
+ compound6.textfield3 = new JTextField("Custom highlighter");
+ compound6.textfield3.setCaret(new DefaultCaret()
+ {
+ public Highlighter.HighlightPainter getSelectionPainter()
+ {
+ return DemoHighlightPainter.INSTANCE;
+ }
+ });
+ compound6.textFieldPanel.add(compound6.textfield3);
- textfield15 = new JTextField("Custom Caret");
- textfield15.setCaret(new CornerCaret());
- textFieldPanel.add(textfield15);
+ return compound6.panel;
+ }
+
+ private JPanel createCustomBordersPanel()
+ {
+ compound7 = createTextFieldCompound("Custom borders", 7);
- textfield16 = new JTextField("Custom Caret color");
- textfield16.setCaretColor(Color.MAGENTA);
- textFieldPanel.add(textfield16);
+ compound7.textfield1 = new JTextField("red 5 pixel lineborder");
+ compound7.textfield1.setBorder(new LineBorder(Color.RED, 5));
+ compound7.textFieldPanel.add(compound7.textfield1);
- panel.add(textFieldPanel);
+ compound7.textfield2 = new JTextField("complex irregular border");
- JPanel statePanel = new JPanel();
- statePanel.setLayout(new BoxLayout(statePanel, BoxLayout.Y_AXIS));
- statePanel.add(Box.createVerticalGlue());
- enabled5 = new JCheckBox("enabled");
- enabled5.setSelected(true);
- enabled5.addActionListener(this);
- enabled5.setActionCommand("ENABLED5");
- statePanel.add(enabled5);
- editable5 = new JCheckBox("editable");
- editable5.setSelected(true);
- editable5.addActionListener(this);
- editable5.setActionCommand("EDITABLE5");
- statePanel.add(editable5);
- statePanel.add(Box.createVerticalGlue());
- panel.add(statePanel, BorderLayout.EAST);
+ CompoundBorder innerCompound = new CompoundBorder(new EmptyBorder(5, 40, 15, 10), new LineBorder(Color.BLACK));
+ CompoundBorder outerCompound = new CompoundBorder(new LineBorder(Color.BLACK), innerCompound);
+ compound7.textfield2.setBorder(outerCompound);
+ compound7.textFieldPanel.add(compound7.textfield2);
+
+ compound7.textfield3 = new JTextField("a titled border", 10);
+ compound7.textfield3.setBorder(new TitledBorder(null, "Freak Out Border", TitledBorder.CENTER, TitledBorder.LEFT));
+ compound7.textFieldPanel.add(compound7.textfield3);
- return panel;
+ return compound7.panel;
}
public void actionPerformed(ActionEvent e)
@@ -436,72 +423,172 @@ public class TextFieldDemo
}
else if (e.getActionCommand().equals("ENABLED1"))
{
- boolean enabled = enabled1.isSelected();
- textfield1.setEnabled(enabled);
- textfield2.setEnabled(enabled);
- textfield3.setEnabled(enabled);
+ boolean enabled = compound1.enabled.isSelected();
+ compound1.textfield1.setEnabled(enabled);
+ compound1.textfield2.setEnabled(enabled);
+ compound1.textfield3.setEnabled(enabled);
}
else if (e.getActionCommand().equals("EDITABLE1"))
{
- boolean editable = editable1.isSelected();
- textfield1.setEditable(editable);
- textfield2.setEditable(editable);
- textfield3.setEditable(editable);
+ boolean editable = compound1.editable.isSelected();
+ compound1.textfield1.setEditable(editable);
+ compound1.textfield2.setEditable(editable);
+ compound1.textfield3.setEditable(editable);
}
else if (e.getActionCommand().equals("ENABLED2"))
{
- boolean enabled = enabled2.isSelected();
- textfield4.setEnabled(enabled);
- textfield5.setEnabled(enabled);
- textfield6.setEnabled(enabled);
+ boolean enabled = compound2.enabled.isSelected();
+ compound2.textfield1.setEnabled(enabled);
+ compound2.textfield2.setEnabled(enabled);
+ compound2.textfield3.setEnabled(enabled);
}
else if (e.getActionCommand().equals("EDITABLE2"))
{
- boolean editable = editable2.isSelected();
- textfield4.setEditable(editable);
- textfield5.setEditable(editable);
- textfield6.setEditable(editable);
+ boolean editable = compound2.editable.isSelected();
+ compound2.textfield1.setEditable(editable);
+ compound2.textfield2.setEditable(editable);
+ compound2.textfield3.setEditable(editable);
}
else if (e.getActionCommand().equals("ENABLED3"))
{
- boolean enabled = enabled3.isSelected();
- textfield7.setEnabled(enabled);
- textfield8.setEnabled(enabled);
- textfield9.setEnabled(enabled);
+ boolean enabled = compound3.enabled.isSelected();
+ compound3.textfield1.setEnabled(enabled);
+ compound3.textfield2.setEnabled(enabled);
+ compound3.textfield3.setEnabled(enabled);
}
else if (e.getActionCommand().equals("EDITABLE3"))
{
- boolean editable = editable3.isSelected();
- textfield7.setEditable(editable);
- textfield8.setEditable(editable);
- textfield9.setEditable(editable);
+ boolean editable = compound3.editable.isSelected();
+ compound3.textfield1.setEditable(editable);
+ compound3.textfield2.setEditable(editable);
+ compound3.textfield3.setEditable(editable);
}
else if (e.getActionCommand().equals("ENABLED4"))
{
- boolean enabled = enabled4.isSelected();
- textfield10.setEnabled(enabled);
- textfield11.setEnabled(enabled);
- textfield12.setEnabled(enabled);
- textfield13.setEnabled(enabled);
- textfield14.setEnabled(enabled);
+ boolean enabled = compound4.enabled.isSelected();
+ compound4.textfield1.setEnabled(enabled);
+ compound4.textfield2.setEnabled(enabled);
+ compound4.textfield3.setEnabled(enabled);
}
else if (e.getActionCommand().equals("EDITABLE4"))
{
- boolean editable = editable4.isSelected();
- textfield10.setEditable(editable);
- textfield11.setEditable(editable);
- textfield12.setEditable(editable);
- textfield13.setEditable(editable);
- textfield14.setEditable(editable);
+ boolean editable = compound4.editable.isSelected();
+ compound4.textfield1.setEditable(editable);
+ compound4.textfield2.setEditable(editable);
+ compound4.textfield3.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED5"))
+ {
+ boolean enabled = compound5.enabled.isSelected();
+ compound5.textfield1.setEnabled(enabled);
+ compound5.textfield2.setEnabled(enabled);
+ compound5.textfield3.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE5"))
+ {
+ boolean editable = compound5.editable.isSelected();
+ compound5.textfield1.setEditable(editable);
+ compound5.textfield2.setEditable(editable);
+ compound5.textfield3.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED6"))
+ {
+ boolean enabled = compound6.enabled.isSelected();
+ compound6.textfield1.setEnabled(enabled);
+ compound6.textfield2.setEnabled(enabled);
+ compound6.textfield3.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE6"))
+ {
+ boolean editable = compound6.editable.isSelected();
+ compound6.textfield1.setEditable(editable);
+ compound6.textfield2.setEditable(editable);
+ compound6.textfield3.setEditable(editable);
+ }
+ else if (e.getActionCommand().equals("ENABLED7"))
+ {
+ boolean enabled = compound7.enabled.isSelected();
+ compound7.textfield1.setEnabled(enabled);
+ compound7.textfield2.setEnabled(enabled);
+ compound7.textfield3.setEnabled(enabled);
+ }
+ else if (e.getActionCommand().equals("EDITABLE7"))
+ {
+ boolean editable = compound7.editable.isSelected();
+ compound7.textfield1.setEditable(editable);
+ compound7.textfield2.setEditable(editable);
+ compound7.textfield3.setEditable(editable);
}
}
public static void main(String[] args)
{
- TextFieldDemo app = new TextFieldDemo("TextField Demo");
- app.initFrameContent();
- app.pack();
- app.setVisible(true);
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ TextFieldDemo app = new TextFieldDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("TextField demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
}
+ /**
+ * Returns a DemoFactory that creates a TextFieldDemo.
+ *
+ * @return a DemoFactory that creates a TextFieldDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new TextFieldDemo();
+ }
+ };
+ }
+
+ static class Compound
+ {
+ JTextField textfield1;
+ JTextField textfield2;
+ JTextField textfield3;
+ JCheckBox enabled;
+ JCheckBox editable;
+ JPanel textFieldPanel;
+ JPanel panel;
+
+ /** Creates and initializes the textfields with the same text and
+ * alignment but with a different font.
+ *
+ * @param title The text for the textfields.
+ * @param align The alignment for the textfields.
+ * @param fonts The fonts to be used for the textfields.
+ */
+ void setupTextfields(String title, int align, Font[] fonts)
+ {
+ textfield1 = new JTextField(title);
+ textfield1.setHorizontalAlignment(align);
+ textfield1.setFont(fonts[0]);
+ textFieldPanel.add(textfield1);
+
+ textfield2 = new JTextField(title);
+ textfield2.setHorizontalAlignment(align);
+ textfield2.setFont(fonts[1]);
+ textFieldPanel.add(textfield2);
+
+ textfield3 = new JTextField(title);
+ textfield3.setHorizontalAlignment(align);
+ textfield3.setFont(fonts[2]);
+ textFieldPanel.add(textfield3);
+ }
+
+ }
+
}
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/TreeDemo.java b/libjava/classpath/examples/gnu/classpath/examples/swing/TreeDemo.java
new file mode 100644
index 0000000..32f765f
--- /dev/null
+++ b/libjava/classpath/examples/gnu/classpath/examples/swing/TreeDemo.java
@@ -0,0 +1,291 @@
+/* TreeDemo.java -- Demostrates JTree
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.examples.swing;
+
+import java.awt.BorderLayout;
+import java.awt.JobAttributes.DefaultSelectionType;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.DebugGraphics;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.DefaultTreeSelectionModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+public class TreeDemo
+ extends JPanel
+ implements ActionListener
+{
+
+ TreeDemo()
+ {
+ super();
+ createContent();
+ }
+
+ private void createContent()
+ {
+ // non-leafs
+ DefaultMutableTreeNode root = new DefaultMutableTreeNode("Exotic Subsistence");
+ DefaultMutableTreeNode fruit = new DefaultMutableTreeNode("Interesting Fruit");
+ DefaultMutableTreeNode veg = new DefaultMutableTreeNode("Extraordinary Vegetables");
+ DefaultMutableTreeNode liq = new DefaultMutableTreeNode("Peculiar Liquids");
+
+ // leafs
+ DefaultMutableTreeNode f1 = new DefaultMutableTreeNode("Abiu");
+ DefaultMutableTreeNode f2 = new DefaultMutableTreeNode("Bamboo Shoots");
+ DefaultMutableTreeNode f3 = new DefaultMutableTreeNode("Breadfruit");
+ DefaultMutableTreeNode f4 = new DefaultMutableTreeNode("Canistel");
+ DefaultMutableTreeNode f5 = new DefaultMutableTreeNode("Duku");
+ DefaultMutableTreeNode f6 = new DefaultMutableTreeNode("Guava");
+ DefaultMutableTreeNode f7 = new DefaultMutableTreeNode("Jakfruit");
+ DefaultMutableTreeNode f8 = new DefaultMutableTreeNode("Quaribea");
+
+ DefaultMutableTreeNode v1 = new DefaultMutableTreeNode("Amaranth");
+ DefaultMutableTreeNode v2 = new DefaultMutableTreeNode("Kiwano");
+ DefaultMutableTreeNode v3 = new DefaultMutableTreeNode("Leeks");
+ DefaultMutableTreeNode v4 = new DefaultMutableTreeNode("Luffa");
+ DefaultMutableTreeNode v5 = new DefaultMutableTreeNode("Chayote");
+ DefaultMutableTreeNode v6 = new DefaultMutableTreeNode("Jicama");
+ DefaultMutableTreeNode v7 = new DefaultMutableTreeNode("Okra");
+
+ DefaultMutableTreeNode l1 = new DefaultMutableTreeNode("Alcoholic");
+ DefaultMutableTreeNode l11 = new DefaultMutableTreeNode("Caipirinha");
+ DefaultMutableTreeNode l21 = new DefaultMutableTreeNode("Mojito");
+ DefaultMutableTreeNode l31 = new DefaultMutableTreeNode("Margarita");
+ DefaultMutableTreeNode l41 = new DefaultMutableTreeNode("Martini");
+ DefaultMutableTreeNode l5 = new DefaultMutableTreeNode("Non Alcoholic");
+ DefaultMutableTreeNode l55 = new DefaultMutableTreeNode("Babaji");
+ DefaultMutableTreeNode l65 = new DefaultMutableTreeNode("Chikita");
+
+ root.add(fruit);
+ root.add(veg);
+ root.add(liq);
+ fruit.add(f1);
+ fruit.add(f2);
+ fruit.add(f3);
+ fruit.add(f4);
+ fruit.add(f5);
+ fruit.add(f6);
+ fruit.add(f7);
+ fruit.add(f8);
+ veg.add(v1);
+ veg.add(v2);
+ veg.add(v3);
+ veg.add(v4);
+ veg.add(v5);
+ veg.add(v6);
+ veg.add(v7);
+ liq.add(l1);
+ l1.add(l11);
+ l1.add(l21);
+ l1.add(l31);
+ l1.add(l41);
+ liq.add(l5);
+ l5.add(l55);
+ l5.add(l65);
+
+ final JTree tree = new JTree(root);
+ tree.setLargeModel(true);
+ tree.setEditable(true);
+ final DefaultTreeSelectionModel selModel = new DefaultTreeSelectionModel();
+ selModel.setSelectionMode(
+ DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+ tree.setSelectionModel(selModel);
+
+ // buttons to add and delete
+ JButton add = new JButton("add element");
+ add.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ for (int i = 0; i < tree.getRowCount(); i++)
+ {
+ if (tree.isRowSelected(i))
+ {
+ TreePath p = tree.getPathForRow(i);
+ DefaultMutableTreeNode n = (DefaultMutableTreeNode) p.
+ getLastPathComponent();
+ n.add(new DefaultMutableTreeNode("New Element"));
+
+ // The expansion state of the parent node does not change
+ // by default. We will expand it manually, to ensure that the
+ // added node is immediately visible.
+ tree.expandPath(p);
+
+ // Refresh the tree (.repaint would be not enough both in
+ // Classpath and Sun implementations).
+ DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
+ model.reload(n);
+ break;
+ }
+ }
+ }
+ });
+
+ // Demonstration of the various selection modes
+ final JCheckBox cbSingle = new JCheckBox("single selection");
+ cbSingle.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if (cbSingle.isSelected())
+ selModel.setSelectionMode(
+ DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
+ else
+ selModel.setSelectionMode(
+ DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+ }
+ });
+
+ // Demonstration of the root visibility changes
+ final JCheckBox cbRoot = new JCheckBox("root");
+ cbRoot.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ tree.setRootVisible(cbRoot.isSelected());
+ }
+ });
+ cbRoot.setSelected(true);
+
+ // Demonstration of the tree selection listener.
+ final JLabel choice = new JLabel("Make a choice");
+ tree.getSelectionModel().addTreeSelectionListener(
+ new TreeSelectionListener()
+ {
+ public void valueChanged(TreeSelectionEvent event)
+ {
+ TreePath was = event.getOldLeadSelectionPath();
+ TreePath now = event.getNewLeadSelectionPath();
+ String swas =
+ was == null ? "none":was.getLastPathComponent().toString();
+ String snow =
+ now == null ? "none":now.getLastPathComponent().toString();
+ choice.setText("From "+swas+" to "+snow);
+ }
+ }
+ );
+
+ setLayout(new BorderLayout());
+
+ JPanel p2 = new JPanel();
+ p2.add(add);
+ p2.add(cbSingle);
+ p2.add(cbRoot);
+
+ tree.getSelectionModel().
+ setSelectionMode(DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+
+ add(p2, BorderLayout.NORTH);
+ add(new JScrollPane(tree), BorderLayout.CENTER);
+ add(choice, BorderLayout.SOUTH);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("CLOSE"))
+ {
+ System.exit(0);
+ }
+ }
+
+ /**
+ * When the demo is run independently, the frame is displayed, so we should
+ * initialise the content panel (including the demo content and a close
+ * button). But when the demo is run as part of the Swing activity board,
+ * only the demo content panel is used, the frame itself is never displayed,
+ * so we can avoid this step.
+ */
+ void initFrameContent()
+ {
+ JPanel closePanel = new JPanel();
+ JButton closeButton = new JButton("Close");
+ closeButton.setActionCommand("CLOSE");
+ closeButton.addActionListener(this);
+ closePanel.add(closeButton);
+ add(closePanel, BorderLayout.SOUTH);
+ }
+
+ public static void main(String[] args)
+ {
+ SwingUtilities.invokeLater
+ (new Runnable()
+ {
+ public void run()
+ {
+ TreeDemo app = new TreeDemo();
+ app.initFrameContent();
+ JFrame frame = new JFrame("Tree Demo");
+ frame.getContentPane().add(app);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Returns a DemoFactory that creates a TreeDemo.
+ *
+ * @return a DemoFactory that creates a TreeDemo
+ */
+ public static DemoFactory createDemoFactory()
+ {
+ return new DemoFactory()
+ {
+ public JComponent createDemo()
+ {
+ return new TreeDemo();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/external/Makefile.in b/libjava/classpath/external/Makefile.in
index c75751e..6b5f026 100644
--- a/libjava/classpath/external/Makefile.in
+++ b/libjava/classpath/external/Makefile.in
@@ -78,6 +78,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -117,6 +118,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -137,6 +140,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -184,6 +188,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -202,8 +207,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -215,8 +223,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -233,7 +239,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -241,18 +250,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/external/relaxngDatatype/.cvsignore b/libjava/classpath/external/relaxngDatatype/.cvsignore
deleted file mode 100644
index 282522d..0000000
--- a/libjava/classpath/external/relaxngDatatype/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/libjava/classpath/external/relaxngDatatype/Makefile.in b/libjava/classpath/external/relaxngDatatype/Makefile.in
index c7491f8..0b4bacb 100644
--- a/libjava/classpath/external/relaxngDatatype/Makefile.in
+++ b/libjava/classpath/external/relaxngDatatype/Makefile.in
@@ -69,6 +69,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -108,6 +109,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -128,6 +131,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -175,6 +179,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -193,8 +198,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -206,8 +214,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -224,7 +230,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -232,18 +241,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/external/sax/Makefile.in b/libjava/classpath/external/sax/Makefile.in
index 7f34c88..c54b78c 100644
--- a/libjava/classpath/external/sax/Makefile.in
+++ b/libjava/classpath/external/sax/Makefile.in
@@ -69,6 +69,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -108,6 +109,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -128,6 +131,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -175,6 +179,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -193,8 +198,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -206,8 +214,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -224,7 +230,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -232,18 +241,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/external/w3c_dom/COPYRIGHT.html b/libjava/classpath/external/w3c_dom/COPYRIGHT.html
deleted file mode 100644
index c7e0e49..0000000
--- a/libjava/classpath/external/w3c_dom/COPYRIGHT.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
- <title>W3C IPR SOFTWARE NOTICE</title>
-<style type="text/css">
-<!--
-html, body { background: #fff; color: #000; } /* body for Windows IE3 */
--->
-</style>
- </head>
- <body>
- <h1>
- W3C IPR SOFTWARE NOTICE
- </h1>
- <h3>
- Copyright &copy; 2002 <a href="http://www.w3.org/">World Wide Web
- Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
- Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
- National de Recherche en Informatique et en Automatique</a>, <a
- href="http://www.keio.ac.jp/">Keio University</a>). All Rights
- Reserved.
- </h3>
- <p>
- The DOM bindings are published under the W3C Software Copyright Notice
- and License. The software license requires "Notice of any changes or
- modifications to the W3C files, including the date changes were made."
- Consequently, modified versions of the DOM bindings must document that
- they do not conform to the W3C standard; in the case of the IDL
- definitions, the pragma prefix can no longer be 'w3c.org'; in the case of
- the Java language binding, the package names can no longer be in the
- 'org.w3c' package.
- </p>
- <p>
- <b>Note:</b> The original version of the W3C Software Copyright Notice
- and License could be found at <a
- href='http://www.w3.org/Consortium/Legal/copyright-software-19980720'>http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>
- </p>
- <h3>
- Copyright &copy; 1994-2002 <a href="http://www.w3.org/">World Wide Web
- Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
- Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
- National de Recherche en Informatique et en Automatique</a>, <a
- href="http://www.keio.ac.jp/">Keio University</a>). All Rights
- Reserved. http://www.w3.org/Consortium/Legal/
- </h3>
- <p>
- This W3C work (including software, documents, or other related items) is
- being provided by the copyright holders under the following license. By
- obtaining, using and/or copying this work, you (the licensee) agree that
- you have read, understood, and will comply with the following terms and
- conditions:
- </p>
- <p>
- Permission to use, copy, and modify this software and its documentation,
- with or without modification,&nbsp; for any purpose and without fee or
- royalty is hereby granted, provided that you include the following on ALL
- copies of the software and documentation or portions thereof, including
- modifications, that you make:
- </p>
- <ol>
- <li>
- The full text of this NOTICE in a location viewable to users of the
- redistributed or derivative work.
- </li>
- <li>
- Any pre-existing intellectual property disclaimers, notices, or terms
- and conditions. If none exist, a short notice of the following form
- (hypertext is preferred, text is permitted) should be used within the
- body of any redistributed or derivative code: "Copyright &copy;
- [$date-of-software] <a href="http://www.w3.org/">World Wide Web
- Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts
- Institute of Technology</a>, <a href="http://www.inria.fr/">Institut
- National de Recherche en Informatique et en Automatique</a>, <a
- href="http://www.keio.ac.jp/">Keio University</a>). All Rights
- Reserved. http://www.w3.org/Consortium/Legal/"
- </li>
- <li>
- Notice of any changes or modifications to the W3C files, including the
- date changes were made. (We recommend you provide URIs to the location
- from which the code is derived.)
- </li>
- </ol>
- <p>
- THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
- HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
- FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
- DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
- TRADEMARKS OR OTHER RIGHTS.
- </p>
- <p>
- COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
- CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
- DOCUMENTATION.
- </p>
- <p>
- The name and trademarks of copyright holders may NOT be used in
- advertising or publicity pertaining to the software without specific,
- written prior permission. Title to copyright in this software and any
- associated documentation will at all times remain with copyright
- holders.
- </p>
- </body>
-</html>
diff --git a/libjava/classpath/external/w3c_dom/Makefile.in b/libjava/classpath/external/w3c_dom/Makefile.in
index 30cebac..6c38a20 100644
--- a/libjava/classpath/external/w3c_dom/Makefile.in
+++ b/libjava/classpath/external/w3c_dom/Makefile.in
@@ -69,6 +69,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -108,6 +109,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -128,6 +131,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -175,6 +179,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -193,8 +198,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -206,8 +214,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -224,7 +230,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -232,18 +241,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java b/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java
index 4945d9c..e429912 100644
--- a/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java
+++ b/libjava/classpath/gnu/CORBA/CDR/EncapsulationStream.java
@@ -79,6 +79,7 @@ public class EncapsulationStream
boolean use_big_endian)
{
super();
+ setBigEndian(use_big_endian);
buffer = new AligningOutput();
setOutputStream(buffer);
parent = _parent;
diff --git a/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java b/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java
index e1bdb51..0252838 100644
--- a/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java
+++ b/libjava/classpath/gnu/CORBA/GIOP/MessageHeader.java
@@ -51,6 +51,7 @@ import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.portable.IDLEntity;
import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -273,20 +274,36 @@ public class MessageHeader
* Read the header from the stream.
*
* @param istream a stream to read from.
- *
* @throws MARSHAL if this is not a GIOP 1.0 header.
*/
- public void read(java.io.InputStream istream)
- throws MARSHAL
+ public void read(java.io.InputStream istream)
+ throws MARSHAL, EOFException
{
try
{
byte[] xMagic = new byte[MAGIC.length];
- istream.read(xMagic);
- if (!Arrays.equals(xMagic, MAGIC))
+ int r = istream.read(xMagic);
+ int minor;
+ if (! Arrays.equals(xMagic, MAGIC))
{
- MARSHAL m = new MARSHAL("Not a GIOP message");
- m.minor = Minor.Giop;
+ StringBuffer b = new StringBuffer();
+ if (r == - 1)
+ {
+ b.append("Immediate EOF");
+ minor = Minor.EOF;
+ }
+ else
+ {
+ minor = Minor.Giop;
+ b.append(r + " bytes: ");
+ for (int i = 0; i < xMagic.length; i++)
+ {
+ b.append(Integer.toHexString(xMagic[i] & 0xFF));
+ b.append(' ');
+ }
+ }
+ MARSHAL m = new MARSHAL("Not a GIOP message: " + b);
+ m.minor = minor;
throw m;
}
@@ -354,7 +371,7 @@ public class MessageHeader
}
catch (IOException ex)
{
- MARSHAL t = new MARSHAL();
+ MARSHAL t = new MARSHAL(ex.getMessage());
t.minor = Minor.Header;
t.initCause(ex);
throw t;
diff --git a/libjava/classpath/gnu/CORBA/IorDelegate.java b/libjava/classpath/gnu/CORBA/IorDelegate.java
index 27fb5de..8eb43aa 100644
--- a/libjava/classpath/gnu/CORBA/IorDelegate.java
+++ b/libjava/classpath/gnu/CORBA/IorDelegate.java
@@ -407,20 +407,7 @@ public class IorDelegate extends SimpleDelegate
*/
public void release(org.omg.CORBA.Object target)
{
- String key = ior.Internet.host + ":" + ior.Internet.port;
-
- Socket socket = SocketRepository.get_socket(key);
- try
- {
- if (socket != null)
- {
- socket.close();
- }
- }
- catch (IOException ex)
- {
- // do nothing, then.
- }
+ // Do nothing here.
}
/**
diff --git a/libjava/classpath/gnu/CORBA/NamingService/NameParser.java b/libjava/classpath/gnu/CORBA/NamingService/NameParser.java
index 422db1c..c750b2e 100644
--- a/libjava/classpath/gnu/CORBA/NamingService/NameParser.java
+++ b/libjava/classpath/gnu/CORBA/NamingService/NameParser.java
@@ -1,5 +1,5 @@
/* NameParser.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -425,7 +425,8 @@ public class NameParser
else
{
Delegate delegate = ((ObjectImpl) object)._get_delegate();
- ns = new _NamingContextStub(delegate);
+ ns = new _NamingContextStub();
+ ((_NamingContextStub) ns)._set_delegate(delegate);
}
}
catch (Exception ex)
diff --git a/libjava/classpath/gnu/CORBA/OrbRestricted.java b/libjava/classpath/gnu/CORBA/OrbRestricted.java
index c040180..c345849 100644
--- a/libjava/classpath/gnu/CORBA/OrbRestricted.java
+++ b/libjava/classpath/gnu/CORBA/OrbRestricted.java
@@ -41,11 +41,13 @@ package gnu.CORBA;
import gnu.CORBA.CDR.BufferedCdrOutput;
import gnu.CORBA.typecodes.AliasTypeCode;
import gnu.CORBA.typecodes.ArrayTypeCode;
+import gnu.CORBA.typecodes.PrimitiveTypeCode;
import gnu.CORBA.typecodes.RecordTypeCode;
import gnu.CORBA.typecodes.StringTypeCode;
import org.omg.CORBA.Any;
import org.omg.CORBA.BAD_PARAM;
+import org.omg.CORBA.Context;
import org.omg.CORBA.ContextList;
import org.omg.CORBA.Environment;
import org.omg.CORBA.ExceptionList;
@@ -526,4 +528,57 @@ public class OrbRestricted extends org.omg.CORBA_2_3.ORB
super.destroy();
}
+
+ /**
+ * Create a typecode, representing a tree-like structure.
+ * This structure contains a member that is a sequence of the same type,
+ * as the structure itself. You can imagine as if the folder definition
+ * contains a variable-length array of the enclosed (nested) folder
+ * definitions. In this way, it is possible to have a tree like
+ * structure that can be transferred via CORBA CDR stream.
+ *
+ * @deprecated It is easier and clearler to use a combination of
+ * create_recursive_tc and create_sequence_tc instead.
+ *
+ * @param bound the maximal expected number of the nested components
+ * on each node; 0 if not limited.
+ *
+ * @param offset the position of the field in the returned structure
+ * that contains the sequence of the structures of the same field.
+ * The members before this field are intialised using parameterless
+ * StructMember constructor.
+ *
+ * @return a typecode, defining a stucture, where a member at the
+ * <code>offset</code> position defines an array of the identical
+ * structures.
+ *
+ * @see #create_recursive_tc(String)
+ * @see #create_sequence_tc(int, TypeCode)
+ */
+ public TypeCode create_recursive_sequence_tc(int bound, int offset)
+ {
+ RecordTypeCode r = new RecordTypeCode(TCKind.tk_struct);
+ for (int i = 0; i < offset; i++)
+ r.add(new StructMember());
+
+ TypeCode recurs = new PrimitiveTypeCode(TCKind.tk_sequence);
+
+ r.add(new StructMember("", recurs, null));
+ return r;
+ }
+
+ /**
+ * Get the default context of this ORB. This is an initial root of all
+ * contexts.
+ *
+ * The default method returns a new context with the empty name and
+ * no parent context.
+ *
+ * @return the default context of this ORB.
+ */
+ public Context get_default_context()
+ {
+ return new gnuContext("", null);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/gnu/CORBA/SocketRepository.java b/libjava/classpath/gnu/CORBA/SocketRepository.java
index e48a9a5..5d4a509 100644
--- a/libjava/classpath/gnu/CORBA/SocketRepository.java
+++ b/libjava/classpath/gnu/CORBA/SocketRepository.java
@@ -116,9 +116,6 @@ public class SocketRepository
*/
public static Socket get_socket(Object key)
{
- if (true)
- return null;
-
synchronized (sockets)
{
Socket s = (Socket) sockets.get(key);
diff --git a/libjava/classpath/gnu/CORBA/gnuRequest.java b/libjava/classpath/gnu/CORBA/gnuRequest.java
index 5adf741..0b3338d 100644
--- a/libjava/classpath/gnu/CORBA/gnuRequest.java
+++ b/libjava/classpath/gnu/CORBA/gnuRequest.java
@@ -83,6 +83,7 @@ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations;
import org.omg.PortableInterceptor.ForwardRequest;
import org.omg.PortableInterceptor.InvalidSlot;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -593,7 +594,7 @@ public class gnuRequest extends Request implements Cloneable
{
final gnuRequest cloned = Clone();
cloned.oneWay = true;
-
+
new Thread()
{
public void run()
@@ -717,12 +718,11 @@ public class gnuRequest extends Request implements Cloneable
* property ({@link #setIOR(IOR)} before calling this method.
*
* @throws BAD_INV_ORDER, minor code 0, if the IOR has not been previously set
- * or if the direct argument addition is mixed with the direct argument
- * writing into the output stream.
- *
+ * or if the direct argument addition is mixed with the direct
+ * argument writing into the output stream.
* @return the server response in binary form.
*/
- public synchronized RawReply submit()
+public synchronized RawReply submit()
throws ForwardRequest
{
gnu.CORBA.GIOP.MessageHeader header = new gnu.CORBA.GIOP.MessageHeader();
@@ -788,20 +788,21 @@ public class gnuRequest extends Request implements Cloneable
if (socket == null)
{
- // The BindException may be thrown under very heavy parallel
+ // The IOException may be thrown under very heavy parallel
// load. For some time, just wait, exceptiong the socket to free.
Open: for (int i = 0; i < PAUSE_STEPS; i++)
{
try
{
if (orb instanceof OrbFunctional)
- socket = ((OrbFunctional) orb).socketFactory.createClientSocket(
- ior.Internet.host, ior.Internet.port);
+ socket = ((OrbFunctional) orb).socketFactory.
+ createClientSocket(
+ ior.Internet.host, ior.Internet.port);
else
socket = new Socket(ior.Internet.host, ior.Internet.port);
break Open;
}
- catch (BindException ex)
+ catch (IOException ex)
{
try
{
@@ -833,7 +834,7 @@ public class gnuRequest extends Request implements Cloneable
request_part.buffer.writeTo(socketOutput);
socketOutput.flush();
- if (!socket.isClosed())
+ if (!socket.isClosed() && !oneWay)
{
MessageHeader response_header = new MessageHeader();
InputStream socketInput = socket.getInputStream();
@@ -937,6 +938,10 @@ public class gnuRequest extends Request implements Cloneable
throws SystemException, ForwardRequest
{
RawReply response = submit();
+
+ // If this is a one way message, do not care about the response.
+ if (oneWay && response == EMPTY)
+ return;
if (m_rph == null)
m_rph = response.header.create_reply_header();
diff --git a/libjava/classpath/gnu/classpath/NotImplementedException.java b/libjava/classpath/gnu/classpath/NotImplementedException.java
new file mode 100644
index 0000000..5b8c7f6
--- /dev/null
+++ b/libjava/classpath/gnu/classpath/NotImplementedException.java
@@ -0,0 +1,61 @@
+/* NotImplementedException.java -- Marker for stub methods
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath;
+
+/**
+ * This class is used as a marker to indicate that a given method
+ * is merely a stub, requiring implementation. For historical
+ * reasons, GNU Classpath includes a number of stub methods. We
+ * don't wish to remove them, but we do want to make them easily
+ * discoverable. JAPI will notice methods declared as throwing
+ * this exception and mark them appropriately.
+ */
+public class NotImplementedException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 5112972057211125814L;
+
+ /**
+ * This class is not instantiable. It should only be used
+ * in a method 'throws' clause -- not actually ever thrown.
+ */
+ private NotImplementedException()
+ {
+ }
+}
diff --git a/libjava/classpath/gnu/classpath/SystemProperties.java b/libjava/classpath/gnu/classpath/SystemProperties.java
index 524f040..991279e 100644
--- a/libjava/classpath/gnu/classpath/SystemProperties.java
+++ b/libjava/classpath/gnu/classpath/SystemProperties.java
@@ -111,6 +111,13 @@ public class SystemProperties
defaultProperties.put("java.io.tmpdir",
defaultProperties.get("java.tmpdir"));
+ // FIXME: we need a better way to handle this.
+ // For instance, having a single VM class for each OS might help.
+ if (defaultProperties.get("gnu.classpath.mime.types.file") == null
+ && "Linux".equals(defaultProperties.get("os.name")))
+ defaultProperties.put("gnu.classpath.mime.types.file",
+ "/etc/mime.types");
+
VMSystemProperties.postInit(defaultProperties);
// Note that we use clone here and not new. Some programs assume
@@ -149,4 +156,17 @@ public class SystemProperties
SystemProperties.properties = properties;
}
+
+ /**
+ * Removes the supplied system property and its current value.
+ * If the specified property does not exist, nothing happens.
+ *
+ * @throws NullPointerException if the property name is null.
+ * @return the value of the removed property, or null if no
+ * such property exists.
+ */
+ public static String remove(String name)
+ {
+ return (String) properties.remove(name);
+ }
}
diff --git a/libjava/classpath/gnu/classpath/debug/Component.java b/libjava/classpath/gnu/classpath/debug/Component.java
index af030ed..0cc38d7 100644
--- a/libjava/classpath/gnu/classpath/debug/Component.java
+++ b/libjava/classpath/gnu/classpath/debug/Component.java
@@ -1,5 +1,5 @@
/* Component.java -- a component log level.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is a part of GNU Classpath.
@@ -74,7 +74,7 @@ public final class Component extends Level
* Signifies that everything should be logged. This should be used to
* enable or disable levels only; logging code should not use it.
*/
- public static final Component EVERYTHING = new Component ("*", 0, 7);
+ public static final Component EVERYTHING = new Component ("*", 0, 11);
/**
* Signifies that all SSL related messages should be logged. This should
@@ -115,6 +115,11 @@ public final class Component extends Level
* java.policy files.
*/
public static final Component POLICY = new Component ("POLICY", 7);
+
+ /**
+ * Trace ipp implementation.
+ */
+ public static final Component IPP = new Component ("IPP", 10);
private final int startIndex;
private final int endIndex;
diff --git a/libjava/classpath/gnu/classpath/jdwp/Jdwp.java b/libjava/classpath/gnu/classpath/jdwp/Jdwp.java
index f73e096..7141214 100644
--- a/libjava/classpath/gnu/classpath/jdwp/Jdwp.java
+++ b/libjava/classpath/gnu/classpath/jdwp/Jdwp.java
@@ -43,7 +43,6 @@ import gnu.classpath.jdwp.event.Event;
import gnu.classpath.jdwp.event.EventManager;
import gnu.classpath.jdwp.event.EventRequest;
import gnu.classpath.jdwp.exception.JdwpException;
-import gnu.classpath.jdwp.id.ThreadId;
import gnu.classpath.jdwp.processor.PacketProcessor;
import gnu.classpath.jdwp.transport.ITransport;
import gnu.classpath.jdwp.transport.JdwpConnection;
@@ -81,9 +80,6 @@ public class Jdwp
// (-Xrunjdwp:..suspend=<boolean>)
private static final String _PROPERTY_SUSPEND = "suspend";
- // User's main application thread
- private Thread _mainThread;
-
// Connection to debugger
private JdwpConnection _connection;
@@ -113,6 +109,16 @@ public class Jdwp
}
/**
+ * Get the thread group used by JDWP threads
+ *
+ * @return the thread group
+ */
+ public ThreadGroup getJdwpThreadGroup()
+ {
+ return _group;
+ }
+
+ /**
* Should the virtual machine suspend on startup?
*/
public static boolean suspendOnStartup ()
@@ -132,11 +138,9 @@ public class Jdwp
* Configures the back-end
*
* @param configArgs a string of configury options
- * @param mainThread the main application thread
*/
- public void configure (String configArgs, Thread mainThread)
+ public void configure (String configArgs)
{
- _mainThread = mainThread;
_processConfigury (configArgs);
}
@@ -272,17 +276,6 @@ public class Jdwp
try
{
_doInitialization ();
-
- _mainThread.start ();
-
- _mainThread.join ();
- }
- catch (InterruptedException ie)
- {
- /* Shutting down. If we're in server mode, we should
- prepare for a new connection. Otherwise, we should
- simply exit. */
- // FIXME
}
catch (Throwable t)
{
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/BreakpointEvent.java b/libjava/classpath/gnu/classpath/jdwp/event/BreakpointEvent.java
new file mode 100644
index 0000000..be429f4
--- /dev/null
+++ b/libjava/classpath/gnu/classpath/jdwp/event/BreakpointEvent.java
@@ -0,0 +1,110 @@
+/* BreakpointEvent.java -- An event specifying that the interpreter
+ has hit a breakpoint
+ Copyright (C) 2006 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.jdwp.event;
+
+import gnu.classpath.jdwp.JdwpConstants;
+import gnu.classpath.jdwp.VMIdManager;
+import gnu.classpath.jdwp.id.ThreadId;
+import gnu.classpath.jdwp.util.Location;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+/**
+ * "Notification of a breakpoint in the target VM. The breakpoint event is
+ * generated before the code at its location is executed."
+ *
+ * @author Keith Seitz (keiths@redhat.com)
+ */
+public class BreakpointEvent
+ extends Event
+{
+ // The thread in which this event occurred
+ private Thread _thread;
+
+ // Location where breakpoint occurred
+ private Location _location;
+
+ /**
+ * Constructs a new BreakpointEvent
+ *
+ * @param thread thread in which event occurred
+ * @param loc location where breakpoint occurred
+ */
+ public BreakpointEvent(Thread thread, Location loc)
+ {
+ super(JdwpConstants.EventKind.BREAKPOINT);
+ _thread = thread;
+ _location = loc;
+ }
+
+ /**
+ * Returns a specific filtering parameter for this event.
+ * Valid types are thread and location.
+ *
+ * @param type the type of parameter desired
+ * @returns the desired parameter or null
+ */
+ public Object getParameter(Class type)
+ {
+ if (type == ThreadId.class)
+ return _thread;
+ else if (type == Location.class)
+ return _location;
+
+ return null;
+ }
+
+ /**
+ * Writes the event to the given stream
+ *
+ * @param outStream the output stream to write the event to
+ */
+ protected void _writeData (DataOutputStream outStream)
+ throws IOException
+ {
+ VMIdManager idm = VMIdManager.getDefault();
+ ThreadId tid = (ThreadId) idm.getObjectId(_thread);
+
+ tid.write(outStream);
+ _location.write(outStream);
+ }
+}
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
index 82d1d71..eb0c3dd 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
@@ -56,7 +56,7 @@ import java.util.Iterator;
* 2) Filter event notifications from the VM
*
* If an event request arrives from the debugger, the back-end will
- * call {@link #reqestEvent}, which will first check for a valid event.
+ * call {@link #requestEvent}, which will first check for a valid event.
* If it is valid, <code>EventManager</code> will record the request
* internally and register the event with the virtual machine, which may
* choose to handle the request itself (as is likely the case with
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java b/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java
index 6c2acf3..34637f6 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/EventRequest.java
@@ -42,8 +42,6 @@ package gnu.classpath.jdwp.event;
import gnu.classpath.jdwp.JdwpConstants;
import gnu.classpath.jdwp.event.filters.*;
import gnu.classpath.jdwp.exception.JdwpIllegalArgumentException;
-import gnu.classpath.jdwp.id.*;
-
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java b/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java
index 67caea9..2fa2079 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/ThreadStartEvent.java
@@ -49,7 +49,7 @@ import java.io.IOException;
/**
* "Notification of a new running thread in the target VM. The new
- * thread can be the result of a call to {@link java.lang.Thread.start} or
+ * thread can be the result of a call to {@link java.lang.Thread#start} or
* the result of attaching a new thread to the VM though JNI. The
* notification is generated by the new thread some time before its
* execution starts. Because of this timing, it is possible to receive
@@ -70,9 +70,9 @@ public class ThreadStartEvent
private Thread _thread;
/**
- * Constructs a new <code>ThreadStartEvent</code>
+ * Constructs a new ThreadStartEvent object
*
- * @param tid the thread ID in which event occurred
+ * @param thread the thread ID in which event occurred
*/
public ThreadStartEvent (Thread thread) {
super (JdwpConstants.EventKind.THREAD_END);
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java b/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java
index b0d9b65..160ef6a 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/VmDeathEvent.java
@@ -53,9 +53,7 @@ public class VmDeathEvent
extends Event
{
/**
- * Constructs a <code>VmDeathEvent</code> object
- *
- * @param thread the initial thread
+ * Constructs a new VmDeathEvent object
*/
public VmDeathEvent ()
{
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java
index 4ee92bb..62a3a74 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/ClassMatchFilter.java
@@ -41,7 +41,6 @@ package gnu.classpath.jdwp.event.filters;
import gnu.classpath.jdwp.event.Event;
import gnu.classpath.jdwp.exception.InvalidStringException;
-import gnu.classpath.jdwp.exception.InvalidClassException;
import gnu.classpath.jdwp.id.ReferenceTypeId;
/**
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java
index 1fab693..645a70f 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/ConditionalFilter.java
@@ -61,7 +61,7 @@ public class ConditionalFilter
* <p><b>NOTE:</b> This filter is marked "for the future",
* i.e, there is no way to actually use this yet.
*
- * @param cond the conditional expression
+ * @param conditional the conditional expression
* @throws NotImplementedException if used
*/
public ConditionalFilter (Object conditional)
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java
index cc4919d..cf6c070 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/ExceptionOnlyFilter.java
@@ -59,11 +59,11 @@ public class ExceptionOnlyFilter
private boolean _uncaught;
/**
- * Constructs a new <code>ExceptionOnlyFilter</code>
+ * Constructs a new ExceptionOnlyFilter
*
- * @param refid
- * @param caught
- * @param uncaught
+ * @param refId ID of the exception to report
+ * @param caught Report caught exceptions
+ * @param uncaught Report uncaught exceptions
* @throws InvalidClassException if refid is invalid
*/
public ExceptionOnlyFilter (ReferenceTypeId refId, boolean caught,
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java
index 19c5b8a..20a9edf 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/FieldOnlyFilter.java
@@ -64,7 +64,7 @@ public class FieldOnlyFilter
* @param refId class for field
* @param fid field
* @throws InvalidClassException if class is invalid
- * @throws InvalidFieldExcpetion if field is invalid
+ * @throws InvalidFieldException if field is invalid
*/
public FieldOnlyFilter (ReferenceTypeId refId, /*Field*/ReferenceTypeId fid)
throws InvalidClassException, InvalidFieldException
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java
index e9102fa..7190317 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/LocationOnlyFilter.java
@@ -1,5 +1,5 @@
/* LocationOnlyFilter.java -- filter on location
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -49,6 +49,13 @@ import gnu.classpath.jdwp.util.Location;
* May be used with breakpoint, field access, field modification, step,
* and exception event kinds.
*
+ * This "filter" is not really a filter. It is simply a way to communicate
+ * location information for supported events in a generic way to ease
+ * the burden of special casing several things in
+ * EventReqeustCommandSet.executeSet.
+ *
+ * Consequently, this "filter" always matches any event.
+ *
* @author Keith Seitz (keiths@redhat.com)
*/
public class LocationOnlyFilter
@@ -85,7 +92,7 @@ public class LocationOnlyFilter
*/
public boolean matches (Event event)
{
- // FIXME
- throw new RuntimeException ("LocationOnlyFilter.matches not implemented");
+ // This filter always matches. See comments in class javadoc.
+ return true;
}
}
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java
index d029e61..340546e 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/StepFilter.java
@@ -44,9 +44,9 @@ import gnu.classpath.jdwp.exception.InvalidThreadException;
import gnu.classpath.jdwp.id.ThreadId;
/**
- * An event filter which restricts reported step events to those which
+ * "An event filter which restricts reported step events to those which
* satisfy depth and size constraints. This modifier can only be used with
- * step event kinds.
+ * step event kinds."
*
* @author Keith Seitz (keiths@redhat.com)
*/
@@ -58,9 +58,11 @@ public class StepFilter
private int _depth;
/**
- * Constructs a new <code>StepFilter</code> with the given count.
+ * Constructs a new StepFilter
*
- * @param count the number of times the event will be ignored
+ * @param tid ID of the thread in which to step
+ * @param size size of each step
+ * @param depth relative call stack limit
* @throws InvalidThreadException if thread is invalid
*/
public StepFilter (ThreadId tid, int size, int depth)
@@ -88,7 +90,7 @@ public class StepFilter
* Returns the size of each step (insn, line)
*
* @return the step size
- * @see JdwpConstants.StepSize
+ * @see gnu.classpath.jdwp.JdwpConstants.StepSize
*/
public int getSize ()
{
@@ -99,7 +101,7 @@ public class StepFilter
* Returns the relative call stack limit (into, over, out)
*
* @return how to step
- * @see JdwpConstants.StepDepth
+ * @see gnu.classpath.jdwp.JdwpConstants.StepDepth
*/
public int getDepth ()
{
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java b/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
index 83ad409..2c7a0f1 100644
--- a/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
+++ b/libjava/classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
@@ -39,7 +39,6 @@ exception statement from your version. */
package gnu.classpath.jdwp.event.filters;
-import gnu.classpath.jdwp.Jdwp;
import gnu.classpath.jdwp.event.Event;
import gnu.classpath.jdwp.exception.InvalidThreadException;
import gnu.classpath.jdwp.id.ThreadId;
diff --git a/libjava/classpath/gnu/classpath/jdwp/exception/NativeMethodException.java b/libjava/classpath/gnu/classpath/jdwp/exception/NativeMethodException.java
new file mode 100644
index 0000000..ae1a696
--- /dev/null
+++ b/libjava/classpath/gnu/classpath/jdwp/exception/NativeMethodException.java
@@ -0,0 +1,63 @@
+/* NativeMethodException.java -- a native method exception
+ Copyright (C) 2006 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.jdwp.exception;
+
+import gnu.classpath.jdwp.JdwpConstants;
+
+/**
+ * An exception thrown when the debugger attempts to invoke
+ * an unsupported command on a native method (like setting a breakpoint).
+ *
+ * @author Keith Seitz (keiths@redhat.com)
+ */
+public class NativeMethodException
+ extends JdwpException
+{
+ public NativeMethodException(long id)
+ {
+ super(JdwpConstants.Error.NATIVE_METHOD,
+ "invalid method id (" + id + ")");
+ }
+
+ public NativeMethodException(Throwable t)
+ {
+ super(JdwpConstants.Error.NATIVE_METHOD, t);
+ }
+}
diff --git a/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java b/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java
index 472650d..61cc15d 100644
--- a/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java
+++ b/libjava/classpath/gnu/classpath/jdwp/id/JdwpId.java
@@ -63,7 +63,7 @@ public abstract class JdwpId
/**
* Tag of ID's type (see {@link gnu.classpath.jdwp.JdwpConstants.Tag})
* for object-like IDs or the type tag (see {@link
- * gnu.classpath.JdwpConstants.TypeTag}) for reference type IDs.
+ * gnu.classpath.jdwp.JdwpConstants.TypeTag}) for reference type IDs.
*/
private byte _tag;
diff --git a/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java b/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java
index 53308d7..dcfe7a6 100644
--- a/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java
+++ b/libjava/classpath/gnu/classpath/jdwp/processor/MethodCommandSet.java
@@ -1,5 +1,5 @@
/* MethodCommandSet.java -- class to implement the Method Command Set
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -39,18 +39,16 @@ exception statement from your version. */
package gnu.classpath.jdwp.processor;
import gnu.classpath.jdwp.JdwpConstants;
-import gnu.classpath.jdwp.VMVirtualMachine;
+import gnu.classpath.jdwp.VMMethod;
import gnu.classpath.jdwp.exception.JdwpException;
import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
import gnu.classpath.jdwp.exception.NotImplementedException;
-import gnu.classpath.jdwp.id.ObjectId;
-import gnu.classpath.jdwp.id.ReferenceTypeId;
+import gnu.classpath.jdwp.id.ClassReferenceTypeId;
import gnu.classpath.jdwp.util.LineTable;
import gnu.classpath.jdwp.util.VariableTable;
import java.io.DataOutputStream;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.nio.ByteBuffer;
/**
@@ -101,26 +99,24 @@ public class MethodCommandSet
private void executeLineTable(ByteBuffer bb, DataOutputStream os)
throws JdwpException, IOException
{
- ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ ClassReferenceTypeId refId
+ = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
Class clazz = refId.getType();
- ObjectId oid = idMan.readObjectId(bb);
- Method method = (Method) oid.getObject();
-
- LineTable lt = VMVirtualMachine.getLineTable(clazz, method);
+ VMMethod method = VMMethod.readId(clazz, bb);
+ LineTable lt = method.getLineTable();
lt.write(os);
}
private void executeVariableTable(ByteBuffer bb, DataOutputStream os)
throws JdwpException, IOException
{
- ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ ClassReferenceTypeId refId
+ = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
Class clazz = refId.getType();
- ObjectId oid = idMan.readObjectId(bb);
- Method method = (Method) oid.getObject();
-
- VariableTable vt = VMVirtualMachine.getVarTable(clazz, method);
+ VMMethod method = VMMethod.readId(clazz, bb);
+ VariableTable vt = method.getVariableTable();
vt.write(os);
}
diff --git a/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java b/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
index 7338480..b76143f 100644
--- a/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
+++ b/libjava/classpath/gnu/classpath/jdwp/processor/ReferenceTypeCommandSet.java
@@ -1,6 +1,6 @@
/* ReferenceTypeCommandSet.java -- class to implement the ReferenceType
Command Set
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -40,11 +40,13 @@ exception statement from your version. */
package gnu.classpath.jdwp.processor;
import gnu.classpath.jdwp.JdwpConstants;
+import gnu.classpath.jdwp.VMMethod;
import gnu.classpath.jdwp.VMVirtualMachine;
import gnu.classpath.jdwp.exception.InvalidFieldException;
import gnu.classpath.jdwp.exception.JdwpException;
import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
import gnu.classpath.jdwp.exception.NotImplementedException;
+import gnu.classpath.jdwp.id.ClassReferenceTypeId;
import gnu.classpath.jdwp.id.ObjectId;
import gnu.classpath.jdwp.id.ReferenceTypeId;
import gnu.classpath.jdwp.util.JdwpString;
@@ -54,7 +56,6 @@ import gnu.classpath.jdwp.util.Value;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.nio.ByteBuffer;
/**
@@ -181,17 +182,18 @@ public class ReferenceTypeCommandSet
private void executeMethods(ByteBuffer bb, DataOutputStream os)
throws JdwpException, IOException
{
- ReferenceTypeId refId = idMan.readReferenceTypeId(bb);
+ ClassReferenceTypeId refId
+ = (ClassReferenceTypeId) idMan.readReferenceTypeId(bb);
Class clazz = refId.getType();
- Method[] methods = clazz.getMethods();
- os.writeInt(methods.length);
+ VMMethod[] methods = VMVirtualMachine.getAllClassMethods(clazz);
+ os.writeInt (methods.length);
for (int i = 0; i < methods.length; i++)
{
- Method method = methods[i];
- idMan.getObjectId(method).write(os);
+ VMMethod method = methods[i];
+ method.writeId(os);
JdwpString.writeString(os, method.getName());
- JdwpString.writeString(os, Signature.computeMethodSignature(method));
+ JdwpString.writeString(os, method.getSignature());
os.writeInt(method.getModifiers());
}
}
diff --git a/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java b/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
index 559e405..fd7fa74 100644
--- a/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
+++ b/libjava/classpath/gnu/classpath/jdwp/processor/ThreadReferenceCommandSet.java
@@ -42,7 +42,6 @@ package gnu.classpath.jdwp.processor;
import gnu.classpath.jdwp.JdwpConstants;
import gnu.classpath.jdwp.VMFrame;
import gnu.classpath.jdwp.VMVirtualMachine;
-import gnu.classpath.jdwp.exception.InvalidObjectException;
import gnu.classpath.jdwp.exception.JdwpException;
import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
import gnu.classpath.jdwp.exception.NotImplementedException;
diff --git a/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java b/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java
index 60f1bb0..cf55425 100644
--- a/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java
+++ b/libjava/classpath/gnu/classpath/jdwp/transport/ITransport.java
@@ -42,7 +42,6 @@ package gnu.classpath.jdwp.transport;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.IllegalArgumentException;
import java.util.HashMap;
/**
diff --git a/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java b/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java
index 7fa93e2..a3afe84 100644
--- a/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java
+++ b/libjava/classpath/gnu/classpath/jdwp/transport/JdwpPacket.java
@@ -55,7 +55,7 @@ import java.io.IOException;
* This class deal with everything except the command- and reply-specific
* data, which get handled in {@link
* gnu.classpath.jdwp.transport.JdwpCommandPacket} and {@link
- * gnu.classpath.jdwp.transprot.JdwpReplyPacket}.
+ * gnu.classpath.jdwp.transport.JdwpReplyPacket}.
*
* @author Keith Seitz <keiths@redhat.com>
*/
@@ -183,7 +183,6 @@ public abstract class JdwpPacket
* <code>null</code>.
*
* @param bytes packet data from the wire
- * @param index index into <code>bytes</code> to start processing
* @return number of bytes in <code>bytes</code> processed
*/
public static JdwpPacket fromBytes (byte[] bytes)
diff --git a/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java b/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java
index de32ecf..d060dec 100644
--- a/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java
+++ b/libjava/classpath/gnu/classpath/jdwp/transport/JdwpReplyPacket.java
@@ -45,7 +45,7 @@ import java.io.IOException;
/**
* A class represents a JDWP reply packet.
* This class adds an error code to the packet header information
- * in {@link gnu.classpath.transport.JdwpPacket} and adds additional
+ * in {@link gnu.classpath.jdwp.transport.JdwpPacket} and adds additional
* reply packet-specific processing.
*
* @author Keith Seitz <keiths@redhat.com>
diff --git a/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java b/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java
index dc4933a..7078b17 100644
--- a/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java
+++ b/libjava/classpath/gnu/classpath/jdwp/util/LineTable.java
@@ -1,5 +1,5 @@
/* LineTable.java -- A class representing a Line Table for a method
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -54,25 +54,24 @@ public class LineTable
private final long end;
private final int[] lineNum;
private final long[] lineCI;
- private final int lines;
/**
* Construct a line table with the given parameters.
*
* @param start lowest code index for method, -1 if native
* @param end highest code index for method, -1 if native
- * @param lines number of entries in line table
- * @param lineCI code indexes for entries in line tables (of length lines)
- * @param lineNum line numbers for in line tables (of length lines)
+ * @param lineNum line numbers for in line tables
+ * @param lineCI code indicies for entries in line tables
*/
- public LineTable(long start, long end, int lines, long lineCI[],
- int lineNum[])
+ public LineTable(long start, long end, int[] lineNum, long[] lineCI)
{
+ if (lineNum.length != lineCI.length)
+ throw new AssertionError("code index and line numbers tables "
+ + "not same length");
this.start = start;
this.end = end;
- this.lines = lines;
- this.lineCI = lineCI;
this.lineNum = lineNum;
+ this.lineCI = lineCI;
}
/**
@@ -86,8 +85,8 @@ public class LineTable
{
os.writeLong(start);
os.writeLong(end);
- os.writeInt(lines);
- for (int i = 0; i < lines; i++)
+ os.writeInt(lineNum.length);
+ for (int i = 0; i < lineNum.length; i++)
{
os.writeLong(lineCI[i]);
os.writeInt(lineNum[i]);
diff --git a/libjava/classpath/gnu/classpath/jdwp/util/Location.java b/libjava/classpath/gnu/classpath/jdwp/util/Location.java
index d7a2855..005b12c 100644
--- a/libjava/classpath/gnu/classpath/jdwp/util/Location.java
+++ b/libjava/classpath/gnu/classpath/jdwp/util/Location.java
@@ -1,5 +1,5 @@
/* Location.java -- class to read/write JDWP locations
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -39,13 +39,12 @@ exception statement from your version. */
package gnu.classpath.jdwp.util;
import gnu.classpath.jdwp.VMIdManager;
+import gnu.classpath.jdwp.VMMethod;
import gnu.classpath.jdwp.exception.JdwpException;
import gnu.classpath.jdwp.id.ClassReferenceTypeId;
-import gnu.classpath.jdwp.id.ObjectId;
import java.io.DataOutputStream;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.nio.ByteBuffer;
/**
@@ -55,62 +54,81 @@ import java.nio.ByteBuffer;
*/
public class Location
{
-
- private ClassReferenceTypeId crti;
-
- private int index;
-
- private byte tag;
-
- private ObjectId mid;
+ private VMMethod method;
+ private long index;
/**
* Create a location with the given parameters.
*
- * @param tag the type of construct the location is in
- * @param clazz the class the location is in
- * @param meth the Method
+ * @param method the method
* @param index location in the method
- * @throws JdwpException
*/
- public Location(byte tag, Class clazz, Method meth, int index)
- throws JdwpException
+ public Location(VMMethod method, long index)
{
- this.tag = tag;
- this.crti =
- (ClassReferenceTypeId) VMIdManager.getDefault().getReferenceTypeId(clazz);
- this.mid = VMIdManager.getDefault().getObjectId(meth);
+ this.method = method;
this.index = index;
}
/**
* Read a location from the given bytebuffer, consists of a TAG (byte),
- * followed by a ReferenceTypeId, a MethodId and an index (int).
+ * followed by a ReferenceTypeId, a MethodId and an index (long).
*
* @param bb this holds the location
- * @throws IOException
- * @throws JdwpException
+ * @throws IOException when an error occurs reading from the buffer
+ * @throws JdwpException for invalid class or method IDs
*/
- public Location(ByteBuffer bb) throws IOException, JdwpException
+ public Location(ByteBuffer bb)
+ throws IOException, JdwpException
{
- this.tag = bb.get();
- this.crti =
+ byte tag = bb.get();
+ ClassReferenceTypeId classId =
(ClassReferenceTypeId) VMIdManager.getDefault().readReferenceTypeId(bb);
- this.mid = VMIdManager.getDefault().readObjectId(bb);
- this.index = bb.getInt();
+ Class klass = classId.getType();
+ method = VMMethod.readId(klass, bb);
+ index = bb.getLong();
}
/**
* Write the given location to an output stream.
*
* @param os stream to write to
- * @throws IOException
+ * @throws IOException when an error occurs writing to the stream
+ */
+ public void write(DataOutputStream os)
+ throws IOException
+ {
+ VMIdManager idm = VMIdManager.getDefault();
+ ClassReferenceTypeId crti = (ClassReferenceTypeId)
+ idm.getReferenceTypeId(method.getDeclaringClass());
+
+ crti.writeTagged(os);
+ method.writeId(os);
+ os.writeLong(index);
+ }
+
+ /**
+ * Gets the method of this location
+ *
+ * @return the method
+ */
+ public VMMethod getMethod()
+ {
+ return method;
+ }
+
+ /**
+ * Gets the code index of this location
+ *
+ * @return the code index
*/
- public void write(DataOutputStream os) throws IOException
+ public long getIndex ()
+ {
+ return index;
+ }
+
+ // convenient for debugging
+ public String toString ()
{
- os.writeByte(tag);
- crti.write(os);
- mid.write(os);
- os.writeInt(index);
+ return method.toString () + "." + index;
}
}
diff --git a/libjava/classpath/gnu/classpath/jdwp/util/Value.java b/libjava/classpath/gnu/classpath/jdwp/util/Value.java
index 759b2a9..414c4a3 100644
--- a/libjava/classpath/gnu/classpath/jdwp/util/Value.java
+++ b/libjava/classpath/gnu/classpath/jdwp/util/Value.java
@@ -1,5 +1,5 @@
/* Value.java -- class to read/write JDWP tagged and untagged values
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006, Free Software Foundation
This file is part of GNU Classpath.
@@ -203,12 +203,12 @@ public class Value
}
/**
- * Reads the an object of the given Class from the untagged value contained
+ * Reads an object of the given Class from the untagged value contained
* in the ByteBuffer.
*
- * @param bb contains the Object
+ * @param bb contains the Object
* @param type corresponds to the TAG of value to be read
- * @return
+ * @return the resultant object
* @throws JdwpException
* @throws IOException
*/
@@ -232,7 +232,7 @@ public class Value
else if (type == short.class)
return new Short(bb.getShort());
else if (type == boolean.class)
- return (bb.get() == 0) ? new Boolean(false) : new Boolean(true);
+ return Boolean.valueOf(bb.get() != 0);
else if (type == void.class)
return new byte[0];
else
diff --git a/libjava/classpath/gnu/java/awt/font/FontDelegate.java b/libjava/classpath/gnu/java/awt/font/FontDelegate.java
new file mode 100644
index 0000000..a26510e
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/FontDelegate.java
@@ -0,0 +1,313 @@
+/* FontDelegate.java -- Interface implemented by all font delegates.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font;
+
+import java.awt.Font;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+import java.text.CharacterIterator;
+import java.util.Locale;
+
+
+/**
+ * The interface that all font delegate objects implement,
+ * irrespective of where they get their information from.
+ *
+ * <p><b>Thread Safety:</b> All classes that implement the
+ * <code>FontDelegate</code> interface must allow calling these
+ * methods from multiple concurrent threads. The delegates are
+ * responsible for performing the necessary synchronization.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public interface FontDelegate
+{
+ /**
+ * Returns the full name of this font face in the specified
+ * locale, for example <i>&#x201c;Univers Light&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the face name.
+ */
+ public String getFullName(Locale locale);
+
+
+ /**
+ * Returns the name of the family to which this font face belongs,
+ * for example <i>&#x201c;Univers&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the family name.
+ */
+ public String getFamilyName(Locale locale);
+
+
+ /**
+ * Returns the name of this font face inside the family, for example
+ * <i>&#x201c;Light&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the name of the face inside its family.
+ */
+ public String getSubFamilyName(Locale locale);
+
+
+ /**
+ * Returns the PostScript name of this font face, for example
+ * <i>&#x201c;Helvetica-Bold&#x201d;</i>.
+ *
+ * @return the PostScript name, or <code>null</code> if the font
+ * does not provide a PostScript name.
+ */
+ public String getPostScriptName();
+
+
+ /**
+ * Returns the number of glyphs in this font face.
+ */
+ public int getNumGlyphs();
+
+
+ /**
+ * Returns the index of the glyph which gets displayed if the font
+ * cannot map a Unicode code point to a glyph. Many fonts show this
+ * glyph as an empty box.
+ */
+ public int getMissingGlyphCode();
+
+
+ /**
+ * Creates a GlyphVector by mapping each character in a
+ * CharacterIterator to the corresponding glyph.
+ *
+ * <p>The mapping takes only the font&#x2019;s <code>cmap</code>
+ * tables into consideration. No other operations (such as glyph
+ * re-ordering, composition, or ligature substitution) are
+ * performed. This means that the resulting GlyphVector will not be
+ * correct for text in languages that have complex
+ * character-to-glyph mappings, such as Arabic, Hebrew, Hindi, or
+ * Thai.
+ *
+ * @param font the font object that the created GlyphVector
+ * will return when it gets asked for its font. This argument is
+ * needed because the public API works with java.awt.Font,
+ * not with some private delegate like OpenTypeFont.
+ *
+ * @param frc the font rendering parameters that are used for
+ * measuring glyphs. The exact placement of text slightly depends on
+ * device-specific characteristics, for instance the device
+ * resolution or anti-aliasing. For this reason, any measurements
+ * will only be accurate if the passed
+ * <code>FontRenderContext</code> correctly reflects the relevant
+ * parameters. Hence, <code>frc</code> should be obtained from the
+ * same <code>Graphics2D</code> that will be used for drawing, and
+ * any rendering hints should be set to the desired values before
+ * obtaining <code>frc</code>.
+ *
+ * @param ci a CharacterIterator for iterating over the
+ * characters to be displayed.
+ */
+ public GlyphVector createGlyphVector(Font font,
+ FontRenderContext frc,
+ CharacterIterator ci);
+
+
+ /**
+ * Determines the advance width and height for a glyph.
+ *
+ * @param glyphIndex the glyph whose advance width is to be
+ * determined.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @param advance a point whose <code>x</code> and <code>y</code>
+ * fields will hold the advance in each direction. It is well
+ * possible that both values are non-zero, for example for rotated
+ * text or for Urdu fonts.
+ */
+ public void getAdvance(int glyphIndex,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal,
+ Point2D advance);
+
+
+ /**
+ * Returns the shape of a glyph.
+ *
+ * @param glyphIndex the glyph whose advance width is to be
+ * determined.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts, this
+ * parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional
+ * metrics, <code>false</code> for rounding the result to a pixel
+ * boundary.
+ *
+ * @return the scaled and grid-fitted outline of the specified
+ * glyph, or <code>null</code> for bitmap fonts.
+ */
+ public GeneralPath getGlyphOutline(int glyphIndex,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics);
+
+
+ /**
+ * Returns a name for the specified glyph. This is useful for
+ * generating PostScript or PDF files that embed some glyphs of a
+ * font.
+ *
+ * <p><b>Names are not unique:</b> Under some rare circumstances,
+ * the same name can be returned for different glyphs. It is
+ * therefore recommended that printer drivers check whether the same
+ * name has already been returned for antoher glyph, and make the
+ * name unique by adding the string ".alt" followed by the glyph
+ * index.</p>
+ *
+ * <p>This situation would occur for an OpenType or TrueType font
+ * that has a <code>post</code> table of format 3 and provides a
+ * mapping from glyph IDs to Unicode sequences through a
+ * <code>Zapf</code> table. If the same sequence of Unicode
+ * codepoints leads to different glyphs (depending on contextual
+ * position, for example, or on typographic sophistication level),
+ * the same name would get synthesized for those glyphs.
+ *
+ * @param glyphIndex the glyph whose name the caller wants to
+ * retrieve.
+ */
+ public String getGlyphName(int glyphIndex);
+
+
+ /**
+ * Determines the distance between the base line and the highest
+ * ascender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the ascent, which usually is a positive number.
+ */
+ public float getAscent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal);
+
+
+ /**
+ * Determines the distance between the base line and the lowest
+ * descender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the descent, which usually is a nagative number.
+ */
+ public float getDescent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal);
+}
diff --git a/libjava/classpath/gnu/java/awt/font/FontFactory.java b/libjava/classpath/gnu/java/awt/font/FontFactory.java
new file mode 100644
index 0000000..6c1084e
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/FontFactory.java
@@ -0,0 +1,90 @@
+/* FontFactory.java -- Factory for font delegates.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font;
+
+import java.nio.ByteBuffer;
+
+import java.awt.FontFormatException;
+import gnu.java.awt.font.opentype.OpenTypeFontFactory;
+
+
+/**
+ * A factory for creating font delegate objects.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public final class FontFactory
+{
+ /**
+ * The constructor is private so nobody can construct an instance
+ */
+ private FontFactory()
+ {
+ }
+
+
+ /**
+ * Creates FontDelegate objects for the fonts in the specified buffer.
+ * The following font formats are currently recognized:
+ * recognized font formats are:
+ *
+ * <p><ul>
+ * <li>OpenType (*.otf);</li>
+ * <li>TrueType (*.ttf);</li>
+ * <li>TrueType Collections (*.ttc);</li>
+ * <li>Apple MacOS X data-fork font (*.dfont).</li></ul>
+ *
+ * <p>Some formats may contain more than a single font, for example
+ * *.ttc and *.dfont files. This is the reason why this function
+ * returns an array.
+ *
+ * <p>The implementation reads data from the buffer only when
+ * needed. Therefore, it greatly increases efficiency if
+ * <code>buf</code> has been obtained through mapping a file into
+ * the virtual address space.
+ *
+ * @throws FontFormatException if the font data is not in one of the
+ * known formats.
+ */
+ public static FontDelegate[] createFonts(ByteBuffer buf)
+ throws FontFormatException
+ {
+ return OpenTypeFontFactory.createFonts(buf);
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/GNUGlyphVector.java b/libjava/classpath/gnu/java/awt/font/GNUGlyphVector.java
new file mode 100644
index 0000000..9688698
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/GNUGlyphVector.java
@@ -0,0 +1,596 @@
+/* GNUGlyphVector.java -- The GNU implementation of GlyphVector.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font;
+
+import java.awt.Font;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphMetrics;
+import java.awt.font.GlyphJustificationInfo;
+import java.awt.font.GlyphVector;
+
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * The GNU implementation of the abstract GlyphVector class, which
+ * uses the services provided by a FontDelegate for its functionality.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public class GNUGlyphVector
+ extends GlyphVector
+{
+ private FontDelegate fontDelegate;
+ private Font font;
+ private FontRenderContext renderContext;
+ private int[] glyphs;
+ private float fontSize;
+ private AffineTransform transform;
+ private boolean valid;
+
+
+ /**
+ * The position of each glyph. The horizontal position of the
+ * <code>i</code>-th glyph is at <code>pos[i * 2]</code>, its
+ * vertical position at <code>pos[i * 2 + 1]</code>. The total
+ * advance width of the entire vector is stored at
+ * <code>pos[numGlyphs]</code>, the total advance height at
+ * <code>pos[numGlyphs + 1]</code>.
+ */
+ private float[] pos;
+
+
+ private AffineTransform[] transforms;
+ private int layoutFlags;
+
+
+ /**
+ * Constructs a new GNUGlyphVector.
+ *
+ * @param fontDelegate the FontDelegate that creates this vector.
+ *
+ * @param font the Font that this GlyphVector will return for {@link
+ * #getFont()}. That object is also used to determine the point
+ * size, which affects the affine transformation used by the font
+ * scaler.
+ *
+ * @param renderContext an object with parameters for font
+ * rendering, such as whether anti-aliasing is enabled.
+ *
+ * @param glyphs the glyphs in this vector.
+ */
+ public GNUGlyphVector(FontDelegate fontDelegate,
+ Font font,
+ FontRenderContext renderContext,
+ int[] glyphs)
+ {
+ this.fontDelegate = fontDelegate;
+ this.font = font;
+ this.renderContext = renderContext;
+ this.glyphs = glyphs;
+
+ fontSize = font.getSize2D();
+ transform = font.getTransform(); // returns a modifiable copy
+ transform.concatenate(renderContext.getTransform());
+ }
+
+
+
+ /**
+ * Returns the font of the glyphs in this GlyphVector.
+ */
+ public Font getFont()
+ {
+ return font;
+ }
+
+
+ /**
+ * Returns the FontRenderContext that is used to calculate the
+ * extent and position of the glyphs.
+ */
+ public FontRenderContext getFontRenderContext()
+ {
+ return renderContext;
+ }
+
+
+ /**
+ * Moves each glyph in the vector to its default position.
+ */
+ public void performDefaultLayout()
+ {
+ float x, y, advanceWidth, advanceHeight;
+ int i, p;
+ AffineTransform tx;
+ Point2D.Float advance = new Point2D.Float();
+
+ pos = new float[(glyphs.length + 1) * 2];
+ x = y = 0.0f;
+ p = 0;
+ for (i = p = 0; i < glyphs.length; i++)
+ {
+ p += 2;
+
+ if ((transforms == null) || (tx = transforms[i]) == null)
+ tx = this.transform;
+ else
+ {
+ tx = new AffineTransform(tx);
+ tx.concatenate(this.transform);
+ }
+
+ fontDelegate.getAdvance(glyphs[i], fontSize, tx,
+ renderContext.isAntiAliased(),
+ renderContext.usesFractionalMetrics(),
+ /* horizontal */ true,
+ advance);
+ pos[p] = x += advance.x;
+ pos[p + 1] = y += advance.y;
+ }
+ valid = true;
+ }
+
+
+ /**
+ * Determines the number of glyphs in this GlyphVector.
+ */
+ public int getNumGlyphs()
+ {
+ return glyphs.length;
+ }
+
+
+ /**
+ * Determines the glyph number by index in this vector.
+ * Glyph numbers are specific to each font, so two fonts
+ * will likely assign different numbers to the same glyph.
+ *
+ * @param glyphIndex the index of the glyph whose glyph number is to
+ * be retrieved.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code>
+ * is not in the range <code[0 .. getNumGlyphs() - 1]</code>.
+ */
+ public int getGlyphCode(int glyphIndex)
+ {
+ /* The exception is thrown automatically if the index is out
+ * of the valid bounds.
+ */
+ return glyphs[glyphIndex];
+ }
+
+
+ /**
+ * Returns a slice of this GlyphVector.
+ *
+ * @param firstGlyphIndex the index of the first glyph in the
+ * returned slice.
+ *
+ * @param numEntries the size of the returned slice.
+ *
+ * @param outCodes a pre-allocated array for storing the slice,
+ * or <code>null</code> to cause allocation of a new array.
+ *
+ * @return a slice of this GlyphVector. If <code>outCodes</code>
+ * is <code>null</code>, the slice will be stored into a freshly
+ * allocated array; otherwise, the result will be stored into
+ * <code>outCodes</code>.
+ */
+ public int[] getGlyphCodes(int firstGlyphIndex,
+ int numEntries,
+ int[] outCodes)
+ {
+ if (numEntries < 0)
+ throw new IllegalArgumentException();
+ if (outCodes == null)
+ outCodes = new int[numEntries];
+ System.arraycopy(glyphs, firstGlyphIndex, outCodes, 0, numEntries);
+ return outCodes;
+ }
+
+
+ public Rectangle2D getLogicalBounds()
+ {
+ float ascent, descent;
+
+ validate();
+
+ return new Rectangle2D.Float(0, 0,
+ pos[pos.length - 2],
+ getAscent() - getDescent());
+ }
+
+
+ public Rectangle2D getVisualBounds()
+ {
+ validate();
+
+ // FIXME: Not yet implemented.
+ return getLogicalBounds();
+ }
+
+
+ /**
+ * Returns the shape of this GlyphVector.
+ */
+ public Shape getOutline()
+ {
+ validate();
+ return getOutline(0.0f, 0.0f);
+ }
+
+
+ /**
+ * Returns the shape of this GlyphVector, translated to the
+ * specified position.
+ *
+ * @param x the horizontal position for rendering this vector.
+ * @param y the vertical position for rendering this vector.
+ */
+ public Shape getOutline(float x, float y)
+ {
+ validate();
+
+ GeneralPath outline = new GeneralPath();
+ int len = glyphs.length;
+ for (int i = 0; i < len; i++)
+ {
+ GeneralPath p = new GeneralPath(getGlyphOutline(i));
+ outline.append(p, false);
+ }
+ AffineTransform t = new AffineTransform();
+ t.translate(x, y);
+ outline.transform(t);
+ return outline;
+ }
+
+
+ /**
+ * Determines the shape of the specified glyph.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs()]</code>.
+ */
+ public Shape getGlyphOutline(int glyphIndex)
+ {
+ AffineTransform tx, glyphTx;
+ GeneralPath path;
+
+ validate();
+
+ if ((transforms != null)
+ && ((glyphTx = transforms[glyphIndex]) != null))
+ {
+ tx = new AffineTransform(transform);
+ tx.concatenate(glyphTx);
+ }
+ else
+ tx = transform;
+
+ path = fontDelegate.getGlyphOutline(glyphs[glyphIndex], fontSize, tx,
+ renderContext.isAntiAliased(),
+ renderContext.usesFractionalMetrics());
+
+ tx = new AffineTransform();
+ tx.translate(pos[glyphIndex * 2], pos[glyphIndex * 2 + 1]);
+ path.transform(tx);
+ return path;
+ }
+
+
+ /**
+ * Determines the position of the specified glyph, or the
+ * total advance width and height of the vector.
+ *
+ * @param glyphIndex the index of the glyph in question.
+ * If this value equals <code>getNumGlyphs()</code>, the
+ * position <i>after</i> the last glyph will be returned,
+ * which is the total advance width and height of the vector.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs()]</code>.
+ */
+ public Point2D getGlyphPosition(int glyphIndex)
+ {
+ validate();
+ return new Point2D.Float(pos[glyphIndex * 2],
+ pos[glyphIndex * 2 + 1]);
+ }
+
+
+ /**
+ * Moves the specified glyph to a new position, or changes the
+ * advance width and height of the entire glyph vector.
+ *
+ * <p>Note that the position of an individual glyph may also
+ * affected by its affine transformation.
+ *
+ * @param glyphIndex the index of the moved glyph. If
+ * <code>glyphIndex</code> equals the total number of glyphs in this
+ * vector, the advance width and height of the vector is changed.
+ *
+ * @param position the new position of the glyph.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs()]</code>.
+ */
+ public void setGlyphPosition(int glyphIndex, Point2D position)
+ {
+ validate();
+ pos[glyphIndex * 2] = (float) position.getX();
+ pos[glyphIndex * 2 + 1] = (float) position.getY();
+ }
+
+
+ /**
+ * Returns the affine transformation that is applied to the
+ * glyph at the specified index.
+ *
+ * @param glyphIndex the index of the glyph whose transformation
+ * is to be retrieved.
+ *
+ * @return an affine transformation, or <code>null</code>
+ * for the identity transformation.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs() - 1]</code>.
+ */
+ public AffineTransform getGlyphTransform(int glyphIndex)
+ {
+ if (transforms == null)
+ return null;
+ else
+ return transforms[glyphIndex];
+ }
+
+
+ /**
+ * Applies an affine transformation to the glyph at the specified
+ * index.
+ *
+ * @param glyphIndex the index of the glyph to which the
+ * transformation is applied.
+ *
+ * @param transform the affine transformation for the glyph, or
+ * <code>null</code> for an identity transformation.
+ */
+ public void setGlyphTransform(int glyphIndex,
+ AffineTransform transform)
+ {
+ if (transforms == null)
+ transforms = new AffineTransform[glyphs.length];
+ transforms[glyphIndex] = transform;
+
+ /* If the GlyphVector has only a transform for a single glyph, and
+ * the caller clears its transform, the FLAG_HAS_TRANSFORMS bit
+ * should be cleared in layoutFlags. However, this would require
+ * that we keep track of the number of transformed glyphs, or that
+ * we count them when a transform is cleared. This would
+ * complicate the code quite a bit. Note that the only drawback of
+ * wrongly setting FLAG_HAS_TRANSFORMS is that a slower code path
+ * might be taken for rendering the vector. Right now, we never
+ * really look at the flag, so it does not make any difference.
+ */
+ if (transform != null)
+ layoutFlags |= FLAG_HAS_TRANSFORMS;
+ valid = false;
+ }
+
+
+ /**
+ * Returns flags that can be used for optimizing the rendering
+ * of this GlyphVector.
+ *
+ * @return a bit mask with the applicable flags set.
+ *
+ * @since 1.4
+ *
+ * @see GlyphVector#FLAG_HAS_POSITION_ADJUSTMENTS
+ * @see GlyphVector#FLAG_HAS_TRANSFORMS
+ * @see GlyphVector#FLAG_RUN_RTL
+ * @see GlyphVector#FLAG_COMPLEX_GLYPHS
+ * @see GlyphVector#FLAG_MASK
+ */
+ public int getLayoutFlags()
+ {
+ return layoutFlags;
+ }
+
+
+ /**
+ * Returns the positions of a range of glyphs in this vector.
+ *
+ * @param firstGlyphIndex the index of the first glyph whose
+ * position is retrieved.
+ *
+ * @param numGlyphs the number of glyphs whose positions
+ * are retrieved.
+ *
+ * @param outPositions an array for storing the results
+ * (the length must be at least twice <code>numGlyphs</code>),
+ * or <code>null</code> for freshly allocating an array.
+ *
+ * @return an array with the glyph positions. The horizontal
+ * position of the <code>i</code>-th glyph is at index <code>2 *
+ * i</code>, the vertical position at index <code>2 * i + 1</code>.
+ *
+ * @throws IllegalArgumentException if <code>numGlyphs</code>
+ * is less than zero.
+ *
+ * @throws IndexOutOfBoundsException if either
+ * <code>firstGlyphIndex</code> or <code>(firstGlyphIndex +
+ * numGlyphs)</code> is not in the range <code>[0 .. getNumGlyphs() -
+ * 1]</code>.
+ */
+ public float[] getGlyphPositions(int firstGlyphIndex,
+ int numGlyphs,
+ float[] outPositions)
+ {
+ if (numGlyphs < 0)
+ throw new IllegalArgumentException();
+
+ validate();
+ if (outPositions == null)
+ outPositions = new float[numGlyphs * 2];
+
+ System.arraycopy(/*src */ pos, /* srcStart */ firstGlyphIndex * 2,
+ /* dest */ outPositions, /* destStart */ 0,
+ /* length */ numGlyphs * 2);
+ return outPositions;
+ }
+
+
+ private float getAscent()
+ {
+ return fontDelegate.getAscent(fontSize, transform,
+ renderContext.isAntiAliased(),
+ renderContext.usesFractionalMetrics(),
+ /* horizontal */ true);
+ }
+
+
+ private float getDescent()
+ {
+ return fontDelegate.getDescent(fontSize, transform,
+ renderContext.isAntiAliased(),
+ renderContext.usesFractionalMetrics(),
+ /* horizontal */ true);
+ }
+
+
+ public Shape getGlyphLogicalBounds(int glyphIndex)
+ {
+ float x, y, ascent;
+
+ validate();
+ ascent = getAscent();
+ x = pos[glyphIndex * 2];
+ y = pos[glyphIndex * 2 + 1];
+
+ return new Rectangle2D.Float(x, y - ascent,
+ pos[(glyphIndex + 1) * 2] - x,
+ ascent - getDescent());
+ }
+
+
+ public Shape getGlyphVisualBounds(int glyphIndex)
+ {
+ return getGlyphOutline(glyphIndex).getBounds2D();
+ }
+
+
+ /**
+ * Determines the metrics of the glyph at the specified index.
+ *
+ * @param glyphIndex the index of the glyph whose metrics is to be
+ * retrieved.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs() - 1]</code>.
+ */
+ public GlyphMetrics getGlyphMetrics(int glyphIndex)
+ {
+ // FIXME: Not yet implemented.
+ throw new UnsupportedOperationException();
+ }
+
+
+ /**
+ * Determines the justification information for the glyph at the
+ * specified index.
+ *
+ * @param glyphIndex the index of the glyph whose justification
+ * information is to be retrieved.
+ *
+ * @throws IndexOutOfBoundsException if <code>glyphIndex</code> is
+ * not in the range <code[0 .. getNumGlyphs() - 1]</code>.
+ */
+ public GlyphJustificationInfo getGlyphJustificationInfo(int glyphIndex)
+ {
+ // FIXME: Not yet implemented.
+ throw new UnsupportedOperationException();
+ }
+
+
+ /**
+ * Determines whether another GlyphVector is for the same font and
+ * rendering context, uses the same glyphs and positions them to the
+ * same location.
+ *
+ * @param other the GlyphVector to compare with.
+ *
+ * @return <code>true</code> if the two vectors are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(GlyphVector other)
+ {
+ GNUGlyphVector o;
+ if (!(other instanceof GNUGlyphVector))
+ return false;
+
+ o = (GNUGlyphVector) other;
+ if ((this.font != o.font)
+ || (this.fontDelegate != o.fontDelegate)
+ || (this.renderContext != o.renderContext)
+ || (this.glyphs.length != o.glyphs.length))
+ return false;
+
+ for (int i = 0; i < glyphs.length; i++)
+ if (this.glyphs[i] != o.glyphs[i])
+ return false;
+
+ validate();
+ o.validate();
+ for (int i = 0; i < pos.length; i++)
+ if (this.pos[i] != o.pos[i])
+ return false;
+
+ return true;
+ }
+
+ private void validate()
+ {
+ if (!valid)
+ performDefaultLayout();
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/CharGlyphMap.java b/libjava/classpath/gnu/java/awt/font/opentype/CharGlyphMap.java
new file mode 100644
index 0000000..6ada3b1
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/CharGlyphMap.java
@@ -0,0 +1,1027 @@
+/* CharGlyphMap.java -- Manages the 'cmap' table of TrueType fonts
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font.opentype;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.ShortBuffer;
+import java.nio.IntBuffer;
+
+
+/**
+ * A mapping from Unicode codepoints to glyphs. This mapping
+ * does not perform any re-ordering or decomposition, so it
+ * is not everything that is needed to support Unicode.
+ *
+ * <p>This class manages the <code>cmap</code> table of
+ * OpenType and TrueType fonts.
+ *
+ * @see <a href="http://partners.adobe.com/asn/tech/type/opentype/cmap.jsp">
+ * the <code>cmap</code> part of Adobe&#x2019; OpenType Specification</a>
+ *
+ * @see <a href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6cmap.html">
+ * the <code>cmap</code> section of Apple&#x2019;s TrueType Reference
+ * Manual</a>
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+abstract class CharGlyphMap
+{
+ private static final int PLATFORM_UNICODE = 0;
+ private static final int PLATFORM_MACINTOSH = 1;
+ private static final int PLATFORM_MICROSOFT = 3;
+
+
+ /**
+ * Determines the glyph index for a given Unicode codepoint. Users
+ * should be aware that the character-to-glyph mapping not not
+ * everything that is needed for full Unicode support. For example,
+ * the <code>cmap</code> table is not able to synthesize accented
+ * glyphs from the canonical decomposition sequence, even if the
+ * font would contain a glyph for the composed form.
+ *
+ * @param ucs4 the Unicode codepoint in UCS-4 encoding. Surrogates
+ * (U+D800 to U+DFFF) cannot be passed, they must be mapped to
+ * UCS-4 first.
+ *
+ * @return the glyph index, or 0 if the font does not contain
+ * a glyph for this codepoint.
+ */
+ public abstract int getGlyph(int ucs4);
+
+
+ /**
+ * Reads a CharGlyphMap from an OpenType or TrueType <code>cmap</code>
+ * table. The current implementation works as follows:
+ *
+ * <p><ol><li>If the font has a type 4 cmap for the Unicode platform
+ * (encoding 0, 1, 2, 3 or 4), or a type 4 cmap for the Microsoft
+ * platform (encodings 1 or 10), that table is used to map Unicode
+ * codepoints to glyphs. Most recent fonts, both for Macintosh and
+ * Windows, should provide such a table.</li>
+ *
+ * <li>Otherwise, if the font has any type 0 cmap for the Macintosh
+ * platform, a Unicode-to-glyph mapping is synthesized from certain
+ * type 0 cmaps. The current implementation collects mappings from
+ * Roman, Icelandic, Turkish, Croatian, Romanian, Eastern European,
+ * Cyrillic, Greek, Hebrew, Arabic and Farsi cmaps.</li>.</ol>
+ *
+ * @param buf a buffer whose position is right at the start
+ * of the entire <code>cmap</code> table, and whose limit
+ * is at its end.
+ *
+ * @return a concrete subclass of <code>CharGlyphMap</code>
+ * that performs the mapping.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/opentype/cmap.jsp"
+ * >the <code>cmap</code> part of Adobe&#x2019; OpenType Specification</a>
+ *
+ * @see <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM06/Chap6cmap.html"
+ * >the <code>cmap</code> section of Apple&#x2019;s TrueType Reference
+ * Manual</a>
+ */
+ public static CharGlyphMap forTable(ByteBuffer buf)
+ {
+ boolean hasType0 = false;
+ int start4 = -1, platform4 = 0, encoding4 = 0;
+ int start12 = -1, platform12 = 0, encoding12 = 0;
+ int version;
+ int numTables;
+ int tableStart = buf.position();
+ int limit = buf.limit();
+ int format, platform, language, encoding, length, offset;
+
+ version = buf.getChar();
+ if (version != 0)
+ return null;
+
+ numTables = buf.getChar();
+ for (int i = 0; i < numTables; i++)
+ {
+ buf.limit(limit).position(tableStart + 4 + i * 8);
+ platform = buf.getChar();
+ encoding = buf.getChar();
+ offset = tableStart + buf.getInt();
+
+ buf.position(offset);
+ format = buf.getChar();
+
+ switch (format)
+ {
+ case 0:
+ hasType0 = true;
+ break;
+
+ case 4:
+ length = buf.getChar();
+ language = buf.getChar();
+ if ((start4 == -1)
+ && Type4.isSupported(platform, language, encoding))
+ {
+ start4 = offset;
+ platform4 = platform;
+ encoding4 = encoding;
+ }
+ break;
+
+ case 12:
+ if ((start12 == -1) && Type12.isSupported(platform, encoding))
+ {
+ start12 = offset;
+ platform12 = platform;
+ encoding12 = encoding;
+ }
+ break;
+ }
+ }
+
+
+ if (start12 >= 0)
+ {
+ try
+ {
+ buf.limit(limit).position(start12);
+ return new Type12(buf, platform12, encoding12);
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ if (start4 >= 0)
+ {
+ try
+ {
+ buf.limit(limit).position(start4);
+ return Type4.readTable(buf, platform4, encoding4);
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+
+ if (hasType0)
+ {
+ try
+ {
+ buf.limit(limit).position(tableStart);
+ return new Type0(buf);
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+
+ return new Dummy();
+ }
+
+
+ /**
+ * A dummy mapping that maps anything to the undefined glyph.
+ * Used if no other cmap is understood in a font.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private static final class Dummy
+ extends CharGlyphMap
+ {
+ public int getGlyph(int ucs4)
+ {
+ return 0;
+ }
+ }
+
+
+ /**
+ * A mapping from Unicode code points to glyph IDs through CMAP Type
+ * 0 tables. These tables have serious limitations: Only the first
+ * 256 glyphs can be addressed, and the source of the mapping is not
+ * Unicode, but an encoding used on the Macintosh.
+ *
+ * <p>However, some fonts have only a Type 0 cmap. In this case, we
+ * process all the Type 0 tables we understand, and establish
+ * a reversed glyph-to-Unicode mapping. When a glyph is requested
+ * for a given Unicode character, we perform a linear search on the
+ * reversed table to find the glyph which maps to the requested
+ * character. While not blazingly fast, this gives a reasonable
+ * fallback for old fonts.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private static final class Type0
+ extends CharGlyphMap
+ {
+ /**
+ * An array whose <code>i</code>-th element indicates the
+ * Unicode code point of glyph <code>i</code> in the font.
+ */
+ private char[] glyphToUCS2 = new char[256];
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Arabic encoding.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ARABIC.TXT"
+ * >the Unicode mapping table for the MacOS Arabic encoding</a>
+ */
+ private static final String UPPER_ARABIC
+ = "\u007e\u0000\u00c4\u00a0\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u06ba\u00ab\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u2026\u00ee\u00ef\u00f1\u00f3\u00bb\u00f4\u00f6\u00f7"
+ + "\u00fa\u00f9\u00fb\u00fc\u0020\u0021\"\u0023\u0024\u066a"
+ + "\u0026\u0027\u0028\u0029\u002a\u002b\u060c\u002d\u002e\u002f"
+ + "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"
+ + "\u003a\u061b\u003c\u003d\u003e\u061f\u274a\u0621\u0622\u0623"
+ + "\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d"
+ + "\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637"
+ + "\u0638\u0639\u063a\u005b\\\u005d\u005e\u005f\u0640\u0641"
+ + "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b"
+ + "\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u067e\u0679\u0686"
+ + "\u06d5\u06a4\u06af\u0688\u0691\u007b\u007c\u007d\u0698\u06d2";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS East European Roman encoding.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/CENTEURO.TXT"
+ * >the Unicode mapping table for the MacOS Central European
+ * encoding</a>
+ */
+ private static final String UPPER_EAST_EUROPEAN_ROMAN
+ = "\u007e\u0000\u00c4\u0100\u0101\u00c9\u0104\u00d6\u00dc\u00e1"
+ + "\u0105\u010c\u00e4\u010d\u0106\u0107\u00e9\u0179\u017a\u010e"
+ + "\u00ed\u010f\u0112\u0113\u0116\u00f3\u0117\u00f4\u00f6\u00f5"
+ + "\u00fa\u011a\u011b\u00fc\u2020\u00b0\u0118\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u00a9\u2122\u0119\u00a8\u2260\u0123\u012e"
+ + "\u012f\u012a\u2264\u2265\u012b\u0136\u2202\u2211\u0142\u013b"
+ + "\u013c\u013d\u013e\u0139\u013a\u0145\u0146\u0143\u00ac\u221a"
+ + "\u0144\u0147\u2206\u00ab\u00bb\u2026\u00a0\u0148\u0150\u00d5"
+ + "\u0151\u014c\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\u014d\u0154\u0155\u0158\u2039\u203a\u0159\u0156\u0157\u0160"
+ + "\u201a\u201e\u0161\u015a\u015b\u00c1\u0164\u0165\u00cd\u017d"
+ + "\u017e\u016a\u00d3\u00d4\u016b\u016e\u00da\u016f\u0170\u0171"
+ + "\u0172\u0173\u00dd\u00fd\u0137\u017b\u0141\u017c\u0122\u02c7";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Roman encoding for the Croatian language.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/CROATIAN.TXT"
+ * >the Unicode mapping table for the MacOS Croatian encoding</a>
+ */
+ private static final String UPPER_CROATIAN
+ = "\u007e\u0000\u00c4\u00c5\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u2020\u00b0\u00a2\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u0160\u2122\u00b4\u00a8\u2260\u017d\u00d8"
+ + "\u221e\u00b1\u2264\u2265\u2206\u00b5\u2202\u2211\u220f\u0161"
+ + "\u222b\u00aa\u00ba\u03a9\u017e\u00f8\u00bf\u00a1\u00ac\u221a"
+ + "\u0192\u2248\u0106\u00ab\u010c\u2026\u00a0\u00c0\u00c3\u00d5"
+ + "\u0152\u0153\u0110\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\uf8ff\u00a9\u2044\u20ac\u2039\u203a\u00c6\u00bb\u2013\u00b7"
+ + "\u201a\u201e\u2030\u00c2\u0107\u00c1\u010d\u00c8\u00cd\u00ce"
+ + "\u00cf\u00cc\u00d3\u00d4\u0111\u00d2\u00da\u00db\u00d9\u0131"
+ + "\u02c6\u02dc\u00af\u03c0\u00cb\u02da\u00b8\u00ca\u00e6\u02c7";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Cyrillic encoding.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT"
+ * >the Unicode mapping table for the MacOS Cyrillic encoding</a>
+ */
+ private static final String UPPER_CYRILLIC
+ = "\u007e\u0000\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417"
+ + "\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421"
+ + "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b"
+ + "\u042c\u042d\u042e\u042f\u2020\u00b0\u0490\u00a3\u00a7\u2022"
+ + "\u00b6\u0406\u00ae\u00a9\u2122\u0402\u0452\u2260\u0403\u0453"
+ + "\u221e\u00b1\u2264\u2265\u0456\u00b5\u0491\u0408\u0404\u0454"
+ + "\u0407\u0457\u0409\u0459\u040a\u045a\u0458\u0405\u00ac\u221a"
+ + "\u0192\u2248\u2206\u00ab\u00bb\u2026\u00a0\u040b\u045b\u040c"
+ + "\u045c\u0455\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u201e"
+ + "\u040e\u045e\u040f\u045f\u2116\u0401\u0451\u044f\u0430\u0431"
+ + "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b"
+ + "\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445"
+ + "\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u20ac";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Arabic encoding with the Farsi language.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/FARSI.TXT"
+ * >the Unicode mapping table for the MacOS Farsi encoding</a>
+ */
+ private static final String UPPER_FARSI
+ = "\u007e\u0000\u00c4\u00a0\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u06ba\u00ab\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u2026\u00ee\u00ef\u00f1\u00f3\u00bb\u00f4\u00f6\u00f7"
+ + "\u00fa\u00f9\u00fb\u00fc\u0020\u0021\"\u0023\u0024\u066a"
+ + "\u0026\u0027\u0028\u0029\u002a\u002b\u060c\u002d\u002e\u002f"
+ + "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9"
+ + "\u003a\u061b\u003c\u003d\u003e\u061f\u274a\u0621\u0622\u0623"
+ + "\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d"
+ + "\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637"
+ + "\u0638\u0639\u063a\u005b\\\u005d\u005e\u005f\u0640\u0641"
+ + "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b"
+ + "\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u067e\u0679\u0686"
+ + "\u06d5\u06a4\u06af\u0688\u0691\u007b\u007c\u007d\u0698\u06d2";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Greek encoding.
+ *
+ * @see <a
+ * href="http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/GREEK.TXT"
+ * >the Unicode mapping table for the MacOS Greek encoding</a>
+ */
+ private static final String UPPER_GREEK
+ = "\u007e\u0000\u00c4\u00b9\u00b2\u00c9\u00b3\u00d6\u00dc\u0385"
+ + "\u00e0\u00e2\u00e4\u0384\u00a8\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00a3\u2122\u00ee\u00ef\u2022\u00bd\u2030\u00f4\u00f6\u00a6"
+ + "\u20ac\u00f9\u00fb\u00fc\u2020\u0393\u0394\u0398\u039b\u039e"
+ + "\u03a0\u00df\u00ae\u00a9\u03a3\u03aa\u00a7\u2260\u00b0\u00b7"
+ + "\u0391\u00b1\u2264\u2265\u00a5\u0392\u0395\u0396\u0397\u0399"
+ + "\u039a\u039c\u03a6\u03ab\u03a8\u03a9\u03ac\u039d\u00ac\u039f"
+ + "\u03a1\u2248\u03a4\u00ab\u00bb\u2026\u00a0\u03a5\u03a7\u0386"
+ + "\u0388\u0153\u2013\u2015\u201c\u201d\u2018\u2019\u00f7\u0389"
+ + "\u038a\u038c\u038e\u03ad\u03ae\u03af\u03cc\u038f\u03cd\u03b1"
+ + "\u03b2\u03c8\u03b4\u03b5\u03c6\u03b3\u03b7\u03b9\u03be\u03ba"
+ + "\u03bb\u03bc\u03bd\u03bf\u03c0\u03ce\u03c1\u03c3\u03c4\u03b8"
+ + "\u03c9\u03c2\u03c7\u03c5\u03b6\u03ca\u03cb\u0390\u03b0\u00ad";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Hebrew encoding.
+ *
+ * <p>The codepoint 0x81 (HEBREW LIGATURE YIDDISH YOD YOD PATAH)
+ * has no composed Unicode equivalent, but is expressed as the
+ * sequence U+05F2 U+05B7 in Unicode. A similar situation exists
+ * with the codepoint 0xC0 (HEBREW LIGATURE LAMED HOLAM), which
+ * MacOS converts to U+F86A U+05DC U+05B9. To correctly deal
+ * with these sequences, we probably should synthesize a ligature
+ * table if a Hebrew font only provides a Type 0 CMAP.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/HEBREW.TXT"
+ * >the Unicode mapping table for the MacOS Hebrew encoding</a>
+ */
+ private static final String UPPER_HEBREW
+ = "\u007e\u0000\u00c4\u0000\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u0020\u0021\"\u0023\u0024\u0025"
+ + "\u20aa\u0027\u0029\u0028\u002a\u002b\u002c\u002d\u002e\u002f"
+ + "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"
+ + "\u003a\u003b\u003c\u003d\u003e\u003f\u0000\u201e\uf89b\uf89c"
+ + "\uf89d\uf89e\u05bc\ufb4b\ufb35\u2026\u00a0\u05b8\u05b7\u05b5"
+ + "\u05b6\u05b4\u2013\u2014\u201c\u201d\u2018\u2019\ufb2a\ufb2b"
+ + "\u05bf\u05b0\u05b2\u05b1\u05bb\u05b9\u0000\u05b3\u05d0\u05d1"
+ + "\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db"
+ + "\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5"
+ + "\u05e6\u05e7\u05e8\u05e9\u05ea\u007d\u005d\u007b\u005b\u007c";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Roman encoding with the Icelandic language.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ICELAND.TXT"
+ * >the Unicode mapping table for the MacOS Icelandic encoding</a>
+ */
+ private static final String UPPER_ICELANDIC
+ = "\u007e\u0000\u00c4\u00c5\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u00dd\u00b0\u00a2\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u00a9\u2122\u00b4\u00a8\u2260\u00c6\u00d8"
+ + "\u221e\u00b1\u2264\u2265\u00a5\u00b5\u2202\u2211\u220f\u03c0"
+ + "\u222b\u00aa\u00ba\u03a9\u00e6\u00f8\u00bf\u00a1\u00ac\u221a"
+ + "\u0192\u2248\u2206\u00ab\u00bb\u2026\u00a0\u00c0\u00c3\u00d5"
+ + "\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\u00ff\u0178\u2044\u20ac\u00d0\u00f0\u00de\u00fe\u00fd\u00b7"
+ + "\u201a\u201e\u2030\u00c2\u00ca\u00c1\u00cb\u00c8\u00cd\u00ce"
+ + "\u00cf\u00cc\u00d3\u00d4\uf8ff\u00d2\u00da\u00db\u00d9\u0131"
+ + "\u02c6\u02dc\u00af\u02d8\u02d9\u02da\u00b8\u02dd\u02db\u02c7";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Roman encoding for most languages. Exceptions include
+ * Croatian, Icelandic, Romanian, and Turkish.
+ *
+ * @see <a
+ * href="http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT"
+ * >the Unicode mapping table for the MacOS Roman encoding</a>
+ */
+ private static final String UPPER_ROMAN
+ = "\u007e\u0000\u00c4\u00c5\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u2020\u00b0\u00a2\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u00a9\u2122\u00b4\u00a8\u2260\u00c6\u00d8"
+ + "\u221e\u00b1\u2264\u2265\u00a5\u00b5\u2202\u2211\u220f\u03c0"
+ + "\u222b\u00aa\u00ba\u03a9\u00e6\u00f8\u00bf\u00a1\u00ac\u221a"
+ + "\u0192\u2248\u2206\u00ab\u00bb\u2026\u00a0\u00c0\u00c3\u00d5"
+ + "\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\u00ff\u0178\u2044\u20ac\u2039\u203a\ufb01\ufb02\u2021\u00b7"
+ + "\u201a\u201e\u2030\u00c2\u00ca\u00c1\u00cb\u00c8\u00cd\u00ce"
+ + "\u00cf\u00cc\u00d3\u00d4\uf8ff\u00d2\u00da\u00db\u00d9\u0131"
+ + "\u02c6\u02dc\u00af\u02d8\u02d9\u02da\u00b8\u02dd\u02db\u02c7";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Roman encoding with the Romanian language.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT"
+ * >the Unicode mapping table for the MacOS Romanian encoding</a>
+ */
+ private static final String UPPER_ROMANIAN
+ = "\u007e\u0000\u00c4\u00c5\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u2020\u00b0\u00a2\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u00a9\u2122\u00b4\u00a8\u2260\u0102\u0218"
+ + "\u221e\u00b1\u2264\u2265\u00a5\u00b5\u2202\u2211\u220f\u03c0"
+ + "\u222b\u00aa\u00ba\u03a9\u0103\u0219\u00bf\u00a1\u00ac\u221a"
+ + "\u0192\u2248\u2206\u00ab\u00bb\u2026\u00a0\u00c0\u00c3\u00d5"
+ + "\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\u00ff\u0178\u2044\u20ac\u2039\u203a\u021a\u021b\u2021\u00b7"
+ + "\u201a\u201e\u2030\u00c2\u00ca\u00c1\u00cb\u00c8\u00cd\u00ce"
+ + "\u00cf\u00cc\u00d3\u00d4\uf8ff\u00d2\u00da\u00db\u00d9\u0131"
+ + "\u02c6\u02dc\u00af\u02d8\u02d9\u02da\u00b8\u02dd\u02db\u02c7";
+
+
+ /**
+ * A String whose <code>charAt(i)</code> is the Unicode character
+ * that corresponds to the codepoint <code>i + 127</code> in the
+ * MacOS Roman encoding with the Turkish language.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/TURKISH.TXT"
+ * >the Unicode mapping table for the MacOS Turkish encoding</a>
+ */
+ private static final String UPPER_TURKISH
+ = "\u007e\u0000\u00c4\u00c5\u00c7\u00c9\u00d1\u00d6\u00dc\u00e1"
+ + "\u00e0\u00e2\u00e4\u00e3\u00e5\u00e7\u00e9\u00e8\u00ea\u00eb"
+ + "\u00ed\u00ec\u00ee\u00ef\u00f1\u00f3\u00f2\u00f4\u00f6\u00f5"
+ + "\u00fa\u00f9\u00fb\u00fc\u2020\u00b0\u00a2\u00a3\u00a7\u2022"
+ + "\u00b6\u00df\u00ae\u00a9\u2122\u00b4\u00a8\u2260\u00c6\u00d8"
+ + "\u221e\u00b1\u2264\u2265\u00a5\u00b5\u2202\u2211\u220f\u03c0"
+ + "\u222b\u00aa\u00ba\u03a9\u00e6\u00f8\u00bf\u00a1\u00ac\u221a"
+ + "\u0192\u2248\u2206\u00ab\u00bb\u2026\u00a0\u00c0\u00c3\u00d5"
+ + "\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\u00f7\u25ca"
+ + "\u00ff\u0178\u011e\u011f\u0130\u0131\u015e\u015f\u2021\u00b7"
+ + "\u201a\u201e\u2030\u00c2\u00ca\u00c1\u00cb\u00c8\u00cd\u00ce"
+ + "\u00cf\u00cc\u00d3\u00d4\uf8ff\u00d2\u00da\u00db\u00d9\uf8a0"
+ + "\u02c6\u02dc\u00af\u02d8\u02d9\u02da\u00b8\u02dd\u02db\u02c7";
+
+
+ /**
+ * Constructs a CharGlyphMap.Type0 from all type 0 cmaps provided
+ * by the font. The implementation is able to fuse multiple type
+ * 0 cmaps, such as the MacRoman, Turkish, Icelandic and Croatian
+ * encoding, into a single map from Unicode characters to glyph
+ * indices.
+ *
+ * @param buf a ByteBuffer whose position is right at the
+ * beginning of the entire cmap table of the font (<i>not</i>
+ * at some subtable).
+ */
+ public Type0(ByteBuffer buf)
+ {
+ int numTables;
+ int tableStart = buf.position();
+ int limit = buf.limit();
+
+ /* The CMAP version must be 0. */
+ if (buf.getChar() != 0)
+ throw new IllegalStateException();
+
+ numTables = buf.getChar();
+ for (int i = 0; i < numTables; i++)
+ {
+ buf.limit(limit).position(tableStart + 4 + i * 8);
+ int platform = buf.getChar();
+ int encoding = buf.getChar();
+ int offset = tableStart + buf.getInt();
+
+ buf.position(offset);
+ int format = buf.getChar();
+ int length = buf.getChar();
+ buf.limit(offset + length);
+ int language = buf.getChar();
+
+ if (format == 0)
+ readSingleTable(buf, platform, language, encoding);
+ }
+ }
+
+
+ /**
+ * Processes a CMAP Type 0 table whose platform, encoding and
+ * language are already known.
+ *
+ * @param buf the buffer to read the table from, positioned
+ * right after the language tag.
+ */
+ private void readSingleTable(ByteBuffer buf,
+ int platform, int language,
+ int encoding)
+ {
+ String upper = getUpper129(platform, encoding, language);
+ if (upper == null)
+ return;
+
+ /* Skip the MacOS codepoints [0 .. 31] because they do not
+ * correspond to any Unicode codepoint.
+ */
+ buf.position(buf.position() + 32);
+
+ /* Irrespective of script and language, the MacOS codepoints
+ * [32 .. 126] correspond to the same Unicode codepoint.
+ */
+ for (int i = 32; i < 126; i++)
+ glyphToUCS2[buf.get() & 0xff] = (char) i;
+
+ for (int i = 127; i < 256; i++)
+ glyphToUCS2[buf.get() & 0xff] = upper.charAt(i - 127);
+
+ /* Glyph 0 is always the undefined character, which has
+ * no codepoint in Unicode.
+ */
+ glyphToUCS2[0] = 0;
+ }
+
+
+ /**
+ * Determines the glyph index for a given Unicode codepoint.
+ *
+ * @param ucs4 the Unicode codepoint in UCS-4 encoding.
+ *
+ * @return the glyph index, or 0 if the font does not contain
+ * a glyph for this codepoint.
+ */
+ public int getGlyph(int ucs4)
+ {
+ /* This linear search is not exactly super fast. However,
+ * only really ancient fonts have only a type 0 cmap,
+ * so it should not hurt in very many cases. If it shows
+ * to be a performance problem, one could do a binary search
+ * on a 256-entry table sorted by Unicode codepoint. The
+ * matching index of that table could then be used to look
+ * up the glyph ID at that position.
+ */
+ for (int i = 0; i < 256; i++)
+ if (glyphToUCS2[i] == ucs4)
+ return i;
+ return 0;
+ }
+
+
+ /**
+ * Returns a String whose <code>charAt(i)</code> is the Unicode
+ * character that corresponds to the codepoint <code>i +
+ * 127</code> in the encoding specified by the platform, script
+ * and language tag of a Type 0 CMAP.
+ *
+ * @param language the language tag in the cmap subtable. For the
+ * Macintosh platform, this is 0 to indicate language-neutral
+ * encoding, or the MacOS language code <i>plus one.</i> The
+ * Apple documentation does not mention that one needs to be
+ * added, but the Adobe OpenType specification does.
+ *
+ * @return a String for mapping the top 129 characters to
+ * UCS-2. If <code>platform</code> is not <code>1</code>
+ * (indicating Macintosh), or if the combination of
+ * <code>script</code> and <code>language</code> is not
+ * recognized, <code>null</code> will be returned.
+ */
+ private static String getUpper129(int platform, int script, int language)
+ {
+ if (platform != PLATFORM_MACINTOSH)
+ return null;
+
+ switch (script)
+ {
+ case 0: /* smRoman */
+ if (language == /* langIcelandic+1 */ 16)
+ return UPPER_ICELANDIC;
+ else if (language == /* langTurkish+1 */ 18)
+ return UPPER_TURKISH;
+ else if (language == /* langCroatian+1 */ 19)
+ return UPPER_CROATIAN;
+ else if (language == /* langRomanian+1 */ 38)
+ return UPPER_ROMANIAN;
+ else if (language == /* language-neutral */ 0)
+ return UPPER_ROMAN;
+ else
+ return null;
+
+ case 4: /* smArabic */
+ if (language == /* langFarsi+1 */ 32)
+ return UPPER_FARSI;
+ else
+ return UPPER_ARABIC;
+
+ case 5: /* smHebrew */
+ return UPPER_HEBREW;
+
+ case 6: /* smGreek */
+ return UPPER_GREEK;
+
+ case 7: /* smCyrillic */
+ return UPPER_CYRILLIC;
+
+ case 29: /* smSlavic == smEastEurRoman */
+ return UPPER_EAST_EUROPEAN_ROMAN;
+ }
+
+ return null;
+ }
+ }
+
+
+ /**
+ * A mapping from Unicode code points to glyph IDs through CMAP Type
+ * 4 tables. These tables are able to map two-byte encoded text
+ * to glyph IDs, such as Unicode Basic Multilingual Plane which
+ * contains U+0000 .. U+FFFE without surrogates.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private static final class Type4
+ extends CharGlyphMap
+ {
+ /**
+ * Determines whether this implementation supports a combination
+ * of platform, language and encoding is supported for a type 4
+ * <code>cmap</code> table.
+ *
+ * <p>Currently, we support the following combinations:
+ *
+ * <ul><li>the Unicode platform in encodings 0, 1, 2, 3 and
+ * 4;</li>
+ *
+ * <li>the Microsoft platform in encodings 1 (Basic Multilingual
+ * Plane) and 10 (full Unicode).</li></ul>
+ *
+ * <p>Most recent Macintosh fonts provide a type 4
+ * <code>cmap</code> for Unicode. Microsoft recommends providing a
+ * type 4 <code>cmap</code> for encoding 1 of the Microsoft
+ * platform. The implementation of GNU Classpath supports both
+ * variants.
+ *
+ * <p>Not supported are ShiftJIS, Big5, Wansung, Johab, and other
+ * non-Unicode encodings. Text can easily be converted to Unicode
+ * using the java.nio.charset package.
+ */
+ static boolean isSupported(int platform, int language, int encoding)
+ {
+ switch (platform)
+ {
+ case PLATFORM_UNICODE:
+ return (encoding >= 0) && (encoding <= 4);
+
+ case PLATFORM_MICROSOFT:
+ return (encoding == /* Basic Multilingual Plane */ 1)
+ || (encoding == /* Full Unicode */ 10);
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Processes a CMAP Type 4 table whose platform, encoding and
+ * language are already known. We understand the Unicode platform
+ * with encodings 0, 1, 2, 3 and 4, and the Microsoft platform
+ * with encodings 1 (Unicode BMP) and 10 (UCS-4).
+ *
+ * @param buf the buffer to read the table from, positioned at
+ * its beginning.
+ *
+ * @return a Type4 table, or <code>null</code> if the combination
+ * of platform and encoding is not understood.
+ */
+ static Type4 readTable(ByteBuffer buf,
+ int platform, int encoding)
+ {
+ int tableStart = buf.position();
+ char format = buf.getChar();
+ int length = buf.getChar();
+ int language = buf.getChar();
+
+ if ((format != 4) || !isSupported(platform, language, encoding))
+ throw new IllegalArgumentException();
+
+ buf.limit(tableStart + length);
+
+ int segCountX2 = buf.getChar();
+ int segCount = segCountX2 / 2;
+ int searchRange = buf.getChar();
+ int entrySelector = buf.getChar();
+ int rangeShift = buf.getChar();
+
+ CharBuffer endCode, startCode, idRangeOffset_glyphID;
+ ShortBuffer idDelta;
+
+ int pos = buf.position();
+ endCode = buf.asCharBuffer();
+ pos += segCountX2 + /* reservedPad */ 2;
+
+ buf.position(pos);
+ startCode = buf.asCharBuffer();
+ pos += segCountX2;
+
+ buf.position(pos);
+ idDelta = buf.asShortBuffer();
+ pos += segCountX2;
+
+ buf.position(pos);
+ idRangeOffset_glyphID = buf.asCharBuffer();
+
+ endCode.limit(segCount);
+ startCode.limit(segCount);
+ idDelta.limit(segCount);
+ idRangeOffset_glyphID.limit((buf.limit() - pos) / 2);
+
+ return new Type4(segCount,
+ endCode, startCode, idDelta,
+ idRangeOffset_glyphID);
+ }
+
+
+ private CharBuffer lastChar;
+ private CharBuffer firstChar;
+ private ShortBuffer idDelta;
+ private CharBuffer rangeID;
+ private int numSegments;
+
+ private Type4(int numSegments,
+ CharBuffer lastChar, CharBuffer firstChar,
+ ShortBuffer idDelta, CharBuffer rangeID)
+ {
+ this.numSegments = numSegments;
+ this.lastChar = lastChar;
+ this.firstChar = firstChar;
+ this.idDelta = idDelta;
+ this.rangeID = rangeID;
+ }
+
+
+ /**
+ * Determines the glyph index for a given Unicode codepoint.
+ *
+ * @param ucs4 the Unicode codepoint in UCS-4 encoding.
+ *
+ * @return the glyph index, or 0 if the font does not contain
+ * a glyph for this codepoint.
+ */
+ public int getGlyph(int ucs4)
+ {
+ char c, segStart;
+ int segment, idRangeOffset;
+
+ if (ucs4 > 0xffff)
+ return 0;
+
+ c = (char) ucs4;
+ segment = find(c);
+ segStart = firstChar.get(segment);
+ if ((c < segStart) || (c > lastChar.get(segment)))
+ return 0;
+
+ /*
+ * System.out.println("seg " + segment
+ * + ", range=" + (int) rangeID[segment]
+ * + ", delta=" + delta[segment]);
+ */
+
+ idRangeOffset = rangeID.get(segment);
+ if (idRangeOffset == 0)
+ return (int) (char) (((int) c) + idDelta.get(segment));
+ int result = rangeID.get((idRangeOffset >> 1)
+ + (c - segStart) + segment);
+ if (result == 0)
+ return 0;
+ return (int) (char) (result + idDelta.get(segment));
+ }
+
+
+ private int find(char c)
+ {
+ int min, max, mid;
+
+ min = 0;
+ max = numSegments - 1;
+ mid = max >> 1;
+
+ while (min < max)
+ {
+ // System.out.println("(" + min + "," + max + ") " + mid);
+ char val = lastChar.get(mid);
+ if (val == c)
+ break;
+ else if (val < c)
+ min = mid + 1;
+ else if (val > c)
+ max = mid;
+ mid = (min + max) >> 1;
+ }
+
+ return mid;
+ }
+ }
+
+
+ /**
+ * A mapping from Unicode code points to glyph IDs through CMAP Type
+ * 12 tables. These tables are able to map four-byte encoded text
+ * to glyph IDs, such as Unicode UCS-4.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private static final class Type12
+ extends CharGlyphMap
+ {
+ int numGroups;
+ IntBuffer data;
+
+
+ /**
+ * Determines whether this implementation supports a combination
+ * of platform and encoding for a type 12 <code>cmap</code> table.
+ *
+ * <p>Currently, we support the following combinations:
+ *
+ * <ul><li>the Unicode platform in encodings 0, 1, 2, 3 and
+ * 4;</li>
+ *
+ * <li>the Microsoft platform in encodings 1 (Basic Multilingual
+ * Plane) and 10 (full Unicode).</li></ul>
+ */
+ static boolean isSupported(int platform, int encoding)
+ {
+ switch (platform)
+ {
+ case PLATFORM_UNICODE:
+ return (encoding >= 0) && (encoding <= 4);
+
+ case PLATFORM_MICROSOFT:
+ return (encoding == /* Basic Multilingual Plane */ 1)
+ || (encoding == /* Full Unicode */ 10);
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Constructs a <code>cmap</code> type 12 table whose platform and
+ * encoding are already known. We understand the Unicode platform
+ * with encodings 0, 1, 2, 3 and 4, and the Microsoft platform
+ * with encodings 1 (Unicode BMP) and 10 (UCS-4).
+ *
+ * @param buf the buffer to read the table from, positioned at
+ * its beginning.
+ */
+ Type12(ByteBuffer buf, int platform, int encoding)
+ {
+ int tableStart = buf.position();
+ int format = buf.getChar();
+ if ((format != 12) || !isSupported(platform, encoding))
+ throw new IllegalStateException();
+
+ buf.getChar(); // skip reserved field
+ buf.limit(tableStart + buf.getInt());
+ int language = buf.getInt();
+ numGroups = buf.getInt();
+ data = buf.asIntBuffer();
+ }
+
+
+ /**
+ * Determines the glyph index for a given Unicode codepoint. Users
+ * should be aware that the character-to-glyph mapping not not
+ * everything that is needed for full Unicode support. For example,
+ * the <code>cmap</code> table is not able to synthesize accented
+ * glyphs from the canonical decomposition sequence, even if the
+ * font would contain a glyph for the composed form.
+ *
+ * @param ucs4 the Unicode codepoint in UCS-4 encoding. Surrogates
+ * (U+D800 to U+DFFF) cannot be passed, they must be mapped to
+ * UCS-4 first.
+ *
+ * @return the glyph index, or 0 if the font does not contain
+ * a glyph for this codepoint.
+ */
+ public int getGlyph(int ucs4)
+ {
+ int min, max, mid, startCharCode, endCharCode;
+
+ min = 0;
+ max = numGroups - 1;
+ mid = max >> 1;
+ do
+ {
+ startCharCode = data.get(3 * mid);
+ endCharCode = data.get(3 * mid + 1);
+
+
+ /*
+ System.out.println("group " + mid + " (U+"
+ + Integer.toHexString(startCharCode)
+ + " .. U+" + Integer.toHexString(endCharCode)
+ + "): glyph " + (int) data.get(mid*3+2));
+ */
+
+ if ((startCharCode <= ucs4) && (ucs4 <= endCharCode))
+ return ucs4
+ - startCharCode
+ + /* startGlyphID */ data.get(mid * 3 + 2);
+
+ if (endCharCode < ucs4)
+ min = mid + 1;
+ else
+ max = mid;
+ mid = (min + max) >> 1;
+ }
+ while (min < max);
+
+ startCharCode = data.get(3 * mid);
+ endCharCode = data.get(3 * mid + 1);
+ if ((startCharCode <= ucs4) && (ucs4 <= endCharCode))
+ return ucs4
+ - startCharCode
+ + /* startGlyphID */ data.get(mid * 3 + 2);
+
+ return 0;
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/GlyphNamer.java b/libjava/classpath/gnu/java/awt/font/opentype/GlyphNamer.java
new file mode 100644
index 0000000..ea4b8e2
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/GlyphNamer.java
@@ -0,0 +1,1133 @@
+/* GlyphNamer.java -- Provides glyph names.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype;
+
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import java.nio.CharBuffer;
+
+
+/**
+ * Provides names for glyphs, which is useful when embedding fonts
+ * in PostScript or PDF documents.
+ *
+ * <p>If the font has a <code>Zapf</code> table, it is used to map
+ * glyph IDs back to a sequence of Unicode codepoints, which then
+ * makes it possible to look up or synthesize a PostScript glyph name
+ * according to Adobe&#x2019;s conventions. This allows to extract the
+ * original text from the generated PDF or PostScript file, which is
+ * important for indexing, searching and extracting.
+ *
+ * <p>Otherwise, glyph names are taken from the <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM06/Chap6post.html"
+ * ><code>post</code> table</a>. All known formats (1, 2, 2.5, 3 and
+ * 4) are supported.
+ *
+ * <p><b>Open Tasks:</b> The code could be cleaner structured by
+ * having separate sub-classes for each variant of the POST table.
+ * Also, the implementation should not read in all glyph names if a
+ * font provides them in a POST table of type 2. It would be
+ * sufficient to just read in the offsets and delay the String
+ * fetching and conversion to the time when the glyph name is actually
+ * requested.
+ *
+ * <p><b>Lack of Thread Safety:</b> The GlyphNamer class is
+ * intentionally <i>not</i> safe to access from multiple concurrent
+ * threads. Synchronization needs to be performed externally. Usually,
+ * the font has already obtained a lock before calling the GlyphNamer.
+ * It would thus be wasteful to acquire additional locks for the
+ * GlyphNamer.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class GlyphNamer
+{
+ /**
+ * The 'post' table of the font.
+ */
+ private ByteBuffer postTable;
+
+
+ /**
+ * The 'Zapf' table of the font, or null if the font has no
+ * such table.
+ */
+ private ByteBuffer zapfTable;
+
+
+ /**
+ * The offset of each glyph relative to the Zapf table,
+ * or null if the font does not have a Zapf table.
+ */
+ private IntBuffer zapfOffsets;
+
+
+ /**
+ * The offset from the start of the Zapf table to the start
+ * of the extra info area.
+ */
+ private int zapfExtraInfo;
+
+
+ /**
+ * The format of the post table, a Fixed 16.16 number.
+ */
+ private int postFormat;
+
+
+ /**
+ * An array of glyph names. Used for table formats 1, 2, 2.5.
+ */
+ private String[] glyphNames;
+
+
+ /**
+ * An array from glyph to character codes. Similar to the
+ * workings of a Zapf table, but maps to CID instead of
+ * Unicode. Used for table format 4.
+ */
+ private CharBuffer glyphCharacterCodes;
+
+
+ /**
+ * The PostScript names of the 258 standard Macintosh glyphs. Note
+ * that some of these glyphs are not in the Adobe Standard Glyph
+ * List for New Fonts, namely .notdef, .null, nonmarkingreturn,
+ * nonbreakingspace, apple, onesuperior, twosuperior, and
+ * threesuperior.
+ */
+ private static final String[] STANDARD_POSTSCRIPT_GLYPH_NAMES =
+ {
+ ".notdef", // glyph #0
+ ".null", // glyph #1
+ "nonmarkingreturn", // glyph #2
+ "space", // glyph #3
+ "exclam", // glyph #4
+ "quotedbl", // glyph #5
+ "numbersign", // glyph #6
+ "dollar", // glyph #7
+ "percent", // glyph #8
+ "ampersand", // glyph #9
+ "quotesingle", // glyph #10
+ "parenleft", // glyph #11
+ "parenright", // glyph #12
+ "asterisk", // glyph #13
+ "plus", // glyph #14
+ "comma", // glyph #15
+ "hyphen", // glyph #16
+ "period", // glyph #17
+ "slash", // glyph #18
+ "zero", // glyph #19
+ "one", // glyph #20
+ "two", // glyph #21
+ "three", // glyph #22
+ "four", // glyph #23
+ "five", // glyph #24
+ "six", // glyph #25
+ "seven", // glyph #26
+ "eight", // glyph #27
+ "nine", // glyph #28
+ "colon", // glyph #29
+ "semicolon", // glyph #30
+ "less", // glyph #31
+ "equal", // glyph #32
+ "greater", // glyph #33
+ "question", // glyph #34
+ "at", // glyph #35
+ "A", // glyph #36
+ "B", // glyph #37
+ "C", // glyph #38
+ "D", // glyph #39
+ "E", // glyph #40
+ "F", // glyph #41
+ "G", // glyph #42
+ "H", // glyph #43
+ "I", // glyph #44
+ "J", // glyph #45
+ "K", // glyph #46
+ "L", // glyph #47
+ "M", // glyph #48
+ "N", // glyph #49
+ "O", // glyph #50
+ "P", // glyph #51
+ "Q", // glyph #52
+ "R", // glyph #53
+ "S", // glyph #54
+ "T", // glyph #55
+ "U", // glyph #56
+ "V", // glyph #57
+ "W", // glyph #58
+ "X", // glyph #59
+ "Y", // glyph #60
+ "Z", // glyph #61
+ "bracketleft", // glyph #62
+ "backslash", // glyph #63
+ "bracketright", // glyph #64
+ "asciicircum", // glyph #65
+ "underscore", // glyph #66
+ "grave", // glyph #67
+ "a", // glyph #68
+ "b", // glyph #69
+ "c", // glyph #70
+ "d", // glyph #71
+ "e", // glyph #72
+ "f", // glyph #73
+ "g", // glyph #74
+ "h", // glyph #75
+ "i", // glyph #76
+ "j", // glyph #77
+ "k", // glyph #78
+ "l", // glyph #79
+ "m", // glyph #80
+ "n", // glyph #81
+ "o", // glyph #82
+ "p", // glyph #83
+ "q", // glyph #84
+ "r", // glyph #85
+ "s", // glyph #86
+ "t", // glyph #87
+ "u", // glyph #88
+ "v", // glyph #89
+ "w", // glyph #90
+ "x", // glyph #91
+ "y", // glyph #92
+ "z", // glyph #93
+ "braceleft", // glyph #94
+ "bar", // glyph #95
+ "braceright", // glyph #96
+ "asciitilde", // glyph #97
+ "Adieresis", // glyph #98
+ "Aring", // glyph #99
+ "Ccedilla", // glyph #100
+ "Eacute", // glyph #101
+ "Ntilde", // glyph #102
+ "Odieresis", // glyph #103
+ "Udieresis", // glyph #104
+ "aacute", // glyph #105
+ "agrave", // glyph #106
+ "acircumflex", // glyph #107
+ "adieresis", // glyph #108
+ "atilde", // glyph #109
+ "aring", // glyph #110
+ "ccedilla", // glyph #111
+ "eacute", // glyph #112
+ "egrave", // glyph #113
+ "ecircumflex", // glyph #114
+ "edieresis", // glyph #115
+ "iacute", // glyph #116
+ "igrave", // glyph #117
+ "icircumflex", // glyph #118
+ "idieresis", // glyph #119
+ "ntilde", // glyph #120
+ "oacute", // glyph #121
+ "ograve", // glyph #122
+ "ocircumflex", // glyph #123
+ "odieresis", // glyph #124
+ "otilde", // glyph #125
+ "uacute", // glyph #126
+ "ugrave", // glyph #127
+ "ucircumflex", // glyph #128
+ "udieresis", // glyph #129
+ "dagger", // glyph #130
+ "degree", // glyph #131
+ "cent", // glyph #132
+ "sterling", // glyph #133
+ "section", // glyph #134
+ "bullet", // glyph #135
+ "paragraph", // glyph #136
+ "germandbls", // glyph #137
+ "registered", // glyph #138
+ "copyright", // glyph #139
+ "trademark", // glyph #140
+ "acute", // glyph #141
+ "dieresis", // glyph #142
+ "notequal", // glyph #143
+ "AE", // glyph #144
+ "Oslash", // glyph #145
+ "infinity", // glyph #146
+ "plusminus", // glyph #147
+ "lessequal", // glyph #148
+ "greaterequal", // glyph #149
+ "yen", // glyph #150
+ "mu", // glyph #151
+ "partialdiff", // glyph #152
+ "summation", // glyph #153
+ "product", // glyph #154
+ "pi", // glyph #155
+ "integral", // glyph #156
+ "ordfeminine", // glyph #157
+ "ordmasculine", // glyph #158
+ "Omega", // glyph #159
+ "ae", // glyph #160
+ "oslash", // glyph #161
+ "questiondown", // glyph #162
+ "exclamdown", // glyph #163
+ "logicalnot", // glyph #164
+ "radical", // glyph #165
+ "florin", // glyph #166
+ "approxequal", // glyph #167
+ "Delta", // glyph #168
+ "guillemotleft", // glyph #169
+ "guillemotright", // glyph #170
+ "ellipsis", // glyph #171
+ "nonbreakingspace", // glyph #172
+ "Agrave", // glyph #173
+ "Atilde", // glyph #174
+ "Otilde", // glyph #175
+ "OE", // glyph #176
+ "oe", // glyph #177
+ "endash", // glyph #178
+ "emdash", // glyph #179
+ "quotedblleft", // glyph #180
+ "quotedblright", // glyph #181
+ "quoteleft", // glyph #182
+ "quoteright", // glyph #183
+ "divide", // glyph #184
+ "lozenge", // glyph #185
+ "ydieresis", // glyph #186
+ "Ydieresis", // glyph #187
+ "fraction", // glyph #188
+ "currency", // glyph #189
+ "guilsinglleft", // glyph #190
+ "guilsinglright", // glyph #191
+ "fi", // glyph #192
+ "fl", // glyph #193
+ "daggerdbl", // glyph #194
+ "periodcentered", // glyph #195
+ "quotesinglbase", // glyph #196
+ "quotedblbase", // glyph #197
+ "perthousand", // glyph #198
+ "Acircumflex", // glyph #199
+ "Ecircumflex", // glyph #200
+ "Aacute", // glyph #201
+ "Edieresis", // glyph #202
+ "Egrave", // glyph #203
+ "Iacute", // glyph #204
+ "Icircumflex", // glyph #205
+ "Idieresis", // glyph #206
+ "Igrave", // glyph #207
+ "Oacute", // glyph #208
+ "Ocircumflex", // glyph #209
+ "apple", // glyph #210
+ "Ograve", // glyph #211
+ "Uacute", // glyph #212
+ "Ucircumflex", // glyph #213
+ "Ugrave", // glyph #214
+ "dotlessi", // glyph #215
+ "circumflex", // glyph #216
+ "tilde", // glyph #217
+ "macron", // glyph #218
+ "breve", // glyph #219
+ "dotaccent", // glyph #220
+ "ring", // glyph #221
+ "cedilla", // glyph #222
+ "hungarumlaut", // glyph #223
+ "ogonek", // glyph #224
+ "caron", // glyph #225
+ "Lslash", // glyph #226
+ "lslash", // glyph #227
+ "Scaron", // glyph #228
+ "scaron", // glyph #229
+ "Zcaron", // glyph #230
+ "zcaron", // glyph #231
+ "brokenbar", // glyph #232
+ "Eth", // glyph #233
+ "eth", // glyph #234
+ "Yacute", // glyph #235
+ "yacute", // glyph #236
+ "Thorn", // glyph #237
+ "thorn", // glyph #238
+ "minus", // glyph #239
+ "multiply", // glyph #240
+ "onesuperior", // glyph #241
+ "twosuperior", // glyph #242
+ "threesuperior", // glyph #243
+ "onehalf", // glyph #244
+ "onequarter", // glyph #245
+ "threequarters", // glyph #246
+ "franc", // glyph #247
+ "Gbreve", // glyph #248
+ "gbreve", // glyph #249
+ "Idotaccent", // glyph #250
+ "Scedilla", // glyph #251
+ "scedilla", // glyph #252
+ "Cacute", // glyph #253
+ "cacute", // glyph #254
+ "Ccaron", // glyph #255
+ "ccaron", // glyph #256
+ "dcroat" // glyph #257
+ };
+
+
+ private GlyphNamer(int numGlyphs,
+ ByteBuffer postTable,
+ ByteBuffer zapfTable)
+ {
+ this.postTable = postTable;
+ this.zapfTable = zapfTable;
+
+ if ((zapfTable != null) && (zapfTable.getInt(0) == 0x00010000))
+ {
+ readZapf(numGlyphs);
+ return;
+ }
+
+ readPost();
+ }
+
+
+ /**
+ * Sets up the information which allows to retrieve the information
+ * on demand.
+ *
+ * @param numGlyphs the number of glyphs in the font. This value
+ * comes from the <code>maxp</code> table.
+ */
+ public static GlyphNamer forTables(int numGlyphs,
+ ByteBuffer postTable,
+ ByteBuffer zapfTable)
+ {
+ return new GlyphNamer(numGlyphs, postTable, zapfTable);
+ }
+
+
+ /**
+ * Retrieves or synthesizes a PostScript name for the glyph.
+ * Although the code is reasonably fast, it is recommended
+ * to cache the results in the printer driver.
+ *
+ * <p>If a font provides a 'Zapf' table, the reverse mapping
+ * from glyph to UTF-16 sequence is performed, and a glyph
+ * name is synthesized following the recommendations by Adobe.
+ * This allows to extract the original text from the generated
+ * PostScript or PDF, which is a requirement for indexing
+ * and searching.
+ *
+ * <p>If a font does not provide a 'Zapf' table, the glyph name
+ * is taken from the 'post' table. Note that some fonts have
+ * wrong data in their post data, in which case the resulting
+ * name will be garbage. Usually, this does not hurt, unless
+ * the user wants to extract text from the generated PostScript
+ * or PDF file. The GNU implementation understands all known
+ * formats of the post table (1, 2, 2.5, 3 and 4).
+ *
+ * @param glyph the index of the glyph whose name is to be
+ * retrieved.
+ *
+ * @return the glyph name, such as <code>A</code>,
+ * <code>gcircumflex</code>, <code>z_uni0302</code>, or
+ * <code>u11C42</code>.</li>
+ */
+ String getGlyphName(int glyph)
+ {
+ if (zapfOffsets != null)
+ {
+ zapfTable.position(zapfOffsets.get(glyph) + 8);
+ int numChars = zapfTable.getChar();
+ char[] chars = new char[numChars];
+ for (int i = 0; i < numChars; i++)
+ chars[i] = zapfTable.getChar();
+ return getGlyphName(chars);
+ }
+
+
+ /* Type 1, Type 2, Type 2.5 */
+ if (glyphNames != null)
+ return glyphNames[glyph];
+
+ /* Type 4: Synthesized glyph name. */
+ if (glyphCharacterCodes != null)
+ return "a" + glyphCharacterCodes.get(glyph);
+
+ /* Type 3: Arbitrary, but unique name for the glyph.
+ *
+ * To find out what a good naming scheme would be, we have printed
+ * a document containing the character U+201C in the font
+ * "Hiragino Kaku Gothic Pro W3" (by Dainippon Screen Mfg. Co.,
+ * Ltd.) on Apple MacOS X 10.1.5. This font has a type 3 'post'
+ * table, and its 'cmap' maps U+201C to glyph #108. The generated
+ * PostScript file defined a character whose name was "g108".
+ *
+ * Therefore, we use 'g' as name prefix. According to the
+ * TrueType/OpenType specification, it should not matter what
+ * prefix we use. On the other hand, it does not hurt either to be
+ * compatible with a good printer driver.
+ *
+ * Actually, that specific font also contains a 'Zapf' table,
+ * which allows to generate glyph names according to Adobe's
+ * conventions, so that extracting text from and searching in the
+ * generated PostScript or PDF becomes possible. While the Apple
+ * PostScript printer driver does not seem to use the 'Zapf' table
+ * for this purpose, we do.
+ */
+ return "g" + glyph;
+ }
+
+
+ /**
+ * Sets up some buffers which allow to quickly read information from
+ * the Zapf table.
+ *
+ * @see <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM06/Chap6Zapf.html">
+ * Apple&#x2019;s documentation of the <code>Zapf</code> table</a>
+ */
+ private void readZapf(int numGlyphs)
+ {
+ zapfExtraInfo = zapfTable.getInt(4);
+ zapfTable.position(8);
+ zapfOffsets = zapfTable.asIntBuffer();
+ zapfOffsets.limit(numGlyphs);
+ }
+
+
+ /**
+ * Reads in the PostScript data from a <code>post</code> table of a
+ * TrueType or OpenType font. The implementation currently
+ * understands the table formats 1, 2, 2.5, 3, and 4.
+ */
+ private void readPost()
+ {
+ int numGlyphs, nameIndex, maxNameIndex;
+ char[] nameIndices;
+ String[] names;
+ byte[] pascalName;
+
+ postTable.position(0);
+ postFormat = postTable.getInt();
+ switch (postFormat)
+ {
+ case 0x00010000:
+ glyphNames = STANDARD_POSTSCRIPT_GLYPH_NAMES;
+ return;
+
+ case 0x00020000:
+ postTable.position(32);
+ numGlyphs = postTable.getChar();
+ glyphNames = new String[numGlyphs];
+ pascalName = new byte[255];
+ nameIndices = new char[numGlyphs];
+ maxNameIndex = 0;
+ for (int i = 0; i < numGlyphs; i++)
+ maxNameIndex = Math.max(maxNameIndex,
+ nameIndices[i] = postTable.getChar());
+
+ names = new String[Math.max(maxNameIndex - 258 + 1, 0)];
+ for (int i = 258; i <= maxNameIndex; i++)
+ {
+ int nameLen = (postTable.get() & 0xff);
+ postTable.get(pascalName, 0, nameLen);
+ names[i - 258] = new String(pascalName, 0, nameLen);
+ }
+ for (int i = 0; i < numGlyphs; i++)
+ {
+ nameIndex = nameIndices[i];
+ if (nameIndex < 258)
+ glyphNames[i] = STANDARD_POSTSCRIPT_GLYPH_NAMES[nameIndex];
+ else
+ glyphNames[i] = names[nameIndex - 258];
+ }
+ return;
+
+ case 0x00025000: // in case some font has a wrong representation of 2.5
+ case 0x00028000:
+ /* Format 2.5 is a re-ordering of the standard names. It has
+ * been deprecated in February 2000, but might still occasionally
+ * float around. Since it can be supported with so little code,
+ * we do so.
+ */
+ postTable.position(32);
+ numGlyphs = postTable.getChar();
+ glyphNames = new String[numGlyphs];
+ for (int i = 0; i < numGlyphs; i++)
+ glyphNames[i] = STANDARD_POSTSCRIPT_GLYPH_NAMES[i + postTable.get()];
+ return;
+
+ case 0x00030000:
+ /* Format 3 leaves it to the printer driver to choose whatever
+ * name it wants to.
+ */
+ return;
+
+ case 0x00040000:
+ /* Format 4 is used by Apple for composite fonts that have
+ * synthetic glyph names. The name of a glyph is "a" plus
+ * the integer (in decimal notation) that follows the table
+ * after numGlyphs.
+ */
+ postTable.position(32);
+ numGlyphs = postTable.getChar();
+ glyphCharacterCodes = postTable.asCharBuffer();
+ glyphCharacterCodes.limit(numGlyphs);
+ return;
+ }
+ }
+
+
+
+ /* For generating the following tables, a quick-and-dirty Python
+ * script was used. It is unlikely that we ever need to run it
+ * again, but for information and convenient access, it is included
+ * below. Initial '#' characters need to be removed from the generated
+ * strings, they are present so that the lines not break in the middle
+ * of Java escape sequences (no, this is not very clean).
+ *
+ * import string
+ *
+ * javaEscapes = {0x22:'\\"', 0x5c:'\\\\'}
+ * def escape(c):
+ * if javaEscapes.has_key(c):
+ * return javaEscapes[c]
+ * elif 0x20 <= c <= 0x7e:
+ * return chr(c)
+ * else:
+ * return '\\u%04x' % c
+ *
+ * def dump(name, s, stride):
+ * s = ('#' * stride) + s
+ * print " private static final String %s" % name
+ * for i in range(0, len(s), 60):
+ * print ' + "%s"' % s[i:i+60]
+ *
+ * glyphs = {}
+ * for line in open('aglfn13.txt', 'r').readlines():
+ * if line[0] == '#': continue
+ * [ucs, glyphName, desc] = line.split(';')
+ * glyph = int('0x' + ucs, 0)
+ * assert (not glyphs.has_key(glyph)) or (glyphs[glyph] == glyphName)
+ * glyphs[glyph] = glyphName
+ * del glyphs[0] # arrowvertex
+ * k = glyphs.keys()
+ * k.sort()
+ * numGlyphs = len(k)
+ * names = ''
+ * pos = []
+ * for glyph in k:
+ * pos.append(len(names) + 1)
+ * names = names + '/' + glyphs[glyph]
+ * dump('AGLFN_GLYPHS', string.join(map(escape, k), ''), 5)
+ * dump('AGLFN_NAME_OFFSET', string.join(map(escape, pos), ''), 4)
+ * dump('AGLFN_NAMES', names + '/', 0)
+ */
+
+
+ /**
+ * A String that contains the Unicode codepoint for each glyph
+ * in the Adobe Glyph List. The characters are in sorted order.
+ *
+ * Generated from the Adobe Glyph List for New Fonts, version 1.1
+ * of 17 April 2003.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/aglfn13.txt" >Adobe
+ * Glyph List for New Fonts</a>
+ */
+ private static final String AGLFN_GLYPHS
+ = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU"
+ + "VWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u00a1\u00a2\u00a3"
+ + "\u00a4\u00a5\u00a6\u00a7\u00a8\u00a9\u00aa\u00ab\u00ac\u00ae"
+ + "\u00af\u00b0\u00b1\u00b4\u00b5\u00b6\u00b7\u00b8\u00ba\u00bb"
+ + "\u00bc\u00bd\u00be\u00bf\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5"
+ + "\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf"
+ + "\u00d0\u00d1\u00d2\u00d3\u00d4\u00d5\u00d6\u00d7\u00d8\u00d9"
+ + "\u00da\u00db\u00dc\u00dd\u00de\u00df\u00e0\u00e1\u00e2\u00e3"
+ + "\u00e4\u00e5\u00e6\u00e7\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed"
+ + "\u00ee\u00ef\u00f0\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f7"
+ + "\u00f8\u00f9\u00fa\u00fb\u00fc\u00fd\u00fe\u00ff\u0100\u0101"
+ + "\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b"
+ + "\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115"
+ + "\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f"
+ + "\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129"
+ + "\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0132\u0133"
+ + "\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d"
+ + "\u013e\u013f\u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147"
+ + "\u0148\u0149\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151"
+ + "\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b"
+ + "\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165"
+ + "\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f"
+ + "\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179"
+ + "\u017a\u017b\u017c\u017d\u017e\u017f\u0192\u01a0\u01a1\u01af"
+ + "\u01b0\u01e6\u01e7\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\u0218"
+ + "\u0219\u02bc\u02bd\u02c6\u02c7\u02d8\u02d9\u02da\u02db\u02dc"
+ + "\u02dd\u0300\u0301\u0303\u0309\u0323\u0384\u0385\u0386\u0387"
+ + "\u0388\u0389\u038a\u038c\u038e\u038f\u0390\u0391\u0392\u0393"
+ + "\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e"
+ + "\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03aa"
+ + "\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4"
+ + "\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bd\u03be\u03bf"
+ + "\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9"
+ + "\u03ca\u03cb\u03cc\u03cd\u03ce\u03d1\u03d2\u03d5\u03d6\u0401"
+ + "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b"
+ + "\u040c\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416"
+ + "\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420"
+ + "\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a"
+ + "\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434"
+ + "\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e"
+ + "\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448"
+ + "\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0451\u0452\u0453"
+ + "\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045e"
+ + "\u045f\u0462\u0463\u0472\u0473\u0474\u0475\u0490\u0491\u04d9"
+ + "\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9"
+ + "\u05bb\u05bc\u05bd\u05be\u05bf\u05c0\u05c1\u05c2\u05c3\u05d0"
+ + "\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da"
+ + "\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4"
+ + "\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u060c"
+ + "\u061b\u061f\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628"
+ + "\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632"
+ + "\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0640\u0641"
+ + "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b"
+ + "\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0660\u0661\u0662"
+ + "\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u066a\u066d\u0679"
+ + "\u067e\u0686\u0688\u0691\u0698\u06a4\u06af\u06ba\u06d2\u06d5"
+ + "\u1e80\u1e81\u1e82\u1e83\u1e84\u1e85\u1ef2\u1ef3\u200c\u200d"
+ + "\u200e\u200f\u2012\u2013\u2014\u2015\u2017\u2018\u2019\u201a"
+ + "\u201b\u201c\u201d\u201e\u2020\u2021\u2022\u2024\u2025\u2026"
+ + "\u202c\u202d\u202e\u2030\u2032\u2033\u2039\u203a\u203c\u2044"
+ + "\u20a1\u20a3\u20a4\u20a7\u20aa\u20ab\u20ac\u2105\u2111\u2113"
+ + "\u2116\u2118\u211c\u211e\u2122\u2126\u212e\u2135\u2153\u2154"
+ + "\u215b\u215c\u215d\u215e\u2190\u2191\u2192\u2193\u2194\u2195"
+ + "\u21a8\u21b5\u21d0\u21d1\u21d2\u21d3\u21d4\u2200\u2202\u2203"
+ + "\u2205\u2206\u2207\u2208\u2209\u220b\u220f\u2211\u2212\u2217"
+ + "\u221a\u221d\u221e\u221f\u2220\u2227\u2228\u2229\u222a\u222b"
+ + "\u2234\u223c\u2245\u2248\u2260\u2261\u2264\u2265\u2282\u2283"
+ + "\u2284\u2286\u2287\u2295\u2297\u22a5\u22c5\u2302\u2310\u2320"
+ + "\u2321\u2329\u232a\u2500\u2502\u250c\u2510\u2514\u2518\u251c"
+ + "\u2524\u252c\u2534\u253c\u2550\u2551\u2552\u2553\u2554\u2555"
+ + "\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f"
+ + "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569"
+ + "\u256a\u256b\u256c\u2580\u2584\u2588\u258c\u2590\u2591\u2592"
+ + "\u2593\u25a0\u25a1\u25aa\u25ab\u25ac\u25b2\u25ba\u25bc\u25c4"
+ + "\u25ca\u25cb\u25cf\u25d8\u25d9\u25e6\u263a\u263b\u263c\u2640"
+ + "\u2642\u2660\u2663\u2665\u2666\u266a\u266b";
+
+
+ /**
+ * The offset of each glyph name in AGLFN_NAMES.
+ *
+ * Generated from the Adobe Glyph List for New Fonts, version 1.1
+ * of 17 April 2003.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/aglfn13.txt" >Adobe
+ * Glyph List for New Fonts</a>
+ */
+ private static final String AGLFN_NAME_OFFSET
+ = "\u0001\u0007\u000e\u0017\")1;GQ\\ejpw~\u0084\u0089\u008d"
+ + "\u0091\u0097\u009c\u00a1\u00a5\u00ab\u00b1\u00b6\u00bc\u00c6"
+ + "\u00cb\u00d1\u00d9\u00e2\u00e5\u00e7\u00e9\u00eb\u00ed\u00ef"
+ + "\u00f1\u00f3\u00f5\u00f7\u00f9\u00fb\u00fd\u00ff\u0101\u0103"
+ + "\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117"
+ + "\u0119\u0125\u012f\u013c\u0148\u0153\u0159\u015b\u015d\u015f"
+ + "\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173"
+ + "\u0175\u0177\u0179\u017b\u017d\u017f\u0181\u0183\u0185\u0187"
+ + "\u0189\u018b\u018d\u0197\u019b\u01a6\u01b1\u01bc\u01c1\u01ca"
+ + "\u01d3\u01d7\u01e1\u01e9\u01f2\u01fc\u0208\u0216\u0221\u022c"
+ + "\u0233\u023a\u0244\u024a\u024d\u0257\u0266\u026e\u027b\u028a"
+ + "\u0295\u029d\u02ab\u02b8\u02bf\u02c6\u02d2\u02d9\u02e3\u02e9"
+ + "\u02ec\u02f5\u02fc\u0303\u030f\u0319\u0320\u0327\u0333\u033d"
+ + "\u0341\u0348\u034f\u0356\u0362\u0369\u0373\u037c\u0383\u038a"
+ + "\u0391\u039d\u03a7\u03ae\u03b4\u03bf\u03c6\u03cd\u03d9\u03e0"
+ + "\u03ea\u03f0\u03f3\u03fc\u0403\u040a\u0416\u0420\u0427\u042e"
+ + "\u043a\u0444\u0448\u044f\u0456\u045d\u0469\u0470\u047a\u0481"
+ + "\u0488\u048f\u0496\u04a2\u04ac\u04b3\u04b9\u04c3\u04cb\u04d3"
+ + "\u04da\u04e1\u04e9\u04f1\u04f8\u04ff\u050b\u0517\u0522\u052d"
+ + "\u0534\u053b\u0542\u0549\u0550\u0557\u055f\u0567\u056e\u0575"
+ + "\u0580\u058b\u0593\u059b\u05a2\u05a9\u05b5\u05c1\u05c8\u05cf"
+ + "\u05da\u05e5\u05f2\u05ff\u060b\u0617\u061c\u0621\u0628\u062f"
+ + "\u0637\u063f\u0646\u064d\u0655\u065d\u0668\u0671\u0674\u0677"
+ + "\u0683\u068f\u069c\u06a9\u06b6\u06bd\u06c4\u06d1\u06de\u06e5"
+ + "\u06ec\u06f1\u06f6\u06fd\u0704\u070b\u0712\u071f\u072c\u0733"
+ + "\u073a\u0746\u074a\u074e\u0756\u075e\u0765\u076c\u077a\u0788"
+ + "\u078b\u078e\u0795\u079c\u07a9\u07b6\u07bd\u07c4\u07cb\u07d2"
+ + "\u07de\u07ea\u07f3\u07fc\u0803\u080a\u0817\u0824\u082b\u0832"
+ + "\u0837\u083c\u0843\u084a\u0852\u085a\u0861\u0868\u086e\u0874"
+ + "\u0882\u0890\u0898\u08a0\u08ac\u08b8\u08c4\u08d0\u08da\u08e1"
+ + "\u08e8\u08f3\u08fe\u0905\u090c\u0912\u0919\u091f\u0925\u092b"
+ + "\u0931\u0938\u093f\u094a\u0955\u095d\u0965\u0971\u097d\u098a"
+ + "\u0997\u09a1\u09ab\u09b6\u09bc\u09c2\u09cc\u09d1\u09d8\u09de"
+ + "\u09eb\u09f5\u09ff\u0a09\u0a17\u0a24\u0a2a\u0a38\u0a43\u0a4d"
+ + "\u0a5a\u0a63\u0a6d\u0a7a\u0a87\u0a92\u0aa4\u0aaa\u0aaf\u0ab5"
+ + "\u0abd\u0ac2\u0ac6\u0acc\u0ad1\u0ad7\u0ade\u0ae1\u0ae4\u0ae7"
+ + "\u0aef\u0af2\u0af6\u0afc\u0b00\u0b08\u0b0c\u0b10\u0b14\u0b21"
+ + "\u0b31\u0b3c\u0b49\u0b52\u0b5c\u0b71\u0b77\u0b7c\u0b82\u0b88"
+ + "\u0b90\u0b95\u0b99\u0b9f\u0ba4\u0baa\u0bb1\u0bb4\u0bb7\u0bbf"
+ + "\u0bc2\u0bc6\u0bcd\u0bd3\u0bd7\u0bdf\u0be3\u0be7\u0beb\u0bf1"
+ + "\u0bfe\u0c0e\u0c1b\u0c28\u0c33\u0c3a\u0c43\u0c48\u0c4f\u0c59"
+ + "\u0c63\u0c6d\u0c77\u0c81\u0c8b\u0c95\u0c9f\u0ca9\u0cb3\u0cbd"
+ + "\u0cc7\u0cd1\u0cdb\u0ce5\u0cef\u0cf9\u0d03\u0d0d\u0d17\u0d21"
+ + "\u0d2b\u0d35\u0d3f\u0d49\u0d53\u0d5d\u0d67\u0d71\u0d7b\u0d85"
+ + "\u0d8f\u0d99\u0da3\u0dad\u0db7\u0dc1\u0dcb\u0dd5\u0ddf\u0de9"
+ + "\u0df3\u0dfd\u0e07\u0e11\u0e1b\u0e25\u0e2f\u0e39\u0e43\u0e4d"
+ + "\u0e57\u0e61\u0e6b\u0e75\u0e7f\u0e89\u0e93\u0e9d\u0ea7\u0eb1"
+ + "\u0ebb\u0ec5\u0ecf\u0ed9\u0ee3\u0eed\u0ef7\u0f01\u0f0b\u0f15"
+ + "\u0f1f\u0f29\u0f33\u0f3d\u0f47\u0f51\u0f5b\u0f65\u0f6f\u0f79"
+ + "\u0f83\u0f8d\u0f97\u0fa1\u0fab\u0fb5\u0fbf\u0fc9\u0fd3\u0fdd"
+ + "\u0fe7\u0ff1\u0ffb\u1005\u100f\u1019\u1023\u102d\u1037\u1041"
+ + "\u104b\u1055\u105f\u1069\u1073\u107d\u1087\u1091\u109b\u10a5"
+ + "\u10af\u10b9\u10c3\u10cd\u10d7\u10e1\u10eb\u10f5\u10ff\u1109"
+ + "\u1113\u111d\u1127\u1131\u113b\u1145\u114f\u1159\u1163\u116d"
+ + "\u1177\u1181\u118b\u1195\u119f\u11a9\u11b3\u11bd\u11c7\u11d1"
+ + "\u11db\u11e5\u11ef\u11f9\u1203\u120d\u1217\u1221\u122b\u1235"
+ + "\u123f\u1249\u1253\u125d\u1267\u1271\u127b\u1285\u128f\u1299"
+ + "\u12a3\u12ad\u12b7\u12c1\u12cb\u12d5\u12df\u12e9\u12f3\u12fd"
+ + "\u1307\u1311\u131b\u1325\u132f\u1339\u1343\u134d\u1357\u1361"
+ + "\u136b\u1375\u137f\u1389\u1393\u139d\u13a7\u13b1\u13bb\u13c5"
+ + "\u13cf\u13d9\u13e3\u13ed\u13f7\u1401\u140b\u1415\u141f\u1429"
+ + "\u1433\u143d\u1447\u1451\u145b\u1465\u146f\u1479\u1483\u148d"
+ + "\u1497\u14a1\u14ab\u14b5\u14bf\u14c9\u14d3\u14dd\u14e7\u14f1"
+ + "\u14f8\u14ff\u1506\u150d\u1517\u1521\u1528\u152f\u1539\u1541"
+ + "\u1549\u1551\u155c\u1563\u156a\u1574\u1582\u158c\u1597\u15a6"
+ + "\u15b4\u15c1\u15cf\u15dc\u15e3\u15ed\u15f4\u1603\u1612\u161b"
+ + "\u1625\u162f\u1639\u1645\u164c\u1653\u1661\u1670\u167a\u1683"
+ + "\u1691\u1697\u169c\u16a3\u16ad\u16b2\u16b7\u16c1\u16ca\u16d4"
+ + "\u16de\u16ea\u16f3\u1700\u170a\u1710\u171a\u1720\u1729\u1733"
+ + "\u173d\u174a\u1756\u1763\u176d\u1775\u1780\u178a\u1794\u179e"
+ + "\u17ab\u17ba\u17c7\u17d2\u17e0\u17ed\u17fa\u1804\u1810\u181c"
+ + "\u1825\u182b\u1834\u183c\u1847\u1850\u1858\u1862\u1868\u1875"
+ + "\u187d\u188a\u1893\u189e\u18a4\u18af\u18b9\u18c6\u18cc\u18d5"
+ + "\u18df\u18e7\u18f1\u18fd\u1906\u1912\u191c\u1929\u1936\u1945"
+ + "\u194f\u195c\u196b\u1976\u1985\u1993\u199b\u19a1\u19af\u19ba"
+ + "\u19c5\u19cf\u19da\u19e3\u19ec\u19f5\u19fe\u1a07\u1a10\u1a19"
+ + "\u1a22\u1a2b\u1a34\u1a3d\u1a46\u1a4f\u1a58\u1a61\u1a6a\u1a73"
+ + "\u1a7c\u1a85\u1a8e\u1a97\u1aa0\u1aa9\u1ab2\u1abb\u1ac4\u1acd"
+ + "\u1ad6\u1adf\u1ae8\u1af1\u1afa\u1b03\u1b0c\u1b15\u1b1e\u1b27"
+ + "\u1b30\u1b39\u1b42\u1b4a\u1b52\u1b58\u1b60\u1b68\u1b70\u1b76"
+ + "\u1b7e\u1b88\u1b8f\u1b96\u1b9d\u1ba8\u1bb0\u1bb8\u1bc0\u1bc8"
+ + "\u1bd0\u1bd7\u1bde\u1be8\u1bf2\u1bfd\u1c07\u1c14\u1c18\u1c1f"
+ + "\u1c24\u1c2a\u1c2f\u1c35\u1c3d\u1c49";
+
+
+ /**
+ * The name of each glyph in the Adobe Glyph List for New Fonts
+ * (AGLFN). The name of the n-th glyph starts at position
+ * AGLFN_NAME_OFFSET.charAt(n). It ends before the following
+ * slash (slashes cannot be part of a PostScript name, which
+ * is why we use it for separation).
+ *
+ * <p>Generated from the Adobe Glyph List for New Fonts, version 1.1
+ * of 17 April 2003.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/aglfn13.txt" >Adobe
+ * Glyph List for New Fonts</a>
+ */
+ private static final String AGLFN_NAMES
+ = "/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/q"
+ + "uotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/p"
+ + "eriod/slash/zero/one/two/three/four/five/six/seven/eight/nin"
+ + "e/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F"
+ + "/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backsla"
+ + "sh/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h"
+ + "/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/bracerigh"
+ + "t/asciitilde/exclamdown/cent/sterling/currency/yen/brokenbar"
+ + "/section/dieresis/copyright/ordfeminine/guillemotleft/logica"
+ + "lnot/registered/macron/degree/plusminus/acute/mu/paragraph/p"
+ + "eriodcentered/cedilla/ordmasculine/guillemotright/onequarter"
+ + "/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumfle"
+ + "x/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumfl"
+ + "ex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/"
+ + "Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/U"
+ + "grave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/a"
+ + "grave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/"
+ + "egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumfle"
+ + "x/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odie"
+ + "resis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacu"
+ + "te/thorn/ydieresis/Amacron/amacron/Abreve/abreve/Aogonek/aog"
+ + "onek/Cacute/cacute/Ccircumflex/ccircumflex/Cdotaccent/cdotac"
+ + "cent/Ccaron/ccaron/Dcaron/dcaron/Dcroat/dcroat/Emacron/emacr"
+ + "on/Ebreve/ebreve/Edotaccent/edotaccent/Eogonek/eogonek/Ecaro"
+ + "n/ecaron/Gcircumflex/gcircumflex/Gbreve/gbreve/Gdotaccent/gd"
+ + "otaccent/Gcommaaccent/gcommaaccent/Hcircumflex/hcircumflex/H"
+ + "bar/hbar/Itilde/itilde/Imacron/imacron/Ibreve/ibreve/Iogonek"
+ + "/iogonek/Idotaccent/dotlessi/IJ/ij/Jcircumflex/jcircumflex/K"
+ + "commaaccent/kcommaaccent/kgreenlandic/Lacute/lacute/Lcommaac"
+ + "cent/lcommaaccent/Lcaron/lcaron/Ldot/ldot/Lslash/lslash/Nacu"
+ + "te/nacute/Ncommaaccent/ncommaaccent/Ncaron/ncaron/napostroph"
+ + "e/Eng/eng/Omacron/omacron/Obreve/obreve/Ohungarumlaut/ohunga"
+ + "rumlaut/OE/oe/Racute/racute/Rcommaaccent/rcommaaccent/Rcaron"
+ + "/rcaron/Sacute/sacute/Scircumflex/scircumflex/Scedilla/scedi"
+ + "lla/Scaron/scaron/Tcommaaccent/tcommaaccent/Tcaron/tcaron/Tb"
+ + "ar/tbar/Utilde/utilde/Umacron/umacron/Ubreve/ubreve/Uring/ur"
+ + "ing/Uhungarumlaut/uhungarumlaut/Uogonek/uogonek/Wcircumflex/"
+ + "wcircumflex/Ycircumflex/ycircumflex/Ydieresis/Zacute/zacute/"
+ + "Zdotaccent/zdotaccent/Zcaron/zcaron/longs/florin/Ohorn/ohorn"
+ + "/Uhorn/uhorn/Gcaron/gcaron/Aringacute/aringacute/AEacute/aea"
+ + "cute/Oslashacute/oslashacute/Scommaaccent/scommaaccent/afii5"
+ + "7929/afii64937/circumflex/caron/breve/dotaccent/ring/ogonek/"
+ + "tilde/hungarumlaut/gravecomb/acutecomb/tildecomb/hookaboveco"
+ + "mb/dotbelowcomb/tonos/dieresistonos/Alphatonos/anoteleia/Eps"
+ + "ilontonos/Etatonos/Iotatonos/Omicrontonos/Upsilontonos/Omega"
+ + "tonos/iotadieresistonos/Alpha/Beta/Gamma/Epsilon/Zeta/Eta/Th"
+ + "eta/Iota/Kappa/Lambda/Mu/Nu/Xi/Omicron/Pi/Rho/Sigma/Tau/Upsi"
+ + "lon/Phi/Chi/Psi/Iotadieresis/Upsilondieresis/alphatonos/epsi"
+ + "lontonos/etatonos/iotatonos/upsilondieresistonos/alpha/beta/"
+ + "gamma/delta/epsilon/zeta/eta/theta/iota/kappa/lambda/nu/xi/o"
+ + "micron/pi/rho/sigma1/sigma/tau/upsilon/phi/chi/psi/omega/iot"
+ + "adieresis/upsilondieresis/omicrontonos/upsilontonos/omegaton"
+ + "os/theta1/Upsilon1/phi1/omega1/afii10023/afii10051/afii10052"
+ + "/afii10053/afii10054/afii10055/afii10056/afii10057/afii10058"
+ + "/afii10059/afii10060/afii10061/afii10062/afii10145/afii10017"
+ + "/afii10018/afii10019/afii10020/afii10021/afii10022/afii10024"
+ + "/afii10025/afii10026/afii10027/afii10028/afii10029/afii10030"
+ + "/afii10031/afii10032/afii10033/afii10034/afii10035/afii10036"
+ + "/afii10037/afii10038/afii10039/afii10040/afii10041/afii10042"
+ + "/afii10043/afii10044/afii10045/afii10046/afii10047/afii10048"
+ + "/afii10049/afii10065/afii10066/afii10067/afii10068/afii10069"
+ + "/afii10070/afii10072/afii10073/afii10074/afii10075/afii10076"
+ + "/afii10077/afii10078/afii10079/afii10080/afii10081/afii10082"
+ + "/afii10083/afii10084/afii10085/afii10086/afii10087/afii10088"
+ + "/afii10089/afii10090/afii10091/afii10092/afii10093/afii10094"
+ + "/afii10095/afii10096/afii10097/afii10071/afii10099/afii10100"
+ + "/afii10101/afii10102/afii10103/afii10104/afii10105/afii10106"
+ + "/afii10107/afii10108/afii10109/afii10110/afii10193/afii10146"
+ + "/afii10194/afii10147/afii10195/afii10148/afii10196/afii10050"
+ + "/afii10098/afii10846/afii57799/afii57801/afii57800/afii57802"
+ + "/afii57793/afii57794/afii57795/afii57798/afii57797/afii57806"
+ + "/afii57796/afii57807/afii57839/afii57645/afii57841/afii57842"
+ + "/afii57804/afii57803/afii57658/afii57664/afii57665/afii57666"
+ + "/afii57667/afii57668/afii57669/afii57670/afii57671/afii57672"
+ + "/afii57673/afii57674/afii57675/afii57676/afii57677/afii57678"
+ + "/afii57679/afii57680/afii57681/afii57682/afii57683/afii57684"
+ + "/afii57685/afii57686/afii57687/afii57688/afii57689/afii57690"
+ + "/afii57716/afii57717/afii57718/afii57388/afii57403/afii57407"
+ + "/afii57409/afii57410/afii57411/afii57412/afii57413/afii57414"
+ + "/afii57415/afii57416/afii57417/afii57418/afii57419/afii57420"
+ + "/afii57421/afii57422/afii57423/afii57424/afii57425/afii57426"
+ + "/afii57427/afii57428/afii57429/afii57430/afii57431/afii57432"
+ + "/afii57433/afii57434/afii57440/afii57441/afii57442/afii57443"
+ + "/afii57444/afii57445/afii57446/afii57470/afii57448/afii57449"
+ + "/afii57450/afii57451/afii57452/afii57453/afii57454/afii57455"
+ + "/afii57456/afii57457/afii57458/afii57392/afii57393/afii57394"
+ + "/afii57395/afii57396/afii57397/afii57398/afii57399/afii57400"
+ + "/afii57401/afii57381/afii63167/afii57511/afii57506/afii57507"
+ + "/afii57512/afii57513/afii57508/afii57505/afii57509/afii57514"
+ + "/afii57519/afii57534/Wgrave/wgrave/Wacute/wacute/Wdieresis/w"
+ + "dieresis/Ygrave/ygrave/afii61664/afii301/afii299/afii300/fig"
+ + "uredash/endash/emdash/afii00208/underscoredbl/quoteleft/quot"
+ + "eright/quotesinglbase/quotereversed/quotedblleft/quotedblrig"
+ + "ht/quotedblbase/dagger/daggerdbl/bullet/onedotenleader/twodo"
+ + "tenleader/ellipsis/afii61573/afii61574/afii61575/perthousand"
+ + "/minute/second/guilsinglleft/guilsinglright/exclamdbl/fracti"
+ + "on/colonmonetary/franc/lira/peseta/afii57636/dong/Euro/afii6"
+ + "1248/Ifraktur/afii61289/afii61352/weierstrass/Rfraktur/presc"
+ + "ription/trademark/Omega/estimated/aleph/onethird/twothirds/o"
+ + "neeighth/threeeighths/fiveeighths/seveneighths/arrowleft/arr"
+ + "owup/arrowright/arrowdown/arrowboth/arrowupdn/arrowupdnbse/c"
+ + "arriagereturn/arrowdblleft/arrowdblup/arrowdblright/arrowdbl"
+ + "down/arrowdblboth/universal/partialdiff/existential/emptyset"
+ + "/Delta/gradient/element/notelement/suchthat/product/summatio"
+ + "n/minus/asteriskmath/radical/proportional/infinity/orthogona"
+ + "l/angle/logicaland/logicalor/intersection/union/integral/the"
+ + "refore/similar/congruent/approxequal/notequal/equivalence/le"
+ + "ssequal/greaterequal/propersubset/propersuperset/notsubset/r"
+ + "eflexsubset/reflexsuperset/circleplus/circlemultiply/perpend"
+ + "icular/dotmath/house/revlogicalnot/integraltp/integralbt/ang"
+ + "leleft/angleright/SF100000/SF110000/SF010000/SF030000/SF0200"
+ + "00/SF040000/SF080000/SF090000/SF060000/SF070000/SF050000/SF4"
+ + "30000/SF240000/SF510000/SF520000/SF390000/SF220000/SF210000/"
+ + "SF250000/SF500000/SF490000/SF380000/SF280000/SF270000/SF2600"
+ + "00/SF360000/SF370000/SF420000/SF190000/SF200000/SF230000/SF4"
+ + "70000/SF480000/SF410000/SF450000/SF460000/SF400000/SF540000/"
+ + "SF530000/SF440000/upblock/dnblock/block/lfblock/rtblock/ltsh"
+ + "ade/shade/dkshade/filledbox/H22073/H18543/H18551/filledrect/"
+ + "triagup/triagrt/triagdn/triaglf/lozenge/circle/H18533/invbul"
+ + "let/invcircle/openbullet/smileface/invsmileface/sun/female/m"
+ + "ale/spade/club/heart/diamond/musicalnote/musicalnotedbl/";
+
+
+ /**
+ * Determines the name of a glyph according to the Adobe Glyph List
+ * for New Fonts (AGLFN). Because all glyphs in AGLFN correspond to
+ * a precomposed Unicode codepoint, the mismatch between characters
+ * and glyphs is not an issue here.
+ *
+ * @param c the Unicode codepoint that corresponds to the glyph, for
+ * example <code>0x010a</code> for <code>LATIN CAPITAL LETTER C WITH
+ * DOT ABOVE</code>.
+ *
+ * @return the glyph name, for example <code>Cdotaccent</code>. If
+ * the glyph is not in the <i>Adobe Glyph List for New Fonts</i>,
+ * <code>null</code> is returned.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/aglfn13.txt" >Adobe
+ * Glyph List for New Fonts (AGLFN), version 1.1 of April 17,
+ * 2003</a>
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/developer/type/unicodegn.html#6"
+ * >Adobe&#x2019;s guidelines related to Unicode</a>
+ */
+ private static String getAGLFNName(char c)
+ {
+ int min, max, mid;
+ char midChar;
+
+ /* Performs a binary search in the sorted array (actually, a
+ * String) of glyphs in the Adobe Glyph List for New Fonts.
+ *
+ * A good compiler might be able to optimize a call to charAt for
+ * a static final String, but this routine is probably not that
+ * critical to performance.
+ */
+ min = 0;
+ max = AGLFN_GLYPHS.length() - 1;
+ mid = max >> 1;
+ midChar = AGLFN_GLYPHS.charAt(mid);
+ do
+ {
+ if (midChar == c)
+ break;
+ else if (midChar < c)
+ min = mid + 1;
+ else
+ max = mid;
+ mid = (min + max) >> 1;
+ midChar = AGLFN_GLYPHS.charAt(mid);
+ }
+ while (min < max);
+
+ if (midChar != c)
+ return null;
+
+ int pos = AGLFN_NAME_OFFSET.charAt(mid);
+ return AGLFN_NAMES.substring(pos, AGLFN_NAMES.indexOf('/', pos));
+ }
+
+
+ /**
+ * Returns the PostScript name of a glyph, given the sequence of
+ * Unicode characters that is required to produce the glyph. The
+ * returned name follows Adobe&#x2019;s glyph naming recommendations
+ * in order to allow searching and indexing of the produced
+ * PostScript and PDF.
+ *
+ * <p>Some examples:
+ * <ul><li><code>U+0041</code> gives <code>A</code>;</li>
+ * <li><code>U+011D</code> gives <code>gcircumflex</code>;</li>
+ * <li><code>U+007A U+0302</code> gives <code>z_uni0302</code>;</li>
+ * <li><code>U+D807 U+DC42</code> (an UTF-16 escape sequence)
+ * gives <code>u11C42</code>;</li>
+ * </ul>.
+ *
+ * <p>The routine does <i>not</i> bring sequences in any canonical
+ * form. Therefore, the result for <code>U+0067 U+0302</code> (the
+ * decomposition of <code>U+011D</code>) will be
+ * <code>g_uni0302</code>, not <code>gcircumflex</code>.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/unicodegn.jsp" >Unicode
+ * and Glyph Names</a> and <a href=
+ * "http://partners.adobe.com/asn/tech/type/glyphnamelimits.jsp"
+ * >Glyph Names and Current Implementations</a>
+ */
+ private static String getGlyphName(char[] chars)
+ {
+ char c;
+ String name;
+ int numChars;
+ boolean hasSurrogates = false;
+
+ if ((chars == null) || ((numChars = chars.length) == 0))
+ return ".notdef";
+
+ /* The vast majority of cases will be just a single character.
+ * Therefore, we have a special code path for this case.
+ */
+ if (numChars == 1)
+ {
+ c = chars[0];
+ name = getAGLFNName(c);
+ if (name != null)
+ return name;
+ }
+
+ StringBuffer buf = new StringBuffer(numChars * 8);
+ for (int i = 0; i < numChars; i++)
+ {
+ if (i > 0)
+ buf.append('_');
+ c = chars[i];
+
+ /* handle surrogate pairs */
+ if (c >> 10 == 0x36) // U+D800 .. U+DBFF: High surrogate
+ {
+ /* Adobe recommends using the 'u' prefix only for
+ * characters outside the Unicode Basic Multilingual Plane,
+ * because Acrobat 4 and 5 understand only the "uni" prefix.
+ * The 'u' prefix will be supported by Acrobat 6 and later.
+ *
+ * For further information, please refer to this page:
+ * http://partners.adobe.com/asn/tech/type/glyphnamelimits.jsp#3
+ */
+ int ucs4 = (((c & 0x3ff) << 10) | (chars[++i] & 0x3ff)) + 0x10000;
+ buf.append('u');
+ buf.append(Integer.toHexString(ucs4).toUpperCase());
+ }
+ else
+ {
+ /* Try the Adobe Glyph List. */
+ name = getAGLFNName(c);
+ if (name != null)
+ buf.append(name);
+ else
+ {
+ char nibble;
+ buf.append("uni");
+ nibble = (char) (((c >> 12) & 0xf) + 0x30);
+ if (nibble > 0x39)
+ nibble += 7;
+ buf.append(nibble);
+ nibble = (char) (((c >> 8) & 0xf) + 0x30);
+ if (nibble > 0x39)
+ nibble += 7;
+ buf.append(nibble);
+ nibble = (char) (((c >> 4) & 0xf) + 0x30);
+ if (nibble > 0x39)
+ nibble += 7;
+ buf.append(nibble);
+ nibble = (char) (((c >> 0) & 0xf) + 0x30);
+ if (nibble > 0x39)
+ nibble += 7;
+ buf.append(nibble);
+ }
+ }
+ }
+ return buf.toString();
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/MacResourceFork.java b/libjava/classpath/gnu/java/awt/font/opentype/MacResourceFork.java
new file mode 100644
index 0000000..8115e04
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/MacResourceFork.java
@@ -0,0 +1,235 @@
+/* MacResourceFork.java -- Parses MacOS resource forks.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font.opentype;
+
+import java.nio.ByteBuffer;
+
+
+/**
+ * A class for accessing data that is stored in the resource fork of
+ * Macintosh files. Writing resource forks is currently not supported.
+ *
+ * <p>The gnu.java.awt.font package uses this class for accessing
+ * fonts in the MacOS X ".dfont" format, which is is a file in the
+ * format of a Macintosh resource fork, but stored in the normal data
+ * fork of the file.
+ *
+ * <p>The implementation has been designed to work efficiently with
+ * the virtual memory subsystem. It is recommended to pass an
+ * instance of {@link java.nio.MappedByteBuffer} to the constructor.
+ *
+ * <p>Thread Safety: All access is synchronized on the ByteBuffer
+ * that is passed to the constructor.
+ *
+ * @see <a href=
+ * "http://developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-99.html"
+ * >Apple&#x2019; developer documentation about the Resource File
+ * Format</a>
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class MacResourceFork
+{
+ int[] types;
+ Resource[][] resources;
+ ByteBuffer buf;
+
+ public MacResourceFork(ByteBuffer buf)
+ {
+ int typeListOffset;
+ int refListOffset;
+ int nameListOffset;
+ int mapOffset, mapLen;
+ int dataOffset, dataLen;
+ int numTypes;
+
+ synchronized (buf)
+ {
+ buf = buf.duplicate();
+ this.buf = buf;
+ buf.position(0);
+ dataOffset = buf.getInt();
+ mapOffset = buf.getInt();
+ dataLen = buf.getInt();
+ mapLen = buf.getInt();
+ buf.position(mapOffset + 24);
+ refListOffset = mapOffset + buf.getChar();
+ nameListOffset = mapOffset + buf.getChar();
+ numTypes = buf.getChar() + 1;
+ types = new int[numTypes];
+ resources = new Resource[numTypes][];
+
+ /* Parse resource type list. */
+ typeListOffset = buf.position();
+ for (int i = 0; i < numTypes; i++)
+ {
+ buf.position(typeListOffset + 8 * i);
+ int resType = buf.getInt();
+ int numRes = buf.getChar() + 1;
+
+ types[i] = resType;
+ resources[i] = new Resource[numRes];
+
+ buf.position(refListOffset + buf.getChar());
+ for (int j = 0; j < numRes; j++)
+ {
+ short resID = buf.getShort();
+ int resNameOffset = nameListOffset + buf.getChar();
+ int resDataOffset = buf.getInt();
+ byte resAttr = (byte) (resDataOffset >> 24);
+ resDataOffset = dataOffset + (resDataOffset & 0x00ffffff);
+ buf.getInt(); /* skip four reserved bytes */
+
+ Resource rsrc = new Resource(buf, resType, resID, resDataOffset,
+ resNameOffset);
+ resources[i][j] = rsrc;
+ }
+ }
+ }
+ }
+
+
+ public Resource[] getResources(int type)
+ {
+ synchronized (buf)
+ {
+ for (int i = 0; i < types.length; i++)
+ {
+ if (types[i] == type)
+ return resources[i];
+ }
+ }
+ return null;
+ }
+
+
+ public Resource getResource(int type, short id)
+ {
+ Resource[] res;
+
+ synchronized (buf)
+ {
+ for (int i = 0; i < types.length; i++)
+ {
+ if (types[i] != type)
+ continue;
+
+ res = resources[i];
+ for (int j = 0; j < res.length; j++)
+ if (res[j].getID() == id)
+ return res[j];
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * A single resource that is contained in a resource fork.
+ */
+ public static final class Resource
+ {
+ int type;
+ short id;
+ byte attribute;
+ int nameOffset;
+ int dataOffset;
+ ByteBuffer buf;
+
+ private Resource(ByteBuffer buf,
+ int type, short id, int dataOffset, int nameOffset)
+ {
+ this.buf = buf;
+ this.type = type;
+ this.id = id;
+ this.dataOffset = dataOffset;
+ this.nameOffset = nameOffset;
+ }
+
+
+ /**
+ * Returns the type of this resource.
+ *
+ * @return an <code>int</code> encoding a four-byte type tag,
+ * such as <code>0x464f4e54</code> for <code>'FONT'</code>.
+ */
+ public int getType()
+ {
+ return type;
+ }
+
+
+ /**
+ * Returns the ID of this resource.
+ */
+ public short getID()
+ {
+ return id;
+ }
+
+
+ /**
+ * Retrieves the content of the resource. Only one page of memory
+ * is touched, irrespective of the actual size of the resource.
+ */
+ public ByteBuffer getContent()
+ {
+ synchronized (buf)
+ {
+ buf.limit(buf.capacity());
+ int len = buf.getInt(dataOffset);
+ buf.position(dataOffset + 4).limit(dataOffset + 4 + len);
+ return buf.slice();
+ }
+ }
+
+
+ /**
+ * Determines the length of the resource in bytes.
+ */
+ public int getLength()
+ {
+ synchronized (buf)
+ {
+ return buf.getInt(dataOffset);
+ }
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/NameDecoder.java b/libjava/classpath/gnu/java/awt/font/opentype/NameDecoder.java
new file mode 100644
index 0000000..bc0c0df
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/NameDecoder.java
@@ -0,0 +1,686 @@
+/* NameDecoder.java -- Decodes names of OpenType and TrueType fonts.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.util.Locale;
+
+
+/**
+ * A utility class that helps with decoding the names of OpenType
+ * and TrueType fonts.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+class NameDecoder
+{
+ public static final int NAME_COPYRIGHT = 0;
+
+
+ /**
+ * Specifies the name of the family to which a font belongs, for
+ * example &#x201c;Univers&#x201d;.
+ */
+ public static final int NAME_FAMILY = 1;
+
+
+ /**
+ * Specified the name of the font inside its family, for
+ * example &#x201c;Light&#x201d;.
+ */
+ public static final int NAME_SUBFAMILY = 2;
+
+
+ public static final int NAME_UNIQUE = 3;
+
+
+ /**
+ * Specifies the full human-readable name of a font, for example
+ * &#x201c;Univers Light&#x201d;
+ */
+ public static final int NAME_FULL = 4;
+
+
+ public static final int NAME_VERSION = 5;
+
+
+ /**
+ * Specifies the PostScript name of a font, for example
+ * &#x201c;Univers-Light&#x201d;.
+ */
+ public static final int NAME_POSTSCRIPT = 6;
+
+
+ public static final int NAME_TRADEMARK = 7;
+ public static final int NAME_MANUFACTURER = 8;
+ public static final int NAME_DESIGNER = 9;
+ public static final int NAME_DESCRIPTION = 10;
+ public static final int NAME_VENDOR_URL = 11;
+ public static final int NAME_DESIGNER_URL = 12;
+ public static final int NAME_LICENSE = 13;
+ public static final int NAME_LICENSE_URL = 14;
+ public static final int NAME_PREFERRED_FAMILY = 16;
+ public static final int NAME_PREFERRED_SUBFAMILY = 17;
+ public static final int NAME_FULL_MACCOMPATIBLE = 18;
+ public static final int NAME_SAMPLE_TEXT = 19;
+ public static final int NAME_POSTSCRIPT_CID = 20;
+
+
+ private static final int PLATFORM_MACINTOSH = 1;
+ private static final int PLATFORM_MICROSOFT = 3;
+
+
+ public static String getName(ByteBuffer nameTable,
+ int name, Locale locale)
+ {
+ int numRecords;
+ int macLanguage, msLanguage;
+ int offset;
+ int namePlatform, nameEncoding, nameLanguage, nameID, nameLen;
+ int nameStart;
+ String result;
+ boolean match;
+
+ if (nameTable == null)
+ return null;
+
+ nameTable.position(0);
+ /* We understand only format 0 of the name table. */
+ if (nameTable.getChar() != 0)
+ return null;
+
+ macLanguage = getMacLanguageCode(locale);
+ msLanguage = getMicrosoftLanguageCode(locale);
+ numRecords = nameTable.getChar();
+ offset = nameTable.getChar();
+
+ for (int i = 0; i < numRecords; i++)
+ {
+ namePlatform = nameTable.getChar();
+ nameEncoding = nameTable.getChar();
+ nameLanguage = nameTable.getChar();
+ nameID = nameTable.getChar();
+ nameLen = nameTable.getChar();
+ nameStart = offset + nameTable.getChar();
+
+
+ if (nameID != name)
+ continue;
+
+ match = false;
+ switch (namePlatform)
+ {
+ case PLATFORM_MACINTOSH:
+ if ((nameLanguage == macLanguage) || (locale == null))
+ match = true;
+ else
+ {
+ switch (macLanguage)
+ {
+ case 49: /* Azerbaijani/Cyrillic */
+ match = (nameLanguage == /* Azerbaijani/Arabic */ 50)
+ || (nameLanguage == /* Azerbaijani/Roman */ 150);
+ break;
+
+ case 57: /* Mongolian/Mongolian */
+ match = (nameLanguage == /* Mongolian/Cyrillic */ 58);
+ break;
+
+ case 83: /* Malay/Roman */
+ match = (nameLanguage == /* Malay/Arabic */ 84);
+ break;
+ }
+ }
+ break;
+
+ case PLATFORM_MICROSOFT:
+ if (((nameLanguage & 0xff) == msLanguage) || (locale == null))
+ match = true;
+ break;
+ }
+
+
+ if (match)
+ {
+ result = decodeName(namePlatform, nameEncoding, nameLanguage,
+ nameTable, nameStart, nameLen);
+ if (result != null)
+ return result;
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * The language codes used by the Macintosh operating system. MacOS
+ * defines numeric language identifiers in the range [0 .. 95] and
+ * [128 .. 150]. To map this numeric identifier into an ISO 639
+ * language code, multiply it by two and take the substring at that
+ * position.
+ *
+ * <p>ISO 639 has revised the code for some languages, namely
+ * <code>he</code> for Hebrew (formerly <code>iw</code>),
+ * <code>yi</code> (formerly <code>ji</code>), and <code>id</code>
+ * for Indonesian (formerly <code>in</code>). In those cases, this
+ * table intentionally contains the older, obsolete code. The
+ * reason is that this is the code which
+ * java.util.Locale.getLanguage() is specified to return. The
+ * implementation of {@link #getMacLanguageCode} depends on this.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/unicode/onlinedat/languages.html"
+ * >Language Codes: ISO 639, Microsoft and Macintosh</a>
+ */
+ private static final String macLanguageCodes
+ // 0 1 2
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ = "enfrdeitnlsvesdaptnoiwjaarfielismttrhrzhurhithkoltplhuetlv "
+
+ // 3 4 5
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + "fofaruzhnlgdsqrocssksljisrmkbgukbeuzkkazazhykamokytgtkmnmnps"
+
+ // 6 7 8
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + "kukssdbonesamrbnasgupaormlkntatesimykmloviintlmsmsamti sosw"
+
+ // 9 10 11
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + "rwrn mgeo "
+
+ // 12 13 14
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + " cyeucalaqugnayttugtsjwsuglafbriugdgvgatoelkl"
+
+ // 15
+ // 0
+ + "az";
+
+
+ /**
+ * The primary language IDs used by the Microsoft operating systems.
+ *
+ * <p>ISO 639 has revised the code for some languages, namely
+ * <code>he</code> for Hebrew (formerly <code>iw</code>),
+ * <code>yi</code> (formerly <code>ji</code>), and <code>id</code>
+ * for Indonesian (formerly <code>in</code>). In those cases, this
+ * table intentionally contains the older, obsolete code. The
+ * reason is that this is the code which
+ * java.util.Locale.getLanguage() is specified to return. The
+ * implementation of {@link #getMicrosoftLanguageCode} depends on
+ * this.
+ *
+ * @see <a href=
+ * "http://www.unicode.org/unicode/onlinedat/languages.html"
+ * >Language Codes: ISO 639, Microsoft and Macintosh</a>
+ */
+ private static final String microsoftLanguageCodes
+ // 0 1 2
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ = " arbgcazhcsdadeelenesfifriwhuisitjakonlnoplptrmrorushsksqsv"
+
+ // 3 4 5
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + "thtrurinukbesletlvlttgfavihyazeu mk ts xhzuafkafohimt "
+
+ // 6 7 8
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + "gajimskkkyswtkuzttbnpaguortateknmlasmrsamnbocykmlomygl sd"
+
+ // 9 10 11
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + " si iuam ksnefypstl ha yo omtign laso";
+
+
+ /**
+ * Maps a Java Locale into a MacOS language code.
+ *
+ * <p>For languages that are written in several script systems,
+ * MacOS defines multiple language codes. Java Locales have a
+ * variant which could be used for that purpose, but a small
+ * test program revealed that with Sun's JDK 1.4.1_01, only two
+ * of 134 available Locales have a variant tag (namely no_NO_NY
+ * and th_TH_TH).</p>
+ *
+ * <p>The following cases are problematic:
+ *
+ * <ul> <li>Azerbaijani (az): The MacOS language code is 49 if
+ * Azerbaijani is written in the Cyrillic script; 50 if written in
+ * the Arabic script; 150 if written in the Roman script. This
+ * method will always return 49 for the Azerbaijani locale.</li>
+ *
+ * <li>Mongolian (mn): The MacOS language code is 57 if Mongolian is
+ * written in the Mongolian script; 58 if written in the Cyrillic
+ * script. This method will always return 57 for the Mongolian
+ * locale.</li>
+ *
+ * <li>Malay (ms): The MacOS language code is 83 if Malay is written
+ * in the Roman script; 84 if written in the Arabic script. This
+ * method will always return 83 for the Malay locale.</li> </ul>
+ *
+ * @return a MacOS language code, or -1 if there is no such code for
+ * <code>loc</code>&#x2019;s language.
+ */
+ private static int getMacLanguageCode(Locale loc)
+ {
+ int code;
+
+ if (loc == null)
+ return -1;
+
+ code = findLanguageCode(loc.getLanguage(), macLanguageCodes);
+ switch (code)
+ {
+ case 19:
+ /* Traditional Chinese (MacOS language #19) and and Simplified
+ * Chinese (MacOS language #33) both have "zh" as their ISO 639
+ * code.
+ */
+ if (loc.equals(Locale.SIMPLIFIED_CHINESE))
+ code = 33;
+ break;
+
+ // Other special cases would be 49, 57 and 83, but we do not
+ // know what do do about them. See the method documentation for
+ // details.
+ }
+
+ return code;
+ }
+
+
+ /**
+ * Maps a Java Locale into a Microsoft language code.
+ */
+ private static int getMicrosoftLanguageCode(Locale locale)
+ {
+ String isoCode;
+ int code;
+
+ if (locale == null)
+ return -1;
+
+ isoCode = locale.getLanguage();
+ code = findLanguageCode(isoCode, microsoftLanguageCodes);
+ if (code == -1)
+ {
+ if (isoCode.equals("hr") || isoCode.equals("sr"))
+ {
+ /* Microsoft uses code 26 for "sh" (Serbo-Croatian),
+ * "hr" (Croatian) and "sr" (Serbian). Our table contains
+ * "sh".
+ */
+ code = 26;
+ }
+ else if (isoCode.equals("gd"))
+ {
+ /* Microsoft uses code 60 for "gd" (Scottish Gaelic) and
+ * "ga" (Irish Gaelic). Out table contains "ga".
+ */
+ code = 60;
+ }
+ }
+ return code;
+ }
+
+
+ private static int findLanguageCode(String lang, String langCodes)
+ {
+ int index;
+ if (lang == null)
+ return -1;
+
+ if (lang.length() != 2)
+ return -1;
+
+ index = 0;
+ do
+ {
+ index = langCodes.indexOf(lang, index);
+
+ /* The index must be even to be considered a match. Otherwise, we
+ * could match with the second letter of one language and the
+ * first of antoher one.
+ */
+ }
+ while (!((index < 0) || ((index & 1) == 0)));
+ if (index < 0)
+ return -1;
+
+ index = index / 2;
+ return index;
+ }
+
+
+ private static String decodeName(int platform, int encoding, int language,
+ ByteBuffer buffer, int offset, int len)
+ {
+ byte[] byteBuf;
+ String charsetName;
+ int oldPosition;
+
+ charsetName = getCharsetName(platform, language, encoding);
+ if (charsetName == null)
+ return null;
+
+ byteBuf = new byte[len];
+ oldPosition = buffer.position();
+ try
+ {
+ buffer.position(offset);
+ buffer.get(byteBuf);
+ try
+ {
+ return new String(byteBuf, charsetName);
+ }
+ catch (UnsupportedEncodingException uex)
+ {
+ }
+ }
+ finally
+ {
+ buffer.position(oldPosition);
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Maps a MacOS language code into a Java Locale.
+ *
+ * @param macLanguageCode the MacOS language code for
+ * the language whose Java locale is to be retrieved.
+ *
+ * @return an suitable Locale, or <code>null</code> if
+ * the mapping cannot be performed.
+ */
+ private static Locale getMacLocale(int macLanguageCode)
+ {
+ String isoCode;
+
+ switch (macLanguageCode)
+ {
+ case 0: return Locale.ENGLISH;
+ case 1: return Locale.FRENCH;
+ case 2: return Locale.GERMAN;
+ case 3: return Locale.ITALIAN;
+ case 11: return Locale.JAPANESE;
+ case 23: return Locale.KOREAN;
+ case 19: return Locale.TRADITIONAL_CHINESE;
+ case 33: return Locale.SIMPLIFIED_CHINESE;
+ }
+
+ if ((macLanguageCode < 0) || (macLanguageCode > 150))
+ return null;
+
+ isoCode = macLanguageCodes.substring(macLanguageCode << 1,
+ (macLanguageCode + 1) << 1);
+ if (isoCode.charAt(0) == ' ')
+ return null;
+
+ return new Locale(isoCode);
+ }
+
+
+
+ /**
+ * Maps a Windows LCID into a Java Locale.
+ *
+ * @param lcid the Windows language ID whose Java locale
+ * is to be retrieved.
+ *
+ * @return an suitable Locale, or <code>null</code> if
+ * the mapping cannot be performed.
+ */
+ private static Locale getWindowsLocale(int lcid)
+ {
+ /* FIXME: This is grossly incomplete. */
+ switch (lcid)
+ {
+ case 0x0407: return Locale.GERMAN;
+ case 0x0408: return new Locale("el", "GR");
+ case 0x0409: return Locale.ENGLISH;
+ case 0x040b: return new Locale("fi");
+ case 0x040c: return Locale.FRENCH;
+ case 0x0416: return new Locale("pt");
+ case 0x0807: return new Locale("de", "CH");
+ case 0x0809: return new Locale("en", "UK");
+ case 0x080c: return new Locale("fr", "BE");
+ case 0x0816: return new Locale("pt", "BR");
+ case 0x0c07: return new Locale("de", "AT");
+ case 0x0c09: return new Locale("en", "AU");
+ case 0x0c0c: return new Locale("fr", "CA");
+ case 0x1007: return new Locale("de", "LU");
+ case 0x1009: return new Locale("en", "CA");
+ case 0x100c: return new Locale("fr", "CH");
+ case 0x1407: return new Locale("de", "LI");
+ case 0x1409: return new Locale("en", "NZ");
+ case 0x140c: return new Locale("fr", "LU");
+ case 0x1809: return new Locale("en", "IE");
+
+ default:
+ return null;
+ }
+ }
+
+
+ /**
+ * Maps a Macintosh Script Manager code to the name of the
+ * corresponding Java Charset.
+ *
+ * @param macScript a MacOS ScriptCode, for example
+ * 6 for <code>smGreek</code>.
+ *
+ * @return a String that can be used to retrieve a Java
+ * CharsetDecorder, for example <code>MacGreek</code>, or
+ * <code>null</code> if <code>macScript</code> has an
+ * unsupported value.
+ */
+ private static String getMacCharsetName(int macScript)
+ {
+ switch (macScript)
+ {
+ case 0: return "MacRoman";
+ case 1: return "MacJapanese";
+ case 2: return "MacKorean";
+ case 3: return "MacTradChinese";
+ case 4: return "MacArabic";
+ case 5: return "MacHebrew";
+ case 6: return "MacGreek";
+ case 7: return "MacCyrillic";
+ case 8: return "MacRSymbol";
+ case 9: return "MacDevanagari";
+ case 10: return "MacGurmukhi";
+ case 11: return "MacGujarati";
+ case 12: return "MacOriya";
+ case 13: return "MacBengali";
+ case 14: return "MacTamil";
+ case 15: return "MacTelugu";
+ case 16: return "MacKannada";
+ case 17: return "MacMalayalam";
+ case 18: return "MacSinhalese";
+ case 19: return "MacBurmese";
+ case 20: return "MacKhmer";
+ case 21: return "MacThai";
+ case 22: return "MacLao";
+ case 23: return "MacGeorgian";
+ case 24: return "MacArmenian";
+ case 25: return "MacSimpChinese";
+ case 26: return "MacTibetan";
+ case 27: return "MacMongolian";
+ case 28: return "MacEthiopic";
+ case 29: return "MacCentralEurope";
+ case 30: return "MacVietnamese";
+ case 31: return "MacExtArabic";
+
+ default: return null;
+ }
+ }
+
+
+ /**
+ * Maps a Microsoft locale ID (LCID) to the name of the
+ * corresponding Java Charset.
+ *
+ * @param lcid the Microsoft locale ID.
+ *
+ * @return a String that can be used to retrieve a Java
+ * CharsetDecorder, for example <code>windows-1252</code>, or
+ * <code>null</code> if <code>lcid</code> has an unsupported value.
+ */
+ private static String getMicrosoftCharsetName(int lcid)
+ {
+ int lang;
+ char codePage = '?';
+
+ /* Extract the language code from the LCID. */
+ lang = lcid & 0x3ff;
+
+ /* In the majority of cases, the language alone determines the
+ * codepage.
+ */
+ if (lang < 100)
+ codePage = (" 612D022322225022EC2202201?002A462110777 68 ?2 1 "
+ + " 2 2 2112 ?1 1 2 2 ")
+ .charAt(lang);
+
+ /* There are a few exceptions, however, where multiple code pages
+ * are used for the same language. */
+ if (codePage == '?')
+ {
+ switch (lcid)
+ {
+ case 0x041a: // Croatian --> Windows-1250 (Central Europe)
+ case 0x081a: // Serbian (Latin) --> Windows-1250 (Central Europe)
+ codePage = '0';
+ break;
+
+ case 0x42c: // Azeri (Latin) --> Windows-1254 (Turkish)
+ case 0x443: // Uzbek (Latin) --> Windows-1254 (Turkish)
+ codePage = '4';
+ break;
+
+ case 0x82c: // Azeri (Cyrillic) --> Windows-1251 (Cyrillic)
+ case 0x843: // Uzbek (Cyrillic) --> Windows-1251 (Cyrillic)
+ case 0xc1a: // Serbian (Cyrillic) --> Windows-1251 (Cyrillic)
+ codePage = '1';
+ break;
+ }
+ }
+
+ switch (codePage)
+ {
+ case '0': return "windows-1250"; // Central Europe
+ case '1': return "windows-1251"; // Cyrillic
+ case '2': return "windows-1252"; // Latin 1
+ case '3': return "windows-1253"; // Greek
+ case '4': return "windows-1254"; // Turkish
+ case '5': return "windows-1255"; // Hebrew
+ case '6': return "windows-1256"; // Arabic
+ case '7': return "windows-1257"; // Baltic
+ case '8': return "windows-1258"; // Vietnam
+ case 'A': return "windows-874"; // Thai
+ case 'B': return "windows-936"; // Simplified Chinese, GBK
+ case 'C': return "windows-949"; // Korean
+ case 'D': return "windows-950"; // Traditional Chinese, Big5
+ case 'E': return "windows-932"; // Japanese Shift-JIS
+ default: return null;
+ }
+ }
+
+
+ /**
+ * Returns the Locale of an OpenType name.
+ *
+ * @param platform the OpenType platform ID.
+ *
+ * @param language the language tag of the OpenType name. If
+ * <code>platform</code> is 1, this is the MacOS language code.
+ *
+ * @param encoding the encoding tag of the OpenType name. If
+ * <code>platform</code> is 1, this is the MacOS script code.
+ */
+ public static Locale getLocale(int platform, int language, int encoding)
+ {
+ switch (platform)
+ {
+ case 1: /* Apple Macintosh */
+ return getMacLocale(language);
+
+ case 3: /* Microsoft Windows */
+ return getWindowsLocale(language);
+
+ default:
+ return null;
+ }
+ }
+
+
+ /**
+ * Determines the name of the charset for an OpenType font name.
+ *
+ * @param platform the OpenType platform ID.
+ *
+ * @param language the language tag of the OpenType name. If
+ * <code>platform</code> is 1, this is the MacOS language code.
+ *
+ * @param encoding the encoding tag of the OpenType name. If
+ * <code>platform</code> is 1, this is the MacOS script code.
+ *
+ * @return a charset name such as <code>&quot;MacRoman&quot;</code>,
+ * or <code>null</code> if the combination is not known.
+ */
+ public static String getCharsetName(int platform, int language, int encoding)
+ {
+ switch (platform)
+ {
+ case 1: /* Apple Macintosh */
+ return getMacCharsetName(encoding);
+
+ case 3: /* Microsoft Windows */
+ return getMicrosoftCharsetName(language);
+
+ default:
+ return null;
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFont.java b/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFont.java
new file mode 100644
index 0000000..9ee28d7
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFont.java
@@ -0,0 +1,825 @@
+/* OpenTypeFont.java -- Manages OpenType and TrueType fonts.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype;
+
+import java.awt.Font;
+import java.awt.FontFormatException;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.font.OpenType;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+import java.nio.ByteBuffer;
+import java.text.CharacterIterator;
+import java.util.Locale;
+
+import gnu.java.awt.font.FontDelegate;
+import gnu.java.awt.font.GNUGlyphVector;
+import gnu.java.awt.font.opentype.truetype.TrueTypeScaler;
+
+
+/**
+ * A font that takes its data from OpenType or TrueType font tables.
+ *
+ * <p>OpenType is an extension of the TrueType font format. In addition
+ * to tables for names, kerning or layout, it also stores the shapes
+ * of individual glyphs. Three formats are recognized for glyphs:
+ * Quadratic splines (classic TrueType), cubic splines (PostScript),
+ * and bitmaps.
+ *
+ * @see <a
+ * href="http://partners.adobe.com/asn/tech/type/opentype/">Adobe&#x2019;s
+ * OpenType specification</a>
+ *
+ * @see <a
+ * href="http://developer.apple.com/fonts/TTRefMan/">Apple&#x2019;s</code>
+ * TrueType specification</a>
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public final class OpenTypeFont
+ implements FontDelegate
+{
+ static final int TAG_OTTO = 0x4f54544f; // 'OTTO'
+ static final int TAG_SFNT = 0x73666e74; // 'sfnt'
+ static final int TAG_TRUE = 0x74727565; // 'true'
+ static final int TAG_TTCF = 0x74746366; // 'ttcf'
+ static final int TAG_ZAPF = 0x5a617066; // 'Zapf'
+
+
+ /**
+ * A buffer containing the font data. Note that this may well be an
+ * instance of the subclass MappedByteBuffer, in which case the
+ * virtual memory subsystem can more efficiently handle requests for
+ * font data. This is especially recommended for large font files
+ * that contain many glyphs that are rarely accessed.
+ */
+ ByteBuffer buf;
+
+
+ /**
+ * The number of glyphs in this font.
+ */
+ final int numGlyphs;
+
+ int[] tableTag, tableStart, tableLength;
+
+
+ /**
+ * The version of the font in 16.16 fixed-point encoding, for
+ * example 0x00010000 for version 1.0. There are also two special
+ * version IDs used by fonts for Apple Macintosh, namely 'true'
+ * (0x74727565) and 'typ1'. OpenType fonts sometimes have 'OTTO' as
+ * their version.
+ */
+ private int version;
+
+
+ /**
+ * The number of font units per em. For fonts with TrueType
+ * outlines, this is usually a power of two (such as 2048). For
+ * OpenType fonts with PostScript outlines, other values are
+ * acceptable (such as 1000).
+ */
+ private int unitsPerEm;
+
+
+ /**
+ * A factor to convert font units into ems. This value is <code>1 /
+ * unitsPerEm</code>.
+ */
+ private float emsPerUnit;
+
+
+ /**
+ * The scaler to which the actual scaling work is delegated.
+ */
+ private Scaler scaler;
+
+
+ /**
+ * A delegate object for mapping Unicode UCS-4 codepoints to glyph
+ * IDs.
+ */
+ private CharGlyphMap cmap;
+
+
+ /**
+ * A delegate object for providing a name for each glyph.
+ */
+ private GlyphNamer glyphNamer;
+
+
+ /**
+ * Constructs an OpenType or TrueType font.
+ *
+ * @param buf a buffer with the contents of the font file. It is
+ * recommended to use a <code>MappedByteBuffer</code> for very
+ * large font files.
+ *
+ * @param offsetTablePosition the position of the OpenType offset
+ * table in the font file. The offset table of most OpenType and
+ * TrueType fonts starts at position 0. However, so-called TrueType
+ * Collections support multiple OpenType fonts in a single file,
+ * which allows sharing some glyphs between fonts. If many glyphs
+ * are shared (for example all the Kanji glyphs between multiple
+ * Japanese fonts), the space savings can be considerable. In that
+ * case, the offset table of each individual font would start at its
+ * own position.
+ *
+ * @throws java.awt.FontFormatException if the font data is
+ * not in OpenType or TrueType format.
+ */
+ OpenTypeFont(ByteBuffer buf, int offsetTablePosition)
+ throws FontFormatException
+ {
+ int numTables, searchRange, entrySelector, rangeShift;
+
+ //buf = buf.duplicate();
+ this.buf = buf;
+ buf.limit(buf.capacity());
+ buf.position(offsetTablePosition);
+
+ /* Check that the font data is in a supported format. */
+ version = buf.getInt();
+ switch (version)
+ {
+ case 0x00010000: // Microsoft TrueType
+ case OpenType.TAG_TYP1: // Adobe PostScript embeded in Apple SFNT ('typ1')
+ case TAG_SFNT: // Apple TrueType
+ case TAG_TRUE: // Apple TrueType
+ case TAG_OTTO: // OpenType
+ break;
+
+ default:
+ throw new FontFormatException("not in OpenType or TrueType format");
+ }
+
+ numTables = buf.getShort();
+ searchRange = buf.getShort();
+ entrySelector = buf.getShort();
+ rangeShift = buf.getShort();
+
+ tableTag = new int[numTables];
+ tableStart = new int[numTables];
+ tableLength = new int[numTables];
+ int lastTag = 0;
+ for (int i = 0; i < numTables; i++)
+ {
+ tableTag[i] = buf.getInt();
+ if (lastTag >= tableTag[i])
+ throw new FontFormatException("unordered OpenType table");
+
+ buf.getInt(); // ignore checksum
+ tableStart[i] = buf.getInt();
+ tableLength[i] = buf.getInt();
+
+ //System.out.println(tagToString(tableTag[i]) + ", " + tableLength[i]);
+ }
+
+ ByteBuffer head = getFontTable(OpenType.TAG_HEAD);
+ if ((head.getInt(0) != 0x00010000)
+ || (head.getInt(12) != 0x5f0f3cf5))
+ throw new FontFormatException("unsupported head version");
+
+ unitsPerEm = head.getChar(18);
+ emsPerUnit = 1.0f / (float) unitsPerEm;
+
+
+ ByteBuffer maxp = getFontTable(OpenType.TAG_MAXP);
+ int maxpVersion = maxp.getInt(0);
+ switch (maxpVersion)
+ {
+ case 0x00005000: /* version 0.5, with wrong fractional part */
+ numGlyphs = maxp.getChar(4);
+ break;
+
+ case 0x00010000: /* version 1.0 */
+ numGlyphs = maxp.getChar(4);
+ scaler = new TrueTypeScaler(unitsPerEm,
+ getFontTable(OpenType.TAG_HHEA),
+ getFontTable(OpenType.TAG_HMTX),
+ getFontTable(OpenType.TAG_VHEA),
+ getFontTable(OpenType.TAG_VMTX),
+ maxp,
+ getFontTable(OpenType.TAG_CVT),
+ getFontTable(OpenType.TAG_FPGM),
+ /* loca format */ head.getShort(50),
+ getFontTable(OpenType.TAG_LOCA),
+ getFontTable(OpenType.TAG_GLYF),
+ getFontTable(OpenType.TAG_PREP));
+ break;
+
+ default:
+ throw new FontFormatException("unsupported maxp version");
+ }
+ }
+
+
+ /**
+ * Determines the index of a table into the offset table. The
+ * result can be used to find the offset and length of a table, as
+ * in <code>tableStart[getTableIndex(TAG_NAME)]</code>.
+ *
+ * @param tag the table identifier, for instance
+ * <code>OpenType.TAG_NAME</code>.
+ *
+ * @return the index of that table into the offset table, or
+ * -1 if the font does not contain the table specified by
+ * <code>tag</code>.
+ */
+ private int getTableIndex(int tag)
+ {
+ /* FIXME: Since the font specification requires tableTag[] to be
+ * ordered, one should do binary search here.
+ */
+ for (int i = 0; i < tableTag.length; i++)
+ if (tableTag[i] == tag)
+ return i;
+ return -1;
+ }
+
+
+
+ /**
+ * Returns the name of the family to which this font face belongs,
+ * for example <i>&#x201c;Univers&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the family name.
+ */
+ public synchronized String getFamilyName(Locale locale)
+ {
+ String name;
+
+ if (locale == null)
+ locale = Locale.getDefault();
+
+ name = getName(NameDecoder.NAME_FAMILY, locale);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FAMILY, Locale.ENGLISH);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FAMILY, /* any language */ null);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FULL, locale);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FULL, /* any language */ null);
+ return name;
+ }
+
+
+ /**
+ * Returns the name of this font face inside the family, for example
+ * <i>&#x201c;Light&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the name of the face inside its family.
+ */
+ public synchronized String getSubFamilyName(Locale locale)
+ {
+ String name;
+
+ if (locale == null)
+ locale = Locale.getDefault();
+
+ name = getName(NameDecoder.NAME_SUBFAMILY, locale);
+ if (name == null)
+ {
+ name = getName(NameDecoder.NAME_SUBFAMILY, Locale.ENGLISH);
+ if ("Regular".equals(name))
+ name = null;
+ }
+
+ if (name == null)
+ {
+ String lang = locale.getLanguage();
+ if ("de".equals(lang))
+ name = "Standard";
+ else if ("fr".equals(lang))
+ name = "Standard";
+ else if ("it".equals(lang))
+ name = "Normale";
+ else if ("nl".equals(lang))
+ name = "Normaal";
+ else if ("fi".equals(lang))
+ name = "Normaali";
+ else if ("sv".equals(lang))
+ name = "Normal";
+ else
+ name = "Regular";
+ }
+
+ return name;
+ }
+
+
+
+ /**
+ * Returns the full name of this font face, for example
+ * <i>&#x201c;Univers Light&#x201d;</i>.
+ *
+ * @param locale the locale for which to localize the name.
+ *
+ * @return the face name.
+ */
+ public synchronized String getFullName(Locale locale)
+ {
+ String name;
+
+ if (locale == null)
+ locale = Locale.getDefault();
+
+ name = getName(NameDecoder.NAME_FULL, locale);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FULL, Locale.ENGLISH);
+ if (name == null)
+ name = getName(NameDecoder.NAME_FULL, /* any language */ null);
+
+ return name;
+ }
+
+
+ /**
+ * Returns the PostScript name of this font face, for example
+ * <i>&#x201c;Univers-Light&#x201d;</i>.
+ *
+ * @return the PostScript name, or <code>null</code> if the font
+ * does not provide a PostScript name.
+ */
+ public synchronized String getPostScriptName()
+ {
+ return getName(NameDecoder.NAME_POSTSCRIPT, /* any language */ null);
+ }
+
+
+ /**
+ * Returns the number of glyphs in this font face.
+ */
+ public int getNumGlyphs()
+ {
+ /* No synchronization is needed because the number of glyphs is
+ * set in the constructor, and it cannot change during the
+ * lifetime of the object.
+ */
+ return numGlyphs;
+ }
+
+
+ /**
+ * Returns the index of the glyph which gets displayed if the font
+ * cannot map a Unicode code point to a glyph. Many fonts show this
+ * glyph as an empty box.
+ */
+ public int getMissingGlyphCode()
+ {
+ /* No synchronization is needed because the result is constant. */
+ return 0;
+ }
+
+
+ /**
+ * The font&#x2019;s name table, or <code>null</code> if this
+ * table has not yet been accessed.
+ */
+ private ByteBuffer nameTable;
+
+
+ /**
+ * Extracts a String from the font&#x2019;s name table.
+ *
+ * @param name the numeric TrueType or OpenType name ID.
+ *
+ * @param locale the locale for which names shall be localized, or
+ * <code>null</code> if the locale does mot matter because the name
+ * is known to be language-independent (for example, because it is
+ * the PostScript name).
+ */
+ private String getName(int name, Locale locale)
+ {
+ if (nameTable == null)
+ nameTable = getFontTable(OpenType.TAG_NAME);
+ return NameDecoder.getName(nameTable, name, locale);
+ }
+
+
+ /**
+ * Returns the version of the font.
+ *
+ * @see java.awt.font.OpenType#getVersion
+ *
+ * @return the version in 16.16 fixed-point encoding, for example
+ * 0x00010000 for version 1.0.
+ */
+ public int getVersion()
+ {
+ /* No synchronization is needed because the version is set in the
+ * constructor, and it cannot change during the lifetime of the
+ * object.
+ */
+ return version;
+ }
+
+
+ /**
+ * Creates a view buffer for an OpenType table. The caller can
+ * access the returned buffer without needing to synchronize access
+ * from multiple threads.
+ *
+ * @param tag the table identifier, for example
+ * <code>OpenType.GLYF</code>.
+ *
+ * @return a slice of the underlying buffer containing the table, or
+ * <code>null</code> if the font does not contain the requested
+ * table.
+ */
+ public synchronized ByteBuffer getFontTable(int tag)
+ {
+ int index, start, len;
+ ByteBuffer result;
+
+ index = getTableIndex(tag);
+ if (index < 0)
+ return null;
+
+ start = tableStart[index];
+ len = tableLength[index];
+ buf.limit(start + len).position(start);
+ result = buf.slice();
+ result.limit(len);
+ return result;
+ }
+
+
+ /**
+ * Returns the size of one of the tables in the font,
+ * or -1 if the table does not exist.
+ */
+ public int getFontTableSize(int tag)
+ {
+ int index = getTableIndex(tag);
+ if (index == -1)
+ return index;
+ return tableLength[index];
+ }
+
+
+ private CharGlyphMap getCharGlyphMap()
+ {
+ if (cmap != null)
+ return cmap;
+
+ synchronized (this)
+ {
+ if (cmap == null)
+ {
+ int index = getTableIndex(OpenType.TAG_CMAP);
+ int start = tableStart[index];
+ buf.limit(start + tableLength[index]).position(start);
+ cmap = CharGlyphMap.forTable(buf);
+ }
+ return cmap;
+ }
+ }
+
+
+
+ /**
+ * Looks up a glyph in the font&#x2019;s <code>cmap</code> tables,
+ * without performing any glyph substitution or reordering. Because
+ * of this limitation, this method cannot be used for script systems
+ * that need advanced glyph mapping, such as Arabic, Korean, or even
+ * Latin with exotic accents.
+ *
+ * <p>It is safe to call this method from any thread.
+ *
+ * @param ucs4 the Unicode codepoint in the 32-bit Unicode character
+ * set UCS-4. Because UTF-16 surrogates do not correspond to a single
+ * glyph, it does not make sense to pass them here.
+ *
+ * @return the glyph index, or zero if the font does not contain
+ * a glyph for the specified codepoint.
+ */
+ public int getGlyph(int ucs4)
+ {
+ return getCharGlyphMap().getGlyph(ucs4);
+ }
+
+
+ /**
+ * Creates a GlyphVector by mapping each character in a
+ * CharacterIterator to the corresponding glyph.
+ *
+ * <p>The mapping takes only the font&#x2019;s <code>cmap</code>
+ * tables into consideration. No other operations (such as glyph
+ * re-ordering, composition, or ligature substitution) are
+ * performed. This means that the resulting GlyphVector will not be
+ * correct for text in languages that have complex
+ * character-to-glyph mappings, such as Arabic, Hebrew, Hindi, or
+ * Thai.
+ *
+ * @param font the font object that the created GlyphVector
+ * will return when it gets asked for its font. This argument is
+ * needed because the public API works with java.awt.Font,
+ * not with some private delegate like OpenTypeFont.
+ *
+ * @param frc the font rendering parameters that are used for
+ * measuring glyphs. The exact placement of text slightly depends on
+ * device-specific characteristics, for instance the device
+ * resolution or anti-aliasing. For this reason, any measurements
+ * will only be accurate if the passed
+ * <code>FontRenderContext</code> correctly reflects the relevant
+ * parameters. Hence, <code>frc</code> should be obtained from the
+ * same <code>Graphics2D</code> that will be used for drawing, and
+ * any rendering hints should be set to the desired values before
+ * obtaining <code>frc</code>.
+ *
+ * @param ci a CharacterIterator for iterating over the
+ * characters to be displayed.
+ */
+ public synchronized GlyphVector createGlyphVector(Font font,
+ FontRenderContext frc,
+ CharacterIterator ci)
+ {
+ CharGlyphMap cmap;
+ int numGlyphs;
+ int[] glyphs;
+ int glyph;
+ int c;
+
+ cmap = getCharGlyphMap();
+ numGlyphs = ci.getEndIndex() - ci.getBeginIndex();
+ glyphs = new int[numGlyphs];
+ glyph = 0;
+ for (c = ci.first(); c != CharacterIterator.DONE; c = ci.next())
+ {
+ /* handle surrogate pairs */
+ if (c >> 10 == 0x36) // U+D800 .. U+DBFF: High surrogate
+ c = (((c & 0x3ff) << 10) | (ci.next() & 0x3ff)) + 0x10000;
+ glyphs[glyph] = cmap.getGlyph(c);
+ glyph += 1;
+ }
+
+ /* If we had surrogates, the allocated array is too large.
+ * Because this will occur very rarely, it seems acceptable to
+ * re-allocate a shorter array and copy the contents around.
+ */
+ if (glyph != numGlyphs)
+ {
+ int[] newGlyphs = new int[glyph];
+ System.arraycopy(glyphs, 0, newGlyphs, 0, glyph);
+ glyphs = newGlyphs;
+ }
+
+ return new GNUGlyphVector(this, font, frc, glyphs);
+ }
+
+
+
+ /**
+ * Determines the advance width for a glyph.
+ *
+ * @param glyphIndex the glyph whose advance width is to be
+ * determined.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @param advance a point whose <code>x</code> and <code>y</code>
+ * fields will hold the advance in each direction. It is possible
+ * that both values are non-zero, for example if
+ * <code>transform</code> is a rotation, or in the case of Urdu
+ * fonts.
+ */
+ public synchronized void getAdvance(int glyphIndex,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal,
+ Point2D advance)
+ {
+ /* Delegate the measurement to the scaler. The synchronization is
+ * needed because the scaler is not synchronized.
+ */
+ scaler.getAdvance(glyphIndex, pointSize, transform,
+ antialias, fractionalMetrics, horizontal,
+ advance);
+ }
+
+
+ /**
+ * Returns the shape of a glyph.
+ *
+ * @param glyph the glyph whose advance width is to be determined
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts, this
+ * parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional
+ * metrics, <code>false</code> for rounding the result to a pixel
+ * boundary.
+ *
+ * @return the scaled and grid-fitted outline of the specified
+ * glyph, or <code>null</code> for bitmap fonts.
+ */
+ public synchronized GeneralPath getGlyphOutline(int glyph,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics)
+ {
+ /* The synchronization is needed because the scaler is not
+ * synchronized.
+ */
+ return scaler.getOutline(glyph, pointSize, transform,
+ antialias, fractionalMetrics);
+ }
+
+
+ /**
+ * Returns a name for the specified glyph. This is useful for
+ * generating PostScript or PDF files that embed some glyphs of a
+ * font.
+ *
+ * <p><b>Names are not unique:</b> Under some rare circumstances,
+ * the same name can be returned for different glyphs. It is
+ * therefore recommended that printer drivers check whether the same
+ * name has already been returned for antoher glyph, and make the
+ * name unique by adding the string ".alt" followed by the glyph
+ * index.</p>
+ *
+ * <p>This situation would occur for an OpenType or TrueType font
+ * that has a <code>post</code> table of format 3 and provides a
+ * mapping from glyph IDs to Unicode sequences through a
+ * <code>Zapf</code> table. If the same sequence of Unicode
+ * codepoints leads to different glyphs (depending on contextual
+ * position, for example, or on typographic sophistication level),
+ * the same name would get synthesized for those glyphs.
+ *
+ * @param glyphIndex the glyph whose name the caller wants to
+ * retrieve.
+ */
+ public synchronized String getGlyphName(int glyphIndex)
+ {
+ if (glyphNamer == null)
+ glyphNamer = GlyphNamer.forTables(numGlyphs,
+ getFontTable(OpenType.TAG_POST),
+ getFontTable(TAG_ZAPF));
+
+ return glyphNamer.getGlyphName(glyphIndex);
+ }
+
+
+ /**
+ * Determines the distance between the base line and the highest
+ * ascender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the ascent, which usually is a positive number.
+ */
+ public synchronized float getAscent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal)
+ {
+ return scaler.getAscent(pointSize, transform,
+ antialiased, fractionalMetrics,
+ horizontal);
+ }
+
+
+ /**
+ * Determines the distance between the base line and the lowest
+ * descender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the descent, which usually is a nagative number.
+ */
+ public synchronized float getDescent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal)
+ {
+ return scaler.getDescent(pointSize, transform,
+ antialiased, fractionalMetrics,
+ horizontal);
+ }
+
+
+ /**
+ * Converts a four-byte tag identifier into a String that can be
+ * displayed when debugging this class.
+ *
+ * @param tag the tag as an <code>int</code>.
+ *
+ * @return the tag in human-readable form, for example
+ * <code>name</code> or <code>glyf</code>.
+ */
+ static String tagToString(int tag)
+ {
+ char[] c = new char[4];
+ c[0] = (char) ((tag >> 24) & 0xff);
+ c[1] = (char) ((tag >> 16) & 0xff);
+ c[2] = (char) ((tag >> 8) & 0xff);
+ c[3] = (char) (tag & 0xff);
+ return new String(c);
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java b/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java
new file mode 100644
index 0000000..3a00dfb
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java
@@ -0,0 +1,140 @@
+/* OpenTypeFontFactory.java -- Creates OpenType and TrueType fonts.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype;
+
+import gnu.java.awt.font.FontDelegate;
+import java.awt.FontFormatException;
+import java.awt.font.OpenType;
+import java.nio.ByteBuffer;
+
+
+/**
+ * A factory for creating fonts that are stored in an
+ * <i>sfnt</i>-housed format, for example OpenType or TrueType.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public final class OpenTypeFontFactory
+{
+ /**
+ * The constructor is private so nobody can construct an instance
+ * of this class.
+ */
+ private OpenTypeFontFactory()
+ {
+ }
+
+
+ /**
+ * Creates FontDelegate objects for the fonts in the specified
+ * buffer. The following font formats are currently recognized:
+ *
+ * <p><ul>
+ * <li>OpenType (*.otf);</li>
+ * <li>TrueType (*.ttf);</li>
+ * <li>TrueType Collections (*.ttc);</li>
+ * <li>Apple MacOS X data-fork font (*.dfont).</li></ul>
+ *
+ * <p>Some formats may contain more than a single font, for example
+ * *.ttc and *.dfont files. This is the reason why this function
+ * returns an array.
+ *
+ * <p>The implementation reads data from the buffer only when
+ * needed. Therefore, it greatly increases efficiency if
+ * <code>buf</code> has been obtained through mapping a file into
+ * the virtual address space.
+ *
+ * @throws FontFormatException if the font data is not in one of the
+ * known formats.
+ */
+ public static FontDelegate[] createFonts(ByteBuffer buf)
+ throws FontFormatException
+ {
+ OpenTypeFont[] fonts;
+ int version;
+
+ version = buf.getInt(0);
+ switch (version)
+ {
+ case 0x00010000: // Microsoft Windows TrueType
+ case OpenType.TAG_TYP1: // Apple MacOS PostScript ('typ1')
+ case OpenTypeFont.TAG_SFNT: // Apple MacOS TrueType ('sfnt')
+ case OpenTypeFont.TAG_TRUE: // Apple MacOS TrueType ('true')
+ case OpenTypeFont.TAG_OTTO: // OpenType
+ return new OpenTypeFont[] { new OpenTypeFont(buf, 0) };
+ }
+
+
+ /* TrueType Collection, see "TrueType Collections" in
+ * http://partners.adobe.com/asn/tech/type/opentype/otff.html
+ */
+ if (version == OpenTypeFont.TAG_TTCF)
+ {
+ // This code has never been tested.
+ fonts = new OpenTypeFont[buf.getInt(8)];
+ for (int i = 0; i < fonts.length; i++)
+ fonts[i] = new OpenTypeFont(buf, buf.getInt(16 + 4 * i));
+ return fonts;
+ }
+
+
+ /* The MacOS X .dfont format is a Macintosh resource fork in
+ * a normal file, contaning one or several 'sfnt' resources.
+ * Unfortunately, MacOS resource forks have no magic code
+ * that could be used for identification. Instead, we just try
+ * to extract at least one 'sfnt'.
+ */
+ try
+ {
+ MacResourceFork fork = new MacResourceFork(buf);
+ MacResourceFork.Resource[] rsrc;
+
+ rsrc = fork.getResources(OpenTypeFont.TAG_SFNT);
+ fonts = new OpenTypeFont[rsrc.length];
+ for (int i = 0; i < fonts.length; i++)
+ fonts[i] = new OpenTypeFont(rsrc[i].getContent(), 0);
+
+ return fonts;
+ }
+ catch (Exception ex)
+ {
+ }
+
+ throw new FontFormatException("not in OpenType or TrueType format");
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/Scaler.java b/libjava/classpath/gnu/java/awt/font/opentype/Scaler.java
new file mode 100644
index 0000000..499c3ea
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/Scaler.java
@@ -0,0 +1,192 @@
+/* Scaler.java -- Common superclass for font scalers.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * An common superclass for all font scalers. The main task of font
+ * scaler is to retrieve a scaled and hinted outline for a glyph.
+ *
+ * <p>To make text more legible, high-quality fonts contain
+ * instructions (sometimes also called &#x201c;hints&#x201d;) for
+ * moving the scaled control points towards the coordinate grid of the
+ * display device.
+ *
+ * <p><b>Lack of Thread Safety:</b> Font scalers are intentionally
+ * <i>not</i> safe to access from multiple concurrent
+ * threads. Synchronization needs to be performed externally. Usually,
+ * the font that uses this scaler already has obtained a lock before
+ * calling the scaler.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public abstract class Scaler
+{
+ /**
+ * Retrieves the scaled outline of a glyph, adjusting control points
+ * to the raster grid if necessary.
+ *
+ * @param glyph the glyph number whose outline is retrieved.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias whether or not the rasterizer will perform
+ * anti-aliasing on the returned path.
+ *
+ * @param fractionalMetrics <code>false</code> for adjusting glyph
+ * positions to the raster grid of device space.
+ *
+ * @return the scaled and grid-fitted outline of the specified
+ * glyph, or <code>null</code> for bitmap fonts.
+ */
+ public abstract GeneralPath getOutline(int glyph,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics);
+
+
+ /**
+ * Determines the advance width and height for a glyph.
+ *
+ * @param glyphIndex the glyph whose advance width is to be
+ * determined.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @param advance a point whose <code>x</code> and <code>y</code>
+ * fields will hold the advance in each direction. It is well
+ * possible that both values are non-zero, for example for rotated
+ * text or for Urdu fonts.
+ */
+ public abstract void getAdvance(int glyphIndex,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal,
+ Point2D advance);
+
+
+ /**
+ * Determines the distance between the base line and the highest
+ * ascender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the ascent, which usually is a positive number.
+ */
+ public abstract float getAscent(float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal);
+
+
+ /**
+ * Determines the distance between the base line and the lowest
+ * descender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the descent, which usually is a nagative number.
+ */
+ public abstract float getDescent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal);
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/Fixed.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/Fixed.java
new file mode 100644
index 0000000..5d81c5d
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/Fixed.java
@@ -0,0 +1,161 @@
+/* Fixed.java -- Fixed-point arithmetics for TrueType coordinates.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font.opentype.truetype;
+
+
+/**
+ * A utility class for fixed-point arithmetics, where numbers are
+ * represented with 26 dot 6 digits. This representation is used by
+ * TrueType coordinates.
+ *
+ * <p>A good compiler will inline calls of methods in this class.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class Fixed
+{
+ public static final int ONE = 1<<6;
+
+
+ /**
+ * The constructor is private so nobody can use it.
+ */
+ private Fixed()
+ {
+ }
+
+
+ /**
+ * Multiplies two fixed-point numbers.
+ */
+ public static int mul(int a, int b)
+ {
+ return (int) ((((long) a) * b) >> 6);
+ }
+
+
+ public static int div(int a, int b)
+ {
+ return (int) ((((long) a) << 6) / b);
+ }
+
+
+
+ public static int ceil(int a)
+ {
+ return (a + 63) & -64;
+ }
+
+
+ public static int floor(int a)
+ {
+ return a & -64;
+ }
+
+
+ /**
+ * Calculates the length of a fixed-point vector.
+ */
+ public static int vectorLength(int x, int y)
+ {
+ int shift;
+ float fx, fy;
+
+ if (x == 0)
+ return Math.abs(y);
+ else if (y == 0)
+ return Math.abs(x);
+
+ /* Use the FPU. */
+ fx = ((float) x) / 64.0f;
+ fy = ((float) y) / 64.0f;
+ return (int) (Math.sqrt(fx * fx + fy * fy) * 64.0);
+ }
+
+
+ public static int intValue(int f)
+ {
+ return f >> 6;
+ }
+
+
+ public static float floatValue(int f)
+ {
+ return ((float) f) / 64;
+ }
+
+
+ public static double doubleValue(int f)
+ {
+ return ((double) f) / 64;
+ }
+
+
+ public static int valueOf(float f)
+ {
+ return (int) (f * 64);
+ }
+
+
+ public static int valueOf(double d)
+ {
+ return (int) (d * 64);
+ }
+
+
+ /**
+ * Makes a string representation of a fixed-point number.
+ */
+ public static String toString(int f)
+ {
+ return String.valueOf(floatValue(f));
+ }
+
+
+ public static String toString(int x, int y)
+ {
+ StringBuffer sbuf = new StringBuffer(40);
+ sbuf.append('(');
+ sbuf.append(((float) x) / 64);
+ sbuf.append(", ");
+ sbuf.append(((float) y) / 64);
+ sbuf.append(')');
+ return sbuf.toString();
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java
new file mode 100644
index 0000000..b12d778
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java
@@ -0,0 +1,437 @@
+/* GlyphLoader.java -- Helper for loading TrueType glyph outlines.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.geom.AffineTransform;
+import java.nio.ByteBuffer;
+
+
+/**
+ * A class for loading scaled and hinted glyph outlines.
+ *
+ * <p><b>Lack of Thread Safety:</b> Glyph loaders are intentionally
+ * <i>not</i> safe to access from multiple concurrent
+ * threads. Synchronization needs to be performed externally. Usually,
+ * the font has already obtained a lock before calling the scaler,
+ * which in turn calls the GlyphLoader. It would thus be wasteful to
+ * acquire additional locks for the GlyphLoader.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class GlyphLoader
+{
+ /**
+ * A helper object for locating glyph data. GlyphLocator is an
+ * abstract superclass, and there is a concretization for each glyph
+ * location table ('loca') format.
+ */
+ private final GlyphLocator glyphLocator;
+
+
+ /**
+ * A helper object for measuring the advance width and height of a
+ * glyph.
+ */
+ private final GlyphMeasurer glyphMeasurer;
+
+
+ /**
+ * The virtual machine for executing TrueType bytecodes.
+ */
+ private final VirtualMachine vm;
+
+
+ /**
+ * The number of font units in one em. A typical value is 2048,
+ * but this depends on the font.
+ */
+ private final int unitsPerEm;
+
+ private final int[] contourEndPoints;
+ private final byte[] pointFlags;
+
+
+ /**
+ * Constructs a GlyphLoader.
+ */
+ GlyphLoader(GlyphLocator glyphLocator, VirtualMachine vm,
+ int unitsPerEm, int maxContours, int maxPoints,
+ GlyphMeasurer glyphMeasurer)
+ {
+ this.glyphLocator = glyphLocator;
+ this.glyphMeasurer = glyphMeasurer;
+ this.unitsPerEm = unitsPerEm;
+ this.vm = vm;
+
+ contourEndPoints = new int[maxContours];
+ pointFlags = new byte[maxPoints];
+ }
+
+
+ /**
+ * @param glyphIndex the number of the glyph whose outlines are to be
+ * retrieved.
+ */
+ public void loadGlyph(int glyphIndex,
+ double pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ Zone glyphZone)
+ {
+ glyphZone.setNumPoints(4);
+ loadSubGlyph(glyphIndex, pointSize, transform, antialias, glyphZone,
+ 0, 0);
+ }
+
+
+ private void loadSubGlyph(int glyphIndex,
+ double pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ Zone glyphZone,
+ int preTranslateX,
+ int preTranslateY)
+ {
+ ByteBuffer glyph;
+ int numContours;
+ int xMin, yMin, xMax, yMax;
+ byte flag;
+
+ glyph = glyphLocator.getGlyphData(glyphIndex);
+
+ if (glyph == null)
+ {
+ glyphZone.setNumPoints(4);
+ setPhantomPoints(glyphIndex, 0, glyphZone);
+ glyphZone.transform(pointSize, transform, unitsPerEm,
+ preTranslateX, preTranslateY);
+ return;
+ }
+
+ numContours = glyph.getShort();
+ xMin = glyph.getChar();
+ yMin = glyph.getChar();
+ xMax = glyph.getChar();
+ yMax = glyph.getChar();
+
+
+ if (numContours >= 0)
+ loadSimpleGlyph(glyphIndex, pointSize, transform, antialias,
+ numContours, glyph, glyphZone,
+ preTranslateX, preTranslateY);
+ else
+ loadCompoundGlyph(glyphIndex, pointSize, transform, antialias,
+ glyph, glyphZone,
+ preTranslateX, preTranslateY);
+ }
+
+
+ private void loadSimpleGlyph(int glyphIndex,
+ double pointSize, AffineTransform transform,
+ boolean antialias,
+ int numContours, ByteBuffer glyph,
+ Zone glyphZone,
+ int preTranslateX, int preTranslateY)
+ {
+ int numPoints;
+ int posInstructions, numInstructions;
+ boolean execInstructions;
+
+ execInstructions = vm.setup(pointSize, transform, antialias);
+
+ /* Load the contour end points and determine the number of
+ * points.
+ */
+ for (int i = 0; i < numContours; i++)
+ contourEndPoints[i] = glyph.getChar();
+ if (numContours > 0)
+ numPoints = 1 + contourEndPoints[numContours - 1];
+ else
+ numPoints = 0;
+ glyphZone.setNumPoints(numPoints + 4);
+
+ numInstructions = glyph.getChar();
+ posInstructions = glyph.position();
+ glyph.position(posInstructions + numInstructions);
+ loadFlags(numPoints, glyph);
+ loadCoordinates(numPoints, glyph, glyphZone);
+ for (int i = 0; i < numContours; i++)
+ glyphZone.setContourEnd(contourEndPoints[i], true);
+
+ setPhantomPoints(glyphIndex, numPoints, glyphZone);
+ glyphZone.transform(pointSize, transform, unitsPerEm,
+ preTranslateX, preTranslateY);
+
+ if (execInstructions)
+ {
+ // FIXME: Hint the glyph.
+ }
+ }
+
+
+ private static final short ARGS_ARE_WORDS = 1;
+ private static final short ARGS_ARE_XY_VALUES = 2;
+ private static final short ROUND_XY_TO_GRID = 4;
+ private static final short WE_HAVE_A_SCALE = 8;
+ private static final short MORE_COMPONENTS = 32;
+ private static final short WE_HAVE_AN_X_AND_Y_SCALE = 64;
+ private static final short WE_HAVE_A_TWO_BY_TWO = 128;
+ private static final short WE_HAVE_INSTRUCTIONS = 256;
+ private static final short USE_MY_METRICS = 512;
+ private static final short OVERLAP_COMPOUND = 1024;
+ private static final short SCALED_COMPONENT_OFFSET = 2048;
+ private static final short UNSCALED_COMPONENT_OFFSET = 4096;
+
+ private void loadCompoundGlyph(int glyphIndex,
+ double pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ ByteBuffer glyph,
+ Zone glyphZone,
+ int preTranslateX, int preTranslateY)
+ {
+ short flags;
+ int subGlyphIndex;
+ int metricsGlyphIndex;
+ Zone subGlyphZone = new Zone(glyphZone.getCapacity());
+ int arg1, arg2;
+ double a, b, c, d, e, f;
+ AffineTransform componentTransform = new AffineTransform();
+
+ /* By default, use the metrics of the compound glyph. The default
+ * is overridden if some component glyph has the USE_MY_METRICS
+ * flag set.
+ */
+ metricsGlyphIndex = glyphIndex;
+
+ do
+ {
+ flags = glyph.getShort();
+ subGlyphIndex = glyph.getChar();
+
+ if ((flags & USE_MY_METRICS) != 0)
+ metricsGlyphIndex = subGlyphIndex;
+
+ if ((flags & ARGS_ARE_WORDS) != 0)
+ {
+ arg1 = glyph.getShort();
+ arg2 = glyph.getShort();
+ }
+ else
+ {
+ arg1 = glyph.get();
+ arg2 = glyph.get();
+ }
+
+ if ((flags & WE_HAVE_A_SCALE) != 0)
+ {
+ a = d = getDouble214(glyph);
+ b = c = 0.0;
+ }
+ else if ((flags & WE_HAVE_AN_X_AND_Y_SCALE) != 0)
+ {
+ a = getDouble214(glyph);
+ d = getDouble214(glyph);
+ b = c = 0.0;
+ }
+ else if ((flags & WE_HAVE_A_TWO_BY_TWO) != 0)
+ {
+ a = getDouble214(glyph);
+ b = getDouble214(glyph);
+ c = getDouble214(glyph);
+ d = getDouble214(glyph);
+ }
+ else
+ {
+ a = d = 1.0;
+ b = c = 0.0;
+ }
+
+ double m = Math.max(Math.abs(a), Math.abs(b));
+ double n = Math.max(Math.abs(c), Math.abs(d));
+
+ /* The Apple TrueType specification actually says that m is
+ * multiplied by two if
+ *
+ * abs(abs(a) - abs(c)) <= 33/65536,
+ *
+ * but this is probably a typo. On 2003-07-23, Sascha Brawer
+ * wrote an e-mail message to applefonts@apple.com, asking
+ * whether this might possibly be an error in the specification.
+ */
+ if (Math.abs(Math.abs(a) - Math.abs(b)) <= 33.0/65536.0)
+ m = m * 2;
+
+ if (Math.abs(Math.abs(c) - Math.abs(d)) <= 33.0/65536.0)
+ n = n * 2;
+
+ if ((flags & ARGS_ARE_XY_VALUES) != 0)
+ {
+ e = m * arg1;
+ f = n * arg2;
+ }
+ else
+ e = f = 0.0;
+
+ componentTransform.setTransform(a, b, c, d, 0.0, 0.0);
+
+ // System.out.println("componentTransform = " + componentTransform
+ // + ", e=" + e + ", f=" + f);
+ componentTransform.concatenate(transform);
+
+ int pos = glyph.position();
+ int lim = glyph.limit();
+
+ loadSubGlyph(subGlyphIndex, pointSize, componentTransform,
+ antialias, subGlyphZone,
+ Math.round((float) e + preTranslateX),
+ Math.round(-((float) f + preTranslateY)));
+ glyphZone.combineWithSubGlyph(subGlyphZone, 4);
+ glyph.limit(lim).position(pos);
+ }
+ while ((flags & MORE_COMPONENTS) != 0);
+
+ setPhantomPoints(metricsGlyphIndex, glyphZone.getSize() - 4, glyphZone);
+ }
+
+
+ private double getDouble214(ByteBuffer buf)
+ {
+ return ((double) buf.getShort()) / (1 << 14);
+ }
+
+
+ /**
+ * Loads the per-point flags of a glyph into the
+ * <code>pointFlags</code> field.
+ */
+ private void loadFlags(int numPoints, ByteBuffer glyph)
+ {
+ byte flag;
+ int numRepetitions;
+
+ for (int i = 0; i < numPoints; i++)
+ {
+ pointFlags[i] = flag = glyph.get();
+ if ((flag & 8) != 0)
+ {
+ numRepetitions = ((int) glyph.get()) & 0xff;
+ while (numRepetitions > 0)
+ {
+ pointFlags[++i] = flag;
+ --numRepetitions;
+ }
+ }
+ }
+ }
+
+
+ private void loadCoordinates(int numPoints, ByteBuffer glyph,
+ Zone glyphZone)
+ {
+ int x, y;
+ byte flag;
+
+ x = 0;
+ for (int i = 0; i < numPoints; i++)
+ {
+ flag = pointFlags[i];
+ if ((flag & 2) == 0)
+ {
+ if ((flag & 16) == 0)
+ x += glyph.getShort();
+ }
+ else
+ {
+ if ((flag & 16) != 0)
+ x += (glyph.get() & 0xff);
+ else
+ x -= (glyph.get() & 0xff);
+ }
+ glyphZone.setOriginalX(i, x);
+ glyphZone.setOnCurve(i, (flag & 1) == 1);
+ }
+
+ y = 0;
+ for (int i = 0; i < numPoints; i++)
+ {
+ flag = pointFlags[i];
+ if ((flag & 4) == 0)
+ {
+ if ((flag & 32) == 0)
+ y += glyph.getShort();
+ }
+ else
+ {
+ if ((flag & 32) != 0)
+ y += (glyph.get() & 0xff);
+ else
+ y -= (glyph.get() & 0xff);
+ }
+ glyphZone.setOriginalY(i, -y);
+ }
+ }
+
+
+ private void setPhantomPoints(int glyphIndex, int numPoints,
+ Zone glyphZone)
+ {
+ /* Phantom point 0: Character origin. */
+ glyphZone.setOriginalX(numPoints, 0);
+ glyphZone.setOriginalY(numPoints, 0);
+
+ /* Phantom point 1: Horizontal advance point. */
+ glyphZone.setOriginalX(numPoints + 1,
+ glyphMeasurer.getAdvanceWidth(glyphIndex, true));
+ glyphZone.setOriginalY(numPoints + 1,
+ glyphMeasurer.getAdvanceHeight(glyphIndex, true));
+
+ /* Phantom point 2: Vertical origin. */
+ int vertX = glyphMeasurer.getAscent(/* vertical */ false);
+ int vertY = glyphMeasurer.getAscent(/* horizontal */ true);
+ glyphZone.setOriginalX(numPoints + 2, vertX);
+ glyphZone.setOriginalY(numPoints + 2, vertY);
+
+ /* Phantom point 3: Vertical advance point. */
+ glyphZone.setOriginalX(numPoints + 3,
+ vertX + glyphMeasurer.getAdvanceWidth(glyphIndex, false));
+ glyphZone.setOriginalY(numPoints + 3,
+ vertY + glyphMeasurer.getAdvanceHeight(glyphIndex, false));
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java
new file mode 100644
index 0000000..a2db8ac
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java
@@ -0,0 +1,187 @@
+/* GlyphLocator.java -- Locates outlines of TrueType glyphs.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.FontFormatException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.IntBuffer;
+
+
+/**
+ * Locates glyph outlines in a TrueType or OpenType <code>glyf</code>
+ * table.
+ *
+ * @see <a href=
+ * "http://partners.adobe.com/asn/tech/type/opentype/loca.html"
+ * >Adobe&#x2019;s specification of the OpenType &#x2018;loca&#x2019;
+ * table</a>
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+abstract class GlyphLocator
+{
+ /**
+ * The actual glyph data of the font, which is contained in the
+ * 'glyf' table.
+ */
+ protected ByteBuffer glyfTable;
+
+
+ /**
+ * Creates a new GlyphLocator for a <code>loca</code> table.
+ *
+ * @param format the format of the <code>loca</code> table. The
+ * value must be 0 for two-byte offsets, or 1 for four-byte
+ * offsets. TrueType and OpenType fonts indicate the format in the
+ * <code>indexToLoc</code> field of the <a href=
+ * "http://partners.adobe.com/asn/tech/type/opentype/head.html"
+ * >font header</a>.
+ *
+ * @param loca the <code>loca</code> table of the font, which
+ * contains the position of each glyph in the <code>glyf</code>
+ * table.
+ *
+ * @param glyf the <code>glyf</code> table of the font, which
+ * contains the outline data of each glyph.
+ *
+ * @throws FontFormatException if <code>format</code> is neither 0
+ * nor 1.
+ */
+ public static GlyphLocator forTable(int format, ByteBuffer loca,
+ ByteBuffer glyf)
+ throws FontFormatException
+ {
+ switch (format)
+ {
+ case 0:
+ return new GlyphLocator.TwoByte(loca, glyf);
+
+ case 1:
+ return new GlyphLocator.FourByte(loca, glyf);
+
+ default:
+ throw new FontFormatException("unsupported loca format");
+ }
+ }
+
+
+ /**
+ * Locates the outline data for a glyph.
+ *
+ * <p>For efficiency, the glyph locator does not create a new buffer
+ * for each invocation. Instead, this method always returns the same
+ * buffer object. Therefore, the data of a glyph must have been read
+ * completely before another glyph of the same font gets requested
+ * through this method.
+ *
+ * @param glyph the number of the glyph whose outlines are to be
+ * retrieved.
+ *
+ * @return a buffer whose position is set to the first byte of glyph
+ * data, and whose limit is set to disallow accessing any data that
+ * does not belong to the glyph. If there is no outline data for the
+ * requested glyph, as would be the case for the space glyph, the
+ * result will be <code>null</code>.
+ */
+ public abstract ByteBuffer getGlyphData(int glyph);
+
+
+ /**
+ * A GlyphLocator that locates glyphs using two-byte offsets,
+ * interpreting <code>loca</code> tables of format 0.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private final static class TwoByte
+ extends GlyphLocator
+ {
+ final CharBuffer indexToLoc;
+
+ TwoByte(ByteBuffer loca, ByteBuffer glyf)
+ {
+ this.glyfTable = glyf;
+ indexToLoc = loca.asCharBuffer();
+ }
+
+
+ public ByteBuffer getGlyphData(int glyph)
+ {
+ int offset, limit;
+ offset = ((int) indexToLoc.get(glyph)) << 1;
+ limit = ((int) indexToLoc.get(glyph + 1)) << 1;
+ if (offset >= limit)
+ return null;
+
+ glyfTable.limit(limit).position(offset);
+ return glyfTable;
+ }
+ }
+
+
+ /**
+ * A GlyphLocator that locates glyphs using four-byte offsets,
+ * interpreting <code>loca</code> tables of format 1.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+ private final static class FourByte
+ extends GlyphLocator
+ {
+ final IntBuffer indexToLoc;
+
+ FourByte(ByteBuffer loca, ByteBuffer glyf)
+ {
+ this.glyfTable = glyf;
+ indexToLoc = loca.asIntBuffer();
+ }
+
+
+ public ByteBuffer getGlyphData(int glyph)
+ {
+ int offset, limit;
+ offset = indexToLoc.get(glyph);
+ limit = indexToLoc.get(glyph + 1);
+ if (offset >= limit)
+ return null;
+
+ glyfTable.limit(limit).position(offset);
+ return glyfTable;
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java
new file mode 100644
index 0000000..bbd0b9b
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java
@@ -0,0 +1,228 @@
+/* GlyphMeasurer.java -- Helper for measuring TrueType glyphs.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.FontFormatException;
+import java.nio.ByteBuffer;
+import java.nio.ShortBuffer;
+
+
+/**
+ * A class for measuring TrueType and OpenType glyphs.
+ *
+ * <p><b>Lack of Thread Safety:</b> Glyph measurers are intentionally
+ * <i>not</i> safe to access from multiple concurrent
+ * threads. Synchronization needs to be performed externally. Usually,
+ * the font has already obtained a lock before calling the scaler,
+ * which in turn calls the GlyphMeasurer. It would thus be wasteful to
+ * acquire additional locks for the GlyphMeasurer.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class GlyphMeasurer
+{
+ /**
+ * A view buffer that allows accessing the contents of the
+ * font&#x2019;s <code>hmtx</code> table as shorts.
+ */
+ private final ShortBuffer horizontalGlyphMetrics;
+
+
+ /**
+ * A view buffer that allows accessing the contents of the
+ * font&#x2019;s <code>vmtx</code> table as shorts.
+ */
+ private final ShortBuffer verticalGlyphMetrics;
+
+
+ private final int numLongHorizontalMetricsEntries;
+ private final int numLongVerticalMetricsEntries;
+
+ private final int horizontalAscent;
+ private final int verticalAscent;
+
+ private final int horizontalDescent;
+ private final int verticalDescent;
+
+ private final int horizontalLineGap;
+
+
+ /**
+ * Constructs a GlyphMeasurer from TrueType/OpenType font tables.
+ *
+ * @param hhea the <code>hhea</code> table, which contains
+ * information about horizontal metrics that is common to all
+ * glyphs.
+ *
+ * @param hmtx the <code>hmtx</code> table, which contains
+ * glyph-specific information about horizontal metrics.
+ *
+ * @param vhea the <code>vhea</code> table, which contains
+ * information about vertical metrics that is common to all
+ * glyphs. If a font does not provide such a table, pass
+ * <code>null</code>.
+ *
+ * @param vmtx the <code>vmtx</code> table, which contains
+ * glyph-specific information about vertical metrics. If a font
+ * does not provide such a table, pass <code>null</code>.
+ */
+ GlyphMeasurer(ByteBuffer hhea, ByteBuffer hmtx,
+ ByteBuffer vhea, ByteBuffer vmtx)
+ throws FontFormatException
+ {
+ if ((hhea.getInt(0) != 0x00010000) || (hhea.getInt(30) != 0))
+ throw new FontFormatException("unsupported hhea format");
+
+ horizontalAscent = hhea.getShort(4);
+ horizontalDescent = hhea.getShort(6);
+ horizontalLineGap = hhea.getShort(8);
+
+ numLongHorizontalMetricsEntries = hhea.getChar(34);
+ horizontalGlyphMetrics = hmtx.asShortBuffer();
+
+ if (vhea != null)
+ {
+ verticalAscent = vhea.getShort(4);
+ verticalDescent = vhea.getShort(6);
+ numLongVerticalMetricsEntries = vhea.getChar(34);
+ verticalGlyphMetrics = vmtx.asShortBuffer();
+ }
+ else
+ {
+ verticalAscent = /* advanceWidthMax */ hhea.getChar(10) / 2;
+ verticalDescent = -verticalAscent;
+ numLongVerticalMetricsEntries = 0;
+ verticalGlyphMetrics = null;
+ }
+ }
+
+
+ /**
+ * Returns the distance from the baseline to the highest ascender.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the maximal ascent, in font units.
+ */
+ public int getAscent(boolean horizontal)
+ {
+ return horizontal ? horizontalAscent : verticalAscent;
+ }
+
+
+ /**
+ * Returns the distance from the baseline to the lowest descender.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the maximal descent, in font units.
+ */
+ public int getDescent(boolean horizontal)
+ {
+ return horizontal ? horizontalDescent : verticalDescent;
+ }
+
+
+ /**
+ * Returns the typographic line gap.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the line gap, in font units.
+ */
+ public int getLineGap(boolean horizontal)
+ {
+ return horizontalLineGap;
+ }
+
+
+ /**
+ * Determines the advance width of a glyph, without considering
+ * hinting.
+ *
+ * @param glyphIndex the index of the glyph whose advance width is
+ * to be determined.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the advance width, in font units.
+ */
+ public int getAdvanceWidth(int glyphIndex, boolean horizontal)
+ {
+ if (!horizontal)
+ return 0;
+
+ glyphIndex = Math.min(glyphIndex,
+ numLongHorizontalMetricsEntries - 1);
+ return horizontalGlyphMetrics.get(glyphIndex << 1);
+ }
+
+
+ /**
+ * Determines the advance width of a glyph, without considering
+ * hinting.
+ *
+ * @param glyphIndex the index of the glyph whose advance width is
+ * to be determined.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the advance width, in font units.
+ */
+ public int getAdvanceHeight(int glyphIndex, boolean horizontal)
+ {
+ if (horizontal)
+ return 0;
+
+ /* If a font does not provide vertical glyph metrics, advance
+ * by the height of one horizontal line.
+ */
+ if (verticalGlyphMetrics == null)
+ return horizontalAscent - horizontalDescent + horizontalLineGap;
+
+ glyphIndex = Math.min(glyphIndex,
+ numLongVerticalMetricsEntries - 1);
+ return verticalGlyphMetrics.get(glyphIndex << 1);
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java
new file mode 100644
index 0000000..e4d7309
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java
@@ -0,0 +1,372 @@
+/* TrueTypeScaler.java -- Font scaler for TrueType outlines.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype.truetype;
+
+import gnu.java.awt.font.opentype.Scaler;
+
+import java.awt.FontFormatException;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+import java.nio.ByteBuffer;
+
+
+/**
+ * A scaler for fonts whose outlines are described in the TrueType
+ * format.
+ *
+ * <p><b>Lack of Thread Safety:</b> Font scalers are intentionally
+ * <i>not</i> safe to access from multiple concurrent threads.
+ * Synchronization needs to be performed externally. Usually, the font
+ * that uses this scaler already has obtained a lock before calling
+ * the scaler.
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+public final class TrueTypeScaler
+ extends Scaler
+{
+ /**
+ * The TrueType or OpenType table that contains the glyph outlines.
+ */
+ private ByteBuffer glyfTable;
+
+
+ /**
+ * A helper object for loading glyph outlines.
+ */
+ private GlyphLoader glyphLoader;
+
+
+ /**
+ * A helper object for measuring the advance width and height of a
+ * glyph.
+ */
+ private final GlyphMeasurer glyphMeasurer;
+
+ private final Zone glyphZone;
+
+
+ /**
+ * The number of units per em. A typical value is 2048, but some
+ * font use other numbers as well.
+ */
+ private int unitsPerEm;
+
+
+ /**
+ * Constructs a new TrueTypeScaler.
+ *
+ * @param unitsPerEm the number of font units per em. This value can
+ * be retrieved from the font&#x2019;s <code>head</code> table.
+ *
+ * @param maxp the <code>maxp</code> table of the font, which
+ * contains various constants needed for setting up the virtual
+ * machine that interprets TrueType bytecodes.
+ *
+ * @param controlValueTable the <code>cvt</code> table of the font,
+ * which contains the initial values of the control value table.
+ *
+ * @param fpgm the <code>fpgm</code> table of the font, which
+ * contains a font program that is executed exactly once. The
+ * purpose of the font program is to define functions and to patch
+ * the interpreter.
+ *
+ * @param locaFormat the format of the <code>loca</code> table. The
+ * value must be 0 for two-byte offsets, or 1 for four-byte
+ * offsets. TrueType and OpenType fonts indicate the format in the
+ * <code>indexToLoc</code> field of the <a href=
+ * "http://partners.adobe.com/asn/tech/type/opentype/head.html"
+ * >font header</a>.
+ *
+ * @param loca the <code>loca</code> table of the font, which
+ * contains for each glyph the offset of its outline data
+ * in <code>glyf</code>.
+ *
+ * @param glyf the <code>glyf</code> table of the font, which
+ * contains the outline data for all glyphs in the font.
+ *
+ * @param preProgram the <code>prep</code> table of the font, which
+ * contains a program that is executed whenever the point size or
+ * the device transform have changed. This program is called
+ * pre-program because it gets executed before the instructions of
+ * the individual glyphs. If the font does not contain a
+ * pre-program, pass <code>null</code>.
+ *
+ * @throws FontFormatException if <code>format</code> is neither 0
+ * nor 1.
+ */
+ public TrueTypeScaler(int unitsPerEm,
+ ByteBuffer hhea,
+ ByteBuffer htmx,
+ ByteBuffer vhea,
+ ByteBuffer vtmx,
+ ByteBuffer maxp,
+ ByteBuffer controlValueTable,
+ ByteBuffer fpgm,
+ int locaFormat, ByteBuffer loca,
+ ByteBuffer glyf,
+ ByteBuffer preProgram)
+ throws FontFormatException
+ {
+ int maxContours, maxPoints;
+ VirtualMachine vm;
+
+ maxContours = Math.max(/* maxContours */ (int) maxp.getChar(8),
+ /* maxCompositeContours */ (int) maxp.getChar(12))
+ + /* fix for some broken fonts */ 8;
+ maxPoints = Math.max(/* maxPoints */ (int) maxp.getChar(6),
+ /* maxCompositePoints */ (int) maxp.getChar(10))
+ + /* fix for some broken fonts */ 12;
+
+
+ glyphZone = new Zone(maxPoints + /* four phantom points */ 4);
+ this.glyfTable = glyf;
+ vm = new VirtualMachine(unitsPerEm, maxp,
+ controlValueTable, fpgm,
+ preProgram);
+
+ GlyphLocator locator = GlyphLocator.forTable(locaFormat, loca, glyf);
+ glyphMeasurer = new GlyphMeasurer(hhea, htmx, vhea, vtmx);
+ glyphLoader = new GlyphLoader(locator, vm, unitsPerEm,
+ maxContours, maxPoints,
+ glyphMeasurer);
+
+ this.unitsPerEm = unitsPerEm;
+ }
+
+
+ /**
+ * Retrieves the scaled outline of a glyph, adjusting control points
+ * to the raster grid if necessary.
+ *
+ * @param glyphIndex the glyph number whose outline is retrieved.
+ *
+ * @param pointSize the point size for the glyph.
+ *
+ * @param deviceTransform an affine transformation for the device.
+ *
+ * @param antialias whether or not the rasterizer will perform
+ * anti-aliasing on the returned path.
+ *
+ * @param fractionalMetrics <code>false</code> for adjusting glyph
+ * positions to the raster grid of device space.
+ */
+ public GeneralPath getOutline(int glyphIndex,
+ float pointSize,
+ AffineTransform deviceTransform,
+ boolean antialias,
+ boolean fractionalMetrics)
+ {
+ glyphLoader.loadGlyph(glyphIndex, pointSize, deviceTransform,
+ antialias, glyphZone);
+ return glyphZone.getPath();
+ }
+
+
+ /**
+ * Determines the advance width and height for a glyph.
+ *
+ * @param glyphIndex the glyph whose advance width and height is to
+ * be determined.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @param advance a point whose <code>x</code> and <code>y</code>
+ * fields will hold the advance in each direction. It is possible
+ * that both values are non-zero, for example if
+ * <code>transform</code> is a rotation, or in the case of Urdu
+ * fonts.
+ */
+ public void getAdvance(int glyphIndex,
+ float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal,
+ Point2D advance)
+ {
+ double x, y;
+ double scaleFactor = (double) pointSize / unitsPerEm;
+
+ /* FIXME: Should grid-fit if needed. Also, use cache if present
+ * in the font.
+ */
+ advance.setLocation(
+ scaleFactor * glyphMeasurer.getAdvanceWidth(glyphIndex, horizontal),
+ scaleFactor * glyphMeasurer.getAdvanceHeight(glyphIndex, horizontal));
+
+ transform.transform(advance, advance);
+ }
+
+
+ /**
+ * Scales a value from font units to pixels, given the point size
+ * and the transform.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional
+ * metrics, <code>false</code> for rounding the result to a pixel
+ * boundary.
+ *
+ * @param horizontal <code>true</code> if the <code>funits</code>
+ * value is along the x axis, <code>false</code> if it is along the
+ * y axis.
+ */
+ private float scaleFromFUnits(int funits,
+ float pointSize,
+ AffineTransform transform,
+ boolean fractionalMetrics,
+ boolean horizontal)
+ {
+ double s;
+
+ s = (double) pointSize / unitsPerEm;
+ if (transform != null)
+ s *= horizontal ? transform.getScaleY() : transform.getScaleX();
+ s *= funits;
+ if (!fractionalMetrics)
+ s = Math.round(s);
+ return (float) s;
+ }
+
+
+ /**
+ * Determines the distance between the base line and the highest
+ * ascender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialias <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the ascent, which usually is a positive number.
+ */
+ public float getAscent(float pointSize,
+ AffineTransform transform,
+ boolean antialias,
+ boolean fractionalMetrics,
+ boolean horizontal)
+ {
+ /* Note that the ascent is orthogonal to the direction of line
+ * layout: If the line direction is horizontal, the measurement of
+ * ascent is along the vertical axis, and vice versa.
+ */
+ return scaleFromFUnits(glyphMeasurer.getAscent(horizontal),
+ pointSize,
+ transform,
+ fractionalMetrics,
+ /* reverse */ !horizontal);
+ }
+
+
+ /**
+ * Determines the distance between the base line and the lowest
+ * descender.
+ *
+ * @param pointSize the point size of the font.
+ *
+ * @param transform a transform that is applied in addition to
+ * scaling to the specified point size. This is often used for
+ * scaling according to the device resolution. Those who lack any
+ * aesthetic sense may also use the transform to slant or stretch
+ * glyphs.
+ *
+ * @param antialiased <code>true</code> for anti-aliased rendering,
+ * <code>false</code> for normal rendering. For hinted fonts,
+ * this parameter may indeed affect the result.
+ *
+ * @param fractionalMetrics <code>true</code> for fractional metrics,
+ * <code>false</code> for rounding the result to a pixel boundary.
+ *
+ * @param horizontal <code>true</code> for horizontal line layout,
+ * <code>false</code> for vertical line layout.
+ *
+ * @return the descent, which usually is a nagative number.
+ */
+ public float getDescent(float pointSize,
+ AffineTransform transform,
+ boolean antialiased,
+ boolean fractionalMetrics,
+ boolean horizontal)
+ {
+ /* Note that the descent is orthogonal to the direction of line
+ * layout: If the line direction is horizontal, the measurement of
+ * descent is along the vertical axis, and vice versa.
+ */
+ return scaleFromFUnits(glyphMeasurer.getDescent(horizontal),
+ pointSize,
+ transform,
+ fractionalMetrics,
+ /* reverse */ !horizontal);
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java
new file mode 100644
index 0000000..6f53af6
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java
@@ -0,0 +1,1809 @@
+/* VirtualMachine.java -- Virtual machine for TrueType bytecodes.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.FontFormatException;
+import java.awt.geom.AffineTransform;
+import java.nio.ByteBuffer;
+import java.nio.ShortBuffer;
+
+
+/**
+ * A virtual machine for interpreting TrueType bytecodes.
+ *
+ * <p><b>Lack of Thread Safety:</b> The virtual machine is
+ * intentionally <i>not</i> safe to access from multiple concurrent
+ * threads. Synchronization needs to be performed externally. Usually,
+ * the font has already obtained a lock before calling the scaler,
+ * which in turn calls the VM. It would be wasteful to acquire
+ * additional locks for the VM.
+ *
+ * <p><b>Implementation Status:</b> The current implementation can
+ * execute pre-programs of fonts, but it does not yet actually move
+ * any points. Control flow and arithmeti instructions are
+ * implemented, but most geometric instructions are not working
+ * yet. So, the VirtualMachine class is currently a no-op. However,
+ * not very much is missing. You are more than welcome to complete the
+ * implementation.
+ *
+ * <p><b>Patents:</b> Apple Computer holds three United States Patents
+ * for the mathematical algorithms that are used by TrueType
+ * instructions. The monopoly granted by these patents will expire in
+ * October 2009. Before the expiration date, a license must be
+ * obtained from Apple Computer to use the patented technology inside
+ * the United States. For other countries, different dates might
+ * apply, or no license might be needed.
+ *
+ * <p>The default build of this class does not use the patented
+ * algorithms. If you have obtained a license from Apple, or if the
+ * patent protection has expired, or if no license is required for
+ * your contry, you can set a flag in the source file which will
+ * enable the use of the patented mathematical algorithms.</p>
+ *
+ * <p>The relevant patents are listed subsequently.</p>
+ *
+ * <p><ol><li>United States Patent 5155805, <i>Method and Apparatus
+ * for Moving Control Points in Displaying Digital Typeface on Raster
+ * Output Devices,</i> invented by Sampo Kaasila, assigned to Apple
+ * Computer. Filing date: May 8, 1989. Date of patent: October 13,
+ * 1992.</li>
+ *
+ * <li>United States Patent 5159668, <i>Method and Apparatus for
+ * Manipulating Outlines in Improving Digital Typeface on Raster
+ * Output Devices,</i> invented by Sampo Kaasila, assigned to Apple
+ * Computer. Filing date: May 8, 1989. Date of patent: October 27,
+ * 1992.</li>
+ *
+ * <li>United States Patent 5325479, <i>Method and Apparatus for
+ * Moving Control Points in Displaying Digital Typeface on Raster
+ * Output Devices,</i> invented by Sampo Kaasila, assigned to Apple
+ * Computer. Filing date: May 28, 1989. Date of patent: June 28, 1994
+ * (with a statement that &#x201c;[t]he portion of the term of this
+ * patent subsequent to Oct. 13, 2009 has been
+ * disclaimed&#x201d;).</li></ol>
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+class VirtualMachine
+{
+ /**
+ * Indicates whether or not to perform hinting operations that are
+ * protected by a number of US patents, two of which will expire on
+ * October 13, 2009, and one of which will expire on October 27,
+ * 2009.
+ */
+ private final static boolean PATENTED_HINTING = false;
+
+
+ /**
+ * Indicates whether the execution of the Virtual Machine is traced
+ * to System.out.
+ */
+ private final static boolean TRACE_EXECUTION = false;
+
+
+ /**
+ * The value 1 in 2-dot-14 fixed notation.
+ */
+ private static final short ONE_214 = 0x4000; // 1 << 14
+
+
+ /**
+ * The storage area of the virtual machine.
+ */
+ private final int[] storage;
+
+
+ /**
+ * The stack. The stack grows from bottom to top, so
+ * <code>sp[0]</code> gets used before <code>sp[1]</code>.
+ */
+ private int[] stack;
+
+
+ /**
+ * The maximum number of stack elements.
+ */
+ private final int maxStackElements;
+
+
+ /**
+ * The current stack pointer of the virtual machine.
+ */
+ private int sp;
+
+
+ /**
+ * fdefBuffer[i] is the buffer that contains the TrueType
+ * instructions of function #i. Most of the time, functions are
+ * defined in the font program, but a font may also re-define
+ * functions in its CVT program.
+ */
+ private ByteBuffer[] fdefBuffer;
+
+
+ /**
+ * fdefEntryPoint[i] is the position in fdefBuffer[i] where the
+ * first TrueType instruction after the FDEF is located.
+ */
+ private int[] fdefEntryPoint;
+
+
+ /**
+ * The original Control Value Table, sometimes abbreviated as CVT.
+ * The table contains signed 16-bit FUnits. Some fonts have no CVT,
+ * in which case the field will be <code>null</code>.
+ */
+ private ShortBuffer controlValueTable;
+
+
+ /**
+ * The scaled values inside the control value table.
+ */
+ private int[] cvt;
+
+
+ /**
+ * A value that is used by rounding operations to compensate for dot
+ * gain.
+ */
+ private int engineCompensation = 0;
+
+
+ /**
+ * The contents of the font&#x2019;s <code>fpgm</code> table, or
+ * <code>null</code> after the font program has been executed once.
+ */
+ private ByteBuffer fontProgram;
+
+
+ /**
+ * The <code>prep</code> table of the font, which contains a program
+ * that is executed whenever the point size or the device transform
+ * have changed. This program is called pre-program because it gets
+ * executed before the instructions of the individual glyphs. If
+ * the font does not contain a pre-program, the value of this field
+ * is <code>null</code>.
+ */
+ private ByteBuffer preProgram;
+
+
+ /**
+ * The number of points in the Twilight Zone.
+ */
+ private int numTwilightPoints;
+
+
+ /**
+ * The current point size of the scaled font. The value is in Fixed
+ * 26.6 notation.
+ */
+ private int pointSize; // 26.6
+
+ private AffineTransform deviceTransform;
+
+ private int scaleX, scaleY, shearX, shearY; // 26.6
+
+
+ /**
+ * Indicates whether or not scan-line conversion will use
+ * anti-aliasing (with gray levels). Font programs can ask for this
+ * value with the <code>GETINFO</code> instruction, and some
+ * programs may behave differently according to this setting.
+ */
+ private boolean antialiased;
+
+
+ /* Graphics State. FIXME: Move this to its own class? Some
+ * documentation would not hurt, either.
+ */
+ private int cvtCutIn; // 26.6
+ private int deltaBase; // uint32
+ private int deltaShift; // uint32
+ private short freeX; // 2.14
+ private short freeY; // 2.14
+ private int loop; // int
+ private int minimumDistance; // 26.6
+ private short projX; // 2.14
+ private short projY; // 2.14
+ private short dualX; // 2.14
+ private short dualY; // 2.14
+ private int rp0, rp1, rp2; // point numbers
+ private boolean scanControl;
+ private int scanType;
+ private int singleWidthValue; // 26.6
+ private Zone zp0, zp1, zp2;
+
+ private Zone twilightZone;
+ private Zone glyphZone;
+
+
+ /**
+ * Indicates whether or not the instructions that are associated
+ * with individual glyphs shall be executed. Set as a side effect
+ * of executing the pre-program when the point size, device
+ * transform or some other relevant parameter have changed.
+ */
+ private boolean executeGlyphInstructions;
+
+
+ /**
+ * Indicates whether to ignore any modifications to the control
+ * value table that the font&#x2019;s pre-program might have
+ * performed. Set as a side effect of executing the pre-program
+ * when the point size, device transform or some other relevant
+ * parameter have changed.
+ */
+ private boolean ignoreCVTProgram;
+
+
+ /**
+ * The length of the space between rounded values. A value
+ * of zero means that rounding has been switched off.
+ */
+ private int roundPeriod; // 26.6
+
+
+ /**
+ * The offset of the rounded values from multiples of
+ * <code>roundPeriod</code>.
+ */
+ private int roundPhase; // 26.6
+
+
+ private int roundThreshold; // 26.6
+
+
+ /**
+ * A cache for the number of pixels per EM. The value is a normal
+ * integer, not a fixed point notation.
+ *
+ * @see #getPixelsPerEM()
+ */
+ private int cachedPixelsPerEM;
+
+
+ /**
+ * The number of font units per EM.
+ */
+ private int unitsPerEm;
+
+
+ /**
+ * Constructs a new Virtual Machine for executing TrueType
+ * instructions.
+ *
+ * @param unitsPerEm the number of font units in one typographic
+ * em.
+ *
+ * @param preProgram the <code>prep</code> table of the font, which
+ * contains a program that is executed whenever the point size or
+ * the device transform have changed. This program is called
+ * pre-program because it gets executed before the instructions of
+ * the individual glyphs. If the font does not contain a
+ * pre-program, pass <code>null</code>.
+ */
+ VirtualMachine(int unitsPerEm,
+ ByteBuffer maxp,
+ ByteBuffer controlValueTable,
+ ByteBuffer fontProgram,
+ ByteBuffer preProgram)
+ throws FontFormatException
+ {
+ int maxStorage, numFunctionDefs, maxInstructionDefs;
+
+ if (maxp.getInt(0) != 0x00010000)
+ throw new FontFormatException("unsupported maxp version");
+
+ this.unitsPerEm = unitsPerEm;
+ maxStorage = maxp.getChar(18);
+
+ /* FreeType says that there exist some broken fonts (like
+ * "Keystrokes MT") that contain function defs, but have a zero
+ * value in their maxp table.
+ */
+ numFunctionDefs = maxp.getChar(20);
+ if (numFunctionDefs == 0)
+ numFunctionDefs = 64;
+ fdefBuffer = new ByteBuffer[numFunctionDefs];
+ fdefEntryPoint = new int[numFunctionDefs];
+
+ /* Read the contents of the Control Value Table. */
+ if (controlValueTable != null)
+ this.controlValueTable = controlValueTable.asShortBuffer();
+
+ maxInstructionDefs = maxp.getChar(22);
+ maxStackElements = maxp.getChar(24);
+ storage = new int[maxStorage];
+ this.fontProgram = fontProgram;
+ this.preProgram = preProgram;
+ numTwilightPoints = maxp.getChar(16);
+ }
+
+
+ /**
+ * Sets the graphics state to default values.
+ */
+ private void resetGraphicsState()
+ {
+ /* The freedom, projection and dual vector default to the x axis. */
+ freeX = projX = dualX = ONE_214;
+ freeY = projY = dualX = 0;
+ cachedPixelsPerEM = 0;
+
+ cvtCutIn = 68; // 17/16 in 26.6 notation
+ deltaBase = 9;
+ deltaShift = 3;
+ loop = 1;
+ minimumDistance = Fixed.ONE;
+ singleWidthValue = 0;
+ rp0 = rp1 = rp2 = 0;
+ scanControl = false;
+ scanType = 2;
+ zp0 = zp1 = zp2 = getZone(1);
+
+ setRoundingMode(Fixed.ONE, 0x48); // round to grid
+ }
+
+
+ /**
+ * Reloads the control value table and scales each entry from font
+ * units to pixel values.
+ */
+ private void reloadControlValueTable()
+ {
+ /* Some TrueType fonts have no control value table. */
+ if (controlValueTable == null)
+ return;
+
+ /* Read in the Control Value Table. */
+ if (cvt == null)
+ cvt = new int[controlValueTable.capacity()];
+
+ /* Scale the entries. */
+ for (int i = 0; i < cvt.length; i++)
+ cvt[i] = funitsToPixels(controlValueTable.get(i));
+ }
+
+
+ /**
+ * Scales a value from font unites to pixels.
+ *
+ * @return the scaled value.
+ */
+ private int funitsToPixels(int funits)
+ {
+ return (int) (((long) funits * scaleY + (unitsPerEm>>1))
+ / unitsPerEm);
+ }
+
+
+ /**
+ * Sets up the virtual machine for the specified parameters. If
+ * there is no change to the last set-up, the method will quickly
+ * return. Otherwise, the font&#x2019;s pre-program will be
+ * executed.
+ *
+ * @param pointSize the point size of the scaled font.
+ *
+ * @param deviceTransform an affine transformation which gets
+ * applied in addition to scaling by <code>pointSize</code>. Font
+ * programs can separately inquire about the point size. For this
+ * reason, it is not recommended to pre-multiply the point size to
+ * the device transformation.
+ *
+ * @param antialiased <code>true</code> if the scan-line conversion
+ * algorithm will use gray levels to give a smoother appearance,
+ * <code>false</code> otherwise. Font programs can ask for this
+ * value with the <code>GETINFO</code> instruction, and some
+ * programs may behave differently according to this setting.
+ */
+ public boolean setup(double pointSize,
+ AffineTransform deviceTransform,
+ boolean antialiased)
+ {
+ boolean changeCTM;
+ int pointSize_Fixed;
+
+ if (stack == null)
+ stack = new int[maxStackElements];
+
+ if (twilightZone == null)
+ twilightZone = new Zone(numTwilightPoints);
+
+ /* If the font program has not yet been executed, do so. */
+ if (fontProgram != null)
+ {
+ resetGraphicsState();
+ sp = -1;
+ execute(fontProgram, 0);
+ fontProgram = null; // prevent further execution
+ }
+
+ /* Determine whether the transformation matrix has changed. */
+ pointSize_Fixed = Fixed.valueOf(pointSize);
+ changeCTM = ((pointSize_Fixed != this.pointSize)
+ || !deviceTransform.equals(this.deviceTransform)
+ || (antialiased != this.antialiased));
+
+ if (changeCTM)
+ {
+ this.pointSize = pointSize_Fixed;
+ this.deviceTransform = deviceTransform;
+ this.antialiased = antialiased;
+ scaleX = (int) (deviceTransform.getScaleX() * pointSize * 64);
+ scaleY = (int) (deviceTransform.getScaleY() * pointSize * 64);
+ shearX = (int) (deviceTransform.getShearX() * pointSize * 64);
+ shearY = (int) (deviceTransform.getShearY() * pointSize * 64);
+
+ resetGraphicsState();
+ reloadControlValueTable();
+ executeGlyphInstructions = true;
+ ignoreCVTProgram = false;
+
+ if (preProgram != null)
+ {
+ sp = -1;
+ execute(preProgram, 0);
+ if (ignoreCVTProgram)
+ reloadControlValueTable();
+ }
+ }
+
+ return executeGlyphInstructions;
+ }
+
+
+ /**
+ * Executes a stream of TrueType instructions.
+ */
+ private void execute(ByteBuffer instructions, int pos)
+ {
+ instructions.position(pos);
+
+ // FIXME: SECURITY: Possible denial-of-service attack
+ // via instructions that have an endless loop.
+ while (instructions.hasRemaining()
+ && executeInstruction(instructions))
+ ;
+ }
+
+
+ /**
+ * Writes a textual description of the current TrueType instruction,
+ * including the top stack elements, to <code>System.out</code>.
+ * This is useful for debugging.
+ *
+ * @param inst the instruction stream, positioned at the current
+ * instruction.
+ */
+ private void dumpInstruction(ByteBuffer inst)
+ {
+ StringBuffer sbuf = new StringBuffer(40);
+ int pc = inst.position();
+ int bcode = inst.get(pc) & 0xff;
+ int count;
+ int delta;
+
+ char pcPrefix = 'c';
+ for (int i = 0; i < fdefBuffer.length; i++)
+ {
+ if (fdefBuffer[i] == inst)
+ {
+ pcPrefix = 'f';
+ break;
+ }
+ }
+ sbuf.append(pcPrefix);
+
+
+ sbuf.append(getHex((short) inst.position()));
+ sbuf.append(": ");
+ sbuf.append(getHex((byte) bcode));
+ sbuf.append(" ");
+ sbuf.append(INST_NAME[bcode]);
+
+ if (bcode == 0x40) // NPUSHB
+ {
+ count = inst.get(pc + 1) & 0xff;
+ sbuf.append(" (");
+ sbuf.append(count);
+ sbuf.append(") ");
+ for (int i = 0; i < count; i++)
+ {
+ if (i > 0)
+ sbuf.append(" ");
+ sbuf.append('$');
+ sbuf.append(getHex(inst.get(pc + 2 + i)));
+ }
+ }
+ if (bcode == 0x41) // NPUSHW
+ {
+ count = inst.get(pc + 1) & 0xff;
+ sbuf.append(" (");
+ sbuf.append(count);
+ sbuf.append(") ");
+ for (int i = 0; i < count; i++)
+ {
+ if (i > 0)
+ sbuf.append(' ');
+ sbuf.append('$');
+ sbuf.append(getHex(inst.getShort(pc + 2 + 2*i)));
+ }
+ }
+ else
+ {
+ count = getInstructionLength(bcode) - 1;
+ for (int i = 0; i < count; i++)
+ {
+ sbuf.append(" $");
+ sbuf.append(getHex(inst.get(pc + 1 + i)));
+ }
+ }
+
+ while (sbuf.length() < 30)
+ sbuf.append(' ');
+ sbuf.append('|');
+ sbuf.append(sp + 1);
+ sbuf.append("| ");
+ for (int i = sp; i >= Math.max(0, sp - 5); i = i - 1)
+ {
+ if (i < sp)
+ sbuf.append(" ");
+ if ((stack[i] >> 16) != 0)
+ sbuf.append(getHex((short) (stack[i] >> 16)));
+ sbuf.append(getHex((short) stack[i]));
+ }
+ System.out.println(sbuf);
+ }
+
+
+ private static char getNibble(int i, int rightShift)
+ {
+ i = (i >> rightShift) & 15;
+ if (i < 10)
+ return (char) (i + '0');
+ else
+ return (char) (i + 'a' - 10);
+ }
+
+
+ private static String getHex(byte b)
+ {
+ char[] a = new char[2];
+ a[0] = getNibble(b, 4);
+ a[1] = getNibble(b, 0);
+ return new String(a);
+ }
+
+
+ private static String getHex(short b)
+ {
+ char[] a = new char[4];
+ a[0] = getNibble(b, 12);
+ a[1] = getNibble(b, 8);
+ a[2] = getNibble(b, 4);
+ a[3] = getNibble(b, 0);
+ return new String(a);
+ }
+
+
+ /**
+ * Skips any instructions until the specified opcode has been
+ * encoutered.
+ *
+ * @param inst the current instruction stream. After the call,
+ * the position of <code>inst</code> is right after the first
+ * occurence of <code>opcode</code>.
+ *
+ * @param opcode1 the opcode for which to look.
+ *
+ * @param opcode2 another opcode for which to look. Pass -1
+ * if only <code>opcode1</code> would terminate skipping.
+ *
+ * @param illegalCode1 an opcode that must not be encountered
+ * while skipping. Pass -1 if any opcode is acceptable.
+ *
+ * @param illegalCode2 another opcode that must not be encountered
+ * while skipping. Pass -1 to perform no check.
+ *
+ * @param handleNestedIfClauses <code>true</code> to handle
+ * nested <code>IF [ELSE] EIF</code> clauses, <code>false</code>
+ * to ignore them. From the TrueType specification document,
+ * one would think that nested if clauses would not be valid,
+ * but they do appear in some fonts.
+ *
+ * @throws IllegalStateException if <code>illegalCode1</code> or
+ * <code>illegalCode2</code> has been encountered while skipping.
+ */
+ private static void skipAfter(ByteBuffer inst,
+ int opcode1, int opcode2,
+ int illegalCode1, int illegalCode2,
+ boolean handleNestedIfClauses)
+ {
+ int pos = inst.position();
+ int curOpcode;
+ int instLen;
+ int nestingLevel = 0; // increased inside IF [ELSE] EIF sequences
+
+ while (true)
+ {
+ curOpcode = inst.get(pos) & 0xff;
+ instLen = getInstructionLength(curOpcode);
+
+ if (false && TRACE_EXECUTION)
+ {
+ for (int i = 0; i < nestingLevel; i++)
+ System.out.print("--");
+ System.out.print("--" + pos + "-" + INST_NAME[curOpcode]);
+ if (nestingLevel > 0)
+ System.out.print(", ifNestingLevel=" + nestingLevel);
+ System.out.println();
+ }
+
+ if (curOpcode == 0x40) // NPUSHB
+ pos += 1 + (inst.get(pos + 1) & 0xff);
+ else if (curOpcode == 0x41) // NPUSHW
+ pos += 1 + 2 * (inst.get(pos + 1) & 0xff);
+ else
+ pos += instLen;
+
+ if ((nestingLevel == 0)
+ && ((curOpcode == opcode1) || (curOpcode == opcode2)))
+ break;
+
+ if (handleNestedIfClauses)
+ {
+ if (curOpcode == /* IF */ 0x58)
+ ++nestingLevel;
+ else if (curOpcode == /* EIF */ 0x59)
+ --nestingLevel;
+ }
+
+ if ((nestingLevel < 0)
+ || (curOpcode == illegalCode1)
+ || (curOpcode == illegalCode2))
+ throw new IllegalStateException();
+ }
+
+ inst.position(pos);
+ }
+
+
+ /**
+ * Returns the number of bytes that a TrueType instruction occupies.
+ *
+ * @param opcode the instruction.
+ *
+ * @return the number of bytes occupied by the instructions and its
+ * operands. For <code>NPUSHB</code> and <code>NPUSHW</code>, where
+ * the instruction length depends on the first operand byte, the
+ * result is -1.
+ */
+ private static int getInstructionLength(int opcode)
+ {
+ /* NPUSHB, NPUSHW --> see following byte */
+ if ((opcode == 0x40) || (opcode == 0x41))
+ return -1;
+
+ /* PUSHB[0] .. PUSHB[7] --> 2, 3, 4, 5, 6, 7, 8, 9 */
+ if ((opcode >= 0xb0) && (opcode <= 0xb7))
+ return opcode - 0xae;
+
+ /* PUSHW[0] .. PUSHW[7] --> 3, 5, 6, 7, 11, 13, 15, 17*/
+ if ((opcode >= 0xb8) && (opcode <= 0xbf))
+ return 1 + ((opcode - 0xb7) << 1);
+
+ return 1;
+ }
+
+
+ /**
+ * Executes a single TrueType instruction. This is the core
+ * routine of the Virtual Machine.
+ *
+ * @return <code>true</code> if another instruction shall be
+ * executed in the same call frame; <code>false</code> if the
+ * current call frame shall be popped.
+ */
+ private boolean executeInstruction(ByteBuffer inst)
+ {
+ if (TRACE_EXECUTION)
+ dumpInstruction(inst);
+
+ int i, count, e1, e2, e3, e4, x, y;
+ int bcode = inst.get() & 0xff;
+
+ switch (bcode)
+ {
+ case 0x00: // SVTCA[0], Set freedom and proj. Vectors To Coord. Axis [y]
+ setFreedomVector((short) 0, ONE_214);
+ setProjectionVector((short) 0, ONE_214);
+ break;
+
+ case 0x01: // SVTCA[1], Set freedom and proj. Vectors To Coord. Axis [x]
+ setFreedomVector(ONE_214, (short) 0);
+ setProjectionVector(ONE_214, (short) 0);
+ break;
+
+ case 0x02: // SPVTCA[0], Set Projection Vector To Coordinate Axis [y]
+ setProjectionVector((short) 0, ONE_214);
+ break;
+
+ case 0x03: // SPVTCA[1], Set Projection Vector To Coordinate Axis [x]
+ setProjectionVector(ONE_214, (short) 0);
+ break;
+
+ case 0x0c: // GPV, Get Projection Vector
+ stack[++sp] = projX;
+ stack[++sp] = projY;
+ break;
+
+ case 0x0d: // GPV, Get Freedom Vector
+ stack[++sp] = freeX;
+ stack[++sp] = freeY;
+ break;
+
+ case 0x0F: // ISECT, move point p to the InterSECTION of two lines
+ sp -= 4;
+ handleISECT(stack[sp], stack[sp+1], stack[sp+2],
+ stack[sp+3], stack[sp+4]);
+ break;
+
+ case 0x10: // SRP0, Set Reference Point 0
+ rp0 = stack[sp--];
+ break;
+
+ case 0x11: // SRP1, Set Reference Point 1
+ rp1 = stack[sp--];
+ break;
+
+ case 0x12: // SRP2, Set Reference Point 2
+ rp2 = stack[sp--];
+ break;
+
+ case 0x13: // SZP0, Set Zone Pointer 0
+ zp0 = getZone(stack[sp--]);
+ break;
+
+ case 0x14: // SZP1, Set Zone Pointer 1
+ zp1 = getZone(stack[sp--]);
+ break;
+
+ case 0x15: // SZP2, Set Zone Pointer 2
+ zp2 = getZone(stack[sp--]);
+ break;
+
+ case 0x16: // SZPS, Set Zone PointerS
+ zp0 = zp1 = zp2 = getZone(stack[sp--]);
+ break;
+
+ case 0x17: // SLOOP, Set LOOP variable
+ loop = stack[sp--];
+ break;
+
+ case 0x18: // RTG, Round To Grid
+ setRoundingMode(Fixed.ONE, 0x48);
+ break;
+
+ case 0x19: // RTHG, Round To Half Grid
+ setRoundingMode(Fixed.ONE, 0x68);
+ break;
+
+ case 0x1a: // SMD, Set Minimum Distance
+ minimumDistance = stack[sp--];
+ break;
+
+ case 0x1B: // ELSE, ELSE clause
+ skipAfter(inst,
+ /* look for: EIF, -- */ 0x59, -1,
+ /* illegal: --, -- */ -1, -1,
+ /* handle nested if clauses */ true);
+ break;
+
+ case 0x1C: // JMPR, JuMP Relative
+ inst.position(inst.position() - 1 + stack[sp--]);
+ break;
+
+ case 0x1D: // SCVTCI, Set Control Value Table Cut-In
+ cvtCutIn = stack[sp--];
+ break;
+
+ case 0x1F: // SSW, Set Single Width
+ singleWidthValue = stack[sp--];
+ break;
+
+ case 0x20: // DUP, DUPlicate top stack element
+ e1 = stack[sp];
+ stack[++sp] = e1;
+ break;
+
+ case 0x21: // POP, POP top stack element
+ sp--;
+ break;
+
+ case 0x22: // CLEAR, CLEAR the stack
+ sp = -1;
+ break;
+
+ case 0x23: // SWAP, SWAP the top two elements on the stack
+ e1 = stack[sp--];
+ e2 = stack[sp];
+ stack[sp] = e1;
+ stack[++sp] = e2;
+ break;
+
+ case 0x24: // DEPTH, DEPTH of the stack
+ stack[++sp] = sp + 1;
+ break;
+
+ case 0x25: // CINDEX, Copy the INDEXed element to the top of the stack
+ stack[sp] = stack[sp - stack[sp]];
+ break;
+
+ case 0x26: // MINDEX, Move the INDEXed element to the top of the stack
+ i = stack[sp];
+ e1 = stack[sp - i];
+ System.arraycopy(/* src */ stack, /* srcPos */ sp - i + 1,
+ /* dest */ stack, /* destPos*/ sp - i,
+ /* length */ i - 1);
+ --sp;
+ stack[sp] = e1;
+ break;
+
+ case 0x2a: // LOOPCALL, LOOP and CALL function
+ i = stack[sp--];
+ count = stack[sp--];
+ e1 = inst.position();
+ e2 = sp;
+ for (int j = 0; j < count; j++)
+ execute(fdefBuffer[i], fdefEntryPoint[i]);
+ inst.position(e1);
+ break;
+
+ case 0x2B: // CALL, CALL function
+ i = stack[sp--];
+ e1 = inst.position();
+ e2 = sp;
+ execute(fdefBuffer[i], fdefEntryPoint[i]);
+ inst.position(e1);
+ break;
+
+ case 0x2C: // FDEF, Function DEFinition
+ i = stack[sp--];
+ fdefBuffer[i] = inst;
+ fdefEntryPoint[i] = inst.position();
+ skipAfter(inst,
+ /* look for: ENDF */ 0x2d,
+ /* look for: --- */ -1,
+ /* illegal: IDEF */ 0x89,
+ /* illegal: FDEF */ 0x2c,
+ /* do not handle nested if clauses */ false);
+ break;
+
+ case 0x2D: // ENDF, END Function definition
+ /* Pop the current stack frame. */
+ return false;
+
+ case 0x2e: // MDAP[0], Move Direct Absolute Point
+ handleMDAP(stack[sp--], /* round */ false);
+ break;
+
+ case 0x2f: // MDAP[1], Move Direct Absolute Point
+ handleMDAP(stack[sp--], /* round */ true);
+ break;
+
+ case 0x39: // IP, Interpolate Point by the last relative stretch
+ handleIP();
+ break;
+
+ case 0x3d: // RTDG, Round To Double Grid
+ setRoundingMode(Fixed.ONE, 0x08);
+ roundThreshold = roundThreshold / 64; // period/128
+ break;
+
+ case 0x3e: // MIAP[0], Move Indirect Absolute Point
+ e1 = stack[sp--];
+ handleMIAP(e1, stack[sp--], /* round */ false);
+ break;
+
+ case 0x3f: // MIAP[1], Move Indirect Absolute Point
+ e1 = stack[sp--];
+ handleMIAP(e1, stack[sp--], /* round */ true);
+ break;
+
+ case 0x40: // NPUSHB
+ count = inst.get() & 0xff;
+ for (i = 0; i < count; i++)
+ stack[++sp] = inst.get() & 0xff;
+ break;
+
+ case 0x41: // NPUSHW
+ count = inst.get() & 0xff;
+ for (i = 0; i < count; i++)
+ stack[++sp] = inst.getShort();
+ break;
+
+ case 0x42: // WS, Write Store
+ e1 = stack[sp--]; i = stack[sp--];
+ storage[i] = e1;
+ break;
+
+ case 0x43: // RS, Read Store
+ stack[sp] = storage[stack[sp]];
+ break;
+
+ case 0x44: // WCVTP, Write Control Value Table in Pixel units
+ e1 = stack[sp--];
+ i = stack[sp--];
+ if (i < cvt.length)
+ cvt[i] = e1;
+ break;
+
+ case 0x45: // RCVT, Read Control Value Table entry
+ if (stack[sp] < cvt.length)
+ stack[sp] = cvt[stack[sp]];
+ else
+ stack[sp] = 0;
+ break;
+
+ case 0x46: // GC[0], Get Coordinate projected onto the projection vector
+ stack[sp] = getProjection(zp2, stack[sp]);
+ break;
+
+ case 0x47: // GC[1], Get Coordinate projected onto the projection vector
+ stack[sp] = getOriginalProjection(zp2, stack[sp]);
+ break;
+
+ case 0x4B: // MPPEM, Measure Pixels Per EM
+ stack[++sp] = getPixelsPerEM();
+ break;
+
+ case 0x4c: // MPS, Measure Point Size
+ /* FreeType2 returns pixels per em here, because they think that
+ * the point size would be irrelevant in a given font program.
+ * This is extremely surprising, because the appearance of good
+ * fonts _should_ change with point size. For example, a good
+ * font should be wider at small point sizes, and the holes
+ * inside glyphs ("Punzen" in German, I do not know the correct
+ * English expression) should be larger. Note that this change
+ * of appearance is dependent on point size, _not_ the
+ * resolution of the display device.
+ */
+ stack[++sp] = pointSize;
+ break;
+
+ case 0x4f: // DEBUG, DEBUG call
+ sp--;
+ break;
+
+ case 0x50: // LT, Less Than
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] < e1) ? 1 : 0;
+ break;
+
+ case 0x51: // LTEQ, Greater Than or EQual
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] <= e1) ? 1 : 0;
+ break;
+
+ case 0x52: // GT, Greater Than
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] > e1) ? 1 : 0;
+ break;
+
+ case 0x53: // GTEQ, Greater Than or EQual
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] >= e1) ? 1 : 0;
+ break;
+
+ case 0x54: // EQ, EQual
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] == e1) ? 1 : 0;
+ break;
+
+ case 0x55: // NEQ, Not EQual
+ e1 = stack[sp--];
+ stack[sp] = (stack[sp] != e1) ? 1 : 0;
+ break;
+
+ case 0x58: // IF, IF test
+ if (stack[sp--] == 0)
+ skipAfter(inst,
+ /* look for: ELSE */ 0x1B,
+ /* look for: EIF */ 0x59,
+ /* illegal: -- */ -1,
+ /* illegal: -- */ -1,
+ /* handle nested if clauses */ true);
+ break;
+
+ case 0x59: // EIF, End IF
+ // Do nothing.
+ break;
+
+ case 0x5A: // AND
+ e1 = stack[sp--];
+ stack[sp] = ((e1 != 0) && (stack[sp] != 0)) ? 1 : 0;
+ break;
+
+ case 0x5B: // OR
+ e1 = stack[sp--];
+ stack[sp] = ((e1 != 0) || (stack[sp] != 0)) ? 1 : 0;
+ break;
+
+ case 0x5e: // SDB, Set Delta Base in the graphics state
+ deltaBase = stack[sp--];
+ break;
+
+ case 0x5f: // SDS, Set Delta Shift in the graphics state
+ deltaShift = stack[sp--];
+ break;
+
+ case 0x60: // ADD
+ e1 = stack[sp--];
+ stack[sp] += e1;
+ break;
+
+ case 0x61: // SUB, SUBtract
+ e1 = stack[sp--];
+ stack[sp] -= e1;
+ break;
+
+ case 0x62: // DIV, DIVide
+ e1 = stack[sp--];
+ stack[sp] = Fixed.div(e1, stack[sp]);
+ break;
+
+ case 0x63: // MUL, MULtiply
+ e1 = stack[sp--];
+ stack[sp] = Fixed.mul(e1, stack[sp]);
+ break;
+
+ case 0x64: // ABS, ABSolute value
+ stack[sp] = Math.abs(stack[sp]);
+ break;
+
+ case 0x65: // NEG, NEGate
+ stack[sp] = -stack[sp];
+ break;
+
+ case 0x66: // FLOOR
+ stack[sp] = Fixed.floor(stack[sp]);
+ break;
+
+ case 0x67: // CEILING
+ stack[sp] = Fixed.ceil(stack[sp]);
+ break;
+
+ case 0x68: // ROUND[0] -- round grey distance
+ stack[sp] = round(stack[sp], /* no engine compensation */ 0);
+ break;
+
+ case 0x69: // ROUND[1] -- round black distance
+ stack[sp] = round(stack[sp], -engineCompensation);
+ break;
+
+ case 0x6a: // ROUND[2] -- round white distance
+ stack[sp] = round(stack[sp], engineCompensation);
+ break;
+
+ case 0x6b: // ROUND[3] -- round distance (not yet defined)
+ stack[sp] = round(stack[sp], /* no engine compensation */ 0);
+ break;
+
+ case 0x6c: // NROUND[0] -- compensate grey distance
+ stack[sp] = nround(stack[sp], 0);
+ break;
+
+ case 0x6d: // NROUND[1] -- compensate black distance
+ stack[sp] = nround(stack[sp], -engineCompensation);
+ break;
+
+ case 0x6e: // NROUND[2] -- compensate white distance
+ stack[sp] = nround(stack[sp], engineCompensation);
+ break;
+
+ case 0x6f: // NROUND[3] -- compensate distance (not yet defined)
+ stack[sp] = nround(stack[sp], 0);
+ break;
+
+ case 0x70: // WCVTF, Write Control Value Table in Funits
+ e1 = stack[sp--];
+ cvt[stack[sp--]] = e1 * getPixelsPerEM();
+ break;
+
+ case 0x73: // DELTAC1, DELTA exception C1
+ count = stack[sp--];
+ sp -= 2 * count;
+ deltaC(stack, sp + 1, count, 0);
+ break;
+
+ case 0x74: // DELTAC2, DELTA exception C2
+ count = stack[sp--];
+ sp -= 2 * count;
+ deltaC(stack, sp + 1, count, 16);
+ break;
+
+ case 0x75: // DELTAC3, DELTA exception C3
+ count = stack[sp--];
+ sp -= 2 * count;
+ deltaC(stack, sp + 1, count, 32);
+ break;
+
+ case 0x76: // SROUND, Super ROUND
+ setRoundingMode(Fixed.ONE, stack[sp--]);
+ break;
+
+ case 0x77: // S45ROUND, Super ROUND 45 degrees
+ setRoundingMode(/* sqrt(2)/2 */ 0x2d, stack[sp--]);
+ break;
+
+ case 0x78: // JROT, Jump Relative On True
+ e1 = stack[sp--];
+ i = inst.position() - 1 + stack[sp--];
+ if (e1 != 0)
+ inst.position(i);
+ break;
+
+ case 0x79: // JROF, Jump Relative On False
+ e1 = stack[sp--];
+ i = inst.position() - 1 + stack[sp--];
+ if (e1 == 0)
+ inst.position(i);
+ break;
+
+ case 0x7a: // ROFF, Round OFF
+ roundPeriod = 0;
+ break;
+
+ case 0x7c: // RUTG, Round Up To Grid
+ setRoundingMode(Fixed.ONE, 0x40);
+ break;
+
+ case 0x7d: // RDTG, Round Down To Grid
+ setRoundingMode(Fixed.ONE, 0x40);
+ roundThreshold = 0;
+ break;
+
+ case 0x7e: // SANGW, Set ANGle Weight (no-op according to TrueType spec)
+ case 0x7f: // AA, Adjust Angle (no-op according to TrueType spec)
+ sp--;
+ break;
+
+ case 0x85: // SCANCTRL, SCAN conversion ConTRoL
+ e1 = stack[sp--];
+ int ppemThreshold = e1 & 255;
+ scanControl = false;
+ boolean ppemCondition = (ppemThreshold == 255)
+ || ((ppemThreshold != 0) && (getPixelsPerEM() > ppemThreshold));
+ if (((e1 & (1<<8)) != 0) && ppemCondition)
+ scanControl = true;
+ if (((e1 & (1<<9)) != 0) && isRotated())
+ scanControl = true;
+ if (((e1 & (1<<10)) != 0) && isStretched())
+ scanControl = true;
+ if (((e1 & (1<<11)) != 0) && !ppemCondition)
+ scanControl = false;
+ if (((e1 & (1<<12)) != 0) && !isRotated())
+ scanControl = false;
+ if (((e1 & (1<<13)) != 0) && !isStretched())
+ scanControl = false;
+ break;
+
+ case 0x88: // GETINFO, GET INFOrmation
+ e1 = 0;
+ if ((stack[sp] & 1) != 0) // ask for rasterizer version
+ e1 |= 35; // "Microsoft Rasterizer version 1.7" (grayscale-capable)
+ if (((stack[sp] & 2) != 0) && isRotated())
+ e1 |= 1 << 8; // bit 8: glyph has been rotated
+ if (((stack[sp] & 4) != 0) && isStretched())
+ e1 |= 1 << 9; // bit 9: glyph has been stretched
+ if (((stack[sp] & 32) != 0) && antialiased)
+ e1 |= 1 << 12; // bit 12: antialiasing is active
+ stack[sp] = e1;
+ break;
+
+ case 0x8a: // ROLL, ROLL the top three stack elements
+ e1 = stack[sp - 2];
+ stack[sp - 2] = stack[sp - 1];
+ stack[sp - 1] = stack[sp];
+ stack[sp] = e1;
+ break;
+
+ case 0x8b: // MAX, MAXimum of top two stack elements
+ e1 = stack[sp--];
+ stack[sp] = Math.max(e1, stack[sp]);
+ break;
+
+ case 0x8c: // MIN, MINimum of top two stack elements
+ e1 = stack[sp--];
+ stack[sp] = Math.min(e1, stack[sp]);
+ break;
+
+ case 0x8d: // SCANTYPE
+ scanType = stack[sp--];
+ break;
+
+ case 0x8e: // INSTCTRL, INSTRuction execution ConTRoL
+ e1 = stack[sp--]; // selector
+ e2 = stack[sp--]; // value
+ switch (e1)
+ {
+ case 1:
+ executeGlyphInstructions = (e2 == 0);
+ break;
+
+ case 2:
+ ignoreCVTProgram = (e2 != 0);
+ break;
+ }
+ break;
+
+ case 0xb0: // PUSHB[0]
+ case 0xb1: // PUSHB[1]
+ case 0xb2: // PUSHB[2]
+ case 0xb3: // PUSHB[3]
+ case 0xb4: // PUSHB[4]
+ case 0xb5: // PUSHB[5]
+ case 0xb6: // PUSHB[6]
+ case 0xb7: // PUSHB[7]
+ count = bcode - 0xb0 + 1;
+ for (i = 0; i < count; i++)
+ stack[++sp] = inst.get() & 0xff;
+ break;
+
+ case 0xb8: // PUSHW[0]
+ case 0xb9: // PUSHW[1]
+ case 0xba: // PUSHW[2]
+ case 0xbb: // PUSHW[3]
+ case 0xbc: // PUSHW[4]
+ case 0xbd: // PUSHW[5]
+ case 0xbe: // PUSHW[6]
+ case 0xbf: // PUSHW[7]
+ count = bcode - 0xb8 + 1;
+ for (i = 0; i < count; i++)
+ stack[++sp] = inst.getShort();
+ break;
+
+ // MIRPxxxx, Move Indirect Relative Point
+ case 0xe0: case 0xe1: case 0xe2: case 0xe3:
+ case 0xe4: case 0xe5: case 0xe6: case 0xe7:
+ case 0xe8: case 0xe9: case 0xea: case 0xeb:
+ case 0xec: case 0xed: case 0xee: case 0xef:
+ case 0xf0: case 0xf1: case 0xf2: case 0xf3:
+ case 0xf4: case 0xf5: case 0xf6: case 0xf7:
+ case 0xf8: case 0xf9: case 0xfa: case 0xfb:
+ case 0xfc: case 0xfd: case 0xfe: case 0xff:
+ e1 = stack[sp--];
+ handleMIRP(bcode, /* point */ e1, /* cvtIndex */ stack[sp--]);
+ break;
+
+ default:
+ throw new IllegalStateException();
+ }
+
+ return true;
+ }
+
+
+ /**
+ * Sets the rounding mode.
+ *
+ * @param period the grid period in fixed-point notation, such as
+ * {@link Fixed#ONE} for the <code>SROUND</code> instruction or
+ * <code>sqrt(2)/2</code> for the <code>S45ROUND</code> instruction.
+ *
+ * @param mode a byte whose bits are set according to the TrueType
+ * specification for SROUND and S45ROUND parameters.
+ */
+ private void setRoundingMode(int period, int mode)
+ {
+ /* Set the period. */
+ switch ((mode & 0xc0) >> 6)
+ {
+ case 0:
+ roundPeriod = period / 2;
+ break;
+
+ case 2:
+ roundPeriod = period * 2;
+ break;
+
+ default:
+ roundPeriod = period;
+ break;
+ }
+
+ /* Set the phase. */
+ switch ((mode & 0x30) >> 4)
+ {
+ case 0:
+ roundPhase = 0;
+ break;
+
+ case 1:
+ roundPhase = roundPeriod >> 2; // period/4
+ break;
+
+ case 2:
+ roundPhase = roundPeriod >> 1; // period/2
+ break;
+
+ case 3:
+ roundPhase = (roundPeriod >> 1) + (roundPeriod >> 2); // period * 3/4
+ break;
+ }
+
+ /* Set the threshold. */
+ int threshold = mode & 0x0f;
+ if (threshold == 0)
+ roundThreshold = roundPeriod - Fixed.ONE;
+ else
+ roundThreshold = ((threshold - 4) * roundPeriod) / 8;
+ }
+
+
+
+ /**
+ * Implements the DELTAC instructions. These instructions check
+ * whether the current number of pixels per em is contained in an
+ * exception table. If it is, a delta value is determined, and the
+ * specified entry in the Control Value Table is modified according
+ * to the delta.
+ *
+ * @param pairs the delta table. Because the delta table is on
+ * the stack, callers usually just want to pass the stack array.
+ *
+ * @param offset the offset of the first pair in <code>pairs</code>.
+ *
+ * @param numPairs the number of pairs.
+ *
+ * @param base 0 for <code>DELTAC1</code>, 16 for <code>DELTAC2</code>,
+ * or 32 for <code>DELTAC2</code>.
+ *
+ * @see <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html#DELTAC1"
+ * >Apple&#x2019;s documentation for <code>DELTAC1</code></a>, <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html#DELTAC2"
+ * ><code>DELTAC2</code></a>, and <a href=
+ * "http://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html#DELTAC3"
+ * ><code>DELTAC3</code></a>
+ */
+ private void deltaC(int[] pairs, int offset, int numPairs, int base)
+ {
+ int arg, relativePpem;
+ int ppemTrigger = getPixelsPerEM() - (deltaBase + base);
+ int delta, cvtIndex, rightShift;
+ for (int i = 0; i < numPairs; i++)
+ {
+ arg = pairs[offset + 2 * i];
+ relativePpem = (arg >> 4) & 15;
+ if (relativePpem == ppemTrigger)
+ {
+ delta = (arg & 15) - 8;
+ if (delta >= 0)
+ ++delta;
+
+ rightShift = deltaShift - 6;
+ if (rightShift > 0)
+ delta = delta >> rightShift;
+ else if (rightShift < 0)
+ delta = delta << (-rightShift);
+ cvt[pairs[offset + 2 * i + 1]] += delta;
+
+ break;
+ }
+ }
+ }
+
+
+ private Zone getZone(int zoneNumber)
+ {
+ return (zoneNumber == 0) ? twilightZone : glyphZone;
+ }
+
+
+ /**
+ * Projects the specified vector along the current projection
+ * vector.
+ *
+ * @param x the x component of the input vector, in 26.6 fixed-point
+ * notation.
+ *
+ * @param y the y component of the input vector, in 26.6 fixed-point
+ * notation.
+ *
+ * @return the projected distance, in 26.6 fixed-point notation.
+ */
+ private int getProjection(int x, int y)
+ {
+ return (int) (((((long) x) * projX + ((long) y) * projY)) >> 14);
+ }
+
+
+ /**
+ * Projects the specified vector along the current dual projection
+ * vector.
+ *
+ * @param x the x component of the input vector, in 26.6 fixed-point
+ * notation.
+ *
+ * @param y the y component of the input vector, in 26.6 fixed-point
+ * notation.
+ *
+ * @return the projected distance, in 26.6 fixed-point notation.
+ */
+ private int getDualProjection(int x, int y)
+ {
+ return (int) (((((long) x) * dualX + ((long) y) * dualY)) >> 14);
+ }
+
+
+ private int getProjection(Zone zone, int point)
+ {
+ return getProjection(zone.getX(point), zone.getY(point));
+ }
+
+
+ private int getOriginalProjection(Zone zone, int point)
+ {
+ return getDualProjection(zone.getOriginalX(point),
+ zone.getOriginalY(point));
+ }
+
+
+ private void handleISECT(int a0, int a1, int b0, int b1, int p)
+ {
+ System.out.println("FIXME: Unimplemented ISECT " + p);
+ }
+
+
+ private static int muldiv(int a, int b, int c)
+ {
+ int s;
+ s = a; a = Math.abs(a);
+ s ^= b; b = Math.abs(b);
+ s ^= c; c = Math.abs(c);
+ a = (int) ((((long) a) * b + (c>>1)) / c);
+ return (s < 0) ? -a : a;
+ }
+
+
+ private int getFreeDotProj()
+ {
+ int result;
+
+ result = ((((int) projX) * freeX) << 2)
+ + ((((int) projY) * freeY) << 2);
+
+ /* FIXME: This seems somewhat bogus. Need to contact the
+ * developers of FreeType.
+ */
+ if (Math.abs(result) < 0x4000000)
+ result = 0x40000000;
+ return result;
+ }
+
+
+ private void movePoint(Zone zone, int point, int distance)
+ {
+ int freeDotProj = getFreeDotProj();
+ int c;
+
+ if (freeX != 0)
+ {
+ c = zone.getX(point);
+ c += muldiv(distance, freeX << 16, freeDotProj);
+ zone.setX(point, c, /* touch */ true);
+ }
+
+ if (freeY != 0)
+ {
+ c = zone.getY(point);
+ c += muldiv(distance, freeY << 16, freeDotProj);
+ zone.setY(point, c, /* touch */ true);
+ }
+
+ if (TRACE_EXECUTION)
+ {
+ System.out.println("point[" + point + "] moved to "
+ + Fixed.toString(zone.getX(point),
+ zone.getY(point)));
+ dumpVectors();
+ }
+ }
+
+ private void dumpVectors()
+ {
+ System.out.println(" proj=" + Fixed.toString(projX>>8, projY>>8)
+ + ", free=" + Fixed.toString(freeX>>8, freeY>>8));
+ }
+
+
+ private void handleIP()
+ {
+ // Implementation taken from FreeType.
+ int p, org_a, org_b, org_x, cur_a, cur_b, cur_x, distance;
+ int freeDotProj;
+
+ org_a = getOriginalProjection(zp0, rp1);
+ cur_a = getProjection(zp0, rp1);
+
+ org_b = getOriginalProjection(zp1, rp2);
+ cur_b = getProjection(zp1, rp2);
+
+ while (--loop >= 0)
+ {
+ p = stack[sp--];
+ org_x = getOriginalProjection(zp2, p);
+ cur_x = getProjection(zp2, p);
+
+ if (((org_a <= org_b) && (org_x <= org_a))
+ || ((org_a > org_b) && (org_x >= org_a)))
+ distance = (cur_a - org_a) + (org_x - cur_x);
+ else if (((org_a <= org_b) && (org_x >= org_b))
+ || ((org_a > org_b) && (org_x < org_b)))
+ distance = (cur_b - org_b) + (org_x - cur_x);
+ else
+ distance = muldiv(cur_b - cur_a, org_x - org_a, org_b - org_a)
+ + (cur_a - cur_x);
+ movePoint(zp2, p, distance);
+ }
+ loop = 1;
+ }
+
+
+ private void handleMDAP(int point, boolean round)
+ {
+ System.out.println("FIXME: Unimplemented MDAP: point "
+ + point + "/" + zp0);
+ }
+
+
+ private void handleMIAP(int cvtIndex, int point, boolean round)
+ {
+ int previousPos, pos;
+
+ previousPos = getProjection(zp0, point);
+ pos = cvt[cvtIndex];
+
+ if (round)
+ {
+ if (Math.abs(pos - previousPos) > cvtCutIn)
+ pos = previousPos;
+ pos = round(pos, /* no engine compensation */ 0);
+ }
+ movePoint(zp0, point, pos - previousPos);
+ rp0 = rp1 = point;
+ }
+
+
+ private void handleMIRP(int bcode, int point, int cvtIndex)
+ {
+ System.out.println("FIXME: Unimplemented mirp " + point + ", " + cvtIndex);
+ }
+
+
+
+ private int round(int distance, int compensation)
+ {
+ int result;
+
+ if (roundPeriod == 0)
+ return nround(distance, compensation);
+
+ if (distance >= 0)
+ {
+ result = distance + compensation - roundPhase + roundThreshold;
+ result &= -roundPeriod; // truncate to the next lowest periodic value
+ return Math.max(result, 0) + roundPhase;
+ }
+ else
+ {
+ result = compensation - roundPhase + roundThreshold - distance;
+ result &= -roundPeriod;
+ return Math.max(-result, 0) - roundPhase;
+ }
+ }
+
+
+ private static int nround(int distance, int compensation)
+ {
+ if (distance >= 0)
+ return Math.max(distance + compensation, 0);
+ else
+ return Math.min(distance - compensation, 0);
+ }
+
+
+ /**
+ * Determines whether the current glyph is rotated.
+ *
+ * @return <code>false</code> if the shearing factors for the
+ * <i>x</i> and <i>y</i> axes are zero; <code>true</code> if they
+ * are non-zero.
+ */
+ private boolean isRotated()
+ {
+ return (shearX != 0) || (shearY != 0);
+ }
+
+
+ /**
+ * Determines whether the current glyph is stretched.
+ *
+ * @return <code>false</code> if the scaling factors for the
+ * <i>x</i> and <i>y</i> axes are are equal; <code>true</code> if
+ * they differ.
+ */
+ private boolean isStretched()
+ {
+ return scaleX != scaleY;
+ }
+
+
+ /**
+ * Returns how many pixels there are per EM, in direction of the
+ * current projection vector. The result is a normal integer,
+ * not a Fixed.
+ */
+ private int getPixelsPerEM()
+ {
+ if (cachedPixelsPerEM == 0)
+ {
+ cachedPixelsPerEM = Fixed.intValue(Fixed.vectorLength(
+ applyCTM_x(projX >> 8, projY >> 8),
+ applyCTM_y(projX >> 8, projY >> 8)));
+ }
+
+ return cachedPixelsPerEM;
+ }
+
+
+ private void setProjectionVector(short x, short y)
+ {
+ if (PATENTED_HINTING)
+ {
+ if ((x != projX) || (y != projY))
+ cachedPixelsPerEM = 0;
+
+ projX = x;
+ projY = y;
+ }
+ }
+
+
+ private void setFreedomVector(short x, short y)
+ {
+ if (PATENTED_HINTING)
+ {
+ freeX = x;
+ freeY = y;
+ }
+ }
+
+
+ private void setDualVector(short x, short y)
+ {
+ if (PATENTED_HINTING)
+ {
+ dualX = x;
+ dualY = y;
+ }
+ }
+
+
+ private int applyCTM_x(int x, int y)
+ {
+ return (int) (((long) scaleX * x + (long) shearX * y) >> 6);
+ }
+
+ private int applyCTM_y(int x, int y)
+ {
+ return (int) (((long) shearY * x + (long) scaleY * y) >> 6);
+ }
+
+
+ private static final String[] INST_NAME =
+ {
+ /* 00 */ "SVTCA[0]", "SVTCA[1]", "SPVTCA[0]", "SPVTCA[1]",
+ /* 04 */ "INST_04", "INST_05", "INST_06", "INST_07",
+ /* 08 */ "INST_08", "INST_09", "INST_0A", "INST_0B",
+ /* 0c */ "GPV", "GFV", "INST_0E", "ISECT",
+ /* 10 */ "SRP0", "SRP1", "SRP2", "SZP0",
+ /* 14 */ "SZP1", "SZP2", "SZPS", "SLOOP",
+ /* 18 */ "RTG", "RTHG", "SMD", "ELSE",
+ /* 1c */ "JMPR", "SCVTCI", "INST_1E", "SSW",
+ /* 20 */ "DUP", "POP", "CLEAR", "SWAP",
+ /* 24 */ "DEPTH", "CINDEX", "MINDEX", "INST_27",
+ /* 28 */ "INST_28", "INST_29", "LOOPCALL", "CALL",
+ /* 2c */ "FDEF", "ENDF", "MDAP[0]", "MDAP[1]",
+ /* 30 */ "IUP[0]", "IUP[1]", "SHP[0]", "SHP[1]",
+ /* 34 */ "INST_34", "INST_35", "INST_36", "INST_37",
+ /* 38 */ "INST_38", "IP", "INST_3A", "INST_3B",
+ /* 3c */ "INST_3C", "RTDG", "MIAP[0]", "MIAP[1]",
+ /* 40 */ "NPUSHB", "NPUSHW", "WS", "RS",
+ /* 44 */ "WCVTP", "RCVT", "GC[0]", "GC[1]",
+ /* 48 */ "INST_48", "INST_49", "INST_4A", "MPPEM",
+ /* 4c */ "MPS", "FLIPON", "FLIPOFF", "DEBUG",
+ /* 50 */ "LT", "LTEQ", "GT", "GTEQ",
+ /* 54 */ "EQ", "NEQ", "INST_56", "INST_57",
+ /* 58 */ "IF", "EIF", "AND", "OR",
+ /* 5c */ "INST_5C", "INST_5D", "SDB", "SDS",
+ /* 60 */ "ADD", "SUB", "DIV", "MUL",
+ /* 64 */ "ABS", "NEG", "FLOOR", "CEILING",
+ /* 68 */ "ROUND[0]", "ROUND[1]", "ROUND[2]", "ROUND[3]",
+ /* 6c */ "NROUND[0]", "NROUND[1]", "NROUND[2]", "NROUND[3]",
+ /* 70 */ "WCVTF", "INST_71", "INST_72", "DELTAC1",
+ /* 74 */ "DELTAC2", "DELTAC3", "SROUND", "S45ROUND",
+ /* 78 */ "JROT", "JROF", "ROFF", "INST_7B",
+ /* 7c */ "RUTG", "RDTG", "SANGW", "AA",
+ /* 80 */ "FLIPPT", "FLIPRGON", "FLIPRGOFF", "INST_83",
+ /* 84 */ "INST_84", "SCANCTRL", "INST_86", "INST_87",
+ /* 88 */ "GETINFO", "INST_89", "ROLL", "MAX",
+ /* 8c */ "MIN", "SCANTYPE", "INSTCTRL", "INST_8F",
+ /* 90 */ "INST_90", "INST_91", "INST_92", "INST_93",
+ /* 94 */ "INST_94", "INST_95", "INST_96", "INST_97",
+ /* 98 */ "INST_98", "INST_99", "INST_9A", "INST_9B",
+ /* 9c */ "INST_9C", "INST_9D", "INST_9E", "INST_9F",
+ /* a0 */ "INST_A0", "INST_A1", "INST_A2", "INST_A3",
+ /* a4 */ "INST_A4", "INST_A5", "INST_A6", "INST_A7",
+ /* a8 */ "INST_A8", "INST_A9", "INST_AA", "INST_AB",
+ /* ac */ "INST_AC", "INST_AD", "INST_AE", "INST_AF",
+ /* b0 */ "PUSHB[0]", "PUSHB[1]", "PUSHB[2]", "PUSHB[3]",
+ /* b4 */ "PUSHB[4]", "PUSHB[5]", "PUSHB[6]", "PUSHB[7]",
+ /* b8 */ "PUSHW[0]", "PUSHW[1]", "PUSHW[2]", "PUSHW[3]",
+ /* bc */ "PUSHW[4]", "PUSHW[5]", "PUSHW[6]", "PUSHW[7]",
+ /* c0 */ "INST_C0", "INST_C1", "INST_C2", "INST_C3",
+ /* c4 */ "INST_C4", "INST_C5", "INST_C6", "INST_C7",
+ /* c8 */ "INST_C8", "INST_C9", "INST_CA", "INST_CB",
+ /* cc */ "INST_CC", "INST_CD", "INST_CE", "INST_CF",
+ /* d0 */ "INST_D0", "INST_D1", "INST_D2", "INST_D3",
+ /* d4 */ "INST_D4", "INST_D5", "INST_D6", "INST_D7",
+ /* d8 */ "INST_D8", "INST_D9", "INST_DA", "INST_DB",
+ /* dc */ "INST_DC", "INST_DD", "INST_DE", "INST_DF",
+ /* e0 */ "MIRP00000", "MIRP00001", "MIRP00010", "MIRP00011",
+ /* e4 */ "MIRP00100", "MIRP00101", "MIRP00110", "MIRP00111",
+ /* e8 */ "MIRP01000", "MIRP01001", "MIRP01010", "MIRP01011",
+ /* ec */ "MIRP01100", "MIRP01101", "MIRP01110", "MIRP01111",
+ /* f0 */ "MIRP10000", "MIRP10001", "MIRP10010", "MIRP10011",
+ /* f4 */ "MIRP10100", "MIRP10101", "MIRP10110", "MIRP10111",
+ /* f8 */ "MIRP11000", "MIRP11001", "MIRP11010", "MIRP11011",
+ /* fc */ "MIRP11100", "MIRP11101", "MIRP11110", "MIRP11111"
+ };
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/Zone.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/Zone.java
new file mode 100644
index 0000000..c0a3947
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/Zone.java
@@ -0,0 +1,243 @@
+/* Zone.java -- A collection of points with some additional information.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.PathIterator;
+
+
+/**
+ * A collection of points with some additional information.
+ */
+final class Zone
+{
+ private final int[] pos;
+ private final int[] origPos;
+ private final byte[] flags;
+ private int numPoints;
+
+ private static final int FLAG_TOUCHED_X = 1;
+ private static final int FLAG_TOUCHED_Y = 2;
+ private static final int FLAG_ON_CURVE = 4;
+ private static final int FLAG_CONTOUR_END = 8;
+
+ public Zone(int maxNumPoints)
+ {
+ origPos = new int[maxNumPoints * 2];
+ pos = new int[maxNumPoints * 2];
+ flags = new byte[maxNumPoints];
+ }
+
+
+ public int getCapacity()
+ {
+ return flags.length;
+ }
+
+
+ public int getSize()
+ {
+ return numPoints;
+ }
+
+
+ public int getX(int point)
+ {
+ return pos[2 * point];
+ }
+
+
+ public void setX(int point, int value, boolean touch)
+ {
+ pos[2 * point] = value;
+ if (touch)
+ flags[point] |= FLAG_TOUCHED_X;
+ }
+
+
+ public void setY(int point, int value, boolean touch)
+ {
+ pos[2 * point + 1] = value;
+ if (touch)
+ flags[point] |= FLAG_TOUCHED_Y;
+ }
+
+
+ public int getY(int point)
+ {
+ return pos[2 * point + 1];
+ }
+
+
+ public int getOriginalX(int point)
+ {
+ return origPos[2 * point];
+ }
+
+
+ public int getOriginalY(int point)
+ {
+ return origPos[2 * point + 1];
+ }
+
+
+ public void setOriginalX(int point, int x)
+ {
+ origPos[2 * point] = x;
+ }
+
+ public void setOriginalY(int point, int y)
+ {
+ origPos[2 * point + 1] = y;
+ }
+
+ public void setNumPoints(int numPoints)
+ {
+ this.numPoints = numPoints;
+ for (int i = 0; i < numPoints; i++)
+ flags[i] = 0;
+ for (int i = 0; i < 2 * numPoints; i++)
+ origPos[i] = pos[i] = 0;
+ }
+
+
+ public boolean isOnCurve(int point)
+ {
+ return (flags[point] & FLAG_ON_CURVE) != 0;
+ }
+
+
+ public void setOnCurve(int point, boolean onCurve)
+ {
+ if (onCurve)
+ flags[point] |= FLAG_ON_CURVE;
+ else
+ flags[point] &= ~FLAG_ON_CURVE;
+ }
+
+
+ public boolean isContourEnd(int point)
+ {
+ return (flags[point] & FLAG_CONTOUR_END) != 0;
+ }
+
+
+ public void setContourEnd(int point, boolean segEnd)
+ {
+ if (segEnd)
+ flags[point] |= FLAG_CONTOUR_END;
+ else
+ flags[point] &= ~FLAG_CONTOUR_END;
+ }
+
+
+
+
+ void transform(double pointSize, AffineTransform deviceTransform,
+ int unitsPerEm, int preTranslateX, int preTranslateY)
+ {
+ double scaleX, scaleY, shearX, shearY;
+ double factor;
+
+ factor = pointSize / (double) unitsPerEm;
+ scaleX = deviceTransform.getScaleX() * factor;
+ scaleY = deviceTransform.getScaleY() * factor;
+ shearX = deviceTransform.getShearX() * factor;
+ shearY = deviceTransform.getShearY() * factor;
+
+ for (int i = 0; i < numPoints; i++)
+ {
+ int x = origPos[2 * i] + preTranslateX;
+ int y = origPos[2 * i + 1] + preTranslateY;
+
+ origPos[2*i] = pos[2 * i] = Fixed.valueOf(scaleX * x + shearX * y);
+ origPos[2*i+1] = pos[2 * i + 1] = Fixed.valueOf(shearY * x + scaleY * y);
+ }
+ }
+
+
+
+ void combineWithSubGlyph(Zone zone, int numPhantomPoints)
+ {
+ int offset = this.numPoints - numPhantomPoints;
+ int count = zone.numPoints;
+ System.arraycopy(zone.origPos, 0, this.origPos, 2 * offset,
+ count * 2);
+ System.arraycopy(zone.pos, 0, this.pos, 2 * offset,
+ count * 2);
+ System.arraycopy(zone.flags, 0, this.flags, offset, count);
+ this.numPoints += count - numPhantomPoints;
+ }
+
+
+ private void dump()
+ {
+ for (int i = 0; i < numPoints; i++)
+ {
+ System.out.print(" " + i + ": ");
+ System.out.print(Fixed.toString(pos[i*2], pos[i*2+1]));
+ System.out.print(' ');
+ System.out.print(Fixed.toString(origPos[i*2], origPos[i*2+1]));
+ System.out.print(' ');
+ if (isOnCurve(i))
+ System.out.print('.');
+ else
+ System.out.print('c');
+ if (isContourEnd(i))
+ System.out.print('E');
+ System.out.println();
+ if (isContourEnd(i))
+ System.out.println();
+ }
+ }
+
+
+ public PathIterator getPathIterator()
+ {
+ return new ZonePathIterator(this);
+ }
+
+
+ public GeneralPath getPath()
+ {
+ GeneralPath p = new GeneralPath(GeneralPath.WIND_NON_ZERO, numPoints);
+ p.append(getPathIterator(), /* connect */ false);
+ return p;
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java b/libjava/classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java
new file mode 100644
index 0000000..d000b9c
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java
@@ -0,0 +1,391 @@
+/* ZonePathIterator.java -- A PathIterator over glyph zones.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.font.opentype.truetype;
+
+import java.awt.geom.PathIterator;
+
+
+/**
+ * A PathIterator that enumerates the non-phantom points in a zone.
+ *
+ * <p><b>Lack of thread safety:</b> Instances of this class are
+ * <i>not</i> safe to access from multiple concurrent threads.
+ *
+ * @see Zone
+ *
+ * @author Sascha Brawer (brawer@dandelis.ch)
+ */
+final class ZonePathIterator
+ implements PathIterator
+{
+ /**
+ * If <code>state</code> has this value, <code>currentSegment</code>
+ * will emit a <code>SEG_LINETO</code> or <code>SEG_QUADTO</code> segment
+ * to the current point. For a discussion of subtleties of on-curve
+ * and off-curve points, please refer to the documentation for
+ * {@link #getSegment}.
+ */
+ private static final int EMIT_SEGMENT = 0;
+
+
+ /**
+ * If <code>state</code> has this value, <code>currentSegment</code>
+ * will emit a <code>SEG_CLOSE</code> in order to close the sub-path
+ * for the current contour.
+ */
+ private static final int EMIT_CLOSE = 1;
+
+
+ /**
+ * If <code>state</code> has this value, <code>currentSegment</code>
+ * will emit a <code>SEG_MOVETO</code> segment to the first point in
+ * the current contour. If the first point is off-curve, a suitable
+ * on-curve point is calculated.
+ *
+ * @see #getStartSegment
+ */
+ private static final int EMIT_MOVETO = 2;
+
+
+ /**
+ * The state of the iterator, which is one of
+ * <code>EMIT_SEGMENT</code>, <code>EMIT_CLOSE</code>, or
+ * <code>EMIT_MOVETO</code>.
+ */
+ private int state;
+
+
+
+ /**
+ * The zone whose segments are enumerated by this iterator.
+ */
+ private Zone zone;
+
+
+ /**
+ * The total number of points in the zone, not including the four
+ * phantom points at its end.
+ */
+ private int numPoints;
+
+
+ /**
+ * The number of the current point.
+ */
+ private int curPoint;
+
+
+ /**
+ * The number of the first point in the current contour.
+ */
+ private int contourStart;
+
+
+
+ /**
+ * Constructs a ZonePathIterator for the specified zone.
+ *
+ * @param zone the zone whose segments will be enumerated
+ * by this iterator.
+ */
+ ZonePathIterator(Zone zone)
+ {
+ this.zone = zone;
+ numPoints = zone.getSize() - /* four phantom points */ 4;
+
+ // The first segment that needs to be emitted is a SEG_MOVETO.
+ state = EMIT_MOVETO;
+ }
+
+
+ /**
+ * Returns the winding rule. TrueType glyphs always use the non-zero
+ * winding rule, so this method will always return {@link
+ * PathIterator#WIND_NON_ZERO}.
+ */
+ public int getWindingRule()
+ {
+ return PathIterator.WIND_NON_ZERO;
+ }
+
+
+
+ public boolean isDone()
+ {
+ return (state != EMIT_CLOSE) && (curPoint >= numPoints);
+ }
+
+
+ public void next()
+ {
+ boolean onCurve;
+
+ /* If the current point is the end of a segment, and no SEG_CLOSE
+ * has been emitted yet, this will be the next segment.
+ */
+ if (zone.isContourEnd(curPoint) && (state != EMIT_CLOSE))
+ {
+ state = EMIT_CLOSE;
+ return;
+ }
+
+ /* If the previously emitted segment was a SEG_CLOSE, we are now
+ * at the beginning of a new contour.
+ */
+ if (state == EMIT_CLOSE)
+ {
+ contourStart = ++curPoint;
+ state = EMIT_MOVETO;
+ return;
+ }
+
+ onCurve = zone.isOnCurve(curPoint);
+
+ /* If the last segment was a moveto, and the current point
+ * (which is the first point in the contour) is off-curve,
+ * we need to emit a quadto segment for the first point.
+ */
+ if ((state == EMIT_MOVETO) && !onCurve)
+ {
+ state = EMIT_SEGMENT;
+ return;
+ }
+
+
+ curPoint++;
+
+ /* If the last point has been off-curve, and the now current
+ * point is on-curve, the last segment was a quadto that
+ * had the now current point at its end. In this case, we can
+ * skip a segment.
+ */
+ if (!onCurve && zone.isOnCurve(curPoint))
+ {
+ /* But if the skipped point is the end of a contour, we must not
+ * skip the SEG_CLOSE. An example where this matters is the 'o'
+ * glyph in the Helvetica font face that comes with MacOS X
+ * 10.1.5.
+ */
+ if (zone.isContourEnd(curPoint))
+ {
+ state = EMIT_CLOSE;
+ return;
+ }
+
+ curPoint++;
+ }
+
+ state = EMIT_SEGMENT;
+ }
+
+
+ /**
+ * Determines the successor of the current point in the current
+ * contour. The successor of the last point in a contour is the
+ * start of that contour.
+ *
+ * @return the number of the point that follows the current point in
+ * the same contour.
+ */
+ private int getSuccessor(int p)
+ {
+ if (zone.isContourEnd(p))
+ return contourStart;
+ else
+ return p + 1;
+ }
+
+
+
+ /**
+ * Retrieves the current path segment using single-precision
+ * coordinate values.
+ */
+ public int currentSegment(float[] coords)
+ {
+ switch (state)
+ {
+ case EMIT_CLOSE:
+ return PathIterator.SEG_CLOSE;
+
+ case EMIT_MOVETO:
+ return getStartSegment(curPoint, coords);
+
+ default:
+ return getSegment(curPoint, coords);
+ }
+ }
+
+
+ /**
+ * A helper array that is used by {@link
+ * #currentSegment(double[])}.
+ */
+ float[] floats;
+
+
+ /**
+ * Retrieves the current path segment using double-precision
+ * coordinate values.
+ */
+ public int currentSegment(double[] coords)
+ {
+ if (floats == null)
+ floats = new float[6];
+ int result;
+
+ result = currentSegment(floats);
+ for (int i = 0; i < 6; i++)
+ coords[i] = floats[i];
+ return result;
+ }
+
+
+ /**
+ * Returns the segment for the specified point.
+ *
+ * <p><img src="doc-files/ZonePathIterator-1.png" width="426"
+ * height="194" alt="An example curve" /></p>
+ *
+ * <p>If <code>cur</code> is an on-curve point, the returned segment
+ * is a straight line to <code>cur</code>. In the illustration, this
+ * would be the case for <code>cur = 4</code>.</p>
+ *
+ * <p>If <code>cur</code> is an off-curve point, and
+ * <code>cur</code>&#x2019;s successor <code>succ</code> is also
+ * off-curve, the returned segment is a quadratic B&eacute;zier
+ * spline whose control point is <code>cur</code>, and whose end
+ * point is located at the middle of the line connecting
+ * <code>cur</code> and <code>succ</code>. In the illustration,
+ * this would be the case for <code>cur = 5</code>.</p>
+ *
+ * <p>If <code>cur</code> is an off-curve point, and
+ * <code>cur</code>&#x2019;s successor <code>succ</code> is
+ * on-curve, the returned segment is a quadratic B&eacute;zier
+ * spline whose control point is <code>cur</code>, and whose end
+ * point is <code>succ</code>. In the illustration, this would
+ * be the case for <code>cur = 6</code>.</p>
+ *
+ * @return either <code>PathIterator.SEG_LINETO</code> or
+ * <code>PathIterator.SEG_QUADTO</code>.
+ */
+ private int getSegment(int cur, float[] coords)
+ {
+ int curX, curY;
+ int succ, succX, succY;
+
+ curX = zone.getX(cur);
+ curY = zone.getY(cur);
+ coords[0] = Fixed.floatValue(curX);
+ coords[1] = Fixed.floatValue(curY);
+
+ if (zone.isOnCurve(cur))
+ return PathIterator.SEG_LINETO;
+
+ succ = getSuccessor(cur);
+ succX = zone.getX(succ);
+ succY = zone.getY(succ);
+
+ if (zone.isOnCurve(succ))
+ {
+ coords[2] = Fixed.floatValue(succX);
+ coords[3] = Fixed.floatValue(succY);
+ }
+ else
+ {
+ coords[2] = Fixed.floatValue((curX + succX) / 2);
+ coords[3] = Fixed.floatValue((curY + succY) / 2);
+ }
+ return PathIterator.SEG_QUADTO;
+ }
+
+
+ /**
+ * Returns the start segment for the contour which starts
+ * at the specified point.
+ *
+ * <p>If the contour starts with an on-curve point, the returned
+ * segment is a <code>SEG_MOVETO</code> to that point.</p>
+ *
+ * <p>If the contour starts with an off-curve point, and the contour
+ * ends with an on-curve point, the returned segment is a
+ * <code>SEG_MOVETO</code> to the end point.</p>
+ *
+ * <p>If the contour starts with an off-curve point, and the contour
+ * also ends with an off-curve point, the returned segment is a
+ * <code>SEG_MOVETO</code> to the location at the middle between the
+ * start and end points of the contour.</p>
+ *
+ * @return <code>PathIterator.SEG_MOVETO</code>.
+ */
+ private int getStartSegment(int contourStart, float[] coords)
+ {
+ int x, y;
+
+ if (zone.isOnCurve(contourStart))
+ {
+ x = zone.getX(contourStart);
+ y = zone.getY(contourStart);
+ }
+ else
+ {
+ /* Find the last point of the current contour. */
+ int contourEnd = contourStart;
+ while (!zone.isContourEnd(contourEnd))
+ ++contourEnd;
+
+ if (zone.isOnCurve(contourEnd))
+ {
+ /* An example is the 'o' glyph of the Helvetica which comes
+ * with Apple MacOS X 10.1.5.
+ */
+ x = zone.getX(contourEnd);
+ y = zone.getY(contourEnd);
+ }
+ else
+ {
+ x = (zone.getX(contourStart) + zone.getX(contourEnd)) / 2;
+ y = (zone.getY(contourStart) + zone.getY(contourEnd)) / 2;
+ }
+ }
+
+ coords[0] = Fixed.floatValue(x);
+ coords[1] = Fixed.floatValue(y);
+ return PathIterator.SEG_MOVETO;
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.dia b/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.dia
new file mode 100644
index 0000000..b715ea0
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.dia
Binary files differ
diff --git a/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.png b/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.png
new file mode 100644
index 0000000..81d09d8
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/font/opentype/truetype/doc-files/ZonePathIterator-1.png
Binary files differ
diff --git a/libjava/classpath/gnu/java/awt/java2d/AbstractGraphics2D.java b/libjava/classpath/gnu/java/awt/java2d/AbstractGraphics2D.java
new file mode 100644
index 0000000..e93c43e
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/AbstractGraphics2D.java
@@ -0,0 +1,1951 @@
+/* AbstractGraphics2D.java -- Abstract Graphics2D implementation
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.java2d;
+
+import java.awt.AWTError;
+import java.awt.AlphaComposite;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.CompositeContext;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Paint;
+import java.awt.PaintContext;
+import java.awt.Polygon;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.Toolkit;
+import java.awt.RenderingHints.Key;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Area;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Line2D;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Rectangle2D;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.BufferedImageOp;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.awt.image.WritableRaster;
+import java.awt.image.renderable.RenderableImage;
+import java.text.AttributedCharacterIterator;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Implements general and shared behaviour for Graphics2D implementation.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public abstract class AbstractGraphics2D
+ extends Graphics2D
+ implements Cloneable
+{
+
+ /**
+ * Accuracy of the sampling in the anti-aliasing shape filler.
+ * Lower values give more speed, while higher values give more quality.
+ * It is advisable to choose powers of two.
+ */
+ private static final int AA_SAMPLING = 8;
+
+ /**
+ * The transformation for this Graphics2D instance
+ */
+ private AffineTransform transform;
+
+ /**
+ * The foreground.
+ */
+ private Paint paint;
+
+ /**
+ * The background.
+ */
+ private Color background;
+
+ /**
+ * The current font.
+ */
+ private Font font;
+
+ /**
+ * The current composite setting.
+ */
+ private Composite composite;
+
+ /**
+ * The current stroke setting.
+ */
+ private Stroke stroke;
+
+ /**
+ * The current clip. This clip is in user coordinate space.
+ */
+ private Shape clip;
+
+ /**
+ * The rendering hints.
+ */
+ private RenderingHints renderingHints;
+
+ /**
+ * The paint raster.
+ */
+ private Raster paintRaster;
+
+ /**
+ * A cached pixel array.
+ */
+ private int[] pixel;
+
+ /**
+ * The raster of the destination surface. This is where the painting is
+ * performed.
+ */
+ private WritableRaster destinationRaster;
+
+ /**
+ * Stores the alpha values for a scanline in the anti-aliasing shape
+ * renderer.
+ */
+ private transient int[] alpha;
+
+ /**
+ * The edge table for the scanline conversion algorithms.
+ */
+ private transient ArrayList[] edgeTable;
+
+ /**
+ * Indicates if cerain graphics primitives can be rendered in an optimized
+ * fashion. This will be the case if the following conditions are met:
+ * - The transform may only be a translation, no rotation, shearing or
+ * scaling.
+ * - The paint must be a solid color.
+ * - The composite must be an AlphaComposite.SrcOver.
+ * - The clip must be a Rectangle.
+ * - The stroke must be a plain BasicStroke().
+ *
+ * These conditions represent the standard settings of a new
+ * AbstractGraphics2D object and will be the most commonly used setting
+ * in Swing rendering and should therefore be optimized as much as possible.
+ */
+ private boolean isOptimized;
+
+ /**
+ * Creates a new AbstractGraphics2D instance.
+ */
+ protected AbstractGraphics2D()
+ {
+ transform = new AffineTransform();
+ background = Color.WHITE;
+ composite = AlphaComposite.SrcOver;
+ stroke = new BasicStroke();
+ HashMap hints = new HashMap();
+ hints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
+ RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+ hints.put(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_DEFAULT);
+ renderingHints = new RenderingHints(hints);
+
+ pixel = new int[4];
+ }
+
+ /**
+ * Draws the specified shape. The shape is passed through the current stroke
+ * and is then forwarded to {@link #fillShape}.
+ *
+ * @param shape the shape to draw
+ */
+ public void draw(Shape shape)
+ {
+ // Stroke the shape.
+ Shape strokedShape = stroke.createStrokedShape(shape);
+
+ // Clip the stroked shape.
+// Shape clipped = clipShape(strokedShape);
+// if (clipped != null)
+// {
+// // Fill the shape.
+// fillShape(clipped, false);
+// }
+ // FIXME: Clipping doesn't seem to work.
+ fillShape(strokedShape, false);
+ }
+
+ public boolean drawImage(Image image, AffineTransform xform, ImageObserver obs)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public void drawRenderedImage(RenderedImage image, AffineTransform xform)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public void drawRenderableImage(RenderableImage image, AffineTransform xform)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Draws the specified string at the specified location.
+ *
+ * @param text the string to draw
+ * @param x the x location, relative to the bounding rectangle of the text
+ * @param y the y location, relative to the bounding rectangle of the text
+ */
+ public void drawString(String text, int x, int y)
+ {
+ FontRenderContext ctx = getFontRenderContext();
+ GlyphVector gv = font.createGlyphVector(ctx, text.toCharArray());
+ drawGlyphVector(gv, x, y);
+ }
+
+ /**
+ * Draws the specified string at the specified location.
+ *
+ * @param text the string to draw
+ * @param x the x location, relative to the bounding rectangle of the text
+ * @param y the y location, relative to the bounding rectangle of the text
+ */
+ public void drawString(String text, float x, float y)
+ {
+ FontRenderContext ctx = getFontRenderContext();
+ GlyphVector gv = font.createGlyphVector(ctx, text.toCharArray());
+ drawGlyphVector(gv, x, y);
+ }
+
+ /**
+ * Draws the specified string (as AttributedCharacterIterator) at the
+ * specified location.
+ *
+ * @param iterator the string to draw
+ * @param x the x location, relative to the bounding rectangle of the text
+ * @param y the y location, relative to the bounding rectangle of the text
+ */
+ public void drawString(AttributedCharacterIterator iterator, int x, int y)
+ {
+ FontRenderContext ctx = getFontRenderContext();
+ GlyphVector gv = font.createGlyphVector(ctx, iterator);
+ drawGlyphVector(gv, x, y);
+ }
+
+ /**
+ * Draws the specified string (as AttributedCharacterIterator) at the
+ * specified location.
+ *
+ * @param iterator the string to draw
+ * @param x the x location, relative to the bounding rectangle of the text
+ * @param y the y location, relative to the bounding rectangle of the text
+ */
+ public void drawString(AttributedCharacterIterator iterator, float x, float y)
+ {
+ FontRenderContext ctx = getFontRenderContext();
+ GlyphVector gv = font.createGlyphVector(ctx, iterator);
+ drawGlyphVector(gv, x, y);
+ }
+
+ /**
+ * Fills the specified shape with the current foreground.
+ *
+ * @param shape the shape to fill
+ */
+ public void fill(Shape shape)
+ {
+// Shape clipped = clipShape(shape);
+// if (clipped != null)
+// fillShape(clipped, false);
+ fillShape(shape, false);
+ }
+
+ public boolean hit(Rectangle rect, Shape text, boolean onStroke)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Sets the composite.
+ *
+ * @param comp the composite to set
+ */
+ public void setComposite(Composite comp)
+ {
+ composite = comp;
+ if (! (comp.equals(AlphaComposite.SrcOver)))
+ isOptimized = false;
+ else
+ updateOptimization();
+ }
+
+ /**
+ * Sets the current foreground.
+ *
+ * @param p the foreground to set.
+ */
+ public void setPaint(Paint p)
+ {
+ if (p != null)
+ {
+ paint = p;
+
+ if (! (paint instanceof Color))
+ isOptimized = false;
+ else
+ {
+ updateOptimization();
+ rawSetForeground((Color) paint);
+ }
+ }
+ }
+
+ /**
+ * Sets the stroke for this graphics object.
+ *
+ * @param s the stroke to set
+ */
+ public void setStroke(Stroke s)
+ {
+ stroke = s;
+ if (! stroke.equals(new BasicStroke()))
+ isOptimized = false;
+ else
+ updateOptimization();
+ }
+
+ /**
+ * Sets the specified rendering hint.
+ *
+ * @param hintKey the key of the rendering hint
+ * @param hintValue the value
+ */
+ public void setRenderingHint(Key hintKey, Object hintValue)
+ {
+ renderingHints.put(hintKey, hintValue);
+ }
+
+ /**
+ * Returns the rendering hint for the specified key.
+ *
+ * @param hintKey the rendering hint key
+ *
+ * @return the rendering hint for the specified key
+ */
+ public Object getRenderingHint(Key hintKey)
+ {
+ return renderingHints.get(hintKey);
+ }
+
+ /**
+ * Sets the specified rendering hints.
+ *
+ * @param hints the rendering hints to set
+ */
+ public void setRenderingHints(Map hints)
+ {
+ renderingHints.clear();
+ renderingHints.putAll(hints);
+ }
+
+ /**
+ * Adds the specified rendering hints.
+ *
+ * @param hints the rendering hints to add
+ */
+ public void addRenderingHints(Map hints)
+ {
+ renderingHints.putAll(hints);
+ }
+
+ /**
+ * Returns the current rendering hints.
+ *
+ * @return the current rendering hints
+ */
+ public RenderingHints getRenderingHints()
+ {
+ return (RenderingHints) renderingHints.clone();
+ }
+
+ /**
+ * Translates the coordinate system by (x, y).
+ *
+ * @param x the translation X coordinate
+ * @param y the translation Y coordinate
+ */
+ public void translate(int x, int y)
+ {
+ transform.translate(x, y);
+
+ // Update the clip. We special-case rectangular clips here, because they
+ // are so common (e.g. in Swing).
+ if (clip != null)
+ {
+ if (clip instanceof Rectangle)
+ {
+ Rectangle r = (Rectangle) clip;
+ r.x -= x;
+ r.y -= y;
+ setClip(r);
+ }
+ else
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.translate(-x, -y);
+ updateClip(clipTransform);
+ }
+ }
+ }
+
+ /**
+ * Translates the coordinate system by (tx, ty).
+ *
+ * @param tx the translation X coordinate
+ * @param ty the translation Y coordinate
+ */
+ public void translate(double tx, double ty)
+ {
+ transform.translate(tx, ty);
+
+ // Update the clip. We special-case rectangular clips here, because they
+ // are so common (e.g. in Swing).
+ if (clip != null)
+ {
+ if (clip instanceof Rectangle)
+ {
+ Rectangle r = (Rectangle) clip;
+ r.x -= tx;
+ r.y -= ty;
+ }
+ else
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.translate(-tx, -ty);
+ updateClip(clipTransform);
+ }
+ }
+ }
+
+ /**
+ * Rotates the coordinate system by <code>theta</code> degrees.
+ *
+ * @param theta the angle be which to rotate the coordinate system
+ */
+ public void rotate(double theta)
+ {
+ transform.rotate(theta);
+ if (clip != null)
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.rotate(-theta);
+ updateClip(clipTransform);
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Rotates the coordinate system by <code>theta</code> around the point
+ * (x, y).
+ *
+ * @param theta the angle by which to rotate the coordinate system
+ * @param x the point around which to rotate, X coordinate
+ * @param y the point around which to rotate, Y coordinate
+ */
+ public void rotate(double theta, double x, double y)
+ {
+ transform.rotate(theta, x, y);
+ if (clip != null)
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.rotate(-theta, x, y);
+ updateClip(clipTransform);
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Scales the coordinate system by the factors <code>scaleX</code> and
+ * <code>scaleY</code>.
+ *
+ * @param scaleX the factor by which to scale the X axis
+ * @param scaleY the factor by which to scale the Y axis
+ */
+ public void scale(double scaleX, double scaleY)
+ {
+ transform.scale(scaleX, scaleY);
+ if (clip != null)
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.scale(-scaleX, -scaleY);
+ updateClip(clipTransform);
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Shears the coordinate system by <code>shearX</code> and
+ * <code>shearY</code>.
+ *
+ * @param shearX the X shearing
+ * @param shearY the Y shearing
+ */
+ public void shear(double shearX, double shearY)
+ {
+ transform.shear(shearX, shearY);
+ if (clip != null)
+ {
+ AffineTransform clipTransform = new AffineTransform();
+ clipTransform.shear(-shearX, -shearY);
+ updateClip(clipTransform);
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Transforms the coordinate system using the specified transform
+ * <code>t</code>.
+ *
+ * @param t the transform
+ */
+ public void transform(AffineTransform t)
+ {
+ transform.concatenate(t);
+ try
+ {
+ AffineTransform clipTransform = t.createInverse();
+ updateClip(clipTransform);
+ }
+ catch (NoninvertibleTransformException ex)
+ {
+ // TODO: How can we deal properly with this?
+ ex.printStackTrace();
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Sets the transformation for this Graphics object.
+ *
+ * @param t the transformation to set
+ */
+ public void setTransform(AffineTransform t)
+ {
+ // Transform clip into target space using the old transform.
+ updateClip(transform);
+ transform.setTransform(t);
+ // Transform the clip back into user space using the inverse new transform.
+ try
+ {
+ updateClip(transform.createInverse());
+ }
+ catch (NoninvertibleTransformException ex)
+ {
+ // TODO: How can we deal properly with this?
+ ex.printStackTrace();
+ }
+ updateOptimization();
+ }
+
+ /**
+ * Returns the transformation of this coordinate system.
+ *
+ * @return the transformation of this coordinate system
+ */
+ public AffineTransform getTransform()
+ {
+ return (AffineTransform) transform.clone();
+ }
+
+ /**
+ * Returns the current foreground.
+ *
+ * @return the current foreground
+ */
+ public Paint getPaint()
+ {
+ return paint;
+ }
+
+
+ /**
+ * Returns the current composite.
+ *
+ * @return the current composite
+ */
+ public Composite getComposite()
+ {
+ return composite;
+ }
+
+ /**
+ * Sets the current background.
+ *
+ * @param color the background to set.
+ */
+ public void setBackground(Color color)
+ {
+ background = color;
+ }
+
+ /**
+ * Returns the current background.
+ *
+ * @return the current background
+ */
+ public Color getBackground()
+ {
+ return background;
+ }
+
+ /**
+ * Returns the current stroke.
+ *
+ * @return the current stroke
+ */
+ public Stroke getStroke()
+ {
+ return stroke;
+ }
+
+ /**
+ * Intersects the clip of this graphics object with the specified clip.
+ *
+ * @param s the clip with which the current clip should be intersected
+ */
+ public void clip(Shape s)
+ {
+ // Initialize clip if not already present.
+ if (clip == null)
+ clip = s;
+
+ // This is so common, let's optimize this.
+ else if (clip instanceof Rectangle && s instanceof Rectangle)
+ {
+ Rectangle clipRect = (Rectangle) clip;
+ Rectangle r = (Rectangle) s;
+ computeIntersection(r.x, r.y, r.width, r.height, clipRect);
+ // Call setClip so that subclasses get notified.
+ setClip(clipRect);
+ }
+ else
+ {
+ Area current;
+ if (clip instanceof Area)
+ current = (Area) clip;
+ else
+ current = new Area(clip);
+
+ Area intersect;
+ if (s instanceof Area)
+ intersect = (Area) s;
+ else
+ intersect = new Area(s);
+
+ current.intersect(intersect);
+ clip = current;
+ isOptimized = false;
+ // Call setClip so that subclasses get notified.
+ setClip(clip);
+ }
+ }
+
+ public FontRenderContext getFontRenderContext()
+ {
+ //return new FontRenderContext(transform, false, false);
+ return new FontRenderContext(new AffineTransform(), false, false);
+ }
+
+ /**
+ * Draws the specified glyph vector at the specified location.
+ *
+ * @param gv the glyph vector to draw
+ * @param x the location, x coordinate
+ * @param y the location, y coordinate
+ */
+ public void drawGlyphVector(GlyphVector gv, float x, float y)
+ {
+ int numGlyphs = gv.getNumGlyphs();
+ AffineTransform t = new AffineTransform();
+ t.translate(x, y);
+
+// // TODO: We could use fill(gv.getOutline()), but that seems to be
+ // slightly more inefficient.
+ for (int i = 0; i < numGlyphs; i++)
+ {
+ //fill(gv.getGlyphVisualBounds(i));
+ GeneralPath p = new GeneralPath(gv.getGlyphOutline(i));
+ p.transform(t);
+ //Shape clipped = clipShape(p);
+ //if (clipped != null)
+ // fillShape(clipped, true);
+ // FIXME: Clipping doesn't seem to work correctly.
+ fillShape(p, true);
+ }
+ }
+
+ /**
+ * Creates a copy of this graphics object.
+ *
+ * @return a copy of this graphics object
+ */
+ public Graphics create()
+ {
+ AbstractGraphics2D copy = (AbstractGraphics2D) clone();
+ return copy;
+ }
+
+ /**
+ * Creates and returns a copy of this Graphics object. This should
+ * be overridden by subclasses if additional state must be handled when
+ * cloning. This is called by {@link #create()}.
+ *
+ * @return a copy of this Graphics object
+ */
+ protected Object clone()
+ {
+ try
+ {
+ AbstractGraphics2D copy = (AbstractGraphics2D) super.clone();
+ // Copy the clip. If it's a Rectangle, preserve that for optimization.
+ if (clip instanceof Rectangle)
+ copy.clip = new Rectangle((Rectangle) clip);
+ else
+ copy.clip = new GeneralPath(clip);
+
+ copy.renderingHints = new RenderingHints(renderingHints);
+ copy.transform = new AffineTransform(transform);
+ // The remaining state is inmmutable and doesn't need to be copied.
+ return copy;
+ }
+ catch (CloneNotSupportedException ex)
+ {
+ AWTError err = new AWTError("Unexpected exception while cloning");
+ err.initCause(ex);
+ throw err;
+ }
+ }
+
+ /**
+ * Returns the current foreground.
+ */
+ public Color getColor()
+ {
+ Color c = null;
+ if (paint instanceof Color)
+ c = (Color) paint;
+ return c;
+ }
+
+ /**
+ * Sets the current foreground.
+ *
+ * @param color the foreground to set
+ */
+ public void setColor(Color color)
+ {
+ setPaint(color);
+ }
+
+ public void setPaintMode()
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public void setXORMode(Color color)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Returns the current font.
+ *
+ * @return the current font
+ */
+ public Font getFont()
+ {
+ return font;
+ }
+
+ /**
+ * Sets the font on this graphics object. When <code>f == null</code>, the
+ * current setting is not changed.
+ *
+ * @param f the font to set
+ */
+ public void setFont(Font f)
+ {
+ if (f != null)
+ font = f;
+ }
+
+ /**
+ * Returns the font metrics for the specified font.
+ *
+ * @param font the font for which to fetch the font metrics
+ *
+ * @return the font metrics for the specified font
+ */
+ public FontMetrics getFontMetrics(Font font)
+ {
+ return Toolkit.getDefaultToolkit().getFontMetrics(font);
+ }
+
+ /**
+ * Returns the bounds of the current clip.
+ *
+ * @return the bounds of the current clip
+ */
+ public Rectangle getClipBounds()
+ {
+ Rectangle b = null;
+ if (clip != null)
+ b = clip.getBounds();
+ return b;
+ }
+
+ /**
+ * Intersects the current clipping region with the specified rectangle.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ */
+ public void clipRect(int x, int y, int width, int height)
+ {
+ clip(new Rectangle(x, y, width, height));
+ }
+
+ /**
+ * Sets the clip to the specified rectangle.
+ *
+ * @param x the x coordinate of the clip rectangle
+ * @param y the y coordinate of the clip rectangle
+ * @param width the width of the clip rectangle
+ * @param height the height of the clip rectangle
+ */
+ public void setClip(int x, int y, int width, int height)
+ {
+ setClip(new Rectangle(x, y, width, height));
+ }
+
+ /**
+ * Returns the current clip.
+ *
+ * @return the current clip
+ */
+ public Shape getClip()
+ {
+ return clip;
+ }
+
+ /**
+ * Sets the current clipping area to <code>clip</code>.
+ *
+ * @param c the clip to set
+ */
+ public void setClip(Shape c)
+ {
+ clip = c;
+ if (! (clip instanceof Rectangle))
+ isOptimized = false;
+ else
+ updateOptimization();
+ }
+
+ public void copyArea(int x, int y, int width, int height, int dx, int dy)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Draws a line from (x1, y1) to (x2, y2).
+ *
+ * This implementation transforms the coordinates and forwards the call to
+ * {@link #rawDrawLine}.
+ */
+ public void drawLine(int x1, int y1, int x2, int y2)
+ {
+ if (isOptimized)
+ {
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+ rawDrawLine(x1 + tx, y1 + ty, x2 + tx, y2 + ty);
+ }
+ else
+ {
+ Line2D line = new Line2D.Double(x1, y1, x2, y2);
+ draw(line);
+ }
+ }
+
+ /**
+ * Fills a rectangle with the current paint.
+ *
+ * @param x the upper left corner, X coordinate
+ * @param y the upper left corner, Y coordinate
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ */
+ public void fillRect(int x, int y, int width, int height)
+ {
+ if (isOptimized)
+ {
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+ rawFillRect(x + tx, y + ty, width, height);
+ }
+ else
+ {
+ fill(new Rectangle(x, y, width, height));
+ }
+ }
+
+ /**
+ * Fills a rectangle with the current background color.
+ *
+ * This implementation temporarily sets the foreground color to the
+ * background and forwards the call to {@link #fillRect(int, int, int, int)}.
+ *
+ * @param x the upper left corner, X coordinate
+ * @param y the upper left corner, Y coordinate
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ */
+ public void clearRect(int x, int y, int width, int height)
+ {
+ Paint savedForeground = getPaint();
+ setPaint(getBackground());
+ //System.err.println("clearRect transform type: " + transform.getType());
+ fillRect(x, y, width, height);
+ setPaint(savedForeground);
+ }
+
+ /**
+ * Draws a rounded rectangle.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ * @param arcWidth the width of the arcs
+ * @param arcHeight the height of the arcs
+ */
+ public void drawRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
+ {
+ draw(new RoundRectangle2D.Double(x, y, width, height, arcWidth,
+ arcHeight));
+ }
+
+ /**
+ * Fills a rounded rectangle.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ * @param arcWidth the width of the arcs
+ * @param arcHeight the height of the arcs
+ */
+ public void fillRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
+ {
+ fill(new RoundRectangle2D.Double(x, y, width, height, arcWidth,
+ arcHeight));
+ }
+
+ /**
+ * Draws the outline of an oval.
+ *
+ * @param x the upper left corner of the bounding rectangle of the ellipse
+ * @param y the upper left corner of the bounding rectangle of the ellipse
+ * @param width the width of the ellipse
+ * @param height the height of the ellipse
+ */
+ public void drawOval(int x, int y, int width, int height)
+ {
+ draw(new Ellipse2D.Double(x, y, width, height));
+ }
+
+ /**
+ * Fills an oval.
+ *
+ * @param x the upper left corner of the bounding rectangle of the ellipse
+ * @param y the upper left corner of the bounding rectangle of the ellipse
+ * @param width the width of the ellipse
+ * @param height the height of the ellipse
+ */
+ public void fillOval(int x, int y, int width, int height)
+ {
+ fill(new Ellipse2D.Double(x, y, width, height));
+ }
+
+ /**
+ * Draws an arc.
+ */
+ public void drawArc(int x, int y, int width, int height, int arcStart,
+ int arcAngle)
+ {
+ draw(new Arc2D.Double(x, y, width, height, arcStart, arcAngle,
+ Arc2D.OPEN));
+ }
+
+ /**
+ * Fills an arc.
+ */
+ public void fillArc(int x, int y, int width, int height, int arcStart,
+ int arcAngle)
+ {
+ fill(new Arc2D.Double(x, y, width, height, arcStart, arcAngle,
+ Arc2D.OPEN));
+ }
+
+ public void drawPolyline(int[] xPoints, int[] yPoints, int npoints)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Draws the outline of a polygon.
+ */
+ public void drawPolygon(int[] xPoints, int[] yPoints, int npoints)
+ {
+ draw(new Polygon(xPoints, yPoints, npoints));
+ }
+
+ /**
+ * Fills the outline of a polygon.
+ */
+ public void fillPolygon(int[] xPoints, int[] yPoints, int npoints)
+ {
+ fill(new Polygon(xPoints, yPoints, npoints));
+ }
+
+ public boolean drawImage(Image image, int x, int y, ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public boolean drawImage(Image image, int x, int y, int width, int height,
+ ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public boolean drawImage(Image image, int x, int y, Color bgcolor,
+ ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public boolean drawImage(Image image, int x, int y, int width, int height,
+ Color bgcolor, ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2,
+ ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2, Color bgcolor,
+ ImageObserver observer)
+ {
+ // FIXME: Implement this.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Disposes this graphics object.
+ */
+ public void dispose()
+ {
+ // Nothing special to do here.
+ }
+
+ /**
+ * Fills the specified shape. The shape has already been clipped against the
+ * current clip.
+ *
+ * @param s the shape to fill
+ * @param isFont <code>true</code> if the shape is a font outline
+ */
+ protected void fillShape(Shape s, boolean isFont)
+ {
+ // Determine if we need to antialias stuff.
+ boolean antialias = false;
+ if (isFont)
+ {
+ Object v = renderingHints.get(RenderingHints.KEY_TEXT_ANTIALIASING);
+ // We default to antialiasing on for text as long as we have no
+ // good hinting implemented.
+ antialias = (v == RenderingHints.VALUE_TEXT_ANTIALIAS_ON
+ || v == RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+ }
+ else
+ {
+ Object v = renderingHints.get(RenderingHints.KEY_ANTIALIASING);
+ antialias = (v == RenderingHints.VALUE_ANTIALIAS_ON);
+ }
+
+ Rectangle2D userBounds = s.getBounds2D();
+
+ // Flatten the path. TODO: Determine the best flattening factor
+ // wrt to speed and quality.
+ PathIterator path = s.getPathIterator(getTransform(), 1.0);
+
+ // Build up polygons and let the native backend render this using
+ // rawFillShape() which would provide a default implementation for
+ // drawPixel using a PolyScan algorithm.
+ double[] seg = new double[6];
+
+ // TODO: Use ArrayList<PolyEdge> here when availble.
+ ArrayList segs = new ArrayList();
+ double segX = 0.; // The start point of the current edge.
+ double segY = 0.;
+ double polyX = 0.; // The start point of the current polygon.
+ double polyY = 0.;
+
+ double minX = Integer.MAX_VALUE;
+ double maxX = Integer.MIN_VALUE;
+ double minY = Integer.MAX_VALUE;
+ double maxY = Integer.MIN_VALUE;
+
+ //System.err.println("fill polygon");
+ while (! path.isDone())
+ {
+ int segType = path.currentSegment(seg);
+ minX = Math.min(minX, seg[0]);
+ maxX = Math.max(maxX, seg[0]);
+ minY = Math.min(minY, seg[1]);
+ maxY = Math.max(maxY, seg[1]);
+
+ //System.err.println("segment: " + segType + ", " + seg[0] + ", " + seg[1]);
+ if (segType == PathIterator.SEG_MOVETO)
+ {
+ segX = seg[0];
+ segY = seg[1];
+ polyX = seg[0];
+ polyY = seg[1];
+ }
+ else if (segType == PathIterator.SEG_CLOSE)
+ {
+ // Close the polyline.
+ PolyEdge edge = new PolyEdge(segX, segY, polyX, polyY);
+ segs.add(edge);
+ }
+ else if (segType == PathIterator.SEG_LINETO)
+ {
+ PolyEdge edge = new PolyEdge(segX, segY, seg[0], seg[1]);
+ segs.add(edge);
+ segX = seg[0];
+ segY = seg[1];
+ }
+ path.next();
+ }
+ if (segs.size() > 0)
+ {
+ if (antialias)
+ fillShapeAntialias(segs, minX, minY, maxX, maxY, userBounds);
+ else
+ rawFillShape(segs, minX, minY, maxX, maxY, userBounds);
+ }
+ }
+
+ /**
+ * Draws one pixel in the target coordinate space. This method draws the
+ * specified pixel by getting the painting pixel for that coordinate
+ * from the paintContext and compositing the pixel with the compositeContext.
+ * The resulting pixel is then set by calling {@link #rawSetPixel}.
+ *
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
+ protected void drawPixel(int x, int y)
+ {
+ // FIXME: Implement efficient compositing.
+ if (! (paint instanceof Color))
+ {
+ int[] paintPixel = paintRaster.getPixel(x, y, pixel);
+ Color c = new Color(paintPixel[0], paintPixel[1], paintPixel[2]);
+ rawSetForeground(c);
+ }
+ rawSetPixel(x, y);
+ }
+
+ /**
+ * Draws a pixel in the target coordinate space using the specified color.
+ *
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
+ protected void rawSetPixel(int x, int y)
+ {
+ // FIXME: Provide default implementation or remove method.
+ }
+
+ /**
+ * Sets the foreground color for drawing.
+ *
+ * @param c the color to set
+ */
+ protected void rawSetForeground(Color c)
+ {
+ // Probably remove method.
+ }
+
+ protected void rawSetForeground(int r, int g, int b)
+ {
+ rawSetForeground(new Color(r, g, b));
+ }
+
+ /**
+ * Returns the color model of this Graphics object.
+ *
+ * @return the color model of this Graphics object
+ */
+ protected abstract ColorModel getColorModel();
+
+ /**
+ * Returns the bounds of the target.
+ *
+ * @return the bounds of the target
+ */
+ protected Rectangle getDeviceBounds()
+ {
+ return destinationRaster.getBounds();
+ }
+
+ /**
+ * Returns the bounds of the drawing area in user space.
+ *
+ * @return the bounds of the drawing area in user space
+ */
+ protected Rectangle2D getUserBounds()
+ {
+ PathIterator pathIter = getDeviceBounds().getPathIterator(getTransform());
+ GeneralPath path = new GeneralPath();
+ path.append(pathIter, true);
+ return path.getBounds();
+
+ }
+ /**
+ * Draws a line in optimization mode. The implementation should respect the
+ * clip but can assume that it is a rectangle.
+ *
+ * @param x0 the starting point, X coordinate
+ * @param y0 the starting point, Y coordinate
+ * @param x1 the end point, X coordinate
+ * @param y1 the end point, Y coordinate
+ */
+ protected void rawDrawLine(int x0, int y0, int x1, int y1)
+ {
+ // This is an implementation of Bresenham's line drawing algorithm.
+ int dy = y1 - y0;
+ int dx = x1 - x0;
+ int stepx, stepy;
+
+ if (dy < 0)
+ {
+ dy = -dy;
+ stepy = -1;
+ }
+ else
+ {
+ stepy = 1;
+ }
+ if (dx < 0)
+ {
+ dx = -dx;
+ stepx = -1;
+ }
+ else
+ {
+ stepx = 1;
+ }
+ dy <<= 1;
+ dx <<= 1;
+
+ drawPixel(x0, y0);
+ if (dx > dy)
+ {
+ int fraction = dy - (dx >> 1); // same as 2*dy - dx
+ while (x0 != x1)
+ {
+ if (fraction >= 0)
+ {
+ y0 += stepy;
+ fraction -= dx;
+ }
+ x0 += stepx;
+ fraction += dy;
+ drawPixel(x0, y0);
+ }
+ }
+ else
+ {
+ int fraction = dx - (dy >> 1);
+ while (y0 != y1)
+ {
+ if (fraction >= 0)
+ {
+ x0 += stepx;
+ fraction -= dy;
+ }
+ y0 += stepy;
+ fraction += dx;
+ drawPixel(x0, y0);
+ }
+ }
+ }
+
+ /**
+ * Fills a rectangle in optimization mode. The implementation should respect
+ * the clip but can assume that it is a rectangle.
+ *
+ * @param x the upper left corner, X coordinate
+ * @param y the upper left corner, Y coordinate
+ * @param w the width
+ * @param h the height
+ */
+ protected void rawFillRect(int x, int y, int w, int h)
+ {
+ int x2 = x + w;
+ int y2 = y + h;
+ for (int xc = x; xc < x2; xc++)
+ {
+ for (int yc = y; yc < y2; yc++)
+ {
+ drawPixel(xc, yc);
+ }
+ }
+ }
+
+ /**
+ * Fills the specified polygon. This should be overridden by backends
+ * that support accelerated (native) polygon filling, which is the
+ * case for most toolkit window and offscreen image implementations.
+ *
+ * The polygon is already clipped when this method is called.
+ */
+ protected void rawFillShape(ArrayList segs, double minX, double minY,
+ double maxX, double maxY, Rectangle2D userBounds)
+ {
+ // This is an implementation of a polygon scanline conversion algorithm
+ // described here:
+ // http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/scan/
+
+ // Create table of all edges.
+ // The edge buckets, sorted and indexed by their Y values.
+
+ Rectangle deviceBounds = new Rectangle((int) minX, (int) minY,
+ (int) Math.ceil(maxX) - (int) minX,
+ (int) Math.ceil(maxY) - (int) minY);
+ PaintContext pCtx = paint.createContext(getColorModel(), deviceBounds,
+ userBounds, transform, renderingHints);
+
+ ArrayList[] edgeTable = new ArrayList[(int) Math.ceil(maxY)
+ - (int) Math.ceil(minY) + 1];
+
+ for (Iterator i = segs.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ int yindex = (int) ((int) Math.ceil(edge.y0) - (int) Math.ceil(minY));
+ if (edgeTable[yindex] == null) // Create bucket when needed.
+ edgeTable[yindex] = new ArrayList();
+ edgeTable[yindex].add(edge); // Add edge to the bucket of its line.
+ }
+
+ // TODO: The following could be useful for a future optimization.
+// // Sort all the edges in the edge table within their buckets.
+// for (int y = 0; y < edgeTable.length; y++)
+// {
+// if (edgeTable[y] != null)
+// Collections.sort(edgeTable[y]);
+// }
+
+ // The activeEdges list contains all the edges of the current scanline
+ // ordered by their intersection points with this scanline.
+ ArrayList activeEdges = new ArrayList();
+ PolyEdgeComparator comparator = new PolyEdgeComparator();
+
+ // Scan all relevant lines.
+ int minYInt = (int) Math.ceil(minY);
+ for (int y = minYInt; y <= maxY; y++)
+ {
+ ArrayList bucket = edgeTable[y - minYInt];
+ // Update all the x intersections in the current activeEdges table
+ // and remove entries that are no longer in the scanline.
+ for (Iterator i = activeEdges.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ if (y > edge.y1)
+ i.remove();
+ else
+ {
+ edge.xIntersection += edge.slope;
+ //edge.xIntersection = edge.x0 + edge.slope * (y - edge.y0);
+ //System.err.println("edge.xIntersection: " + edge.xIntersection);
+ }
+ }
+
+ if (bucket != null)
+ activeEdges.addAll(bucket);
+
+ // Sort current edges. We are using a bubble sort, because the order
+ // of the intersections will not change in most situations. They
+ // will only change, when edges intersect each other.
+ int size = activeEdges.size();
+ if (size > 1)
+ {
+ for (int i = 1; i < size; i++)
+ {
+ PolyEdge e1 = (PolyEdge) activeEdges.get(i - 1);
+ PolyEdge e2 = (PolyEdge) activeEdges.get(i);
+ if (comparator.compare(e1, e2) > 0)
+ {
+ // Swap e2 with its left neighbor until it 'fits'.
+ int j = i;
+ do
+ {
+ activeEdges.set(j, e1);
+ activeEdges.set(j - 1, e2);
+ j--;
+ if (j >= 1)
+ e1 = (PolyEdge) activeEdges.get(j - 1);
+ } while (j >= 1 && comparator.compare(e1, e2) > 0);
+ }
+ }
+ }
+
+ // Now draw all pixels inside the polygon.
+ // This is the last edge that intersected the scanline.
+ PolyEdge previous = null; // Gets initialized below.
+ boolean active = false;
+ //System.err.println("scanline: " + y);
+ for (Iterator i = activeEdges.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ // Only fill scanline, if the current edge actually intersects
+ // the scanline. There may be edges that lie completely
+ // within the current scanline.
+ //System.err.println("previous: " + previous);
+ //System.err.println("edge: " + edge);
+ if (active)
+ {
+ if (edge.y1 > y)
+ {
+ int x0 = (int) previous.xIntersection;
+ int x1 = (int) edge.xIntersection;
+ fillScanline(pCtx, x0, x1, y);
+ previous = edge;
+ active = false;
+ }
+ }
+ else
+ {
+ if (edge.y1 > y)
+ {
+ previous = edge;
+ active = true;
+ }
+ }
+ }
+ }
+ pCtx.dispose();
+ }
+
+ /**
+ * Paints a scanline between x0 and x1.
+ *
+ * @param x0 the left offset
+ * @param x1 the right offset
+ * @param y the scanline
+ */
+ protected void fillScanline(PaintContext pCtx, int x0, int x1, int y)
+ {
+ Raster paintRaster = pCtx.getRaster(x0, y, x1 - x0, 1);
+ ColorModel paintColorModel = pCtx.getColorModel();
+ CompositeContext cCtx = composite.createContext(paintColorModel,
+ getColorModel(),
+ renderingHints);
+ cCtx.compose(paintRaster, destinationRaster, destinationRaster);
+ updateRaster(destinationRaster, x0, y, x1 - x0, 1);
+ cCtx.dispose();
+ }
+
+ /**
+ * Fills arbitrary shapes in an anti-aliased fashion.
+ *
+ * @param segs the line segments which define the shape which is to be filled
+ * @param minX the bounding box, left X
+ * @param minY the bounding box, upper Y
+ * @param maxX the bounding box, right X
+ * @param maxY the bounding box, lower Y
+ */
+ private void fillShapeAntialias(ArrayList segs, double minX, double minY,
+ double maxX, double maxY,
+ Rectangle2D userBounds)
+ {
+ // This is an implementation of a polygon scanline conversion algorithm
+ // described here:
+ // http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/scan/
+ // The antialiasing is implemented using a sampling technique, we do
+ // not scan whole lines but fractions of the line.
+
+ Rectangle deviceBounds = new Rectangle((int) minX, (int) minY,
+ (int) Math.ceil(maxX) - (int) minX,
+ (int) Math.ceil(maxY) - (int) minY);
+ PaintContext pCtx = paint.createContext(getColorModel(), deviceBounds,
+ userBounds, transform,
+ renderingHints);
+
+ // This array will contain the oversampled transparency values for
+ // each pixel in the scanline.
+ int numScanlines = (int) Math.ceil(maxY) - (int) minY;
+ int numScanlinePixels = (int) Math.ceil(maxX) - (int) minX + 1;
+ if (alpha == null || alpha.length < (numScanlinePixels + 1))
+ alpha = new int[numScanlinePixels + 1];
+
+ int firstLine = (int) minY;
+ //System.err.println("minY: " + minY);
+ int firstSubline = (int) (Math.ceil((minY - Math.floor(minY)) * AA_SAMPLING));
+ double firstLineDouble = firstLine + firstSubline / (double) AA_SAMPLING;
+ //System.err.println("firstSubline: " + firstSubline);
+
+ // Create table of all edges.
+ // The edge buckets, sorted and indexed by their Y values.
+ //System.err.println("numScanlines: " + numScanlines);
+ if (edgeTable == null
+ || edgeTable.length < numScanlines * AA_SAMPLING + AA_SAMPLING)
+ edgeTable = new ArrayList[numScanlines * AA_SAMPLING + AA_SAMPLING];
+
+ //System.err.println("firstLineDouble: " + firstLineDouble);
+
+ for (Iterator i = segs.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ int yindex = (int) (Math.ceil((edge.y0 - firstLineDouble) * AA_SAMPLING));
+ //System.err.println("yindex: " + yindex + " for y0: " + edge.y0);
+ // Initialize edge's slope and initial xIntersection.
+ edge.slope = ((edge.x1 - edge.x0) / (edge.y1 - edge.y0)) / AA_SAMPLING;
+ if (edge.y0 == edge.y1) // Horizontal edge.
+ edge.xIntersection = Math.min(edge.x0, edge.x1);
+ else
+ {
+ double alignedFirst = Math.ceil(edge.y0 * AA_SAMPLING) / AA_SAMPLING;
+ edge.xIntersection = edge.x0 + (edge.slope * AA_SAMPLING) * (alignedFirst - edge.y0);
+ }
+ //System.err.println(edge);
+ // FIXME: Sanity check should not be needed when clipping works.
+ if (yindex >= 0 && yindex < edgeTable.length)
+ {
+ if (edgeTable[yindex] == null) // Create bucket when needed.
+ edgeTable[yindex] = new ArrayList();
+ edgeTable[yindex].add(edge); // Add edge to the bucket of its line.
+ }
+ }
+
+ // The activeEdges list contains all the edges of the current scanline
+ // ordered by their intersection points with this scanline.
+ ArrayList activeEdges = new ArrayList();
+ PolyEdgeComparator comparator = new PolyEdgeComparator();
+
+ // Scan all lines.
+ int yindex = 0;
+ //System.err.println("firstLine: " + firstLine + ", maxY: " + maxY + ", firstSubline: " + firstSubline);
+ for (int y = firstLine; y <= maxY; y++)
+ {
+ for (int subY = firstSubline; subY < AA_SAMPLING; subY++)
+ {
+ //System.err.println("scanline: " + y + ", subScanline: " + subY);
+ ArrayList bucket = edgeTable[yindex];
+ // Update all the x intersections in the current activeEdges table
+ // and remove entries that are no longer in the scanline.
+ for (Iterator i = activeEdges.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ // TODO: Do the following using integer arithmetics.
+ if ((y + ((double) subY / (double) AA_SAMPLING)) > edge.y1)
+ i.remove();
+ else
+ {
+ edge.xIntersection += edge.slope;
+ //System.err.println("edge: " + edge);
+ //edge.xIntersection = edge.x0 + edge.slope * (y - edge.y0);
+ //System.err.println("edge.xIntersection: " + edge.xIntersection);
+ }
+ }
+
+ if (bucket != null)
+ {
+ activeEdges.addAll(bucket);
+ edgeTable[yindex].clear();
+ }
+
+ // Sort current edges. We are using a bubble sort, because the order
+ // of the intersections will not change in most situations. They
+ // will only change, when edges intersect each other.
+ int size = activeEdges.size();
+ if (size > 1)
+ {
+ for (int i = 1; i < size; i++)
+ {
+ PolyEdge e1 = (PolyEdge) activeEdges.get(i - 1);
+ PolyEdge e2 = (PolyEdge) activeEdges.get(i);
+ if (comparator.compare(e1, e2) > 0)
+ {
+ // Swap e2 with its left neighbor until it 'fits'.
+ int j = i;
+ do
+ {
+ activeEdges.set(j, e1);
+ activeEdges.set(j - 1, e2);
+ j--;
+ if (j >= 1)
+ e1 = (PolyEdge) activeEdges.get(j - 1);
+ } while (j >= 1 && comparator.compare(e1, e2) > 0);
+ }
+ }
+ }
+
+ // Now draw all pixels inside the polygon.
+ // This is the last edge that intersected the scanline.
+ PolyEdge previous = null; // Gets initialized below.
+ boolean active = false;
+ //System.err.println("scanline: " + y + ", subscanline: " + subY);
+ for (Iterator i = activeEdges.iterator(); i.hasNext();)
+ {
+ PolyEdge edge = (PolyEdge) i.next();
+ // Only fill scanline, if the current edge actually intersects
+ // the scanline. There may be edges that lie completely
+ // within the current scanline.
+ //System.err.println("previous: " + previous);
+ //System.err.println("edge: " + edge);
+ if (active)
+ {
+ // TODO: Use integer arithmetics here.
+ if (edge.y1 > (y + (subY / (double) AA_SAMPLING)))
+ {
+ //System.err.println(edge);
+ // TODO: Eliminate the aligments.
+ int x0 = (int) Math.min(Math.max(previous.xIntersection, minX), maxX);
+ int x1 = (int) Math.min(Math.max(edge.xIntersection, minX), maxX);
+ //System.err.println("minX: " + minX + ", x0: " + x0 + ", x1: " + x1 + ", maxX: " + maxX);
+ // TODO: Pull out cast.
+ alpha[x0 - (int) minX]++;
+ alpha[x1 - (int) minX + 1]--;
+ previous = edge;
+ active = false;
+ }
+ }
+ else
+ {
+ // TODO: Use integer arithmetics here.
+ if (edge.y1 > (y + (subY / (double) AA_SAMPLING)))
+ {
+ //System.err.println(edge);
+ previous = edge;
+ active = true;
+ }
+ }
+ }
+ yindex++;
+ }
+ firstSubline = 0;
+ // Render full scanline.
+ //System.err.println("scanline: " + y);
+ fillScanlineAA(alpha, (int) minX, (int) y, numScanlinePixels, pCtx);
+ }
+ if (paint instanceof Color && composite == AlphaComposite.SrcOver)
+ rawSetForeground((Color) paint);
+
+ pCtx.dispose();
+ }
+
+ /**
+ * Fills a horizontal line between x0 and x1 for anti aliased rendering.
+ * the alpha array contains the deltas of the alpha values from one pixel
+ * to the next.
+ *
+ * @param alpha the alpha values in the scanline
+ * @param x0 the beginning of the scanline
+ * @param y the y coordinate of the line
+ */
+ private void fillScanlineAA(int[] alpha, int x0, int y, int numScanlinePixels,
+ PaintContext pCtx)
+ {
+ // FIXME: This doesn't work. Fixit.
+ CompositeContext cCtx = composite.createContext(pCtx.getColorModel(),
+ getColorModel(),
+ renderingHints);
+ Raster paintRaster = pCtx.getRaster(x0, y, numScanlinePixels, 1);
+ System.err.println("paintColorModel: " + pCtx.getColorModel());
+ WritableRaster aaRaster = paintRaster.createCompatibleWritableRaster();
+ int numBands = paintRaster.getNumBands();
+ int[] pixels = new int[numScanlinePixels + paintRaster.getNumBands()];
+ pixels = paintRaster.getPixels(x0, y, numScanlinePixels, 1, pixels);
+ ColorModel cm = pCtx.getColorModel();
+
+ double lastAlpha = 0.;
+ int lastAlphaInt = 0;
+ int[] components = new int[4];
+
+ for (int i = 0; i < pixels.length; i++)
+ {
+ if (alpha[i] != 0)
+ {
+ lastAlphaInt += alpha[i];
+ lastAlpha = lastAlphaInt / AA_SAMPLING;
+ }
+ components = cm.getComponents(pixel[i], components, 0);
+ components[0] = (int) (components[0] * lastAlpha);
+ pixel[i] = cm.getDataElement(components, 0);
+ }
+
+ aaRaster.setPixels(0, 0, numScanlinePixels, 1, pixels);
+ cCtx.compose(aaRaster, destinationRaster, destinationRaster);
+ updateRaster(destinationRaster, x0, y, numScanlinePixels, 1);
+
+ cCtx.dispose();
+ }
+
+
+ /**
+ * Initializes this graphics object. This must be called by subclasses in
+ * order to correctly initialize the state of this object.
+ */
+ protected void init()
+ {
+ setPaint(Color.BLACK);
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
+ isOptimized = true;
+
+ // FIXME: Should not be necessary. A clip of null should mean
+ // 'clip against device bounds.
+ clip = getDeviceBounds();
+ destinationRaster = getDestinationRaster();
+ }
+
+ /**
+ * Returns a WritableRaster that is used by this class to perform the
+ * rendering in. It is not necessary that the target surface immediately
+ * reflects changes in the raster. Updates to the raster are notified via
+ * {@link #updateRaster}.
+ *
+ * @return the destination raster
+ */
+ protected abstract WritableRaster getDestinationRaster();
+
+ /**
+ * Notifies the backend that the raster has changed in the specified
+ * rectangular area. The raster that is provided in this method is always
+ * the same as the one returned in {@link #getDestinationRaster}.
+ * Backends that reflect changes to this raster directly don't need to do
+ * anything here.
+ *
+ * @param raster the updated raster, identical to the raster returned
+ * by {@link #getDestinationRaster()}
+ * @param x the upper left corner of the updated region, X coordinate
+ * @param y the upper lef corner of the updated region, Y coordinate
+ * @param w the width of the updated region
+ * @param h the height of the updated region
+ */
+ protected void updateRaster(Raster raster, int x, int y, int w, int h)
+ {
+ // Nothing to do here. Backends that need to update their surface
+ // to reflect the change should override this method.
+ }
+
+ // Some helper methods.
+
+ /**
+ * Helper method to check and update the optimization conditions.
+ */
+ private void updateOptimization()
+ {
+ int transformType = transform.getType();
+ boolean optimizedTransform = false;
+ if (transformType == AffineTransform.TYPE_IDENTITY
+ || transformType == AffineTransform.TYPE_TRANSLATION)
+ optimizedTransform = true;
+
+ boolean optimizedClip = (clip == null || clip instanceof Rectangle);
+ isOptimized = optimizedClip
+ && optimizedTransform && paint instanceof Color
+ && composite == AlphaComposite.SrcOver
+ && stroke.equals(new BasicStroke());
+ }
+
+ /**
+ * Calculates the intersection of two rectangles. The result is stored
+ * in <code>rect</code>. This is basically the same
+ * like {@link Rectangle#intersection(Rectangle)}, only that it does not
+ * create new Rectangle instances. The tradeoff is that you loose any data in
+ * <code>rect</code>.
+ *
+ * @param x upper-left x coodinate of first rectangle
+ * @param y upper-left y coodinate of first rectangle
+ * @param w width of first rectangle
+ * @param h height of first rectangle
+ * @param rect a Rectangle object of the second rectangle
+ *
+ * @throws NullPointerException if rect is null
+ *
+ * @return a rectangle corresponding to the intersection of the
+ * two rectangles. An empty rectangle is returned if the rectangles
+ * do not overlap
+ */
+ private static Rectangle computeIntersection(int x, int y, int w, int h,
+ Rectangle rect)
+ {
+ int x2 = (int) rect.x;
+ int y2 = (int) rect.y;
+ int w2 = (int) rect.width;
+ int h2 = (int) rect.height;
+
+ int dx = (x > x2) ? x : x2;
+ int dy = (y > y2) ? y : y2;
+ int dw = (x + w < x2 + w2) ? (x + w - dx) : (x2 + w2 - dx);
+ int dh = (y + h < y2 + h2) ? (y + h - dy) : (y2 + h2 - dy);
+
+ if (dw >= 0 && dh >= 0)
+ rect.setBounds(dx, dy, dw, dh);
+ else
+ rect.setBounds(0, 0, 0, 0);
+
+ return rect;
+ }
+
+ /**
+ * Helper method to transform the clip. This is called by the various
+ * transformation-manipulation methods to update the clip (which is in
+ * userspace) accordingly.
+ *
+ * The transform usually is the inverse transform that was applied to the
+ * graphics object.
+ *
+ * @param t the transform to apply to the clip
+ */
+ private void updateClip(AffineTransform t)
+ {
+ if (! (clip instanceof GeneralPath))
+ clip = new GeneralPath(clip);
+
+ GeneralPath p = (GeneralPath) clip;
+ p.transform(t);
+ }
+
+ /**
+ * Clips the specified shape using the current clip. If the resulting shape
+ * is empty, this will return <code>null</code>.
+ *
+ * @param s the shape to clip
+ *
+ * @return the clipped shape or <code>null</code> if the result is empty
+ */
+ private Shape clipShape(Shape s)
+ {
+ Shape clipped = null;
+
+ // Clip the shape if necessary.
+ if (clip != null)
+ {
+ Area a;
+ if (! (s instanceof Area))
+ a = new Area(s);
+ else
+ a = (Area) s;
+
+ Area clipArea;
+ if (! (clip instanceof Area))
+ clipArea = new Area(clip);
+ else
+ clipArea = (Area) clip;
+
+ a.intersect(clipArea);
+ if (! a.isEmpty())
+ clipped = a;
+ }
+ else
+ {
+ clipped = s;
+ }
+ return clipped;
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/AlphaCompositeContext.java b/libjava/classpath/gnu/java/awt/java2d/AlphaCompositeContext.java
new file mode 100644
index 0000000..e67c921
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/AlphaCompositeContext.java
@@ -0,0 +1,316 @@
+/* AlphaCompositeContext.java -- CompositeContext impl for AlphaComposite
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+import java.awt.AWTError;
+import java.awt.AlphaComposite;
+import java.awt.CompositeContext;
+import java.awt.image.ColorModel;
+import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
+
+/**
+ * A CompositeContext implementation for {@link AlphaComposite}.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class AlphaCompositeContext
+ implements CompositeContext
+{
+
+ /**
+ * The Composite object for which we perform compositing.
+ */
+ private AlphaComposite composite;
+
+ /**
+ * The source color model.
+ */
+ private ColorModel srcColorModel;
+
+ /**
+ * The destination color model.
+ */
+ private ColorModel dstColorModel;
+
+ /**
+ * The blending factor for the source.
+ */
+ private float fs;
+
+ /**
+ * The blending factor for the destination.
+ */
+ private float fd;
+
+ /**
+ * Creates a new AlphaCompositeContext.
+ *
+ * @param aComp the AlphaComposite object
+ * @param srcCM the source color model
+ * @param dstCM the destination color model
+ */
+ public AlphaCompositeContext(AlphaComposite aComp, ColorModel srcCM,
+ ColorModel dstCM)
+ {
+ composite = aComp;
+ srcColorModel = srcCM;
+ dstColorModel = dstCM;
+
+
+ // Determine the blending factors according to the rule in the
+ // AlphaComposite. For some rules the factors must be determined
+ // dynamically because they depend on the actual pixel value.
+ switch (composite.getRule())
+ {
+ case AlphaComposite.CLEAR:
+ fs = 0.F;
+ fd= 0.F;
+ break;
+ case AlphaComposite.DST:
+ fs = 0.F;
+ fd= 1.F;
+ break;
+ case AlphaComposite.DST_ATOP:
+ fs = 1.F; // Determined later as 1 - alpha_dst;
+ fd = 1.F; // Determined later as alpha_src;
+ break;
+ case AlphaComposite.DST_IN:
+ fs = 0.F;
+ fd = 0.F; // Determined later as alpha_src;
+ break;
+ case AlphaComposite.DST_OUT:
+ fs = 0.F;
+ fd = 0.F; // Determined later as 1 - alpha_src;
+ break;
+ case AlphaComposite.DST_OVER:
+ fs = 1.F; // Determined later as 1 - alpha_dst.
+ fd= 1.F;
+ break;
+ case AlphaComposite.SRC:
+ fs = 1.F;
+ fd= 0.F;
+ break;
+ case AlphaComposite.SRC_ATOP:
+ fs = 1.F; // Determined later as alpha_dst;
+ fd = 1.F; // Determined later as 1 - alpha_src;
+ break;
+ case AlphaComposite.SRC_IN:
+ fs = 0.F; // Determined later as alpha_dst;
+ fd = 0.F;
+ break;
+ case AlphaComposite.SRC_OUT:
+ fs = 0.F; // Determined later as 1 - alpha_dst;
+ fd = 0.F;
+ break;
+ case AlphaComposite.SRC_OVER:
+ fs = 1.F;
+ fd= 1.F; // Determined later as 1 - alpha_src.
+ break;
+ case AlphaComposite.XOR:
+ fs = 1.F; // Determined later as 1 - alpha_dst.
+ fd= 1.F; // Determined later as 1 - alpha_src.
+ break;
+ default:
+ throw new AWTError("Illegal AlphaComposite rule");
+ }
+
+ }
+
+ /**
+ * Releases all resources held by this composite object.
+ */
+ public void dispose()
+ {
+ // Nothing to do here yet.
+ }
+
+ /**
+ * Performs compositing according to the rules specified in the
+ * AlphaComposite from the constructor.
+ */
+ public void compose(Raster src, Raster dstIn, WritableRaster dstOut)
+ {
+
+ // TODO: This implementation is very general and highly inefficient. There
+ // are two possible ways to optimize this:
+ // 1. Special cased implementations for common ColorModels and transfer
+ // types.
+ // 2. Native implementation.
+
+ int x0 = src.getMinX();
+ int y0 = src.getMinY();
+ int width = src.getWidth();
+ int height = src.getHeight();
+ int x1 = x0 + width;
+ int y1 = y0 + height;
+
+ Object srcPixel = null;
+ Object dstPixel = null;
+
+ // Prepare the array that holds the color and alpha components of the
+ // source pixels.
+ float[] srcComponents;
+ int srcComponentsLength = srcColorModel.getNumComponents();
+ if (! srcColorModel.hasAlpha())
+ srcComponentsLength += 1;
+ srcComponents = new float[srcComponentsLength];
+
+ // Prepare the array that holds the color and alpha components of the
+ // destination pixels.
+ float[] dstComponents;
+ int dstComponentsLength = dstColorModel.getNumComponents();
+ if (! dstColorModel.hasAlpha())
+ dstComponentsLength += 1;
+ dstComponents = new float[dstComponentsLength];
+
+ if (srcComponentsLength != dstComponentsLength)
+ throw new AWTError("The color models of the source and destination have"
+ + "incompatible number of color components");
+
+ int srcTransferType = srcColorModel.getTransferType();
+ int dstTransferType = dstColorModel.getTransferType();
+
+ for (int y = y0; y < y1; y++)
+ {
+ for (int x = x0; x < x1; x++)
+ {
+ // Fetch source pixel.
+ srcPixel = src.getDataElements(x, y, (int[]) srcPixel);
+ // Fetch destination pixel.
+ dstPixel = dstIn.getDataElements(x, y, dstPixel);
+ // Get normalized components. This is the only type that is
+ // guaranteed to be supported by all ColorModels.
+ srcComponents =
+ srcColorModel.getNormalizedComponents(srcPixel, srcComponents, 0);
+ if (! srcColorModel.hasAlpha())
+ srcComponents[srcComponentsLength - 1] = 1.0F;
+ dstComponents =
+ dstColorModel.getNormalizedComponents(dstPixel, dstComponents, 0);
+ if (! dstColorModel.hasAlpha())
+ dstComponents[dstComponentsLength - 1] = 1.0F;
+
+ // Prepare the input.
+ float compositeAlpha = composite.getAlpha();
+ srcComponents[srcComponentsLength - 1] *= compositeAlpha;
+ if (srcColorModel.isAlphaPremultiplied())
+ {
+ for (int i = srcComponentsLength - 2; i >= 0; i--)
+ srcComponents[i] *= compositeAlpha;
+ }
+ else
+ {
+ for (int i = srcComponentsLength - 1; i >= 0; i--)
+ srcComponents[i] *= srcComponents[srcComponentsLength - 1];
+ }
+ if (! dstColorModel.isAlphaPremultiplied())
+ {
+ for (int i = dstComponentsLength - 2; i >= 0; i--)
+ dstComponents[i] *= dstComponents[dstComponents.length - 1];
+ }
+
+ // Determine the blending factors according to the rule in the
+ // AlphaComposite. For some rules the factors must be determined
+ // dynamically because they depend on the actual pixel value.
+ float srcAlpha = srcComponents[srcComponentsLength - 1];
+ float dstAlpha = dstComponents[dstComponentsLength - 1];
+ switch (composite.getRule())
+ {
+ case AlphaComposite.DST_ATOP:
+ fs = 1.F - dstAlpha;
+ fd = srcAlpha;
+ break;
+ case AlphaComposite.DST_IN:
+ fd = srcAlpha;
+ break;
+ case AlphaComposite.DST_OUT:
+ fd = 1.F - srcAlpha;
+ break;
+ case AlphaComposite.DST_OVER:
+ fs = 1.F - dstAlpha;
+ break;
+ case AlphaComposite.SRC_ATOP:
+ fs = srcAlpha;
+ fd = 1.F - srcAlpha;
+ break;
+ case AlphaComposite.SRC_IN:
+ fs = dstAlpha;
+ break;
+ case AlphaComposite.SRC_OUT:
+ fs = 1.F - dstAlpha;
+ break;
+ case AlphaComposite.SRC_OVER:
+ fd= 1.F - srcAlpha;
+ break;
+ case AlphaComposite.XOR:
+ fs = 1.F - dstAlpha;
+ fd= 1.F - srcAlpha;
+ break;
+ default:
+ // For the other cases the factors have already been determined
+ // in the constructor.
+ }
+
+ // Apply the blending equation to the pixels.
+ for (int i = 0; i < srcComponentsLength; i++)
+ {
+ dstComponents[i] = srcComponents[i] * fs
+ + dstComponents[i] * fd;
+ }
+
+ // Convert the result back when the destination is not
+ // alpha-premultiplied.
+ dstAlpha = dstComponents[dstComponentsLength - 1];
+ if (!dstColorModel.isAlphaPremultiplied() && dstAlpha != 0.F)
+ {
+ for (int i = 0; i < dstComponentsLength - 1; i++)
+ {
+ dstComponents[i] = dstComponents[i] / dstAlpha;
+ }
+ }
+
+ // Store the result in the destination raster.
+ dstPixel = dstColorModel.getDataElements(dstComponents, 0,
+ dstPixel);
+ dstOut.setDataElements(x, y, dstPixel);
+ } // End X loop.
+ } // End Y loop.
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/CubicSegment.java b/libjava/classpath/gnu/java/awt/java2d/CubicSegment.java
new file mode 100644
index 0000000..1e568f7
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/CubicSegment.java
@@ -0,0 +1,128 @@
+/* CubicSegment.java -- Cubic segment used for BasicStroke
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+
+import java.awt.geom.Point2D;
+
+/**
+ * Cubic Bezier curve segment
+ */
+public class CubicSegment extends Segment
+{
+ public Point2D cp1; // control points
+ public Point2D cp2; // control points
+
+ /**
+ * Constructor - takes coordinates of the starting point,
+ * first control point, second control point and end point,
+ * respecively.
+ */
+ public CubicSegment(double x1, double y1, double c1x, double c1y,
+ double c2x, double c2y, double x2, double y2)
+ {
+ super();
+ P1 = new Point2D.Double(x1, y1);
+ P2 = new Point2D.Double(x2, y2);
+ cp1 = new Point2D.Double(c1x, c1y);
+ cp2 = new Point2D.Double(c2x, c2y);
+ }
+
+ public CubicSegment(Point2D p1, Point2D cp1, Point2D cp2, Point2D p2)
+ {
+ super();
+ P1 = p1;
+ P2 = p2;
+ this.cp1 = cp1;
+ this.cp2 = cp2;
+ }
+
+ /**
+ * Clones this segment
+ */
+ public Object clone()
+ {
+ return new CubicSegment(P1.getX(), P1.getY(), cp1.getX(), cp1.getY(),
+ cp2.getX(), cp2.getY(), P2.getX(), P2.getY());
+ }
+
+ /**
+ * Get the "top" and "bottom" segments of this segment.
+ * First array element is p0 + normal, second is p0 - normal.
+ */
+ public Segment[] getDisplacedSegments(double radius)
+ {
+ this.radius = radius;
+ double x0 = P1.getX();
+ double y0 = P1.getY();
+ double x1 = cp1.getX();
+ double y1 = cp1.getY();
+ double x2 = cp2.getX();
+ double y2 = cp2.getY();
+ double x3 = P2.getX();
+ double y3 = P2.getY();
+ double[] p1 = normal(x0, y0, x1, y1);
+ double[] p2 = normal(x2, y2, x3, y3);
+
+
+ // FIXME: Doesn't compile.
+ // return new Segment[]{s1, s2};
+ return new Segment[0];
+ }
+
+ public void reverse()
+ {
+ Point2D temp = P1;
+ P1 = P2;
+ P2 = temp;
+ temp = cp1;
+ cp1 = cp2;
+ cp2 = temp;
+ }
+
+ public double[] first()
+ {
+ return new double[]{cp1.getX(), cp1.getY()};
+ }
+
+ public double[] last()
+ {
+ return new double[]{cp2.getX(), cp2.getY()};
+ }
+} // class CubicSegment
diff --git a/libjava/classpath/gnu/java/awt/java2d/LineSegment.java b/libjava/classpath/gnu/java/awt/java2d/LineSegment.java
new file mode 100644
index 0000000..9c0bcc7
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/LineSegment.java
@@ -0,0 +1,103 @@
+/* LineSegment.java -- Line segment used for BasicStroke
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+
+import java.awt.geom.Point2D;
+
+public class LineSegment extends Segment
+{
+ public LineSegment(double x1, double y1, double x2, double y2)
+ {
+ super();
+ P1 = new Point2D.Double(x1, y1);
+ P2 = new Point2D.Double(x2, y2);
+ }
+
+ public LineSegment(Point2D p1, Point2D p2)
+ {
+ super();
+ P1 = (Point2D) p1.clone();
+ P2 = (Point2D) p2.clone();
+ }
+
+ /**
+ * Clones this segment
+ */
+ public Object clone()
+ {
+ return new LineSegment(P1, P2);
+ }
+
+ /**
+ * Get the "top" and "bottom" segments of this segment.
+ * First array element is p0 + normal, second is p0 - normal.
+ */
+ public Segment[] getDisplacedSegments(double radius)
+ {
+ this.radius = radius;
+ double x0 = P1.getX();
+ double y0 = P1.getY();
+ double x1 = P2.getX();
+ double y1 = P2.getY();
+ double[] p = normal(x0, y0, x1, y1);
+ Segment s1 = (new LineSegment(x0 + p[0], y0 + p[1],
+ x1 + p[0], y1 + p[1] ));
+ Segment s2 = (new LineSegment(x0 - p[0], y0 - p[1],
+ x1 - p[0], y1 - p[1] ));
+ return new Segment[]{s1, s2};
+ }
+
+ public void reverse()
+ {
+ Point2D p = P1;
+ P1 = P2;
+ P2 = p;
+ }
+
+ public double[] first()
+ {
+ return new double[]{P2.getX(), P2.getY()};
+ }
+
+ public double[] last()
+ {
+ return new double[]{P1.getX(), P1.getY()};
+ }
+} // class LineSegment
diff --git a/libjava/classpath/gnu/java/awt/java2d/PolyEdge.java b/libjava/classpath/gnu/java/awt/java2d/PolyEdge.java
new file mode 100644
index 0000000..621bd3a
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/PolyEdge.java
@@ -0,0 +1,117 @@
+/* PolyEdge.java -- An edge in a polygon, used for polygon filling
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+/**
+ * An edge in a polygon. This is used by the scanline conversion algorithm
+ * implemented in {@link AbstractGraphics2D#rawFillShape}.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class PolyEdge
+ implements Comparable
+{
+
+ /**
+ * The start and end coordinates of the edge. y0 is always smaller or equal
+ * than y1.
+ */
+ public double x0, y0, x1, y1;
+
+ /**
+ * The slope of the edge. This is dx / dy.
+ */
+ double slope;
+
+ /**
+ * The intersection of this edge with the current scanline.
+ */
+ double xIntersection;
+
+ /**
+ * Creates a new PolyEdge with the specified coordinates.
+ *
+ * @param x0 the starting point, x coordinate
+ * @param y0 the starting point, y coordinate
+ * @param x1 the end point, x coordinate
+ * @param y1 the end point, y coordinate
+ */
+ PolyEdge(double x0, double y0, double x1, double y1)
+ {
+ if (y0 < y1)
+ {
+ this.x0 = x0;
+ this.y0 = y0;
+ this.x1 = x1;
+ this.y1 = y1;
+ }
+ else
+ {
+ this.x0 = x1;
+ this.y0 = y1;
+ this.x1 = x0;
+ this.y1 = y0;
+ }
+ slope = (this.x1 - this.x0) / (this.y1 - this.y0);
+ if (this.y0 == this.y1) // Horizontal edge.
+ xIntersection = Math.min(this.x0, this.x1);
+ else
+ xIntersection = this.x0 + slope * (Math.ceil(this.y0) - this.y0);
+ }
+
+ /**
+ * Sorts PolyEdges by the x coordinate from the minimum x value.
+ */
+ public int compareTo(Object o)
+ {
+ PolyEdge other = (PolyEdge) o;
+ int comp = 0;
+ if (x0 < other.x0)
+ comp = -1;
+ else if (x0 > other.x0)
+ comp = 1;
+ return comp;
+ }
+
+ public String toString()
+ {
+ return "Edge: " + x0 + ", " + y0 + ", " + x1 + ", " + y1 + ", slope: "
+ + slope + ", xIntersection: " + xIntersection;
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/PolyEdgeComparator.java b/libjava/classpath/gnu/java/awt/java2d/PolyEdgeComparator.java
new file mode 100644
index 0000000..6706f22
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/PolyEdgeComparator.java
@@ -0,0 +1,70 @@
+/* PolyEdgeComparator.java -- Sorts PolyEdges by their current intersection
+ points
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+import java.util.Comparator;
+
+/**
+ * Sorts {@link PolyEdge}s by their current intersection points.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class PolyEdgeComparator
+ implements Comparator
+{
+
+ /**
+ * The current scanline.
+ */
+ int y;
+
+ public int compare(Object o1, Object o2)
+ {
+ PolyEdge edge1 = (PolyEdge) o1;
+ PolyEdge edge2 = (PolyEdge) o2;
+ int comp = 0;
+ if (edge1.xIntersection < edge2.xIntersection)
+ comp = -1;
+ else if (edge1.xIntersection > edge2.xIntersection)
+ comp = 1;
+ return comp;
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/QuadSegment.java b/libjava/classpath/gnu/java/awt/java2d/QuadSegment.java
new file mode 100644
index 0000000..9c15a8c
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/QuadSegment.java
@@ -0,0 +1,213 @@
+/* QuadSegment.java -- QuadCurve segment used for BasicStroke
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+
+import java.awt.geom.Point2D;
+import java.awt.geom.QuadCurve2D;
+
+/**
+ * Quadratic Bezier curve segment
+ *
+ * Note: Most peers don't support quadratics directly, so it might make
+ * sense to represent them as cubics internally and just be done with it.
+ * I think we should be peer-agnostic, however, and stay faithful to the
+ * input geometry types as far as possible.
+ */
+public class QuadSegment extends Segment
+{
+ public Point2D cp; // control point
+
+ /**
+ * Constructor, takes the coordinates of the start, control,
+ * and end point, respectively.
+ */
+ public QuadSegment(double x1, double y1, double cx, double cy, double x2,
+ double y2)
+ {
+ super();
+ P1 = new Point2D.Double(x1, y1);
+ P2 = new Point2D.Double(x2, y2);
+ cp = new Point2D.Double(cx, cy);
+ }
+
+ public QuadSegment(Point2D p1, Point2D cp, Point2D p2)
+ {
+ super();
+ P1 = p1;
+ P2 = p2;
+ this.cp = cp;
+ }
+
+ public QuadSegment(QuadCurve2D curve)
+ {
+ super();
+ P1 = curve.getP1();
+ P2 = curve.getP2();
+ this.cp = curve.getCtrlPt();
+ }
+
+ /**
+ * Clones this segment
+ */
+ public Object clone()
+ {
+ return new QuadSegment(P1.getX(), P1.getY(), cp.getX(), cp.getY(),
+ P2.getX(), P2.getY());
+ }
+
+ /**
+ * Get the "top" and "bottom" segments of a given segment.
+ * First array element is p0 + normal, second is p0 - normal.
+ */
+ public Segment[] getDisplacedSegments(double radius)
+ {
+ this.radius = radius;
+ double x0 = P1.getX();
+ double y0 = P1.getY();
+ double x1 = cp.getX();
+ double y1 = cp.getY();
+ double x2 = P2.getX();
+ double y2 = P2.getY();
+
+ QuadCurve2D left = new QuadCurve2D.Double();
+ QuadCurve2D right = new QuadCurve2D.Double();
+ QuadCurve2D orig = new QuadCurve2D.Double(x0, y0, x1, y1, x2, y2);
+ orig.subdivide(left, right);
+
+ QuadSegment s1 = offsetSubdivided(left, true);
+ QuadSegment s2 = offsetSubdivided(left, false);
+
+ s1.add( offsetSubdivided(right, true) );
+ s2.add( offsetSubdivided(right, false) );
+
+ return new Segment[]{s1, s2};
+ }
+
+ private QuadSegment offsetSubdivided(QuadCurve2D curve, boolean plus)
+ {
+ double[] n1 = normal(curve.getX1(), curve.getY1(),
+ curve.getCtrlX(), curve.getCtrlY());
+ double[] n2 = normal(curve.getCtrlX(), curve.getCtrlY(),
+ curve.getX2(), curve.getY2());
+
+ Point2D cp;
+ QuadSegment s;
+ if( plus )
+ {
+ cp = lineIntersection(curve.getX1() + n1[0],
+ curve.getY1() + n1[1],
+ curve.getCtrlX() + n1[0],
+ curve.getCtrlY() + n1[1],
+ curve.getCtrlX() + n2[0],
+ curve.getCtrlY() + n2[1],
+ curve.getX2() + n2[0],
+ curve.getY2() + n2[1], true);
+ s = new QuadSegment(curve.getX1() + n1[0], curve.getY1() + n1[1],
+ cp.getX(), cp.getY(),
+ curve.getX2() + n2[0], curve.getY2() + n2[1]);
+ }
+ else
+ {
+ cp = lineIntersection(curve.getX1() - n1[0],
+ curve.getY1() - n1[1],
+ curve.getCtrlX() - n1[0],
+ curve.getCtrlY() - n1[1],
+ curve.getCtrlX() - n2[0],
+ curve.getCtrlY() - n2[1],
+ curve.getX2() - n2[0],
+ curve.getY2() - n2[1], true);
+
+ s = new QuadSegment(curve.getX1() - n1[0], curve.getY1() - n1[1],
+ cp.getX(), cp.getY(),
+ curve.getX2() - n2[0], curve.getY2() - n2[1]);
+ }
+
+ return s;
+ }
+
+ private Point2D lineIntersection(double X1, double Y1,
+ double X2, double Y2,
+ double X3, double Y3,
+ double X4, double Y4,
+ boolean infinite)
+ {
+ double x1 = X1;
+ double y1 = Y1;
+ double rx = X2 - x1;
+ double ry = Y2 - y1;
+
+ double x2 = X3;
+ double y2 = Y3;
+ double sx = X4 - x2;
+ double sy = Y4 - y2;
+
+ double determinant = sx * ry - sy * rx;
+ double nom = (sx * (y2 - y1) + sy * (x1 - x2));
+
+ // lines can be considered parallel.
+ if (Math.abs(determinant) < 1E-6)
+ return null;
+
+ nom = nom / determinant;
+
+ // check if lines are within the bounds
+ if(!infinite && (nom > 1.0 || nom < 0.0))
+ return null;
+
+ return new Point2D.Double(x1 + nom * rx, y1 + nom * ry);
+ }
+
+ public void reverse()
+ {
+ Point2D p = P1;
+ P1 = P2;
+ P2 = p;
+ }
+
+ public double[] first()
+ {
+ return new double[]{cp.getX(), cp.getY()};
+ }
+
+ public double[] last()
+ {
+ return new double[]{cp.getX(), cp.getY()};
+ }
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/RasterGraphics.java b/libjava/classpath/gnu/java/awt/java2d/RasterGraphics.java
new file mode 100644
index 0000000..4de8035
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/RasterGraphics.java
@@ -0,0 +1,101 @@
+/* RasterGraphics.java -- A Graphics2D impl for Rasters
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+import java.awt.GraphicsConfiguration;
+import java.awt.image.ColorModel;
+import java.awt.image.WritableRaster;
+
+/**
+ * A Graphics2D implementation that operates on Raster objects. This is
+ * primarily used for BufferedImages, but can theoretically be used on
+ * arbitrary WritableRasters.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class RasterGraphics
+ extends AbstractGraphics2D
+{
+
+ /**
+ * The raster on which we operate.
+ */
+ private WritableRaster raster;
+
+ /**
+ * The color model of this Graphics instance.
+ */
+ private ColorModel colorModel;
+
+ public RasterGraphics(WritableRaster r, ColorModel cm)
+ {
+ raster = r;
+ colorModel = cm;
+ }
+
+ /**
+ * Returns the color model of this Graphics object.
+ *
+ * @return the color model of this Graphics object
+ */
+ protected ColorModel getColorModel()
+ {
+ return colorModel;
+ }
+
+ /**
+ * Returns a WritableRaster that is used by this class to perform the
+ * rendering in. It is not necessary that the target surface immediately
+ * reflects changes in the raster. Updates to the raster are notified via
+ * {@link AbstractGraphics2D#updateRaster}.
+ *
+ * @return the destination raster
+ */
+ protected WritableRaster getDestinationRaster()
+ {
+ return raster;
+ }
+
+ public GraphicsConfiguration getDeviceConfiguration()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/awt/java2d/Segment.java b/libjava/classpath/gnu/java/awt/java2d/Segment.java
new file mode 100644
index 0000000..9a985f6
--- /dev/null
+++ b/libjava/classpath/gnu/java/awt/java2d/Segment.java
@@ -0,0 +1,131 @@
+/* Segment.java -- Abstract segment used for BasicStroke
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.awt.java2d;
+
+import java.awt.geom.Point2D;
+
+public abstract class Segment implements Cloneable
+{
+ // segment type, PathIterator segment types are used.
+ public Point2D P1;
+ public Point2D P2;
+ public Segment next;
+ public Segment last;
+ protected double radius;
+
+ public Segment()
+ {
+ P1 = P2 = null;
+ next = null;
+ last = this;
+ }
+
+ public void add(Segment newsegment)
+ {
+ last.next = newsegment;
+ last = last.next;
+ }
+
+ /**
+ * Reverses the orientation of the whole polygon
+ */
+ public void reverseAll()
+ {
+ reverse();
+ Segment v = next;
+ Segment former = this;
+ next = null;
+
+ while (v != null)
+ {
+ v.reverse();
+ v.last = this;
+ Segment oldnext = v.next;
+ v.next = former;
+
+ former = v;
+ v = oldnext; // move to the next in list
+ }
+ }
+
+ public String toString()
+ {
+ return "Segment:"+P1+", "+P2;
+ }
+
+ /**
+ * Get the normal vector to the slope of the line.
+ * Returns: 0.5*width*(norm of derivative of the (x0,y0)-(x1,y1) vector)
+ */
+ protected double[] normal(double x0, double y0, double x1, double y1)
+ {
+ double dx = (x1 - x0);
+ double dy = (y1 - y0);
+ if( dy == 0 )
+ {
+ dy = radius * ((dx > 0)?1:-1);
+ dx = 0;
+ }
+ else if( dx == 0 )
+ {
+ dx = radius * ((dy > 0)?-1:1);
+ dy = 0;
+ }
+ else
+ {
+ double N = Math.sqrt(dx * dx + dy * dy);
+ double odx = dx;
+ dx = -radius * dy / N;
+ dy = radius * odx / N;
+ }
+ return new double[]{ dx, dy };
+ }
+
+ public abstract void reverse();
+
+ /**
+ * Get the "top" and "bottom" segments of a segment.
+ * First array element is p0 + normal, second is p0 - normal.
+ */
+ public abstract Segment[] getDisplacedSegments(double radius);
+
+ public abstract double[] first();
+ public abstract double[] last();
+
+}
diff --git a/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java b/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java
index daaa143d..88733b9 100644
--- a/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/GLightweightPeer.java
@@ -1,5 +1,5 @@
/* GLightweightPeer.java --
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,11 +54,14 @@ import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.awt.event.PaintEvent;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.VolatileImage;
+import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
@@ -79,7 +82,7 @@ import java.awt.peer.LightweightPeer;
* Lightweight components are painted directly onto their parent
* containers through an Image object provided by the toolkit.
*/
-public class GLightweightPeer
+public class GLightweightPeer
implements LightweightPeer, ContainerPeer
{
private Component comp;
@@ -247,7 +250,25 @@ public class GLightweightPeer
public void setBounds(int x, int y, int width, int height) {}
- public void setCursor(Cursor cursor) {}
+ /**
+ * Sets the cursor on the heavy-weight parent peer.
+ * Called by the MouseListener on mouse enter.
+ */
+ public void setCursor(Cursor cursor)
+ {
+ Component p = comp.getParent();
+ while (p != null && p.isLightweight())
+ p = p.getParent();
+
+ if (p != null)
+ {
+ // Don't actually change the cursor of the component
+ // otherwise other childs inherit this cursor.
+ ComponentPeer peer = p.getPeer();
+ if (peer != null)
+ peer.setCursor(cursor);
+ }
+ }
public void setEnabled(boolean enabled) {}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java b/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java
index c79f403..b2ffed1 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java
@@ -110,14 +110,10 @@ public class GdkFontMetrics extends FontMetrics
return stringWidth (new String (data, off, len));
}
- /*
- Sun's Motif implementation always returns 0 or 1 here (???), but
- going by the X11 man pages, it seems as though we should return
- font.ascent + font.descent.
- */
public int getLeading ()
{
- return 1;
+ // Sun always returns 0.
+ return 0;
}
public int getAscent ()
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java
index c6d42b3..8274448 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GdkFontPeer.java
@@ -1,5 +1,5 @@
/* GdkFontPeer.java -- Implements FontPeer with GTK+
- Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,6 +43,7 @@ import gnu.java.awt.peer.ClasspathFontPeer;
import java.awt.Font;
import java.awt.FontMetrics;
+import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
@@ -157,7 +158,7 @@ public class GdkFontPeer extends ClasspathFontPeer
public String getPostScriptName(Font font)
{
- return null;
+ return this.familyName;
}
public boolean canDisplay (Font font, char c)
@@ -301,7 +302,9 @@ public class GdkFontPeer extends ClasspathFontPeer
public FontMetrics getFontMetrics (Font font)
{
- return new GdkFontMetrics (font);
+ // Get the font metrics through GtkToolkit to take advantage of
+ // the metrics cache.
+ return Toolkit.getDefaultToolkit().getFontMetrics (font);
}
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java b/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java
index d7217aa..3c3cbdf 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java
@@ -48,6 +48,7 @@ import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
+import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
@@ -218,8 +219,10 @@ public class GdkGraphics extends Graphics
public boolean drawImage (Image img, int x, int y,
Color bgcolor, ImageObserver observer)
{
- return drawImage(img, x, y, img.getWidth(null), img.getHeight(null),
- bgcolor, observer);
+ if (img != null)
+ return drawImage(img, x, y, img.getWidth(null), img.getHeight(null),
+ bgcolor, observer);
+ return false;
}
public boolean drawImage (Image img, int x, int y, ImageObserver observer)
@@ -227,16 +230,19 @@ public class GdkGraphics extends Graphics
return drawImage (img, x, y, null, observer);
}
- public boolean drawImage (Image img, int x, int y, int width, int height,
- Color bgcolor, ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, int width, int height,
+ Color bgcolor, ImageObserver observer)
{
- if (img instanceof GtkImage)
- return ((GtkImage)img).drawImage (this, x, y, width, height,
- bgcolor, observer);
- else
- return (new GtkImage(img.getSource())).drawImage (this, x, y,
- width, height,
- bgcolor, observer);
+ if (img != null)
+ {
+ if (img instanceof GtkImage)
+ return ((GtkImage) img).drawImage(this, x, y, width, height, bgcolor,
+ observer);
+ return (new GtkImage(img.getSource())).drawImage(this, x, y, width,
+ height, bgcolor,
+ observer);
+ }
+ return false;
}
public boolean drawImage (Image img, int x, int y, int width, int height,
@@ -249,14 +255,16 @@ public class GdkGraphics extends Graphics
int sx1, int sy1, int sx2, int sy2,
Color bgcolor, ImageObserver observer)
{
- if (img instanceof GtkImage)
- return ((GtkImage)img).drawImage(this, dx1, dy1, dx2, dy2,
- sx1, sy1, sx2, sy2, bgcolor, observer);
- else
- return (new GtkImage(img.getSource())).drawImage(this, dx1, dy1,
- dx2, dy2,
- sx1, sy1, sx2, sy2,
- bgcolor, observer);
+ if (img != null)
+ {
+ if (img instanceof GtkImage)
+ return ((GtkImage) img).drawImage(this, dx1, dy1, dx2, dy2, sx1, sy1,
+ sx2, sy2, bgcolor, observer);
+ return (new GtkImage(img.getSource())).drawImage(this, dx1, dy1, dx2,
+ dy2, sx1, sy1, sx2,
+ sy2, bgcolor, observer);
+ }
+ return false;
}
public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
@@ -373,7 +381,9 @@ public class GdkGraphics extends Graphics
public FontMetrics getFontMetrics (Font font)
{
- return new GdkFontMetrics (font);
+ // Get the font metrics through GtkToolkit to take advantage of
+ // the metrics cache.
+ return Toolkit.getDefaultToolkit().getFontMetrics (font);
}
native void setClipRectangle (int x, int y, int width, int height);
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java b/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java
index 195304d..323d561 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java
@@ -1229,7 +1229,10 @@ public class GdkGraphics2D extends Graphics2D
drawPixels(pixels, r.getWidth(), r.getHeight(), r.getWidth(), i2u);
updateBufferedImage();
-
+
+ // Cairo seems loosing the current color.
+ setColor(fg);
+
return true;
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
index 054ebaa..72908ff 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
@@ -1,5 +1,5 @@
/* GdkPixbufDecoder.java -- Image data decoding object
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -82,6 +82,14 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
initStaticState ();
}
+ /**
+ * Lock that should be held for all gdkpixbuf operations. We don't use
+ * the global gdk_threads_enter/leave functions since gdkpixbuf
+ * operations can be done in parallel to drawing and manipulating gtk
+ * widgets.
+ */
+ static Object pixbufLock = new Object();
+
static native void initStaticState();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
@@ -92,6 +100,7 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
Vector curr;
// interface to GdkPixbuf
+ // These native functions should be called with the pixbufLock held.
native void initState ();
native void pumpBytes (byte[] bytes, int len) throws IOException;
native void pumpDone () throws IOException;
@@ -171,11 +180,26 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
byte bytes[] = new byte[4096];
int len = 0;
- initState();
+ synchronized(pixbufLock)
+ {
+ initState();
+ }
needsClose = true;
+
+ // Note: We don't want the pixbufLock while reading from the InputStream.
while ((len = is.read (bytes)) != -1)
- pumpBytes (bytes, len);
- pumpDone();
+ {
+ synchronized(pixbufLock)
+ {
+ pumpBytes (bytes, len);
+ }
+ }
+
+ synchronized(pixbufLock)
+ {
+ pumpDone();
+ }
+
needsClose = false;
for (int i = 0; i < curr.size (); i++)
@@ -189,7 +213,10 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
public void finalize()
{
- finish(needsClose);
+ synchronized(pixbufLock)
+ {
+ finish(needsClose);
+ }
}
@@ -495,8 +522,11 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
}
processImageStarted(1);
- streamImage(pixels, this.ext, width, height, model.hasAlpha(),
- (DataOutput) this.getOutput());
+ synchronized(pixbufLock)
+ {
+ streamImage(pixels, this.ext, width, height, model.hasAlpha(),
+ (DataOutput) this.getOutput());
+ }
processImageComplete();
}
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
index dc21761..797d653 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
@@ -38,61 +38,22 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Canvas;
import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.event.PaintEvent;
import java.awt.peer.CanvasPeer;
public class GtkCanvasPeer extends GtkComponentPeer implements CanvasPeer
{
native void create ();
+ native void realize ();
public GtkCanvasPeer (Canvas c)
{
super (c);
}
- public Graphics getGraphics ()
- {
- if (GtkToolkit.useGraphics2D ())
- return new GdkGraphics2D (this);
- else
- return new GdkGraphics (this);
- }
-
- public void handleEvent (AWTEvent event)
- {
- int id = event.getID();
-
- switch (id)
- {
- case PaintEvent.PAINT:
- case PaintEvent.UPDATE:
- {
- try
- {
- Graphics g = getGraphics ();
- g.setClip (((PaintEvent)event).getUpdateRect());
-
- if (id == PaintEvent.PAINT)
- awtComponent.paint (g);
- else
- awtComponent.update (g);
-
- g.dispose ();
- }
- catch (InternalError e)
- {
- System.err.println (e);
- }
- }
- break;
- }
- }
-
- /* Preferred size for a drawing widget is always what the user requested */
+ // Preferred size for a drawing widget is always what the user
+ // requested.
public Dimension getPreferredSize ()
{
return awtComponent.getSize ();
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java
index a502e1f..f520fe2 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboard.java
@@ -1,5 +1,5 @@
/* GtkClipboard.java
- Copyright (C) 1999, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,59 +48,85 @@ import java.util.Iterator;
public class GtkClipboard extends Clipboard
{
+ /**
+ * The one and only gtk+ clipboard instance for the CLIPBOARD selection.
+ */
+ final static GtkClipboard clipboard = new GtkClipboard("System Clipboard");
+
+ /**
+ * The one and only gtk+ clipboard instance for the PRIMARY selection.
+ */
+ final static GtkClipboard selection = new GtkClipboard("System Selection");
// Given to the native side so it can signal special targets that
// can be converted to one of the special predefined DataFlavors.
- static final String stringMimeType;
- static final String imageMimeType;
- static final String filesMimeType;
+ static final String stringMimeType
+ = DataFlavor.stringFlavor.getMimeType();
+ static final String imageMimeType
+ = DataFlavor.imageFlavor.getMimeType();
+ static final String filesMimeType
+ = DataFlavor.javaFileListFlavor.getMimeType();
// Indicates whether the results of the clipboard selection can be
// cached by GtkSelection. True if
// gdk_display_supports_selection_notification.
- static final boolean canCache;
-
- static
- {
- stringMimeType = DataFlavor.stringFlavor.getMimeType();
- imageMimeType = DataFlavor.imageFlavor.getMimeType();
- filesMimeType = DataFlavor.javaFileListFlavor.getMimeType();
-
- canCache = initNativeState(stringMimeType, imageMimeType, filesMimeType);
- }
-
- /**
- * The one and only gtk+ clipboard instance.
- */
- private static GtkClipboard instance = new GtkClipboard();
+ static final boolean canCache = initNativeState(clipboard, selection,
+ stringMimeType,
+ imageMimeType,
+ filesMimeType);
/**
* Creates the clipboard and sets the initial contents to the
* current gtk+ selection.
*/
- private GtkClipboard()
+ private GtkClipboard(String name)
{
- super("System Clipboard");
- setContents(new GtkSelection(), null);
+ super(name);
+ setContents(new GtkSelection(this), null);
}
/**
- * Returns the one and only GtkClipboard instance.
+ * Returns the one and only GtkClipboard instance for the CLIPBOARD
+ * selection.
*/
+ static GtkClipboard getClipboardInstance()
+ {
+ return clipboard;
+ }
- static GtkClipboard getInstance()
+ /**
+ * Returns the one and only GtkClipboard instance for the PRIMARY
+ * selection.
+ */
+ static GtkClipboard getSelectionInstance()
{
- return instance;
+ return selection;
}
/**
* Sets the GtkSelection facade as new contents of the clipboard.
* Called from gtk+ when another application grabs the clipboard and
* we loose ownership.
+ *
+ * @param cleared If true this is a clear event (someone takes the
+ * clipboard from us) otherwise it is an owner changed event.
*/
- private static void setSystemContents()
+ private synchronized void setSystemContents(boolean cleared)
{
- GtkClipboardNotifier.announce();
+ // We need to notify clipboard owner listeners when we were the
+ // owner (the selection was explictly set) and someone takes the
+ // clipboard away from us and asks us the clear any held storage,
+ // or if we weren't the owner of the clipboard to begin with, but
+ // the clipboard contents changed. We could refine this and check
+ // whether the actual available formats did in fact change, but we
+ // assume listeners will check for that anyway (and if possible we
+ // ask to cache the available formats so even if multiple
+ // listeners check after a notification the overhead should be
+ // minimal).
+ boolean owner = ! (contents instanceof GtkSelection);
+ boolean needNotification = (cleared && owner) || (! cleared && ! owner);
+ if (needNotification)
+ GtkClipboardNotifier.announce(this);
}
/**
@@ -146,15 +172,12 @@ public class GtkClipboard extends Clipboard
|| flavor.isRepresentationClassReader())
text = true;
- // XXX - We only support automatic image conversion for
- // GtkImages at the moment. So explicitly check that we have
- // one.
if (! images && flavors[i].equals(DataFlavor.imageFlavor))
{
try
{
Object o = contents.getTransferData(DataFlavor.imageFlavor);
- if (o instanceof GtkImage)
+ if (o instanceof Image)
images = true;
}
catch (UnsupportedFlavorException ufe)
@@ -265,7 +288,11 @@ public class GtkClipboard extends Clipboard
try
{
- return (GtkImage) contents.getTransferData(DataFlavor.imageFlavor);
+ Object o = contents.getTransferData(DataFlavor.imageFlavor);
+ if( o instanceof GtkImage )
+ return (GtkImage) o;
+ else
+ return new GtkImage(((Image)o).getSource());
}
catch (UnsupportedFlavorException ufe)
{
@@ -384,11 +411,13 @@ public class GtkClipboard extends Clipboard
}
/**
- * Initializes the gtk+ clipboard and caches any native side
+ * Initializes the gtk+ clipboards and caches any native side
* structures needed. Returns whether or not the contents of the
* Clipboard can be cached (gdk_display_supports_selection_notification).
*/
- private static native boolean initNativeState(String stringTarget,
+ private static native boolean initNativeState(GtkClipboard clipboard,
+ GtkClipboard selection,
+ String stringTarget,
String imageTarget,
String filesTarget);
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java
index a470fe1..fdc7d50 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java
@@ -39,11 +39,15 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.datatransfer.*;
+import java.util.*;
class GtkClipboardNotifier extends Thread
{
- /** Whether or not to announce a GtkSelection change. */
- private static boolean announceChange;
+ /** Whether to announce a new GtkSelection has been set for CLIPBOARD. */
+ static private boolean announceClipboardChange;
+
+ /** Whether to announce a new GtkSelection has been set for PRIMARY. */
+ static private boolean announcePrimaryChange;
/**
* The one and only instance. All operations are synchronized on
@@ -64,24 +68,30 @@ class GtkClipboardNotifier extends Thread
/**
* Notifies that a new GtkSelection has to be announced.
+ *
+ * @param clipboard either the GtkClipboard.clipboard or the
+ * GtkClipboard.selection.
*/
- static void announce()
+ static void announce(GtkClipboard clipboard)
{
synchronized (notifier)
{
- announceChange = true;
+ if (clipboard == GtkClipboard.clipboard)
+ announceClipboardChange = true;
+ else
+ announcePrimaryChange = true;
notifier.notifyAll();
}
}
public void run()
{
- final GtkClipboard clipboard = GtkClipboard.getInstance();
+ GtkClipboard clipboard;
while (true)
{
synchronized (this)
{
- while (!announceChange)
+ while (! announceClipboardChange && ! announcePrimaryChange)
{
try
{
@@ -92,14 +102,24 @@ class GtkClipboardNotifier extends Thread
// ignore
}
}
- announceChange = false;
+
+ if (announceClipboardChange)
+ {
+ clipboard = GtkClipboard.clipboard;
+ announceClipboardChange = false;
+ }
+ else
+ {
+ clipboard = GtkClipboard.selection;
+ announcePrimaryChange = false;
+ }
}
// Do the actual announcement without the lock held. We will
// notice a new change after this notification has finished.
try
{
- clipboard.setContents(new GtkSelection(), null);
+ clipboard.setContents(new GtkSelection(clipboard), null);
}
catch (Throwable t)
{
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 8211839..1a85de5 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -63,6 +63,7 @@ import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
+import java.awt.event.MouseWheelEvent;
import java.awt.event.PaintEvent;
import java.awt.event.TextEvent;
import java.awt.image.BufferedImage;
@@ -86,8 +87,6 @@ public class GtkComponentPeer extends GtkGenericPeer
Insets insets;
- boolean isInRepaint;
-
/* this isEnabled differs from Component.isEnabled, in that it
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
@@ -100,8 +99,9 @@ public class GtkComponentPeer extends GtkGenericPeer
native void gtkWidgetGetPreferredDimensions (int[] dim);
native void gtkWindowGetLocationOnScreen (int[] point);
native void gtkWidgetGetLocationOnScreen (int[] point);
- native void gtkWidgetSetCursor (int type);
- native void gtkWidgetSetCursorUnlocked (int type);
+ native void gtkWidgetSetCursor (int type, GtkImage image, int x, int y);
+ native void gtkWidgetSetCursorUnlocked (int type, GtkImage image,
+ int x, int y);
native void gtkWidgetSetBackground (int red, int green, int blue);
native void gtkWidgetSetForeground (int red, int green, int blue);
native void gtkWidgetSetSensitive (boolean sensitive);
@@ -150,6 +150,9 @@ public class GtkComponentPeer extends GtkGenericPeer
setNativeEventMask ();
realize ();
+
+ if (awtComponent.isCursorSet())
+ setCursor ();
}
void setParentAndBounds ()
@@ -176,16 +179,6 @@ public class GtkComponentPeer extends GtkGenericPeer
gtkWidgetSetParent (p);
}
- void beginNativeRepaint ()
- {
- isInRepaint = true;
- }
-
- void endNativeRepaint ()
- {
- isInRepaint = false;
- }
-
/*
* Set the bounds of this peer's AWT Component based on dimensions
* returned by the native windowing system. Most Components impose
@@ -250,6 +243,8 @@ public class GtkComponentPeer extends GtkGenericPeer
return getToolkit().getFontMetrics(font);
}
+ // getGraphics may be overridden by derived classes but it should
+ // never return null.
public Graphics getGraphics ()
{
if (GtkToolkit.useGraphics2D ())
@@ -291,30 +286,10 @@ public class GtkComponentPeer extends GtkGenericPeer
switch (id)
{
case PaintEvent.PAINT:
+ paintComponent((PaintEvent) event);
+ break;
case PaintEvent.UPDATE:
- {
- try
- {
- Graphics g = getGraphics();
-
- if (!awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || g == null)
- break;
-
- g.setClip(((PaintEvent) event).getUpdateRect());
-
- if (id == PaintEvent.PAINT)
- awtComponent.paint(g);
- else
- awtComponent.update(g);
-
- g.dispose();
- }
- catch (InternalError e)
- {
- System.err.println(e);
- }
- }
+ updateComponent((PaintEvent) event);
break;
case KeyEvent.KEY_PRESSED:
ke = (KeyEvent) event;
@@ -328,7 +303,49 @@ public class GtkComponentPeer extends GtkGenericPeer
break;
}
}
-
+
+ // This method and its overrides are the only methods in the peers
+ // that should call awtComponent.paint.
+ protected void paintComponent (PaintEvent event)
+ {
+ // Do not call Component.paint if the component is not showing or
+ // if its bounds form a degenerate rectangle.
+ if (!awtComponent.isShowing()
+ || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1))
+ return;
+
+ // Creating and disposing a GdkGraphics every time paint is called
+ // seems expensive. However, the graphics state does not carry
+ // over between calls to paint, and resetting the graphics object
+ // may even be more costly than simply creating a new one.
+ Graphics g = getGraphics();
+
+ g.setClip(event.getUpdateRect());
+
+ awtComponent.paint(g);
+
+ g.dispose();
+ }
+
+ // This method and its overrides are the only methods in the peers
+ // that should call awtComponent.update.
+ protected void updateComponent (PaintEvent event)
+ {
+ // Do not call Component.update if the component is not showing or
+ // if its bounds form a degenerate rectangle.
+ if (!awtComponent.isShowing()
+ || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1))
+ return;
+
+ Graphics g = getGraphics();
+
+ g.setClip(event.getUpdateRect());
+
+ awtComponent.update(g);
+
+ g.dispose();
+ }
+
public boolean isFocusTraversable ()
{
return true;
@@ -369,7 +386,7 @@ public class GtkComponentPeer extends GtkGenericPeer
public void repaint (long tm, int x, int y, int width, int height)
{
- if (x == 0 && y == 0 && width == 0 && height == 0)
+ if (width < 1 || height < 1)
return;
if (tm <= 0)
@@ -490,10 +507,28 @@ public class GtkComponentPeer extends GtkGenericPeer
public void setCursor (Cursor cursor)
{
+ int x, y;
+ GtkImage image;
+ int type = cursor.getType();
+ if (cursor instanceof GtkCursor)
+ {
+ GtkCursor gtkCursor = (GtkCursor) cursor;
+ image = gtkCursor.getGtkImage();
+ Point hotspot = gtkCursor.getHotspot();
+ x = hotspot.x;
+ y = hotspot.y;
+ }
+ else
+ {
+ image = null;
+ x = 0;
+ y = 0;
+ }
+
if (Thread.currentThread() == GtkToolkit.mainThread)
- gtkWidgetSetCursorUnlocked (cursor.getType ());
+ gtkWidgetSetCursorUnlocked(cursor.getType(), image, x, y);
else
- gtkWidgetSetCursor (cursor.getType ());
+ gtkWidgetSetCursor(cursor.getType(), image, x, y);
}
public void setEnabled (boolean b)
@@ -532,7 +567,7 @@ public class GtkComponentPeer extends GtkGenericPeer
public void setVisible (boolean b)
{
// Only really set visible when component is bigger than zero pixels.
- if (b)
+ if (b && ! (awtComponent instanceof Window))
{
Rectangle bounds = awtComponent.getBounds();
b = (bounds.width > 0) && (bounds.height > 0);
@@ -561,10 +596,22 @@ public class GtkComponentPeer extends GtkGenericPeer
clickCount, popupTrigger));
}
+ /**
+ * Callback for component_scroll_cb.
+ */
+ protected void postMouseWheelEvent(int id, long when, int mods,
+ int x, int y, int clickCount,
+ boolean popupTrigger,
+ int type, int amount, int rotation)
+ {
+ q().postEvent(new MouseWheelEvent(awtComponent, id, when, mods,
+ x, y, clickCount, popupTrigger,
+ type, amount, rotation));
+ }
+
protected void postExposeEvent (int x, int y, int width, int height)
{
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 23737b0..06076e7 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -99,11 +99,6 @@ public class GtkContainerPeer extends GtkComponentPeer
}
}
- public Graphics getGraphics ()
- {
- return super.getGraphics();
- }
-
public void beginLayout () { }
public void endLayout () { }
public boolean isPaintPending () { return false; }
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Buffer_Test.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkCursor.java
index 49d86c6..eb9e713 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Buffer_Test.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkCursor.java
@@ -1,5 +1,5 @@
-/* Buffer_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* GtkCursor.java -- Simple wrapper for custom cursor.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,32 +36,37 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser.low;
+package gnu.java.awt.peer.gtk;
-import test.gnu.javax.swing.text.html.parser.TestCase;
-
-import gnu.javax.swing.text.html.parser.support.low.Buffer;
+import java.awt.Cursor;
+import java.awt.Image;
+import java.awt.Point;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * Simple wrapper for custom Cursor.
*/
-public class Buffer_Test
- extends TestCase
+public class GtkCursor extends Cursor
{
- public void testAppend()
- {
- Buffer.INITIAL_SIZE = 2;
+ private final GtkImage image;
+ private final Point hotspot;
- Buffer b = new Buffer("01");
- b.append('A', 0);
- b.append('B', 0);
- assertEquals(b.toString(), "01AB");
+ GtkCursor(Image image, Point hotspot, String name)
+ {
+ super(name);
+ if (image instanceof GtkImage)
+ this.image = (GtkImage) image;
+ else
+ this.image = new GtkImage(image.getSource());
+ this.hotspot = hotspot;
}
- public void testDelete()
+ GtkImage getGtkImage()
+ {
+ return image;
+ }
+
+ Point getHotspot()
{
- Buffer b = new Buffer("0123456789ABCDEFGHIJKLMN");
- b.delete(2, 7);
- assertEquals(b.toString(), "01789ABCDEFGHIJKLMN");
+ return hotspot;
}
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java
index 3e3125a..3254f56 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java
@@ -51,34 +51,6 @@ public class GtkDialogPeer extends GtkWindowPeer
{
super (dialog);
}
-
- public Graphics getGraphics ()
- {
- Graphics g;
- if (GtkToolkit.useGraphics2D ())
- g = new GdkGraphics2D (this);
- else
- g = new GdkGraphics (this);
- g.translate (-insets.left, -insets.top);
- return g;
- }
-
- protected void postMouseEvent(int id, long when, int mods, int x, int y,
- int clickCount, boolean popupTrigger)
- {
- super.postMouseEvent (id, when, mods,
- x + insets.left, y + insets.top,
- clickCount, popupTrigger);
- }
-
- protected void postExposeEvent (int x, int y, int width, int height)
- {
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
- }
void create ()
{
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index a0ae9e9..8650578 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk;
import java.awt.Dialog;
import java.awt.FileDialog;
import java.awt.Graphics;
+import java.awt.event.PaintEvent;
import java.awt.peer.FileDialogPeer;
import java.io.File;
import java.io.FilenameFilter;
@@ -166,10 +167,10 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
return filter.accept(dir, filename);
}
- public Graphics getGraphics ()
+ // Sun does not call FileDialog.update.
+ protected void updateComponent (PaintEvent event)
{
- // GtkFileDialog will repaint by itself
- return null;
+ // Override GtkComponetPeer.updateComponent to do nothing.
}
// called back by native side: handle_response_cb
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java
deleted file mode 100644
index 80ad158..0000000
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/* GtkFontPeer.java -- Implements FontPeer with GTK+
- Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.awt.peer.gtk;
-
-import gnu.java.awt.peer.ClasspathFontPeer;
-
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.font.FontRenderContext;
-import java.awt.font.GlyphVector;
-import java.awt.font.LineMetrics;
-import java.awt.geom.Rectangle2D;
-import java.text.CharacterIterator;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class GtkFontPeer extends ClasspathFontPeer
-{
- private static ResourceBundle bundle;
-
- static
- {
- try
- {
- bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
- }
- catch (Throwable ignored)
- {
- bundle = null;
- }
- }
-
- private final String Xname;
-
- public GtkFontPeer (String name, int style)
- {
- // All fonts get a default size of 12 if size is not specified.
- this(name, style, 12);
- }
-
- public GtkFontPeer (String name, int style, int size)
- {
- super(name, style, size);
-
- String Xname = null;
- if (bundle != null)
- {
- try
- {
- Xname = bundle.getString (name.toLowerCase () + "." + style);
- }
- catch (MissingResourceException mre)
- {
- // ignored
- }
- }
-
- if (Xname == null)
- {
- String weight;
- String slant;
- String spacing;
-
- if (style == Font.ITALIC || (style == (Font.BOLD+Font.ITALIC)))
- slant = "i";
- else
- slant = "r";
- if (style == Font.BOLD || (style == (Font.BOLD+Font.ITALIC)))
- weight = "bold";
- else
- weight = "medium";
- if (name.equals("Serif") || name.equals("SansSerif")
- || name.equals("Helvetica") || name.equals("Times"))
- spacing = "p";
- else
- spacing = "c";
-
- Xname = "-*-*-" + weight + "-" + slant + "-normal-*-*-" + size + "-*-*-" + spacing + "-*-*-*";
- }
-
- this.Xname = Xname;
- }
-
- public String getXLFD ()
- {
- return Xname;
- }
-
-
- /* remaining methods are for static compatibility with the newer
- ClasspathFontPeer superclass; none of these methods ever existed or
- worked on the older FontPeer interface, but we need to pretend to
- support them anyways. */
-
- public boolean canDisplay (Font font, char c)
- {
- throw new UnsupportedOperationException();
- }
-
- public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
- {
- throw new UnsupportedOperationException();
- }
-
- public String getSubFamilyName (Font font, Locale locale)
- {
- throw new UnsupportedOperationException();
- }
-
- public String getPostScriptName (Font font)
- {
- throw new UnsupportedOperationException();
- }
-
- public int getNumGlyphs (Font font)
- {
- throw new UnsupportedOperationException();
- }
-
- public int getMissingGlyphCode (Font font)
- {
- throw new UnsupportedOperationException();
- }
-
- public byte getBaselineFor (Font font, char c)
- {
- throw new UnsupportedOperationException();
- }
-
- public String getGlyphName (Font font, int glyphIndex)
- {
- throw new UnsupportedOperationException();
- }
-
- public GlyphVector createGlyphVector (Font font,
- FontRenderContext frc,
- CharacterIterator ci)
- {
- throw new UnsupportedOperationException();
- }
-
- public GlyphVector createGlyphVector (Font font,
- FontRenderContext ctx,
- int[] glyphCodes)
- {
- throw new UnsupportedOperationException();
- }
-
- public GlyphVector layoutGlyphVector (Font font,
- FontRenderContext frc,
- char[] chars, int start,
- int limit, int flags)
- {
- throw new UnsupportedOperationException();
- }
-
- public FontMetrics getFontMetrics (Font font)
- {
- throw new UnsupportedOperationException();
- }
-
- public boolean hasUniformLineMetrics (Font font)
- {
- throw new UnsupportedOperationException();
- }
-
- public LineMetrics getLineMetrics (Font font,
- CharacterIterator ci,
- int begin, int limit,
- FontRenderContext rc)
- {
- throw new UnsupportedOperationException();
- }
-
- public Rectangle2D getMaxCharBounds (Font font,
- FontRenderContext rc)
- {
- throw new UnsupportedOperationException();
- }
-
- public Rectangle2D getStringBounds (Font font,
- CharacterIterator ci,
- int begin, int limit,
- FontRenderContext frc)
- {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java
index f59e781..6ec0b72 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java
@@ -1,5 +1,5 @@
/* GtkFramePeer.java -- Implements FramePeer with GTK
- Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -122,25 +122,11 @@ public class GtkFramePeer extends GtkWindowPeer
public void setBounds (int x, int y, int width, int height)
{
- // prevent window_configure_cb -> awtComponent.setSize ->
- // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock.
- if (Thread.currentThread() == GtkToolkit.mainThread)
- {
- int menuBarWidth = width - insets.left - insets.right;
- if (menuBar != null && menuBarWidth > 0)
- setMenuBarWidthUnlocked (menuBar, menuBarWidth);
-
- return;
- }
-
int menuBarWidth = width - insets.left - insets.right;
if (menuBar != null && menuBarWidth > 0)
setMenuBarWidth (menuBar, menuBarWidth);
- nativeSetBounds (x, y,
- width - insets.left - insets.right,
- height - insets.top - insets.bottom
- + menuBarHeight);
+ super.setBounds(x, y, width, height + menuBarHeight);
}
public void setResizable (boolean resizable)
@@ -196,56 +182,21 @@ public class GtkFramePeer extends GtkWindowPeer
}
}
- public Graphics getGraphics ()
- {
- Graphics g;
- if (GtkToolkit.useGraphics2D ())
- g = new GdkGraphics2D (this);
- else
- g = new GdkGraphics (this);
- g.translate (-insets.left, -insets.top);
- return g;
- }
-
protected void postConfigureEvent (int x, int y, int width, int height)
{
- int frame_width = width + insets.left + insets.right;
+ if (menuBar != null && width > 0)
+ setMenuBarWidthUnlocked (menuBar, width);
+
// Since insets.top already includes the MenuBar's height, we need
// to subtract the MenuBar's height from the top inset.
- int frame_height = height + insets.top + insets.bottom - menuBarHeight;
-
- if (frame_width != awtComponent.getWidth()
- || frame_height != awtComponent.getHeight())
- awtComponent.setSize(frame_width, frame_height);
+ int frame_height = height - menuBarHeight;
- int frame_x = x - insets.left;
// Likewise, since insets.top includes the MenuBar height, we need
// to add back the MenuBar height to the frame's y position. If
// no MenuBar exists in this frame, the MenuBar height will be 0.
- int frame_y = y - insets.top + menuBarHeight;
+ int frame_y = y + menuBarHeight;
- if (frame_x != awtComponent.getX()
- || frame_y != awtComponent.getY())
- {
- // awtComponent.setLocation(frame_x, frame_y);
- }
- }
-
- protected void postMouseEvent(int id, long when, int mods, int x, int y,
- int clickCount, boolean popupTrigger)
- {
- super.postMouseEvent (id, when, mods,
- x + insets.left, y + insets.top,
- clickCount, popupTrigger);
- }
-
- protected void postExposeEvent (int x, int y, int width, int height)
- {
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
+ super.postConfigureEvent(x, frame_y, width, frame_height);
}
public int getState ()
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java
index b48a204..5e5f1de 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkImage.java
@@ -123,41 +123,50 @@ public class GtkImage extends Image
/**
* Returns a copy of the pixel data as a java array.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native int[] getPixels();
/**
* Sets the pixel data from a java array.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native void setPixels(int[] pixels);
/**
* Loads an image using gdk-pixbuf from a file.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native boolean loadPixbuf(String name);
/**
* Loads an image using gdk-pixbuf from data.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native boolean loadImageFromData(byte[] data);
/**
* Allocates a Gtk Pixbuf or pixmap
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native void createPixmap();
/**
* Frees the above.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native void freePixmap();
/**
* Sets the pixmap to scaled copy of src image. hints are rendering hints.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native void createScaledPixmap(GtkImage src, int hints);
/**
* Draws the image, optionally scaled and composited.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
+ * Also acquires global gdk lock for drawing.
*/
private native void drawPixelsScaled (GdkGraphics gc,
int bg_red, int bg_green, int bg_blue,
@@ -166,6 +175,8 @@ public class GtkImage extends Image
/**
* Draws the image, optionally scaled flipped and composited.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
+ * Also acquires global gdk lock for drawing.
*/
private native void drawPixelsScaledFlipped (GdkGraphics gc,
int bg_red, int bg_green,
@@ -219,12 +230,21 @@ public class GtkImage extends Image
File f = new File(filename);
try
{
- if (loadPixbuf(f.getCanonicalPath()) != true)
- throw new IllegalArgumentException("Couldn't load image: "+filename);
+ String path = f.getCanonicalPath();
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ if (loadPixbuf(f.getCanonicalPath()) != true)
+ throw new IllegalArgumentException("Couldn't load image: "
+ + filename);
+ }
}
catch(IOException e)
{
- throw new IllegalArgumentException("Couldn't load image: "+filename);
+ IllegalArgumentException iae;
+ iae = new IllegalArgumentException("Couldn't load image: "
+ + filename);
+ iae.initCause(e);
+ throw iae;
}
isLoaded = true;
@@ -241,8 +261,11 @@ public class GtkImage extends Image
*/
public GtkImage (byte[] data)
{
- if (loadImageFromData (data) != true)
- throw new IllegalArgumentException ("Couldn't load image.");
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ if (loadImageFromData (data) != true)
+ throw new IllegalArgumentException ("Couldn't load image.");
+ }
isLoaded = true;
observers = null;
@@ -277,8 +300,12 @@ public class GtkImage extends Image
{
throw new IllegalArgumentException ("Couldn't load image.");
}
- if (loadImageFromData (baos.toByteArray()) != true)
- throw new IllegalArgumentException ("Couldn't load image.");
+ byte[] array = baos.toByteArray();
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ if (loadImageFromData(array) != true)
+ throw new IllegalArgumentException ("Couldn't load image.");
+ }
isLoaded = true;
observers = null;
@@ -296,7 +323,10 @@ public class GtkImage extends Image
isLoaded = true;
observers = null;
offScreen = true;
- createPixmap();
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ createPixmap();
+ }
}
/**
@@ -312,7 +342,10 @@ public class GtkImage extends Image
offScreen = false;
// Use the GDK scaling method.
- createScaledPixmap(src, hints);
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ createScaledPixmap(src, hints);
+ }
}
/**
@@ -322,7 +355,10 @@ public class GtkImage extends Image
GtkImage (Pointer pixbuf)
{
pixmap = pixbuf;
- createFromPixbuf();
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ createFromPixbuf();
+ }
isLoaded = true;
observers = null;
offScreen = false;
@@ -349,6 +385,7 @@ public class GtkImage extends Image
/**
* Native helper function for constructor that takes a pixbuf Pointer.
+ * Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
private native void createFromPixbuf();
@@ -370,8 +407,11 @@ public class GtkImage extends Image
isLoaded = true;
deliver();
- createPixmap();
- setPixels(pixels);
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ createPixmap();
+ setPixels(pixels);
+ }
}
// java.awt.Image methods ////////////////////////////////////////////////
@@ -408,7 +448,13 @@ public class GtkImage extends Image
{
if (!isLoaded)
return null;
- return new MemoryImageSource(width, height, nativeModel, getPixels(),
+
+ int[] pixels;
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ pixels = getPixels();
+ }
+ return new MemoryImageSource(width, height, nativeModel, pixels,
0, width);
}
@@ -454,7 +500,10 @@ public class GtkImage extends Image
{
observers = new Vector();
isLoaded = false;
- freePixmap();
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ freePixmap();
+ }
source.startProduction(new GtkImageConsumer(this, source));
}
}
@@ -462,7 +511,12 @@ public class GtkImage extends Image
public void finalize()
{
if (isLoaded)
- freePixmap();
+ {
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ freePixmap();
+ }
+ }
}
/**
@@ -529,23 +583,29 @@ public class GtkImage extends Image
srcHeight = height - srcY;
}
+ if ( this.width <= 0 || this.height <= 0 )
+ return true;
+
if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0)
return true;
- if(bgcolor != null)
- drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (),
- bgcolor.getBlue (),
- flipX, flipY,
- srcX, srcY,
- srcWidth, srcHeight,
- dstX, dstY,
- dstWidth, dstHeight,
- true);
- else
- drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY,
- srcX, srcY, srcWidth, srcHeight,
- dstX, dstY, dstWidth, dstHeight,
- false);
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ if(bgcolor != null)
+ drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (),
+ bgcolor.getBlue (),
+ flipX, flipY,
+ srcX, srcY,
+ srcWidth, srcHeight,
+ dstX, dstY,
+ dstWidth, dstHeight,
+ true);
+ else
+ drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY,
+ srcX, srcY, srcWidth, srcHeight,
+ dstX, dstY, dstWidth, dstHeight,
+ false);
+ }
return true;
}
@@ -559,11 +619,17 @@ public class GtkImage extends Image
if (addObserver(observer))
return false;
- if(bgcolor != null)
- drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (),
- bgcolor.getBlue (), x, y, width, height, true);
- else
- drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false);
+ if ( this.width <= 0 || this.height <= 0 )
+ return true;
+
+ synchronized(GdkPixbufDecoder.pixbufLock)
+ {
+ if(bgcolor != null)
+ drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (),
+ bgcolor.getBlue (), x, y, width, height, true);
+ else
+ drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false);
+ }
return true;
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java
index 285f794..bd6ec0a 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkListPeer.java
@@ -40,6 +40,7 @@ package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Dimension;
+import java.awt.FontMetrics;
import java.awt.List;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
@@ -120,11 +121,12 @@ public class GtkListPeer extends GtkComponentPeer
public Dimension preferredSize (int rows)
{
- int dims[] = new int[2];
-
- int visibleRows = ((List) awtComponent).getRows();
- getSize (rows, visibleRows, dims);
- return new Dimension (dims[0], dims[1]);
+ // getSize returns the minimum size of the list.
+ // The width is too narrow for a typical list.
+ List l = (List) awtComponent;
+ Dimension d = getMinimumSize();
+ FontMetrics fm = l.getFontMetrics(l.getFont());
+ return new Dimension(d.width + fm.stringWidth("1234567890"), d.height);
}
public void removeAll ()
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java
index 88bb715..51fe2bc 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkPanelPeer.java
@@ -39,9 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
-import java.awt.Graphics;
import java.awt.Panel;
-import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.PaintEvent;
import java.awt.peer.PanelPeer;
@@ -59,35 +57,10 @@ public class GtkPanelPeer extends GtkContainerPeer
public void handleEvent(AWTEvent event)
{
int id = event.getID();
- switch (id)
- {
- case MouseEvent.MOUSE_PRESSED:
- awtComponent.requestFocusInWindow();
- break;
- case PaintEvent.UPDATE:
- case PaintEvent.PAINT:
- {
- try
- {
- Graphics g = getGraphics();
- if (! awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || g == null)
- return;
- g.setClip(((PaintEvent) event).getUpdateRect());
-
- // Do not want to clear anything before painting.);
- awtComponent.paint(g);
-
- g.dispose();
- return;
- }
- catch (InternalError e)
- {
- System.err.println(e);
- }
- }
- }
+ if (id == MouseEvent.MOUSE_PRESSED)
+ awtComponent.requestFocusInWindow();
+
super.handleEvent(event);
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java
index 08b6b66..6a92f86 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkSelection.java
@@ -55,9 +55,6 @@ import java.awt.Image;
* that the available flavors might have changed. When requested it
* (lazily) caches the targets, and (text, image, or files/uris)
* clipboard contents.
- *
- * XXX - should only cache when
- * gdk_display_supports_selection_notification is true.
*/
public class GtkSelection implements Transferable
{
@@ -67,6 +64,11 @@ public class GtkSelection implements Transferable
static private Object requestLock = new Object();
/**
+ * Whether we belong to the Clipboard (true) or to the Primary selection.
+ */
+ private final boolean clipboard;
+
+ /**
* Whether a request for mimetypes, text, images, uris or byte[] is
* currently in progress. Should only be tested or set with
* requestLock held. When true no other requests should be made till
@@ -143,10 +145,13 @@ public class GtkSelection implements Transferable
private byte[] bytes;
/**
- * Should only be created by the GtkClipboard class.
+ * Should only be created by the GtkClipboard class. The clipboard
+ * should be either GtkClipboard.clipboard or
+ * GtkClipboard.selection.
*/
- GtkSelection()
+ GtkSelection(GtkClipboard clipboard)
{
+ this.clipboard = (clipboard == GtkClipboard.clipboard);
}
/**
@@ -181,7 +186,7 @@ public class GtkSelection implements Transferable
if (! mimeTypesDelivered)
{
requestInProgress = true;
- requestMimeTypes();
+ requestMimeTypes(clipboard);
while (! mimeTypesDelivered)
{
try
@@ -312,7 +317,7 @@ public class GtkSelection implements Transferable
if (! textDelivered)
{
requestInProgress = true;
- requestText();
+ requestText(clipboard);
while (! textDelivered)
{
try
@@ -385,7 +390,7 @@ public class GtkSelection implements Transferable
if (! imageDelivered)
{
requestInProgress = true;
- requestImage();
+ requestImage(clipboard);
while (! imageDelivered)
{
try
@@ -464,7 +469,7 @@ public class GtkSelection implements Transferable
if (! urisDelivered)
{
requestInProgress = true;
- requestURIs();
+ requestURIs(clipboard);
while (! urisDelivered)
{
try
@@ -547,7 +552,7 @@ public class GtkSelection implements Transferable
// Request bytes and wait till they are available.
requestInProgress = true;
- requestBytes(target);
+ requestBytes(clipboard, target);
while (! bytesDelivered)
{
try
@@ -653,12 +658,14 @@ public class GtkSelection implements Transferable
* content is available the contentLock will be notified through
* textAvailable, imageAvailable, urisAvailable or bytesAvailable and the
* appropriate field is set.
+ * The clipboard argument is true if we want the Clipboard, and false
+ * if we want the (primary) selection.
*/
- private native void requestText();
- private native void requestImage();
- private native void requestURIs();
- private native void requestBytes(String target);
+ private native void requestText(boolean clipboard);
+ private native void requestImage(boolean clipboard);
+ private native void requestURIs(boolean clipboard);
+ private native void requestBytes(boolean clipboard, String target);
/* Similar to the above but for requesting the supported targets. */
- private native void requestMimeTypes();
+ private native void requestMimeTypes(boolean clipboard);
}
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
index 70e25a3..7757db0 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
@@ -361,7 +361,16 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
if (secman != null)
secman.checkSystemClipboardAccess();
- return GtkClipboard.getInstance();
+ return GtkClipboard.getClipboardInstance();
+ }
+
+ public Clipboard getSystemSelection()
+ {
+ SecurityManager secman = System.getSecurityManager();
+ if (secman != null)
+ secman.checkSystemClipboardAccess();
+
+ return GtkClipboard.getSelectionInstance();
}
/**
@@ -570,6 +579,11 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
return q;
}
+ public Cursor createCustomCursor(Image image, Point hotspot, String name)
+ {
+ return new GtkCursor(image, hotspot, name);
+ }
+
protected native void loadSystemColors (int[] systemColors);
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e)
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java
index 6cc1390..d15beac 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java
@@ -1,5 +1,5 @@
/* GtkWindowPeer.java -- Implements WindowPeer with GTK
- Copyright (C) 1998, 1999, 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,7 +42,9 @@ import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
+import java.awt.Rectangle;
import java.awt.Window;
+import java.awt.event.ComponentEvent;
import java.awt.event.PaintEvent;
import java.awt.event.WindowEvent;
import java.awt.peer.WindowPeer;
@@ -62,20 +64,37 @@ public class GtkWindowPeer extends GtkContainerPeer
private boolean hasBeenShown = false;
private int oldState = Frame.NORMAL;
+ // Cached awt window component location, width and height.
+ private int x, y, width, height;
+
native void gtkWindowSetTitle (String title);
native void gtkWindowSetResizable (boolean resizable);
native void gtkWindowSetModal (boolean modal);
native void realize ();
+ /** Returns the cached width of the AWT window component. */
+ int getX ()
+ {
+ return x;
+ }
+
+ /** Returns the cached width of the AWT window component. */
+ int getY ()
+ {
+ return y;
+ }
+
+ /** Returns the cached width of the AWT window component. */
int getWidth ()
{
- return awtComponent.getWidth();
+ return width;
}
+ /** Returns the cached height of the AWT window component. */
int getHeight ()
{
- return awtComponent.getHeight();
+ return height;
}
native void create (int type, boolean decorated, GtkWindowPeer parent);
@@ -85,6 +104,10 @@ public class GtkWindowPeer extends GtkContainerPeer
Window window = (Window) awtComponent;
GtkWindowPeer parent_peer = null;
Component parent = awtComponent.getParent();
+ x = awtComponent.getX();
+ y = awtComponent.getY();
+ height = awtComponent.getHeight();
+ width = awtComponent.getWidth();
if (!window.isFocusableWindow())
type = GDK_WINDOW_TYPE_HINT_MENU;
@@ -129,37 +152,28 @@ public class GtkWindowPeer extends GtkContainerPeer
native void nativeSetLocation (int x, int y);
native void nativeSetLocationUnlocked (int x, int y);
- public void setLocation (int x, int y)
+ // Called from show.
+ protected void setLocation (int x, int y)
{
- // prevent window_configure_cb -> awtComponent.setSize ->
- // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock.
- if (Thread.currentThread() == GtkToolkit.mainThread)
- return;
nativeSetLocation (x, y);
}
- public void setLocationUnlocked (int x, int y)
- {
- nativeSetLocationUnlocked (x, y);
- }
-
public void setBounds (int x, int y, int width, int height)
{
- // prevent window_configure_cb -> awtComponent.setSize ->
- // peer.setBounds -> nativeSetBounds self-deadlock on GDK lock.
- if (Thread.currentThread() == GtkToolkit.mainThread)
- return;
-
- nativeSetBounds (x, y,
- width - insets.left - insets.right,
- height - insets.top - insets.bottom);
- }
-
- public void setBoundsUnlocked (int x, int y, int width, int height)
- {
- nativeSetBoundsUnlocked (x, y,
- width - insets.left - insets.right,
- height - insets.top - insets.bottom);
+ if (x != getX()
+ || y != getY()
+ || width != getWidth()
+ || height != getHeight())
+ {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+
+ nativeSetBounds (x, y,
+ width - insets.left - insets.right,
+ height - insets.top - insets.bottom);
+ }
}
public void setTitle (String title)
@@ -167,15 +181,25 @@ public class GtkWindowPeer extends GtkContainerPeer
gtkWindowSetTitle (title);
}
- native void setSize (int width, int height);
-
+ // Called from setResizable
+ protected native void setSize (int width, int height);
+
+ /**
+ * Needed by both GtkFramePeer and GtkDialogPeer subclasses, so
+ * implemented here. But never actually called on a GtkWindowPeer
+ * itself.
+ */
public void setResizable (boolean resizable)
{
// Call setSize; otherwise when resizable is changed from true to
// false the window will shrink to the dimensions it had before it
// was resizable.
- setSize (awtComponent.getWidth() - insets.left - insets.right,
- awtComponent.getHeight() - insets.top - insets.bottom);
+ x = awtComponent.getX();
+ y = awtComponent.getY();
+ width = awtComponent.getWidth();
+ height = awtComponent.getHeight();
+ setSize (width - insets.left - insets.right,
+ height - insets.top - insets.bottom);
gtkWindowSetResizable (resizable);
}
@@ -195,23 +219,35 @@ public class GtkWindowPeer extends GtkContainerPeer
int frame_width = width + insets.left + insets.right;
int frame_height = height + insets.top + insets.bottom;
- if (frame_width != awtComponent.getWidth()
- || frame_height != awtComponent.getHeight())
- awtComponent.setSize(frame_width, frame_height);
+ if (frame_width != getWidth()
+ || frame_height != getHeight())
+ {
+ this.width = frame_width;
+ this.height = frame_height;
+ q().postEvent(new ComponentEvent(awtComponent,
+ ComponentEvent.COMPONENT_RESIZED));
+ }
int frame_x = x - insets.left;
int frame_y = y - insets.top;
- if (frame_x != awtComponent.getX()
- || frame_y != awtComponent.getY())
+ if (frame_x != getX()
+ || frame_y != getY())
{
- // awtComponent.setLocation(frame_x, frame_y);
+ this.x = frame_x;
+ this.y = frame_y;
+ q().postEvent(new ComponentEvent(awtComponent,
+ ComponentEvent.COMPONENT_MOVED));
}
}
public void show ()
{
- setLocation(awtComponent.getX(), awtComponent.getY());
+ x = awtComponent.getX();
+ y = awtComponent.getY();
+ width = awtComponent.getWidth();
+ height = awtComponent.getHeight();
+ setLocation(x, y);
setVisible (true);
}
@@ -244,37 +280,62 @@ public class GtkWindowPeer extends GtkContainerPeer
// TODO Auto-generated method stub
}
+
+ protected void postExposeEvent (int x, int y, int width, int height)
+ {
+ // Translate GTK co-ordinates, which do not include a window
+ // frame's insets, to AWT co-ordinates, which do include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ new Rectangle (x + insets.left,
+ y + insets.top,
+ width, height)));
+ }
+
public boolean requestWindowFocus()
{
// TODO Auto-generated method stub
return false;
}
- public void handleEvent(AWTEvent event)
+ public Graphics getGraphics ()
{
- int id = event.getID();
- if (id == PaintEvent.UPDATE || id == PaintEvent.PAINT)
- {
- try
- {
- Graphics g = getGraphics();
- if (! awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || g == null)
- return;
-
- g.setClip(((PaintEvent) event).getUpdateRect());
-
- // Do not want to clear anything before painting.
- awtComponent.paint(g);
-
- g.dispose();
- return;
- }
- catch (InternalError e)
- {
- System.err.println(e);
- }
- }
- super.handleEvent(event);
+ Graphics g = super.getGraphics ();
+ // Translate AWT co-ordinates, which include a window frame's
+ // insets, to GTK co-ordinates, which do not include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ g.translate (-insets.left, -insets.top);
+ return g;
+ }
+
+ protected void updateComponent (PaintEvent event)
+ {
+ // Do not clear anything before painting. Sun never calls
+ // Window.update, only Window.paint.
+ paintComponent(event);
+ }
+
+ protected void postMouseEvent(int id, long when, int mods, int x, int y,
+ int clickCount, boolean popupTrigger)
+ {
+ // Translate AWT co-ordinates, which include a window frame's
+ // insets, to GTK co-ordinates, which do not include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ super.postMouseEvent (id, when, mods,
+ x + insets.left, y + insets.top,
+ clickCount, popupTrigger);
+ }
+
+ // We override this to keep it in sync with our internal
+ // representation.
+ public Rectangle getBounds()
+ {
+ return new Rectangle(x, y, width, height);
}
}
diff --git a/libjava/classpath/gnu/java/awt/peer/swing/SwingComponentPeer.java b/libjava/classpath/gnu/java/awt/peer/swing/SwingComponentPeer.java
index 5e34bc9..5d484e0 100644
--- a/libjava/classpath/gnu/java/awt/peer/swing/SwingComponentPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/swing/SwingComponentPeer.java
@@ -590,8 +590,7 @@ public class SwingComponentPeer
*/
public void setBounds(int x, int y, int width, int height)
{
- if (swingComponent != null)
- swingComponent.getJComponent().setBounds(x, y, width, height);
+ reshape(x, y, width, height);
}
/**
diff --git a/libjava/classpath/gnu/java/awt/peer/swing/SwingContainerPeer.java b/libjava/classpath/gnu/java/awt/peer/swing/SwingContainerPeer.java
index 37bea75..0b2fb99 100644
--- a/libjava/classpath/gnu/java/awt/peer/swing/SwingContainerPeer.java
+++ b/libjava/classpath/gnu/java/awt/peer/swing/SwingContainerPeer.java
@@ -61,7 +61,7 @@ public class SwingContainerPeer
*
* @param awtCont
*/
- public SwingContainerPeer(Container awtCont)
+ public SwingContainerPeer(Component awtCont)
{
init(awtCont, null);
}
@@ -92,12 +92,7 @@ public class SwingContainerPeer
*/
public Insets getInsets()
{
- Insets retVal;
- if (swingComponent != null)
- retVal = swingComponent.getJComponent().getInsets();
- else
- retVal = new Insets(0, 0, 0, 0);
- return retVal;
+ return insets();
}
/**
@@ -214,12 +209,15 @@ public class SwingContainerPeer
protected void handleMouseEvent(MouseEvent ev)
{
Component comp = awtComponent.getComponentAt(ev.getPoint());
- ComponentPeer peer = comp.getPeer();
- if (awtComponent != comp && !comp.isLightweight() && peer instanceof SwingComponentPeer)
+ if (comp != null)
{
- ev.translatePoint(comp.getX(), comp.getY());
- ev.setSource(comp);
- ((SwingComponentPeer) peer).handleMouseEvent(ev);
+ ComponentPeer peer = comp.getPeer();
+ if (awtComponent != comp && !comp.isLightweight() && peer instanceof SwingComponentPeer)
+ {
+ ev.translatePoint(comp.getX(), comp.getY());
+ ev.setSource(comp);
+ ((SwingComponentPeer) peer).handleMouseEvent(ev);
+ }
}
}
@@ -231,11 +229,14 @@ public class SwingContainerPeer
protected void handleMouseMotionEvent(MouseEvent ev)
{
Component comp = awtComponent.getComponentAt(ev.getPoint());
- ComponentPeer peer = comp.getPeer();
- if (awtComponent != comp && !comp.isLightweight() && peer instanceof SwingComponentPeer)
+ if (comp != null)
{
- ev.translatePoint(comp.getX(), comp.getY());
- ((SwingComponentPeer) peer).handleMouseMotionEvent(ev);
+ ComponentPeer peer = comp.getPeer();
+ if (awtComponent != comp && !comp.isLightweight() && peer instanceof SwingComponentPeer)
+ {
+ ev.translatePoint(comp.getX(), comp.getY());
+ ((SwingComponentPeer) peer).handleMouseMotionEvent(ev);
+ }
}
}
}
diff --git a/libjava/classpath/gnu/java/io/class-dependencies.conf b/libjava/classpath/gnu/java/io/class-dependencies.conf
deleted file mode 100644
index 2500f6b..0000000
--- a/libjava/classpath/gnu/java/io/class-dependencies.conf
+++ /dev/null
@@ -1,75 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-
-# All encodings supported are loaded via gnu/java/io/EncodingManager.findEncoderConstructor
-# or gnu/java/io/EncodingManager.findDecoderConstructor from class
-# gnu/java/io/decode/Decoder<encoding>.
-#
-# This introduces a dependency for all encodings. To allow an easy selection
-# and addition of encodings, the library variable {encodings} can be set to
-# the set of supported encodings.
-#
-{encodings}: 8859_1 8859_2 8859_3 8859_4 8859_5 UTF8
-
-gnu/java/io/EncodingManager.findEncoderConstructor(Ljava/lang/String;Z)Ljava/lang/reflect/Constructor;: \
- gnu/java/io/decode/Decoder{encodings}.*
-
-gnu/java/io/EncodingManager.findDecoderConstructor(Ljava/lang/String;Z)Ljava/lang/reflect/Constructor;: \
- gnu/java/io/encode/Encoder{encodings}.* \
-
-# end of file
diff --git a/libjava/classpath/gnu/java/lang/ClassHelper.java b/libjava/classpath/gnu/java/lang/ClassHelper.java
index 14c8a39..49dce21 100644
--- a/libjava/classpath/gnu/java/lang/ClassHelper.java
+++ b/libjava/classpath/gnu/java/lang/ClassHelper.java
@@ -81,6 +81,34 @@ public class ClassHelper
return name.substring(lastInd + 1);
}
+ /**
+ * Return the name of the class as written by the user.
+ * This is used by the various reflection toString methods.
+ * It differs from {@link Class#getName()} in that it prints
+ * arrays with trailing "[]"s. Note that it does not treat
+ * member classes specially, so a dollar sign may still appear
+ * in the result. This is intentional.
+ * @param klass the class
+ * @return a pretty form of the class' name
+ */
+ public static String getUserName(Class klass)
+ {
+ int arrayCount = 0;
+ while (klass.isArray())
+ {
+ ++arrayCount;
+ klass = klass.getComponentType();
+ }
+ String name = klass.getName();
+ if (arrayCount == 0)
+ return name;
+ StringBuilder b = new StringBuilder(name.length() + 2 * arrayCount);
+ b.append(name);
+ for (int i = 0; i < arrayCount; ++i)
+ b.append("[]");
+ return b.toString();
+ }
+
/** Cache of methods found in getAllMethods(). */
private static Map allMethods = new HashMap();
diff --git a/libjava/classpath/gnu/java/lang/InstrumentationImpl.java b/libjava/classpath/gnu/java/lang/InstrumentationImpl.java
new file mode 100644
index 0000000..7bfed45
--- /dev/null
+++ b/libjava/classpath/gnu/java/lang/InstrumentationImpl.java
@@ -0,0 +1,243 @@
+/* InstrumentationImpl.java -- GNU implementation of
+ java.lang.instrument.Instrumentation
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.lang;
+
+import java.lang.instrument.Instrumentation;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.ClassDefinition;
+import java.lang.instrument.UnmodifiableClassException;
+import java.lang.instrument.IllegalClassFormatException;
+
+import java.security.ProtectionDomain;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * An Instrumentation object has transformers that will
+ * be called each time a class is defined or redefined.
+ * The object is given to a <code>premain</code> function
+ * that is called before the <code>main</code> function.
+ *
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+public final class InstrumentationImpl implements Instrumentation
+{
+
+ /* List of transformers */
+ /* FIXME[GENERICS]: Should be ClassFileTransformer list */
+ private ArrayList transformers = new ArrayList();
+
+
+ private InstrumentationImpl()
+ {
+ }
+
+ /**
+ * Adds a <code>ClassFileTransformer</class> object
+ * to the instrumentation. Each time a class is defined
+ * or redefined, the <code>transform</code> method of the
+ * <code>transformer</code> object is called.
+ *
+ * @param transformer the transformer to add
+ * @throws NullPointerException if transformer is null
+ */
+ public void addTransformer(ClassFileTransformer transformer)
+ {
+ if (transformer == null)
+ throw new NullPointerException();
+ synchronized(transformers)
+ {
+ transformers.add(transformer);
+ }
+ }
+
+ /**
+ * Removes the given transformer from the set of transformers
+ * this Instrumentation object has.
+ *
+ * @param transformer the transformer to remove
+ * @return true if the transformer was found and removed, false if
+ * the transformer was not found
+ * @throws NullPointerException if transformer is null
+ */
+ public boolean removeTransformer(ClassFileTransformer transformer)
+ {
+ if (transformer == null)
+ throw new NullPointerException();
+
+ boolean result;
+ synchronized (transformers)
+ {
+ result = transformers.remove(transformer);
+ }
+ return result;
+ }
+
+ /**
+ * Returns if the current JVM supports class redefinition
+ *
+ * @return true if the current JVM supports class redefinition
+ */
+ public boolean isRedefineClassesSupported()
+ {
+ return VMInstrumentationImpl.isRedefineClassesSupported();
+ }
+
+ /**
+ * Redefine classes present in the definitions array, with
+ * the corresponding class files.
+ *
+ * @param definitions an array of classes to redefine
+ *
+ * @throws ClassNotFoundException if a class cannot be found
+ * @throws UnmodifiableClassException if a class cannot be modified
+ * @throws UnsupportedOperationException if the JVM does not support
+ * redefinition or the redefinition made unsupported changes
+ * @throws ClassFormatError if a class file is not valid
+ * @throws NoClassDefFoundError if a class name is not equal to the name
+ * in the class file specified
+ * @throws UnsupportedClassVersionError if the class file version numbers
+ * are unsupported
+ * @throws ClassCircularityError if circularity occured with the new
+ * classes
+ * @throws LinkageError if a linkage error occurs
+ * @throws NullPointerException if the definitions array is null, or any
+ * of its element
+ *
+ * @see isRedefineClassesSupported()
+ * @see addTransformer(java.lang.instrument.ClassFileTransformer)
+ * @see ClassFileTransformer
+ */
+ public void redefineClasses(ClassDefinition[] definitions)
+ throws ClassNotFoundException,
+ UnmodifiableClassException
+ {
+ if (!isRedefineClassesSupported())
+ throw new UnsupportedOperationException();
+
+ VMInstrumentationImpl.redefineClasses(this, definitions);
+ }
+
+
+ /**
+ * Get all the classes loaded by the JVM.
+ *
+ * @return an array containing all the classes loaded by the JVM. The array
+ * is empty if no class is loaded.
+ */
+ public Class[] getAllLoadedClasses()
+ {
+ return VMInstrumentationImpl.getAllLoadedClasses();
+ }
+
+ /**
+ * Get all the classes loaded by a given class loader
+ *
+ * @param loader the loader
+ *
+ * @return an array containing all the classes loaded by the given loader.
+ * The array is empty if no class was loaded by the loader.
+ */
+ public Class[] getInitiatedClasses(ClassLoader loader)
+ {
+ return VMInstrumentationImpl.getInitiatedClasses(loader);
+ }
+
+ /**
+ * Get the size of an object.
+ *
+ * @param objectToSize the object
+ * @return the size of the object
+ * @throws NullPointerException if objectToSize is null.
+ */
+ public long getObjectSize(Object objectToSize)
+ {
+ // We alleviate the VM work
+ if (objectToSize == null)
+ throw new NullPointerException();
+ return VMInstrumentationImpl.getObjectSize(objectToSize);
+ }
+
+ /**
+ * Called by the VM or redefineClasses to call each transformer
+ *
+ * @param loader the loader of the class
+ * @param className the name of the class with packages separated with "/"
+ * @param classBeingRedefined the class being redefined if it's the case,
+ * null otherwise
+ * @param protectionDomain the protection domain of the class being defined
+ * or redefined
+ * @param classfileBuffer the input byte buffer in class file format
+ *
+ * @return the new class file
+ */
+ /* FIXME[GENERICS]: Should be Class<?> */
+ public byte[] callTransformers(ClassLoader loader, String className,
+ Class classBeingRedefined, ProtectionDomain protectionDomain,
+ byte[] classfileBuffer)
+ {
+ byte[] newBuffer = null;
+ byte[] oldBuffer = classfileBuffer;
+ ClassFileTransformer current;
+ synchronized (transformers)
+ {
+ Iterator i = transformers.iterator();
+ while (i.hasNext())
+ {
+ /* FIXME[GENERICS]: Remove cast */
+ current = (ClassFileTransformer) i.next();
+ try
+ {
+ newBuffer = current.transform(loader, className,
+ classBeingRedefined, protectionDomain, oldBuffer);
+ }
+ catch (IllegalClassFormatException ignored)
+ {
+ //IGNORED
+ }
+ if (newBuffer != null)
+ oldBuffer = newBuffer;
+ }
+ }
+ return oldBuffer;
+ }
+}
diff --git a/libjava/classpath/gnu/java/lang/reflect/ClassSignatureParser.java b/libjava/classpath/gnu/java/lang/reflect/ClassSignatureParser.java
new file mode 100644
index 0000000..0c9b962
--- /dev/null
+++ b/libjava/classpath/gnu/java/lang/reflect/ClassSignatureParser.java
@@ -0,0 +1,92 @@
+/* ClassSignatureParser.java
+ Copyright (C) 2005
+ Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.lang.reflect;
+
+import java.lang.reflect.*;
+import java.util.ArrayList;
+
+public class ClassSignatureParser extends GenericSignatureParser
+{
+ private TypeVariable[] typeParameters;
+ private Type superclassType;
+ private Type[] interfaceTypes;
+
+ public ClassSignatureParser(Class c, String signature)
+ {
+ super(c, c.getClassLoader(), signature);
+
+ if (peekChar() == '<')
+ {
+ typeParameters = readFormalTypeParameters();
+ }
+ else
+ {
+ typeParameters = new TypeVariable[0];
+ }
+ // SuperclassSignature
+ superclassType = readClassTypeSignature();
+ ArrayList interfaces = new ArrayList();
+ while (peekChar() == 'L')
+ {
+ // SuperinterfaceSignature
+ interfaces.add(readClassTypeSignature());
+ }
+ interfaceTypes = new Type[interfaces.size()];
+ interfaces.toArray(interfaceTypes);
+ end();
+ }
+
+ public TypeVariable[] getTypeParameters()
+ {
+ TypeImpl.resolve(typeParameters);
+ return typeParameters;
+ }
+
+ public Type getSuperclassType()
+ {
+ superclassType = TypeImpl.resolve(superclassType);
+ return superclassType;
+ }
+
+ public Type[] getInterfaceTypes()
+ {
+ TypeImpl.resolve(interfaceTypes);
+ return interfaceTypes;
+ }
+}
diff --git a/libjava/classpath/gnu/java/lang/reflect/FieldSignatureParser.java b/libjava/classpath/gnu/java/lang/reflect/FieldSignatureParser.java
new file mode 100644
index 0000000..16622d3
--- /dev/null
+++ b/libjava/classpath/gnu/java/lang/reflect/FieldSignatureParser.java
@@ -0,0 +1,103 @@
+/* FieldSignatureParser.java
+ Copyright (C) 2005
+ Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.lang.reflect;
+
+import java.lang.reflect.GenericSignatureFormatError;
+import java.lang.reflect.Type;
+
+public final class FieldSignatureParser extends GenericSignatureParser
+{
+ private Type type;
+
+ public FieldSignatureParser(Class container, String signature)
+ {
+ super(container, container.getClassLoader(), signature);
+
+ switch (peekChar())
+ {
+ case 'L':
+ case '[':
+ case 'T':
+ type = readFieldTypeSignature();
+ break;
+ case 'Z':
+ consume('Z');
+ type = boolean.class;
+ break;
+ case 'B':
+ consume('B');
+ type = byte.class;
+ break;
+ case 'S':
+ consume('S');
+ type = short.class;
+ break;
+ case 'C':
+ consume('C');
+ type = char.class;
+ break;
+ case 'I':
+ consume('I');
+ type = int.class;
+ break;
+ case 'F':
+ consume('F');
+ type = float.class;
+ break;
+ case 'J':
+ consume('J');
+ type = long.class;
+ break;
+ case 'D':
+ consume('D');
+ type = double.class;
+ break;
+ default:
+ throw new GenericSignatureFormatError();
+ }
+
+ end();
+ }
+
+ public Type getFieldType()
+ {
+ type = TypeImpl.resolve(type);
+ return type;
+ }
+}
diff --git a/libjava/classpath/gnu/java/lang/reflect/GenericSignatureParser.java b/libjava/classpath/gnu/java/lang/reflect/GenericSignatureParser.java
new file mode 100644
index 0000000..399f1bd
--- /dev/null
+++ b/libjava/classpath/gnu/java/lang/reflect/GenericSignatureParser.java
@@ -0,0 +1,622 @@
+/* GenericSignatureParser.java
+ Copyright (C) 2005
+ Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.lang.reflect;
+
+import java.lang.reflect.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+final class TypeVariableImpl extends TypeImpl implements TypeVariable
+{
+ private GenericDeclaration decl;
+ private Type[] bounds;
+ private String name;
+
+ TypeVariableImpl(GenericDeclaration decl, Type[] bounds, String name)
+ {
+ this.decl = decl;
+ this.bounds = bounds;
+ this.name = name;
+ }
+
+ Type resolve()
+ {
+ return this;
+ }
+
+ /* FIXME[GENERICS]: Remove cast */
+ public Type[] getBounds()
+ {
+ resolve(bounds);
+ return (Type[]) bounds.clone();
+ }
+
+ public GenericDeclaration getGenericDeclaration()
+ {
+ return decl;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof TypeVariableImpl)
+ {
+ TypeVariableImpl other = (TypeVariableImpl)obj;
+ return decl.equals(other.decl) && name.equals(other.name);
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return 0x5f4d5156 ^ decl.hashCode() ^ name.hashCode();
+ }
+
+ public String toString()
+ {
+ return name;
+ }
+}
+
+final class ParameterizedTypeImpl extends TypeImpl implements ParameterizedType
+{
+ private String rawTypeName;
+ private ClassLoader loader;
+ private Class rawType;
+ private Type owner;
+ private Type[] typeArgs;
+
+ ParameterizedTypeImpl(String rawTypeName, ClassLoader loader, Type owner,
+ Type[] typeArgs)
+ {
+ this.rawTypeName = rawTypeName;
+ this.loader = loader;
+ this.owner = owner;
+ this.typeArgs = typeArgs;
+ }
+
+ Type resolve()
+ {
+ if (rawType == null)
+ {
+ try
+ {
+ rawType = Class.forName(rawTypeName, false, loader);
+ }
+ catch (ClassNotFoundException x)
+ {
+ throw new TypeNotPresentException(rawTypeName, x);
+ }
+ }
+ if (typeArgs == null)
+ {
+ if (owner == null)
+ {
+ return rawType;
+ }
+ typeArgs = new Type[0];
+ }
+ resolve(typeArgs);
+ owner = resolve(owner);
+ return this;
+ }
+
+ /* FIXME[GENERICS]: Remove cast */
+ public Type[] getActualTypeArguments()
+ {
+ return (Type[]) typeArgs.clone();
+ }
+
+ public Type getRawType()
+ {
+ return rawType;
+ }
+
+ public Type getOwnerType()
+ {
+ return owner;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ParameterizedTypeImpl)
+ {
+ ParameterizedTypeImpl other = (ParameterizedTypeImpl)obj;
+ return rawType.equals(other.rawType)
+ && ((owner == null && other.owner == null)
+ || owner.equals(other.owner))
+ && Arrays.deepEquals(typeArgs, other.typeArgs);
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ int h = 0x58158970 ^ rawType.hashCode();
+ if (owner != null)
+ {
+ h ^= Integer.reverse(owner.hashCode());
+ }
+ for (int i = 0; i < typeArgs.length; i++)
+ {
+ h ^= Integer.rotateLeft(typeArgs[i].hashCode(), i);
+ }
+ return h;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+ if (owner != null)
+ {
+ sb.append(owner);
+ sb.append('.');
+ sb.append(rawType.getSimpleName());
+ }
+ else
+ {
+ sb.append(rawTypeName);
+ }
+ if (typeArgs.length > 0)
+ {
+ sb.append('<');
+ for (int i = 0; i < typeArgs.length; i++)
+ {
+ if (i > 0)
+ sb.append(", ");
+ if (typeArgs[i] instanceof Class)
+ {
+ sb.append(((Class)typeArgs[i]).getName());
+ }
+ else
+ {
+ sb.append(typeArgs[i]);
+ }
+ }
+ sb.append('>');
+ }
+ return sb.toString();
+ }
+}
+
+final class GenericArrayTypeImpl extends TypeImpl implements GenericArrayType
+{
+ private Type componentType;
+
+ GenericArrayTypeImpl(Type componentType)
+ {
+ this.componentType = componentType;
+ }
+
+ Type resolve()
+ {
+ componentType = resolve(componentType);
+ return this;
+ }
+
+ public Type getGenericComponentType()
+ {
+ return componentType;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof GenericArrayTypeImpl)
+ {
+ GenericArrayTypeImpl other = (GenericArrayTypeImpl)obj;
+ return componentType.equals(other.componentType);
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return 0x4be37a7f ^ componentType.hashCode();
+ }
+
+ public String toString()
+ {
+ return componentType + "[]";
+ }
+}
+
+final class UnresolvedTypeVariable extends TypeImpl implements Type
+{
+ private GenericDeclaration decl;
+ private String name;
+
+ UnresolvedTypeVariable(GenericDeclaration decl, String name)
+ {
+ this.decl = decl;
+ this.name = name;
+ }
+
+ Type resolve()
+ {
+ GenericDeclaration d = decl;
+ while (d != null)
+ {
+ TypeVariable[] vars = d.getTypeParameters();
+ for (int a = 0; a < vars.length ; ++a)
+ {
+ if (vars[a].getName().equals(name))
+ {
+ return vars[a];
+ }
+ }
+ d = getParent(d);
+ }
+ throw new MalformedParameterizedTypeException();
+ }
+
+ private static GenericDeclaration getParent(GenericDeclaration d)
+ {
+ if (d instanceof Class)
+ {
+ Method m = ((Class)d).getEnclosingMethod();
+ if (m != null)
+ {
+ return m;
+ }
+ Constructor c = ((Class)d).getEnclosingConstructor();
+ if (c != null)
+ {
+ return c;
+ }
+ return ((Class)d).getEnclosingClass();
+ }
+ else if (d instanceof Method)
+ {
+ return ((Method)d).getDeclaringClass();
+ }
+ else if (d instanceof Constructor)
+ {
+ return ((Constructor)d).getDeclaringClass();
+ }
+ else
+ {
+ // TODO figure out what this represents
+ throw new Error();
+ }
+ }
+}
+
+final class WildcardTypeImpl extends TypeImpl implements WildcardType
+{
+ private Type lower;
+ private Type upper;
+
+ WildcardTypeImpl(Type lower, Type upper)
+ {
+ this.lower = lower;
+ this.upper = upper;
+ }
+
+ Type resolve()
+ {
+ upper = resolve(upper);
+ lower = resolve(lower);
+ return this;
+ }
+
+ public Type[] getUpperBounds()
+ {
+ if (upper == null)
+ {
+ return new Type[0];
+ }
+ return new Type[] { upper };
+ }
+
+ public Type[] getLowerBounds()
+ {
+ if (lower == null)
+ {
+ return new Type[0];
+ }
+ return new Type[] { lower };
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof WildcardTypeImpl)
+ {
+ WildcardTypeImpl other = (WildcardTypeImpl)obj;
+ return Arrays.deepEquals(getUpperBounds(), other.getUpperBounds())
+ && Arrays.deepEquals(getLowerBounds(), other.getLowerBounds());
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ int h = 0x75d074fd;
+ if (upper != null)
+ {
+ h ^= upper.hashCode();
+ }
+ if (lower != null)
+ {
+ h ^= lower.hashCode();
+ }
+ return h;
+ }
+
+ public String toString()
+ {
+ if (lower != null)
+ {
+ return "? super " + lower;
+ }
+ if (upper == java.lang.Object.class)
+ {
+ return "?";
+ }
+ return "? extends " + upper;
+ }
+}
+
+class GenericSignatureParser
+{
+ private ClassLoader loader;
+ private GenericDeclaration container;
+ private String signature;
+ private int pos;
+
+ GenericSignatureParser(GenericDeclaration container, ClassLoader loader,
+ String signature)
+ {
+ this.container = container;
+ this.loader = loader;
+ this.signature = signature;
+ }
+
+ TypeVariable[] readFormalTypeParameters()
+ {
+ consume('<');
+ ArrayList params = new ArrayList();
+ do
+ {
+ // TODO should we handle name clashes?
+ params.add(readFormalTypeParameter());
+ } while (peekChar() != '>');
+ consume('>');
+ TypeVariable[] list = new TypeVariable[params.size()];
+ params.toArray(list);
+ return list;
+ }
+
+ private TypeVariable readFormalTypeParameter()
+ {
+ String identifier = readIdentifier();
+ consume(':');
+ ArrayList bounds = new ArrayList();
+ if (peekChar() != ':')
+ {
+ bounds.add(readFieldTypeSignature());
+ }
+ while (peekChar() == ':')
+ {
+ consume(':');
+ bounds.add(readFieldTypeSignature());
+ }
+ Type[] b = new Type[bounds.size()];
+ bounds.toArray(b);
+ return new TypeVariableImpl(container, b, identifier);
+ }
+
+ Type readFieldTypeSignature()
+ {
+ switch (peekChar())
+ {
+ case 'L':
+ return readClassTypeSignature();
+ case '[':
+ return readArrayTypeSignature();
+ case 'T':
+ return readTypeVariableSignature();
+ default:
+ throw new GenericSignatureFormatError();
+ }
+ }
+
+ Type readClassTypeSignature()
+ {
+ consume('L');
+ String className = "";
+ for (;;)
+ {
+ String part = readIdentifier();
+ if (peekChar() != '/')
+ {
+ className += part;
+ break;
+ }
+ consume('/');
+ className += part + ".";
+ }
+ Type[] typeArguments = null;
+ if (peekChar() == '<')
+ {
+ typeArguments = readTypeArguments();
+ }
+ Type type = new ParameterizedTypeImpl(className, loader, null,
+ typeArguments);
+ while (peekChar() == '.')
+ {
+ consume('.');
+ className += "$" + readIdentifier();
+ typeArguments = null;
+ if (peekChar() == '<')
+ {
+ typeArguments = readTypeArguments();
+ }
+ type = new ParameterizedTypeImpl(className, loader, type,
+ typeArguments);
+ }
+ consume(';');
+ return type;
+ }
+
+ private Type[] readTypeArguments()
+ {
+ consume('<');
+ ArrayList list = new ArrayList();
+ do
+ {
+ list.add(readTypeArgument());
+ } while ((peekChar() != '>'));
+ consume('>');
+ Type[] arr = new Type[list.size()];
+ list.toArray(arr);
+ return arr;
+ }
+
+ private Type readTypeArgument()
+ {
+ char c = peekChar();
+ if (c == '+')
+ {
+ consume('+');
+ return new WildcardTypeImpl(null, readFieldTypeSignature());
+ }
+ else if (c == '-')
+ {
+ consume('-');
+ return new WildcardTypeImpl(readFieldTypeSignature(),
+ java.lang.Object.class);
+ }
+ else if (c == '*')
+ {
+ consume('*');
+ return new WildcardTypeImpl(null, java.lang.Object.class);
+ }
+ else
+ {
+ return readFieldTypeSignature();
+ }
+ }
+
+ Type readArrayTypeSignature()
+ {
+ consume('[');
+ switch (peekChar())
+ {
+ case 'L':
+ case '[':
+ case 'T':
+ return new GenericArrayTypeImpl(readFieldTypeSignature());
+ case 'Z':
+ consume('Z');
+ return boolean[].class;
+ case 'B':
+ consume('B');
+ return byte[].class;
+ case 'S':
+ consume('S');
+ return short[].class;
+ case 'C':
+ consume('C');
+ return char[].class;
+ case 'I':
+ consume('I');
+ return int[].class;
+ case 'F':
+ consume('F');
+ return float[].class;
+ case 'J':
+ consume('J');
+ return long[].class;
+ case 'D':
+ consume('D');
+ return double[].class;
+ default:
+ throw new GenericSignatureFormatError();
+ }
+ }
+
+ Type readTypeVariableSignature()
+ {
+ consume('T');
+ String identifier = readIdentifier();
+ consume(';');
+ return new UnresolvedTypeVariable(container, identifier);
+ }
+
+ private String readIdentifier()
+ {
+ int start = pos;
+ char c;
+ do
+ {
+ readChar();
+ c = peekChar();
+ } while (";:./<>-+*".indexOf(c) == -1);
+ return signature.substring(start, pos);
+ }
+
+ final char peekChar()
+ {
+ if (pos == signature.length())
+ return '\u0000';
+ else
+ return signature.charAt(pos);
+ }
+
+ final char readChar()
+ {
+ return signature.charAt(pos++);
+ }
+
+ final void consume(char c)
+ {
+ if (readChar() != c)
+ throw new GenericSignatureFormatError();
+ }
+
+ final void end()
+ {
+ if (pos != signature.length())
+ throw new GenericSignatureFormatError();
+ }
+}
diff --git a/libjava/classpath/gnu/java/lang/reflect/MethodSignatureParser.java b/libjava/classpath/gnu/java/lang/reflect/MethodSignatureParser.java
new file mode 100644
index 0000000..16b1af9
--- /dev/null
+++ b/libjava/classpath/gnu/java/lang/reflect/MethodSignatureParser.java
@@ -0,0 +1,167 @@
+/* MethodSignatureParser.java
+ Copyright (C) 2005
+ Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.lang.reflect;
+
+import java.lang.reflect.*;
+import java.util.ArrayList;
+
+public class MethodSignatureParser extends GenericSignatureParser
+{
+ private TypeVariable[] typeParameters;
+ private Type[] argTypes;
+ private Type retType;
+ private Type[] throwsSigs;
+
+ public MethodSignatureParser(Method method, String signature)
+ {
+ this(method, method.getDeclaringClass().getClassLoader(), signature);
+ }
+
+ public MethodSignatureParser(Constructor method, String signature)
+ {
+ this(method, method.getDeclaringClass().getClassLoader(), signature);
+ }
+
+ private MethodSignatureParser(GenericDeclaration wrapper,
+ ClassLoader loader, String signature)
+ {
+ super(wrapper, loader, signature);
+
+ if (peekChar() == '<')
+ {
+ typeParameters = readFormalTypeParameters();
+ }
+ else
+ {
+ typeParameters = new TypeVariable[0];
+ }
+ consume('(');
+ ArrayList args = new ArrayList();
+ while (peekChar() != ')')
+ {
+ args.add(readTypeSignature());
+ }
+ argTypes = new Type[args.size()];
+ args.toArray(argTypes);
+ consume(')');
+ retType = readTypeSignature();
+ ArrayList throwsSigs = new ArrayList();
+ while (peekChar() == '^')
+ {
+ consume('^');
+ if(peekChar() == 'T')
+ {
+ throwsSigs.add(readTypeVariableSignature());
+ }
+ else
+ {
+ throwsSigs.add(readClassTypeSignature());
+ }
+ }
+ this.throwsSigs = new Type[throwsSigs.size()];
+ throwsSigs.toArray(this.throwsSigs);
+ end();
+ }
+
+ public TypeVariable[] getTypeParameters()
+ {
+ TypeImpl.resolve(typeParameters);
+ return typeParameters;
+ }
+
+ public Type[] getGenericParameterTypes()
+ {
+ TypeImpl.resolve(argTypes);
+ return argTypes;
+ }
+
+ public Type getGenericReturnType()
+ {
+ retType = TypeImpl.resolve(retType);
+ return retType;
+ }
+
+ public Type[] getGenericExceptionTypes()
+ {
+ TypeImpl.resolve(throwsSigs);
+ return throwsSigs;
+ }
+
+ private Type readTypeSignature()
+ {
+ switch (peekChar())
+ {
+ case 'T':
+ return readTypeVariableSignature();
+ case 'L':
+ return readClassTypeSignature();
+ case '[':
+ return readArrayTypeSignature();
+ case 'Z':
+ consume('Z');
+ return boolean.class;
+ case 'B':
+ consume('B');
+ return byte.class;
+ case 'S':
+ consume('S');
+ return short.class;
+ case 'C':
+ consume('C');
+ return char.class;
+ case 'I':
+ consume('I');
+ return int.class;
+ case 'F':
+ consume('F');
+ return float.class;
+ case 'J':
+ consume('J');
+ return long.class;
+ case 'D':
+ consume('D');
+ return double.class;
+ case 'V':
+ consume('V');
+ return void.class;
+ default:
+ throw new GenericSignatureFormatError();
+ }
+ }
+}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/supplementaryNotifications.java b/libjava/classpath/gnu/java/lang/reflect/TypeImpl.java
index d17298f..30906f6 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/supplementaryNotifications.java
+++ b/libjava/classpath/gnu/java/lang/reflect/TypeImpl.java
@@ -1,5 +1,6 @@
-/* supplementaryNotifications.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* TypeImpl.java
+ Copyright (C) 2005
+ Free Software Foundation
This file is part of GNU Classpath.
@@ -35,52 +36,28 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+package gnu.java.lang.reflect;
-package test.gnu.javax.swing.text.html.parser;
+import java.lang.reflect.Type;
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.html.HTML;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class supplementaryNotifications
- extends TestCase
+abstract class TypeImpl implements Type
{
- String eoln = null;
- int flushed = 0;
+ abstract Type resolve();
- public void testHTMLParsing()
- throws Exception
- {
- Parser_Test v =
- new Parser_Test()
- {
- public void handleEndOfLineString(String end_of_line)
+ static void resolve(Type[] types)
+ {
+ for (int i = 0; i < types.length; i++)
{
- eoln = end_of_line;
+ types[i] = resolve(types[i]);
}
+ }
- public void flush()
+ static Type resolve(Type type)
+ {
+ if (type instanceof TypeImpl)
{
- flushed++;
+ type = ((TypeImpl) type).resolve();
}
- };
-
- v.hideImplied = true;
-
- v.verify("a \n b", "<html><head></head><body>'a b'</body></html>");
-
- assertEquals(eoln, "\n");
-
- v.verify("a \r b", "<html><head></head><body>'a b'</body></html>");
-
- assertEquals(eoln, "\r");
-
- v.verify("a \r\n b", "<html><head></head><body>'a b'</body></html>");
-
- assertEquals(eoln, "\r\n");
-
- assertEquals(flushed, 3);
- }
+ return type;
+ }
}
diff --git a/libjava/classpath/gnu/java/locale/LocaleHelper.java b/libjava/classpath/gnu/java/locale/LocaleHelper.java
index ff00293..cec01471 100644
--- a/libjava/classpath/gnu/java/locale/LocaleHelper.java
+++ b/libjava/classpath/gnu/java/locale/LocaleHelper.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.locale;
+import java.text.Collator;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
@@ -154,5 +155,57 @@ public class LocaleHelper
}
return localizedString;
}
+
+ /**
+ * Return an array of all the locales for which there is a
+ * {@link Collator} instance. A new array is returned each time.
+ */
+ public static Locale[] getCollatorLocales()
+ {
+ // For now we don't bother caching. This is probably
+ // not called very frequently. And, we would have to
+ // clone the array anyway.
+ if (LocaleData.collatorLocaleNames.length == 0)
+ return new Locale[] { Locale.US };
+ Locale[] result = new Locale[LocaleData.collatorLocaleNames.length];
+ for (int i = 0; i < result.length; ++i)
+ {
+ String language;
+ String region = "";
+ String variant = "";
+ String name = LocaleData.collatorLocaleNames[i];
+
+ language = name.substring(0, 2);
+
+ if (name.length() > 2)
+ region = name.substring(3);
+
+ int index = region.indexOf("_");
+ if (index > 0)
+ {
+ variant = region.substring(index + 1);
+ region = region.substring(0, index - 1);
+ }
+
+ result[i] = new Locale(language, region, variant);
+ }
+ return result;
+ }
+
+ /**
+ * Return the number of locales we know of.
+ */
+ public static int getLocaleCount()
+ {
+ return LocaleData.localeNames.length;
+ }
+
+ /**
+ * Return the Nth locale name.
+ */
+ public static String getLocaleName(int n)
+ {
+ return LocaleData.localeNames[n];
+ }
}
diff --git a/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java b/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java
new file mode 100644
index 0000000..bb0a7ce
--- /dev/null
+++ b/libjava/classpath/gnu/java/net/DefaultContentHandlerFactory.java
@@ -0,0 +1,94 @@
+/* DefaultContentHandlerFactory.java
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net;
+
+import java.io.IOException;
+import java.net.ContentHandler;
+import java.net.ContentHandlerFactory;
+import java.net.URLConnection;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/** Content Handler for Image types, using the AWT Toolkit's image decoder. */
+class ImageHandler extends ContentHandler
+{
+ static ImageHandler instance = new ImageHandler();
+
+ public Object getContent(URLConnection urlc) throws IOException
+ {
+ // FIXME: implement using ImageIO
+ // ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit();
+ // java.awt.image.ImageProducer ip = tk.createImageProducer(urlc.getURL());
+ // return ip;
+ return null;
+ }
+}
+
+/**
+ */
+public class DefaultContentHandlerFactory implements ContentHandlerFactory
+{
+ /** For now, hard code the list of types that we assume should
+ * be supported by the Toolkit. ClasspathToolkit should perhaps provide
+ * an API to express what Image MIME types the Toolkit understands.
+ */
+ private static String[] known_image_types =
+ {
+ "image/bmp",
+ "image/gif",
+ "image/jpeg",
+ "image/png",
+ "image/tiff",
+ "image/x-portable-anymap",
+ "image/x-cmu-raster",
+ "image/x-xbitmap",
+ "image/x-xpixmap"
+ };
+
+ private static HashSet imageTypes
+ = new HashSet(Arrays.asList(known_image_types));
+
+ public ContentHandler createContentHandler(String mimeType)
+ {
+ if (imageTypes.contains(mimeType))
+ return ImageHandler.instance;
+ // Currently, only image types are handled.
+ return null;
+ }
+}
diff --git a/libjava/classpath/gnu/java/net/local/LocalServerSocket.java b/libjava/classpath/gnu/java/net/local/LocalServerSocket.java
new file mode 100644
index 0000000..15163f2
--- /dev/null
+++ b/libjava/classpath/gnu/java/net/local/LocalServerSocket.java
@@ -0,0 +1,172 @@
+/* LocalServerSocket.java -- a unix domain server socket.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net.local;
+
+import java.io.IOException;
+
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketException;
+
+public final class LocalServerSocket extends ServerSocket
+{
+
+ // Fields.
+ // -------------------------------------------------------------------------
+
+ private LocalSocketImpl myImpl;
+ private boolean closed;
+
+ // Constructors.
+ // -------------------------------------------------------------------------
+
+ public LocalServerSocket () throws IOException
+ {
+ myImpl = new LocalSocketImpl ();
+ }
+
+ public LocalServerSocket (SocketAddress bindPoint) throws IOException
+ {
+ this ();
+ bind (bindPoint);
+ }
+
+ // Instance methods.
+ // -------------------------------------------------------------------------
+
+ public void bind (SocketAddress bindPoint) throws IOException
+ {
+ bind (bindPoint, 0);
+ }
+
+ public void bind (SocketAddress bindPoint, int backlog) throws IOException
+ {
+ myImpl.doCreate ();
+ myImpl.bind (bindPoint);
+ myImpl.listen (backlog);
+ }
+
+ public InetAddress getInetAddress ()
+ {
+ return null;
+ }
+
+ public int getLocalPort ()
+ {
+ return -1;
+ }
+
+ public SocketAddress getLocalSocketAddress ()
+ {
+ return myImpl.getLocalAddress ();
+ }
+
+ public Socket accept () throws IOException
+ {
+ LocalSocket s = new LocalSocket (true);
+ myImpl.accept (s.getLocalImpl());
+ s.localConnected = true;
+ return s;
+ }
+
+ public void close () throws IOException
+ {
+ myImpl.close ();
+ myImpl.unlink ();
+ closed = true;
+ }
+
+ public boolean isBound ()
+ {
+ return myImpl.getLocalAddress () != null;
+ }
+
+ public boolean isClosed ()
+ {
+ return closed;
+ }
+
+ public void setSoTimeout (int timeout)
+ {
+ throw new UnsupportedOperationException ("local sockets do not support timeouts");
+ }
+
+ public int getSoTimeout ()
+ {
+ throw new UnsupportedOperationException ("local sockets do not support timeouts");
+ }
+
+ public void setReuseAddress (boolean b)
+ {
+ throw new UnsupportedOperationException ("local sockets do not support reuse address");
+ }
+
+ public boolean getReuseAddress ()
+ {
+ throw new UnsupportedOperationException ("local sockets do not support reuse address");
+ }
+
+ public String toString ()
+ {
+ return LocalServerSocket.class.getName() + " [ address="
+ + myImpl.getLocalAddress() + " ]";
+ }
+
+ public void setReceiveBufferSize (int size)
+ {
+ throw new UnsupportedOperationException ("local sockets do not support buffer size");
+ }
+
+ public int getReceiveBufferSize ()
+ {
+ throw new UnsupportedOperationException ("local sockets do not support buffer size");
+ }
+
+ public void setSendBufferSize (int size)
+ {
+ throw new UnsupportedOperationException ("local sockets do not support buffer size");
+ }
+
+ public int getSendBufferSize ()
+ {
+ throw new UnsupportedOperationException ("local sockets do not support buffer size");
+ }
+}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocket.java b/libjava/classpath/gnu/java/net/local/LocalSocket.java
new file mode 100644
index 0000000..b977d69
--- /dev/null
+++ b/libjava/classpath/gnu/java/net/local/LocalSocket.java
@@ -0,0 +1,312 @@
+/* LocalSocket.java -- a unix domain client socket.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net.local;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketException;
+import java.net.SocketImpl;
+
+import java.nio.channels.IllegalBlockingModeException;
+import java.nio.channels.SocketChannel;
+
+/**
+ * A local, or unix-domain socket. Unix domain sockets are connected on the
+ * local filesystem itself, rather than a remote address.
+ */
+public final class LocalSocket extends Socket
+{
+
+ // Fields.
+ // -------------------------------------------------------------------------
+
+ private final LocalSocketImpl localimpl;
+ boolean localClosed;
+ boolean localConnected;
+
+ // Constructors.
+ // -------------------------------------------------------------------------
+
+ public LocalSocket () throws SocketException
+ {
+ super ();
+ localimpl = new LocalSocketImpl ();
+ }
+
+ public LocalSocket (LocalSocketAddress addr) throws SocketException
+ {
+ this ();
+ try
+ {
+ connect (addr);
+ }
+ catch (IOException ioe)
+ {
+ SocketException se = new SocketException ();
+ se.initCause (ioe);
+ throw se;
+ }
+ }
+
+ LocalSocket (boolean nocreate) throws IOException
+ {
+ super ();
+ localimpl = new LocalSocketImpl (nocreate);
+ }
+
+ // Instance methods.
+ // -------------------------------------------------------------------------
+
+ public void bind (SocketAddress bindpoint) throws IOException
+ {
+ throw new SocketException ("binding local client sockets is nonsensical");
+ }
+
+ public void connect (SocketAddress endpoint, int timeout) throws IOException
+ {
+ if (isClosed ())
+ {
+ throw new SocketException ("socket is closed");
+ }
+ if (! (endpoint instanceof LocalSocketAddress))
+ {
+ throw new IllegalArgumentException ("socket address is not a local address");
+ }
+ if (getChannel() != null && !getChannel().isBlocking())
+ {
+ throw new IllegalBlockingModeException ();
+ }
+
+ try
+ {
+ localimpl.doCreate ();
+ localimpl.localConnect ((LocalSocketAddress) endpoint);
+ }
+ catch (IOException ioe)
+ {
+ close ();
+ throw ioe;
+ }
+ localConnected = true;
+ }
+
+ public InetAddress getInetAddress ()
+ {
+ return null;
+ }
+
+ public InetAddress getLocalAddress ()
+ {
+ return null;
+ }
+
+ public int getPort ()
+ {
+ return -1;
+ }
+
+ public int getLocalPort ()
+ {
+ return -1;
+ }
+
+ public SocketChannel getChannel ()
+ {
+ return null;
+ }
+
+ public SocketAddress getLocalSocketAddress ()
+ {
+ return localimpl.getLocalAddress ();
+ }
+
+ public SocketAddress getRemoteSocketAddress ()
+ {
+ return localimpl.getRemoteAddress ();
+ }
+
+ public InputStream getInputStream () throws IOException
+ {
+ return localimpl.getInputStream ();
+ }
+
+ public OutputStream getOutputStream () throws IOException
+ {
+ return localimpl.getOutputStream ();
+ }
+
+ public void sendUrgentData (int b) throws IOException
+ {
+ localimpl.sendUrgentData (b);
+ }
+
+ public synchronized void close () throws IOException
+ {
+ localimpl.close ();
+ localClosed = true;
+ }
+
+ public void shutdownInput () throws IOException
+ {
+ localimpl.shutdownInput ();
+ }
+
+ public void shutdownOutput () throws IOException
+ {
+ localimpl.shutdownOutput ();
+ }
+
+ public boolean isClosed ()
+ {
+ return localClosed;
+ }
+
+ public boolean isBound ()
+ {
+ return false;
+ }
+
+ public boolean isConnected ()
+ {
+ return localConnected;
+ }
+
+ // Unsupported methods.
+ // -------------------------------------------------------------------------
+
+ public void setTcpNoDelay (boolean b) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public boolean getTcpNoDelay() throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setSoLinger (boolean b, int i) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public int getSoLinger () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setOOBInline (boolean b) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public boolean getOOBInline () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setSoTimeout (int i) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public int getSoTimeout () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setSendBufferSize (int i) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public int getSendBufferSize() throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setReceiveBufferSize (int i) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public int getReceiveBufferSize () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setKeepAlive (boolean b) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public boolean getKeepAlive () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setTrafficClass (int i) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public int getTrafficClass () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public void setReuseAddress (boolean b) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ public boolean getReuseAddress () throws SocketException
+ {
+ throw new SocketException ("local sockets do not support this option");
+ }
+
+ LocalSocketImpl getLocalImpl ()
+ {
+ return localimpl;
+ }
+}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java b/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java
new file mode 100644
index 0000000..ac5c53d
--- /dev/null
+++ b/libjava/classpath/gnu/java/net/local/LocalSocketAddress.java
@@ -0,0 +1,100 @@
+/* LocalSocketAddress.java -- unix-domain socket address.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net.local;
+
+import java.net.SocketAddress;
+
+public final class LocalSocketAddress extends SocketAddress
+{
+
+ // Fields.
+ // -------------------------------------------------------------------------
+
+ private final String path;
+
+ // Constructor.
+ // -------------------------------------------------------------------------
+
+ /**
+ * Creates a new unix domain socket address.
+ *
+ * @param path The path to the socket.
+ * @throws NullPointerException If <i>path</i> is <tt>null</tt>.
+ */
+ public LocalSocketAddress (String path)
+ {
+ if (path == null)
+ {
+ throw new NullPointerException ();
+ }
+ this.path = path;
+ }
+
+ // Instance methods.
+ // -------------------------------------------------------------------------
+
+ /**
+ * Returns the path of the socket.
+ *
+ * @return The path.
+ */
+ public String getPath ()
+ {
+ return path;
+ }
+
+ public boolean equals (Object o)
+ {
+ if (!(o instanceof LocalSocketAddress))
+ {
+ return false;
+ }
+ return getPath ().equals (((LocalSocketAddress) o).getPath ());
+ }
+
+ public int hashCode ()
+ {
+ return path.hashCode();
+ }
+
+ public String toString ()
+ {
+ return super.toString() + " [ " + path + " ]";
+ }
+}
diff --git a/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java b/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java
new file mode 100644
index 0000000..f907e5f
--- /dev/null
+++ b/libjava/classpath/gnu/java/net/local/LocalSocketImpl.java
@@ -0,0 +1,322 @@
+/* LocalSocketImpl.java -- a unix domain client socket implementation.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net.local;
+
+import java.io.FileDescriptor;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.net.InetAddress;
+import java.net.SocketAddress;
+import java.net.SocketException;
+import java.net.SocketImpl;
+
+final class LocalSocketImpl extends SocketImpl
+{
+
+ // Fields.
+ // -------------------------------------------------------------------------
+
+ private boolean created;
+ private InputStream in;
+ private OutputStream out;
+ private int socket_fd;
+ private LocalSocketAddress local;
+ private LocalSocketAddress remote;
+
+ static
+ {
+ try
+ {
+ System.loadLibrary ("javanet");
+ }
+ catch (Exception x)
+ {
+ x.printStackTrace ();
+ }
+ }
+
+ // Constructor.
+ // -------------------------------------------------------------------------
+
+ LocalSocketImpl ()
+ {
+ this (false);
+ }
+
+ LocalSocketImpl (boolean nocreate)
+ {
+ created = nocreate;
+ socket_fd = -1;
+ fd = new FileDescriptor ();
+ }
+
+ // Instance methods.
+ // -------------------------------------------------------------------------
+
+ public void setOption (int opt, Object value) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support options");
+ }
+
+ public Object getOption (int opt) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support options");
+ }
+
+ protected native void create (boolean stream) throws IOException;
+ protected native void listen (int timeout) throws IOException;
+ protected native void accept (LocalSocketImpl socket) throws IOException;
+ protected native int available () throws IOException;
+ protected native void close () throws IOException;
+ protected native void sendUrgentData (int data) throws IOException;
+ protected native void shutdownInput () throws IOException;
+ protected native void shutdownOutput () throws IOException;
+
+ native void unlink () throws IOException;
+ native void localBind (LocalSocketAddress addr) throws IOException;
+ native void localConnect (LocalSocketAddress addr) throws IOException;
+ native int read (byte[] buf, int off, int len) throws IOException;
+ native void write (byte[] buf, int off, int len) throws IOException;
+
+ void doCreate () throws IOException
+ {
+ if (!created)
+ {
+ create (true);
+ }
+ }
+
+ LocalSocketAddress getLocalAddress ()
+ {
+ return local;
+ }
+
+ LocalSocketAddress getRemoteAddress ()
+ {
+ return remote;
+ }
+
+ protected InputStream getInputStream()
+ {
+ if (in == null)
+ {
+ in = new LocalInputStream (this);
+ }
+
+ return in;
+ }
+
+ protected OutputStream getOutputStream()
+ {
+ if (out == null)
+ {
+ out = new LocalOutputStream (this);
+ }
+
+ return out;
+ }
+
+ protected void accept (SocketImpl impl) throws IOException
+ {
+ if (! (impl instanceof LocalSocketImpl))
+ {
+ throw new IllegalArgumentException ("not a local socket");
+ }
+ accept ((LocalSocketImpl) impl);
+ }
+
+ protected void connect (String host, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void connect (InetAddress addr, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void connect(SocketAddress addr, int timeout) throws IOException
+ {
+ if (! (addr instanceof LocalSocketAddress))
+ {
+ throw new SocketException ("address is not local");
+ }
+ localConnect ((LocalSocketAddress) addr);
+ }
+
+ protected void bind (InetAddress addr, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void bind (SocketAddress addr) throws IOException
+ {
+ if (! (addr instanceof LocalSocketAddress))
+ {
+ throw new SocketException ("address is not local");
+ }
+ localBind ((LocalSocketAddress) addr);
+ }
+
+ // Inner classes.
+ // -------------------------------------------------------------------------
+
+ class LocalInputStream extends InputStream
+ {
+
+ // Field.
+ // -----------------------------------------------------------------------
+
+ private final LocalSocketImpl impl;
+
+ // Constructor.
+ // -----------------------------------------------------------------------
+
+ LocalInputStream (LocalSocketImpl impl)
+ {
+ this.impl = impl;
+ }
+
+ // Instance methods.
+ // -----------------------------------------------------------------------
+
+ public int available () throws IOException
+ {
+ return impl.available();
+ }
+
+ public boolean markSupported ()
+ {
+ return false;
+ }
+
+ public void mark (int readLimit)
+ {
+ }
+
+ public void reset () throws IOException
+ {
+ throw new IOException ("mark/reset not supported");
+ }
+
+ public void close () throws IOException
+ {
+ impl.close();
+ }
+
+ public int read () throws IOException
+ {
+ byte[] buf = new byte[1];
+ int ret = read (buf);
+ if (ret != -1)
+ {
+ return buf[0] & 0xFF;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ public int read (byte[] buf) throws IOException
+ {
+ return read (buf, 0, buf.length);
+ }
+
+ public int read (byte[] buf, int off, int len) throws IOException
+ {
+ int ret = impl.read (buf, off, len);
+
+ if (ret == 0)
+ {
+ return -1;
+ }
+
+ return ret;
+ }
+ }
+
+ class LocalOutputStream extends OutputStream
+ {
+
+ // Field.
+ // -----------------------------------------------------------------------
+
+ private final LocalSocketImpl impl;
+
+ // Constructor.
+ // -----------------------------------------------------------------------
+
+ LocalOutputStream (LocalSocketImpl impl)
+ {
+ this.impl = impl;
+ }
+
+ // Instance methods.
+ // -----------------------------------------------------------------------
+
+ public void close () throws IOException
+ {
+ impl.close ();
+ }
+
+ public void flush () throws IOException
+ {
+ }
+
+ public void write (int b) throws IOException
+ {
+ byte[] buf = new byte [1];
+ buf[0] = (byte) b;
+ write (buf);
+ }
+
+ public void write (byte[] buf) throws IOException
+ {
+ write (buf, 0, buf.length);
+ }
+
+ public void write (byte[] buf, int off, int len) throws IOException
+ {
+ impl.write (buf, off, len);
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/net/protocol/file/Connection.java b/libjava/classpath/gnu/java/net/protocol/file/Connection.java
index f7253b0..04278d4 100644
--- a/libjava/classpath/gnu/java/net/protocol/file/Connection.java
+++ b/libjava/classpath/gnu/java/net/protocol/file/Connection.java
@@ -160,7 +160,9 @@ public class Connection extends URLConnection
else if (c > 127) {
try {
byte [] c_as_bytes = Character.toString(c).getBytes("utf-8");
- System.arraycopy(c_as_bytes, 0, buf, pos, c_as_bytes.length);
+ final int c_length = c_as_bytes.length;
+ System.arraycopy(c_as_bytes, 0, buf, pos, c_length);
+ pos += c_length;
}
catch (java.io.UnsupportedEncodingException x2) {
throw (Error) new InternalError().initCause(x2);
diff --git a/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java b/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
index d0f4872..f5317d4 100644
--- a/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
+++ b/libjava/classpath/gnu/java/net/protocol/ftp/FTPConnection.java
@@ -429,6 +429,9 @@ public class FTPConnection
public boolean changeWorkingDirectory(String path)
throws IOException
{
+ // Do nothing if the path is empty.
+ if (path.length() == 0)
+ return true;
String cmd = CWD + ' ' + path;
send(cmd);
FTPResponse response = getResponse();
diff --git a/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java b/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
index 5c2af9e..0dce7c7 100644
--- a/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
+++ b/libjava/classpath/gnu/java/net/protocol/http/HTTPURLConnection.java
@@ -48,12 +48,8 @@ import java.io.OutputStream;
import java.net.ProtocolException;
import java.net.URL;
import java.security.cert.Certificate;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.Map;
import javax.net.ssl.HandshakeCompletedEvent;
@@ -271,6 +267,8 @@ public class HTTPURLConnection
secure = false;
start = 7;
int end = location.indexOf('/', start);
+ if (end == -1)
+ end = location.length();
host = location.substring(start, end);
int ci = host.lastIndexOf(':');
if (ci != -1)
@@ -292,6 +290,8 @@ public class HTTPURLConnection
secure = true;
start = 8;
int end = location.indexOf('/', start);
+ if (end == -1)
+ end = location.length();
host = location.substring(start, end);
int ci = host.lastIndexOf(':');
if (ci != -1)
@@ -410,10 +410,7 @@ public class HTTPURLConnection
}
public String getRequestProperty(String key)
- {
- if (key == null)
- return null;
-
+ {
return requestHeaders.getValue(key);
}
diff --git a/libjava/classpath/gnu/java/net/protocol/http/Headers.java b/libjava/classpath/gnu/java/net/protocol/http/Headers.java
index b42faaa..a793bbd 100644
--- a/libjava/classpath/gnu/java/net/protocol/http/Headers.java
+++ b/libjava/classpath/gnu/java/net/protocol/http/Headers.java
@@ -50,7 +50,6 @@ import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Set;
/**
* A collection of HTTP header names and associated values. The
@@ -65,12 +64,18 @@ class Headers
{
/**
* A list of HeaderElements
- *
*/
private final ArrayList headers = new ArrayList();
- static final DateFormat dateFormat = new HTTPDateFormat();
+ /**
+ * The HTTP dateformat used to parse date header fields.
+ */
+ private static final DateFormat dateFormat = new HTTPDateFormat();
+ /**
+ * Class for a Header element consisting of
+ * a name and value String.
+ */
static class HeaderElement
{
String name;
@@ -83,8 +88,12 @@ class Headers
}
}
+ /**
+ * Default constructor.
+ */
public Headers()
{
+ // nothing to do
}
/**
@@ -99,8 +108,11 @@ class Headers
}
/**
- * Returns the value of the specified header as a string. If
+ * Returns the value of the specified header as a string. If
* multiple values are present, the last one is returned.
+ *
+ * @param header the header name (case insensitive search)
+ * @return The header value or <code>null</code> if not found.
*/
public String getValue(String header)
{
@@ -116,8 +128,12 @@ class Headers
}
/**
- * Returns the value of the specified header as an integer,
- * or -1 if the header is not present or not an integer.
+ * Returns the value of the specified header as an integer. If
+ * multiple values are present, the last one is returned.
+ *
+ * @param header the header name (case insensitive search)
+ * @return The header value or <code>-1</code> if not present or
+ * not an integer value.
*/
public int getIntValue(String header)
{
@@ -132,13 +148,18 @@ class Headers
}
catch (NumberFormatException e)
{
+ // fall through
}
return -1;
}
/**
- * Returns the value of the specified header as a long, or -1 if the
- * header is not present or cannot be parsed as a long.
+ * Returns the value of the specified header as a long. If
+ * multiple values are present, the last one is returned.
+ *
+ * @param header the header name (case insensitive search)
+ * @return The header value or <code>-1</code> if not present or
+ * not a long value.
*/
public long getLongValue(String header)
{
@@ -153,13 +174,18 @@ class Headers
}
catch (NumberFormatException e)
{
+ // fall through
}
return -1;
}
/**
- * Returns the value of the specified header as a date,
- * or <code>null</code> if the header is not present or not a date.
+ * Returns the value of the specified header as a date. If
+ * multiple values are present, the last one is returned.
+ *
+ * @param header the header name (case insensitive search)
+ * @return The header value or <code>null</code> if not present or
+ * not a date value.
*/
public Date getDateValue(String header)
{
@@ -180,23 +206,35 @@ class Headers
/**
* Add a header to this set of headers. If there is an existing
- * header with the same name, it is discarded.
+ * header with the same name it's value is replaced with the new value.
+ * If multiple headers of the same name exist only the last one's value
+ * is replaced.
*
* @param name the header name
* @param value the header value
*
- * @see #addValue
+ * @see #addValue(String, String)
*/
public void put(String name, String value)
- {
- remove(name);
- headers.add(headers.size(), new HeaderElement(name, value));
+ {
+ for (int i = headers.size() - 1; i >= 0; i--)
+ {
+ HeaderElement e = (HeaderElement)headers.get(i);
+ if (e.name.equalsIgnoreCase(name))
+ {
+ e.value = value;
+ return;
+ }
+ }
+
+ // nothing was replaced so add it as new HeaderElement
+ addValue(name, value);
}
-
+
/**
- * Add all headers from a set of headers to this set. If any of the
- * headers to be added have the same name as existing headers, the
- * existing headers will be discarded.
+ * Add all headers from a set of headers to this set. Any existing header
+ * with the same (case insensitive) name as one of the new headers will
+ * be overridden.
*
* @param o the headers to be added
*/
@@ -206,10 +244,6 @@ class Headers
{
HeaderElement e = (HeaderElement)it.next();
remove(e.name);
- }
- for (Iterator it = o.iterator(); it.hasNext(); )
- {
- HeaderElement e = (HeaderElement)it.next();
addValue(e.name, e.value);
}
}
@@ -234,6 +268,7 @@ class Headers
* Parse the specified InputStream, adding headers to this collection.
*
* @param in the InputStream.
+ * @throws IOException if I/O error occured.
*/
public void parse(InputStream in)
throws IOException
@@ -303,7 +338,7 @@ class Headers
* @param name the header name
* @param value the header value
*
- * @see #put
+ * @see #put(String, String)
*/
public void addValue(String name, String value)
{
@@ -312,13 +347,14 @@ class Headers
/**
* Get a new Map containing all the headers. The keys of the Map
- * are Strings (the header names). The values of the Map are
+ * are Strings (the header names). The headers will be included
+ * case-sensitive in the map so that querying must be done with the
+ * correct case of the needed header name. The values of the Map are
* unmodifiable Lists containing Strings (the header values).
*
- * <p>
- *
- * The returned map is modifiable. Changing it will not effect this
- * collection of Headers in any way.
+ * <p>
+ * The returned map is modifiable. Changing it will not effect this
+ * collection of Headers in any way.</p>
*
* @return a Map containing all the headers.
*/
@@ -352,9 +388,9 @@ class Headers
*
* @param i the header index.
*
- * @return the header name.
+ * @return The header name, or <code>null</code> if index outside of range.
*
- * @see #getHeaderValue
+ * @see #getHeaderValue(int)
*/
public String getHeaderName(int i)
{
@@ -369,9 +405,9 @@ class Headers
*
* @param i the header index.
*
- * @return the header value.
+ * @return the header value, or <code>null</code> if index outside of range.
*
- * @see #getHeaderName
+ * @see #getHeaderName(int)
*/
public String getHeaderValue(int i)
{
diff --git a/libjava/classpath/gnu/java/nio/ChannelReader.java b/libjava/classpath/gnu/java/nio/ChannelReader.java
index 44fe662..1e7372d 100644
--- a/libjava/classpath/gnu/java/nio/ChannelReader.java
+++ b/libjava/classpath/gnu/java/nio/ChannelReader.java
@@ -92,120 +92,126 @@ public class ChannelReader extends Reader
public int read(char[] buf, int offset, int count) throws IOException
{
- // I declared channel being null meaning that the reader is closed.
- if (!channel.isOpen())
- throw new IOException("Reader was already closed.");
-
- // I declared decoder being null meaning that there is no more data to read
- // and convert.
- if (decoder == null)
- return -1;
-
- // Stores the amount of character being read. It -1 so that if no conversion
- // occured the caller will see this as an 'end of file'.
- int sum = -1;
-
- // Copies any characters which may be left from the last invocation into the
- // destination array.
- if (charBuffer.remaining() > 0)
+ synchronized (lock)
{
- sum = Math.min(count, charBuffer.remaining());
- charBuffer.get(buf, offset, sum);
-
- // Updates the control variables according to the latest copy operation.
- offset += sum;
- count -= sum;
- }
-
- // Copies the character which have not been put in the destination array to
- // the beginning. If data is actually copied count will be 0. If no data is
- // copied count is >0 and we can now convert some more characters.
- charBuffer.compact();
-
- int converted = 0;
- boolean last = false;
-
- while (count != 0)
- {
- // Tries to convert some bytes (Which will intentionally fail in the
- // first place because we have not read any bytes yet.)
- CoderResult result = decoder.decode(byteBuffer, charBuffer, last);
- if (result.isMalformed() || result.isUnmappable())
- {
- // JDK throws exception when bytes are malformed for sure.
- // FIXME: Unsure what happens when a character is simply
- // unmappable.
- result.throwException();
- }
-
- // Marks that we should end this loop regardless whether the caller
- // wants more chars or not, when this was the last conversion.
- if (last)
+ // I declared channel being null meaning that the reader is closed.
+ if (!channel.isOpen())
+ throw new IOException("Reader was already closed.");
+
+ // I declared decoder being null meaning that there is no more data to read
+ // and convert.
+ if (decoder == null)
+ return -1;
+
+ // Stores the amount of character being read. It -1 so that if no conversion
+ // occured the caller will see this as an 'end of file'.
+ int sum = -1;
+
+ // Copies any characters which may be left from the last invocation into the
+ // destination array.
+ if (charBuffer.remaining() > 0)
{
- decoder = null;
+ sum = Math.min(count, charBuffer.remaining());
+ charBuffer.get(buf, offset, sum);
+
+ // Updates the control variables according to the latest copy operation.
+ offset += sum;
+ count -= sum;
}
- else if (result.isUnderflow())
+
+ // Copies the character which have not been put in the destination array to
+ // the beginning. If data is actually copied count will be 0. If no data is
+ // copied count is >0 and we can now convert some more characters.
+ charBuffer.compact();
+
+ int converted = 0;
+ boolean last = false;
+
+ while (count != 0)
{
- // We need more bytes to do the conversion.
-
- // Copies the not yet converted bytes to the beginning making it
- // being able to receive more bytes.
- byteBuffer.compact();
-
- // Reads in another bunch of bytes for being converted.
- if (channel.read(byteBuffer) == -1)
+ // Tries to convert some bytes (Which will intentionally fail in the
+ // first place because we have not read any bytes yet.)
+ CoderResult result = decoder.decode(byteBuffer, charBuffer, last);
+ if (result.isMalformed() || result.isUnmappable())
{
- // If there is no more data available in the channel we mark
- // that state for the final character conversion run which is
- // done in the next loop iteration.
- last = true;
+ // JDK throws exception when bytes are malformed for sure.
+ // FIXME: Unsure what happens when a character is simply
+ // unmappable.
+ result.throwException();
}
-
- // Prepares the byteBuffer for the next character conversion run.
- byteBuffer.flip();
+
+ // Marks that we should end this loop regardless whether the caller
+ // wants more chars or not, when this was the last conversion.
+ if (last)
+ {
+ decoder = null;
+ }
+ else if (result.isUnderflow())
+ {
+ // We need more bytes to do the conversion.
+
+ // Copies the not yet converted bytes to the beginning making it
+ // being able to receive more bytes.
+ byteBuffer.compact();
+
+ // Reads in another bunch of bytes for being converted.
+ if (channel.read(byteBuffer) == -1)
+ {
+ // If there is no more data available in the channel we mark
+ // that state for the final character conversion run which is
+ // done in the next loop iteration.
+ last = true;
+ }
+
+ // Prepares the byteBuffer for the next character conversion run.
+ byteBuffer.flip();
+ }
+
+ // Prepares the charBuffer for being drained.
+ charBuffer.flip();
+
+ converted = Math.min(count, charBuffer.remaining());
+ charBuffer.get(buf, offset, converted);
+
+ // Copies characters which have not yet being copied into the char-Array
+ // to the beginning making it possible to read them later (If data is
+ // really copied here, then the caller has received enough characters so
+ // far.).
+ charBuffer.compact();
+
+ // Updates the control variables according to the latest copy operation.
+ offset += converted;
+ count -= converted;
+
+ // Updates the amount of transferred characters.
+ sum += converted;
+
+ if (decoder == null)
+ {
+ break;
+ }
+
+ // Now that more characters have been transfered we let the loop decide
+ // what to do next.
}
-
- // Prepares the charBuffer for being drained.
+
+ // Makes the charBuffer ready for reading on the next invocation.
charBuffer.flip();
-
- converted = Math.min(count, charBuffer.remaining());
- charBuffer.get(buf, offset, converted);
-
- // Copies characters which have not yet being copied into the char-Array
- // to the beginning making it possible to read them later (If data is
- // really copied here, then the caller has received enough characters so
- // far.).
- charBuffer.compact();
-
- // Updates the control variables according to the latest copy operation.
- offset += converted;
- count -= converted;
-
- // Updates the amount of transferred characters.
- sum += converted;
-
- if (decoder == null)
- {
- break;
- }
-
- // Now that more characters have been transfered we let the loop decide
- // what to do next.
+
+ return sum;
}
-
- // Makes the charBuffer ready for reading on the next invocation.
- charBuffer.flip();
-
- return sum;
}
public void close() throws IOException
{
- channel.close();
+ synchronized (lock)
+ {
+ channel.close();
- // Makes sure all intermediate data is released by the decoder.
- if (decoder != null)
- decoder.reset();
+ // Makes sure all intermediate data is released by the decoder.
+ if (decoder != null)
+ decoder.reset();
+ }
}
}
diff --git a/libjava/classpath/gnu/java/nio/ChannelWriter.java b/libjava/classpath/gnu/java/nio/ChannelWriter.java
new file mode 100644
index 0000000..8e533cc
--- /dev/null
+++ b/libjava/classpath/gnu/java/nio/ChannelWriter.java
@@ -0,0 +1,190 @@
+/* ChannelWriter.java -- nio / writer bridge
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.nio;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.channels.WritableByteChannel;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+
+/**
+ * A Writer implementation that works by wrapping an NIO channel.
+ */
+public class ChannelWriter
+ extends Writer
+{
+ private static final int DEFAULT_BUFFER_CAP = 8192;
+
+ /**
+ * The output channel.
+ */
+ private WritableByteChannel byteChannel;
+
+ /**
+ * The encoder to use.
+ */
+ private CharsetEncoder enc;
+
+ /**
+ * The byte buffer. Translated characters are stored here on their way out.
+ */
+ private ByteBuffer byteBuffer;
+
+ /**
+ * The character buffer. Characters are stored here on their way into
+ * the encoder.
+ */
+ private CharBuffer charBuffer;
+
+ private void writeBuffer() throws IOException
+ {
+ byteBuffer.flip();
+ byteChannel.write(byteBuffer);
+ }
+
+ /**
+ * Create a new instance, given the output byte channel, the encoder
+ * to use, and the minimum buffer capacity.
+ */
+ public ChannelWriter(WritableByteChannel ch, CharsetEncoder enc,
+ int minBufferCap)
+ {
+ this.byteChannel = ch;
+ this.enc = enc;
+ if (minBufferCap == -1)
+ minBufferCap = DEFAULT_BUFFER_CAP;
+ this.byteBuffer
+ = ByteBuffer.allocate((int) (minBufferCap * enc.maxBytesPerChar()));
+ this.charBuffer = CharBuffer.allocate(minBufferCap);
+ this.charBuffer.clear();
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Writer#flush()
+ */
+ public void flush() throws IOException
+ {
+ // Presumably if we have characters in our buffer, it is
+ // due to an underflow. So we don't bother trying to flush
+ // that here.
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Writer#close()
+ */
+ public void close() throws IOException
+ {
+ synchronized (lock)
+ {
+ if (enc == null)
+ throw new IOException("writer already closed");
+
+ byteBuffer.clear();
+ charBuffer.flip();
+ CoderResult res = enc.encode(charBuffer, byteBuffer, true);
+ if (res.isError() || res.isMalformed() || res.isUnmappable())
+ res.throwException();
+ writeBuffer();
+
+ byteBuffer.clear();
+ res = enc.flush(byteBuffer);
+ if (res.isError() || res.isMalformed() || res.isUnmappable())
+ res.throwException();
+ writeBuffer();
+ enc = null;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Writer#write(char[], int, int)
+ */
+ public void write(char[] buf, int offset, int len) throws IOException
+ {
+ synchronized (lock)
+ {
+ if (enc == null)
+ throw new IOException("writer already closed");
+ int lastLen = -1;
+ while (len > 0)
+ {
+ // Copy data into our character buffer.
+ int allowed = Math.min(charBuffer.remaining(), len);
+ charBuffer.put(buf, offset, allowed);
+ // Update for the next pass through the loop.
+ offset += allowed;
+ len -= allowed;
+ charBuffer.flip();
+ // If we didn't make any progress, we want to clean up
+ // and save our state for the next write().
+ if (len == lastLen)
+ {
+ if (len <= charBuffer.remaining())
+ {
+ charBuffer.put(buf, offset, len);
+ charBuffer.flip();
+ }
+ else
+ {
+ CharBuffer ncb = CharBuffer.allocate(charBuffer.length()
+ + len);
+ ncb.put(charBuffer);
+ ncb.put(buf, offset, len);
+ charBuffer = ncb;
+ }
+ break;
+ }
+ lastLen = len;
+
+ // Convert.
+ byteBuffer.clear();
+ CoderResult res = enc.encode(charBuffer, byteBuffer, false);
+ // Compact here, as we want to leave the buffer in the
+ // right state for any future put()s.
+ charBuffer.compact();
+ if (res.isError() || res.isMalformed() || res.isUnmappable())
+ res.throwException();
+ // Write the byte buffer to the output channel.
+ writeBuffer();
+ }
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/rmi/activation/ActivationSystemTransient.java b/libjava/classpath/gnu/java/rmi/activation/ActivationSystemTransient.java
new file mode 100644
index 0000000..1557220
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/activation/ActivationSystemTransient.java
@@ -0,0 +1,406 @@
+/* ActivationSystemTransient.java -- The transient RMI object activation system.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.activation;
+
+import java.rmi.MarshalledObject;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationDesc;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationGroup;
+import java.rmi.activation.ActivationGroupDesc;
+import java.rmi.activation.ActivationGroupID;
+import java.rmi.activation.ActivationID;
+import java.rmi.activation.ActivationInstantiator;
+import java.rmi.activation.ActivationMonitor;
+import java.rmi.activation.ActivationSystem;
+import java.rmi.activation.Activator;
+import java.rmi.activation.UnknownGroupException;
+import java.rmi.activation.UnknownObjectException;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Provides the default transient activation system.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class ActivationSystemTransient
+ extends DefaultActivationSystem
+ implements ActivationSystem, ActivationMonitor, Activator
+{
+ /**
+ * Maps group identifiers into group descriptions.
+ */
+ protected final BidiTable groupDescs;
+
+ /**
+ * Maps object identifiers into object activation descriptions
+ */
+ protected final BidiTable descriptions;
+
+ /**
+ * Maps group identifiers into already activated groups.
+ */
+ protected transient final Map groupInstantiators = new Hashtable();
+
+ /**
+ * The cache of the activated objects, maps activation ids to remote
+ * object stubs.
+ */
+ protected transient final Map activatedObjects = new HashMap();
+
+ /**
+ * The object incarnation counter.
+ */
+ static long groupIncarnations = 0;
+
+ /**
+ * The singleton of this activation system
+ */
+ static ActivationSystem singleton;
+
+ /**
+ * Set to true to print the event messages to console.
+ */
+ public static boolean debug = false;
+
+
+ /**
+ * Creates the group which uses the given maps to store the data.
+ */
+ protected ActivationSystemTransient(BidiTable objectDescriptions,
+ BidiTable groupDescriptiopns)
+ {
+ descriptions = objectDescriptions;
+ groupDescs = groupDescriptiopns;
+ }
+
+ /**
+ * Creates the group with transient maps.
+ */
+ protected ActivationSystemTransient()
+ {
+ this (new BidiTable(), new BidiTable());
+ }
+
+ public static ActivationSystem getInstance()
+ {
+ if (singleton == null)
+ singleton = new ActivationSystemTransient();
+ return singleton;
+ }
+
+ /**
+ * Activate the given object (try cache first if force = false)
+ */
+ public MarshalledObject activate(ActivationID id, boolean force)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ if (! force)
+ {
+ synchronized (activatedObjects)
+ {
+ MarshalledObject object = (MarshalledObject) activatedObjects.get(id);
+ if (object != null)
+ return object;
+ }
+ }
+
+ ActivationDesc desc = (ActivationDesc) descriptions.get(id);
+ if (desc == null)
+ throw new UnknownObjectException("Activating unknown object "+
+ id == null ? "null" : id.toString());
+
+ ActivationInstantiator group =
+ (ActivationInstantiator) groupInstantiators.get(desc.getGroupID());
+
+ if (group == null)
+ {
+ // The group is not active - must be activated.
+ ActivationGroupID gid = desc.getGroupID();
+ ActivationGroupDesc adesc = (ActivationGroupDesc) groupDescs.get(gid);
+
+ if (adesc == null)
+ throw new UnknownGroupException("Activating unknown group "
+ + gid + " for "+ id+" this "+this);
+
+ synchronized (ActivationSystemTransient.class)
+ {
+ groupIncarnations++;
+ }
+
+ group = ActivationGroup.createGroup(gid, adesc, groupIncarnations);
+ activeGroup(gid, group, groupIncarnations);
+ }
+
+ MarshalledObject object = group.newInstance(id, desc);
+
+ synchronized (activatedObjects)
+ {
+ activatedObjects.put(id, object);
+ }
+ return object;
+ }
+
+ /**
+ * Returns the activation monitor (THIS) and remebers the instantiator, used
+ * by that group.
+ */
+ public ActivationMonitor activeGroup(ActivationGroupID id,
+ ActivationInstantiator group,
+ long incarnation)
+ throws UnknownGroupException, ActivationException, RemoteException
+ {
+ groupInstantiators.put(id, group);
+ return this;
+ }
+
+ /**
+ * Get the activation descriptor for the given activation id.
+ *
+ * @return the activation descriptor, never null.
+ * @throws UnknownObjectException if such object is unknown.
+ */
+ public ActivationDesc getActivationDesc(ActivationID id)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ ActivationDesc desc = (ActivationDesc) descriptions.get(id);
+ if (desc == null)
+ throw new UnknownObjectException("No desc for "+
+ id == null ? "null" : id.toString());
+ return desc;
+ }
+
+ /**
+ * Get the descriptor of the given activation group.
+ *
+ * @return the activation group descriptor, never null.
+ * @throws UnknownGroupException if such group is unknown
+ */
+ public ActivationGroupDesc getActivationGroupDesc(ActivationGroupID groupId)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ ActivationGroupDesc desc = (ActivationGroupDesc) groupDescs.get(groupId);
+ if (desc == null)
+ throw new UnknownGroupException(groupId == null ? "null"
+ : groupId.toString());
+ return desc;
+ }
+
+ /**
+ * Create the activation group id and put this id-descriptor combination into
+ * the group map. The new ID will only be created if this description has not
+ * already been registered, otherwise the id of the registered description
+ * will be returned.
+ */
+ public ActivationGroupID registerGroup(ActivationGroupDesc groupDesc)
+ throws ActivationException, RemoteException
+ {
+ ActivationGroupID id = (ActivationGroupID) groupDescs.getKey(groupDesc);
+ if (id == null)
+ {
+ id = new ActivationGroupID(this);
+ groupDescs.put(id, groupDesc);
+ }
+ if (debug)
+ System.out.println("Register group " + id +":"+groupDesc+" this "+this);
+
+ return id;
+ }
+
+ /**
+ * Create the object activation id and put this id-descriptor combination into
+ * the group map. The new ID will only be created if this description has not
+ * already been registered, otherwise the id of the registered description
+ * will be returned.
+ */
+ public ActivationID registerObject(ActivationDesc desc)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ ActivationID id = (ActivationID) descriptions.getKey(desc);
+ if (id == null)
+ {
+ id = new ActivationID(this);
+ descriptions.put(id, desc);
+ }
+
+ if (debug)
+ System.out.println("Register object " + id +":"+desc+" this "+this);
+
+ return id;
+ }
+
+ /**
+ * Replace the activation descriptor, return the previous descriptor.
+ */
+ public ActivationDesc setActivationDesc(ActivationID id, ActivationDesc desc)
+ throws ActivationException, UnknownObjectException,
+ UnknownGroupException, RemoteException
+ {
+ ActivationDesc prev = getActivationDesc(id);
+ descriptions.put(id, desc);
+ return prev;
+ }
+
+ /**
+ * Replace the activation group descriptor, return the previous descriptor.
+ */
+ public ActivationGroupDesc setActivationGroupDesc(
+ ActivationGroupID groupId,
+ ActivationGroupDesc groupDesc)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ ActivationGroupDesc prev = getActivationGroupDesc(groupId);
+ groupDescs.put(groupId, groupDesc);
+ return prev;
+ }
+
+ /**
+ * Calls .shutdown on all bidirectional tables (has no effect if these
+ * table are not persistent).
+ */
+ public void shutdown() throws RemoteException
+ {
+ descriptions.shutdown();
+ groupDescs.shutdown();
+ }
+
+ /**
+ * Remove the group from the group map
+ */
+ public void unregisterGroup(ActivationGroupID groupId) throws ActivationException,
+ UnknownGroupException, RemoteException
+ {
+ if (! groupDescs.containsKey(groupId))
+ throw new UnknownGroupException("Unknown group "+groupId);
+
+ groupDescs.removeKey(groupId);
+ groupInstantiators.remove(groupId);
+ }
+
+ /**
+ * Remove the object id from the active object and description maps.
+ */
+ public void unregisterObject(ActivationID id) throws ActivationException,
+ UnknownObjectException, RemoteException
+ {
+ if (! descriptions.containsKey(id))
+ throw new UnknownObjectException("Unregistering unknown object");
+ descriptions.removeKey(id);
+
+ synchronized (activatedObjects)
+ {
+ activatedObjects.remove(id);
+ }
+ }
+
+ /**
+ * Put the object into active object map.
+ */
+ public void activeObject(ActivationID id, MarshalledObject obj)
+ throws UnknownObjectException, RemoteException
+ {
+ if (! descriptions.containsKey(id))
+ throw new UnknownObjectException("Activating unknown object "+
+ id+" this "+this);
+ try
+ {
+ synchronized (activatedObjects)
+ {
+ activatedObjects.put(id, obj.get());
+ }
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnknownObjectException un = new UnknownObjectException(
+ "Cannot get Remote for MarshalledObject of "+id);
+ un.detail = e;
+ throw un;
+ }
+ }
+
+ /**
+ * Check if the group is known. Remove all active objects, belonging to
+ * that group, from the active object cache.
+ */
+ public void inactiveGroup(ActivationGroupID groupId, long incarnation)
+ throws UnknownGroupException, RemoteException
+ {
+ if (! groupInstantiators.containsKey(groupId))
+ throw new UnknownGroupException("Inactivating unkwnon group");
+
+ groupInstantiators.remove(groupId);
+
+ // Remove all members of this group from the cache.
+ synchronized (activatedObjects)
+ {
+ Iterator iter = activatedObjects.keySet().iterator();
+ ActivationID id;
+ ActivationDesc desc;
+ while (iter.hasNext())
+ {
+ id = (ActivationID) iter.next();
+ desc = (ActivationDesc) descriptions.get(id);
+ if (desc.getGroupID().equals(groupId))
+ activatedObjects.remove(id);
+ }
+ }
+ }
+
+ /**
+ * Removes this id from the active object cache.
+ */
+ public void inactiveObject(ActivationID id) throws UnknownObjectException,
+ RemoteException
+ {
+ if (! descriptions.containsKey(id))
+ throw new UnknownObjectException("Inactivating unknown object");
+
+ synchronized (activatedObjects)
+ {
+ activatedObjects.remove(id);
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/java/rmi/activation/BidiTable.java b/libjava/classpath/gnu/java/rmi/activation/BidiTable.java
new file mode 100644
index 0000000..5e421fe
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/activation/BidiTable.java
@@ -0,0 +1,163 @@
+/* BidiHasthable.java -- Bidirectional hash table.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.activation;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * The bidirectional hash table, maps both a to b and b to a.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class BidiTable
+{
+ /**
+ * Use serialVerionUID for interoperability.
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * Maps keys to values
+ */
+ protected Map k2v;
+
+ /**
+ * Maps values to keys (in reverse)
+ */
+ protected Map v2k;
+
+ /**
+ * Create a new table that is ready to use.
+ */
+ public BidiTable()
+ {
+ k2v = new HashMap();
+ v2k = new HashMap();
+ }
+
+ /**
+ * Create a new instance where the hashtable fields are not initialised
+ * (called from derivatives that intialise hashtables in they own way.
+ *
+ * @param flags currently used to mark the different constructor only.
+ */
+ protected BidiTable(int flags)
+ {
+ }
+
+ /**
+ * Get key by value
+ */
+ public synchronized Object getKey(Object value)
+ {
+ return v2k.get(value);
+ }
+
+ /**
+ * Put key-value pair.
+ */
+ public synchronized void put(Object key, Object value)
+ {
+ k2v.put(key, value);
+ v2k.put(value, key);
+ }
+
+ /**
+ * Get value from key
+ */
+ public synchronized Object get(Object key)
+ {
+ return k2v.get(key);
+ }
+
+ /**
+ * Remove the key-value pair by key
+ */
+ public synchronized void removeKey(Object key)
+ {
+ Object value = k2v.get(key);
+ if (value!=null)
+ {
+ k2v.remove(key);
+ v2k.remove(value);
+ }
+ }
+
+ /**
+ * Check if the table contains this key.
+ */
+ public synchronized boolean containsKey(Object key)
+ {
+ return k2v.containsKey(key);
+ }
+
+ /**
+ * This method is called before exit and may be used to write the database
+ * to the disk. The default method does nothing.
+ */
+ public synchronized void shutdown()
+ {
+ }
+
+ /**
+ * Get the size.
+ */
+ public synchronized int size()
+ {
+ return k2v.size();
+ }
+
+ /**
+ * Get the key collection.
+ */
+ public synchronized Object[] keys()
+ {
+ Collection keys = k2v.keySet();
+ Object[] k = new Object[keys.size()];
+
+ Iterator iter = keys.iterator();
+ for (int i = 0; i < k.length; i++)
+ k[i] = iter.next();
+
+ return k;
+ }
+}
diff --git a/libjava/classpath/gnu/java/rmi/activation/DefaultActivationGroup.java b/libjava/classpath/gnu/java/rmi/activation/DefaultActivationGroup.java
new file mode 100644
index 0000000..3a654f2
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/activation/DefaultActivationGroup.java
@@ -0,0 +1,159 @@
+/* DefaultActivationGroup.java -- Default activation group.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.activation;
+
+import gnu.java.rmi.server.ActivatableServerRef;
+import gnu.java.rmi.server.UnicastServer;
+
+import java.lang.reflect.Constructor;
+import java.rmi.MarshalledObject;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationDesc;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationGroup;
+import java.rmi.activation.ActivationGroupID;
+import java.rmi.activation.ActivationID;
+import java.rmi.activation.UnknownObjectException;
+
+/**
+ * The default activation group class. This activation group assumes that
+ * all classes are accessible via current thread context class loader.
+ * The remote class loading is not supported for security reasons. The
+ * activation always occurs in the current jre.
+ *
+ * @author Audrius Meskauskas (audriusa@Bioinformatics.org)
+ */
+public class DefaultActivationGroup
+ extends ActivationGroup
+{
+ /**
+ * Use the serialVersionUID for interoperability.
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * Used during the group creation (required constructor).
+ */
+ static final Class[] cConstructorTypes = new Class[]
+ {
+ ActivationID.class,
+ MarshalledObject.class
+ };
+
+
+ /**
+ * Create the new default activation group.
+ *
+ * @param id the group activation id.
+ * @param data may contain the group initialization data (unused and can be
+ * null)
+ * @throws RemoteException if the super constructor does
+ */
+ public DefaultActivationGroup(ActivationGroupID id, MarshalledObject data)
+ throws RemoteException
+ {
+ super(id);
+ }
+
+
+ /**
+ * May be overridden and used as a hook. This method is called each time
+ * the new object is instantiated.
+ */
+ public void activeObject(ActivationID id, Remote obj)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ // Nothing to do (the monitor is already notified in newInstance)
+ }
+
+ /**
+ * Create the new instance of the object, using the class name and location
+ * information, stored in the passed descriptor. The method expects the object
+ * class to have the two parameter constructor, the first parameter being the
+ * {@link ActivationID} and the second the {@link MarshalledObject}.
+ *
+ * @param id the object activation id
+ * @param desc the activation descriptor, providing the information, necessary
+ * to create and activate the object
+ * @return the marshalled object, containing the exported stub of the created
+ * object
+ * @throws ActivationException if the activation fails due any reason
+ */
+ public MarshalledObject newInstance(ActivationID id, ActivationDesc desc)
+ throws ActivationException, RemoteException
+ {
+ try
+ {
+ if (ActivationSystemTransient.debug)
+ System.out.println("Instantiating "+desc.getClassName());
+
+ Remote object;
+ Class objectClass;
+
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ objectClass = loader.loadClass(desc.getClassName());
+ Constructor constructor = objectClass.getConstructor(cConstructorTypes);
+ object = (Remote) constructor.newInstance(
+ new Object[] { id, desc.getData() });
+
+ // Make the object accessible and create the stub.
+ ActivatableServerRef ref = UnicastServer.getActivatableRef(id);
+ Remote stub = ref.exportObject(object);
+
+ MarshalledObject marsh = new MarshalledObject(stub);
+
+ // Notify the activation monitor.
+ activeObject(id, marsh);
+
+ // Make call to the hook that may be overridden.
+ activeObject(id, stub);
+
+ return marsh;
+ }
+ catch (Exception e)
+ {
+ ActivationException acex = new ActivationException(
+ "Unable to activate "+ desc.getClassName()
+ + " from "+ desc.getLocation(), e);
+ throw acex;
+ }
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/rmi/activation/DefaultActivationSystem.java b/libjava/classpath/gnu/java/rmi/activation/DefaultActivationSystem.java
new file mode 100644
index 0000000..754b5dc
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/activation/DefaultActivationSystem.java
@@ -0,0 +1,118 @@
+/* DefaultActivationSystem.java -- Default RMI activation system
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.activation;
+
+import java.rmi.activation.ActivationSystem;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+
+/**
+ * Finds and returns the default activation system for this jre.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public abstract class DefaultActivationSystem
+{
+ /**
+ * The activation system (assigned if once found).
+ */
+ static ActivationSystem system;
+
+ /**
+ * The default activation registry port.
+ */
+ static int ACTIVATION_REGISTRY_PORT;
+
+ /**
+ * The name of the activation system registry port property.
+ */
+ static String AS_PORT_PROPERTY = "java.rmi.activation.port";
+
+ /**
+ * The defalut name of the activation system in the activation registry.
+ */
+ static String ACTIVATION_SYSTEM_NAME = "java.rmi.activation.ActivationSystem";
+
+ /**
+ * Get the activation system, default for this jre. If no external activation
+ * system exists, the internal activation system will be activated. This
+ * internal system is limited in capabilities and should be used exclusively
+ * for automated testing, to avoid necessity of starting rmi daemon during
+ * testing process.
+ */
+ public static ActivationSystem get()
+ {
+ if (system == null)
+ try
+ {
+ // Obtain the port:
+ String asr = System.getProperty("java.rmi.activation.port");
+
+ if (asr != null)
+ {
+ try
+ {
+ ACTIVATION_REGISTRY_PORT = Integer.parseInt(asr);
+ if (ACTIVATION_REGISTRY_PORT <= 0)
+ throw new InternalError("Invalid " + asr + " value, "
+ + ACTIVATION_REGISTRY_PORT);
+ }
+ catch (NumberFormatException e)
+ {
+ throw new InternalError("Unable to parse " + asr
+ + " to integer");
+ }
+ }
+ else
+ ACTIVATION_REGISTRY_PORT = ActivationSystem.SYSTEM_PORT;
+
+ // Expect the naming service running first.
+ // The local host may want to use the shared registry
+ Registry r = LocateRegistry.getRegistry(ACTIVATION_REGISTRY_PORT);
+ ActivationSystem system = (ActivationSystem) r.lookup(ACTIVATION_SYSTEM_NAME);
+ return system;
+ }
+ catch (Exception ex)
+ {
+ system = ActivationSystemTransient.getInstance();
+ }
+
+ return system;
+ }
+}
diff --git a/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java b/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java
index a7bc094..a5c036e 100644
--- a/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java
+++ b/libjava/classpath/gnu/java/rmi/dgc/DGCImpl.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.rmi.dgc;
+import gnu.java.rmi.server.UnicastServer;
import gnu.java.rmi.server.UnicastServerRef;
import java.rmi.RemoteException;
@@ -46,7 +47,8 @@ import java.rmi.dgc.Lease;
import java.rmi.dgc.VMID;
import java.rmi.server.ObjID;
import java.rmi.server.RMISocketFactory;
-import java.util.Hashtable;
+import java.util.Collection;
+import java.util.TimerTask;
/**
* The DGC implementation is used for the server side during the distributed
@@ -68,14 +70,67 @@ public class DGCImpl
*/
/**
+ * Use the serial version UID for interoperability.
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * Protects the array of object Id's for the scheduled period of time
+ * (lease). After the time expires, the protector is automatically discarded,
+ * making the references unprotected and hence applicable for the garbage
+ * collection.
+ */
+ class RefProtector extends TimerTask
+ {
+ /**
+ * The corresponding server references to protect. Each Id may contain
+ * multiple references that are stored to collection.
+ */
+ Collection[] references;
+
+ /**
+ * Create the new instance of the reference protector that protects the
+ * given array of ids and exists for the given period of time.
+ *
+ * @param ids the ids to protect.
+ */
+ RefProtector(ObjID[] ids, long timeToLive)
+ {
+ references = new Collection[ids.length];
+ for (int i = 0; i < ids.length; i++)
+ {
+ references[i] = UnicastServer.getExported(ids[i]);
+ }
+
+ // Schedule the existence.
+ LeaseRenewingTask.timer.schedule(this, timeToLive);
+ }
+
+ /**
+ * Break all links, ensuring easy collection of the references by the gc.
+ */
+ public void run()
+ {
+ for (int i = 0; i < references.length; i++)
+ {
+ references[i].clear();
+ references[i] = null;
+ }
+ }
+ }
+
+ /**
* This defauld lease value is used if the lease value, passed to the
* {@link #dirty} is equal to zero.
*/
static final long LEASE_VALUE = 600000L;
-
- // leaseCache caches a LeaseRecord associated with a vmid
- Hashtable leaseCache = new Hashtable();
-
+
+ /**
+ * Create the new DGC implementation.
+ *
+ * @throws RemoteException if the super constructor throws or the
+ * socket factory fails.
+ */
public DGCImpl() throws RemoteException
{
super(new ObjID(ObjID.DGC_ID), 0, RMISocketFactory.getSocketFactory());
@@ -92,26 +147,20 @@ public class DGCImpl
*/
public Lease dirty(ObjID[] ids, long sequenceNum, Lease lease)
throws RemoteException
- {
- VMID vmid = lease.getVMID();
- if (vmid == null)
- vmid = new VMID();
-
+ {
+ // We do not fill in VMID because in this implementation it is not used.
long leaseValue = lease.getValue();
+
+ // Grant the maximal default lease time if the passed value is zero.
if (leaseValue <= 0)
leaseValue = LEASE_VALUE;
-
- lease = new Lease(vmid, leaseValue);
- LeaseRecord lr = (LeaseRecord) leaseCache.get(vmid);
- if (lr != null)
- lr.reset(leaseValue);
- else
- {
- lr = new LeaseRecord(vmid, leaseValue, ids);
- leaseCache.put(vmid, lr);
- }
- return (lease);
+ // Create (and shedule of the given existence) the new reference
+ // protector.
+ new RefProtector(ids, leaseValue);
+
+ lease = new Lease(lease.getVMID(), leaseValue);
+ return lease;
}
/**
@@ -130,65 +179,4 @@ public class DGCImpl
// TODO implement
}
- /**
- * LeaseRecord associates a vmid to expireTime.
- */
- static class LeaseRecord
- {
- /**
- * The lease id.
- */
- final VMID vmid;
-
- /**
- * The lease expiration time.
- */
- long expireTime;
-
- /**
- * The array of ObjeID's that must be protected from being garbage
- * collected.
- */
- final ObjID [] objects;
-
- /**
- * Create the new lease record.
- *
- * @param vmid lease id.
- * @param leaseValue lease value
- */
- LeaseRecord(VMID vmid, long leaseValue, ObjID [] an_objects)
- {
- this.vmid = vmid;
- reset(leaseValue);
- objects = an_objects;
- }
-
- /**
- * Prolong the expiration time till current time + passed value
- *
- * @param leaseValue the value after that (since the current moment)
- * the lease should expire in the future.
- */
- void reset(long leaseValue)
- {
- long l = System.currentTimeMillis();
- expireTime = l + leaseValue;
- }
-
- /**
- * Check if the lease has been expired.
- *
- * @return true if the lease has been expired, false if it is still valid.
- */
- boolean isExpired()
- {
- long l = System.currentTimeMillis();
- if (l > expireTime)
- return true;
- return false;
- }
-
- } // End of LeaseRecord
-
} // End of DGCImpl
diff --git a/libjava/classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java b/libjava/classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java
new file mode 100644
index 0000000..ffb5560
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java
@@ -0,0 +1,234 @@
+/* LeaseRenewingTask.java -- The task to renew the lease.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.dgc;
+
+import gnu.java.rmi.server.UnicastRef;
+
+import java.lang.ref.WeakReference;
+import java.rmi.dgc.Lease;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.WeakHashMap;
+
+/**
+ * The task to renew the lease to some object reference. The UnicastRef
+ * being renewed is stored as a weak reference. So the presence of the
+ * sheduled task does not prevent it from being garbage collected. If the
+ * reference has not been garbage collected, the task is resheduled after
+ * the lease is renewed.
+ *
+ * @author Audrius Meskauskas (Audriusa@Bioinformatics.org)
+ */
+public class LeaseRenewingTask
+{
+ /**
+ * The sheduled timer task to call the renew() method.
+ */
+ class LeaseTimerTask extends TimerTask
+ {
+ public void run()
+ {
+ renew();
+ }
+ }
+
+ /**
+ * The default requested lease duration time (one minute by default).
+ */
+ public static long REQUEST_LEASE_DURATION = 60000;
+
+ /**
+ * The reference to the UnicastRef that must renew its lease until not
+ * garbage collected. The different members of this list may point to the
+ * different instances of the UnicastRef's, but these references are
+ * pointing to the same remote object (they .equals() returns
+ * true when comparing with each other). Using LinkedList to make
+ * frequent deletions from the middle easy.
+ */
+ LinkedList ref = new LinkedList();
+
+ /**
+ * The granted (or supposed) lease.
+ */
+ Lease lease = new Lease(null, REQUEST_LEASE_DURATION);
+
+ /**
+ * The timer, shared by all lease renewing tasks. The same instance is also
+ * used for the reference protector discarding in DGCImpl.
+ */
+ static Timer timer = new Timer(true);
+
+ /**
+ * Maps the UnicastRef to its renewing task.
+ */
+ static WeakHashMap existingTasks = new WeakHashMap();
+
+ /**
+ * Creates the lease renewing task that renews the lease of the given
+ * UnicastRef until it is not collected. This constructor requests the lease
+ * value from the server and schedules the lease renewal action.
+ *
+ * @param renewIt the reference that must be renewed.
+ */
+ public LeaseRenewingTask(UnicastRef renewIt)
+ {
+ lease = notifyDGC(renewIt);
+ if (lease != null)
+ {
+ schedule(lease);
+ ref.add(new WeakReference(renewIt));
+ }
+ }
+
+ /**
+ * Schedule periodic leases for the given UnicastRef reference.
+ *
+ * @param renewIt the reference, for that the leases must be scheduled.
+ */
+ public static void scheduleLeases(UnicastRef renewIt)
+ {
+ // No need to schedule leases for null.
+ if (renewIt == null)
+ return;
+ try {
+ synchronized (existingTasks)
+ {
+ // Check maybe the task for refreshing this remote object already
+ // exists.
+ LeaseRenewingTask task = (LeaseRenewingTask) existingTasks.get(renewIt);
+
+ if (task != null)
+ {
+ // Extend the reference list only. The scheduling must be
+ // alredy done with the previous lease.
+ synchronized (task.ref)
+ {
+ task.ref.add(new WeakReference(renewIt));
+ }
+ }
+ else
+ existingTasks.put(renewIt, new LeaseRenewingTask(renewIt));
+ }
+ }
+ catch (Exception ex)
+ {
+ InternalError ierr = new InternalError("Lease for "+renewIt);
+ ierr.initCause(ex);
+ throw ierr;
+ }
+ }
+
+ /**
+ * Shedule the renewing call, taking into consideration that the following
+ * lease was granted.
+ *
+ * @param lease the lease that was granted.
+ */
+ public void schedule(Lease lease)
+ {
+ long value = lease.getValue();
+
+ // Shedule a 10 % earlier because some time is needed for the message
+ // to reach the server.
+ long reduced = (value * 90)/100;
+ if (reduced == 0)
+ reduced = value;
+
+ timer.schedule(new LeaseTimerTask(), reduced);
+ }
+
+ /**
+ * Renew the lease.
+ */
+ public void renew()
+ {
+ Object renewIt = null;
+ // Iterate throw the list of associated references. If all are
+ // discarded, there is no need to renew.
+ synchronized (ref)
+ {
+ Iterator iter = ref.iterator();
+ WeakReference w;
+ while (iter.hasNext() && renewIt == null)
+ {
+ w = (WeakReference) iter.next();
+ renewIt = w.get();
+ if (renewIt == null)
+ // Discard the weak reference if its target has been garbage
+ // collected.
+ iter.remove();
+ }
+ }
+
+ if (renewIt!=null)
+ {
+ Lease lease = notifyDGC( (UnicastRef) renewIt);
+
+ // Schedule the next renewing session.
+ if (lease!=null)
+ schedule(lease);
+ }
+ {
+ // All references collected - discard this entry.
+ }
+ }
+
+ /**
+ * Notify DGC that we still hold this reference.
+ *
+ * @param renewIt the reference we still have (must not be null).
+ */
+ public Lease notifyDGC(UnicastRef renewIt)
+ {
+ try
+ {
+ return renewIt.notifyDGC(lease);
+ }
+ catch (Exception e)
+ {
+ // Failed to notify.
+ // TODO Take some relevant action in the case if we failed
+ // to notify the remote object owner.
+ return null;
+ }
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/rmi/server/ActivatableRef.java b/libjava/classpath/gnu/java/rmi/server/ActivatableRef.java
new file mode 100644
index 0000000..d191c0c
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/server/ActivatableRef.java
@@ -0,0 +1,175 @@
+/* ActivatableRef.java -- Activatable server reference
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.server;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationID;
+import java.rmi.server.ObjID;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RemoteObject;
+import java.rmi.server.RemoteObjectInvocationHandler;
+import java.rmi.server.RemoteRef;
+
+/**
+ * The activatable reference works like UnicastRef, but if the remote object
+ * appears to be not accessible, it tries to reactivate it before reporting
+ * any errors. Apart the fields of the UnicastRef, the activatable reference
+ * contains the ActivationID that is used for this activation.
+ *
+ * @author Audrius Meskauskas (Audriusa@Bioinformatics.org)
+ */
+public class ActivatableRef extends UnicastRef
+{
+ /**
+ * Use serial version UID for iteroperability
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * The activation id.
+ */
+ ActivationID actId;
+
+ /**
+ * Delegate call to the superclass.
+ */
+ public ActivatableRef()
+ {
+ super();
+ }
+
+ /**
+ * Delegate call to the superclass.
+ */
+ public ActivatableRef(ObjID objid, String host, int port,
+ RMIClientSocketFactory csf)
+ {
+ super(objid, host, port, csf);
+ }
+
+ /**
+ * Delegate call to the superclass.
+ */
+ public ActivatableRef(ObjID objid)
+ {
+ super(objid);
+ }
+
+ /**
+ * Get the referencing class.
+ */
+ public String getRefClass(ObjectOutput out)
+ {
+ return "ActivatableRef";
+ }
+
+ /**
+ * Read the content from the input stream.
+ */
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException
+ {
+ super.readExternal(in);
+ actId = (ActivationID) in.readObject();
+ }
+
+ /**
+ * Write the content to the output stream.
+ */
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ super.writeExternal(out);
+ out.writeObject(actId);
+ }
+
+ /**
+ * Invoke the remote method on the given object and try to activate the object
+ * if it is not reacheable with the current manager.
+ */
+ protected Object invokeCommon(Remote obj, Method method, Object[] params,
+ int opnum, long hash) throws Exception
+ {
+ UnicastConnection conn;
+ try
+ {
+ conn = manager.getConnection();
+ }
+ catch (IOException e1)
+ {
+ // Connection failed: try to activate.
+ Remote reactivated = actId.activate(false);
+
+ if (reactivated instanceof RemoteObject)
+ {
+ RemoteRef ref = ((RemoteObject) reactivated).getRef();
+ manager = ((UnicastRef) ref).manager;
+ }
+ else if (Proxy.isProxyClass(reactivated.getClass()))
+ {
+ RemoteObjectInvocationHandler hander =
+ (RemoteObjectInvocationHandler)
+ Proxy.getInvocationHandler(reactivated);
+
+ RemoteRef ref = hander.getRef();
+ manager = ((UnicastRef) ref).manager;
+ }
+ else
+ throw new ActivationException("Activating into unsupported class "
+ + reactivated.getClass());
+
+ try
+ {
+ conn = manager.getConnection();
+ }
+ catch (IOException e2)
+ {
+ throw new RemoteException("connection failed to host: "
+ + manager.serverName, e1);
+ }
+ }
+ return invokeCommon(conn, obj, method, params, opnum, hash);
+ }
+}
diff --git a/libjava/classpath/gnu/java/rmi/server/ActivatableServerRef.java b/libjava/classpath/gnu/java/rmi/server/ActivatableServerRef.java
new file mode 100644
index 0000000..09595ec
--- /dev/null
+++ b/libjava/classpath/gnu/java/rmi/server/ActivatableServerRef.java
@@ -0,0 +1,227 @@
+/* ActivatableServerRef.java -- The activatable server reference
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.rmi.server;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationID;
+import java.rmi.server.ObjID;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RemoteStub;
+import java.rmi.server.Skeleton;
+
+/**
+ * The activatable server reference works like UnicastServerReference, but it
+ * additionally activates the associated object on demand, during the first
+ * incoming call. When UnicastServerReference takes the working reference,
+ * the ActivatableServerRef takes the activation id instead.
+ *
+ * @author Audrius Meskauskas (Audriusa@Bioinformatics.org)
+ */
+public class ActivatableServerRef extends UnicastServerRef
+{
+ /**
+ * Use SVUID for interoperability
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * The object activation id.
+ */
+ public ActivationID actId;
+
+ /**
+ * Used by serialization only
+ */
+ public ActivatableServerRef()
+ {
+ super();
+ }
+
+ /**
+ * Create the new activatable server reference that will activate object on
+ * the first call using the given activation id.
+ */
+ public ActivatableServerRef(ObjID id, ActivationID anId, int aPort,
+ RMIServerSocketFactory ssFactory)
+ throws RemoteException
+ {
+ super(id, aPort, ssFactory);
+ actId = anId;
+
+ // The object ID will be placed in the object map and should deliver
+ // incoming call to {@link #incommingMessageCall}. The object itself
+ // is currently null.
+ UnicastServer.exportActivatableObject(this);
+ }
+
+ /**
+ * Inactivate the object (stop the server).
+ */
+ public void inactivate()
+ {
+ manager.stopServer();
+ }
+
+ /**
+ * Activate the object (normally during the first call).
+ */
+ protected void activate() throws RemoteException
+ {
+ try
+ {
+ Remote self = actId.activate(false);
+
+ // This will call UnicastServer.exportObject, replacing null by
+ // the activated object (self) in the object map.
+ exportObject(self);
+ }
+ catch (RemoteException rex)
+ {
+ throw rex;
+ }
+ catch (Exception exc)
+ {
+ RemoteException rx = new RemoteException("Activation failed.");
+ rx.detail = exc;
+ throw rx;
+ }
+ }
+
+ /**
+ * If the object is not active, activate it first.
+ */
+ public Object incomingMessageCall(UnicastConnection conn, int method,
+ long hash) throws Exception
+ {
+ if (myself == null)
+ activate();
+ return super.incomingMessageCall(conn, method, hash);
+ }
+
+ /**
+ * Export object and ensure it is present in the server activation table
+ * as well.
+ */
+ public Remote exportObject(Remote obj) throws RemoteException
+ {
+ Remote r = super.exportObject(obj);
+ UnicastServer.registerActivatable(this);
+ return r;
+ }
+
+ /**
+ * Export object and ensure it is present in the server activation table as
+ * well.
+ *
+ * @param aClass the class being exported, must implement Remote.
+ */
+ public Remote exportClass(Class aClass) throws RemoteException
+ {
+ if (!Remote.class.isAssignableFrom(aClass))
+ throw new InternalError(aClass.getName()+" must implement Remote");
+
+ String ignoreStubs;
+
+ ClassLoader loader =aClass.getClassLoader();
+
+ // Stubs are always searched for the bootstrap classes that may have
+ // obsolete pattern and may still need also skeletons.
+ if (loader==null)
+ ignoreStubs = "false";
+ else
+ ignoreStubs = System.getProperty("java.rmi.server.ignoreStubClasses",
+ "false");
+
+ if (! ignoreStubs.equals("true"))
+ {
+ // Find and install the stub
+ Class cls = aClass;
+
+ // where ist the _Stub? (check superclasses also)
+ Class expCls = expCls = findStubSkelClass(cls);
+
+ if (expCls != null)
+ {
+ stub = (RemoteStub) getHelperClass(expCls, "_Stub");
+ // Find and install the skeleton (if there is one)
+ skel = (Skeleton) getHelperClass(expCls, "_Skel");
+ }
+ }
+
+ if (stub == null)
+ stub = createProxyStub(aClass, this);
+
+ // Build hash of methods which may be called.
+ buildMethodHash(aClass, true);
+
+ UnicastServer.registerActivatable(this);
+ return stub;
+ }
+
+ /**
+ * Get the referencing class.
+ */
+ public String getRefClass(ObjectOutput out)
+ {
+ return "ActivatableRef";
+ }
+
+ /**
+ * Read the content from the input stream.
+ */
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+ {
+ super.readExternal(in);
+ actId = (ActivationID) in.readObject();
+ }
+
+ /**
+ * Write the content to the output stream.
+ */
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ super.writeExternal(out);
+ out.writeObject(actId);
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/rmi/server/CombinedClassLoader.java b/libjava/classpath/gnu/java/rmi/server/CombinedClassLoader.java
index 3d2e37d..6225fb3 100644
--- a/libjava/classpath/gnu/java/rmi/server/CombinedClassLoader.java
+++ b/libjava/classpath/gnu/java/rmi/server/CombinedClassLoader.java
@@ -77,8 +77,8 @@ public class CombinedClassLoader extends ClassLoader
while (iter.hasNext())
{
cl = iter.next();
- if (!sLoaders.contains(cl))
- sLoaders.add(iter.next());
+ if (cl!=null && !sLoaders.contains(cl))
+ sLoaders.add(cl);
}
loaders = new ClassLoader[sLoaders.size()];
@@ -96,7 +96,7 @@ public class CombinedClassLoader extends ClassLoader
{
try
{
- return findClass(name);
+ return loaders[i].loadClass(name);
}
catch (ClassNotFoundException e)
{
@@ -107,27 +107,13 @@ public class CombinedClassLoader extends ClassLoader
}
/**
- * Find the library with the given name
- */
- protected String findLibrary(String name)
- {
- for (int i = 0; i < loaders.length; i++)
- {
- String lib = findLibrary(name);
- if (lib != null)
- return lib;
- }
- return super.findLibrary(name);
- }
-
- /**
* Find resource with the given name.
*/
protected URL findResource(String name)
{
for (int i = 0; i < loaders.length; i++)
{
- URL resource = findResource(name);
+ URL resource = loaders[i].getResource(name);
if (resource != null)
return resource;
}
@@ -141,7 +127,7 @@ public class CombinedClassLoader extends ClassLoader
{
for (int i = 0; i < loaders.length; i++)
{
- Enumeration resource = findResources(name);
+ Enumeration resource = loaders[i].getResources(name);
if (resource != null)
return resource;
}
diff --git a/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java b/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java
index 08f6a9b..9715d4a 100644
--- a/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java
+++ b/libjava/classpath/gnu/java/rmi/server/UnicastConnectionManager.java
@@ -311,6 +311,14 @@ private UnicastConnection getClientConnection() throws IOException {
}
/**
+ * Get the string representation, describing the connection.
+ */
+public String toString()
+{
+ return serverName+":"+serverPort+" ("+serverobj+")";
+}
+
+/**
* Discard a connection when we're done with it - maybe it can be
* recycled.
*/
@@ -443,4 +451,12 @@ public boolean equals(Object obj) {
return (false);
}
+ /**
+ * Get the string representation, describing the connection.
+ */
+ public String toString()
+ {
+ return host+":"+port+" ("+other+")";
+ }
+
}
diff --git a/libjava/classpath/gnu/java/rmi/server/UnicastRef.java b/libjava/classpath/gnu/java/rmi/server/UnicastRef.java
index 8097a04..def1acd 100644
--- a/libjava/classpath/gnu/java/rmi/server/UnicastRef.java
+++ b/libjava/classpath/gnu/java/rmi/server/UnicastRef.java
@@ -1,5 +1,5 @@
/* UnicastRef.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005
+ Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005, 2006
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,8 +36,11 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package gnu.java.rmi.server;
+import gnu.java.rmi.dgc.LeaseRenewingTask;
+
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -50,6 +53,7 @@ import java.lang.reflect.Method;
import java.rmi.ConnectException;
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.dgc.Lease;
import java.rmi.server.ObjID;
import java.rmi.server.Operation;
import java.rmi.server.RMIClientSocketFactory;
@@ -59,221 +63,462 @@ import java.rmi.server.RemoteRef;
import java.rmi.server.UID;
public class UnicastRef
- implements RemoteRef, ProtocolConstants {
-
-public ObjID objid;
-UnicastConnectionManager manager;
-
-/**
- * Used by serialization, and let subclass capable of having default constructor
- */
-// must be public otherwise java.rmi.RemoteObject cannot instantiate this class
-// -- iP
-public UnicastRef() {
-}
-
-public UnicastRef(ObjID objid, String host, int port, RMIClientSocketFactory csf) {
- this(objid);
- manager = UnicastConnectionManager.getInstance(host, port, csf);
-}
-
-public UnicastRef(ObjID objid) {
- this.objid = objid;
-}
-
-public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception {
- // Check if client and server are in the same VM, then local call can be used to
+ implements RemoteRef, ProtocolConstants
+{
+
+ /**
+ * Use serial version UID for iteroperability
+ */
+ private static final long serialVersionUID = 1;
+
+ public ObjID objid;
+
+ UnicastConnectionManager manager;
+
+ /**
+ * Used by serialization, and let subclass capable of having default
+ * constructor
+ */
+ // must be public otherwise java.rmi.RemoteObject cannot instantiate this
+ // class
+ // -- iP
+ public UnicastRef()
+ {
+ }
+
+ public UnicastRef(ObjID objid, String host, int port,
+ RMIClientSocketFactory csf)
+ {
+ this(objid);
+ manager = UnicastConnectionManager.getInstance(host, port, csf);
+ }
+
+ public UnicastRef(ObjID objid)
+ {
+ this.objid = objid;
+ }
+
+ public Object invoke(Remote obj, Method method, Object[] params, long opnum)
+ throws Exception
+ {
+ // Check if client and server are in the same VM, then local call can be
+ // used to
// replace remote call, but it's somewhat violating remote semantic.
Object svrobj = manager.serverobj;
-
- // Make sure that the server object is compatible. It could be loaded from a different
+
+ // Make sure that the server object is compatible. It could be loaded from a
+ // different
// classloader --iP
- if(svrobj != null && method.getDeclaringClass().isInstance(svrobj)){
- //local call
- Object ret = null;
- try{
- ret = method.invoke(svrobj, params);
- }catch(InvocationTargetException e){
- throw (Exception)e.getTargetException();
- }
- //System.out.println("\n\n ***** local call: " + method + "\nreturn: " + ret + "\n\n");
- return ret;
- }
- //System.out.println("***************** remote call:" + manager.serverPort);
- return (invokeCommon(obj, method, params, -1, opnum));
-}
+ if (svrobj != null && method.getDeclaringClass().isInstance(svrobj))
+ {
+ // local call
+ Object ret = null;
+ try
+ {
+ ret = method.invoke(svrobj, params);
+ }
+ catch (InvocationTargetException e)
+ {
+ throw (Exception) e.getTargetException();
+ }
+ // System.out.println("\n\n ***** local call: " + method + "\nreturn: "
+ // + ret + "\n\n");
+ return ret;
+ }
+ // System.out.println("***************** remote call:" +
+ // manager.serverPort);
+ return (invokeCommon(obj, method, params, - 1, opnum));
+ }
+
+ /**
+ * The ordinary number of the DGC messages.
+ */
+ static long dgcSequence;
+
+ /**
+ * The DGC object id, also serves as a synchronization target to increment the
+ * dgcSequence safely.
+ */
+ static final ObjID dgcId = new ObjID(ObjID.DGC_ID);
+
+ ObjID[] this_id;
+
+ /**
+ * The number of the method "dirty" in the DGC.
+ */
+ static int DIRTY = 1;
+
+ /**
+ * The DGC interface hash code.
+ */
+ static final long dgcInterfaceHash = - 669196253586618813L;
+
+ /**
+ * Notify the DGC of the remote side that we still hold this object.
+ */
+ public Lease notifyDGC(Lease lease) throws Exception
+ {
+ long seq;
+ synchronized (dgcId)
+ {
+ seq = dgcSequence++;
+ }
+
+ if (this_id == null)
+ this_id = new ObjID[] { objid };
-private Object invokeCommon(Remote obj, Method method, Object[] params, int opnum, long hash) throws Exception {
- UnicastConnection conn;
- try {
- conn = manager.getConnection();
- }
- catch (IOException e1) {
- throw new RemoteException("connection failed to host: " + manager.serverName, e1);
- }
-
- ObjectOutputStream out;
- DataOutputStream dout;
- try {
- dout = conn.getDataOutputStream();
- dout.writeByte(MESSAGE_CALL);
-
- out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
-
- objid.write(out);
- out.writeInt(opnum);
- out.writeLong(hash);
-
- // must handle primitive class and their wrapper classes
- Class clss[] = method.getParameterTypes();
- for(int i = 0; i < clss.length; i++)
- ((RMIObjectOutputStream)out).writeValue(params[i], clss[i]);
-
- out.flush();
- }
- catch (IOException e2) {
- throw new RemoteException("call failed: ", e2);
- }
-
- int returncode;
- Object returnval;
- DataInputStream din;
- ObjectInputStream in;
- UID ack;
- try {
- din = conn.getDataInputStream();
-
- if ((returncode = din.readUnsignedByte()) != MESSAGE_CALL_ACK) {
- conn.disconnect();
- throw new RemoteException("Call not acked:" + returncode);
- }
-
- in = conn.startObjectInputStream(); // (re)start ObjectInputStream
- returncode = in.readUnsignedByte();
- ack = UID.read(in);
-
- Class cls = method.getReturnType();
-
- if (returncode == RETURN_NACK) {
- returnval = in.readObject(); // get Exception
-
- } else if(cls == Void.TYPE) {
+ UnicastConnection conn;
+ try
+ {
+ conn = manager.getConnection();
+ }
+ catch (IOException e1)
+ {
+ throw new RemoteException("connection failed to host: "
+ + manager.serverName, e1);
+ }
+
+ ObjectOutputStream out;
+ DataOutputStream dout;
+ try
+ {
+ dout = conn.getDataOutputStream();
+ dout.writeByte(MESSAGE_CALL);
+
+ out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
+
+ dgcId.write(out);
+ // The number of the operation is 1 ("dirty")
+ out.writeInt(DIRTY);
+ out.writeLong(dgcInterfaceHash);
+
+ RMIObjectOutputStream rout = (RMIObjectOutputStream) out;
+
+ rout.writeValue(this_id, this_id.getClass());
+ rout.writeLong(seq);
+ rout.writeValue(lease, lease.getClass());
+
+ out.flush();
+ }
+ catch (IOException e2)
+ {
+ throw new RemoteException("DGC call failed: ", e2);
+ }
+
+ int returncode;
+ Object returnval;
+ DataInputStream din;
+ ObjectInputStream in;
+ UID ack;
+ try
+ {
+ din = conn.getDataInputStream();
+
+ if ((returncode = din.readUnsignedByte()) != MESSAGE_CALL_ACK)
+ {
+ conn.disconnect();
+ throw new RemoteException("DGC Call not acked:" + returncode);
+ }
+
+ in = conn.startObjectInputStream(); // (re)start ObjectInputStream
+ returncode = in.readUnsignedByte();
+ ack = UID.read(in);
+
+ if (returncode == RETURN_NACK)
+ {
+ returnval = in.readObject(); // get Exception
+
+ }
+ else
+ {
+ returnval = ((RMIObjectInputStream) in).readValue(Lease.class);
+ }
+ }
+ catch (IOException e3)
+ {
+ throw new RemoteException("DGC call return failed: ", e3);
+ }
+
+ manager.discardConnection(conn);
+
+ if (returncode != RETURN_ACK && returnval != null)
+ {
+ if (returncode == RETURN_NACK)
+ throw (Exception) returnval;
+ else
+ throw new RemoteException("DGC unexpected returncode: " + returncode);
+ }
+
+ return (Lease) returnval;
+ }
+ /**
+ * Invoke the remote method on the given object. This part is overridden by
+ * the activatable objects.
+ */
+ protected Object invokeCommon(Remote obj, Method method, Object[] params,
+ int opnum, long hash) throws Exception
+ {
+ UnicastConnection conn;
+ try
+ {
+ conn = manager.getConnection();
+ return invokeCommon(conn, obj, method, params, opnum, hash);
+ }
+ catch (IOException e1)
+ {
+ throw new RemoteException("connection failed to host: "
+ + manager.serverName, e1);
+ }
+ }
+
+ /**
+ * Invoke the remote method on the given object when connection is already
+ * established.
+ */
+ protected Object invokeCommon(UnicastConnection conn, Remote obj,
+ Method method, Object[] params, int opnum,
+ long hash) throws Exception
+ {
+ ObjectOutputStream out;
+ DataOutputStream dout;
+ try
+ {
+ dout = conn.getDataOutputStream();
+ dout.writeByte(MESSAGE_CALL);
+
+ out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
+
+ objid.write(out);
+ out.writeInt(opnum);
+ out.writeLong(hash);
+
+ // must handle primitive class and their wrapper classes
+ Class clss[] = method.getParameterTypes();
+ for (int i = 0; i < clss.length; i++)
+ ((RMIObjectOutputStream) out).writeValue(params[i], clss[i]);
+
+ out.flush();
+ }
+ catch (IOException e2)
+ {
+ throw new RemoteException("call failed: ", e2);
+ }
+
+ int returncode;
+ Object returnval;
+ DataInputStream din;
+ ObjectInputStream in;
+ UID ack;
+ try
+ {
+ din = conn.getDataInputStream();
+
+ if ((returncode = din.readUnsignedByte()) != MESSAGE_CALL_ACK)
+ {
+ conn.disconnect();
+ throw new RemoteException("Call not acked:" + returncode);
+ }
+
+ in = conn.startObjectInputStream(); // (re)start ObjectInputStream
+ returncode = in.readUnsignedByte();
+ ack = UID.read(in);
+
+ Class cls = method.getReturnType();
+
+ if (returncode == RETURN_NACK)
+ {
+ returnval = in.readObject(); // get Exception
+
+ }
+ else if (cls == Void.TYPE)
+ {
returnval = null;
- // in.readObject() // not required! returntype 'void' means no field is returned.
- } else {
- returnval = ((RMIObjectInputStream)in).readValue(cls); // get returnvalue
- }
- } catch (IOException e3) {
- //for debug: e3.printStackTrace();
- throw new RemoteException("call return failed: ", e3);
- }
-
- /* if DGCAck is necessary??
- //According to RMI wire protocol, send a DGCAck
- // to indicate receiving return value
- dout.writeByte(MESSAGE_DGCACK);
- ack.write(dout);
- out.flush();
- */
-
- manager.discardConnection(conn);
-
- if (returncode != RETURN_ACK && returnval != null) {
- if (returncode == RETURN_NACK) throw (Exception)returnval;
- else throw new RemoteException("unexpected returncode: " + returncode);
- }
-
- return (returnval);
-}
-
-/**
- * @deprecated
- */
-public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException {
+ // in.readObject() // not required! returntype 'void' means no field
+ // is returned.
+ }
+ else
+ {
+ returnval = ((RMIObjectInputStream) in).readValue(cls); // get
+ // returnvalue
+ }
+ }
+ catch (IOException e3)
+ {
+ // for debug: e3.printStackTrace();
+ throw new RemoteException("call return failed: ", e3);
+ }
+
+ /*
+ * if DGCAck is necessary?? //According to RMI wire protocol, send a DGCAck //
+ * to indicate receiving return value dout.writeByte(MESSAGE_DGCACK);
+ * ack.write(dout); out.flush();
+ */
+
+ manager.discardConnection(conn);
+
+ if (returncode != RETURN_ACK && returnval != null)
+ {
+ if (returncode == RETURN_NACK)
+ throw (Exception) returnval;
+ else
+ throw new RemoteException("unexpected returncode: " + returncode);
+ }
+
+ return (returnval);
+ }
+
+ /**
+ * @deprecated
+ */
+ public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum,
+ long hash) throws RemoteException
+ {
UnicastConnection conn;
-
- try {
- conn = manager.getConnection();
- }
- catch (IOException e1) {
- throw new ConnectException("connection failed to host: " + manager.serverName, e1);
- }
-
- //obj: useless?
-
- return (new UnicastRemoteCall(conn, objid, opnum, hash));
-}
-
-/**
- * @deprecated
- */
-public void invoke(RemoteCall call) throws Exception {
- UnicastRemoteCall c = (UnicastRemoteCall)call;
- call.executeCall();
-}
-/**
- * @deprecated
- */
-public void done(RemoteCall call) throws RemoteException {
- UnicastRemoteCall c = (UnicastRemoteCall)call;
- try{
- c.done();
- } catch(IOException e){}
+ try
+ {
+ conn = manager.getConnection();
+ }
+ catch (IOException e1)
+ {
+ throw new ConnectException("connection failed to host: "
+ + manager.serverName, e1);
+ }
+
+ // obj: useless?
+
+ return (new UnicastRemoteCall(conn, objid, opnum, hash));
+ }
+
+ /**
+ * @deprecated
+ */
+ public void invoke(RemoteCall call) throws Exception
+ {
+ UnicastRemoteCall c = (UnicastRemoteCall) call;
+ call.executeCall();
+ }
+
+ /**
+ * @deprecated
+ */
+ public void done(RemoteCall call) throws RemoteException
+ {
+ UnicastRemoteCall c = (UnicastRemoteCall) call;
+ try
+ {
+ c.done();
+ }
+ catch (IOException e)
+ {
+ }
UnicastConnection conn = c.getConnection();
- manager.discardConnection(conn);
-}
-
-public void writeExternal(ObjectOutput out) throws IOException {
- if (manager == null) {
- throw new IOException("no connection");
- }
- manager.write(out);
- objid.write(out);
- // This byte is somewhat confusing when interoperating with JDK
- out.writeByte(0); //RETURN_ACK);
-}
-
-public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- manager = UnicastConnectionManager.read(in);
- objid = ObjID.read(in);
- byte ack = in.readByte();
- // This byte is somewhat confusing when interoperating with JDK
- if (ack != RETURN_ACK && ack != 0/*jdk ack value*/) {
- throw new IOException("no ack found");
- }
-}
-
-public boolean remoteEquals(RemoteRef ref) {
- throw new Error("Not implemented");
-}
-
-public int remoteHashCode() {
- throw new Error("Not implemented");
-}
-
-public String getRefClass(ObjectOutput out) {
- return ("UnicastRef");
-}
-
-public String remoteToString() {
- throw new Error("Not implemented");
-}
-
-public void dump(UnicastConnection conn) {
- try {
- DataInputStream din = conn.getDataInputStream();
- for (;;) {
- int b = din.readUnsignedByte();
- System.out.print(Integer.toHexString(b));
- if (b >= 32 && b < 128) {
- System.out.print(": " + (char)b);
- }
- System.out.println();
- }
- }
- catch (IOException _) {
- }
-}
+ manager.discardConnection(conn);
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ if (manager == null)
+ {
+ throw new IOException("no connection");
+ }
+ manager.write(out);
+ objid.write(out);
+ // This byte is somewhat confusing when interoperating with JDK
+ out.writeByte(0); // RETURN_ACK);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException
+ {
+ manager = UnicastConnectionManager.read(in);
+ objid = ObjID.read(in);
+ byte ack = in.readByte();
+ // This byte is somewhat confusing when interoperating with JDK
+ if (ack != RETURN_ACK && ack != 0/* jdk ack value */)
+ {
+ throw new IOException("no ack found");
+ }
+
+ // Notify the DGC of the remote side that we hold the reference to the
+ // received object. Do not notify if the client and server are on the
+ // same virtual machine.
+ if (manager.serverobj == null)
+ LeaseRenewingTask.scheduleLeases(this);
+ }
+
+ public boolean remoteEquals(RemoteRef ref)
+ {
+ throw new Error("Not implemented");
+ }
+
+ public int remoteHashCode()
+ {
+ throw new Error("Not implemented");
+ }
+
+ public String getRefClass(ObjectOutput out)
+ {
+ return ("UnicastRef");
+ }
+
+ /**
+ * Return the string representing the remote reference information.
+ */
+ public String remoteToString()
+ {
+ if (manager!=null)
+ return manager.toString();
+ else
+ return "null manager";
+ }
+
+ public void dump(UnicastConnection conn)
+ {
+ try
+ {
+ DataInputStream din = conn.getDataInputStream();
+ for (;;)
+ {
+ int b = din.readUnsignedByte();
+ System.out.print(Integer.toHexString(b));
+ if (b >= 32 && b < 128)
+ {
+ System.out.print(": " + (char) b);
+ }
+ System.out.println();
+ }
+ }
+ catch (IOException _)
+ {
+ }
+ }
+
+ /**
+ * Check if this UnicastRef points to the object as the passed UnicastRef.
+ * Both the object Id and manager must be the same.
+ *
+ * @return true if the passed reference points to the same remote object as
+ * this reference, false otherwise.
+ */
+ public boolean equals(Object other)
+ {
+ if (other instanceof UnicastRef)
+ {
+ UnicastRef r = (UnicastRef) other;
+ return r.manager.equals(manager) && r.objid.equals(objid);
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Get the hash code of this UnicastRef, combining hash code of the manager
+ * with hash code of the object id.
+ */
+ public int hashCode()
+ {
+ return manager.hashCode() ^ objid.hashCode();
+ }
}
diff --git a/libjava/classpath/gnu/java/rmi/server/UnicastServer.java b/libjava/classpath/gnu/java/rmi/server/UnicastServer.java
index a8da725..7fe5395 100644
--- a/libjava/classpath/gnu/java/rmi/server/UnicastServer.java
+++ b/libjava/classpath/gnu/java/rmi/server/UnicastServer.java
@@ -40,6 +40,7 @@ exception statement from your version. */
package gnu.java.rmi.server;
import gnu.java.rmi.dgc.DGCImpl;
+import gnu.java.util.WeakIdentityHashMap;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -49,122 +50,272 @@ import java.rmi.NoSuchObjectException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.ServerError;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationID;
import java.rmi.server.ObjID;
import java.rmi.server.UID;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
-import java.util.Map;
import java.util.Hashtable;
-import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.WeakHashMap;
public class UnicastServer
- implements ProtocolConstants {
+ implements ProtocolConstants
+{
-static private Hashtable objects = new Hashtable(); //mapping OBJID to server ref
-static private Map refcache = Collections.synchronizedMap(new IdentityHashMap()); //mapping obj itself to server ref
-static private DGCImpl dgc;
+ /**
+ * Mapping OBJID to server ref by .equals().
+ */
+ static private Map objects = Collections.synchronizedMap(new WeakHashMap());
-public static void exportObject(UnicastServerRef obj) {
- startDGC();
- objects.put(obj.objid, obj);
- refcache.put(obj.myself, obj);
- obj.manager.startServer();
-}
+ /**
+ * Mapping obj itself to server ref by identity.
+ */
+ static private Map refcache = Collections.synchronizedMap(new WeakIdentityHashMap());
+
+ /**
+ * Mapping the registered activatable objects into they server references.
+ */
+ public static Map actIds = new Hashtable();
+
+ /**
+ * The reference to the local distributed garbage collector.
+ */
+ static private DGCImpl dgc;
+
+ /**
+ * Connect this server reference to the server, allowing the local
+ * implementation, associated with this object, to receive remote calls.
+ *
+ * @param obj the server reference, encloses the (usually local) remote
+ * object.
+ */
+ public static void exportObject(UnicastServerRef obj)
+ {
+ startDGC();
+ objects.put(obj.objid, obj);
+ refcache.put(obj.myself, obj);
+ obj.manager.startServer();
+ }
+
+ /**
+ * Register the activatable object into the table of the activatable
+ * objects.
+ */
+ public static void registerActivatable(ActivatableServerRef ref)
+ {
+ actIds.put(ref.actId, ref);
+ }
+
+ /**
+ * Export tha activatable object. The object id is placed into the map,
+ * but the object itself not. This is enough to deliver call to
+ * the ref.incomingMessageCall where the object will be instantiated,
+ * if not present.
+ */
+ public static void exportActivatableObject(ActivatableServerRef ref)
+ {
+ startDGC();
+ objects.put(ref.objid, ref);
+ ref.manager.startServer();
+ actIds.put(ref.actId, ref);
+ }
+
+
+ /**
+ * Get the activatable server reference that is handling activation of the
+ * given activation id.
+ */
+ public static ActivatableServerRef getActivatableRef(ActivationID id)
+ throws ActivationException
+ {
+ ActivatableServerRef ref = (ActivatableServerRef) actIds.get(id);
+ if (ref == null)
+ throw new ActivationException(id + " was not registered with this server");
+ return ref;
+ }
+
+ /**
+ * Unregister the previously registered activatable server reference.
+ */
+ public static void unregisterActivatable(ActivationID id)
+ {
+ actIds.remove(id);
+ }
+
+ // FIX ME: I haven't handle force parameter
+ /**
+ * Remove the given server reference. The remote object, associated with
+ * this reference, will no longer receive remote calls via this server.
+ */
+ public static boolean unexportObject(UnicastServerRef obj, boolean force)
+ {
+ objects.remove(obj.objid);
+ refcache.remove(obj.myself);
+ obj.manager.stopServer();
+
+ if (obj instanceof ActivatableServerRef)
+ {
+ ActivationID id = ((ActivatableServerRef) obj).actId;
+ unregisterActivatable(id);
+ }
+ return true;
+ }
+
+ /**
+ * Get the exported reference of the given Remote. The identity map is used,
+ * the non-null value will only be returned if exactly the passed remote
+ * is part of the registered UnicastServerRef.
+ *
+ * @param remote the Remote that is connected to this server via
+ * {@link UnicastServerRef}.
+ *
+ * @return the UnicastServerRef that is used to connect the passed
+ * remote with this server or null, if this Remote is not connected
+ * to this server.
+ */
+ public static UnicastServerRef getExportedRef(Remote remote)
+ {
+ return (UnicastServerRef) refcache.get(remote);
+ }
-// FIX ME: I haven't handle force parameter
-public static boolean unexportObject(UnicastServerRef obj, boolean force) {
- objects.remove(obj.objid);
- refcache.remove(obj.myself);
- obj.manager.stopServer();
- return true;
-}
+ /**
+ * Get the server references to the object, previously exported via this
+ * server. As the identity map is scanned, more than one reference may match
+ * this Id.
+ *
+ * @param id the id of the exported object
+ * @return the server reference to this object, null if none.
+ */
+ public static Collection getExported(Object id)
+ {
+ synchronized (objects)
+ {
+ ArrayList list = new ArrayList();
+ Iterator iter = objects.entrySet().iterator();
+ Map.Entry e;
+ Object key;
+ while (iter.hasNext())
+ {
+ e = (Map.Entry) iter.next();
+ key = e.getKey();
+ if (key != null && key.equals(id))
+ list.add(e.getValue());
+ }
+ return list;
+ }
+ }
-public static UnicastServerRef getExportedRef(Remote remote){
- return (UnicastServerRef)refcache.get(remote);
-}
+ private static synchronized void startDGC()
+ {
+ if (dgc == null)
+ {
+ try
+ {
+ dgc = new DGCImpl();
+ // Changed DGCImpl to inherit UnicastServerRef directly
+ // ((UnicastServerRef)dgc.getRef()).exportObject(dgc);
+ dgc.exportObject(dgc);
+ }
+ catch (RemoteException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
-private static synchronized void startDGC() {
- if (dgc == null) {
- try {
- dgc = new DGCImpl();
- // Changed DGCImpl to inherit UnicastServerRef directly
- //((UnicastServerRef)dgc.getRef()).exportObject(dgc);
- dgc.exportObject(dgc);
- }
- catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-}
+ public static void dispatch(UnicastConnection conn) throws Exception
+ {
+ switch (conn.getDataInputStream().readUnsignedByte())
+ {
+ case MESSAGE_CALL:
+ incomingMessageCall(conn);
+ break;
+ case MESSAGE_PING:
+ // jdk sends a ping before each method call -> answer it!
+ DataOutputStream out = conn.getDataOutputStream();
+ out.writeByte(MESSAGE_PING_ACK);
+ out.flush();
+ break;
+ default:
+ throw new Exception("bad method type");
+ }
+ }
+
+ /**
+ * This method is invoked when the remote call is received. The method
+ * dispatches the call to the responsible object, connected to this
+ * server via UnicastServerReference.
+ */
+ private static void incomingMessageCall(UnicastConnection conn)
+ throws IOException
+ {
+ ObjectInputStream in = conn.startObjectInputStream(); // (re)start
+ // ObjectInputStream
-public static void dispatch(UnicastConnection conn) throws Exception {
- switch (conn.getDataInputStream().readUnsignedByte()) {
- case MESSAGE_CALL:
- incomingMessageCall(conn);
- break;
- case MESSAGE_PING:
- // jdk sends a ping before each method call -> answer it!
- DataOutputStream out = conn.getDataOutputStream();
- out.writeByte(MESSAGE_PING_ACK);
- out.flush();
- break;
- default:
- throw new Exception("bad method type");
- }
-}
+ ObjID objid = ObjID.read(in);
+ int method = in.readInt();
+ long hash = in.readLong();
-private static void incomingMessageCall(UnicastConnection conn) throws IOException {
- ObjectInputStream in = conn.startObjectInputStream(); // (re)start ObjectInputStream
-
- ObjID objid = ObjID.read(in);
- int method = in.readInt();
- long hash = in.readLong();
-
-//System.out.println("ObjID: " + objid + ", method: " + method + ", hash: " + hash);
-
- // Use the objid to locate the relevant UnicastServerRef
- UnicastServerRef uref = (UnicastServerRef)objects.get(objid);
- Object returnval;
- int returncode = RETURN_ACK;
- // returnval is from Method.invoke(), so we must check the return class to see
- // if it's primitive type
- Class returncls = null;
- if (uref != null) {
- try {
- // Dispatch the call to it.
- returnval = uref.incomingMessageCall(conn, method, hash);
- returncls = uref.getMethodReturnType(method, hash);
- }
- catch (Exception e) {
- returnval = e;
- returncode = RETURN_NACK;
- }
- catch (Error e) {
- returnval = new ServerError ("An Error is thrown while processing the invocation on the server", e);
- returncode = RETURN_NACK;
- }
- }
- else {
- returnval = new NoSuchObjectException("");
- returncode = RETURN_NACK;
- }
-
- conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK);
-
- ObjectOutputStream out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream
-
- out.writeByte(returncode);
- (new UID()).write(out);
-
- //System.out.println("returnval=" + returnval + " returncls=" + returncls);
-
- if(returnval != null && returncls != null)
- ((RMIObjectOutputStream)out).writeValue(returnval, returncls);
-
- // 1.1/1.2 void return type detection:
- else if (!(returnval instanceof RMIVoidValue || returncls == Void.TYPE))
- out.writeObject(returnval);
-
- out.flush();
-}
+ // System.out.println("ObjID: " + objid + ", method: " + method + ", hash: "
+ // + hash);
+
+ // Use the objid to locate the relevant UnicastServerRef
+ UnicastServerRef uref = (UnicastServerRef) objects.get(objid);
+ Object returnval;
+ int returncode = RETURN_ACK;
+ // returnval is from Method.invoke(), so we must check the return class to
+ // see
+ // if it's primitive type
+ Class returncls = null;
+ if (uref != null)
+ {
+ try
+ {
+ // Dispatch the call to it.
+ returnval = uref.incomingMessageCall(conn, method, hash);
+ returncls = uref.getMethodReturnType(method, hash);
+ }
+ catch (Exception e)
+ {
+ returnval = e;
+ returncode = RETURN_NACK;
+ }
+ catch (Error e)
+ {
+ returnval = new ServerError(
+ "Server error, ObjID: " + objid +
+ ", method: " + method + ", hash: "+ hash, e);
+ returncode = RETURN_NACK;
+ }
+ }
+ else
+ {
+ returnval = new NoSuchObjectException("ObjID: " + objid);
+ returncode = RETURN_NACK;
+ }
+
+ conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK);
+
+ ObjectOutputStream out = conn.startObjectOutputStream(); // (re)start
+ // ObjectOutputStream
+
+ out.writeByte(returncode);
+ (new UID()).write(out);
+
+ // System.out.println("returnval=" + returnval + " returncls=" + returncls);
+
+ if (returnval != null && returncls != null)
+ ((RMIObjectOutputStream) out).writeValue(returnval, returncls);
+
+ // 1.1/1.2 void return type detection:
+ else if (! (returnval instanceof RMIVoidValue || returncls == Void.TYPE))
+ out.writeObject(returnval);
+
+ out.flush();
+ }
}
diff --git a/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java b/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java
index dcb12a5..cd891a1 100644
--- a/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java
+++ b/libjava/classpath/gnu/java/rmi/server/UnicastServerRef.java
@@ -58,6 +58,10 @@ import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
+/**
+ * This class connects the local, remotely available (exported) object to
+ * the local RMI server that accepts the remote calls.
+ */
public class UnicastServerRef
extends UnicastRef
{
@@ -80,18 +84,18 @@ public class UnicastServerRef
/**
* The skeleton (if any), associated with the exported remote object.
*/
- private Skeleton skel;
+ protected Skeleton skel;
/**
* The stub, associated with the exported remote object (may be proxy class).
*/
- private Remote stub;
+ protected Remote stub;
/**
* The method table (RMI hash code to method) of the methods of the
* exported object.
*/
- private Hashtable methods = new Hashtable();
+ protected Hashtable methods = new Hashtable();
/**
* Used by serialization.
@@ -125,8 +129,7 @@ public class UnicastServerRef
{
myself = obj;
// Save it to server manager, to let client calls in the same VM to
- // issue
- // local call
+ // issue local call
manager.serverobj = obj;
String ignoreStubs;
@@ -202,7 +205,7 @@ public class UnicastServerRef
*
* @return the class having stub defined, null if none.
*/
- private Class findStubSkelClass(Class startCls)
+ protected Class findStubSkelClass(Class startCls)
{
Class cls = startCls;
@@ -242,7 +245,7 @@ public class UnicastServerRef
* @return the instantiated instance of the helper class or null if the
* helper class cannot be found or instantiated.
*/
- private Object getHelperClass(Class cls, String type)
+ protected Object getHelperClass(Class cls, String type)
{
try
{
@@ -310,7 +313,7 @@ public class UnicastServerRef
* @param build if true, the class methods are added to the table. If
* false, they are removed from the table.
*/
- private void buildMethodHash(Class cls, boolean build)
+ protected void buildMethodHash(Class cls, boolean build)
{
Method[] meths = cls.getMethods();
for (int i = 0; i < meths.length; i++)
@@ -339,7 +342,11 @@ public class UnicastServerRef
else
return null;
}
-
+
+ /**
+ * This method is called from the {@link UnicastServer#incomingMessageCall}
+ * to deliver the remote call to this object.
+ */
public Object incomingMessageCall(UnicastConnection conn, int method,
long hash) throws Exception
{
@@ -353,7 +360,8 @@ public class UnicastServerRef
// meth);
if (meth == null)
{
- throw new NoSuchMethodException();
+ throw new NoSuchMethodException(
+ myself.getClass().getName()+" hash "+hash);
}
ObjectInputStream in = conn.getObjectInputStream();
@@ -413,9 +421,8 @@ public class UnicastServerRef
else
{
if (skel == null)
- {
- throw new NoSuchMethodException();
- }
+ throw new NoSuchMethodException("JDK 1.1 call - Skeleton required");
+
UnicastRemoteCall call = new UnicastRemoteCall(conn);
skel.dispatch(myself, call, method, hash);
if (! call.isReturnValue())
diff --git a/libjava/classpath/gnu/java/security/Properties.java b/libjava/classpath/gnu/java/security/Properties.java
index 813888c..860b7d9 100644
--- a/libjava/classpath/gnu/java/security/Properties.java
+++ b/libjava/classpath/gnu/java/security/Properties.java
@@ -333,9 +333,9 @@ public final class Properties
handleBooleanProperty(DO_RSA_BLINDING);
// re-sync the 'known' properties
- reproducible = new Boolean((String) props.get(REPRODUCIBLE_PRNG)).booleanValue();
- checkForWeakKeys = new Boolean((String) props.get(CHECK_WEAK_KEYS)).booleanValue();
- doRSABlinding = new Boolean((String) props.get(DO_RSA_BLINDING)).booleanValue();
+ reproducible = Boolean.valueOf((String) props.get(REPRODUCIBLE_PRNG)).booleanValue();
+ checkForWeakKeys = Boolean.valueOf((String) props.get(CHECK_WEAK_KEYS)).booleanValue();
+ doRSABlinding = Boolean.valueOf((String) props.get(DO_RSA_BLINDING)).booleanValue();
// This does not change.
props.put(VERSION, Registry.VERSION_STRING);
diff --git a/libjava/classpath/gnu/java/security/Registry.java b/libjava/classpath/gnu/java/security/Registry.java
index efb54e7..0cb9251 100644
--- a/libjava/classpath/gnu/java/security/Registry.java
+++ b/libjava/classpath/gnu/java/security/Registry.java
@@ -159,6 +159,9 @@ public interface Registry
// Padding scheme names and synonyms........................................
+ /** PKCS#5 padding scheme. */
+ String PKCS5_PAD = "pkcs5";
+
/** PKCS#7 padding scheme. */
String PKCS7_PAD = "pkcs7";
diff --git a/libjava/classpath/gnu/java/security/hash/Haval.java b/libjava/classpath/gnu/java/security/hash/Haval.java
index f9f3282..1bf7565 100644
--- a/libjava/classpath/gnu/java/security/hash/Haval.java
+++ b/libjava/classpath/gnu/java/security/hash/Haval.java
@@ -567,7 +567,7 @@ public class Haval extends BaseHash
{
if (valid == null)
{
- valid = new Boolean(DIGEST0.equals(Util.toString(new Haval().digest())));
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new Haval().digest())));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/MD2.java b/libjava/classpath/gnu/java/security/hash/MD2.java
index 41e8769..2a93c42 100644
--- a/libjava/classpath/gnu/java/security/hash/MD2.java
+++ b/libjava/classpath/gnu/java/security/hash/MD2.java
@@ -181,7 +181,7 @@ public class MD2 extends BaseHash
{
if (valid == null)
{
- valid = new Boolean(DIGEST0.equals(Util.toString(new MD2().digest())));
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new MD2().digest())));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/MD4.java b/libjava/classpath/gnu/java/security/hash/MD4.java
index 54dda35..a09eb17 100644
--- a/libjava/classpath/gnu/java/security/hash/MD4.java
+++ b/libjava/classpath/gnu/java/security/hash/MD4.java
@@ -154,7 +154,7 @@ public class MD4 extends BaseHash
{
if (valid == null)
{
- valid = new Boolean(DIGEST0.equals(Util.toString(new MD4().digest())));
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new MD4().digest())));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/MD5.java b/libjava/classpath/gnu/java/security/hash/MD5.java
index 4632929..1653923 100644
--- a/libjava/classpath/gnu/java/security/hash/MD5.java
+++ b/libjava/classpath/gnu/java/security/hash/MD5.java
@@ -358,7 +358,7 @@ public class MD5 extends BaseHash
{
if (valid == null)
{
- valid = new Boolean(DIGEST0.equals(Util.toString(new MD5().digest())));
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new MD5().digest())));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/RipeMD128.java b/libjava/classpath/gnu/java/security/hash/RipeMD128.java
index 83e8f25..31874a0 100644
--- a/libjava/classpath/gnu/java/security/hash/RipeMD128.java
+++ b/libjava/classpath/gnu/java/security/hash/RipeMD128.java
@@ -283,7 +283,7 @@ public class RipeMD128 extends BaseHash
{
if (valid == null)
{
- valid = new Boolean
+ valid = Boolean.valueOf
(DIGEST0.equals(Util.toString(new RipeMD128().digest())));
}
return valid.booleanValue();
diff --git a/libjava/classpath/gnu/java/security/hash/RipeMD160.java b/libjava/classpath/gnu/java/security/hash/RipeMD160.java
index 73ecc516..642ffb3 100644
--- a/libjava/classpath/gnu/java/security/hash/RipeMD160.java
+++ b/libjava/classpath/gnu/java/security/hash/RipeMD160.java
@@ -320,7 +320,7 @@ public class RipeMD160 extends BaseHash
{
if (valid == null)
{
- valid = new Boolean
+ valid = Boolean.valueOf
(DIGEST0.equals(Util.toString(new RipeMD160().digest())));
}
return valid.booleanValue();
diff --git a/libjava/classpath/gnu/java/security/hash/Sha160.java b/libjava/classpath/gnu/java/security/hash/Sha160.java
index bf5f456..037b118 100644
--- a/libjava/classpath/gnu/java/security/hash/Sha160.java
+++ b/libjava/classpath/gnu/java/security/hash/Sha160.java
@@ -229,7 +229,7 @@ public class Sha160 extends BaseHash
md.update((byte) 0x62); // b
md.update((byte) 0x63); // c
String result = Util.toString(md.digest());
- valid = new Boolean(DIGEST0.equals(result));
+ valid = Boolean.valueOf(DIGEST0.equals(result));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha256.java b/libjava/classpath/gnu/java/security/hash/Sha256.java
index 9ef70a1..284425e 100644
--- a/libjava/classpath/gnu/java/security/hash/Sha256.java
+++ b/libjava/classpath/gnu/java/security/hash/Sha256.java
@@ -217,7 +217,7 @@ public class Sha256 extends BaseHash
md.update((byte) 0x62); // b
md.update((byte) 0x63); // c
String result = Util.toString(md.digest());
- valid = new Boolean(DIGEST0.equals(result));
+ valid = Boolean.valueOf(DIGEST0.equals(result));
}
return valid.booleanValue();
diff --git a/libjava/classpath/gnu/java/security/hash/Sha384.java b/libjava/classpath/gnu/java/security/hash/Sha384.java
index 2f619dc..332f048 100644
--- a/libjava/classpath/gnu/java/security/hash/Sha384.java
+++ b/libjava/classpath/gnu/java/security/hash/Sha384.java
@@ -254,7 +254,7 @@ public class Sha384 extends BaseHash
md.update((byte) 0x62); // b
md.update((byte) 0x63); // c
String result = Util.toString(md.digest());
- valid = new Boolean(DIGEST0.equals(result));
+ valid = Boolean.valueOf(DIGEST0.equals(result));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/Sha512.java b/libjava/classpath/gnu/java/security/hash/Sha512.java
index 798b34d..da035dc 100644
--- a/libjava/classpath/gnu/java/security/hash/Sha512.java
+++ b/libjava/classpath/gnu/java/security/hash/Sha512.java
@@ -256,7 +256,7 @@ public class Sha512 extends BaseHash
md.update((byte) 0x62); // b
md.update((byte) 0x63); // c
String result = Util.toString(md.digest());
- valid = new Boolean(DIGEST0.equals(result));
+ valid = Boolean.valueOf(DIGEST0.equals(result));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/Tiger.java b/libjava/classpath/gnu/java/security/hash/Tiger.java
index f39fed3..be0921d 100644
--- a/libjava/classpath/gnu/java/security/hash/Tiger.java
+++ b/libjava/classpath/gnu/java/security/hash/Tiger.java
@@ -640,7 +640,7 @@ public class Tiger extends BaseHash
{
if (valid == null)
{
- valid = new Boolean(DIGEST0.equals(Util.toString(new Tiger().digest())));
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new Tiger().digest())));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/java/security/hash/Whirlpool.java b/libjava/classpath/gnu/java/security/hash/Whirlpool.java
index 8c5d9f3..b10fa53 100644
--- a/libjava/classpath/gnu/java/security/hash/Whirlpool.java
+++ b/libjava/classpath/gnu/java/security/hash/Whirlpool.java
@@ -42,25 +42,25 @@ import gnu.java.security.Registry;
import gnu.java.security.util.Util;
/**
- * <p>Whirlpool, a new 512-bit hashing function operating on messages less than
+ * Whirlpool, a new 512-bit hashing function operating on messages less than
* 2 ** 256 bits in length. The function structure is designed according to the
* Wide Trail strategy and permits a wide variety of implementation trade-offs.
- * </p>
- *
- * <p><b>IMPORTANT</b>: This implementation is not thread-safe.</p>
- *
- * <p>References:</p>
- *
+ * <p>
+ * This implementation is of Whirlpool Version 3, described in [1] last revised
+ * on May 24th, 2003.
+ * <p>
+ * <b>IMPORTANT</b>: This implementation is not thread-safe.
+ * <p>
+ * References:
* <ol>
* <li><a href="http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html">
* The WHIRLPOOL Hashing Function</a>.<br>
* <a href="mailto:paulo.barreto@terra.com.br">Paulo S.L.M. Barreto</a> and
- * <a href="mailto:vincent.rijmen@esat.kuleuven.ac.be">Vincent Rijmen</a>.</li>
+ * <a href="mailto:vincent.rijmen@iaik.tugraz.at">Vincent Rijmen</a>.</li>
* </ol>
*/
public final class Whirlpool extends BaseHash
{
-
// Debugging methods and variables
// -------------------------------------------------------------------------
@@ -74,45 +74,43 @@ public final class Whirlpool extends BaseHash
private static final int BLOCK_SIZE = 64; // inner block size in bytes
/** The digest of the 0-bit long message. */
- private static final String DIGEST0 = "470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F"
- + "EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A";
-
- private static final int R = 10; // default number of rounds
-
- private static final String Sd = // p. 19 [WHIRLPOOL]
- "\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152"
- + "\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57"
- + "\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85"
- + "\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8"
- + "\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333"
- + "\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0"
- + "\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE"
- + "\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d"
- + "\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF"
- + "\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A"
- + "\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c"
- + "\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04"
- + "\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB"
- + "\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9"
- + "\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1"
- + "\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886";
-
+ private static final String DIGEST0 =
+ "19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7"
+ + "3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3";
+
+ /** Default number of rounds. */
+ private static final int R = 10;
+
+ /** Whirlpool S-box; p. 19. */
+ private static final String S_box = // p. 19 [WHIRLPOOL]
+ "\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152" +
+ "\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57" +
+ "\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85" +
+ "\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8" +
+ "\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333" +
+ "\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0" +
+ "\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE" +
+ "\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d" +
+ "\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF" +
+ "\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A" +
+ "\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c" +
+ "\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04" +
+ "\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB" +
+ "\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9" +
+ "\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1" +
+ "\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886";
+
+ /** The 64-bit lookup tables; section 7.1 p. 13. */
private static final long[] T0 = new long[256];
-
private static final long[] T1 = new long[256];
-
private static final long[] T2 = new long[256];
-
private static final long[] T3 = new long[256];
-
private static final long[] T4 = new long[256];
-
private static final long[] T5 = new long[256];
-
private static final long[] T6 = new long[256];
-
private static final long[] T7 = new long[256];
+ /** The round constants. */
private static final long[] rc = new long[R];
/** caches the result of the correctness test, once executed. */
@@ -123,12 +121,10 @@ public final class Whirlpool extends BaseHash
/** Work area for computing the round key schedule. */
private long k00, k01, k02, k03, k04, k05, k06, k07;
-
private long Kr0, Kr1, Kr2, Kr3, Kr4, Kr5, Kr6, Kr7;
/** work area for transforming the 512-bit buffer. */
private long n0, n1, n2, n3, n4, n5, n6, n7;
-
private long nn0, nn1, nn2, nn3, nn4, nn5, nn6, nn7;
/** work area for holding block cipher's intermediate values. */
@@ -140,72 +136,67 @@ public final class Whirlpool extends BaseHash
{
long time = System.currentTimeMillis();
- int ROOT = 0x11d; // para. 2.1 [WHIRLPOOL]
+ int ROOT = 0x11D; // para. 2.1 [WHIRLPOOL]
int i, r, j;
- long s, s2, s3, s4, s5, s8, s9, t;
+ long s1, s2, s4, s5, s8, s9, t;
char c;
final byte[] S = new byte[256];
for (i = 0; i < 256; i++)
{
- c = Sd.charAt(i >>> 1);
+ c = S_box.charAt(i >>> 1);
- s = ((i & 1) == 0 ? c >>> 8 : c) & 0xFFL;
- s2 = s << 1;
+ s1 = ((i & 1) == 0 ? c >>> 8 : c) & 0xFFL;
+ s2 = s1 << 1;
if (s2 > 0xFFL)
- {
- s2 ^= ROOT;
- }
- s3 = s2 ^ s;
+ s2 ^= ROOT;
+
s4 = s2 << 1;
if (s4 > 0xFFL)
- {
- s4 ^= ROOT;
- }
- s5 = s4 ^ s;
+ s4 ^= ROOT;
+
+ s5 = s4 ^ s1;
s8 = s4 << 1;
if (s8 > 0xFFL)
- {
- s8 ^= ROOT;
- }
- s9 = s8 ^ s;
+ s8 ^= ROOT;
- S[i] = (byte) s;
- T0[i] = t = s << 56 | s << 48 | s3 << 40 | s << 32 | s5 << 24
- | s8 << 16 | s9 << 8 | s5;
- T1[i] = t >>> 8 | t << 56;
+ s9 = s8 ^ s1;
+
+ T0[i] = t = s1 << 56 | s1 << 48 | s4 << 40 | s1 << 32
+ | s8 << 24 | s5 << 16 | s2 << 8 | s9;
+ T1[i] = t >>> 8 | t << 56;
T2[i] = t >>> 16 | t << 48;
T3[i] = t >>> 24 | t << 40;
T4[i] = t >>> 32 | t << 32;
T5[i] = t >>> 40 | t << 24;
T6[i] = t >>> 48 | t << 16;
- T7[i] = t >>> 56 | t << 8;
+ T7[i] = t >>> 56 | t << 8;
}
- for (r = 1, i = 0, j = 0; r < R + 1; r++)
- {
- rc[i++] = (S[j++] & 0xFFL) << 56 | (S[j++] & 0xFFL) << 48
- | (S[j++] & 0xFFL) << 40 | (S[j++] & 0xFFL) << 32
- | (S[j++] & 0xFFL) << 24 | (S[j++] & 0xFFL) << 16
- | (S[j++] & 0xFFL) << 8 | (S[j++] & 0xFFL);
- }
+ for (r = 0, i = 0; r < R; )
+ rc[r++] = (T0[i++] & 0xFF00000000000000L)
+ ^ (T1[i++] & 0x00FF000000000000L)
+ ^ (T2[i++] & 0x0000FF0000000000L)
+ ^ (T3[i++] & 0x000000FF00000000L)
+ ^ (T4[i++] & 0x00000000FF000000L)
+ ^ (T5[i++] & 0x0000000000FF0000L)
+ ^ (T6[i++] & 0x000000000000FF00L)
+ ^ (T7[i++] & 0x00000000000000FFL);
time = System.currentTimeMillis() - time;
-
if (DEBUG && debuglevel > 8)
{
System.out.println("==========");
System.out.println();
System.out.println("Static data");
System.out.println();
-
+
System.out.println();
System.out.println("T0[]:");
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T0[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T0[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -213,9 +204,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T1[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T1[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -223,9 +213,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T2[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T2[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -233,9 +222,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T3[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T3[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -243,9 +231,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T4[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T4[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -253,9 +240,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -263,9 +249,8 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
@@ -273,17 +258,15 @@ public final class Whirlpool extends BaseHash
for (i = 0; i < 64; i++)
{
for (j = 0; j < 4; j++)
- {
- System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
- }
+ System.out.print("0x" + Util.toString(T5[i * 4 + j]) + ", ");
+
System.out.println();
}
System.out.println();
System.out.println("rc[]:");
for (i = 0; i < R; i++)
- {
- System.out.println("0x" + Util.toString(rc[i]));
- }
+ System.out.println("0x" + Util.toString(rc[i]));
+
System.out.println();
System.out.println();
@@ -340,38 +323,70 @@ public final class Whirlpool extends BaseHash
protected void transform(byte[] in, int offset)
{
// apply mu to the input
- n0 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n1 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n2 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n3 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n4 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n5 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n6 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
- n7 = (in[offset++] & 0xFFL) << 56 | (in[offset++] & 0xFFL) << 48
- | (in[offset++] & 0xFFL) << 40 | (in[offset++] & 0xFFL) << 32
- | (in[offset++] & 0xFFL) << 24 | (in[offset++] & 0xFFL) << 16
- | (in[offset++] & 0xFFL) << 8 | (in[offset++] & 0xFFL);
+ n0 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n1 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n2 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n3 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n4 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n5 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n6 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
+ n7 = (in[offset++] & 0xFFL) << 56
+ | (in[offset++] & 0xFFL) << 48
+ | (in[offset++] & 0xFFL) << 40
+ | (in[offset++] & 0xFFL) << 32
+ | (in[offset++] & 0xFFL) << 24
+ | (in[offset++] & 0xFFL) << 16
+ | (in[offset++] & 0xFFL) << 8
+ | (in[offset++] & 0xFFL);
// transform K into the key schedule Kr; 0 <= r <= R
k00 = H0;
@@ -399,62 +414,70 @@ public final class Whirlpool extends BaseHash
{
// 1. compute intermediate round key schedule by applying ro[rc]
// to the previous round key schedule --rc being the round constant
- Kr0 = T0[(int) ((k00 >> 56) & 0xFFL)] ^ T1[(int) ((k07 >> 48) & 0xFFL)]
- ^ T2[(int) ((k06 >> 40) & 0xFFL)]
- ^ T3[(int) ((k05 >> 32) & 0xFFL)]
- ^ T4[(int) ((k04 >> 24) & 0xFFL)]
- ^ T5[(int) ((k03 >> 16) & 0xFFL)]
- ^ T6[(int) ((k02 >> 8) & 0xFFL)] ^ T7[(int) (k01 & 0xFFL)]
- ^ rc[r];
-
- Kr1 = T0[(int) ((k01 >> 56) & 0xFFL)] ^ T1[(int) ((k00 >> 48) & 0xFFL)]
- ^ T2[(int) ((k07 >> 40) & 0xFFL)]
- ^ T3[(int) ((k06 >> 32) & 0xFFL)]
- ^ T4[(int) ((k05 >> 24) & 0xFFL)]
- ^ T5[(int) ((k04 >> 16) & 0xFFL)]
- ^ T6[(int) ((k03 >> 8) & 0xFFL)] ^ T7[(int) (k02 & 0xFFL)];
-
- Kr2 = T0[(int) ((k02 >> 56) & 0xFFL)] ^ T1[(int) ((k01 >> 48) & 0xFFL)]
- ^ T2[(int) ((k00 >> 40) & 0xFFL)]
- ^ T3[(int) ((k07 >> 32) & 0xFFL)]
- ^ T4[(int) ((k06 >> 24) & 0xFFL)]
- ^ T5[(int) ((k05 >> 16) & 0xFFL)]
- ^ T6[(int) ((k04 >> 8) & 0xFFL)] ^ T7[(int) (k03 & 0xFFL)];
-
- Kr3 = T0[(int) ((k03 >> 56) & 0xFFL)] ^ T1[(int) ((k02 >> 48) & 0xFFL)]
- ^ T2[(int) ((k01 >> 40) & 0xFFL)]
- ^ T3[(int) ((k00 >> 32) & 0xFFL)]
- ^ T4[(int) ((k07 >> 24) & 0xFFL)]
- ^ T5[(int) ((k06 >> 16) & 0xFFL)]
- ^ T6[(int) ((k05 >> 8) & 0xFFL)] ^ T7[(int) (k04 & 0xFFL)];
-
- Kr4 = T0[(int) ((k04 >> 56) & 0xFFL)] ^ T1[(int) ((k03 >> 48) & 0xFFL)]
- ^ T2[(int) ((k02 >> 40) & 0xFFL)]
- ^ T3[(int) ((k01 >> 32) & 0xFFL)]
- ^ T4[(int) ((k00 >> 24) & 0xFFL)]
- ^ T5[(int) ((k07 >> 16) & 0xFFL)]
- ^ T6[(int) ((k06 >> 8) & 0xFFL)] ^ T7[(int) (k05 & 0xFFL)];
-
- Kr5 = T0[(int) ((k05 >> 56) & 0xFFL)] ^ T1[(int) ((k04 >> 48) & 0xFFL)]
- ^ T2[(int) ((k03 >> 40) & 0xFFL)]
- ^ T3[(int) ((k02 >> 32) & 0xFFL)]
- ^ T4[(int) ((k01 >> 24) & 0xFFL)]
- ^ T5[(int) ((k00 >> 16) & 0xFFL)]
- ^ T6[(int) ((k07 >> 8) & 0xFFL)] ^ T7[(int) (k06 & 0xFFL)];
-
- Kr6 = T0[(int) ((k06 >> 56) & 0xFFL)] ^ T1[(int) ((k05 >> 48) & 0xFFL)]
- ^ T2[(int) ((k04 >> 40) & 0xFFL)]
- ^ T3[(int) ((k03 >> 32) & 0xFFL)]
- ^ T4[(int) ((k02 >> 24) & 0xFFL)]
- ^ T5[(int) ((k01 >> 16) & 0xFFL)]
- ^ T6[(int) ((k00 >> 8) & 0xFFL)] ^ T7[(int) (k07 & 0xFFL)];
-
- Kr7 = T0[(int) ((k07 >> 56) & 0xFFL)] ^ T1[(int) ((k06 >> 48) & 0xFFL)]
- ^ T2[(int) ((k05 >> 40) & 0xFFL)]
- ^ T3[(int) ((k04 >> 32) & 0xFFL)]
- ^ T4[(int) ((k03 >> 24) & 0xFFL)]
- ^ T5[(int) ((k02 >> 16) & 0xFFL)]
- ^ T6[(int) ((k01 >> 8) & 0xFFL)] ^ T7[(int) (k00 & 0xFFL)];
+ Kr0 = T0[(int)((k00 >> 56) & 0xFFL)]
+ ^ T1[(int)((k07 >> 48) & 0xFFL)]
+ ^ T2[(int)((k06 >> 40) & 0xFFL)]
+ ^ T3[(int)((k05 >> 32) & 0xFFL)]
+ ^ T4[(int)((k04 >> 24) & 0xFFL)]
+ ^ T5[(int)((k03 >> 16) & 0xFFL)]
+ ^ T6[(int)((k02 >> 8) & 0xFFL)]
+ ^ T7[(int)( k01 & 0xFFL)] ^ rc[r];
+ Kr1 = T0[(int)((k01 >> 56) & 0xFFL)]
+ ^ T1[(int)((k00 >> 48) & 0xFFL)]
+ ^ T2[(int)((k07 >> 40) & 0xFFL)]
+ ^ T3[(int)((k06 >> 32) & 0xFFL)]
+ ^ T4[(int)((k05 >> 24) & 0xFFL)]
+ ^ T5[(int)((k04 >> 16) & 0xFFL)]
+ ^ T6[(int)((k03 >> 8) & 0xFFL)]
+ ^ T7[(int)( k02 & 0xFFL)];
+ Kr2 = T0[(int)((k02 >> 56) & 0xFFL)]
+ ^ T1[(int)((k01 >> 48) & 0xFFL)]
+ ^ T2[(int)((k00 >> 40) & 0xFFL)]
+ ^ T3[(int)((k07 >> 32) & 0xFFL)]
+ ^ T4[(int)((k06 >> 24) & 0xFFL)]
+ ^ T5[(int)((k05 >> 16) & 0xFFL)]
+ ^ T6[(int)((k04 >> 8) & 0xFFL)]
+ ^ T7[(int)( k03 & 0xFFL)];
+ Kr3 = T0[(int)((k03 >> 56) & 0xFFL)]
+ ^ T1[(int)((k02 >> 48) & 0xFFL)]
+ ^ T2[(int)((k01 >> 40) & 0xFFL)]
+ ^ T3[(int)((k00 >> 32) & 0xFFL)]
+ ^ T4[(int)((k07 >> 24) & 0xFFL)]
+ ^ T5[(int)((k06 >> 16) & 0xFFL)]
+ ^ T6[(int)((k05 >> 8) & 0xFFL)]
+ ^ T7[(int)( k04 & 0xFFL)];
+ Kr4 = T0[(int)((k04 >> 56) & 0xFFL)]
+ ^ T1[(int)((k03 >> 48) & 0xFFL)]
+ ^ T2[(int)((k02 >> 40) & 0xFFL)]
+ ^ T3[(int)((k01 >> 32) & 0xFFL)]
+ ^ T4[(int)((k00 >> 24) & 0xFFL)]
+ ^ T5[(int)((k07 >> 16) & 0xFFL)]
+ ^ T6[(int)((k06 >> 8) & 0xFFL)]
+ ^ T7[(int)( k05 & 0xFFL)];
+ Kr5 = T0[(int)((k05 >> 56) & 0xFFL)]
+ ^ T1[(int)((k04 >> 48) & 0xFFL)]
+ ^ T2[(int)((k03 >> 40) & 0xFFL)]
+ ^ T3[(int)((k02 >> 32) & 0xFFL)]
+ ^ T4[(int)((k01 >> 24) & 0xFFL)]
+ ^ T5[(int)((k00 >> 16) & 0xFFL)]
+ ^ T6[(int)((k07 >> 8) & 0xFFL)]
+ ^ T7[(int)( k06 & 0xFFL)];
+ Kr6 = T0[(int)((k06 >> 56) & 0xFFL)]
+ ^ T1[(int)((k05 >> 48) & 0xFFL)]
+ ^ T2[(int)((k04 >> 40) & 0xFFL)]
+ ^ T3[(int)((k03 >> 32) & 0xFFL)]
+ ^ T4[(int)((k02 >> 24) & 0xFFL)]
+ ^ T5[(int)((k01 >> 16) & 0xFFL)]
+ ^ T6[(int)((k00 >> 8) & 0xFFL)]
+ ^ T7[(int)( k07 & 0xFFL)];
+ Kr7 = T0[(int)((k07 >> 56) & 0xFFL)]
+ ^ T1[(int)((k06 >> 48) & 0xFFL)]
+ ^ T2[(int)((k05 >> 40) & 0xFFL)]
+ ^ T3[(int)((k04 >> 32) & 0xFFL)]
+ ^ T4[(int)((k03 >> 24) & 0xFFL)]
+ ^ T5[(int)((k02 >> 16) & 0xFFL)]
+ ^ T6[(int)((k01 >> 8) & 0xFFL)]
+ ^ T7[(int)( k00 & 0xFFL)];
k00 = Kr0;
k01 = Kr1;
@@ -466,54 +489,70 @@ public final class Whirlpool extends BaseHash
k07 = Kr7;
// 2. incrementally compute the cipher output
- w0 = T0[(int) ((nn0 >> 56) & 0xFFL)] ^ T1[(int) ((nn7 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn6 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn5 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn4 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn3 >> 16) & 0xFFL)] ^ T6[(int) ((nn2 >> 8) & 0xFFL)]
- ^ T7[(int) (nn1 & 0xFFL)] ^ Kr0;
- w1 = T0[(int) ((nn1 >> 56) & 0xFFL)] ^ T1[(int) ((nn0 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn7 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn6 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn5 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn4 >> 16) & 0xFFL)] ^ T6[(int) ((nn3 >> 8) & 0xFFL)]
- ^ T7[(int) (nn2 & 0xFFL)] ^ Kr1;
- w2 = T0[(int) ((nn2 >> 56) & 0xFFL)] ^ T1[(int) ((nn1 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn0 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn7 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn6 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn5 >> 16) & 0xFFL)] ^ T6[(int) ((nn4 >> 8) & 0xFFL)]
- ^ T7[(int) (nn3 & 0xFFL)] ^ Kr2;
- w3 = T0[(int) ((nn3 >> 56) & 0xFFL)] ^ T1[(int) ((nn2 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn1 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn0 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn7 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn6 >> 16) & 0xFFL)] ^ T6[(int) ((nn5 >> 8) & 0xFFL)]
- ^ T7[(int) (nn4 & 0xFFL)] ^ Kr3;
- w4 = T0[(int) ((nn4 >> 56) & 0xFFL)] ^ T1[(int) ((nn3 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn2 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn1 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn0 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn7 >> 16) & 0xFFL)] ^ T6[(int) ((nn6 >> 8) & 0xFFL)]
- ^ T7[(int) (nn5 & 0xFFL)] ^ Kr4;
- w5 = T0[(int) ((nn5 >> 56) & 0xFFL)] ^ T1[(int) ((nn4 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn3 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn2 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn1 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn0 >> 16) & 0xFFL)] ^ T6[(int) ((nn7 >> 8) & 0xFFL)]
- ^ T7[(int) (nn6 & 0xFFL)] ^ Kr5;
- w6 = T0[(int) ((nn6 >> 56) & 0xFFL)] ^ T1[(int) ((nn5 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn4 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn3 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn2 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn1 >> 16) & 0xFFL)] ^ T6[(int) ((nn0 >> 8) & 0xFFL)]
- ^ T7[(int) (nn7 & 0xFFL)] ^ Kr6;
- w7 = T0[(int) ((nn7 >> 56) & 0xFFL)] ^ T1[(int) ((nn6 >> 48) & 0xFFL)]
- ^ T2[(int) ((nn5 >> 40) & 0xFFL)]
- ^ T3[(int) ((nn4 >> 32) & 0xFFL)]
- ^ T4[(int) ((nn3 >> 24) & 0xFFL)]
- ^ T5[(int) ((nn2 >> 16) & 0xFFL)] ^ T6[(int) ((nn1 >> 8) & 0xFFL)]
- ^ T7[(int) (nn0 & 0xFFL)] ^ Kr7;
+ w0 = T0[(int)((nn0 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn7 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn6 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn5 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn4 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn3 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn2 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn1 & 0xFFL)] ^ Kr0;
+ w1 = T0[(int)((nn1 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn0 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn7 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn6 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn5 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn4 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn3 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn2 & 0xFFL)] ^ Kr1;
+ w2 = T0[(int)((nn2 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn1 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn0 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn7 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn6 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn5 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn4 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn3 & 0xFFL)] ^ Kr2;
+ w3 = T0[(int)((nn3 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn2 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn1 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn0 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn7 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn6 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn5 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn4 & 0xFFL)] ^ Kr3;
+ w4 = T0[(int)((nn4 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn3 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn2 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn1 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn0 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn7 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn6 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn5 & 0xFFL)] ^ Kr4;
+ w5 = T0[(int)((nn5 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn4 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn3 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn2 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn1 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn0 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn7 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn6 & 0xFFL)] ^ Kr5;
+ w6 = T0[(int)((nn6 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn5 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn4 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn3 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn2 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn1 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn0 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn7 & 0xFFL)] ^ Kr6;
+ w7 = T0[(int)((nn7 >> 56) & 0xFFL)]
+ ^ T1[(int)((nn6 >> 48) & 0xFFL)]
+ ^ T2[(int)((nn5 >> 40) & 0xFFL)]
+ ^ T3[(int)((nn4 >> 32) & 0xFFL)]
+ ^ T4[(int)((nn3 >> 24) & 0xFFL)]
+ ^ T5[(int)((nn2 >> 16) & 0xFFL)]
+ ^ T6[(int)((nn1 >> 8) & 0xFFL)]
+ ^ T7[(int)( nn0 & 0xFFL)] ^ Kr7;
nn0 = w0;
nn1 = w1;
@@ -547,7 +586,7 @@ public final class Whirlpool extends BaseHash
// are 33 (1 for the 1-bit followed by the 0-bits and the encoding of
// the count framed in a 256-bit block). our formula is then:
// count + 33 + padding = 0 (mod BLOCK_SIZE)
- int n = (int) ((count + 33) % BLOCK_SIZE);
+ int n = (int)((count + 33) % BLOCK_SIZE);
int padding = n == 0 ? 33 : BLOCK_SIZE - n + 33;
byte[] result = new byte[padding];
@@ -558,14 +597,14 @@ public final class Whirlpool extends BaseHash
// save (right justified) the number of bits hashed
long bits = count * 8;
int i = padding - 8;
- result[i++] = (byte) (bits >>> 56);
- result[i++] = (byte) (bits >>> 48);
- result[i++] = (byte) (bits >>> 40);
- result[i++] = (byte) (bits >>> 32);
- result[i++] = (byte) (bits >>> 24);
- result[i++] = (byte) (bits >>> 16);
- result[i++] = (byte) (bits >>> 8);
- result[i] = (byte) bits;
+ result[i++] = (byte)(bits >>> 56);
+ result[i++] = (byte)(bits >>> 48);
+ result[i++] = (byte)(bits >>> 40);
+ result[i++] = (byte)(bits >>> 32);
+ result[i++] = (byte)(bits >>> 24);
+ result[i++] = (byte)(bits >>> 16);
+ result[i++] = (byte)(bits >>> 8);
+ result[i ] = (byte) bits;
return result;
}
@@ -573,38 +612,24 @@ public final class Whirlpool extends BaseHash
protected byte[] getResult()
{
// apply inverse mu to the context
- byte[] result = new byte[] { (byte) (H0 >>> 56), (byte) (H0 >>> 48),
- (byte) (H0 >>> 40), (byte) (H0 >>> 32),
- (byte) (H0 >>> 24), (byte) (H0 >>> 16),
- (byte) (H0 >>> 8), (byte) H0,
- (byte) (H1 >>> 56), (byte) (H1 >>> 48),
- (byte) (H1 >>> 40), (byte) (H1 >>> 32),
- (byte) (H1 >>> 24), (byte) (H1 >>> 16),
- (byte) (H1 >>> 8), (byte) H1,
- (byte) (H2 >>> 56), (byte) (H2 >>> 48),
- (byte) (H2 >>> 40), (byte) (H2 >>> 32),
- (byte) (H2 >>> 24), (byte) (H2 >>> 16),
- (byte) (H2 >>> 8), (byte) H2,
- (byte) (H3 >>> 56), (byte) (H3 >>> 48),
- (byte) (H3 >>> 40), (byte) (H3 >>> 32),
- (byte) (H3 >>> 24), (byte) (H3 >>> 16),
- (byte) (H3 >>> 8), (byte) H3,
- (byte) (H4 >>> 56), (byte) (H4 >>> 48),
- (byte) (H4 >>> 40), (byte) (H4 >>> 32),
- (byte) (H4 >>> 24), (byte) (H4 >>> 16),
- (byte) (H4 >>> 8), (byte) H4,
- (byte) (H5 >>> 56), (byte) (H5 >>> 48),
- (byte) (H5 >>> 40), (byte) (H5 >>> 32),
- (byte) (H5 >>> 24), (byte) (H5 >>> 16),
- (byte) (H5 >>> 8), (byte) H5,
- (byte) (H6 >>> 56), (byte) (H6 >>> 48),
- (byte) (H6 >>> 40), (byte) (H6 >>> 32),
- (byte) (H6 >>> 24), (byte) (H6 >>> 16),
- (byte) (H6 >>> 8), (byte) H6,
- (byte) (H7 >>> 56), (byte) (H7 >>> 48),
- (byte) (H7 >>> 40), (byte) (H7 >>> 32),
- (byte) (H7 >>> 24), (byte) (H7 >>> 16),
- (byte) (H7 >>> 8), (byte) H7 };
+ byte[] result = new byte[] {
+ (byte)(H0 >>> 56), (byte)(H0 >>> 48), (byte)(H0 >>> 40), (byte)(H0 >>> 32),
+ (byte)(H0 >>> 24), (byte)(H0 >>> 16), (byte)(H0 >>> 8), (byte) H0,
+ (byte)(H1 >>> 56), (byte)(H1 >>> 48), (byte)(H1 >>> 40), (byte)(H1 >>> 32),
+ (byte)(H1 >>> 24), (byte)(H1 >>> 16), (byte)(H1 >>> 8), (byte) H1,
+ (byte)(H2 >>> 56), (byte)(H2 >>> 48), (byte)(H2 >>> 40), (byte)(H2 >>> 32),
+ (byte)(H2 >>> 24), (byte)(H2 >>> 16), (byte)(H2 >>> 8), (byte) H2,
+ (byte)(H3 >>> 56), (byte)(H3 >>> 48), (byte)(H3 >>> 40), (byte)(H3 >>> 32),
+ (byte)(H3 >>> 24), (byte)(H3 >>> 16), (byte)(H3 >>> 8), (byte) H3,
+ (byte)(H4 >>> 56), (byte)(H4 >>> 48), (byte)(H4 >>> 40), (byte)(H4 >>> 32),
+ (byte)(H4 >>> 24), (byte)(H4 >>> 16), (byte)(H4 >>> 8), (byte) H4,
+ (byte)(H5 >>> 56), (byte)(H5 >>> 48), (byte)(H5 >>> 40), (byte)(H5 >>> 32),
+ (byte)(H5 >>> 24), (byte)(H5 >>> 16), (byte)(H5 >>> 8), (byte) H5,
+ (byte)(H6 >>> 56), (byte)(H6 >>> 48), (byte)(H6 >>> 40), (byte)(H6 >>> 32),
+ (byte)(H6 >>> 24), (byte)(H6 >>> 16), (byte)(H6 >>> 8), (byte) H6,
+ (byte)(H7 >>> 56), (byte)(H7 >>> 48), (byte)(H7 >>> 40), (byte)(H7 >>> 32),
+ (byte)(H7 >>> 24), (byte)(H7 >>> 16), (byte)(H7 >>> 8), (byte) H7
+ };
return result;
}
@@ -617,10 +642,8 @@ public final class Whirlpool extends BaseHash
public boolean selfTest()
{
if (valid == null)
- {
- valid = new Boolean(
- DIGEST0.equals(Util.toString(new Whirlpool().digest())));
- }
+ valid = Boolean.valueOf(DIGEST0.equals(Util.toString(new Whirlpool().digest())));
+
return valid.booleanValue();
}
}
diff --git a/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java b/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java
index e127779..05595ed 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/HavalSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the <code>HAVAL</code> <i>Service Provider Interface</i>
* (<b>SPI</b>) Adapter.<p>
- *
- * @version Revision: $
*/
public class HavalSpi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java
index 5b6b0e1..001cbaf 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/MD2Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the MD2 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class MD2Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java
index 8be4499..41fef87 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/MD4Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the MD4 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class MD4Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java b/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java
index 92fb6ab..aa1a884 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/MD5Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the MD5 <i>Service Provider Interface</i> (<b>SPI</b>)
* adapter.<p>
- *
- * @version $Revision: 1.1 $
*/
public class MD5Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java b/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java
index 9b8a73d..e30beca 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/MessageDigestAdapter.java
@@ -59,8 +59,6 @@ import java.security.MessageDigestSpi;
*
* All the implementations which subclass this object, and which are serviced by
* the GNU Crypto provider implement the {@link java.lang.Cloneable} interface.<p>
- *
- * @version $Revision: 1.1 $
*/
class MessageDigestAdapter extends MessageDigestSpi implements Cloneable
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java b/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java
index b8e90d4..404214d 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/RipeMD128Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the RIPEMD-128 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
- *
- * @version $Revision: 1.1 $
*/
public class RipeMD128Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java b/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java
index 49615e2..841f46b 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/RipeMD160Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the RIPEMD-160 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
- *
- * @version $Revision: 1.1 $
*/
public class RipeMD160Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java
index a9b7263..4198843 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/Sha160Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the SHA-1 (160-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
- *
- * @version $Revision: 1.1 $
*/
public class Sha160Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java
index 9eeaebd..f07e189 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/Sha256Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-1 (256-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class Sha256Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java
index 96e1e6e..fc17077 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/Sha384Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-2 (384-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class Sha384Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java b/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java
index 75c6170..0b4c3d6 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/Sha512Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the SHA-2-3 (512-bit) <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class Sha512Spi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java b/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java
index b355d78..5994374 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/TigerSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the Tiger <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class TigerSpi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java b/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java
index e42e74d..d1864bc 100644
--- a/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/hash/WhirlpoolSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Whirlpool <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.<p>
- *
- * @version $Revision: 1.1 $
*/
public class WhirlpoolSpi extends MessageDigestAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java b/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java
index e7cb720..70d30f1 100644
--- a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java
+++ b/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java
@@ -42,7 +42,7 @@ import gnu.java.security.prng.LimitReachedException;
import gnu.java.security.prng.MDGenerator;
import java.security.SecureRandomSpi;
-import java.util.HashMap;
+import java.util.Collections;
/**
* <p>The implementation of a generic {@link java.security.SecureRandom} adapter
@@ -80,6 +80,7 @@ abstract class SecureRandomAdapter extends SecureRandomSpi
super();
this.mdName = mdName;
+ adaptee.init (Collections.singletonMap (MDGenerator.MD_NAME, mdName));
}
// Class methods
@@ -118,9 +119,6 @@ abstract class SecureRandomAdapter extends SecureRandomSpi
public void engineSetSeed(byte[] seed)
{
- HashMap attributes = new HashMap();
- attributes.put(MDGenerator.MD_NAME, mdName);
- attributes.put(MDGenerator.SEEED, seed);
- adaptee.init(attributes);
+ adaptee.addRandomBytes (seed);
}
}
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java b/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java
index 97e9594..44503b2 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/DSSKeyPairGeneratorSpi.java
@@ -57,8 +57,6 @@ import java.util.HashMap;
* In case the client does not explicitly initialize the KeyPairGenerator (via
* a call to an <code>initialize()</code> method), the GNU Crypto provider
* uses a default <i>modulus</i> size (keysize) of 1024 bits.<p>
- *
- * @version $Revision: 1.3 $
*/
public class DSSKeyPairGeneratorSpi extends KeyPairGeneratorAdapter implements
DSAKeyPairGenerator
diff --git a/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java b/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java
index 16e4ddd..a63c51a 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/DSSRawSignatureSpi.java
@@ -45,8 +45,6 @@ import gnu.java.security.sig.dss.DSSSignatureRawCodec;
* The implementation of <i>Service Provider Interface</i> (<b>SPI</b>) adapter
* for the DSS (Digital Signature Standard) signature scheme, encoded and/or
* decoded in RAW format.<p>
- *
- * @version $Revision: 1.1 $
*/
public class DSSRawSignatureSpi extends SignatureAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java b/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java
index 6026829..edf19f6 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/KeyPairGeneratorAdapter.java
@@ -63,8 +63,6 @@ import java.security.spec.AlgorithmParameterSpec;
* supplies (and document) default values to be used. For example, the GNU
* Crypto provider uses a default <i>modulus</i> size (keysize) of 1024 bits for
* the DSS (Digital Signature Standard) a.k.a <i>DSA</i>.<p>
- *
- * @version $Revision: 1.3 $
*/
public abstract class KeyPairGeneratorAdapter extends KeyPairGenerator
{
diff --git a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java b/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java
index fecf54c..674e2af 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/RSAKeyFactory.java
@@ -84,7 +84,7 @@ public class RSAKeyFactory
PublicKey result;
try
{
- result = new RSAKeyPairX509Codec().decodePublicKey(encoded);
+ return new RSAKeyPairX509Codec().decodePublicKey(encoded);
}
catch (RuntimeException x)
{
@@ -131,7 +131,7 @@ public class RSAKeyFactory
PrivateKey result;
try
{
- result = new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded);
+ return new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded);
}
catch (RuntimeException x)
{
diff --git a/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java b/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java
index e44b8ad..f3548d8 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/RSAPSSRawSignatureSpi.java
@@ -44,8 +44,6 @@ import gnu.java.security.sig.rsa.RSAPSSSignatureRawCodec;
/**
* The implementation of <i>Service Provider Interface</i> (<b>SPI</b>) adapter
* for the RSA-PSS signature scheme, encoded and/or decoded in RAW format.<p>
- *
- * @version $Revision: 1.1 $
*/
public class RSAPSSRawSignatureSpi extends SignatureAdapter
{
diff --git a/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java b/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java
index 6cb7c7c..4dcbe78 100644
--- a/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java
+++ b/libjava/classpath/gnu/java/security/jce/sig/SignatureAdapter.java
@@ -69,8 +69,6 @@ import java.util.logging.Logger;
*
* All the implementations which subclass this object, and which are serviced by
* the GNU Crypto provider implement the {@link java.lang.Cloneable} interface.<p>
- *
- * @version $Revision: 1.2 $
*/
class SignatureAdapter extends SignatureSpi implements Cloneable
{
diff --git a/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java b/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java
index c64f928..965a317 100644
--- a/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java
+++ b/libjava/classpath/gnu/java/security/key/IKeyPairCodec.java
@@ -48,8 +48,6 @@ import java.security.PublicKey;
* cryptographic asymmetric keypairs. Codecs are useful for (a) externalising
* public and private keys for storage and on-the-wire transmission, as well as
* (b) re-creating their internal Java representation from external sources.</p>
- *
- * @version $Revision: 1.2 $
*/
public interface IKeyPairCodec
{
diff --git a/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java b/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java
index 219863d..2e0b299 100644
--- a/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java
+++ b/libjava/classpath/gnu/java/security/key/IKeyPairGenerator.java
@@ -43,8 +43,6 @@ import java.util.Map;
/**
* The visible methods of every asymmetric keypair generator.<p>
- *
- * @version $Revision: 1.1 $
*/
public interface IKeyPairGenerator
{
diff --git a/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java b/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java
index edcc186..8c2f348 100644
--- a/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java
+++ b/libjava/classpath/gnu/java/security/key/KeyPairGeneratorFactory.java
@@ -49,8 +49,6 @@ import java.util.Set;
/**
* <p>A Factory to instantiate asymmetric keypair generators.</p>
- *
- * @version $Revision: 1.1 $
*/
public class KeyPairGeneratorFactory
{
@@ -87,7 +85,7 @@ public class KeyPairGeneratorFactory
name = name.trim();
IKeyPairGenerator result = null;
if (name.equalsIgnoreCase(Registry.DSA_KPG)
- || name.equals(Registry.DSS_KPG))
+ || name.equalsIgnoreCase(Registry.DSS_KPG))
{
result = new DSSKeyPairGenerator();
}
@@ -118,6 +116,7 @@ public class KeyPairGeneratorFactory
{
HashSet hs = new HashSet();
hs.add(Registry.DSS_KPG);
+ hs.add(Registry.DSA_KPG);
hs.add(Registry.RSA_KPG);
hs.add(Registry.DH_KPG);
hs.add(Registry.SRP_KPG);
@@ -135,11 +134,9 @@ public class KeyPairGeneratorFactory
}
catch (Exception x)
{
- IllegalArgumentException iae =
- new IllegalArgumentException ("strong crypto key pair generator not available: "
- + clazz);
- iae.initCause (x);
- throw iae;
+ throw new IllegalArgumentException(
+ "strong crypto key pair generator not available: " + clazz,
+ x);
}
}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSKey.java
index 428cab1..40aaea8 100644
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKey.java
+++ b/libjava/classpath/gnu/java/security/key/dss/DSSKey.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.security.key.dss;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
import gnu.java.security.util.FormatUtil;
@@ -59,7 +60,6 @@ import java.security.spec.DSAParameterSpec;
* the relevant <code>getEncoded()</code> methods of each of the private and
* public keys.</p>
*
- * @version $Revision: 1.4 $
* @see DSSPrivateKey#getEncoded
* @see DSSPublicKey#getEncoded
*/
@@ -95,6 +95,9 @@ public abstract class DSSKey implements Key, DSAKey
*/
protected final int defaultFormat;
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -176,6 +179,22 @@ public abstract class DSSKey implements Key, DSAKey
&& g.equals(that.getParams().getG());
}
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder().append(ls)
+ .append("defaultFormat=").append(defaultFormat).append(",").append(ls)
+ .append("p=0x").append(p.toString(16)).append(",").append(ls)
+ .append("q=0x").append(q.toString(16)).append(",").append(ls)
+ .append("g=0x").append(g.toString(16))
+ .toString();
+ }
+
+ return str;
+ }
+
// abstract methods to be implemented by subclasses ------------------------
public abstract byte[] getEncoded(int format);
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java
index 30e30bd..3a115b9 100644
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java
+++ b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairPKCS8Codec.java
@@ -55,6 +55,7 @@ import java.security.InvalidParameterException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.ArrayList;
+import java.util.logging.Logger;
/**
* An implementation of an {@link IKeyPairCodec} that knows how to encode /
@@ -65,6 +66,7 @@ import java.util.ArrayList;
public class DSSKeyPairPKCS8Codec
implements IKeyPairCodec
{
+ private static final Logger log = Logger.getLogger(DSSKeyPairPKCS8Codec.class.getName());
private static final OID DSA_ALG_OID = new OID(Registry.DSA_OID_STRING);
// implicit 0-arguments constructor
@@ -137,7 +139,9 @@ public class DSSKeyPairPKCS8Codec
DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
algorithmID);
- DERValue derPrivateKey = new DERValue(DER.OCTET_STRING, Util.trim(x));
+ // The OCTET STRING is the DER encoding of an INTEGER.
+ DERValue derX = new DERValue(DER.INTEGER, x);
+ DERValue derPrivateKey = new DERValue(DER.OCTET_STRING, derX.getEncoded());
ArrayList pki = new ArrayList(3);
pki.add(derVersion);
@@ -180,6 +184,8 @@ public class DSSKeyPairPKCS8Codec
*/
public PrivateKey decodePrivateKey(byte[] input)
{
+ log.entering("DSSKeyPairPKCS8Codec", "decodePrivateKey");
+
if (input == null)
throw new InvalidParameterException("Input bytes MUST NOT be null");
@@ -220,8 +226,13 @@ public class DSSKeyPairPKCS8Codec
g = (BigInteger) val.getValue();
val = der.read();
+ log.finest("val = " + val);
byte[] xBytes = (byte[]) val.getValue();
- x = new BigInteger(1, xBytes);
+ log.finest(Util.dumpString(xBytes, "xBytes: "));
+ DERReader der2 = new DERReader(xBytes);
+ val = der2.read();
+ DerUtil.checkIsBigInteger(val, "Wrong X field");
+ x = (BigInteger) val.getValue();
}
catch (IOException e)
{
@@ -230,6 +241,7 @@ public class DSSKeyPairPKCS8Codec
throw y;
}
+ log.exiting("DSSKeyPairPKCS8Codec", "decodePrivateKey");
return new DSSPrivateKey(Registry.PKCS8_ENCODING_ID, p, q, g, x);
}
}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java
index 86e5b0b..7c5491d 100644
--- a/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java
+++ b/libjava/classpath/gnu/java/security/key/dss/DSSKeyPairRawCodec.java
@@ -49,8 +49,6 @@ import java.security.PublicKey;
/**
* <p>An object that implements the {@link IKeyPairCodec} operations for the
* <i>Raw</i> format to use with DSS keypairs.</p>
- *
- * @version $Revision: 1.1 $
*/
public class DSSKeyPairRawCodec implements IKeyPairCodec
{
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java
index c81eb93..fe59cb6 100644
--- a/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java
+++ b/libjava/classpath/gnu/java/security/key/dss/DSSPrivateKey.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.security.key.dss;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
import gnu.java.security.key.IKeyPairCodec;
@@ -48,21 +49,24 @@ import java.security.interfaces.DSAPrivateKey;
/**
* <p>An object that embodies a DSS (Digital Signature Standard) private key.</p>
*
- * @version $Revision: 1.2 $
* @see #getEncoded
*/
public class DSSPrivateKey extends DSSKey implements PrivateKey, DSAPrivateKey
{
-
// Constants and variables
// -------------------------------------------------------------------------
+ private static final boolean DEBUG = false;
+
/**
* <p>A randomly or pseudorandomly generated integer with <code>0 &lt; x &lt;
* q</code>.</p>
*/
private final BigInteger x;
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -198,4 +202,18 @@ public class DSSPrivateKey extends DSSKey implements PrivateKey, DSAPrivateKey
DSAPrivateKey that = (DSAPrivateKey) obj;
return super.equals(that) && x.equals(that.getX());
}
+
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder(this.getClass().getName()).append("(")
+ .append(super.toString()).append(",").append(ls)
+ .append("x=0x").append(DEBUG ? x.toString(16) : "**...*").append(ls)
+ .append(")").toString();
+ }
+
+ return str;
+ }
}
diff --git a/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java b/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java
index 93bb640..5229213 100644
--- a/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java
+++ b/libjava/classpath/gnu/java/security/key/dss/DSSPublicKey.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.security.key.dss;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
import gnu.java.security.key.IKeyPairCodec;
@@ -48,12 +49,10 @@ import java.security.interfaces.DSAPublicKey;
/**
* <p>An object that embodies a DSS (Digital Signature Standard) public key.</p>
*
- * @version $Revision: 1.2 $
* @see #getEncoded
*/
public class DSSPublicKey extends DSSKey implements PublicKey, DSAPublicKey
{
-
// Constants and variables
// -------------------------------------------------------------------------
@@ -63,6 +62,9 @@ public class DSSPublicKey extends DSSKey implements PublicKey, DSAPublicKey
*/
private final BigInteger y;
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -198,4 +200,18 @@ public class DSSPublicKey extends DSSKey implements PublicKey, DSAPublicKey
DSAPublicKey that = (DSAPublicKey) obj;
return super.equals(that) && y.equals(that.getY());
}
+
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder(this.getClass().getName()).append("(")
+ .append(super.toString()).append(",").append(ls)
+ .append("y=0x").append(y.toString(16)).append(ls)
+ .append(")").toString();
+ }
+
+ return str;
+ }
}
diff --git a/libjava/classpath/gnu/java/security/key/dss/FIPS186.java b/libjava/classpath/gnu/java/security/key/dss/FIPS186.java
index 74be626..5984bcc 100644
--- a/libjava/classpath/gnu/java/security/key/dss/FIPS186.java
+++ b/libjava/classpath/gnu/java/security/key/dss/FIPS186.java
@@ -53,8 +53,6 @@ import java.security.SecureRandom;
* <a href="http://www.itl.nist.gov/fipspubs/fip186.htm">Digital Signature
* Standard (DSS)</a>, Federal Information Processing Standards Publication 186.
* National Institute of Standards and Technology.
- *
- * @version $Revision: 1.2 $
*/
public class FIPS186
{
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java
index 72cd808..3009dd7 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAKey.java
@@ -38,8 +38,8 @@ exception statement from your version. */
package gnu.java.security.key.rsa;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
-import gnu.java.security.key.IKeyPairCodec;
import gnu.java.security.util.FormatUtil;
import java.math.BigInteger;
@@ -48,8 +48,6 @@ import java.security.interfaces.RSAKey;
/**
* <p>A base asbtract class for both public and private RSA keys.</p>
- *
- * @version $Revision: 1.3 $
*/
public abstract class GnuRSAKey implements Key, RSAKey
{
@@ -69,6 +67,9 @@ public abstract class GnuRSAKey implements Key, RSAKey
*/
protected final int defaultFormat;
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -113,7 +114,7 @@ public abstract class GnuRSAKey implements Key, RSAKey
/** @deprecated see getEncoded(int). */
public byte[] getEncoded()
{
- return getEncoded(IKeyPairCodec.RAW_FORMAT);
+ return getEncoded(defaultFormat);
}
public String getFormat()
@@ -175,6 +176,20 @@ public abstract class GnuRSAKey implements Key, RSAKey
return n.equals(that.getModulus());
}
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder().append(ls)
+ .append("defaultFormat=").append(defaultFormat).append(",").append(ls)
+ .append("n=0x").append(n.toString(16)).append(",").append(ls)
+ .append("e=0x").append(e.toString(16))
+ .toString();
+ }
+ return str;
+ }
+
// abstract methods to be implemented by subclasses ------------------------
public abstract byte[] getEncoded(int format);
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java
index f8acaa5..9205344 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPrivateKey.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.security.key.rsa;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
import gnu.java.security.key.IKeyPairCodec;
@@ -56,16 +57,15 @@ import java.security.interfaces.RSAPrivateKey;
* Primitive specification and supporting documentation.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.3 $
*/
public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey,
RSAPrivateCrtKey
{
-
// Constants and variables
// -------------------------------------------------------------------------
+ private static final boolean DEBUG = false;
+
/** The first prime divisor of the modulus. */
private final BigInteger p;
@@ -86,6 +86,9 @@ public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey,
/** The CRT (Chinese Remainder Theorem) coefficient. */
private final BigInteger qInv;
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -296,4 +299,22 @@ public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey,
}
return false;
}
+
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder(this.getClass().getName()).append("(")
+ .append(super.toString()).append(",").append(ls)
+ .append("d=0x").append(DEBUG ? d.toString(16) : "**...*").append(ls)
+ .append("p=0x").append(DEBUG ? p.toString(16) : "**...*").append(ls)
+ .append("q=0x").append(DEBUG ? q.toString(16) : "**...*").append(ls)
+ .append("dP=0x").append(DEBUG ? dP.toString(16) : "**...*").append(ls)
+ .append("dQ=0x").append(DEBUG ? dQ.toString(16) : "**...*").append(ls)
+ .append("qInv=0x").append(DEBUG ? qInv.toString(16) : "**...*").append(ls)
+ .append(")").toString();
+ }
+ return str;
+ }
}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java
index f49027c..8badede 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/GnuRSAPublicKey.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.security.key.rsa;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Registry;
import gnu.java.security.key.IKeyPairCodec;
@@ -55,16 +56,16 @@ import java.security.interfaces.RSAPublicKey;
* Primitive specification and supporting documentation.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.2 $
*/
public class GnuRSAPublicKey extends GnuRSAKey implements PublicKey,
RSAPublicKey
{
-
// Constants and variables
// -------------------------------------------------------------------------
+ /** String representation of this key. Cached for speed. */
+ private transient String str;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -182,4 +183,16 @@ public class GnuRSAPublicKey extends GnuRSAKey implements PublicKey,
return super.equals(that)
&& getPublicExponent().equals(that.getPublicExponent());
}
+
+ public String toString()
+ {
+ if (str == null)
+ {
+ String ls = SystemProperties.getProperty("line.separator");
+ str = new StringBuilder(this.getClass().getName()).append("(")
+ .append(super.toString()).append(",").append(ls)
+ .append(")").toString();
+ }
+ return str;
+ }
}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java
index 9c7338f..3906338 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairGenerator.java
@@ -50,6 +50,7 @@ import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.RSAKeyGenParameterSpec;
import java.util.Map;
+import java.util.logging.Logger;
/**
* <p>A key-pair generator for asymetric keys to use in conjunction with the RSA
@@ -68,10 +69,11 @@ import java.util.Map;
*/
public class RSAKeyPairGenerator implements IKeyPairGenerator
{
-
// Constants and variables
// -------------------------------------------------------------------------
+ private static final Logger log = Logger.getLogger(RSAKeyPairGenerator.class.getName());
+
/** The BigInteger constant 1. */
private static final BigInteger ONE = BigInteger.ONE;
@@ -150,6 +152,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator
*/
public void setup(Map attributes)
{
+ log.entering(this.getClass().getName(), "setup", attributes);
+
// do we have a SecureRandom, or should we use our own?
rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS);
@@ -177,6 +181,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator
Integer formatID = (Integer) attributes.get(PREFERRED_ENCODING_FORMAT);
preferredFormat = formatID == null ? DEFAULT_ENCODING_FORMAT
: formatID.intValue();
+
+ log.exiting(this.getClass().getName(), "setup");
}
/**
@@ -187,6 +193,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator
*/
public KeyPair generate()
{
+ log.entering(this.getClass().getName(), "generate");
+
BigInteger p, q, n, d;
// 1. Generate a prime p in the interval [2**(M-1), 2**M - 1], where
@@ -234,7 +242,9 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator
PublicKey pubK = new GnuRSAPublicKey(preferredFormat, n, e);
PrivateKey secK = new GnuRSAPrivateKey(preferredFormat, p, q, e, d);
- return new KeyPair(pubK, secK);
+ KeyPair result = new KeyPair(pubK, secK);
+ log.exiting(this.getClass().getName(), "generate", result);
+ return result;
}
// helper methods ----------------------------------------------------------
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java
index a7f65b6..0b98090 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java
@@ -45,6 +45,7 @@ import java.security.InvalidParameterException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.ArrayList;
+import java.util.logging.Logger;
import gnu.java.security.OID;
import gnu.java.security.Registry;
@@ -62,6 +63,7 @@ import gnu.java.security.util.DerUtil;
public class RSAKeyPairPKCS8Codec
implements IKeyPairCodec
{
+ private static final Logger log = Logger.getLogger(RSAKeyPairPKCS8Codec.class.getName());
private static final OID RSA_ALG_OID = new OID(Registry.RSA_OID_STRING);
// implicit 0-arguments constructor
@@ -120,6 +122,8 @@ public class RSAKeyPairPKCS8Codec
*/
public byte[] encodePrivateKey(PrivateKey key)
{
+ log.entering(this.getClass().getName(), "encodePrivateKey()", key);
+
if (! (key instanceof GnuRSAPrivateKey))
throw new InvalidParameterException("Wrong key type");
@@ -187,6 +191,7 @@ public class RSAKeyPairPKCS8Codec
throw y;
}
+ log.exiting(this.getClass().getName(), "encodePrivateKey()", result);
return result;
}
@@ -208,6 +213,8 @@ public class RSAKeyPairPKCS8Codec
*/
public PrivateKey decodePrivateKey(byte[] input)
{
+ log.entering(this.getClass().getName(), "decodePrivateKey()", input);
+
if (input == null)
throw new InvalidParameterException("Input bytes MUST NOT be null");
@@ -278,7 +285,9 @@ public class RSAKeyPairPKCS8Codec
throw y;
}
- return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID, n, e, d, p, q,
- dP, dQ, qInv);
+ PrivateKey result = new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID, n, e,
+ d, p, q, dP, dQ, qInv);
+ log.exiting(this.getClass().getName(), "decodePrivateKey()", result);
+ return result;
}
}
diff --git a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
index 1c36278..882d9c7 100644
--- a/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
+++ b/libjava/classpath/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java
@@ -128,8 +128,9 @@ public class RSAKeyPairX509Codec
DERValue derN = new DERValue(DER.INTEGER, n);
DERValue derE = new DERValue(DER.INTEGER, e);
- ArrayList algorithmID = new ArrayList(1);
+ ArrayList algorithmID = new ArrayList(2);
algorithmID.add(derOID);
+ algorithmID.add(new DERValue(DER.NULL, null));
DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
algorithmID);
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/AttributeList_test.java b/libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java
index 3166277..3d3052b 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/AttributeList_test.java
+++ b/libjava/classpath/gnu/java/security/pkcs/PKCS7Data.java
@@ -1,5 +1,5 @@
-/* AttributeList_test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* PKCS7Data.java -- Reader/writer for PKCS#7 Data objects
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,33 +36,34 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser;
+package gnu.java.security.pkcs;
-import javax.swing.text.html.parser.AttributeList;
+import gnu.java.security.OID;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * A read/write helper class for PKCS#7 Data ASN.1 structures.
*/
-public class AttributeList_test
- extends TestCase
+public class PKCS7Data
{
- private AttributeList attributeList = null;
+ public static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
- public void testSame()
+ private byte[] content;
+
+ /**
+ * Constructs a new instance of <code>PKCS7Data</code> with the possibly
+ * null (implicetly referenced) content data.
+ *
+ * @param data the raw bytes of the data to use in a PKCS#7 framework.
+ */
+ public PKCS7Data(byte[] data)
{
- for (int i = 0; i < 100; i++)
- {
- String t = AttributeList.type2name(i);
- if (t != null)
- assertEquals(i, AttributeList.name2type(t));
- }
+ super();
+
+ this.content = data;
}
- protected void setUp()
- throws Exception
+ public byte[] getEncoded()
{
- super.setUp();
- attributeList = new AttributeList("ku");
- assertEquals(attributeList.toString(), "ku");
+ return content;
}
}
diff --git a/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java b/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
index ba5efc7..0781f4b 100644
--- a/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
+++ b/libjava/classpath/gnu/java/security/pkcs/PKCS7SignedData.java
@@ -1,5 +1,5 @@
-/* PKCS7SignedData.java -- reader for PKCS#7 signedData objects
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+/* PKCS7SignedData.java -- reader/writer for PKCS#7 signedData objects
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,19 +42,26 @@ import gnu.java.security.ber.BER;
import gnu.java.security.ber.BEREncodingException;
import gnu.java.security.ber.BERReader;
import gnu.java.security.ber.BERValue;
+import gnu.java.security.der.DER;
import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+import gnu.java.security.util.Util;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.math.BigInteger;
import java.security.cert.CRL;
import java.security.cert.CRLException;
import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
+import java.security.cert.X509CRL;
import java.util.ArrayList;
import java.util.Collections;
@@ -63,6 +70,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import java.util.logging.Logger;
/**
* The SignedData object in PKCS #7. This is a read-only implementation of
@@ -72,8 +80,8 @@ import java.util.Set;
*/
public class PKCS7SignedData
{
+ private static final Logger log = Logger.getLogger(PKCS7SignedData.class.getName());
- public static final OID PKCS7_DATA = new OID("1.2.840.113549.1.7.1");
public static final OID PKCS7_SIGNED_DATA = new OID("1.2.840.113549.1.7.2");
private BigInteger version;
@@ -84,13 +92,6 @@ public class PKCS7SignedData
private CRL[] crls;
private Set signerInfos;
- private static final boolean DEBUG = false;
- private static void debug(String msg)
- {
- System.err.print("PKCS7SignedData >> ");
- System.err.println(msg);
- }
-
public PKCS7SignedData(InputStream in)
throws CRLException, CertificateException, IOException
{
@@ -103,14 +104,12 @@ public class PKCS7SignedData
*
* <pre>
* SignedData ::= SEQUENCE {
- * version Version,
- * digestAlgorithms DigestAlgorithmIdentifiers,
- * contentInfo ContentInfo,
- * certificates
- * [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
- * crls
- * [1] IMPLICIT CertificateRevocationLists OPTIONAL,
- * signerInfos SignerInfos }
+ * version Version, -- always 1 for PKCS7 v1.5
+ * digestAlgorithms DigestAlgorithmIdentifiers,
+ * contentInfo ContentInfo,
+ * certificates [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
+ * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+ * signerInfos SignerInfos }
*
* Version ::= INTEGER
*
@@ -119,8 +118,8 @@ public class PKCS7SignedData
* DigestAlgorithmIdentifier ::= AlgorithmIdentifier
*
* ContentInfo ::= SEQUENCE {
- * contentType ContentType,
- * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+ * contentType ContentType,
+ * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
*
* ContentType ::= OBJECT IDENTIFIER
*
@@ -128,7 +127,7 @@ public class PKCS7SignedData
* SET OF ExtendedCertificatesAndCertificate
*
* ExtendedCertificatesAndCertificate ::= CHOICE {
- * certificate Certificate, -- from X.509
+ * certificate Certificate, -- from X.509
* extendedCertificate [0] IMPLICIT ExtendedCertificate }
*
* CertificateRevocationLists ::= SET OF CertificateRevocationList
@@ -137,15 +136,13 @@ public class PKCS7SignedData
* SignerInfos ::= SET OF SignerInfo
*
* SignerInfo ::= SEQUENCE {
- * version Version,
- * issuerAndSerialNumber IssuerAndSerialNumber,
- * digestAlgorithm DigestAlgorithmIdentifier,
- * authenticatedAttributes
- * [0] IMPLICIT Attributes OPTIONAL,
- * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
- * encryptedDigest EncryptedDigest,
- * unauthenticatedAttributes
- * [1] IMPLICIT Attributes OPTIONAL }
+ * version Version, -- always 1 for PKCS7 v1.5
+ * issuerAndSerialNumber IssuerAndSerialNumber,
+ * digestAlgorithm DigestAlgorithmIdentifier,
+ * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+ * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+ * encryptedDigest EncryptedDigest,
+ * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL }
*
* EncryptedDigest ::= OCTET STRING
* </pre>
@@ -177,23 +174,21 @@ public class PKCS7SignedData
if (!val.isConstructed())
throw new BEREncodingException("malformed SignedData");
- if (DEBUG)
- debug("SignedData: " + val);
+ log.finest("SignedData: " + val);
val = ber.read();
if (val.getTag() != BER.INTEGER)
throw new BEREncodingException("expecting Version");
version = (BigInteger) val.getValue();
- if (DEBUG)
- debug(" Version: " + version);
+ log.finest(" Version: " + version);
digestAlgorithms = new HashSet();
val = ber.read();
if (!val.isConstructed())
throw new BEREncodingException("malformed DigestAlgorithmIdentifiers");
- if (DEBUG)
- debug(" DigestAlgorithmIdentifiers: " + val);
+
+ log.finest(" DigestAlgorithmIdentifiers: " + val);
int count = 0;
DERValue val2 = ber.read();
while (val2 != BER.END_OF_SEQUENCE &&
@@ -201,14 +196,14 @@ public class PKCS7SignedData
{
if (!val2.isConstructed())
throw new BEREncodingException("malformed AlgorithmIdentifier");
- if (DEBUG)
- debug(" AlgorithmIdentifier: " + val2);
+
+ log.finest(" AlgorithmIdentifier: " + val2);
count += val2.getEncodedLength();
val2 = ber.read();
if (val2.getTag() != BER.OBJECT_IDENTIFIER)
throw new BEREncodingException("malformed AlgorithmIdentifier");
- if (DEBUG)
- debug(" ID: " + val2.getValue());
+
+ log.finest(" digestAlgorithmIdentifiers OID: " + val2.getValue());
List algId = new ArrayList(2);
algId.add(val2.getValue());
val2 = ber.read();
@@ -219,29 +214,33 @@ public class PKCS7SignedData
algId.add(null);
else
algId.add(val2.getEncoded());
- if (DEBUG)
- debug(" params: " + new BigInteger(1, val2.getEncoded()).toString(16));
+
if (val2.isConstructed())
ber.skip(val2.getLength());
+
if (BERValue.isIndefinite(val))
val2 = ber.read();
}
else
algId.add(null);
+
+ log.finest(" digestAlgorithmIdentifiers params: ");
+ log.finest(Util.dumpString((byte[]) algId.get(1),
+ " digestAlgorithmIdentifiers params: "));
digestAlgorithms.add(algId);
}
val = ber.read();
if (!val.isConstructed())
throw new BEREncodingException("malformed ContentInfo");
- if (DEBUG)
- debug(" ContentInfo: " + val);
+
+ log.finest(" ContentInfo: " + val);
val2 = ber.read();
if (val2.getTag() != BER.OBJECT_IDENTIFIER)
throw new BEREncodingException("malformed ContentType");
+
contentType = (OID) val2.getValue();
- if (DEBUG)
- debug(" ContentType: " + contentType);
+ log.finest(" ContentType OID: " + contentType);
if (BERValue.isIndefinite(val)
|| (val.getLength() > 0 && val.getLength() > val2.getEncodedLength()))
{
@@ -251,18 +250,19 @@ public class PKCS7SignedData
content = val2.getEncoded();
if (BERValue.isIndefinite(val))
val2 = ber.read();
- if (DEBUG)
- debug(" Content: " + new BigInteger(1, content).toString(16));
}
}
+ log.finest(" Content: ");
+ log.finest(Util.dumpString(content, " Content: "));
+
val = ber.read();
if (val.getTag() == 0)
{
if (!val.isConstructed())
throw new BEREncodingException("malformed ExtendedCertificatesAndCertificates");
- if (DEBUG)
- debug(" ExtendedCertificatesAndCertificates: " + val);
+
+ log.finest(" ExtendedCertificatesAndCertificates: " + val);
count = 0;
val2 = ber.read();
List certs = new LinkedList();
@@ -271,8 +271,7 @@ public class PKCS7SignedData
{
Certificate cert =
x509.generateCertificate(new ByteArrayInputStream(val2.getEncoded()));
- if (DEBUG)
- debug(" Certificate: " + cert);
+ log.finest(" Certificate: " + cert);
certs.add(cert);
count += val2.getEncodedLength();
ber.skip(val2.getLength());
@@ -287,8 +286,8 @@ public class PKCS7SignedData
{
if (!val.isConstructed())
throw new BEREncodingException("malformed CertificateRevocationLists");
- if (DEBUG)
- debug(" CertificateRevocationLists: " + val);
+
+ log.finest(" CertificateRevocationLists: " + val);
count = 0;
val2 = ber.read();
List crls = new LinkedList();
@@ -296,8 +295,7 @@ public class PKCS7SignedData
(val.getLength() > 0 && val.getLength() > count))
{
CRL crl = x509.generateCRL(new ByteArrayInputStream(val2.getEncoded()));
- if (DEBUG)
- debug (" CRL: " + crl);
+ log.finest(" CRL: " + crl);
crls.add(crl);
count += val2.getEncodedLength();
ber.skip(val2.getLength());
@@ -312,8 +310,7 @@ public class PKCS7SignedData
if (!val.isConstructed())
throw new BEREncodingException("malformed SignerInfos");
- if (DEBUG)
- debug(" SignerInfos: " + val);
+ log.finest(" SignerInfos: " + val);
// FIXME read this more carefully.
// Since we are just reading a file (probably) we just read until we
@@ -327,6 +324,39 @@ public class PKCS7SignedData
}
}
+ /**
+ * Constructs a new instance of <code>PKCS7SignedData</code> given a
+ * designated set of fields.
+ *
+ * @param digestAlgorithms the collection of DigestAlgorithm elements. Each
+ * DigestAlgorithm is a {@link List} of two elements, the first is an
+ * OID while the second is dependent on the value of the OID element.
+ * @param data an instance of a PKCS#7 (non-signed) data. In its simplest form
+ * such an ASN.1 structure would consist of just the OID of a
+ * non-signed PKCS#7 Data.
+ * @param certificates the array of Certificates used to authenticate the
+ * enclosed (or referenced, in case the content is null) data.
+ * @param crls the array of certificate-revocation lists of the used
+ * certificates.
+ * @param signerInfos a set of {@link SignerInfo} elements, one per signer of
+ * the data referenced by this <code>PKCS7SignedData</code>
+ * instance.
+ */
+ public PKCS7SignedData(Set digestAlgorithms, PKCS7Data data,
+ Certificate[] certificates, X509CRL[] crls,
+ Set signerInfos)
+ {
+ super();
+
+ this.version = BigInteger.ONE;
+ this.digestAlgorithms = digestAlgorithms;
+ this.contentType = PKCS7_SIGNED_DATA;
+ this.content = data == null ? null : data.getEncoded();
+ this.certificates = certificates;
+ this.crls = crls;
+ this.signerInfos = signerInfos;
+ }
+
public BigInteger getVersion()
{
return version;
@@ -361,4 +391,89 @@ public class PKCS7SignedData
copy.add(it.next());
return Collections.unmodifiableSet(copy);
}
+
+ /**
+ * Writes to the designated output stream the DER encoding of the current
+ * contents of this instance.
+ *
+ * @param out the destination output stream.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws CRLException if an exception occurs while encoding the certificate
+ * revocation lists associated with this instance.
+ * @throws CertificateEncodingException if an exception occurs while encoding
+ * the certificate chains associated with this instance.
+ */
+ public void encode(OutputStream out) throws IOException, CRLException,
+ CertificateEncodingException
+ {
+ DERValue derVersion = new DERValue(DER.INTEGER, version);
+
+ DERValue derDigestAlgorithms = new DERValue(DER.CONSTRUCTED | DER.SET,
+ digestAlgorithms);
+
+ DERValue derContentType = new DERValue(DER.OBJECT_IDENTIFIER,
+ PKCS7Data.PKCS7_DATA);
+ ArrayList contentInfo = new ArrayList(2);
+ contentInfo.add(derContentType);
+ if (content == null)
+ contentInfo.add(new DERValue(DER.NULL, null));
+ else
+ contentInfo.add(content);
+
+ DERValue derContentInfo = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ contentInfo);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
+ for (int i = 0; i < certificates.length; i++)
+ baos.write(certificates[i].getEncoded());
+
+ baos.flush();
+ byte[] b = baos.toByteArray();
+ DERValue derExtendedCertificatesAndCertificates =
+ new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 0, b.length, b, null);
+
+ DERValue derCertificateRevocationLists = null;
+ if (crls != null && crls.length > 0)
+ {
+ baos.reset();
+ for (int i = 0; i < crls.length; i++)
+ baos.write(((X509CRL) crls[i]).getEncoded());
+
+ baos.flush();
+ byte[] b2 = baos.toByteArray();
+ derCertificateRevocationLists =
+ new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 1, b2.length, b2, null);
+ }
+
+ baos.reset();
+ for (Iterator it = signerInfos.iterator(); it.hasNext();)
+ {
+ SignerInfo signerInfo = (SignerInfo) it.next();
+ signerInfo.encode(baos);
+ }
+ baos.flush();
+ byte[] b3 = baos.toByteArray();
+ DERValue derSignerInfos = new DERValue(DER.CONSTRUCTED | DER.SET,
+ b3.length, b3, null);
+
+ ArrayList signedData = new ArrayList(6);
+ signedData.add(derVersion);
+ signedData.add(derDigestAlgorithms);
+ signedData.add(derContentInfo);
+ signedData.add(derExtendedCertificatesAndCertificates);
+ if (derCertificateRevocationLists != null)
+ signedData.add(derCertificateRevocationLists);
+
+ signedData.add(derSignerInfos);
+ DERValue derSignedData = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ signedData);
+ // now the outer contents
+ ArrayList outer = new ArrayList(3);
+ outer.add(new DERValue(DER.OBJECT_IDENTIFIER, PKCS7_SIGNED_DATA));
+ outer.add(new DERValue(DER.CONTEXT | 0, null));
+ outer.add(derSignedData);
+ DERValue derOuter = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, outer);
+
+ DERWriter.write(out, derOuter);
+ }
}
diff --git a/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java b/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
index c976799..7b38bfe 100644
--- a/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
+++ b/libjava/classpath/gnu/java/security/pkcs/SignerInfo.java
@@ -42,16 +42,25 @@ import gnu.java.security.ber.BER;
import gnu.java.security.ber.BEREncodingException;
import gnu.java.security.ber.BERReader;
import gnu.java.security.ber.BERValue;
+import gnu.java.security.der.DER;
import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+import gnu.java.security.util.Util;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.logging.Logger;
import javax.security.auth.x500.X500Principal;
public class SignerInfo
{
+ private static final Logger log = Logger.getLogger(SignerInfo.class.getName());
+
private final BigInteger version;
private final BigInteger serialNumber;
private final X500Principal issuer;
@@ -63,67 +72,80 @@ public class SignerInfo
private final byte[] encryptedDigest;
private final byte[] unauthenticatedAttributes;
- private static final boolean DEBUG = false;
- private static void debug(String msg)
- {
- System.err.print("SignerInfo >> ");
- System.err.println(msg);
- }
-
/**
* Parse a SignerInfo object.
+ * <p>
+ * A SignerInfo is a structure with the following ASN.1 syntax:
+ * <pre>
+ * SignerInfo ::= SEQUENCE {
+ * version Version, -- always 1 for PKCS7 v1.5
+ * issuerAndSerialNumber IssuerAndSerialNumber, -- an INTEGER
+ * digestAlgorithm DigestAlgorithmIdentifier,
+ * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+ * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+ * encryptedDigest EncryptedDigest,
+ * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL }
+ *
+ * IssuerAndSerialNumber ::= SEQUENCE {
+ * issuer Name,
+ * serialNumber CertificateSerialNumber
+ * }
+ *
+ * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+ *
+ * DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+ *
+ * EncryptedDigest ::= OCTET STRING
+ * </pre>
*/
public SignerInfo(BERReader ber) throws IOException
{
DERValue val = ber.read();
- if (DEBUG)
- debug("SignerInfo: " + val);
+ log.finest("SignerInfo: " + val);
if (!val.isConstructed())
throw new BEREncodingException("malformed SignerInfo");
val = ber.read();
if (val.getTag() != BER.INTEGER)
throw new BEREncodingException("malformed Version");
- version = (BigInteger) val.getValue();
- if (DEBUG)
- debug(" Version: " + version);
+ version = (BigInteger) val.getValue();
+ log.finest(" Version: " + version);
val = ber.read();
if (!val.isConstructed())
throw new BEREncodingException("malformed IssuerAndSerialNumber");
- if (DEBUG)
- debug(" IssuerAndSerialNumber: " + val);
+ log.finest(" IssuerAndSerialNumber: " + val);
val = ber.read();
if (!val.isConstructed())
throw new BEREncodingException("malformed Issuer");
+
issuer = new X500Principal(val.getEncoded());
ber.skip(val.getLength());
- if (DEBUG)
- debug(" Issuer: " + issuer);
+ log.finest(" Issuer: " + issuer);
val = ber.read();
if (val.getTag() != BER.INTEGER)
throw new BEREncodingException("malformed SerialNumber");
+
serialNumber = (BigInteger) val.getValue();
- if (DEBUG)
- debug(" SerialNumber: " + serialNumber);
+ log.finest(" SerialNumber: " + serialNumber);
val = ber.read();
if (!val.isConstructed())
throw new BEREncodingException("malformed DigestAlgorithmIdentifier");
- if (DEBUG)
- debug(" DigestAlgorithmIdentifier: " + val);
+
+ log.finest(" DigestAlgorithmIdentifier: " + val);
int count = 0;
DERValue val2 = ber.read();
if (val2.getTag() != BER.OBJECT_IDENTIFIER)
throw new BEREncodingException("malformed AlgorithmIdentifier");
+
digestAlgorithmId = (OID) val2.getValue();
- if (DEBUG)
- debug(" OID: " + digestAlgorithmId);
+ log.finest(" digestAlgorithm OID: " + digestAlgorithmId);
if (BERValue.isIndefinite(val))
{
@@ -147,9 +169,10 @@ public class SignerInfo
}
else
digestAlgorithmParams = null;
- if(DEBUG)
- debug(" params: " + (digestAlgorithmParams == null ? null
- : new BigInteger(digestAlgorithmParams).toString(16)));
+
+ log.finest(" digestAlgorithm params: ");
+ log.finest(Util.dumpString(digestAlgorithmParams,
+ " digestAlgorithm params: "));
val = ber.read();
if (val.getTag() == 0)
@@ -158,24 +181,27 @@ public class SignerInfo
val = ber.read();
if (val.isConstructed())
ber.skip(val.getLength());
- if (DEBUG)
- debug(" AuthenticatedAttributes: " + val);
+
val = ber.read();
}
else
authenticatedAttributes = null;
+ log.finest(" AuthenticatedAttributes: ");
+ log.finest(Util.dumpString(authenticatedAttributes,
+ " AuthenticatedAttributes: "));
+
if (!val.isConstructed())
throw new BEREncodingException("malformed DigestEncryptionAlgorithmIdentifier");
- if (DEBUG)
- debug(" DigestEncryptionAlgorithmIdentifier: " + val);
+
+ log.finest(" DigestEncryptionAlgorithmIdentifier: " + val);
count = 0;
val2 = ber.read();
if (val2.getTag() != BER.OBJECT_IDENTIFIER)
throw new BEREncodingException("malformed AlgorithmIdentifier");
+
digestEncryptionAlgorithmId = (OID) val2.getValue();
- if (DEBUG)
- debug(" OID: " + digestEncryptionAlgorithmId);
+ log.finest(" digestEncryptionAlgorithm OID: " + digestEncryptionAlgorithmId);
if (BERValue.isIndefinite(val))
{
@@ -199,26 +225,74 @@ public class SignerInfo
}
else
digestEncryptionAlgorithmParams = null;
- if(DEBUG)
- debug(" params: " + (digestEncryptionAlgorithmParams == null ? null
- : new BigInteger(digestEncryptionAlgorithmParams).toString(16)));
+
+ log.finest(" digestEncryptionAlgorithm params: ");
+ log.finest(Util.dumpString(digestEncryptionAlgorithmParams,
+ " digestEncryptionAlgorithm params: "));
val = ber.read();
if (val.getTag() != BER.OCTET_STRING)
throw new BEREncodingException("malformed EncryptedDigest");
+
encryptedDigest = (byte[]) val.getValue();
- if (DEBUG)
- debug(" EncryptedDigest: " + new BigInteger(1, encryptedDigest).toString(16));
+ log.finest(" EncryptedDigest: ");
+ log.finest(Util.dumpString(encryptedDigest, " EncryptedDigest: "));
if (ber.peek() == 1)
unauthenticatedAttributes = ber.read().getEncoded();
else
unauthenticatedAttributes = null;
+ log.finest(" UnauthenticatedAttributes: ");
+ log.finest(Util.dumpString(unauthenticatedAttributes,
+ " UnauthenticatedAttributes: "));
+
if (ber.peek() == 0)
ber.read();
}
+ /**
+ * Constructs a new instance of <code>SignerInfo</code> given a designated
+ * set of fields.
+ *
+ * @param issuer the X.500 Principal name of the signer referenced by this
+ * instance.
+ * @param serialNumber the serial number of the certificate being used. Both
+ * this and the previous arguments are gleaned from the signer's
+ * certificate.
+ * @param digestAlgorithmOID the OID of the digest algorithm. When
+ * constructing the DigestAlgorithmIdentifier with this OID, the
+ * parameters part will be NULL.
+ * @param authenticatedAttributes the encoding of the set of authenticated
+ * attributes to use.
+ * @param digestEncryptionAlgorithmOID the OID of the digest encryption
+ * algorithm. When constructing the
+ * DigestEncryptionAlgorithmIdentifier with this OID, the parameters
+ * part will be NULL.
+ * @param encryptedDigest the encrypted hash generated with this signer's
+ * private key.
+ * @param unauthenticatedAttributes the encoding of the set of
+ * unauthencticated attributes.
+ */
+ public SignerInfo(X500Principal issuer, BigInteger serialNumber,
+ OID digestAlgorithmOID, byte[] authenticatedAttributes,
+ OID digestEncryptionAlgorithmOID,
+ byte[] encryptedDigest, byte[] unauthenticatedAttributes)
+ {
+ super();
+
+ this.version = BigInteger.ONE;
+ this.issuer = issuer;
+ this.serialNumber = serialNumber;
+ this.digestAlgorithmId = digestAlgorithmOID;
+ this.digestAlgorithmParams = null;
+ this.authenticatedAttributes = authenticatedAttributes;
+ this.digestEncryptionAlgorithmId = digestEncryptionAlgorithmOID;
+ this.digestEncryptionAlgorithmParams = null;
+ this.encryptedDigest = encryptedDigest;
+ this.unauthenticatedAttributes = unauthenticatedAttributes;
+ }
+
public BigInteger getVersion()
{
return version;
@@ -276,4 +350,65 @@ public class SignerInfo
? (byte[]) unauthenticatedAttributes.clone()
: null);
}
+
+ /**
+ * Writes to the designated output stream the DER encoding of the current
+ * contents of this instance.
+ *
+ * @param out the destination output stream.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ public void encode(OutputStream out) throws IOException
+ {
+ DERValue derVersion = new DERValue(DER.INTEGER, version);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
+ baos.write(issuer.getEncoded());
+ DERValue derSerialNumber = new DERValue(DER.INTEGER, serialNumber);
+ DERWriter.write(baos, derSerialNumber);
+ baos.flush();
+ byte[] b = baos.toByteArray();
+ DERValue derIssuerAndSerialNumber =
+ new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, b.length, b, null);
+
+ DERValue derDigestAlgorithmOID = new DERValue(DER.OBJECT_IDENTIFIER,
+ digestAlgorithmId);
+ ArrayList digestAlgorithmIdentifier = new ArrayList(1);
+ digestAlgorithmIdentifier.add(derDigestAlgorithmOID);
+ DERValue derDigestAlgorithmIdentifier =
+ new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, digestAlgorithmIdentifier);
+
+ DERValue derAuthenticatedAttributes;
+ if (authenticatedAttributes == null)
+ derAuthenticatedAttributes = new DERValue(DER.NULL, null);
+ else
+ derAuthenticatedAttributes = new DERValue(DER.CONSTRUCTED | DER.SET,
+ authenticatedAttributes);
+
+ DERValue derDigestEncryptionAlgorithmOID =
+ new DERValue(DER.OBJECT_IDENTIFIER, digestEncryptionAlgorithmId);
+ ArrayList digestEncryptionAlgorithmIdentifier = new ArrayList(1);
+ digestEncryptionAlgorithmIdentifier.add(derDigestEncryptionAlgorithmOID);
+ DERValue derDigestEncryptionAlgorithmIdentifier =
+ new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, digestEncryptionAlgorithmIdentifier);
+
+ DERValue derEncryptedDigest = new DERValue(DER.OCTET_STRING, encryptedDigest);
+
+ DERValue derUnauthenticatedAttributes;
+ if (unauthenticatedAttributes == null)
+ derUnauthenticatedAttributes = new DERValue(DER.NULL, null);
+ else
+ derUnauthenticatedAttributes = new DERValue(DER.CONSTRUCTED | DER.SET,
+ unauthenticatedAttributes);
+
+ ArrayList signerInfo = new ArrayList(5);
+ signerInfo.add(derVersion);
+ signerInfo.add(derIssuerAndSerialNumber);
+ signerInfo.add(derDigestAlgorithmIdentifier);
+ signerInfo.add(derDigestEncryptionAlgorithmIdentifier);
+ signerInfo.add(derEncryptedDigest);
+ DERValue derSignerInfo = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ signerInfo);
+ DERWriter.write(out, derSignerInfo);
+ }
}
diff --git a/libjava/classpath/gnu/java/security/prng/MDGenerator.java b/libjava/classpath/gnu/java/security/prng/MDGenerator.java
index 255647d..073c559 100644
--- a/libjava/classpath/gnu/java/security/prng/MDGenerator.java
+++ b/libjava/classpath/gnu/java/security/prng/MDGenerator.java
@@ -122,6 +122,20 @@ public class MDGenerator extends BasePRNG implements Cloneable
md.update(buffer, 0, buffer.length);
}
+ public void addRandomByte (final byte b)
+ {
+ if (md == null)
+ throw new IllegalStateException ("not initialized");
+ md.update (b);
+ }
+
+ public void addRandomBytes (final byte[] buf, final int off, final int len)
+ {
+ if (md == null)
+ throw new IllegalStateException ("not initialized");
+ md.update (buf, off, len);
+ }
+
// Cloneable interface implementation ---------------------------------------
public Object clone() throws CloneNotSupportedException
diff --git a/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java b/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java
deleted file mode 100644
index ccec113..0000000
--- a/libjava/classpath/gnu/java/security/provider/DSAParameterGenerator.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/* DSAParameterGenerator.java --- DSA Parameter Generator Implementation
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.security.provider;
-
-import gnu.java.security.util.Prime;
-
-import java.math.BigInteger;
-import java.security.AlgorithmParameterGeneratorSpi;
-import java.security.AlgorithmParameters;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.util.Random;
-
-public class DSAParameterGenerator extends AlgorithmParameterGeneratorSpi
-{
- private int size;
- private SecureRandom random = null;
-
- public DSAParameterGenerator()
- {
- size = 1024;
- }
-
- public void engineInit(int size, SecureRandom random)
- {
- if( (size < 512) || (size > 1024) || ( (size % 64) != 0) )
- //throw new InvalidAlgorithmParameterException("Invalid Size");
- return;
- this.size = size;
- this.random = random;
- }
-
- public void engineInit(AlgorithmParameterSpec genParamSpec, SecureRandom random)
- throws InvalidAlgorithmParameterException
- {
- if( !( genParamSpec instanceof DSAParameterSpec ) )
- throw new InvalidAlgorithmParameterException("Must be DSAParameterSpec");
-
- DSAParameterSpec dsaparameterspec = (DSAParameterSpec)genParamSpec;
- int tmp = dsaparameterspec.getP().bitLength();
-
- if( (tmp < 512) || (tmp > 1024) || ( (tmp % 64) != 0) )
- throw new InvalidAlgorithmParameterException("Invalid Size");
-
- this.random = random;
- }
-
- //For more information see IEEE P1363 A.16.1 (10/05/98 Draft)
- public AlgorithmParameters engineGenerateParameters()
- {
- DSAParameterSpec dsaparameterspec;
-
- int L = size;
- BigInteger r, p, k, h, g;
-
- //q 2^159 < q < 2^160
- r = Prime.generateRandomPrime( 159, 160, BigInteger.valueOf(1));
-
- // 2^(L-1) < p < 2^L
- p = Prime.generateRandomPrime( r, BigInteger.valueOf(1), L - 1, L, BigInteger.valueOf(1));
-
- k = p.subtract( BigInteger.valueOf(1) );
- k = k.divide( r );
-
- Random rand = new Random();
- h = BigInteger.valueOf(1);
-
- for(;;) {
- h = h.add(BigInteger.valueOf( 1 ) );
-
- g = h.modPow(k, p);
-
- if( g.compareTo( BigInteger.valueOf(1) ) != 1 )
- break;
- }
-
- try {
- dsaparameterspec = new DSAParameterSpec(p, r, g);
- AlgorithmParameters ap = AlgorithmParameters.getInstance("DSA");
- ap.init( dsaparameterspec );
- return ap;
- } catch ( NoSuchAlgorithmException nsae ) {
- return null;
- } catch ( InvalidParameterSpecException ipse) {
- return null;
- }
- }
-}
diff --git a/libjava/classpath/gnu/java/security/provider/Gnu.java b/libjava/classpath/gnu/java/security/provider/Gnu.java
index 0613566..6ea96c1 100644
--- a/libjava/classpath/gnu/java/security/provider/Gnu.java
+++ b/libjava/classpath/gnu/java/security/provider/Gnu.java
@@ -86,6 +86,7 @@ public final class Gnu extends Provider
put("Alg.Alias.Signature.md5WithRSAEncryption", "MD5withRSA");
put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.4", "MD5withRSA");
put("Alg.Alias.Signature.1.2.840.113549.1.1.4", "MD5withRSA");
+ put("Alg.Alias.Signature.RSA", "MD5withRSA");
put("Signature.SHA160withRSA",
gnu.java.security.jce.sig.SHA160withRSA.class.getName());
diff --git a/libjava/classpath/gnu/java/security/sig/ISignature.java b/libjava/classpath/gnu/java/security/sig/ISignature.java
index 77653ee..e77f39d 100644
--- a/libjava/classpath/gnu/java/security/sig/ISignature.java
+++ b/libjava/classpath/gnu/java/security/sig/ISignature.java
@@ -56,8 +56,6 @@ import java.util.Map;
* Cryptography</a>, Alfred J. Menezes, Paul C. van Oorschot and Scott A.
* Vanstone. Section 11.2.2 Digital signature schemes with appendix.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public interface ISignature extends Cloneable
{
diff --git a/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java b/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java
index 119eca5..b6ab0ba 100644
--- a/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java
+++ b/libjava/classpath/gnu/java/security/sig/ISignatureCodec.java
@@ -45,8 +45,6 @@ import gnu.java.security.Registry;
* cryptographic signatures. Codecs are useful for (a) externalising signature
* output data for storage and on-the-wire transmission, as well as (b) re-
* creating their internal Java representation from external sources.</p>
- *
- * @version $Revision: 1.1 $
*/
public interface ISignatureCodec
{
diff --git a/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java b/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java
index 6bedfae..370a938 100644
--- a/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java
+++ b/libjava/classpath/gnu/java/security/sig/dss/DSSSignature.java
@@ -111,8 +111,6 @@ import java.util.Random;
* Signature Standard (DSS)</a>, Federal Information Processing Standards
* Publication 186. National Institute of Standards and Technology.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public class DSSSignature extends BaseSignature
{
diff --git a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java b/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java
index 02f6b1d..b0590a5 100644
--- a/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java
+++ b/libjava/classpath/gnu/java/security/sig/dss/DSSSignatureRawCodec.java
@@ -47,8 +47,6 @@ import java.math.BigInteger;
/**
* <p>An object that implements the {@link ISignatureCodec} operations for the
* <i>Raw</i> format to use with DSS signatures.</p>
- *
- * @version $Revision: 1.1 $
*/
public class DSSSignatureRawCodec implements ISignatureCodec
{
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java
index 2ea8a30..d155fc8 100644
--- a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java
+++ b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PKCS1_V1_5.java
@@ -57,8 +57,6 @@ import java.io.ByteArrayOutputStream;
* RSA Cryptography Specifications Version 2.1.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.2 $
*/
public class EMSA_PKCS1_V1_5 implements Cloneable
{
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java
index d11a861..c1c9760 100644
--- a/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java
+++ b/libjava/classpath/gnu/java/security/sig/rsa/EMSA_PSS.java
@@ -67,8 +67,6 @@ import java.util.Arrays;
* Primitive specification and supporting documentation.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public class EMSA_PSS implements Cloneable
{
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java
index d4b69a7..e64d30b 100644
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java
+++ b/libjava/classpath/gnu/java/security/sig/rsa/RSAPKCS1V1_5Signature.java
@@ -67,8 +67,6 @@ import java.util.Arrays;
* RSA Cryptography Specifications Version 2.1.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.2 $
*/
public class RSAPKCS1V1_5Signature extends BaseSignature
{
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java
index 95a6653f..7ec6256 100644
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java
+++ b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignature.java
@@ -70,8 +70,6 @@ import java.security.interfaces.RSAPublicKey;
* Primitive specification and supporting documentation.<br>
* Jakob Jonsson and Burt Kaliski.</li>
* </ol>
- *
- * @version $Revision: 1.2 $
*/
public class RSAPSSSignature extends BaseSignature
{
diff --git a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java
index 64a972c..2be7916 100644
--- a/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java
+++ b/libjava/classpath/gnu/java/security/sig/rsa/RSAPSSSignatureRawCodec.java
@@ -46,8 +46,6 @@ import java.io.ByteArrayOutputStream;
/**
* <p>An object that implements the {@link gnu.crypto.sig.ISignatureCodec}
* operations for the <i>Raw</i> format to use with RSA-PSS signatures.</p>
- *
- * @version $Revision: 1.1 $
*/
public class RSAPSSSignatureRawCodec implements ISignatureCodec
{
diff --git a/libjava/classpath/gnu/java/security/util/Util.java b/libjava/classpath/gnu/java/security/util/Util.java
index 53f8e3c..f39afb9 100644
--- a/libjava/classpath/gnu/java/security/util/Util.java
+++ b/libjava/classpath/gnu/java/security/util/Util.java
@@ -42,8 +42,6 @@ import java.math.BigInteger;
/**
* <p>A collection of utility methods used throughout this project.</p>
- *
- * @version $Revision: 1.1 $
*/
public class Util
{
diff --git a/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java b/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
index daf746f..02adad7 100644
--- a/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
+++ b/libjava/classpath/gnu/java/security/x509/X500DistinguishedName.java
@@ -1,5 +1,5 @@
/* X500DistinguishedName.java -- X.500 distinguished name.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -61,7 +61,6 @@ import java.util.Set;
public class X500DistinguishedName implements Principal
{
-
// Constants and fields.
// -------------------------------------------------------------------------
@@ -221,6 +220,10 @@ public class X500DistinguishedName implements Principal
putComponent(DC, value);
else if (name.equals("uid"))
putComponent(UID, value);
+ else if (name.equals("o"))
+ putComponent(O, value);
+ else if (name.equals("ou"))
+ putComponent(OU, value);
else
putComponent(new OID(name), value);
}
@@ -328,16 +331,18 @@ public class X500DistinguishedName implements Principal
{
if (fixed && encoded != null)
return (byte[]) encoded.clone();
+
ArrayList name = new ArrayList(components.size());
for (Iterator it = components.iterator(); it.hasNext(); )
{
Map m = (Map) it.next();
if (m.isEmpty())
continue;
+
Set rdn = new HashSet();
for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); )
{
- Map.Entry e = (Map.Entry) it.next();
+ Map.Entry e = (Map.Entry) it2.next();
ArrayList atav = new ArrayList(2);
atav.add(new DERValue(DER.OBJECT_IDENTIFIER, e.getKey()));
atav.add(new DERValue(DER.UTF8_STRING, e.getValue()));
@@ -486,6 +491,9 @@ public class X500DistinguishedName implements Principal
throw new EOFException();
default:
buf.append((char) ch);
+ ch = in.read();
+ if (ch == -1)
+ return buf.toString();
}
}
}
diff --git a/libjava/classpath/gnu/java/text/StringFormatBuffer.java b/libjava/classpath/gnu/java/text/StringFormatBuffer.java
index 5772186..19b621c 100644
--- a/libjava/classpath/gnu/java/text/StringFormatBuffer.java
+++ b/libjava/classpath/gnu/java/text/StringFormatBuffer.java
@@ -118,4 +118,10 @@ public class StringFormatBuffer implements FormatBuffer
{
return buffer;
}
+
+ public String toString()
+ {
+ return buffer.toString();
+ }
+
}
diff --git a/libjava/classpath/gnu/java/util/jar/JarUtils.java b/libjava/classpath/gnu/java/util/jar/JarUtils.java
new file mode 100644
index 0000000..c35daec
--- /dev/null
+++ b/libjava/classpath/gnu/java/util/jar/JarUtils.java
@@ -0,0 +1,447 @@
+/* JarUtils.java -- Utility methods for reading/writing Manifest[-like] files
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.util.jar;
+
+import gnu.classpath.SystemProperties;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.JarException;
+import java.util.jar.Attributes.Name;
+import java.util.logging.Logger;
+
+/**
+ * Utility methods for reading and writing JAR <i>Manifest</i> and
+ * <i>Manifest-like</i> files.
+ * <p>
+ * JAR-related files that resemble <i>Manifest</i> files are Signature files
+ * (with an <code>.SF</code> extension) found in signed JARs.
+ */
+public abstract class JarUtils
+{
+ private static final Logger log = Logger.getLogger(JarUtils.class.getName());
+ public static final String META_INF = "META-INF/";
+ public static final String DSA_SUFFIX = ".DSA";
+ public static final String SF_SUFFIX = ".SF";
+ public static final String NAME = "Name";
+
+ /**
+ * The original string representation of the manifest version attribute name.
+ */
+ public static final String MANIFEST_VERSION = "Manifest-Version";
+
+ /**
+ * The original string representation of the signature version attribute
+ * name.
+ */
+ public static final String SIGNATURE_VERSION = "Signature-Version";
+
+ /** Platform-independent line-ending. */
+ public static final byte[] CRLF = new byte[] { 0x0D, 0x0A };
+ private static final String DEFAULT_MF_VERSION = "1.0";
+ private static final String DEFAULT_SF_VERSION = "1.0";
+ private static final Name CREATED_BY = new Name("Created-By");
+ private static final String CREATOR = SystemProperties.getProperty("java.version")
+ + " ("
+ + SystemProperties.getProperty("java.vendor")
+ + ")";
+
+ // default 0-arguments constructor
+
+ // Methods for reading Manifest files from InputStream ----------------------
+
+ public static void
+ readMFManifest(Attributes attr, Map entries, InputStream in)
+ throws IOException
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+ readMainSection(attr, br);
+ readIndividualSections(entries, br);
+ }
+
+ public static void
+ readSFManifest(Attributes attr, Map entries, InputStream in)
+ throws IOException
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+ String version_header = Name.SIGNATURE_VERSION.toString();
+ try
+ {
+ String version = expectHeader(version_header, br);
+ attr.putValue(SIGNATURE_VERSION, version);
+ if (! DEFAULT_SF_VERSION.equals(version))
+ log.warning("Unexpected version number: " + version
+ + ". Continue (but may fail later)");
+ }
+ catch (IOException ioe)
+ {
+ throw new JarException("Signature file MUST start with a "
+ + version_header + ": " + ioe.getMessage());
+ }
+ read_attributes(attr, br);
+
+ // read individual sections
+ String s = br.readLine();
+ while (s != null && s.length() > 0)
+ {
+ Attributes eAttr = readSectionName(s, br, entries);
+ read_attributes(eAttr, br);
+ s = br.readLine();
+ }
+ }
+
+ private static void readMainSection(Attributes attr, BufferedReader br)
+ throws IOException
+ {
+ // According to the spec we should actually call read_version_info() here.
+ read_attributes(attr, br);
+ // Explicitly set Manifest-Version attribute if not set in Main
+ // attributes of Manifest.
+ // XXX (rsn): why 0.0 and not 1.0?
+ if (attr.getValue(Name.MANIFEST_VERSION) == null)
+ attr.putValue(MANIFEST_VERSION, "0.0");
+ }
+
+ private static void readIndividualSections(Map entries, BufferedReader br)
+ throws IOException
+ {
+ String s = br.readLine();
+ while (s != null && (! s.equals("")))
+ {
+ Attributes attr = readSectionName(s, br, entries);
+ read_attributes(attr, br);
+ s = br.readLine();
+ }
+ }
+
+ /**
+ * Pedantic method that requires the next attribute in the Manifest to be the
+ * "Manifest-Version". This follows the Manifest spec closely but reject some
+ * jar Manifest files out in the wild.
+ */
+ private static void readVersionInfo(Attributes attr, BufferedReader br)
+ throws IOException
+ {
+ String version_header = Name.MANIFEST_VERSION.toString();
+ try
+ {
+ String value = expectHeader(version_header, br);
+ attr.putValue(MANIFEST_VERSION, value);
+ }
+ catch (IOException ioe)
+ {
+ throw new JarException("Manifest should start with a " + version_header
+ + ": " + ioe.getMessage());
+ }
+ }
+
+ private static String expectHeader(String header, BufferedReader br)
+ throws IOException
+ {
+ String s = br.readLine();
+ if (s == null)
+ throw new JarException("unexpected end of file");
+
+ return expectHeader(header, br, s);
+ }
+
+ private static void read_attributes(Attributes attr, BufferedReader br)
+ throws IOException
+ {
+ String s = br.readLine();
+ while (s != null && (! s.equals("")))
+ {
+ readAttribute(attr, s, br);
+ s = br.readLine();
+ }
+ }
+
+ private static void
+ readAttribute(Attributes attr, String s, BufferedReader br) throws IOException
+ {
+ try
+ {
+ int colon = s.indexOf(": ");
+ String name = s.substring(0, colon);
+ String value_start = s.substring(colon + 2);
+ String value = readHeaderValue(value_start, br);
+ attr.putValue(name, value);
+ }
+ catch (IndexOutOfBoundsException iobe)
+ {
+ throw new JarException("Manifest contains a bad header: " + s);
+ }
+ }
+
+ private static String readHeaderValue(String s, BufferedReader br)
+ throws IOException
+ {
+ boolean try_next = true;
+ while (try_next)
+ {
+ // Lets see if there is something on the next line
+ br.mark(1);
+ if (br.read() == ' ')
+ s += br.readLine();
+ else
+ {
+ br.reset();
+ try_next = false;
+ }
+ }
+ return s;
+ }
+
+ private static Attributes
+ readSectionName(String s, BufferedReader br, Map entries) throws JarException
+ {
+ try
+ {
+ String name = expectHeader(NAME, br, s);
+ Attributes attr = new Attributes();
+ entries.put(name, attr);
+ return attr;
+ }
+ catch (IOException ioe)
+ {
+ throw new JarException("Section should start with a Name header: "
+ + ioe.getMessage());
+ }
+ }
+
+ private static String expectHeader(String header, BufferedReader br, String s)
+ throws IOException
+ {
+ try
+ {
+ String name = s.substring(0, header.length() + 1);
+ if (name.equalsIgnoreCase(header + ":"))
+ {
+ String value_start = s.substring(header.length() + 2);
+ return readHeaderValue(value_start, br);
+ }
+ }
+ catch (IndexOutOfBoundsException ignored)
+ {
+ }
+ // If we arrive here, something went wrong
+ throw new JarException("unexpected '" + s + "'");
+ }
+
+ // Methods for writing Manifest files to an OutputStream --------------------
+
+ public static void
+ writeMFManifest(Attributes attr, Map entries, OutputStream stream)
+ throws IOException
+ {
+ BufferedOutputStream out = stream instanceof BufferedOutputStream
+ ? (BufferedOutputStream) stream
+ : new BufferedOutputStream(stream, 4096);
+ writeVersionInfo(attr, out);
+ Iterator i;
+ Map.Entry e;
+ for (i = attr.entrySet().iterator(); i.hasNext();)
+ {
+ e = (Map.Entry) i.next();
+ // Don't print the manifest version again
+ if (! Name.MANIFEST_VERSION.equals(e.getKey()))
+ writeAttributeEntry(e, out);
+ }
+ out.write(CRLF);
+
+ Iterator j;
+ for (i = entries.entrySet().iterator(); i.hasNext();)
+ {
+ e = (Map.Entry) i.next();
+ writeHeader(NAME, e.getKey().toString(), out);
+ Attributes eAttr = (Attributes) e.getValue();
+ for (j = eAttr.entrySet().iterator(); j.hasNext();)
+ {
+ Map.Entry e2 = (Map.Entry) j.next();
+ writeAttributeEntry(e2, out);
+ }
+ out.write(CRLF);
+ }
+
+ out.flush();
+ }
+
+ public static void
+ writeSFManifest(Attributes attr, Map entries, OutputStream stream)
+ throws IOException
+ {
+ BufferedOutputStream out = stream instanceof BufferedOutputStream
+ ? (BufferedOutputStream) stream
+ : new BufferedOutputStream(stream, 4096);
+ writeHeader(Name.SIGNATURE_VERSION.toString(), DEFAULT_SF_VERSION, out);
+ writeHeader(CREATED_BY.toString(), CREATOR, out);
+ Iterator i;
+ Map.Entry e;
+ for (i = attr.entrySet().iterator(); i.hasNext();)
+ {
+ e = (Map.Entry) i.next();
+ Name name = (Name) e.getKey();
+ if (Name.SIGNATURE_VERSION.equals(name) || CREATED_BY.equals(name))
+ continue;
+
+ writeHeader(name.toString(), (String) e.getValue(), out);
+ }
+ out.write(CRLF);
+
+ Iterator j;
+ for (i = entries.entrySet().iterator(); i.hasNext();)
+ {
+ e = (Map.Entry) i.next();
+ writeHeader(NAME, e.getKey().toString(), out);
+ Attributes eAttr = (Attributes) e.getValue();
+ for (j = eAttr.entrySet().iterator(); j.hasNext();)
+ {
+ Map.Entry e2 = (Map.Entry) j.next();
+ writeHeader(e2.getKey().toString(), (String) e2.getValue(), out);
+ }
+ out.write(CRLF);
+ }
+
+ out.flush();
+ }
+
+ private static void writeVersionInfo(Attributes attr, OutputStream out)
+ throws IOException
+ {
+ // First check if there is already a version attribute set
+ String version = attr.getValue(Name.MANIFEST_VERSION);
+ if (version == null)
+ version = DEFAULT_MF_VERSION;
+
+ writeHeader(Name.MANIFEST_VERSION.toString(), version, out);
+ }
+
+ private static void writeAttributeEntry(Map.Entry entry, OutputStream out)
+ throws IOException
+ {
+ String name = entry.getKey().toString();
+ String value = entry.getValue().toString();
+ if (name.equalsIgnoreCase(NAME))
+ throw new JarException("Attributes cannot be called 'Name'");
+
+ if (name.startsWith("From"))
+ throw new JarException("Header cannot start with the four letters 'From'"
+ + name);
+
+ writeHeader(name, value, out);
+ }
+
+ /**
+ * The basic method for writing <code>Mainfest</code> attributes. This
+ * implementation respects the rule stated in the Jar Specification concerning
+ * the maximum allowed line length; i.e.
+ *
+ * <pre>
+ * No line may be longer than 72 bytes (not characters), in its UTF8-encoded
+ * form. If a value would make the initial line longer than this, it should
+ * be continued on extra lines (each starting with a single SPACE).
+ * </pre>
+ *
+ * and
+ *
+ * <pre>
+ * Because header names cannot be continued, the maximum length of a header
+ * name is 70 bytes (there must be a colon and a SPACE after the name).
+ * </pre>
+ *
+ * @param name the name of the attribute.
+ * @param value the value of the attribute.
+ * @param out the output stream to write the attribute's name/value pair to.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ private static void writeHeader(String name, String value, OutputStream out)
+ throws IOException
+ {
+ String target = name + ": ";
+ byte[] b = target.getBytes("UTF-8");
+ if (b.length > 72)
+ throw new IOException("Attribute's name already longer than 70 bytes");
+
+ if (b.length == 72)
+ {
+ out.write(b);
+ out.write(CRLF);
+ target = " " + value;
+ }
+ else
+ target = target + value;
+
+ int n;
+ while (true)
+ {
+ b = target.getBytes("UTF-8");
+ if (b.length < 73)
+ {
+ out.write(b);
+ break;
+ }
+
+ // find an appropriate character position to break on
+ n = 72;
+ while (true)
+ {
+ b = target.substring(0, n).getBytes("UTF-8");
+ if (b.length < 73)
+ break;
+
+ n--;
+ if (n < 1)
+ throw new IOException("Header is unbreakable and longer than 72 bytes");
+ }
+
+ out.write(b);
+ out.write(CRLF);
+ target = " " + target.substring(n);
+ }
+
+ out.write(CRLF);
+ }
+}
diff --git a/libjava/classpath/gnu/java/util/prefs/NodeWriter.java b/libjava/classpath/gnu/java/util/prefs/NodeWriter.java
index c3cf8e8..574ddc2 100644
--- a/libjava/classpath/gnu/java/util/prefs/NodeWriter.java
+++ b/libjava/classpath/gnu/java/util/prefs/NodeWriter.java
@@ -168,7 +168,7 @@ public class NodeWriter {
} else {
bw.write("system");
}
- bw.write("\"/>");
+ bw.write("\">");
writeRootMap();
writeNode();
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Assembly.java b/libjava/classpath/gnu/javax/crypto/assembly/Assembly.java
index 1d70eff..2d5bba3 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Assembly.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Assembly.java
@@ -51,7 +51,6 @@ import java.util.Map;
* of the {@link Transformer} chain of the <code>Assembly</code>.</p>
*
* @see Transformer
- * @version $Revision: 1.1 $
*/
public class Assembly
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Cascade.java b/libjava/classpath/gnu/javax/crypto/assembly/Cascade.java
index 20cd3de..678a7e7 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Cascade.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Cascade.java
@@ -72,8 +72,6 @@ import java.util.Set;
* CRC Press, Inc. ISBN 0-8493-8523-7, 1997<br>
* Menezes, A., van Oorschot, P. and S. Vanstone.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public class Cascade
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/CascadeStage.java b/libjava/classpath/gnu/javax/crypto/assembly/CascadeStage.java
index 71a8b17..81629f5 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/CascadeStage.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/CascadeStage.java
@@ -45,8 +45,6 @@ import java.util.Set;
/**
* <p>A Cascade <i>Stage</i> in a Cascade Cipher.</p>
- *
- * @version $Revision: 1.1 $
*/
class CascadeStage extends Stage
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/CascadeTransformer.java b/libjava/classpath/gnu/javax/crypto/assembly/CascadeTransformer.java
index 325571d..dbbc7cd 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/CascadeTransformer.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/CascadeTransformer.java
@@ -44,8 +44,6 @@ import java.util.Map;
/**
* An Adapter to use any {@link Cascade} as a {@link Transformer} in an
* {@link Assembly}.
- *
- * @version $Revision: 1.1 $
*/
class CascadeTransformer extends Transformer
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Direction.java b/libjava/classpath/gnu/javax/crypto/assembly/Direction.java
index 2e8ef11..58b59a6 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Direction.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Direction.java
@@ -49,8 +49,6 @@ package gnu.javax.crypto.assembly;
* its inverse value</li>
* <li>REVERSED: equivalent to {@link gnu.crypto.mode.IMode#DECRYPTION}.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public final class Direction
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/LoopbackTransformer.java b/libjava/classpath/gnu/javax/crypto/assembly/LoopbackTransformer.java
index 6279126..3c0bdfa 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/LoopbackTransformer.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/LoopbackTransformer.java
@@ -43,8 +43,6 @@ import java.util.Map;
/**
* A trivial {@link Transformer} to allow closing a chain in an {@link Assembly}.
* This class is not visible outside this package.
- *
- * @version $Revision: 1.1 $
*/
final class LoopbackTransformer extends Transformer
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/ModeStage.java b/libjava/classpath/gnu/javax/crypto/assembly/ModeStage.java
index 1cd8fd9..1143348 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/ModeStage.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/ModeStage.java
@@ -53,8 +53,6 @@ import java.util.Set;
* <p>Such a stage wraps an implementation of a Block Cipher Mode of Operation
* ({@link IMode}) to allow inclusion of such an instance in a cascade of block
* ciphers.</p>
- *
- * @version $Revision: 1.1 $
*/
class ModeStage extends Stage
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Operation.java b/libjava/classpath/gnu/javax/crypto/assembly/Operation.java
index 2646e1f..34cae52 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Operation.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Operation.java
@@ -51,8 +51,6 @@ package gnu.javax.crypto.assembly;
* the chain, and the resulting bytes are then processed by the current
* {@link Transformer}.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public final class Operation
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/PaddingTransformer.java b/libjava/classpath/gnu/javax/crypto/assembly/PaddingTransformer.java
index 8af46a7..c63f92e 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/PaddingTransformer.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/PaddingTransformer.java
@@ -50,8 +50,6 @@ import java.util.Map;
* <p>When using such a {@link Transformer}, in an {@link Assembly}, there must
* be at least one element behind this instance in the constructed chain;
* otherwise, a {@link TransformerException} is thrown at initialisation time.</p>
- *
- * @version $Revision: 1.1 $
*/
class PaddingTransformer extends Transformer
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Stage.java b/libjava/classpath/gnu/javax/crypto/assembly/Stage.java
index e449855..23d50bb 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Stage.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Stage.java
@@ -82,7 +82,6 @@ import java.util.Set;
*
* @see ModeStage
* @see CascadeStage
- * @version $Revision: 1.1 $
*/
public abstract class Stage
{
diff --git a/libjava/classpath/gnu/javax/crypto/assembly/Transformer.java b/libjava/classpath/gnu/javax/crypto/assembly/Transformer.java
index c62c467..80430dc 100644
--- a/libjava/classpath/gnu/javax/crypto/assembly/Transformer.java
+++ b/libjava/classpath/gnu/javax/crypto/assembly/Transformer.java
@@ -77,7 +77,6 @@ import java.util.Map;
* @see CascadeTransformer
* @see PaddingTransformer
* @see DeflateTransformer
- * @version $Revision: 1.1 $
*/
public abstract class Transformer
{
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Anubis.java b/libjava/classpath/gnu/javax/crypto/cipher/Anubis.java
index 63b97ce..ca4e8ed 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Anubis.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Anubis.java
@@ -576,7 +576,7 @@ public final class Anubis extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java b/libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java
index 5cb958e..ca1fdfb 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Blowfish.java
@@ -688,7 +688,7 @@ public class Blowfish extends BaseCipher
{
result = testKat(TV_KEY, TV_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Cast5.java b/libjava/classpath/gnu/javax/crypto/cipher/Cast5.java
index cbdfe61..a0e0c60 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Cast5.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Cast5.java
@@ -1341,7 +1341,7 @@ public class Cast5 extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT, KAT_PT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Khazad.java b/libjava/classpath/gnu/javax/crypto/cipher/Khazad.java
index b6c2783..3a95874 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Khazad.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Khazad.java
@@ -514,7 +514,7 @@ public final class Khazad extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java b/libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java
index 058c8b3..bcd1872 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Rijndael.java
@@ -852,7 +852,7 @@ public final class Rijndael extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Serpent.java b/libjava/classpath/gnu/javax/crypto/cipher/Serpent.java
index b323b50..2ed1e4b 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Serpent.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Serpent.java
@@ -789,7 +789,7 @@ public class Serpent extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Square.java b/libjava/classpath/gnu/javax/crypto/cipher/Square.java
index 15cb8b5..a73116e 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Square.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Square.java
@@ -59,8 +59,6 @@ import java.util.Iterator;
* <a href="mailto:lars.knudsen@esat.kuleuven.ac.be">Lars Knudsen</a> and
* <a href="mailto:vincent.rijmen@esat.kuleuven.ac.be">Vincent Rijmen</a>.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public final class Square extends BaseCipher
{
@@ -513,8 +511,8 @@ public final class Square extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/cipher/Twofish.java b/libjava/classpath/gnu/javax/crypto/cipher/Twofish.java
index bea7f5d..f5565d4 100644
--- a/libjava/classpath/gnu/javax/crypto/cipher/Twofish.java
+++ b/libjava/classpath/gnu/javax/crypto/cipher/Twofish.java
@@ -902,7 +902,7 @@ public final class Twofish extends BaseCipher
{
result = testKat(KAT_KEY, KAT_CT);
}
- valid = new Boolean(result);
+ valid = Boolean.valueOf(result);
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/AESSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/AESSpi.java
index ba7466f..33de689 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/AESSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/AESSpi.java
@@ -52,8 +52,6 @@ import java.security.spec.InvalidParameterSpecException;
/**
* The implementation of the AES <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class AESSpi extends CipherAdapter
{
@@ -101,4 +99,4 @@ public final class AESSpi extends CipherAdapter
}
engineInit(opmode, key, spec, random);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/ARCFourSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/ARCFourSpi.java
index 8fc1fe4..963fa1c 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/ARCFourSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/ARCFourSpi.java
@@ -64,8 +64,6 @@ import javax.crypto.ShortBufferException;
/**
* The <i>Service Provider Interface</i> (<b>SPI</b>) for the ARCFOUR
* stream cipher.
- *
- * @version $Revision: 1.1 $
*/
public class ARCFourSpi extends CipherSpi
{
@@ -205,4 +203,4 @@ public class ARCFourSpi extends CipherSpi
{
return engineUpdate(in, inOffset, length, out, outOffset);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/AnubisSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/AnubisSpi.java
index ac2f596..0fca3b4 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/AnubisSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/AnubisSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Anubis <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class AnubisSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class AnubisSpi extends CipherAdapter
{
super(Registry.ANUBIS_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/BlowfishSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/BlowfishSpi.java
index d1a2861..d31d7e1 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/BlowfishSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/BlowfishSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Blowfish <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class BlowfishSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class BlowfishSpi extends CipherAdapter
{
super(Registry.BLOWFISH_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/CipherAdapter.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/CipherAdapter.java
index 9667a67..5eaa31b 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/CipherAdapter.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/CipherAdapter.java
@@ -82,8 +82,6 @@ import javax.crypto.spec.IvParameterSpec;
* and the initialization vector, the subclass should override those methods.
* Otherwise a subclass need only call the {@link #CipherAdapter(String)}
* constructor with the name of the cipher.</p>
- *
- * @version $Revision: 1.1 $
*/
class CipherAdapter extends CipherSpi
{
@@ -504,4 +502,4 @@ class CipherAdapter extends CipherSpi
partBlock = new byte[blockLen];
partLen = 0;
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/DESSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/DESSpi.java
index f3ec822..ff86071 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/DESSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/DESSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the DES <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class DESSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class DESSpi extends CipherAdapter
{
super(Registry.DES_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/KhazadSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/KhazadSpi.java
index 7f43dd0..397c27d 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/KhazadSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/KhazadSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Khazad <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class KhazadSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class KhazadSpi extends CipherAdapter
{
super(Registry.KHAZAD_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/NullCipherSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/NullCipherSpi.java
index 0876c95..e6d78ef 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/NullCipherSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/NullCipherSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Null cipher <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class NullCipherSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class NullCipherSpi extends CipherAdapter
{
super(Registry.NULL_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/PBES2.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/PBES2.java
index 28b327d..9889ab9 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/PBES2.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/PBES2.java
@@ -56,8 +56,6 @@ import javax.crypto.spec.SecretKeySpec;
/**
* <p>.</p>
- *
- * @version $Revision: 1.1 $
*/
public abstract class PBES2 extends CipherAdapter
{
@@ -1349,4 +1347,4 @@ public abstract class PBES2 extends CipherAdapter
}
}
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/RijndaelSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/RijndaelSpi.java
index 1a67f93..137db2c 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/RijndaelSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/RijndaelSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Rijndael <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class RijndaelSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class RijndaelSpi extends CipherAdapter
{
super(Registry.RIJNDAEL_CIPHER, 16);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/SerpentSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/SerpentSpi.java
index 394a0ce..9df9685 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/SerpentSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/SerpentSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Serpent <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class SerpentSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class SerpentSpi extends CipherAdapter
{
super(Registry.SERPENT_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/SquareSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/SquareSpi.java
index bb59cd2..96e5dee 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/SquareSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/SquareSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Square <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class SquareSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class SquareSpi extends CipherAdapter
{
super(Registry.SQUARE_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESSpi.java
index cec30f6..5c58ea5 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/TripleDESSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Triple-DES <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class TripleDESSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class TripleDESSpi extends CipherAdapter
{
super(Registry.TRIPLEDES_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/cipher/TwofishSpi.java b/libjava/classpath/gnu/javax/crypto/jce/cipher/TwofishSpi.java
index 34f2d95..31df5ea 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/cipher/TwofishSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/cipher/TwofishSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Twofish <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class TwofishSpi extends CipherAdapter
{
@@ -56,4 +54,4 @@ public final class TwofishSpi extends CipherAdapter
{
super(Registry.TWOFISH_CIPHER);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/keyring/GnuKeyring.java b/libjava/classpath/gnu/javax/crypto/jce/keyring/GnuKeyring.java
index d74d386..d2501f8 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/keyring/GnuKeyring.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/keyring/GnuKeyring.java
@@ -1,4 +1,4 @@
-/* GnuKeyring.java --
+/* GnuKeyring.java -- KeyStore adapter for a pair of private and public Keyrings
Copyright (C) 2003, 2006 Free Software Foundation, Inc.
This file is a part of GNU Classpath.
@@ -38,376 +38,412 @@ exception statement from your version. */
package gnu.javax.crypto.jce.keyring;
+import gnu.java.security.Registry;
+import gnu.javax.crypto.keyring.GnuPrivateKeyring;
+import gnu.javax.crypto.keyring.GnuPublicKeyring;
+import gnu.javax.crypto.keyring.IKeyring;
+import gnu.javax.crypto.keyring.IPrivateKeyring;
+import gnu.javax.crypto.keyring.IPublicKeyring;
+import gnu.javax.crypto.keyring.MalformedKeyringException;
+import gnu.javax.crypto.keyring.PrimitiveEntry;
+
import java.io.BufferedInputStream;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
-
import java.security.Key;
-import java.security.KeyStoreSpi;
import java.security.KeyStoreException;
+import java.security.KeyStoreSpi;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-
-import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.logging.Logger;
import javax.crypto.SecretKey;
-import gnu.java.security.Registry;
-import gnu.javax.crypto.keyring.IKeyring;
-import gnu.javax.crypto.keyring.IPrivateKeyring;
-import gnu.javax.crypto.keyring.IPublicKeyring;
-import gnu.javax.crypto.keyring.GnuPrivateKeyring;
-import gnu.javax.crypto.keyring.GnuPublicKeyring;
-import gnu.javax.crypto.keyring.MalformedKeyringException;
-import gnu.javax.crypto.keyring.PrimitiveEntry;
-
-public class GnuKeyring extends KeyStoreSpi
+/**
+ * An <i>Adapter</i> over a pair of one private, and one public keyrings to
+ * emulate the keystore operations.
+ */
+public class GnuKeyring
+ extends KeyStoreSpi
{
+ private static final Logger log = Logger.getLogger(GnuKeyring.class.getName());
+ private static final String NOT_LOADED = "not loaded";
- // Constants and fields.
- // ------------------------------------------------------------------------
-
+ /** TRUE if the keystore is loaded; FALSE otherwise. */
private boolean loaded;
+ /** our underlying private keyring. */
+ private IPrivateKeyring privateKR;
+ /** our underlying public keyring. */
+ private IPublicKeyring publicKR;
- private IKeyring keyring;
-
- // Constructor.
- // ------------------------------------------------------------------------
-
- public GnuKeyring()
- {
- }
-
- // Instance methods.
- // ------------------------------------------------------------------------
+ // default 0-arguments constructor
public Enumeration engineAliases()
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return new Enumeration()
+ ensureLoaded();
+ Enumeration result;
+ if (privateKR == null)
+ result = Collections.enumeration(Collections.EMPTY_SET);
+ else
{
- public boolean hasMoreElements()
- {
- return false;
- }
-
- public Object nextElement()
- {
- throw new NoSuchElementException();
- }
- };
- }
- return keyring.aliases();
+ Set aliases = new HashSet();
+ for (Enumeration e = privateKR.aliases(); e.hasMoreElements();)
+ {
+ String alias = (String) e.nextElement();
+ if (alias != null)
+ aliases.add(alias);
+ }
+
+ for (Enumeration e = publicKR.aliases(); e.hasMoreElements();)
+ {
+ String alias = (String) e.nextElement();
+ if (alias != null)
+ aliases.add(alias);
+ }
+
+ result = Collections.enumeration(aliases);
+ }
+
+ return result;
}
public boolean engineContainsAlias(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return false;
- }
- return keyring.containsAlias(alias);
+ log.entering(this.getClass().getName(), "engineContainsAlias", alias);
+
+ ensureLoaded();
+ boolean inPrivateKR = privateKR.containsAlias(alias);
+ log.finest("inPrivateKR=" + inPrivateKR);
+ boolean inPublicKR = publicKR.containsAlias(alias);
+ log.finest("inPublicKR=" + inPublicKR);
+ boolean result = inPrivateKR || inPublicKR;
+
+ log.exiting(this.getClass().getName(), "engineContainsAlias",
+ Boolean.valueOf(result));
+ return result;
}
public void engineDeleteEntry(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring != null)
- {
- keyring.remove(alias);
- }
+ log.entering(this.getClass().getName(), "engineDeleteEntry", alias);
+
+ ensureLoaded();
+ if (privateKR.containsAlias(alias))
+ privateKR.remove(alias);
+ else if (publicKR.containsAlias(alias))
+ publicKR.remove(alias);
+ else
+ log.finer("Unknwon alias: " + alias);
+
+ log.exiting(this.getClass().getName(), "engineDeleteEntry");
}
public Certificate engineGetCertificate(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return null;
- }
- if (!(keyring instanceof IPublicKeyring))
- {
- throw new IllegalStateException("not a public keyring");
- }
- return ((IPublicKeyring) keyring).getCertificate(alias);
+ log.entering(this.getClass().getName(), "engineGetCertificate", alias);
+
+ ensureLoaded();
+ Certificate result = publicKR.getCertificate(alias);
+
+ log.exiting(this.getClass().getName(), "engineGetCertificate", result);
+ return result;
}
public String engineGetCertificateAlias(Certificate cert)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return null;
- }
- if (!(keyring instanceof IPublicKeyring))
- {
- throw new IllegalStateException("not a public keyring");
- }
- Enumeration aliases = keyring.aliases();
- while (aliases.hasMoreElements())
+ log.entering(this.getClass().getName(), "engineGetCertificateAlias", cert);
+
+ ensureLoaded();
+ String result = null;
+ for (Enumeration aliases = publicKR.aliases(); aliases.hasMoreElements();)
{
String alias = (String) aliases.nextElement();
- Certificate cert2 = ((IPublicKeyring) keyring).getCertificate(alias);
+ Certificate cert2 = publicKR.getCertificate(alias);
if (cert.equals(cert2))
{
- return alias;
+ result = alias;
+ break;
}
}
- return null;
+
+ log.exiting(this.getClass().getName(), "engineGetCertificateAlias", result);
+ return result;
}
public void engineSetCertificateEntry(String alias, Certificate cert)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- keyring = new GnuPublicKeyring("HMAC-SHA-1", 20);
- }
- if (!(keyring instanceof IPublicKeyring))
- {
- throw new IllegalStateException("not a public keyring");
- }
- ((IPublicKeyring) keyring).putCertificate(alias, cert);
+ log.entering(this.getClass().getName(), "engineSetCertificateEntry",
+ new Object[] { alias, cert });
+
+ ensureLoaded();
+ publicKR.putCertificate(alias, cert);
+
+ log.exiting(this.getClass().getName(), "engineSetCertificateEntry");
}
public Certificate[] engineGetCertificateChain(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return null;
- }
- if (!(keyring instanceof IPrivateKeyring))
- {
- throw new IllegalStateException("not a private keyring");
- }
- return ((IPrivateKeyring) keyring).getCertPath(alias);
+ log.entering(this.getClass().getName(), "engineGetCertificateChain", alias);
+
+ ensureLoaded();
+ Certificate[] result = privateKR.getCertPath(alias);
+
+ log.exiting(this.getClass().getName(), "engineGetCertificateChain", result);
+ return result;
}
public Date engineGetCreationDate(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return null;
- }
- List entries = keyring.get(alias);
- if (entries.size() == 0)
- {
- return null;
- }
- for (Iterator it = entries.iterator(); it.hasNext();)
- {
- Object o = it.next();
- if (o instanceof PrimitiveEntry)
- {
- return ((PrimitiveEntry) o).getCreationDate();
- }
- }
- return null;
+ log.entering(this.getClass().getName(), "engineGetCreationDate", alias);
+
+ ensureLoaded();
+ Date result = getCreationDate(alias, privateKR);
+ if (result == null)
+ result = getCreationDate(alias, publicKR);
+
+ log.exiting(this.getClass().getName(), "engineGetCreationDate", result);
+ return result;
}
public Key engineGetKey(String alias, char[] password)
throws UnrecoverableKeyException
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return null;
- }
- if (!(keyring instanceof IPrivateKeyring))
- {
- throw new IllegalStateException("not a private keyring");
- }
+ log.entering(this.getClass().getName(), "engineGetKey",
+ String.valueOf(password));
+
+ ensureLoaded();
+ Key result = null;
if (password == null)
{
- if (((IPrivateKeyring) keyring).containsPublicKey(alias))
- {
- return ((IPrivateKeyring) keyring).getPublicKey(alias);
- }
- }
- if (((IPrivateKeyring) keyring).containsPrivateKey(alias))
- {
- return ((IPrivateKeyring) keyring).getPrivateKey(alias, password);
+ if (privateKR.containsPublicKey(alias))
+ result = privateKR.getPublicKey(alias);
}
- return null;
+ else if (privateKR.containsPrivateKey(alias))
+ result = privateKR.getPrivateKey(alias, password);
+
+ log.exiting(this.getClass().getName(), "engineGetKey", result);
+ return result;
}
public void engineSetKeyEntry(String alias, Key key, char[] password,
- Certificate[] chain) throws KeyStoreException
+ Certificate[] chain)
+ throws KeyStoreException
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- keyring = new GnuPrivateKeyring("HMAC-SHA-1", 20, "AES", "OFB", 16);
- }
- if (!(keyring instanceof IPrivateKeyring))
- {
- throw new IllegalStateException("not a private keyring");
- }
+ log.entering(this.getClass().getName(), "engineSetKeyEntry",
+ new Object[] { alias, key, password, chain });
+ ensureLoaded();
if (key instanceof PublicKey)
+ privateKR.putPublicKey(alias, (PublicKey) key);
+ else
{
- ((IPrivateKeyring) keyring).putPublicKey(alias, (PublicKey) key);
- return;
+ if (! (key instanceof PrivateKey) && ! (key instanceof SecretKey))
+ throw new KeyStoreException("cannot store keys of type "
+ + key.getClass().getName());
+ privateKR.putCertPath(alias, chain);
+ log.finest("About to put private key in keyring...");
+ privateKR.putPrivateKey(alias, key, password);
}
- if (!(key instanceof PrivateKey) && !(key instanceof SecretKey))
- {
- throw new KeyStoreException("cannot store keys of type "
- + key.getClass().getName());
- }
- try
- {
- CertificateFactory fact = CertificateFactory.getInstance("X.509");
- ((IPrivateKeyring) keyring).putCertPath(alias, chain);
- }
- catch (CertificateException ce)
- {
- throw new KeyStoreException(ce.toString());
- }
- ((IPrivateKeyring) keyring).putPrivateKey(alias, key, password);
+
+ log.exiting(this.getClass().getName(), "engineSetKeyEntry");
}
public void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain)
throws KeyStoreException
{
- throw new KeyStoreException("method not supported");
+ KeyStoreException x = new KeyStoreException("method not supported");
+ log.throwing(this.getClass().getName(), "engineSetKeyEntry(3)", x);
+ throw x;
}
public boolean engineIsCertificateEntry(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return false;
- }
- if (!(keyring instanceof IPublicKeyring))
- {
- return false;
- }
- return ((IPublicKeyring) keyring).containsCertificate(alias);
+ log.entering(this.getClass().getName(), "engineIsCertificateEntry", alias);
+
+ ensureLoaded();
+ boolean result = publicKR.containsCertificate(alias);
+
+ log.exiting(this.getClass().getName(), "engineIsCertificateEntry",
+ Boolean.valueOf(result));
+ return result;
}
public boolean engineIsKeyEntry(String alias)
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return false;
- }
- if (!(keyring instanceof IPrivateKeyring))
- {
- return false;
- }
- return ((IPrivateKeyring) keyring).containsPublicKey(alias)
- || ((IPrivateKeyring) keyring).containsPrivateKey(alias);
+ log.entering(this.getClass().getName(), "engineIsKeyEntry", alias);
+
+ ensureLoaded();
+ boolean result = privateKR.containsPublicKey(alias)
+ || privateKR.containsPrivateKey(alias);
+
+ log.exiting(this.getClass().getName(), "engineIsKeyEntry",
+ Boolean.valueOf(result));
+ return result;
}
public void engineLoad(InputStream in, char[] password) throws IOException
{
+ log.entering(this.getClass().getName(), "engineLoad", String.valueOf(password));
if (in != null)
{
- if (!in.markSupported())
- {
- in = new BufferedInputStream(in);
- }
- in.mark(5);
- for (int i = 0; i < 4; i++)
- if (in.read() != Registry.GKR_MAGIC[i])
- throw new MalformedKeyringException("incorrect magic");
- int usage = in.read();
- in.reset();
- HashMap attr = new HashMap();
- attr.put(IKeyring.KEYRING_DATA_IN, in);
- attr.put(IKeyring.KEYRING_PASSWORD, password);
- switch (usage)
- {
- case GnuPublicKeyring.USAGE:
- keyring = new GnuPublicKeyring();
- break;
- case GnuPrivateKeyring.USAGE:
- keyring = new GnuPrivateKeyring();
- break;
- default:
- throw new MalformedKeyringException("unsupported ring usage: "
- + Integer.toBinaryString(usage));
- }
- keyring.load(attr);
+ if (! in.markSupported())
+ in = new BufferedInputStream(in);
+
+ loadPrivateKeyring(in, password);
+ loadPublicKeyring(in, password);
}
+ else
+ createNewKeyrings();
+
loaded = true;
+
+ log.exiting(this.getClass().getName(), "engineLoad");
}
public void engineStore(OutputStream out, char[] password) throws IOException
{
- if (!loaded || keyring == null)
- {
- throw new IllegalStateException ("not loaded");
- }
+ log.entering(this.getClass().getName(), "engineStore", String.valueOf(password));
+
+ ensureLoaded();
HashMap attr = new HashMap();
attr.put(IKeyring.KEYRING_DATA_OUT, out);
attr.put(IKeyring.KEYRING_PASSWORD, password);
- keyring.store(attr);
+
+ privateKR.store(attr);
+ publicKR.store(attr);
+
+ log.exiting(this.getClass().getName(), "engineStore");
}
public int engineSize()
{
- if (!loaded)
- {
- throw new IllegalStateException ("not loaded");
- }
- if (keyring == null)
- {
- return 0;
- }
- return keyring.size();
+ ensureLoaded();
+ return privateKR.size() + publicKR.size();
+ }
+
+ /**
+ * Ensure that the underlying keyring pair is loaded. Throw an exception if it
+ * isn't; otherwise returns silently.
+ *
+ * @throws IllegalStateException if the keyring is not loaded.
+ */
+ private void ensureLoaded()
+ {
+ if (! loaded)
+ throw new IllegalStateException(NOT_LOADED);
+ }
+
+ /**
+ * Load the private keyring from the designated input stream.
+ *
+ * @param in the input stream to process.
+ * @param password the password protecting the keyring.
+ * @throws MalformedKeyringException if the keyring is not a private one.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ private void loadPrivateKeyring(InputStream in, char[] password)
+ throws MalformedKeyringException, IOException
+ {
+ log.entering(this.getClass().getName(), "loadPrivateKeyring");
+
+ in.mark(5);
+ for (int i = 0; i < 4; i++)
+ if (in.read() != Registry.GKR_MAGIC[i])
+ throw new MalformedKeyringException("incorrect magic");
+
+ int usage = in.read();
+ in.reset();
+ if (usage != GnuPrivateKeyring.USAGE)
+ throw new MalformedKeyringException("Was expecting a private keyring but got a wrong USAGE: "
+ + Integer.toBinaryString(usage));
+ HashMap attr = new HashMap();
+ attr.put(IKeyring.KEYRING_DATA_IN, in);
+ attr.put(IKeyring.KEYRING_PASSWORD, password);
+ privateKR = new GnuPrivateKeyring();
+ privateKR.load(attr);
+
+ log.exiting(this.getClass().getName(), "loadPrivateKeyring");
+ }
+
+ /**
+ * Load the public keyring from the designated input stream.
+ *
+ * @param in the input stream to process.
+ * @param password the password protecting the keyring.
+ * @throws MalformedKeyringException if the keyring is not a public one.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ private void loadPublicKeyring(InputStream in, char[] password)
+ throws MalformedKeyringException, IOException
+ {
+ log.entering(this.getClass().getName(), "loadPublicKeyring");
+
+ in.mark(5);
+ for (int i = 0; i < 4; i++)
+ if (in.read() != Registry.GKR_MAGIC[i])
+ throw new MalformedKeyringException("incorrect magic");
+
+ int usage = in.read();
+ in.reset();
+ if (usage != GnuPublicKeyring.USAGE)
+ throw new MalformedKeyringException("Was expecting a public keyring but got a wrong USAGE: "
+ + Integer.toBinaryString(usage));
+ HashMap attr = new HashMap();
+ attr.put(IKeyring.KEYRING_DATA_IN, in);
+ attr.put(IKeyring.KEYRING_PASSWORD, password);
+ publicKR = new GnuPublicKeyring();
+ publicKR.load(attr);
+
+ log.exiting(this.getClass().getName(), "loadPublicKeyring");
+ }
+
+ /**
+ * Return the creation date of a named alias in a designated keyring.
+ *
+ * @param alias the alias to look for.
+ * @param keyring the keyring to search.
+ * @return the creattion date of the entry named <code>alias</code>. Return
+ * <code>null</code> if <code>alias</code> was not found in
+ * <code>keyring</code>.
+ */
+ private Date getCreationDate(String alias, IKeyring keyring)
+ {
+ log.entering(this.getClass().getName(), "getCreationDate",
+ new Object[] { alias, keyring });
+
+ Date result = null;
+ if (keyring != null)
+ for (Iterator it = keyring.get(alias).iterator(); it.hasNext();)
+ {
+ Object o = it.next();
+ if (o instanceof PrimitiveEntry)
+ {
+ result = ((PrimitiveEntry) o).getCreationDate();
+ break;
+ }
+ }
+
+ log.exiting(this.getClass().getName(), "getCreationDate", result);
+ return result;
+ }
+
+ /** Create empty keyrings. */
+ private void createNewKeyrings()
+ {
+ log.entering(this.getClass().getName(), "createNewKeyrings");
+
+ privateKR = new GnuPrivateKeyring("HMAC-SHA-1", 20, "AES", "OFB", 16);
+ publicKR = new GnuPublicKeyring("HMAC-SHA-1", 20);
+
+ log.exiting(this.getClass().getName(), "createNewKeyrings");
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD2Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD2Spi.java
index 935f5e5..dd48963 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD2Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD2Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-MD2 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacMD2Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacMD2Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.MD2_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD4Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD4Spi.java
index 49507a6..6fadf02 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD4Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD4Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-MD4 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacMD4Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacMD4Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.MD4_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD5Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD5Spi.java
index 3bc0fea..2ef4397 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD5Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacMD5Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-MD5 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacMD5Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacMD5Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.MD5_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java
index 6a57e6c..ad7a234 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD128Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-RIPEMD-128 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacRipeMD128Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacRipeMD128Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.RIPEMD128_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java
index a47e1a5..c14e3b3 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacRipeMD160Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-RIPEMD-160 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacRipeMD160Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacRipeMD160Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.RIPEMD160_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA160Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA160Spi.java
index e251dc3..f102c9e 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA160Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA160Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-SHA-160 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacSHA160Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacSHA160Spi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.SHA160_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA256Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA256Spi.java
index 7caa260..cadad1c 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA256Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA256Spi.java
@@ -42,8 +42,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the HMAC-SHA-256 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public final class HMacSHA256Spi extends MacAdapter
{
@@ -64,4 +62,4 @@ public final class HMacSHA256Spi extends MacAdapter
// Instance methods
// -------------------------------------------------------------------------
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA384Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA384Spi.java
index d3e454b..69ef38e 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA384Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA384Spi.java
@@ -42,8 +42,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the HMAC-SHA-384 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class HMacSHA384Spi extends MacAdapter
{
@@ -64,4 +62,4 @@ public class HMacSHA384Spi extends MacAdapter
// Instance methods
// -------------------------------------------------------------------------
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA512Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA512Spi.java
index f02267c..abceb4a 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA512Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacSHA512Spi.java
@@ -42,8 +42,6 @@ import gnu.java.security.Registry;
/**
* <p>The implementation of the HMAC-SHA-512 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.</p>
- *
- * @version $Revision: 1.1 $
*/
public class HMacSHA512Spi extends MacAdapter
{
@@ -64,4 +62,4 @@ public class HMacSHA512Spi extends MacAdapter
// Instance methods
// -------------------------------------------------------------------------
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacTigerSpi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacTigerSpi.java
index e4eb26c..511993e 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacTigerSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacTigerSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the Tiger <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacTigerSpi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacTigerSpi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.TIGER_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java
index 8e2ef6d..706e0cd 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/HMacWhirlpoolSpi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the HMAC-Whirlpool <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class HMacWhirlpoolSpi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class HMacWhirlpoolSpi extends MacAdapter
{
super(Registry.HMAC_NAME_PREFIX + Registry.WHIRLPOOL_HASH);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/MacAdapter.java b/libjava/classpath/gnu/javax/crypto/jce/mac/MacAdapter.java
index c323413..dc019ca 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/MacAdapter.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/MacAdapter.java
@@ -57,8 +57,6 @@ import javax.crypto.MacSpi;
* the {@link javax.crypto.Mac} class, which provides the functionality of a
* message authentication code algorithm, such as the <i>Hashed Message
* Authentication Code</i> (<b>HMAC</b>) algorithms.</p>
- *
- * @version $Revision: 1.2 $
*/
class MacAdapter extends MacSpi implements Cloneable
{
@@ -153,4 +151,4 @@ class MacAdapter extends MacSpi implements Cloneable
{
mac.update(in, off, len);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/TMMH16Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/TMMH16Spi.java
index 0a42222..1734e1e 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/TMMH16Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/TMMH16Spi.java
@@ -50,8 +50,6 @@ import java.security.spec.AlgorithmParameterSpec;
/**
* The implementation of the TMMH16 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class TMMH16Spi extends MacAdapter
{
@@ -88,4 +86,4 @@ public final class TMMH16Spi extends MacAdapter
throw new InvalidAlgorithmParameterException(iae.getMessage());
}
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/UHash32Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/UHash32Spi.java
index a24b8e5..af678c0 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/UHash32Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/UHash32Spi.java
@@ -43,8 +43,6 @@ import gnu.java.security.Registry;
/**
* The implementation of the UHash-32 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class UHash32Spi extends MacAdapter
{
@@ -56,4 +54,4 @@ public final class UHash32Spi extends MacAdapter
{
super(Registry.UHASH32);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/mac/UMac32Spi.java b/libjava/classpath/gnu/javax/crypto/jce/mac/UMac32Spi.java
index 52c58f3..4e90468 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/mac/UMac32Spi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/mac/UMac32Spi.java
@@ -50,8 +50,6 @@ import java.security.spec.AlgorithmParameterSpec;
/**
* The implementation of the UMAC-32 <i>Service Provider Interface</i>
* (<b>SPI</b>) adapter.
- *
- * @version $Revision: 1.1 $
*/
public final class UMac32Spi extends MacAdapter
{
@@ -88,4 +86,4 @@ public final class UMac32Spi extends MacAdapter
throw new InvalidAlgorithmParameterException(iae.getMessage());
}
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java b/libjava/classpath/gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java
index 5b3badc..0d09d5c 100644
--- a/libjava/classpath/gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java
+++ b/libjava/classpath/gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java
@@ -44,6 +44,7 @@ import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import javax.crypto.spec.DHGenParameterSpec;
+import javax.crypto.spec.DHParameterSpec;
import gnu.java.security.Registry;
import gnu.java.security.jce.sig.KeyPairGeneratorAdapter;
@@ -75,7 +76,8 @@ public class DHKeyPairGeneratorSpi
HashMap attributes = new HashMap();
if (params != null)
{
- if (! (params instanceof DHGenParameterSpec))
+ if (! (params instanceof DHGenParameterSpec) &&
+ ! (params instanceof DHParameterSpec))
throw new InvalidAlgorithmParameterException("params");
attributes.put(GnuDHKeyPairGenerator.DH_PARAMETERS, params);
diff --git a/libjava/classpath/gnu/javax/crypto/key/dh/DiffieHellmanSender.java b/libjava/classpath/gnu/javax/crypto/key/dh/DiffieHellmanSender.java
index 6b9cf70..0be82bf 100644
--- a/libjava/classpath/gnu/javax/crypto/key/dh/DiffieHellmanSender.java
+++ b/libjava/classpath/gnu/javax/crypto/key/dh/DiffieHellmanSender.java
@@ -55,7 +55,6 @@ import javax.crypto.interfaces.DHPrivateKey;
* Diffie-Hellman key agreement exchange (A in [HAC]).</p>
*
* @see DiffieHellmanKeyAgreement
- * @version $Revision: 1.1 $
*/
public class DiffieHellmanSender extends DiffieHellmanKeyAgreement
{
diff --git a/libjava/classpath/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java b/libjava/classpath/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java
index eafc8d0..5626a29 100644
--- a/libjava/classpath/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java
+++ b/libjava/classpath/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java
@@ -187,9 +187,19 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator
}
else if (params instanceof DHParameterSpec)
{
+ // FIXME: I'm not sure this is correct. It seems to behave the
+ // same way as Sun's RI, but I don't know if this behavior is
+ // documented anywhere.
DHParameterSpec jceSpec = (DHParameterSpec) params;
- l = jceSpec.getP().bitLength();
+ p = jceSpec.getP();
+ g = jceSpec.getG();
+ l = p.bitLength();
m = jceSpec.getL();
+
+ // If no exponent size was given, generate an exponent as
+ // large as the prime.
+ if (m == 0)
+ m = l;
}
else
{
@@ -242,7 +252,12 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator
}
// generate a private number x of length m such as: 1 < x < q - 1
- BigInteger q_minus_1 = q.subtract(BigInteger.ONE);
+ BigInteger q_minus_1 = null;
+ if (q != null)
+ q_minus_1 = q.subtract(BigInteger.ONE);
+
+ // We already check if m is modulo 8 in `setup.' This could just
+ // be m >>> 3.
byte[] mag = new byte[(m + 7) / 8];
BigInteger x;
while (true)
@@ -250,7 +265,7 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator
nextRandomBytes(mag);
x = new BigInteger(1, mag);
if (x.bitLength() == m && x.compareTo(BigInteger.ONE) > 0
- && x.compareTo(q_minus_1) < 0)
+ && (q_minus_1 == null || x.compareTo(q_minus_1) < 0))
{
break;
}
diff --git a/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6TLSServer.java b/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6TLSServer.java
index 23e4440..ecbe36f 100644
--- a/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6TLSServer.java
+++ b/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6TLSServer.java
@@ -61,8 +61,6 @@ import java.util.Map;
* SRP for TLS Authentication</a>. The only difference between it and the SASL
* variant is that the shared secret is the entity <code>S</code> and not
* <code>H(S)</code>.</p>
- *
- * @version $Revision: 1.1 $
*/
public class SRP6TLSServer extends SRP6KeyAgreement
{
diff --git a/libjava/classpath/gnu/javax/crypto/keyring/GnuPrivateKeyring.java b/libjava/classpath/gnu/javax/crypto/keyring/GnuPrivateKeyring.java
index d49bd09..c1fe30e 100644
--- a/libjava/classpath/gnu/javax/crypto/keyring/GnuPrivateKeyring.java
+++ b/libjava/classpath/gnu/javax/crypto/keyring/GnuPrivateKeyring.java
@@ -42,8 +42,8 @@ import gnu.java.security.Registry;
import java.io.DataInputStream;
import java.io.DataOutputStream;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.security.Key;
import java.security.PublicKey;
@@ -51,17 +51,18 @@ import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.util.Date;
import java.util.Iterator;
-import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* <p>.</p>
*/
public class GnuPrivateKeyring extends BaseKeyring implements IPrivateKeyring
{
-
// Constants and variables
// -------------------------------------------------------------------------
+ private static final Logger log = Logger.getLogger(GnuPrivateKeyring.class.getName());
public static final int USAGE = Registry.GKR_PRIVATE_KEYS
| Registry.GKR_PUBLIC_CREDENTIALS;
@@ -104,225 +105,277 @@ public class GnuPrivateKeyring extends BaseKeyring implements IPrivateKeyring
public boolean containsPrivateKey(String alias)
{
- if (!containsAlias(alias))
- {
- return false;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
+ log.entering(this.getClass().getName(), "containsPrivateKey", alias);
+
+ boolean result = false;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
if (it.next() instanceof PasswordAuthenticatedEntry)
{
- return true;
+ result = true;
+ break;
}
- }
- return false;
+
+ log.exiting(this.getClass().getName(), "containsPrivateKey",
+ Boolean.valueOf(result));
+ return result;
}
public Key getPrivateKey(String alias, char[] password)
throws UnrecoverableKeyException
{
- if (!containsAlias(alias))
- {
- return null;
- }
- List l = get(alias);
- PasswordAuthenticatedEntry e1 = null;
- PasswordEncryptedEntry e2 = null;
- for (Iterator it = l.iterator(); it.hasNext();)
- {
- Entry e = (Entry) it.next();
- if (e instanceof PasswordAuthenticatedEntry)
- {
- e1 = (PasswordAuthenticatedEntry) e;
- break;
- }
- }
- if (e1 == null)
- {
- return null;
- }
- try
- {
- e1.verify(password);
- }
- catch (Exception e)
- {
- throw new UnrecoverableKeyException("authentication failed");
- }
- for (Iterator it = e1.getEntries().iterator(); it.hasNext();)
+ log.entering(this.getClass().getName(), "getPrivateKey",
+ new Object[] { alias, String.valueOf(password) });
+
+ Key result = null;
+ if (containsAlias(alias))
{
- Entry e = (Entry) it.next();
- if (e instanceof PasswordEncryptedEntry)
+ PasswordAuthenticatedEntry e1 = null;
+ PasswordEncryptedEntry e2 = null;
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
{
- e2 = (PasswordEncryptedEntry) e;
- break;
+ Entry e = (Entry) it.next();
+ if (e instanceof PasswordAuthenticatedEntry)
+ {
+ e1 = (PasswordAuthenticatedEntry) e;
+ break;
+ }
}
- }
- if (e2 == null)
- {
- return null;
- }
- try
- {
- e2.decrypt(password);
- }
- catch (Exception e)
- {
- throw new UnrecoverableKeyException("decryption failed");
- }
- for (Iterator it = e2.get(alias).iterator(); it.hasNext();)
- {
- Entry e = (Entry) it.next();
- if (e instanceof PrivateKeyEntry)
+
+ if (e1 != null)
{
- return ((PrivateKeyEntry) e).getKey();
+ try
+ {
+ e1.verify(password);
+ }
+ catch (Exception e)
+ {
+ throw new UnrecoverableKeyException("authentication failed");
+ }
+
+ for (Iterator it = e1.getEntries().iterator(); it.hasNext();)
+ {
+ Entry e = (Entry) it.next();
+ if (e instanceof PasswordEncryptedEntry)
+ {
+ e2 = (PasswordEncryptedEntry) e;
+ break;
+ }
+ }
+
+ if (e2 != null)
+ {
+ try
+ {
+ e2.decrypt(password);
+ }
+ catch (Exception e)
+ {
+ throw new UnrecoverableKeyException("decryption failed");
+ }
+
+ for (Iterator it = e2.get(alias).iterator(); it.hasNext();)
+ {
+ Entry e = (Entry) it.next();
+ if (e instanceof PrivateKeyEntry)
+ {
+ result = ((PrivateKeyEntry) e).getKey();
+ break;
+ }
+ }
+ }
}
}
- return null;
+
+ log.exiting(this.getClass().getName(), "getPrivateKey", result);
+ return result;
}
public void putPrivateKey(String alias, Key key, char[] password)
{
- if (containsPrivateKey(alias))
- {
- return;
- }
- alias = fixAlias(alias);
- Properties p = new Properties();
- p.put("alias", alias);
- PrivateKeyEntry pke = new PrivateKeyEntry(key, new Date(), p);
- PasswordEncryptedEntry enc = new PasswordEncryptedEntry(cipher, mode,
- keylen,
- new Properties());
- PasswordAuthenticatedEntry auth = new PasswordAuthenticatedEntry(
- mac,
- maclen,
- new Properties());
- enc.add(pke);
- auth.add(enc);
- try
- {
- enc.encode(null, password);
- auth.encode(null, password);
- }
- catch (IOException ioe)
+ log.entering(this.getClass().getName(), "putPrivateKey",
+ new Object[] { alias, key, String.valueOf(password) });
+
+ if (! containsPrivateKey(alias))
{
- throw new IllegalArgumentException(ioe.toString());
+ alias = fixAlias(alias);
+ Properties p = new Properties();
+ p.put("alias", alias);
+ PrivateKeyEntry pke = new PrivateKeyEntry(key, new Date(), p);
+ PasswordEncryptedEntry enc;
+ enc = new PasswordEncryptedEntry(cipher, mode, keylen, new Properties());
+ enc.add(pke);
+
+ PasswordAuthenticatedEntry auth;
+ auth = new PasswordAuthenticatedEntry(mac, maclen, new Properties());
+ auth.add(enc);
+
+ log.finest("About to encrypt the key...");
+ try
+ {
+ enc.encode(null, password);
+ }
+ catch (IOException x)
+ {
+ log.log(Level.FINER, "Exception while encrypting the key. "
+ + "Rethrow as IllegalArgumentException", x);
+ throw new IllegalArgumentException(x.toString());
+ }
+
+ log.finest("About to authenticate the encrypted key...");
+ try
+ {
+ auth.encode(null, password);
+ }
+ catch (IOException x)
+ {
+ log.log(Level.FINER, "Exception while authenticating the encrypted "
+ + "key. Rethrow as IllegalArgumentException", x);
+ throw new IllegalArgumentException(x.toString());
+ }
+
+ keyring.add(auth);
}
- keyring.add(auth);
+ else
+ log.finer("Keyring already contains alias: " + alias);
+
+ log.exiting(this.getClass().getName(), "putPrivateKey");
}
public boolean containsPublicKey(String alias)
{
- if (!containsAlias(alias))
- {
- return false;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
+ log.entering(this.getClass().getName(), "containsPublicKey", alias);
+
+ boolean result = false;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
if (it.next() instanceof PublicKeyEntry)
{
- return true;
+ result = true;
+ break;
}
- }
- return false;
+
+ log.exiting(this.getClass().getName(), "containsPublicKey",
+ Boolean.valueOf(result));
+ return result;
}
public PublicKey getPublicKey(String alias)
{
- if (!containsAlias(alias))
- {
- return null;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
- Entry e = (Entry) it.next();
- if (e instanceof PublicKeyEntry)
- {
- return ((PublicKeyEntry) e).getKey();
- }
- }
- return null;
+ log.entering(this.getClass().getName(), "getPublicKey", alias);
+
+ PublicKey result = null;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
+ {
+ Entry e = (Entry) it.next();
+ if (e instanceof PublicKeyEntry)
+ {
+ result = ((PublicKeyEntry) e).getKey();
+ break;
+ }
+ }
+
+ log.exiting(this.getClass().getName(), "getPublicKey", result);
+ return result;
}
public void putPublicKey(String alias, PublicKey key)
{
- if (containsPublicKey(alias))
+ log.entering(this.getClass().getName(), "putPublicKey",
+ new Object[] { alias, key });
+
+ if (! containsPublicKey(alias))
{
- return;
+ Properties p = new Properties();
+ p.put("alias", fixAlias(alias));
+ add(new PublicKeyEntry(key, new Date(), p));
}
- Properties p = new Properties();
- p.put("alias", fixAlias(alias));
- add(new PublicKeyEntry(key, new Date(), p));
+ else
+ log.finer("Keyring already contains alias: " + alias);
+
+ log.exiting(this.getClass().getName(), "putPublicKey");
}
public boolean containsCertPath(String alias)
{
- if (!containsAlias(alias))
- {
- return false;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
+ log.entering(this.getClass().getName(), "containsCertPath", alias);
+
+ boolean result = false;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
if (it.next() instanceof CertPathEntry)
{
- return true;
+ result = true;
+ break;
}
- }
- return false;
+
+ log.exiting(this.getClass().getName(), "containsCertPath",
+ Boolean.valueOf(result));
+ return result;
}
public Certificate[] getCertPath(String alias)
{
- if (!containsAlias(alias))
- {
- return null;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
- Entry e = (Entry) it.next();
- if (e instanceof CertPathEntry)
- {
- return ((CertPathEntry) e).getCertPath();
- }
- }
- return null;
+ log.entering(this.getClass().getName(), "getCertPath", alias);
+
+ Certificate[] result = null;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
+ {
+ Entry e = (Entry) it.next();
+ if (e instanceof CertPathEntry)
+ {
+ result = ((CertPathEntry) e).getCertPath();
+ break;
+ }
+ }
+
+ log.exiting(this.getClass().getName(), "getCertPath", result);
+ return result;
}
public void putCertPath(String alias, Certificate[] path)
{
- if (containsCertPath(alias))
+ log.entering(this.getClass().getName(), "putCertPath",
+ new Object[] { alias, path });
+
+ if (! containsCertPath(alias))
{
- return;
+ Properties p = new Properties();
+ p.put("alias", fixAlias(alias));
+ add(new CertPathEntry(path, new Date(), p));
}
- Properties p = new Properties();
- p.put("alias", fixAlias(alias));
- add(new CertPathEntry(path, new Date(), p));
+ else
+ log.finer("Keyring already contains alias: " + alias);
+
+ log.exiting(this.getClass().getName(), "putCertPath");
}
protected void load(InputStream in, char[] password) throws IOException
{
+ log.entering(this.getClass().getName(), "load",
+ new Object[] { in, String.valueOf(password) });
+
if (in.read() != USAGE)
- {
- throw new MalformedKeyringException("incompatible keyring usage");
- }
+ throw new MalformedKeyringException("incompatible keyring usage");
+
if (in.read() != PasswordAuthenticatedEntry.TYPE)
- {
- throw new MalformedKeyringException(
- "expecting password-authenticated entry tag");
- }
- keyring = PasswordAuthenticatedEntry.decode(new DataInputStream(in),
- password);
+ throw new MalformedKeyringException("expecting password-authenticated entry tag");
+
+ keyring = PasswordAuthenticatedEntry.decode(new DataInputStream(in), password);
+
+ log.exiting(this.getClass().getName(), "load");
}
protected void store(OutputStream out, char[] password) throws IOException
{
+ log.entering(this.getClass().getName(), "store",
+ new Object[] { out, String.valueOf(password) });
+
out.write(USAGE);
keyring.encode(new DataOutputStream(out), password);
+
+ log.exiting(this.getClass().getName(), "store");
}
}
diff --git a/libjava/classpath/gnu/javax/crypto/keyring/GnuPublicKeyring.java b/libjava/classpath/gnu/javax/crypto/keyring/GnuPublicKeyring.java
index 318eb03..490eb44 100644
--- a/libjava/classpath/gnu/javax/crypto/keyring/GnuPublicKeyring.java
+++ b/libjava/classpath/gnu/javax/crypto/keyring/GnuPublicKeyring.java
@@ -38,26 +38,24 @@ exception statement from your version. */
package gnu.javax.crypto.keyring;
+import gnu.java.security.Registry;
+
import java.io.DataInputStream;
import java.io.DataOutputStream;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
-
+import java.security.cert.Certificate;
import java.util.Date;
import java.util.Iterator;
-import java.util.List;
-
-import java.security.cert.Certificate;
-
-import gnu.java.security.Registry;
+import java.util.logging.Logger;
public class GnuPublicKeyring extends BaseKeyring implements IPublicKeyring
{
-
// Fields.
// ------------------------------------------------------------------------
+ private static final Logger log = Logger.getLogger(GnuPublicKeyring.class.getName());
public static final int USAGE = Registry.GKR_CERTIFICATES;
// Constructors.
@@ -79,68 +77,84 @@ public class GnuPublicKeyring extends BaseKeyring implements IPublicKeyring
public boolean containsCertificate(String alias)
{
- if (!containsAlias(alias))
- {
- return false;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
+ log.entering(this.getClass().getName(), "containsCertificate", alias);
+
+ boolean result = false;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
if (it.next() instanceof CertificateEntry)
{
- return true;
+ result = true;
+ break;
}
- }
- return false;
+
+ log.exiting(this.getClass().getName(), "containsCertificate",
+ Boolean.valueOf(result));
+ return result;
}
public Certificate getCertificate(String alias)
{
- if (!containsAlias(alias))
- {
- return null;
- }
- List l = get(alias);
- for (Iterator it = l.iterator(); it.hasNext();)
- {
- Entry e = (Entry) it.next();
- if (e instanceof CertificateEntry)
- {
- return ((CertificateEntry) e).getCertificate();
- }
- }
- return null;
+ log.entering(this.getClass().getName(), "getCertificate", alias);
+
+ Certificate result = null;
+ if (containsAlias(alias))
+ for (Iterator it = get(alias).iterator(); it.hasNext();)
+ {
+ Entry e = (Entry) it.next();
+ if (e instanceof CertificateEntry)
+ {
+ result = ((CertificateEntry) e).getCertificate();
+ break;
+ }
+ }
+
+ log.exiting(this.getClass().getName(), "getCertificate", result);
+ return result;
}
public void putCertificate(String alias, Certificate cert)
{
- if (containsCertificate(alias))
+ log.entering(this.getClass().getName(), "putCertificate",
+ new Object[] { alias, cert });
+
+ if (! containsCertificate(alias))
{
- return;
+ Properties p = new Properties();
+ p.put("alias", fixAlias(alias));
+ add(new CertificateEntry(cert, new Date(), p));
}
- Properties p = new Properties();
- p.put("alias", fixAlias(alias));
- add(new CertificateEntry(cert, new Date(), p));
+ else
+ log.finer("Keyring already contains alias: " + alias);
+
+ log.exiting(this.getClass().getName(), "putCertificate");
}
protected void load(InputStream in, char[] password) throws IOException
{
+ log.entering(this.getClass().getName(), "load",
+ new Object[] { in, String.valueOf(password) });
+
if (in.read() != USAGE)
- {
- throw new MalformedKeyringException("incompatible keyring usage");
- }
+ throw new MalformedKeyringException("incompatible keyring usage");
+
if (in.read() != PasswordAuthenticatedEntry.TYPE)
- {
- throw new MalformedKeyringException(
- "expecting password-authenticated entry tag");
- }
- keyring = PasswordAuthenticatedEntry.decode(new DataInputStream(in),
- password);
+ throw new MalformedKeyringException("expecting password-authenticated entry tag");
+
+ DataInputStream dis = new DataInputStream(in);
+ keyring = PasswordAuthenticatedEntry.decode(dis, password);
+
+ log.exiting(this.getClass().getName(), "load");
}
protected void store(OutputStream out, char[] password) throws IOException
{
+ log.entering(this.getClass().getName(), "store",
+ new Object[] { out, String.valueOf(password) });
+
out.write(USAGE);
keyring.encode(new DataOutputStream(out), password);
+
+ log.exiting(this.getClass().getName(), "store");
}
}
diff --git a/libjava/classpath/gnu/javax/crypto/keyring/PrivateKeyEntry.java b/libjava/classpath/gnu/javax/crypto/keyring/PrivateKeyEntry.java
index 3063499..8824956 100644
--- a/libjava/classpath/gnu/javax/crypto/keyring/PrivateKeyEntry.java
+++ b/libjava/classpath/gnu/javax/crypto/keyring/PrivateKeyEntry.java
@@ -57,8 +57,6 @@ import java.util.Date;
/**
* <p>An immutable class representing a private or secret key entry.</p>
- *
- * @version $Revision: 1.1 $
*/
public final class PrivateKeyEntry extends PrimitiveEntry
{
diff --git a/libjava/classpath/gnu/javax/crypto/mac/UMac32.java b/libjava/classpath/gnu/javax/crypto/mac/UMac32.java
index d20d4f4..0138888 100644
--- a/libjava/classpath/gnu/javax/crypto/mac/UMac32.java
+++ b/libjava/classpath/gnu/javax/crypto/mac/UMac32.java
@@ -419,7 +419,7 @@ public class UMac32 extends BaseMac
mac.update(data, 0, 128);
byte[] result = mac.digest();
// System.out.println("UMAC test vector: "+Util.toString(result));
- valid = new Boolean(TV1.equals(Util.toString(result)));
+ valid = Boolean.valueOf(TV1.equals(Util.toString(result)));
}
return valid.booleanValue();
}
diff --git a/libjava/classpath/gnu/javax/crypto/mode/IAuthenticatedMode.java b/libjava/classpath/gnu/javax/crypto/mode/IAuthenticatedMode.java
index d89c001..989e3ed 100644
--- a/libjava/classpath/gnu/javax/crypto/mode/IAuthenticatedMode.java
+++ b/libjava/classpath/gnu/javax/crypto/mode/IAuthenticatedMode.java
@@ -50,11 +50,9 @@ import gnu.javax.crypto.mac.IMac;
* is done via the {@link IMac#digest()} method, and header updating
* (if supported by the mode) is done via the {@link
* IMac#update(byte[],int,int)} method.
- *
- * @version $Revision: 1.1 $
*/
public interface IAuthenticatedMode extends IMode, IMac
{
// Trivial conjunction of IMode and IMac.
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/pad/PadFactory.java b/libjava/classpath/gnu/javax/crypto/pad/PadFactory.java
index e122719..913d69d 100644
--- a/libjava/classpath/gnu/javax/crypto/pad/PadFactory.java
+++ b/libjava/classpath/gnu/javax/crypto/pad/PadFactory.java
@@ -84,7 +84,7 @@ public class PadFactory implements Registry
if (pad.endsWith("padding"))
pad = pad.substring(0, pad.length() - "padding".length());
IPad result = null;
- if (pad.equals(PKCS7_PAD))
+ if (pad.equals(PKCS7_PAD) || pad.equals(PKCS5_PAD))
{
result = new PKCS7();
}
@@ -122,6 +122,7 @@ public class PadFactory implements Registry
public static final Set getNames()
{
HashSet hs = new HashSet();
+ hs.add(PKCS5_PAD);
hs.add(PKCS7_PAD);
hs.add(TBC_PAD);
hs.add(EME_PKCS1_V1_5_PAD);
@@ -133,4 +134,4 @@ public class PadFactory implements Registry
// Instance methods
// -------------------------------------------------------------------------
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/pad/WrongPaddingException.java b/libjava/classpath/gnu/javax/crypto/pad/WrongPaddingException.java
index cc74dfb..e477cf3 100644
--- a/libjava/classpath/gnu/javax/crypto/pad/WrongPaddingException.java
+++ b/libjava/classpath/gnu/javax/crypto/pad/WrongPaddingException.java
@@ -41,8 +41,6 @@ package gnu.javax.crypto.pad;
/**
* <p>A checked exception that indicates that a padding algorithm did not find the
* expected padding bytes when unpadding some data.</p>
- *
- * @version $Revision: 1.1 $
*/
public class WrongPaddingException extends Exception
{
@@ -60,4 +58,4 @@ public class WrongPaddingException extends Exception
// Instant methods
// -------------------------------------------------------------------------
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/prng/CSPRNG.java b/libjava/classpath/gnu/javax/crypto/prng/CSPRNG.java
index 1970092..6585dcb 100644
--- a/libjava/classpath/gnu/javax/crypto/prng/CSPRNG.java
+++ b/libjava/classpath/gnu/javax/crypto/prng/CSPRNG.java
@@ -364,7 +364,7 @@ public class CSPRNG extends BasePRNG
{
CSPRNG instance = new CSPRNG();
HashMap attrib = new HashMap();
- attrib.put(BLOCKING, new Boolean(getProperty(BLOCK)));
+ attrib.put(BLOCKING, Boolean.valueOf(getProperty(BLOCK)));
String s = null;
// Get each file source "gnu.crypto.csprng.file.N".
diff --git a/libjava/classpath/gnu/javax/crypto/prng/Fortuna.java b/libjava/classpath/gnu/javax/crypto/prng/Fortuna.java
index 6453a9d..69ce860 100644
--- a/libjava/classpath/gnu/javax/crypto/prng/Fortuna.java
+++ b/libjava/classpath/gnu/javax/crypto/prng/Fortuna.java
@@ -142,6 +142,14 @@ public class Fortuna extends BasePRNG implements Serializable,
pool = 0;
pool0Count = 0;
generator.init(attributes);
+ try
+ {
+ fillBlock ();
+ }
+ catch (LimitReachedException shouldNotHappen)
+ {
+ throw new RuntimeException (shouldNotHappen);
+ }
}
public void fillBlock() throws LimitReachedException
@@ -324,6 +332,7 @@ public class Fortuna extends BasePRNG implements Serializable,
byte[] seed = (byte[]) attributes.get(SEED);
if (seed != null)
addRandomBytes(seed);
+ fillBlock ();
}
/**
diff --git a/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java b/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java
index 0de38e2..7d4f4c9 100644
--- a/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java
+++ b/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java
@@ -98,8 +98,6 @@ import java.util.Map;
* <li><a href="http://www.ietf.org/internet-drafts/draft-mcgrew-saag-icm-00.txt">
* Integer Counter Mode</a>, David A. McGrew.</li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public class ICMGenerator extends BasePRNG implements Cloneable
{
@@ -376,4 +374,4 @@ public class ICMGenerator extends BasePRNG implements Cloneable
cipher.encryptBlock(buffer, 0, buffer, 0);
blockNdx = blockNdx.add(BigInteger.ONE); // increment blockNdx
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/prng/IPBE.java b/libjava/classpath/gnu/javax/crypto/prng/IPBE.java
index 531e7ea..66921d6 100644
--- a/libjava/classpath/gnu/javax/crypto/prng/IPBE.java
+++ b/libjava/classpath/gnu/javax/crypto/prng/IPBE.java
@@ -39,31 +39,43 @@ exception statement from your version. */
package gnu.javax.crypto.prng;
/**
- * <p>Trivial interface to group Password-based encryption property names.</p>
- *
- * @version $Revision: 1.1 $
+ * Trivial interface to group Password-based encryption property names and
+ * constants.
*/
public interface IPBE
{
-
- // Constants
- // -------------------------------------------------------------------------
-
/**
* Property name for the iteration count in a PBE algorithm. The property
* associated with this is expected to be an {@link Integer}.
*/
- public static final String ITERATION_COUNT = "gnu.crypto.pbe.iteration.count";
+ String ITERATION_COUNT = "gnu.crypto.pbe.iteration.count";
/**
* Property name for the password in a PBE algorithm. The property associated
* with this is expected to be a char array.
*/
- public static final String PASSWORD = "gnu.crypto.pbe.password";
+ String PASSWORD = "gnu.crypto.pbe.password";
+
+ /**
+ * Property name for the password character encoding in a PBE algorithm. The
+ * property associated with this is expected to be a String denoting a valid
+ * character-encoding name. If this property is not set, and a password is
+ * used, then {@link #DEFAULT_PASSWORD_ENCODING} will be used when converting
+ * the password character(s) to bytes.
+ */
+ String PASSWORD_ENCODING = "gnu.crypto.pbe.password.encoding";
/**
* Property name for the salt in a PBE algorithm. The property associated
* with this is expected to be a byte array.
*/
- public static final String SALT = "gnu.crypto.pbe.salt";
-} \ No newline at end of file
+ String SALT = "gnu.crypto.pbe.salt";
+
+ /**
+ * The default character set encoding name to be used if (a) a password is
+ * to be used as the source for a PBE-based Key Derivation Function (KDF) and
+ * (b) no character set encoding name was specified among the attributes used
+ * to initialize the instance.
+ */
+ String DEFAULT_PASSWORD_ENCODING = "UTF-8";
+}
diff --git a/libjava/classpath/gnu/javax/crypto/prng/PBKDF2.java b/libjava/classpath/gnu/javax/crypto/prng/PBKDF2.java
index 5146bd4..d39cd0a 100644
--- a/libjava/classpath/gnu/javax/crypto/prng/PBKDF2.java
+++ b/libjava/classpath/gnu/javax/crypto/prng/PBKDF2.java
@@ -62,8 +62,6 @@ import java.util.Map;
* <li>B. Kaliski, <a href="http://www.ietf.org/rfc/rfc2898.txt">RFC 2898:
* Password-Based Cryptography Specification, Version 2.0</a></li>
* </ol>
- *
- * @version $Revision: 1.1 $
*/
public class PBKDF2 extends BasePRNG implements Cloneable
{
@@ -129,23 +127,34 @@ public class PBKDF2 extends BasePRNG implements Cloneable
salt = s;
}
+ byte[] macKeyMaterial;
char[] password = (char[]) attributes.get(IPBE.PASSWORD);
if (password != null)
{
+ String encoding = (String) attributes.get(IPBE.PASSWORD_ENCODING);
+ if (encoding == null || encoding.trim().length() == 0)
+ encoding = IPBE.DEFAULT_PASSWORD_ENCODING;
+ else
+ encoding = encoding.trim();
+
try
{
- macAttrib.put(IMac.MAC_KEY_MATERIAL,
- new String(password).getBytes("UTF-8"));
+ macKeyMaterial = new String(password).getBytes(encoding);
}
catch (UnsupportedEncodingException uee)
{
- throw new Error(uee.getMessage());
+ throw new IllegalArgumentException("Unknown or unsupported encoding: "
+ + encoding, uee);
}
}
+ else
+ macKeyMaterial = (byte[]) attributes.get(IMac.MAC_KEY_MATERIAL);
+
+ if (macKeyMaterial != null)
+ macAttrib.put(IMac.MAC_KEY_MATERIAL, macKeyMaterial);
else if (!initialised)
- {
- throw new IllegalArgumentException("no password specified");
- } // otherwise re-use previous password.
+ throw new IllegalArgumentException("Neither password nor key-material were specified");
+ // otherwise re-use previous password/key-material
try
{
@@ -213,4 +222,4 @@ public class PBKDF2 extends BasePRNG implements Cloneable
}
}
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/sasl/ConfidentialityException.java b/libjava/classpath/gnu/javax/crypto/sasl/ConfidentialityException.java
index 561827d..adfc065 100644
--- a/libjava/classpath/gnu/javax/crypto/sasl/ConfidentialityException.java
+++ b/libjava/classpath/gnu/javax/crypto/sasl/ConfidentialityException.java
@@ -44,8 +44,6 @@ import javax.security.sasl.SaslException;
* Used by mechanisms that offer a security services layer, this checked
* exception is thrown to indicate that a violation has occured during the
* processing of a <i>confidentiality</i> protection filter.
- *
- * @version $Revision: 1.1 $
*/
public class ConfidentialityException extends SaslException
{
@@ -81,4 +79,4 @@ public class ConfidentialityException extends SaslException
{
super(s, x);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/sasl/IllegalMechanismStateException.java b/libjava/classpath/gnu/javax/crypto/sasl/IllegalMechanismStateException.java
index 94d9269..b46ad98 100644
--- a/libjava/classpath/gnu/javax/crypto/sasl/IllegalMechanismStateException.java
+++ b/libjava/classpath/gnu/javax/crypto/sasl/IllegalMechanismStateException.java
@@ -46,8 +46,6 @@ import javax.security.sasl.AuthenticationException;
* that mechanism was not completed yet, or that an operation that should be
* invoked on incomplete mechanisms was invoked but the authentication phase of
* that mechanism was already completed.
- *
- * @version $Revision: 1.1 $
*/
public class IllegalMechanismStateException extends AuthenticationException
{
@@ -83,4 +81,4 @@ public class IllegalMechanismStateException extends AuthenticationException
{
super(detail, ex);
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/sasl/srp/IALG.java b/libjava/classpath/gnu/javax/crypto/sasl/srp/IALG.java
index cfaf22b..51492f9 100644
--- a/libjava/classpath/gnu/javax/crypto/sasl/srp/IALG.java
+++ b/libjava/classpath/gnu/javax/crypto/sasl/srp/IALG.java
@@ -50,8 +50,6 @@ import javax.security.sasl.SaslException;
/**
* <p>A Factory class that returns IALG (Integrity Algorithm) instances that
* operate as described in the draft-burdis-cat-sasl-srp-04 and later.</p>
- *
- * @version $Revision: 1.1 $
*/
public final class IALG implements Cloneable
{
@@ -156,4 +154,4 @@ public final class IALG implements Cloneable
{
return hmac.macSize();
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/crypto/sasl/srp/SRPServer.java b/libjava/classpath/gnu/javax/crypto/sasl/srp/SRPServer.java
index 11902b82..672660b 100644
--- a/libjava/classpath/gnu/javax/crypto/sasl/srp/SRPServer.java
+++ b/libjava/classpath/gnu/javax/crypto/sasl/srp/SRPServer.java
@@ -72,8 +72,6 @@ import javax.security.sasl.SaslServer;
/**
* <p>The SASL-SRP server-side mechanism.</p>
- *
- * @version $Revision: 1.2 $
*/
public class SRPServer extends ServerMechanism implements SaslServer
{
@@ -1153,4 +1151,4 @@ public class SRPServer extends ServerMechanism implements SaslServer
return prng;
}
-} \ No newline at end of file
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java
index c4a582b..df53f2e 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPDecoder.java
@@ -41,7 +41,6 @@ import java.io.IOException;
import javax.imageio.stream.ImageInputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.BufferedImage;
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPEncoder.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPEncoder.java
new file mode 100644
index 0000000..fc8dcf0
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPEncoder.java
@@ -0,0 +1,119 @@
+/* BMPEncoder.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public abstract class BMPEncoder
+{
+
+ /**
+ * Constructs a new BMPEncoder.
+ */
+ public BMPEncoder()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Determines the coding type of the bitmap and returns the corresponding
+ * encoder.
+ *
+ * @param fh - the file header
+ * @param ih - the info header
+ * @return the appropriate encoder
+ */
+ public static BMPEncoder getEncoder(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ switch (ih.getCompression())
+ {
+ case BMPInfoHeader.BI_RGB:
+ switch (ih.getBitCount())
+ {
+ case 32:
+ return new EncodeRGB32(fh, ih);
+
+ case 24:
+ return new EncodeRGB24(fh, ih);
+
+ case 16:
+ return new EncodeRGB16(fh, ih);
+
+ case 8:
+ return new EncodeRGB8(fh, ih);
+
+ case 4:
+ return new EncodeRGB4(fh, ih);
+
+ case 1:
+ return new EncodeRGB1(fh, ih);
+
+ default:
+ return null;
+ }
+ case BMPInfoHeader.BI_RLE4:
+ return new EncodeRLE4(fh, ih);
+
+ case BMPInfoHeader.BI_RLE8:
+ return new EncodeRLE8(fh, ih);
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data, metadata and
+ * thumbnails to be written
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public abstract void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param)
+ throws IOException;
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java
index 246e0ea..4ba32d3 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPFileHeader.java
@@ -37,27 +37,32 @@ exception statement from your version. */
package gnu.javax.imageio.bmp;
+import java.awt.image.RenderedImage;
import java.io.IOException;
-import javax.imageio.stream.ImageInputStream;
-import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
+import javax.imageio.IIOImage;
+import javax.imageio.stream.ImageInputStream;
+import javax.imageio.stream.ImageOutputStream;
+
public class BMPFileHeader {
/** Header signature, always 'BM' */
private final static short bfType = 0x424d;
/** Bitmap file size, in bytes. */
- private long bfSize;
+ protected long bfSize;
/** Offset from the beginning of the file to the bitmap data */
- private long bfOffBits;
+ protected long bfOffBits;
/** BITMAPFILEHEADER is 14 bytes */
public static final int SIZE = 14;
-
+ private static final int BITMAPINFOHEADER_SIZE = 40;
+
/**
* Creates the header from an input stream, which is not closed.
+ *
* @throws IOException if an I/O error occured.
* @throws BMPException if the header was invalid
*/
@@ -82,17 +87,37 @@ public class BMPFileHeader {
bfOffBits = ((long)buf.getInt(10) & (0xFFFFFFFF));
}
+
+ /**
+ * Creates the header from an output stream, which is not closed.
+ *
+ * @param out - the image output stream
+ * @param im - the image
+ * @throws IOException if an I/O error occured.
+ */
+ public BMPFileHeader(ImageOutputStream out, IIOImage im) throws IOException
+ {
+ RenderedImage img = im.getRenderedImage();
+ int w = img.getWidth();
+ int h = img.getHeight();
+
+ bfOffBits = SIZE + BITMAPINFOHEADER_SIZE;
+ bfSize = ((w * h) * 3) + ((4 - ((w * 3) % 4)) * h) + bfOffBits;
+
+ write(out);
+ }
/**
* Writes the header to an output stream, which is not closed or flushed.
+ *
* @throws IOException if an I/O error occured.
*/
- public void write(OutputStream out) throws IOException {
+ public void write(ImageOutputStream out) throws IOException {
ByteBuffer buf = ByteBuffer.allocate(SIZE);
buf.putShort(0, bfType); // ID
buf.putInt(2, (int)(bfSize & (0xFFFFFFFF))); // size
buf.putInt(6, 0); // 4 reserved bytes set to zero
- buf.putInt(2, (int)(bfOffBits & (0xFFFFFFFF))); // size
+ buf.putInt(7, (int)(bfOffBits & (0xFFFFFFFF))); // size
out.write(buf.array());
}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java
index 3341d4b..f1359da 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReader.java
@@ -145,8 +145,6 @@ public class BMPImageReader extends ImageReader {
readHeaders();
return decoder.decode((ImageInputStream)input);
}
-
-
}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java
index b175c7d..cf8547c 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java
@@ -54,9 +54,8 @@ public class BMPImageReaderSpi extends ImageReaderSpi {
static final String[] MIMETypes = {
"image/bmp",
"image/x-windows-bmp"};
-
- static final String[] writerSpiNames = null;
- //{"com.mycompany.imageio.MyFormatImageWriterSpi" };
+ static final String[] writerSpiNames =
+ { "gnu.javax.imageio.bmp.BMPImageWriterSpi" };
static final boolean supportsStandardStreamMetadataFormat = false;
static final String nativeStreamMetadataFormatName = null;
@@ -73,7 +72,7 @@ public class BMPImageReaderSpi extends ImageReaderSpi {
super(vendorName, version,
names, suffixes, MIMETypes,
readerClassName,
- STANDARD_INPUT_TYPE, // Accept ImageImageInputStreams
+ STANDARD_INPUT_TYPE, // Accept ImageInputStreams
writerSpiNames,
supportsStandardStreamMetadataFormat,
nativeStreamMetadataFormatName,
@@ -115,9 +114,3 @@ public class BMPImageReaderSpi extends ImageReaderSpi {
return new BMPImageReader(this);
}
}
-
-
-
-
-
-
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriter.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriter.java
new file mode 100644
index 0000000..08b5041
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriter.java
@@ -0,0 +1,196 @@
+/* BMPImageWriter.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.spi.ImageWriterSpi;
+import javax.imageio.stream.ImageOutputStream;
+
+public class BMPImageWriter
+ extends ImageWriter
+{
+ protected BMPEncoder encoder;
+ protected BMPFileHeader fileHeader;
+ protected BMPInfoHeader infoHeader;
+
+ /**
+ * Construct an bmp image writer.
+ *
+ * @param originatingProvider - the provider that is constructing this image
+ * writer, or null
+ */
+ protected BMPImageWriter(ImageWriterSpi originatingProvider)
+ {
+ super(originatingProvider);
+ encoder = null;
+ fileHeader = null;
+ infoHeader = null;
+ }
+
+ /**
+ * Convert IIOMetadata from an input reader format, returning an IIOMetadata
+ * suitable for use by an image writer. The ImageTypeSpecifier specifies the
+ * destination image type. An optional ImageWriteParam argument is available
+ * in case the image writing parameters affect the metadata conversion.
+ *
+ * @param inData - the metadata coming from an image reader
+ * @param imageType - the output image type of the writer
+ * @param param - the image writing parameters or null
+ * @return the converted metadata that should be used by the image writer, or
+ * null if this ImageTranscoder has no knowledge of the input metadata
+ * @exception IllegalArgumentException if either inData or imageType is null
+ */
+ public IIOMetadata convertImageMetadata(IIOMetadata inData,
+ ImageTypeSpecifier imageType,
+ ImageWriteParam param)
+ {
+ // FIXME: Support metadata.
+ if (inData == null || imageType == null)
+ throw new IllegalArgumentException("IIOMetadata and ImageTypeSpecifier cannot be null.");
+ return null;
+ }
+
+ /**
+ * Convert IIOMetadata from an input stream format, returning an
+ * IIOMetadata suitable for use by an image writer.
+ *
+ * An optional ImageWriteParam argument is available in case the
+ * image writing parameters affect the metadata conversion.
+ *
+ * @param inData - the metadata coming from an input image stream
+ * @param param - the image writing parameters or null
+ * @return the converted metadata that should be used by the image
+ * writer, or null if this ImageTranscoder has no knowledge of the
+ * input metadata
+ *
+ * @exception IllegalArgumentException if inData is null
+ */
+ public IIOMetadata convertStreamMetadata (IIOMetadata inData,
+ ImageWriteParam param)
+ {
+ // FIXME: Support metadata.
+ if (inData == null)
+ throw new IllegalArgumentException("IIOMetadata cannot be null.");
+ return null;
+ }
+
+ /**
+ * Get a metadata object appropriate for encoding an image specified
+ * by the given image type specifier and optional image write
+ * parameters.
+ *
+ * @param imageType - an image type specifier
+ * @param param - image writing parameters, or null
+ * @return a metadata object appropriate for encoding an image of
+ * the given type with the given parameters
+ */
+ public IIOMetadata getDefaultImageMetadata (ImageTypeSpecifier imageType, ImageWriteParam param)
+ {
+ // FIXME: Support metadata.
+ return null;
+ }
+
+ /**
+ * Get a metadata object appropriate for encoding the default image
+ * type handled by this writer, optionally considering image write
+ * parameters.
+ *
+ * @param param - image writing parameters, or null
+ * @return a metadata object appropriate for encoding an image of
+ * the default type with the given parameters
+ */
+ public IIOMetadata getDefaultStreamMetadata (ImageWriteParam param)
+ {
+ // FIXME: Support metadata.
+ return null;
+ }
+
+ /**
+ * Write an image stream, including thumbnails and metadata to the
+ * output stream. The output must have been set prior to this
+ * method being called. Metadata associated with the stream may be
+ * supplied, or it can be left null. IIOImage may contain raster
+ * data if this writer supports rasters, or it will contain a
+ * rendered image. Thumbnails are resized if need be. Image
+ * writing parameters may be specified to affect writing, or may be
+ * left null.
+ *
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data, metadata and
+ * thumbnails to be written
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ * @throws BMPException if the encoder has not been initialized.
+ */
+ public void write(IIOMetadata streamMetadata, IIOImage image,
+ ImageWriteParam param) throws IOException, BMPException
+ {
+ checkStream();
+ ImageOutputStream out = (ImageOutputStream) output;
+ fileHeader = new BMPFileHeader(out, image);
+ infoHeader = new BMPInfoHeader(out, image, param);
+ encoder = BMPEncoder.getEncoder(fileHeader, infoHeader);
+
+ if (encoder != null)
+ encoder.encode(out, streamMetadata, image, param);
+ else
+ throw new BMPException("Encoder has not been initialized.");
+ out.close();
+ }
+
+ /**
+ * Checks the output stream.
+ *
+ * @throws IOException if there is an error with the output stream
+ */
+ private void checkStream() throws IOException
+ {
+ if (!(output instanceof ImageOutputStream))
+ throw new IllegalStateException("Output not an ImageOutputStream.");
+ if (output == null)
+ throw new IllegalStateException("No output stream.");
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java
new file mode 100644
index 0000000..b2a4273
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java
@@ -0,0 +1,148 @@
+/* BMPImageWriterSpi.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.util.Locale;
+
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.spi.ImageWriterSpi;
+
+public class BMPImageWriterSpi
+ extends ImageWriterSpi
+{
+
+ static final String vendorName = "GNU";
+ static final String version = "0.1";
+ static final String writerClassName = "gnu.javax.imageio.bmp.BMPImageWriter";
+ static final String[] names = { "Microsoft Windows BMP" };
+ static final String[] suffixes = { ".bmp", ".bm" };
+ static final String[] MIMETypes = { "image/bmp", "image/x-windows-bmp" };
+ static final String[] readerSpiNames = { "gnu.javax.imageio.bmp.BMPImageReaderSpi" };
+
+ static final boolean supportsStandardStreamMetadataFormat = false;
+ static final String nativeStreamMetadataFormatName = null;
+ static final String nativeStreamMetadataFormatClassName = null;
+ static final String[] extraStreamMetadataFormatNames = null;
+ static final String[] extraStreamMetadataFormatClassNames = null;
+ static final boolean supportsStandardImageMetadataFormat = false;
+ static final String nativeImageMetadataFormatName = null;
+ static final String nativeImageMetadataFormatClassName = null;
+ static final String[] extraImageMetadataFormatNames = null;
+ static final String[] extraImageMetadataFormatClassNames = null;
+
+ private BMPImageWriter writerInstance;
+
+ public BMPImageWriterSpi()
+ {
+ super(vendorName, version, names, suffixes, MIMETypes, writerClassName,
+ STANDARD_OUTPUT_TYPE, readerSpiNames, supportsStandardStreamMetadataFormat,
+ nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName,
+ extraStreamMetadataFormatNames, extraStreamMetadataFormatClassNames,
+ supportsStandardImageMetadataFormat, nativeImageMetadataFormatName,
+ nativeImageMetadataFormatClassName, extraImageMetadataFormatNames,
+ extraImageMetadataFormatClassNames);
+ }
+
+ /**
+ * Returns true if the image can be encoded.
+ *
+ * @param type - the image type specifier.
+ * @return true if image can be encoded, otherwise false.
+ */
+ public boolean canEncodeImage(ImageTypeSpecifier type)
+ {
+ if (type == null)
+ return false;
+
+ BMPInfoHeader ih = writerInstance.infoHeader;
+ if (ih != null)
+ {
+ int compressionType = ih.getCompression();
+ int bytes = type.getColorModel().getPixelSize();
+ if ((compressionType == BMPInfoHeader.BI_RLE4 && (bytes != 4 || bytes != 8))
+ || (compressionType == BMPInfoHeader.BI_RGB && ((bytes != 1
+ || bytes != 4
+ || bytes != 8
+ || bytes != 16
+ || bytes != 24
+ || bytes != 32))))
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Creates an instance of ImageWriter using the given extension.
+ *
+ * @param extension - the provider that is constructing this image writer, or
+ * null
+ */
+ public ImageWriter createWriterInstance(Object extension)
+ {
+ if (extension != null && extension instanceof ImageWriterSpi)
+ writerInstance = new BMPImageWriter((ImageWriterSpi) extension);
+ else
+ writerInstance = new BMPImageWriter(this);
+ return writerInstance;
+ }
+
+ /**
+ * Gets the instance of ImageWriter, if already created.
+ */
+ public BMPImageWriter getWriterInstance()
+ {
+ if (writerInstance != null)
+ return writerInstance;
+ return (BMPImageWriter) createWriterInstance(null);
+ }
+
+ /**
+ * Returns a short description of this service provider that can be
+ * presented to a human user.
+ *
+ * @param locale - the locale for which the description string should
+ * be localized.
+ */
+ public String getDescription(Locale locale)
+ {
+ return "Microsoft BMP v3";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java b/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java
index edcb4e6..a9f1ffd 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java
@@ -37,49 +37,55 @@ exception statement from your version. */
package gnu.javax.imageio.bmp;
+import java.awt.Dimension;
+import java.awt.image.ColorModel;
+import java.awt.image.RenderedImage;
import java.io.IOException;
-import javax.imageio.stream.ImageInputStream;
-import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import java.awt.Dimension;
-public class BMPInfoHeader {
- /** Size of the bitmap info header*/
- private int biSize;
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.stream.ImageInputStream;
+import javax.imageio.stream.ImageOutputStream;
+
+public class BMPInfoHeader
+{
+ /** Size of the bitmap info header */
+ protected int biSize;
- /** Pixel width of the bitmap */
- private int biWidth;
+ /** Pixel width of the bitmap */
+ protected int biWidth;
- /** Pixel height of the bitmap */
- private int biHeight;
+ /** Pixel height of the bitmap */
+ protected int biHeight;
- /** Number of bitplanes = 1 */
- private short biPlanes;
+ /** Number of bitplanes = 1 */
+ protected short biPlanes;
- /** Number of bpp = 1,4,8,24 */
- private short biBitCount;
+ /** Number of bpp = 1,4,8,24 */
+ protected short biBitCount;
- /** Compression type, RGB8, RLE8, RLE4, BITFIELDS */
- private int biCompression;
+ /** Compression type, RGB8, RLE8, RLE4, BITFIELDS */
+ protected int biCompression;
- /** Byte size of the uncompressed bitmap, can be 0. */
- private int biSizeImage;
+ /** Byte size of the uncompressed bitmap, can be 0. */
+ protected int biSizeImage;
- /** X resolution, dots per meter */
- private int biXPelsPerMeter;
+ /** X resolution, dots per meter */
+ protected int biXPelsPerMeter;
- /** Y resolution, dots per meter */
- private int biYPelsPerMeter;
+ /** Y resolution, dots per meter */
+ protected int biYPelsPerMeter;
- /** Number of colors used (palette only, can be 0 for all) */
- private int biClrUsed;
+ /** Number of colors used (palette only, can be 0 for all) */
+ protected int biClrUsed;
- /** Number of 'important' colors, 0 for all */
- private int biClrImportant;
+ /** Number of 'important' colors, 0 for all */
+ protected int biClrImportant;
- /** BITMAPINFOHEADER is 40 bytes */
- public static final int SIZE = 40;
+ /** BITMAPINFOHEADER is 40 bytes */
+ public static final int SIZE = 40;
/**
* Compression types
@@ -91,111 +97,221 @@ public class BMPInfoHeader {
/**
* Creates the header from an input stream, which is not closed.
+ *
+ * @param in - the image input stream
* @throws IOException if an I/O error occured.
* @throws BMPException if the header was invalid
*/
- public BMPInfoHeader(ImageInputStream in) throws IOException, BMPException {
- byte[] data = new byte[SIZE];
-
- if (in.read(data) != SIZE)
- throw new IOException("Couldn't read header.");
- ByteBuffer buf = ByteBuffer.wrap(data);
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- int n;
- if((n=buf.getInt()) != SIZE)
- throw new BMPException("Invalid BITMAPINFOHEADER size: "+n);
-
- biWidth = buf.getInt();
- biHeight = buf.getInt();
- biPlanes = buf.getShort();
- setBitCount(buf.getShort());
- setCompression(buf.getInt());
- biSizeImage = buf.getInt();
- biXPelsPerMeter = buf.getInt();
- biYPelsPerMeter = buf.getInt();
- biClrUsed = buf.getInt();
- biClrImportant = buf.getInt();
- }
-
- public void setBitCount(short bitcount) throws BMPException {
- switch(bitcount){
- case 1:
- case 4:
- case 8:
- case 16:
- case 24:
- case 32:
- biBitCount = bitcount;
- break;
-
- default:
- throw new BMPException("Invalid number of bits per pixel: "+
- bitcount);
- }
- }
-
- public short getBitCount() { return biBitCount; }
-
- public void setCompression(int compression) throws BMPException {
- switch(compression){
- case BI_RLE8:
- if(getBitCount() != 8)
- throw new BMPException("Invalid number of bits per pixel.");
- biCompression = compression;
- break;
- case BI_RLE4:
- if(getBitCount() != 4)
- throw new BMPException("Invalid number of bits per pixel.");
- biCompression = compression;
- break;
-
- case BI_RGB:
- case BI_BITFIELDS:
- biCompression = compression;
- break;
-
- default:
- throw new BMPException("Unknown bitmap compression type.");
- }
- }
-
- public int getNumberOfPaletteEntries(){
- if(biClrUsed == 0)
- switch(biBitCount){
- case 1:
- return 2;
- case 4:
- return 16;
- case 8:
- return 256;
-
- default: // should not happen
- return 0;
- }
-
- return biClrUsed;
- }
-
- public int getCompression(){
- return biCompression;
- }
-
- public Dimension getSize(){
- return new Dimension(biWidth, biHeight);
- }
-
- public int getWidth(){
- return biWidth;
- }
-
- public int getHeight(){
- return biHeight;
- }
-
- public void setSize(Dimension d){
- biWidth = (int)d.getWidth();
- biHeight = (int)d.getHeight();
- }
-
+ public BMPInfoHeader(ImageInputStream in) throws IOException, BMPException
+ {
+ byte[] data = new byte[SIZE];
+
+ if (in.read(data) != SIZE)
+ throw new IOException("Couldn't read header.");
+ ByteBuffer buf = ByteBuffer.wrap(data);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+
+ int n;
+ if ((n = buf.getInt()) != SIZE)
+ throw new BMPException("Invalid BITMAPINFOHEADER size: " + n);
+
+ biWidth = buf.getInt();
+ biHeight = buf.getInt();
+ biPlanes = buf.getShort();
+ setBitCount(buf.getShort());
+ setCompression(buf.getInt());
+ biSizeImage = buf.getInt();
+ biXPelsPerMeter = buf.getInt();
+ biYPelsPerMeter = buf.getInt();
+ biClrUsed = buf.getInt();
+ biClrImportant = buf.getInt();
+ }
+
+ /**
+ * Creates the info header from an output stream, which is not closed.
+ *
+ * @param out - the image output stream
+ * @param im - the image
+ * @param param - the image write param.
+ * @throws IOException if an I/O error occured.
+ */
+ public BMPInfoHeader(ImageOutputStream out, IIOImage im, ImageWriteParam param) throws IOException
+ {
+ RenderedImage img = im.getRenderedImage();
+ ColorModel cMod = img.getColorModel();
+
+ biSize = SIZE;
+ biWidth = img.getWidth();
+ biHeight = img.getHeight();
+ biPlanes = 1;
+
+ if (param != null && param.canWriteCompressed())
+ {
+ String compType = param.getCompressionType();
+ if (compType.equals("BI_RLE8"))
+ {
+ biCompression = BI_RLE8;
+ biBitCount = 8;
+ }
+ else if (compType.equals("BI_RLE4"))
+ {
+ biCompression = BI_RLE4;
+ biBitCount = 4;
+ }
+ else
+ {
+ biCompression = BI_RGB;
+ biBitCount = (short) cMod.getPixelSize();
+ }
+ }
+ else
+ {
+ biBitCount = (short) cMod.getPixelSize();
+ biCompression = BI_RGB;
+ }
+
+ biXPelsPerMeter = 0x0;
+ biYPelsPerMeter = 0x0;
+ biClrUsed = 0;
+ biClrImportant = 0;
+ biSizeImage = ((biWidth * biHeight) * 3)
+ + ((4 - ((biWidth * 3) % 4)) * biHeight);
+ out.write(intToDWord(biSize));
+ out.write(intToDWord(biWidth));
+ out.write(intToDWord(biHeight));
+ out.write(intToWord(biPlanes));
+ out.write(intToWord(biBitCount));
+ out.write(intToDWord(biCompression));
+ out.write(intToDWord(biSizeImage));
+ out.write(intToDWord(biXPelsPerMeter));
+ out.write(intToDWord(biYPelsPerMeter));
+ out.write(intToDWord(biClrUsed));
+ out.write(intToDWord(biClrImportant));
+ }
+
+ /**
+ * Converts an int to a word, where the return value is stored in a
+ * 2-byte array.
+ *
+ * @param val - the value to convert
+ * @return the array
+ */
+ private byte[] intToWord(int val)
+ {
+ byte b[] = new byte[2];
+ b[0] = (byte) (val & 0x00FF);
+ b[1] = (byte) ((val >> 8) & 0x00FF);
+ return b;
+ }
+
+ /**
+ * Converts an int to a double word, where the return value is
+ * stored in a 4-byte array.
+ *
+ * @param val - the value to convert
+ * @return the array
+ */
+ private byte[] intToDWord(int val)
+ {
+ byte b[] = new byte[4];
+ b[0] = (byte) (val & 0x00FF);
+ b[1] = (byte) ((val >> 8) & 0x000000FF);
+ b[2] = (byte) ((val >> 16) & 0x000000FF);
+ b[3] = (byte) ((val >> 24) & 0x000000FF);
+ return b;
+ }
+
+
+ public void setBitCount(short bitcount) throws BMPException
+ {
+ switch (bitcount)
+ {
+ case 1:
+ case 4:
+ case 8:
+ case 16:
+ case 24:
+ case 32:
+ biBitCount = bitcount;
+ break;
+
+ default:
+ throw new BMPException("Invalid number of bits per pixel: " + bitcount);
+ }
+ }
+
+ public short getBitCount()
+ {
+ return biBitCount;
+ }
+
+ public void setCompression(int compression) throws BMPException
+ {
+ switch (compression)
+ {
+ case BI_RLE8:
+ if (getBitCount() != 8)
+ throw new BMPException("Invalid number of bits per pixel.");
+ biCompression = compression;
+ break;
+ case BI_RLE4:
+ if (getBitCount() != 4)
+ throw new BMPException("Invalid number of bits per pixel.");
+ biCompression = compression;
+ break;
+
+ case BI_RGB:
+ case BI_BITFIELDS:
+ biCompression = compression;
+ break;
+
+ default:
+ throw new BMPException("Unknown bitmap compression type.");
+ }
+ }
+
+ public int getNumberOfPaletteEntries()
+ {
+ if (biClrUsed == 0)
+ switch (biBitCount)
+ {
+ case 1:
+ return 2;
+ case 4:
+ return 16;
+ case 8:
+ return 256;
+
+ default: // should not happen
+ return 0;
+ }
+
+ return biClrUsed;
+ }
+
+ public int getCompression()
+ {
+ return biCompression;
+ }
+
+ public Dimension getSize()
+ {
+ return new Dimension(biWidth, biHeight);
+ }
+
+ public int getWidth()
+ {
+ return biWidth;
+ }
+
+ public int getHeight()
+ {
+ return biHeight;
+ }
+
+ public void setSize(Dimension d)
+ {
+ biWidth = (int) d.getWidth();
+ biHeight = (int) d.getHeight();
+ }
}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java b/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java
index ee64f4b..47ce8cc 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF32.java
@@ -39,8 +39,6 @@ package gnu.javax.imageio.bmp;
import java.io.IOException;
import javax.imageio.stream.ImageInputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java b/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java
index 2a910cb..2b7f99b 100644
--- a/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java
+++ b/libjava/classpath/gnu/javax/imageio/bmp/DecodeRGB24.java
@@ -50,7 +50,7 @@ public class DecodeRGB24 extends BMPDecoder {
public BufferedImage decode(ImageInputStream in) throws IOException, BMPException {
skipToImage(in);
-
+
Dimension d = infoHeader.getSize();
int h = (int)d.getHeight();
int w = (int)d.getWidth();
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB1.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB1.java
new file mode 100644
index 0000000..293aba8
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB1.java
@@ -0,0 +1,128 @@
+/* EncodeRGB1.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB1
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB1(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[1];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB16.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB16.java
new file mode 100644
index 0000000..3e99128
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB16.java
@@ -0,0 +1,129 @@
+/* EncodeRGB16.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB16
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB16(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[2];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+ rgb[1] = (byte) (value >> 8 & 0xFF);
+
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB24.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB24.java
new file mode 100644
index 0000000..10c1abe
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB24.java
@@ -0,0 +1,129 @@
+/* EncodeRGB24.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB24
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB24(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[3];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+ rgb[1] = (byte) ((value >> 8) & 0xFF);
+ rgb[2] = (byte) ((value >> 16) & 0xFF);
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java
new file mode 100644
index 0000000..d653bbf
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java
@@ -0,0 +1,130 @@
+/* EncodeRGB32.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.Dimension;
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB32
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB32(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[4];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+ rgb[1] = (byte) ((value >> 8) & 0xFF);
+ rgb[2] = (byte) ((value >> 16) & 0xFF);
+ rgb[3] = (byte) ((value >> 24) & 0xFF);
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB4.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB4.java
new file mode 100644
index 0000000..f190354
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB4.java
@@ -0,0 +1,128 @@
+/* EncodeRGB4.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB4
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB4(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[1];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB8.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB8.java
new file mode 100644
index 0000000..dd7387a
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB8.java
@@ -0,0 +1,127 @@
+/* EncodeRGB8.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRGB8
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRGB8(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ byte rgb[] = new byte[1];
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+
+ rgb[0] = (byte) (value & 0xFF);
+ o.write(rgb);
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE4.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE4.java
new file mode 100644
index 0000000..3674c4d
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE4.java
@@ -0,0 +1,269 @@
+/* EncodeRLE4.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRLE4
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * RLE control codes
+ */
+ private static final byte ESCAPE = (byte)0;
+ private static final byte EOL = (byte)0; // end of line
+ private static final byte EOB = (byte)1; // end of bitmap
+ private static final byte DELTA = (byte)2; // delta
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRLE4(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ ByteBuffer buf = ByteBuffer.allocate(size);
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+ buf.put((byte) (value & 0xFF));
+
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+
+ buf.flip();
+ o.write(uncompress(infoHeader.biWidth, infoHeader.biHeight, buf));
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+
+ /**
+ * Uncompresses the image stored in the buffer.
+ *
+ * @param w - the width of the image
+ * @param h - the height of the image
+ * @param buf - the ByteBuffer containing the pixel values.
+ * @return byte array containing the uncompressed image
+ * @throws IOException if an error is encountered while reading
+ * buffer.
+ */
+ private byte[] uncompress(int w, int h, ByteBuffer buf)
+ throws IOException
+ {
+ byte[] cmd = new byte[2];
+ byte[] data = new byte[w * h >> 1];
+ int offIn = 0;
+ int x = 0, y = 0;
+
+ w += (w & 1);
+ w = w >> 1;
+
+ try
+ {
+ while (((x >> 1) + y * w) < w * h)
+ {
+ try
+ {
+ buf.get(cmd);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ if (cmd[0] == ESCAPE)
+ {
+ switch (cmd[1])
+ {
+ case EOB:
+ return data;
+ case EOL:
+ x = 0;
+ y++;
+ break;
+ case DELTA:
+ try
+ {
+ buf.get(cmd);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ int dx = cmd[0] & (0xFF);
+ int dy = cmd[1] & (0xFF);
+ x += dx;
+ y += dy;
+ break;
+
+ default:
+ int length = cmd[1] & (0xFF);
+
+ int bytesize = length;
+ bytesize += (bytesize & 1);
+ bytesize >>= 1;
+ bytesize += (bytesize & 1);
+
+ byte[] run = new byte[bytesize];
+ try
+ {
+ buf.get(run);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ if ((x & 1) == 0)
+ {
+ length += (length & 1);
+ length >>= 1;
+ System.arraycopy(run, 0, data,
+ ((x >> 1) + w * (h - y - 1)), length);
+ }
+ else
+ {
+ for (int i = 0; i < length; i++)
+ {
+ if ((i & 1) == 0)
+ data[((x + i) >> 1) + w * (h - y - 1)] |= ((run[i >> 1] & 0xF0) >> 4);
+ else
+ data[((x + i) >> 1) + w * (h - y - 1)] |= ((run[i >> 1] & 0x0F) << 4);
+ }
+ }
+ x += cmd[1] & (0xFF);
+ break;
+ }
+ }
+ else
+ {
+ int length = cmd[0] & (0xFF);
+ if ((x & 1) == 0)
+ {
+ length += (length & 1);
+ length >>= 1;
+ for (int i = 0; i < length; i++)
+ data[(h - y - 1) * w + i + (x >> 1)] = cmd[1];
+ }
+ else
+ {
+ for (int i = 0; i < length; i++)
+ {
+ if ((i & 1) == 0)
+ data[((x + i) >> 1) + w * (h - y - 1)] |= ((cmd[1] & 0xF0) >> 4);
+ else
+ data[((x + i) >> 1) + w * (h - y - 1)] |= ((cmd[1] & 0x0F) << 4);
+ }
+ }
+ x += cmd[0] & (0xFF);
+ }
+ }
+ return data;
+ }
+ catch (ArrayIndexOutOfBoundsException e)
+ {
+ throw new BMPException("Invalid RLE data.");
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE8.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE8.java
new file mode 100644
index 0000000..dbbaeb2
--- /dev/null
+++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRLE8.java
@@ -0,0 +1,234 @@
+/* EncodeRGB32.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.imageio.bmp;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+import java.io.IOException;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.stream.ImageOutputStream;
+
+public class EncodeRLE8
+ extends BMPEncoder
+{
+ protected BMPInfoHeader infoHeader;
+ protected BMPFileHeader fileHeader;
+ protected long offset;
+
+ /**
+ * RLE control codes
+ */
+ private static final byte ESCAPE = (byte)0;
+ private static final byte EOL = (byte)0; // end of line
+ private static final byte EOB = (byte)1; // end of bitmap
+ private static final byte DELTA = (byte)2; // delta
+
+ /**
+ * Constructs an instance of this class.
+ *
+ * @param fh - the file header to use.
+ * @param ih - the info header to use.
+ */
+ public EncodeRLE8(BMPFileHeader fh, BMPInfoHeader ih)
+ {
+ super();
+ fileHeader = fh;
+ infoHeader = ih;
+ offset = BMPFileHeader.SIZE + BMPInfoHeader.SIZE;
+ }
+
+ /**
+ * The image encoder.
+ *
+ * @param o - the image output stream
+ * @param streamMetadata - metadata associated with this stream, or
+ * null
+ * @param image - an IIOImage containing image data.
+ * @param param - image writing parameters, or null
+ * @exception IOException if a write error occurs
+ */
+ public void encode(ImageOutputStream o, IIOMetadata streamMetadata,
+ IIOImage image, ImageWriteParam param) throws IOException
+ {
+ int size;
+ int value;
+ int j;
+ int rowCount;
+ int rowIndex;
+ int lastRowIndex;
+ int[] bitmap;
+ size = (infoHeader.biWidth * infoHeader.biHeight) - 1;
+ rowCount = 1;
+ rowIndex = size - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ ByteBuffer buf = ByteBuffer.allocate(size);
+ try
+ {
+ bitmap = new int[infoHeader.biWidth * infoHeader.biHeight];
+ PixelGrabber pg = new PixelGrabber((BufferedImage) image.getRenderedImage(),
+ 0, 0, infoHeader.biWidth,
+ infoHeader.biHeight, bitmap, 0,
+ infoHeader.biWidth);
+ pg.grabPixels();
+
+ for (j = 0; j < size; j++)
+ {
+ value = bitmap[rowIndex];
+ buf.put((byte) (value & 0xFF));
+
+ if (rowCount == infoHeader.biWidth)
+ {
+ rowCount = 1;
+ rowIndex = lastRowIndex - infoHeader.biWidth;
+ lastRowIndex = rowIndex;
+ }
+ else
+ rowCount++;
+ rowIndex++;
+ }
+
+ buf.flip();
+ o.write(uncompress(infoHeader.biWidth, infoHeader.biHeight, buf));
+ }
+ catch (Exception wb)
+ {
+ wb.printStackTrace();
+ }
+ }
+
+
+ /**
+ * Uncompresses the image stored in the buffer.
+ *
+ * @param w - the width of the image
+ * @param h - the height of the image
+ * @param buf - the ByteBuffer containing the pixel values.
+ * @return byte array containing the uncompressed image
+ * @throws IOException if an error is encountered while reading
+ * buffer.
+ */
+ private byte[] uncompress(int w, int h, ByteBuffer buf) throws IOException
+ {
+ byte[] cmd = new byte[2];
+ byte[] data = new byte[w * h];
+ int offIn = 0;
+ int x = 0, y = 0;
+
+ try
+ {
+ while ((x + y * w) < w * h)
+ {
+ try
+ {
+ buf.get(cmd);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ if (cmd[0] == ESCAPE)
+ {
+ switch (cmd[1])
+ {
+ case EOB:
+ return data;
+ case EOL:
+ x = 0;
+ y++;
+ break;
+ case DELTA:
+ try
+ {
+ buf.get(cmd);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ int dx = cmd[0] & (0xFF);
+ int dy = cmd[1] & (0xFF);
+ x += dx;
+ y += dy;
+ break;
+
+ default:
+ int length = cmd[1] & (0xFF);
+ int copylength = length;
+
+ length += (length & 1);
+
+ byte[] run = new byte[length];
+
+ try
+ {
+ buf.get(run);
+ }
+ catch (BufferUnderflowException e)
+ {
+ throw new IOException("Error reading compressed data.");
+ }
+
+ System.arraycopy(run, 0, data, (x + w * (h - y - 1)),
+ copylength);
+ x += copylength;
+ break;
+ }
+ }
+ else
+ {
+ int length = cmd[0] & (0xFF);
+ for (int i = 0; i < length; i++)
+ data[(h - y - 1) * w + x++] = cmd[1];
+ }
+ }
+ return data;
+ }
+ catch (ArrayIndexOutOfBoundsException e)
+ {
+ throw new BMPException("Invalid RLE data.");
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/CupsIppOperation.java b/libjava/classpath/gnu/javax/print/CupsIppOperation.java
new file mode 100644
index 0000000..e915169
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/CupsIppOperation.java
@@ -0,0 +1,99 @@
+/* CupsIppOperation.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+
+/**
+ * Operations as provided by CUPS up to version 1.1
+ * <p>
+ * See: CUPS Implementation of IPP, chapter 3.2<br>
+ * http://www.cups.org/doc-1.1/ipp.html
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CupsIppOperation
+{
+
+ /** Get the default destination - since CUPS 1.0 */
+ public static final int CUPS_GET_DEFAULT = 0x4001;
+
+ /** Get all of the available printers - since CUPS 1.0 */
+ public static final int CUPS_GET_PRINTERS = 0x4002;
+
+ /** Add or modify a printer - since CUPS 1.0 */
+ public static final int CUPS_ADD_MODIFY_PRINTER = 0x4003;
+
+ /** Delete a printer - since CUPS 1.0 */
+ public static final int CUPS_DELETE_PRINTER = 0x4004;
+
+ /** Get all of the available printer classes - since CUPS 1.0 */
+ public static final int CUPS_GET_CLASSES = 0x4005;
+
+ /** Add or modify a printer class - since CUPS 1.0 */
+ public static final int CUPS_ADD_MODIFY_CLASS = 0x4006;
+
+ /** Delete a printer class - since CUPS 1.0 */
+ public static final int CUPS_DELETE_CLASS = 0x4007;
+
+ /** Accept jobs on a printer or printer class - since CUPS 1.0 */
+ public static final int CUPS_ACCEPT_JOBS = 0x4008;
+
+ /** Reject jobs on a printer or printer class - since CUPS 1.0 */
+ public static final int CUPS_REJECT_JOBS = 0x4009;
+
+ /** Set the default destination - since CUPS 1.0 */
+ public static final int CUPS_SET_DEFAULT = 0x400A;
+
+ /** Get all of the available PPDs - since CUPS 1.1 */
+ public static final int CUPS_GET_DEVICES = 0x400B;
+
+ /** Get all of the available PPDs - since CUPS 1.1 */
+ public static final int CUPS_GET_PPDS = 0x400C;
+
+ /** Move a job to a different printer - since CUPS 1.1 */
+ public static final int CUPS_MOVE_JOB = 0x400D;
+
+
+ private CupsIppOperation()
+ {
+ // not to be instantiated
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/CupsMediaMapping.java b/libjava/classpath/gnu/javax/print/CupsMediaMapping.java
new file mode 100644
index 0000000..eaf2d5e
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/CupsMediaMapping.java
@@ -0,0 +1,176 @@
+/* CupsMediaMapping.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.print.attribute.standard.MediaSizeName;
+
+/**
+ * Provides the currently known mappings of the media attribute
+ * values of the CUPS printing system to the IPP standard values.
+ * <p>
+ * The mapping is used to build up print service specific mappings
+ * for use of media attribute translation between Java JPS API and
+ * CUPS.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class CupsMediaMapping
+{
+ // the mapping map
+ private static final HashMap ippByCups = new HashMap();
+
+ /**
+ * Initialize currently known mappings.
+ */
+ static
+ {
+ ippByCups.put("Postcard", MediaSizeName.JAPANESE_POSTCARD);
+ ippByCups.put("Statement", MediaSizeName.INVOICE);
+
+ ippByCups.put("Letter", MediaSizeName.NA_LETTER);
+ ippByCups.put("Executive", MediaSizeName.EXECUTIVE);
+ ippByCups.put("Legal", MediaSizeName.NA_LEGAL);
+
+ ippByCups.put("A0", MediaSizeName.ISO_A0);
+ ippByCups.put("A1", MediaSizeName.ISO_A1);
+ ippByCups.put("A2", MediaSizeName.ISO_A2);
+ ippByCups.put("A3", MediaSizeName.ISO_A3);
+ ippByCups.put("A4", MediaSizeName.ISO_A4);
+ ippByCups.put("A5", MediaSizeName.ISO_A5);
+ ippByCups.put("A6", MediaSizeName.ISO_A6);
+ ippByCups.put("A7", MediaSizeName.ISO_A7);
+ ippByCups.put("A8", MediaSizeName.ISO_A8);
+ ippByCups.put("A9", MediaSizeName.ISO_A9);
+ ippByCups.put("A10", MediaSizeName.ISO_A10);
+
+ ippByCups.put("B0", MediaSizeName.JIS_B0);
+ ippByCups.put("B1", MediaSizeName.JIS_B1);
+ ippByCups.put("B2", MediaSizeName.JIS_B2);
+ ippByCups.put("B3", MediaSizeName.JIS_B3);
+ ippByCups.put("B4", MediaSizeName.JIS_B4);
+ ippByCups.put("B5", MediaSizeName.JIS_B5);
+ ippByCups.put("B6", MediaSizeName.JIS_B6);
+ ippByCups.put("B7", MediaSizeName.JIS_B7);
+ ippByCups.put("B8", MediaSizeName.JIS_B8);
+ ippByCups.put("B9", MediaSizeName.JIS_B9);
+ ippByCups.put("B10", MediaSizeName.JIS_B10);
+
+ ippByCups.put("ISOB0", MediaSizeName.ISO_B0);
+ ippByCups.put("ISOB1", MediaSizeName.ISO_B1);
+ ippByCups.put("ISOB2", MediaSizeName.ISO_B2);
+ ippByCups.put("ISOB3", MediaSizeName.ISO_B3);
+ ippByCups.put("ISOB4", MediaSizeName.ISO_B4);
+ ippByCups.put("ISOB5", MediaSizeName.ISO_B5);
+ ippByCups.put("ISOB6", MediaSizeName.ISO_B6);
+ ippByCups.put("ISOB7", MediaSizeName.ISO_B7);
+ ippByCups.put("ISOB8", MediaSizeName.ISO_B8);
+ ippByCups.put("ISOB9", MediaSizeName.ISO_B9);
+ ippByCups.put("ISOB10", MediaSizeName.ISO_B10);
+ ippByCups.put("EnvISOB0", MediaSizeName.ISO_B0);
+ ippByCups.put("EnvISOB1", MediaSizeName.ISO_B1);
+ ippByCups.put("EnvISOB2", MediaSizeName.ISO_B2);
+ ippByCups.put("EnvISOB3", MediaSizeName.ISO_B3);
+ ippByCups.put("EnvISOB4", MediaSizeName.ISO_B4);
+ ippByCups.put("EnvISOB5", MediaSizeName.ISO_B5);
+ ippByCups.put("EnvISOB6", MediaSizeName.ISO_B6);
+ ippByCups.put("EnvISOB7", MediaSizeName.ISO_B7);
+ ippByCups.put("EnvISOB8", MediaSizeName.ISO_B8);
+ ippByCups.put("EnvISOB9", MediaSizeName.ISO_B9);
+ ippByCups.put("EnvISOB10", MediaSizeName.ISO_B10);
+
+ ippByCups.put("C0", MediaSizeName.ISO_C0);
+ ippByCups.put("C1", MediaSizeName.ISO_C1);
+ ippByCups.put("C2", MediaSizeName.ISO_C2);
+ ippByCups.put("C3", MediaSizeName.ISO_C3);
+ ippByCups.put("C4", MediaSizeName.ISO_C4);
+ ippByCups.put("C5", MediaSizeName.ISO_C5);
+ ippByCups.put("C6", MediaSizeName.ISO_C6);
+
+ ippByCups.put("EnvPersonal", MediaSizeName.PERSONAL_ENVELOPE);
+ ippByCups.put("EnvMonarch", MediaSizeName.MONARCH_ENVELOPE);
+ ippByCups.put("Monarch", MediaSizeName.MONARCH_ENVELOPE);
+ ippByCups.put("Env9", MediaSizeName.NA_NUMBER_9_ENVELOPE);
+ ippByCups.put("Env10", MediaSizeName.NA_NUMBER_10_ENVELOPE);
+ ippByCups.put("Env11", MediaSizeName.NA_NUMBER_11_ENVELOPE);
+ ippByCups.put("Env12", MediaSizeName.NA_NUMBER_12_ENVELOPE);
+ ippByCups.put("Env14", MediaSizeName.NA_NUMBER_14_ENVELOPE);
+ ippByCups.put("c8x10", MediaSizeName.NA_8X10);
+
+ ippByCups.put("EnvDL", MediaSizeName.ISO_DESIGNATED_LONG);
+ ippByCups.put("DL", MediaSizeName.ISO_DESIGNATED_LONG);
+ ippByCups.put("EnvC0", MediaSizeName.ISO_C0);
+ ippByCups.put("EnvC1", MediaSizeName.ISO_C1);
+ ippByCups.put("EnvC2", MediaSizeName.ISO_C2);
+ ippByCups.put("EnvC3", MediaSizeName.ISO_C3);
+ ippByCups.put("EnvC4", MediaSizeName.ISO_C4);
+ ippByCups.put("EnvC5", MediaSizeName.ISO_C5);
+ ippByCups.put("EnvC6", MediaSizeName.ISO_C6);
+ }
+
+ /**
+ * Returns the IPP media name of the given cups name.
+ *
+ * @param cupsName the name in cups
+ * @return The IPP name if a mapping is known, <code>null</code> otherwise.
+ */
+ public static final String getIppName(String cupsName)
+ {
+ return (String) ippByCups.get(cupsName);
+ }
+
+ /**
+ * Returns the mapping map for iteration.
+ *
+ * @return The mapping map as unmodifiable map.
+ */
+ public static final Map getMappingMap()
+ {
+ return Collections.unmodifiableMap(ippByCups);
+ }
+
+ private CupsMediaMapping()
+ {
+ // not to be instantiated
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/CupsPrintService.java b/libjava/classpath/gnu/javax/print/CupsPrintService.java
new file mode 100644
index 0000000..4f77523
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/CupsPrintService.java
@@ -0,0 +1,104 @@
+/* CupsPrintService.java -- Cups specific implementation subclass
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import gnu.javax.print.ipp.IppException;
+import gnu.javax.print.ipp.IppMultiDocPrintService;
+import gnu.javax.print.ipp.IppResponse;
+
+import java.net.URI;
+
+import javax.print.DocFlavor;
+import javax.print.attribute.AttributeSet;
+
+/**
+ * Implementation of the PrintService/MultiDocPrintService
+ * interface for Cups printers (supports Cups 1.1 and up)
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CupsPrintService extends IppMultiDocPrintService
+{
+
+ /**
+ * Creates a <code>CupsPrintService</code> object.
+ *
+ * @param uri the URI of the IPP printer.
+ * @param username the user of this print service.
+ * @param password the password of the user.
+ *
+ * @throws IppException if an error during connection occurs.
+ */
+ public CupsPrintService(URI uri, String username, String password)
+ throws IppException
+ {
+ super(uri, username, password);
+ }
+
+ /**
+ * Overridden for CUPS specific handling of the media attribute.
+ */
+ protected Object handleSupportedAttributeValuesResponse(IppResponse response,
+ Class category)
+ {
+ // TODO Implement different behaviour of cups here - actually the Media
+ // printing attribute stuff. For now just use IPP reference implementation.
+ return super.handleSupportedAttributeValuesResponse(response, category);
+ }
+
+ /**
+ * Overridden for CUPS specific handling of the media attribute.
+ */
+ public Object getDefaultAttributeValue(Class category)
+ {
+ // TODO Implement media attribute behaviour for cups here
+ //if (category.equals(Media.class)
+
+ return super.getDefaultAttributeValue(category);
+ }
+
+ /**
+ * Overridden as CUPS does not implement Validate-Job correctly.
+ */
+ public AttributeSet getUnsupportedAttributes(DocFlavor flavor, AttributeSet attributes)
+ {
+ // TODO Implement a heuristic unsupported attribute identification.
+ return super.getUnsupportedAttributes(flavor, attributes);
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/CupsPrintServiceLookup.java b/libjava/classpath/gnu/javax/print/CupsPrintServiceLookup.java
new file mode 100644
index 0000000..1aa8321
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/CupsPrintServiceLookup.java
@@ -0,0 +1,260 @@
+/* CupsPrintServiceLookup.java -- Implementation based on CUPS
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import gnu.javax.print.ipp.IppException;
+
+import java.util.ArrayList;
+
+import javax.print.DocFlavor;
+import javax.print.MultiDocPrintService;
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+import javax.print.attribute.Attribute;
+import javax.print.attribute.AttributeSet;
+
+/**
+ * The platform default implementation based on CUPS.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class CupsPrintServiceLookup extends PrintServiceLookup
+{
+ private CupsServer server;
+
+ /**
+ * Default constructor checking security access.
+ */
+ public CupsPrintServiceLookup()
+ {
+ // security
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPrintJobAccess();
+
+ // use the localhost cups server
+ server = new CupsServer(null, null);
+ }
+
+ /**
+ * This is the printer marked as default in CUPS.
+ *
+ * @return The default lookup service or
+ * <code>null</code> if there is no default.
+ */
+ public PrintService getDefaultPrintService()
+ {
+ try
+ {
+ return server.getDefaultPrinter();
+ }
+ catch (IppException e)
+ {
+ // if discovery fails treat as if there is none
+ return null;
+ }
+ }
+
+ /**
+ * All printers and printer classes of the CUPS server are checked.
+ * If flavors or attributes are null the constraint is not used.
+ *
+ * @param flavors the document flavors which have to be supported.
+ * @param attributes the attributes which have to be supported.
+ *
+ * @return The multidoc print services of the implementing lookup service
+ * for the given parameters, or an array of length 0 if none is available.
+ */
+ public MultiDocPrintService[] getMultiDocPrintServices(DocFlavor[] flavors,
+ AttributeSet attributes)
+ {
+ ArrayList result = new ArrayList();
+ PrintService[] services = getPrintServices();
+
+ for (int i=0; i < services.length; i++)
+ {
+ if (checkMultiDocPrintService(flavors, attributes, services[i]))
+ result.add(services[i]);
+ }
+
+ return (MultiDocPrintService[]) result.toArray(
+ new MultiDocPrintService[result.size()]);
+ }
+
+ /**
+ * These are all printers and printer classes of the CUPS server.
+ *
+ * @return All known print services regardless of supported features,
+ * or an array of length 0 if none is available.
+ */
+ public PrintService[] getPrintServices()
+ {
+ ArrayList result = new ArrayList();
+
+ try
+ {
+ result.addAll(server.getAllPrinters());
+ result.addAll(server.getAllClasses());
+ }
+ catch (IppException e)
+ {
+ // ignore as this method cannot throw exceptions
+ // if print service discovery fails - bad luck
+ }
+ return (PrintService[]) result.toArray(new PrintService[result.size()]);
+ }
+
+
+ /**
+ * All printers and printer classes of the CUPS server are checked.
+ * If flavor or attributes are null the constraint is not used.
+ *
+ * @param flavor the document flavor which has to be supported.
+ * @param attributes the attributes which have to be supported.
+ *
+ * @return The print services of the implementing lookup service
+ * for the given parameters, or an array of length 0 if none is available.
+ */
+ public PrintService[] getPrintServices(DocFlavor flavor,
+ AttributeSet attributes)
+ {
+ ArrayList result = new ArrayList();
+ PrintService[] services = getPrintServices();
+
+ for (int i=0; i < services.length; i++)
+ {
+ if (checkPrintService(flavor, attributes, services[i]))
+ result.add(services[i]);
+ }
+
+ return (PrintService[]) result.toArray(new PrintService[result.size()]);
+ }
+
+ /**
+ * Checks the given print service - own method so it can be used also
+ * to check application registered print services from PrintServiceLookup.
+ *
+ * @param flavor the document flavor which has to be supported.
+ * @param attributes the attributes which have to be supported.
+ * @param service the service to check
+ *
+ * @return <code>true</code> if all constraints match, <code>false</code>
+ * otherwise.
+ */
+ public boolean checkPrintService(DocFlavor flavor, AttributeSet attributes,
+ PrintService service)
+ {
+ boolean allAttributesSupported = true;
+ if (flavor == null || service.isDocFlavorSupported(flavor))
+ {
+ if (attributes == null || attributes.size() == 0)
+ return allAttributesSupported;
+
+ Attribute[] atts = attributes.toArray();
+ for (int i = 0; i < atts.length; i++)
+ {
+ if (! service.isAttributeCategorySupported(atts[i].getCategory()))
+ {
+ allAttributesSupported = false;
+ break;
+ }
+ }
+ return allAttributesSupported;
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks the given print service - own method so it can be used also
+ * to check application registered print services from PrintServiceLookup.
+ *
+ * @param flavors the document flavors which have to be supported.
+ * @param attributes the attributes which have to be supported.
+ * @param service the service to check
+ *
+ * @return <code>true</code> if all constraints match, <code>false</code>
+ * otherwise.
+ */
+ public boolean checkMultiDocPrintService(DocFlavor[] flavors,
+ AttributeSet attributes, PrintService service)
+ {
+ if (service instanceof MultiDocPrintService)
+ {
+ boolean allFlavorsSupported = true;
+ boolean allAttributesSupported = true;
+
+ if (flavors == null || flavors.length != 0)
+ allFlavorsSupported = true;
+ else
+ {
+ for (int k = 0; k < flavors.length; k++)
+ {
+ if (! service.isDocFlavorSupported(flavors[k]))
+ {
+ allFlavorsSupported = false;
+ break;
+ }
+ }
+ }
+
+ if (attributes == null || attributes.size() == 0)
+ allAttributesSupported = true;
+ else
+ {
+ Attribute[] atts = attributes.toArray();
+ for (int j = 0; j < atts.length; j++)
+ {
+ if (! service.isAttributeCategorySupported(
+ atts[j].getCategory()))
+ {
+ allAttributesSupported = false;
+ break;
+ }
+ }
+ }
+
+ if (allAttributesSupported && allFlavorsSupported)
+ return true;
+ }
+
+ return false;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/CupsServer.java b/libjava/classpath/gnu/javax/print/CupsServer.java
new file mode 100644
index 0000000..6d9601f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/CupsServer.java
@@ -0,0 +1,269 @@
+/* CupsServer.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import gnu.javax.print.ipp.IppException;
+import gnu.javax.print.ipp.IppPrintService;
+import gnu.javax.print.ipp.IppRequest;
+import gnu.javax.print.ipp.IppResponse;
+import gnu.javax.print.ipp.attribute.RequestedAttributes;
+import gnu.javax.print.ipp.attribute.supported.PrinterUriSupported;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <code>CupsServer</code> represents a host running a cups
+ * compatible server. It mainly consists of its URI and optional
+ * user and password combination if access is restricted.
+ * <p>
+ * It provides methods for retrival of valid CUPS printer uris
+ * that are used to construct IppPrintService objects.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class CupsServer
+{
+ /**
+ * The URI of the CUPS server.
+ * This is something like: http://localhost:631
+ */
+ private transient URI uri;
+
+ /**
+ * The optional username.
+ */
+ private transient String username;
+
+ /**
+ * The optional password for the user.
+ */
+ private transient String password;
+
+ /**
+ * Creates a <code>CupsServer</code> object which
+ * tries to connect to the cups server on localhost.
+ *
+ * @param username the username
+ * @param password the password for the username.
+ */
+ public CupsServer(String username, String password)
+ {
+ try
+ {
+ this.uri = new URI("http://localhost:631");
+ }
+ catch (URISyntaxException e)
+ {
+ // does not happen
+ }
+
+ this.username = username;
+ this.password = password;
+ }
+
+ /**
+ * Creates a <code>CupsServer</code> object which
+ * tries to connect to a running cups server on the
+ * given URI.
+ *
+ * @param uri the URI of the server.
+ * @param username the username
+ * @param password the password for the username.
+ */
+ public CupsServer(URI uri, String username, String password)
+ {
+ this.uri = uri;
+ this.username = username;
+ this.password = password;
+ }
+
+ /**
+ * Requests the default printer from this CUPS server.
+ * This is always returned as IppPrintService.
+ *
+ * @return The default printer.
+ * @throws IppException if problems during request/response processing occur.
+ */
+ public IppPrintService getDefaultPrinter() throws IppException
+ {
+ IppResponse response = null;
+
+ try
+ {
+ IppRequest request = new IppRequest(uri, username, password);
+ request.setOperationID((short)CupsIppOperation.CUPS_GET_DEFAULT);
+ request.setOperationAttributeDefaults();
+
+ RequestedAttributes requestedAttrs
+ = new RequestedAttributes("printer-uri-supported");
+ request.addOperationAttribute(requestedAttrs);
+
+ response = request.send();
+ }
+ catch (IOException e)
+ {
+ throw new IppException("IOException in IPP request/response.", e);
+ }
+
+ Map printerAttributes = (Map) response.getPrinterAttributes().get(0);
+ Set uris = (Set) printerAttributes.get(PrinterUriSupported.class);
+ PrinterUriSupported uri = (PrinterUriSupported) uris.toArray()[0];
+
+ IppPrintService service
+ = new CupsPrintService(uri.getURI(), username, password);
+
+ return service;
+ }
+
+ /**
+ * Requests all printers from this CUPS server.
+ *
+ * @return The list of available printers.
+ * @throws IppException if problems during request/response processing occur.
+ */
+ public List getAllPrinters() throws IppException
+ {
+ IppResponse response = null;
+
+ try
+ {
+ IppRequest request = new IppRequest(uri, username, password);
+ request.setOperationID((short)CupsIppOperation.CUPS_GET_PRINTERS);
+ request.setOperationAttributeDefaults();
+
+ RequestedAttributes requestedAttrs
+ = new RequestedAttributes("printer-uri-supported");
+ request.addOperationAttribute(requestedAttrs);
+
+ response = request.send();
+ }
+ catch (IOException e)
+ {
+ throw new IppException("IOException in IPP request/response.", e);
+ }
+
+ List prAttr = response.getPrinterAttributes();
+ List services = new ArrayList();
+
+ for (int i=0; i < prAttr.size(); i++)
+ {
+ Map printerAttributes = (Map) prAttr.get(i);
+ Set uris = (Set) printerAttributes.get(PrinterUriSupported.class);
+ PrinterUriSupported uri = (PrinterUriSupported) uris.toArray()[0];
+
+ try
+ {
+ CupsPrintService cups = new CupsPrintService(uri.getURI(),
+ username, password);
+ services.add(cups);
+ }
+ catch (IppException e)
+ {
+ // do nothing, we only catch the IppException which could be
+ // thrown during instantiation as single printers may be discovered
+ // correctly but not usable due to other security restrictions
+ }
+ }
+
+ return services;
+ }
+
+ /**
+ * Requests all classes from this CUPS server. Classes in cups are
+ * collections of printers. This means jobs directed to a class
+ * are forwarded to the first available printer of the collection.
+ *
+ * @return The list of available classes.
+ * @throws IppException if problems during request/response processing occur.
+ */
+ public List getAllClasses() throws IppException
+ {
+ IppResponse response = null;
+
+ try
+ {
+ IppRequest request = new IppRequest(uri, username, password);
+ request.setOperationID((short)CupsIppOperation.CUPS_GET_CLASSES);
+ request.setOperationAttributeDefaults();
+
+ RequestedAttributes requestedAttrs
+ = new RequestedAttributes("printer-uri-supported");
+ request.addOperationAttribute(requestedAttrs);
+
+ response = request.send();
+ }
+ catch (IOException e)
+ {
+ throw new IppException("IOException in IPP request/response.", e);
+ }
+
+ List prAttr = response.getPrinterAttributes();
+ List services = new ArrayList();
+
+ for (int i=0; i < prAttr.size(); i++)
+ {
+ Map printerAttributes = (Map) prAttr.get(i);
+ Set uris = (Set) printerAttributes.get(PrinterUriSupported.class);
+ PrinterUriSupported uri = (PrinterUriSupported) uris.toArray()[0];
+
+ try
+ {
+ CupsPrintService cups = new CupsPrintService(uri.getURI(),
+ username, password);
+ services.add(cups);
+ }
+ catch (IppException e)
+ {
+ // do nothing, we only catch the IppException which could be
+ // thrown during instantiation as single printers may be discovered
+ // correctly but not usable due to other security restrictions
+ }
+ }
+
+ return services;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/PrintAttributeException.java b/libjava/classpath/gnu/javax/print/PrintAttributeException.java
new file mode 100644
index 0000000..345193d
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/PrintAttributeException.java
@@ -0,0 +1,148 @@
+/* PrintAttributeException.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import javax.print.AttributeException;
+import javax.print.PrintException;
+import javax.print.attribute.Attribute;
+
+/**
+ * A <code>PrintException</code> further refining the exception
+ * cause by providing an implementation of the print exception
+ * interface <code>AttributeException</code>.
+ *
+ * @see javax.print.PrintException
+ * @see javax.print.AttributeException
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrintAttributeException extends PrintException
+ implements AttributeException
+{
+ private Class[] categories;
+ private Attribute[] values;
+
+ /**
+ * Constructs a <code>PrintAttributeException</code>
+ * with the given unsupported attributes and/or values.
+ *
+ * @param unsupportedAttributes the unsupported categories,
+ * may be <code>null</code>.
+ * @param unsupportedValues the unsupported attribute values,
+ * may be <code>null</code>.
+ */
+ public PrintAttributeException(Class[] unsupportedAttributes,
+ Attribute[] unsupportedValues)
+ {
+ super();
+ categories = unsupportedAttributes;
+ values = unsupportedValues;
+ }
+
+ /**
+ * Constructs a <code>PrintAttributeException</code>
+ * with the given unsupported attributes and/or values.
+ *
+ * @param e chained exception
+ * @param unsupportedAttributes the unsupported categories,
+ * may be <code>null</code>.
+ * @param unsupportedValues the unsupported attribute values,
+ * may be <code>null</code>.
+ */
+ public PrintAttributeException(Exception e,
+ Class[] unsupportedAttributes, Attribute[] unsupportedValues)
+ {
+ super(e);
+ categories = unsupportedAttributes;
+ values = unsupportedValues;
+ }
+
+ /**
+ * Constructs a <code>PrintAttributeException</code>
+ * with the given unsupported attributes and/or values.
+ *
+ * @param s detailed message
+ * @param unsupportedAttributes the unsupported categories,
+ * may be <code>null</code>.
+ * @param unsupportedValues the unsupported attribute values,
+ * may be <code>null</code>.
+ */
+ public PrintAttributeException(String s,
+ Class[] unsupportedAttributes, Attribute[] unsupportedValues)
+ {
+ super(s);
+ categories = unsupportedAttributes;
+ values = unsupportedValues;
+ }
+
+ /**
+ * Constructs a <code>PrintAttributeException</code>
+ * with the given unsupported attributes and/or values.
+ *
+ * @param s detailed message
+ * @param e chained exception
+ * @param unsupportedAttributes the unsupported categories,
+ * may be <code>null</code>.
+ * @param unsupportedValues the unsupported attribute values,
+ * may be <code>null</code>.
+ */
+ public PrintAttributeException(String s, Exception e,
+ Class[] unsupportedAttributes, Attribute[] unsupportedValues)
+ {
+ super(s, e);
+ categories = unsupportedAttributes;
+ values = unsupportedValues;
+ }
+
+ /**
+ * @see AttributeException#getUnsupportedAttributes()
+ */
+ public Class[] getUnsupportedAttributes()
+ {
+ return categories;
+ }
+
+ /**
+ * @see AttributeException#getUnsupportedValues()
+ */
+ public Attribute[] getUnsupportedValues()
+ {
+ return values;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/PrintFlavorException.java b/libjava/classpath/gnu/javax/print/PrintFlavorException.java
new file mode 100644
index 0000000..1885e98
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/PrintFlavorException.java
@@ -0,0 +1,120 @@
+/* PrintFlavorException.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import javax.print.DocFlavor;
+import javax.print.FlavorException;
+import javax.print.PrintException;
+
+/**
+ * A <code>PrintException</code> further refining the exception
+ * cause by providing an implementation of the print exception
+ * interface <code>FlavorException</code>.
+ *
+ * @see javax.print.PrintException
+ * @see javax.print.FlavorException
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class PrintFlavorException extends PrintException
+ implements FlavorException
+{
+ private DocFlavor[] flavors;
+
+ /**
+ * Constructs a <code>PrintFlavorException</code>
+ * with the given unsupported doc flavor array
+ *
+ * @param unsupportedFlavors the unsupported document flavors.
+ */
+ public PrintFlavorException(DocFlavor[] unsupportedFlavors)
+ {
+ super();
+ flavors = unsupportedFlavors;
+ }
+
+ /**
+ * Constructs a <code>PrintFlavorException</code>
+ * with the given unsupported doc flavor array
+ *
+ * @param e chained exception
+ * @param unsupportedFlavors the unsupported document flavors.
+ */
+ public PrintFlavorException(Exception e, DocFlavor[] unsupportedFlavors)
+ {
+ super(e);
+ flavors = unsupportedFlavors;
+ }
+
+ /**
+ * Constructs a <code>PrintFlavorException</code>
+ * with the given unsupported doc flavor array
+ *
+ * @param s detailed message
+ * @param unsupportedFlavors the unsupported document flavors.
+ */
+ public PrintFlavorException(String s, DocFlavor[] unsupportedFlavors)
+ {
+ super(s);
+ flavors = unsupportedFlavors;
+ }
+
+ /**
+ * Constructs a <code>PrintFlavorException</code>
+ * with the given unsupported doc flavor array
+ *
+ * @param s detailed message
+ * @param e chained exception
+ * @param unsupportedFlavors the unsupported document flavors.
+ */
+ public PrintFlavorException(String s, Exception e,
+ DocFlavor[] unsupportedFlavors)
+ {
+ super(s, e);
+ flavors = unsupportedFlavors;
+ }
+
+ /**
+ * @see FlavorException#getUnsupportedFlavors()
+ */
+ public DocFlavor[] getUnsupportedFlavors()
+ {
+ return flavors;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/PrintUriException.java b/libjava/classpath/gnu/javax/print/PrintUriException.java
new file mode 100644
index 0000000..d031000
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/PrintUriException.java
@@ -0,0 +1,140 @@
+/* PrintUriException.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print;
+
+import java.net.URI;
+
+import javax.print.PrintException;
+import javax.print.URIException;
+
+/**
+ * A <code>PrintException</code> further refining the exception
+ * cause by providing an implementation of the print exception
+ * interface <code>URIException</code>.
+ *
+ * @see javax.print.PrintException
+ * @see javax.print.URIException
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrintUriException extends PrintException
+ implements URIException
+{
+ private int reason;
+ private URI uri;
+
+ /**
+ * Constructs a <code>PrintUriException</code> with the given reason
+ * and unsupported URI instance.
+ *
+ * @param reason the reason for the exception.
+ * @param unsupportedUri the URI which is unsupported.
+ *
+ * @see URIException
+ */
+ public PrintUriException(int reason, URI unsupportedUri)
+ {
+ super();
+ this.reason = reason;
+ uri = unsupportedUri;
+ }
+
+ /**
+ * Constructs a <code>PrintUriException</code> with the given reason
+ * and unsupported URI instance.
+ *
+ * @param e chained exception
+ * @param reason the reason for the exception.
+ * @param unsupportedUri the URI which is unsupported.
+ */
+ public PrintUriException(Exception e, int reason, URI unsupportedUri)
+ {
+ super(e);
+ this.reason = reason;
+ uri = unsupportedUri;
+ }
+
+ /**
+ * Constructs a <code>PrintUriException</code> with the given reason
+ * and unsupported URI instance.
+ *
+ * @param s detailed message
+ * @param reason the reason for the exception.
+ * @param unsupportedUri the URI which is unsupported.
+ */
+ public PrintUriException(String s, int reason, URI unsupportedUri)
+ {
+ super(s);
+ this.reason = reason;
+ uri = unsupportedUri;
+ }
+
+ /**
+ * Constructs a <code>PrintUriException</code> with the given reason
+ * and unsupported URI instance.
+ *
+ * @param s detailed message
+ * @param e chained exception
+ * @param reason the reason for the exception.
+ * @param unsupportedUri the URI which is unsupported.
+ */
+ public PrintUriException(String s, Exception e,
+ int reason, URI unsupportedUri)
+ {
+ super(s, e);
+ this.reason = reason;
+ uri = unsupportedUri;
+ }
+
+ /**
+ * @see URIException#getReason()
+ */
+ public int getReason()
+ {
+ return reason;
+ }
+
+ /**
+ * @see URIException#getUnsupportedURI()
+ */
+ public URI getUnsupportedURI()
+ {
+ return uri;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/PrinterDialog.java b/libjava/classpath/gnu/javax/print/PrinterDialog.java
new file mode 100644
index 0000000..d7598be
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/PrinterDialog.java
@@ -0,0 +1,1722 @@
+/* PrinterDialog.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.HeadlessException;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.util.ArrayList;
+import java.util.ResourceBundle;
+
+import javax.print.DocFlavor;
+import javax.print.PrintService;
+import javax.print.attribute.Attribute;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Chromaticity;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.Destination;
+import javax.print.attribute.standard.JobName;
+import javax.print.attribute.standard.JobPriority;
+import javax.print.attribute.standard.JobSheets;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.print.attribute.standard.OrientationRequested;
+import javax.print.attribute.standard.PageRanges;
+import javax.print.attribute.standard.PrintQuality;
+import javax.print.attribute.standard.PrinterInfo;
+import javax.print.attribute.standard.PrinterIsAcceptingJobs;
+import javax.print.attribute.standard.PrinterMakeAndModel;
+import javax.print.attribute.standard.PrinterState;
+import javax.print.attribute.standard.RequestingUserName;
+import javax.print.attribute.standard.SheetCollate;
+import javax.print.attribute.standard.Sides;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JSpinner;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * Implementation of the PrinterDialog used by
+ * {@link javax.print.ServiceUI} for visual selection
+ * of print services and its attributes.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterDialog extends JDialog implements ActionListener
+{
+
+ /**
+ * The General Panel used in the printing dialog.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class GeneralPanel extends JPanel
+ {
+ /**
+ * Handles the copies attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class CopiesAndSorted extends JPanel
+ implements ChangeListener, ActionListener
+ {
+ private JCheckBox sort;
+ private JSpinner copies;
+ private JLabel copies_lb;
+ private SpinnerNumberModel copiesModel;
+
+ CopiesAndSorted()
+ {
+ copies_lb = new JLabel(getLocalizedString("lb.copies"));
+ sort = new JCheckBox(getLocalizedString("cb.sort"));
+ sort.addActionListener(this);
+
+ copiesModel = new SpinnerNumberModel(1, 1, 9999, 1);
+ copies = new JSpinner(copiesModel);
+ copies.addChangeListener(this);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.insets = new Insets(5, 5, 5, 5);
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.copies")));
+
+ c.anchor = GridBagConstraints.WEST;
+
+ c.gridx = 0;
+ c.gridy = 0;
+ add(copies_lb, c);
+
+ c.gridx = 1;
+ c.gridy = 0;
+ add(copies, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(sort, c);
+ }
+
+ // copies jspinner state
+ public void stateChanged(ChangeEvent event)
+ {
+ int value = ((Integer) copies.getValue()).intValue();
+ atts.add(new Copies(value));
+
+ if (value > 1 && categorySupported(SheetCollate.class))
+ sort.setEnabled(true);
+ else
+ sort.setEnabled(false);
+ }
+
+ // sorted checkbox state
+ public void actionPerformed(ActionEvent event)
+ {
+ if (sort.isSelected())
+ atts.add(SheetCollate.COLLATED);
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(Copies.class))
+ {
+ copies.setEnabled(true);
+ copies_lb.setEnabled(true);
+
+ Copies copies = (Copies) attribute(Copies.class);
+ if (copies != null)
+ copiesModel.setValue(new Integer(copies.getValue()));
+
+ if (((Integer)copiesModel.getValue()).intValue() > 1
+ && categorySupported(SheetCollate.class))
+ {
+ sort.setEnabled(true);
+ Attribute collate = attribute(SheetCollate.class);
+ if (collate != null && collate.equals(SheetCollate.COLLATED))
+ sort.setSelected(true);
+ }
+ else
+ sort.setEnabled(false);
+ }
+ else
+ {
+ copies.setEnabled(false);
+ copies_lb.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Handles the print ranges attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class PrintRange extends JPanel
+ implements ActionListener, FocusListener
+ {
+ private JLabel to;
+ private JRadioButton all_rb, pages_rb;
+ private JTextField from_tf, to_tf;
+
+ PrintRange()
+ {
+ to = new JLabel(getLocalizedString("lb.to"));
+ to.setEnabled(false);
+
+ all_rb = new JRadioButton(getLocalizedString("rbt.all"));
+ all_rb.setSelected(true);
+ all_rb.setActionCommand("ALL");
+ all_rb.addActionListener(this);
+ pages_rb = new JRadioButton(getLocalizedString("rbt.pages"));
+ pages_rb.setActionCommand("PAGES");
+ pages_rb.setEnabled(false);
+ pages_rb.addActionListener(this);
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(all_rb);
+ group.add(pages_rb);
+
+ from_tf = new JTextField("1", 4);
+ from_tf.setEnabled(false);
+ from_tf.addFocusListener(this);
+ to_tf = new JTextField("1", 4);
+ to_tf.setEnabled(false);
+ to_tf.addFocusListener(this);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.printrange")));
+
+ c.insets = new Insets(15, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(all_rb, c);
+
+ c.insets = new Insets(5, 5, 15, 5);
+ c.gridx = 0;
+ c.gridy = 1;
+ add(pages_rb, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ add(from_tf, c);
+
+ c.gridx = 2;
+ c.gridy = 1;
+ add(to, c);
+
+ c.insets = new Insets(5, 5, 15, 15);
+ c.gridx = 3;
+ c.gridy = 1;
+ add(to_tf, c);
+ }
+
+ // focus pagerange
+ public void focusGained(FocusEvent event)
+ {
+ updatePageRanges();
+ }
+
+ public void focusLost(FocusEvent event)
+ {
+ updatePageRanges();
+ }
+
+ // updates the range after user changed it
+ private void updatePageRanges()
+ {
+ int lower = Integer.parseInt(from_tf.getText());
+ int upper = Integer.parseInt(to_tf.getText());
+
+ if (lower > upper)
+ {
+ upper = lower;
+ to_tf.setText("" + lower);
+ }
+
+ PageRanges range = new PageRanges(lower, upper);
+ atts.add(range);
+ }
+
+ // page range change
+ public void actionPerformed(ActionEvent e)
+ {
+ // if ALL is selected we must use a full-range object
+ if (e.getActionCommand().equals("ALL"))
+ {
+ from_tf.setEnabled(false);
+ to.setEnabled(false);
+ to_tf.setEnabled(false);
+
+ atts.add(new PageRanges(1, Integer.MAX_VALUE));
+ }
+ else
+ {
+ from_tf.setEnabled(true);
+ to.setEnabled(true);
+ to_tf.setEnabled(true);
+ all_rb.setSelected(false);
+ }
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(PageRanges.class))
+ {
+ pages_rb.setEnabled(true);
+ PageRanges range = (PageRanges) attribute(PageRanges.class);
+ if (range != null)
+ {
+ from_tf.setEnabled(true);
+ to.setEnabled(true);
+ to_tf.setEnabled(true);
+ all_rb.setSelected(false);
+ pages_rb.setSelected(true);
+
+ int[][] members = range.getMembers();
+ // Although passed in attributes may contain more than one
+ // range we only take the first one
+ from_tf.setText("" + members[0][0]);
+ to_tf.setText("" + members[0][1]);
+ }
+ }
+ else
+ {
+ from_tf.setEnabled(false);
+ to.setEnabled(false);
+ to_tf.setEnabled(false);
+ all_rb.setSelected(true);
+ }
+ }
+ }
+
+ /**
+ * Handles the selection of the print services
+ * and its location and description attributes.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class PrintServices extends JPanel
+ implements ActionListener
+ {
+ private JLabel name, status, typ, info;
+ private JLabel statusValue, typValue, infoValue;
+ private JButton attributes;
+ private JComboBox services_cob;
+ private JCheckBox fileRedirection_cb;
+
+ PrintServices()
+ {
+ name = new JLabel(getLocalizedString("lb.name"));
+ status = new JLabel(getLocalizedString("lb.status"));
+ typ = new JLabel(getLocalizedString("lb.typ"));
+ info = new JLabel(getLocalizedString("lb.info"));
+ typValue = new JLabel();
+ infoValue = new JLabel();
+ statusValue = new JLabel();
+
+ attributes = new JButton(getLocalizedString("bt.attributes"));
+ attributes.setEnabled(false);
+ attributes.setActionCommand("ATTRIBUTES");
+ attributes.addActionListener(this);
+
+ services_cob = new JComboBox(getPrintServices());
+ services_cob.setActionCommand("SERVICE");
+ services_cob.addActionListener(this);
+
+ fileRedirection_cb = new JCheckBox(getLocalizedString("cb.output"));
+ fileRedirection_cb.setEnabled(false);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.printservice")));
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.anchor = GridBagConstraints.LINE_END;
+ c.gridx = 0;
+ c.gridy = 0;
+ add(name, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(status, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ add(typ, c);
+
+ c.gridx = 0;
+ c.gridy = 3;
+ add(info, c);
+
+ c.gridx = 2;
+ c.gridy = 3;
+ c.weightx = 1;
+ add(fileRedirection_cb, c);
+
+ c.anchor = GridBagConstraints.LINE_START;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.gridx = 1;
+ c.gridy = 0;
+ c.weightx = 1.5;
+ add(services_cob, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ c.gridwidth = 2;
+ c.weightx = 1;
+ add(statusValue, c);
+
+ c.gridx = 1;
+ c.gridy = 2;
+ c.gridwidth = 2;
+ c.weightx = 1;
+ add(typValue, c);
+
+ c.gridx = 1;
+ c.gridy = 3;
+ c.gridwidth = 2;
+ c.weightx = 1;
+ add(infoValue, c);
+
+ c.gridx = 2;
+ c.gridy = 0;
+ c.weightx = 1.5;
+ add(attributes, c);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getActionCommand().equals("SERVICE"))
+ {
+ setSelectedPrintService((PrintService) services_cob.getSelectedItem());
+ updateAll();
+ }
+ else if (e.getActionCommand().equals("ATTRIBUTES"))
+ {
+ // TODO LowPriority-Enhancement: As tests have shown this button
+ // is even gray and not enabled under Windows - Its a good place
+ // to provide a classpath specific browsing dialog for all
+ // attributes not in the default printing dialog.
+ }
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ PrinterMakeAndModel att1 = (PrinterMakeAndModel)
+ getSelectedPrintService().getAttribute(PrinterMakeAndModel.class);
+ typValue.setText(att1 == null ? "" : att1.getValue());
+
+ PrinterInfo att2 = (PrinterInfo)
+ getSelectedPrintService().getAttribute(PrinterInfo.class);
+ infoValue.setText(att2 == null ? "" : att2.getValue());
+
+ PrinterIsAcceptingJobs att3 = (PrinterIsAcceptingJobs)
+ getSelectedPrintService().getAttribute(PrinterIsAcceptingJobs.class);
+ PrinterState att4 = (PrinterState)
+ getSelectedPrintService().getAttribute(PrinterState.class);
+
+ String status = att4.toString();
+ if (att3 == PrinterIsAcceptingJobs.ACCEPTING_JOBS)
+ status += " - " + getLocalizedString("lb.acceptingjobs");
+ else if (att3 == PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS)
+ status += " - " + getLocalizedString("lb.notacceptingjobs");
+
+ statusValue.setText(status);
+
+ if (categorySupported(Destination.class))
+ {
+ fileRedirection_cb.setEnabled(false);
+ }
+ }
+
+ }
+
+ private PrintServices printserv_panel;
+ private PrintRange printrange_panel;
+ private CopiesAndSorted copies;
+
+ /**
+ * Constructs the General Panel.
+ */
+ public GeneralPanel()
+ {
+ setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ printserv_panel = new PrintServices();
+ printrange_panel = new PrintRange();
+ copies = new CopiesAndSorted();
+
+ JPanel layout_panel = new JPanel();
+ layout_panel.setLayout(new BoxLayout(layout_panel, BoxLayout.LINE_AXIS));
+ layout_panel.add(printrange_panel);
+ layout_panel.add(Box.createRigidArea(new Dimension(10, 0)));
+ layout_panel.add(copies);
+
+ setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
+ add(printserv_panel);
+ add(Box.createRigidArea(new Dimension(0, 12)));
+ add(layout_panel);
+ }
+
+ /**
+ * Calls update on all internal panels to adjust
+ * for a new selected print service.
+ */
+ void update()
+ {
+ printserv_panel.updateForSelectedService();
+ printrange_panel.updateForSelectedService();
+ copies.updateForSelectedService();
+ }
+ }
+
+ /**
+ * The Page setup Panel.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class PageSetupPanel extends JPanel
+ {
+ /**
+ * Handles the orientation attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class Orientation extends JPanel implements ActionListener
+ {
+ private JRadioButton portrait, landscape, rev_portrait, rev_landscape;
+
+ Orientation()
+ {
+ portrait = new JRadioButton(getLocalizedString("rbt.portrait"));
+ portrait.addActionListener(this);
+ landscape = new JRadioButton(getLocalizedString("rbt.landscape"));
+ landscape.addActionListener(this);
+ rev_portrait = new JRadioButton(getLocalizedString("rbt.revportrait"));
+ rev_portrait.addActionListener(this);
+ rev_landscape = new JRadioButton(getLocalizedString("rbt.revlandscape"));
+ rev_landscape.addActionListener(this);
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(portrait);
+ group.add(landscape);
+ group.add(rev_portrait);
+ group.add(rev_landscape);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.orientation")));
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(portrait, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(landscape, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ add(rev_portrait, c);
+
+ c.gridx = 0;
+ c.gridy = 3;
+ add(rev_landscape, c);
+ }
+
+ // event handling orientation
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == portrait)
+ atts.add(OrientationRequested.PORTRAIT);
+ else if (e.getSource() == landscape)
+ atts.add(OrientationRequested.LANDSCAPE);
+ else if (e.getSource() == rev_portrait)
+ atts.add(OrientationRequested.REVERSE_PORTRAIT);
+ else
+ atts.add(OrientationRequested.REVERSE_LANDSCAPE);
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(OrientationRequested.class))
+ {
+ portrait.setEnabled(true);
+ landscape.setEnabled(true);
+ rev_landscape.setEnabled(true);
+ rev_portrait.setEnabled(true);
+
+ Attribute orientation = attribute(OrientationRequested.class);
+ if (orientation != null)
+ {
+ if (orientation.equals(OrientationRequested.LANDSCAPE))
+ landscape.setSelected(true);
+ else if (orientation.equals(OrientationRequested.PORTRAIT))
+ portrait.setSelected(true);
+ else if (orientation.equals(OrientationRequested.REVERSE_PORTRAIT))
+ rev_portrait.setSelected(true);
+ else
+ rev_landscape.setSelected(true);
+ }
+ else
+ {
+ Object defaultValue = defaultValue(OrientationRequested.class);
+ if (defaultValue.equals(OrientationRequested.LANDSCAPE))
+ landscape.setSelected(true);
+ else if (defaultValue.equals(OrientationRequested.PORTRAIT))
+ portrait.setSelected(true);
+ else if (defaultValue.equals(OrientationRequested.REVERSE_PORTRAIT))
+ rev_portrait.setSelected(true);
+ else
+ rev_landscape.setSelected(true);
+ }
+ }
+ else
+ {
+ portrait.setEnabled(false);
+ landscape.setEnabled(false);
+ rev_landscape.setEnabled(false);
+ rev_portrait.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Handles the media attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class MediaTypes extends JPanel implements ActionListener
+ {
+ private JLabel size_lb, source_lb;
+ private JComboBox size, source;
+
+ MediaTypes()
+ {
+ size_lb = new JLabel(getLocalizedString("lb.size"));
+ source_lb = new JLabel(getLocalizedString("lb.source"));
+
+ size = new JComboBox();
+ size.setEditable(false);
+ size.addActionListener(this);
+ source = new JComboBox();
+ source.setEditable(false);
+ size.addActionListener(this);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.medias")));
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.anchor = GridBagConstraints.LINE_END;
+ c.gridx = 0;
+ c.gridy = 0;
+ add(size_lb, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(source_lb, c);
+
+ c.anchor = GridBagConstraints.LINE_START;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.gridx = 1;
+ c.gridy = 0;
+ c.weightx = 1.5;
+ add(size, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ c.weightx = 1.5;
+ add(source, c);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ if (event.getSource() == size)
+ {
+ Object obj = size.getSelectedItem();
+ if (obj instanceof Media)
+ atts.add((Media) obj);
+ }
+
+ // we ignore source events currently
+ // as only the automatic selection is used.
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(Media.class))
+ {
+ Media[] medias = (Media[]) getSelectedPrintService()
+ .getSupportedAttributeValues(Media.class, flavor, null);
+
+ size.removeAllItems();
+ if (medias.length == 0)
+ size.addItem(getLocalizedString("lb.automatically"));
+ else
+ for (int i=0; i < medias.length; i++)
+ size.addItem(medias[i]);
+
+ Media media = (Media) attribute(Media.class);
+ if (media != null)
+ size.setSelectedItem(media);
+
+ // this is currently ignored
+ source.removeAllItems();
+ source.addItem(getLocalizedString("lb.automatically"));
+ }
+ else
+ {
+ size.removeAllItems();
+ source.removeAllItems();
+
+ size.addItem(getLocalizedString("lb.automatically"));
+ source.addItem(getLocalizedString("lb.automatically"));
+ }
+ }
+ }
+
+ /**
+ * Handles the media printable area attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class Margins extends JPanel implements FocusListener
+ {
+ private JLabel left, right, top, bottom;
+ private JTextField left_tf, right_tf, top_tf, bottom_tf;
+
+ Margins()
+ {
+ left = new JLabel(getLocalizedString("lb.left"));
+ right = new JLabel(getLocalizedString("lb.right"));
+ top = new JLabel(getLocalizedString("lb.top"));
+ bottom = new JLabel(getLocalizedString("lb.bottom"));
+
+ left_tf = new JTextField(7);
+ left_tf.addFocusListener(this);
+ right_tf = new JTextField(7);
+ right_tf.addFocusListener(this);
+ top_tf = new JTextField(7);
+ top_tf.addFocusListener(this);
+ bottom_tf = new JTextField(7);
+ bottom_tf.addFocusListener(this);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.margins")));
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(left, c);
+
+ c.gridx = 1;
+ c.gridy = 0;
+ add(right, c);
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 1;
+ add(left_tf, c);
+
+ c.gridx = 1;
+ c.gridy = 1;
+ add(right_tf, c);
+
+ c.insets = new Insets(10, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 2;
+ add(top, c);
+
+ c.gridx = 1;
+ c.gridy = 2;
+ add(bottom, c);
+
+ c.insets = new Insets(0, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 3;
+ add(top_tf, c);
+
+ c.gridx = 1;
+ c.gridy = 3;
+ add(bottom_tf, c);
+ }
+
+ public void focusGained(FocusEvent event)
+ {
+ updateMargins();
+ }
+
+ public void focusLost(FocusEvent event)
+ {
+ updateMargins();
+ }
+
+ // updates the margins after user changed it
+ private void updateMargins()
+ {
+ // We currently do not support this attribute
+ // as it is not in the IPP spec and therefore not in CUPS
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(MediaPrintableArea.class))
+ {
+ left.setEnabled(true);
+ right.setEnabled(true);
+ top.setEnabled(true);
+ bottom.setEnabled(true);
+ left_tf.setEnabled(true);
+ right_tf.setEnabled(true);
+ top_tf.setEnabled(true);
+ bottom_tf.setEnabled(true);
+ }
+ else
+ {
+ left.setEnabled(false);
+ right.setEnabled(false);
+ top.setEnabled(false);
+ bottom.setEnabled(false);
+ left_tf.setEnabled(false);
+ right_tf.setEnabled(false);
+ top_tf.setEnabled(false);
+ bottom_tf.setEnabled(false);
+ }
+ }
+ }
+
+ private MediaTypes media_panel;
+ private Orientation orientation_panel;
+ private Margins margins_panel;
+
+ /**
+ * Constructs the page setup user interface.
+ */
+ public PageSetupPanel()
+ {
+ setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ media_panel = new MediaTypes();
+ orientation_panel = new Orientation();
+ margins_panel = new Margins();
+
+ JPanel layout_panel = new JPanel();
+ layout_panel.setLayout(new BoxLayout(layout_panel, BoxLayout.LINE_AXIS));
+ layout_panel.add(orientation_panel);
+ layout_panel.add(Box.createRigidArea(new Dimension(10, 0)));
+ layout_panel.add(margins_panel);
+
+ setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
+ add(media_panel);
+ add(Box.createRigidArea(new Dimension(0, 12)));
+ add(layout_panel);
+ }
+
+ /**
+ * Calls update on all internal panels to adjust
+ * for a new selected print service.
+ */
+ void update()
+ {
+ media_panel.updateForSelectedService();
+ orientation_panel.updateForSelectedService();
+ margins_panel.updateForSelectedService();
+ }
+ }
+
+ /**
+ * The Appearance panel for quality, color etc.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class AppearancePanel extends JPanel
+ {
+ /**
+ * Handles the print quality attribute.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class Quality extends JPanel implements ActionListener
+ {
+ private JRadioButton low, normal, high;
+ private ButtonGroup group;
+
+ Quality()
+ {
+ low = new JRadioButton(getLocalizedString("rbt.low"));
+ low.addActionListener(this);
+ normal = new JRadioButton(getLocalizedString("rbt.normal"));
+ normal.addActionListener(this);
+ high = new JRadioButton(getLocalizedString("rbt.high"));
+ high.addActionListener(this);
+
+ group = new ButtonGroup();
+ group.add(low);
+ group.add(normal);
+ group.add(high);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.quality")));
+
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(low, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(normal, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ add(high, c);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == low)
+ atts.add(PrintQuality.DRAFT);
+ else if (e.getSource() == normal)
+ atts.add(PrintQuality.NORMAL);
+ else
+ atts.add(PrintQuality.HIGH);
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(PrintQuality.class))
+ {
+ low.setEnabled(true);
+ normal.setEnabled(true);
+ high.setEnabled(true);
+
+ Object defaultValue = defaultValue(PrintQuality.class);
+ Attribute quality = attribute(PrintQuality.class);
+
+ if (quality != null)
+ {
+ if (quality.equals(PrintQuality.DRAFT))
+ low.setSelected(true);
+ else if (quality.equals(PrintQuality.NORMAL))
+ normal.setSelected(true);
+ else
+ high.setSelected(true);
+ }
+ else
+ {
+ if (defaultValue.equals(PrintQuality.DRAFT))
+ low.setSelected(true);
+ else if (defaultValue.equals(PrintQuality.NORMAL))
+ normal.setSelected(true);
+ else
+ high.setSelected(true);
+ }
+ }
+ else
+ {
+ low.setEnabled(false);
+ normal.setEnabled(false);
+ high.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Handles the job attributes as requesting username, jobname etc.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class JobAttributes extends JPanel
+ implements ActionListener, ChangeListener, FocusListener
+ {
+ private JLabel jobname, username, priority_lb;
+ private JTextField jobname_tf, username_tf;
+ private JCheckBox cover;
+ private JSpinner priority;
+ private SpinnerNumberModel model;
+
+ JobAttributes()
+ {
+ jobname = new JLabel(getLocalizedString("lb.jobname"));
+ username = new JLabel(getLocalizedString("lb.username"));
+ priority_lb = new JLabel(getLocalizedString("lb.priority"));
+
+ cover = new JCheckBox(getLocalizedString("cb.cover"));
+ cover.addActionListener(this);
+
+ model = new SpinnerNumberModel(1, 1, 100, 1);
+ priority = new JSpinner(model);
+ priority.addChangeListener(this);
+
+ jobname_tf = new JTextField();
+ jobname_tf.addFocusListener(this);
+ username_tf = new JTextField();
+ username_tf.addFocusListener(this);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.jobattributes")));
+
+ c.insets = new Insets(10, 5, 10, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(cover, c);
+
+ c.anchor = GridBagConstraints.LINE_END;
+ c.gridx = 1;
+ c.gridy = 0;
+ c.weightx = 2;
+ add(priority_lb, c);
+
+ c.gridx = 2;
+ c.gridy = 0;
+ c.weightx = 0.5;
+ add(priority, c);
+
+ c.anchor = GridBagConstraints.LINE_END;
+ c.gridx = 0;
+ c.gridy = 1;
+ add(jobname, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ add(username, c);
+
+ c.anchor = GridBagConstraints.CENTER;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.gridx = 1;
+ c.gridy = 1;
+ c.gridwidth = 2;
+ c.weightx = 1.5;
+ add(jobname_tf, c);
+
+ c.insets = new Insets(10, 5, 15, 5);
+ c.gridx = 1;
+ c.gridy = 2;
+ add(username_tf, c);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ if (cover.isSelected())
+ atts.add(JobSheets.STANDARD);
+ else
+ atts.add(JobSheets.NONE);
+ }
+
+ public void stateChanged(ChangeEvent event)
+ {
+ int value = ((Integer) priority.getValue()).intValue();
+ atts.add(new JobPriority(value));
+ }
+
+ public void focusGained(FocusEvent event)
+ {
+ updateTextfields(event);
+ }
+
+ public void focusLost(FocusEvent event)
+ {
+ updateTextfields(event);
+ }
+
+ private void updateTextfields(FocusEvent event)
+ {
+ if (event.getSource() == jobname_tf)
+ atts.add(new JobName(jobname_tf.getText(), null));
+ else
+ atts.add(new RequestingUserName(username_tf.getText(), null));
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ // JobPriority
+ if (categorySupported(JobPriority.class))
+ {
+ JobPriority prio = (JobPriority) attribute(JobPriority.class);
+ JobPriority value = (JobPriority) defaultValue(JobPriority.class);
+ priority.setEnabled(true);
+ if (prio != null)
+ model.setValue(new Integer(prio.getValue()));
+ else
+ model.setValue(new Integer(value.getValue()));
+ }
+ else
+ priority.setEnabled(false);
+
+ // Requesting username
+ if (categorySupported(RequestingUserName.class))
+ {
+ Attribute user = attribute(RequestingUserName.class);
+ Object value = defaultValue(RequestingUserName.class);
+ username.setEnabled(true);
+ if (user != null)
+ username_tf.setText(user.toString());
+ else
+ username_tf.setText(value.toString());
+ }
+ else
+ username.setEnabled(false);
+
+ // Job Name
+ if (categorySupported(JobName.class))
+ {
+ Attribute job = attribute(JobName.class);
+ Object value = defaultValue(JobName.class);
+ jobname.setEnabled(true);
+ if (job != null)
+ jobname_tf.setText(job.toString());
+ else
+ jobname_tf.setText(value.toString());
+ }
+ else
+ jobname.setEnabled(false);
+
+ // Job sheets
+ if (categorySupported(JobSheets.class))
+ {
+ Attribute sheet = attribute(JobSheets.class);
+ Object value = defaultValue(JobSheets.class);
+ cover.setEnabled(true);
+ if (sheet != null)
+ {
+ if (sheet.equals(JobSheets.NONE))
+ cover.setSelected(false);
+ else
+ cover.setSelected(true);
+ }
+ else
+ {
+ if (value.equals(JobSheets.NONE))
+ cover.setSelected(false);
+ else
+ cover.setSelected(true);
+ }
+ }
+ else
+ cover.setEnabled(false);
+ }
+ }
+
+ /**
+ * Handles the sides attributes.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class SidesPanel extends JPanel implements ActionListener
+ {
+ private JRadioButton oneside, calendar, duplex;
+
+ SidesPanel()
+ {
+ oneside = new JRadioButton(getLocalizedString("rbt.onesided"));
+ oneside.addActionListener(this);
+ calendar = new JRadioButton(getLocalizedString("rbt.calendar"));
+ calendar.addActionListener(this);
+ duplex = new JRadioButton(getLocalizedString("rbt.duplex"));
+ duplex.addActionListener(this);
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(oneside);
+ group.add(calendar);
+ group.add(duplex);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.sides")));
+
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(oneside, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(calendar, c);
+
+ c.gridx = 0;
+ c.gridy = 2;
+ add(duplex, c);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == calendar)
+ atts.add(Sides.TWO_SIDED_SHORT_EDGE);
+ else if (e.getSource() == oneside)
+ atts.add(Sides.ONE_SIDED);
+ else
+ atts.add(Sides.TWO_SIDED_LONG_EDGE);
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(Sides.class))
+ {
+ oneside.setEnabled(true);
+ calendar.setEnabled(true);
+ duplex.setEnabled(true);
+
+ Object defaultValue = defaultValue(Sides.class);
+ Attribute sides = attribute(Sides.class);
+ if (sides != null)
+ {
+ if (sides.equals(Sides.TWO_SIDED_SHORT_EDGE))
+ calendar.setSelected(true);
+ else if (sides.equals(Sides.ONE_SIDED))
+ oneside.setSelected(true);
+ else
+ duplex.setSelected(true);
+ }
+ else
+ {
+ if (defaultValue.equals(Sides.TWO_SIDED_SHORT_EDGE))
+ calendar.setSelected(true);
+ else if (defaultValue.equals(Sides.ONE_SIDED))
+ oneside.setSelected(true);
+ else
+ duplex.setSelected(true);
+ }
+ }
+ else
+ {
+ oneside.setEnabled(false);
+ calendar.setEnabled(false);
+ duplex.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Handles the chromaticity attributes.
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ final class Color extends JPanel implements ActionListener
+ {
+ private JRadioButton bw, color;
+
+ Color()
+ {
+ bw = new JRadioButton(getLocalizedString("rbt.blackwhite"));
+ bw.addActionListener(this);
+ color = new JRadioButton(getLocalizedString("rbt.color"));
+ color.addActionListener(this);
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(bw);
+ group.add(color);
+
+ GridBagLayout layout = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ setLayout(layout);
+ setBorder(new TitledBorder(getLocalizedString("title.color")));
+
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.insets = new Insets(5, 5, 5, 5);
+ c.gridx = 0;
+ c.gridy = 0;
+ add(bw, c);
+
+ c.gridx = 0;
+ c.gridy = 1;
+ add(color, c);
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == bw)
+ atts.add(Chromaticity.MONOCHROME);
+ else
+ atts.add(Chromaticity.COLOR);
+ }
+
+ /**
+ * Called to update for new selected
+ * print service. Tests if currently
+ * selected attributes are supported.
+ */
+ void updateForSelectedService()
+ {
+ if (categorySupported(Chromaticity.class))
+ {
+ bw.setEnabled(true);
+ color.setEnabled(true);
+
+ Object defaultValue = defaultValue(Chromaticity.class);
+ Attribute chromaticity = attribute(Chromaticity.class);
+ if (chromaticity != null)
+ {
+ if (chromaticity.equals(Chromaticity.MONOCHROME))
+ bw.setSelected(true);
+ else
+ color.setSelected(true);
+ }
+ else
+ {
+ if (defaultValue.equals(Chromaticity.MONOCHROME))
+ bw.setSelected(true);
+ else
+ color.setSelected(true);
+ }
+ }
+ else
+ {
+ bw.setEnabled(false);
+ color.setEnabled(false);
+ }
+ }
+ }
+
+ private Quality quality_panel;
+ private JobAttributes jobAttr_panel;
+ private SidesPanel sides_panel;
+ private Color chromaticy_panel;
+
+ /**
+ * Creates the panel for appearance attributes.
+ */
+ public AppearancePanel()
+ {
+ setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ quality_panel = new Quality();
+ jobAttr_panel = new JobAttributes();
+ sides_panel = new SidesPanel();
+ chromaticy_panel = new Color();
+
+ JPanel layout_panel = new JPanel();
+ layout_panel.setLayout(new BoxLayout(layout_panel, BoxLayout.LINE_AXIS));
+ layout_panel.add(chromaticy_panel);
+ layout_panel.add(Box.createRigidArea(new Dimension(10, 0)));
+ layout_panel.add(quality_panel);
+
+ JPanel layout2_panel = new JPanel();
+ layout2_panel.setLayout(new BoxLayout(layout2_panel, BoxLayout.LINE_AXIS));
+ layout2_panel.add(sides_panel);
+ layout2_panel.add(Box.createRigidArea(new Dimension(10, 0)));
+ layout2_panel.add(jobAttr_panel);
+
+ setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
+ add(layout_panel);
+ add(Box.createRigidArea(new Dimension(0, 12)));
+ add(layout2_panel);
+ }
+
+ /**
+ * Calls update on all internal panels to adjust
+ * for a new selected print service.
+ */
+ void update()
+ {
+ quality_panel.updateForSelectedService();
+ jobAttr_panel.updateForSelectedService();
+ sides_panel.updateForSelectedService();
+ chromaticy_panel.updateForSelectedService();
+ }
+ }
+
+ // on main contentpane
+ private JButton ok_bt;
+ private JButton cancel_bt;
+
+ // the tabs
+ private GeneralPanel general_panel;
+ private PageSetupPanel pagesetup_panel;
+ private AppearancePanel appearance_panel;
+
+ private PrintService[] services;
+ private PrintService defaultService;
+ private PrintService selectedService;
+ private DocFlavor flavor;
+ private PrintRequestAttributeSet attributes;
+
+ private boolean onlyPageDialog;
+ private PrintRequestAttributeSet atts;
+
+ private final static ResourceBundle messages;
+
+ static
+ {
+ messages = ResourceBundle.getBundle("gnu/javax/print/PrinterDialog");
+ }
+
+ // TODO LowPriority: Include checks so that if a specific value formerly
+ // selected is no more supported by the new service changes to the default.
+
+ /**
+ * Class private constructs a printer dialog.
+ *
+ * @param gc the screen to use. <code>null</code> is default screen.
+ * @param services the print services to browse (not null).
+ * @param defaultService the default service. If <code>null</code>
+ * the first of the print services in the services array will be used.
+ * @param flavor the flavours to be printed.
+ * @param attributes the attributes requested. Will be updated
+ * by selections done by the user in the dialog.
+ * @param onlyPageDialog if true a page settings only dialog is constructed.
+ *
+ * @throws HeadlessException if GraphicsEnvironment is headless
+ */
+ private PrinterDialog(GraphicsConfiguration gc, PrintService[] services,
+ PrintService defaultService, DocFlavor flavor,
+ PrintRequestAttributeSet attributes, boolean onlyPageDialog, String title)
+ throws HeadlessException
+ {
+ super((Frame)null, title, true, gc);
+
+ setResizable(false);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ // check and remove service not supporting the flavor
+ if (flavor != null)
+ {
+ ArrayList list = new ArrayList(services.length);
+ for(int i=0; i < services.length; i++)
+ if (services[i].isDocFlavorSupported(flavor))
+ list.add(services[i]);
+
+ if (defaultService != null
+ && (! list.contains(defaultService)))
+ defaultService = (PrintService) list.get(0);
+
+ PrintService[] newServices = new PrintService[list.size()];
+ this.services = (PrintService[]) list.toArray(newServices);
+ }
+ else
+ this.services = services;
+
+ if (defaultService == null)
+ this.defaultService = services[0];
+ else
+ this.defaultService = defaultService;
+
+ this.selectedService = this.defaultService;
+ this.flavor = flavor;
+
+ // the attributes given by the user
+ this.attributes = attributes;
+ // the one to work with during browsing
+ this.atts = new HashPrintRequestAttributeSet(attributes);
+
+ this.onlyPageDialog = onlyPageDialog;
+
+ initUI(onlyPageDialog);
+ pack();
+ updateAll();
+ }
+
+ /**
+ * Constructs a page settings only dialog.
+ *
+ * @param gc the screen to use. <code>null</code> is default screen.
+ * @param service the print service for the page dialog.
+ * the first of the print services in the services array will be used.
+ * @param flavor the flavours to be printed.
+ * @param attributes the attributes requested. Will be updated
+ * by selections done by the user in the dialog.
+ *
+ * @throws HeadlessException if GraphicsEnvironment is headless
+ */
+ public PrinterDialog(GraphicsConfiguration gc, PrintService service,
+ DocFlavor flavor, PrintRequestAttributeSet attributes)
+ throws HeadlessException
+ {
+ this(gc, new PrintService[] {service}, service, flavor, attributes,
+ true, getLocalizedString("title.pagedialog"));
+ }
+
+ /**
+ * Constructs a printer dialog.
+ *
+ * @param gc the screen to use. <code>null</code> is default screen.
+ * @param services the print services to browse (not null).
+ * @param defaultService the default service. If <code>null</code>
+ * the first of the print services in the services array will be used.
+ * @param flavor the flavours to be printed.
+ * @param attributes the attributes requested. Will be updated
+ * by selections done by the user in the dialog.
+ *
+ * @throws HeadlessException if GraphicsEnvironment is headless
+ */
+ public PrinterDialog(GraphicsConfiguration gc, PrintService[] services,
+ PrintService defaultService, DocFlavor flavor,
+ PrintRequestAttributeSet attributes)
+ throws HeadlessException
+ {
+ this(gc, services, defaultService, flavor, attributes,
+ false, getLocalizedString("title.printdialog"));
+ }
+
+ // initializes the gui parts
+ private void initUI(boolean onlyPageDialog)
+ {
+ JPanel buttonPane = new JPanel();
+
+ if (onlyPageDialog)
+ {
+ JPanel pane = new JPanel();
+ pane.setLayout(new BorderLayout());
+ pagesetup_panel = new PageSetupPanel();
+ pane.add(pagesetup_panel, BorderLayout.CENTER);
+
+ ok_bt = new JButton(getLocalizedString("bt.OK"));
+ ok_bt.addActionListener(this);
+ cancel_bt = new JButton(getLocalizedString("bt.cancel"));
+ cancel_bt.addActionListener(this);
+
+ getContentPane().add(pane, BorderLayout.CENTER);
+ }
+ else
+ {
+ general_panel = new GeneralPanel();
+ pagesetup_panel = new PageSetupPanel();
+ appearance_panel = new AppearancePanel();
+
+ JTabbedPane pane = new JTabbedPane();
+ pane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ ok_bt = new JButton(getLocalizedString("bt.print"));
+ ok_bt.addActionListener(this);
+ cancel_bt = new JButton(getLocalizedString("bt.cancel"));
+ cancel_bt.addActionListener(this);
+
+ // populate jtabbedpane
+ pane.addTab(getLocalizedString("tab.general"), general_panel);
+ pane.addTab(getLocalizedString("tab.pagesetup"), pagesetup_panel);
+ pane.addTab(getLocalizedString("tab.appearance"), appearance_panel);
+
+ // Put everything together
+ getContentPane().add(pane, BorderLayout.CENTER);
+ }
+
+ buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+ buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ buttonPane.add(Box.createHorizontalGlue());
+ buttonPane.add(ok_bt);
+ buttonPane.add(Box.createRigidArea(new Dimension(5, 0)));
+ buttonPane.add(cancel_bt);
+
+ getContentPane().add(buttonPane, BorderLayout.PAGE_END);
+ }
+
+ /**
+ * Returns the modified attributes set.
+ * @return The attributes.
+ */
+ public PrintRequestAttributeSet getAttributes()
+ {
+ return attributes;
+ }
+
+ /**
+ * Returns the print service selected by the user.
+ * @return The selected print service.
+ */
+ public PrintService getSelectedPrintService()
+ {
+ return selectedService;
+ }
+
+ /**
+ * Sets the currently selected print service.
+ *
+ * @param service the service selected.
+ */
+ protected void setSelectedPrintService(PrintService service)
+ {
+ selectedService = service;
+ }
+
+ /**
+ * Returns the print service array.
+ * @return The print services.
+ */
+ protected PrintService[] getPrintServices()
+ {
+ return services;
+ }
+
+ /**
+ * Calls update on all panels to adjust
+ * for a new selected print service.
+ */
+ void updateAll()
+ {
+ pagesetup_panel.update();
+
+ if (! onlyPageDialog)
+ {
+ general_panel.update();
+ appearance_panel.update();
+ }
+ }
+
+ boolean categorySupported(Class category)
+ {
+ return getSelectedPrintService().
+ isAttributeCategorySupported(category);
+ }
+
+ Object defaultValue(Class category)
+ {
+ return getSelectedPrintService().
+ getDefaultAttributeValue(category);
+ }
+
+ Attribute attribute(Class category)
+ {
+ return atts.get(category);
+ }
+
+ /**
+ * Action handler for Print/Cancel buttons.
+ * If cancel is pressed we reset the attributes
+ * and the selected service.
+ *
+ * @param e the ActionEvent
+ */
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == ok_bt)
+ {
+ setVisible(false);
+ attributes.addAll(atts);
+ dispose();
+ }
+ else
+ {
+ setVisible(false);
+ selectedService = null;
+ dispose();
+ }
+ }
+
+ /**
+ * Retrieves localized messages from the resource bundle.
+ *
+ * @param key the key
+ * @return The localized value for the key.
+ */
+ static final String getLocalizedString(String key) {
+ return messages.getString(key);
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/DocPrintJobImpl.java b/libjava/classpath/gnu/javax/print/ipp/DocPrintJobImpl.java
new file mode 100644
index 0000000..d391afc
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/DocPrintJobImpl.java
@@ -0,0 +1,471 @@
+/* DocPrintJobImpl.java -- Implementation of DocPrintJob.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import gnu.javax.print.PrintFlavorException;
+import gnu.javax.print.ipp.attribute.job.JobId;
+import gnu.javax.print.ipp.attribute.job.JobUri;
+import gnu.javax.print.ipp.attribute.printer.DocumentFormat;
+import gnu.javax.print.ipp.attribute.supported.OperationsSupported;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.print.CancelablePrintJob;
+import javax.print.Doc;
+import javax.print.DocFlavor;
+import javax.print.DocPrintJob;
+import javax.print.PrintException;
+import javax.print.PrintService;
+import javax.print.attribute.AttributeSetUtilities;
+import javax.print.attribute.DocAttributeSet;
+import javax.print.attribute.HashAttributeSet;
+import javax.print.attribute.HashPrintJobAttributeSet;
+import javax.print.attribute.PrintJobAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.JobName;
+import javax.print.attribute.standard.PrinterURI;
+import javax.print.attribute.standard.RequestingUserName;
+import javax.print.event.PrintJobAttributeListener;
+import javax.print.event.PrintJobEvent;
+import javax.print.event.PrintJobListener;
+
+/**
+ * Implementation of the DocPrintJob interface. Implementation is
+ * specific to the <code>IppPrintService</code> implementation.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class DocPrintJobImpl implements CancelablePrintJob
+{
+ /** The print service this job is bound to. */
+ private IppPrintService service;
+
+ /** The set of print job listeners. */
+ private HashSet printJobListener = new HashSet();
+
+ /** The print job attributes listeners. */
+ private ArrayList attributesListener = new ArrayList();
+ /** The print job attributes listeners associated attribute set. */
+ private ArrayList attributesListenerAttributes = new ArrayList();
+
+ /** The username. */
+ private String username;
+ /** The password of the user. */
+ private String password;
+
+ /** Returned job uri. */
+ private JobUri jobUri = null;
+ /** Returned job id. */
+ private JobId jobId = null;
+
+ /** The requesting-username for later canceling */
+ private RequestingUserName requestingUser;
+
+ /** The print job sets. */
+ private PrintJobAttributeSet oldSet = new HashPrintJobAttributeSet();
+ private PrintJobAttributeSet currentSet = new HashPrintJobAttributeSet();
+
+ /**
+ * State variable if we already started printing.
+ */
+ private boolean printing = false;
+
+ // TODO Implement complete PrintJobListener notification
+ // TODO Implement PrintJobAttributeListener notification
+
+ /**
+ * Constructs a DocPrintJobImpl instance bound to the given print service.
+ *
+ * @param service the print service instance.
+ * @param user the user of this print service.
+ * @param passwd the password of the user.
+ */
+ public DocPrintJobImpl(IppPrintService service, String user, String passwd)
+ {
+ this.service = service;
+ username = user;
+ password = passwd;
+ }
+
+ /**
+ * @see DocPrintJob#addPrintJobAttributeListener(PrintJobAttributeListener, PrintJobAttributeSet)
+ */
+ public void addPrintJobAttributeListener(PrintJobAttributeListener listener,
+ PrintJobAttributeSet attributes)
+ {
+ if (listener == null)
+ return;
+
+ attributesListener.add(listener);
+ attributesListenerAttributes.add(attributes);
+ }
+
+ /**
+ * @see DocPrintJob#addPrintJobListener(PrintJobListener)
+ */
+ public void addPrintJobListener(PrintJobListener listener)
+ {
+ if (listener == null)
+ return;
+
+ printJobListener.add(listener);
+ }
+
+ /**
+ * @see javax.print.DocPrintJob#getAttributes()
+ */
+ public PrintJobAttributeSet getAttributes()
+ {
+ return AttributeSetUtilities.unmodifiableView(currentSet);
+ }
+
+ /**
+ * @see javax.print.DocPrintJob#getPrintService()
+ */
+ public PrintService getPrintService()
+ {
+ return service;
+ }
+
+ /**
+ * @see DocPrintJob#print(Doc, PrintRequestAttributeSet)
+ */
+ public void print(Doc doc, PrintRequestAttributeSet attributes)
+ throws PrintException
+ {
+ if (printing)
+ throw new PrintException("already printing");
+
+ printing = true;
+
+ DocAttributeSet docAtts = doc.getAttributes();
+ DocFlavor flavor = doc.getDocFlavor();
+
+ if (flavor == null || (!service.isDocFlavorSupported(flavor)))
+ {
+ notifyPrintJobListeners(new PrintJobEvent(this, PrintJobEvent.JOB_FAILED));
+ throw new PrintFlavorException("Invalid flavor", new DocFlavor[] {flavor});
+ }
+
+ // merge attributes as doc attributes take precendence
+ // over the print request attributes
+ HashAttributeSet mergedAtts = new HashAttributeSet();
+
+ if (attributes != null)
+ mergedAtts.addAll(attributes);
+ if (docAtts != null)
+ mergedAtts.addAll(docAtts);
+
+ // check for requesting-user-name -add the
+ // executing username if no other is specified
+ // save user name so we can make a cancel operation under same user
+ if (! mergedAtts.containsKey(RequestingUserName.class))
+ {
+ mergedAtts.add(IppPrintService.REQUESTING_USER_NAME);
+ requestingUser = IppPrintService.REQUESTING_USER_NAME;
+ }
+ else
+ {
+ requestingUser = (RequestingUserName)
+ mergedAtts.get(RequestingUserName.class);
+ }
+
+ // same for job-name
+ if (! mergedAtts.containsKey(JobName.class))
+ mergedAtts.add(IppPrintService.JOB_NAME);
+
+ IppResponse response = null;
+
+ try
+ {
+ PrinterURI printerUri = service.getPrinterURI();
+ String printerUriStr = "http" + printerUri.toString().substring(3);
+
+ URI uri = null;
+ try
+ {
+ uri = new URI(printerUriStr);
+ }
+ catch (URISyntaxException e)
+ {
+ // does not happen
+ }
+
+ IppRequest request =
+ new IppRequest(uri, username, password);
+
+ request.setOperationID( (short) OperationsSupported.PRINT_JOB.getValue());
+ request.setOperationAttributeDefaults();
+ request.addOperationAttribute(printerUri);
+
+ if (mergedAtts != null)
+ {
+ request.addAndFilterJobOperationAttributes(mergedAtts);
+ request.addAndFilterJobTemplateAttributes(mergedAtts);
+ }
+
+ // DocFlavor getMimeType returns charset quoted
+ DocumentFormat format = DocumentFormat.createDocumentFormat(flavor);
+ request.addOperationAttribute(format);
+
+ // Get and set the printdata based on the
+ // representation classname
+ String className = flavor.getRepresentationClassName();
+
+ if (className.equals("[B"))
+ {
+ request.setData((byte[]) doc.getPrintData());
+ response = request.send();
+ }
+ else if (className.equals("java.io.InputStream"))
+ {
+ InputStream stream = (InputStream) doc.getPrintData();
+ request.setData(stream);
+ response = request.send();
+ stream.close();
+ }
+ else if (className.equals("[C"))
+ {
+ try
+ {
+ // CUPS only supports UTF-8 currently so we convert
+ // We also assume that char[] is always utf-16 - correct ?
+ String str = new String((char[]) doc.getPrintData());
+ request.setData(str.getBytes("utf-16"));
+ response = request.send();
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ notifyPrintJobListeners(new PrintJobEvent(this, PrintJobEvent.JOB_FAILED));
+ throw new PrintFlavorException("Invalid charset of flavor", e, new DocFlavor[] {flavor});
+ }
+ }
+ else if (className.equals("java.io.Reader"))
+ {
+ try
+ {
+ // FIXME Implement
+ // Convert a Reader into a InputStream properly encoded
+ response = request.send();
+ throw new UnsupportedEncodingException("not supported yet");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ notifyPrintJobListeners(new PrintJobEvent(this, PrintJobEvent.JOB_FAILED));
+ throw new PrintFlavorException("Invalid charset of flavor", e, new DocFlavor[] {flavor});
+ }
+ }
+ else if (className.equals("java.lang.String"))
+ {
+ try
+ {
+ // CUPS only supports UTF-8 currently so we convert
+ // We also assume that String is always utf-16 - correct ?
+ String str = (String) doc.getPrintData();
+ request.setData(str.getBytes("utf-16"));
+ response = request.send();
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ notifyPrintJobListeners(new PrintJobEvent(this, PrintJobEvent.JOB_FAILED));
+ throw new PrintFlavorException("Invalid charset of flavor", e, new DocFlavor[] {flavor});
+ }
+ }
+ else if (className.equals("java.net.URL"))
+ {
+ URL url = (URL) doc.getPrintData();
+ InputStream stream = url.openStream();
+ request.setData(stream);
+ response = request.send();
+ stream.close();
+ }
+ else if (className.equals("java.awt.image.renderable.RenderableImage")
+ || className.equals("java.awt.print.Printable")
+ || className.equals("java.awt.print.Pageable"))
+ {
+ // For the future :-)
+ throw new PrintException("Not yet supported.");
+ }
+ else
+ {
+ // should not happen - however
+ notifyPrintJobListeners(new PrintJobEvent(this, PrintJobEvent.JOB_FAILED));
+ throw new PrintFlavorException("Invalid flavor", new DocFlavor[] {flavor});
+ }
+
+ // at this point the data is transfered
+ notifyPrintJobListeners(new PrintJobEvent(
+ this, PrintJobEvent.DATA_TRANSFER_COMPLETE));
+ }
+ catch (IOException e)
+ {
+ throw new PrintException("IOException occured.", e);
+ }
+
+ int status = response.getStatusCode();
+ if (! (status == IppStatusCode.SUCCESSFUL_OK
+ || status == IppStatusCode.SUCCESSFUL_OK_IGNORED_OR_SUBSTITUED_ATTRIBUTES
+ || status == IppStatusCode.SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES) )
+ {
+ notifyPrintJobListeners(new PrintJobEvent(
+ this, PrintJobEvent.JOB_FAILED));
+ throw new PrintException("Printing failed - received statuscode " + Integer.toHexString(status));
+
+ // TODO maybe specific status codes may require to throw a specific
+ // detailed attribute exception
+ }
+ else
+ {
+ // start print job progress monitoring thread
+ // FIXME Implement
+
+ // for now we just notify as finished
+ notifyPrintJobListeners(
+ new PrintJobEvent(this, PrintJobEvent.JOB_COMPLETE));
+ }
+
+ List jobAtts = response.getJobAttributes();
+
+ // extract the uri and id of job for canceling and further monitoring
+ Map jobAttributes = (Map) jobAtts.get(0);
+ jobUri = (JobUri) ((HashSet)jobAttributes.get(JobUri.class)).toArray()[0];
+ jobId = (JobId) ((HashSet)jobAttributes.get(JobId.class)).toArray()[0];
+ }
+
+ /**
+ * @see DocPrintJob#removePrintJobAttributeListener(PrintJobAttributeListener)
+ */
+ public void removePrintJobAttributeListener(PrintJobAttributeListener listener)
+ {
+ if (listener == null)
+ return;
+
+ int index = attributesListener.indexOf(listener);
+ if (index != -1)
+ {
+ attributesListener.remove(index);
+ attributesListenerAttributes.remove(index);
+ }
+ }
+
+ /**
+ * @see DocPrintJob#removePrintJobListener(PrintJobListener)
+ */
+ public void removePrintJobListener(PrintJobListener listener)
+ {
+ if (listener == null)
+ return;
+
+ printJobListener.remove(listener);
+ }
+
+ /**
+ * @see CancelablePrintJob#cancel()
+ */
+ public void cancel() throws PrintException
+ {
+ if (jobUri == null)
+ {
+ throw new PrintException("print job is not yet send");
+ }
+
+ IppResponse response = null;
+
+ try
+ {
+ IppRequest request = new IppRequest(jobUri.getURI(), username, password);
+ request.setOperationID( (short) OperationsSupported.CANCEL_JOB.getValue());
+ request.setOperationAttributeDefaults();
+ request.addOperationAttribute(jobUri);
+ request.addOperationAttribute(requestingUser);
+ response = request.send();
+ }
+ catch (IOException e)
+ {
+ throw new IppException("IOException occured during cancel request.", e);
+ }
+
+ int status = response.getStatusCode();
+ if (! (status == IppStatusCode.SUCCESSFUL_OK
+ || status == IppStatusCode.SUCCESSFUL_OK_IGNORED_OR_SUBSTITUED_ATTRIBUTES
+ || status == IppStatusCode.SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES) )
+ {
+ notifyPrintJobListeners(new PrintJobEvent(
+ this, PrintJobEvent.JOB_FAILED));
+ throw new PrintException("Canceling failed - received statuscode " + Integer.toHexString(status));
+ }
+ else
+ {
+ notifyPrintJobListeners(new PrintJobEvent(
+ this, PrintJobEvent.JOB_CANCELED));
+ }
+ }
+
+ private void notifyPrintJobListeners(PrintJobEvent e)
+ {
+ Iterator it = printJobListener.iterator();
+ while (it.hasNext())
+ {
+ PrintJobListener l = (PrintJobListener) it.next();
+ if (e.getPrintEventType() == PrintJobEvent.DATA_TRANSFER_COMPLETE)
+ l.printDataTransferCompleted(e);
+ else if (e.getPrintEventType() == PrintJobEvent.JOB_CANCELED)
+ l.printJobCanceled(e);
+ else if (e.getPrintEventType() == PrintJobEvent.JOB_COMPLETE)
+ l.printJobCompleted(e);
+ else if (e.getPrintEventType() == PrintJobEvent.JOB_FAILED)
+ l.printJobFailed(e);
+ else if (e.getPrintEventType() == PrintJobEvent.NO_MORE_EVENTS)
+ l.printJobNoMoreEvents(e);
+ else
+ l.printJobRequiresAttention(e);
+ }
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppDelimiterTag.java b/libjava/classpath/gnu/javax/print/ipp/IppDelimiterTag.java
new file mode 100644
index 0000000..ce6bb4f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppDelimiterTag.java
@@ -0,0 +1,99 @@
+/* IppDelimiterTag.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+
+/**
+ * IPP Delimiter Tags as described in RFC 2910 section 3.5.1.
+ * <p>
+ * Every delimiter tag value can occur in the protocol field
+ * begin-attribute-group-tag and indicates that the following
+ * attributes will be part of the named group.<br>
+ * The end-of-attributes-tag signals the end of the attributes
+ * section in the IPP request/response and therefore the beginning
+ * of the data section (if any).
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class IppDelimiterTag
+{
+ /** Start of the operation attributes group section. */
+ public static final byte OPERATION_ATTRIBUTES_TAG = 0x01;
+
+ /** Start of the job attributes group section. */
+ public static final byte JOB_ATTRIBUTES_TAG = 0x02;
+
+ /** End of the attributes section and begin of data section. */
+ public static final byte END_OF_ATTRIBUTES_TAG = 0x03;
+
+ /** Start of the printer attributes group section. */
+ public static final byte PRINTER_ATTRIBUTES_TAG = 0x04;
+
+ /** Start of the unsupported attributes group section. */
+ public static final byte UNSUPPORTED_ATTRIBUTES_TAG = 0x05;
+
+
+ // 0x00 reserved for definition in a future IETF
+ // standards track document
+
+ // 0x06-0x0f reserved for future delimiters in IETF
+ // standards track documents
+
+ private IppDelimiterTag()
+ {
+ // not to be instantiated
+ }
+
+ /**
+ * Tests if given value corresponds to a
+ * delimiter tag value.
+ *
+ * @param value the value to test for
+ * @return <code>true</code> if, <code>false</code> otherwise.
+ */
+ public static boolean isDelimiterTag(byte value)
+ {
+ if (value >= 0x01 && value <= 0x05)
+ return true;
+
+ return false;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppException.java b/libjava/classpath/gnu/javax/print/ipp/IppException.java
new file mode 100644
index 0000000..27b156f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppException.java
@@ -0,0 +1,88 @@
+/* IppException.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import javax.print.PrintException;
+
+/**
+ * <code>IppException</code> signals exception thrown by
+ * the IPP implementation for various things like a failed
+ * ipp request or a wrapped io exception.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class IppException extends PrintException
+{
+ /**
+ * Creates an <code>IppException</code>.
+ */
+ public IppException()
+ {
+ super();
+ }
+
+ /**
+ * Creates an <code>IppException</code>.
+ * @param s the message of the exception.
+ */
+ public IppException(String s)
+ {
+ super(s);
+ }
+
+ /**
+ * Creates an <code>IppException</code>.
+ * @param e the exception cause this one.
+ */
+ public IppException(Exception e)
+ {
+ super(e);
+ }
+
+ /**
+ * Creates an <code>IppException</code>.
+ * @param s the message of the exception.
+ * @param e the exception cause this one.
+ */
+ public IppException(String s, Exception e)
+ {
+ super(s, e);
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java b/libjava/classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java
new file mode 100644
index 0000000..df2a479
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java
@@ -0,0 +1,87 @@
+/* IppMultiDocPrintService.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+
+import java.net.URI;
+
+import javax.print.MultiDocPrintJob;
+import javax.print.MultiDocPrintService;
+
+/**
+ * Implementation of the MultiDocPrintService interface
+ * for IPP based printers.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class IppMultiDocPrintService extends IppPrintService
+ implements MultiDocPrintService
+{
+ /** The username. */
+ private transient String user;
+
+ /** The password of the user. */
+ private transient String passwd;
+
+ /**
+ * Creates a <code>IppMultiDocPrintService</code> object.
+ *
+ * @param uri the URI of the IPP printer.
+ * @param username the user of this print service.
+ * @param password the password of the user.
+ *
+ * @throws IppException if an error during connection occurs.
+ */
+ public IppMultiDocPrintService(URI uri, String username, String password)
+ throws IppException
+ {
+ super(uri, username, password);
+ user = username;
+ passwd = password;
+ }
+
+ /**
+ * @see MultiDocPrintService#createMultiDocPrintJob()
+ */
+ public MultiDocPrintJob createMultiDocPrintJob()
+ {
+ return new MultiDocPrintJobImpl(this, user, passwd);
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppPrintService.java b/libjava/classpath/gnu/javax/print/ipp/IppPrintService.java
new file mode 100644
index 0000000..ce3ef9e
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppPrintService.java
@@ -0,0 +1,916 @@
+/* IppPrintService.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import gnu.classpath.SystemProperties;
+import gnu.classpath.debug.Component;
+import gnu.classpath.debug.SystemLogger;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+import gnu.javax.print.ipp.attribute.RequestedAttributes;
+import gnu.javax.print.ipp.attribute.defaults.CopiesDefault;
+import gnu.javax.print.ipp.attribute.defaults.FinishingsDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobHoldUntilDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobPriorityDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobSheetsDefault;
+import gnu.javax.print.ipp.attribute.defaults.MediaDefault;
+import gnu.javax.print.ipp.attribute.defaults.MultipleDocumentHandlingDefault;
+import gnu.javax.print.ipp.attribute.defaults.NumberUpDefault;
+import gnu.javax.print.ipp.attribute.defaults.OrientationRequestedDefault;
+import gnu.javax.print.ipp.attribute.defaults.PrintQualityDefault;
+import gnu.javax.print.ipp.attribute.defaults.PrinterResolutionDefault;
+import gnu.javax.print.ipp.attribute.defaults.SidesDefault;
+import gnu.javax.print.ipp.attribute.printer.DocumentFormat;
+import gnu.javax.print.ipp.attribute.supported.CompressionSupported;
+import gnu.javax.print.ipp.attribute.supported.DocumentFormatSupported;
+import gnu.javax.print.ipp.attribute.supported.FinishingsSupported;
+import gnu.javax.print.ipp.attribute.supported.JobHoldUntilSupported;
+import gnu.javax.print.ipp.attribute.supported.JobSheetsSupported;
+import gnu.javax.print.ipp.attribute.supported.MediaSupported;
+import gnu.javax.print.ipp.attribute.supported.MultipleDocumentHandlingSupported;
+import gnu.javax.print.ipp.attribute.supported.OperationsSupported;
+import gnu.javax.print.ipp.attribute.supported.OrientationRequestedSupported;
+import gnu.javax.print.ipp.attribute.supported.PageRangesSupported;
+import gnu.javax.print.ipp.attribute.supported.PrintQualitySupported;
+import gnu.javax.print.ipp.attribute.supported.PrinterResolutionSupported;
+import gnu.javax.print.ipp.attribute.supported.PrinterUriSupported;
+import gnu.javax.print.ipp.attribute.supported.SidesSupported;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import javax.print.DocFlavor;
+import javax.print.DocPrintJob;
+import javax.print.PrintService;
+import javax.print.ServiceUIFactory;
+import javax.print.attribute.Attribute;
+import javax.print.attribute.AttributeSet;
+import javax.print.attribute.AttributeSetUtilities;
+import javax.print.attribute.HashAttributeSet;
+import javax.print.attribute.HashPrintServiceAttributeSet;
+import javax.print.attribute.IntegerSyntax;
+import javax.print.attribute.PrintServiceAttribute;
+import javax.print.attribute.PrintServiceAttributeSet;
+import javax.print.attribute.standard.Compression;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.CopiesSupported;
+import javax.print.attribute.standard.Fidelity;
+import javax.print.attribute.standard.Finishings;
+import javax.print.attribute.standard.JobHoldUntil;
+import javax.print.attribute.standard.JobImpressions;
+import javax.print.attribute.standard.JobImpressionsSupported;
+import javax.print.attribute.standard.JobKOctets;
+import javax.print.attribute.standard.JobKOctetsSupported;
+import javax.print.attribute.standard.JobMediaSheets;
+import javax.print.attribute.standard.JobMediaSheetsSupported;
+import javax.print.attribute.standard.JobName;
+import javax.print.attribute.standard.JobPriority;
+import javax.print.attribute.standard.JobPrioritySupported;
+import javax.print.attribute.standard.JobSheets;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MultipleDocumentHandling;
+import javax.print.attribute.standard.NumberUp;
+import javax.print.attribute.standard.NumberUpSupported;
+import javax.print.attribute.standard.OrientationRequested;
+import javax.print.attribute.standard.PageRanges;
+import javax.print.attribute.standard.PrintQuality;
+import javax.print.attribute.standard.PrinterName;
+import javax.print.attribute.standard.PrinterResolution;
+import javax.print.attribute.standard.PrinterURI;
+import javax.print.attribute.standard.RequestingUserName;
+import javax.print.attribute.standard.Sides;
+import javax.print.event.PrintServiceAttributeListener;
+
+
+/**
+ * Implementation of the PrintService interface
+ * for IPP based printers.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class IppPrintService implements PrintService
+{
+ /**
+ * A Map with sets of attributes.
+ * key: A attribute category
+ * value: A set with values
+ *
+ * IPP may return sets of attributes e.g. for supported
+ * compression methods so we need to map to sets here.
+ */
+ private Map printerAttr;
+
+ /** The set of listeners.*/
+ private HashSet printServiceAttributeListener;
+
+ /** The username. */
+ private transient String user;
+
+ /** The password of the user. */
+ private transient String passwd;
+
+ /** The name of this print service. */
+ private String name;
+
+ /** The list of supported document flavors. */
+ private List flavors;
+
+ /** The standard printer URI. */
+ private PrinterURI printerUri;
+
+ /** The list of all supported printer URIs. */
+ private ArrayList printerUris;
+
+ /**
+ * Logger for tracing - enable by passing
+ * -Dgnu.classpath.debug.components=ipp to the vm.
+ */
+ static final Logger logger = SystemLogger.SYSTEM;
+
+ /**
+ * requesting-user-name defaults to the executing user.
+ */
+ public static final RequestingUserName REQUESTING_USER_NAME;
+
+ /**
+ * job-name defaults to "Java Printing".
+ */
+ public static final JobName JOB_NAME;
+
+ static
+ {
+ JOB_NAME = new JobName("Java Printing", null);
+ REQUESTING_USER_NAME = new RequestingUserName(
+ SystemProperties.getProperty("user.name", ""), null);
+ }
+
+ // TODO Implement service listener notification and change detection.
+
+ /**
+ * Creates a <code>IppPrintService</code> object.
+ *
+ * @param uri the URI of the IPP printer.
+ * @param username the user of this print service.
+ * @param password the password of the user.
+ *
+ * @throws IppException if an error during connection occurs.
+ */
+ public IppPrintService(URI uri, String username, String password)
+ throws IppException
+ {
+ printerUri = new PrinterURI(uri);
+ user = username;
+ passwd = password;
+
+ printServiceAttributeListener = new HashSet();
+
+ printerAttr = getPrinterAttributes();
+ processResponse();
+ }
+
+ /**
+ * Fetches all printer attributes from the IPP printer.
+ *
+ * @return The Map with the printer attributes.
+ * @throws IppException if an error occurs.
+ */
+ private Map getPrinterAttributes() throws IppException
+ {
+ IppResponse response = null;
+
+ try
+ {
+ IppRequest request = new IppRequest(printerUri.getURI(), user, passwd);
+
+ int operation = OperationsSupported.GET_PRINTER_ATTRIBUTES.getValue();
+ request.setOperationID((short) operation);
+ request.setOperationAttributeDefaults();
+ request.addOperationAttribute(printerUri);
+
+ response = request.send();
+ }
+ catch (IOException e)
+ {
+ throw new IppException("IOException in IPP request/response.", e);
+ }
+
+ return (Map) response.getPrinterAttributes().get(0);
+ }
+
+ /**
+ * Extracts the set of attribute values for a given
+ * attribute category from the printer attributes map.
+ *
+ * @param attributeClass the category
+ * @return The set of attributes of the category.
+ */
+ private Set getPrinterAttributeSet(Class attributeClass)
+ {
+ return (Set) printerAttr.get(attributeClass);
+ }
+
+ /**
+ * Extracts the default attribute value for the given
+ * default attribute category from the printer attributes map.
+ *
+ * @param attributeClass the category
+ * @return The default attribute.
+ *
+ * @throws ClassCastException if attributClass is not an
+ * instance of <code>DefaultValueAttribute</code>.
+ */
+ private Attribute getPrinterDefaultAttribute(Class attributeClass)
+ {
+ Set set = (Set) printerAttr.get(attributeClass);
+ return ((DefaultValueAttribute) set.toArray()[0]).getAssociatedAttribute();
+ }
+
+ /**
+ * Processes the response, sorts and splits the attributes.
+ */
+ private void processResponse()
+ {
+ // printer name
+ PrinterName[] tmp = (PrinterName[]) getPrinterAttributeSet(
+ PrinterName.class).toArray(new PrinterName[1]);
+ name = tmp[0].getValue();
+
+ // supported flavors
+ // TODO Check if charsets-supported are charsets that are actually supported
+ // for text doc flavors as cups doesn't send charset parameters
+
+ // utf-8 is supported at least - so we go with this only for now
+ flavors = new ArrayList();
+ Set flavorAttributes = getPrinterAttributeSet(DocumentFormatSupported.class);
+ if (flavorAttributes != null)
+ {
+ for (Iterator it = flavorAttributes.iterator(); it.hasNext();)
+ {
+ String mimeType = ((DocumentFormatSupported) it.next()).getValue();
+
+ if (mimeType.equals("text/plain"))
+ {
+ flavors.add(DocFlavor.CHAR_ARRAY.TEXT_PLAIN);
+ flavors.add(DocFlavor.READER.TEXT_PLAIN);
+ flavors.add(DocFlavor.STRING.TEXT_PLAIN);
+
+ // add utf-8
+ mimeType = mimeType + "; charset=utf-8";
+ }
+ else if (mimeType.equals("text/html"))
+ {
+ flavors.add(DocFlavor.CHAR_ARRAY.TEXT_HTML);
+ flavors.add(DocFlavor.READER.TEXT_HTML);
+ flavors.add(DocFlavor.STRING.TEXT_HTML);
+
+ // add utf-8
+ mimeType = mimeType + "; charset=utf-8";
+ }
+
+ // Process the predefined DocFlavors and if mimetype is
+ // equal put them into the flavors array - otherwise
+ // just build them as binarie class representation.
+ boolean changed = false;
+ try
+ {
+ Class[] clazzes = new Class[] { DocFlavor.BYTE_ARRAY.class,
+ DocFlavor.INPUT_STREAM.class,
+ DocFlavor.URL.class };
+
+ for (int j = 0; j < clazzes.length; j++)
+ {
+ Field[] fields = clazzes[j].getDeclaredFields();
+ for (int i = 0; i < fields.length; i++)
+ {
+ if (fields[i].getType().equals(clazzes[j]))
+ {
+ DocFlavor flavor = (DocFlavor) fields[i].get(null);
+ if (flavor.getMimeType().equals(mimeType))
+ changed = flavors.add(flavor);
+ }
+ }
+ }
+ if (!changed) // not in predefined constants of DocFlavor
+ {
+ // everything should be supported as binary stuff
+ flavors.add(new DocFlavor(mimeType, "[B"));
+ flavors.add(new DocFlavor(mimeType, "java.io.InputStream"));
+ flavors.add(new DocFlavor(mimeType, "java.net.URL"));
+ }
+ }
+ catch (SecurityException e)
+ {
+ // should not happen
+ }
+ catch (IllegalArgumentException e)
+ {
+ // should not happen
+ }
+ catch (IllegalAccessException e)
+ {
+ // should not happen, all fields are public
+ }
+ }
+ }
+
+ // printer uris
+ Set uris = getPrinterAttributeSet(PrinterUriSupported.class);
+ printerUris = new ArrayList(uris.size());
+ Iterator it = uris.iterator();
+ while (it.hasNext())
+ {
+ PrinterUriSupported uri = (PrinterUriSupported) it.next();
+ printerUris.add( new PrinterURI(uri.getURI()));
+ }
+ }
+
+ /**
+ * We always return a implementation implementing CancelablePrintJob.
+ *
+ * @see javax.print.PrintService#createPrintJob()
+ */
+ public DocPrintJob createPrintJob()
+ {
+ return new DocPrintJobImpl(this, user, passwd);
+ }
+
+
+ /**
+ * @see javax.print.PrintService#getAttribute(java.lang.Class)
+ */
+ public PrintServiceAttribute getAttribute(Class category)
+ {
+ if (category == null)
+ throw new NullPointerException("category may not be null");
+
+ if (! PrintServiceAttribute.class.isAssignableFrom(category))
+ throw new IllegalArgumentException(
+ "category must be of type PrintServiceAttribute");
+
+ Set set = getPrinterAttributeSet(category);
+ if (set != null && set.size() > 0)
+ return (PrintServiceAttribute) set.toArray()[0];
+
+ return null;
+ }
+
+ /**
+ * @see javax.print.PrintService#getAttributes()
+ */
+ public PrintServiceAttributeSet getAttributes()
+ {
+ PrintServiceAttributeSet set = new HashPrintServiceAttributeSet();
+
+ Iterator it = printerAttr.values().iterator();
+ while (it.hasNext())
+ {
+ Iterator it2 = ((Set) it.next()).iterator();
+ while (it2.hasNext())
+ {
+ Attribute attr = (Attribute) it2.next();
+ if (attr instanceof PrintServiceAttribute)
+ set.add(attr);
+ }
+ }
+
+ return AttributeSetUtilities.unmodifiableView(set);
+ }
+
+ /**
+ * @see javax.print.PrintService#getDefaultAttributeValue(java.lang.Class)
+ */
+ public Object getDefaultAttributeValue(Class category)
+ {
+ // required attributes
+ if (category.equals(Fidelity.class))
+ return Fidelity.FIDELITY_FALSE;
+ if (category.equals(JobName.class))
+ return JOB_NAME;
+ if (category.equals(RequestingUserName.class))
+ return REQUESTING_USER_NAME;
+
+ // optional attributes
+ if (category.equals(JobPriority.class)
+ && printerAttr.containsKey(JobPriorityDefault.class))
+ return getPrinterDefaultAttribute(JobPriorityDefault.class);
+ if (category.equals(JobHoldUntil.class)
+ && printerAttr.containsKey(JobHoldUntilDefault.class))
+ return getPrinterDefaultAttribute(JobHoldUntilDefault.class);
+ if (category.equals(JobSheets.class)
+ && printerAttr.containsKey(JobSheetsDefault.class))
+ return getPrinterDefaultAttribute(JobSheetsDefault .class);
+ if (category.equals(MultipleDocumentHandling.class)
+ && printerAttr.containsKey(MultipleDocumentHandlingDefault.class))
+ return getPrinterDefaultAttribute(MultipleDocumentHandlingDefault.class);
+ if (category.equals(Copies.class)
+ && printerAttr.containsKey(CopiesDefault.class))
+ return getPrinterDefaultAttribute(CopiesDefault.class);
+ if (category.equals(Finishings.class)
+ && printerAttr.containsKey(FinishingsDefault.class))
+ return getPrinterDefaultAttribute(FinishingsDefault.class);
+ if (category.equals(Sides.class)
+ && printerAttr.containsKey(SidesDefault.class))
+ return getPrinterDefaultAttribute(SidesDefault.class);
+ if (category.equals(NumberUp.class)
+ && printerAttr.containsKey(NumberUpDefault.class))
+ return getPrinterDefaultAttribute(NumberUpDefault.class);
+ if (category.equals(OrientationRequested.class)
+ && printerAttr.containsKey(OrientationRequestedDefault.class))
+ return getPrinterDefaultAttribute(OrientationRequestedDefault.class);
+ if (category.equals(Media.class)
+ && printerAttr.containsKey(MediaDefault.class))
+ return getPrinterDefaultAttribute(MediaDefault.class);
+ if (category.equals(PrinterResolution.class)
+ && printerAttr.containsKey(PrinterResolutionDefault.class))
+ return getPrinterDefaultAttribute(PrinterResolutionDefault.class);
+ if (category.equals(PrintQuality.class)
+ && printerAttr.containsKey(PrintQualityDefault.class))
+ return getPrinterDefaultAttribute(PrintQualityDefault.class);
+ if (category.equals(Compression.class)
+ && printerAttr.containsKey(CompressionSupported.class))
+ return Compression.NONE;
+ if (category.equals(PageRanges.class))
+ return new PageRanges(1, Integer.MAX_VALUE);
+
+ return null;
+ }
+
+ /**
+ * We return the value of <code>PrinterName</code> here.
+ * @see javax.print.PrintService#getName()
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * We currently provide no factories - just returns null.
+ * @see javax.print.PrintService#getServiceUIFactory()
+ */
+ public ServiceUIFactory getServiceUIFactory()
+ {
+ // SUN does not provide any service factory for
+ // print services (tested on linux/windows)
+
+ // for the moment we do the same - just return null
+ // later on we could provide at least the about UI dialog
+ return null;
+ }
+
+ /**
+ * @see javax.print.PrintService#getSupportedAttributeCategories()
+ */
+ public Class[] getSupportedAttributeCategories()
+ {
+ Set categories = new HashSet();
+
+ // Should only be job template attributes as of section 4.2
+ if (printerAttr.containsKey(JobPrioritySupported.class))
+ categories.add(JobPriority.class);
+ if (printerAttr.containsKey(JobHoldUntilSupported.class))
+ categories.add(JobHoldUntil.class);
+ if (printerAttr.containsKey(JobSheetsSupported.class))
+ categories.add(JobSheets.class);
+ if (printerAttr.containsKey(MultipleDocumentHandlingSupported.class))
+ categories.add(MultipleDocumentHandling.class);
+ if (printerAttr.containsKey(CopiesSupported.class))
+ categories.add(Copies.class);
+ if (printerAttr.containsKey(FinishingsSupported.class))
+ {
+ // if only none finishing is supported - it does not count as supported
+ Set set = getPrinterAttributeSet(FinishingsSupported.class);
+ if (! (set.size() == 1 && set.contains(FinishingsSupported.NONE)))
+ categories.add(Finishings.class);
+ }
+ if (printerAttr.containsKey(PageRangesSupported.class))
+ categories.add(PageRanges.class);
+ if (printerAttr.containsKey(SidesSupported.class))
+ categories.add(Sides.class);
+ if (printerAttr.containsKey(NumberUpSupported.class))
+ categories.add(NumberUp.class);
+ if (printerAttr.containsKey(OrientationRequestedSupported.class))
+ categories.add(OrientationRequested.class);
+ if (printerAttr.containsKey(MediaSupported.class))
+ categories.add(Media.class);
+ if (printerAttr.containsKey(PrinterResolutionSupported.class))
+ categories.add(PrinterResolution.class);
+ if (printerAttr.containsKey(PrintQualitySupported.class))
+ categories.add(PrintQuality.class);
+
+ // Chromaticity, Destination, MediaPrintableArea,
+ // SheetCollate, PresentationDirection - not IPP attributes
+
+ // attributes outside section 4.2
+ if (printerAttr.containsKey(CompressionSupported.class))
+ categories.add(Compression.class);
+ if (printerAttr.containsKey(JobImpressionsSupported.class))
+ categories.add(JobImpressions.class);
+ if (printerAttr.containsKey(JobKOctetsSupported.class))
+ categories.add(JobKOctets.class);
+ if (printerAttr.containsKey(JobMediaSheetsSupported.class))
+ categories.add(JobMediaSheets.class);
+
+ // always supported as required by IPP specification
+ categories.add(Fidelity.class);
+ categories.add(JobName.class);
+ categories.add(RequestingUserName.class);
+
+ return (Class[]) categories.toArray(new Class[categories.size()]);
+ }
+
+ /**
+ * Implemented by a GetPrinterAttributes request. Subclasses providing supported
+ * attribute values totally different may override this methods. Subclass only in
+ * need of handling the response differently may override the method
+ * <code>handleSupportedAttributeValuesResponse(IppResponse, Class)</code> only.
+ *
+ * @see PrintService#getSupportedAttributeValues(Class, DocFlavor, AttributeSet)
+ * @see #handleSupportedAttributeValuesResponse(IppResponse, Class)
+ */
+ public Object getSupportedAttributeValues(Class category, DocFlavor flavor,
+ AttributeSet attributes)
+ {
+ // We currently ignore the attribute set - there is nothing in the IPP
+ // specification which would come closer to what we do here.
+
+ if (category == null)
+ throw new NullPointerException("category may not be null");
+
+ if (!Attribute.class.isAssignableFrom(category))
+ throw new IllegalArgumentException("category must be of type Attribute");
+
+ if (flavor != null && !isDocFlavorSupported(flavor))
+ throw new IllegalArgumentException("flavor is not supported");
+
+ if (!isAttributeCategorySupported(category))
+ return null;
+
+ // always supported
+ if (category.equals(Fidelity.class))
+ return new Fidelity[] { Fidelity.FIDELITY_FALSE, Fidelity.FIDELITY_TRUE };
+ if (category.equals(JobName.class))
+ return JOB_NAME;
+ if (category.equals(RequestingUserName.class))
+ return REQUESTING_USER_NAME;
+
+ // map category to category-supported
+ String categoryName = IppUtilities.getSupportedAttrName(category);
+
+ IppResponse response = null;
+ try
+ {
+ IppRequest request = new IppRequest(printerUri.getURI(), user, passwd);
+ request.setOperationID(
+ (short) OperationsSupported.GET_PRINTER_ATTRIBUTES.getValue());
+ request.setOperationAttributeDefaults();
+ request.addOperationAttribute(new RequestedAttributes(categoryName));
+ request.addOperationAttribute(printerUri);
+
+ if (flavor != null)
+ {
+ DocumentFormat f = DocumentFormat.createDocumentFormat(flavor);
+ request.addOperationAttribute(f);
+ }
+
+ response = request.send();
+
+ int status = response.getStatusCode();
+ if (! (status == IppStatusCode.SUCCESSFUL_OK
+ || status == IppStatusCode.SUCCESSFUL_OK_IGNORED_OR_SUBSTITUED_ATTRIBUTES
+ || status == IppStatusCode.SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES) )
+ {
+ logger.log(Component.IPP, "Statuscode not OK - got:" + status);
+ }
+ }
+ catch (IOException e)
+ {
+ // method cannot throw exception - just log
+ logger.log(Component.IPP, "IOException", e);
+ }
+ catch (IppException e)
+ {
+ // method cannot throw exception - just log
+ logger.log(Component.IPP, "IPPException", e);
+ }
+
+ return handleSupportedAttributeValuesResponse(response, category);
+ }
+
+ /**
+ * Called to handle the supported attribute values response for the given
+ * category. This might be overridden by subclasses with different requirements
+ * for parsing/handling the response from the GetPrinterAttributes.
+ *
+ * @param response the response of the GetPrinterAttributes IPP request
+ * @param category the category for which the supported values are requested
+ * @return A object indicating the supported values for the given attribute
+ * category, or <code>null</code> if this print service doesn't support the
+ * given attribute category at all.
+ *
+ * @see #getSupportedAttributeValues(Class, DocFlavor, AttributeSet)
+ */
+ protected Object handleSupportedAttributeValuesResponse(IppResponse response,
+ Class category)
+ {
+ List printerAtts = response.getPrinterAttributes();
+
+ // only one will be returned
+ Map printerAttribute = (Map) printerAtts.get(0);
+ Class suppCategory = IppUtilities.getSupportedCategory(category);
+ Set attr = (Set) printerAttribute.get(suppCategory);
+
+ // We sometime assume its a single instance with arbritrary value just indicating
+ // support or an array which is returned. This is because I sometimes just choosed
+ // what sounds right to me - as I have yet to find a printer which supports every
+ // special category in the SUN implementation to see what they return :-)
+
+ // Map whats in the JSP API
+ if (suppCategory.equals(JobPrioritySupported.class))
+ return (JobPrioritySupported) attr.toArray(new JobPrioritySupported[1])[0];
+ if (suppCategory.equals(JobHoldUntilSupported.class))
+ return new JobHoldUntil(new Date());
+ if (suppCategory.equals(JobSheetsSupported.class))
+ return JobSheetsSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(MultipleDocumentHandlingSupported.class))
+ return MultipleDocumentHandlingSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(CopiesSupported.class))
+ return (CopiesSupported) attr.toArray(new CopiesSupported[1])[0];
+ if (suppCategory.equals(FinishingsSupported.class))
+ return FinishingsSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(PageRangesSupported.class))
+ return new PageRanges[] { new PageRanges(1, Integer.MAX_VALUE) };
+ if (suppCategory.equals(OrientationRequestedSupported.class))
+ return OrientationRequestedSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(MediaSupported.class))
+ return MediaSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(PrinterResolutionSupported.class))
+ return PrinterResolutionSupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(PrintQualitySupported.class))
+ return PrintQualitySupported.getAssociatedAttributeArray(attr);
+ if (suppCategory.equals(CompressionSupported.class))
+ return CompressionSupported.getAssociatedAttributeArray(attr);
+ // Special handling as it might also be in range of integers
+ if (suppCategory.equals(NumberUpSupported.class))
+ {
+ NumberUpSupported[] tmp = (NumberUpSupported[])
+ attr.toArray(new NumberUpSupported[attr.size()]);
+
+ if (attr.size() == 1) // number-up maybe in rangeofintegers
+ return tmp[0];
+
+ int[][] members = new int[attr.size()][2];
+ for (int j = 0; j < attr.size(); j++)
+ {
+ int value = tmp[j].getMembers()[0][0];
+ members[j] = new int[] { value, value };
+ }
+
+ NumberUpSupported supported = new NumberUpSupported(members);
+ return supported;
+ }
+
+ return null;
+ }
+
+ /**
+ * @see javax.print.PrintService#getSupportedDocFlavors()
+ */
+ public DocFlavor[] getSupportedDocFlavors()
+ {
+ return (DocFlavor[]) flavors.toArray(new DocFlavor[flavors.size()]);
+ }
+
+ /**
+ * This is done by a validate-job operation and actually implemented in
+ * this generic IPP reference implementation. Subclasses which does
+ * not correctly support Validate-Job operation might want to override this.
+ *
+ * @see PrintService#getUnsupportedAttributes(DocFlavor, AttributeSet)
+ */
+ public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
+ AttributeSet attributes)
+ {
+ if (flavor != null && !isDocFlavorSupported(flavor))
+ throw new IllegalArgumentException("flavor is not supported");
+
+ IppResponse response = null;
+ try
+ {
+ IppRequest request = new IppRequest(printerUri.getURI(), user, passwd);
+ short operationId = (short) OperationsSupported.VALIDATE_JOB.getValue();
+ request.setOperationID(operationId);
+ request.setOperationAttributeDefaults();
+ request.addOperationAttribute(printerUri);
+ request.addOperationAttribute(Fidelity.FIDELITY_TRUE);
+
+ if (attributes != null && attributes.size() > 0)
+ {
+ request.addAndFilterJobOperationAttributes(attributes);
+ request.addAndFilterJobTemplateAttributes(attributes);
+ }
+
+ if (flavor != null)
+ {
+ DocumentFormat f = DocumentFormat.createDocumentFormat(flavor);
+ request.addOperationAttribute(f);
+ }
+
+ response = request.send();
+
+ int status = response.getStatusCode();
+ if (! (status == IppStatusCode.SUCCESSFUL_OK
+ || status == IppStatusCode.SUCCESSFUL_OK_IGNORED_OR_SUBSTITUED_ATTRIBUTES
+ || status == IppStatusCode.SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES) )
+ {
+ logger.log(Component.IPP, "Statuscode not OK - got:" + status);
+ }
+ }
+ catch (IOException e)
+ {
+ // method cannot throw exception - just log
+ logger.log(Component.IPP, "IOException", e);
+ }
+ catch (IppException e)
+ {
+ // method cannot throw exception - just log
+ logger.log(Component.IPP, "IPPException", e);
+ }
+
+ // Validate Jobs returns only Unsupported and Operation
+ List unsupportedMaps = response.getUnsupportedAttributes();
+ if (unsupportedMaps.size() == 0)
+ return null;
+
+ Map unsupportedAttr = (Map) unsupportedMaps.get(0);
+ if (unsupportedAttr.size() == 0)
+ return null;
+
+ // Convert the return map with unsupported attributes
+ // into an AttribueSet instance
+ HashAttributeSet set = new HashAttributeSet();
+ Iterator it = unsupportedAttr.values().iterator();
+ while (it.hasNext())
+ {
+ Set unsupported = (Set) it.next();
+ Iterator it2 = unsupported.iterator();
+ while (it2.hasNext())
+ set.add((Attribute) it2.next());
+ }
+
+ return set;
+ }
+
+ /**
+ * @see PrintService#isAttributeCategorySupported(Class)
+ */
+ public boolean isAttributeCategorySupported(Class category)
+ {
+ if (category == null)
+ throw new NullPointerException("category may not be null");
+
+ if (! Attribute.class.isAssignableFrom(category))
+ throw new IllegalArgumentException("category must be of type Attribute");
+
+ return Arrays.asList(getSupportedAttributeCategories()).contains(category);
+ }
+
+ /**
+ * @see PrintService#isAttributeValueSupported(Attribute, DocFlavor, AttributeSet)
+ */
+ public boolean isAttributeValueSupported(Attribute attrval, DocFlavor flavor,
+ AttributeSet attributes)
+ {
+ // just redirect to getSupportedAttributeValues
+ Object values = getSupportedAttributeValues(attrval.getCategory(),
+ flavor, attributes);
+ // null means none supported
+ if (values == null)
+ return false;
+
+ // object may be an array
+ if (values.getClass().isArray())
+ return Arrays.asList((Object[]) values).contains(attrval);
+
+ // may be a single instance of the category (value is irrelevant)
+ if (values.getClass().equals(attrval.getCategory()))
+ return true;
+
+ // a single instance of another class to give the bounds
+ // copies
+ if (values.getClass().equals(CopiesSupported.class))
+ return ((CopiesSupported) values).contains((IntegerSyntax) attrval);
+ // number up
+ if (values.getClass().equals(NumberUpSupported.class))
+ return ((NumberUpSupported) values).contains((IntegerSyntax) attrval);
+ // job priority
+ if (values.getClass().equals(JobPrioritySupported.class))
+ {
+ JobPriority priority = (JobPriority) attrval;
+ JobPrioritySupported maxSupported = (JobPrioritySupported) values;
+ if (priority.getValue() < maxSupported.getValue())
+ return true;
+ }
+
+ // I am unsure if these might also show up - not yet found a printer where
+ // Suns implementation supports them:
+ // JobImpressionsSupported, JobKOctetsSupported, JobMediaSheetsSupported
+
+ return false;
+ }
+
+
+ /**
+ * @see javax.print.PrintService#isDocFlavorSupported(DocFlavor)
+ */
+ public boolean isDocFlavorSupported(DocFlavor flavor)
+ {
+ if (flavor == null)
+ throw new NullPointerException("DocFlavor may not be null.");
+
+ return flavors.contains(flavor);
+ }
+
+
+ /**
+ * @see PrintService#addPrintServiceAttributeListener(PrintServiceAttributeListener)
+ */
+ public void addPrintServiceAttributeListener(
+ PrintServiceAttributeListener listener)
+ {
+ printServiceAttributeListener.add(listener);
+ }
+
+ /**
+ * @see PrintService#removePrintServiceAttributeListener(PrintServiceAttributeListener)
+ */
+ public void removePrintServiceAttributeListener(
+ PrintServiceAttributeListener listener)
+ {
+ printServiceAttributeListener.remove(listener);
+ }
+
+ /**
+ * Returns "IppPrinter: " + <code>getName()</code>
+ * @return The string representation.
+ */
+ public String toString()
+ {
+ return "IppPrinter: " + getName();
+ }
+
+ /**
+ * Returns the printer-uri of this print service.
+ *
+ * @return The printer-uri attribute.
+ */
+ public PrinterURI getPrinterURI()
+ {
+ return printerUri;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppRequest.java b/libjava/classpath/gnu/javax/print/ipp/IppRequest.java
new file mode 100644
index 0000000..8abab51
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppRequest.java
@@ -0,0 +1,857 @@
+/* IppRequest.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import gnu.classpath.debug.Component;
+import gnu.classpath.debug.SystemLogger;
+import gnu.javax.print.ipp.attribute.CharsetSyntax;
+import gnu.javax.print.ipp.attribute.NaturalLanguageSyntax;
+import gnu.javax.print.ipp.attribute.RequestedAttributes;
+import gnu.javax.print.ipp.attribute.job.AttributesCharset;
+import gnu.javax.print.ipp.attribute.job.AttributesNaturalLanguage;
+import gnu.javax.print.ipp.attribute.job.JobId;
+import gnu.javax.print.ipp.attribute.job.JobUri;
+import gnu.javax.print.ipp.attribute.printer.DocumentFormat;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.logging.Logger;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.AttributeSet;
+import javax.print.attribute.DateTimeSyntax;
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.HashAttributeSet;
+import javax.print.attribute.IntegerSyntax;
+import javax.print.attribute.ResolutionSyntax;
+import javax.print.attribute.SetOfIntegerSyntax;
+import javax.print.attribute.TextSyntax;
+import javax.print.attribute.URISyntax;
+import javax.print.attribute.standard.Compression;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.DocumentName;
+import javax.print.attribute.standard.Fidelity;
+import javax.print.attribute.standard.Finishings;
+import javax.print.attribute.standard.JobHoldUntil;
+import javax.print.attribute.standard.JobImpressions;
+import javax.print.attribute.standard.JobKOctets;
+import javax.print.attribute.standard.JobMediaSheets;
+import javax.print.attribute.standard.JobName;
+import javax.print.attribute.standard.JobOriginatingUserName;
+import javax.print.attribute.standard.JobPriority;
+import javax.print.attribute.standard.JobSheets;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MultipleDocumentHandling;
+import javax.print.attribute.standard.NumberUp;
+import javax.print.attribute.standard.OrientationRequested;
+import javax.print.attribute.standard.PageRanges;
+import javax.print.attribute.standard.PrintQuality;
+import javax.print.attribute.standard.PrinterResolution;
+import javax.print.attribute.standard.PrinterURI;
+import javax.print.attribute.standard.RequestingUserName;
+import javax.print.attribute.standard.SheetCollate;
+import javax.print.attribute.standard.Sides;
+
+/**
+ * <code>IppRequest</code> models a request to an IPP compatible
+ * server as described in RFC 2910 - IPP/1.1: Encoding and Transport.
+ * <p>
+ * The byte stream is structured as follows (for an official description
+ * please have a look at the RFC document mentioned above):
+ * <ul>
+ * <li>version-number - 2 bytes - required</li>
+ * <li>operation-id - 2 bytes - required</li>
+ * <li>request-id - 4 bytes - required</li>
+ * <li>attribute-group - n bytes - 0 or more</li>
+ * <li>end-of-attributes-tag - 1 byte - required</li>
+ * <li>data - q bytes - optional</li>
+ * </ul>
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class IppRequest
+{
+
+ /**
+ * Helper class used to write the attributes of a request
+ * into the supplied data output stream in the correct way.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ class RequestWriter
+ {
+ private DataOutputStream out;
+
+ /**
+ * Creates a RequestWriter.
+ *
+ * @param stream the stream to write to.
+ */
+ RequestWriter(DataOutputStream stream)
+ {
+ out = stream;
+ }
+
+ /**
+ * Writes an attribute in IntegerSyntax into the stream.
+ * @param attribute the attribute
+ * @throws IOException if thrown by the stream
+ */
+ private void write(IntegerSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.INTEGER);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(4); // length, integer is 4 bytes
+ out.writeInt(attribute.getValue());
+ }
+
+ /**
+ * Writes an attribute in EnumSyntax into the stream.
+ * @param attribute the attribute
+ * @throws IOException if thrown by the stream
+ */
+ private void write(EnumSyntax attribute) throws IOException
+ {
+ // in JPS API enum syntax is used for enums, keyword and boolean types
+ String name = ((Attribute) attribute).getName();
+
+ // the enum value types
+ if (attribute instanceof Finishings
+ || attribute instanceof OrientationRequested
+ || attribute instanceof PrintQuality)
+ {
+ out.writeByte(IppValueTag.ENUM);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(4); // length, enum is 4 bytes
+ out.writeInt(attribute.getValue());
+ }
+ // the boolean value type
+ else if (attribute instanceof Fidelity)
+ {
+ out.writeByte(IppValueTag.BOOLEAN);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(1); // length, boolean is 1 bytes
+ out.writeByte(attribute.getValue() == 0 ? 0x00 : 0x01);
+ }
+ // the keyword value types
+ else
+ {
+ String keyword = attribute.toString();
+ out.writeByte(IppValueTag.KEYWORD);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(keyword.length());
+ out.write(keyword.getBytes());
+ }
+ }
+
+ /**
+ * Writes an attribute in SetOfIntegerSyntax into the stream.
+ * @param attribute the attribute
+ * @throws IOException if thrown by the stream
+ */
+ private void write(SetOfIntegerSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ int[][] ranges = attribute.getMembers();
+ for (int i = 0; i < ranges.length; i++)
+ {
+ out.writeByte(IppValueTag.RANGEOFINTEGER);
+ if (i == 0)
+ {
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ }
+ else
+ out.writeShort(0x0000); // only name-length
+
+ out.writeShort(8); // range is 8 bytes
+ out.writeInt(ranges[i][0]);
+ out.writeInt(ranges[i][1]);
+ }
+ }
+
+ /**
+ * Writes an attribute in ResolutionSyntax into the stream.
+ * @param attribute the attribute
+ * @throws IOException if thrown by the stream
+ */
+ private void write(ResolutionSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.RESOLUTION);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(9); // length fixed to 9
+ out.writeInt(attribute.getCrossFeedResolution(ResolutionSyntax.DPI));
+ out.writeInt(attribute.getFeedResolution(ResolutionSyntax.DPI));
+ out.writeByte(ResolutionSyntax.DPI);
+ }
+
+ /**
+ * Writes an attribute in DateTimeSyntax into the stream.
+ * <p>
+ * The syntax value is defined as 11 octets follwing the
+ * DateAndTime format of RFC 1903. (see IppResponse)
+ * </p>
+ *
+ * @param attribute the attribute
+ * @throws IOException if thrown by the stream
+ */
+ private void write(DateTimeSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.DATETIME);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(11); // length fixed to 11
+
+ Date date = attribute.getValue();
+ Calendar cal = new GregorianCalendar();
+ cal.setTime(date);
+
+ out.writeShort(cal.get(Calendar.YEAR));
+ out.writeByte(cal.get(Calendar.MONTH));
+ out.writeByte(cal.get(Calendar.DAY_OF_MONTH));
+ out.writeByte(cal.get(Calendar.HOUR_OF_DAY));
+ out.writeByte(cal.get(Calendar.MINUTE));
+ int second = cal.get(Calendar.SECOND);
+ out.writeByte(second == 0 ? 60 : second);
+ out.writeByte(cal.get(Calendar.MILLISECOND) / 100);
+
+ int offsetInMillis = cal.get(Calendar.ZONE_OFFSET);
+ char directionFromUTC = '+';
+ if (offsetInMillis < 0)
+ {
+ directionFromUTC = '-';
+ offsetInMillis = offsetInMillis * (-1);
+ }
+
+ out.writeByte(directionFromUTC);
+ out.writeByte(offsetInMillis / 3600000); // hours
+ out.writeByte((offsetInMillis % 3600000) / 60000); // minutes
+ }
+
+ /**
+ * Writes an attribute in TextSyntax into the stream.
+ * <p>
+ * By default attributes are qritten as TEXT_WITHOUT_LANGUAGE value-tag.
+ * As some attributes in the JPS are TextSyntax attributes but actually
+ * of NAME value-tag in IPP this method checks for these attributes and
+ * writes them as NAME_WITHOUT_LANGUAGE value-tag into the stream.
+ * </p>
+ *
+ * @param attribute the attribute
+ * @param out the stream to write to
+ * @throws IOException if thrown by the stream
+ */
+ private void write(TextSyntax attribute) throws IOException
+ {
+ // We only use *WithoutLanguage, correct according to spec.
+ String name = ((Attribute) attribute).getName();
+
+ if (attribute instanceof RequestingUserName
+ || attribute instanceof JobName
+ || attribute instanceof DocumentName
+ || attribute instanceof JobOriginatingUserName)
+ out.writeByte(IppValueTag.NAME_WITHOUT_LANGUAGE);
+ else if (attribute instanceof DocumentFormat)
+ out.writeByte(IppValueTag.MIME_MEDIA_TYPE);
+ else
+ out.writeByte(IppValueTag.TEXT_WITHOUT_LANGUAGE);
+
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(attribute.getValue().length());
+ out.write(attribute.getValue().getBytes());
+ }
+
+ /**
+ * Writes an attribute in URISyntax into the stream.
+ * @param attribute the attribute
+ * @param out the stream to write to
+ * @throws IOException if thrown by the stream
+ */
+ private void write(URISyntax attribute) throws IOException
+ {
+ // only uriScheme syntax type should not appear
+ // in a request (reference-uri-schemes-supported)
+ String name = ((Attribute) attribute).getName();
+ String uriAscii = attribute.getURI().toASCIIString();
+ out.writeByte(IppValueTag.URI);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(uriAscii.length());
+ out.write(uriAscii.getBytes());
+ }
+
+ /**
+ * Writes an attribute in CharsetSyntax into the stream.
+ * @param attribute the attribute
+ * @param out the stream to write to
+ * @throws IOException if thrown by the stream
+ */
+ private void write(CharsetSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.CHARSET);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(attribute.getValue().length());
+ out.write(attribute.getValue().getBytes());
+ }
+
+ /**
+ * Writes an attribute in NaturalLanguageSyntax into the stream.
+ * @param attribute the attribute
+ * @param out the stream to write to
+ * @throws IOException if thrown by the stream
+ */
+ private void write(NaturalLanguageSyntax attribute) throws IOException
+ {
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.NATURAL_LANGUAGE);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(attribute.getValue().length());
+ out.write(attribute.getValue().getBytes());
+ }
+
+ /**
+ * Writes an attribute in RequestedAttributes into the stream.
+ * @param attribute the attribute
+ * @param out the stream to write to
+ * @throws IOException if thrown by the stream
+ */
+ private void write(RequestedAttributes attribute) throws IOException
+ {
+ List values = attribute.getValues();
+
+ String name = ((Attribute) attribute).getName();
+ out.writeByte(IppValueTag.KEYWORD);
+ out.writeShort(name.length());
+ out.write(name.getBytes());
+ out.writeShort(((String) values.get(0)).length());
+ out.write(((String) values.get(0)).getBytes());
+
+ for (int i=1; i < values.size(); i++)
+ {
+ out.writeByte(IppValueTag.KEYWORD);
+ out.writeShort(0x0000); // length for additional value
+ out.writeShort(((String) values.get(i)).length());
+ out.write(((String) values.get(i)).getBytes());
+ }
+ }
+
+
+ /**
+ * Writes the given operation attribute group of the given map instance
+ * (key=group, values=set of attributes) into the supplied data
+ * output stream.
+ *
+ * @param attributes the set with the attributes.
+ *
+ * @throws IOException if thrown by the used DataOutputStream.
+ * @throws IppException if unknown attributes occur.
+ */
+ public void writeOperationAttributes(AttributeSet attributes)
+ throws IOException, IppException
+ {
+ out.write(IppDelimiterTag.OPERATION_ATTRIBUTES_TAG);
+
+ // its essential to write these two in this order and as first ones
+ Attribute att = attributes.get(AttributesCharset.class);
+ write((CharsetSyntax) att);
+
+ logger.log(Component.IPP, "Attribute: Name: <"
+ + att.getCategory().getName() + "> Value: <" + att.toString() + ">");
+
+ attributes.remove(AttributesCharset.class);
+
+ att = attributes.get(AttributesNaturalLanguage.class);
+ write((NaturalLanguageSyntax) att);
+ attributes.remove(AttributesNaturalLanguage.class);
+
+ logger.log(Component.IPP, "Attribute: Name: <"
+ + att.getCategory().getName() + "> Value: <" + att.toString() + ">");
+
+ // furthermore its essential to now write out the target attribute
+ PrinterURI printerUri = (PrinterURI) attributes.get(PrinterURI.class);
+ JobUri jobUri = (JobUri) attributes.get(JobUri.class);
+ JobId jobId = (JobId) attributes.get(JobId.class);
+ if (printerUri != null && jobId == null && jobUri == null)
+ {
+ write(printerUri);
+ attributes.remove(PrinterURI.class);
+ logger.log(Component.IPP, "Attribute: Name: <" + printerUri
+ .getCategory().getName() + "> Value: <" + printerUri.toString() + ">");
+ }
+ else if (jobUri != null && jobId == null && printerUri == null)
+ {
+ write(jobUri);
+ attributes.remove(JobUri.class);
+ logger.log(Component.IPP, "Attribute: Name: <" + jobUri
+ .getCategory().getName() + "> Value: <" + jobUri.toString() + ">");
+ }
+ else if (printerUri != null && jobId != null && jobUri == null)
+ {
+ write(printerUri); // must be third
+ write(jobId);
+ attributes.remove(PrinterURI.class);
+ attributes.remove(JobId.class);
+ logger.log(Component.IPP, "Attribute: Name: <" + printerUri
+ .getCategory().getName() + "> Value: <" + printerUri.toString() + ">");
+ logger.log(Component.IPP, "Attribute: Name: <" + jobId.getCategory()
+ .getName() + "> Value: <" + jobId.toString() + ">");
+ }
+ else if (jobUri != null && jobId != null)
+ {
+ write(jobUri);
+ attributes.remove(JobUri.class);
+ attributes.remove(JobId.class); // MUST NOT redundant
+ logger.log(Component.IPP, "Attribute: Name: <" + jobUri.getCategory()
+ .getName() + "> Value: <" + jobUri.toString() + ">");
+ }
+ else
+ {
+ new IppException("Unknown target operation attribute combination.");
+ }
+
+ writeAttributes(attributes);
+ }
+
+ /**
+ * Writes the given attribute groups of the given map instance
+ * (key=group, values=set of attributes) into the supplied data
+ * output stream.
+ *
+ * @param attributes the set with the attributes.
+ *
+ * @throws IOException if thrown by the used DataOutputStream.
+ * @throws IppException if unknown attributes occur.
+ */
+ public void writeAttributes(AttributeSet attributes)
+ throws IOException, IppException
+ {
+ Attribute[] attributeArray = attributes.toArray();
+ for (int i = 0; i < attributeArray.length; i++)
+ {
+ logger.log(Component.IPP, "Attribute: Name: <" + attributeArray[i]
+ .getCategory().getName() + "> Value: <"
+ + attributeArray[i].toString() + ">");
+
+ if (attributeArray[i] instanceof IntegerSyntax)
+ write((IntegerSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof TextSyntax)
+ write((TextSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof DateTimeSyntax)
+ write((DateTimeSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof ResolutionSyntax)
+ write((ResolutionSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof SetOfIntegerSyntax)
+ write((SetOfIntegerSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof EnumSyntax)
+ write((EnumSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof URISyntax)
+ write((URISyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof CharsetSyntax)
+ write((CharsetSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof NaturalLanguageSyntax)
+ write((NaturalLanguageSyntax) attributeArray[i]);
+ else if (attributeArray[i] instanceof RequestedAttributes)
+ write((RequestedAttributes) attributeArray[i]);
+ else
+ throw new IppException("Unknown syntax type");
+ }
+ }
+
+ }
+
+ /**
+ * Logger for tracing - enable by passing
+ * -Dgnu.classpath.debug.components=ipp to the vm.
+ */
+ static final Logger logger = SystemLogger.SYSTEM;
+
+ /**
+ * The request id counter simply counts up
+ * to give unique request ids per JVM instance.
+ */
+ private static int requestIdCounter = 1;
+
+ /** The IPP version defaults to 1.1 */
+ private static final short VERSION = 0x0101;
+
+ /** Signals if the request is already on its way */
+ private boolean alreadySent = false;
+
+ /** The operation type of this request. */
+ private short operation_id;
+
+ /**
+ * The request id of this request. This is
+ * assigned automatically by the constructor.
+ */
+ private final int request_id;
+
+ private AttributeSet operationAttributes;
+
+ private AttributeSet printerAttributes;
+
+ private AttributeSet jobAttributes;
+
+ private Object data;
+
+ private URI requestUri;
+
+ /** The underlying connection - IPP is http based */
+ private HttpURLConnection connection;
+
+ /**
+ * Creates an IPPRequest instance.
+ *
+ * @param uri the URI of the request
+ * @param user the user if any
+ * @param password the password of the supplied user
+ */
+ public IppRequest(URI uri, String user, String password)
+ {
+ request_id = incrementRequestIdCounter();
+ requestUri = uri;
+
+ try
+ {
+ URL url = new URL("http",
+ user == null
+ ? uri.getHost() : user + ":"
+ + password + "@" + uri.getHost(),
+ uri.getPort(), uri.getPath());
+
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("POST");
+ connection.setDoOutput(true);
+
+ connection.setRequestProperty("Content-type", "application/ipp");
+ connection.setRequestProperty("Accept", "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2");
+ }
+ catch (IOException e)
+ {
+ // MalformedURLException - uri is already checked
+ // ProtocolException - POST is correct method type
+ // IOException -HTTPURLConnection constructor actually
+ // does never throw this exception.
+ logger.log(Component.IPP, "Unexpected IOException", e);
+ }
+
+ logger.log(Component.IPP, "[IppConnection] Host: " + uri.getHost()
+ + " Port: " + uri.getPort() + " Path: "
+ + uri.getPath());
+ }
+
+ /**
+ * Synchronized method to be called by the constructor
+ * to assign a unique request id to this request.
+ *
+ * @return The unique request id.
+ */
+ private synchronized int incrementRequestIdCounter()
+ {
+ return IppRequest.requestIdCounter++;
+ }
+
+ /**
+ * Returns the id of this request.
+ *
+ * @return The request ID.
+ */
+ public int getRequestID()
+ {
+ return request_id;
+ }
+
+ /**
+ * Sets the data of the request. The data used in this
+ * request will be the one of the supplied inputstream
+ * instead of the alternative byte array possibility.
+ *
+ * @param stream the input stream to use for the data.
+ */
+ public void setData(InputStream stream)
+ {
+ data = stream;
+ }
+
+ /**
+ * Sets the data of the request. The data used in this
+ * request will be the one of the supplied byte[]
+ * instead of the alternative input stream possibility.
+ *
+ * @param bytes the byte[] to use for the data.
+ */
+ public void setData(byte[] bytes)
+ {
+ data = bytes;
+ }
+
+ /**
+ * Sets the operation id for this request.
+ *
+ * @param id the operation id.
+ */
+ public void setOperationID(short id)
+ {
+ operation_id = id;
+ }
+
+ /**
+ * Adds the default values for the operation
+ * attributes "attributes-charset" and
+ * "attributes-natural-language"
+ */
+ public void setOperationAttributeDefaults()
+ {
+ if (operationAttributes == null)
+ operationAttributes = new HashAttributeSet();
+
+ operationAttributes.add(AttributesCharset.UTF8);
+ operationAttributes.add(AttributesNaturalLanguage.EN);
+ }
+
+ /**
+ * Add the job attribute of this request to the given
+ * attribute set.
+ *
+ * @param attribute the job attribute.
+ */
+ public void addJobAttribute(Attribute attribute)
+ {
+ if (jobAttributes == null)
+ jobAttributes = new HashAttributeSet();
+
+ jobAttributes.add(attribute);
+ }
+
+ /**
+ * Sets the printer attribute of this request to the given
+ * attribute set.
+ *
+ * @param attribute the printer attribute.
+ */
+ public void addPrinterAttributes(Attribute attribute)
+ {
+ if (printerAttributes == null)
+ printerAttributes = new HashAttributeSet();
+
+ printerAttributes.add(attribute);
+ }
+
+ /**
+ * Adds the given attribute to the operation attributes set.
+ *
+ * @param attribute the operation attribute to add.
+ */
+ public void addOperationAttribute(Attribute attribute)
+ {
+ if (operationAttributes == null)
+ operationAttributes = new HashAttributeSet();
+
+ operationAttributes.add(attribute);
+ }
+
+ /**
+ * Filters from the given attribute set the job operation out
+ * and adds them to the operation attributes set.
+ *
+ * @param set the attributes to filter, may not be <code>null</code>.
+ */
+ public void addAndFilterJobOperationAttributes(AttributeSet set)
+ {
+ if (operationAttributes == null)
+ operationAttributes = new HashAttributeSet();
+
+ // document-natural-language - not defined in JPS attributes
+ // document-format - specified outside, special treatment
+ Attribute[] tmp = set.toArray();
+ for (int i = 0; i < tmp.length; i++)
+ {
+ if (tmp[i].getCategory().equals(JobName.class)
+ || tmp[i].getCategory().equals(Fidelity.class)
+ || tmp[i].getCategory().equals(JobImpressions.class)
+ || tmp[i].getCategory().equals(JobKOctets.class)
+ || tmp[i].getCategory().equals(JobMediaSheets.class)
+ || tmp[i].getCategory().equals(Compression.class)
+ || tmp[i].getCategory().equals(DocumentName.class)
+ || tmp[i].getCategory().equals(RequestingUserName.class))
+
+ operationAttributes.add(tmp[i]);
+ }
+ }
+
+ /**
+ * Filters from the given attribute set the job template attributes
+ * out and adds them to the job attributes set.
+ *
+ * @param set the attributes to filter, may not be <code>null</code>.
+ */
+ public void addAndFilterJobTemplateAttributes(AttributeSet set)
+ {
+ if (jobAttributes == null)
+ jobAttributes = new HashAttributeSet();
+
+ // document-natural-language - not defined in JPS attributes
+ // document-format - specified outside, special treatment
+ Attribute[] tmp = set.toArray();
+ for (int i = 0; i < tmp.length; i++)
+ {
+ if (tmp[i].getCategory().equals(JobPriority.class)
+ || tmp[i].getCategory().equals(JobHoldUntil.class)
+ || tmp[i].getCategory().equals(JobSheets.class)
+ || tmp[i].getCategory().equals(MultipleDocumentHandling.class)
+ || tmp[i].getCategory().equals(Copies.class)
+ || tmp[i].getCategory().equals(Finishings.class)
+ || tmp[i].getCategory().equals(PageRanges.class)
+ || tmp[i].getCategory().equals(NumberUp.class)
+ || tmp[i].getCategory().equals(OrientationRequested.class)
+ || tmp[i].getCategory().equals(Media.class)
+ || tmp[i].getCategory().equals(PrinterResolution.class)
+ || tmp[i].getCategory().equals(PrintQuality.class)
+ || tmp[i].getCategory().equals(SheetCollate.class)
+ || tmp[i].getCategory().equals(Sides.class))
+
+ jobAttributes.add(tmp[i]);
+ }
+ }
+
+ /**
+ * Does some validation of the supplied parameters and then
+ * sends the request to the ipp server or service.
+ *
+ * @return The response if any.
+ *
+ * @throws IllegalStateException if request is already sent
+ * @throws IppException if connection or request failed.
+ * @throws IOException if writing of the header, attributes or footer fails.
+ */
+ public IppResponse send() throws IppException, IOException
+ {
+ if (alreadySent)
+ throw new IllegalStateException("Request is already sent");
+
+ alreadySent = true;
+
+ OutputStream stream = stream = connection.getOutputStream();
+ DataOutputStream out = new DataOutputStream(stream);
+
+ // the header 8 bytes long
+ out.writeShort(VERSION);
+ out.writeShort(operation_id);
+ out.writeInt(request_id);
+
+ logger.log(Component.IPP, "OperationID: " + Integer.toHexString(operation_id)
+ + " RequestID: " + request_id);
+
+ // Pass stuff the the attribute writer which knows how to
+ // write the attributes in correct order
+ logger.log(Component.IPP, "Operation Attributes");
+
+ RequestWriter writer = new RequestWriter(out);
+ writer.writeOperationAttributes(operationAttributes);
+
+ if (jobAttributes != null)
+ {
+ logger.log(Component.IPP, "Job Attributes");
+ out.write(IppDelimiterTag.JOB_ATTRIBUTES_TAG);
+ writer.writeAttributes(jobAttributes);
+ }
+ if (printerAttributes != null)
+ {
+ logger.log(Component.IPP, "Printer Attributes");
+ out.write(IppDelimiterTag.PRINTER_ATTRIBUTES_TAG);
+ writer.writeAttributes(printerAttributes);
+ }
+
+ // write the delimiter to the data
+ out.write(IppDelimiterTag.END_OF_ATTRIBUTES_TAG);
+
+ // check if data is byte[] or inputstream
+ if (data instanceof InputStream)
+ {
+ byte[] readbuf = new byte[2048];
+ int len = 0;
+ while( (len = ((InputStream) data).read(readbuf)) > 0)
+ out.write(readbuf, 0, len);
+ }
+ else if (data != null)
+ {
+ out.write((byte[]) data);
+ }
+
+ out.flush();
+ stream.flush();
+
+ int responseCode = responseCode = connection.getResponseCode();
+
+ if (responseCode == HttpURLConnection.HTTP_OK)
+ {
+ IppResponse response = new IppResponse(requestUri, operation_id);
+ response.setResponseData(connection.getInputStream());
+ return response;
+ }
+
+ logger.log(Component.IPP, "HTTP-Statuscode: " + responseCode);
+
+ throw new IppException("Request failed got HTTP status code "
+ + responseCode);
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppResponse.java b/libjava/classpath/gnu/javax/print/ipp/IppResponse.java
new file mode 100644
index 0000000..21784d0
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppResponse.java
@@ -0,0 +1,778 @@
+/* IppResponse.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import gnu.classpath.debug.Component;
+import gnu.classpath.debug.SystemLogger;
+import gnu.javax.print.ipp.attribute.UnknownAttribute;
+import gnu.javax.print.ipp.attribute.defaults.DocumentFormatDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobHoldUntilDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobSheetsDefault;
+import gnu.javax.print.ipp.attribute.defaults.MediaDefault;
+import gnu.javax.print.ipp.attribute.defaults.PrinterResolutionDefault;
+import gnu.javax.print.ipp.attribute.job.AttributesCharset;
+import gnu.javax.print.ipp.attribute.job.AttributesNaturalLanguage;
+import gnu.javax.print.ipp.attribute.job.JobMoreInfo;
+import gnu.javax.print.ipp.attribute.job.JobPrinterUri;
+import gnu.javax.print.ipp.attribute.job.JobUri;
+import gnu.javax.print.ipp.attribute.printer.CharsetConfigured;
+import gnu.javax.print.ipp.attribute.printer.DocumentFormat;
+import gnu.javax.print.ipp.attribute.printer.NaturalLanguageConfigured;
+import gnu.javax.print.ipp.attribute.printer.PrinterCurrentTime;
+import gnu.javax.print.ipp.attribute.printer.PrinterDriverInstaller;
+import gnu.javax.print.ipp.attribute.supported.CharsetSupported;
+import gnu.javax.print.ipp.attribute.supported.DocumentFormatSupported;
+import gnu.javax.print.ipp.attribute.supported.GeneratedNaturalLanguageSupported;
+import gnu.javax.print.ipp.attribute.supported.JobHoldUntilSupported;
+import gnu.javax.print.ipp.attribute.supported.JobSheetsSupported;
+import gnu.javax.print.ipp.attribute.supported.MediaSupported;
+import gnu.javax.print.ipp.attribute.supported.PrinterResolutionSupported;
+import gnu.javax.print.ipp.attribute.supported.PrinterUriSupported;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.standard.CopiesSupported;
+import javax.print.attribute.standard.DateTimeAtCompleted;
+import javax.print.attribute.standard.DateTimeAtCreation;
+import javax.print.attribute.standard.DateTimeAtProcessing;
+import javax.print.attribute.standard.JobImpressionsSupported;
+import javax.print.attribute.standard.JobKOctetsSupported;
+import javax.print.attribute.standard.JobMediaSheetsSupported;
+import javax.print.attribute.standard.JobStateReason;
+import javax.print.attribute.standard.JobStateReasons;
+import javax.print.attribute.standard.NumberUpSupported;
+import javax.print.attribute.standard.PrinterMoreInfo;
+import javax.print.attribute.standard.PrinterMoreInfoManufacturer;
+import javax.print.attribute.standard.PrinterStateReason;
+import javax.print.attribute.standard.PrinterStateReasons;
+import javax.print.attribute.standard.Severity;
+
+/**
+ * <code>IppResponse</code> models a response received from an IPP
+ * compatible server as described in RFC 2910 IPP 1.1 Encoding and Transport.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class IppResponse
+{
+
+ /**
+ * <code>ResponseReader</code> is responsible for parsing an IPP 1.1
+ * response stream. It provides access to the attribute groups after parsing
+ * via getter methods.
+ * <p>
+ * The enconding of a response is structured as follows (for an official
+ * description please have a look at the RFC document mentioned above):
+ * <ul>
+ * <li>version-number - 2 bytes - required</li>
+ * <li>status-code - 2 bytes - required</li>
+ * <li>request-id - 4 bytes - required</li>
+ * <li>attribute-group - n bytes - 0 or more</li>
+ * <li>end-of-attributes-tag - 1 byte - required</li>
+ * <li>data - q bytes - optional</li>
+ * </ul>
+ * </p><p>
+ * Where each attribute-group (if any) is encoded as follows:
+ * <ul>
+ * <li>begin-attribute-group-tag - 1 byte</li>
+ * <li>attribute - p bytes - 0 or more</li>
+ * </ul>
+ * </p><p>
+ * Encoding of attributes:
+ * <ul>
+ * <li>attribute-with-one-value - q bytes</li>
+ * <li>additional-value - r bytes - 0 or more</li>
+ * </ul>
+ * </p><p>
+ * Encoding of attribute-with-one-value:
+ * <ul>
+ * <li>value-tag - 1 byte</li>
+ * <li>name-length (value is u) - 2 bytes</li>
+ * <li>name - u bytes</li>
+ * <li>value-length (value is v) - 2 bytes</li>
+ * <li>value - v bytes</li>
+ * </ul>
+ * </p><p>
+ * Encoding of additional value:
+ * <ul>
+ * <li>value-tag - 1 byte</li>
+ * <li>name-length (value is 0x0000) - 2 bytes</li>
+ * <li>value-length (value is w) - 2 bytes</li>
+ * <li>value - w bytes</li>
+ * </ul>
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+ class ResponseReader
+ {
+ /** The IPP version defaults to 1.1 */
+ private static final short VERSION = 0x0101;
+
+ /**
+ * Parses the inputstream containing the response of the IPP request.
+ * @param input the inputstream
+ * @throws IppException if unexpected exceptions occur.
+ * @throws IOException if IO problems with the underlying inputstream occur.
+ */
+ public void parseResponse(InputStream input)
+ throws IppException, IOException
+ {
+ DataInputStream stream = new DataInputStream(input);
+
+ short version = stream.readShort();
+ status_code = stream.readShort();
+ request_id = stream.readInt();
+
+ if (VERSION != version)
+ throw new IppException("Version mismatch - "
+ + "implementation does not support other versions than IPP 1.1");
+
+ logger.log(Component.IPP, "Statuscode: "
+ + Integer.toHexString(status_code) + " Request-ID: " + request_id);
+
+ byte tag = 0;
+ boolean proceed = true;
+ HashMap tmp;
+ // iterate over attribute-groups until end-of-attributes-tag is found
+ while (proceed)
+ {
+ if (tag == 0) // only at start time
+ tag = stream.readByte();
+
+ logger.log(Component.IPP, "DelimiterTag: " + Integer.toHexString(tag));
+
+ // check if end of attributes
+ switch (tag)
+ {
+ case IppDelimiterTag.END_OF_ATTRIBUTES_TAG:
+ proceed = false;
+ break;
+ case IppDelimiterTag.OPERATION_ATTRIBUTES_TAG:
+ tmp = new HashMap();
+ tag = parseAttributes(tmp, stream);
+ operationAttributes.add(tmp);
+ break;
+ case IppDelimiterTag.JOB_ATTRIBUTES_TAG:
+ tmp = new HashMap();
+ tag = parseAttributes(tmp, stream);
+ jobAttributes.add(tmp);
+ break;
+ case IppDelimiterTag.PRINTER_ATTRIBUTES_TAG:
+ tmp = new HashMap();
+ tag = parseAttributes(tmp, stream);
+ printerAttributes.add(tmp);
+ break;
+ case IppDelimiterTag.UNSUPPORTED_ATTRIBUTES_TAG:
+ System.out.println("Called");
+ tmp = new HashMap();
+ tag = parseAttributes(tmp, stream);
+ unsupportedAttributes.add(tmp);
+ break;
+ default:
+ throw new IppException("Unknown tag with value "
+ + Integer.toHexString(tag) + " occured.");
+ }
+ }
+
+ // if there are more bytes that has to be data.
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ byte[] readbuf = new byte[2048];
+ int len = 0;
+
+ while ((len = stream.read(readbuf)) > 0)
+ byteStream.write(readbuf, 0, len);
+
+ byteStream.flush();
+ data = byteStream.toByteArray();
+ }
+
+ /**
+ * The actual parsing of the attributes and further putting into the
+ * provided group maps.
+ * @param attributes the provided attribute group map.
+ * @param stream the provided stream to read from.
+ * @return The last read tag byte (normally a DelimiterTag)
+ * @throws IppException if unexpected exceptions occur.
+ * @throws IOException if IO problems with the underlying inputstream occur.
+ */
+ private byte parseAttributes(Map attributes, DataInputStream stream)
+ throws IppException, IOException
+ {
+ Attribute lastAttribute = null;
+ Attribute attribute = null;
+
+ // declaration of variables
+ short nameLength;
+ String name;
+ short valueLength;
+ byte[] value;
+
+ // tmp variables for parsing
+ // declared here so no name duplication occurs
+ URI uri;
+ String str;
+
+ while (true)
+ {
+ byte tag = stream.readByte();
+
+ if (IppDelimiterTag.isDelimiterTag(tag))
+ return tag;
+
+ // it must be a value tag now
+ // so we have either a attribute-with-one-value
+ // or (if setOf is possible) an additional-value
+
+ // (1) Length of the name
+ nameLength = stream.readShort();
+
+ // (2) The name itself
+ // may be an additional-value
+ if (nameLength == 0x0000)
+ name = lastAttribute.getName();
+ else
+ {
+ byte[] nameBytes = new byte[nameLength];
+ stream.read(nameBytes);
+ name = new String(nameBytes);
+ }
+
+ // (3) Length of the value
+ valueLength = stream.readShort();
+
+ // (4) The value itself
+ value = new byte[valueLength];
+ stream.read(value);
+
+ // the value itself
+ switch (tag)
+ {
+ // out-of-band values
+ case IppValueTag.UNSUPPORTED:
+ case IppValueTag.UNKNOWN:
+ case IppValueTag.NO_VALUE:
+ // TODO implement out-of-band handling
+ // We currently throw an exception to see when it occurs - not yet :-)
+ throw new IppException(
+ "Unexpected name value for out-of-band value tag");
+ case IppValueTag.INTEGER:
+ int intValue = IppUtilities.convertToInt(value);
+ attribute = IppUtilities.getIntegerAttribute(name, intValue);
+
+ break;
+ case IppValueTag.BOOLEAN:
+ // JPS API models boolean syntax type as enums
+ // 0x01 = true, 0x00 = false - all are enums
+ attribute = IppUtilities.getEnumAttribute(name, new Integer(value[0]));
+
+ break;
+ case IppValueTag.ENUM:
+ int intVal = IppUtilities.convertToInt(value);
+ attribute = IppUtilities.getEnumAttribute(name, new Integer(intVal));
+
+ break;
+ case IppValueTag.OCTECTSTRING_UNSPECIFIED:
+ // none exists according to spec
+ // so lets report as exception to see when it occurs
+ throw new IppException("Unspecified octet string occured.");
+
+ case IppValueTag.DATETIME:
+ Date date = parseDate(value);
+ if (name.equals("printer-current-time"))
+ attribute = new PrinterCurrentTime(date);
+ else if (name.equals("date-time-at-creation"))
+ attribute = new DateTimeAtCreation(date);
+ else if (name.equals("date-time-at-processing"))
+ attribute = new DateTimeAtProcessing(date);
+ else if (name.equals("date-time-at-completed"))
+ attribute = new DateTimeAtCompleted(date);
+
+ break;
+ case IppValueTag.RESOLUTION:
+ int crossFeed = IppUtilities.convertToInt(value[0], value[1], value[2], value[3]);
+ int feed = IppUtilities.convertToInt(value[4], value[5], value[6], value[7]);
+ int units = value[8];
+
+ if (name.equals("printer-resolution-default"))
+ attribute = new PrinterResolutionDefault(crossFeed, feed, units);
+ else if (name.equals("printer-resolution-supported")) // may be here also
+ attribute = new PrinterResolutionSupported(crossFeed, feed, units);
+
+ break;
+ case IppValueTag.RANGEOFINTEGER:
+ int lower = IppUtilities.convertToInt(value[0], value[1], value[2], value[3]);
+ int upper = IppUtilities.convertToInt(value[4], value[5], value[6], value[7]);
+
+ if (name.equals("copies-supported"))
+ attribute = new CopiesSupported(lower, upper);
+ else if (name.equals("number-up-supported"))
+ attribute = new NumberUpSupported(lower, upper);
+ else if (name.equals("job-k-octets-supported"))
+ attribute = new JobKOctetsSupported(lower, upper);
+ else if (name.equals("job-impressions-supported"))
+ attribute = new JobImpressionsSupported(lower, upper);
+ else if (name.equals("job-media-sheets-supported"))
+ attribute = new JobMediaSheetsSupported(lower, upper);
+
+ break;
+ case IppValueTag.TEXT_WITH_LANGUAGE:
+ case IppValueTag.TEXT_WITHOUT_LANGUAGE:
+ case IppValueTag.NAME_WITH_LANGUAGE:
+ case IppValueTag.NAME_WITHOUT_LANGUAGE:
+ attribute = IppUtilities.getTextAttribute(name, tag, value);
+
+ break;
+ case IppValueTag.KEYWORD:
+ str = new String(value);
+ if (name.equals("job-hold-until-supported")) // may also be name type
+ attribute = new JobHoldUntilSupported(str, null);
+ else if (name.equals("job-hold-until-default"))
+ attribute = new JobHoldUntilDefault(str, null);
+ else if (name.equals("media-supported"))
+ attribute = new MediaSupported(str, null);
+ else if (name.equals("media-default"))
+ attribute = new MediaDefault(str, null);
+ else if (name.equals("job-sheets-default"))
+ attribute = new JobSheetsDefault(str, null);
+ else if (name.equals("job-sheets-supported"))
+ attribute = new JobSheetsSupported(str, null);
+ else if (name.equals("job-state-reasons")) // setOf
+ attribute = parseJobStateReasons(value, lastAttribute);
+ else if (name.equals("printer-state-reasons")) // setOf
+ attribute = parsePrinterStateReasons(value, lastAttribute);
+ else
+ attribute = IppUtilities.getEnumAttribute(name, str);
+
+ // all other stuff is either an enum or needs to be mapped to an
+ // UnknownAttribute instance. Enums catched here are:
+ // ipp-versions-supported, pdl-override-supported, compression-supported
+ // uri-authentication-supported, uri-security-supported, sides-supported
+ // sides-default, multiple-document-handling-supported, multiple-document-handling-default
+
+ break;
+ case IppValueTag.URI:
+ try
+ {
+ uri = new URI(new String(value));
+ }
+ catch (URISyntaxException e)
+ {
+ throw new IppException("Wrong URI syntax encountered.", e);
+ }
+
+ if (name.equals("job-uri"))
+ attribute = new JobUri(uri);
+ else if (name.equals("job-printer-uri"))
+ attribute = new JobPrinterUri(uri);
+ else if (name.equals("job-more-info"))
+ attribute = new JobMoreInfo(uri);
+ else if (name.equals("printer-uri-supported")) // setOf
+ attribute = new PrinterUriSupported(uri);
+ else if (name.equals("printer-more-info"))
+ attribute = new PrinterMoreInfo(uri);
+ else if (name.equals("printer-driver-installer"))
+ attribute = new PrinterDriverInstaller(uri);
+ else if (name.equals("printer-more-info-manufacturer"))
+ attribute = new PrinterMoreInfoManufacturer(uri);
+
+ break;
+ case IppValueTag.URI_SCHEME:
+ // only one uri-scheme exists - and its an enum
+ if (name.equals("reference-uri-schemes-supported"))
+ attribute = IppUtilities.getEnumAttribute(name, new String(value));
+
+ break;
+ case IppValueTag.CHARSET:
+ str = new String(value);
+ if (name.equals("attributes-charset"))
+ attribute = new AttributesCharset(str);
+ else if (name.equals("charset-configured"))
+ attribute = new CharsetConfigured(str);
+ else if (name.equals("charset-supported")) // setOf
+ attribute = new CharsetSupported(str);
+
+ break;
+ case IppValueTag.NATURAL_LANGUAGE:
+ str = new String(value);
+ if (name.equals("attributes-natural-language"))
+ attribute = new AttributesNaturalLanguage(str);
+ else if (name.equals("natural-language-configured"))
+ attribute = new NaturalLanguageConfigured(str);
+ else if (name.equals("generated-natural-language-supported")) // setOf
+ attribute = new GeneratedNaturalLanguageSupported(str);
+
+ break;
+ case IppValueTag.MIME_MEDIA_TYPE:
+ str = new String(value);
+ if (name.equals("document-format-default"))
+ attribute = new DocumentFormatDefault(str, null);
+ else if (name.equals("document-format-supported")) // setOf
+ attribute = new DocumentFormatSupported(str, null);
+ else if (name.equals("document-format")) // setOf
+ attribute = new DocumentFormat(str, null);
+
+ break;
+ default:
+ throw new IppException("Unknown tag with value "
+ + Integer.toHexString(tag) + " found.");
+ }
+
+ if (attribute == null)
+ attribute = new UnknownAttribute(tag, name, value);
+
+ addAttribute(attributes, attribute);
+ lastAttribute = attribute;
+
+ logger.log(Component.IPP, "Attribute: " + name
+ + " Value: " + attribute.toString());
+ }
+ }
+
+ /**
+ * Adds a new attribute to the given attribute group. If this is the fist
+ * occurence of this attribute category a new set is created and associated
+ * with its category as key.
+ * @param attributeGroup
+ * the attribute group
+ * @param attribute
+ * the attribute to add
+ */
+ private void addAttribute(Map attributeGroup, Attribute attribute)
+ {
+ Class clazz = attribute.getCategory();
+ Set attributeValues = (Set) attributeGroup.get(clazz);
+
+ if (attributeValues == null) // first attribute of this category
+ {
+ attributeValues = new HashSet();
+ attributeGroup.put(clazz, attributeValues);
+ }
+
+ attributeValues.add(attribute);
+ }
+
+ /**
+ * Parses a name with or without language attribute value from the byte[]
+ * and returns the result as an object[].
+ * @param value the byte[]
+ * @param lastAttr the last attribute
+ * @return The attribute.
+ */
+ private PrinterStateReasons parsePrinterStateReasons(byte[] value, Attribute lastAttr)
+ {
+ String str = new String(value);
+ PrinterStateReasons attribute;
+
+ if (lastAttr instanceof PrinterStateReasons)
+ attribute = (PrinterStateReasons) lastAttr;
+ else
+ attribute = new PrinterStateReasons();
+
+ // special case indicating no reasons
+ if (str.equals("none"))
+ return attribute;
+
+ Severity severity = null;
+ PrinterStateReason reason = null;
+
+ if (str.endsWith(Severity.WARNING.toString()))
+ severity = Severity.WARNING;
+ else if (str.endsWith(Severity.REPORT.toString()))
+ severity = Severity.REPORT;
+ else if (str.endsWith(Severity.ERROR.toString()))
+ severity = Severity.ERROR;
+
+ if (severity != null)
+ str = str.substring(0, str.lastIndexOf('-'));
+ else // we must associate a severity
+ severity = Severity.REPORT;
+
+ reason = (PrinterStateReason)
+ IppUtilities.getEnumAttribute("printer-state-reason", str);
+
+ attribute.put(reason , severity);
+ return attribute;
+ }
+
+ /**
+ * Parses a name with or without language attribute value from the byte[]
+ * and returns the result as an object[].
+ * @param value the byte[]
+ * @param lastAttr the last attribute
+ * @return The attribute.
+ */
+ private JobStateReasons parseJobStateReasons(byte[] value, Attribute lastAttr)
+ {
+ String str = new String(value);
+ JobStateReasons attribute;
+
+ if (lastAttr instanceof JobStateReasons)
+ attribute = (JobStateReasons) lastAttr;
+ else
+ attribute = new JobStateReasons();
+
+ // special case indicating no reasons
+ if (str.equals("none"))
+ return attribute;
+
+ JobStateReason reason = (JobStateReason)
+ IppUtilities.getEnumAttribute("job-state-reason", str);
+
+ attribute.add(reason);
+ return attribute;
+ }
+
+ /**
+ * Parses a DateTime syntax attribute and returns the constructed Date
+ * object.
+ * <p>
+ * The syntax value is defined as 11 octets follwing the DateAndTime format
+ * of RFC 1903:
+ * <ul>
+ * <li>field | octets | contents | range</li>
+ * <li>1 | 1-2 | year | 0..65536</li>
+ * <li>2 | 3 | month | 1..12</li>
+ * <li>3 | 4 | day | 1..31</li>
+ * <li>4 | 5 | hour | 0..23</li>
+ * <li>5 | 6 | minutes | 0..59</li>
+ * <li>6 | 7 | seconds | 0..60 (use 60 for leap-second)</li>
+ * <li>7 | 8 | deci-seconds | 0..9</li>
+ * <li>8 | 9 | direction from UTC | '+' / '-'</li>
+ * <li>9 | 10 | hours from UTC | 0..11</li>
+ * <li>10 | 11 | minutes from UTC | 0..59</li>
+ * </ul>
+ * </p>
+ *
+ * @param value the byte[]
+ * @return The date object.
+ */
+ private Date parseDate(byte[] value)
+ {
+ short year = IppUtilities.convertToShort(value[0], value[1]);
+
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.YEAR, year);
+ cal.set(Calendar.MONTH, value[2]);
+ cal.set(Calendar.DAY_OF_MONTH, value[3]);
+ cal.set(Calendar.HOUR_OF_DAY, value[4]);
+ cal.set(Calendar.MINUTE, value[5]);
+ cal.set(Calendar.SECOND, value[6]);
+ cal.set(Calendar.MILLISECOND, value[7] * 100); // deci-seconds
+
+ // offset from timezone
+ int offsetMilli = value[9] * 3600000; // hours to millis
+ offsetMilli = offsetMilli + value[10] * 60000; // minutes to millis
+
+ if (((char) value[8]) == '-')
+ offsetMilli = offsetMilli * (-1);
+
+ cal.set(Calendar.ZONE_OFFSET, offsetMilli);
+ return cal.getTime();
+ }
+ }
+
+ /**
+ * Logger for tracing - enable by passing
+ * -Dgnu.classpath.debug.components=ipp to the vm.
+ */
+ static final Logger logger = SystemLogger.SYSTEM;
+
+ URI uri;
+ short operation_id;
+ short status_code;
+ int request_id;
+
+ List operationAttributes;
+ List printerAttributes;
+ List jobAttributes;
+ List unsupportedAttributes;
+
+ byte[] data;
+
+ /**
+ * Creates an <code>IppResponse</code> instance.
+ *
+ * @param uri the uri the request was directy to.
+ * @param operation_id the operation id of the request.
+ */
+ public IppResponse(URI uri, short operation_id)
+ {
+ this.uri = uri;
+ this.operation_id = operation_id;
+ operationAttributes = new ArrayList();
+ jobAttributes = new ArrayList();
+ printerAttributes = new ArrayList();
+ unsupportedAttributes = new ArrayList();
+ }
+
+ /**
+ * Sets the data received from the request sent.
+ *
+ * @param input the input stream received.
+ * @throws IppException if parsing fails.
+ */
+ protected void setResponseData(InputStream input) throws IppException
+ {
+ ResponseReader reader = new ResponseReader();
+
+ try
+ {
+ reader.parseResponse(input);
+ }
+ catch (IOException e)
+ {
+ throw new IppException(
+ "Exception during response parsing caused by IOException", e);
+ }
+ }
+
+ /**
+ * Returns the uri of the original request.
+ * @return The URI of the request.
+ */
+ public URI getURI()
+ {
+ return uri;
+ }
+
+ /**
+ * Returns the operation id of the original request.
+ * @return The operation id of the request.
+ */
+ public int getOperationID()
+ {
+ return operation_id;
+ }
+
+ /**
+ * Returns the set of job attributes group maps.
+ * There may occur more than one group of type job attribute in a response
+ * because of e.g. multiple job or print service informations requested.
+ *
+ * @return The list of job attribute grou maps.
+ */
+ public List getJobAttributes()
+ {
+ return jobAttributes;
+ }
+
+ /**
+ * Returns the set of operation attributes group maps.
+ * There may occur more than one group of type job attribute in a response
+ * because of e.g. multiple job or print service informations requested.
+ *
+ * @return The list of operation attribute grou maps.
+ */
+ public List getOperationAttributes()
+ {
+ return operationAttributes;
+ }
+
+ /**
+ * Returns the set of printer attributes group maps.
+ * There may occur more than one group of type job attribute in a response
+ * because of e.g. multiple job or print service informations requested.
+ *
+ * @return The list of printer attribute grou maps.
+ */
+ public List getPrinterAttributes()
+ {
+ return printerAttributes;
+ }
+
+ /**
+ * Returns the ID of the initial request.
+ *
+ * @return The request ID.
+ */
+ public int getRequestID()
+ {
+ return request_id;
+ }
+
+ /**
+ * Returns the status code of the response.
+ * Defined in {@link IppStatusCode}.
+ *
+ * @return The status code.
+ */
+ public short getStatusCode()
+ {
+ return status_code;
+ }
+
+ /**
+ * Returns the set of unsupported attributes group maps.
+ * There may occur more than one group of type job attribute in a response
+ * because of e.g. multiple job or print service informations requested.
+ *
+ * @return The list of unsupported attribute grou maps.
+ */
+ public List getUnsupportedAttributes()
+ {
+ return unsupportedAttributes;
+ }
+
+ /**
+ * Returns the data of the response.
+ *
+ * @return The data as byte[].
+ */
+ public byte[] getData()
+ {
+ return data;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppStatusCode.java b/libjava/classpath/gnu/javax/print/ipp/IppStatusCode.java
new file mode 100644
index 0000000..d2cb839
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppStatusCode.java
@@ -0,0 +1,185 @@
+/* IppStatusCode.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+/**
+ * IPP Status codes as described in RFC 2911 APPENDIX B
+ * (Status Codes and Suggested Status Code Messages)
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class IppStatusCode
+{
+ /**
+ * Indicates a successful request with no attributes being
+ * ignored or substituted.
+ */
+ public static final int SUCCESSFUL_OK = 0x0000;
+
+ /**
+ * Indicates a successful request, however some of the supplied
+ * attributes are ignored or substituted.
+ */
+ public static final int SUCCESSFUL_OK_IGNORED_OR_SUBSTITUED_ATTRIBUTES = 0x0001;
+
+ /**
+ * Indicates a successful request, however some of the supplied
+ * attributes conflicted and therefore were ignored or substituted.
+ */
+ public static final int SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES = 0x0002;
+
+ // Client Error Status Codes
+ // Indicates that the client has done something wrong in its
+ // requests send to the IPP server object
+
+ /** Indicates a bad request e.g. malformed syntax. */
+ public static final int CLIENT_ERROR_BAD_REQUEST = 0x0400;
+
+ /** Indicates that the client is forbidden to access the server. */
+ public static final int CLIENT_ERROR_FORBIDDEN = 0x0401;
+
+ /** Indicates that the client needs to authenticate. */
+ public static final int CLIENT_ERROR_NOT_AUTHENTICATED = 0x0402;
+
+ /** Indicates that the client is not authorized. */
+ public static final int CLIENT_ERROR_NOT_AUTHORIZED = 0x0403;
+
+ /**
+ * Indicates a request which is not possible to process.
+ * For example if the request is directed at a job already finished.
+ */
+ public static final int CLIENT_ERROR_NOT_POSSIBLE = 0x0404;
+
+ /** Indicates that the client got a timeout for additional action. */
+ public static final int CLIENT_ERROR_TIMEOUT = 0x0405;
+
+ /** Indicates that nothing was found for the request uri. */
+ public static final int CLIENT_ERROR_NOT_FOUND = 0x0406;
+
+ /** Indicates that the requested object is gone. */
+ public static final int CLIENT_ERROR_GONE = 0x0407;
+
+ /** Indicates that the request entities are too long. */
+ public static final int CLIENT_ERROR_REQUEST_ENTITY_TOO_LONG = 0x0408;
+
+ /** Indicates that a request value is too long. */
+ public static final int CLIENT_ERROR_REQUEST_VALUE_TOO_LONG = 0x0409;
+
+ /** Indicates that the supplied document format is not supported. */
+ public static final int CLIENT_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED = 0x040A;
+
+ /**
+ * Indicates that the supplied attributes or values of attributes are not
+ * supported by the printer object. Returning this code depends on the
+ * given "ipp-attribute-fidelity" operation attribute value.
+ */
+ public static final int CLIENT_ERROR_ATTRIBUTES_OR_VALUES_NOT_SUPPORTED
+ = 0x040B;
+
+ /**
+ * Indicates the the URI scheme in a supplied print-uri or send-uri attribute
+ * is not supported.
+ */
+ public static final int CLIENT_ERROR_URI_SCHEME_NOT_SUPPORTED = 0x040C;
+
+ /** Indicates that a supplied attributes-charset is not supported. */
+ public static final int CLIENT_ERROR_CHARSET_NOT_SUPPORTED = 0x040D;
+
+ /** Indicates that conflicting attributes are in the request. */
+ public static final int CLIENT_ERROR_CONFLICTING_ATTRIBUTES = 0x040E;
+
+ /** Indicates that the specified algorithm is not supported. */
+ public static final int CLIENT_ERROR_COMPRESSION_NOT_SUPPORTED = 0x040F;
+
+ /**
+ * Indicates that the document cannot be decompressed with the client
+ * compression algorithm specified by the client.
+ */
+ public static final int CLIENT_ERROR_COMPRESSION_ERROR = 0x0410;
+
+ /** Indicates an error in the document format of the document. */
+ public static final int CLIENT_ERROR_DOCUMENT_FORMAT_ERROR = 0x0411;
+
+ /**
+ * Indicates that the document supplied via print-uri or send-uri cannot be
+ * accessed by the printer object.
+ */
+ public static final int CLIENT_ERROR_DOCUMENT_ACCESS_ERROR = 0x0412;
+
+
+ /** Indicates an internal server error. */
+ public static final int SERVER_ERROR_INTERNAL_ERROR = 0x0500;
+
+ /** Indicates that the server does not support the operation. */
+ public static final int SERVER_ERROR_OPERATION_NOT_SUPPORTED = 0x0501;
+
+ /** Indicates that the server' service is not available. */
+ public static final int SERVER_ERROR_SERVICE_UNAVAILABLE = 0x0502;
+
+ /** Indicates that the server does not support the IPP version. */
+ public static final int SERVER_ERROR_VERSION_NOT_SUPPORTED = 0x0503;
+
+ /** Indicates that the server has a device error e.g. paper jam. */
+ public static final int SERVER_ERROR_DEVICE_ERROR = 0x0504;
+
+ /** Indicates that the server has a temporary error. */
+ public static final int SERVER_ERROR_TEMPORARY_ERROR = 0x0505;
+
+ /** Indicates that the server is currently not accepting jobs. */
+ public static final int SERVER_ERROR_NOT_ACCEPTING_JOBS = 0x0506;
+
+ /**
+ * Indicates that the server is currently busy with processing.
+ * Requests may be tried later again.
+ */
+ public static final int SERVER_ERROR_BUSY = 0x0507;
+
+ /** Indicates that the server has canceled the job for various reasons. */
+ public static final int SERVER_ERROR_JOB_CANCELED = 0x0508;
+
+ /** Indicates that the server does not support multidocument jobs. */
+ public static final int SERVER_ERROR_MULTIPLE_DOCUMENT_JOBS_NOT_SUPPORTED
+ = 0x0509;
+
+ private IppStatusCode()
+ {
+ // not to be instantiated
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppUtilities.java b/libjava/classpath/gnu/javax/print/ipp/IppUtilities.java
new file mode 100644
index 0000000..3038998
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppUtilities.java
@@ -0,0 +1,551 @@
+/* IppUtilities.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+import gnu.javax.print.ipp.attribute.DetailedStatusMessage;
+import gnu.javax.print.ipp.attribute.DocumentAccessError;
+import gnu.javax.print.ipp.attribute.StatusMessage;
+import gnu.javax.print.ipp.attribute.defaults.CopiesDefault;
+import gnu.javax.print.ipp.attribute.defaults.FinishingsDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobHoldUntilDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobPriorityDefault;
+import gnu.javax.print.ipp.attribute.defaults.JobSheetsDefault;
+import gnu.javax.print.ipp.attribute.defaults.MediaDefault;
+import gnu.javax.print.ipp.attribute.defaults.MultipleDocumentHandlingDefault;
+import gnu.javax.print.ipp.attribute.defaults.NumberUpDefault;
+import gnu.javax.print.ipp.attribute.defaults.OrientationRequestedDefault;
+import gnu.javax.print.ipp.attribute.defaults.PrintQualityDefault;
+import gnu.javax.print.ipp.attribute.defaults.SidesDefault;
+import gnu.javax.print.ipp.attribute.job.JobDetailedStatusMessages;
+import gnu.javax.print.ipp.attribute.job.JobDocumentAccessErrors;
+import gnu.javax.print.ipp.attribute.job.JobId;
+import gnu.javax.print.ipp.attribute.job.JobStateMessage;
+import gnu.javax.print.ipp.attribute.printer.MultipleOperationTimeOut;
+import gnu.javax.print.ipp.attribute.printer.PrinterStateMessage;
+import gnu.javax.print.ipp.attribute.printer.PrinterUpTime;
+import gnu.javax.print.ipp.attribute.supported.CompressionSupported;
+import gnu.javax.print.ipp.attribute.supported.FinishingsSupported;
+import gnu.javax.print.ipp.attribute.supported.IppVersionsSupported;
+import gnu.javax.print.ipp.attribute.supported.JobHoldUntilSupported;
+import gnu.javax.print.ipp.attribute.supported.JobSheetsSupported;
+import gnu.javax.print.ipp.attribute.supported.MediaSupported;
+import gnu.javax.print.ipp.attribute.supported.MultipleDocumentHandlingSupported;
+import gnu.javax.print.ipp.attribute.supported.MultipleDocumentJobsSupported;
+import gnu.javax.print.ipp.attribute.supported.OperationsSupported;
+import gnu.javax.print.ipp.attribute.supported.OrientationRequestedSupported;
+import gnu.javax.print.ipp.attribute.supported.PageRangesSupported;
+import gnu.javax.print.ipp.attribute.supported.PrintQualitySupported;
+import gnu.javax.print.ipp.attribute.supported.PrinterResolutionSupported;
+import gnu.javax.print.ipp.attribute.supported.SidesSupported;
+import gnu.javax.print.ipp.attribute.supported.UriAuthenticationSupported;
+import gnu.javax.print.ipp.attribute.supported.UriSecuritySupported;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.Chromaticity;
+import javax.print.attribute.standard.ColorSupported;
+import javax.print.attribute.standard.Compression;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.CopiesSupported;
+import javax.print.attribute.standard.Fidelity;
+import javax.print.attribute.standard.Finishings;
+import javax.print.attribute.standard.JobHoldUntil;
+import javax.print.attribute.standard.JobImpressionsCompleted;
+import javax.print.attribute.standard.JobKOctetsProcessed;
+import javax.print.attribute.standard.JobMediaSheetsCompleted;
+import javax.print.attribute.standard.JobMessageFromOperator;
+import javax.print.attribute.standard.JobName;
+import javax.print.attribute.standard.JobOriginatingUserName;
+import javax.print.attribute.standard.JobPriority;
+import javax.print.attribute.standard.JobPrioritySupported;
+import javax.print.attribute.standard.JobSheets;
+import javax.print.attribute.standard.JobState;
+import javax.print.attribute.standard.JobStateReason;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MediaSizeName;
+import javax.print.attribute.standard.MultipleDocumentHandling;
+import javax.print.attribute.standard.NumberOfInterveningJobs;
+import javax.print.attribute.standard.NumberUp;
+import javax.print.attribute.standard.NumberUpSupported;
+import javax.print.attribute.standard.OrientationRequested;
+import javax.print.attribute.standard.OutputDeviceAssigned;
+import javax.print.attribute.standard.PDLOverrideSupported;
+import javax.print.attribute.standard.PageRanges;
+import javax.print.attribute.standard.PagesPerMinute;
+import javax.print.attribute.standard.PagesPerMinuteColor;
+import javax.print.attribute.standard.PresentationDirection;
+import javax.print.attribute.standard.PrintQuality;
+import javax.print.attribute.standard.PrinterInfo;
+import javax.print.attribute.standard.PrinterIsAcceptingJobs;
+import javax.print.attribute.standard.PrinterLocation;
+import javax.print.attribute.standard.PrinterMakeAndModel;
+import javax.print.attribute.standard.PrinterMessageFromOperator;
+import javax.print.attribute.standard.PrinterName;
+import javax.print.attribute.standard.PrinterResolution;
+import javax.print.attribute.standard.PrinterState;
+import javax.print.attribute.standard.PrinterStateReason;
+import javax.print.attribute.standard.QueuedJobCount;
+import javax.print.attribute.standard.ReferenceUriSchemesSupported;
+import javax.print.attribute.standard.Severity;
+import javax.print.attribute.standard.SheetCollate;
+import javax.print.attribute.standard.Sides;
+
+/**
+ * Collection of static utilities methods used in
+ * IPP response parsing and all over the place.
+ * <p>
+ * Also provides mapping from the attribute name values to
+ * the actual class object. Used to construct objects via reflection.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class IppUtilities
+{
+ // These are reused in the reflection code to not instantiate an array everytime
+ private static Object[] INTEGER_ATT_VALUE = new Object[1];
+ private static Class[] INTEGER_CLASS_ARRAY = new Class[] {int.class};
+ private static Object[] TEXT_ATT_VALUE = new Object[2];
+ private static Class[] TEXT_CLASS_ARRAY = new Class[] {String.class, Locale.class};
+
+ // The map -> Attribute name to Attribute class
+ private static HashMap classesByName = new HashMap();
+ // The map -> StandardAttribute class to SupportedAttribute category name
+ private static HashMap instanceByClass = new HashMap();
+
+ /**
+ * All the currently needed attributes
+ */
+ static
+ {
+ // enums
+ classesByName.put(JobState.ABORTED.getName(), JobState.class);
+ classesByName.put(Sides.DUPLEX.getName(), Sides.class);
+ classesByName.put(SheetCollate.COLLATED.getName(), SheetCollate.class);
+ classesByName.put(Severity.ERROR.getName(), Severity.class);
+ classesByName.put(JobSheets.NONE.getName(), JobSheets.class);
+ classesByName.put(Finishings.BIND.getName(), Finishings.class);
+ classesByName.put(Fidelity.FIDELITY_FALSE.getName(), Fidelity.class);
+ classesByName.put(Compression.GZIP.getName(), Compression.class);
+ classesByName.put(Chromaticity.COLOR.getName(), Chromaticity.class);
+ classesByName.put(PrintQuality.DRAFT.getName(), PrintQuality.class);
+ classesByName.put(PrinterState.IDLE.getName(), PrinterState.class);
+ classesByName.put(SidesDefault.ONE_SIDED.getName(), SidesDefault.class);
+ classesByName.put(ReferenceUriSchemesSupported.FILE.getName(),
+ ReferenceUriSchemesSupported.class);
+ classesByName.put(PrinterStateReason.DOOR_OPEN.getName(),
+ PrinterStateReason.class);
+ classesByName.put(PresentationDirection.TOLEFT_TOTOP.getName(),
+ PresentationDirection.class);
+ classesByName.put(PDLOverrideSupported.ATTEMPTED.getName(),
+ PDLOverrideSupported.class);
+ classesByName.put(OrientationRequested.PORTRAIT.getName(),
+ OrientationRequested.class);
+ classesByName.put(MultipleDocumentHandling.SINGLE_DOCUMENT.getName(),
+ MultipleDocumentHandling.class);
+ classesByName.put(JobStateReason.JOB_QUEUED.getName(),
+ JobStateReason.class);
+ classesByName.put(UriAuthenticationSupported.NONE.getName(),
+ UriAuthenticationSupported.class);
+ classesByName.put(OperationsSupported.GET_JOBS.getName(),
+ OperationsSupported.class);
+ classesByName.put(UriSecuritySupported.NONE.getName(),
+ UriSecuritySupported.class);
+ classesByName.put(FinishingsSupported.NONE.getName(),
+ FinishingsSupported.class);
+ classesByName.put(FinishingsDefault.NONE.getName(),
+ FinishingsDefault.class);
+ classesByName.put(IppVersionsSupported.V_1_0.getName(),
+ IppVersionsSupported.class);
+ classesByName.put(MultipleDocumentHandlingSupported.SINGLE_DOCUMENT.getName(),
+ MultipleDocumentHandlingSupported.class);
+ classesByName.put(MultipleDocumentHandlingDefault.SINGLE_DOCUMENT.getName(),
+ MultipleDocumentHandlingDefault.class);
+ classesByName.put(CompressionSupported.NONE.getName(),
+ CompressionSupported.class);
+ classesByName.put(OrientationRequestedSupported.PORTRAIT.getName(),
+ OrientationRequestedSupported.class);
+ classesByName.put(OrientationRequestedDefault.PORTRAIT.getName(),
+ OrientationRequestedDefault.class);
+ classesByName.put(SidesSupported.ONE_SIDED.getName(),
+ SidesSupported.class);
+ classesByName.put(PrintQualityDefault.DRAFT.getName(),
+ PrintQualityDefault.class);
+ classesByName.put(PrintQualitySupported.DRAFT.getName(),
+ PrintQualitySupported.class);
+ classesByName.put(ReferenceUriSchemesSupported.FTP.getName(),
+ ReferenceUriSchemesSupported.class);
+
+ // the boolean types
+ classesByName.put(ColorSupported.SUPPORTED.getName(), ColorSupported.class);
+ classesByName.put(PrinterIsAcceptingJobs.ACCEPTING_JOBS.getName(),
+ PrinterIsAcceptingJobs.class);
+ classesByName.put(MultipleDocumentJobsSupported.SUPPORTED.getName(),
+ MultipleDocumentJobsSupported.class);
+ classesByName.put(PageRangesSupported.SUPPORTED.getName(),
+ PageRangesSupported.class);
+
+ // TextSyntax derived attributes
+ classesByName.put("media-default", MediaDefault.class);
+ classesByName.put("media-supported", MediaSupported.class);
+ classesByName.put("media", MediaSizeName.class);
+ classesByName.put("printer-location", PrinterLocation.class);
+ classesByName.put("printer-info", PrinterInfo.class);
+ classesByName.put("printer-make-and-model", PrinterMakeAndModel.class);
+ classesByName.put("printer-state-message", PrinterStateMessage.class);
+ classesByName.put("job-state-message", JobStateMessage.class);
+ classesByName.put("job-sheets-default", JobSheetsDefault.class);
+ classesByName.put("job-sheets-supported", JobSheetsSupported.class);
+ classesByName.put("job-name", JobName.class);
+ classesByName.put("printer-name", PrinterName.class);
+ classesByName.put("status-message", StatusMessage.class);
+ classesByName.put("detailed-status-message", DetailedStatusMessage.class);
+ classesByName.put("document-access-error", DocumentAccessError.class);
+ classesByName.put("output-device-assigned", OutputDeviceAssigned.class);
+ classesByName.put("job-hold-until-default", JobHoldUntilDefault.class);
+ classesByName.put("job-originating-user-name",
+ JobOriginatingUserName.class);
+ classesByName.put("job-hold-until-supported",
+ JobHoldUntilSupported.class);
+ classesByName.put("job-message-from-operator",
+ JobMessageFromOperator.class);
+ classesByName.put("printer-message-from-operator",
+ PrinterMessageFromOperator.class);
+ classesByName.put("job-detailed-status-messages",
+ JobDetailedStatusMessages.class);
+ classesByName.put("job-document-access-errors",
+ JobDocumentAccessErrors.class);
+
+ // IntegerSyntax derived Attributes
+ classesByName.put("copies-default", CopiesDefault.class);
+ classesByName.put("job-id", JobId.class);
+ classesByName.put("job-priority-supported", JobPrioritySupported.class);
+ classesByName.put("job-priority-default", JobPriorityDefault.class);
+ classesByName.put("number-up-supported", NumberUpSupported.class);
+ classesByName.put("number-up-default", NumberUpDefault.class);
+ classesByName.put("queued-job-count", QueuedJobCount.class);
+ classesByName.put("printer-up-time", PrinterUpTime.class);
+ classesByName.put("pages-per-minute", PagesPerMinute.class);
+ classesByName.put("pages-per-minute-color", PagesPerMinuteColor.class);
+ classesByName.put("job-k-octets-processed", JobKOctetsProcessed.class);
+ classesByName.put("number-of-intervening-jobs",
+ NumberOfInterveningJobs.class);
+ classesByName.put("job-impressions-completed",
+ JobImpressionsCompleted.class);
+ classesByName.put("job-media-sheets-completed",
+ JobMediaSheetsCompleted.class);
+ classesByName.put("multiple-operation-time-out",
+ MultipleOperationTimeOut.class);
+
+
+ // 4.2 job template attributes
+ instanceByClass.put(JobPriority.class, new JobPrioritySupported(1));
+ instanceByClass.put(JobHoldUntil.class, new JobHoldUntilSupported("", null));
+ instanceByClass.put(JobSheets.class, new JobSheetsSupported("", null));
+ instanceByClass.put(MultipleDocumentHandling.class, MultipleDocumentHandlingSupported.SINGLE_DOCUMENT);
+ instanceByClass.put(Copies.class, new CopiesSupported(1));
+ instanceByClass.put(Finishings.class, FinishingsSupported.BIND);
+ instanceByClass.put(PageRanges.class, PageRangesSupported.SUPPORTED);
+ instanceByClass.put(Sides.class, SidesSupported.DUPLEX);
+ instanceByClass.put(NumberUp.class, new NumberUpSupported(1));
+ instanceByClass.put(OrientationRequested.class, OrientationRequestedSupported.LANDSCAPE);
+ instanceByClass.put(Media.class, new MediaSupported("", null));
+ instanceByClass.put(PrinterResolution.class, new PrinterResolutionSupported(1,1,1));
+ instanceByClass.put(PrintQuality.class, PrintQualitySupported.DRAFT);
+
+ // 4.4 printer attributes
+ instanceByClass.put(Compression.class, CompressionSupported.COMPRESS);
+ }
+
+ private IppUtilities()
+ {
+ // not to be instantiated
+ }
+
+ /**
+ * Returns the implementing class object for given
+ * attribute name objects.
+ *
+ * @param name the attribute name
+ * @return The <code>Class</code> object.
+ */
+ public static Class getClass(String name)
+ {
+ return (Class) classesByName.get(name);
+ }
+
+ /**
+ * Returns the name of the supported attribute
+ * based on the given standard attribute category.
+ *
+ * @param clazz the standard attribute category
+ * @return The name of the supported attribute category.
+ */
+ public static String getSupportedAttrName(Class clazz)
+ {
+ return ((SupportedValuesAttribute) instanceByClass.get(clazz)).getName();
+ }
+
+ /**
+ * Returns the category of the supported attribute
+ * based on the given standard attribute category.
+ *
+ * @param clazz the standard attribute category
+ * @return The supported attribute category.
+ */
+ public static Class getSupportedCategory(Class clazz)
+ {
+ return ((SupportedValuesAttribute) instanceByClass.get(clazz)).getCategory();
+ }
+
+ /**
+ * Helper method to convert to an int.
+ * @param b the byte array
+ * @return The converted int.
+ */
+ public static int convertToInt(byte[] b)
+ {
+ return (((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16)
+ | ((b[2] & 0xff) << 8) | (b[3] & 0xff));
+ }
+
+ /**
+ * Helper method to convert to an int.
+ * @param b1 the 1th byte
+ * @param b2 the 2th byte
+ * @param b3 the 3th byte
+ * @param b4 the 4th byte
+ * @return The converted int.
+ */
+ public static int convertToInt(byte b1, byte b2, byte b3, byte b4)
+ {
+ return (((b1 & 0xff) << 24) | ((b2 & 0xff) << 16)
+ | ((b3 & 0xff) << 8) | (b4 & 0xff));
+ }
+
+ /**
+ * Helper method to convert to a short.
+ * @param b1 the 1th byte
+ * @param b2 the 2th byte
+ * @return The converted short.
+ */
+ public static short convertToShort(byte b1, byte b2)
+ {
+ return (short) ((b1 << 8) | (b2 & 0xff));
+ }
+
+ /**
+ * Instantiates an <code>EnumSyntax</code> based attribute with the given IPP
+ * name and the given value (Enums maybe int or String based).
+ *
+ * @param name the attribute name of the subclass.
+ * @param value the integer value of the specific enum.
+ * @return The Attribute (a subclass of EnumSyntax)
+ */
+ public static Attribute getEnumAttribute(String name, Object value)
+ {
+ Class attrClass = getClass(name);
+
+ // There might be unknown enums we have no mapped class for
+ if (attrClass == null)
+ return null;
+
+ try
+ {
+ Field[] fields = attrClass.getDeclaredFields();
+ for (int i = 0; i < fields.length; i++)
+ {
+ Field field = fields[i];
+ if (field.getType().equals(attrClass))
+ {
+ EnumSyntax attr = (EnumSyntax) field.get(null);
+ if (value instanceof Integer
+ && attr.getValue() == ((Integer) value).intValue())
+ return (Attribute) attr;
+ else if (value instanceof String
+ && attr.toString().equals(value))
+ return (Attribute) attr;
+ }
+ }
+ }
+ catch (SecurityException e)
+ {
+ // should not happen
+ }
+ catch (IllegalArgumentException e)
+ {
+ // should not happen
+ }
+ catch (IllegalAccessException e)
+ {
+ // should not happen, all fields are public
+ }
+
+ return null;
+ }
+
+
+
+ /**
+ * Instantiates an <code>IntegerSyntax</code> based attribute with the
+ * given IPP name for the given int value.
+ *
+ * @param name the attribute name of the subclass.
+ * @param value the integer value
+ * @return The Attribute (a subclass of IntegerSyntax)
+ */
+ public static Attribute getIntegerAttribute(String name, int value)
+ {
+ Class attrClass = getClass(name);
+
+ // There might be unknown attributes we have no mapped class for
+ if (attrClass == null)
+ return null;
+
+ try
+ {
+ INTEGER_ATT_VALUE[0] = new Integer(value);
+ Constructor c = attrClass.getDeclaredConstructor(INTEGER_CLASS_ARRAY);
+ return (Attribute) c.newInstance(INTEGER_ATT_VALUE);
+ }
+ catch (SecurityException e)
+ {
+ // should not happen
+ }
+ catch (NoSuchMethodException e)
+ {
+ // should not happen
+ }
+ catch (IllegalAccessException e)
+ {
+ // should not happen, all fields are public
+ }
+ catch (InstantiationException e)
+ {
+ // should not happen, all fields are public
+ }
+ catch (InvocationTargetException e)
+ {
+ // should not happen, all fields are public
+ }
+
+ return null;
+ }
+
+ /**
+ * Instantiates an <code>TextSyntax</code> based attribute with the given
+ * IPP name for the given text value (will be decoded).
+ *
+ * @param name the attribute name of the subclass.
+ * @param tag the tag defined in {@link IppValueTag}
+ * @param value the byte[] value to be decoded based on the tag value.
+ * @return The Attribute (a subclass of TextSyntax)
+ */
+ public static Attribute getTextAttribute(String name, byte tag, byte[] value)
+ {
+ // without language tag is rather easy - default locale
+ if (tag == IppValueTag.NAME_WITHOUT_LANGUAGE
+ || tag == IppValueTag.TEXT_WITHOUT_LANGUAGE)
+ {
+ TEXT_ATT_VALUE[0] = new String(value);
+ TEXT_ATT_VALUE[1] = Locale.getDefault();
+ }
+ else
+ {
+ short langLength = convertToShort(value[0], value[1]);
+ byte[] tmp = new byte[langLength];
+ byte[] tmp2 = new byte[value.length - 4 - langLength];
+ System.arraycopy(value, 2, tmp, 0, langLength);
+
+ // parse into language/region
+ String language = new String(tmp);
+ String text = new String(tmp2);
+ Locale locale = null;
+
+ if (language.length() > 2)
+ locale = new Locale(language.substring(0, 2), language.substring(3));
+ else
+ locale = new Locale(language);
+
+ TEXT_ATT_VALUE[0] = text;
+ TEXT_ATT_VALUE[1] = locale;
+ }
+
+ Class attrClass = getClass(name);
+
+ // There might be unknown attributes we have no mapped class for
+ if (attrClass == null)
+ return null;
+
+ try
+ {
+ Constructor c = attrClass.getDeclaredConstructor(TEXT_CLASS_ARRAY);
+ return (Attribute) c.newInstance(TEXT_ATT_VALUE);
+ }
+ catch (SecurityException e)
+ {
+ // should not happen
+ }
+ catch (NoSuchMethodException e)
+ {
+ // should not happen
+ }
+ catch (IllegalAccessException e)
+ {
+ // should not happen, all fields are public
+ }
+ catch (InstantiationException e)
+ {
+ // should not happen, all fields are public
+ }
+ catch (InvocationTargetException e)
+ {
+ // should not happen, all fields are public
+ }
+
+ return null;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/IppValueTag.java b/libjava/classpath/gnu/javax/print/ipp/IppValueTag.java
new file mode 100644
index 0000000..0c81bef
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/IppValueTag.java
@@ -0,0 +1,170 @@
+/* IppValueTag.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+/**
+ * IPP Value Tags as described in RFC 2910 section 3.5.2.
+ * <p>
+ * Attributes are always of a special type syntax (e.g. boolean or
+ * interger attribute). These value types are specified by the tag
+ * constants provided in this class. Beside the syntax types some
+ * out of band values for reporting requested attributes as
+ * unsupported, unknown etc. back to the client.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class IppValueTag
+{
+
+ /** Out of band value for unsupported attributes. */
+ public static final byte UNSUPPORTED = 0x10;
+
+ // 0x11 reserved for 'default' for definition in a future
+ // IETF standards track document
+
+ /** Out of band value for unknown attributes. */
+ public static final byte UNKNOWN = 0x12;
+
+ /** Out of band value for attribute without a value. */
+ public static final byte NO_VALUE = 0x13;
+
+ // 0x14-0x1F reserved for "out-of-band" values in future IETF
+ // standards track documents.
+
+ // 0x20 reserved for definition in a future IETF
+ // standards track document
+
+ /** Indicates a value of syntax type integer. */
+ public static final byte INTEGER = 0x21;
+
+ /** Indicates a value of syntax type boolean. */
+ public static final byte BOOLEAN = 0x22;
+
+ /** Indicates a value of syntax type enum (enumeration). */
+ public static final byte ENUM = 0x23;
+
+ // 0x24-0x2F reserved for integer types for definition in
+ // future IETF standards track documents
+
+ /** Indicates a value of syntax type octect string. */
+ public static final byte OCTECTSTRING_UNSPECIFIED = 0x30;
+
+ /** Indicates a value of syntax type datetime. */
+ public static final byte DATETIME = 0x31;
+
+ /** Indicates a value of syntax type resolution. */
+ public static final byte RESOLUTION = 0x32;
+
+ /** Indicates a value of syntax type range of integers. */
+ public static final byte RANGEOFINTEGER = 0x33;
+
+ // 0x34 reserved for definition in a future IETF
+ // standards track document
+
+ /** Indicates a value of syntax type text with language. */
+ public static final byte TEXT_WITH_LANGUAGE = 0x35;
+
+ /** Indicates a value of syntax type name with language. */
+ public static final byte NAME_WITH_LANGUAGE = 0x36;
+
+ // 0x37-0x3F reserved for octetString type definitions in
+ // future IETF standards track documents
+
+ // 0x40 reserved for definition in a future IETF
+ // standards track document
+
+ /** Indicates a value of syntax type text without language. */
+ public static final byte TEXT_WITHOUT_LANGUAGE = 0x41;
+
+ /** Indicates a value of syntax type name without language. */
+ public static final byte NAME_WITHOUT_LANGUAGE = 0x42;
+
+ // 0x43 reserved for definition in a future IETF
+ // standards track document
+
+ /** Indicates a value of syntax type keyword. */
+ public static final byte KEYWORD = 0x44;
+
+ /** Indicates a value of syntax type URI. */
+ public static final byte URI = 0x45;
+
+ /** Indicates a value of syntax type URI scheme. */
+ public static final byte URI_SCHEME = 0x46;
+
+ /** Indicates a value of syntax type charset. */
+ public static final byte CHARSET = 0x47;
+
+ /** Indicates a value of syntax type language. */
+ public static final byte NATURAL_LANGUAGE =0x48;
+
+ /** Indicates a value of syntax type mime media. */
+ public static final byte MIME_MEDIA_TYPE = 0x49;
+
+ // 0x4A-0x5F reserved for character string type definitions
+ // in future IETF standards track documents
+
+
+ private IppValueTag()
+ {
+ // not to be instantiated;
+ }
+
+ /**
+ * Tests if given value corresponds to a
+ * value tag value.
+ *
+ * @param value the value to test for
+ * @return <code>true</code> if, <code>false</code> otherwise.
+ */
+ public static boolean isValueTag(byte value)
+ {
+ if(value == 0x10 || value == 0x12 || value == 0x13
+ || value == 0x21 || value == 0x22 || value == 0x23
+ || value == 0x30 || value == 0x31 || value == 0x32
+ || value == 0x33 || value == 0x35 || value == 0x36
+ || value == 0x41 || value == 0x42 || value == 0x44
+ || value == 0x45 || value == 0x46 || value == 0x47
+ || value == 0x48 || value == 0x49 )
+ return true;
+
+ return false;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java b/libjava/classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java
new file mode 100644
index 0000000..1167f52
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java
@@ -0,0 +1,80 @@
+/* MultiDocPrintJobImpl.java -- GNU implementation of MultiDocPrintJob
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp;
+
+
+import javax.print.MultiDoc;
+import javax.print.MultiDocPrintJob;
+import javax.print.PrintException;
+import javax.print.attribute.PrintRequestAttributeSet;
+
+/**
+ * Implementation of the MultiDocPrintJob interface. Implementation
+ * is specific to the <code>IppPrintService</code> implementation.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class MultiDocPrintJobImpl extends DocPrintJobImpl
+ implements MultiDocPrintJob
+{
+
+ /**
+ * Constructor forwarding arguments to the super constructor.
+ *
+ * @param service the print service instance.
+ * @param user the user of this print service.
+ * @param passwd the password of the user.
+ */
+ public MultiDocPrintJobImpl(IppPrintService service, String user,
+ String passwd)
+ {
+ super(service, user, passwd);
+ }
+
+ /**
+ * @see MultiDocPrintJob#print(MultiDoc, PrintRequestAttributeSet)
+ */
+ public void print(MultiDoc multiDoc, PrintRequestAttributeSet attributes)
+ throws PrintException
+ {
+ // FIXME Implement
+ throw new PrintException("Multidoc not yet supported by implementation.");
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java b/libjava/classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java
new file mode 100644
index 0000000..0db846c
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java
@@ -0,0 +1,115 @@
+/* CharsetSyntax.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import java.io.Serializable;
+
+/**
+ * <code>CharsetSyntax</code> is the abstract base class of all attribute
+ * classes which provide a charset (US-ASCII) string as value.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public abstract class CharsetSyntax implements Cloneable, Serializable
+{
+ private final String value;
+
+ /**
+ * Creates a <code>CharsetSyntax</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ *
+ * @exception NullPointerException if value is null
+ */
+ protected CharsetSyntax(String value)
+ {
+ if (value == null)
+ throw new NullPointerException("value may not be null");
+
+ this.value = value;
+ }
+
+ /**
+ * Returns the value of this syntax object.
+ *
+ * @return The value.
+ */
+ public String getValue()
+ {
+ return value;
+ }
+
+ /**
+ * Returns the hashcode for this object.
+ *
+ * @return The hashcode.
+ */
+ public int hashCode()
+ {
+ return value.hashCode();
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return true if both objects are equal, false otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if (! (obj instanceof CharsetSyntax))
+ return false;
+
+ CharsetSyntax tmp = (CharsetSyntax) obj;
+ return value.equals(tmp.getValue());
+ }
+
+ /**
+ * Returns a string representing the object. The returned
+ * string is the underlying text value of this object.
+ *
+ * @return The string representation.
+ */
+ public String toString()
+ {
+ return getValue();
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java b/libjava/classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java
new file mode 100644
index 0000000..0f1084f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java
@@ -0,0 +1,59 @@
+/* DefaultValueAttribute.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import javax.print.attribute.Attribute;
+
+/**
+ * Marker interface for all attribute classes describing attributes
+ * providing default values. Often there exist a sequence of an
+ * attribute name like: Name - &gt; Name-default -&gt; Name-supported.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public interface DefaultValueAttribute extends Attribute
+{
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute();
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java b/libjava/classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java
new file mode 100644
index 0000000..433b6f3
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java
@@ -0,0 +1,93 @@
+/* DetailedStatusMessage.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * DetailedStatusMessage attribute as described in RFC 2911 section
+ * 3.1.6 Operation Response Status Codes and Status Message
+ * provides a short description of the status of the operation.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class DetailedStatusMessage extends TextSyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>DetailedStatusMessage</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public DetailedStatusMessage(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DetailedStatusMessage</code> itself.
+ */
+ public Class getCategory()
+ {
+ return DetailedStatusMessage.class;
+ }
+
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "detailed-status-message".
+ */
+ public String getName()
+ {
+ return "detailed-status-message";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java b/libjava/classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java
new file mode 100644
index 0000000..3433e3e
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java
@@ -0,0 +1,93 @@
+/* DocumentAccessError.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * DocumentAccessError attribute as described in RFC 2911 section
+ * 3.1.6 Operation Response Status Codes and Status Message
+ * provides additional information for document access errors.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class DocumentAccessError extends TextSyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>DocumentAccessError</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public DocumentAccessError(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DocumentAccessError</code> itself.
+ */
+ public Class getCategory()
+ {
+ return DocumentAccessError.class;
+ }
+
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "document-access-error".
+ */
+ public String getName()
+ {
+ return "document-access-error";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java b/libjava/classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java
new file mode 100644
index 0000000..c90af3e
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java
@@ -0,0 +1,117 @@
+/* NaturalLanguageSyntax.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import java.io.Serializable;
+
+/**
+ * <code>NaturalLanguageSyntax</code> is the abstract base class of all
+ * attribute classes which provide a natural language (US-ASCII)
+ * string as value.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public abstract class NaturalLanguageSyntax
+ implements Cloneable, Serializable
+{
+ private final String value;
+
+ /**
+ * Creates a <code>NaturalLanguageSyntax</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ *
+ * @exception NullPointerException if value is null
+ */
+ protected NaturalLanguageSyntax(String value)
+ {
+ if (value == null)
+ throw new NullPointerException("value may not be null");
+
+ this.value = value;
+ }
+
+ /**
+ * Returns the value of this syntax object.
+ *
+ * @return The value.
+ */
+ public String getValue()
+ {
+ return value;
+ }
+
+ /**
+ * Returns the hashcode for this object.
+ *
+ * @return The hashcode.
+ */
+ public int hashCode()
+ {
+ return value.hashCode();
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return true if both objects are equal, false otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if (! (obj instanceof NaturalLanguageSyntax))
+ return false;
+
+ NaturalLanguageSyntax tmp = (NaturalLanguageSyntax) obj;
+ return value.equals(tmp.getValue());
+ }
+
+ /**
+ * Returns a string representing the object. The returned
+ * string is the underlying text value of this object.
+ *
+ * @return The string representation.
+ */
+ public String toString()
+ {
+ return getValue();
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java b/libjava/classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java
new file mode 100644
index 0000000..ae9d32df
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java
@@ -0,0 +1,130 @@
+/* RequestedAttributes.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.print.attribute.Attribute;
+
+/**
+ * <code>RequestedAttributes</code> specifies the requested
+ * attributes in an IPP request operation.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class RequestedAttributes implements Attribute
+{
+ private ArrayList attributes;
+
+ /**
+ * Creates a <code>RequestedAttributes</code> object with
+ * the initial value.
+ *
+ * @param value the string for the ipp name
+ *
+ * @exception NullPointerException if value is null
+ */
+ public RequestedAttributes(String value)
+ {
+ if (value == null)
+ throw new NullPointerException();
+
+ attributes = new ArrayList();
+ attributes.add(value);
+ }
+
+ /**
+ * Adds the IPP name value to the set.
+ *
+ * @param value the string for the ipp name
+ */
+ public void addValue(String value)
+ {
+ attributes.add(value);
+ }
+
+ /**
+ * Returns the values.
+ *
+ * @return The values as list.
+ */
+ public List getValues()
+ {
+ return attributes;
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DocumentFormat</code> itself.
+ */
+ public Class getCategory()
+ {
+ return RequestedAttributes.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "requested-attributes".
+ */
+ public String getName()
+ {
+ return "requested-attributes";
+ }
+
+ /**
+ * Returns the string representation for this object.
+ *
+ * @return The string representation.
+ */
+ public String toString()
+ {
+ StringBuffer b = new StringBuffer();
+
+ if (attributes.size() > 0)
+ b.append(attributes.get(0));
+
+ for (int i=1; i < attributes.size(); i++)
+ b.append(", " + attributes.get(i));
+
+ return b.toString();
+ }
+}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TagElement_Test.java b/libjava/classpath/gnu/javax/print/ipp/attribute/StatusMessage.java
index 12c07cf..692b26e 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TagElement_Test.java
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/StatusMessage.java
@@ -1,5 +1,5 @@
-/* TagElement_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* StatusMessage.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,52 +36,57 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser;
+package gnu.javax.print.ipp.attribute;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.parser.DTD;
-import javax.swing.text.html.parser.Element;
-import javax.swing.text.html.parser.TagElement;
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * StatusMessage attribute as described in RFC 2911 section
+ * 3.1.6 Operation Response Status Codes and Status Message
+ * provides a short description of the status of the operation.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
-public class TagElement_Test
- extends TestCase
+public final class StatusMessage extends TextSyntax implements Attribute
{
- public void testTagElement()
- throws Exception
- {
- HTML.Tag[] tags = HTML.getAllTags();
-
- for (int i = 0; i < tags.length; i++)
- {
- HTML.Tag t = tags [ i ];
- String tn = t.toString();
- Element e = DTD.getDTD("test").getElement("e");
- e.name = tn;
-
- TagElement te = new TagElement(e, true);
- assertTrue(" must be fictional", te.fictional());
- te = new TagElement(e);
- assertFalse("must be non fictional", te.fictional());
-
- assertEquals(te.getHTMLTag().toString(), t.toString());
- assertEquals(t.breaksFlow(), te.breaksFlow());
- assertEquals(t.isPreformatted(), te.isPreformatted());
- }
+ /**
+ * Creates a <code>StatusMessage</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public StatusMessage(String value, Locale locale)
+ {
+ super(value, locale);
}
- protected void setUp()
- throws Exception
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>StatusMessage</code> itself.
+ */
+ public Class getCategory()
{
- super.setUp();
+ return StatusMessage.class;
}
- protected void tearDown()
- throws Exception
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "status-message".
+ */
+ public String getName()
{
- super.tearDown();
+ return "status-message";
}
+
}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java b/libjava/classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java
new file mode 100644
index 0000000..233431a
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java
@@ -0,0 +1,190 @@
+/* UnknownAttribute.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.IppValueTag;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.print.attribute.Attribute;
+
+/**
+ * UnknownAttribute holds all the parsed Attribute information.
+ * It provides methods to get the value-tag, name and value.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class UnknownAttribute implements Attribute
+{
+ private byte tag;
+ private String name;
+ private byte[] value;
+
+ /**
+ * Creates a <code>UnknownAttribute</code> object with the given values.
+ *
+ * @param tag the value tag
+ * @param name the attribute name
+ * @param value the byte[] with the value
+ */
+ public UnknownAttribute(byte tag, String name, byte[] value)
+ {
+ this.tag = tag;
+ this.name = name;
+ this.value = value;
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>UnknownAttribute</code> itself.
+ */
+ public Class getCategory()
+ {
+ return UnknownAttribute.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name attributes IPP name.
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * Returns the value tag
+ * @return The tag.
+ *
+ * @see gnu.javax.print.ipp.IppValueTag
+ */
+ public byte getValueTag()
+ {
+ return tag;
+ }
+
+ /**
+ * Returns the name of the attribute.
+ * @return The name.
+ */
+ public String getAttributeName()
+ {
+ return name;
+ }
+
+ /**
+ * Returns the attribute value origin byte array.
+ * @return The value.
+ */
+ public byte[] getAttributeValue()
+ {
+ return value;
+ }
+
+ /**
+ * Returns the attribute value decoded as String.
+ * @return The value as String.
+ */
+ public String getAttributeValueAsString()
+ {
+ return new String(value);
+ }
+
+ /**
+ * Returns the attribute value decoded as int.
+ * @return The value as int.
+ */
+ public int getAttributeValueAsInt()
+ {
+ return IppUtilities.convertToInt(value);
+ }
+
+ /**
+ * Returns the attribute value decoded as an URI.
+ * @return The value as URI.
+ */
+ public URI getAttributeValueAsUri()
+ {
+ try
+ {
+ return new URI(new String(value));
+ }
+ catch (URISyntaxException e)
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Provides a string representation for some default
+ * tag types (e.g. int, rangeofinteger, string, uri).
+ * For other more complex types "No conversion found."
+ * is returned.
+ */
+ public String toString()
+ {
+ switch (tag)
+ {
+ case IppValueTag.INTEGER:
+ return "" + getAttributeValueAsInt();
+ case IppValueTag.RANGEOFINTEGER:
+ int lower = IppUtilities.convertToInt(value[0], value[1],
+ value[2], value[3]);
+ int upper = IppUtilities.convertToInt(value[4], value[5],
+ value[6], value[7]);
+ return lower + "-" + upper;
+ case IppValueTag.URI:
+ return getAttributeValueAsUri().toString();
+ case IppValueTag.KEYWORD:
+ case IppValueTag.URI_SCHEME:
+ case IppValueTag.CHARSET:
+ case IppValueTag.NATURAL_LANGUAGE:
+ case IppValueTag.MIME_MEDIA_TYPE:
+ case IppValueTag.NAME_WITHOUT_LANGUAGE:
+ case IppValueTag.TEXT_WITHOUT_LANGUAGE:
+ return getAttributeValueAsString();
+ default:
+ return "No conversion found.";
+ }
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java
new file mode 100644
index 0000000..225a089
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java
@@ -0,0 +1,118 @@
+/* CopiesDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+import javax.print.attribute.standard.Copies;
+
+/**
+ * <code>CopiesDefault</code> provides the default value
+ * for the copies attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CopiesDefault extends IntegerSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>CopiesDefault</code> object.
+ *
+ * @param value the number of copies
+ *
+ * @exception IllegalArgumentException if value &lt; 1
+ */
+ public CopiesDefault(int value)
+ {
+ super(value);
+
+ if (value < 1)
+ throw new IllegalArgumentException("value may not be less than 1");
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if(! (obj instanceof CopiesDefault))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>CopiesDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return CopiesDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "copies-default".
+ */
+ public String getName()
+ {
+ return "copies-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ * <p>May return null if no value exists in JPS API.</p>
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return new Copies(getValue());
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java
new file mode 100644
index 0000000..fe40aee
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java
@@ -0,0 +1,106 @@
+/* DocumentFormatDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+import gnu.javax.print.ipp.attribute.printer.DocumentFormat;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * <code>DocumentFormatDefault</code> specifies the default document
+ * format of a printer.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ *
+ */
+public final class DocumentFormatDefault extends TextSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>DocumentFormatDefault</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public DocumentFormatDefault(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DocumentFormatDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return DocumentFormatDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "document-format-default".
+ */
+ public String getName()
+ {
+ return "document-format-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return new DocumentFormat(getValue(), getLocale());
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java
new file mode 100644
index 0000000..d3dd99c
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java
@@ -0,0 +1,263 @@
+/* FinishingsDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+
+
+/**
+ * The <code>FinishingsDefault</code> attribute provides the supported
+ * values for finishings of a job.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class FinishingsDefault extends EnumSyntax
+ implements DefaultValueAttribute
+{
+
+ /** No finishing. */
+ public static final FinishingsDefault NONE = new FinishingsDefault(3);
+
+ /** Staple the document(s) */
+ public static final FinishingsDefault STAPLE = new FinishingsDefault(4);
+
+ /** Cover a document */
+ public static final FinishingsDefault COVER = new FinishingsDefault(6);
+
+ /**
+ * This value indicates that a binding is to be applied to the document.
+ * The type and placement of the binding is site-defined.
+ */
+ public static final FinishingsDefault BIND = new FinishingsDefault(7);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along the middle fold.
+ */
+ public static final FinishingsDefault SADDLE_STITCH = new FinishingsDefault(8);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along one edge.
+ */
+ public static final FinishingsDefault EDGE_STITCH = new FinishingsDefault(9);
+
+ /**
+ * Bind the document(s) with one or more staples in the top left
+ * corner.
+ */
+ public static final FinishingsDefault STAPLE_TOP_LEFT = new FinishingsDefault(20);
+
+ /**
+ * Bind the document(s) with one or more staples in the bottom
+ * left corner.
+ */
+ public static final FinishingsDefault STAPLE_BOTTOM_LEFT = new FinishingsDefault(21);
+
+ /**
+ * Bind the document(s) with one or more staples in the top right corner.
+ */
+ public static final FinishingsDefault STAPLE_TOP_RIGHT = new FinishingsDefault(22);
+
+ /**
+ * Bind the document(s) with one or more staples in the bottom right corner.
+ */
+ public static final FinishingsDefault STAPLE_BOTTOM_RIGHT = new FinishingsDefault(23);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along the left edge.
+ */
+ public static final FinishingsDefault EDGE_STITCH_LEFT = new FinishingsDefault(24);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the top edge.
+ */
+ public static final FinishingsDefault EDGE_STITCH_TOP = new FinishingsDefault(25);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the right edge.
+ */
+ public static final FinishingsDefault EDGE_STITCH_RIGHT = new FinishingsDefault(26);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the bottom edge.
+ */
+ public static final FinishingsDefault EDGE_STITCH_BOTTOM = new FinishingsDefault(27);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * left edge assuming a portrait document.
+ */
+ public static final FinishingsDefault STAPLE_DUAL_LEFT = new FinishingsDefault(28);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * top edge assuming a portrait document.
+ */
+ public static final FinishingsDefault STAPLE_DUAL_TOP = new FinishingsDefault(29);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * right edge assuming a portrait document.
+ */
+ public static final FinishingsDefault STAPLE_DUAL_RIGHT = new FinishingsDefault(30);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * bottom edge assuming a portrait document.
+ */
+ public static final FinishingsDefault STAPLE_DUAL_BOTTOM = new FinishingsDefault(31);
+
+ private static final String[] stringTable = { "none", "staple", null,
+ "cover", "bind", "saddle-stitch",
+ "edge-stitch", null, null, null,
+ null, null, null, null, null,
+ null, null, "staple-top-left",
+ "staple-bottom-left",
+ "staple-top-right",
+ "staple-bottom-right",
+ "edge-stitch-left",
+ "edge-stitch-top",
+ "edge-stitch-right",
+ "edge-stitch-bottom",
+ "staple-dual-left",
+ "staple-dual-top",
+ "staple-dual-right",
+ "staple-dual-bottom" };
+
+ private static final FinishingsDefault[] enumValueTable = { NONE, STAPLE, null,
+ COVER, BIND,
+ SADDLE_STITCH,
+ EDGE_STITCH, null,
+ null, null, null,
+ null, null, null,
+ null, null, null,
+ STAPLE_TOP_LEFT,
+ STAPLE_BOTTOM_LEFT,
+ STAPLE_TOP_RIGHT,
+ STAPLE_BOTTOM_RIGHT,
+ EDGE_STITCH_LEFT,
+ EDGE_STITCH_TOP,
+ EDGE_STITCH_RIGHT,
+ EDGE_STITCH_BOTTOM,
+ STAPLE_DUAL_LEFT,
+ STAPLE_DUAL_TOP,
+ STAPLE_DUAL_RIGHT,
+ STAPLE_DUAL_BOTTOM };
+
+ /**
+ * Constructs a <code>FinishingsDefault</code> object.
+ *
+ * @param value the value
+ */
+ protected FinishingsDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return the class <code>FinishingsDefault</code> itself
+ */
+ public Class getCategory()
+ {
+ return FinishingsDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "finishings-default".
+ */
+ public String getName()
+ {
+ return "finishings-default";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute("finishings", new Integer(getValue()));
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java
new file mode 100644
index 0000000..a0baac7
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java
@@ -0,0 +1,149 @@
+/* JobHoldUntilDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import java.util.Date;
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+import javax.print.attribute.standard.JobHoldUntil;
+
+/**
+ * JobHoldUntilDefault attribute provides the default value
+ * for the attribute type job-hold-until.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobHoldUntilDefault extends TextSyntax
+ implements DefaultValueAttribute
+{
+
+ // a keyword/name based attribute in IPP
+ // can be extended by administrators
+ // standard values are predefined
+
+ /** Job should be printed immediately. */
+ public static final JobHoldUntilDefault NO_HOLD =
+ new JobHoldUntilDefault("no-hold", null);
+
+ /** Job should be hold indefinitely. */
+ public static final JobHoldUntilDefault INDEFINITE =
+ new JobHoldUntilDefault("indefinite", null);
+
+ /** Job should be processed during the day. */
+ public static final JobHoldUntilDefault DAY_TIME =
+ new JobHoldUntilDefault("day-time", null);
+
+ /** Job should be processed in the evening. */
+ public static final JobHoldUntilDefault EVENING =
+ new JobHoldUntilDefault("evening", null);
+
+ /** Job should be processed during night. */
+ public static final JobHoldUntilDefault NIGHT =
+ new JobHoldUntilDefault("night", null);
+
+ /** Job should be processed during the weekend. */
+ public static final JobHoldUntilDefault WEEKEND =
+ new JobHoldUntilDefault("weekend", null);
+
+ /**
+ * Job should be processed as second-shift
+ * (after close of business).
+ */
+ public static final JobHoldUntilDefault SECOND_SHIFT =
+ new JobHoldUntilDefault("second-shift", null);
+
+ /**
+ * Job should be processed as third-shift
+ * (after midnight).
+ */
+ public static final JobHoldUntilDefault THIRD_SHIFT =
+ new JobHoldUntilDefault("third-shift", null);
+
+ /**
+ * Creates a <code>JobHoldUntilDefault</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public JobHoldUntilDefault(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobHoldUntilDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobHoldUntilDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-hold-until-default".
+ */
+ public String getName()
+ {
+ return "job-hold-until-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ // FIXME Same Mapping problem as in IppPrintService
+ return new JobHoldUntil(new Date());
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java
new file mode 100644
index 0000000..de6ad5a
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java
@@ -0,0 +1,118 @@
+/* JobPriorityDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+import javax.print.attribute.standard.JobPriority;
+
+
+/**
+ * JobPriorityDefault attribute provides the default value of
+ * the printer object for the job-priority attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobPriorityDefault extends IntegerSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>JobPriorityDefault</code> object.
+ *
+ * @param value the priority
+ *
+ * @exception IllegalArgumentException if value &lt; 1 or value &gt; 100
+ */
+ public JobPriorityDefault(int value)
+ {
+ super(value);
+
+ if (value < 1 || value > 100)
+ throw new IllegalArgumentException("value out of range");
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if(! (obj instanceof JobPriorityDefault))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobPriorityDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobPriorityDefault.class;
+ }
+
+ /**
+ * Returns name of this class.
+ *
+ * @return The anme "job-priority-default".
+ */
+ public String getName()
+ {
+ return "job-priority-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return new JobPriority(getValue());
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java
new file mode 100644
index 0000000..8f92891
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java
@@ -0,0 +1,122 @@
+/* JobSheetsDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+import javax.print.attribute.standard.JobSheets;
+
+/**
+ * JobSheetsDefault attribute provides the default value of
+ * the printer object for the job-sheets attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobSheetsDefault extends TextSyntax
+ implements DefaultValueAttribute
+{
+ //a keyword/name based attribute in IPP
+ // can be extended by administrators
+ // standard values are predefined
+
+ /** No job sheet is the default */
+ public static final JobSheetsDefault NONE =
+ new JobSheetsDefault("none", Locale.getDefault());
+
+ /** A job sheet is the default */
+ public static final JobSheetsDefault STANDARD =
+ new JobSheetsDefault("standard", Locale.getDefault());
+
+ /**
+ * Creates a <code>JobSheetsDefault</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public JobSheetsDefault(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobSheetsDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobSheetsDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-sheets-default".
+ */
+ public String getName()
+ {
+ return "job-sheets-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ * <p>May return null if no value exists in JPS API.</p>
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ if (this.equals(JobSheetsDefault.NONE))
+ return JobSheets.NONE;
+ if (this.equals(JobSheetsDefault.STANDARD))
+ return JobSheets.STANDARD;
+
+ return null;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java
new file mode 100644
index 0000000..b4e626d
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java
@@ -0,0 +1,105 @@
+/* MediaDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * MediaDefault attribute provides the default value of
+ * the printer object for the media attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class MediaDefault extends TextSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>MediaDefault</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public MediaDefault(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MediaDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MediaDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "media-default".
+ */
+ public String getName()
+ {
+ return "media-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute("media" , getValue());
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java
new file mode 100644
index 0000000..0cc3243
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java
@@ -0,0 +1,152 @@
+/* MultipleDocumentHandlingDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+
+
+/**
+ * <code>MultipleDocumentHandlingDefault</code> provides the
+ * default value for the MultipleDocumentHandling attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class MultipleDocumentHandlingDefault extends EnumSyntax
+ implements DefaultValueAttribute
+{
+
+ //a keyword based attribute in IPP - int values just starting at 0
+
+ /**
+ * Supports only multiple documents treated as a single document. This
+ * applies to attributes which specify treatment of multiple document jobs.
+ */
+ public static final MultipleDocumentHandlingDefault SINGLE_DOCUMENT =
+ new MultipleDocumentHandlingDefault(0);
+
+ /** Supports multiple documents as uncollated copies */
+ public static final MultipleDocumentHandlingDefault SEPARATE_DOCUMENTS_UNCOLLATED_COPIES =
+ new MultipleDocumentHandlingDefault(1);
+
+ /** Supports multiple documents as collated copies */
+ public static final MultipleDocumentHandlingDefault SEPARATE_DOCUMENTS_COLLATED_COPIES =
+ new MultipleDocumentHandlingDefault(2);
+
+ /**
+ * Supports multiple documents where every single document starts
+ * with a new sheet.
+ */
+ public static final MultipleDocumentHandlingDefault SINGLE_DOCUMENT_NEW_SHEET =
+ new MultipleDocumentHandlingDefault(3);
+
+ private static final String[] stringTable = { "single-document",
+ "separate-documents-uncollated-copies",
+ "separate-documents-collated-copies",
+ "single-document-new-sheet" };
+
+ private static final MultipleDocumentHandlingDefault[] enumValueTable =
+ { SINGLE_DOCUMENT, SEPARATE_DOCUMENTS_UNCOLLATED_COPIES,
+ SEPARATE_DOCUMENTS_COLLATED_COPIES, SINGLE_DOCUMENT_NEW_SHEET};
+
+ /**
+ * Constructs a <code>MultipleDocumentHandlingDefault</code> object.
+ *
+ * @param value the enum value
+ */
+ protected MultipleDocumentHandlingDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MultipleDocumentHandlingDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MultipleDocumentHandlingDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "multiple-document-handling-default".
+ */
+ public String getName()
+ {
+ return "multiple-document-handling-default";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute("multiple-document-handling",
+ new Integer(getValue()));
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java
new file mode 100644
index 0000000..6689f2d1
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java
@@ -0,0 +1,114 @@
+/* NumberUpDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+import javax.print.attribute.standard.NumberUp;
+
+/**
+ * NumberUpDefault attribute provides the default value of
+ * the numper up attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class NumberUpDefault extends IntegerSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>NumberUpDefault</code> object.
+ *
+ * @param value the value
+ * @throws IllegalArgumentException if value &lt; 1
+ */
+ public NumberUpDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if(! (obj instanceof NumberUpDefault))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>NumberUpDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return NumberUpDefault.class;
+ }
+
+ /**
+ * Returns name of this class.
+ *
+ * @return The name "number-up-default".
+ */
+ public String getName()
+ {
+ return "number-up-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ * <p>May return null if no value exists in JPS API.</p>
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return new NumberUp(getValue());
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java
new file mode 100644
index 0000000..14d2655
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java
@@ -0,0 +1,154 @@
+/* OrientationRequestedDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+
+
+/**
+ * The <code>OrientationRequestedDefault</code> attribute provides
+ * the default value for the job attribute orientation-requested.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class OrientationRequestedDefault extends EnumSyntax
+ implements DefaultValueAttribute
+{
+
+ /** Orientation as portrait. */
+ public static final OrientationRequestedDefault PORTRAIT =
+ new OrientationRequestedDefault(3);
+
+ /** Orientation as landscape. */
+ public static final OrientationRequestedDefault LANDSCAPE =
+ new OrientationRequestedDefault(4);
+
+ /** Orientation as reversed landscape. */
+ public static final OrientationRequestedDefault REVERSE_LANDSCAPE =
+ new OrientationRequestedDefault(5);
+
+ /** Orientation as reversed portrait. */
+ public static final OrientationRequestedDefault REVERSE_PORTRAIT =
+ new OrientationRequestedDefault(6);
+
+
+ private static final String[] stringTable = { "portrait", "landscape",
+ "reverse-landscape",
+ "reverse-portrait" };
+
+ private static final OrientationRequestedDefault[]
+ enumValueTable = { PORTRAIT, LANDSCAPE,
+ REVERSE_LANDSCAPE, REVERSE_PORTRAIT };
+
+ /**
+ * Constructs a <code>OrientationRequestedDefault</code> object.
+ *
+ * @param value the value
+ */
+ protected OrientationRequestedDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>OrientationRequestedDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return OrientationRequestedDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "orientation-requested-default".
+ */
+ public String getName()
+ {
+ return "orientation-requested-default";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute("orientation-requested",
+ new Integer(getValue()));
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java
new file mode 100644
index 0000000..707d11d
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java
@@ -0,0 +1,141 @@
+/* PrintQualityDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+
+
+/**
+ * <code>PrintQualityDefault</code> provides the
+ * default value for the print-quality attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrintQualityDefault extends EnumSyntax
+ implements DefaultValueAttribute
+{
+ /** Draft quality of the printer. */
+ public static final PrintQualityDefault DRAFT = new PrintQualityDefault(3);
+
+ /** Normal quality of the printer. */
+ public static final PrintQualityDefault NORMAL = new PrintQualityDefault(4);
+
+ /** High quality of the printer. */
+ public static final PrintQualityDefault HIGH = new PrintQualityDefault(5);
+
+ private static final String[] stringTable = { "draft", "normal", "high" };
+
+ private static final PrintQualityDefault[] enumValueTable = { DRAFT, NORMAL, HIGH };
+
+ /**
+ * Constructs a <code>PrintQualityDefault</code> object.
+ *
+ * @param value the value of the enum
+ */
+ protected PrintQualityDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrintQualityDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrintQualityDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "print-quality-default".
+ */
+ public String getName()
+ {
+ return "print-quality-default";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute(
+ "print-quality", new Integer(getValue()));
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java
new file mode 100644
index 0000000..baa00c6
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java
@@ -0,0 +1,119 @@
+/* PrinterResolutionDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.ResolutionSyntax;
+import javax.print.attribute.standard.PrinterResolution;
+
+
+/**
+ * The <code>PrinterResolutionDefault</code> attribute provides
+ * the default value for the job attribute printer-resolution.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterResolutionDefault extends ResolutionSyntax
+ implements DefaultValueAttribute
+{
+
+ /**
+ * Creates a <code>ResolutionSyntax</code> object with the given arguments.
+ *
+ * @param crossFeedResolution the cross feed resolution
+ * @param feedResolution the feed resolution
+ * @param units the unit to use (e.g. {@link #DPCM} or {@link #DPI})
+ *
+ * @exception IllegalArgumentException if preconditions fail
+ */
+ public PrinterResolutionDefault(int crossFeedResolution, int feedResolution,
+ int units)
+ {
+ super(crossFeedResolution, feedResolution, units);
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if(! (obj instanceof PrinterResolutionDefault))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterResolutionDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterResolutionDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-resolution-default".
+ */
+ public String getName()
+ {
+ return "printer-resolution-default";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return new PrinterResolution(getCrossFeedResolutionDphi(),
+ getFeedResolutionDphi(), 1);
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java
new file mode 100644
index 0000000..3c5b0cb
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java
@@ -0,0 +1,150 @@
+/* SidesDefault.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.defaults;
+
+import gnu.javax.print.ipp.IppUtilities;
+import gnu.javax.print.ipp.attribute.DefaultValueAttribute;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.EnumSyntax;
+
+
+/**
+ * <code>SidesDefault</code> provides the
+ * default for the sides attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class SidesDefault extends EnumSyntax
+ implements DefaultValueAttribute
+{
+
+ /** Specifies that each page should be printed on one sheet. */
+ public static final SidesDefault ONE_SIDED = new SidesDefault(0);
+
+ /**
+ * Specifies that two following pages should be printed on the
+ * front and back of one sheet for binding on the long edge.
+ */
+ public static final SidesDefault TWO_SIDED_LONG_EDGE =
+ new SidesDefault(1);
+
+ /**
+ * Specifies that two following pages should be printed on the
+ * front and back of one sheet for binding on the short edge.
+ */
+ public static final SidesDefault TWO_SIDED_SHORT_EDGE =
+ new SidesDefault(2);
+
+ /** An alias constant for "two sided long edge". */
+ public static final SidesDefault DUPLEX = new SidesDefault(1);
+
+ /** An alias constant for "two sided short edge". */
+ public static final SidesDefault TUMBLE = new SidesDefault(2);
+
+ private static final String[] stringTable = { "one-sided",
+ "two-sided-long-edge",
+ "two-sided-short-edge" };
+
+ private static final SidesDefault[] enumValueTable = { ONE_SIDED,
+ TWO_SIDED_LONG_EDGE,
+ TWO_SIDED_SHORT_EDGE };
+
+
+ /**
+ * Creates a <code>SidesDefault</code> object.
+ *
+ * @param value the value of the enum
+ */
+ protected SidesDefault(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>SidesDefault</code> itself.
+ */
+ public Class getCategory()
+ {
+ return SidesDefault.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "sides-default".
+ */
+ public String getName()
+ {
+ return "sides-default";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this DefaultValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Attribute getAssociatedAttribute()
+ {
+ return IppUtilities.getEnumAttribute("sides", new Integer(getValue()));
+ }
+}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/DTD_test.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesCharset.java
index b204a02..057db9b 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/DTD_test.java
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesCharset.java
@@ -1,5 +1,5 @@
-/* DTD_test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* AttributesCharset.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,67 +36,58 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser;
+package gnu.javax.print.ipp.attribute.job;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.parser.DTD;
-import javax.swing.text.html.parser.Element;
+import gnu.javax.print.ipp.attribute.CharsetSyntax;
+
+import javax.print.attribute.Attribute;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * AttributesCharset attribute as described in RFC 2911 chapter
+ * 3.1.4 Character Set and Natural Language Operation Attributes.
+ * <p>
+ * This operation attribute identifies the charset used by any text
+ * and name attribute supplied by the client in the request. This
+ * charset must be used by the printer object in the response.<br>
+ * All clients and IPP objects must support the 'utf-8' charset.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
-public class DTD_test
- extends TestCase
+public final class AttributesCharset extends CharsetSyntax
+ implements Attribute
{
- static class D
- extends DTD
- {
- public D()
- {
- super("audrius");
- }
-
- public Element createElement(String n)
- {
- return getElement(n);
- }
- }
-
- public void testGetElement()
+
+ /** Defines a default UTF-8 charset instance */
+ public static final AttributesCharset UTF8 = new AttributesCharset("utf-8");
+
+ /**
+ * Creates a <code>AttributesCharset</code> object.
+ *
+ * @param value the charset string value.
+ */
+ public AttributesCharset(String value)
{
- D d = new D();
- HTML.Tag[] tags = HTML.getAllTags();
-
- Element prehead = d.createElement("head");
-
- for (int i = 0; i < tags.length; i++)
- {
- Element e = d.createElement(tags [ i ].toString());
- String name = tags [ i ].toString();
- assertNotNull("Element creation", e);
- assertTrue("Element name", e.getName().equalsIgnoreCase(name));
- }
-
- // Test upper/lowercase
- Element e = d.createElement("head");
-
- assertNotNull("Element creation", e);
- assertTrue("Element name", e.getName().equalsIgnoreCase("head"));
- assertEquals(HTML.Tag.HEAD, HTML.getTag(e.name));
- assertEquals("Field assignment", d.head, e);
-
- assertEquals(prehead, e);
+ super(value);
}
- protected void setUp()
- throws Exception
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>AttributesCharset</code> itself.
+ */
+ public Class getCategory()
{
- super.setUp();
+ return AttributesCharset.class;
}
- protected void tearDown()
- throws Exception
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "attributes-charset".
+ */
+ public String getName()
{
- super.tearDown();
+ return "attributes-charset";
}
}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Constants_Test.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java
index 4f463d1..8a41711 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/Constants_Test.java
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java
@@ -1,5 +1,5 @@
-/* Constants_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* AttributesNaturalLanguage.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,54 +36,60 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser.low;
+package gnu.javax.print.ipp.attribute.job;
-import test.gnu.javax.swing.text.html.parser.TestCase;
-import gnu.javax.swing.text.html.parser.support.low.Buffer;
-import gnu.javax.swing.text.html.parser.support.low.Constants;
-import gnu.javax.swing.text.html.parser.support.low.Token;
+import gnu.javax.print.ipp.attribute.NaturalLanguageSyntax;
+
+import javax.print.attribute.Attribute;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * AttributesNaturalLanguage attribute as described in RFC 2911 chapter
+ * 3.1.4 Character Set and Natural Language Operation Attributes.
+ * <p>
+ * This operation attribute identifies the natural language used
+ * by any text and name attribute supplied by the client in the request.
+ * The printer object should use this natural language for the response
+ * to this request.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
-public class Constants_Test
- extends TestCase
+public final class AttributesNaturalLanguage extends NaturalLanguageSyntax
+ implements Attribute
{
- Constants c = new Constants();
-
- public void testCases()
+
+ /** Defines the default language EN */
+ public static final AttributesNaturalLanguage EN =
+ new AttributesNaturalLanguage("en");
+
+ /**
+ * Creates a <code>AttributesNaturalLanguage</code> object.
+ *
+ * @param value the language string value.
+ */
+ public AttributesNaturalLanguage(String value)
{
- verify("x stYle ", c.STYLE, "stYle");
- verify("x !style!", c.STYLE, "style");
- verify("x !Script!", c.SCRIPT, "Script");
- verify(" \r\t\n z", c.WS, " \r\t\n ");
- verify("123 ", c.NUMTOKEN, "123");
- verify("AaB123#", c.NUMTOKEN, "AaB123");
- verify("x-- ", c.DOUBLE_DASH, "--");
- verify("x--- ", c.DOUBLE_DASH, "--");
-
- verify("z&entitu ", c.ENTITY, "&entitu");
-
- verifyNull("x stYle");
- verifyNull("x !style");
- verifyNull("x !Script");
- verifyNull(" \r\t\n ");
- verifyNull("123");
- verifyNull("AaB123");
- verifyNull("x--");
+ super(value);
}
- public void verify(String sequence, int kind, String image)
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>AttributesNaturalLanguage</code> itself.
+ */
+ public Class getCategory()
{
- Token t = c.endMatches(new Buffer(sequence));
- assertEquals(kind, t.kind);
- assertEquals(image, t.getImage());
+ return AttributesNaturalLanguage.class;
}
- public void verifyNull(String sequence)
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "attributes-natural-language".
+ */
+ public String getName()
{
- Token t = c.endMatches(new Buffer(sequence));
- assertNull("The end should not match any token", t);
+ return "attributes-natural-language";
}
}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java
new file mode 100644
index 0000000..29f47b7
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java
@@ -0,0 +1,92 @@
+/* JobDetailedStatusMessages.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * JobDetailedStatusMessages provides additional detailed and
+ * technical job informations.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobDetailedStatusMessages
+ extends TextSyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobDetailedStatusMessages</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public JobDetailedStatusMessages(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobDetailedStatusMessages</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobDetailedStatusMessages.class;
+ }
+
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-detailed-status-messages".
+ */
+ public String getName()
+ {
+ return "job-detailed-status-messages";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java
new file mode 100644
index 0000000..46083be
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java
@@ -0,0 +1,93 @@
+/* JobDocumentAccessErrors.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * JobDocumentAccessErrors provides additional information
+ * for each access error for print-uri or document-uri jobs.
+ * technical job informations.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobDocumentAccessErrors
+ extends TextSyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobDocumentAccessErrors</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public JobDocumentAccessErrors(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobDocumentAccessErrors</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobDocumentAccessErrors.class;
+ }
+
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-document-access-errors".
+ */
+ public String getName()
+ {
+ return "job-document-access-errors";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobId.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobId.java
new file mode 100644
index 0000000..f1d85fa
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobId.java
@@ -0,0 +1,87 @@
+/* JobId.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+
+/**
+ * The <code>JobId</code> attribute contains the ID of a
+ * print job created or currently being processed.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobId extends IntegerSyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>IntegerSyntax</code> with the given value.
+ *
+ * @param value the integer to set
+ * @throws IllegalArgumentException if value is &lt; 1
+ */
+ public JobId(int value)
+ {
+ super(value);
+
+ if (value < 1)
+ throw new IllegalArgumentException("job-id may not be less than 1");
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobId</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobId.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-id".
+ */
+ public String getName()
+ {
+ return "job-id";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java
new file mode 100644
index 0000000..a2fe322
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java
@@ -0,0 +1,87 @@
+/* JobMoreInfo.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.net.URI;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.URISyntax;
+
+/**
+ * JobMoreInfo attribute as described in RFC 2911 section
+ * 4.3.4 contains the URI where more information about a job
+ * (e.g. through a HTML page) can be found.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobMoreInfo extends URISyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobMoreInfo</code> object.
+ *
+ * @param uri the URI value for the syntax
+ * @throws NullPointerException if uri is null
+ */
+ public JobMoreInfo(URI uri)
+ {
+ super(uri);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobMoreInfo</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobMoreInfo.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-more-info".
+ */
+ public String getName()
+ {
+ return "job-more-info";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java
new file mode 100644
index 0000000..dce5520
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java
@@ -0,0 +1,87 @@
+/* JobPrinterUri.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.net.URI;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.URISyntax;
+
+/**
+ * JobPrinterUri attribute as described in RFC 2911 section
+ * 4.3.3 contains the URI of the printer which created and
+ * processes a job.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobPrinterUri extends URISyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobPrinterUri</code> object.
+ *
+ * @param uri the URI value for the syntax
+ * @throws NullPointerException if uri is null
+ */
+ public JobPrinterUri(URI uri)
+ {
+ super(uri);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobPrinterUri</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobPrinterUri.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-printer-uri".
+ */
+ public String getName()
+ {
+ return "job-printer-uri";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java
new file mode 100644
index 0000000..0cf6523
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java
@@ -0,0 +1,92 @@
+/* JobStateMessage.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.util.Locale;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * JobStateMessage attribute describes information about the
+ * job-state and job-state-reasons in human readable form.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobStateMessage
+ extends TextSyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobStateMessage</code> object with the given value
+ * and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public JobStateMessage(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobStateMessage</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobStateMessage.class;
+ }
+
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-state-message".
+ */
+ public String getName()
+ {
+ return "job-state-message";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobUri.java b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobUri.java
new file mode 100644
index 0000000..fa7e3f7
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/job/JobUri.java
@@ -0,0 +1,87 @@
+/* JobUri.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.job;
+
+import java.net.URI;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.URISyntax;
+
+/**
+ * JobUri attribute as described in RFC 2911 section
+ * 4.3.1 contains the URI for a job generated by the printer
+ * after a create request.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobUri extends URISyntax implements Attribute
+{
+
+ /**
+ * Creates a <code>JobUri</code> object.
+ *
+ * @param uri the URI value for the syntax
+ * @throws NullPointerException if uri is null
+ */
+ public JobUri(URI uri)
+ {
+ super(uri);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobUri</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobUri.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-uri".
+ */
+ public String getName()
+ {
+ return "job-uri";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java
new file mode 100644
index 0000000..7c87545
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java
@@ -0,0 +1,86 @@
+/* CharsetConfigured.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import gnu.javax.print.ipp.attribute.CharsetSyntax;
+
+import javax.print.attribute.Attribute;
+
+/**
+ * CharsetConfigured attribute as described in RFC 2911 section
+ * 4.4.17 provides the charset which is configured by the
+ * server to be used in the name and text syntax attribute types.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CharsetConfigured extends CharsetSyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>CharsetConfigured</code> object.
+ *
+ * @param value the charset string value.
+ */
+ public CharsetConfigured(String value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>CharsetConfigured</code> itself.
+ */
+ public Class getCategory()
+ {
+ return CharsetConfigured.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "charset-configured".
+ */
+ public String getName()
+ {
+ return "charset-configured";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java
new file mode 100644
index 0000000..e9abab46
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java
@@ -0,0 +1,110 @@
+/* DocumentFormat.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import java.util.Locale;
+
+import javax.print.DocFlavor;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * <code>DocumentFormatSupported</code> specifies the supported document
+ * formats of a printer. Printer are supplying a set of this attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class DocumentFormat extends TextSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>DocumentFormat</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public DocumentFormat(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Constructs a document format object for the given flavor.
+ * The constructor reworkes the mimetype of the given flavor
+ * to remove the quoted charset parameter if present.
+ *
+ * @param flavor the flavor with the mimetype
+ * @return The created document format.
+ */
+ public static DocumentFormat createDocumentFormat(DocFlavor flavor)
+ {
+ String charset = flavor.getParameter("charset");
+ String mimetype = flavor.getMediaType() + "/" + flavor.getMediaSubtype();
+ if (charset != null)
+ mimetype += "; charset=" + charset;
+
+ return new DocumentFormat(mimetype, null);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DocumentFormat</code> itself.
+ */
+ public Class getCategory()
+ {
+ return DocumentFormat.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "document-format".
+ */
+ public String getName()
+ {
+ return "document-format";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java
new file mode 100644
index 0000000..8e54e05
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java
@@ -0,0 +1,86 @@
+/* MultipleOperationTimeOut.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+
+/**
+ * MultipleOperationTimeOut attribute as described in RFC 2911 section
+ * 4.4.31 provides the minimum time ins second a printer object waits
+ * before time out and recovery. The printer object waits e.g. for
+ * additional SendDocument or SendUri operations.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class MultipleOperationTimeOut extends IntegerSyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>MultipleOperationTimeOut</code> with the given value.
+ *
+ * @param value the integer to set
+ */
+ public MultipleOperationTimeOut(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MultipleOperationTimeOut</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MultipleOperationTimeOut.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "multiple-operation-time-out".
+ */
+ public String getName()
+ {
+ return "multiple-operation-time-out";
+ }
+
+}
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java
index b5d912d..8032c3a 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java
@@ -1,5 +1,5 @@
-/* ObjectReferenceFactoryOperations.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* NaturalLanguageConfigured.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,34 +36,51 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package org.omg.PortableInterceptor;
+package gnu.javax.print.ipp.attribute.printer;
-import org.omg.CORBA.portable.ValueBase;
+import gnu.javax.print.ipp.attribute.NaturalLanguageSyntax;
+
+import javax.print.attribute.Attribute;
/**
- * Defines the operations, applicable to the ObjectReferenceFactory.
- *
- * @since 1.5
- *
- * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ * NaturalLanguageConfigured attribute as described in RFC 2911
+ * section 4.4.19 provides the natural language which is configured
+ * by the server to be used in the name and text syntax attribute types.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
-public interface ObjectReferenceFactoryOperations
- extends ValueBase
+public final class NaturalLanguageConfigured extends NaturalLanguageSyntax
+ implements Attribute
{
+
/**
- * Create an object with the given repository and object ids. This interface
- * does not specify where and how the returned object must be connected and
- * activated. The derived {@link ObjectReferenceTemplate} interface assumes
- * the the object must be connected to the POA that is specific to that
- * template (name can be obtained).
- *
- * If the object with this objectId already exists in the given context, it is
- * found and returned; the new object is <i>not</i> created.
+ * Creates a <code>NaturalLanguageConfigured</code> object.
*
- * @param repositoryId the repository id of the object being created, defines
- * the type of the object.
- *
- * @param objectId the byte array, defining the identity of the object.
+ * @param value the charset string value.
*/
- org.omg.CORBA.Object make_object(String repositoryId, byte[] objectId);
-} \ No newline at end of file
+ public NaturalLanguageConfigured(String value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>NaturalLanguageConfigured</code> itself.
+ */
+ public Class getCategory()
+ {
+ return NaturalLanguageConfigured.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "natural-language-configured".
+ */
+ public String getName()
+ {
+ return "natural-language-configured";
+ }
+
+}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/parameterDefaulter_Test.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java
index 866a7fc..fe64ab0 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/parameterDefaulter_Test.java
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java
@@ -1,5 +1,5 @@
-/* parameterDefaulter_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* PrinterCurrentTime.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,57 +36,71 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser;
+package gnu.javax.print.ipp.attribute.printer;
-import gnu.javax.swing.text.html.parser.HTML_401F;
-import gnu.javax.swing.text.html.parser.htmlAttributeSet;
-import gnu.javax.swing.text.html.parser.support.parameterDefaulter;
+import java.util.Date;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTML.Attribute;
+import javax.print.attribute.DateTimeSyntax;
+import javax.print.attribute.PrintServiceAttribute;
/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ * PrinterCurrentTime attribute as described in RFC 2911 section
+ * 4.4.30 provides the current time of the print service.
+ * Its to be used by other attributes like the date-time-at-xxx
+ * attributes in the creation process.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
-public class parameterDefaulter_Test
- extends TestCase
+public final class PrinterCurrentTime extends DateTimeSyntax
+ implements PrintServiceAttribute
{
- parameterDefaulter defaulter;
- public void testDefaultValues()
+ /**
+ * Creates a <code>PrinterCurrentTime</code> object.
+ *
+ * @param value the date at creation time
+ *
+ * @exception NullPointerException if value is null
+ */
+ public PrinterCurrentTime(Date value)
{
- AttributeSet d;
- d = defaulter.getDefaultParameters("FrAmE");
- assertEquals(d.getAttribute("scrolling"), "auto");
- d = defaulter.getDefaultParameters("input");
- assertEquals(d.getAttribute("type"), "text");
-
- htmlAttributeSet hma = new htmlAttributeSet();
- hma.setResolveParent(d);
- hma.addAttribute("ku", "1");
- hma.addAttribute(Attribute.ACTION, "sleep");
-
- assertEquals(hma.getAttribute("action"), "sleep");
- assertEquals(hma.getAttribute(Attribute.ACTION), "sleep");
- assertEquals(hma.getAttribute("ku"), "1");
-
- // Calling the parent:
- assertEquals(hma.getAttribute(Attribute.TYPE), "text");
-
- d = defaulter.getDefaultParameters("audrius");
- assertEquals(d.getAttribute("scrolling"), null);
+ super(value);
}
- protected void setUp()
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
{
- defaulter = new parameterDefaulter(HTML_401F.getInstance());
+ if(! (obj instanceof PrinterCurrentTime))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterCurrentTime</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterCurrentTime.class;
}
- protected void tearDown()
- throws java.lang.Exception
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-current-time".
+ */
+ public String getName()
{
- defaulter = null;
- super.tearDown();
+ return "printer-current-time";
}
+
}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java
new file mode 100644
index 0000000..8a70edf
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java
@@ -0,0 +1,88 @@
+/* PrinterDriverInstaller.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import java.net.URI;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.URISyntax;
+
+/**
+ * PrinterDriverInstaller attribute as described in RFC 2911 section
+ * 4.4.81 provides the URI where a printer driver installer
+ * can be found.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterDriverInstaller extends URISyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>PrinterDriverInstaller</code> object.
+ *
+ * @param uri the URI value for the syntax
+ * @throws NullPointerException if uri is null
+ */
+ public PrinterDriverInstaller(URI uri)
+ {
+ super(uri);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterDriverInstaller</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterDriverInstaller.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-driver-installer".
+ */
+ public String getName()
+ {
+ return "printer-driver-installer";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java
new file mode 100644
index 0000000..da463c4
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java
@@ -0,0 +1,93 @@
+/* PrinterStateMessage.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import java.util.Locale;
+
+import javax.print.attribute.PrintServiceAttribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * PrinterStateMessage attribute as described in RFC 2911 section
+ * 4.4.13 provides a textual representation of the attributes
+ * printer-state and printer-state-reasons for consumption by
+ * humans.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterStateMessage extends TextSyntax
+ implements PrintServiceAttribute
+{
+
+ /**
+ * Creates a <code>PrinterStateMessage</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public PrinterStateMessage(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterStateMessage</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterStateMessage.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-state-message".
+ */
+ public String getName()
+ {
+ return "printer-state-message";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java
new file mode 100644
index 0000000..7f9b111
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java
@@ -0,0 +1,86 @@
+/* PrinterUpTime.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.printer;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.IntegerSyntax;
+
+/**
+ * PrinterUpTime attribute as described in RFC 2911 section
+ * 4.4.29 provides the uptime of the printer object. This
+ * is a value in second starting at 1 after a initialization
+ * or reboot of the printer object.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterUpTime extends IntegerSyntax
+ implements Attribute
+{
+
+ /**
+ * Creates a <code>PrinterUpTime</code> with the given value.
+ *
+ * @param value the integer to set
+ */
+ public PrinterUpTime(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterUpTime</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterUpTime.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-up-time".
+ */
+ public String getName()
+ {
+ return "printer-up-time";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java
new file mode 100644
index 0000000..75804b5
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java
@@ -0,0 +1,87 @@
+/* CharsetSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.attribute.CharsetSyntax;
+
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * CharsetSupported attribute as described in RFC 2911 section
+ * 4.4.18 provides the charset which are supported by the
+ * IPP implementation to be used in the name and text syntax
+ * attribute types.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CharsetSupported extends CharsetSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>CharsetSupported</code> object.
+ *
+ * @param value the charset string value.
+ */
+ public CharsetSupported(String value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>CharsetSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return CharsetSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "charset-supported".
+ */
+ public String getName()
+ {
+ return "charset-supported";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java
new file mode 100644
index 0000000..648167a
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java
@@ -0,0 +1,162 @@
+/* CompressionSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.Compression;
+
+
+/**
+ * <code>CompressionSupported</code> provides the values which are
+ * supported for the compression attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class CompressionSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ /** The print data is not compressed. */
+ public static final CompressionSupported NONE = new CompressionSupported(0);
+
+ /** The print data is ZIP compressed. */
+ public static final CompressionSupported DEFLATE = new CompressionSupported(1);
+
+ /** The print data is GNU Zip compressed. */
+ public static final CompressionSupported GZIP = new CompressionSupported(2);
+
+ /** The print data is UNIX compressed. */
+ public static final CompressionSupported COMPRESS = new CompressionSupported(3);
+
+ private static final String[] stringTable = { "none", "deflate",
+ "gzip", "compress" };
+
+ private static final CompressionSupported[] enumValueTable = { NONE, DEFLATE,
+ GZIP, COMPRESS };
+
+ /**
+ * Constructs a <code>CompressionSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ protected CompressionSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>CompressionSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return CompressionSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "compression-supported".
+ */
+ public String getName()
+ {
+ return "compression-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Compression getAssociatedAttribute()
+ {
+ return (Compression) IppUtilities.getEnumAttribute(
+ "compression", new Integer(getValue()));
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static Compression[] getAssociatedAttributeArray(Set set)
+ {
+ CompressionSupported tmp;
+ Compression[] result = new Compression[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (CompressionSupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java
new file mode 100644
index 0000000..6bd63dc
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java
@@ -0,0 +1,91 @@
+/* DocumentFormatSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import java.util.Locale;
+
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * <code>DocumentFormatSupported</code> specifies the supported document
+ * formats of a printer. Printer are supplying a set of this attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class DocumentFormatSupported extends TextSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>DocumentFormatSupported</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @exception NullPointerException if value is null
+ */
+ public DocumentFormatSupported(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>DocumentFormatSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return DocumentFormatSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "document-format-supported".
+ */
+ public String getName()
+ {
+ return "document-format-supported";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java
new file mode 100644
index 0000000..9f9c635
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java
@@ -0,0 +1,303 @@
+/* FinishingsSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.Finishings;
+
+
+/**
+ * The <code>FinishingsSupported</code> attribute provides the supported
+ * values for finishings of a job.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class FinishingsSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ /** No finishing. */
+ public static final FinishingsSupported NONE = new FinishingsSupported(3);
+
+ /** Staple the document(s) */
+ public static final FinishingsSupported STAPLE = new FinishingsSupported(4);
+
+ /** Cover a document */
+ public static final FinishingsSupported COVER = new FinishingsSupported(6);
+
+ /**
+ * This value indicates that a binding is to be applied to the document.
+ * The type and placement of the binding is site-defined.
+ */
+ public static final FinishingsSupported BIND = new FinishingsSupported(7);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along the middle fold.
+ */
+ public static final FinishingsSupported SADDLE_STITCH =
+ new FinishingsSupported(8);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along one edge.
+ */
+ public static final FinishingsSupported EDGE_STITCH =
+ new FinishingsSupported(9);
+
+ /**
+ * Bind the document(s) with one or more staples in the top left
+ * corner.
+ */
+ public static final FinishingsSupported STAPLE_TOP_LEFT =
+ new FinishingsSupported(20);
+
+ /**
+ * Bind the document(s) with one or more staples in the bottom
+ * left corner.
+ */
+ public static final FinishingsSupported STAPLE_BOTTOM_LEFT =
+ new FinishingsSupported(21);
+
+ /**
+ * Bind the document(s) with one or more staples in the top right corner.
+ */
+ public static final FinishingsSupported STAPLE_TOP_RIGHT =
+ new FinishingsSupported(22);
+
+ /**
+ * Bind the document(s) with one or more staples in the bottom right corner.
+ */
+ public static final FinishingsSupported STAPLE_BOTTOM_RIGHT =
+ new FinishingsSupported(23);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches)
+ * along the left edge.
+ */
+ public static final FinishingsSupported EDGE_STITCH_LEFT =
+ new FinishingsSupported(24);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the top edge.
+ */
+ public static final FinishingsSupported EDGE_STITCH_TOP =
+ new FinishingsSupported(25);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the right edge.
+ */
+ public static final FinishingsSupported EDGE_STITCH_RIGHT =
+ new FinishingsSupported(26);
+
+ /**
+ * Bind the document(s) with one or more staples (wire stitches) along
+ * the bottom edge.
+ */
+ public static final FinishingsSupported EDGE_STITCH_BOTTOM =
+ new FinishingsSupported(27);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * left edge assuming a portrait document.
+ */
+ public static final FinishingsSupported STAPLE_DUAL_LEFT =
+ new FinishingsSupported(28);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * top edge assuming a portrait document.
+ */
+ public static final FinishingsSupported STAPLE_DUAL_TOP =
+ new FinishingsSupported(29);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * right edge assuming a portrait document.
+ */
+ public static final FinishingsSupported STAPLE_DUAL_RIGHT =
+ new FinishingsSupported(30);
+
+ /**
+ * Bind the document(s) with two staples (wire stitches) along the
+ * bottom edge assuming a portrait document.
+ */
+ public static final FinishingsSupported STAPLE_DUAL_BOTTOM =
+ new FinishingsSupported(31);
+
+ private static final String[] stringTable = { "none", "staple", null,
+ "cover", "bind", "saddle-stitch",
+ "edge-stitch", null, null, null,
+ null, null, null, null, null,
+ null, null, "staple-top-left",
+ "staple-bottom-left",
+ "staple-top-right",
+ "staple-bottom-right",
+ "edge-stitch-left",
+ "edge-stitch-top",
+ "edge-stitch-right",
+ "edge-stitch-bottom",
+ "staple-dual-left",
+ "staple-dual-top",
+ "staple-dual-right",
+ "staple-dual-bottom" };
+
+ private static final FinishingsSupported[] enumValueTable = { NONE, STAPLE,
+ null, COVER, BIND,
+ SADDLE_STITCH,
+ EDGE_STITCH, null,
+ null, null, null,
+ null, null, null,
+ null, null, null,
+ STAPLE_TOP_LEFT,
+ STAPLE_BOTTOM_LEFT,
+ STAPLE_TOP_RIGHT,
+ STAPLE_BOTTOM_RIGHT,
+ EDGE_STITCH_LEFT,
+ EDGE_STITCH_TOP,
+ EDGE_STITCH_RIGHT,
+ EDGE_STITCH_BOTTOM,
+ STAPLE_DUAL_LEFT,
+ STAPLE_DUAL_TOP,
+ STAPLE_DUAL_RIGHT,
+ STAPLE_DUAL_BOTTOM };
+
+ /**
+ * Constructs a <code>FinishingsSupported</code> object.
+ *
+ * @param value the value
+ */
+ protected FinishingsSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return the class <code>FinishingsSupported</code> itself
+ */
+ public Class getCategory()
+ {
+ return FinishingsSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "finishings-supported".
+ */
+ public String getName()
+ {
+ return "finishings-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public Finishings getAssociatedAttribute()
+ {
+ return (Finishings) IppUtilities.getEnumAttribute(
+ "finishings", new Integer(getValue()));
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static Finishings[] getAssociatedAttributeArray(Set set)
+ {
+ FinishingsSupported tmp;
+ Finishings[] result = new Finishings[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (FinishingsSupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java
new file mode 100644
index 0000000..1dbb293
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java
@@ -0,0 +1,88 @@
+/* GeneratedNaturalLanguageSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.attribute.NaturalLanguageSyntax;
+
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * GeneratedNaturalLanguageSupported attribute as described
+ * in RFC 2911 section 4.4.20 provides the natural languages
+ * which are supported by the IPP implementation to be used
+ * in the name and text syntax attribute types.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class GeneratedNaturalLanguageSupported
+ extends NaturalLanguageSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>GeneratedNaturalLanguageSupported</code> object.
+ *
+ * @param value the charset string value.
+ */
+ public GeneratedNaturalLanguageSupported(String value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>GeneratedNaturalLanguageSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return GeneratedNaturalLanguageSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "generated-natural-language-supported".
+ */
+ public String getName()
+ {
+ return "generated-natural-language-supported";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java
new file mode 100644
index 0000000..06365e6
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java
@@ -0,0 +1,121 @@
+/* IppVersionsSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * IppVersionsSupported attribute as described in RFC 2911 section
+ * 4.4.14 provides the value(s) (implemented as EnumSyntax)
+ * of the supported IPP versions.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class IppVersionsSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ // a keyword based attribute in IPP - int values just starting at 0
+
+ /** IPP version 1.0 */
+ public static final IppVersionsSupported V_1_0 =
+ new IppVersionsSupported(0);
+
+ /** IPP version 1.1 */
+ public static final IppVersionsSupported V_1_1 =
+ new IppVersionsSupported(1);
+
+ private static final String[] stringTable = { "1.0", "1.1" };
+
+ private static final IppVersionsSupported[] enumValueTable = { V_1_0,
+ V_1_1 };
+
+ /**
+ * Constructs a <code>IppVersionsSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ public IppVersionsSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>IppVersionsSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return IppVersionsSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "ipp-versions-supported".
+ */
+ public String getName()
+ {
+ return "ipp-versions-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java
new file mode 100644
index 0000000..a15d009
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java
@@ -0,0 +1,133 @@
+/* JobHoldUntilSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import java.util.Locale;
+
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.TextSyntax;
+
+/**
+ * JobHoldUntilSupported attribute provides the supported
+ * values for the attribute type job-hold-until.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobHoldUntilSupported extends TextSyntax
+ implements SupportedValuesAttribute
+{
+
+ // a keyword/name based attribute in IPP
+ // can be extended by administrators
+ // standard values are predefined
+
+ /** Job should be printed immediately. */
+ public static final JobHoldUntilSupported NO_HOLD =
+ new JobHoldUntilSupported("no-hold", null);
+
+ /** Job should be hold indefinitely. */
+ public static final JobHoldUntilSupported INDEFINITE =
+ new JobHoldUntilSupported("indefinite", null);
+
+ /** Job should be processed during the day. */
+ public static final JobHoldUntilSupported DAY_TIME =
+ new JobHoldUntilSupported("day-time", null);
+
+ /** Job should be processed in the evening. */
+ public static final JobHoldUntilSupported EVENING =
+ new JobHoldUntilSupported("evening", null);
+
+ /** Job should be processed during night. */
+ public static final JobHoldUntilSupported NIGHT =
+ new JobHoldUntilSupported("night", null);
+
+ /** Job should be processed during the weekend. */
+ public static final JobHoldUntilSupported WEEKEND =
+ new JobHoldUntilSupported("weekend", null);
+
+ /**
+ * Job should be processed as second-shift
+ * (after close of business).
+ */
+ public static final JobHoldUntilSupported SECOND_SHIFT =
+ new JobHoldUntilSupported("second-shift", null);
+
+ /**
+ * Job should be processed as third-shift
+ * (after midnight).
+ */
+ public static final JobHoldUntilSupported THIRD_SHIFT =
+ new JobHoldUntilSupported("third-shift", null);
+
+ /**
+ * Creates a <code>JobHoldUntilSupported</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public JobHoldUntilSupported(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobHoldUntilSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobHoldUntilSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-hold-until-supported".
+ */
+ public String getName()
+ {
+ return "job-hold-until-supported";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java
new file mode 100644
index 0000000..4051e24
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java
@@ -0,0 +1,150 @@
+/* JobSheetsSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.attribute.defaults.JobSheetsDefault;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.TextSyntax;
+import javax.print.attribute.standard.JobSheets;
+
+/**
+ * JobSheetsSupported attribute provides the supported values
+ * of the job-sheets attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class JobSheetsSupported extends TextSyntax
+ implements SupportedValuesAttribute
+{
+ //a keyword/name based attribute in IPP
+ // can be extended by administrators
+ // standard values are predefined
+
+ /** No job sheet is the default */
+ public static final JobSheetsDefault NONE =
+ new JobSheetsDefault("none", Locale.getDefault());
+
+ /** A job sheet is the default */
+ public static final JobSheetsDefault STANDARD =
+ new JobSheetsDefault("standard", Locale.getDefault());
+
+ /**
+ * Creates a <code>JobSheetsSupported</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public JobSheetsSupported(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>JobSheetsSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return JobSheetsSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "job-sheets-supported".
+ */
+ public String getName()
+ {
+ return "job-sheets-supported";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ * <p>May return null if no value exists in JPS API.</p>
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public JobSheets getAssociatedAttribute()
+ {
+ if (this.equals(JobSheetsDefault.NONE))
+ return JobSheets.NONE;
+ if (this.equals(JobSheetsDefault.STANDARD))
+ return JobSheets.STANDARD;
+
+ return null;
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static JobSheets[] getAssociatedAttributeArray(Set set)
+ {
+ JobSheetsSupported tmp;
+ ArrayList result = new ArrayList();
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (JobSheetsSupported) it.next();
+ Attribute att = tmp.getAssociatedAttribute();
+ if (att != null)
+ result.add(att);
+ j++;
+ }
+ return (JobSheets[]) result.toArray(new JobSheets[result.size()]);
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java
new file mode 100644
index 0000000..3f10c06
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java
@@ -0,0 +1,118 @@
+/* MediaSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.TextSyntax;
+import javax.print.attribute.standard.Media;
+
+/**
+ * MediaSupported attribute provides the keyword values
+ * of the media types supported by the printer object.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class MediaSupported extends TextSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>MediaSupported</code> object with the
+ * given value and locale.
+ *
+ * @param value the value for this syntax
+ * @param locale the locale to use, if <code>null</code> the default
+ * locale is used.
+ *
+ * @throws NullPointerException if value is null
+ */
+ public MediaSupported(String value, Locale locale)
+ {
+ super(value, locale);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MediaSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MediaSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "media-supported".
+ */
+ public String getName()
+ {
+ return "media-supported";
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ */
+ public static Media[] getAssociatedAttributeArray(Set set)
+ {
+ MediaSupported tmp;
+ Media tmp2;
+ ArrayList result = new ArrayList();
+ Iterator it = set.iterator();
+ while (it.hasNext())
+ {
+ tmp = (MediaSupported) it.next();
+ tmp2 = (Media) IppUtilities.getEnumAttribute("media", tmp.toString());
+ if (tmp2 != null)
+ result.add(tmp2);
+ }
+ return (Media[]) result.toArray(new Media[result.size()]);
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java
new file mode 100644
index 0000000..891a99f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java
@@ -0,0 +1,177 @@
+/* MultipleDocumentHandlingSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.MultipleDocumentHandling;
+
+
+/**
+ * <code>MultipleDocumentHandlingSupported</code> provides the
+ * supported values for the MultipleDocumentHandling attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class MultipleDocumentHandlingSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ //a keyword based attribute in IPP - int values just starting at 0
+
+ /**
+ * Supports only multiple documents treated as a single document. This
+ * applies to attributes which specify treatment of multiple document jobs.
+ */
+ public static final MultipleDocumentHandlingSupported SINGLE_DOCUMENT =
+ new MultipleDocumentHandlingSupported(0);
+
+ /** Supports multiple documents as uncollated copies */
+ public static final MultipleDocumentHandlingSupported SEPARATE_DOCUMENTS_UNCOLLATED_COPIES =
+ new MultipleDocumentHandlingSupported(1);
+
+ /** Supports multiple documents as collated copies */
+ public static final MultipleDocumentHandlingSupported SEPARATE_DOCUMENTS_COLLATED_COPIES =
+ new MultipleDocumentHandlingSupported(2);
+
+ /**
+ * Supports multiple documents where every single document starts
+ * with a new sheet.
+ */
+ public static final MultipleDocumentHandlingSupported SINGLE_DOCUMENT_NEW_SHEET =
+ new MultipleDocumentHandlingSupported(3);
+
+ private static final String[] stringTable = { "single-document",
+ "separate-documents-uncollated-copies",
+ "separate-documents-collated-copies",
+ "single-document-new-sheet" };
+
+ private static final MultipleDocumentHandlingSupported[] enumValueTable =
+ { SINGLE_DOCUMENT, SEPARATE_DOCUMENTS_UNCOLLATED_COPIES,
+ SEPARATE_DOCUMENTS_COLLATED_COPIES, SINGLE_DOCUMENT_NEW_SHEET};
+
+ /**
+ * Constructs a <code>MultipleDocumentHandlingSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ protected MultipleDocumentHandlingSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MultipleDocumentHandlingSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MultipleDocumentHandlingSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "multiple-document-handling-supported".
+ */
+ public String getName()
+ {
+ return "multiple-document-handling-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public MultipleDocumentHandling getAssociatedAttribute()
+ {
+ return (MultipleDocumentHandling) IppUtilities.getEnumAttribute(
+ "multiple-document-handling", new Integer(getValue()));
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static MultipleDocumentHandling[] getAssociatedAttributeArray(Set set)
+ {
+ MultipleDocumentHandlingSupported tmp;
+ MultipleDocumentHandling[] result = new MultipleDocumentHandling[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (MultipleDocumentHandlingSupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java
new file mode 100644
index 0000000..387e6b5
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java
@@ -0,0 +1,118 @@
+/* MultipleDocumentJobsSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * <code>MultipleDocumentJobsSupported</code> specifies if a printer
+ * supported multiple documents in one job.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class MultipleDocumentJobsSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ /** Multiple documents per job are not supported. */
+ public static final MultipleDocumentJobsSupported NOT_SUPPORTED =
+ new MultipleDocumentJobsSupported(0);
+
+ /** Multiple documents per job are supported. */
+ public static final MultipleDocumentJobsSupported SUPPORTED =
+ new MultipleDocumentJobsSupported(1);
+
+ private static final String[] stringTable = { "not-supported", "supported" };
+
+ private static final MultipleDocumentJobsSupported[] enumValueTable =
+ { NOT_SUPPORTED, SUPPORTED };
+
+ /**
+ * Constructs a <code>MultipleDocumentJobsSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ protected MultipleDocumentJobsSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>MultipleDocumentJobsSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return MultipleDocumentJobsSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "multiple-document-jobs-supported".
+ */
+ public String getName()
+ {
+ return "multiple-document-jobs-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java
new file mode 100644
index 0000000..81e2e34
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java
@@ -0,0 +1,230 @@
+/* OperationsSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * <code>OperationsSupported</code> specifies the enums of the operations
+ * supported by a given printer or job object. The attribute is further
+ * specified in RFC 2911 section 4.4.15.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class OperationsSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+ /*
+ * Value Operation Name
+ ----------------- -------------------------------------
+ 0x0000 reserved, not used
+ 0x0001 reserved, not used
+ 0x0002 Print-Job
+ 0x0003 Print-URI
+ 0x0004 Validate-Job
+ 0x0005 Create-Job
+ 0x0006 Send-Document
+ 0x0007 Send-URI
+ 0x0008 Cancel-Job
+ 0x0009 Get-Job-Attributes
+ 0x000A Get-Jobs
+ 0x000B Get-Printer-Attributes
+ 0x000C Hold-Job
+ 0x000D Release-Job
+ 0x000E Restart-Job
+ 0x000F reserved for a future operation
+ 0x0010 Pause-Printer
+ 0x0011 Resume-Printer
+ 0x0012 Purge-Jobs
+ 0x0013-0x3FFF reserved for future IETF standards track operations
+ 0x4000-0x8FFF reserved for vendor extensions
+ */
+
+ // standard ipp 1.1 operations
+
+ /**
+ * Operation to print a job in one request/response. */
+ public static final OperationsSupported PRINT_JOB =
+ new OperationsSupported(0x02);
+
+ /** Operation to print a document from an URI */
+ public static final OperationsSupported PRINT_URI =
+ new OperationsSupported(0x03);
+
+ /** Operation to validate a job before submission. */
+ public static final OperationsSupported VALIDATE_JOB =
+ new OperationsSupported(0x04);
+
+ /**
+ * Operation to create an initial job for use with multiple document per job.
+ */
+ public static final OperationsSupported CREATE_JOB =
+ new OperationsSupported(0x05);
+
+ /**
+ * Operation to send a document to a multidoc job created via CREATE_JOB
+ */
+ public static final OperationsSupported SEND_DOCUMENT =
+ new OperationsSupported(0x06);
+
+ /**
+ * Operation to send a document uri to a multidoc job created
+ * via CREATE_JOB. The document accessible from this URI will be printed.
+ */
+ public static final OperationsSupported SEND_URI =
+ new OperationsSupported(0x07);
+
+ /** Operation to cancel a job by its ID or name. */
+ public static final OperationsSupported CANCEL_JOB =
+ new OperationsSupported(0x08);
+
+ /** Operation to get job attributes of a current job. */
+ public static final OperationsSupported GET_JOB_ATTRIBUTES =
+ new OperationsSupported(0x09);
+
+ /** Operation to pause a printer. */
+ public static final OperationsSupported PAUSE_PRINTER =
+ new OperationsSupported(0x10);
+
+ /** Operation to get all currently queued or processed jobs. */
+ public static final OperationsSupported GET_JOBS =
+ new OperationsSupported(0x0A);
+
+ /** Operation to get the attributes of a printer. */
+ public static final OperationsSupported GET_PRINTER_ATTRIBUTES =
+ new OperationsSupported(0x0B);
+
+ /** Operation to put a job on hold by its ID or name. */
+ public static final OperationsSupported HOLD_JOB =
+ new OperationsSupported(0x0C);
+
+ /** Operation to release a job by its ID or name. */
+ public static final OperationsSupported RELEASE_JOB =
+ new OperationsSupported(0x0D);
+
+ /** Operation to restart a job by its ID or name. */
+ public static final OperationsSupported RESTART_JOB =
+ new OperationsSupported(0x0E);
+
+ /** Not yet an operation - reserved for futher use. */
+ public static final OperationsSupported RESERVED =
+ new OperationsSupported(0x0F);
+
+ /** Operation to resume a printer. */
+ public static final OperationsSupported RESUME_PRINTER =
+ new OperationsSupported(0x11);
+
+ /** Operation to remove all jobs from a printer regardless of state. */
+ public static final OperationsSupported PURGE_JOBS =
+ new OperationsSupported(0x12);
+
+
+ private static final String[] stringTable = { "print-job", "print-uri",
+ "validate-job", "create-job",
+ "send-document", "send-uri",
+ "cancel-job", "get-job-attributes",
+ "pause-printer", "get-jobs",
+ "get-printer-attributes", "hold-job",
+ "release-job", "restart-job", "reserved",
+ "resume-printer", "purge-job"};
+
+ private static final OperationsSupported[] enumValueTable =
+ { PRINT_JOB, PRINT_URI, VALIDATE_JOB, CREATE_JOB, SEND_DOCUMENT, SEND_URI,
+ CANCEL_JOB, GET_JOB_ATTRIBUTES, PAUSE_PRINTER, GET_JOBS, GET_PRINTER_ATTRIBUTES,
+ HOLD_JOB, RELEASE_JOB, RESTART_JOB, RESERVED, RESUME_PRINTER, PURGE_JOBS};
+
+
+ /**
+ * Constructs a <code>OperationsSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ protected OperationsSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>OperationsSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return OperationsSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "operations-supported".
+ */
+ public String getName()
+ {
+ return "operations-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ // we start with 2
+ protected int getOffset()
+ {
+ return 2;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java
new file mode 100644
index 0000000..528c758
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java
@@ -0,0 +1,179 @@
+/* OrientationRequestedSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.OrientationRequested;
+
+
+/**
+ * The <code>OrientationRequestedSupported</code> attribute provides
+ * the supported values for the job attribute orientation-requested.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class OrientationRequestedSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ /** Orientation as portrait. */
+ public static final OrientationRequestedSupported PORTRAIT =
+ new OrientationRequestedSupported(3);
+
+ /** Orientation as landscape. */
+ public static final OrientationRequestedSupported LANDSCAPE =
+ new OrientationRequestedSupported(4);
+
+ /** Orientation as reversed landscape. */
+ public static final OrientationRequestedSupported REVERSE_LANDSCAPE =
+ new OrientationRequestedSupported(5);
+
+ /** Orientation as reversed portrait. */
+ public static final OrientationRequestedSupported REVERSE_PORTRAIT =
+ new OrientationRequestedSupported(6);
+
+
+ private static final String[] stringTable = { "portrait", "landscape",
+ "reverse-landscape",
+ "reverse-portrait" };
+
+ private static final OrientationRequestedSupported[]
+ enumValueTable = { PORTRAIT, LANDSCAPE,
+ REVERSE_LANDSCAPE, REVERSE_PORTRAIT };
+
+ /**
+ * Constructs a <code>OrientationRequestedSupported</code> object.
+ *
+ * @param value the value
+ */
+ protected OrientationRequestedSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>OrientationRequestedSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return OrientationRequestedSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "orientation-requested-supported".
+ */
+ public String getName()
+ {
+ return "orientation-requested-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public OrientationRequested getAssociatedAttribute()
+ {
+ return (OrientationRequested) IppUtilities.getEnumAttribute(
+ "orientation-requested", new Integer(getValue()));
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static OrientationRequested[] getAssociatedAttributeArray(Set set)
+ {
+ OrientationRequestedSupported tmp;
+ OrientationRequested[] result = new OrientationRequested[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (OrientationRequestedSupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java
new file mode 100644
index 0000000..d39a37f
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java
@@ -0,0 +1,117 @@
+/* PageRangesSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+
+/**
+ * <code>PageRangesSupported</code> is a boolean typed
+ * attribute indicating (as EnumSyntax) if page ranges
+ * are supported.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PageRangesSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+ /** Page ranges are not supported. */
+ public static final PageRangesSupported NOT_SUPPORTED =
+ new PageRangesSupported(0);
+
+ /** Page ranges are supported. */
+ public static final PageRangesSupported SUPPORTED =
+ new PageRangesSupported(1);
+
+ private static final String[] stringTable = { "not-supported", "supported" };
+
+ private static final PageRangesSupported[] enumValueTable = { NOT_SUPPORTED,
+ SUPPORTED };
+
+ /**
+ * Constructs a <code>PageRangesSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ protected PageRangesSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PageRangesSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PageRangesSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "page-ranges-supported".
+ */
+ public String getName()
+ {
+ return "page-ranges-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java
new file mode 100644
index 0000000..b0f7e86
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java
@@ -0,0 +1,171 @@
+/* PrintQualitySupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import gnu.javax.print.ipp.IppUtilities;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.PrintQuality;
+
+
+/**
+ * <code>PrintQualitySupported</code> provides the
+ * supported values for the print-quality attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrintQualitySupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+ /** Draft quality of the printer. */
+ public static final PrintQualitySupported DRAFT =
+ new PrintQualitySupported(3);
+
+ /** Normal quality of the printer. */
+ public static final PrintQualitySupported NORMAL =
+ new PrintQualitySupported(4);
+
+ /** High quality of the printer. */
+ public static final PrintQualitySupported HIGH =
+ new PrintQualitySupported(5);
+
+ private static final String[] stringTable = { "draft", "normal", "high" };
+
+ private static final PrintQualitySupported[] enumValueTable = { DRAFT,
+ NORMAL,
+ HIGH };
+
+ /**
+ * Constructs a <code>PrintQualitySupported</code> object.
+ *
+ * @param value the value of the enum
+ */
+ protected PrintQualitySupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrintQualitySupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrintQualitySupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "print-quality-supported".
+ */
+ public String getName()
+ {
+ return "print-quality-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+ /**
+ * Returns the lowest used value by the enumerations of this class.
+ * .
+ * @return The lowest value used.
+ */
+ protected int getOffset()
+ {
+ return 3;
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public PrintQuality getAssociatedAttribute()
+ {
+ return (PrintQuality) IppUtilities.getEnumAttribute(
+ "print-quality", new Integer(getValue()));
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static PrintQuality[] getAssociatedAttributeArray(Set set)
+ {
+ PrintQualitySupported tmp;
+ PrintQuality[] result = new PrintQuality[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (PrintQualitySupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java
new file mode 100644
index 0000000..e3266c4
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java
@@ -0,0 +1,143 @@
+/* PrinterResolutionSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.print.attribute.ResolutionSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.standard.PrinterResolution;
+
+
+/**
+ * The <code>PrinterResolutionSupported</code> attribute provides
+ * the supported values for the job attribute printer-resolution.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterResolutionSupported extends ResolutionSyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>PrinterResolutionSupported</code> object with the
+ * given arguments.
+ *
+ * @param crossFeedResolution the cross feed resolution
+ * @param feedResolution the feed resolution
+ * @param units the unit to use (e.g. {@link #DPCM} or {@link #DPI})
+ *
+ * @exception IllegalArgumentException if preconditions fail
+ */
+ public PrinterResolutionSupported(int crossFeedResolution,
+ int feedResolution, int units)
+ {
+ super(crossFeedResolution, feedResolution, units);
+ }
+
+ /**
+ * Tests if the given object is equal to this object.
+ *
+ * @param obj the object to test
+ *
+ * @return <code>true</code> if both objects are equal,
+ * <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if(! (obj instanceof PrinterResolutionSupported))
+ return false;
+
+ return super.equals(obj);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterResolutionSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterResolutionSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-resolution-supported".
+ */
+ public String getName()
+ {
+ return "printer-resolution-supported";
+ }
+
+ /**
+ * Returns the equally enum of the standard attribute class
+ * of this SupportedValuesAttribute enum.
+ *
+ * @return The enum of the standard attribute class.
+ */
+ public PrinterResolution getAssociatedAttribute()
+ {
+ return new PrinterResolution(getCrossFeedResolutionDphi(),
+ getFeedResolutionDphi(), 1);
+ }
+
+ /**
+ * Constructs an array from a set of -supported attributes.
+ * @param set set to process
+ * @return The constructed array.
+ *
+ * @see #getAssociatedAttribute()
+ */
+ public static PrinterResolution[] getAssociatedAttributeArray(Set set)
+ {
+ PrinterResolutionSupported tmp;
+ PrinterResolution[] result = new PrinterResolution[set.size()];
+ Iterator it = set.iterator();
+ int j = 0;
+ while (it.hasNext())
+ {
+ tmp = (PrinterResolutionSupported) it.next();
+ result[j] = tmp.getAssociatedAttribute();
+ j++;
+ }
+ return result;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java
new file mode 100644
index 0000000..ce3e2a7
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java
@@ -0,0 +1,88 @@
+/* PrinterUriSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import java.net.URI;
+
+import javax.print.attribute.SupportedValuesAttribute;
+import javax.print.attribute.URISyntax;
+
+/**
+ * PrinterUriSupported attribute as described in RFC 2911 section
+ * 4.4.1 contains one of the URIs the printer supported for
+ * job processing (e.g. one with authentication).
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class PrinterUriSupported extends URISyntax
+ implements SupportedValuesAttribute
+{
+
+ /**
+ * Creates a <code>PrinterUriSupported</code> object.
+ *
+ * @param uri the URI value for the syntax
+ * @throws NullPointerException if uri is null
+ */
+ public PrinterUriSupported(URI uri)
+ {
+ super(uri);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>PrinterUriSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return PrinterUriSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "printer-uri-supported".
+ */
+ public String getName()
+ {
+ return "printer-uri-supported";
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java
new file mode 100644
index 0000000..5110e95
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java
@@ -0,0 +1,136 @@
+/* SidesSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+
+/**
+ * <code>SidesSupported</code> provides the
+ * supported values for the sides attribute.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class SidesSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ /** Specifies that each page should be printed on one sheet. */
+ public static final SidesSupported ONE_SIDED = new SidesSupported(0);
+
+ /**
+ * Specifies that two following pages should be printed on the
+ * front and back of one sheet for binding on the long edge.
+ */
+ public static final SidesSupported TWO_SIDED_LONG_EDGE =
+ new SidesSupported(1);
+
+ /**
+ * Specifies that two following pages should be printed on the
+ * front and back of one sheet for binding on the short edge.
+ */
+ public static final SidesSupported TWO_SIDED_SHORT_EDGE =
+ new SidesSupported(2);
+
+ /** An alias constant for "two sided long edge". */
+ public static final SidesSupported DUPLEX = new SidesSupported(1);
+
+ /** An alias constant for "two sided short edge". */
+ public static final SidesSupported TUMBLE = new SidesSupported(2);
+
+ private static final String[] stringTable = { "one-sided",
+ "two-sided-long-edge",
+ "two-sided-short-edge" };
+
+ private static final SidesSupported[]
+ enumValueTable = { ONE_SIDED, TWO_SIDED_LONG_EDGE,
+ TWO_SIDED_SHORT_EDGE };
+
+
+ /**
+ * Creates a <code>SidesSupported</code> object.
+ *
+ * @param value the value of the enum
+ */
+ protected SidesSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>SidesSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return SidesSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "sides-supported".
+ */
+ public String getName()
+ {
+ return "sides-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java
new file mode 100644
index 0000000..8deac7a
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java
@@ -0,0 +1,141 @@
+/* UriAuthenticationSupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * UriAuthenticationSupported attribute as described in RFC 2911 section
+ * 4.4.2 provides the keywords (implemented as EnumSyntax) which
+ * authentication methods are supported by the printer object. This
+ * includes a value of none.
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class UriAuthenticationSupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ // a keyword based attribute in IPP - int values just starting at 0
+
+ /** Supports no authentication - assumes anonymous process */
+ public static final UriAuthenticationSupported NONE =
+ new UriAuthenticationSupported(0);
+
+ /**
+ * The authenticated user assumed is the value of the
+ * "requesting-user-name" operation attribute supplied
+ * with the operation.
+ */
+ public static final UriAuthenticationSupported REQUESTING_USER_NAME =
+ new UriAuthenticationSupported(1);
+
+ /** Supports HTTP basic authentication (RFC 2617) */
+ public static final UriAuthenticationSupported BASIC =
+ new UriAuthenticationSupported(2);
+
+ /** Supports HTTP digest authentication (RFC 2617) */
+ public static final UriAuthenticationSupported DIGEST =
+ new UriAuthenticationSupported(3);
+
+ /** Supports authentication through a client provided certificate */
+ public static final UriAuthenticationSupported CERTIFICATE =
+ new UriAuthenticationSupported(4);
+
+ private static final String[] stringTable = { "none",
+ "requesting-user-name",
+ "basic", "digest",
+ "certificate" };
+
+ private static final UriAuthenticationSupported[] enumValueTable =
+ { NONE, REQUESTING_USER_NAME, BASIC, DIGEST, CERTIFICATE };
+
+ /**
+ * Constructs a <code>UriAuthenticationSupported</code> object.
+ *
+ * @param value the enum value
+ */
+ public UriAuthenticationSupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>UriAuthenticationSupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return UriAuthenticationSupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "uri-authentication-supported".
+ */
+ public String getName()
+ {
+ return "uri-authentication-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java
new file mode 100644
index 0000000..1d99518
--- /dev/null
+++ b/libjava/classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java
@@ -0,0 +1,126 @@
+/* UriSecuritySupported.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.print.ipp.attribute.supported;
+
+import javax.print.attribute.EnumSyntax;
+import javax.print.attribute.SupportedValuesAttribute;
+
+/**
+ * UriSecuritySupported attribute as described in RFC 2911 section
+ * 4.4.3 provides the keywords (implemented as EnumSyntax) for
+ * the security mechanisms supported by the corresponding uri's
+ * supported (same place in setOf).
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public final class UriSecuritySupported extends EnumSyntax
+ implements SupportedValuesAttribute
+{
+
+ // a keyword based attribute in IPP - int values just starting at 0
+
+ /** The URI has no secure communication */
+ public static final UriSecuritySupported NONE =
+ new UriSecuritySupported(0);
+
+ /** The URI has SSL3 communication */
+ public static final UriSecuritySupported SSL3 =
+ new UriSecuritySupported(1);
+
+ /** The URI has TLS (RFC 2246) communication */
+ public static final UriSecuritySupported TLS =
+ new UriSecuritySupported(2);
+
+ private static final String[] stringTable = { "none", "ssl3", "tls" };
+
+ private static final UriSecuritySupported[] enumValueTable = { NONE,
+ SSL3, TLS };
+
+ /**
+ * Constructs a <code>UriSecuritySupported</code> object.
+ *
+ * @param value the enum value
+ */
+ public UriSecuritySupported(int value)
+ {
+ super(value);
+ }
+
+ /**
+ * Returns category of this class.
+ *
+ * @return The class <code>UriSecuritySupported</code> itself.
+ */
+ public Class getCategory()
+ {
+ return UriSecuritySupported.class;
+ }
+
+ /**
+ * Returns the name of this attribute.
+ *
+ * @return The name "uri-security-supported".
+ */
+ public String getName()
+ {
+ return "uri-security-supported";
+ }
+
+ /**
+ * Returns a table with the enumeration values represented as strings
+ * for this object.
+ *
+ * @return The enumeration values as strings.
+ */
+ protected String[] getStringTable()
+ {
+ return stringTable;
+ }
+
+ /**
+ * Returns a table with the enumeration values for this object.
+ *
+ * @return The enumeration values.
+ */
+ protected EnumSyntax[] getEnumValueTable()
+ {
+ return enumValueTable;
+ }
+
+}
diff --git a/libjava/classpath/gnu/javax/security/auth/callback/ConsoleCallbackHandler.java b/libjava/classpath/gnu/javax/security/auth/callback/ConsoleCallbackHandler.java
index 4ce22cb..052b6c4 100644
--- a/libjava/classpath/gnu/javax/security/auth/callback/ConsoleCallbackHandler.java
+++ b/libjava/classpath/gnu/javax/security/auth/callback/ConsoleCallbackHandler.java
@@ -157,7 +157,8 @@ public class ConsoleCallbackHandler extends AbstractCallbackHandler
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
if (c.getPrompt() != null)
- out.println(c.getPrompt());
+ out.print(c.getPrompt());
+
String[] choices = null;
int[] values = null;
switch (c.getOptionType())
@@ -175,6 +176,7 @@ public class ConsoleCallbackHandler extends AbstractCallbackHandler
ConfirmationCallback.OK, ConfirmationCallback.CANCEL
};
break;
+
case ConfirmationCallback.YES_NO_CANCEL_OPTION:
out.print(messages.getString("callback.yesNoCancel"));
choices = new String[] {
@@ -191,19 +193,26 @@ public class ConsoleCallbackHandler extends AbstractCallbackHandler
ConfirmationCallback.NO, ConfirmationCallback.CANCEL
};
break;
+
case ConfirmationCallback.YES_NO_OPTION:
out.print(messages.getString("callback.yesNo"));
- choices = new String[] {
- messages.getString("callback.yes"),
- messages.getString("callback.no"),
- messages.getString("callback.shortYes"),
- messages.getString("callback.shortNo")
- };
- values = new int[] {
- ConfirmationCallback.YES, ConfirmationCallback.NO,
- ConfirmationCallback.YES, ConfirmationCallback.NO
- };
+ choices = new String[] { messages.getString("callback.yes"),
+ messages.getString("callback.no"),
+ messages.getString("callback.shortYes"),
+ messages.getString("callback.shortNo") };
+ values = new int[] { ConfirmationCallback.YES,
+ ConfirmationCallback.NO,
+ ConfirmationCallback.YES,
+ ConfirmationCallback.NO };
+ int defaultOption = c.getDefaultOption();
+ if (defaultOption > -1 && defaultOption < choices.length)
+ {
+ out.print("[");
+ out.print(choices[defaultOption]);
+ out.print("] ");
+ }
break;
+
case ConfirmationCallback.UNSPECIFIED_OPTION:
choices = c.getOptions();
values = new int[choices.length];
@@ -220,6 +229,7 @@ public class ConsoleCallbackHandler extends AbstractCallbackHandler
out.print(choices[c.getDefaultOption()]);
out.print("] ");
break;
+
default:
throw new IllegalArgumentException();
}
@@ -242,7 +252,7 @@ public class ConsoleCallbackHandler extends AbstractCallbackHandler
protected void handleLanguage(LanguageCallback c) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- out.println(messages.getString("callback.language"));
+ out.print(messages.getString("callback.language"));
String reply = null;
reply = in.readLine();
if (reply == null)
diff --git a/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java b/libjava/classpath/gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
index c8fd09d..67d6332 100644
--- a/libjava/classpath/examples/gnu/classpath/examples/swing/GNULookAndFeel.java
+++ b/libjava/classpath/gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
@@ -19,7 +19,7 @@ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
-package gnu.classpath.examples.swing;
+package gnu.javax.swing.plaf.gnu;
import java.awt.Color;
import java.awt.Component;
diff --git a/libjava/classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java b/libjava/classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java
new file mode 100644
index 0000000..7dbf6e1
--- /dev/null
+++ b/libjava/classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java
@@ -0,0 +1,218 @@
+/* CustomizableTheme.java -- A customizable metal theme
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.plaf.metal;
+
+import java.awt.Color;
+
+import javax.swing.plaf.ColorUIResource;
+import javax.swing.plaf.metal.DefaultMetalTheme;
+
+/**
+ * A Metal theme that can be customized by setting the primary and secondary
+ * colors.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class CustomizableTheme
+ extends DefaultMetalTheme
+ implements Cloneable
+{
+
+ /**
+ * The primary1 color.
+ */
+ private ColorUIResource primary1;
+
+ /**
+ * The primary2 color.
+ */
+ private ColorUIResource primary2;
+
+ /**
+ * The primary3 color.
+ */
+ private ColorUIResource primary3;
+
+ /**
+ * The secondary1 color.
+ */
+ private ColorUIResource secondary1;
+
+ /**
+ * The secondary2 color.
+ */
+ private ColorUIResource secondary2;
+
+ /**
+ * The secondary3 color.
+ */
+ private ColorUIResource secondary3;
+
+ /**
+ * Sets the primary1 color of the theme.
+ *
+ * @param c the primary1 color to set
+ */
+ public void setPrimary1(Color c)
+ {
+ primary1 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the primary1 color of this theme.
+ *
+ * @return the primary1 color of this theme
+ */
+ public ColorUIResource getPrimary1()
+ {
+ return primary1 == null ? super.getPrimary1() : primary1;
+ }
+
+
+ /**
+ * Sets the primary2 color of the theme.
+ *
+ * @param c the primary2 color to set
+ */
+ public void setPrimary2(Color c)
+ {
+ primary2 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the primary2 color of this theme.
+ *
+ * @return the primary2 color of this theme
+ */
+ public ColorUIResource getPrimary2()
+ {
+ return primary2 == null ? super.getPrimary2() : primary2;
+ }
+
+ /**
+ * Sets the primary3 color of the theme.
+ *
+ * @param c the primary3 color to set
+ */
+ public void setPrimary3(Color c)
+ {
+ primary3 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the primary3 color of this theme.
+ *
+ * @return the primary3 color of this theme
+ */
+ public ColorUIResource getPrimary3()
+ {
+ return primary3 == null ? super.getPrimary3() : primary3;
+ }
+
+ /**
+ * Sets the secondary1 color of the theme.
+ *
+ * @param c the secondary1 color to set
+ */
+ public void setSecondary1(Color c)
+ {
+ secondary1 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the secondary1 color of this theme.
+ *
+ * @return the secondary1 color of this theme
+ */
+ public ColorUIResource getSecondary1()
+ {
+ return secondary1 == null ? super.getSecondary1() : secondary1;
+ }
+
+ /**
+ * Sets the secondary2 color of the theme.
+ *
+ * @param c the secondary2 color to set
+ */
+ public void setSecondary2(Color c)
+ {
+ secondary2 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the secondary2 color of this theme.
+ *
+ * @return the secondary2 color of this theme
+ */
+ public ColorUIResource getSecondary2()
+ {
+ return secondary2 == null ? super.getSecondary2() : secondary2;
+ }
+
+ /**
+ * Sets the secondary3 color of the theme.
+ *
+ * @param c the secondary3 color to set
+ */
+ public void setSecondary3(Color c)
+ {
+ secondary3 = new ColorUIResource(c);
+ }
+
+ /**
+ * Returns the secondary3 color of this theme.
+ *
+ * @return the secondary3 color of this theme
+ */
+ public ColorUIResource getSecondary3()
+ {
+ return secondary3 == null ? super.getSecondary3() : secondary3;
+ }
+
+ /**
+ * Returns a clone of this theme.
+ *
+ * @return a clone of this theme
+ */
+ public Object clone()
+ throws CloneNotSupportedException
+ {
+ return super.clone();
+ }
+}
diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java b/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java
index cef9494..92f9b27 100644
--- a/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java
+++ b/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java
@@ -934,7 +934,7 @@ public class Parser
optional(WS);
attributeReading:
- while (getTokenAhead().kind == NUMTOKEN)
+ while (getTokenAhead().kind == NUMTOKEN)
{
name = getNextToken();
optional(WS);
@@ -949,46 +949,90 @@ public class Parser
switch (next.kind)
{
- case QUOT :
-
- // read "quoted" attribute.
- buffer.setLength(0);
- readTillTokenE(QUOT);
- attrValue = buffer.toString();
- break;
-
- case AP :
-
- // read 'quoted' attribute.
- buffer.setLength(0);
- readTillTokenE(AP);
- attrValue = buffer.toString();
- break;
-
- // read unquoted attribute.
- case NUMTOKEN :
- value = next;
- optional(WS);
-
- // Check maybe the opening quote is missing.
- next = getTokenAhead();
- if (bQUOTING.get(next.kind))
- {
- hTag = next;
- error("The value without opening quote is closed with '" +
- next.getImage() + "'"
- );
- }
+ case QUOT:
+
+ // read "quoted" attribute.
+ buffer.setLength(0);
+ readTillTokenE(QUOT);
+ attrValue = buffer.toString();
+ break;
+
+ case AP:
+
+ // read 'quoted' attribute.
+ buffer.setLength(0);
+ readTillTokenE(AP);
+ attrValue = buffer.toString();
+ break;
+
+ // read unquoted attribute.
+ case NUMTOKEN:
+ value = next;
+ optional(WS);
+
+ // Check maybe the opening quote is missing.
+ next = getTokenAhead();
+ if (bQUOTING.get(next.kind))
+ {
+ hTag = next;
+ error("The value without opening quote is closed with '"
+ + next.getImage() + "'");
+ attrValue = value.getImage();
+ }
+ else if (next.kind == SLASH)
+ // The slash in this context is treated as the ordinary
+ // character, not as a token. The slash may be part of
+ // the unquoted URL.
+ {
+ StringBuffer image = new StringBuffer(value.getImage());
+ while (next.kind == NUMTOKEN || next.kind == SLASH)
+ {
+ image.append(getNextToken().getImage());
+ next = getTokenAhead();
+ }
+ attrValue = image.toString();
+ }
+ else
attrValue = value.getImage();
- break;
-
- default :
- break attributeReading;
+ break;
+
+ case SLASH:
+ value = next;
+ optional(WS);
+
+ // Check maybe the opening quote is missing.
+ next = getTokenAhead();
+ if (bQUOTING.get(next.kind))
+ {
+ hTag = next;
+ error("The value without opening quote is closed with '"
+ + next.getImage() + "'");
+ attrValue = value.getImage();
+ }
+ else if (next.kind == NUMTOKEN || next.kind == SLASH)
+ // The slash in this context is treated as the ordinary
+ // character, not as a token. The slash may be part of
+ // the unquoted URL.
+ {
+ StringBuffer image = new StringBuffer(value.getImage());
+ while (next.kind == NUMTOKEN || next.kind == SLASH)
+ {
+ image.append(getNextToken().getImage());
+ next = getTokenAhead();
+ }
+ attrValue = image.toString();
+ }
+ else
+ attrValue = value.getImage();
+ break;
+ default:
+ break attributeReading;
}
attributes.addAttribute(name.getImage(), attrValue);
optional(WS);
}
- else // The '=' is missing: attribute without value.
+ else
+ // The '=' is missing: attribute without value.
{
noValueAttribute(element, name.getImage());
}
@@ -996,9 +1040,8 @@ public class Parser
}
/**
- * Return string, corresponding the given named entity.
- * The name is passed with the preceeding &, but without
- * the ending semicolon.
+ * Return string, corresponding the given named entity. The name is passed
+ * with the preceeding &, but without the ending semicolon.
*/
protected String resolveNamedEntity(final String a_tag)
{
diff --git a/libjava/classpath/gnu/javax/swing/tree/GnuPath.java b/libjava/classpath/gnu/javax/swing/tree/GnuPath.java
new file mode 100644
index 0000000..dd576e8
--- /dev/null
+++ b/libjava/classpath/gnu/javax/swing/tree/GnuPath.java
@@ -0,0 +1,65 @@
+/* GnuPath.java -- The extended version of TreePath
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.tree;
+
+import javax.swing.tree.TreePath;
+
+/**
+ * The tree path with additional data. Needed for the optimized tree drawing.
+ * Returned by layout caches.
+ *
+ * @author Audrius Meskauskas
+ */
+public class GnuPath extends TreePath
+{
+ /**
+ * The flag, marking the last visible child.
+ */
+ public boolean isLastChild;
+
+ /**
+ * Create a new path, specifying flag if this path is the path to the
+ * last visible child (needed for optimized tree drawing).
+ */
+ public GnuPath(Object[] path, boolean lastChild)
+ {
+ super(path);
+ isLastChild = lastChild;
+ }
+}
diff --git a/libjava/classpath/gnu/regexp/BacktrackStack.java b/libjava/classpath/gnu/regexp/BacktrackStack.java
new file mode 100644
index 0000000..0fc73f0
--- /dev/null
+++ b/libjava/classpath/gnu/regexp/BacktrackStack.java
@@ -0,0 +1,112 @@
+/* gnu/regexp/BacktrackStack.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.regexp;
+
+/**
+ * An instance of this class represents a stack
+ * used for backtracking.
+ *
+ * @author Ito Kazumitsu</A>
+ */
+final class BacktrackStack {
+
+ /** A set of data to be used for backtracking. */
+ static class Backtrack {
+ /** REToken to which to go back */
+ REToken token;
+ /** CharIndexed on which matches are being searched for. */
+ CharIndexed input;
+ /** REMatch to be used by the REToken token. */
+ REMatch match;
+ /** Some parameter used by the token's backtrack method. */
+ Object param;
+ Backtrack(REToken token, CharIndexed input, REMatch match, Object param) {
+ this.token = token;
+ this.input = input;
+ // REMatch may change before backtracking is needed. So we
+ // keep a clone of it.
+ this.match = (REMatch) match.clone();
+ this.param = param;
+ }
+ }
+
+ Backtrack[] stack;
+ private int size;
+ private int capacity;
+ private static final int INITIAL_CAPACITY = 32;
+ private static final int CAPACITY_INCREMENT = 16;
+
+ BacktrackStack() {
+ stack = new Backtrack[INITIAL_CAPACITY];
+ size = 0;
+ capacity = INITIAL_CAPACITY;
+ }
+
+ boolean empty() {
+ return size == 0;
+ }
+
+ Backtrack peek() {
+ return stack[size - 1];
+ }
+
+ Backtrack pop() {
+ Backtrack bt = stack[--size];
+ stack[size] = null;
+ return bt;
+ }
+
+ void clear() {
+ for (int i = 0; i < size; i++) {
+ stack[i] = null;
+ }
+ size = 0;
+ }
+
+ void push(Backtrack bt) {
+ if (size >= capacity) {
+ capacity += CAPACITY_INCREMENT;
+ Backtrack[] newStack = new Backtrack[capacity];
+ System.arraycopy(stack, 0, newStack, 0, size);
+ stack = newStack;
+ }
+ stack[size++] = bt;
+ }
+
+}
diff --git a/libjava/classpath/gnu/regexp/CharIndexed.java b/libjava/classpath/gnu/regexp/CharIndexed.java
index df1d893..8aedc49 100644
--- a/libjava/classpath/gnu/regexp/CharIndexed.java
+++ b/libjava/classpath/gnu/regexp/CharIndexed.java
@@ -93,4 +93,24 @@ public interface CharIndexed {
* Returns the effective length of this CharIndexed
*/
int length();
+
+ /**
+ * Sets the REMatch last found on this input.
+ */
+ void setLastMatch(REMatch match);
+
+ /**
+ * Returns the REMatch last found on this input.
+ */
+ REMatch getLastMatch();
+
+ /**
+ * Returns the anchor.
+ */
+ int getAnchor();
+
+ /**
+ * Sets the anchor.
+ */
+ void setAnchor(int anchor);
}
diff --git a/libjava/classpath/gnu/regexp/CharIndexedCharArray.java b/libjava/classpath/gnu/regexp/CharIndexedCharArray.java
index 1388d47..96a609b 100644
--- a/libjava/classpath/gnu/regexp/CharIndexedCharArray.java
+++ b/libjava/classpath/gnu/regexp/CharIndexedCharArray.java
@@ -1,5 +1,5 @@
/* gnu/regexp/CharIndexedCharArray.java
- Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,36 +36,11 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.regexp;
-import java.io.Serializable;
+import java.nio.CharBuffer;
-class CharIndexedCharArray implements CharIndexed, Serializable {
- private char[] s;
- private int anchor;
+class CharIndexedCharArray extends CharIndexedCharSequence {
CharIndexedCharArray(char[] str, int index) {
- s = str;
- anchor = index;
- }
-
- public char charAt(int index) {
- int pos = anchor + index;
- return ((pos < s.length) && (pos >= 0)) ? s[pos] : OUT_OF_BOUNDS;
- }
-
- public boolean isValid() {
- return (anchor < s.length);
- }
-
- public boolean move(int index) {
- return ((anchor += index) < s.length);
- }
-
- public CharIndexed lookBehind(int index, int length) {
- if (length > (anchor + index)) length = anchor + index;
- return new CharIndexedCharArray(s, anchor + index - length);
- }
-
- public int length() {
- return s.length - anchor;
+ super(CharBuffer.wrap(str), index);
}
}
diff --git a/libjava/classpath/gnu/regexp/CharIndexedCharSequence.java b/libjava/classpath/gnu/regexp/CharIndexedCharSequence.java
new file mode 100644
index 0000000..5bbe4ab
--- /dev/null
+++ b/libjava/classpath/gnu/regexp/CharIndexedCharSequence.java
@@ -0,0 +1,82 @@
+/* gnu/regexp/CharIndexedCharSequence.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.regexp;
+import java.io.Serializable;
+
+class CharIndexedCharSequence implements CharIndexed, Serializable {
+ private CharSequence s;
+ private int anchor;
+ private int len;
+
+ CharIndexedCharSequence(CharSequence s, int index) {
+ this.s = s;
+ len = s.length();
+ anchor = index;
+ }
+
+ public char charAt(int index) {
+ int pos = anchor + index;
+ return ((pos < len) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
+ }
+
+ public boolean isValid() {
+ return (anchor < len);
+ }
+
+ public boolean move(int index) {
+ return ((anchor += index) < len);
+ }
+
+ public CharIndexed lookBehind(int index, int length) {
+ if (length > (anchor + index)) length = anchor + index;
+ return new CharIndexedCharSequence(s, anchor + index - length);
+ }
+
+ public int length() {
+ return len - anchor;
+ }
+
+ private REMatch lastMatch;
+ public void setLastMatch(REMatch match) {
+ lastMatch = (REMatch)match.clone();
+ lastMatch.anchor = anchor;
+ }
+ public REMatch getLastMatch() { return lastMatch; }
+ public int getAnchor() { return anchor; }
+ public void setAnchor(int anchor) { this.anchor = anchor; }
+}
diff --git a/libjava/classpath/gnu/regexp/CharIndexedInputStream.java b/libjava/classpath/gnu/regexp/CharIndexedInputStream.java
index d5225a7..290a94e 100644
--- a/libjava/classpath/gnu/regexp/CharIndexedInputStream.java
+++ b/libjava/classpath/gnu/regexp/CharIndexedInputStream.java
@@ -155,5 +155,27 @@ class CharIndexedInputStream implements CharIndexed {
throw new UnsupportedOperationException(
"difficult to tell the length for an input stream");
}
+
+ public void setLastMatch(REMatch match) {
+ throw new UnsupportedOperationException(
+ "difficult to support setLastMatch for an input stream");
+ }
+
+ public REMatch getLastMatch() {
+ throw new UnsupportedOperationException(
+ "difficult to support getLastMatch for an input stream");
+ }
+
+ public int getAnchor() {
+ throw new UnsupportedOperationException(
+ "difficult to support getAnchor for an input stream");
+ }
+
+ public void setAnchor(int anchor) {
+ throw new UnsupportedOperationException(
+ "difficult to support setAnchor for an input stream");
+ }
+
+
}
diff --git a/libjava/classpath/gnu/regexp/CharIndexedString.java b/libjava/classpath/gnu/regexp/CharIndexedString.java
index fe4fa8f..2498265 100644
--- a/libjava/classpath/gnu/regexp/CharIndexedString.java
+++ b/libjava/classpath/gnu/regexp/CharIndexedString.java
@@ -1,5 +1,5 @@
/* gnu/regexp/CharIndexedString.java
- Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,38 +36,9 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.regexp;
-import java.io.Serializable;
-class CharIndexedString implements CharIndexed, Serializable {
- private String s;
- private int anchor;
- private int len;
-
+class CharIndexedString extends CharIndexedCharSequence {
CharIndexedString(String str, int index) {
- s = str;
- len = s.length();
- anchor = index;
- }
-
- public char charAt(int index) {
- int pos = anchor + index;
- return ((pos < len) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
- }
-
- public boolean isValid() {
- return (anchor < len);
- }
-
- public boolean move(int index) {
- return ((anchor += index) < len);
- }
-
- public CharIndexed lookBehind(int index, int length) {
- if (length > (anchor + index)) length = anchor + index;
- return new CharIndexedString(s, anchor + index - length);
- }
-
- public int length() {
- return len - anchor;
+ super(str, index);
}
}
diff --git a/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java b/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java
index 9c9118d..d6b03bb 100644
--- a/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java
+++ b/libjava/classpath/gnu/regexp/CharIndexedStringBuffer.java
@@ -1,5 +1,5 @@
/* gnu/regexp/CharIndexedStringBuffer.java
- Copyright (C) 1998-2001, 2004, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,36 +36,10 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.regexp;
-import java.io.Serializable;
-class CharIndexedStringBuffer implements CharIndexed, Serializable {
- private StringBuffer s;
- private int anchor;
+class CharIndexedStringBuffer extends CharIndexedCharSequence {
CharIndexedStringBuffer(StringBuffer str, int index) {
- s = str;
- anchor = index;
+ super(str, index);
}
-
- public char charAt(int index) {
- int pos = anchor + index;
- return ((pos < s.length()) && (pos >= 0)) ? s.charAt(pos) : OUT_OF_BOUNDS;
- }
-
- public boolean isValid() {
- return (anchor < s.length());
- }
-
- public boolean move(int index) {
- return ((anchor += index) < s.length());
- }
-
- public CharIndexed lookBehind(int index, int length) {
- if (length > (anchor + index)) length = anchor + index;
- return new CharIndexedStringBuffer(s, anchor + index - length);
- }
-
- public int length() {
- return s.length() - anchor;
- }
}
diff --git a/libjava/classpath/gnu/regexp/RE.java b/libjava/classpath/gnu/regexp/RE.java
index ef606a6..e0665f0 100644
--- a/libjava/classpath/gnu/regexp/RE.java
+++ b/libjava/classpath/gnu/regexp/RE.java
@@ -41,6 +41,7 @@ import java.io.Serializable;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
+import java.util.Stack;
import java.util.Vector;
/**
@@ -78,13 +79,18 @@ import java.util.Vector;
* <P>
*
* These methods all have similar argument lists. The input can be a
- * String, a character array, a StringBuffer, or an
+ * CharIndexed, String, a character array, a StringBuffer, or an
* InputStream of some sort. Note that when using an
* InputStream, the stream read position cannot be guaranteed after
* attempting a match (this is not a bug, but a consequence of the way
* regular expressions work). Using an REMatchEnumeration can
* eliminate most positioning problems.
*
+ * Although the input object can be of various types, it is recommended
+ * that it should be a CharIndexed because {@link CharIndexed#getLastMatch()}
+ * can show the last match found on this input, which helps the expression
+ * \G work as the end of the previous match.
+ *
* <P>
*
* The optional index argument specifies the offset from the beginning
@@ -235,6 +241,17 @@ public class RE extends REToken {
*/
public static final int REG_REPLACE_USE_BACKSLASHESCAPE = 0x0200;
+ /**
+ * Compilation flag. Allow whitespace and comments in pattern.
+ * This is equivalent to the "/x" operator in Perl.
+ */
+ public static final int REG_X_COMMENTS = 0x0400;
+
+ /**
+ * Compilation flag. If set, REG_ICASE is effective only for US-ASCII.
+ */
+ public static final int REG_ICASE_USASCII = 0x0800;
+
/** Returns a string representing the version of the gnu.regexp package. */
public static final String version() {
return VERSION;
@@ -334,6 +351,7 @@ public class RE extends REToken {
// Precalculate these so we don't pay for the math every time we
// need to access them.
boolean insens = ((cflags & REG_ICASE) > 0);
+ boolean insensUSASCII = ((cflags & REG_ICASE_USASCII) > 0);
// Parse pattern into tokens. Does anyone know if it's more efficient
// to use char[] than a String.charAt()? I'm assuming so.
@@ -372,6 +390,31 @@ public class RE extends REToken {
if (quot)
unit.bk = false;
+ if (((cflags & REG_X_COMMENTS) > 0) && (!unit.bk) && (!quot)) {
+ if (Character.isWhitespace(unit.ch)) {
+ continue;
+ }
+ if (unit.ch == '#') {
+ for (int i = index; i < pLength; i++) {
+ if (pattern[i] == '\n') {
+ index = i + 1;
+ continue;
+ }
+ else if (pattern[i] == '\r') {
+ if (i + 1 < pLength && pattern[i + 1] == '\n') {
+ index = i + 2;
+ }
+ else {
+ index = i + 1;
+ }
+ continue;
+ }
+ }
+ index = pLength;
+ continue;
+ }
+ }
+
// ALTERNATION OPERATOR
// \| or | (if RE_NO_BK_VBAR) or newline (if RE_NEWLINE_ALT)
// not available if RE_LIMITED_OPS is set
@@ -420,6 +463,7 @@ public class RE extends REToken {
else {
addToken(currentToken);
currentToken = new RETokenChar(subIndex,unit.ch,insens);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
}
@@ -495,8 +539,8 @@ public class RE extends REToken {
case 'd':
case 'm':
case 's':
- // case 'u': not supported
- // case 'x': not supported
+ case 'u':
+ case 'x':
case '-':
if (!syntax.get(RESyntax.RE_EMBEDDED_FLAGS)) break;
// Set or reset syntax flags.
@@ -535,8 +579,20 @@ public class RE extends REToken {
newCflags |= REG_DOT_NEWLINE;
flagIndex++;
break;
- // case 'u': not supported
- // case 'x': not supported
+ case 'u':
+ if (negate)
+ newCflags |= REG_ICASE_USASCII;
+ else
+ newCflags &= ~REG_ICASE_USASCII;
+ flagIndex++;
+ break;
+ case 'x':
+ if (negate)
+ newCflags &= ~REG_X_COMMENTS;
+ else
+ newCflags |= REG_X_COMMENTS;
+ flagIndex++;
+ break;
case '-':
negate = true;
flagIndex++;
@@ -553,6 +609,7 @@ public class RE extends REToken {
syntax = newSyntax;
cflags = newCflags;
insens = ((cflags & REG_ICASE) > 0);
+ insensUSASCII = ((cflags & REG_ICASE_USASCII) > 0);
// This can be treated as though it were a comment.
comment = true;
index = flagIndex - 1;
@@ -565,6 +622,7 @@ public class RE extends REToken {
syntax = newSyntax;
cflags = newCflags;
insens = ((cflags & REG_ICASE) > 0);
+ insensUSASCII = ((cflags & REG_ICASE_USASCII) > 0);
index = flagIndex -1;
// Fall through to the next case.
}
@@ -673,6 +731,7 @@ public class RE extends REToken {
syntax = savedSyntax;
cflags = savedCflags;
insens = ((cflags & REG_ICASE) > 0);
+ insensUSASCII = ((cflags & REG_ICASE_USASCII) > 0);
flagsSaved = false;
}
} // not a comment
@@ -785,6 +844,7 @@ public class RE extends REToken {
index = index - 2 + ce.len;
addToken(currentToken);
currentToken = new RETokenChar(subIndex,ce.ch,insens);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// BACKREFERENCE OPERATOR
@@ -812,6 +872,7 @@ public class RE extends REToken {
int num = parseInt(pattern, numBegin, numEnd-numBegin, 10);
currentToken = new RETokenBackRef(subIndex,num,insens);
+ if (insensUSASCII) currentToken.unicodeAware = false;
index = numEnd;
}
@@ -860,6 +921,7 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 'd') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,false);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// NON-DIGIT OPERATOR
@@ -868,6 +930,7 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 'D') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.DIGIT,insens,true);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// NEWLINE ESCAPE
@@ -892,6 +955,7 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 's') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,false);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// NON-WHITESPACE OPERATOR
@@ -900,6 +964,7 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 'S') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.SPACE,insens,true);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// TAB ESCAPE
@@ -916,6 +981,7 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 'w') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,false);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// NON-ALPHANUMERIC OPERATOR
@@ -924,12 +990,19 @@ public class RE extends REToken {
else if (unit.bk && (unit.ch == 'W') && syntax.get(RESyntax.RE_CHAR_CLASS_ESCAPES)) {
addToken(currentToken);
currentToken = new RETokenPOSIX(subIndex,RETokenPOSIX.ALNUM,insens,true);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// END OF STRING OPERATOR
- // \Z
+ // \Z, \z
- else if (unit.bk && (unit.ch == 'Z') && syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ // FIXME: \Z and \z are different in that if the input string
+ // ends with a line terminator, \Z matches the position before
+ // the final terminator. This special behavior of \Z is yet
+ // to be implemented.
+
+ else if (unit.bk && (unit.ch == 'Z' || unit.ch == 'z') &&
+ syntax.get(RESyntax.RE_STRING_ANCHORS)) {
addToken(currentToken);
currentToken = new RETokenEnd(subIndex,null);
}
@@ -945,6 +1018,7 @@ public class RE extends REToken {
index = index - 2 + ce.len;
addToken(currentToken);
currentToken = new RETokenChar(subIndex,ce.ch,insens);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
// NAMED PROPERTY
@@ -958,6 +1032,16 @@ public class RE extends REToken {
index = index - 2 + np.len;
addToken(currentToken);
currentToken = getRETokenNamedProperty(subIndex,np,insens,index);
+ if (insensUSASCII) currentToken.unicodeAware = false;
+ }
+
+ // END OF PREVIOUS MATCH
+ // \G
+
+ else if (unit.bk && (unit.ch == 'G') &&
+ syntax.get(RESyntax.RE_STRING_ANCHORS)) {
+ addToken(currentToken);
+ currentToken = new RETokenEndOfPreviousMatch(subIndex);
}
// NON-SPECIAL CHARACTER (or escape to make literal)
@@ -966,6 +1050,7 @@ public class RE extends REToken {
else { // not a special character
addToken(currentToken);
currentToken = new RETokenChar(subIndex,unit.ch,insens);
+ if (insensUSASCII) currentToken.unicodeAware = false;
}
} // end while
@@ -1006,6 +1091,7 @@ public class RE extends REToken {
throws REException {
boolean insens = ((cflags & REG_ICASE) > 0);
+ boolean insensUSASCII = ((cflags & REG_ICASE_USASCII) > 0);
Vector options = new Vector();
Vector addition = new Vector();
boolean additionAndAppeared = false;
@@ -1035,7 +1121,9 @@ public class RE extends REToken {
if ((ch == '-') && (lastCharIsSet)) {
if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
if ((ch = pattern[index]) == ']') {
- options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ RETokenChar t = new RETokenChar(subIndex,lastChar,insens);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
lastChar = '-';
} else {
if ((ch == '\\') && syntax.get(RESyntax.RE_BACKSLASH_ESCAPE_IN_LISTS)) {
@@ -1045,7 +1133,9 @@ public class RE extends REToken {
ch = ce.ch;
index = index + ce.len - 1;
}
- options.addElement(new RETokenRange(subIndex,lastChar,ch,insens));
+ RETokenRange t = new RETokenRange(subIndex,lastChar,ch,insens);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
lastChar = 0; lastCharIsSet = false;
index++;
}
@@ -1088,12 +1178,20 @@ public class RE extends REToken {
asciiEsc = ce.ch; asciiEscIsSet = true;
index = index - 1 + ce.len - 1;
}
- if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ if (lastCharIsSet) {
+ RETokenChar t = new RETokenChar(subIndex,lastChar,insens);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
+ }
if (posixID != -1) {
- options.addElement(new RETokenPOSIX(subIndex,posixID,insens,negate));
+ RETokenPOSIX t = new RETokenPOSIX(subIndex,posixID,insens,negate);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
} else if (np != null) {
- options.addElement(getRETokenNamedProperty(subIndex,np,insens,index));
+ RETokenNamedProperty t = getRETokenNamedProperty(subIndex,np,insens,index);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
} else if (asciiEscIsSet) {
lastChar = asciiEsc; lastCharIsSet = true;
} else {
@@ -1104,8 +1202,11 @@ public class RE extends REToken {
StringBuffer posixSet = new StringBuffer();
index = getPosixSet(pattern,index+1,posixSet);
int posixId = RETokenPOSIX.intValue(posixSet.toString());
- if (posixId != -1)
- options.addElement(new RETokenPOSIX(subIndex,posixId,insens,false));
+ if (posixId != -1) {
+ RETokenPOSIX t = new RETokenPOSIX(subIndex,posixId,insens,false);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
+ }
} else if ((ch == '[') && (syntax.get(RESyntax.RE_NESTED_CHARCLASS))) {
ParseCharClassResult result = parseCharClass(
subIndex, pattern, index, pLength, cflags, syntax, 0);
@@ -1158,14 +1259,22 @@ public class RE extends REToken {
result.index: result.index - 1);
}
} else {
- if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ if (lastCharIsSet) {
+ RETokenChar t = new RETokenChar(subIndex,lastChar,insens);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
+ }
lastChar = ch; lastCharIsSet = true;
}
if (index == pLength) throw new REException(getLocalizedMessage("class.no.end"),REException.REG_EBRACK,index);
} // while in list
// Out of list, index is one past ']'
- if (lastCharIsSet) options.addElement(new RETokenChar(subIndex,lastChar,insens));
+ if (lastCharIsSet) {
+ RETokenChar t = new RETokenChar(subIndex,lastChar,insens);
+ if (insensUSASCII) t.unicodeAware = false;
+ options.addElement(t);
+ }
ParseCharClassResult result = new ParseCharClassResult();
// Create a new RETokenOneOf
@@ -1396,11 +1505,10 @@ public class RE extends REToken {
return (input.charAt(0) == CharIndexed.OUT_OF_BOUNDS);
REMatch m = new REMatch(numSubs, index, eflags);
if (firstToken.match(input, m)) {
- while (m != null) {
+ if (m != null) {
if (input.charAt(m.index) == CharIndexed.OUT_OF_BOUNDS) {
return true;
}
- m = m.next;
}
}
return false;
@@ -1508,17 +1616,27 @@ public class RE extends REToken {
}
/* Implements abstract method REToken.match() */
- boolean match(CharIndexed input, REMatch mymatch) {
+ boolean match(CharIndexed input, REMatch mymatch) {
if (firstToken == null) {
return next(input, mymatch);
}
// Note the start of this subexpression
- mymatch.start[subIndex] = mymatch.index;
+ mymatch.start1[subIndex] = mymatch.index;
return firstToken.match(input, mymatch);
}
-
+
+ REMatch findMatch(CharIndexed input, REMatch mymatch) {
+ if (mymatch.backtrackStack == null)
+ mymatch.backtrackStack = new BacktrackStack();
+ boolean b = match(input, mymatch);
+ if (b) {
+ return mymatch;
+ }
+ return null;
+ }
+
/**
* Returns the first match found in the input. If no match is found,
* null is returned.
@@ -1602,6 +1720,7 @@ public class RE extends REToken {
*/
best.end[0] = best.index;
best.finish(input);
+ input.setLastMatch(best);
return best;
}
}
@@ -1942,19 +2061,34 @@ public class RE extends REToken {
}
void dump(StringBuffer os) {
- os.append('(');
+ os.append("(?#startRE subIndex=" + subIndex + ")");
if (subIndex == 0)
os.append("?:");
if (firstToken != null)
firstToken.dumpAll(os);
- os.append(')');
+ if (subIndex == 0)
+ os.append(")");
+ os.append("(?#endRE subIndex=" + subIndex + ")");
}
// Cast input appropriately or throw exception
- private static CharIndexed makeCharIndexed(Object input, int index) {
- // We could let a String fall through to final input, but since
- // it's the most likely input type, we check it first.
- if (input instanceof String)
+ // This method was originally a private method, but has been made
+ // public because java.util.regex.Matcher uses this.
+ public static CharIndexed makeCharIndexed(Object input, int index) {
+ // The case where input is already a CharIndexed is supposed
+ // be the most likely because this is the case with
+ // java.util.regex.Matcher.
+ // We could let a String or a CharSequence fall through
+ // to final input, but since it'a very likely input type,
+ // we check it first.
+ if (input instanceof CharIndexed) {
+ CharIndexed ci = (CharIndexed) input;
+ ci.setAnchor(index);
+ return ci;
+ }
+ else if (input instanceof CharSequence)
+ return new CharIndexedCharSequence((CharSequence) input,index);
+ else if (input instanceof String)
return new CharIndexedString((String) input,index);
else if (input instanceof char[])
return new CharIndexedCharArray((char[]) input,index);
@@ -1962,8 +2096,6 @@ public class RE extends REToken {
return new CharIndexedStringBuffer((StringBuffer) input,index);
else if (input instanceof InputStream)
return new CharIndexedInputStream((InputStream) input,index);
- else if (input instanceof CharIndexed)
- return (CharIndexed) input; // do we lose index info?
else
return new CharIndexedString(input.toString(), index);
}
diff --git a/libjava/classpath/gnu/regexp/REMatch.java b/libjava/classpath/gnu/regexp/REMatch.java
index 91a3c02..140a9c4 100644
--- a/libjava/classpath/gnu/regexp/REMatch.java
+++ b/libjava/classpath/gnu/regexp/REMatch.java
@@ -49,6 +49,7 @@ import java.io.Serializable;
*/
public final class REMatch implements Serializable, Cloneable {
private String matchedText;
+ private CharIndexed matchedCharIndexed;
// These variables are package scope for fast access within the engine
int eflags; // execution flags this match was made using
@@ -64,20 +65,28 @@ public final class REMatch implements Serializable, Cloneable {
// Package scope; used by RE.
int index; // used while matching to mark current match position in input
+ // start1[i] is set when the i-th subexp starts. And start1[i] is copied
+ // to start[i] when the i-th subexp ends. So start[i] keeps the previously
+ // assigned value while the i-th subexp is being processed. This makes
+ // backreference to the i-th subexp within the i-th subexp possible.
int[] start; // start positions (relative to offset) for each (sub)exp.
+ int[] start1; // start positions (relative to offset) for each (sub)exp.
int[] end; // end positions for the same
- REMatch next; // other possibility (to avoid having to use arrays)
+ // start[i] == -1 or end[i] == -1 means that the start/end position is void.
+ // start[i] == p or end[i] == p where p < 0 and p != -1 means that
+ // the actual start/end position is (p+1). Start/end positions may
+ // become negative when the subexpression is in a RETokenLookBehind.
boolean empty; // empty string matched. This flag is used only within
// RETokenRepeated.
- int matchFlags; // flags passed to match methods
- static final int MF_FIND_ALL = 0x01;
+
+ BacktrackStack backtrackStack;
public Object clone() {
try {
REMatch copy = (REMatch) super.clone();
- copy.next = null;
copy.start = (int[]) start.clone();
+ copy.start1 = (int[]) start1.clone();
copy.end = (int[]) end.clone();
return copy;
@@ -88,14 +97,15 @@ public final class REMatch implements Serializable, Cloneable {
void assignFrom(REMatch other) {
start = other.start;
+ start1 = other.start1;
end = other.end;
index = other.index;
- // need to deep clone?
- next = other.next;
+ backtrackStack = other.backtrackStack;
}
REMatch(int subs, int anchor, int eflags) {
start = new int[subs+1];
+ start1 = new int[subs+1];
end = new int[subs+1];
this.anchor = anchor;
this.eflags = eflags;
@@ -109,6 +119,7 @@ public final class REMatch implements Serializable, Cloneable {
for (i = 0; i < end[0]; i++)
sb.append(text.charAt(i));
matchedText = sb.toString();
+ matchedCharIndexed = text;
for (i = 0; i < start.length; i++) {
// If any subexpressions didn't terminate, they don't count
// TODO check if this code ever gets hit
@@ -117,7 +128,7 @@ public final class REMatch implements Serializable, Cloneable {
end[i] = -1;
}
}
- next = null; // cut off alternates
+ backtrackStack = null;
}
/** Clears the current match and moves the offset to the new index. */
@@ -125,9 +136,9 @@ public final class REMatch implements Serializable, Cloneable {
offset = index;
this.index = 0;
for (int i = 0; i < start.length; i++) {
- start[i] = end[i] = -1;
+ start[i] = start1[i] = end[i] = -1;
}
- next = null; // cut off alternates
+ backtrackStack = null;
}
/**
@@ -184,7 +195,19 @@ public final class REMatch implements Serializable, Cloneable {
if ((sub >= start.length) || sub < 0)
throw new IndexOutOfBoundsException("No group " + sub);
if (start[sub] == -1) return null;
- return (matchedText.substring(start[sub],end[sub]));
+ if (start[sub] >= 0 && end[sub] <= matchedText.length())
+ return (matchedText.substring(start[sub],end[sub]));
+ else {
+ // This case occurs with RETokenLookAhead or RETokenLookBehind.
+ StringBuffer sb = new StringBuffer();
+ int s = start[sub];
+ int e = end[sub];
+ if (s < 0) s += 1;
+ if (e < 0) e += 1;
+ for (int i = start[0] + s; i < start[0] + e; i++)
+ sb.append(matchedCharIndexed.charAt(i));
+ return sb.toString();
+ }
}
/**
@@ -198,7 +221,8 @@ public final class REMatch implements Serializable, Cloneable {
public int getSubStartIndex(int sub) {
if (sub >= start.length) return -1;
int x = start[sub];
- return (x == -1) ? x : offset + x;
+ return (x == -1) ? x :
+ (x >= 0) ? offset + x : offset + x + 1;
}
/**
@@ -212,7 +236,8 @@ public final class REMatch implements Serializable, Cloneable {
public int getStartIndex(int sub) {
if (sub >= start.length) return -1;
int x = start[sub];
- return (x == -1) ? x : offset + x;
+ return (x == -1) ? x :
+ (x >= 0) ? offset + x : offset + x + 1;
}
/**
@@ -226,7 +251,8 @@ public final class REMatch implements Serializable, Cloneable {
public int getSubEndIndex(int sub) {
if (sub >= start.length) return -1;
int x = end[sub];
- return (x == -1) ? x : offset + x;
+ return (x == -1) ? x :
+ (x >= 0) ? offset + x : offset + x + 1;
}
/**
@@ -239,7 +265,8 @@ public final class REMatch implements Serializable, Cloneable {
public int getEndIndex(int sub) {
if (sub >= start.length) return -1;
int x = end[sub];
- return (x == -1) ? x : offset + x;
+ return (x == -1) ? x :
+ (x >= 0) ? offset + x : offset + x + 1;
}
/**
@@ -279,41 +306,19 @@ public final class REMatch implements Serializable, Cloneable {
return output.toString();
}
- static class REMatchList {
- REMatch head;
- REMatch tail;
- REMatchList() {
- head = tail = null;
- }
- /* Not used now. But we may need this some day?
- void addHead(REMatch newone) {
- if (head == null) {
- head = newone;
- tail = newone;
- while (tail.next != null) {
- tail = tail.next;
- }
- }
- else {
- REMatch tmp = newone;
- while (tmp.next != null) tmp = tmp.next;
- tmp.next = head;
- head = newone;
- }
- }
- */
- void addTail(REMatch newone) {
- if (head == null) {
- head = newone;
- tail = newone;
- }
- else {
- tail.next = newone;
- }
- while (tail.next != null) {
- tail = tail.next;
- }
+/* The following are used for debugging purpose
+ static String d(REMatch m) {
+ if (m == null) return "null";
+ else return "[" + m.index + "]";
+ }
+
+ String substringUptoIndex(CharIndexed input) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < index; i++) {
+ sb.append(input.charAt(i));
}
+ return sb.toString();
}
+*/
}
diff --git a/libjava/classpath/gnu/regexp/REToken.java b/libjava/classpath/gnu/regexp/REToken.java
index 5f4659b..f2abc02 100644
--- a/libjava/classpath/gnu/regexp/REToken.java
+++ b/libjava/classpath/gnu/regexp/REToken.java
@@ -1,5 +1,5 @@
/* gnu/regexp/REToken.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,6 +43,7 @@ abstract class REToken implements Serializable, Cloneable {
protected REToken next = null;
protected REToken uncle = null;
protected int subIndex;
+ protected boolean unicodeAware = true;
public Object clone() {
try {
@@ -70,30 +71,119 @@ abstract class REToken implements Serializable, Cloneable {
}
/** Returns true if the match succeeded, false if it failed. */
- abstract boolean match(CharIndexed input, REMatch mymatch);
+ boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch m = matchThis(input, mymatch);
+ if (m == null) return false;
+ if (next(input, m)) {
+ mymatch.assignFrom(m);
+ return true;
+ }
+ return false;
+ }
+
+ /** Returns true if the match succeeded, false if it failed.
+ * The matching is done against this REToken only. Chained
+ * tokens are not checked.
+ * This method is used to define the default match method.
+ * Simple subclasses of REToken, for example, such that
+ * matches only one character, should implement this method.
+ * Then the default match method will work. But complicated
+ * subclasses of REToken, which needs a special match method,
+ * do not have to implement this method.
+ */
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ throw new UnsupportedOperationException(
+ "This REToken does not have a matchThis method");
+ }
/** Returns true if the rest of the tokens match, false if they fail. */
protected boolean next(CharIndexed input, REMatch mymatch) {
- if (next == null) {
- if (uncle == null) {
- return true;
- } else {
- return uncle.match(input, mymatch);
- }
- } else {
- return next.match(input, mymatch);
- }
+ REToken nextToken = getNext();
+ if (nextToken == null) return true;
+ return nextToken.match(input, mymatch);
}
-
+
+ /** Returns the next REToken chained to this REToken. */
+ REToken getNext() {
+ return (next != null ? next : uncle);
+ }
+
+ /** Finds a match at the position specified by the given REMatch.
+ * If necessary, adds a BacktrackStack.Backtrack object to backtrackStack
+ * of the REmatch found this time so that another possible match
+ * may be found when backtrack is called.
+ * By default, nothing is added to the backtrackStack.
+ * @param CharIndexed input Input character sequence.
+ * @param mymatch Position at which a match should be found
+ * @return REMatch object if a match was found, null otherwise.
+ */
+ REMatch findMatch(CharIndexed input, REMatch mymatch) {
+ boolean b = match(input, mymatch);
+ if (b) return mymatch;
+ return null;
+ }
+
+ boolean returnsFixedLengthMatches() {
+ return false;
+ }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ throw new UnsupportedOperationException(
+ "This token does not support findFixedLengthMatches");
+ }
+
+ /**
+ * Backtrack to another possibility.
+ * Ordinary REToken cannot do anything if this method is called.
+ */
+ REMatch backtrack(CharIndexed input, REMatch mymatch, Object param) {
+ throw new IllegalStateException("This token cannot be backtracked to");
+ }
+
boolean chain(REToken token) {
next = token;
return true; // Token was accepted
}
- abstract void dump(StringBuffer os);
+ abstract void dump(StringBuffer os);
void dumpAll(StringBuffer os) {
dump(os);
if (next != null) next.dumpAll(os);
}
+
+ public String toString() {
+ StringBuffer os = new StringBuffer();
+ dump(os);
+ return os.toString();
+ }
+
+ /**
+ * Converts the character argument to lowercase.
+ * @param ch the character to be converted.
+ * @param unicodeAware If true, use java.lang.Character#toLowerCase;
+ * otherwise, only US-ASCII charactes can be converted.
+ * @return the lowercase equivalent of the character, if any;
+ * otherwise, the character itself.
+ */
+ public static char toLowerCase(char ch, boolean unicodeAware) {
+ if (unicodeAware) return Character.toLowerCase(ch);
+ if (ch >= 'A' && ch <= 'Z') return (char)(ch + 'a' - 'A');
+ return ch;
+ }
+
+ /**
+ * Converts the character argument to uppercase.
+ * @param ch the character to be converted.
+ * @param unicodeAware If true, use java.lang.Character#toUpperCase;
+ * otherwise, only US-ASCII charactes can be converted.
+ * @return the uppercase equivalent of the character, if any;
+ * otherwise, the character itself.
+ */
+ public static char toUpperCase(char ch, boolean unicodeAware) {
+ if (unicodeAware) return Character.toUpperCase(ch);
+ if (ch >= 'a' && ch <= 'z') return (char)(ch + 'A' - 'a');
+ return ch;
+ }
+
}
diff --git a/libjava/classpath/gnu/regexp/RETokenAny.java b/libjava/classpath/gnu/regexp/RETokenAny.java
index 2b0967a..a37d956 100644
--- a/libjava/classpath/gnu/regexp/RETokenAny.java
+++ b/libjava/classpath/gnu/regexp/RETokenAny.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenAny.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -59,15 +59,37 @@ final class RETokenAny extends REToken {
return 1;
}
- boolean match(CharIndexed input, REMatch mymatch) {
- char ch = input.charAt(mymatch.index);
- if ((ch == CharIndexed.OUT_OF_BOUNDS)
- || (!newline && (ch == '\n'))
- || (matchNull && (ch == 0))) {
- return false;
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ char ch = input.charAt(mymatch.index);
+ boolean retval = matchOneChar(ch);
+ if (retval) {
+ ++mymatch.index;
+ return mymatch;
+ }
+ return null;
}
- ++mymatch.index;
- return next(input, mymatch);
+
+ boolean matchOneChar(char ch) {
+ if ((ch == CharIndexed.OUT_OF_BOUNDS)
+ || (!newline && (ch == '\n'))
+ || (matchNull && (ch == 0))) {
+ return false;
+ }
+ return true;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ while (true) {
+ if (numRepeats >= max) break;
+ char ch = input.charAt(index++);
+ if (! matchOneChar(ch)) break;
+ numRepeats++;
+ }
+ return numRepeats;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenBackRef.java b/libjava/classpath/gnu/regexp/RETokenBackRef.java
index 060a6cf..25ef952 100644
--- a/libjava/classpath/gnu/regexp/RETokenBackRef.java
+++ b/libjava/classpath/gnu/regexp/RETokenBackRef.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenBackRef.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,30 +50,32 @@ final class RETokenBackRef extends REToken {
// should implement getMinimumLength() -- any ideas?
- boolean match(CharIndexed input, REMatch mymatch) {
- if (num >= mymatch.start.length) return false;
- if (num >= mymatch.end.length) return false;
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ if (num >= mymatch.start.length) return null;
+ if (num >= mymatch.end.length) return null;
int b,e;
b = mymatch.start[num];
e = mymatch.end[num];
- if ((b==-1)||(e==-1)) return false; // this shouldn't happen, but...
+ if ((b==-1)||(e==-1)) return null; // this shouldn't happen, but...
+ if (b < 0) b += 1;
+ if (e < 0) e += 1;
for (int i=b; i<e; i++) {
char c1 = input.charAt(mymatch.index+i-b);
char c2 = input.charAt(i);
if (c1 != c2) {
if (insens) {
- if (c1 != Character.toLowerCase(c2) &&
- c1 != Character.toUpperCase(c2)) {
- return false;
+ if (c1 != toLowerCase(c2, unicodeAware) &&
+ c1 != toUpperCase(c2, unicodeAware)) {
+ return null;
}
}
else {
- return false;
+ return null;
}
}
}
mymatch.index += e-b;
- return next(input, mymatch);
+ return mymatch;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenChar.java b/libjava/classpath/gnu/regexp/RETokenChar.java
index 5c087c6..1b3a748 100644
--- a/libjava/classpath/gnu/regexp/RETokenChar.java
+++ b/libjava/classpath/gnu/regexp/RETokenChar.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenChar.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,8 +44,9 @@ final class RETokenChar extends REToken {
RETokenChar(int subIndex, char c, boolean ins) {
super(subIndex);
+ insens = ins;
ch = new char [1];
- ch[0] = (insens = ins) ? Character.toLowerCase(c) : c;
+ ch[0] = c;
}
int getMinimumLength() {
@@ -56,18 +57,50 @@ final class RETokenChar extends REToken {
return ch.length;
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ int z = ch.length;
+ if (matchOneString(input, mymatch.index)) {
+ mymatch.index += z;
+ return mymatch;
+ }
+ return null;
+ }
+
+ boolean matchOneString(CharIndexed input, int index) {
int z = ch.length;
char c;
for (int i=0; i<z; i++) {
- c = input.charAt(mymatch.index+i);
- if (( (insens) ? Character.toLowerCase(c) : c ) != ch[i]) {
+ c = input.charAt(index+i);
+ if (! charEquals(c, ch[i])) {
return false;
}
}
- mymatch.index += z;
+ return true;
+ }
- return next(input, mymatch);
+ private boolean charEquals(char c1, char c2) {
+ if (c1 == c2) return true;
+ if (! insens) return false;
+ if (toLowerCase(c1, unicodeAware) == c2) return true;
+ if (toUpperCase(c1, unicodeAware) == c2) return true;
+ return false;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ int z = ch.length;
+ while (true) {
+ if (numRepeats >= max) break;
+ if (matchOneString(input, index)) {
+ index += z;
+ numRepeats++;
+ }
+ else break;
+ }
+ return numRepeats;
}
// Overrides REToken.chain() to optimize for strings
diff --git a/libjava/classpath/gnu/regexp/RETokenEnd.java b/libjava/classpath/gnu/regexp/RETokenEnd.java
index 788a964..deb2fc5 100644
--- a/libjava/classpath/gnu/regexp/RETokenEnd.java
+++ b/libjava/classpath/gnu/regexp/RETokenEnd.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenEnd.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,24 +53,34 @@ final class RETokenEnd extends REToken {
return 0;
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
char ch = input.charAt(mymatch.index);
if (ch == CharIndexed.OUT_OF_BOUNDS)
return ((mymatch.eflags & RE.REG_NOTEOL)>0) ?
- false : next(input, mymatch);
+ null : mymatch;
if (newline != null) {
char z;
int i = 0; // position in newline
do {
z = newline.charAt(i);
- if (ch != z) return false;
+ if (ch != z) return null;
++i;
ch = input.charAt(mymatch.index + i);
} while (i < newline.length());
- return next(input, mymatch);
+ return mymatch;
}
- return false;
+ return null;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ REMatch m = (REMatch) mymatch.clone();
+ REToken tk = (REToken) this.clone();
+ tk.chain(null);
+ if (tk.match(input, m)) return max;
+ else return 0;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenEndOfPreviousMatch.java b/libjava/classpath/gnu/regexp/RETokenEndOfPreviousMatch.java
new file mode 100644
index 0000000..167d10b
--- /dev/null
+++ b/libjava/classpath/gnu/regexp/RETokenEndOfPreviousMatch.java
@@ -0,0 +1,72 @@
+/* gnu/regexp/RETokenEndOfPreviousMatch.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.regexp;
+
+class RETokenEndOfPreviousMatch extends RETokenStart {
+
+ RETokenEndOfPreviousMatch(int subIndex) {
+ super(subIndex, null);
+ }
+
+ int getMaximumLength() {
+ return 0;
+ }
+
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ REMatch lastMatch = input.getLastMatch();
+ if (lastMatch == null) return super.matchThis(input, mymatch);
+ if (input.getAnchor()+mymatch.index ==
+ lastMatch.anchor+lastMatch.index) {
+ return mymatch;
+ }
+ else {
+ return null;
+ }
+ }
+
+ boolean returnsFixedLengthmatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ if (matchThis(input, mymatch) != null) return max;
+ else return 0;
+ }
+
+ void dump(StringBuffer os) {
+ os.append("\\G");
+ }
+}
diff --git a/libjava/classpath/gnu/regexp/RETokenEndSub.java b/libjava/classpath/gnu/regexp/RETokenEndSub.java
index fe2969d..fca01c7 100644
--- a/libjava/classpath/gnu/regexp/RETokenEndSub.java
+++ b/libjava/classpath/gnu/regexp/RETokenEndSub.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenEndSub.java
- Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,12 +46,21 @@ final class RETokenEndSub extends REToken {
return 0;
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ mymatch.start[subIndex] = mymatch.start1[subIndex];
mymatch.end[subIndex] = mymatch.index;
- return next(input, mymatch);
+ return mymatch;
}
-
+
+ REMatch findMatch(CharIndexed input, REMatch mymatch) {
+ mymatch.start[subIndex] = mymatch.start1[subIndex];
+ mymatch.end[subIndex] = mymatch.index;
+ return super.findMatch(input, mymatch);
+ }
+
void dump(StringBuffer os) {
// handled by RE
+ // But add something for debugging.
+ os.append("(?#RETokenEndSub subIndex=" + subIndex + ")");
}
}
diff --git a/libjava/classpath/gnu/regexp/RETokenIndependent.java b/libjava/classpath/gnu/regexp/RETokenIndependent.java
index 2eb1472..8bb95c6 100644
--- a/libjava/classpath/gnu/regexp/RETokenIndependent.java
+++ b/libjava/classpath/gnu/regexp/RETokenIndependent.java
@@ -57,14 +57,16 @@ final class RETokenIndependent extends REToken
return re.getMaximumLength();
}
- boolean match(CharIndexed input, REMatch mymatch)
+ REMatch matchThis(CharIndexed input, REMatch mymatch)
{
- if (re.match(input, mymatch)) {
+ boolean b = re.match(input, mymatch);
+ if (b) {
// Once we have found a match, we do not see other possible matches.
- mymatch.next = null;
- return next(input, mymatch);
+ if (mymatch.backtrackStack != null) mymatch.backtrackStack.clear();
+ return mymatch;
+
}
- return false;
+ return null;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenLookAhead.java b/libjava/classpath/gnu/regexp/RETokenLookAhead.java
index b44dfa5..009872c 100644
--- a/libjava/classpath/gnu/regexp/RETokenLookAhead.java
+++ b/libjava/classpath/gnu/regexp/RETokenLookAhead.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenLookAhead.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,28 +56,17 @@ final class RETokenLookAhead extends REToken
return 0;
}
- boolean match(CharIndexed input, REMatch mymatch)
+ REMatch matchThis(CharIndexed input, REMatch mymatch)
{
REMatch trymatch = (REMatch)mymatch.clone();
- REMatch trymatch1 = (REMatch)mymatch.clone();
- REMatch newMatch = null;
if (re.match(input, trymatch)) {
- if (negative) return false;
- if (next(input, trymatch1))
- newMatch = trymatch1;
+ if (negative) return null;
+ trymatch.index = mymatch.index;
+ return trymatch;
}
-
- if (newMatch != null) {
- if (negative) return false;
- //else
- mymatch.assignFrom(newMatch);
- return true;
- }
- else { // no match
- if (negative)
- return next(input, mymatch);
- //else
- return false;
+ else {
+ if (negative) return mymatch;
+ return null;
}
}
diff --git a/libjava/classpath/gnu/regexp/RETokenLookBehind.java b/libjava/classpath/gnu/regexp/RETokenLookBehind.java
index a6c1b34..8311d1a 100644
--- a/libjava/classpath/gnu/regexp/RETokenLookBehind.java
+++ b/libjava/classpath/gnu/regexp/RETokenLookBehind.java
@@ -55,35 +55,37 @@ final class RETokenLookBehind extends REToken
return 0;
}
- boolean match(CharIndexed input, REMatch mymatch)
+ REMatch matchThis(CharIndexed input, REMatch mymatch)
{
int max = re.getMaximumLength();
CharIndexed behind = input.lookBehind(mymatch.index, max);
REMatch trymatch = (REMatch)mymatch.clone();
REMatch trymatch1 = (REMatch)mymatch.clone();
REMatch newMatch = null;
- int curIndex = trymatch.index + behind.length() - input.length();
+ int diff = behind.length() - input.length();
+ int curIndex = trymatch.index + diff;
trymatch.index = 0;
+ trymatch.offset = 0;
RETokenMatchHereOnly stopper = new RETokenMatchHereOnly(curIndex);
REToken re1 = (REToken) re.clone();
re1.chain(stopper);
if (re1.match(behind, trymatch)) {
- if (negative) return false;
- if (next(input, trymatch1))
- newMatch = trymatch1;
+ if (negative) return null;
+ for (int i = 0; i < trymatch.start.length; i++) {
+ if (trymatch.start[i] != -1 && trymatch.end[i] != -1) {
+ trymatch.start[i] -= diff;
+ if (trymatch.start[i] < 0) trymatch.start[i] -= 1;
+ trymatch.end[i] -= diff;
+ if (trymatch.end[i] < 0) trymatch.end[i] -= 1;
+ }
+ }
+ trymatch.index = mymatch.index;
+ trymatch.offset = mymatch.offset;
+ return trymatch;
}
-
- if (newMatch != null) {
- if (negative) return false;
- //else
- mymatch.assignFrom(newMatch);
- return true;
- }
- else { // no match
- if (negative)
- return next(input, mymatch);
- //else
- return false;
+ else {
+ if (negative) return mymatch;
+ return null;
}
}
@@ -105,8 +107,8 @@ final class RETokenLookBehind extends REToken
this.index = index;
}
- boolean match(CharIndexed input, REMatch mymatch) {
- return index == mymatch.index;
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ return (index == mymatch.index ? mymatch : null);
}
void dump(StringBuffer os) {}
diff --git a/libjava/classpath/gnu/regexp/RETokenNamedProperty.java b/libjava/classpath/gnu/regexp/RETokenNamedProperty.java
index 13c1e41..6147e87 100644
--- a/libjava/classpath/gnu/regexp/RETokenNamedProperty.java
+++ b/libjava/classpath/gnu/regexp/RETokenNamedProperty.java
@@ -105,24 +105,43 @@ final class RETokenNamedProperty extends REToken {
return 1;
}
- boolean match(CharIndexed input, REMatch mymatch) {
- char ch = input.charAt(mymatch.index);
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ char ch = input.charAt(mymatch.index);
+ boolean retval = matchOneChar(ch);
+ if (retval) {
+ ++mymatch.index;
+ return mymatch;
+ }
+ return null;
+ }
+
+ private boolean matchOneChar(char ch) {
if (ch == CharIndexed.OUT_OF_BOUNDS)
return false;
boolean retval = handler.includes(ch);
if (insens) {
retval = retval ||
- handler.includes(Character.toUpperCase(ch)) ||
- handler.includes(Character.toLowerCase(ch));
+ handler.includes(toUpperCase(ch, unicodeAware)) ||
+ handler.includes(toLowerCase(ch, unicodeAware));
}
if (negate) retval = !retval;
- if (retval) {
- ++mymatch.index;
- return next(input, mymatch);
+ return retval;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ while (true) {
+ if (numRepeats >= max) break;
+ char ch = input.charAt(index++);
+ if (! matchOneChar(ch)) break;
+ numRepeats++;
}
- else return false;
+ return numRepeats;
}
void dump(StringBuffer os) {
@@ -246,9 +265,6 @@ final class RETokenNamedProperty extends REToken {
private static class POSIXHandler extends Handler {
private RETokenPOSIX retoken;
- private REMatch mymatch = new REMatch(0,0,0);
- private char[] chars = new char[1];
- private CharIndexedCharArray ca = new CharIndexedCharArray(chars, 0);
public POSIXHandler(String name) {
int posixId = RETokenPOSIX.intValue(name.toLowerCase());
if (posixId != -1)
@@ -257,9 +273,7 @@ final class RETokenNamedProperty extends REToken {
throw new RuntimeException("Unknown posix ID: " + name);
}
public boolean includes(char c) {
- chars[0] = c;
- mymatch.index = 0;
- return retoken.match(ca, mymatch);
+ return retoken.matchOneChar(c);
}
}
diff --git a/libjava/classpath/gnu/regexp/RETokenOneOf.java b/libjava/classpath/gnu/regexp/RETokenOneOf.java
index 260bc4b..f747d59 100644
--- a/libjava/classpath/gnu/regexp/RETokenOneOf.java
+++ b/libjava/classpath/gnu/regexp/RETokenOneOf.java
@@ -42,6 +42,9 @@ import java.util.Stack;
final class RETokenOneOf extends REToken {
private Vector options;
private boolean negative;
+ // True if this RETokenOneOf is supposed to match only one character,
+ // which is typically the case of a character class expression.
+ private boolean matchesOneChar;
private Vector addition;
// This Vector addition is used to store nested character classes.
@@ -76,12 +79,14 @@ final class RETokenOneOf extends REToken {
this.negative = negative;
for (int i = 0; i < optionsStr.length(); i++)
options.addElement(new RETokenChar(subIndex,optionsStr.charAt(i),insens));
+ matchesOneChar = true;
}
RETokenOneOf(int subIndex, Vector options, boolean negative) {
super(subIndex);
this.options = options;
this.negative = negative;
+ matchesOneChar = negative;
}
RETokenOneOf(int subIndex, Vector options, Vector addition, boolean negative) {
@@ -89,12 +94,11 @@ final class RETokenOneOf extends REToken {
this.options = options;
this.addition = addition;
this.negative = negative;
+ matchesOneChar = (negative || addition != null);
}
int getMinimumLength() {
- // (negative || addition != null) occurs when this token originates from
- // character class expression.
- if (negative || addition != null) return 1;
+ if (matchesOneChar) return 1;
int min = Integer.MAX_VALUE;
int x;
for (int i=0; i < options.size(); i++) {
@@ -105,9 +109,7 @@ final class RETokenOneOf extends REToken {
}
int getMaximumLength() {
- // (negative || addition != null) occurs when this token originates from
- // character class expression.
- if (negative || addition != null) return 1;
+ if (matchesOneChar) return 1;
int max = 0;
int x;
for (int i=0; i < options.size(); i++) {
@@ -118,6 +120,11 @@ final class RETokenOneOf extends REToken {
}
boolean match(CharIndexed input, REMatch mymatch) {
+ if (matchesOneChar) return matchOneChar(input, mymatch);
+ else return matchOneRE(input, mymatch);
+ }
+
+ boolean matchOneChar(CharIndexed input, REMatch mymatch) {
REMatch tryMatch;
boolean tryOnly;
if (addition == null) {
@@ -187,40 +194,80 @@ final class RETokenOneOf extends REToken {
}
private boolean matchP(CharIndexed input, REMatch mymatch, boolean tryOnly) {
- boolean stopMatchingIfSatisfied =
- (mymatch.matchFlags & REMatch.MF_FIND_ALL) == 0;
- REMatch.REMatchList newMatch = new REMatch.REMatchList();
REToken tk;
for (int i=0; i < options.size(); i++) {
- // In order that the backtracking can work,
- // each option must be chained to the next token.
- // But the chain method has some side effect, so
- // we use clones.
- tk = (REToken)((REToken) options.elementAt(i)).clone();
- if (! tryOnly) {
- tk.chain(this.next);
- tk.setUncle(this.uncle);
- tk.subIndex = this.subIndex;
- }
+ tk = (REToken) options.elementAt(i);
REMatch tryMatch = (REMatch) mymatch.clone();
if (tk.match(input, tryMatch)) { // match was successful
if (tryOnly) return true;
- newMatch.addTail(tryMatch);
- if (stopMatchingIfSatisfied) break;
- } // is a match
- } // try next option
- if (tryOnly) return false;
-
- if (newMatch.head != null) {
- // set contents of mymatch equal to newMatch
+ if (next(input, tryMatch)) {
+ mymatch.assignFrom(tryMatch);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
- // try each one that matched
- mymatch.assignFrom(newMatch.head);
+ private boolean matchOneRE(CharIndexed input, REMatch mymatch) {
+ REMatch newMatch = findMatch(input, mymatch);
+ if (newMatch != null) {
+ mymatch.assignFrom(newMatch);
return true;
- } else {
- return false;
}
- }
+ return false;
+ }
+
+ REMatch findMatch(CharIndexed input, REMatch mymatch) {
+ if (matchesOneChar) return super.findMatch(input, mymatch);
+ return findMatch(input, mymatch, 0);
+ }
+
+ REMatch backtrack(CharIndexed input, REMatch mymatch, Object param) {
+ return findMatch(input, mymatch, ((Integer)param).intValue());
+ }
+
+ private REMatch findMatch(CharIndexed input, REMatch mymatch, int optionIndex) {
+ for (int i = optionIndex; i < options.size(); i++) {
+ REToken tk = (REToken) options.elementAt(i);
+ tk = (REToken) tk.clone();
+ tk.chain(getNext());
+ REMatch tryMatch = (REMatch) mymatch.clone();
+ if (tryMatch.backtrackStack == null) {
+ tryMatch.backtrackStack = new BacktrackStack();
+ }
+ boolean stackPushed = false;
+ if (i + 1 < options.size()) {
+ tryMatch.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, new Integer(i + 1)));
+ stackPushed = true;
+ }
+ boolean b = tk.match(input, tryMatch);
+ if (b) {
+ return tryMatch;
+ }
+ if (stackPushed) tryMatch.backtrackStack.pop();
+ }
+ return null;
+ }
+
+ boolean returnsFixedLengthMatches() { return matchesOneChar; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ if (!matchesOneChar)
+ return super.findFixedLengthMatches(input, mymatch, max);
+ int numRepeats = 0;
+ REMatch m = (REMatch) mymatch.clone();
+ REToken tk = (REToken) this.clone();
+ tk.chain(null);
+ while (true) {
+ if (numRepeats >= max) break;
+ m = tk.findMatch(input, m);
+ if (m == null) break;
+ numRepeats++;
+ }
+ return numRepeats;
+ }
void dump(StringBuffer os) {
os.append(negative ? "[^" : "(?:");
diff --git a/libjava/classpath/gnu/regexp/RETokenPOSIX.java b/libjava/classpath/gnu/regexp/RETokenPOSIX.java
index 4182c6f..dbea98a 100644
--- a/libjava/classpath/gnu/regexp/RETokenPOSIX.java
+++ b/libjava/classpath/gnu/regexp/RETokenPOSIX.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenPOSIX.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -85,8 +85,17 @@ final class RETokenPOSIX extends REToken {
return 1;
}
- boolean match(CharIndexed input, REMatch mymatch) {
- char ch = input.charAt(mymatch.index);
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
+ char ch = input.charAt(mymatch.index);
+ boolean retval = matchOneChar(ch);
+ if (retval) {
+ ++mymatch.index;
+ return mymatch;
+ }
+ return null;
+ }
+
+ boolean matchOneChar(char ch) {
if (ch == CharIndexed.OUT_OF_BOUNDS)
return false;
@@ -134,11 +143,21 @@ final class RETokenPOSIX extends REToken {
}
if (negated) retval = !retval;
- if (retval) {
- ++mymatch.index;
- return next(input, mymatch);
- }
- else return false;
+ return retval;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ while (true) {
+ if (numRepeats >= max) break;
+ char ch = input.charAt(index++);
+ if (! matchOneChar(ch)) break;
+ numRepeats++;
+ }
+ return numRepeats;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenRange.java b/libjava/classpath/gnu/regexp/RETokenRange.java
index 8a1ac86..9d3da32 100644
--- a/libjava/classpath/gnu/regexp/RETokenRange.java
+++ b/libjava/classpath/gnu/regexp/RETokenRange.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenRange.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,23 +56,41 @@ final class RETokenRange extends REToken {
return 1;
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
char c = input.charAt(mymatch.index);
+ if (matchOneChar(c)) {
+ ++mymatch.index;
+ return mymatch;
+ }
+ return null;
+ }
+
+ boolean matchOneChar(char c) {
if (c == CharIndexed.OUT_OF_BOUNDS) return false;
boolean matches = (c >= lo) && (c <= hi);
if (! matches && insens) {
- char c1 = Character.toLowerCase(c);
+ char c1 = toLowerCase(c, unicodeAware);
matches = (c1 >= lo) && (c1 <= hi);
if (!matches) {
- c1 = Character.toUpperCase(c);
+ c1 = toUpperCase(c, unicodeAware);
matches = (c1 >= lo) && (c1 <= hi);
}
}
- if (matches) {
- ++mymatch.index;
- return next(input, mymatch);
+ return matches;
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ int index = mymatch.index;
+ int numRepeats = 0;
+ while (true) {
+ if (numRepeats >= max) break;
+ char ch = input.charAt(index++);
+ if (! matchOneChar(ch)) break;
+ numRepeats++;
}
- return false;
+ return numRepeats;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenRepeated.java b/libjava/classpath/gnu/regexp/RETokenRepeated.java
index 2d019c5..1bad4c7 100644
--- a/libjava/classpath/gnu/regexp/RETokenRepeated.java
+++ b/libjava/classpath/gnu/regexp/RETokenRepeated.java
@@ -38,20 +38,27 @@ exception statement from your version. */
package gnu.regexp;
-import java.util.Vector;
-import java.util.Arrays;
+// import java.util.Vector;
+// import java.util.Stack;
final class RETokenRepeated extends REToken {
private REToken token;
private int min,max;
private boolean stingy;
private boolean possessive;
+ private int tokenFixedLength;
RETokenRepeated(int subIndex, REToken token, int min, int max) {
super(subIndex);
this.token = token;
this.min = min;
this.max = max;
+ if (token.returnsFixedLengthMatches()) {
+ tokenFixedLength = token.getMaximumLength();
+ }
+ else {
+ tokenFixedLength = -1;
+ }
}
/** Sets the minimal matching mode to true. */
@@ -90,69 +97,235 @@ final class RETokenRepeated extends REToken {
return (max * tmax);
}
- private static REMatch findDoables(REToken tk,
- CharIndexed input, REMatch mymatch) {
-
- REMatch.REMatchList doables = new REMatch.REMatchList();
-
- // try next repeat at all possible positions
- for (REMatch current = mymatch;
- current != null; current = current.next) {
- REMatch recurrent = (REMatch) current.clone();
- int origin = recurrent.index;
- tk = (REToken) tk.clone();
- tk.next = tk.uncle = null;
- recurrent.matchFlags |= REMatch.MF_FIND_ALL;
- if (tk.match(input, recurrent)) {
- for (REMatch m = recurrent; m != null; m = m.next) {
- m.matchFlags &= ~REMatch.MF_FIND_ALL;
+ // The comment "MUST make a clone" below means that some tests
+ // failed without doing clone(),
+
+ private static class DoablesFinder {
+ private REToken tk;
+ private CharIndexed input;
+ private REMatch rematch;
+ private boolean findFirst;
+
+ private DoablesFinder(REToken tk, CharIndexed input, REMatch mymatch) {
+ this.tk = tk;
+ this.input = input;
+ this.rematch = (REMatch) mymatch.clone(); // MUST make a clone
+ this.rematch.backtrackStack = new BacktrackStack();
+ findFirst = true;
+ }
+
+ private REMatch find() {
+ int origin = rematch.index;
+ REMatch rem;
+ if (findFirst) {
+ rem = tk.findMatch(input, rematch);
+ findFirst = false;
+ }
+ else {
+ while (true) {
+ if (rematch.backtrackStack.empty()) {
+ rem = null;
+ break;
}
- if (recurrent.index == origin) recurrent.empty = true;
- // add all items in current to doables array
- doables.addTail(recurrent);
+ BacktrackStack.Backtrack bt = rematch.backtrackStack.pop();
+ rem = bt.token.backtrack(bt.input, bt.match, bt.param);
+ if (rem != null) break;
}
}
- return doables.head;
+ if (rem == null) return null;
+ if (rem.index == origin) rem.empty = true;
+ rematch = rem;
+ return (REMatch) rem.clone(); // MUST make a clone.
+ }
+
+ boolean noMore() {
+ return rematch.backtrackStack.empty();
+ }
}
- // We do need to save every possible point, but the number of clone()
- // invocations here is really a killer for performance on non-stingy
- // repeat operators. I'm open to suggestions...
+ REMatch findMatch(CharIndexed input, REMatch mymatch) {
+ if (tokenFixedLength >= 0) return findMatchFixedLength(input, mymatch);
+ BacktrackStack stack = new BacktrackStack();
+ stack.push(new StackedInfo(input, 0, mymatch, null, null));
+ return findMatch(stack);
+ }
- // Hypothetical question: can you have a RE that matches 1 times,
- // 3 times, 5 times, but not 2 times or 4 times? Does having
- // the subexpression back-reference operator allow that?
+ REMatch backtrack(CharIndexed input, REMatch mymatch, Object param) {
+ if (tokenFixedLength >= 0) return backtrackFixedLength(input, mymatch, param);
+ return findMatch((BacktrackStack)param);
+ }
- boolean match(CharIndexed input, REMatch mymatch) {
+ private static class StackedInfo extends BacktrackStack.Backtrack {
+ int numRepeats;
+ int[] visited;
+ DoablesFinder finder;
+ StackedInfo(CharIndexed input, int numRepeats, REMatch match,
+ int[] visited, DoablesFinder finder) {
+ super(null, input, match, null);
+ this.numRepeats = numRepeats;
+ this.visited = visited;
+ this.finder = finder;
+ }
+ }
- boolean stopMatchingIfSatisfied =
- (mymatch.matchFlags & REMatch.MF_FIND_ALL) == 0;
+ private REMatch findMatch(BacktrackStack stack) {
+ // Avoid using recursive calls.
+ MAIN_LOOP:
+ while (true) {
+
+ if (stack.empty()) return null;
+ StackedInfo si = (StackedInfo)(stack.peek());
+ CharIndexed input = si.input;
+ int numRepeats = si.numRepeats;
+ REMatch mymatch = si.match;
+ int[] visited = si.visited;
+ DoablesFinder finder = si.finder;
+
+ if (mymatch.backtrackStack == null)
+ mymatch.backtrackStack = new BacktrackStack();
+
+ if (numRepeats >= max) {
+ stack.pop();
+ REMatch m1 = matchRest(input, mymatch);
+ if (m1 != null) {
+ if (! stack.empty()) {
+ m1.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, stack));
+ }
+ return m1;
+ }
+ if (stingy) {
+ continue MAIN_LOOP;
+ }
+ return null;
+ }
- REMatch newMatch = matchMinimum(input, mymatch);
- if (newMatch == null) return false;
+ if (finder == null) {
+ finder = new DoablesFinder(token, input, mymatch);
+ si.finder = finder;
+ }
- // Array of positions we have already visited
- int[] visited = initVisited();
- for (REMatch m = newMatch; m != null; m = m.next) {
- visited = addVisited(m.index, visited);
+ if (numRepeats < min) {
+ while (true) {
+ REMatch doable = finder.find();
+ if (doable == null) {
+ if (stack.empty()) return null;
+ stack.pop();
+ continue MAIN_LOOP;
+ }
+ if (finder.noMore()) stack.pop();
+ int newNumRepeats = (doable.empty ? min : numRepeats + 1);
+ stack.push(new StackedInfo(
+ input, newNumRepeats, doable, visited, null));
+ continue MAIN_LOOP;
+ }
}
- int max1 = decreaseMax(max, min);
+ if (visited == null) visited = initVisited();
- newMatch = _match(input, newMatch, max1,
- stopMatchingIfSatisfied, visited);
- if (newMatch != null) {
- mymatch.assignFrom(newMatch);
- return true;
+ if (stingy) {
+ REMatch nextMatch = finder.find();
+ if (nextMatch != null && !nextMatch.empty) {
+ stack.push(new StackedInfo(
+ input, numRepeats + 1, nextMatch, visited, null));
+ }
+ else {
+ stack.pop();
+ }
+ REMatch m1 = matchRest(input, mymatch);
+ if (m1 != null) {
+ if (!stack.empty()) {
+ m1.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, stack));
+ }
+ return m1;
+ }
+ else {
+ continue MAIN_LOOP;
+ }
}
- return false;
- }
- private static int decreaseMax(int m, int n) {
- if (m == Integer.MAX_VALUE) return m;
- return m - n;
+ visited = addVisited(mymatch.index, visited);
+
+ DO_THIS:
+ do {
+
+ boolean emptyMatchFound = false;
+
+ DO_ONE_DOABLE:
+ while (true) {
+
+ REMatch doable = finder.find();
+ if (doable == null) {
+ break DO_THIS;
+ }
+ if (doable.empty) emptyMatchFound = true;
+
+ if (!emptyMatchFound) {
+ int n = doable.index;
+ if (! visitedContains(n, visited)) {
+ visited = addVisited(n, visited);
+ }
+ else {
+ continue DO_ONE_DOABLE;
+ }
+ stack.push(new StackedInfo(
+ input, numRepeats + 1, doable, visited, null));
+ REMatch m1 = findMatch(stack);
+ if (possessive) {
+ return m1;
+ }
+ if (m1 != null) {
+ m1.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, stack));
+ return m1;
+ }
+ }
+ else {
+ REMatch m1 = matchRest(input, doable);
+ if (possessive) {
+ return m1;
+ }
+ if (m1 != null) {
+ if (! stack.empty()) {
+ m1.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, stack));
+ }
+ return m1;
+ }
+ }
+
+ } // DO_ONE_DOABLE
+
+ } while (false); // DO_THIS only once;
+
+ if (!stack.empty()) {
+ stack.pop();
+ }
+ if (possessive) {
+ stack.clear();
+ }
+ REMatch m1 = matchRest(input, mymatch);
+ if (m1 != null) {
+ if (! stack.empty()) {
+ m1.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch, stack));
+ }
+ return m1;
+ }
+
+ } // MAIN_LOOP
}
+ boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch m1 = findMatch(input, mymatch);
+ if (m1 != null) {
+ mymatch.assignFrom(m1);
+ return true;
+ }
+ return false;
+ }
+
// Array visited is an array of character positions we have already
// visited. visited[0] is used to store the effective length of the
// array.
@@ -183,134 +356,55 @@ final class RETokenRepeated extends REToken {
return visited;
}
- private REMatch _match(CharIndexed input, REMatch mymatch,
- int max1, boolean stopMatchingIfSatisfied,
- int[] visited) {
-
- if (max1 == 0) {
- return matchRest(input, mymatch);
- }
- max1 = decreaseMax(max1, 1);
-
- REMatch.REMatchList allResults = new REMatch.REMatchList();
-
- // Depth-first search
-
- for (REMatch cur = mymatch; cur != null; cur = cur.next) {
-
- REMatch cur1 = (REMatch) cur.clone();
-
- if (stingy) {
- REMatch results = matchRest(input, cur1);
- if (results != null) {
- if (stopMatchingIfSatisfied) {
- return results;
- }
- allResults.addTail(results);
- }
- }
-
- DO_THIS:
- do {
-
- boolean emptyMatchFound = false;
- REMatch doables = findDoables(token, input, cur1);
- if (doables == null) break DO_THIS;
- if (doables.empty) emptyMatchFound = true;
-
- if (!emptyMatchFound) {
- REMatch.REMatchList list = new REMatch.REMatchList();
- for (REMatch m = doables; m != null; m = m.next) {
- REMatch m1 = (REMatch) m.clone();
- int n = m1.index;
- if (! visitedContains(n, visited)) {
- visited = addVisited(n, visited);
- list.addTail(m1);
- }
- }
- if (list.head == null) break DO_THIS;
- doables = list.head;
- }
-
- for (REMatch m = doables; m != null; m = m.next) {
- if (! emptyMatchFound) {
- REMatch m1 = _match(input, m, max1,
- stopMatchingIfSatisfied, visited);
- if (possessive) return m1;
- if (m1 != null) {
- if (stopMatchingIfSatisfied) {
- return m1;
- }
- allResults.addTail(m1);
- }
- }
- else {
- REMatch m1 = matchRest(input, m);
- if (m1 != null) {
- if (stopMatchingIfSatisfied) {
- return m1;
- }
- allResults.addTail(m1);
- }
- }
- }
-
- } while (false); // DO_THIS only once;
-
- // This point itself is a candidate.
- if (!stingy) {
- REMatch m2 = matchRest(input, cur1);
- if (m2 != null) {
- if (stopMatchingIfSatisfied) {
- return m2;
- }
- allResults.addTail(m2);
- }
- }
+ private REMatch matchRest(CharIndexed input, final REMatch newMatch) {
+ if (next(input, newMatch)) {
+ return newMatch;
}
-
- return allResults.head;
+ return null;
}
- private REMatch matchMinimum(CharIndexed input, final REMatch mymatch) {
- // Possible positions for the next repeat to match at
- REMatch newMatch = mymatch;
-
- // number of times we've matched so far
- int numRepeats = 0;
-
- while (numRepeats < min) {
- REMatch doables = findDoables(token, input, newMatch);
-
- // if none of the possibilities worked out,
- // it means that minimum number of repeats could not be found.
- if (doables == null) return null;
-
- // reassign where the next repeat can match
- newMatch = doables;
-
- // increment how many repeats we've successfully found
- ++numRepeats;
-
- if (newMatch.empty) break;
- }
- return newMatch;
+ private REMatch findMatchFixedLength(CharIndexed input, REMatch mymatch) {
+ if (mymatch.backtrackStack == null)
+ mymatch.backtrackStack = new BacktrackStack();
+ int numRepeats = token.findFixedLengthMatches(input, (REMatch)mymatch.clone(), max);
+ if (numRepeats == Integer.MAX_VALUE) numRepeats = min;
+ int count = numRepeats - min + 1;
+ if (count <= 0) return null;
+ int index = 0;
+ if (!stingy) index = mymatch.index + (tokenFixedLength * numRepeats);
+ else index = mymatch.index + (tokenFixedLength * min);
+ return findMatchFixedLength(input, mymatch, index, count);
}
- private REMatch matchRest(CharIndexed input, final REMatch newMatch) {
- REMatch current, single;
- REMatch.REMatchList doneIndex = new REMatch.REMatchList();
- // Test all possible matches for this number of repeats
- for (current = newMatch; current != null; current = current.next) {
- // clone() separates a single match from the chain
- single = (REMatch) current.clone();
- if (next(input, single)) {
- // chain results to doneIndex
- doneIndex.addTail(single);
+ private REMatch backtrackFixedLength(CharIndexed input, REMatch mymatch,
+ Object param) {
+ int[] params = (int[])param;
+ int index = params[0];
+ int count = params[1];
+ return findMatchFixedLength(input, mymatch, index, count);
+ }
+
+ private REMatch findMatchFixedLength(CharIndexed input, REMatch mymatch,
+ int index, int count) {
+ REMatch tryMatch = (REMatch) mymatch.clone();
+ while (true) {
+ tryMatch.index = index;
+ REMatch m = matchRest(input, tryMatch);
+ count--;
+ if (stingy) index += tokenFixedLength;
+ else index -= tokenFixedLength;
+ if (possessive) return m;
+ if (m != null) {
+ if (count > 0) {
+ m.backtrackStack.push(new BacktrackStack.Backtrack(
+ this, input, mymatch,
+ new int[] {index, count}));
+ }
+ return m;
}
+ if (count <= 0) return null;
}
- return doneIndex.head;
- }
+ }
void dump(StringBuffer os) {
os.append("(?:");
diff --git a/libjava/classpath/gnu/regexp/RETokenStart.java b/libjava/classpath/gnu/regexp/RETokenStart.java
index 42e3c0b..b992bd6 100644
--- a/libjava/classpath/gnu/regexp/RETokenStart.java
+++ b/libjava/classpath/gnu/regexp/RETokenStart.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenStart.java
- Copyright (C) 1998-2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ class RETokenStart extends REToken {
return 0;
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
// charAt(index-n) may be unknown on a Reader/InputStream. FIXME
// Match after a newline if in multiline mode
@@ -70,19 +70,26 @@ class RETokenStart extends REToken {
ch = input.charAt(mymatch.index - len + i);
} while (i < len);
- if (found) return next(input, mymatch);
+ if (found) return mymatch;
}
}
// Don't match at all if REG_NOTBOL is set.
- if ((mymatch.eflags & RE.REG_NOTBOL) > 0) return false;
+ if ((mymatch.eflags & RE.REG_NOTBOL) > 0) return null;
if ((mymatch.eflags & RE.REG_ANCHORINDEX) > 0)
return (mymatch.anchor == mymatch.offset) ?
- next(input, mymatch) : false;
+ mymatch : null;
else
return ((mymatch.index == 0) && (mymatch.offset == 0)) ?
- next(input, mymatch) : false;
+ mymatch : null;
+ }
+
+ boolean returnsFixedLengthmatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ if (matchThis(input, mymatch) != null) return max;
+ else return 0;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/regexp/RETokenWordBoundary.java b/libjava/classpath/gnu/regexp/RETokenWordBoundary.java
index f86214b..1810339 100644
--- a/libjava/classpath/gnu/regexp/RETokenWordBoundary.java
+++ b/libjava/classpath/gnu/regexp/RETokenWordBoundary.java
@@ -1,5 +1,5 @@
/* gnu/regexp/RETokenWordBoundary.java
- Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -58,7 +58,7 @@ final class RETokenWordBoundary extends REToken {
}
- boolean match(CharIndexed input, REMatch mymatch) {
+ REMatch matchThis(CharIndexed input, REMatch mymatch) {
// Word boundary means input[index-1] was a word character
// and input[index] is not, or input[index] is a word character
// and input[index-1] was not
@@ -94,7 +94,14 @@ final class RETokenWordBoundary extends REToken {
if (negated) doNext = !doNext;
- return (doNext ? next(input, mymatch) : false);
+ return (doNext ? mymatch : null);
+ }
+
+ boolean returnsFixedLengthMatches() { return true; }
+
+ int findFixedLengthMatches(CharIndexed input, REMatch mymatch, int max) {
+ if(matchThis(input, mymatch) != null) return max;
+ else return 0;
}
void dump(StringBuffer os) {
diff --git a/libjava/classpath/gnu/xml/dom/DomDocument.java b/libjava/classpath/gnu/xml/dom/DomDocument.java
index 900d03a..5d06a42 100644
--- a/libjava/classpath/gnu/xml/dom/DomDocument.java
+++ b/libjava/classpath/gnu/xml/dom/DomDocument.java
@@ -150,6 +150,14 @@ public class DomDocument
}
/**
+ * Sets whether to check for document characters.
+ */
+ public void setCheckingCharacters(boolean flag)
+ {
+ checkingCharacters = flag;
+ }
+
+ /**
* <b>DOM L1</b>
* Returns the constant "#document".
*/
@@ -235,6 +243,18 @@ public class DomDocument
if (current.getNodeType() == ELEMENT_NODE)
{
DomElement element = (DomElement) current;
+ if (element.userIdAttrs != null)
+ {
+ for (Iterator i = element.userIdAttrs.iterator();
+ i.hasNext(); )
+ {
+ Node idAttr = (Node) i.next();
+ if (id.equals(idAttr.getNodeValue()))
+ {
+ return element;
+ }
+ }
+ }
if (doctype != null)
{
DTDElementTypeInfo info =
@@ -244,18 +264,6 @@ public class DomDocument
{
return element;
}
- else if (element.userIdAttrs != null)
- {
- for (Iterator i = element.userIdAttrs.iterator();
- i.hasNext(); )
- {
- Node idAttr = (Node) i.next();
- if (id.equals(idAttr.getNodeValue()))
- {
- return element;
- }
- }
- }
}
// xml:id
String xmlId = element.getAttribute("xml:id");
@@ -535,11 +543,9 @@ public class DomDocument
int index = name.indexOf(':');
if (index != -1)
{
- if (index == 0 || index == (len - 1) ||
- name.lastIndexOf(':') != index)
+ if (index == 0 || index == (len - 1) || name.lastIndexOf(':') != index)
{
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- name, null, 0);
+ throw new DomDOMException(DOMException.NAMESPACE_ERR, name, null, 0);
}
}
}
diff --git a/libjava/classpath/gnu/xml/dom/DomNode.java b/libjava/classpath/gnu/xml/dom/DomNode.java
index 93f7c6f..f0915eb 100644
--- a/libjava/classpath/gnu/xml/dom/DomNode.java
+++ b/libjava/classpath/gnu/xml/dom/DomNode.java
@@ -1113,14 +1113,16 @@ public abstract class DomNode
{
DomDocument doc = (nodeType == DOCUMENT_NODE) ?
(DomDocument) node : node.owner;
+ boolean building = doc.building;
+ doc.building = true; // Permit certain structural rules
for (DomNode ctx = first; ctx != null; ctx = ctx.next)
{
DomNode newChild = (DomNode) ctx.cloneNode(deep);
newChild.setOwner(doc);
node.appendChild(newChild);
}
+ doc.building = building;
}
-
if (nodeType == ENTITY_REFERENCE_NODE)
{
node.makeReadonly();
@@ -1556,23 +1558,30 @@ public abstract class DomNode
ancestorLen = ancestors.length;
}
- // XXX autogrow ancestors ... based on statistics
-
// Climb to the top of this subtree and handle capture, letting
// each node (from the top down) capture until one stops it or
// until we get to this one.
-
- for (index = 0, current = parent;
- current != null && index < ancestorLen;
- index++, current = current.parent)
+ current = parent;
+ if (current.depth >= ANCESTORS_INIT)
{
+ DomNode[] newants = new DomNode[current.depth + 1];
+ System.arraycopy(ancestors, 0, newants, 0, ancestors.length);
+ ancestors = newants;
+ ancestorLen = ancestors.length;
+ }
+ for (index = 0; index < ancestorLen; index++)
+ {
+ if (current == null || current.depth == 0)
+ break;
+
if (current.nListeners != 0)
{
haveAncestorRegistrations = true;
}
ancestors [index] = current;
+ current = current.parent;
}
- if (current != null)
+ if (current.depth > 0)
{
throw new RuntimeException("dispatchEvent capture stack size");
}
diff --git a/libjava/classpath/gnu/xml/dom/DomNodeIterator.java b/libjava/classpath/gnu/xml/dom/DomNodeIterator.java
index 6079f7a..8001556 100644
--- a/libjava/classpath/gnu/xml/dom/DomNodeIterator.java
+++ b/libjava/classpath/gnu/xml/dom/DomNodeIterator.java
@@ -137,9 +137,10 @@ public class DomNodeIterator
{
ret = current.getNextSibling();
}
+ current = (ret == null) ? current : ret;
}
while (!accept(ret));
- current = (ret == null) ? current : ret;
+
return ret;
}
diff --git a/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java b/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java
index 8ec4d3c..918cf0d 100644
--- a/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java
+++ b/libjava/classpath/gnu/xml/dom/html2/DomHTMLAppletElement.java
@@ -65,6 +65,26 @@ public class DomHTMLAppletElement
setHTMLAttribute("align", align);
}
+ public String getCls()
+ {
+ return getHTMLAttribute("class");
+ }
+
+ public void setCls(String cls)
+ {
+ setHTMLAttribute("class", cls);
+ }
+
+ public String getSrc()
+ {
+ return getHTMLAttribute("src");
+ }
+
+ public void setSrc(String src)
+ {
+ setHTMLAttribute("src", src);
+ }
+
public String getAlt()
{
return getHTMLAttribute("alt");
@@ -164,6 +184,5 @@ public class DomHTMLAppletElement
{
setHTMLAttribute("width", width);
}
-
}
diff --git a/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java b/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java
index 10ee9e7..d45c1b2 100644
--- a/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java
+++ b/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java
@@ -87,6 +87,7 @@ public class DomHTMLDocument
map.put("dir", DomHTMLDirectoryElement.class);
map.put("div", DomHTMLDivElement.class);
map.put("dlist", DomHTMLDListElement.class);
+ map.put("embed", DomHTMLEmbedElement.class);
map.put("fieldset", DomHTMLFieldSetElement.class);
map.put("font", DomHTMLFontElement.class);
map.put("form", DomHTMLFormElement.class);
@@ -311,6 +312,7 @@ public class DomHTMLDocument
public HTMLCollection getApplets()
{
DomHTMLCollection ret = new DomHTMLCollection(this, this);
+ ret.addNodeName("embed");
ret.addNodeName("object");
ret.addNodeName("applet");
ret.evaluate();
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TestCase.java b/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java
index 84c1603..1ae081c 100644
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/TestCase.java
+++ b/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java
@@ -1,5 +1,5 @@
-/* TestCase.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+/* DomHTMLEmbedElement.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,103 +36,94 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package test.gnu.javax.swing.text.html.parser;
+package gnu.xml.dom.html2;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class TestCase
+public class DomHTMLEmbedElement
+ extends DomHTMLAppletElement
{
- public TestCase()
+ protected DomHTMLEmbedElement(DomHTMLDocument owner, String namespaceURI,
+ String name)
{
- try
- {
- setUp();
- }
- catch (Exception ex)
- {
- throw new RuntimeException(ex);
- }
+ super(owner, namespaceURI, name);
}
-
- public void assertEquals(String msg, Object a, Object b)
+
+ public String getJavaObject()
{
- if (a == b)
- return;
- if (!a.equals(b))
- throw new RuntimeException(msg);
+ return getHTMLAttribute("java_object");
}
- public void assertEquals(Object a, Object b)
+ public void setJavaObject(String object)
{
- if (a == b)
- return;
- if (!a.equals(b))
- throw new RuntimeException("Objects must be equal");
+ setHTMLAttribute("java_object", object);
}
-
- public void assertEquals(int a, int b)
+
+ public String getJavaCodeBase()
{
- if (a != b)
- throw new RuntimeException(a + "!=" + b);
+ return getHTMLAttribute("java_codebase");
}
- public void assertEquals(String msg, int a, int b)
+ public void setJavaCodeBase(String codeBase)
{
- if (a != b)
- throw new RuntimeException(msg + ":" + a + "!=" + b);
+ setHTMLAttribute("java_codebase", codeBase);
}
-
- public void assertEquals(boolean a, boolean b)
+
+ public String getJavaArchive()
{
- if (a != b)
- throw new RuntimeException(a + "!=" + b);
+ return getHTMLAttribute("java_archive");
}
- public void assertFalse(String msg, boolean a)
+ public void setJavaArchive(String archive)
{
- if (a)
- throw new RuntimeException(msg);
+ setHTMLAttribute("java_archive", archive);
}
- public void assertFalse(boolean a)
+ public void setJavaCode(String code)
{
- if (a)
- throw new RuntimeException("Must be false");
+ setHTMLAttribute("java_code", code);
}
-
- public void assertNotNull(String msg, Object a)
+
+ public String getJavaCode()
{
- if (a == null)
- throw new RuntimeException(msg);
+ return getHTMLAttribute("java_code");
}
-
- public void assertNull(String msg, Object a)
+
+ public void setJavaType(String type)
{
- if (a != null)
- throw new RuntimeException(msg);
+ setHTMLAttribute("java_type", type);
}
-
- public void assertTrue(String msg, boolean a)
+
+ public String getJavaType()
{
- if (!a)
- throw new RuntimeException(msg);
+ return getHTMLAttribute("java_type");
}
-
- public void assertTrue(boolean a)
+
+ public void setType(String type)
{
- if (!a)
- throw new RuntimeException("Must be true");
+ setHTMLAttribute("type", type);
}
-
- protected void setUp()
- throws Exception
+
+ public String getType()
+ {
+ return getHTMLAttribute("type");
+ }
+
+ public String getPluginsPage()
+ {
+ return getHTMLAttribute("pluginspage");
+ }
+
+ public void setPluginsPage(String pluginspage)
+ {
+ setHTMLAttribute("pluginspage", pluginspage);
+ }
+
+ public String getMayscript()
{
+ return getHTMLAttribute("mayscript");
}
- protected void tearDown()
- throws Exception
+ public void setMayscript(String mayscript)
{
+ setHTMLAttribute("mayscript", mayscript);
}
}
diff --git a/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java b/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java
index fdea9b1..9bb6211 100644
--- a/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java
+++ b/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java
@@ -72,6 +72,36 @@ public class DomHTMLObjectElement
setHTMLAttribute("code", code);
}
+ public String getJavaCode()
+ {
+ return getHTMLAttribute("java_code");
+ }
+
+ public void setJavaCode(String code)
+ {
+ setHTMLAttribute("java_code", code);
+ }
+
+ public String getObject()
+ {
+ return getHTMLAttribute("object");
+ }
+
+ public void setObject(String obj)
+ {
+ setHTMLAttribute("object", obj);
+ }
+
+ public String getJavaObject()
+ {
+ return getHTMLAttribute("java_object");
+ }
+
+ public void setJavaObject(String obj)
+ {
+ setHTMLAttribute("java_object", obj);
+ }
+
public String getAlign()
{
return getHTMLAttribute("align");
@@ -92,6 +122,16 @@ public class DomHTMLObjectElement
setHTMLAttribute("archive", archive);
}
+ public String getJavaArchive()
+ {
+ return getHTMLAttribute("java_archive");
+ }
+
+ public void setJavaArchive(String archive)
+ {
+ setHTMLAttribute("java_archive", archive);
+ }
+
public String getBorder()
{
return getHTMLAttribute("border");
@@ -112,6 +152,16 @@ public class DomHTMLObjectElement
setHTMLAttribute("codebase", codeBase);
}
+ public String getJavaCodeBase()
+ {
+ return getHTMLAttribute("java_codebase");
+ }
+
+ public void setJavaCodeBase(String codeBase)
+ {
+ setHTMLAttribute("java_codebase", codeBase);
+ }
+
public String getCodeType()
{
return getHTMLAttribute("codetype");
@@ -202,6 +252,16 @@ public class DomHTMLObjectElement
setHTMLAttribute("type", type);
}
+ public String getJavaType()
+ {
+ return getHTMLAttribute("java_type");
+ }
+
+ public void setJavaType(String type)
+ {
+ setHTMLAttribute("java_type", type);
+ }
+
public String getUseMap()
{
return getHTMLAttribute("usemap");
@@ -238,5 +298,24 @@ public class DomHTMLObjectElement
return null;
}
+ public void setMayscript(String may)
+ {
+ setHTMLAttribute("mayscript", may);
+ }
+
+ public String getMayscript()
+ {
+ return getHTMLAttribute("mayscript");
+ }
+
+ public void setScriptable(String scr)
+ {
+ setHTMLAttribute("scriptable", scr);
+ }
+
+ public String getScriptable()
+ {
+ return getHTMLAttribute("scriptable");
+ }
}
diff --git a/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java b/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java
index 7b44562..2d329fd 100644
--- a/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java
+++ b/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java
@@ -124,9 +124,11 @@ public class DomHTMLParser
try
{
document = new DomHTMLDocument();
-
+ document.setCheckWellformedness(false);
+ document.setCheckingCharacters(false);
+
cursor = document;
-
+
parse(input);
DomHTMLDocument h = document;
@@ -224,7 +226,6 @@ public class DomHTMLParser
open.addFirst(close);
close = close.getParentNode();
}
-
if (close == null)
cursor = document;
else
@@ -235,9 +236,8 @@ public class DomHTMLParser
while (iter.hasNext())
{
Node item = (Node) iter.next();
- Node copy = item.cloneNode(true);
- cursor.appendChild(copy);
- cursor = copy;
+ cursor.appendChild(item);
+ cursor = item;
}
}
}
diff --git a/libjava/classpath/gnu/xml/stream/XMLParser.java b/libjava/classpath/gnu/xml/stream/XMLParser.java
index 9bb4834..87096ee 100644
--- a/libjava/classpath/gnu/xml/stream/XMLParser.java
+++ b/libjava/classpath/gnu/xml/stream/XMLParser.java
@@ -3534,7 +3534,7 @@ public class XMLParser
public static boolean isXML11Char(int c)
{
return ((c >= 0x0001 && c <= 0xD7FF) ||
- (c >= 0xE000 && c < 0xFFFD) || // NB exclude 0xfffd
+ (c >= 0xE000 && c < 0xFFFE) ||
(c >= 0x10000 && c <= 0x10FFFF));
}
@@ -4014,7 +4014,7 @@ public class XMLParser
public static boolean isChar(int c)
{
return (c >= 0x20 && c < 0xd800) ||
- (c >= 0xe00 && c < 0xfffd) || // NB exclude 0xfffd
+ (c >= 0xe00 && c < 0xfffe) ||
(c >= 0x10000 && c < 0x110000) ||
c == 0xa || c == 0x9 || c == 0xd;
}
@@ -4965,6 +4965,7 @@ public class XMLParser
Reader reader;
UnicodeReader unicodeReader;
boolean initialized;
+ boolean encodingDetected;
String inputEncoding;
boolean xml11;
@@ -5174,6 +5175,7 @@ public class XMLParser
in.read();
in.read();
setInputEncoding("UTF-32BE");
+ encodingDetected = true;
}
else if (equals(SIGNATURE_UCS_4_4321, signature))
{
@@ -5182,6 +5184,7 @@ public class XMLParser
in.read();
in.read();
setInputEncoding("UTF-32LE");
+ encodingDetected = true;
}
else if (equals(SIGNATURE_UCS_4_2143, signature) ||
equals(SIGNATURE_UCS_4_3412, signature))
@@ -5193,12 +5196,14 @@ public class XMLParser
in.read();
in.read();
setInputEncoding("UTF-16BE");
+ encodingDetected = true;
}
else if (equals(SIGNATURE_UCS_2_21, signature))
{
in.read();
in.read();
setInputEncoding("UTF-16LE");
+ encodingDetected = true;
}
else if (equals(SIGNATURE_UCS_2_12_NOBOM, signature))
{
@@ -5221,6 +5226,7 @@ public class XMLParser
in.read();
in.read();
setInputEncoding("UTF-8");
+ encodingDetected = true;
}
}
@@ -5242,7 +5248,7 @@ public class XMLParser
if ("UTF-16".equalsIgnoreCase(encoding) &&
inputEncoding.startsWith("UTF-16"))
return;
- if (reader != null)
+ if (encodingDetected)
throw new UnsupportedEncodingException("document is not in its " +
"declared encoding " +
inputEncoding +
diff --git a/libjava/classpath/gnu/xml/transform/TransformerImpl.java b/libjava/classpath/gnu/xml/transform/TransformerImpl.java
index 2c57e97..6a0a5be 100644
--- a/libjava/classpath/gnu/xml/transform/TransformerImpl.java
+++ b/libjava/classpath/gnu/xml/transform/TransformerImpl.java
@@ -320,12 +320,24 @@ class TransformerImpl
}
if (indent)
{
+ if (created)
+ {
+ DomDocument domDoc = (DomDocument) parent;
+ domDoc.setBuilding(true);
+ domDoc.setCheckWellformedness(false);
+ }
parent.normalize();
strip(stylesheet, parent);
Document resultDoc = (parent instanceof Document) ?
(Document) parent :
parent.getOwnerDocument();
reindent(resultDoc, parent, 0);
+ if (created)
+ {
+ DomDocument domDoc = (DomDocument) parent;
+ domDoc.setBuilding(false);
+ domDoc.setCheckWellformedness(true);
+ }
}
// Render result to the target device
if (outputTarget instanceof DOMResult)
diff --git a/libjava/classpath/gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java b/libjava/classpath/gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java
index e1eb758..890ca8e 100644
--- a/libjava/classpath/gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java
+++ b/libjava/classpath/gnu/xml/validation/relaxng/RELAXNGSchemaFactory.java
@@ -51,6 +51,7 @@ import javax.xml.validation.SchemaFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.ls.LSResourceResolver;
+import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -64,6 +65,7 @@ public class RELAXNGSchemaFactory
{
LSResourceResolver resourceResolver;
+ ErrorHandler errorHandler;
public LSResourceResolver getResourceResolver()
{
@@ -73,6 +75,16 @@ public class RELAXNGSchemaFactory
public void setResourceResolver(LSResourceResolver resourceResolver)
{
this.resourceResolver = resourceResolver;
+ }
+
+ public ErrorHandler getErrorHandler()
+ {
+ return this.errorHandler;
+ }
+
+ public void setErrorHandler(ErrorHandler errorHandler)
+ {
+ this.errorHandler = errorHandler;
}
public boolean isSchemaLanguageSupported(String schemaLanguage)
diff --git a/libjava/classpath/gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java b/libjava/classpath/gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java
index b37ae54..2b985a2 100644
--- a/libjava/classpath/gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java
+++ b/libjava/classpath/gnu/xml/validation/xmlschema/XMLSchemaSchemaFactory.java
@@ -52,6 +52,7 @@ import org.relaxng.datatype.DatatypeException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.ls.LSResourceResolver;
+import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -65,6 +66,7 @@ public class XMLSchemaSchemaFactory
{
LSResourceResolver resourceResolver;
+ ErrorHandler errorHandler;
public LSResourceResolver getResourceResolver()
{
@@ -75,6 +77,17 @@ public class XMLSchemaSchemaFactory
{
this.resourceResolver = resourceResolver;
}
+
+ public ErrorHandler getErrorHandler()
+ {
+ return this.errorHandler;
+ }
+
+ public void setErrorHandler(ErrorHandler errorHandler)
+ {
+ this.errorHandler = errorHandler;
+ }
+
public boolean isSchemaLanguageSupported(String schemaLanguage)
{
diff --git a/libjava/classpath/include/Makefile.am b/libjava/classpath/include/Makefile.am
index 6672b23..c039756 100644
--- a/libjava/classpath/include/Makefile.am
+++ b/libjava/classpath/include/Makefile.am
@@ -118,8 +118,9 @@ $(SOUND_H_FILES) \
$(XMLJ_H_FILES) \
$(GTKPEER_H_FILES) \
$(QTPEER_H_FILES) \
-$(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h \
-$(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_VMPlainDatagramSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_VMPlainSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_local_LocalSocketImpl.h \
$(top_srcdir)/include/gnu_java_nio_VMPipe.h \
$(top_srcdir)/include/gnu_java_nio_VMSelector.h \
$(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h \
@@ -133,7 +134,7 @@ $(top_srcdir)/include/java_lang_VMFloat.h \
$(top_srcdir)/include/java_lang_VMMath.h \
$(top_srcdir)/include/java_lang_VMProcess.h \
$(top_srcdir)/include/java_lang_VMSystem.h \
-$(top_srcdir)/include/java_lang_reflect_Array.h \
+$(top_srcdir)/include/java_lang_reflect_VMArray.h \
$(top_srcdir)/include/java_net_VMInetAddress.h \
$(top_srcdir)/include/java_net_VMNetworkInterface.h \
$(top_srcdir)/include/java_nio_VMDirectByteBuffer.h \
@@ -165,10 +166,12 @@ $(top_srcdir)/include/gnu_javax_sound_midi_alsa_%.h: $(top_builddir)/$(CLASSDIR)
$(top_srcdir)/include/gnu_javax_sound_midi_dssi_%.h: $(top_builddir)/$(CLASSDIR)/gnu/javax/sound/midi/dssi/%.class
$(JAVAH) -o $@ gnu.javax.sound.midi.dssi.$*
-$(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainDatagramSocketImpl.java
- $(JAVAH) -o $@ gnu.java.net.PlainDatagramSocketImpl
-$(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainSocketImpl.java
- $(JAVAH) -o $@ gnu.java.net.PlainSocketImpl
+$(top_srcdir)/include/gnu_java_net_VMPlainDatagramSocketImpl.h: $(top_srcdir)/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java
+ $(JAVAH) -o $@ gnu.java.net.VMPlainDatagramSocketImpl
+$(top_srcdir)/include/gnu_java_net_VMPlainSocketImpl.h: $(top_srcdir)/vm/reference/gnu/java/net/VMPlainSocketImpl.java
+ $(JAVAH) -o $@ gnu.java.net.VMPlainSocketImpl
+$(top_srcdir)/include/gnu_java_net_local_LocalSocketImpl.h: $(top_srcdir)/gnu/java/net/local/LocalSocketImpl.java
+ $(JAVAH) -o $@ gnu.java.net.local.LocalSocketImpl
$(top_srcdir)/include/gnu_java_nio_VMPipe.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMPipe.java
$(JAVAH) -o $@ gnu.java.nio.VMPipe
$(top_srcdir)/include/gnu_java_nio_VMSelector.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMSelector.java
@@ -189,8 +192,8 @@ $(top_srcdir)/include/java_lang_VMProcess.h: $(top_srcdir)/vm/reference/java/lan
$(JAVAH) -o $@ java.lang.VMProcess
$(top_srcdir)/include/java_lang_VMSystem.h: $(top_srcdir)/vm/reference/java/lang/VMSystem.java
$(JAVAH) -o $@ java.lang.VMSystem
-$(top_srcdir)/include/java_lang_reflect_Array.h: $(top_srcdir)/java/lang/reflect/Array.java
- $(JAVAH) -o $@ java.lang.reflect.Array
+$(top_srcdir)/include/java_lang_reflect_VMArray.h: $(top_srcdir)/vm/reference/java/lang/reflect/VMArray.java
+ $(JAVAH) -o $@ java.lang.reflect.VMArray
$(top_srcdir)/include/java_net_VMInetAddress.h: $(top_srcdir)/vm/reference/java/net/VMInetAddress.java
$(JAVAH) -o $@ java.net.VMInetAddress
$(top_srcdir)/include/java_net_VMNetworkInterface.h: $(top_srcdir)/vm/reference/java/net/VMNetworkInterface.java
diff --git a/libjava/classpath/include/Makefile.in b/libjava/classpath/include/Makefile.in
index f53b519..15cf966 100644
--- a/libjava/classpath/include/Makefile.in
+++ b/libjava/classpath/include/Makefile.in
@@ -70,6 +70,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -109,6 +110,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -129,6 +132,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -176,6 +180,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -194,8 +199,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -207,8 +215,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -225,7 +231,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -233,18 +242,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -369,8 +382,9 @@ $(SOUND_H_FILES) \
$(XMLJ_H_FILES) \
$(GTKPEER_H_FILES) \
$(QTPEER_H_FILES) \
-$(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h \
-$(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_VMPlainDatagramSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_VMPlainSocketImpl.h \
+$(top_srcdir)/include/gnu_java_net_local_LocalSocketImpl.h \
$(top_srcdir)/include/gnu_java_nio_VMPipe.h \
$(top_srcdir)/include/gnu_java_nio_VMSelector.h \
$(top_srcdir)/include/gnu_java_nio_channels_FileChannelImpl.h \
@@ -384,7 +398,7 @@ $(top_srcdir)/include/java_lang_VMFloat.h \
$(top_srcdir)/include/java_lang_VMMath.h \
$(top_srcdir)/include/java_lang_VMProcess.h \
$(top_srcdir)/include/java_lang_VMSystem.h \
-$(top_srcdir)/include/java_lang_reflect_Array.h \
+$(top_srcdir)/include/java_lang_reflect_VMArray.h \
$(top_srcdir)/include/java_net_VMInetAddress.h \
$(top_srcdir)/include/java_net_VMNetworkInterface.h \
$(top_srcdir)/include/java_nio_VMDirectByteBuffer.h \
@@ -596,10 +610,12 @@ uninstall-am: uninstall-info-am
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_javax_sound_midi_dssi_%.h: $(top_builddir)/$(CLASSDIR)/gnu/javax/sound/midi/dssi/%.class
@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.javax.sound.midi.dssi.$*
-@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_PlainDatagramSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainDatagramSocketImpl.java
-@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.net.PlainDatagramSocketImpl
-@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_PlainSocketImpl.h: $(top_srcdir)/gnu/java/net/PlainSocketImpl.java
-@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.net.PlainSocketImpl
+@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_VMPlainDatagramSocketImpl.h: $(top_srcdir)/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java
+@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.net.VMPlainDatagramSocketImpl
+@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_VMPlainSocketImpl.h: $(top_srcdir)/vm/reference/gnu/java/net/VMPlainSocketImpl.java
+@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.net.VMPlainSocketImpl
+@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_net_local_LocalSocketImpl.h: $(top_srcdir)/gnu/java/net/local/LocalSocketImpl.java
+@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.net.local.LocalSocketImpl
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_VMPipe.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMPipe.java
@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ gnu.java.nio.VMPipe
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/gnu_java_nio_VMSelector.h: $(top_srcdir)/vm/reference/gnu/java/nio/VMSelector.java
@@ -620,8 +636,8 @@ uninstall-am: uninstall-info-am
@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ java.lang.VMProcess
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_VMSystem.h: $(top_srcdir)/vm/reference/java/lang/VMSystem.java
@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ java.lang.VMSystem
-@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_reflect_Array.h: $(top_srcdir)/java/lang/reflect/Array.java
-@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ java.lang.reflect.Array
+@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_lang_reflect_VMArray.h: $(top_srcdir)/vm/reference/java/lang/reflect/VMArray.java
+@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ java.lang.reflect.VMArray
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_net_VMInetAddress.h: $(top_srcdir)/vm/reference/java/net/VMInetAddress.java
@CREATE_JNI_HEADERS_TRUE@ $(JAVAH) -o $@ java.net.VMInetAddress
@CREATE_JNI_HEADERS_TRUE@$(top_srcdir)/include/java_net_VMNetworkInterface.h: $(top_srcdir)/vm/reference/java/net/VMNetworkInterface.java
diff --git a/libjava/classpath/include/config-int.h b/libjava/classpath/include/config-int.h
new file mode 100644
index 0000000..ea7024f
--- /dev/null
+++ b/libjava/classpath/include/config-int.h
@@ -0,0 +1,9 @@
+#ifndef _CLASSPATH_INCLUDE_CONFIG_INT_H
+#define _CLASSPATH_INCLUDE_CONFIG_INT_H 1
+#ifndef _GENERATED_STDINT_H
+#define _GENERATED_STDINT_H "classpath 0.91"
+/* generated using gnu compiler gcc (GCC) 4.0.4 20060507 (prerelease) (Debian 4.0.3-3) */
+#define _STDINT_HAVE_STDINT_H 1
+#include <stdint.h>
+#endif
+#endif
diff --git a/libjava/classpath/include/config.h.in b/libjava/classpath/include/config.h.in
index 388ee49..a4b5636 100644
--- a/libjava/classpath/include/config.h.in
+++ b/libjava/classpath/include/config.h.in
@@ -6,6 +6,9 @@
/* Define to 1 if you want native library runtime debugging code enabled */
#undef DEBUG
+/* Define to enable support for local sockets. */
+#undef ENABLE_LOCAL_SOCKETS
+
/* defined if cairo support was built in */
#undef GTK_CAIRO
@@ -33,6 +36,10 @@
/* Define to 1 if you have the <crt_externs.h> header file. */
#undef HAVE_CRT_EXTERNS_H
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TZNAME
+
/* Define to 1 if you have the <dssi.h> header file. */
#undef HAVE_DSSI_H
@@ -87,9 +94,6 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
-/* Define to 1 if you have the `isnan' function. */
-#undef HAVE_ISNAN
-
/* Define to 1 if you have the `listen' function. */
#undef HAVE_LISTEN
@@ -147,6 +151,9 @@
/* Define to 1 if you have the `setsockopt' function. */
#undef HAVE_SETSOCKOPT
+/* Define to 1 if you have the `shutdown' function. */
+#undef HAVE_SHUTDOWN
+
/* Define to 1 if you have the `socket' function. */
#undef HAVE_SOCKET
@@ -256,19 +263,19 @@
otherwise */
#undef PORTABLE_NATIVE_SYNC
-/* The size of a `char', as computed by sizeof. */
+/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR
-/* The size of a `int', as computed by sizeof. */
+/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT
-/* The size of a `long', as computed by sizeof. */
+/* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG
-/* The size of a `short', as computed by sizeof. */
+/* The size of `short', as computed by sizeof. */
#undef SIZEOF_SHORT
-/* The size of a `void*', as computed by sizeof. */
+/* The size of `void*', as computed by sizeof. */
#undef SIZEOF_VOIDP
/* The number of bytes in type void * */
diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
index e774713..44ab687 100644
--- a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
+++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkCanvasPeer.h
@@ -11,6 +11,7 @@ extern "C"
#endif
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_realize (JNIEnv *env, jobject);
#ifdef __cplusplus
}
diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h
index 6c76ed8..d1b691e 100644
--- a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h
+++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkClipboard.h
@@ -11,7 +11,7 @@ extern "C"
#endif
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_advertiseContent (JNIEnv *env, jobject, jobjectArray, jboolean, jboolean, jboolean);
-JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env, jclass, jstring, jstring, jstring);
+JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env, jclass, jobject, jobject, jstring, jstring, jstring);
#ifdef __cplusplus
}
diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
index da86e23..207e08d 100644
--- a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
+++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
@@ -18,8 +18,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetD
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject, jintArray);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen (JNIEnv *env, jobject, jintArray);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen (JNIEnv *env, jobject, jintArray);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor (JNIEnv *env, jobject, jint);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked (JNIEnv *env, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor (JNIEnv *env, jobject, jint, jobject, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked (JNIEnv *env, jobject, jint, jobject, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetBackground (JNIEnv *env, jobject, jint, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground (JNIEnv *env, jobject, jint, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetSensitive (JNIEnv *env, jobject, jboolean);
diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h
index 576e036..6a29a43 100644
--- a/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h
+++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_GtkSelection.h
@@ -10,11 +10,11 @@ extern "C"
{
#endif
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestText (JNIEnv *env, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestBytes (JNIEnv *env, jobject, jstring);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestMimeTypes (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestText (JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestBytes (JNIEnv *env, jobject, jboolean, jstring);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkSelection_requestMimeTypes (JNIEnv *env, jobject, jboolean);
#ifdef __cplusplus
}
diff --git a/libjava/classpath/include/gnu_java_net_VMPlainDatagramSocketImpl.h b/libjava/classpath/include/gnu_java_net_VMPlainDatagramSocketImpl.h
index 616c753..2bd1f49 100644
--- a/libjava/classpath/include/gnu_java_net_VMPlainDatagramSocketImpl.h
+++ b/libjava/classpath/include/gnu_java_net_VMPlainDatagramSocketImpl.h
@@ -1,95 +1,30 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
+
+#ifndef __gnu_java_net_VMPlainDatagramSocketImpl__
+#define __gnu_java_net_VMPlainDatagramSocketImpl__
+
#include <jni.h>
-/* Header for class gnu_java_net_VMPlainDatagramSocketImpl */
-#ifndef _Included_gnu_java_net_VMPlainDatagramSocketImpl
-#define _Included_gnu_java_net_VMPlainDatagramSocketImpl
#ifdef __cplusplus
-extern "C" {
+extern "C"
+{
#endif
+
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_bind (JNIEnv *env, jclass, jobject, jint, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_create (JNIEnv *env, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_connect (JNIEnv *env, jclass, jobject, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeSendTo (JNIEnv *env, jclass, jobject, jobject, jint, jbyteArray, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive (JNIEnv *env, jclass, jobject, jbyteArray, jint, jint, jbyteArray, jintArray, jintArray);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_setOption (JNIEnv *env, jclass, jobject, jint, jobject);
+JNIEXPORT jobject JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_getOption (JNIEnv *env, jclass, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_close (JNIEnv *env, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_join (JNIEnv *env, jclass, jobject, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_leave (JNIEnv *env, jclass, jobject, jobject);
#undef gnu_java_net_VMPlainDatagramSocketImpl_IP_TTL
#define gnu_java_net_VMPlainDatagramSocketImpl_IP_TTL 7777L
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: bind
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;ILjava/net/InetAddress;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_bind
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: create
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_create
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: connect
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;Ljava/net/InetAddress;I)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_connect
- (JNIEnv *, jclass, jobject, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: nativeSendTo
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;Ljava/net/InetAddress;I[BII)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeSendTo
- (JNIEnv *, jclass, jobject, jobject, jint, jbyteArray, jint, jint);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: nativeReceive
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;[BII[B[I[I)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive
- (JNIEnv *, jclass, jobject, jbyteArray, jint, jint, jbyteArray, jintArray, jintArray);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: setOption
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;ILjava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_setOption
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: getOption
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;I)Ljava/lang/Object;
- */
-JNIEXPORT jobject JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_getOption
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: close
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_close
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: join
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;Ljava/net/InetAddress;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_join
- (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainDatagramSocketImpl
- * Method: leave
- * Signature: (Lgnu/java/net/PlainDatagramSocketImpl;Ljava/net/InetAddress;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainDatagramSocketImpl_leave
- (JNIEnv *, jclass, jobject, jobject);
#ifdef __cplusplus
}
#endif
-#endif
+
+#endif /* __gnu_java_net_VMPlainDatagramSocketImpl__ */
diff --git a/libjava/classpath/include/gnu_java_net_VMPlainSocketImpl.h b/libjava/classpath/include/gnu_java_net_VMPlainSocketImpl.h
index 1e22aef..f7616c2 100644
--- a/libjava/classpath/include/gnu_java_net_VMPlainSocketImpl.h
+++ b/libjava/classpath/include/gnu_java_net_VMPlainSocketImpl.h
@@ -1,117 +1,31 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
+
+#ifndef __gnu_java_net_VMPlainSocketImpl__
+#define __gnu_java_net_VMPlainSocketImpl__
+
#include <jni.h>
-/* Header for class gnu_java_net_VMPlainSocketImpl */
-#ifndef _Included_gnu_java_net_VMPlainSocketImpl
-#define _Included_gnu_java_net_VMPlainSocketImpl
#ifdef __cplusplus
-extern "C" {
+extern "C"
+{
#endif
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: setOption
- * Signature: (Lgnu/java/net/PlainSocketImpl;ILjava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_setOption
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: getOption
- * Signature: (Lgnu/java/net/PlainSocketImpl;I)Ljava/lang/Object;
- */
-JNIEXPORT jobject JNICALL Java_gnu_java_net_VMPlainSocketImpl_getOption
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: create
- * Signature: (Lgnu/java/net/PlainSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_create
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: connect
- * Signature: (Lgnu/java/net/PlainSocketImpl;Ljava/net/InetAddress;I)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_connect
- (JNIEnv *, jclass, jobject, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: bind
- * Signature: (Lgnu/java/net/PlainSocketImpl;Ljava/net/InetAddress;I)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_bind
- (JNIEnv *, jclass, jobject, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: listen
- * Signature: (Lgnu/java/net/PlainSocketImpl;I)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_listen
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: accept
- * Signature: (Lgnu/java/net/PlainSocketImpl;Ljava/net/SocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_accept
- (JNIEnv *, jclass, jobject, jobject);
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: available
- * Signature: (Lgnu/java/net/PlainSocketImpl;)I
- */
-JNIEXPORT jint JNICALL Java_gnu_java_net_VMPlainSocketImpl_available
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: close
- * Signature: (Lgnu/java/net/PlainSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_close
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: read
- * Signature: (Lgnu/java/net/PlainSocketImpl;[BII)I
- */
-JNIEXPORT jint JNICALL Java_gnu_java_net_VMPlainSocketImpl_read
- (JNIEnv *, jclass, jobject, jbyteArray, jint, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: write
- * Signature: (Lgnu/java/net/PlainSocketImpl;[BII)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_write
- (JNIEnv *, jclass, jobject, jbyteArray, jint, jint);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: shutdownInput
- * Signature: (Lgnu/java/net/PlainSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_shutdownInput
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: gnu_java_net_VMPlainSocketImpl
- * Method: shutdownOutput
- * Signature: (Lgnu/java/net/PlainSocketImpl;)V
- */
-JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_shutdownOutput
- (JNIEnv *, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_setOption (JNIEnv *env, jclass, jobject, jint, jobject);
+JNIEXPORT jobject JNICALL Java_gnu_java_net_VMPlainSocketImpl_getOption (JNIEnv *env, jclass, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_create (JNIEnv *env, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_connect (JNIEnv *env, jclass, jobject, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_bind (JNIEnv *env, jclass, jobject, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_listen (JNIEnv *env, jclass, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_accept (JNIEnv *env, jclass, jobject, jobject);
+JNIEXPORT jint JNICALL Java_gnu_java_net_VMPlainSocketImpl_available (JNIEnv *env, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_close (JNIEnv *env, jclass, jobject);
+JNIEXPORT jint JNICALL Java_gnu_java_net_VMPlainSocketImpl_read (JNIEnv *env, jclass, jobject, jbyteArray, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_write (JNIEnv *env, jclass, jobject, jbyteArray, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_shutdownInput (JNIEnv *env, jclass, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_VMPlainSocketImpl_shutdownOutput (JNIEnv *env, jclass, jobject);
#ifdef __cplusplus
}
#endif
-#endif
+
+#endif /* __gnu_java_net_VMPlainSocketImpl__ */
diff --git a/libjava/classpath/include/gnu_java_net_local_LocalSocketImpl.h b/libjava/classpath/include/gnu_java_net_local_LocalSocketImpl.h
new file mode 100644
index 0000000..3309053
--- /dev/null
+++ b/libjava/classpath/include/gnu_java_net_local_LocalSocketImpl.h
@@ -0,0 +1,31 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+
+#ifndef __gnu_java_net_local_LocalSocketImpl__
+#define __gnu_java_net_local_LocalSocketImpl__
+
+#include <jni.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_create (JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_listen (JNIEnv *env, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_accept (JNIEnv *env, jobject, jobject);
+JNIEXPORT jint JNICALL Java_gnu_java_net_local_LocalSocketImpl_available (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_close (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_sendUrgentData (JNIEnv *env, jobject, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_shutdownInput (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_shutdownOutput (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_unlink (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_localBind (JNIEnv *env, jobject, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_localConnect (JNIEnv *env, jobject, jobject);
+JNIEXPORT jint JNICALL Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject, jbyteArray, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_net_local_LocalSocketImpl_write (JNIEnv *env, jobject, jbyteArray, jint, jint);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __gnu_java_net_local_LocalSocketImpl__ */
diff --git a/libjava/classpath/include/java_lang_VMProcess.h b/libjava/classpath/include/java_lang_VMProcess.h
index 3029f0d..2261781 100644
--- a/libjava/classpath/include/java_lang_VMProcess.h
+++ b/libjava/classpath/include/java_lang_VMProcess.h
@@ -10,7 +10,7 @@ extern "C"
{
#endif
-JNIEXPORT void JNICALL Java_java_lang_VMProcess_nativeSpawn (JNIEnv *env, jobject, jobjectArray, jobjectArray, jobject);
+JNIEXPORT void JNICALL Java_java_lang_VMProcess_nativeSpawn (JNIEnv *env, jobject, jobjectArray, jobjectArray, jobject, jboolean);
JNIEXPORT jboolean JNICALL Java_java_lang_VMProcess_nativeReap (JNIEnv *env, jclass);
JNIEXPORT void JNICALL Java_java_lang_VMProcess_nativeKill (JNIEnv *env, jclass, jlong);
#undef java_lang_VMProcess_INITIAL
diff --git a/libjava/classpath/include/java_lang_VMSystem.h b/libjava/classpath/include/java_lang_VMSystem.h
index 4e085f8..11b89ba 100644
--- a/libjava/classpath/include/java_lang_VMSystem.h
+++ b/libjava/classpath/include/java_lang_VMSystem.h
@@ -16,6 +16,7 @@ JNIEXPORT void JNICALL Java_java_lang_VMSystem_setIn (JNIEnv *env, jclass, jobje
JNIEXPORT void JNICALL Java_java_lang_VMSystem_setOut (JNIEnv *env, jclass, jobject);
JNIEXPORT void JNICALL Java_java_lang_VMSystem_setErr (JNIEnv *env, jclass, jobject);
JNIEXPORT jlong JNICALL Java_java_lang_VMSystem_currentTimeMillis (JNIEnv *env, jclass);
+JNIEXPORT jobject JNICALL Java_java_lang_VMSystem_environ (JNIEnv *env, jclass);
JNIEXPORT jstring JNICALL Java_java_lang_VMSystem_getenv (JNIEnv *env, jclass, jstring);
#ifdef __cplusplus
diff --git a/libjava/classpath/include/java_lang_reflect_Array.h b/libjava/classpath/include/java_lang_reflect_Array.h
deleted file mode 100644
index 4f7156f..0000000
--- a/libjava/classpath/include/java_lang_reflect_Array.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-
-#ifndef __java_lang_reflect_Array__
-#define __java_lang_reflect_Array__
-
-#include <jni.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-JNIEXPORT jobject JNICALL Java_java_lang_reflect_Array_createObjectArray (JNIEnv *env, jclass, jclass, jint);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __java_lang_reflect_Array__ */
diff --git a/libjava/classpath/include/java_lang_reflect_VMArray.h b/libjava/classpath/include/java_lang_reflect_VMArray.h
new file mode 100644
index 0000000..a92b685
--- /dev/null
+++ b/libjava/classpath/include/java_lang_reflect_VMArray.h
@@ -0,0 +1,19 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+
+#ifndef __java_lang_reflect_VMArray__
+#define __java_lang_reflect_VMArray__
+
+#include <jni.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+JNIEXPORT jobject JNICALL Java_java_lang_reflect_VMArray_createObjectArray (JNIEnv *env, jclass, jclass, jint);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __java_lang_reflect_VMArray__ */
diff --git a/libjava/classpath/java/awt/AlphaComposite.java b/libjava/classpath/java/awt/AlphaComposite.java
index 435cfd0..92b9e09 100644
--- a/libjava/classpath/java/awt/AlphaComposite.java
+++ b/libjava/classpath/java/awt/AlphaComposite.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt;
+import gnu.java.awt.java2d.AlphaCompositeContext;
+
import java.awt.image.ColorModel;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -137,14 +139,25 @@ public final class AlphaComposite implements Composite
}
return a;
}
+
+ /**
+ * Creates a {@link CompositeContext} that can be used to perform
+ * compositing operations according to this AlphaComposite settings.
+ *
+ * @param srcColorModel the color model of the source raster
+ * @param dstColorModel the color model of the destination raster
+ * @param hints the rendering hints to use
+ *
+ * @return a {@link CompositeContext} that can be used to perform
+ * compositing operations according to this AlphaComposite settings
+ */
public CompositeContext createContext(ColorModel srcColorModel,
ColorModel dstColorModel,
RenderingHints hints)
{
- // XXX Implement. Sun uses undocumented implementation class
- // sun.java2d.SunCompositeContext.
- throw new Error("not implemented");
+ return new AlphaCompositeContext(this, srcColorModel, dstColorModel);
}
+
public float getAlpha()
{
return alpha;
diff --git a/libjava/classpath/java/awt/BasicStroke.java b/libjava/classpath/java/awt/BasicStroke.java
index 4eece75..bf111d0 100644
--- a/libjava/classpath/java/awt/BasicStroke.java
+++ b/libjava/classpath/java/awt/BasicStroke.java
@@ -38,6 +38,15 @@ exception statement from your version. */
package java.awt;
+import gnu.java.awt.java2d.CubicSegment;
+import gnu.java.awt.java2d.LineSegment;
+import gnu.java.awt.java2d.QuadSegment;
+import gnu.java.awt.java2d.Segment;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.PathIterator;
+import java.awt.geom.Point2D;
import java.util.Arrays;
/**
@@ -109,6 +118,8 @@ public class BasicStroke implements Stroke
/** The dash phase. */
private final float phase;
+ private Segment start, end;
+
/**
* Creates a new <code>BasicStroke</code> instance with the given attributes.
*
@@ -249,8 +260,12 @@ public class BasicStroke implements Stroke
*/
public Shape createStrokedShape(Shape s)
{
- // FIXME: Implement this
- throw new Error("not implemented");
+ PathIterator pi = s.getPathIterator( new AffineTransform() );
+
+ if( dash == null )
+ return solidStroke( pi );
+
+ return dashedStroke( pi );
}
/**
@@ -366,4 +381,355 @@ public class BasicStroke implements Stroke
return width == s.width && cap == s.cap && join == s.join
&& limit == s.limit && Arrays.equals(dash, s.dash) && phase == s.phase;
}
+
+ private Shape solidStroke(PathIterator pi)
+ {
+ double[] coords = new double[6];
+ double x, y, x0, y0;
+ boolean pathOpen = false;
+ GeneralPath output = new GeneralPath( );
+ Segment[] p;
+ x = x0 = y = y0 = 0;
+
+ while( !pi.isDone() )
+ {
+ switch( pi.currentSegment(coords) )
+ {
+ case PathIterator.SEG_MOVETO:
+ x0 = x = coords[0];
+ y0 = y = coords[1];
+ if( pathOpen )
+ {
+ capEnds();
+ convertPath(output, start);
+ start = end = null;
+ pathOpen = false;
+ }
+ break;
+
+ case PathIterator.SEG_LINETO:
+ p = (new LineSegment(x, y, coords[0], coords[1])).
+ getDisplacedSegments(width/2.0);
+ if( !pathOpen )
+ {
+ start = p[0];
+ end = p[1];
+ pathOpen = true;
+ }
+ else
+ addSegments(p);
+
+ x = coords[0];
+ y = coords[1];
+ break;
+
+ case PathIterator.SEG_QUADTO:
+ p = (new QuadSegment(x, y, coords[0], coords[1], coords[2],
+ coords[3])).getDisplacedSegments(width/2.0);
+ if( !pathOpen )
+ {
+ start = p[0];
+ end = p[1];
+ pathOpen = true;
+ }
+ else
+ addSegments(p);
+
+ x = coords[0];
+ y = coords[1];
+ break;
+
+ case PathIterator.SEG_CUBICTO:
+ p = new CubicSegment(x, y, coords[0], coords[1],
+ coords[2], coords[3],
+ coords[4], coords[5]).getDisplacedSegments(width/2.0);
+ if( !pathOpen )
+ {
+ start = p[0];
+ end = p[1];
+ pathOpen = true;
+ }
+ else
+ addSegments(p);
+
+ x = coords[0];
+ y = coords[1];
+ break;
+
+ case PathIterator.SEG_CLOSE:
+ p = (new LineSegment(x, y, x0, y0)).getDisplacedSegments(width/2.0);
+ addSegments(p);
+ convertPath(output, start);
+ convertPath(output, end);
+ start = end = null;
+ pathOpen = false;
+ break;
+ }
+ pi.next();
+ }
+
+ if( pathOpen )
+ {
+ capEnds();
+ convertPath(output, start);
+ }
+ return output;
+ }
+
+ private Shape dashedStroke(PathIterator pi)
+ {
+ GeneralPath out = new GeneralPath();
+ return out;
+ }
+
+ /**
+ * Cap the ends of the path (joining the start and end list of segments)
+ */
+ private void capEnds()
+ {
+ Segment returnPath = end.last;
+
+ end.reverseAll(); // reverse the path.
+ end = null;
+ capEnd(start, returnPath);
+ start.last = returnPath.last;
+ end = null;
+
+ capEnd(start, start);
+ }
+
+ /**
+ * Convert and add the linked list of Segments in s to a GeneralPath p.
+ */
+ private void convertPath(GeneralPath p, Segment s)
+ {
+ Segment v = s;
+ p.moveTo((float)s.P1.getX(), (float)s.P1.getY());
+
+ do
+ {
+ if(v instanceof LineSegment)
+ p.lineTo((float)v.P2.getX(), (float)v.P2.getY());
+ else if(v instanceof QuadSegment)
+ p.quadTo((float)((QuadSegment)v).cp.getX(),
+ (float)((QuadSegment)v).cp.getY(),
+ (float)v.P2.getX(),
+ (float)v.P2.getY());
+ else if(v instanceof CubicSegment)
+ p.curveTo((float)((CubicSegment)v).cp1.getX(),
+ (float)((CubicSegment)v).cp1.getY(),
+ (float)((CubicSegment)v).cp2.getX(),
+ (float)((CubicSegment)v).cp2.getY(),
+ (float)v.P2.getX(),
+ (float)v.P2.getY());
+ v = v.next;
+ } while(v != s && v != null);
+
+ p.closePath();
+ }
+
+ /**
+ * Add to segments to start and end, joining the outer pair and
+ */
+ private void addSegments(Segment[] segments)
+ {
+ double[] p0 = start.last.last();
+ double[] p1 = new double[]{start.last.P2.getX(), start.last.P2.getY()};
+ double[] p2 = new double[]{segments[0].P1.getX(), segments[0].P1.getY()};
+ double[] p3 = segments[0].first();
+ Point2D p;
+
+ double det = (p1[0] - p0[0])*(p3[1] - p2[1]) -
+ (p3[0] - p2[0])*(p1[1] - p0[1]);
+
+ if( det > 0 )
+ {
+ // start and segment[0] form the 'inner' part of a join,
+ // connect the overlapping segments
+ p = lineIntersection(p0[0],p0[1],p1[0],p1[1],p2[0],p2[1],p3[0],p3[1], false);
+ if( p == null )
+ {
+ // Dodgy.
+ start.add(new LineSegment(start.last.P2, segments[0].P1));
+ p = new Point2D.Double((segments[0].P1.getX()+ start.last.P2.getX())/2.0,
+ (segments[0].P1.getY()+ start.last.P2.getY())/2.0);
+ }
+ else
+ segments[0].P1 = start.last.P2 = p;
+
+ start.add( segments[0] );
+ joinSegments(end, segments[1], p);
+ }
+ else
+ {
+ // end and segment[1] form the 'inner' part
+ p0 = end.last.last();
+ p1 = new double[]{end.last.P2.getX(), end.last.P2.getY()};
+ p2 = new double[]{segments[1].P1.getX(), segments[1].P1.getY()};
+ p3 = segments[1].first();
+
+ p = lineIntersection(p0[0],p0[1],p1[0],p1[1],
+ p2[0],p2[1],p3[0],p3[1], false);
+ if( p == null )
+ {
+ // Dodgy.
+ end.add(new LineSegment(end.last.P2, segments[1].P1));
+ p = new Point2D.Double((segments[1].P1.getX()+ end.last.P2.getX())/2.0,
+ (segments[1].P1.getY()+ end.last.P2.getY())/2.0);
+ }
+ else
+ segments[1].P1 = end.last.P2 = p;
+
+ end.add( segments[1] );
+ joinSegments(start, segments[0], p);
+ }
+ }
+
+ /**
+ * Make a cap between a and b segments,
+ * where a-->b is the direction of iteration.
+ */
+ private void capEnd(Segment a, Segment b)
+ {
+ double[] p0, p1;
+ double dx, dy, l;
+ Point2D c1,c2;
+
+ switch( cap )
+ {
+ case CAP_BUTT:
+ a.add(new LineSegment(a.last.P2, b.P1));
+ break;
+
+ case CAP_SQUARE:
+ p0 = a.last.last();
+ p1 = new double[]{a.last.P2.getX(), a.last.P2.getY()};
+ dx = p1[0] - p0[0];
+ dy = p1[1] - p0[1];
+ l = Math.sqrt(dx * dx + dy * dy);
+ dx = 0.5*width*dx/l;
+ dy = 0.5*width*dy/l;
+ c1 = new Point2D.Double(p1[0] + dx, p1[1] + dy);
+ c2 = new Point2D.Double(b.P1.getX() + dx, b.P1.getY() + dy);
+ a.add(new LineSegment(a.last.P2, c1));
+ a.add(new LineSegment(c1, c2));
+ a.add(new LineSegment(c2, b.P1));
+ break;
+
+ case CAP_ROUND:
+ p0 = a.last.last();
+ p1 = new double[]{a.last.P2.getX(), a.last.P2.getY()};
+ dx = p1[0] - p0[0];
+ dy = p1[1] - p0[1];
+ l = Math.sqrt(dx * dx + dy * dy);
+ dx = (2.0/3.0)*width*dx/l;
+ dy = (2.0/3.0)*width*dy/l;
+ c1 = new Point2D.Double(p1[0] + dx, p1[1] + dy);
+ c2 = new Point2D.Double(b.P1.getX() + dx, b.P1.getY() + dy);
+ a.add(new CubicSegment(a.last.P2, c1, c2, b.P1));
+ break;
+ }
+ a.add(b);
+ }
+
+ /**
+ * Returns the intersection of two lines, or null if there isn't one.
+ * @param infinite - true if the lines should be regarded as infinite, false
+ * if the intersection must be within the given segments.
+ * @return a Point2D or null.
+ */
+ private Point2D lineIntersection(double X1, double Y1,
+ double X2, double Y2,
+ double X3, double Y3,
+ double X4, double Y4,
+ boolean infinite)
+ {
+ double x1 = X1;
+ double y1 = Y1;
+ double rx = X2 - x1;
+ double ry = Y2 - y1;
+
+ double x2 = X3;
+ double y2 = Y3;
+ double sx = X4 - x2;
+ double sy = Y4 - y2;
+
+ double determinant = sx * ry - sy * rx;
+ double nom = (sx * (y2 - y1) + sy * (x1 - x2));
+
+ // lines can be considered parallel.
+ if (Math.abs(determinant) < 1E-6)
+ return null;
+
+ nom = nom / determinant;
+
+ // check if lines are within the bounds
+ if(!infinite && (nom > 1.0 || nom < 0.0))
+ return null;
+
+ return new Point2D.Double(x1 + nom * rx, y1 + nom * ry);
+ }
+
+ /**
+ * Join a and b segments, where a-->b is the direction of iteration.
+ *
+ * insideP is the inside intersection point of the join, needed for
+ * calculating miter lengths.
+ */
+ private void joinSegments(Segment a, Segment b, Point2D insideP)
+ {
+ double[] p0, p1;
+ double dx, dy, l;
+ Point2D c1,c2;
+
+ switch( join )
+ {
+ case JOIN_MITER:
+ p0 = a.last.last();
+ p1 = new double[]{a.last.P2.getX(), a.last.P2.getY()};
+ double[] p2 = new double[]{b.P1.getX(), b.P1.getY()};
+ double[] p3 = b.first();
+ Point2D p = lineIntersection(p0[0],p0[1],p1[0],p1[1],p2[0],p2[1],p3[0],p3[1], true);
+ if( p == null || insideP == null )
+ a.add(new LineSegment(a.last.P2, b.P1));
+ else if((p.distance(insideP)/width) < limit)
+ {
+ a.add(new LineSegment(a.last.P2, p));
+ a.add(new LineSegment(p, b.P1));
+ }
+ else
+ {
+ // outside miter limit, do a bevel join.
+ a.add(new LineSegment(a.last.P2, b.P1));
+ }
+ break;
+
+ case JOIN_ROUND:
+ p0 = a.last.last();
+ p1 = new double[]{a.last.P2.getX(), a.last.P2.getY()};
+ dx = p1[0] - p0[0];
+ dy = p1[1] - p0[1];
+ l = Math.sqrt(dx * dx + dy * dy);
+ dx = 0.5*width*dx/l;
+ dy = 0.5*width*dy/l;
+ c1 = new Point2D.Double(p1[0] + dx, p1[1] + dy);
+
+ p0 = new double[]{b.P1.getX(), b.P1.getY()};
+ p1 = b.first();
+
+ dx = p0[0] - p1[0]; // backwards direction.
+ dy = p0[1] - p1[1];
+ l = Math.sqrt(dx * dx + dy * dy);
+ dx = 0.5*width*dx/l;
+ dy = 0.5*width*dy/l;
+ c2 = new Point2D.Double(p0[0] + dx, p0[1] + dy);
+ a.add(new CubicSegment(a.last.P2, c1, c2, b.P1));
+ break;
+
+ case JOIN_BEVEL:
+ a.add(new LineSegment(a.last.P2, b.P1));
+ break;
+ }
+ a.add(b);
+ }
}
diff --git a/libjava/classpath/java/awt/Button.java b/libjava/classpath/java/awt/Button.java
index e788d82..ae897a2 100644
--- a/libjava/classpath/java/awt/Button.java
+++ b/libjava/classpath/java/awt/Button.java
@@ -98,7 +98,7 @@ private transient ActionListener action_listeners;
protected class AccessibleAWTButton extends AccessibleAWTComponent
implements AccessibleAction, AccessibleValue
{
- public static final long serialVersionUID = -5932203980244017102L;
+ private static final long serialVersionUID = -5932203980244017102L;
protected AccessibleAWTButton()
{
diff --git a/libjava/classpath/java/awt/Choice.java b/libjava/classpath/java/awt/Choice.java
index 2e55d19..90a8d31 100644
--- a/libjava/classpath/java/awt/Choice.java
+++ b/libjava/classpath/java/awt/Choice.java
@@ -556,6 +556,17 @@ processEvent(AWTEvent event)
super.processEvent(event);
}
+void
+dispatchEventImpl(AWTEvent e)
+{
+ if (e.id <= ItemEvent.ITEM_LAST
+ && e.id >= ItemEvent.ITEM_FIRST
+ && (item_listeners != null || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+ processEvent(e);
+ else
+ super.dispatchEventImpl(e);
+}
+
/*************************************************************************/
/**
diff --git a/libjava/classpath/java/awt/Component.java b/libjava/classpath/java/awt/Component.java
index de01fc1..dbbec8a 100644
--- a/libjava/classpath/java/awt/Component.java
+++ b/libjava/classpath/java/awt/Component.java
@@ -906,7 +906,7 @@ public abstract class Component
// The JDK repaints the component before invalidating the parent.
// So do we.
- if (isShowing())
+ if (isShowing() && isLightweight())
repaint();
// Invalidate the parent if we have one. The component itself must
// not be invalidated. We also avoid NullPointerException with
@@ -1075,8 +1075,6 @@ public abstract class Component
Component p = parent;
if (p != null)
return p.getFont();
- if (peer != null)
- return peer.getGraphics().getFont();
return null;
}
@@ -2315,6 +2313,10 @@ public abstract class Component
if (oldEvent != null)
postEvent (oldEvent);
+ // Give toolkit a chance to dispatch the event
+ // to globally registered listeners.
+ Toolkit.getDefaultToolkit().globalDispatchEvent(e);
+
// Some subclasses in the AWT package need to override this behavior,
// hence the use of dispatchEventImpl().
dispatchEventImpl(e);
@@ -3089,6 +3091,8 @@ public abstract class Component
mouseListener.mouseClicked(e);
break;
case MouseEvent.MOUSE_ENTERED:
+ if( isLightweight() )
+ setCursor( getCursor() );
mouseListener.mouseEntered(e);
break;
case MouseEvent.MOUSE_EXITED:
@@ -3101,7 +3105,6 @@ public abstract class Component
mouseListener.mouseReleased(e);
break;
}
- e.consume();
}
/**
@@ -4079,14 +4082,9 @@ public abstract class Component
*/
public Container getFocusCycleRootAncestor ()
{
- if (this instanceof Window
- && ((Container) this).isFocusCycleRoot ())
- return (Container) this;
-
Container parent = getParent ();
- while (parent != null
- && !parent.isFocusCycleRoot ())
+ while (parent != null && !parent.isFocusCycleRoot())
parent = parent.getParent ();
return parent;
@@ -4114,9 +4112,32 @@ public abstract class Component
*/
public void nextFocus ()
{
- KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ // Find the nearest valid (== showing && focusable && enabled) focus
+ // cycle root ancestor and the focused component in it.
+ Container focusRoot = getFocusCycleRootAncestor();
+ Component focusComp = this;
+ while (focusRoot != null
+ && ! (focusRoot.isShowing() && focusRoot.isFocusable()
+ && focusRoot.isEnabled()))
+ {
+ focusComp = focusRoot;
+ focusRoot = focusComp.getFocusCycleRootAncestor();
+ }
+
+ if (focusRoot != null)
+ {
+ // First try to get the componentBefore from the policy.
+ FocusTraversalPolicy policy = focusRoot.getFocusTraversalPolicy();
+ Component nextFocus = policy.getComponentAfter(focusRoot, focusComp);
+
+ // If this fails, then ask for the defaultComponent.
+ if (nextFocus == null)
+ nextFocus = policy.getDefaultComponent(focusRoot);
- manager.focusNextComponent (this);
+ // Request focus on this component, if not null.
+ if (nextFocus != null)
+ nextFocus.requestFocus();
+ }
}
/**
@@ -4128,9 +4149,32 @@ public abstract class Component
*/
public void transferFocusBackward ()
{
- KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ // Find the nearest valid (== showing && focusable && enabled) focus
+ // cycle root ancestor and the focused component in it.
+ Container focusRoot = getFocusCycleRootAncestor();
+ Component focusComp = this;
+ while (focusRoot != null
+ && ! (focusRoot.isShowing() && focusRoot.isFocusable()
+ && focusRoot.isEnabled()))
+ {
+ focusComp = focusRoot;
+ focusRoot = focusComp.getFocusCycleRootAncestor();
+ }
+
+ if (focusRoot != null)
+ {
+ // First try to get the componentBefore from the policy.
+ FocusTraversalPolicy policy = focusRoot.getFocusTraversalPolicy();
+ Component nextFocus = policy.getComponentBefore(focusRoot, focusComp);
+
+ // If this fails, then ask for the defaultComponent.
+ if (nextFocus == null)
+ nextFocus = policy.getDefaultComponent(focusRoot);
- manager.focusPreviousComponent (this);
+ // Request focus on this component, if not null.
+ if (nextFocus != null)
+ nextFocus.requestFocus();
+ }
}
/**
@@ -4144,9 +4188,63 @@ public abstract class Component
*/
public void transferFocusUpCycle ()
{
- KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ // Find the nearest focus cycle root ancestor that is itself
+ // focusable, showing and enabled.
+ Container focusCycleRoot = getFocusCycleRootAncestor();
+ while (focusCycleRoot != null &&
+ ! (focusCycleRoot.isShowing() && focusCycleRoot.isFocusable()
+ && focusCycleRoot.isEnabled()))
+ {
+ focusCycleRoot = focusCycleRoot.getFocusCycleRootAncestor();
+ }
+
+ KeyboardFocusManager fm =
+ KeyboardFocusManager.getCurrentKeyboardFocusManager();
+
+ if (focusCycleRoot != null)
+ {
+ // If we found a focus cycle root, then we make this the new
+ // focused component, and make it's focus cycle root the new
+ // global focus cycle root. If the found root has no focus cycle
+ // root ancestor itself, then the component will be both the focused
+ // component and the new global focus cycle root.
+ Container focusCycleAncestor =
+ focusCycleRoot.getFocusCycleRootAncestor();
+ Container globalFocusCycleRoot;
+ if (focusCycleAncestor == null)
+ globalFocusCycleRoot = focusCycleRoot;
+ else
+ globalFocusCycleRoot = focusCycleAncestor;
+
+ fm.setGlobalCurrentFocusCycleRoot(globalFocusCycleRoot);
+ focusCycleRoot.requestFocus();
+ }
+ else
+ {
+ // If this component has no applicable focus cycle root, we try
+ // find the nearest window and set this as the new global focus cycle
+ // root and the default focus component of this window the new focused
+ // component.
+ Container cont;
+ if (this instanceof Container)
+ cont = (Container) this;
+ else
+ cont = getParent();
- manager.upFocusCycle (this);
+ while (cont != null && !(cont instanceof Window))
+ cont = cont.getParent();
+
+ if (cont != null)
+ {
+ FocusTraversalPolicy policy = cont.getFocusTraversalPolicy();
+ Component focusComp = policy.getDefaultComponent(cont);
+ if (focusComp != null)
+ {
+ fm.setGlobalCurrentFocusCycleRoot(cont);
+ focusComp.requestFocus();
+ }
+ }
+ }
}
/**
@@ -4876,7 +4974,7 @@ p * <li>the set of backward traversal keys
oldKey = Event.UP;
break;
default:
- oldKey = newKey;
+ oldKey = (int) ((KeyEvent) e).getKeyChar();
}
translated = new Event (target, when, oldID,
@@ -4922,10 +5020,6 @@ p * <li>the set of backward traversal keys
void dispatchEventImpl(AWTEvent e)
{
- // Give toolkit a chance to dispatch the event
- // to globally registered listeners.
- Toolkit.getDefaultToolkit().globalDispatchEvent(e);
-
// This boolean tells us not to process focus events when the focus
// opposite component is the same as the focus component.
boolean ignoreFocus =
@@ -4934,6 +5028,10 @@ p * <li>the set of backward traversal keys
if (eventTypeEnabled (e.id))
{
+ if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE
+ && !ignoreFocus)
+ processEvent(e);
+
// the trick we use to communicate between dispatch and redispatch
// is to have KeyboardFocusManager.redispatch synchronize on the
// object itself. we then do not redispatch to KeyboardFocusManager
@@ -4954,14 +5052,11 @@ p * <li>the set of backward traversal keys
.dispatchEvent(e))
return;
case MouseEvent.MOUSE_PRESSED:
- if (isLightweight())
- requestFocus();
+ if (isLightweight() && !e.isConsumed())
+ requestFocus();
break;
}
}
- if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE
- && !ignoreFocus)
- processEvent(e);
}
if (peer != null)
@@ -4978,6 +5073,15 @@ p * <li>the set of backward traversal keys
switch (type)
{
+ case HierarchyEvent.HIERARCHY_CHANGED:
+ return (hierarchyListener != null
+ || (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0);
+
+ case HierarchyEvent.ANCESTOR_MOVED:
+ case HierarchyEvent.ANCESTOR_RESIZED:
+ return (hierarchyBoundsListener != null
+ || (eventMask & AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) != 0);
+
case ComponentEvent.COMPONENT_HIDDEN:
case ComponentEvent.COMPONENT_MOVED:
case ComponentEvent.COMPONENT_RESIZED:
@@ -5002,6 +5106,9 @@ p * <li>the set of backward traversal keys
case MouseEvent.MOUSE_DRAGGED:
return (mouseMotionListener != null
|| (eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0);
+ case MouseEvent.MOUSE_WHEEL:
+ return (mouseWheelListener != null
+ || (eventMask & AWTEvent.MOUSE_WHEEL_EVENT_MASK) != 0);
case FocusEvent.FOCUS_GAINED:
case FocusEvent.FOCUS_LOST:
@@ -5289,7 +5396,7 @@ p * <li>the set of backward traversal keys
*/
public String getAccessibleName()
{
- return accessibleName == null ? getName() : accessibleName;
+ return accessibleName;
}
/**
@@ -5329,8 +5436,10 @@ p * <li>the set of backward traversal keys
s.add(AccessibleState.FOCUSABLE);
if (isFocusOwner())
s.add(AccessibleState.FOCUSED);
- if (isOpaque())
- s.add(AccessibleState.OPAQUE);
+ // Note: While the java.awt.Component has an 'opaque' property, it
+ // seems that it is not added to the accessible state set here, even
+ // if this property is true. However, it is handled for
+ // javax.swing.JComponent, so we add it there.
if (Component.this.isShowing())
s.add(AccessibleState.SHOWING);
if (Component.this.isVisible())
@@ -5614,7 +5723,7 @@ p * <li>the set of backward traversal keys
*/
public Point getLocation()
{
- return Component.this.isShowing() ? Component.this.getLocation() : null;
+ return Component.this.getLocation();
}
/**
@@ -5638,7 +5747,7 @@ p * <li>the set of backward traversal keys
*/
public Rectangle getBounds()
{
- return Component.this.isShowing() ? Component.this.getBounds() : null;
+ return Component.this.getBounds();
}
/**
@@ -5661,7 +5770,7 @@ p * <li>the set of backward traversal keys
*/
public Dimension getSize()
{
- return Component.this.isShowing() ? Component.this.getSize() : null;
+ return Component.this.getSize();
}
/**
diff --git a/libjava/classpath/java/awt/Container.java b/libjava/classpath/java/awt/Container.java
index 41892ca..2419a7b 100644
--- a/libjava/classpath/java/awt/Container.java
+++ b/libjava/classpath/java/awt/Container.java
@@ -388,10 +388,6 @@ public class Container extends Component
ContainerListener[] listeners = getContainerListeners();
for (int i = 0; i < listeners.length; i++)
listeners[i].componentAdded(ce);
-
- // Repaint this container.
- repaint(comp.getX(), comp.getY(), comp.getWidth(),
- comp.getHeight());
}
}
@@ -968,6 +964,13 @@ public class Container extends Component
* child component claims the point, the container itself is returned,
* unless the point does not exist within this container, in which
* case <code>null</code> is returned.
+ *
+ * When components overlap, the first component is returned. The component
+ * that is closest to (x, y), containing that location, is returned.
+ * Heavyweight components take precedence of lightweight components.
+ *
+ * This function does not ignore invisible components. If there is an invisible
+ * component at (x,y), it will be returned.
*
* @param x The X coordinate of the point.
* @param y The Y coordinate of the point.
@@ -987,7 +990,14 @@ public class Container extends Component
* child component claims the point, the container itself is returned,
* unless the point does not exist within this container, in which
* case <code>null</code> is returned.
- *
+ *
+ * When components overlap, the first component is returned. The component
+ * that is closest to (x, y), containing that location, is returned.
+ * Heavyweight components take precedence of lightweight components.
+ *
+ * This function does not ignore invisible components. If there is an invisible
+ * component at (x,y), it will be returned.
+ *
* @param x The x position of the point to return the component at.
* @param y The y position of the point to return the component at.
*
@@ -1002,17 +1012,28 @@ public class Container extends Component
{
if (!contains (x, y))
return null;
+
+ // First find the component closest to (x,y) that is a heavyweight.
for (int i = 0; i < ncomponents; ++i)
{
- // Ignore invisible children...
- if (!component[i].isVisible ())
- continue;
-
- int x2 = x - component[i].x;
- int y2 = y - component[i].y;
- if (component[i].contains (x2, y2))
- return component[i];
+ Component comp = component[i];
+ int x2 = x - comp.x;
+ int y2 = y - comp.y;
+ if (comp.contains (x2, y2) && !comp.isLightweight())
+ return comp;
}
+
+ // if a heavyweight component is not found, look for a lightweight
+ // closest to (x,y).
+ for (int i = 0; i < ncomponents; ++i)
+ {
+ Component comp = component[i];
+ int x2 = x - comp.x;
+ int y2 = y - comp.y;
+ if (comp.contains (x2, y2) && comp.isLightweight())
+ return comp;
+ }
+
return this;
}
}
@@ -1025,6 +1046,13 @@ public class Container extends Component
* unless the point does not exist within this container, in which
* case <code>null</code> is returned.
*
+ * The top-most child component is returned in the case where components overlap.
+ * This is determined by finding the component closest to (x,y) and contains
+ * that location. Heavyweight components take precedence of lightweight components.
+ *
+ * This function does not ignore invisible components. If there is an invisible
+ * component at (x,y), it will be returned.
+ *
* @param p The point to return the component at.
* @return The component containing the specified point, or <code>null</code>
* if there is no such point.
@@ -1034,6 +1062,22 @@ public class Container extends Component
return getComponentAt (p.x, p.y);
}
+ /**
+ * Locates the visible child component that contains the specified position.
+ * The top-most child component is returned in the case where there is overlap
+ * in the components. If the containing child component is a Container,
+ * this method will continue searching for the deepest nested child
+ * component. Components which are not visible are ignored during the search.
+ *
+ * findComponentAt differs from getComponentAt, because it recursively
+ * searches a Container's children.
+ *
+ * @param x - x coordinate
+ * @param y - y coordinate
+ * @return null if the component does not contain the position.
+ * If there is no child component at the requested point and the point is
+ * within the bounds of the container the container itself is returned.
+ */
public Component findComponentAt(int x, int y)
{
synchronized (getTreeLock ())
@@ -1067,53 +1111,20 @@ public class Container extends Component
}
/**
- * Finds the visible child component that contains the specified position.
- * The top-most child is returned in the case where there is overlap.
- * If the top-most child is transparent and has no MouseListeners attached,
- * we discard it and return the next top-most component containing the
- * specified position.
- * @param x the x coordinate
- * @param y the y coordinate
- * @return null if the <code>this</code> does not contain the position,
- * otherwise the top-most component (out of this container itself and
- * its descendants) meeting the criteria above.
+ * Locates the visible child component that contains the specified position.
+ * The top-most child component is returned in the case where there is overlap
+ * in the components. If the containing child component is a Container,
+ * this method will continue searching for the deepest nested child
+ * component. Components which are not visible are ignored during the search.
+ *
+ * findComponentAt differs from getComponentAt, because it recursively
+ * searches a Container's children.
+ *
+ * @param p - the component's location
+ * @return null if the component does not contain the position.
+ * If there is no child component at the requested point and the point is
+ * within the bounds of the container the container itself is returned.
*/
- Component findComponentForMouseEventAt(int x, int y)
- {
- synchronized (getTreeLock())
- {
- if (!contains(x, y))
- return null;
-
- for (int i = 0; i < ncomponents; ++i)
- {
- // Ignore invisible children...
- if (!component[i].isVisible())
- continue;
-
- int x2 = x - component[i].x;
- int y2 = y - component[i].y;
- // We don't do the contains() check right away because
- // findComponentAt would redundantly do it first thing.
- if (component[i] instanceof Container)
- {
- Container k = (Container) component[i];
- Component r = k.findComponentForMouseEventAt(x2, y2);
- if (r != null)
- return r;
- }
- else if (component[i].contains(x2, y2))
- return component[i];
- }
-
- //don't return transparent components with no MouseListeners
- if (getMouseListeners().length == 0
- && getMouseMotionListeners().length == 0)
- return null;
- return this;
- }
- }
-
public Component findComponentAt(Point p)
{
return findComponentAt(p.x, p.y);
@@ -1454,7 +1465,7 @@ public class Container extends Component
{
Container ancestor = getFocusCycleRootAncestor ();
- if (ancestor != this)
+ if (ancestor != this && ancestor != null)
return ancestor.getFocusTraversalPolicy ();
else
{
@@ -1524,9 +1535,16 @@ public class Container extends Component
*/
public void transferFocusDownCycle ()
{
- KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
-
- manager.downFocusCycle (this);
+ if (isFocusCycleRoot())
+ {
+ KeyboardFocusManager fm =
+ KeyboardFocusManager.getCurrentKeyboardFocusManager();
+ fm.setGlobalCurrentFocusCycleRoot(this);
+ FocusTraversalPolicy policy = getFocusTraversalPolicy();
+ Component defaultComponent = policy.getDefaultComponent(this);
+ if (defaultComponent != null)
+ defaultComponent.requestFocus();
+ }
}
/**
diff --git a/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java b/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java
index 46b56d3..a5cb7da 100644
--- a/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java
+++ b/libjava/classpath/java/awt/DefaultFocusTraversalPolicy.java
@@ -61,6 +61,8 @@ package java.awt;
public class DefaultFocusTraversalPolicy
extends ContainerOrderFocusTraversalPolicy
{
+ private static final long serialVersionUID = 8876966522510157497L;
+
/**
* Construct a default focus traversal policy.
*/
diff --git a/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java b/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java
index bce6352..a60cefd 100644
--- a/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java
+++ b/libjava/classpath/java/awt/DefaultKeyboardFocusManager.java
@@ -478,59 +478,25 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
public void focusPreviousComponent (Component comp)
{
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
-
- Component previous = policy.getComponentBefore (focusCycleRoot, focusComp);
- if (previous != null)
- previous.requestFocusInWindow ();
+ if (comp != null)
+ comp.transferFocusBackward();
}
public void focusNextComponent (Component comp)
{
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
-
- Component next = policy.getComponentAfter (focusCycleRoot, focusComp);
- if (next != null)
- next.requestFocusInWindow ();
+ if (comp != null)
+ comp.transferFocus();
}
public void upFocusCycle (Component comp)
{
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
-
- if (focusCycleRoot instanceof Window)
- {
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
- Component defaultComponent = policy.getDefaultComponent (focusCycleRoot);
- if (defaultComponent != null)
- defaultComponent.requestFocusInWindow ();
- }
- else
- {
- Container parentFocusCycleRoot = focusCycleRoot.getFocusCycleRootAncestor ();
-
- focusCycleRoot.requestFocusInWindow ();
- setGlobalCurrentFocusCycleRoot (parentFocusCycleRoot);
- }
+ if (comp != null)
+ comp.transferFocusUpCycle();
}
public void downFocusCycle (Container cont)
{
- if (cont == null)
- return;
-
- if (cont.isFocusCycleRoot (cont))
- {
- FocusTraversalPolicy policy = cont.getFocusTraversalPolicy ();
- Component defaultComponent = policy.getDefaultComponent (cont);
- if (defaultComponent != null)
- defaultComponent.requestFocusInWindow ();
- setGlobalCurrentFocusCycleRoot (cont);
- }
+ if (cont != null)
+ cont.transferFocusDownCycle();
}
} // class DefaultKeyboardFocusManager
diff --git a/libjava/classpath/java/awt/Dialog.java b/libjava/classpath/java/awt/Dialog.java
index 7e5e721..55c3371 100644
--- a/libjava/classpath/java/awt/Dialog.java
+++ b/libjava/classpath/java/awt/Dialog.java
@@ -1,39 +1,40 @@
/* Dialog.java -- An AWT dialog box
- Copyright (C) 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+ Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
package java.awt;
@@ -46,457 +47,422 @@ import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
/**
- * A dialog box widget class.
- *
+ * <code>Dialog</code> provides a top-level window normally used to receive
+ * user input in applications.
+ * <p>
+ * A dialog always has another top-level window as owner and is only visible
+ * if this owner is visible to the user. The default layout of dialogs is the
+ * <code>BorderLayout</code>. Dialogs can be modal (blocks user input to other
+ * components) or non-modal (user input in other components are allowed).
+ * </p>
+ *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey (tromey@redhat.com)
*/
public class Dialog extends Window
{
+ // Serialization constant
+ private static final long serialVersionUID = 5920926903803293709L;
-/*
- * Static Variables
- */
-
-// Serialization constant
-private static final long serialVersionUID = 5920926903803293709L;
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * @serial Indicates whether or not this dialog box is modal.
- */
-private boolean modal;
-
-/**
- * @serial Indicates whether or not this dialog box is resizable.
- */
-private boolean resizable = true;
-
-/**
- * @serial The title string for this dialog box, which can be
- * <code>null</code>.
- */
-private String title;
-
-/**
- * This field indicates whether the dialog is undecorated or not.
- */
-private boolean undecorated = false;
-
-/**
- * Indicates that we are blocked for modality in show
- */
-private boolean blocked = false;
-
-/**
- * Secondary EventQueue to handle AWT events while
- * we are blocked for modality in show
- */
-private EventQueue eq2 = null;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified
- * parent, that is resizable and not modal, and which has no title.
- *
- * @param parent The parent frame of this dialog box.
- *
- * @exception IllegalArgumentException If the owner's GraphicsConfiguration
- * is not from a screen device, or if owner is null. This exception is always
- * thrown when GraphicsEnvironment.isHeadless() returns true.
- */
-public
-Dialog(Frame parent)
-{
- this(parent, "", false);
-}
-
-/*************************************************************************/
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified
- * parent and modality, that is resizable and which has no title.
- *
- * @param parent The parent frame of this dialog box.
- * @param modal <code>true</code> if this dialog box is modal,
- * <code>false</code> otherwise.
- *
- * @exception IllegalArgumentException If the owner's GraphicsConfiguration
- * is not from a screen device, or if owner is null. This exception is always
- * thrown when GraphicsEnvironment.isHeadless() returns true.
- */
-public
-Dialog(Frame parent, boolean modal)
-{
- this(parent, "", modal);
-}
-
-/*************************************************************************/
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified
- * parent, that is resizable and not modal, and which has the specified
- * title.
- *
- * @param parent The parent frame of this dialog box.
- * @param title The title string for this dialog box.
- *
- * @exception IllegalArgumentException If the owner's GraphicsConfiguration
- * is not from a screen device, or if owner is null. This exception is always
- * thrown when GraphicsEnvironment.isHeadless() returns true.
- */
-public
-Dialog(Frame parent, String title)
-{
- this(parent, title, false);
-}
-
-/*************************************************************************/
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, title, and modality, that is resizable.
- *
- * @param parent The parent frame of this dialog box.
- * @param title The title string for this dialog box.
- * @param modal <code>true</code> if this dialog box is modal,
- * <code>false</code> otherwise.
- *
- * @exception IllegalArgumentException If owner is null or
- * GraphicsEnvironment.isHeadless() returns true.
- */
-public
-Dialog(Frame parent, String title, boolean modal)
-{
- this (parent, title, modal, parent.getGraphicsConfiguration ());
-}
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, title, modality and <code>GraphicsConfiguration</code>,
- * that is resizable.
- *
- * @param parent The parent frame of this dialog box.
- * @param title The title string for this dialog box.
- * @param modal <code>true</code> if this dialog box is modal,
- * <code>false</code> otherwise.
- * @param gc The <code>GraphicsConfiguration</code> object to use.
- *
- * @exception IllegalArgumentException If owner is null, the
- * GraphicsConfiguration is not a screen device or
- * GraphicsEnvironment.isHeadless() returns true.
- *
- * @since 1.4
- */
-public
-Dialog (Frame parent, String title, boolean modal, GraphicsConfiguration gc)
-{
- super (parent, gc);
-
- // A null title is equivalent to an empty title
- this.title = (title != null) ? title : "";
- this.modal = modal;
- visible = false;
-
- setLayout(new BorderLayout());
-}
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, that is resizable.
- *
- * @exception IllegalArgumentException If parent is null. This exception is
- * always thrown when GraphicsEnvironment.isHeadless() returns true.
- *
- * @since 1.2
- */
-public
-Dialog (Dialog owner)
-{
- this (owner, "", false, owner.getGraphicsConfiguration ());
-}
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent and title, that is resizable.
- *
- * @exception IllegalArgumentException If parent is null. This exception is
- * always thrown when GraphicsEnvironment.isHeadless() returns true.
- *
- * @since 1.2
- */
-public
-Dialog (Dialog owner, String title)
-{
- this (owner, title, false, owner.getGraphicsConfiguration ());
-}
-
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, title and modality, that is resizable.
- *
- * @exception IllegalArgumentException If parent is null. This exception is
- * always thrown when GraphicsEnvironment.isHeadless() returns true.
- *
- * @since 1.2
- */
-public
-Dialog (Dialog owner, String title, boolean modal)
-{
- this (owner, title, modal, owner.getGraphicsConfiguration ());
-}
+ /**
+ * @serial Indicates whether or not this dialog box is modal.
+ */
+ private boolean modal;
-/**
- * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, title, modality and <code>GraphicsConfiguration</code>,
- * that is resizable.
- *
- * @exception IllegalArgumentException If parent is null, the
- * GraphicsConfiguration is not a screen device or
- * GraphicsEnvironment.isHeadless() returns true.
- *
- * @since 1.4
- */
-public
-Dialog (Dialog parent, String title, boolean modal, GraphicsConfiguration gc)
-{
- super (parent, parent.getGraphicsConfiguration ());
+ /**
+ * @serial Indicates whether or not this dialog box is resizable.
+ */
+ private boolean resizable = true;
- // A null title is equivalent to an empty title
- this.title = (title != null) ? title : "";
- this.modal = modal;
- visible = false;
+ /**
+ * @serial The title string for this dialog box, which can be
+ * <code>null</code>.
+ */
+ private String title;
- setLayout (new BorderLayout ());
-}
+ /**
+ * This field indicates whether the dialog is undecorated or not.
+ */
+ private boolean undecorated = false;
-/*************************************************************************/
+ /**
+ * Indicates that we are blocked for modality in show
+ */
+ private boolean blocked = false;
-/*
- * Instance Variables
- */
+ /**
+ * Secondary EventQueue to handle AWT events while we are blocked for
+ * modality in show.
+ */
+ private EventQueue eq2 = null;
-/**
- * Returns the title of this dialog box.
- *
- * @return The title of this dialog box.
- */
-public String
-getTitle()
-{
- return(title);
-}
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified
+ * parent, that is resizable and not modal, and which has no title.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+ * is not from a screen device, or if owner is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ */
+ public Dialog(Frame parent)
+ {
+ this(parent, "", false);
+ }
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified
+ * parent and modality, that is resizable and which has no title.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param modal <code>true</code> if this dialog box is modal,
+ * <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+ * is not from a screen device, or if owner is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ */
+ public Dialog(Frame parent, boolean modal)
+ {
+ this(parent, "", modal);
+ }
-/**
- * Sets the title of this dialog box to the specified string.
- *
- * @param title The new title.
- */
-public synchronized void
-setTitle(String title)
-{
- // A null title is equivalent to an empty title
- this.title = (title != null) ? title : "";
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified
+ * parent, that is resizable and not modal, and which has the specified
+ * title.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ *
+ * @exception IllegalArgumentException If the owner's GraphicsConfiguration
+ * is not from a screen device, or if owner is null. This exceptionnis
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ */
+ public Dialog(Frame parent, String title)
+ {
+ this(parent, title, false);
+ }
- if (peer != null)
- {
- DialogPeer d = (DialogPeer) peer;
- d.setTitle (title);
- }
-}
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title, and modality, that is resizable.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ * @param modal <code>true</code> if this dialog box is modal,
+ * <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException If owner is null or
+ * GraphicsEnvironment.isHeadless() returns true.
+ */
+ public Dialog(Frame parent, String title, boolean modal)
+ {
+ this(parent, title, modal, parent.getGraphicsConfiguration());
+ }
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title, modality and <code>GraphicsConfiguration</code>, that is
+ * resizable.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ * @param modal <code>true</code> if this dialog box is modal,
+ * <code>false</code> otherwise.
+ * @param gc The <code>GraphicsConfiguration</code> object to use. If
+ * <code>null</code> the <code>GraphicsConfiguration</code> of the target
+ * frame is used.
+ *
+ * @exception IllegalArgumentException If owner is null, the
+ * GraphicsConfiguration is not a screen device or
+ * GraphicsEnvironment.isHeadless() returns true.
+ * @since 1.4
+ */
+ public Dialog(Frame parent, String title, boolean modal,
+ GraphicsConfiguration gc)
+ {
+ super(parent, (gc == null) ? parent.getGraphicsConfiguration() : gc);
-/**
- * Tests whether or not this dialog box is modal.
- *
- * @return <code>true</code> if this dialog box is modal,
- * <code>false</code> otherwise.
- */
-public boolean
-isModal()
-{
- return(modal);
-}
+ // A null title is equivalent to an empty title
+ this.title = (title != null) ? title : "";
+ this.modal = modal;
+ visible = false;
-/*************************************************************************/
+ setLayout(new BorderLayout());
+ }
-/**
- * Changes the modality of this dialog box. This can only be done before
- * the peer is created.
- *
- * @param modal <code>true</code> to make this dialog box modal,
- * <code>false</code> to make it non-modal.
- */
-public void
-setModal(boolean modal)
-{
- this.modal = modal;
-}
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, that is resizable.
+ *
+ * @param owner The parent frame of this dialog box.
+ *
+ * @exception IllegalArgumentException If parent is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ *
+ * @since 1.2
+ */
+ public Dialog(Dialog owner)
+ {
+ this(owner, "", false, owner.getGraphicsConfiguration());
+ }
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent and title, that is resizable.
+ *
+ * @param owner The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ *
+ * @exception IllegalArgumentException If parent is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns
+ * true.
+ * @since 1.2
+ */
+ public Dialog(Dialog owner, String title)
+ {
+ this(owner, title, false, owner.getGraphicsConfiguration());
+ }
-/**
- * Tests whether or not this dialog box is resizable.
- *
- * @return <code>true</code> if this dialog is resizable, <code>false</code>,
- * otherwise.
- */
-public boolean
-isResizable()
-{
- return(resizable);
-}
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title and modality, that is resizable.
+ *
+ * @param owner The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ * @param modal <code>true</code> if this dialog box is modal,
+ * <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException If parent is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ * @since 1.2
+ */
+ public Dialog(Dialog owner, String title, boolean modal)
+ {
+ this(owner, title, modal, owner.getGraphicsConfiguration());
+ }
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title, modality and <code>GraphicsConfiguration</code>, that is
+ * resizable.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ * @param modal <code>true</code> if this dialog box is modal,
+ * <code>false</code> otherwise.
+ * @param gc The <code>GraphicsConfiguration</code> object to use. If
+ * <code>null</code> the <code>GraphicsConfiguration</code> of the target
+ * frame is used.
+ *
+ * @exception IllegalArgumentException If parent is null, the
+ * GraphicsConfiguration is not a screen device or
+ * GraphicsEnvironment.isHeadless() returns true.
+ *
+ * @since 1.4
+ */
+ public Dialog(Dialog parent, String title, boolean modal,
+ GraphicsConfiguration gc)
+ {
+ super(parent, (gc == null) ? parent.getGraphicsConfiguration() : gc);
-/**
- * Changes the resizability of this dialog box.
- *
- * @param resizable <code>true</code> to make this dialog resizable,
- * <code>false</code> to make it non-resizable.
- */
-public synchronized void
-setResizable(boolean resizable)
-{
- this.resizable = resizable;
- if (peer != null)
- {
- DialogPeer d = (DialogPeer) peer;
- d.setResizable (resizable);
- }
-}
+ // A null title is equivalent to an empty title
+ this.title = (title != null) ? title : "";
+ this.modal = modal;
+ visible = false;
-/*************************************************************************/
+ setLayout(new BorderLayout());
+ }
-/**
- * Creates this object's native peer.
- */
-public synchronized void
-addNotify()
-{
- if (peer == null)
- peer = getToolkit ().createDialog (this);
- super.addNotify ();
-}
+ /**
+ * Returns the title of this dialog box.
+ *
+ * @return The title of this dialog box.
+ */
+ public String getTitle()
+ {
+ return title;
+ }
-/*************************************************************************/
+ /**
+ * Sets the title of this dialog box to the specified string.
+ *
+ * @param title the new title. If <code>null</code> an empty
+ * title will be set.
+ */
+ public synchronized void setTitle(String title)
+ {
+ // A null title is equivalent to an empty title
+ this.title = (title != null) ? title : "";
+
+ if (peer != null)
+ {
+ DialogPeer d = (DialogPeer) peer;
+ d.setTitle(title);
+ }
+ }
-/**
- * Makes this dialog visible and brings it to the front.
- * If the dialog is modal and is not already visible, this call will not
- * return until the dialog is hidden by someone calling hide or dispose.
- * If this is the event dispatching thread we must ensure that another event
- * thread runs while the one which invoked this method is blocked.
- */
-public synchronized void
-show()
-{
- super.show();
-
- if (isModal())
- {
- // If already shown (and blocked) just return
- if (blocked)
- return;
-
- /* If show is called in the dispatch thread for a modal dialog it will
- block so we must run another thread so the events keep being
- dispatched.*/
- if (EventQueue.isDispatchThread ())
- {
- EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
- eq2 = new EventQueue ();
- eq.push (eq2);
- }
-
- try
- {
- blocked = true;
- wait ();
- blocked = false;
- }
- catch (InterruptedException e)
- {
- blocked = false;
- }
-
- if (eq2 != null)
- {
- eq2.pop ();
- eq2 = null;
- }
- }
-}
+ /**
+ * Tests whether or not this dialog box is modal.
+ *
+ * @return <code>true</code> if this dialog box is modal, <code>false</code>
+ * otherwise.
+ */
+ public boolean isModal()
+ {
+ return modal;
+ }
-/*************************************************************************/
+ /**
+ * Changes the modality of this dialog box. This can only be done before the
+ * peer is created.
+ *
+ * @param modal <code>true</code> to make this dialog box modal,
+ * <code>false</code> to make it non-modal.
+ */
+ public void setModal(boolean modal)
+ {
+ this.modal = modal;
+ }
-/**
- * Hides the Dialog and then
- * causes show() to return if it is currently blocked.
- */
+ /**
+ * Tests whether or not this dialog box is resizable.
+ *
+ * @return <code>true</code> if this dialog is resizable,
+ * <code>false</code> otherwise.
+ */
+ public boolean isResizable()
+ {
+ return resizable;
+ }
-public synchronized void
-hide ()
-{
- if (blocked)
- {
- notifyAll ();
- }
+ /**
+ * Changes the resizability of this dialog box.
+ *
+ * @param resizable <code>true</code> to make this dialog resizable,
+ * <code>false</code> to make it non-resizable.
+ */
+ public synchronized void setResizable(boolean resizable)
+ {
+ this.resizable = resizable;
+ if (peer != null)
+ {
+ DialogPeer d = (DialogPeer) peer;
+ d.setResizable(resizable);
+ }
+ }
- super.hide();
-}
+ /**
+ * Creates this object's native peer.
+ */
+ public synchronized void addNotify()
+ {
+ if (peer == null)
+ peer = getToolkit().createDialog(this);
+ super.addNotify();
+ }
-/*************************************************************************/
+ /**
+ * Makes this dialog visible and brings it to the front. If the dialog is
+ * modal and is not already visible, this call will not return until the
+ * dialog is hidden by someone calling hide or dispose. If this is the event
+ * dispatching thread we must ensure that another event thread runs while the
+ * one which invoked this method is blocked.
+ *
+ * @deprecated Use {@link Component#setVisible(boolean)} instead.
+ */
+ public synchronized void show()
+ {
+ super.show();
+
+ if (isModal())
+ {
+ // If already shown (and blocked) just return
+ if (blocked)
+ return;
+
+ /*
+ * If show is called in the dispatch thread for a modal dialog it will
+ * block so we must run another thread so the events keep being
+ * dispatched.
+ */
+ if (EventQueue.isDispatchThread())
+ {
+ EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ eq2 = new EventQueue();
+ eq.push(eq2);
+ }
+
+ try
+ {
+ blocked = true;
+ wait();
+ blocked = false;
+ }
+ catch (InterruptedException e)
+ {
+ blocked = false;
+ }
+
+ if (eq2 != null)
+ {
+ eq2.pop();
+ eq2 = null;
+ }
+ }
+ }
-/**
- * Disposes the Dialog and then causes show() to return
- * if it is currently blocked.
- */
+ /**
+ * Hides the Dialog and then causes show() to return if it is currently
+ * blocked.
+ *
+ * @deprecated Use {@link Component#setVisible(boolean)} instead.
+ */
+ public synchronized void hide()
+ {
+ if (blocked)
+ {
+ notifyAll();
+ }
-public synchronized void
-dispose ()
-{
- if (blocked)
- {
- notifyAll ();
- }
+ super.hide();
+ }
- super.dispose();
-}
+ /**
+ * Disposes the Dialog and then causes show() to return if it is currently
+ * blocked.
+ */
+ public synchronized void dispose()
+ {
+ if (blocked)
+ {
+ notifyAll();
+ }
-/*************************************************************************/
+ super.dispose();
+ }
-/**
- * Returns a debugging string for this component.
- *
- * @return A debugging string for this component.
- */
-protected String
-paramString()
-{
- return ("title+" + title + ",modal=" + modal +
- ",resizable=" + resizable + "," + super.paramString());
-}
+ /**
+ * Returns a debugging string for this component.
+ *
+ * @return A debugging string for this component.
+ */
+ protected String paramString()
+ {
+ return "title+" + title + ",modal=" + modal + ",resizable=" + resizable
+ + "," + super.paramString();
+ }
/**
* Returns whether this frame is undecorated or not.
*
+ * @return <code>true</code> if this dialog is undecorated,
+ * <code>false</code> otherwise.
+ *
* @since 1.4
*/
- public boolean isUndecorated ()
+ public boolean isUndecorated()
{
return undecorated;
}
@@ -505,28 +471,42 @@ paramString()
* Disables or enables decorations for this frame. This method can only be
* called while the frame is not displayable.
*
- * @exception IllegalComponentStateException If this frame is displayable.
+ * @param undecorated <code>true</code> to disable dialog decorations,
+ * <code>false</code> otherwise.
*
+ * @exception IllegalComponentStateException If this frame is displayable.
* @since 1.4
*/
- public void setUndecorated (boolean undecorated)
+ public void setUndecorated(boolean undecorated)
{
- if (isDisplayable ())
- throw new IllegalComponentStateException ();
+ if (isDisplayable())
+ throw new IllegalComponentStateException();
this.undecorated = undecorated;
}
-
- protected class AccessibleAWTDialog extends AccessibleAWTWindow
+
+ /**
+ * Accessibility support for <code>Dialog</code>.
+ */
+ protected class AccessibleAWTDialog
+ extends AccessibleAWTWindow
{
private static final long serialVersionUID = 4837230331833941201L;
+ /**
+ * Gets the role of this object.
+ * @return AccessibleRole.DIALOG
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.DIALOG;
}
-
- public AccessibleStateSet getAccessibleState()
+
+ /**
+ * Gets the state set of this object.
+ * @return The current state of this dialog.
+ */
+ public AccessibleStateSet getAccessibleStateSet()
{
AccessibleStateSet states = super.getAccessibleStateSet();
if (isResizable())
@@ -536,11 +516,11 @@ paramString()
return states;
}
}
-
+
/**
- * Gets the AccessibleContext associated with this <code>Dialog</code>.
- * The context is created, if necessary.
- *
+ * Gets the AccessibleContext associated with this <code>Dialog</code>. The
+ * context is created, if necessary.
+ *
* @return the associated context
*/
public AccessibleContext getAccessibleContext()
@@ -551,5 +531,4 @@ paramString()
return accessibleContext;
}
-} // class Dialog
-
+}
diff --git a/libjava/classpath/java/awt/Frame.java b/libjava/classpath/java/awt/Frame.java
index 7003dac..5420136 100644
--- a/libjava/classpath/java/awt/Frame.java
+++ b/libjava/classpath/java/awt/Frame.java
@@ -614,16 +614,27 @@ public class Frame extends Window implements MenuContainer
return next_frame_number++;
}
+ /**
+ * Accessibility support for <code>Frame</code>.
+ */
protected class AccessibleAWTFrame extends AccessibleAWTWindow
{
private static final long serialVersionUID = -6172960752956030250L;
+ /**
+ * Gets the role of this object.
+ * @return AccessibleRole.FRAME
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.FRAME;
}
- public AccessibleStateSet getAccessibleState()
+ /**
+ * Gets the state set of this object.
+ * @return The current state of this frame.
+ */
+ public AccessibleStateSet getAccessibleStateSet()
{
AccessibleStateSet states = super.getAccessibleStateSet();
if (isResizable())
diff --git a/libjava/classpath/java/awt/GraphicsConfiguration.java b/libjava/classpath/java/awt/GraphicsConfiguration.java
index 1526ad3..f68a1e6 100644
--- a/libjava/classpath/java/awt/GraphicsConfiguration.java
+++ b/libjava/classpath/java/awt/GraphicsConfiguration.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt;
+import gnu.classpath.NotImplementedException;
+
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
@@ -216,6 +218,7 @@ public abstract class GraphicsConfiguration
* @since 1.4
*/
public BufferCapabilities getBufferCapabilities()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
@@ -227,6 +230,7 @@ public abstract class GraphicsConfiguration
* @since 1.4
*/
public ImageCapabilities getImageCapabilities()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
diff --git a/libjava/classpath/java/awt/GridBagLayout.java b/libjava/classpath/java/awt/GridBagLayout.java
index 714e080..f827d21 100644
--- a/libjava/classpath/java/awt/GridBagLayout.java
+++ b/libjava/classpath/java/awt/GridBagLayout.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt;
+import gnu.classpath.NotImplementedException;
+
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
@@ -323,6 +325,7 @@ public class GridBagLayout
* Obsolete.
*/
protected void AdjustForGravity (GridBagConstraints gbc, Rectangle rect)
+ throws NotImplementedException
{
// FIXME
throw new Error ("Not implemented");
@@ -349,107 +352,121 @@ public class GridBagLayout
// be invalidated, clearing the layout information cache,
// layoutInfo. So we wait until after this for loop to set
// layoutInfo.
- for(int i = 0; i < components.length; i++)
- {
- Component component = components [i];
-
- // If component is not visible we dont have to care about it.
- if (!component.isVisible())
- continue;
-
- GridBagConstraints constraints =
- lookupInternalConstraints(component);
-
- int cellx = sumIntArray(info.colWidths, constraints.gridx);
- int celly = sumIntArray(info.rowHeights, constraints.gridy);
- int cellw = sumIntArray(info.colWidths,
- constraints.gridx + constraints.gridwidth) - cellx;
- int cellh = sumIntArray(info.rowHeights,
- constraints.gridy + constraints.gridheight) - celly;
-
- Insets insets = constraints.insets;
- if (insets != null)
- {
- cellx += insets.left;
- celly += insets.top;
- cellw -= insets.left + insets.right;
- cellh -= insets.top + insets.bottom;
- }
-
- Dimension dim = component.getPreferredSize();
-
- // Note: Documentation says that padding is added on both sides, but
- // visual inspection shows that the Sun implementation only adds it
- // once, so we do the same.
- dim.width += constraints.ipadx;
- dim.height += constraints.ipady;
-
- switch(constraints.fill)
- {
- case GridBagConstraints.HORIZONTAL:
- dim.width = cellw;
- break;
- case GridBagConstraints.VERTICAL:
- dim.height = cellh;
- break;
- case GridBagConstraints.BOTH:
- dim.width = cellw;
- dim.height = cellh;
- break;
- }
-
- int x;
- int y;
-
- switch(constraints.anchor)
- {
- case GridBagConstraints.NORTH:
- x = cellx + (cellw - dim.width) / 2;
- y = celly;
- break;
- case GridBagConstraints.SOUTH:
- x = cellx + (cellw - dim.width) / 2;
- y = celly + cellh - dim.height;
- break;
- case GridBagConstraints.WEST:
- x = cellx;
- y = celly + (cellh - dim.height) / 2;
- break;
- case GridBagConstraints.EAST:
- x = cellx + cellw - dim.width;
- y = celly + (cellh - dim.height) / 2;
- break;
- case GridBagConstraints.NORTHEAST:
- x = cellx + cellw - dim.width;
- y = celly;
- break;
- case GridBagConstraints.NORTHWEST:
- x = cellx;
- y = celly;
- break;
- case GridBagConstraints.SOUTHEAST:
- x = cellx + cellw - dim.width;
- y = celly + cellh - dim.height;
- break;
- case GridBagConstraints.SOUTHWEST:
- x = cellx;
- y = celly + cellh - dim.height;
- break;
- default:
- x = cellx + (cellw - dim.width) / 2;
- y = celly + (cellh - dim.height) / 2;
- break;
- }
-
- component.setBounds(info.pos_x + x, info.pos_y + y, dim.width, dim.height);
- }
-
- // DEBUG
- //dumpLayoutInfo (info);
-
- // Cache layout information.
- layoutInfo = getLayoutInfo (parent, PREFERREDSIZE);
- }
+ Component lastComp = null;
+ int cellx = 0;
+ int celly = 0;
+ int cellw = 0;
+ int cellh = 0;
+ for (int i = 0; i < components.length; i++)
+ {
+ Component component = components[i];
+
+ // If component is not visible we dont have to care about it.
+ if (! component.isVisible())
+ continue;
+
+ Dimension dim = component.getPreferredSize();
+ GridBagConstraints constraints = lookupInternalConstraints(component);
+
+ if (lastComp != null
+ && constraints.gridheight == GridBagConstraints.REMAINDER)
+ celly += cellh;
+ else
+ celly = sumIntArray(info.rowHeights, constraints.gridy);
+
+ if (lastComp != null
+ && constraints.gridwidth == GridBagConstraints.REMAINDER)
+ cellx += cellw;
+ else
+ cellx = sumIntArray(info.colWidths, constraints.gridx);
+
+ cellw = sumIntArray(info.colWidths, constraints.gridx
+ + constraints.gridwidth) - cellx;
+ cellh = sumIntArray(info.rowHeights, constraints.gridy
+ + constraints.gridheight) - celly;
+
+ Insets insets = constraints.insets;
+ if (insets != null)
+ {
+ cellx += insets.left;
+ celly += insets.top;
+ cellw -= insets.left + insets.right;
+ cellh -= insets.top + insets.bottom;
+ }
+
+ // Note: Documentation says that padding is added on both sides, but
+ // visual inspection shows that the Sun implementation only adds it
+ // once, so we do the same.
+ dim.width += constraints.ipadx;
+ dim.height += constraints.ipady;
+
+ switch (constraints.fill)
+ {
+ case GridBagConstraints.HORIZONTAL:
+ dim.width = cellw;
+ break;
+ case GridBagConstraints.VERTICAL:
+ dim.height = cellh;
+ break;
+ case GridBagConstraints.BOTH:
+ dim.width = cellw;
+ dim.height = cellh;
+ break;
+ }
+
+ int x = 0;
+ int y = 0;
+
+ switch (constraints.anchor)
+ {
+ case GridBagConstraints.NORTH:
+ x = cellx + (cellw - dim.width) / 2;
+ y = celly;
+ break;
+ case GridBagConstraints.SOUTH:
+ x = cellx + (cellw - dim.width) / 2;
+ y = celly + cellh - dim.height;
+ break;
+ case GridBagConstraints.WEST:
+ x = cellx;
+ y = celly + (cellh - dim.height) / 2;
+ break;
+ case GridBagConstraints.EAST:
+ x = cellx + cellw - dim.width;
+ y = celly + (cellh - dim.height) / 2;
+ break;
+ case GridBagConstraints.NORTHEAST:
+ x = cellx + cellw - dim.width;
+ y = celly;
+ break;
+ case GridBagConstraints.NORTHWEST:
+ x = cellx;
+ y = celly;
+ break;
+ case GridBagConstraints.SOUTHEAST:
+ x = cellx + cellw - dim.width;
+ y = celly + cellh - dim.height;
+ break;
+ case GridBagConstraints.SOUTHWEST:
+ x = cellx;
+ y = celly + cellh - dim.height;
+ break;
+ default:
+ x = cellx + (cellw - dim.width) / 2;
+ y = celly + (cellh - dim.height) / 2;
+ break;
+ }
+ component.setBounds(info.pos_x + x, info.pos_y + y, dim.width,
+ dim.height);
+ lastComp = component;
+ }
+
+ // DEBUG
+ //dumpLayoutInfo(info);
+
+ // Cache layout information.
+ layoutInfo = getLayoutInfo(parent, PREFERREDSIZE);
+ }
/**
* Obsolete.
@@ -485,11 +502,10 @@ public class GridBagLayout
for (int i = 0; i < components.length; i++)
{
Component component = components [i];
-
// If component is not visible we dont have to care about it.
if (!component.isVisible())
continue;
-
+
// When looking up the constraint for the first time, check the
// original unmodified constraint. After the first time, always
// refer to the internal modified constraint.
@@ -516,7 +532,6 @@ public class GridBagLayout
//
// nothing to check; just add it
-
// cases 1 and 2
if(constraints.gridx == GridBagConstraints.RELATIVE)
{
@@ -560,7 +575,9 @@ public class GridBagLayout
// this column. We want to add this component below it.
// If this column is empty, add to the 0 position.
if (!lastInCol.containsKey(new Integer(constraints.gridx)))
- y = 0;
+ {
+ y = current_y;
+ }
else
{
Component lastComponent = (Component)lastInCol.get(new Integer(constraints.gridx));
@@ -596,7 +613,7 @@ public class GridBagLayout
// Update our reference points for RELATIVE gridx and gridy.
if(constraints.gridwidth == GridBagConstraints.REMAINDER)
{
- current_y = constraints.gridy + Math.max(1, constraints.gridheight);
+ current_y = constraints.gridy + Math.max(1, constraints.gridheight);
}
else if (constraints.gridwidth != GridBagConstraints.REMAINDER)
{
@@ -788,7 +805,7 @@ public class GridBagLayout
height += constraints.insets.top + constraints.insets.bottom;
height += constraints.ipady;
-
+
distributeSizeAndWeight(height,
constraints.weighty,
constraints.gridy,
@@ -918,7 +935,7 @@ public class GridBagLayout
sizes[start] = Math.max(sizes[start], size);
weights[start] = Math.max(weights[start], weight);
}
- else if (span > 1)
+ else
{
int numOccupied = span;
int lastOccupied = -1;
diff --git a/libjava/classpath/java/awt/Image.java b/libjava/classpath/java/awt/Image.java
index 93c2c47..6ade302 100644
--- a/libjava/classpath/java/awt/Image.java
+++ b/libjava/classpath/java/awt/Image.java
@@ -166,6 +166,8 @@ public abstract class Image
* loading will be produced according to the hints of the algorithm
* requested. If either the width or height is non-positive, it is adjusted
* to preserve the original aspect ratio.
+ * If an illegal value of <code>flags</code> is passed,
+ * the default algorithm is used.
*
* @param width the width of the scaled image
* @param height the height of the scaled image
@@ -183,18 +185,15 @@ public abstract class Image
ImageFilter filter;
switch (flags)
{
- case SCALE_DEFAULT:
- case SCALE_FAST:
- case SCALE_REPLICATE:
- filter = new ReplicateScaleFilter(width, height);
- break;
case SCALE_AREA_AVERAGING:
+ case SCALE_SMOOTH:
filter = new AreaAveragingScaleFilter(width, height);
break;
- case SCALE_SMOOTH:
- throw new Error("SCALE_SMOOTH: not implemented");
+ case SCALE_DEFAULT:
+ case SCALE_FAST:
+ case SCALE_REPLICATE:
default:
- throw new Error("Unknown flag or not implemented: " + flags);
+ filter = new ReplicateScaleFilter(width, height);
}
ImageProducer producer = new FilteredImageSource(getSource(), filter);
diff --git a/libjava/classpath/java/awt/LightweightDispatcher.java b/libjava/classpath/java/awt/LightweightDispatcher.java
index 6573b12..8606464 100644
--- a/libjava/classpath/java/awt/LightweightDispatcher.java
+++ b/libjava/classpath/java/awt/LightweightDispatcher.java
@@ -110,14 +110,12 @@ class LightweightDispatcher
*/
public boolean dispatchEvent(AWTEvent event)
{
- boolean dispatched = false;
if (event instanceof MouseEvent && event.getSource() instanceof Window)
{
MouseEvent mouseEvent = (MouseEvent) event;
- handleMouseEvent(mouseEvent);
- dispatched = true;
+ return handleMouseEvent(mouseEvent);
}
- return dispatched;
+ return false;
}
/**
@@ -125,12 +123,14 @@ class LightweightDispatcher
* (Window instances) and dispatches them to the correct lightweight child.
*
* @param ev the mouse event
+ * @return whether or not we found a lightweight that handled the event.
*/
- private void handleMouseEvent(MouseEvent ev)
+ private boolean handleMouseEvent(MouseEvent ev)
{
Window window = (Window) ev.getSource();
Component target = window.findComponentAt(ev.getX(), ev.getY());
- if (target != null && target.isLightweight())
+ target = findTarget(target);
+ if (target == null || target.isLightweight())
{
// Dispatch additional MOUSE_EXITED and MOUSE_ENTERED if event target
// is different from the last event target.
@@ -146,13 +146,16 @@ class LightweightDispatcher
ev.getClickCount(), ev.isPopupTrigger());
lastTarget.dispatchEvent(mouseExited);
}
- Point p = AWTUtilities.convertPoint(window, ev.getX(), ev.getY(),
- target);
- MouseEvent mouseEntered =
- new MouseEvent(target, MouseEvent.MOUSE_ENTERED, ev.getWhen(),
- ev.getModifiers(), p.x, p.y, ev.getClickCount(),
- ev.isPopupTrigger());
- target.dispatchEvent(mouseEntered);
+ if (target != null)
+ {
+ Point p = AWTUtilities.convertPoint(window, ev.getX(), ev.getY(),
+ target);
+ MouseEvent mouseEntered =
+ new MouseEvent(target, MouseEvent.MOUSE_ENTERED, ev.getWhen(),
+ ev.getModifiers(), p.x, p.y, ev.getClickCount(),
+ ev.isPopupTrigger());
+ target.dispatchEvent(mouseEntered);
+ }
}
switch (ev.getID())
@@ -183,18 +186,43 @@ class LightweightDispatcher
lastTarget = target;
- Point targetCoordinates =
- AWTUtilities.convertPoint(window, ev.getX(), ev.getY(), target);
- int dx = targetCoordinates.x - ev.getX();
- int dy = targetCoordinates.y - ev.getY();
- ev.translatePoint(dx, dy);
- ev.setSource(target);
- target.dispatchEvent(ev);
-
- // We reset the event, so that the normal event dispatching is not
- // influenced by this modified event.
- ev.setSource(window);
- ev.translatePoint(-dx, -dy);
+ if (target != null)
+ {
+ Point targetCoordinates =
+ AWTUtilities.convertPoint(window, ev.getX(), ev.getY(), target);
+ int dx = targetCoordinates.x - ev.getX();
+ int dy = targetCoordinates.y - ev.getY();
+ ev.translatePoint(dx, dy);
+ ev.setSource(target);
+ target.dispatchEvent(ev);
+ // We reset the event, so that the normal event dispatching is not
+ // influenced by this modified event.
+ ev.setSource(window);
+ ev.translatePoint(-dx, -dy);
+ }
+
+ return true;
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Finds the actual target for a mouseevent, starting at <code>c</code>.
+ * This searches upwards the component hierarchy until it finds a component
+ * that has a mouselistener attached.
+ *
+ * @param c the component to start searching from
+ *
+ * @return the actual receiver of the mouse event
+ */
+ private Component findTarget(Component c)
+ {
+ Component target = c;
+ while (target != null && target.getMouseListeners().length == 0)
+ {
+ target = target.getParent();
}
+ return target;
}
}
diff --git a/libjava/classpath/java/awt/List.java b/libjava/classpath/java/awt/List.java
index 00636a0..b28e201 100644
--- a/libjava/classpath/java/awt/List.java
+++ b/libjava/classpath/java/awt/List.java
@@ -446,7 +446,7 @@ preferredSize(int rows)
if (peer != null)
return peer.preferredSize (rows);
else
- return new Dimension (0, 0);
+ return getSize();
}
/*************************************************************************/
diff --git a/libjava/classpath/java/awt/MediaTracker.java b/libjava/classpath/java/awt/MediaTracker.java
index 9abfde6..8792e1d 100644
--- a/libjava/classpath/java/awt/MediaTracker.java
+++ b/libjava/classpath/java/awt/MediaTracker.java
@@ -634,7 +634,8 @@ public class MediaTracker implements java.io.Serializable
else
prev.next = e.next;
}
- prev = e;
+ else
+ prev = e;
e = e.next;
}
}
diff --git a/libjava/classpath/java/awt/MenuItem.java b/libjava/classpath/java/awt/MenuItem.java
index 3e39d11..a7ac796 100644
--- a/libjava/classpath/java/awt/MenuItem.java
+++ b/libjava/classpath/java/awt/MenuItem.java
@@ -111,7 +111,7 @@ private transient ActionListener action_listeners;
private static final long serialVersionUID = -217847831945965825L;
/** Constructor */
- public AccessibleAWTMenuItem()
+ protected AccessibleAWTMenuItem()
{
super();
}
diff --git a/libjava/classpath/java/awt/ScrollPaneAdjustable.java b/libjava/classpath/java/awt/ScrollPaneAdjustable.java
index bec5b51..21b58c3 100644
--- a/libjava/classpath/java/awt/ScrollPaneAdjustable.java
+++ b/libjava/classpath/java/awt/ScrollPaneAdjustable.java
@@ -178,7 +178,16 @@ public class ScrollPaneAdjustable
public String paramString ()
{
- throw new Error ("not implemented");
+ return ("scrollpane=" + sp + ", orientation=" + orientation
+ + ", value=" + value + ", minimum=" + minimum
+ + ", maximum=" + maximum + ", visibleAmount=" + visibleAmount
+ + ", unitIncrement=" + unitIncrement
+ + ", blockIncrement=" + blockIncrement);
+ }
+
+ public String toString()
+ {
+ return getClass().getName() + "[" + paramString() + "]";
}
/**
diff --git a/libjava/classpath/java/awt/TexturePaint.java b/libjava/classpath/java/awt/TexturePaint.java
index a12e384..57d7574 100644
--- a/libjava/classpath/java/awt/TexturePaint.java
+++ b/libjava/classpath/java/awt/TexturePaint.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt;
+import gnu.classpath.NotImplementedException;
+
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
@@ -65,10 +67,12 @@ public class TexturePaint implements Paint
Rectangle2D userBounds,
AffineTransform xform,
RenderingHints hints)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public int getTransparency()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
diff --git a/libjava/classpath/java/awt/Toolkit.java b/libjava/classpath/java/awt/Toolkit.java
index e2a4bc9..16f1caf 100644
--- a/libjava/classpath/java/awt/Toolkit.java
+++ b/libjava/classpath/java/awt/Toolkit.java
@@ -1,5 +1,5 @@
/* Toolkit.java -- AWT Toolkit superclass
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,6 +39,7 @@ exception statement from your version. */
package java.awt;
+import gnu.classpath.SystemProperties;
import gnu.java.awt.peer.GLightweightPeer;
import java.awt.datatransfer.Clipboard;
@@ -78,10 +79,15 @@ import java.awt.peer.TextFieldPeer;
import java.awt.peer.WindowPeer;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.File;
+import java.io.FileInputStream;
import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Map;
import java.util.Properties;
+import java.util.StringTokenizer;
/**
* The AWT system uses a set of native peer objects to implement its
@@ -525,16 +531,27 @@ public abstract class Toolkit
{
if (toolkit != null)
return toolkit;
- String toolkit_name = System.getProperty("awt.toolkit",
- default_toolkit_name);
+ String toolkit_name = SystemProperties.getProperty("awt.toolkit",
+ default_toolkit_name);
try
{
- Class cls = Class.forName(toolkit_name);
+ ClassLoader cl;
+ cl = (ClassLoader) AccessController.doPrivileged
+ (new PrivilegedAction()
+ {
+ public Object run()
+ {
+ return ClassLoader.getSystemClassLoader();
+ }
+ });
+ Class cls = cl.loadClass(toolkit_name);
Object obj = cls.newInstance();
if (!(obj instanceof Toolkit))
throw new AWTError(toolkit_name + " is not a subclass of " +
"java.awt.Toolkit");
toolkit = (Toolkit) obj;
+
+ initAccessibility();
return toolkit;
}
catch (ThreadDeath death)
@@ -696,9 +713,18 @@ public abstract class Toolkit
public abstract Clipboard getSystemClipboard();
/**
- * Gets the singleton instance of the system selection as a Clipboard object.
+ * Gets the singleton instance of the system selection as a
+ * Clipboard object. The system selection contains the selected text
+ * of the last component/widget that had focus and a text selection.
+ * The default implementation returns null.
*
- * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ * @return The Clipboard holding the system (text) selection or null
+ * if the Toolkit or system doesn't support a selection clipboard.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless()
+ * is true.
+ * @exception SecurityException If the current security manager
+ * checkSystemClipboardAccess() doesn't allow access.
*
* @since 1.4
*/
@@ -1206,4 +1232,138 @@ public abstract class Toolkit
* @since 1.3
*/
public abstract Map mapInputMethodHighlight(InputMethodHighlight highlight);
+
+ /**
+ * Initializes the accessibility framework. In particular, this loads the
+ * properties javax.accessibility.screen_magnifier_present and
+ * javax.accessibility.screen_reader_present and loads
+ * the classes specified in javax.accessibility.assistive_technologies.
+ */
+ private static void initAccessibility()
+ {
+ AccessController.doPrivileged
+ (new PrivilegedAction()
+ {
+ public Object run()
+ {
+ Properties props = new Properties();
+ String sep = File.separator;
+
+ // Try the user configuration.
+ try
+ {
+ File propsFile = new File(System.getProperty("user.home") + sep
+ + ".accessibility.properties");
+ FileInputStream in = new FileInputStream(propsFile);
+ props.load(in);
+ in.close();
+ }
+ catch (Exception ex)
+ {
+ // User configuration not present, ignore.
+ }
+
+ // Try the system configuration if there was no user configuration.
+ if (props.size() == 0)
+ {
+ try
+ {
+ File propsFile =
+ new File(System.getProperty("gnu.classpath.home.url")
+ + sep + "accessibility.properties");
+ FileInputStream in = new FileInputStream(propsFile);
+ props.load(in);
+ in.close();
+ }
+ catch (Exception ex)
+ {
+ // System configuration not present, ignore.
+ }
+ }
+
+ // Fetch the screen_magnifier_present property. Check systen properties
+ // first, then fallback to the configuration file.
+ String magPresent = SystemProperties.getProperty
+ ("javax.accessibility.screen_magnifier_present");
+ if (magPresent == null)
+ {
+ magPresent = props.getProperty("screen_magnifier_present");
+ if (magPresent != null)
+ {
+ SystemProperties.setProperty
+ ("javax.accessibility.screen_magnifier_present", magPresent);
+ }
+ }
+
+ // Fetch the screen_reader_present property. Check systen properties
+ // first, then fallback to the configuration file.
+ String readerPresent = SystemProperties.getProperty
+ ("javax.accessibility.screen_reader_present");
+ if (readerPresent == null)
+ {
+ readerPresent = props.getProperty("screen_reader_present");
+ if (readerPresent != null)
+ {
+ SystemProperties.setProperty
+ ("javax.accessibility.screen_reader_present", readerPresent);
+ }
+ }
+
+ // Fetch the list of classes to be loaded.
+ String classes = SystemProperties.getProperty
+ ("javax.accessibility.assistive_technologies");
+ if (classes == null)
+ {
+ classes = props.getProperty("assistive_technologies");
+ if (classes != null)
+ {
+ SystemProperties.setProperty
+ ("javax.accessibility.assistive_technologies", classes);
+ }
+ }
+
+ // Try to load the assisitive_technologies classes.
+ if (classes != null)
+ {
+ ClassLoader cl = ClassLoader.getSystemClassLoader();
+ StringTokenizer tokenizer = new StringTokenizer(classes, ",");
+ while (tokenizer.hasMoreTokens())
+ {
+ String className = tokenizer.nextToken();
+ try
+ {
+ Class atClass = cl.loadClass(className);
+ atClass.newInstance();
+ }
+ catch (ClassNotFoundException ex)
+ {
+ AWTError err = new AWTError("Assistive Technology class not"
+ + " found: " + className);
+ err.initCause(ex);
+ throw err;
+ }
+ catch (InstantiationException ex)
+ {
+ AWTError err =
+ new AWTError("Assistive Technology class cannot be "
+ + "instantiated: " + className);
+ err.initCause(ex);
+ throw err;
+ }
+ catch (IllegalAccessException ex)
+ {
+ AWTError err =
+ new AWTError("Assistive Technology class cannot be "
+ + "accessed: " + className);
+ err.initCause(err);
+ throw err;
+ }
+ }
+ }
+ return null;
+ }
+ });
+
+ }
+
} // class Toolkit
diff --git a/libjava/classpath/java/awt/Window.java b/libjava/classpath/java/awt/Window.java
index 71a8d38..d9e90c0 100644
--- a/libjava/classpath/java/awt/Window.java
+++ b/libjava/classpath/java/awt/Window.java
@@ -1,5 +1,5 @@
/* Window.java --
- Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation
+ Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt;
+import gnu.classpath.NotImplementedException;
+
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.WindowAdapter;
@@ -620,10 +622,25 @@ public class Window extends Container implements Accessible
|| windowStateListener != null
|| (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0))
processEvent(e);
- else if (e.id == ComponentEvent.COMPONENT_RESIZED)
- validate ();
- else
- super.dispatchEventImpl(e);
+ else
+ {
+ if (peer != null && (e.id == ComponentEvent.COMPONENT_RESIZED
+ || e.id == ComponentEvent.COMPONENT_MOVED))
+ {
+ Rectangle bounds = peer.getBounds();
+ x = bounds.x;
+ y = bounds.y;
+ height = bounds.height;
+ width = bounds.width;
+
+ if (e.id == ComponentEvent.COMPONENT_RESIZED)
+ {
+ invalidate();
+ validate();
+ }
+ }
+ super.dispatchEventImpl(e);
+ }
}
/**
@@ -1032,6 +1049,7 @@ public class Window extends Container implements Accessible
* @deprecated
*/
public void applyResourceBundle(ResourceBundle rb)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -1143,6 +1161,47 @@ public class Window extends Container implements Accessible
{
this.focusableWindowState = focusableWindowState;
}
+
+ /**
+ * Check whether this Container is a focus cycle root.
+ * Returns always <code>true</code> as Windows are the
+ * root of the focus cycle.
+ *
+ * @return Always <code>true</code>.
+ *
+ * @since 1.4
+ */
+ public final boolean isFocusCycleRoot()
+ {
+ return true;
+ }
+
+ /**
+ * Set whether or not this Container is the root of a focus
+ * traversal cycle. Windows are the root of the focus cycle
+ * and therefore this method does nothing.
+ *
+ * @param focusCycleRoot ignored.
+ *
+ * @since 1.4
+ */
+ public final void setFocusCycleRoot(boolean focusCycleRoot)
+ {
+ // calls to the method are ignored
+ }
+
+ /**
+ * Returns the root container that owns the focus cycle where this
+ * component resides. Windows have no ancestors and this method
+ * returns always <code>null</code>.
+ *
+ * @return Always <code>null</code>.
+ * @since 1.4
+ */
+ public final Container getFocusCycleRootAncestor()
+ {
+ return null;
+ }
/**
* Generate a unique name for this window.
diff --git a/libjava/classpath/java/awt/datatransfer/FlavorEvent.java b/libjava/classpath/java/awt/datatransfer/FlavorEvent.java
index 8252dea..38b4818 100644
--- a/libjava/classpath/java/awt/datatransfer/FlavorEvent.java
+++ b/libjava/classpath/java/awt/datatransfer/FlavorEvent.java
@@ -45,6 +45,8 @@ import java.util.EventObject;
* Fired by a ClipBoard for registered FlavorListeners.
*
* @author Mark J. Wielaard (mark@klomp.org)
+ *
+ * @since 1.5
*/
public class FlavorEvent extends EventObject
{
diff --git a/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java b/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java
index 7b4d2fb..a80665a 100644
--- a/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java
+++ b/libjava/classpath/java/awt/datatransfer/SystemFlavorMap.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.datatransfer;
+import gnu.classpath.NotImplementedException;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -262,11 +264,13 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable
* version of the native.
*/
public List getFlavorsForNative (String nat)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public List getNativesForFlavor (DataFlavor flav)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
diff --git a/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java b/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java
index 07b822e..37fde91 100644
--- a/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java
+++ b/libjava/classpath/java/awt/dnd/DragGestureRecognizer.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.dnd;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Point;
import java.awt.event.InputEvent;
@@ -126,6 +128,7 @@ public abstract class DragGestureRecognizer implements Serializable
}
public void resetRecognizer()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
@@ -152,6 +155,7 @@ public abstract class DragGestureRecognizer implements Serializable
}
protected void fireDragGestureRecognized(int dragAction, Point p)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
diff --git a/libjava/classpath/java/awt/dnd/DragSourceContext.java b/libjava/classpath/java/awt/dnd/DragSourceContext.java
index 2cf0d6d..88607b0 100644
--- a/libjava/classpath/java/awt/dnd/DragSourceContext.java
+++ b/libjava/classpath/java/awt/dnd/DragSourceContext.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.dnd;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Image;
@@ -86,6 +88,7 @@ public class DragSourceContext
DragGestureEvent trigger, Cursor cursor,
Image image, Point offset, Transferable trans,
DragSourceListener dsl)
+ throws NotImplementedException
{
if (peer == null
|| trigger == null)
@@ -130,6 +133,7 @@ public class DragSourceContext
}
public void setCursor (Cursor cursor)
+ throws NotImplementedException
{
this.cursor = cursor;
// FIXME: Check if we need to do more here
@@ -162,30 +166,37 @@ public class DragSourceContext
}
public void transferablesFlavorsChanged()
+ throws NotImplementedException
{
}
public void dragEnter(DragSourceDragEvent e)
+ throws NotImplementedException
{
}
public void dragOver(DragSourceDragEvent e)
+ throws NotImplementedException
{
}
public void dragExit(DragSourceEvent e)
+ throws NotImplementedException
{
}
public void dropActionChanged(DragSourceDragEvent e)
+ throws NotImplementedException
{
}
public void dragDropEnd(DragSourceDropEvent e)
+ throws NotImplementedException
{
}
public void dragMouseMoved(DragSourceDragEvent e)
+ throws NotImplementedException
{
}
@@ -195,6 +206,7 @@ public class DragSourceContext
}
protected void updateCurrentCursor(int dropOp, int targetAct, int status)
+ throws NotImplementedException
{
}
} // class DragSourceContext
diff --git a/libjava/classpath/java/awt/dnd/DropTarget.java b/libjava/classpath/java/awt/dnd/DropTarget.java
index 9fd7ef8..b0d4c2a 100644
--- a/libjava/classpath/java/awt/dnd/DropTarget.java
+++ b/libjava/classpath/java/awt/dnd/DropTarget.java
@@ -61,9 +61,7 @@ public class DropTarget
*/
private static final long serialVersionUID = -6283860791671019047L;
- /** @specnote According to the online documentation, this is
- * protected, but in reality it is public. */
- public static class DropTargetAutoScroller
+ protected static class DropTargetAutoScroller
implements ActionListener
{
private Component component;
diff --git a/libjava/classpath/java/awt/dnd/DropTargetContext.java b/libjava/classpath/java/awt/dnd/DropTargetContext.java
index d1fb66e..19e27a9 100644
--- a/libjava/classpath/java/awt/dnd/DropTargetContext.java
+++ b/libjava/classpath/java/awt/dnd/DropTargetContext.java
@@ -54,9 +54,7 @@ public class DropTargetContext implements Serializable
{
static final long serialVersionUID = -634158968993743371L;
- /** @specnote According to the online documentation, this is
- * protected, but in reality it is public. */
- public class TransferableProxy implements Transferable
+ protected class TransferableProxy implements Transferable
{
protected boolean isLocal;
protected Transferable transferable;
diff --git a/libjava/classpath/java/awt/dnd/DropTargetEvent.java b/libjava/classpath/java/awt/dnd/DropTargetEvent.java
index 56a4d48..f75f756 100644
--- a/libjava/classpath/java/awt/dnd/DropTargetEvent.java
+++ b/libjava/classpath/java/awt/dnd/DropTargetEvent.java
@@ -41,6 +41,8 @@ import java.util.EventObject;
public class DropTargetEvent extends EventObject
{
+ private static final long serialVersionUID = 2821229066521922993L;
+
protected DropTargetContext context;
public DropTargetEvent (DropTargetContext context)
diff --git a/libjava/classpath/java/awt/event/MouseEvent.java b/libjava/classpath/java/awt/event/MouseEvent.java
index 3e0feca..f2bcfbc 100644
--- a/libjava/classpath/java/awt/event/MouseEvent.java
+++ b/libjava/classpath/java/awt/event/MouseEvent.java
@@ -402,7 +402,11 @@ public class MouseEvent extends InputEvent
// FIXME: need a mauve test for this method
if (modifiersEx != 0)
s.append(",extModifiers=").append(getModifiersExText(modifiersEx));
- return s.append(",clickCount=").append(clickCount).toString();
+
+ s.append(",clickCount=").append(clickCount);
+ s.append(",consumed=").append(consumed);
+
+ return s.toString();
}
/**
diff --git a/libjava/classpath/java/awt/font/GlyphMetrics.java b/libjava/classpath/java/awt/font/GlyphMetrics.java
index 28b2088..18aaedc 100644
--- a/libjava/classpath/java/awt/font/GlyphMetrics.java
+++ b/libjava/classpath/java/awt/font/GlyphMetrics.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.awt.geom.Rectangle2D;
/**
@@ -93,11 +95,13 @@ public final class GlyphMetrics
}
public float getLSB ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getRSB ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/GlyphVector.java b/libjava/classpath/java/awt/font/GlyphVector.java
index 57e2581..8d8a51d 100644
--- a/libjava/classpath/java/awt/font/GlyphVector.java
+++ b/libjava/classpath/java/awt/font/GlyphVector.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
@@ -70,12 +72,14 @@ public abstract class GlyphVector implements Cloneable
public abstract FontRenderContext getFontRenderContext ();
public int getGlyphCharIndex (int glyphIndex)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public int[] getGlyphCharIndices (int beginGlyphIndex, int numEntries,
int[] codeReturn)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -95,12 +99,14 @@ public abstract class GlyphVector implements Cloneable
public abstract Shape getGlyphOutline (int glyphIndex);
public Shape getGlyphOutline (int glyphIndex, float x, float y)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public Rectangle getGlyphPixelBounds (int index, FontRenderContext renderFRC,
float x, float y)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -116,6 +122,7 @@ public abstract class GlyphVector implements Cloneable
public abstract Shape getGlyphVisualBounds (int glyphIndex);
public int getLayoutFlags ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -130,6 +137,7 @@ public abstract class GlyphVector implements Cloneable
public Rectangle getPixelBounds (FontRenderContext renderFRC,
float x, float y)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/GraphicAttribute.java b/libjava/classpath/java/awt/font/GraphicAttribute.java
index 79eae99..107f16d 100644
--- a/libjava/classpath/java/awt/font/GraphicAttribute.java
+++ b/libjava/classpath/java/awt/font/GraphicAttribute.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
@@ -71,6 +73,7 @@ public abstract class GraphicAttribute
public abstract float getAscent ();
public Rectangle2D getBounds ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -78,6 +81,7 @@ public abstract class GraphicAttribute
public abstract float getDescent ();
public GlyphJustificationInfo getJustificationInfo ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/ImageGraphicAttribute.java b/libjava/classpath/java/awt/font/ImageGraphicAttribute.java
index 77413f9..c050255 100644
--- a/libjava/classpath/java/awt/font/ImageGraphicAttribute.java
+++ b/libjava/classpath/java/awt/font/ImageGraphicAttribute.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Rectangle2D;
@@ -57,6 +59,7 @@ public final class ImageGraphicAttribute extends GraphicAttribute
public ImageGraphicAttribute (Image image, int alignment, float originX,
float originY)
+ throws NotImplementedException
{
super (alignment);
this.image = image;
@@ -65,6 +68,7 @@ public final class ImageGraphicAttribute extends GraphicAttribute
}
public void draw (Graphics2D graphics, float x, float y)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -78,31 +82,37 @@ public final class ImageGraphicAttribute extends GraphicAttribute
}
public boolean equals (ImageGraphicAttribute rhs)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getAdvance ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getAscent ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
- public Rectangle2D getBounds ()
+ public Rectangle2D getBounds ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getDescent ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public int hashCode ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/LineBreakMeasurer.java b/libjava/classpath/java/awt/font/LineBreakMeasurer.java
index 0a6a969..14985b4 100644
--- a/libjava/classpath/java/awt/font/LineBreakMeasurer.java
+++ b/libjava/classpath/java/awt/font/LineBreakMeasurer.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.text.AttributedCharacterIterator;
import java.text.BreakIterator;
@@ -69,6 +71,7 @@ public final class LineBreakMeasurer
public void deleteChar (AttributedCharacterIterator newParagraph,
int deletePos)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -80,28 +83,33 @@ public final class LineBreakMeasurer
public void insertChar (AttributedCharacterIterator newParagraph,
int insertPos)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public TextLayout nextLayout (float wrappingWidth)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public TextLayout nextLayout (float wrappingWidth, int offsetLimit,
boolean requireNextWord)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public int nextOffset (float wrappingWidth)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public int nextOffset (float wrappingWidth, int offsetLimit,
boolean requireNextWord)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/NumericShaper.java b/libjava/classpath/java/awt/font/NumericShaper.java
index efbdcd4..add1c6a 100644
--- a/libjava/classpath/java/awt/font/NumericShaper.java
+++ b/libjava/classpath/java/awt/font/NumericShaper.java
@@ -39,99 +39,387 @@ exception statement from your version. */
package java.awt.font;
import java.io.Serializable;
+import java.lang.Character.UnicodeBlock;
/**
+ * This class handles numeric shaping. A shaper can either be contextual
+ * or not. A non-contextual shaper will always translate ASCII digits
+ * in its input into the target Unicode range. A contextual shaper will
+ * change the target Unicode range depending on the characters it has
+ * previously processed.
+ *
* @author Michael Koch
+ * @author Tom Tromey
+ *
* @since 1.4
+ * @specnote This class does not handle LIMBU or OSMANYA.
+ * @specnote The JDK does not seem to properly handle ranges without a
+ * digit zero, such as TAMIL. This implementation does.
*/
public final class NumericShaper implements Serializable
{
private static final long serialVersionUID = -8022764705923730308L;
-
+
+ /** Convenience constant representing all the valid Unicode ranges. */
public static final int ALL_RANGES = 524287;
+
+ /**
+ * Constant representing the Unicode ARABIC range. Shaping done
+ * using this range will translate to the arabic decimal characters.
+ * Use EASTERN_ARABIC if you want to shape to the eastern arabic
+ * (also known as the extended arabic) decimal characters.
+ */
public static final int ARABIC = 2;
+
+ /** Constant representing the Unicode BENGALI range. */
public static final int BENGALI = 16;
+
+ /** Constant representing the Unicode DEVANAGARI range. */
public static final int DEVANAGARI = 8;
+
+ /**
+ * Constant representing the Unicode extended arabic range.
+ * In Unicode there are two different sets of arabic digits;
+ * this selects the extended or eastern set.
+ */
public static final int EASTERN_ARABIC = 4;
+
+ /**
+ * Constant representing the Unicode ETHIOPIC range. Note that
+ * there is no digit zero in this range; an ASCII digit zero
+ * is left unchanged when shaping to this range.
+ */
public static final int ETHIOPIC = 65536;
+
+ /**
+ * Constant representing the Unicode EUROPEAN range. For
+ * contextual shaping purposes, characters in the various
+ * extended Latin character blocks are recognized as EUROPEAN.
+ */
public static final int EUROPEAN = 1;
+
+ /** Constant representing the Unicode GUJARATI range. */
public static final int GUJARATI = 64;
+
+ /** Constant representing the Unicode GURMUKHI range. */
public static final int GURMUKHI = 32;
+
+ /** Constant representing the Unicode KANNADA range. */
public static final int KANNADA = 1024;
+
+ /** Constant representing the Unicode KHMER range. */
public static final int KHMER = 131072;
+
+ /** Constant representing the Unicode LAO range. */
public static final int LAO = 8192;
+
+ /** Constant representing the Unicode MALAYALAM range. */
public static final int MALAYALAM = 2048;
+
+ /** Constant representing the Unicode MONGOLIAN range. */
public static final int MONGOLIAN = 262144;
+
+ /** Constant representing the Unicode MYANMAR range. */
public static final int MYANMAR = 32768;
+
+ /** Constant representing the Unicode ORIYA range. */
public static final int ORIYA = 128;
+
+ /**
+ * Constant representing the Unicode TAMIL range. Note that
+ * there is no digit zero in this range; an ASCII digit zero
+ * is left unchanged when shaping to this range.
+ */
public static final int TAMIL = 256;
+
+ /** Constant representing the Unicode TELUGU range. */
public static final int TELUGU = 512;
+
+ /** Constant representing the Unicode THAI range. */
public static final int THAI = 4096;
+
+ /** Constant representing the Unicode TIBETAN range. */
public static final int TIBETAN = 16384;
- private int ranges;
- private int context;
-
- private NumericShaper (int ranges, int context)
+ /**
+ * This table holds the zero digits for each language. This is hard-coded
+ * because the values will not change and the table layout is tied to the
+ * other constants in this class in any case. In the two places where a
+ * language does not have a zero digit, the character immediately preceeding
+ * the one digit is used instead. These languages are special-cased in
+ * the shaping code.
+ */
+ private static final char[] zeroDigits =
{
- this.ranges = ranges;
- this.context = context;
+ '0', // EUROPEAN
+ '\u0660', // ARABIC
+ '\u06f0', // EASTERN_ARABIC
+ '\u0966', // DEVANAGARI
+ '\u09e6', // BENGALI
+ '\u0a66', // GURMUKHI
+ '\u0ae6', // GUJARATI
+ '\u0b66', // ORIYA
+ '\u0be6', // TAMIL - special case as there is no digit zero
+ '\u0c66', // TELUGU
+ '\u0ce6', // KANNADA
+ '\u0d66', // MALAYALAM
+ '\u0e50', // THAI
+ '\u0ed0', // LAO
+ '\u0f20', // TIBETAN
+ '\u1040', // MYANMAR
+ '\u1368', // ETHIOPIC - special case as there is no digit zero
+ '\u17e0', // KHMER
+ '\u1810' // MONGOLIAN
+ };
+
+ /**
+ * The default initial context for this shaper, specified as
+ * an integer from 0 to 18.
+ */
+ private int key;
+
+ /**
+ * The target ranges handled by this shaper. If the shaper
+ * is not contextual, the high bit of this field will be set.
+ * @specnote This was discovered by reading the serialization spec
+ */
+ private int mask;
+
+ /**
+ * Create a new numeric shaper. The key given is a constant from
+ * this class, the constructor turns it into its internal form.
+ * @param key the key to use, as one of the manifest constants
+ * @param mask a mask of languages to shape for
+ */
+ private NumericShaper (int key, int mask)
+ {
+ // This internal form is a bit goofy, but it is specified by
+ // the serialization spec.
+ this.key = Integer.numberOfTrailingZeros(key);
+ this.mask = mask;
}
- public boolean equals (Object obj)
+ /**
+ * Return an integer representing all the languages for which this
+ * shaper will shape. The result is taken by "or"ing together
+ * the constants representing the various languages.
+ */
+ public int getRanges ()
{
- if (! (obj instanceof NumericShaper))
- return false;
+ return mask & ALL_RANGES;
+ }
- NumericShaper tmp = (NumericShaper) obj;
-
- return (ranges == tmp.ranges
- && context == tmp.context);
+ /**
+ * Return true if this shaper is contextual, false if it is not.
+ */
+ public boolean isContextual ()
+ {
+ return mask > 0;
}
- public static NumericShaper getContextualShaper (int ranges)
+ /**
+ * Shape the text in the given array. The starting context will
+ * be the context passed to the shaper at creation time.
+ * @param text the text to shape
+ * @param start the index of the starting character of the array
+ * @param count the number of characters in the array
+ */
+ public void shape (char[] text, int start, int count)
{
- throw new Error ("not implemented");
+ shape (text, start, count, 1 << key);
}
- public static NumericShaper getContextualShaper (int ranges,
- int defaultContext)
+ /**
+ * Given a unicode block object, return corresponding language constant.
+ * If the block is not recognized, returns zero. Note that as there
+ * is no separate ARABIC block in Character, this case must
+ * be specially handled by the caller; EASTERN_ARABIC is preferred when
+ * both are specified.
+ * @param b the unicode block to classify
+ * @return the language constant, or zero if not recognized
+ */
+ private int classify(UnicodeBlock b)
{
- throw new Error ("not implemented");
+ if (b == null)
+ return 0;
+ // ARABIC is handled by the caller; from testing we know
+ // that EASTERN_ARABIC takes precedence.
+ if (b == UnicodeBlock.ARABIC)
+ return EASTERN_ARABIC;
+ if (b == UnicodeBlock.BENGALI)
+ return BENGALI;
+ if (b == UnicodeBlock.DEVANAGARI)
+ return DEVANAGARI;
+ if (b == UnicodeBlock.ETHIOPIC)
+ return ETHIOPIC;
+ if (b == UnicodeBlock.BASIC_LATIN
+ || b == UnicodeBlock.LATIN_1_SUPPLEMENT
+ || b == UnicodeBlock.LATIN_EXTENDED_A
+ || b == UnicodeBlock.LATIN_EXTENDED_ADDITIONAL
+ || b == UnicodeBlock.LATIN_EXTENDED_B)
+ return EUROPEAN;
+ if (b == UnicodeBlock.GUJARATI)
+ return GUJARATI;
+ if (b == UnicodeBlock.GURMUKHI)
+ return GURMUKHI;
+ if (b == UnicodeBlock.KANNADA)
+ return KANNADA;
+ if (b == UnicodeBlock.KHMER)
+ return KHMER;
+ if (b == UnicodeBlock.LAO)
+ return LAO;
+ if (b == UnicodeBlock.MALAYALAM)
+ return MALAYALAM;
+ if (b == UnicodeBlock.MONGOLIAN)
+ return MONGOLIAN;
+ if (b == UnicodeBlock.MYANMAR)
+ return MYANMAR;
+ if (b == UnicodeBlock.ORIYA)
+ return ORIYA;
+ if (b == UnicodeBlock.TAMIL)
+ return TAMIL;
+ if (b == UnicodeBlock.TELUGU)
+ return TELUGU;
+ if (b == UnicodeBlock.THAI)
+ return THAI;
+ if (b == UnicodeBlock.TIBETAN)
+ return TIBETAN;
+ return 0;
}
- public int getRanges ()
+ /**
+ * Shape the given text, using the indicated initial context.
+ * If this shaper is not a contextual shaper, then the given context
+ * will be ignored.
+ * @param text the text to shape
+ * @param start the index of the first character of the text to shape
+ * @param count the number of characters to shape in the text
+ * @param context the initial context
+ * @throws IllegalArgumentException if the initial context is invalid
+ */
+ public void shape (char[] text, int start, int count, int context)
{
- return ranges;
+ int currentContext;
+ if (isContextual())
+ {
+ if (Integer.bitCount(context) != 1 || (context & ~ALL_RANGES) != 0)
+ throw new IllegalArgumentException("invalid context argument");
+ // If the indicated context is not one we are handling, reset it.
+ if ((context & mask) == 0)
+ currentContext = -1;
+ else
+ currentContext = Integer.numberOfTrailingZeros(context);
+ }
+ else
+ currentContext = key;
+
+ for (int i = 0; i < count; ++i)
+ {
+ char c = text[start + i];
+ if (c >= '0' && c <= '9')
+ {
+ if (currentContext >= 0)
+ {
+ // Shape into the current context.
+ if (c == '0'
+ && ((1 << currentContext) == TAMIL
+ || (1 << currentContext) == ETHIOPIC))
+ {
+ // No digit 0 in this context; do nothing.
+ }
+ else
+ text[start + i]
+ = (char) (zeroDigits[currentContext] + c - '0');
+ }
+ }
+ else if (isContextual())
+ {
+ // if c is in a group, set currentContext; else reset it.
+ int group = classify(UnicodeBlock.of(c));
+ // Specially handle ARABIC.
+ if (group == EASTERN_ARABIC && (mask & EASTERN_ARABIC) == 0
+ && (mask & ARABIC) != 0)
+ group = ARABIC;
+ if ((mask & group) != 0)
+ {
+ // The character was classified as being in a group
+ // we recognize, and it was selected by the shaper.
+ // So, change the context.
+ currentContext = Integer.numberOfTrailingZeros(group);
+ }
+ }
+ }
}
- public static NumericShaper getShaper (int singleRange)
+ public boolean equals (Object obj)
{
- throw new Error ("not implemented");
+ if (! (obj instanceof NumericShaper))
+ return false;
+ NumericShaper tmp = (NumericShaper) obj;
+ return key == tmp.key && mask == tmp.mask;
}
public int hashCode ()
{
- throw new Error ("not implemented");
+ return key ^ mask;
}
- public boolean isContextual ()
+ public String toString ()
{
- throw new Error ("not implemented");
+ // For debugging only.
+ return "key=" + key + "; mask=" + mask;
}
- public void shape (char[] text, int start, int count)
+ /**
+ * Return a non-contextual shaper which can shape to a single range.
+ * All ASCII digits in the input text are translated to this language.
+ * @param singleRange the target language
+ * @return a non-contextual shaper for this language
+ * @throws IllegalArgumentException if the argument does not name a
+ * single language, as specified by the constants declared in this class
+ */
+ public static NumericShaper getShaper (int singleRange)
{
- shape (text, start, count, context);
+ if (Integer.bitCount(singleRange) != 1)
+ throw new IllegalArgumentException("more than one bit set in argument");
+ if ((singleRange & ~ALL_RANGES) != 0)
+ throw new IllegalArgumentException("argument out of range");
+ return new NumericShaper(singleRange, Integer.MIN_VALUE | singleRange);
}
- public void shape (char[] text, int start, int count, int context)
+ /**
+ * Return a contextual shaper which can shape to any of the indicated
+ * languages. The default initial context for this shaper is EUROPEAN.
+ * @param ranges the ranges to shape to
+ * @return a contextual shaper which will target any of these ranges
+ * @throws IllegalArgumentException if the argument specifies an
+ * unrecognized range
+ */
+ public static NumericShaper getContextualShaper (int ranges)
{
- throw new Error ("not implemented");
+ if ((ranges & ~ALL_RANGES) != 0)
+ throw new IllegalArgumentException("argument out of range");
+ return new NumericShaper(EUROPEAN, ranges);
}
- public String toString ()
+ /**
+ * Return a contextual shaper which can shape to any of the indicated
+ * languages. The default initial context for this shaper is given as
+ * an argument.
+ * @param ranges the ranges to shape to
+ * @param defaultContext the default initial context
+ * @return a contextual shaper which will target any of these ranges
+ * @throws IllegalArgumentException if the ranges argument specifies an
+ * unrecognized range, or if the defaultContext argument does not specify
+ * a single valid range
+ */
+ public static NumericShaper getContextualShaper (int ranges,
+ int defaultContext)
{
- throw new Error ("not implemented");
+ if (Integer.bitCount(defaultContext) != 1)
+ throw new IllegalArgumentException("more than one bit set in context");
+ if ((ranges & ~ALL_RANGES) != 0 || (defaultContext & ~ALL_RANGES) != 0)
+ throw new IllegalArgumentException("argument out of range");
+ return new NumericShaper(defaultContext, ranges);
}
}
diff --git a/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java b/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java
index 6d64dec..d532085 100644
--- a/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java
+++ b/libjava/classpath/java/awt/font/ShapeGraphicAttribute.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
@@ -58,6 +60,7 @@ public final class ShapeGraphicAttribute extends GraphicAttribute
}
public void draw (Graphics2D graphics, float x, float y)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -78,11 +81,13 @@ public final class ShapeGraphicAttribute extends GraphicAttribute
}
public float getAdvance ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getAscent ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
@@ -93,6 +98,7 @@ public final class ShapeGraphicAttribute extends GraphicAttribute
}
public float getDescent ()
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/font/TextMeasurer.java b/libjava/classpath/java/awt/font/TextMeasurer.java
index 7fcdc87..18c286c 100644
--- a/libjava/classpath/java/awt/font/TextMeasurer.java
+++ b/libjava/classpath/java/awt/font/TextMeasurer.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.awt.font;
+import gnu.classpath.NotImplementedException;
+
import java.text.AttributedCharacterIterator;
/**
@@ -70,27 +72,32 @@ public final class TextMeasurer implements Cloneable
public void deleteChar (AttributedCharacterIterator newParagraph,
int deletePos)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public float getAdvanceBetween (int start, int limit)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public TextLayout getLayout (int start, int limit)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public int getLineBreakIndex (int start, float maxAdvance)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
public void insertChar (AttributedCharacterIterator newParagraph,
int insertPos)
+ throws NotImplementedException
{
throw new Error ("not implemented");
}
diff --git a/libjava/classpath/java/awt/geom/GeneralPath.java b/libjava/classpath/java/awt/geom/GeneralPath.java
index 15fb8ab..123833b 100644
--- a/libjava/classpath/java/awt/geom/GeneralPath.java
+++ b/libjava/classpath/java/awt/geom/GeneralPath.java
@@ -1,5 +1,5 @@
/* GeneralPath.java -- represents a shape built from subpaths
- Copyright (C) 2002, 2003, 2004 Free Software Foundation
+ Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -79,8 +79,16 @@ import java.awt.Shape;
*/
public final class GeneralPath implements Shape, Cloneable
{
- public static final int WIND_EVEN_ODD = PathIterator.WIND_EVEN_ODD;
- public static final int WIND_NON_ZERO = PathIterator.WIND_NON_ZERO;
+ // WORKAROUND for gcj 4.0.x (x < 3)
+ // fully qualify PathIterator constants.
+
+ /** Same constant as {@link PathIterator#WIND_EVEN_ODD}. */
+ public static final int WIND_EVEN_ODD
+ = java.awt.geom.PathIterator.WIND_EVEN_ODD;
+
+ /** Same constant as {@link PathIterator.WIND_NON_ZERO}. */
+ public static final int WIND_NON_ZERO
+ = java.awt.geom.PathIterator.WIND_NON_ZERO;
/** Initial size if not specified. */
private static final int INIT_SIZE = 10;
diff --git a/libjava/classpath/java/awt/geom/Point2D.java b/libjava/classpath/java/awt/geom/Point2D.java
index 9f22a5a..a2689ab 100644
--- a/libjava/classpath/java/awt/geom/Point2D.java
+++ b/libjava/classpath/java/awt/geom/Point2D.java
@@ -1,5 +1,5 @@
/* Point2D.java -- generic point in 2-D space
- Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation
+ Copyright (C) 1999, 2000, 2002, 2004, 2006, Free Software Foundation
This file is part of GNU Classpath.
@@ -135,7 +135,7 @@ public abstract class Point2D implements Cloneable
*/
public double distanceSq(double x, double y)
{
- return distanceSq(getX(), x, getY(), y);
+ return distanceSq(getX(), getY(), x, y);
}
/**
@@ -147,7 +147,7 @@ public abstract class Point2D implements Cloneable
*/
public double distanceSq(Point2D p)
{
- return distanceSq(getX(), p.getX(), getY(), p.getY());
+ return distanceSq(getX(), getY(), p.getX(), p.getY());
}
/**
@@ -159,7 +159,7 @@ public abstract class Point2D implements Cloneable
*/
public double distance(double x, double y)
{
- return distance(getX(), x, getY(), y);
+ return distance(getX(), getY(), x, y);
}
/**
@@ -171,7 +171,7 @@ public abstract class Point2D implements Cloneable
*/
public double distance(Point2D p)
{
- return distance(getX(), p.getX(), getY(), p.getY());
+ return distance(getX(), getY(), p.getX(), p.getY());
}
/**
diff --git a/libjava/classpath/java/awt/image/AffineTransformOp.java b/libjava/classpath/java/awt/image/AffineTransformOp.java
index f11066e..bb4b795 100644
--- a/libjava/classpath/java/awt/image/AffineTransformOp.java
+++ b/libjava/classpath/java/awt/image/AffineTransformOp.java
@@ -347,7 +347,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp
* @param dstPt destination point
* @return the location of the transformed source point.
*/
- public Point2D getPoint2D (Point2D srcPt, Point2D dstPt)
+ public final Point2D getPoint2D (Point2D srcPt, Point2D dstPt)
{
return transform.transform (srcPt, dstPt);
}
diff --git a/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java b/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
index 6333ce9..44d5cec 100644
--- a/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
+++ b/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
@@ -1,5 +1,5 @@
/* AreaAveragingScaleFilter.java -- Java class for filtering images
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999,2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,86 +45,225 @@ package java.awt.image;
* points should give the desired results although Sun does not
* specify what the exact algorithm should be.
* <br>
- * FIXME: Currently this filter does nothing and needs to be implemented.
*
* @author C. Brian Jones (cbj@gnu.org)
*/
public class AreaAveragingScaleFilter extends ReplicateScaleFilter
{
- /**
- * Construct an instance of <code>AreaAveragingScaleFilter</code> which
- * should be used in conjunction with a <code>FilteredImageSource</code>
- * object.
- *
- * @param width the width of the destination image
- * @param height the height of the destination image
- */
- public AreaAveragingScaleFilter(int width, int height) {
- super(width, height);
- }
-
- /**
- * The <code>ImageProducer</code> should call this method with a
- * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
- * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
- * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the
- * <code>ImageConsumer</code> interface.
- * <br>
- * FIXME - more than likely Sun's implementation desires
- * <code>TOPDOWNLEFTRIGHT</code> order and this method is overloaded here
- * in order to assure that mask is part of the hints added to
- * the consumer.
- *
- * @param flags a bit mask of hints
- * @see ImageConsumer
- */
- public void setHints(int flags)
- {
- if (consumer != null)
- consumer.setHints(flags);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as a <code>byte</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize)
- {
- if (consumer != null)
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize)
- {
- if (consumer != null)
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
- }
+ /**
+ * Construct an instance of <code>AreaAveragingScaleFilter</code> which
+ * should be used in conjunction with a <code>FilteredImageSource</code>
+ * object.
+ *
+ * @param width the width of the destination image
+ * @param height the height of the destination image
+ */
+ public AreaAveragingScaleFilter(int width, int height) {
+ super(width, height);
+ }
+ /**
+ * The <code>ImageProducer</code> should call this method with a
+ * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
+ * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
+ * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the
+ * <code>ImageConsumer</code> interface.
+ * <br>
+ * FIXME - more than likely Sun's implementation desires
+ * <code>TOPDOWNLEFTRIGHT</code> order and this method is overloaded here
+ * in order to assure that mask is part of the hints added to
+ * the consumer.
+ *
+ * @param flags a bit mask of hints
+ * @see ImageConsumer
+ */
+ public void setHints(int flags)
+ {
+ if (consumer != null)
+ consumer.setHints(flags);
+ }
+
+ /**
+ * This function delivers a rectangle of pixels where any
+ * pixel(m,n) is stored in the array as a <code>byte</code> at
+ * index (n * scansize + m + offset).
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param w the width of the rectangle
+ * @param h the height of the rectangle
+ * @param model the <code>ColorModel</code> used to translate the pixels
+ * @param pixels the array of pixel values
+ * @param offset the index of the first pixels in the <code>pixels</code> array
+ * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+ */
+ public void setPixels(int x, int y, int w, int h,
+ ColorModel model, byte[] pixels, int offset, int scansize)
+ {
+ double rx = ((double) srcWidth) / destWidth;
+ double ry = ((double) srcHeight) / destHeight;
+
+ int destScansize = (int) Math.round(scansize / rx);
+
+ byte[] destPixels = averagePixels(x, y, w, h,
+ model, pixels, offset, scansize,
+ rx, ry, destScansize);
+
+ if (consumer != null)
+ consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
+ (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
+ model, destPixels, 0, destScansize);
+ }
+
+ /**
+ * This function delivers a rectangle of pixels where any
+ * pixel(m,n) is stored in the array as an <code>int</code> at
+ * index (n * scansize + m + offset).
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param w the width of the rectangle
+ * @param h the height of the rectangle
+ * @param model the <code>ColorModel</code> used to translate the pixels
+ * @param pixels the array of pixel values
+ * @param offset the index of the first pixels in the <code>pixels</code> array
+ * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
+ */
+ public void setPixels(int x, int y, int w, int h,
+ ColorModel model, int[] pixels, int offset, int scansize)
+ {
+ double rx = ((double) srcWidth) / destWidth;
+ double ry = ((double) srcHeight) / destHeight;
+
+ int destScansize = (int) Math.round(scansize / rx);
+
+ int[] destPixels = averagePixels(x, y, w, h,
+ model, pixels, offset, scansize,
+ rx, ry, destScansize);
+
+ if (consumer != null)
+ consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
+ (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
+ model, destPixels, 0, destScansize);
+ }
+
+ /**
+ * This is a really terrible implementation,
+ * since it uses the nearest-neighbor method. This filter is rarely used though.
+ *
+ * @param srcx, srcy - Source rectangle upper-left corner
+ * @param srcw, srch - Source rectangle width and height
+ * @param model - Pixel color model
+ * @param srcPixels - Source pixel data.
+ * @param srcOffset - Starting offset into the source pixel data array.
+ * @param srcScansize - Source array scanline size.
+ * @param rx,ry - Scaling factor.
+ * @param dstScansize - Destination array scanline size.
+ */
+ private byte[] averagePixels(int srcx, int srcy, int srcw, int srch,
+ ColorModel model, byte[] srcPixels,
+ int srcOffset, int srcScansize,
+ double rx, double ry, int destScansize)
+ {
+ int destW = (int) Math.ceil(srcw/rx);
+ int destH = (int) Math.ceil(srch/ry);
+ byte[] destPixels = new byte[ destW * destH ];
+ int sx, sy;
+
+ int w = (int)Math.ceil(rx);
+ int h = (int)Math.ceil(ry);
+
+ for(int x = 0; x < destW; x++)
+ for(int y = 0; y < destH; y++)
+ {
+ sx = (int) (x * rx);
+ sy = (int) (y * ry);
+
+ int r,g,b,a;
+ r = g = b = a = 0;
+
+ for(int i = 0; i < w; i++)
+ {
+ for(int j = 0; j < h; j++)
+ {
+ int idx = srcx + sx + i + (srcy + sy + j)*srcScansize;
+ r += model.getRed(srcPixels[ idx ]);
+ g += model.getGreen(srcPixels[ idx ]);
+ b += model.getBlue(srcPixels[ idx ]);
+ a += model.getAlpha(srcPixels[ idx ]);
+ }
+ }
+
+ r = r / (w * h);
+ g = g / (w * h);
+ b = b / (w * h);
+ a = a / (w * h);
+
+ // Does this really work?
+ destPixels[x + destScansize*y] = (byte)model.getDataElement
+ (new int[]{r, g, b, a}, 0);
+ }
+
+ return destPixels;
+ }
+
+ /**
+ * This is a really terrible implementation,
+ * since it uses the nearest-neighbor method. This filter is rarely used though.
+ *
+ * @param srcx, srcy - Source rectangle upper-left corner
+ * @param srcw, srch - Source rectangle width and height
+ * @param model - Pixel color model
+ * @param srcPixels - Source pixel data.
+ * @param srcOffset - Starting offset into the source pixel data array.
+ * @param srcScansize - Source array scanline size.
+ * @param rx,ry - Scaling factor.
+ * @param dstScansize - Destination array scanline size.
+ */
+ private int[] averagePixels(int srcx, int srcy, int srcw, int srch,
+ ColorModel model, int[] srcPixels,
+ int srcOffset, int srcScansize,
+ double rx, double ry, int destScansize)
+ {
+ int destW = (int) Math.ceil(srcw/rx);
+ int destH = (int) Math.ceil(srch/ry);
+ int[] destPixels = new int[ destW * destH ];
+ int sx, sy;
+
+ int w = (int)Math.ceil(rx);
+ int h = (int)Math.ceil(ry);
+
+ for(int x = 0; x < destW; x++)
+ for(int y = 0; y < destH; y++)
+ {
+ sx = (int) (x * rx);
+ sy = (int) (y * ry);
+
+ int r,g,b,a;
+ r = g = b = a = 0;
+
+ for(int i = 0; i < w; i++)
+ {
+ for(int j = 0; j < h; j++)
+ {
+ int idx = srcx + sx + i + (srcy + sy + j)*srcScansize;
+ r += model.getRed(srcPixels[ idx ]);
+ g += model.getGreen(srcPixels[ idx ]);
+ b += model.getBlue(srcPixels[ idx ]);
+ a += model.getAlpha(srcPixels[ idx ]);
+ }
+ }
+
+ r = r / (w * h);
+ g = g / (w * h);
+ b = b / (w * h);
+ a = a / (w * h);
+
+ destPixels[x + destScansize*y] = model.getDataElement
+ (new int[]{r, g, b, a}, 0);
+ }
+
+ return destPixels;
+ }
}
diff --git a/libjava/classpath/java/awt/image/BandCombineOp.java b/libjava/classpath/java/awt/image/BandCombineOp.java
index 79efb02..634125e 100644
--- a/libjava/classpath/java/awt/image/BandCombineOp.java
+++ b/libjava/classpath/java/awt/image/BandCombineOp.java
@@ -118,7 +118,7 @@ public class BandCombineOp implements RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
*/
- public Rectangle2D getBounds2D(Raster src)
+ public final Rectangle2D getBounds2D(Raster src)
{
return src.getBounds();
}
@@ -144,7 +144,7 @@ public class BandCombineOp implements RasterOp
* @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D,
*java.awt.geom.Point2D)
*/
- public Point2D getPoint2D(Point2D src, Point2D dst)
+ public final Point2D getPoint2D(Point2D src, Point2D dst)
{
if (dst == null) return (Point2D)src.clone();
dst.setLocation(src);
@@ -154,13 +154,13 @@ public class BandCombineOp implements RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getRenderingHints()
*/
- public RenderingHints getRenderingHints()
+ public final RenderingHints getRenderingHints()
{
return hints;
}
/** Return the matrix for this Op. */
- public float[][] getMatrix()
+ public final float[][] getMatrix()
{
return matrix;
}
diff --git a/libjava/classpath/java/awt/image/ColorModel.java b/libjava/classpath/java/awt/image/ColorModel.java
index 1ced2a0..40307f2 100644
--- a/libjava/classpath/java/awt/image/ColorModel.java
+++ b/libjava/classpath/java/awt/image/ColorModel.java
@@ -452,8 +452,14 @@ public abstract class ColorModel implements Transparency
* This method is typically overriden in subclasses to provide a
* more efficient implementation.
*
- * @param array of transferType containing a single pixel. The
- * pixel should be encoded in the natural way of the color model.
+ * @param pixel an array of transferType containing a single pixel. The
+ * pixel should be encoded in the natural way of the color model. If
+ * this argument is not an array, as expected, a {@link ClassCastException}
+ * will be thrown.
+ * @param components an array that will be filled with the color component
+ * of the pixel. If this is null, a new array will be allocated
+ * @param offset index into the components array at which the result
+ * will be stored
*
* @return arrays of unnormalized component samples of single
* pixel. The scale and multiplication state of the samples are
@@ -521,8 +527,8 @@ public abstract class ColorModel implements Transparency
float[] normComponents,
int normOffset)
{
- // subclasses has to implement this method.
- throw new UnsupportedOperationException();
+ int[] components = getComponents(pixel, null, 0);
+ return getNormalizedComponents(components, 0, normComponents, normOffset);
}
/**
diff --git a/libjava/classpath/java/awt/image/ComponentSampleModel.java b/libjava/classpath/java/awt/image/ComponentSampleModel.java
index 5cf06e4..b4e9450 100644
--- a/libjava/classpath/java/awt/image/ComponentSampleModel.java
+++ b/libjava/classpath/java/awt/image/ComponentSampleModel.java
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation
+/* Copyright (C) 2000, 2002, 2006, Free Software Foundation
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ package java.awt.image;
import gnu.java.awt.Buffers;
+import java.util.Arrays;
+
/* FIXME: This class does not yet support data type TYPE_SHORT */
/**
@@ -60,11 +62,14 @@ import gnu.java.awt.Buffers;
*/
public class ComponentSampleModel extends SampleModel
{
+ /** The offsets to the first sample for each band. */
protected int[] bandOffsets;
+
+ /** The indices of the bank used to store each band in a data buffer. */
protected int[] bankIndices;
/**
- * Number of bands in the image described.
+ * The number of bands in the image.
* @specnote This field shadows the protected numBands in SampleModel.
*/
protected int numBands;
@@ -72,42 +77,128 @@ public class ComponentSampleModel extends SampleModel
/** Used when creating data buffers. */
protected int numBanks;
+ /**
+ * The number of data elements between a sample in one row and the
+ * corresponding sample in the next row.
+ */
protected int scanlineStride;
+ /**
+ * The number of data elements between a sample for one pixel and the
+ * corresponding sample for the next pixel in the same row.
+ */
protected int pixelStride;
private boolean tightPixelPacking = false;
+ /**
+ * Creates a new sample model that assumes that all bands are stored in a
+ * single bank of the {@link DataBuffer}.
+ * <p>
+ * Note that the <code>bandOffsets</code> array is copied to internal storage
+ * to prevent subsequent changes to the array from affecting this object.
+ *
+ * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
+ * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
+ * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT} or
+ * {@link DataBuffer#TYPE_DOUBLE}).
+ * @param w the width in pixels.
+ * @param h the height in pixels.
+ * @param pixelStride the number of data elements in the step from a sample
+ * in one pixel to the corresponding sample in the next pixel.
+ * @param scanlineStride the number of data elements in the step from a
+ * sample in a pixel to the corresponding sample in the pixel in the next
+ * row.
+ * @param bandOffsets the offset to the first element for each band, with
+ * the size of the array defining the number of bands (<code>null</code>
+ * not permitted).
+ *
+ * @throws IllegalArgumentException if <code>dataType</code> is not one of
+ * the specified values.
+ * @throws IllegalArgumentException if <code>w</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>h</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>w * h</code> exceeds
+ * {@link Integer#MAX_VALUE}.
+ * @throws IllegalArgumentException if <code>pixelStride</code> is negative.
+ * @throws IllegalArgumentException if <code>scanlineStride</code> is less
+ * than or equal to zero.
+ * @throws IllegalArgumentException if <code>bandOffsets</code> has zero
+ * length.
+ */
public ComponentSampleModel(int dataType,
- int w, int h,
- int pixelStride,
- int scanlineStride,
- int[] bandOffsets)
+ int w, int h,
+ int pixelStride,
+ int scanlineStride,
+ int[] bandOffsets)
{
this(dataType, w, h, pixelStride, scanlineStride,
- new int[bandOffsets.length], bandOffsets);
+ new int[bandOffsets.length], bandOffsets);
}
+ /**
+ * Creates a new sample model that assumes that all bands are stored in a
+ * single bank of the {@link DataBuffer}.
+ *
+ * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
+ * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
+ * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT} or
+ * {@link DataBuffer#TYPE_DOUBLE}).
+ * @param w the width in pixels.
+ * @param h the height in pixels.
+ * @param pixelStride the number of data elements in the step from a sample
+ * in one pixel to the corresponding sample in the next pixel.
+ * @param scanlineStride the number of data elements in the step from a
+ * sample in a pixel to the corresponding sample in the pixel in the next
+ * row.
+ * @param bankIndices the index of the bank in which each band is stored
+ * (<code>null</code> not permitted). This array is copied to internal
+ * storage so that subsequent updates to the array do not affect the sample
+ * model.
+ * @param bandOffsets the offset to the first element for each band, with
+ * the size of the array defining the number of bands (<code>null</code>
+ * not permitted). This array is copied to internal storage so that
+ * subsequent updates to the array do not affect the sample model.
+ *
+ * @throws IllegalArgumentException if <code>dataType</code> is not one of
+ * the specified values.
+ * @throws IllegalArgumentException if <code>w</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>h</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>w * h</code> exceeds
+ * {@link Integer#MAX_VALUE}.
+ * @throws IllegalArgumentException if <code>pixelStride</code> is negative.
+ * @throws IllegalArgumentException if <code>scanlineStride</code> is less
+ * than or equal to zero.
+ * @throws IllegalArgumentException if <code>bandOffsets</code> has zero
+ * length.
+ */
public ComponentSampleModel(int dataType,
- int w, int h,
- int pixelStride,
- int scanlineStride,
- int[] bankIndices,
- int[] bandOffsets)
+ int w, int h,
+ int pixelStride,
+ int scanlineStride,
+ int[] bankIndices,
+ int[] bandOffsets)
{
super(dataType, w, h, bandOffsets.length);
- if ((pixelStride<0) || (scanlineStride<0) ||
- (bandOffsets.length<1) ||
- (bandOffsets.length != bankIndices.length))
+
+ // super permits DataBuffer.TYPE_UNDEFINED but this class doesn't...
+ if (dataType == DataBuffer.TYPE_UNDEFINED)
+ throw new IllegalArgumentException("Unsupported dataType.");
+
+ if ((pixelStride < 0) || (scanlineStride < 0) || (bandOffsets.length < 1)
+ || (bandOffsets.length != bankIndices.length))
throw new IllegalArgumentException();
- this.bandOffsets = bandOffsets;
- this.bankIndices = bankIndices;
+ this.bandOffsets = (int[]) bandOffsets.clone();
+ this.bankIndices = (int[]) bankIndices.clone();
this.numBands = bandOffsets.length;
this.numBanks = 0;
- for (int b=0; b<bankIndices.length; b++)
- this.numBanks = Math.max(this.numBanks, bankIndices[b]+1);
+ for (int b = 0; b < bankIndices.length; b++)
+ this.numBanks = Math.max(this.numBanks, bankIndices[b] + 1);
this.scanlineStride = scanlineStride;
this.pixelStride = pixelStride;
@@ -116,68 +207,122 @@ public class ComponentSampleModel extends SampleModel
/* FIXME: May these checks should be reserved for the
PixelInterleavedSampleModel? */
-
+
if (pixelStride == numBands)
{
- tightPixelPacking = true;
- for (int b=0; b<numBands; b++) {
- if ((bandOffsets[b] != b) || (bankIndices[b] !=0))
- {
- tightPixelPacking = false;
- break;
- }
- }
+ tightPixelPacking = true;
+ for (int b = 0; b < numBands; b++) {
+ if ((bandOffsets[b] != b) || (bankIndices[b] != 0))
+ {
+ tightPixelPacking = false;
+ break;
+ }
+ }
}
- }
-
+ }
+
+ /**
+ * Creates a new sample model that is compatible with this one, but with the
+ * specified dimensions.
+ *
+ * @param w the width (must be greater than zero).
+ * @param h the height (must be greater than zero).
+ *
+ * @return A new sample model.
+ */
public SampleModel createCompatibleSampleModel(int w, int h)
{
return new ComponentSampleModel(dataType, w, h, pixelStride,
- scanlineStride, bankIndices,
- bandOffsets);
+ scanlineStride, bankIndices,
+ bandOffsets);
}
+ /**
+ * Creates a new sample model that provides access to a subset of the bands
+ * that this sample model supports.
+ *
+ * @param bands the bands (<code>null</code> not permitted).
+ *
+ * @return The new sample model.
+ */
public SampleModel createSubsetSampleModel(int[] bands)
{
int numBands = bands.length;
int[] bankIndices = new int[numBands];
int[] bandOffsets = new int[numBands];
- for (int b=0; b<numBands; b++)
+ for (int b = 0; b < numBands; b++)
{
- bankIndices[b] = this.bankIndices[bands[b]];
- bandOffsets[b] = this.bandOffsets[bands[b]];
+ bankIndices[b] = this.bankIndices[bands[b]];
+ bandOffsets[b] = this.bandOffsets[bands[b]];
}
return new ComponentSampleModel(dataType, width, height, pixelStride,
- scanlineStride, bankIndices,
- bandOffsets);
+ scanlineStride, bankIndices,
+ bandOffsets);
}
+ /**
+ * Creates a new data buffer that is compatible with this sample model.
+ *
+ * @return The new data buffer.
+ */
public DataBuffer createDataBuffer()
{
// Maybe this value should be precalculated in the constructor?
int highestOffset = 0;
- for (int b=0; b<numBands; b++)
+ for (int b = 0; b < numBands; b++)
{
- highestOffset = Math.max(highestOffset, bandOffsets[b]);
+ highestOffset = Math.max(highestOffset, bandOffsets[b]);
}
- int size = pixelStride*(width-1) + scanlineStride*(height-1) +
- highestOffset + 1;
+ int size = pixelStride * (width - 1) + scanlineStride * (height - 1)
+ + highestOffset + 1;
return Buffers.createBuffer(getDataType(), size, numBanks);
}
+ /**
+ * Returns the offset of the sample in band 0 for the pixel at location
+ * <code>(x, y)</code>. This offset can be used to read a sample value from
+ * a {@link DataBuffer}.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ *
+ * @return The offset.
+ *
+ * @see #getOffset(int, int, int)
+ */
public int getOffset(int x, int y)
{
return getOffset(x, y, 0);
}
+ /**
+ * Returns the offset of the sample in band <code>b</code> for the pixel at
+ * location <code>(x, y)</code>. This offset can be used to read a sample
+ * value from a {@link DataBuffer}.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param b the band index.
+ *
+ * @return The offset.
+ */
public int getOffset(int x, int y, int b)
{
- return bandOffsets[b] + pixelStride*x + scanlineStride*y;
+ return bandOffsets[b] + pixelStride * x + scanlineStride * y;
}
+ /**
+ * Returns the size in bits for each sample (one per band). For this sample
+ * model, each band has the same sample size and this is determined by the
+ * data type for the sample model.
+ *
+ * @return The sample sizes.
+ *
+ * @see SampleModel#getDataType()
+ */
public final int[] getSampleSize()
{
int size = DataBuffer.getDataTypeSize(getDataType());
@@ -187,39 +332,101 @@ public class ComponentSampleModel extends SampleModel
return sizes;
}
+ /**
+ * Returns the size in bits for the samples in the specified band. In this
+ * class, the sample size is the same for every band and is determined from
+ * the data type for the model.
+ *
+ * @param band the band index (ignored here).
+ *
+ * @return The sample size in bits.
+ *
+ * @see SampleModel#getDataType()
+ */
public final int getSampleSize(int band)
{
return DataBuffer.getDataTypeSize(getDataType());
}
+ /**
+ * Returns the indices of the bank(s) in the {@link DataBuffer} used to
+ * store the samples for each band. The returned array is a copy, so that
+ * altering it will not impact the sample model.
+ *
+ * @return The bank indices.
+ */
public final int[] getBankIndices()
{
- return bankIndices;
+ return (int[]) bankIndices.clone();
}
+ /**
+ * Returns the offsets to the first sample in each band. The returned array
+ * is a copy, so that altering it will not impact the sample model.
+ *
+ * @return The offsets.
+ */
public final int[] getBandOffsets()
{
- return bandOffsets;
+ return (int[]) bandOffsets.clone();
}
+ /**
+ * Returns the distance (in terms of element indices) between the sample for
+ * one pixel and the corresponding sample for the equivalent pixel in the
+ * next row. This is used in the calculation of the element offset for
+ * retrieving samples from a {@link DataBuffer}.
+ *
+ * @return The distance between pixel samples in consecutive rows.
+ */
public final int getScanlineStride()
{
return scanlineStride;
}
+ /**
+ * Returns the distance (in terms of element indices) between the sample for
+ * one pixel and the corresponding sample for the next pixel in a row. This
+ * is used in the calculation of the element offset for retrieving samples
+ * from a {@link DataBuffer}.
+ *
+ * @return The distance between pixel samples in the same row.
+ */
public final int getPixelStride()
{
return pixelStride;
}
+ /**
+ * Returns the number of data elements used to store the samples for one
+ * pixel. In this model, this is the same as the number of bands.
+ *
+ * @return The number of data elements used to store the samples for one
+ * pixel.
+ */
public final int getNumDataElements()
{
return numBands;
}
+ /**
+ * Returns the samples for the pixel at location <code>(x, y)</code> in
+ * a primitive array (the array type is determined by the data type for
+ * this model). The <code>obj</code> argument provides an option to supply
+ * an existing array to hold the result, if this is <code>null</code> a new
+ * array will be allocated.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param obj a primitive array that, if not <code>null</code>, will be
+ * used to store and return the sample values.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @return An array of sample values for the specified pixel.
+ */
public Object getDataElements(int x, int y, Object obj, DataBuffer data)
{
- int xyOffset = pixelStride*x + scanlineStride*y;
+ int xyOffset = pixelStride * x + scanlineStride * y;
int[] totalBandDataOffsets = new int[numBands];
@@ -235,124 +442,147 @@ public class ComponentSampleModel extends SampleModel
int[] bankOffsets = data.getOffsets();
- for (int b=0; b<numBands; b++)
+ for (int b = 0; b < numBands; b++)
{
- totalBandDataOffsets[b] =
- bandOffsets[b]+bankOffsets[bankIndices[b]] + xyOffset;
+ totalBandDataOffsets[b] = bandOffsets[b] + bankOffsets[bankIndices[b]]
+ + xyOffset;
}
-
+
try
{
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- DataBufferByte inByte = (DataBufferByte) data;
- byte[] outByte = (byte[]) obj;
- if (outByte == null) outByte = new byte[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outByte[b] = inByte.getData(bankIndices[b])[dOffset];
- }
- return outByte;
-
- case DataBuffer.TYPE_USHORT:
- DataBufferUShort inUShort = (DataBufferUShort) data;
- short[] outUShort = (short[]) obj;
- if (outUShort == null) outUShort = new short[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outUShort[b] = inUShort.getData(bankIndices[b])[dOffset];
- }
- return outUShort;
-
- case DataBuffer.TYPE_SHORT:
- DataBufferShort inShort = (DataBufferShort) data;
- short[] outShort = (short[]) obj;
- if (outShort == null) outShort = new short[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outShort[b] = inShort.getData(bankIndices[b])[dOffset];
- }
- return outShort;
-
- case DataBuffer.TYPE_INT:
- DataBufferInt inInt = (DataBufferInt) data;
- int[] outInt = (int[]) obj;
- if (outInt == null) outInt = new int[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outInt[b] = inInt.getData(bankIndices[b])[dOffset];
- }
- return outInt;
-
- case DataBuffer.TYPE_FLOAT:
- DataBufferFloat inFloat = (DataBufferFloat) data;
- float[] outFloat = (float[]) obj;
- if (outFloat == null) outFloat = new float[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outFloat[b] = inFloat.getData(bankIndices[b])[dOffset];
- }
- return outFloat;
-
- case DataBuffer.TYPE_DOUBLE:
- DataBufferDouble inDouble = (DataBufferDouble) data;
- double[] outDouble = (double[]) obj;
- if (outDouble == null) outDouble = new double[numBands];
-
- for (int b=0; b<numBands; b++)
- {
- int dOffset = totalBandDataOffsets[b];
- outDouble[b] = inDouble.getData(bankIndices[b])[dOffset];
- }
- return outDouble;
-
- default:
- throw new IllegalStateException("unknown transfer type " +
- getTransferType());
- }
+ switch (getTransferType())
+ {
+ case DataBuffer.TYPE_BYTE:
+ DataBufferByte inByte = (DataBufferByte) data;
+ byte[] outByte = (byte[]) obj;
+ if (outByte == null)
+ outByte = new byte[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outByte[b] = inByte.getData(bankIndices[b])[dOffset];
+ }
+ return outByte;
+
+ case DataBuffer.TYPE_USHORT:
+ DataBufferUShort inUShort = (DataBufferUShort) data;
+ short[] outUShort = (short[]) obj;
+ if (outUShort == null)
+ outUShort = new short[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outUShort[b] = inUShort.getData(bankIndices[b])[dOffset];
+ }
+ return outUShort;
+
+ case DataBuffer.TYPE_SHORT:
+ DataBufferShort inShort = (DataBufferShort) data;
+ short[] outShort = (short[]) obj;
+ if (outShort == null)
+ outShort = new short[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outShort[b] = inShort.getData(bankIndices[b])[dOffset];
+ }
+ return outShort;
+
+ case DataBuffer.TYPE_INT:
+ DataBufferInt inInt = (DataBufferInt) data;
+ int[] outInt = (int[]) obj;
+ if (outInt == null)
+ outInt = new int[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outInt[b] = inInt.getData(bankIndices[b])[dOffset];
+ }
+ return outInt;
+
+ case DataBuffer.TYPE_FLOAT:
+ DataBufferFloat inFloat = (DataBufferFloat) data;
+ float[] outFloat = (float[]) obj;
+ if (outFloat == null)
+ outFloat = new float[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outFloat[b] = inFloat.getData(bankIndices[b])[dOffset];
+ }
+ return outFloat;
+
+ case DataBuffer.TYPE_DOUBLE:
+ DataBufferDouble inDouble = (DataBufferDouble) data;
+ double[] outDouble = (double[]) obj;
+ if (outDouble == null)
+ outDouble = new double[numBands];
+
+ for (int b = 0; b < numBands; b++)
+ {
+ int dOffset = totalBandDataOffsets[b];
+ outDouble[b] = inDouble.getData(bankIndices[b])[dOffset];
+ }
+ return outDouble;
+
+ default:
+ throw new IllegalStateException("unknown transfer type "
+ + getTransferType());
+ }
}
catch (ArrayIndexOutOfBoundsException aioobe)
{
- String msg = "While reading data elements, " +
- "x=" + x + ", y=" + y +", " + ", xyOffset=" + xyOffset +
- ", data.getSize()=" + data.getSize() + ": " + aioobe;
- throw new ArrayIndexOutOfBoundsException(msg);
+ String msg = "While reading data elements, " +
+ "x=" + x + ", y=" + y +", " + ", xyOffset=" + xyOffset +
+ ", data.getSize()=" + data.getSize() + ": " + aioobe;
+ throw new ArrayIndexOutOfBoundsException(msg);
}
}
+ /**
+ * Returns the samples for the pixels in the region defined by
+ * <code>(x, y, w, h)</code> in a primitive array (the array type is
+ * determined by the data type for this model). The <code>obj</code>
+ * argument provides an option to supply an existing array to hold the
+ * result, if this is <code>null</code> a new array will be allocated.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param w the width.
+ * @param h the height.
+ * @param obj a primitive array that, if not <code>null</code>, will be
+ * used to store and return the sample values.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @return An array of sample values for the specified pixels.
+ *
+ * @see #setDataElements(int, int, int, int, Object, DataBuffer)
+ */
public Object getDataElements(int x, int y, int w, int h, Object obj,
- DataBuffer data)
+ DataBuffer data)
{
if (!tightPixelPacking)
{
- return super.getDataElements(x, y, w, h, obj, data);
+ return super.getDataElements(x, y, w, h, obj, data);
}
// using get speedup
// We can copy whole rows
- int rowSize = w*numBands;
- int dataSize = rowSize*h;
+ int rowSize = w * numBands;
+ int dataSize = rowSize * h;
- DataBuffer transferBuffer =
- Buffers.createBuffer(getTransferType(), obj, dataSize);
+ DataBuffer transferBuffer = Buffers.createBuffer(getTransferType(), obj,
+ dataSize);
obj = Buffers.getData(transferBuffer);
- int inOffset =
- pixelStride*x +
- scanlineStride*y +
- data.getOffset(); // Assumes only one band is used
+ int inOffset = pixelStride * x + scanlineStride * y + data.getOffset();
+ // Assumes only one band is used
/* We don't add band offsets since we assume that bands have
offsets 0, 1, 2, ... */
@@ -360,189 +590,345 @@ public class ComponentSampleModel extends SampleModel
// See if we can copy everything in one go
if (scanlineStride == rowSize)
{
- // Collapse scan lines:
- rowSize *= h;
- // We ignore scanlineStride since it won't be of any use
- h = 1;
+ // Collapse scan lines:
+ rowSize *= h;
+ // We ignore scanlineStride since it won't be of any use
+ h = 1;
}
int outOffset = 0;
Object inArray = Buffers.getData(data);
- for (int yd = 0; yd<h; yd++)
+ for (int yd = 0; yd < h; yd++)
{
- System.arraycopy(inArray, inOffset, obj, outOffset, rowSize);
- inOffset += scanlineStride;
- outOffset += rowSize;
+ System.arraycopy(inArray, inOffset, obj, outOffset, rowSize);
+ inOffset += scanlineStride;
+ outOffset += rowSize;
}
return obj;
}
+ /**
+ * Sets the samples for the pixels in the region defined by
+ * <code>(x, y, w, h)</code> from a supplied primitive array (the array type
+ * must be consistent with the data type for this model).
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param w the width.
+ * @param h the height.
+ * @param obj a primitive array containing the sample values.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @see #getDataElements(int, int, int, int, Object, DataBuffer)
+ */
public void setDataElements(int x, int y, int w, int h,
- Object obj, DataBuffer data)
+ Object obj, DataBuffer data)
{
if (!tightPixelPacking)
{
- super.setDataElements(x, y, w, h, obj, data);
- return;
+ super.setDataElements(x, y, w, h, obj, data);
+ return;
}
// using set speedup, we can copy whole rows
- int rowSize = w*numBands;
- int dataSize = rowSize*h;
+ int rowSize = w * numBands;
+ int dataSize = rowSize * h;
- DataBuffer transferBuffer =
- Buffers.createBufferFromData(getTransferType(), obj, dataSize);
+ DataBuffer transferBuffer
+ = Buffers.createBufferFromData(getTransferType(), obj, dataSize);
int[] bankOffsets = data.getOffsets();
- int outOffset =
- pixelStride*x +
- scanlineStride*y +
- bankOffsets[0]; // same assuptions as in get...
+ int outOffset = pixelStride * x + scanlineStride * y + bankOffsets[0];
+ // same assumptions as in get...
// See if we can copy everything in one go
if (scanlineStride == rowSize)
{
- // Collapse scan lines:
- rowSize *= h;
- h = 1;
+ // Collapse scan lines:
+ rowSize *= h;
+ h = 1;
}
int inOffset = 0;
Object outArray = Buffers.getData(data);
- for (int yd = 0; yd<h; yd++)
+ for (int yd = 0; yd < h; yd++)
{
- System.arraycopy(obj, inOffset, outArray, outOffset, rowSize);
- outOffset += scanlineStride;
- inOffset += rowSize;
+ System.arraycopy(obj, inOffset, outArray, outOffset, rowSize);
+ outOffset += scanlineStride;
+ inOffset += rowSize;
}
}
+ /**
+ * Returns all the samples for the pixel at location <code>(x, y)</code>
+ * stored in the specified data buffer.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param iArray an array that will be populated with the sample values and
+ * returned as the result. The size of this array should be equal to the
+ * number of bands in the model. If the array is <code>null</code>, a new
+ * array is created.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @return The samples for the specified pixel.
+ *
+ * @see #setPixel(int, int, int[], DataBuffer)
+ */
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
{
- int offset = pixelStride*x + scanlineStride*y;
- if (iArray == null) iArray = new int[numBands];
- for (int b=0; b<numBands; b++)
+ int offset = pixelStride * x + scanlineStride * y;
+ if (iArray == null)
+ iArray = new int[numBands];
+ for (int b = 0; b < numBands; b++)
{
- iArray[b] = data.getElem(bankIndices[b], offset+bandOffsets[b]);
+ iArray[b] = data.getElem(bankIndices[b], offset + bandOffsets[b]);
}
return iArray;
}
+ /**
+ * Returns the samples for all the pixels in a rectangular region.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param w the width.
+ * @param h the height.
+ * @param iArray an array that if non-<code>null</code> will be populated
+ * with the sample values and returned as the result.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @return The samples for all the pixels in the rectangle.
+ */
public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
+ DataBuffer data)
{
- int offset = pixelStride*x + scanlineStride*y;
- if (iArray == null) iArray = new int[numBands*w*h];
+ int offset = pixelStride * x + scanlineStride * y;
+ if (iArray == null)
+ iArray = new int[numBands * w * h];
int outOffset = 0;
- for (y=0; y<h; y++)
+ for (y = 0; y < h; y++)
{
- int lineOffset = offset;
- for (x=0; x<w; x++)
- {
- for (int b=0; b<numBands; b++)
- {
- iArray[outOffset++] =
- data.getElem(bankIndices[b], lineOffset+bandOffsets[b]);
- }
- lineOffset += pixelStride;
- }
- offset += scanlineStride;
+ int lineOffset = offset;
+ for (x = 0; x < w; x++)
+ {
+ for (int b = 0; b < numBands; b++)
+ {
+ iArray[outOffset++]
+ = data.getElem(bankIndices[b], lineOffset+bandOffsets[b]);
+ }
+ lineOffset += pixelStride;
+ }
+ offset += scanlineStride;
}
return iArray;
}
-
+
+ /**
+ * Returns the sample for band <code>b</code> of the pixel at
+ * <code>(x, y)</code> that is stored in the specified data buffer.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param b the band index.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @return The sample value.
+ *
+ * @see #setSample(int, int, int, int, DataBuffer)
+ */
public int getSample(int x, int y, int b, DataBuffer data)
{
return data.getElem(bankIndices[b], getOffset(x, y, b));
}
+ /**
+ * Sets the samples for the pixel at location <code>(x, y)</code> from the
+ * supplied primitive array (the array type must be consistent with the data
+ * type for this model).
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param obj a primitive array containing the pixel's sample values.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @see #setDataElements(int, int, Object, DataBuffer)
+ */
public void setDataElements(int x, int y, Object obj, DataBuffer data)
{
- int offset = pixelStride*x + scanlineStride*y;
+ int offset = pixelStride * x + scanlineStride * y;
int[] totalBandDataOffsets = new int[numBands];
int[] bankOffsets = data.getOffsets();
- for (int b=0; b<numBands; b++)
- totalBandDataOffsets[b] =
- bandOffsets[b]+bankOffsets[bankIndices[b]] + offset;
+ for (int b = 0; b < numBands; b++)
+ totalBandDataOffsets[b] = bandOffsets[b] + bankOffsets[bankIndices[b]]
+ + offset;
switch (getTransferType())
{
case DataBuffer.TYPE_BYTE:
- {
- DataBufferByte out = (DataBufferByte) data;
- byte[] in = (byte[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferByte out = (DataBufferByte) data;
+ byte[] in = (byte[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
case DataBuffer.TYPE_USHORT:
- {
- DataBufferUShort out = (DataBufferUShort) data;
- short[] in = (short[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferUShort out = (DataBufferUShort) data;
+ short[] in = (short[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
case DataBuffer.TYPE_SHORT:
- {
- DataBufferShort out = (DataBufferShort) data;
- short[] in = (short[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferShort out = (DataBufferShort) data;
+ short[] in = (short[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
case DataBuffer.TYPE_INT:
- {
- DataBufferInt out = (DataBufferInt) data;
- int[] in = (int[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferInt out = (DataBufferInt) data;
+ int[] in = (int[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
case DataBuffer.TYPE_FLOAT:
- {
- DataBufferFloat out = (DataBufferFloat) data;
- float[] in = (float[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferFloat out = (DataBufferFloat) data;
+ float[] in = (float[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
case DataBuffer.TYPE_DOUBLE:
- {
- DataBufferDouble out = (DataBufferDouble) data;
- double[] in = (double[]) obj;
-
- for (int b=0; b<numBands; b++)
- out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
-
- return;
- }
+ {
+ DataBufferDouble out = (DataBufferDouble) data;
+ double[] in = (double[]) obj;
+
+ for (int b = 0; b < numBands; b++)
+ out.getData(bankIndices[b])[totalBandDataOffsets[b]] = in[b];
+
+ return;
+ }
default:
- throw new UnsupportedOperationException("transfer type not " +
- "implemented");
+ throw new UnsupportedOperationException("transfer type not " +
+ "implemented");
}
}
+ /**
+ * Sets the sample values for the pixel at location <code>(x, y)</code>
+ * stored in the specified data buffer.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param iArray the pixel sample values (<code>null</code> not permitted).
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @see #getPixel(int, int, int[], DataBuffer)
+ */
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
{
- int offset = pixelStride*x + scanlineStride*y;
- for (int b=0; b<numBands; b++)
- data.setElem(bankIndices[b], offset+bandOffsets[b], iArray[b]);
+ int offset = pixelStride * x + scanlineStride * y;
+ for (int b = 0; b < numBands; b++)
+ data.setElem(bankIndices[b], offset + bandOffsets[b], iArray[b]);
}
+ /**
+ * Sets the sample value for band <code>b</code> of the pixel at location
+ * <code>(x, y)</code> in the specified data buffer.
+ *
+ * @param x the x-coordinate.
+ * @param y the y-coordinate.
+ * @param b the band index.
+ * @param s the sample value.
+ * @param data the data buffer (<code>null</code> not permitted).
+ *
+ * @see #getSample(int, int, int, DataBuffer)
+ */
public void setSample(int x, int y, int b, int s, DataBuffer data)
{
data.setElem(bankIndices[b], getOffset(x, y, b), s);
}
+
+ /**
+ * Tests this sample model for equality with an arbitrary object. Returns
+ * <code>true</code> if and only if:
+ * <ul>
+ * <li><code>obj</code> is not <code>null</code>;</li>
+ * <li><code>obj</code> is an instance of <code>ComponentSampleModel</code>;
+ * </li>
+ * <li>both models have the same values for the <code>dataType</code>,
+ * <code>width</code>, <code>height</code>, <code>pixelStride</code>,
+ * <code>scanlineStride</code>, <code>bandOffsets</code> and
+ * <code>bankIndices</code> fields.</li>
+ * </ul>
+ *
+ * @param obj the object to test (<code>null</code> permitted).
+ *
+ * @return <code>true</code> if this sample model is equal to
+ * <code>obj</code>, and <code>false</code> otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj == null)
+ return false;
+ if (! (obj instanceof ComponentSampleModel))
+ return false;
+ ComponentSampleModel that = (ComponentSampleModel) obj;
+ if (this.dataType != that.dataType)
+ return false;
+ if (this.width != that.width)
+ return false;
+ if (this.height != that.height)
+ return false;
+ if (this.pixelStride != that.pixelStride)
+ return false;
+ if (this.scanlineStride != that.scanlineStride)
+ return false;
+ if (! Arrays.equals(this.bandOffsets, that.bandOffsets))
+ return false;
+ if (! Arrays.equals(this.bankIndices, that.bankIndices))
+ return false;
+ // couldn't find any difference, so...
+ return true;
+ }
+
+ /**
+ * Returns a hash code for this sample model.
+ *
+ * @return The hash code.
+ */
+ public int hashCode()
+ {
+ // this computation is based on the method described in Chapter 3
+ // of Joshua Bloch's Effective Java...
+ int result = 17;
+ result = 37 * result + dataType;
+ result = 37 * result + width;
+ result = 37 * result + height;
+ result = 37 * result + pixelStride;
+ result = 37 * result + scanlineStride;
+ for (int i = 0; i < bandOffsets.length; i++)
+ result = 37 * result + bandOffsets[i];
+ for (int i = 0; i < bankIndices.length; i++)
+ result = 37 * result + bankIndices[i];
+ return result;
+ }
}
diff --git a/libjava/classpath/java/awt/image/ConvolveOp.java b/libjava/classpath/java/awt/image/ConvolveOp.java
index 49ca2a6..1f73f75 100644
--- a/libjava/classpath/java/awt/image/ConvolveOp.java
+++ b/libjava/classpath/java/awt/image/ConvolveOp.java
@@ -110,7 +110,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
* @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage,
* java.awt.image.BufferedImage)
*/
- public BufferedImage filter(BufferedImage src, BufferedImage dst)
+ public final BufferedImage filter(BufferedImage src, BufferedImage dst)
{
if (src == dst)
throw new IllegalArgumentException();
@@ -163,7 +163,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getRenderingHints()
*/
- public RenderingHints getRenderingHints()
+ public final RenderingHints getRenderingHints()
{
return hints;
}
@@ -181,7 +181,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
*
* @return The convolution kernel.
*/
- public Kernel getKernel()
+ public final Kernel getKernel()
{
return (Kernel) kernel.clone();
}
@@ -190,7 +190,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
* @see java.awt.image.RasterOp#filter(java.awt.image.Raster,
* java.awt.image.WritableRaster)
*/
- public WritableRaster filter(Raster src, WritableRaster dest) {
+ public final WritableRaster filter(Raster src, WritableRaster dest) {
if (src == dest)
throw new IllegalArgumentException();
if (src.getWidth() < kernel.getWidth() ||
@@ -309,7 +309,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
*/
- public Rectangle2D getBounds2D(BufferedImage src)
+ public final Rectangle2D getBounds2D(BufferedImage src)
{
return src.getRaster().getBounds();
}
@@ -317,7 +317,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
*/
- public Rectangle2D getBounds2D(Raster src)
+ public final Rectangle2D getBounds2D(Raster src)
{
return src.getBounds();
}
@@ -330,7 +330,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp
* @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D,
* java.awt.geom.Point2D)
*/
- public Point2D getPoint2D(Point2D src, Point2D dst)
+ public final Point2D getPoint2D(Point2D src, Point2D dst)
{
if (dst == null) return (Point2D)src.clone();
dst.setLocation(src);
diff --git a/libjava/classpath/java/awt/image/DirectColorModel.java b/libjava/classpath/java/awt/image/DirectColorModel.java
index 4f37151..579dc97 100644
--- a/libjava/classpath/java/awt/image/DirectColorModel.java
+++ b/libjava/classpath/java/awt/image/DirectColorModel.java
@@ -167,7 +167,7 @@ public class DirectColorModel extends PackedColorModel
private int extractAndNormalizeSample(int pixel, int component)
{
int value = extractAndScaleSample(pixel, component);
- if (hasAlpha() && isAlphaPremultiplied())
+ if (hasAlpha() && isAlphaPremultiplied() && getAlpha(pixel) != 0)
value = value*255/getAlpha(pixel);
return value;
}
diff --git a/libjava/classpath/java/awt/image/LookupOp.java b/libjava/classpath/java/awt/image/LookupOp.java
index f131daa..46e72fe 100644
--- a/libjava/classpath/java/awt/image/LookupOp.java
+++ b/libjava/classpath/java/awt/image/LookupOp.java
@@ -81,7 +81,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage, java.awt.image.BufferedImage)
*/
- public BufferedImage filter(BufferedImage src, BufferedImage dst)
+ public final BufferedImage filter(BufferedImage src, BufferedImage dst)
{
if (src.getColorModel() instanceof IndexColorModel)
throw new IllegalArgumentException("LookupOp.filter: IndexColorModel "
@@ -149,7 +149,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
*/
- public Rectangle2D getBounds2D(BufferedImage src)
+ public final Rectangle2D getBounds2D(BufferedImage src)
{
return src.getRaster().getBounds();
}
@@ -173,7 +173,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
* @param dst The destination point.
* @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D, java.awt.geom.Point2D)
*/
- public Point2D getPoint2D(Point2D src, Point2D dst)
+ public final Point2D getPoint2D(Point2D src, Point2D dst)
{
if (dst == null)
return (Point2D) src.clone();
@@ -183,7 +183,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
}
/** Return the LookupTable for this op. */
- public LookupTable getTable()
+ public final LookupTable getTable()
{
return lut;
}
@@ -191,7 +191,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getRenderingHints()
*/
- public RenderingHints getRenderingHints()
+ public final RenderingHints getRenderingHints()
{
return hints;
}
@@ -209,7 +209,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
* component but not the same as src and dest.
* @see java.awt.image.RasterOp#filter(java.awt.image.Raster, java.awt.image.WritableRaster)
*/
- public WritableRaster filter(Raster src, WritableRaster dest)
+ public final WritableRaster filter(Raster src, WritableRaster dest)
{
if (dest == null)
// Allocate a raster if needed
@@ -236,7 +236,7 @@ public class LookupOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
*/
- public Rectangle2D getBounds2D(Raster src)
+ public final Rectangle2D getBounds2D(Raster src)
{
return src.getBounds();
}
diff --git a/libjava/classpath/java/awt/image/ReplicateScaleFilter.java b/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
index d76f9db..6d5099d 100644
--- a/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
+++ b/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
@@ -46,7 +46,6 @@ import java.util.Hashtable;
* exact method is not defined by Sun but some sort of fast Box filter should
* probably be correct.
* <br>
- * Currently this filter does nothing and needs to be implemented.
*
* @author C. Brian Jones (cbj@gnu.org)
*/
diff --git a/libjava/classpath/java/awt/image/RescaleOp.java b/libjava/classpath/java/awt/image/RescaleOp.java
index 35b42f7..d5b2969 100644
--- a/libjava/classpath/java/awt/image/RescaleOp.java
+++ b/libjava/classpath/java/awt/image/RescaleOp.java
@@ -93,7 +93,7 @@ public class RescaleOp implements BufferedImageOp, RasterOp
/* (non-Javadoc)
* @see java.awt.image.BufferedImageOp#getRenderingHints()
*/
- public RenderingHints getRenderingHints()
+ public final RenderingHints getRenderingHints()
{
return hints;
}
diff --git a/libjava/classpath/java/awt/image/SampleModel.java b/libjava/classpath/java/awt/image/SampleModel.java
index 1159662..6e3fd40 100644
--- a/libjava/classpath/java/awt/image/SampleModel.java
+++ b/libjava/classpath/java/awt/image/SampleModel.java
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation
+/* Copyright (C) 2000, 2001, 2002, 2005, 2006, Free Software Foundation
This file is part of GNU Classpath.
@@ -57,15 +57,43 @@ public abstract class SampleModel
*/
protected int dataType;
+ /**
+ * Creates a new sample model with the specified attributes.
+ *
+ * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
+ * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
+ * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT},
+ * {@link DataBuffer#TYPE_DOUBLE} or {@link DataBuffer#TYPE_UNDEFINED}).
+ * @param w the width in pixels (must be greater than zero).
+ * @param h the height in pixels (must be greater than zero).
+ * @param numBands the number of bands (must be greater than zero).
+ *
+ * @throws IllegalArgumentException if <code>dataType</code> is not one of
+ * the listed values.
+ * @throws IllegalArgumentException if <code>w</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>h</code> is less than or equal
+ * to zero.
+ * @throws IllegalArgumentException if <code>w * h</code> is greater than
+ * {@link Integer#MAX_VALUE}.
+ */
public SampleModel(int dataType, int w, int h, int numBands)
{
+ if (dataType != DataBuffer.TYPE_UNDEFINED)
+ if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_DOUBLE)
+ throw new IllegalArgumentException("Unrecognised 'dataType' argument.");
+
if ((w <= 0) || (h <= 0))
throw new IllegalArgumentException((w <= 0 ? " width<=0" : " width is ok")
- +(h <= 0 ? " height<=0" : " height is ok"));
-
- // FIXME: How can an int be greater than Integer.MAX_VALUE?
- // FIXME: How do we identify an unsupported data type?
-
+ + (h <= 0 ? " height<=0" : " height is ok"));
+
+ long area = (long) w * (long) h;
+ if (area > Integer.MAX_VALUE)
+ throw new IllegalArgumentException("w * h exceeds Integer.MAX_VALUE.");
+
+ if (numBands <= 0)
+ throw new IllegalArgumentException("Requires numBands > 0.");
+
this.dataType = dataType;
this.width = w;
this.height = h;
@@ -102,8 +130,10 @@ public abstract class SampleModel
public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
{
- if (iArray == null) iArray = new int[numBands];
- for (int b=0; b<numBands; b++) iArray[b] = getSample(x, y, b, data);
+ if (iArray == null)
+ iArray = new int[numBands];
+ for (int b = 0; b < numBands; b++)
+ iArray[b] = getSample(x, y, b, data);
return iArray;
}
@@ -121,94 +151,95 @@ public abstract class SampleModel
* DataBuffer.TYPE_USHORT, then a short[] object is returned.
*/
public abstract Object getDataElements(int x, int y, Object obj,
- DataBuffer data);
+ DataBuffer data);
public Object getDataElements(int x, int y, int w, int h, Object obj,
- DataBuffer data)
+ DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int numDataElements = getNumDataElements();
- int dataSize = numDataElements*size;
+ int dataSize = numDataElements * size;
if (obj == null)
{
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- obj = new byte[dataSize];
- break;
- case DataBuffer.TYPE_USHORT:
- obj = new short[dataSize];
- break;
- case DataBuffer.TYPE_INT:
- obj = new int[dataSize];
- break;
- default:
- // Seems like the only sensible thing to do.
- throw new ClassCastException();
- }
+ switch (getTransferType())
+ {
+ case DataBuffer.TYPE_BYTE:
+ obj = new byte[dataSize];
+ break;
+ case DataBuffer.TYPE_USHORT:
+ obj = new short[dataSize];
+ break;
+ case DataBuffer.TYPE_INT:
+ obj = new int[dataSize];
+ break;
+ default:
+ // Seems like the only sensible thing to do.
+ throw new ClassCastException();
+ }
}
Object pixelData = null;
int outOffset = 0;
- for (int yy = y; yy<(y+h); yy++)
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx = x; xx<(x+w); xx++)
- {
- pixelData = getDataElements(xx, yy, pixelData, data);
- System.arraycopy(pixelData, 0, obj, outOffset,
- numDataElements);
- outOffset += numDataElements;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ pixelData = getDataElements(xx, yy, pixelData, data);
+ System.arraycopy(pixelData, 0, obj, outOffset,
+ numDataElements);
+ outOffset += numDataElements;
+ }
}
return obj;
}
public abstract void setDataElements(int x, int y, Object obj,
- DataBuffer data);
+ DataBuffer data);
public void setDataElements(int x, int y, int w, int h,
- Object obj, DataBuffer data)
+ Object obj, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int numDataElements = getNumDataElements();
- int dataSize = numDataElements*size;
+ int dataSize = numDataElements * size;
Object pixelData;
switch (getTransferType())
{
case DataBuffer.TYPE_BYTE:
- pixelData = new byte[numDataElements];
- break;
+ pixelData = new byte[numDataElements];
+ break;
case DataBuffer.TYPE_USHORT:
- pixelData = new short[numDataElements];
- break;
+ pixelData = new short[numDataElements];
+ break;
case DataBuffer.TYPE_INT:
- pixelData = new int[numDataElements];
- break;
+ pixelData = new int[numDataElements];
+ break;
default:
- // Seems like the only sensible thing to do.
- throw new ClassCastException();
+ // Seems like the only sensible thing to do.
+ throw new ClassCastException();
}
int inOffset = 0;
- for (int yy=y; yy<(y+h); yy++)
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- System.arraycopy(obj, inOffset, pixelData, 0,
- numDataElements);
- setDataElements(xx, yy, pixelData, data);
- inOffset += numDataElements;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ System.arraycopy(obj, inOffset, pixelData, 0,
+ numDataElements);
+ setDataElements(xx, yy, pixelData, data);
+ inOffset += numDataElements;
+ }
}
}
public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
{
- if (fArray == null) fArray = new float[numBands];
+ if (fArray == null)
+ fArray = new float[numBands];
- for (int b=0; b<numBands; b++)
+ for (int b = 0; b < numBands; b++)
{
fArray[b] = getSampleFloat(x, y, b, data);
}
@@ -216,10 +247,11 @@ public abstract class SampleModel
}
public double[] getPixel(int x, int y, double[] dArray, DataBuffer data) {
- if (dArray == null) dArray = new double[numBands];
- for (int b=0; b<numBands; b++)
+ if (dArray == null)
+ dArray = new double[numBands];
+ for (int b = 0; b < numBands; b++)
{
- dArray[b] = getSampleDouble(x, y, b, data);
+ dArray[b] = getSampleDouble(x, y, b, data);
}
return dArray;
}
@@ -227,20 +259,21 @@ public abstract class SampleModel
/* FIXME: Should it return a banded or pixel interleaved array of
samples? (Assume interleaved.) */
public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
+ DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
int[] pixel = null;
- if (iArray == null) iArray = new int[w*h*numBands];
- for (int yy=y; yy<(y+h); yy++)
+ if (iArray == null)
+ iArray = new int[w * h * numBands];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, iArray, outOffset, numBands);
- outOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ pixel = getPixel(xx, yy, pixel, data);
+ System.arraycopy(pixel, 0, iArray, outOffset, numBands);
+ outOffset += numBands;
+ }
}
return iArray;
}
@@ -248,20 +281,20 @@ public abstract class SampleModel
/* FIXME: Should it return a banded or pixel interleaved array of
samples? (Assume interleaved.) */
public float[] getPixels(int x, int y, int w, int h, float[] fArray,
- DataBuffer data)
+ DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
float[] pixel = null;
- if (fArray == null) fArray = new float[w*h*numBands];
- for (int yy=y; yy<(y+h); yy++)
+ if (fArray == null) fArray = new float[w * h * numBands];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, fArray, outOffset, numBands);
- outOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ pixel = getPixel(xx, yy, pixel, data);
+ System.arraycopy(pixel, 0, fArray, outOffset, numBands);
+ outOffset += numBands;
+ }
}
return fArray;
}
@@ -269,20 +302,21 @@ public abstract class SampleModel
/* FIXME: Should it return a banded or pixel interleaved array of
samples? (Assume interleaved.) */
public double[] getPixels(int x, int y, int w, int h, double[] dArray,
- DataBuffer data)
+ DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
double[] pixel = null;
- if (dArray == null) dArray = new double[w*h*numBands];
- for (int yy=y; yy<(y+h); yy++)
+ if (dArray == null)
+ dArray = new double[w * h * numBands];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, dArray, outOffset, numBands);
- outOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ pixel = getPixel(xx, yy, pixel, data);
+ System.arraycopy(pixel, 0, dArray, outOffset, numBands);
+ outOffset += numBands;
+ }
}
return dArray;
}
@@ -300,179 +334,185 @@ public abstract class SampleModel
}
public int[] getSamples(int x, int y, int w, int h, int b,
- int[] iArray, DataBuffer data)
+ int[] iArray, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
- if (iArray == null) iArray = new int[size];
- for (int yy=y; yy<(y+h); yy++)
+ if (iArray == null)
+ iArray = new int[size];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- iArray[outOffset++] = getSample(xx, yy, b, data);
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ iArray[outOffset++] = getSample(xx, yy, b, data);
+ }
}
return iArray;
}
public float[] getSamples(int x, int y, int w, int h, int b,
- float[] fArray, DataBuffer data)
+ float[] fArray, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
- if (fArray == null) fArray = new float[size];
- for (int yy=y; yy<(y+h); yy++)
+ if (fArray == null)
+ fArray = new float[size];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
+ }
}
return fArray;
}
public double[] getSamples(int x, int y, int w, int h, int b,
- double[] dArray, DataBuffer data)
+ double[] dArray, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int outOffset = 0;
- if (dArray == null) dArray = new double[size];
- for (int yy=y; yy<(y+h); yy++)
+ if (dArray == null)
+ dArray = new double[size];
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
+ }
}
return dArray;
}
public void setPixel(int x, int y, int[] iArray, DataBuffer data)
{
- for (int b=0; b<numBands; b++) setSample(x, y, b, iArray[b], data);
+ for (int b = 0; b < numBands; b++)
+ setSample(x, y, b, iArray[b], data);
}
public void setPixel(int x, int y, float[] fArray, DataBuffer data)
{
- for (int b=0; b<numBands; b++) setSample(x, y, b, fArray[b], data);
+ for (int b = 0; b < numBands; b++)
+ setSample(x, y, b, fArray[b], data);
}
public void setPixel(int x, int y, double[] dArray, DataBuffer data)
{
- for (int b=0; b<numBands; b++) setSample(x, y, b, dArray[b], data);
+ for (int b = 0; b < numBands; b++)
+ setSample(x, y, b, dArray[b], data);
}
public void setPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
+ DataBuffer data)
{
int inOffset = 0;
int[] pixel = new int[numBands];
- for (int yy=y; yy<(y+h); yy++)
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- System.arraycopy(iArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ System.arraycopy(iArray, inOffset, pixel, 0, numBands);
+ setPixel(xx, yy, pixel, data);
+ inOffset += numBands;
+ }
}
}
public void setPixels(int x, int y, int w, int h, float[] fArray,
- DataBuffer data)
+ DataBuffer data)
{
int inOffset = 0;
float[] pixel = new float[numBands];
- for (int yy=y; yy<(y+h); yy++)
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- System.arraycopy(fArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ System.arraycopy(fArray, inOffset, pixel, 0, numBands);
+ setPixel(xx, yy, pixel, data);
+ inOffset += numBands;
+ }
}
}
public void setPixels(int x, int y, int w, int h, double[] dArray,
- DataBuffer data)
+ DataBuffer data)
{
int inOffset = 0;
double[] pixel = new double[numBands];
- for (int yy=y; yy<(y+h); yy++)
+ for (int yy = y; yy < (y + h); yy++)
{
- for (int xx=x; xx<(x+w); xx++)
- {
- System.arraycopy(dArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
+ for (int xx = x; xx < (x + w); xx++)
+ {
+ System.arraycopy(dArray, inOffset, pixel, 0, numBands);
+ setPixel(xx, yy, pixel, data);
+ inOffset += numBands;
+ }
}
}
public abstract void setSample(int x, int y, int b, int s,
- DataBuffer data);
+ DataBuffer data);
public void setSample(int x, int y, int b, float s,
- DataBuffer data)
+ DataBuffer data)
{
setSample(x, y, b, (int) s, data);
}
public void setSample(int x, int y, int b, double s,
- DataBuffer data)
+ DataBuffer data)
{
setSample(x, y, b, (float) s, data);
}
public void setSamples(int x, int y, int w, int h, int b,
- int[] iArray, DataBuffer data)
+ int[] iArray, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
int inOffset = 0;
- for (int yy=y; yy<(y+h); yy++)
- for (int xx=x; xx<(x+w); xx++)
- setSample(xx, yy, b, iArray[inOffset++], data);
+ for (int yy = y; yy < (y + h); yy++)
+ for (int xx = x; xx < (x + w); xx++)
+ setSample(xx, yy, b, iArray[inOffset++], data);
}
public void setSamples(int x, int y, int w, int h, int b,
- float[] fArray, DataBuffer data)
+ float[] fArray, DataBuffer data)
{
- int size = w*h;
+ int size = w * h;
+ int inOffset = 0;
+ for (int yy = y; yy < (y + h); yy++)
+ for (int xx = x; xx < (x + w); xx++)
+ setSample(xx, yy, b, fArray[inOffset++], data);
+
+ }
+
+ public void setSamples(int x, int y, int w, int h, int b,
+ double[] dArray, DataBuffer data) {
+ int size = w * h;
int inOffset = 0;
- for (int yy=y; yy<(y+h); yy++)
- for (int xx=x; xx<(x+w); xx++)
- setSample(xx, yy, b, fArray[inOffset++], data);
-
- }
-
- public void setSamples(int x, int y, int w, int h, int b,
- double[] dArray, DataBuffer data) {
- int size = w*h;
- int inOffset = 0;
- for (int yy=y; yy<(y+h); yy++)
- for (int xx=x; xx<(x+w); xx++)
- setSample(xx, yy, b, dArray[inOffset++], data);
- }
-
- public abstract SampleModel createCompatibleSampleModel(int w, int h);
-
- /**
- * Return a SampleModel with a subset of the bands in this model.
- *
- * Selects bands.length bands from this sample model. The bands chosen
- * are specified in the indices of bands[]. This also permits permuting
- * the bands as well as taking a subset. Thus, giving an array with
- * 1, 2, 3, ..., numbands, will give an identical sample model.
- *
- * @param bands Array with band indices to include.
- * @return A new sample model
- */
- public abstract SampleModel createSubsetSampleModel(int[] bands);
-
- public abstract DataBuffer createDataBuffer();
-
- public abstract int[] getSampleSize();
-
- public abstract int getSampleSize(int band);
+ for (int yy = y; yy < (y + h); yy++)
+ for (int xx = x; xx < (x + w); xx++)
+ setSample(xx, yy, b, dArray[inOffset++], data);
+ }
+
+ public abstract SampleModel createCompatibleSampleModel(int w, int h);
+
+ /**
+ * Return a SampleModel with a subset of the bands in this model.
+ *
+ * Selects bands.length bands from this sample model. The bands chosen
+ * are specified in the indices of bands[]. This also permits permuting
+ * the bands as well as taking a subset. Thus, giving an array with
+ * 1, 2, 3, ..., numbands, will give an identical sample model.
+ *
+ * @param bands Array with band indices to include.
+ * @return A new sample model
+ */
+ public abstract SampleModel createSubsetSampleModel(int[] bands);
+
+ public abstract DataBuffer createDataBuffer();
+
+ public abstract int[] getSampleSize();
+
+ public abstract int getSampleSize(int band);
}
diff --git a/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java b/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
index 78f3051..d8cca65 100644
--- a/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
+++ b/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
@@ -1,5 +1,5 @@
/* RenderableImageProducer.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,42 +38,129 @@ exception statement from your version. */
package java.awt.image.renderable;
+import java.awt.image.ColorModel;
+import java.awt.image.DataBuffer;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
+import java.util.ArrayList;
+import java.util.Iterator;
public class RenderableImageProducer implements ImageProducer, Runnable
{
+ private RenderableImage image;
+ private RenderContext context;
+ private ArrayList consumers = new ArrayList();
+
public RenderableImageProducer(RenderableImage image, RenderContext context)
{
- throw new Error("not implemented");
+ this.image = image;
+ this.context = context;
}
public void setRenderContext(RenderContext context)
{
+ this.context = context;
}
public void addConsumer(ImageConsumer consumer)
{
+ synchronized (consumers)
+ {
+ if (! consumers.contains(consumer))
+ consumers.add(consumer);
+ }
}
public boolean isConsumer(ImageConsumer consumer)
{
- return false;
+ synchronized (consumers)
+ {
+ return consumers.contains(consumer);
+ }
}
public void removeConsumer(ImageConsumer consumer)
{
+ synchronized (consumers)
+ {
+ consumers.remove(consumer);
+ }
}
public void startProduction(ImageConsumer consumer)
{
+ addConsumer(consumer);
+ Thread t = new Thread(this, "RenderableImageProducerWorker");
+ t.start();
}
public void requestTopDownLeftRightResend(ImageConsumer consumer)
{
+ // Do nothing. The contract says we can ignore this call, so we do.
}
public void run()
{
+ // This isn't ideal but it avoids fail-fast problems.
+ // Alternatively, we could clone 'consumers' here.
+ synchronized (consumers)
+ {
+ RenderedImage newImage;
+ if (context == null)
+ newImage = image.createDefaultRendering();
+ else
+ newImage = image.createRendering(context);
+ Raster newData = newImage.getData();
+ ColorModel colorModel = newImage.getColorModel();
+ if (colorModel == null)
+ colorModel = ColorModel.getRGBdefault();
+ SampleModel sampleModel = newData.getSampleModel();
+ DataBuffer dataBuffer = newData.getDataBuffer();
+ int width = newData.getWidth();
+ int height = newData.getHeight();
+
+ // Initialize the consumers.
+ Iterator it = consumers.iterator();
+ while (it.hasNext())
+ {
+ ImageConsumer target = (ImageConsumer) it.next();
+ target.setHints(ImageConsumer.COMPLETESCANLINES
+ | ImageConsumer.SINGLEFRAME
+ | ImageConsumer.SINGLEPASS
+ | ImageConsumer.TOPDOWNLEFTRIGHT);
+ target.setDimensions(width, height);
+ }
+
+ // Work in scan-line order.
+ int[] newLine = new int[width];
+ int[] bands = new int[sampleModel.getNumBands()];
+ for (int y = 0; y < height; ++y)
+ {
+ for (int x = 0; x < width; ++x)
+ {
+ sampleModel.getPixel(x, y, bands, dataBuffer);
+ newLine[x] = colorModel.getDataElement(bands, 0);
+ }
+
+ // Tell the consumers about the new scan line.
+ it = consumers.iterator();
+ while (it.hasNext())
+ {
+ ImageConsumer target = (ImageConsumer) it.next();
+ target.setPixels(0, y, width, 1, colorModel, newLine, 0, width);
+ }
+ }
+
+ // Tell the consumers that we're done.
+ it = consumers.iterator();
+ while (it.hasNext())
+ {
+ ImageConsumer target = (ImageConsumer) it.next();
+ target.imageComplete(ImageConsumer.STATICIMAGEDONE);
+ }
+ }
}
} // class RenderableImageProducer
diff --git a/libjava/classpath/java/beans/beancontext/BeanContext.java b/libjava/classpath/java/beans/beancontext/BeanContext.java
index 3d1be7f..02f4a1a 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContext.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContext.java
@@ -198,7 +198,7 @@ public interface BeanContext
* @return the created Bean
*
* @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String)
- * @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.lang.BeanContext)
+ * @see java.beans.Beans#instantiate(java.lang.ClassLoader,java.lang.String,java.beans.beancontext.BeanContext)
* @exception IOException if there is an I/O problem during
* instantiation.
* @exception ClassNotFoundException if a serialized Bean's class
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java b/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java
index 3176542..9560889 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContextMembershipEvent.java
@@ -52,7 +52,9 @@ import java.util.Iterator;
* @see java.beans.beancontext.BeanContextMembershipListener
*/
public class BeanContextMembershipEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = 3499346510334590959L;
+
+ /**
* The children that were added or removed.
*/
protected Collection children;
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java b/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java
index eea10f2..6dc2c38 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContextServiceAvailableEvent.java
@@ -49,7 +49,9 @@ import java.util.Iterator;
*/
public class BeanContextServiceAvailableEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = -5333985775656400778L;
+
+ /**
* The <code>Class</code> representing the service which is now
* available.
*/
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java b/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java
index dfa2b89..1f5ebd3 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContextServiceRevokedEvent.java
@@ -47,7 +47,9 @@ package java.beans.beancontext;
*/
public class BeanContextServiceRevokedEvent extends BeanContextEvent {
- /**
+ private static final long serialVersionUID = -1295543154724961754L;
+
+ /**
* The <code>Class</code> representing the service which is now
* available.
*/
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java b/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java
index 5455adb..4da523e 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContextServicesSupport.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.beans.beancontext;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
@@ -62,6 +64,11 @@ public class BeanContextServicesSupport
extends BeanContextSupport.BCSChild
{
private static final long serialVersionUID = -3263851306889194873L;
+
+ BCSSChild(Object targetChild, Object peer)
+ {
+ super(targetChild, peer);
+ }
}
protected class BCSSProxyServiceProvider
@@ -69,9 +76,14 @@ public class BeanContextServicesSupport
BeanContextServiceRevokedListener
{
private static final long serialVersionUID = 7078212910685744490L;
-
+
+ private BCSSProxyServiceProvider()
+ {
+ }
+
public Iterator getCurrentServiceSelectors (BeanContextServices bcs,
Class serviceClass)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -80,6 +92,7 @@ public class BeanContextServicesSupport
Object requestor,
Class serviceClass,
Object serviceSelector)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -87,11 +100,13 @@ public class BeanContextServicesSupport
public void releaseService (BeanContextServices bcs,
Object requestor,
Object service)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public void serviceRevoked (BeanContextServiceRevokedEvent bcsre)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -104,6 +119,10 @@ public class BeanContextServicesSupport
protected BeanContextServiceProvider serviceProvider;
+ private BCSSServiceProvider()
+ {
+ }
+
protected BeanContextServiceProvider getServiceProvider()
{
return serviceProvider;
@@ -148,105 +167,154 @@ public class BeanContextServicesSupport
public void addBeanContextServicesListener
(BeanContextServicesListener listener)
{
- if (! bcsListeners.contains(listener))
- bcsListeners.add(listener);
+ synchronized (bcsListeners)
+ {
+ if (! bcsListeners.contains(listener))
+ bcsListeners.add(listener);
+ }
}
- public boolean addService (Class serviceClass, BeanContextServiceProvider bcsp)
+ public boolean addService (Class serviceClass,
+ BeanContextServiceProvider bcsp)
{
- throw new Error ("Not implemented");
+ return addService(serviceClass, bcsp, true);
}
protected boolean addService (Class serviceClass,
BeanContextServiceProvider bcsp,
boolean fireEvent)
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ if (services.containsKey(serviceClass))
+ return false;
+ services.put(serviceClass, bcsp);
+ if (bcsp instanceof Serializable)
+ ++serializable;
+ fireServiceAdded(serviceClass);
+ return true;
+ }
}
protected void bcsPreDeserializationHook (ObjectInputStream ois)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
protected void bcsPreSerializationHook (ObjectOutputStream oos)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
protected void childJustRemovedHook (Object child,
BeanContextSupport.BCSChild bcsc)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected BeanContextSupport.BCSChild createBCSChild (Object targetChild,
- Object peer)
+ Object peer)
{
- throw new Error ("Not implemented");
+ return new BCSSChild(targetChild, peer);
}
protected BeanContextServicesSupport.BCSSServiceProvider
createBCSSServiceProvider (Class sc, BeanContextServiceProvider bcsp)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected final void fireServiceAdded (BeanContextServiceAvailableEvent bcssae)
{
- throw new Error ("Not implemented");
+ synchronized (bcsListeners)
+ {
+ int size = bcsListeners.size();
+ for (int i = 0; i < size; ++i)
+ {
+ BeanContextServicesListener bcsl
+ = (BeanContextServicesListener) bcsListeners.get(i);
+ bcsl.serviceAvailable(bcssae);
+ }
+ }
}
- protected final void fireServiceAdded (Class serviceClass)
+ protected final void fireServiceAdded (Class serviceClass)
{
- throw new Error ("Not implemented");
+ fireServiceAdded(new BeanContextServiceAvailableEvent(this,
+ serviceClass));
}
protected final void fireServiceRevoked(BeanContextServiceRevokedEvent event)
{
- throw new Error ("Not implemented");
+ synchronized (bcsListeners)
+ {
+ int size = bcsListeners.size();
+ for (int i = 0; i < size; ++i)
+ {
+ BeanContextServicesListener bcsl
+ = (BeanContextServicesListener) bcsListeners.get(i);
+ bcsl.serviceRevoked(event);
+ }
+ }
}
protected final void fireServiceRevoked (Class serviceClass,
boolean revokeNow)
{
- throw new Error ("Not implemented");
+ fireServiceRevoked(new BeanContextServiceRevokedEvent(this, serviceClass,
+ revokeNow));
}
public BeanContextServices getBeanContextServicesPeer ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final BeanContextServicesListener
- getChildBeanContextServicesListener (Object child)
+ getChildBeanContextServicesListener (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
- public Iterator getCurrentServiceClasses ()
+ public Iterator getCurrentServiceClasses ()
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ return services.keySet().iterator();
+ }
}
- public Iterator getCurrentServiceSelectors (Class serviceClass)
+ public Iterator getCurrentServiceSelectors (Class serviceClass)
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ // FIXME: what if service does not exist? Must write a test.
+ BeanContextServiceProvider bcsp
+ = (BeanContextServiceProvider) services.get(serviceClass);
+ return bcsp.getCurrentServiceSelectors(this, serviceClass);
+ }
}
public Object getService (BeanContextChild child, Object requestor,
Class serviceClass, Object serviceSelector,
BeanContextServiceRevokedListener bcsrl)
- throws TooManyListenersException
+ throws TooManyListenersException, NotImplementedException
{
throw new Error ("Not implemented");
}
public boolean hasService (Class serviceClass)
{
- throw new Error ("Not implemented");
+ synchronized (services)
+ {
+ return services.containsKey(serviceClass);
+ }
}
public void initialize ()
@@ -257,18 +325,21 @@ public class BeanContextServicesSupport
services = new HashMap();
}
- protected void initializeBeanContextResources ()
+ protected void initializeBeanContextResources ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
- protected void releaseBeanContextResources ()
+ protected void releaseBeanContextResources ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public void releaseService (BeanContextChild child, Object requestor,
Object service)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -276,25 +347,52 @@ public class BeanContextServicesSupport
public void removeBeanContextServicesListener
(BeanContextServicesListener listener)
{
- int index = bcsListeners.indexOf(listener);
-
- if (index > -1)
- bcsListeners.remove(index);
+ synchronized (bcsListeners)
+ {
+ int index = bcsListeners.indexOf(listener);
+ if (index > -1)
+ bcsListeners.remove(index);
+ }
}
public void revokeService (Class serviceClass, BeanContextServiceProvider bcsp,
- boolean revokeCurrentServicesNow)
+ boolean revokeCurrentServicesNow)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
- public void serviceAvailable (BeanContextServiceAvailableEvent bcssae)
- {
- throw new Error ("Not implemented");
- }
-
- public void serviceRevoked (BeanContextServiceRevokedEvent bcssre)
- {
- throw new Error ("Not implemented");
+ public void serviceAvailable (BeanContextServiceAvailableEvent bcssae)
+ {
+ synchronized (services)
+ {
+ Class klass = bcssae.getServiceClass();
+ if (services.containsKey(klass))
+ return;
+ Iterator it = bcsChildren();
+ while (it.hasNext())
+ {
+ Object obj = it.next();
+ if (obj instanceof BeanContextServices)
+ ((BeanContextServices) obj).serviceAvailable(bcssae);
+ }
+ }
+ }
+
+ public void serviceRevoked (BeanContextServiceRevokedEvent bcssre)
+ {
+ synchronized (services)
+ {
+ Class klass = bcssre.getServiceClass();
+ if (services.containsKey(klass))
+ return;
+ Iterator it = bcsChildren();
+ while (it.hasNext())
+ {
+ Object obj = it.next();
+ if (obj instanceof BeanContextServices)
+ ((BeanContextServices) obj).serviceRevoked(bcssre);
+ }
+ }
}
}
diff --git a/libjava/classpath/java/beans/beancontext/BeanContextSupport.java b/libjava/classpath/java/beans/beancontext/BeanContextSupport.java
index 60ccc3a..f3d5ff6 100644
--- a/libjava/classpath/java/beans/beancontext/BeanContextSupport.java
+++ b/libjava/classpath/java/beans/beancontext/BeanContextSupport.java
@@ -38,6 +38,9 @@ exception statement from your version. */
package java.beans.beancontext;
+import gnu.classpath.NotImplementedException;
+
+import java.beans.DesignMode;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
@@ -64,15 +67,19 @@ public class BeanContextSupport extends BeanContextChildSupport
VetoableChangeListener
{
private static final long serialVersionUID = -4879613978649577204L;
-
+
+ // This won't show up in japi, but we mark it as a stub anyway,
+ // so that searches for NotImplementedException will find it.
private void readObject (ObjectInputStream s)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
+ // This won't show up in japi, but we mark it as a stub anyway,
+ // so that searches for NotImplementedException will find it.
private void writeObject (ObjectOutputStream s)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -80,18 +87,34 @@ public class BeanContextSupport extends BeanContextChildSupport
protected class BCSChild implements Serializable
{
private static final long serialVersionUID = -5815286101609939109L;
+
+ private Object targetChild;
+ private Object peer;
+
+ BCSChild(Object targetChild, Object peer)
+ {
+ this.targetChild = targetChild;
+ this.peer = peer;
+ }
}
protected static final class BCSIterator implements Iterator
{
+ private Iterator child;
+
+ BCSIterator(Iterator child)
+ {
+ this.child = child;
+ }
+
public boolean hasNext ()
{
- throw new Error ("Not implemented");
+ return child.hasNext();
}
public Object next ()
{
- throw new Error ("Not implemented");
+ return child.next();
}
public void remove ()
@@ -148,7 +171,9 @@ public class BeanContextSupport extends BeanContextChildSupport
public BeanContextSupport (BeanContext peer, Locale lcle, boolean dtime,
boolean visible)
{
- locale = lcle;
+ super(peer);
+
+ locale = lcle == null ? Locale.getDefault() : lcle;
designTime = dtime;
okToUseGui = visible;
@@ -160,150 +185,214 @@ public class BeanContextSupport extends BeanContextChildSupport
if (targetChild == null)
throw new IllegalArgumentException();
- if (children.containsKey(targetChild))
- return false;
-
- // FIXME: The second argument is surely wrong.
- children.put(targetChild, targetChild);
+ BCSChild child;
+ synchronized (children)
+ {
+ if (children.containsKey(targetChild)
+ || ! validatePendingAdd(targetChild))
+ return false;
+ child = createBCSChild(targetChild, beanContextChildPeer);
+ children.put(targetChild, child);
+ }
+ synchronized (targetChild)
+ {
+ childJustAddedHook(targetChild, child);
+ }
+ fireChildrenAdded(new BeanContextMembershipEvent(this,
+ new Object[] { targetChild }));
return true;
}
public boolean addAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
public void addBeanContextMembershipListener
(BeanContextMembershipListener listener)
{
- if (! bcmListeners.contains(listener))
- bcmListeners.add(listener);
+ synchronized (bcmListeners)
+ {
+ if (! bcmListeners.contains(listener))
+ bcmListeners.add(listener);
+ }
}
public boolean avoidingGui ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected Iterator bcsChildren ()
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return new BCSIterator(children.values().iterator());
+ }
}
protected void bcsPreDeserializationHook (ObjectInputStream ois)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
protected void bcsPreSerializationHook (ObjectOutputStream oos)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
protected void childDeserializedHook (Object child, BeanContextSupport.BCSChild bcsc)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected void childJustAddedHook (Object child, BeanContextSupport.BCSChild bcsc)
{
- throw new Error ("Not implemented");
+ // Do nothing in the base class.
}
protected void childJustRemovedHook (Object child, BeanContextSupport.BCSChild bcsc)
{
- throw new Error ("Not implemented");
+ // Do nothing in the base class.
}
protected static final boolean classEquals (Class first, Class second)
{
- throw new Error ("Not implemented");
+ // Lame function!
+ return (first == second || first.getName().equals(second.getName()));
}
public void clear ()
{
+ // This is the right thing to do.
+ // The JDK docs are really bad here.
throw new UnsupportedOperationException();
}
public boolean contains (Object o)
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.containsKey(o);
+ }
}
public boolean containsAll (Collection c)
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ Iterator it = c.iterator();
+ while (it.hasNext())
+ if (! children.containsKey(it.next()))
+ return false;
+ }
+ return true;
}
public boolean containsKey (Object o)
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.containsKey(o);
+ }
}
protected final Object[] copyChildren ()
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.keySet().toArray();
+ }
}
protected BeanContextSupport.BCSChild createBCSChild (Object targetChild, Object peer)
{
- throw new Error ("Not implemented");
+ return new BCSChild(targetChild, peer);
}
protected final void deserialize (ObjectInputStream ois, Collection coll)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
public void dontUseGui ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected final void fireChildrenAdded (BeanContextMembershipEvent bcme)
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ Iterator it = bcmListeners.iterator();
+ while (it.hasNext())
+ {
+ BeanContextMembershipListener l
+ = (BeanContextMembershipListener) it.next();
+ l.childrenAdded(bcme);
+ }
+ }
}
protected final void fireChildrenRemoved (BeanContextMembershipEvent bcme)
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ Iterator it = bcmListeners.iterator();
+ while (it.hasNext())
+ {
+ BeanContextMembershipListener l
+ = (BeanContextMembershipListener) it.next();
+ l.childrenRemoved(bcme);
+ }
+ }
}
public BeanContext getBeanContextPeer ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final BeanContextChild getChildBeanContextChild (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final BeanContextMembershipListener getChildBeanContextMembershipListener (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final PropertyChangeListener getChildPropertyChangeListener (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final Serializable getChildSerializable (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final VetoableChangeListener getChildVetoableChangeListener (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
protected static final Visibility getChildVisibility (Object child)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -315,12 +404,20 @@ public class BeanContextSupport extends BeanContextChildSupport
public URL getResource (String name, BeanContextChild bcc)
{
- throw new Error ("Not implemented");
+ if (! contains(bcc))
+ throw new IllegalArgumentException("argument not a child");
+ ClassLoader loader = bcc.getClass().getClassLoader();
+ return (loader == null ? ClassLoader.getSystemResource(name)
+ : loader.getResource(name));
}
public InputStream getResourceAsStream (String name, BeanContextChild bcc)
{
- throw new Error ("Not implemented");
+ if (! contains(bcc))
+ throw new IllegalArgumentException("argument not a child");
+ ClassLoader loader = bcc.getClass().getClassLoader();
+ return (loader == null ? ClassLoader.getSystemResourceAsStream(name)
+ : loader.getResourceAsStream(name));
}
protected void initialize ()
@@ -330,48 +427,58 @@ public class BeanContextSupport extends BeanContextChildSupport
}
public Object instantiateChild (String beanName)
- throws IOException, ClassNotFoundException
+ throws IOException, ClassNotFoundException, NotImplementedException
{
throw new Error ("Not implemented");
}
public boolean isDesignTime ()
{
- throw new Error ("Not implemented");
+ return designTime;
}
public boolean isEmpty ()
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.isEmpty();
+ }
}
public boolean isSerializing ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public Iterator iterator ()
{
- return children.keySet().iterator();
+ synchronized (children)
+ {
+ return children.keySet().iterator();
+ }
}
public boolean needsGui ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public void okToUseGui ()
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public void propertyChange (PropertyChangeEvent pce)
+ throws NotImplementedException
{
throw new Error ("Not implemented");
}
public final void readChildren (ObjectInputStream ois)
- throws IOException, ClassNotFoundException
+ throws IOException, ClassNotFoundException, NotImplementedException
{
throw new Error ("Not implemented");
}
@@ -382,6 +489,7 @@ public class BeanContextSupport extends BeanContextChildSupport
}
protected boolean remove (Object targetChild, boolean callChildSetBC)
+ throws NotImplementedException
{
if (targetChild == null)
throw new IllegalArgumentException();
@@ -391,69 +499,93 @@ public class BeanContextSupport extends BeanContextChildSupport
public boolean removeAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
public void removeBeanContextMembershipListener (BeanContextMembershipListener bcml)
{
- throw new Error ("Not implemented");
+ synchronized (bcmListeners)
+ {
+ bcmListeners.remove(bcml);
+ }
}
public boolean retainAll (Collection c)
{
+ // Intentionally throws an exception.
throw new UnsupportedOperationException();
}
protected final void serialize (ObjectOutputStream oos, Collection coll)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
public void setDesignTime (boolean dtime)
{
- throw new Error ("Not implemented");
+ boolean save = designTime;
+ designTime = dtime;
+ firePropertyChange(DesignMode.PROPERTYNAME, Boolean.valueOf(save),
+ Boolean.valueOf(dtime));
}
public void setLocale (Locale newLocale)
throws PropertyVetoException
{
- throw new Error ("Not implemented");
+ if (newLocale == null || locale == newLocale)
+ return;
+ fireVetoableChange("locale", locale, newLocale);
+ Locale oldLocale = locale;
+ locale = newLocale;
+ firePropertyChange("locale", oldLocale, newLocale);
}
public int size ()
{
- throw new Error ("Not implemented");
+ synchronized (children)
+ {
+ return children.size();
+ }
}
public Object[] toArray ()
{
- return children.keySet().toArray();
+ synchronized (children)
+ {
+ return children.keySet().toArray();
+ }
}
public Object[] toArray(Object[] array)
+ throws NotImplementedException
{
- return children.keySet().toArray(array);
+ // This implementation is incorrect, I think.
+ synchronized (children)
+ {
+ return children.keySet().toArray(array);
+ }
}
protected boolean validatePendingAdd (Object targetChild)
{
- throw new Error ("Not implemented");
+ return true;
}
protected boolean validatePendingRemove (Object targetChild)
{
- throw new Error ("Not implemented");
+ return true;
}
public void vetoableChange (PropertyChangeEvent pce)
- throws PropertyVetoException
+ throws PropertyVetoException, NotImplementedException
{
throw new Error ("Not implemented");
}
public final void writeChildren (ObjectOutputStream oos)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new Error ("Not implemented");
}
diff --git a/libjava/classpath/java/io/CharArrayWriter.java b/libjava/classpath/java/io/CharArrayWriter.java
index f9b338f..68e693b 100644
--- a/libjava/classpath/java/io/CharArrayWriter.java
+++ b/libjava/classpath/java/io/CharArrayWriter.java
@@ -242,6 +242,84 @@ public class CharArrayWriter extends Writer
}
}
+ /**
+ * Appends the Unicode character, <code>c</code>, to the output stream
+ * underlying this writer. This is equivalent to <code>write(c)</code>.
+ *
+ * @param c the character to append.
+ * @return a reference to this object.
+ * @since 1.5
+ */
+ public CharArrayWriter append(char c)
+ {
+ write(c);
+ return this;
+ }
+
+ /**
+ * Appends the specified sequence of Unicode characters to the
+ * output stream underlying this writer. This is equivalent to
+ * appending the results of calling <code>toString()</code> on the
+ * character sequence. As a result, the entire sequence may not be
+ * appended, as it depends on the implementation of
+ * <code>toString()</code> provided by the
+ * <code>CharSequence</code>. For example, if the character
+ * sequence is wrapped around an input buffer, the results will
+ * depend on the current position and length of that buffer.
+ *
+ * @param cs the character sequence to append. If cs is null,
+ * then the string "null" (the string representation of null)
+ * is appended.
+ * @return a reference to this object.
+ * @since 1.5
+ */
+ public CharArrayWriter append(CharSequence cs)
+ {
+ try
+ {
+ write(cs == null ? "null" : cs.toString());
+ }
+ catch (IOException _)
+ {
+ // Can't happen.
+ }
+ return this;
+ }
+
+ /**
+ * Appends the specified subsequence of Unicode characters to the
+ * output stream underlying this writer, starting and ending at the
+ * specified positions within the sequence. The behaviour of this
+ * method matches the behaviour of writing the result of
+ * <code>append(cs.subSequence(start,end))</code> when the sequence
+ * is not null.
+ *
+ * @param cs the character sequence to append. If cs is null,
+ * then the string "null" (the string representation of null)
+ * is appended.
+ * @param start the index of the first Unicode character to use from
+ * the sequence.
+ * @param end the index of the last Unicode character to use from the
+ * sequence.
+ * @return a reference to this object.
+ * @throws IndexOutOfBoundsException if either of the indices are negative,
+ * the start index occurs after the end index, or the end index is
+ * beyond the end of the sequence.
+ * @since 1.5
+ */
+ public CharArrayWriter append(CharSequence cs, int start, int end)
+ {
+ try
+ {
+ write(cs == null ? "null" : cs.subSequence(start, end).toString());
+ }
+ catch (IOException _)
+ {
+ // Can't happen.
+ }
+ return this;
+ }
+
/**
* This private method makes the buffer bigger when we run out of room
* by allocating a larger buffer and copying the valid chars from the
diff --git a/libjava/classpath/java/io/DataOutputStream.java b/libjava/classpath/java/io/DataOutputStream.java
index 2517816..6670c2d 100644
--- a/libjava/classpath/java/io/DataOutputStream.java
+++ b/libjava/classpath/java/io/DataOutputStream.java
@@ -63,6 +63,11 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
protected int written;
/**
+ * Utf8 byte buffer, used by writeUTF()
+ */
+ private byte[] buf;
+
+ /**
* This method initializes an instance of <code>DataOutputStream</code> to
* write its data to the specified underlying <code>OutputStream</code>
*
@@ -373,6 +378,37 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
}
/**
+ * Calculate the length, in bytes, of a <code>String</code> in Utf8 format.
+ *
+ * @param value The <code>String</code> to measure
+ * @param start String index at which to begin count
+ * @param sum Starting Utf8 byte count
+ *
+ * @throws UTFDataFormatException if result would exceed 65535
+ */
+ private int getUTFlength(String value, int start, int sum)
+ throws IOException
+ {
+ int len = value.length();
+
+ for (int i = start; i < len && sum <= 65535; ++i)
+ {
+ char c = value.charAt(i);
+ if (c >= '\u0001' && c <= '\u007f')
+ sum += 1;
+ else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ sum += 2;
+ else
+ sum += 3;
+ }
+
+ if (sum > 65535)
+ throw new UTFDataFormatException ();
+
+ return sum;
+ }
+
+ /**
* This method writes a Java <code>String</code> to the stream in a modified
* UTF-8 format. First, two bytes are written to the stream indicating the
* number of bytes to follow. Note that this is the number of bytes in the
@@ -407,48 +443,47 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
public final synchronized void writeUTF(String value) throws IOException
{
int len = value.length();
- int sum = 0;
-
- for (int i = 0; i < len && sum <= 65535; ++i)
- {
- char c = value.charAt(i);
- if (c >= '\u0001' && c <= '\u007f')
- sum += 1;
- else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
- sum += 2;
- else
- sum += 3;
- }
-
- if (sum > 65535)
- throw new UTFDataFormatException ();
-
+ int i = 0;
int pos = 0;
- byte[] buf = new byte[sum];
+ boolean lengthWritten = false;
- for (int i = 0; i < len; ++i)
+ if (buf == null)
+ buf = new byte[512];
+
+ do
{
- char c = value.charAt(i);
- if (c >= '\u0001' && c <= '\u007f')
- buf[pos++] = (byte) c;
- else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ while (i < len && pos < buf.length - 3)
{
- buf[pos++] = (byte) (0xc0 | (0x1f & (c >> 6)));
- buf[pos++] = (byte) (0x80 | (0x3f & c));
+ char c = value.charAt(i++);
+ if (c >= '\u0001' && c <= '\u007f')
+ buf[pos++] = (byte) c;
+ else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ {
+ buf[pos++] = (byte) (0xc0 | (0x1f & (c >> 6)));
+ buf[pos++] = (byte) (0x80 | (0x3f & c));
+ }
+ else
+ {
+ // JSL says the first byte should be or'd with 0xc0, but
+ // that is a typo. Unicode says 0xe0, and that is what is
+ // consistent with DataInputStream.
+ buf[pos++] = (byte) (0xe0 | (0x0f & (c >> 12)));
+ buf[pos++] = (byte) (0x80 | (0x3f & (c >> 6)));
+ buf[pos++] = (byte) (0x80 | (0x3f & c));
+ }
}
- else
+ if (! lengthWritten)
{
- // JSL says the first byte should be or'd with 0xc0, but
- // that is a typo. Unicode says 0xe0, and that is what is
- // consistent with DataInputStream.
- buf[pos++] = (byte) (0xe0 | (0x0f & (c >> 12)));
- buf[pos++] = (byte) (0x80 | (0x3f & (c >> 6)));
- buf[pos++] = (byte) (0x80 | (0x3f & c));
+ if (i == len)
+ writeShort(pos);
+ else
+ writeShort(getUTFlength(value, i, pos));
+ lengthWritten = true;
}
- }
-
- writeShort (sum);
- write(buf, 0, sum);
+ write(buf, 0, pos);
+ pos = 0;
+ }
+ while (i < len);
}
} // class DataOutputStream
diff --git a/libjava/classpath/java/io/FilePermission.java b/libjava/classpath/java/io/FilePermission.java
index 31802c6..9a83efb 100644
--- a/libjava/classpath/java/io/FilePermission.java
+++ b/libjava/classpath/java/io/FilePermission.java
@@ -1,5 +1,6 @@
/* FilePermission.java --
- Copyright (C) 1998, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,9 +45,6 @@ public final class FilePermission extends Permission implements Serializable
{
private static final long serialVersionUID = 7930732926638008763L;
- private static final String CURRENT_DIRECTORY =
- System.getProperty("user.dir");
-
private static final String ALL_FILES = "<<ALL FILES>>";
private boolean readPerm = false;
@@ -213,10 +211,18 @@ public final class FilePermission extends Permission implements Serializable
FilePermission fp = (FilePermission) p;
String f2 = fp.getName();
- if (f1.charAt(0) != File.separatorChar)
- f1 = CURRENT_DIRECTORY + f1;
- if (f2.charAt(0) != File.separatorChar)
- f2 = CURRENT_DIRECTORY + f2;
+ if (f2.equals(ALL_FILES))
+ return false;
+
+ try
+ {
+ f1 = new File(f1).getCanonicalPath();
+ f2 = new File(f2).getCanonicalPath();
+ }
+ catch (IOException ioe)
+ {
+ return false;
+ }
String sub1;
diff --git a/libjava/classpath/java/io/InputStream.java b/libjava/classpath/java/io/InputStream.java
index e56197a..2934f00 100644
--- a/libjava/classpath/java/io/InputStream.java
+++ b/libjava/classpath/java/io/InputStream.java
@@ -1,5 +1,5 @@
/* InputStream.java -- Base class for input
- Copyright (C) 1998, 1999, 2001, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ package java.io;
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Warren Levy (warrenl@cygnus.com)
*/
-public abstract class InputStream
+public abstract class InputStream implements Closeable
{
/**
* Default, no-arg, public constructor
diff --git a/libjava/classpath/java/io/ObjectOutputStream.java b/libjava/classpath/java/io/ObjectOutputStream.java
index 55a12e4..61f07bc 100644
--- a/libjava/classpath/java/io/ObjectOutputStream.java
+++ b/libjava/classpath/java/io/ObjectOutputStream.java
@@ -549,53 +549,37 @@ public class ObjectOutputStream extends OutputStream
* different protocols, specified by <code>PROTOCOL_VERSION_1</code>
* and <code>PROTOCOL_VERSION_2</code>. This implementation writes
* data using <code>PROTOCOL_VERSION_2</code> by default, as is done
- * by the JDK 1.2.
- *
- * A non-portable method, <code>setDefaultProtocolVersion (int
- * version)</code> is provided to change the default protocol
- * version.
- *
+ * since the JDK 1.2.
+ * <p>
* For an explanation of the differences between the two protocols
- * see XXX: the Java ObjectSerialization Specification.
- *
- * @exception IOException if <code>version</code> is not a valid
- * protocol
- *
- * @see #setDefaultProtocolVersion(int)
+ * see the Java Object Serialization Specification.
+ * </p>
+ *
+ * @param version the version to use.
+ *
+ * @throws IllegalArgumentException if <code>version</code> is not a valid
+ * protocol.
+ * @throws IllegalStateException if called after the first the first object
+ * was serialized.
+ * @throws IOException if an I/O error occurs.
+ *
+ * @see ObjectStreamConstants#PROTOCOL_VERSION_1
+ * @see ObjectStreamConstants#PROTOCOL_VERSION_2
+ *
+ * @since 1.2
*/
public void useProtocolVersion(int version) throws IOException
{
if (version != PROTOCOL_VERSION_1 && version != PROTOCOL_VERSION_2)
- throw new IOException("Invalid protocol version requested.");
+ throw new IllegalArgumentException("Invalid protocol version requested.");
+
+ if (nextOID != baseWireHandle)
+ throw new IllegalStateException("Protocol version cannot be changed "
+ + "after serialization started.");
protocolVersion = version;
}
-
- /**
- * <em>GNU $classpath specific</em>
- *
- * Changes the default stream protocol used by all
- * <code>ObjectOutputStream</code>s. There are currently two
- * different protocols, specified by <code>PROTOCOL_VERSION_1</code>
- * and <code>PROTOCOL_VERSION_2</code>. The default default is
- * <code>PROTOCOL_VERSION_1</code>.
- *
- * @exception IOException if <code>version</code> is not a valid
- * protocol
- *
- * @see #useProtocolVersion(int)
- */
- public static void setDefaultProtocolVersion(int version)
- throws IOException
- {
- if (version != PROTOCOL_VERSION_1 && version != PROTOCOL_VERSION_2)
- throw new IOException("Invalid protocol version requested.");
-
- defaultProtocolVersion = version;
- }
-
-
/**
* An empty hook that allows subclasses to write extra information
* about classes to the stream. This method is called the first
diff --git a/libjava/classpath/java/io/ObjectStreamConstants.java b/libjava/classpath/java/io/ObjectStreamConstants.java
index f1a4af7..04cf79b 100644
--- a/libjava/classpath/java/io/ObjectStreamConstants.java
+++ b/libjava/classpath/java/io/ObjectStreamConstants.java
@@ -1,6 +1,6 @@
/* ObjectStreamConstants.java -- Interface containing constant values
used in reading and writing serialized objects
- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2003, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,11 +45,29 @@ package java.io;
* <code>ObjectInputStream</code>, and <code>ObjectStreamClass</code>.
* The values for these constants are specified by the Java library
* specification.
+ *
+ * @since 1.1
*/
public interface ObjectStreamConstants
{
// FIXME: Javadoc comment these values.
+
+ /**
+ * The serialization stream protocol version 1. This version was
+ * the default serialization protocol before JDK 1.2.
+ *
+ * @see ObjectOutputStream#useProtocolVersion(int)
+ * @since 1.2
+ */
int PROTOCOL_VERSION_1 = 1;
+
+ /**
+ * The serialization stream protocol version 2. This version is
+ * used as the default serialization protocol since JDK 1.2.
+ *
+ * @see ObjectOutputStream#useProtocolVersion(int)
+ * @since 1.2
+ */
int PROTOCOL_VERSION_2 = 2;
short STREAM_MAGIC = (short)0xaced;
diff --git a/libjava/classpath/java/io/class-dependencies.conf b/libjava/classpath/java/io/class-dependencies.conf
deleted file mode 100644
index 633bb17..0000000
--- a/libjava/classpath/java/io/class-dependencies.conf
+++ /dev/null
@@ -1,100 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-java/io/File: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V \
- java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
-
-java/io/FileDescriptor: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V
-
-java/io/FileInputStream: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V \
- java/io/FileNotFoundException.<init>(Ljava/lang/String;)V
-
-java/io/FileOutputStream: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/FileNotFoundException.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V
-
-java/io/ObjectInputStream: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/lang/SecurityManager.currentClassLoader()Ljava/lang/ClassLoader; \
- java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
-
-java/io/ObjectOutputStream: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/lang/SecurityManager.currentClassLoader()Ljava/lang/ClassLoader; \
- java/lang/IllegalArgumentException.<init>(Ljava/lang/String;)V
-
-java/io/RandomAccessFile: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/FileNotFoundException.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V
-
-# end of file
diff --git a/libjava/classpath/java/lang/Boolean.java b/libjava/classpath/java/lang/Boolean.java
index 902c93b..2399252 100644
--- a/libjava/classpath/java/lang/Boolean.java
+++ b/libjava/classpath/java/lang/Boolean.java
@@ -1,5 +1,5 @@
/* Boolean.java -- object wrapper for boolean
- Copyright (C) 1998, 2001, 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,9 +47,9 @@ import java.io.Serializable;
* @author Paul Fisher
* @author Eric Blake (ebb9@email.byu.edu)
* @since 1.0
- * @status updated to 1.4
+ * @status updated to 1.5
*/
-public final class Boolean implements Serializable
+public final class Boolean implements Serializable, Comparable
{
/**
* Compatible with JDK 1.0.2+.
@@ -223,34 +223,37 @@ public final class Boolean implements Serializable
}
/**
- * If the String argument is "true", ignoring case, return true.
- * Otherwise, return false.
+ * Compares this Boolean to another.
*
- * @param b String to parse
+ * @param other the Boolean to compare this Boolean to
+ * @return 0 if both Booleans represent the same value, a positive number
+ * if this Boolean represents true and the other false, and a negative
+ * number otherwise.
* @since 1.5
*/
- public static boolean parseBoolean(String b)
+ public int compareTo(Boolean other)
{
- return "true".equalsIgnoreCase(b) ? true : false;
+ return value == other.value ? 0 : (value ? 1 : -1);
}
-
+
/**
- * Compares this Boolean to another.
- * @param b the Boolean to compare this Boolean to
- * @return 0 if both Booleans represent the same value, a positive number
- * if this Boolean represents true and b represents false, or a negative
- * number otherwise.
+ * Bridge method
+ */
+ public int compareTo(Object other)
+ {
+ return compareTo((Boolean)other);
+ }
+
+ /**
+ * If the String argument is "true", ignoring case, return true.
+ * Otherwise, return false.
+ *
+ * @param b String to parse
* @since 1.5
*/
- public int compareTo (Boolean b)
+ public static boolean parseBoolean(String b)
{
- if (b == null)
- throw new NullPointerException("argument passed to compareTo(Boolean) cannot be null");
-
- if (this.value == b.value)
- return 0;
- if (this.value == true)
- return 1;
- return -1;
+ return "true".equalsIgnoreCase(b) ? true : false;
}
+
}
diff --git a/libjava/classpath/java/lang/Character.java b/libjava/classpath/java/lang/Character.java
index 98ad147..59ae12f 100644
--- a/libjava/classpath/java/lang/Character.java
+++ b/libjava/classpath/java/lang/Character.java
@@ -47,7 +47,7 @@ import java.util.Locale;
/**
* Wrapper class for the primitive char data type. In addition, this class
* allows one to retrieve property information and perform transformations
- * on the 57,707 defined characters in the Unicode Standard, Version 3.0.0.
+ * on the defined characters in the Unicode Standard, Version 4.0.0.
* java.lang.Character is designed to be very dynamic, and as such, it
* retrieves information on the Unicode character set from a separate
* database, gnu.java.lang.CharData, which can be easily upgraded.
@@ -55,7 +55,7 @@ import java.util.Locale;
* <p>For predicates, boundaries are used to describe
* the set of characters for which the method will return true.
* This syntax uses fairly normal regular expression notation.
- * See 5.13 of the Unicode Standard, Version 3.0, for the
+ * See 5.13 of the Unicode Standard, Version 4.0, for the
* boundary specification.
*
* <p>See <a href="http://www.unicode.org">http://www.unicode.org</a>
diff --git a/libjava/classpath/java/lang/Class.java b/libjava/classpath/java/lang/Class.java
index c4235e6..090ac23 100644
--- a/libjava/classpath/java/lang/Class.java
+++ b/libjava/classpath/java/lang/Class.java
@@ -1,5 +1,5 @@
/* Class.java -- Representation of a Java class.
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
+ Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006
Free Software Foundation
This file is part of GNU Classpath.
@@ -39,17 +39,25 @@ exception statement from your version. */
package java.lang;
import gnu.classpath.VMStackWalker;
+import gnu.java.lang.reflect.ClassSignatureParser;
import java.io.InputStream;
import java.io.ObjectStreamClass;
import java.io.Serializable;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
+import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.GenericDeclaration;
+import java.lang.reflect.GenericSignatureFormatError;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.MalformedParameterizedTypeException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
import java.net.URL;
import java.security.AccessController;
import java.security.AllPermission;
@@ -87,17 +95,37 @@ import java.util.HashSet;
*
* @author John Keiser
* @author Eric Blake (ebb9@email.byu.edu)
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @author Tom Tromey (tromey@cygnus.com)
* @since 1.0
* @see ClassLoader
*/
-public final class Class implements Serializable
+public final class Class
+ implements Serializable, Type, AnnotatedElement, GenericDeclaration
{
/**
* Compatible with JDK 1.0+.
*/
private static final long serialVersionUID = 3206093459760846163L;
+ /**
+ * Flag indicating a synthetic member.
+ * Note that this duplicates a constant in Modifier.
+ */
+ private static final int SYNTHETIC = 0x1000;
+
+ /**
+ * Flag indiciating an annotation class.
+ */
+ private static final int ANNOTATION = 0x2000;
+
+ /**
+ * Flag indicating an enum constant or an enum class.
+ * Note that this duplicates a constant in Modifier.
+ */
+ private static final int ENUM = 0x4000;
+
/** The class signers. */
private Object[] signers = null;
/** The class protection domain. */
@@ -259,7 +287,7 @@ public final class Class implements Serializable
ClassLoader loader = VMClass.getClassLoader(this);
// Check if we may get the classloader
SecurityManager sm = SecurityManager.current;
- if (sm != null)
+ if (loader != null && sm != null)
{
// Get the calling classloader
ClassLoader cl = VMStackWalker.getCallingClassLoader();
@@ -631,17 +659,16 @@ public final class Class implements Serializable
public boolean equals(Object o)
{
- if(o instanceof MethodKey)
+ if (o instanceof MethodKey)
{
- MethodKey m = (MethodKey)o;
- if(m.name.equals(name) && m.params.length == params.length && m.returnType == returnType)
+ MethodKey m = (MethodKey) o;
+ if (m.name.equals(name) && m.params.length == params.length
+ && m.returnType == returnType)
{
- for(int i = 0; i < params.length; i++)
+ for (int i = 0; i < params.length; i++)
{
- if(m.params[i] != params[i])
- {
- return false;
- }
+ if (m.params[i] != params[i])
+ return false;
}
return true;
}
@@ -1252,8 +1279,60 @@ public final class Class implements Serializable
}
/**
- * Like <code>getField(String)</code> but without the security checks and returns null
- * instead of throwing NoSuchFieldException.
+ * <p>
+ * Casts this class to represent a subclass of the specified class.
+ * This method is useful for `narrowing' the type of a class so that
+ * the class object, and instances of that class, can match the contract
+ * of a more restrictive method. For example, if this class has the
+ * static type of <code>Class&lt;Object&gt;</code>, and a dynamic type of
+ * <code>Class&lt;Rectangle&gt;</code>, then, assuming <code>Shape</code> is
+ * a superclass of <code>Rectangle</code>, this method can be used on
+ * this class with the parameter, <code>Class&lt;Shape&gt;</code>, to retain
+ * the same instance but with the type
+ * <code>Class&lt;? extends Shape&gt;</code>.
+ * </p>
+ * <p>
+ * If this class can be converted to an instance which is parameterised
+ * over a subtype of the supplied type, <code>U</code>, then this method
+ * returns an appropriately cast reference to this object. Otherwise,
+ * a <code>ClassCastException</code> is thrown.
+ * </p>
+ *
+ * @param klass the class object, the parameterized type (<code>U</code>) of
+ * which should be a superclass of the parameterized type of
+ * this instance.
+ * @return a reference to this object, appropriately cast.
+ * @throws ClassCastException if this class can not be converted to one
+ * which represents a subclass of the specified
+ * type, <code>U</code>.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be <U> Class<? extends U> asSubClass(Class<U> klass */
+ public Class asSubclass(Class klass)
+ {
+ if (! klass.isAssignableFrom(this))
+ throw new ClassCastException();
+ return this; /* FIXME[GENERICS]: Should cast to Class<? extends U> */
+ }
+
+ /**
+ * Returns the specified object, cast to this <code>Class</code>' type.
+ *
+ * @param obj the object to cast
+ * @throws ClassCastException if obj is not an instance of this class
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be T cast(Object obj) */
+ public Object cast(Object obj)
+ {
+ if (obj != null && ! isInstance(obj))
+ throw new ClassCastException();
+ return obj; /* FIXME[GENERICS]: Should be cast to T */
+ }
+
+ /**
+ * Like <code>getField(String)</code> but without the security checks and
+ * returns null instead of throwing NoSuchFieldException.
*/
private Field internalGetField(String name)
{
@@ -1306,4 +1385,411 @@ public final class Class implements Serializable
sm.checkPackageAccess(pkg.getName());
}
}
+
+ /**
+ * Returns the enumeration constants of this class, or
+ * null if this class is not an <code>Enum</code>.
+ *
+ * @return an array of <code>Enum</code> constants
+ * associated with this class, or null if this
+ * class is not an <code>enum</code>.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: T[] getEnumConstants() */
+ public Object[] getEnumConstants()
+ {
+ if (isEnum())
+ {
+ try
+ {
+ return (Object[])
+ getMethod("values", new Class[0]).invoke(null, new Object[0]);
+ }
+ catch (NoSuchMethodException exception)
+ {
+ throw new Error("Enum lacks values() method");
+ }
+ catch (IllegalAccessException exception)
+ {
+ throw new Error("Unable to access Enum class");
+ }
+ catch (InvocationTargetException exception)
+ {
+ throw new
+ RuntimeException("The values method threw an exception",
+ exception);
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Returns true if this class is an <code>Enum</code>.
+ *
+ * @return true if this is an enumeration class.
+ * @since 1.5
+ */
+ public boolean isEnum()
+ {
+ int mod = VMClass.getModifiers (this, true);
+ return (mod & ENUM) != 0;
+ }
+
+ /**
+ * Returns true if this class is a synthetic class, generated by
+ * the compiler.
+ *
+ * @return true if this is a synthetic class.
+ * @since 1.5
+ */
+ public boolean isSynthetic()
+ {
+ int mod = VMClass.getModifiers (this, true);
+ return (mod & SYNTHETIC) != 0;
+ }
+
+ /**
+ * Returns true if this class is an <code>Annotation</code>.
+ *
+ * @return true if this is an annotation class.
+ * @since 1.5
+ */
+ public boolean isAnnotation()
+ {
+ int mod = VMClass.getModifiers (this, true);
+ return (mod & ANNOTATION) != 0;
+ }
+
+ /**
+ * Returns the simple name for this class, as used in the source
+ * code. For normal classes, this is the content returned by
+ * <code>getName()</code> which follows the last ".". Anonymous
+ * classes have no name, and so the result of calling this method is
+ * "". The simple name of an array consists of the simple name of
+ * its component type, followed by "[]". Thus, an array with the
+ * component type of an anonymous class has a simple name of simply
+ * "[]".
+ *
+ * @return the simple name for this class.
+ * @since 1.5
+ */
+ public String getSimpleName()
+ {
+ return VMClass.getSimpleName(this);
+ }
+
+ /**
+ * Returns this class' annotation for the specified annotation type,
+ * or <code>null</code> if no such annotation exists.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return this class' annotation for the specified type, or
+ * <code>null</code> if no such annotation exists.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: <T extends Annotation> T getAnnotation(Class <T>) */
+ public Annotation getAnnotation(Class annotationClass)
+ {
+ Annotation foundAnnotation = null;
+ Annotation[] annotations = getAnnotations();
+ for (int i = 0; i < annotations.length; i++)
+ if (annotations[i].annotationType() == annotationClass)
+ foundAnnotation = annotations[i];
+ return foundAnnotation;
+ }
+
+ /**
+ * Returns all annotations associated with this class. If there are
+ * no annotations associated with this class, then a zero-length array
+ * will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * class, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return this class' annotations.
+ * @since 1.5
+ */
+ public Annotation[] getAnnotations()
+ {
+ HashSet set = new HashSet();
+ set.addAll(Arrays.asList(getDeclaredAnnotations()));
+ Class[] interfaces = getInterfaces();
+ for (int i = 0; i < interfaces.length; i++)
+ set.addAll(Arrays.asList(interfaces[i].getAnnotations()));
+ Class superClass = getSuperclass();
+ if (superClass != null)
+ set.addAll(Arrays.asList(superClass.getAnnotations()));
+ return (Annotation[]) set.toArray(new Annotation[set.size()]);
+ }
+
+ /**
+ * <p>
+ * Returns the canonical name of this class, as defined by section
+ * 6.7 of the Java language specification. Each package, top-level class,
+ * top-level interface and primitive type has a canonical name. A member
+ * class has a canonical name, if its parent class has one. Likewise,
+ * an array type has a canonical name, if its component type does.
+ * Local or anonymous classes do not have canonical names.
+ * </p>
+ * <p>
+ * The canonical name for top-level classes, top-level interfaces and
+ * primitive types is always the same as the fully-qualified name.
+ * For array types, the canonical name is the canonical name of its
+ * component type with `[]' appended.
+ * </p>
+ * <p>
+ * The canonical name of a member class always refers to the place where
+ * the class was defined, and is composed of the canonical name of the
+ * defining class and the simple name of the member class, joined by `.'.
+ * For example, if a <code>Person</code> class has an inner class,
+ * <code>M</code>, then both its fully-qualified name and canonical name
+ * is <code>Person.M</code>. A subclass, <code>Staff</code>, of
+ * <code>Person</code> refers to the same inner class by the fully-qualified
+ * name of <code>Staff.M</code>, but its canonical name is still
+ * <code>Person.M</code>.
+ * </p>
+ * <p>
+ * Where no canonical name is present, <code>null</code> is returned.
+ * </p>
+ *
+ * @return the canonical name of the class, or <code>null</code> if the
+ * class doesn't have a canonical name.
+ * @since 1.5
+ */
+ public String getCanonicalName()
+ {
+ return VMClass.getCanonicalName(this);
+ }
+
+ /**
+ * Returns all annotations directly defined by this class. If there are
+ * no annotations associated with this class, then a zero-length array
+ * will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * class, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return the annotations directly defined by this class.
+ * @since 1.5
+ */
+ public Annotation[] getDeclaredAnnotations()
+ {
+ return VMClass.getDeclaredAnnotations(this);
+ }
+
+ /**
+ * Returns the class which immediately encloses this class. If this class
+ * is a top-level class, this method returns <code>null</code>.
+ *
+ * @return the immediate enclosing class, or <code>null</code> if this is
+ * a top-level class.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return Class<?> */
+ public Class getEnclosingClass()
+ {
+ return VMClass.getEnclosingClass(this);
+ }
+
+ /**
+ * Returns the constructor which immediately encloses this class. If
+ * this class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @return the immediate enclosing constructor if this class is
+ * declared within a constructor. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return Constructor<?> */
+ public Constructor getEnclosingConstructor()
+ {
+ return VMClass.getEnclosingConstructor(this);
+ }
+
+ /**
+ * Returns the method which immediately encloses this class. If
+ * this class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @return the immediate enclosing method if this class is
+ * declared within a method. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ public Method getEnclosingMethod()
+ {
+ return VMClass.getEnclosingMethod(this);
+ }
+
+ /**
+ * <p>
+ * Returns an array of <code>Type</code> objects which represent the
+ * interfaces directly implemented by this class or extended by this
+ * interface.
+ * </p>
+ * <p>
+ * If one of the superinterfaces is a parameterized type, then the
+ * object returned for this interface reflects the actual type
+ * parameters used in the source code. Type parameters are created
+ * using the semantics specified by the <code>ParameterizedType</code>
+ * interface, and only if an instance has not already been created.
+ * </p>
+ * <p>
+ * The order of the interfaces in the array matches the order in which
+ * the interfaces are declared. For classes which represent an array,
+ * an array of two interfaces, <code>Cloneable</code> and
+ * <code>Serializable</code>, is always returned, with the objects in
+ * that order. A class representing a primitive type or void always
+ * returns an array of zero size.
+ * </p>
+ *
+ * @return an array of interfaces implemented or extended by this class.
+ * @throws GenericSignatureFormatError if the generic signature of one
+ * of the interfaces does not comply with that specified by the Java
+ * Virtual Machine specification, 3rd edition.
+ * @throws TypeNotPresentException if any of the superinterfaces refers
+ * to a non-existant type.
+ * @throws MalformedParameterizedTypeException if any of the interfaces
+ * refer to a parameterized type that can not be instantiated for
+ * some reason.
+ * @since 1.5
+ * @see java.lang.reflect.ParameterizedType
+ */
+ public Type[] getGenericInterfaces()
+ {
+ if (isPrimitive())
+ return new Type[0];
+
+ String sig = VMClass.getClassSignature(this);
+ if (sig == null)
+ return getInterfaces();
+
+ ClassSignatureParser p = new ClassSignatureParser(this, sig);
+ return p.getInterfaceTypes();
+ }
+
+ /**
+ * <p>
+ * Returns a <code>Type</code> object representing the direct superclass,
+ * whether class, interface, primitive type or void, of this class.
+ * If this class is an array class, then a class instance representing
+ * the <code>Object</code> class is returned. If this class is primitive,
+ * an interface, or a representation of either the <code>Object</code>
+ * class or void, then <code>null</code> is returned.
+ * </p>
+ * <p>
+ * If the superclass is a parameterized type, then the
+ * object returned for this interface reflects the actual type
+ * parameters used in the source code. Type parameters are created
+ * using the semantics specified by the <code>ParameterizedType</code>
+ * interface, and only if an instance has not already been created.
+ * </p>
+ *
+ * @return the superclass of this class.
+ * @throws GenericSignatureFormatError if the generic signature of the
+ * class does not comply with that specified by the Java
+ * Virtual Machine specification, 3rd edition.
+ * @throws TypeNotPresentException if the superclass refers
+ * to a non-existant type.
+ * @throws MalformedParameterizedTypeException if the superclass
+ * refers to a parameterized type that can not be instantiated for
+ * some reason.
+ * @since 1.5
+ * @see java.lang.reflect.ParameterizedType
+ */
+ public Type getGenericSuperclass()
+ {
+ if (isArray())
+ return Object.class;
+
+ if (isPrimitive() || isInterface() || this == Object.class)
+ return null;
+
+ String sig = VMClass.getClassSignature(this);
+ if (sig == null)
+ return getSuperclass();
+
+ ClassSignatureParser p = new ClassSignatureParser(this, sig);
+ return p.getSuperclassType();
+ }
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this class, in declaration order.
+ * An array of size zero is returned if this class has no type
+ * variables.
+ *
+ * @return the type variables associated with this class.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return TypeVariable<Class<T>> */
+ public TypeVariable[] getTypeParameters()
+ {
+ String sig = VMClass.getClassSignature(this);
+ if (sig == null)
+ return new TypeVariable[0];
+
+ ClassSignatureParser p = new ClassSignatureParser(this, sig);
+ return p.getTypeParameters();
+ }
+
+ /**
+ * Returns true if an annotation for the specified type is associated
+ * with this class. This is primarily a short-hand for using marker
+ * annotations.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return true if an annotation exists for the specified type.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be Class<? extends Annotation> */
+ public boolean isAnnotationPresent(Class
+ annotationClass)
+ {
+ return getAnnotation(annotationClass) != null;
+ }
+
+ /**
+ * Returns true if this object represents an anonymous class.
+ *
+ * @return true if this object represents an anonymous class.
+ * @since 1.5
+ */
+ public boolean isAnonymousClass()
+ {
+ return VMClass.isAnonymousClass(this);
+ }
+
+ /**
+ * Returns true if this object represents an local class.
+ *
+ * @return true if this object represents an local class.
+ * @since 1.5
+ */
+ public boolean isLocalClass()
+ {
+ return VMClass.isLocalClass(this);
+ }
+
+ /**
+ * Returns true if this object represents an member class.
+ *
+ * @return true if this object represents an member class.
+ * @since 1.5
+ */
+ public boolean isMemberClass()
+ {
+ return VMClass.isMemberClass(this);
+ }
+
+
}
diff --git a/libjava/classpath/java/lang/ClassLoader.java b/libjava/classpath/java/lang/ClassLoader.java
index 9f586c4..83ef98d 100644
--- a/libjava/classpath/java/lang/ClassLoader.java
+++ b/libjava/classpath/java/lang/ClassLoader.java
@@ -469,7 +469,8 @@ public abstract class ClassLoader
if (domain == null)
domain = StaticData.defaultProtectionDomain;
- return VMClassLoader.defineClass(this, name, data, offset, len, domain);
+ return VMClassLoader.defineClassWithTransformers(this, name, data, offset,
+ len, domain);
}
/**
@@ -628,8 +629,9 @@ public abstract class ClassLoader
* @return an enumaration of all resources found
* @throws IOException if I/O errors occur in the process
* @since 1.2
+ * @specnote this was <code>final</code> prior to 1.5
*/
- public final Enumeration getResources(String name) throws IOException
+ public Enumeration getResources(String name) throws IOException
{
Enumeration parentResources;
if (parent == null)
@@ -834,7 +836,7 @@ public abstract class ClassLoader
throw new IllegalArgumentException("Package " + name
+ " already defined");
Package p = new Package(name, specTitle, specVendor, specVersion,
- implTitle, implVendor, implVersion, sealed);
+ implTitle, implVendor, implVersion, sealed, this);
synchronized (definedPackages)
{
definedPackages.put(name, p);
diff --git a/libjava/classpath/java/lang/Enum.java b/libjava/classpath/java/lang/Enum.java
new file mode 100644
index 0000000..5344d5c
--- /dev/null
+++ b/libjava/classpath/java/lang/Enum.java
@@ -0,0 +1,248 @@
+/* Enum.java - Base class for all enums
+ Copyright (C) 2004, 2005 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package java.lang;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+
+/**
+ * This class represents a Java enumeration. All enumerations are
+ * subclasses of this class.
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+/* FIXME[GENERICS]: Should be Enum<T extends Enum<T>>
+ and Comparable<T> */
+public abstract class Enum
+ implements Comparable, Serializable
+{
+
+ /**
+ * For compatability with Sun's JDK
+ */
+ private static final long serialVersionUID = -4300926546619394005L;
+
+ /**
+ * The name of this enum constant.
+ */
+ String name;
+
+ /**
+ * The number of this enum constant. Each constant is given a number
+ * which matches the order in which it was declared, starting with zero.
+ */
+ int ordinal;
+
+ /**
+ * This constructor is used by the compiler to create enumeration constants.
+ *
+ * @param name the name of the enumeration constant.
+ * @param ordinal the number of the enumeration constant, based on the
+ * declaration order of the constants and starting from zero.
+ */
+ protected Enum(String name, int ordinal)
+ {
+ this.name = name;
+ this.ordinal = ordinal;
+ }
+
+ /**
+ * Returns an Enum for a enum class given a description string of
+ * the enum constant.
+ *
+ * @exception NullPointerException when etype or s are null.
+ * @exception IllegalArgumentException when there is no value s in
+ * the enum etype.
+ */
+ /* FIXME[GENERICS]: Should be <S extends Enum<S>> S valueOf(Class<S>) */
+ public static Enum valueOf(Class etype, String s)
+ {
+ if (etype == null || s == null)
+ throw new NullPointerException();
+
+ try
+ {
+ Field f = etype.getDeclaredField(s);
+ if (! f.isEnumConstant())
+ throw new IllegalArgumentException(s);
+ /* FIXME[GENERICS]: Should cast to S */
+ return (Enum) f.get(null);
+ }
+ catch (NoSuchFieldException exception)
+ {
+ throw new IllegalArgumentException(s);
+ }
+ catch (IllegalAccessException exception)
+ {
+ throw new Error("Unable to access Enum class");
+ }
+ }
+
+ /**
+ * Returns true if this enumeration is equivalent to the supplied object,
+ * <code>o</code>. Only one instance of an enumeration constant exists,
+ * so the comparison is simply done using <code>==</code>.
+ *
+ * @param o the object to compare to this.
+ * @return true if <code>this == o</code>.
+ */
+ public final boolean equals(Object o)
+ {
+ // Enum constants are singular, so we need only compare `=='.
+ return this == o;
+ }
+
+ /**
+ * Returns the hash code of this constant. This is simply the ordinal.
+ *
+ * @return the hash code of this enumeration constant.
+ */
+ public final int hashCode()
+ {
+ return ordinal;
+ }
+
+ /**
+ * Returns a textual representation of this enumeration constant.
+ * By default, this is simply the declared name of the constant, but
+ * specific enumeration types may provide an implementation more suited
+ * to the data being stored.
+ *
+ * @return a textual representation of this constant.
+ */
+ public String toString()
+ {
+ return name;
+ }
+
+ /**
+ * Returns an integer which represents the relative ordering of this
+ * enumeration constant. Enumeration constants are ordered by their
+ * ordinals, which represents their declaration order. So, comparing
+ * two identical constants yields zero, while one declared prior to
+ * this returns a positive integer and one declared after yields a
+ * negative integer.
+ *
+ * @param e the enumeration constant to compare.
+ * @return a negative integer if <code>e.ordinal < this.ordinal</code>,
+ * zero if <code>e.ordinal == this.ordinal</code> and a positive
+ * integer if <code>e.ordinal > this.ordinal</code>.
+ * @throws ClassCastException if <code>e</code> is not an enumeration
+ * constant of the same class.
+ */
+ public final int compareTo(Enum e)
+ {
+ if (getDeclaringClass() != e.getDeclaringClass())
+ throw new ClassCastException();
+ return ordinal - e.ordinal;
+ }
+
+ /**
+ * Returns an integer which represents the relative ordering of this
+ * enumeration constant. Enumeration constants are ordered by their
+ * ordinals, which represents their declaration order. So, comparing
+ * two identical constants yields zero, while one declared prior to
+ * this returns a positive integer and one declared after yields a
+ * negative integer.
+ *
+ * @param o the enumeration constant to compare.
+ * @return a negative integer if <code>e.ordinal < this.ordinal</code>,
+ * zero if <code>e.ordinal == this.ordinal</code> and a positive
+ * integer if <code>e.ordinal > this.ordinal</code>.
+ * @throws ClassCastException if <code>e</code> is not an enumeration
+ * constant of the same class.
+ */
+ /* FIXME[GENERICS]: Remove this method */
+ public final int compareTo(Object o)
+ {
+ return compareTo((Enum)o);
+ }
+
+ /**
+ * Cloning of enumeration constants is prevented, to maintain their
+ * singleton status.
+ *
+ * @return the cloned object.
+ * @throws CloneNotSupportedException as enumeration constants can't be
+ * cloned.
+ */
+ protected final Object clone() throws CloneNotSupportedException
+ {
+ throw new CloneNotSupportedException("can't clone an enum constant");
+ }
+
+ /**
+ * Returns the name of this enumeration constant.
+ *
+ * @return the name of the constant.
+ */
+ public final String name()
+ {
+ return name;
+ }
+
+ /**
+ * Returns the number of this enumeration constant, which represents
+ * the order in which it was originally declared, starting from zero.
+ *
+ * @return the number of this constant.
+ */
+ public final int ordinal()
+ {
+ return ordinal;
+ }
+
+ /**
+ * Returns the type of this enumeration constant. This is the class
+ * corresponding to the declaration of the enumeration.
+ *
+ * @return the type of this enumeration constant.
+ */
+ /* FIXME[GENERICS]: Should return Class<T> */
+ public final Class getDeclaringClass()
+ {
+ Class k = getClass();
+ // We might be in an anonymous subclass of the enum class, so go
+ // up one more level.
+ if (k.getSuperclass() != Enum.class)
+ k = k.getSuperclass();
+ return k;
+ }
+}
diff --git a/libjava/classpath/java/lang/EnumConstantNotPresentException.java b/libjava/classpath/java/lang/EnumConstantNotPresentException.java
index dbec9d6..12b30fd 100644
--- a/libjava/classpath/java/lang/EnumConstantNotPresentException.java
+++ b/libjava/classpath/java/lang/EnumConstantNotPresentException.java
@@ -48,6 +48,8 @@ package java.lang;
*/
public class EnumConstantNotPresentException extends RuntimeException
{
+ private static final long serialVersionUID = -6046998521960521108L;
+
/**
* The enum's type. Note that the name is fixed by the
* serialization spec.
diff --git a/libjava/classpath/java/lang/Iterable.java b/libjava/classpath/java/lang/Iterable.java
new file mode 100644
index 0000000..8223bcf
--- /dev/null
+++ b/libjava/classpath/java/lang/Iterable.java
@@ -0,0 +1,59 @@
+/* Iterable.java -- Notes collection over which one may iterate
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang;
+
+import java.util.Iterator;
+
+/**
+ * This interface is used to indicate that a given class can be
+ * iterated over. The compiler uses this interface to determine which
+ * classes are suitable targets of the <code>foreach</code> construct.
+ *
+ * @author Tom Tromey <tromey@redhat.com>
+ * @since 1.5
+ */
+public interface Iterable
+{
+ /**
+ * Returns an iterator for the collection.
+ *
+ * @return an iterator.
+ */
+ Iterator iterator ();
+}
diff --git a/libjava/classpath/java/lang/Math.java b/libjava/classpath/java/lang/Math.java
index d7c8aa1..90574d5 100644
--- a/libjava/classpath/java/lang/Math.java
+++ b/libjava/classpath/java/lang/Math.java
@@ -948,4 +948,105 @@ public final class Math
return VMMath.tanh(a);
}
+ /**
+ * Return the ulp for the given double argument. The ulp is the
+ * difference between the argument and the next larger double. Note
+ * that the sign of the double argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Double#MIN_VALUE} is returned.
+ * @param d the double whose ulp should be returned
+ * @return the difference between the argument and the next larger double
+ * @since 1.5
+ */
+ public static double ulp(double d)
+ {
+ if (Double.isNaN(d))
+ return d;
+ if (Double.isInfinite(d))
+ return Double.POSITIVE_INFINITY;
+ // This handles both +0.0 and -0.0.
+ if (d == 0.0)
+ return Double.MIN_VALUE;
+ long bits = Double.doubleToLongBits(d);
+ final int mantissaBits = 52;
+ final int exponentBits = 11;
+ final long mantMask = (1L << mantissaBits) - 1;
+ long mantissa = bits & mantMask;
+ final long expMask = (1L << exponentBits) - 1;
+ long exponent = (bits >>> mantissaBits) & expMask;
+
+ // Denormal number, so the answer is easy.
+ if (exponent == 0)
+ {
+ long result = (exponent << mantissaBits) | 1L;
+ return Double.longBitsToDouble(result);
+ }
+
+ // Conceptually we want to have '1' as the mantissa. Then we would
+ // shift the mantissa over to make a normal number. If this underflows
+ // the exponent, we will make a denormal result.
+ long newExponent = exponent - mantissaBits;
+ long newMantissa;
+ if (newExponent > 0)
+ newMantissa = 0;
+ else
+ {
+ newMantissa = 1L << -(newExponent - 1);
+ newExponent = 0;
+ }
+ return Double.longBitsToDouble((newExponent << mantissaBits) | newMantissa);
+ }
+
+ /**
+ * Return the ulp for the given float argument. The ulp is the
+ * difference between the argument and the next larger float. Note
+ * that the sign of the float argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Float#MIN_VALUE} is returned.
+ * @param f the float whose ulp should be returned
+ * @return the difference between the argument and the next larger float
+ * @since 1.5
+ */
+ public static float ulp(float f)
+ {
+ if (Float.isNaN(f))
+ return f;
+ if (Float.isInfinite(f))
+ return Float.POSITIVE_INFINITY;
+ // This handles both +0.0 and -0.0.
+ if (f == 0.0)
+ return Float.MIN_VALUE;
+ int bits = Float.floatToIntBits(f);
+ final int mantissaBits = 23;
+ final int exponentBits = 8;
+ final int mantMask = (1 << mantissaBits) - 1;
+ int mantissa = bits & mantMask;
+ final int expMask = (1 << exponentBits) - 1;
+ int exponent = (bits >>> mantissaBits) & expMask;
+
+ // Denormal number, so the answer is easy.
+ if (exponent == 0)
+ {
+ int result = (exponent << mantissaBits) | 1;
+ return Float.intBitsToFloat(result);
+ }
+
+ // Conceptually we want to have '1' as the mantissa. Then we would
+ // shift the mantissa over to make a normal number. If this underflows
+ // the exponent, we will make a denormal result.
+ int newExponent = exponent - mantissaBits;
+ int newMantissa;
+ if (newExponent > 0)
+ newMantissa = 0;
+ else
+ {
+ newMantissa = 1 << -(newExponent - 1);
+ newExponent = 0;
+ }
+ return Float.intBitsToFloat((newExponent << mantissaBits) | newMantissa);
+ }
}
diff --git a/libjava/classpath/java/lang/Package.java b/libjava/classpath/java/lang/Package.java
index 4cded0a..38bb324 100644
--- a/libjava/classpath/java/lang/Package.java
+++ b/libjava/classpath/java/lang/Package.java
@@ -1,5 +1,6 @@
/* Package.java -- information about a package
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,6 +40,8 @@ package java.lang;
import gnu.classpath.VMStackWalker;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
import java.net.URL;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
@@ -70,9 +73,10 @@ import java.util.StringTokenizer;
* @see ClassLoader#definePackage(String, String, String, String, String,
* String, String, URL)
* @since 1.2
- * @status updated to 1.4
+ * @status updated to 1.5
*/
public class Package
+ implements AnnotatedElement
{
/** The name of the Package */
private final String name;
@@ -98,6 +102,20 @@ public class Package
/** If sealed the origin of the package classes, otherwise null */
private final URL sealed;
+ /** The class loader that defined this package */
+ private ClassLoader loader;
+
+ /** @deprecated Please use the other constructor that takes the class loader
+ * that defines the Package.
+ */
+ Package(String name,
+ String specTitle, String specVendor, String specVersion,
+ String implTitle, String implVendor, String implVersion, URL sealed)
+ {
+ this(name, specTitle, specVendor, specVersion, implTitle, implVendor,
+ implVersion, sealed, null);
+ }
+
/**
* A package local constructor for the Package class. All parameters except
* the <code>name</code> of the package may be <code>null</code>.
@@ -115,7 +133,8 @@ public class Package
*/
Package(String name,
String specTitle, String specVendor, String specVersion,
- String implTitle, String implVendor, String implVersion, URL sealed)
+ String implTitle, String implVendor, String implVersion, URL sealed,
+ ClassLoader loader)
{
if (name == null)
throw new IllegalArgumentException("null Package name");
@@ -128,6 +147,7 @@ public class Package
this.specVendor = specVendor;
this.specVersion = specVersion;
this.sealed = sealed;
+ this.loader = loader;
}
/**
@@ -233,7 +253,7 @@ public class Package
*
* @return true if the version is compatible, false otherwise
*
- * @Throws NumberFormatException if either version string is invalid
+ * @throws NumberFormatException if either version string is invalid
* @throws NullPointerException if either version string is null
*/
public boolean isCompatibleWith(String version)
@@ -315,4 +335,82 @@ public class Package
return ("package " + name + (specTitle == null ? "" : ", " + specTitle)
+ (specVersion == null ? "" : ", version " + specVersion));
}
+
+ /**
+ * Returns this package's annotation for the specified annotation type,
+ * or <code>null</code> if no such annotation exists.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return this package's annotation for the specified type, or
+ * <code>null</code> if no such annotation exists.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: <T extends Annotation> T getAnnotation(Class <T>) */
+ public Annotation getAnnotation(Class annotationClass)
+ {
+ Annotation foundAnnotation = null;
+ Annotation[] annotations = getAnnotations();
+ for (int i = 0; i < annotations.length; i++)
+ if (annotations[i].annotationType() == annotationClass)
+ foundAnnotation = annotations[i];
+ return foundAnnotation;
+ }
+
+ /**
+ * Returns all annotations associated with this package. If there are
+ * no annotations associated with this package, then a zero-length array
+ * will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * package, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return this package' annotations.
+ * @since 1.5
+ */
+ public Annotation[] getAnnotations()
+ {
+ /** All a package's annotations are declared within it. */
+ return getDeclaredAnnotations();
+ }
+
+ /**
+ * Returns all annotations directly defined by this package. If there are
+ * no annotations associated with this package, then a zero-length array
+ * will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * package, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return the annotations directly defined by this package.
+ * @since 1.5
+ */
+ public Annotation[] getDeclaredAnnotations()
+ {
+ try
+ {
+ Class pkgInfo = Class.forName(name + ".package-info", false, loader);
+ return pkgInfo.getDeclaredAnnotations();
+ }
+ catch (ClassNotFoundException _)
+ {
+ return new Annotation[0];
+ }
+ }
+
+ /**
+ * Returns true if an annotation for the specified type is associated
+ * with this package. This is primarily a short-hand for using marker
+ * annotations.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return true if an annotation exists for the specified type.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Signature is Class<? extends Annotation> */
+ public boolean isAnnotationPresent(Class
+ annotationClass)
+ {
+ return getAnnotation(annotationClass) != null;
+ }
+
} // class Package
diff --git a/libjava/classpath/java/lang/StackTraceElement.java b/libjava/classpath/java/lang/StackTraceElement.java
index cf4d1c7..746dd63 100644
--- a/libjava/classpath/java/lang/StackTraceElement.java
+++ b/libjava/classpath/java/lang/StackTraceElement.java
@@ -1,5 +1,5 @@
/* StackTraceElement.java -- One function call or call stack element
- Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -211,7 +211,7 @@ public final class StackTraceElement implements Serializable
}
if (methodName != null)
sb.append(methodName);
- sb.append(" (");
+ sb.append("(");
if (fileName != null)
sb.append(fileName);
else
diff --git a/libjava/classpath/java/lang/StrictMath.java b/libjava/classpath/java/lang/StrictMath.java
index 2079cc1..548a6f1 100644
--- a/libjava/classpath/java/lang/StrictMath.java
+++ b/libjava/classpath/java/lang/StrictMath.java
@@ -1841,4 +1841,84 @@ public final strictfp class StrictMath
double t = (float) a;
return t + a * (1 + t * z + t * v);
}
+
+ /**
+ * <p>
+ * Returns the sign of the argument as follows:
+ * </p>
+ * <ul>
+ * <li>If <code>a</code> is greater than zero, the result is 1.0.</li>
+ * <li>If <code>a</code> is less than zero, the result is -1.0.</li>
+ * <li>If <code>a</code> is <code>NaN</code>, the result is <code>NaN</code>.
+ * <li>If <code>a</code> is positive or negative zero, the result is the
+ * same.</li>
+ * </ul>
+ *
+ * @param a the numeric argument.
+ * @return the sign of the argument.
+ * @since 1.5.
+ */
+ public static double signum(double a)
+ {
+ // There's no difference.
+ return Math.signum(a);
+ }
+
+ /**
+ * <p>
+ * Returns the sign of the argument as follows:
+ * </p>
+ * <ul>
+ * <li>If <code>a</code> is greater than zero, the result is 1.0f.</li>
+ * <li>If <code>a</code> is less than zero, the result is -1.0f.</li>
+ * <li>If <code>a</code> is <code>NaN</code>, the result is <code>NaN</code>.
+ * <li>If <code>a</code> is positive or negative zero, the result is the
+ * same.</li>
+ * </ul>
+ *
+ * @param a the numeric argument.
+ * @return the sign of the argument.
+ * @since 1.5.
+ */
+ public static float signum(float a)
+ {
+ // There's no difference.
+ return Math.signum(a);
+ }
+
+ /**
+ * Return the ulp for the given double argument. The ulp is the
+ * difference between the argument and the next larger double. Note
+ * that the sign of the double argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Double#MIN_VALUE} is returned.
+ * @param d the double whose ulp should be returned
+ * @return the difference between the argument and the next larger double
+ * @since 1.5
+ */
+ public static double ulp(double d)
+ {
+ // There's no difference.
+ return Math.ulp(d);
+ }
+
+ /**
+ * Return the ulp for the given float argument. The ulp is the
+ * difference between the argument and the next larger float. Note
+ * that the sign of the float argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Float#MIN_VALUE} is returned.
+ * @param f the float whose ulp should be returned
+ * @return the difference between the argument and the next larger float
+ * @since 1.5
+ */
+ public static float ulp(float f)
+ {
+ // There's no difference.
+ return Math.ulp(f);
+ }
}
diff --git a/libjava/classpath/java/lang/StringBuilder.java b/libjava/classpath/java/lang/StringBuilder.java
index 01a83ca..98af48f 100644
--- a/libjava/classpath/java/lang/StringBuilder.java
+++ b/libjava/classpath/java/lang/StringBuilder.java
@@ -206,7 +206,7 @@ public final class StringBuilder
int max = value.length * 2 + 2;
minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
char[] nb = new char[minimumCapacity];
- System.arraycopy(value, 0, nb, 0, count);
+ VMSystem.arraycopy(value, 0, nb, 0, count);
value = nb;
}
}
@@ -285,7 +285,7 @@ public final class StringBuilder
{
if (srcOffset < 0 || srcEnd > count || srcEnd < srcOffset)
throw new StringIndexOutOfBoundsException();
- System.arraycopy(value, srcOffset, dst, dstOffset, srcEnd - srcOffset);
+ VMSystem.arraycopy(value, srcOffset, dst, dstOffset, srcEnd - srcOffset);
}
/**
@@ -355,7 +355,7 @@ public final class StringBuilder
{
int len = stringBuffer.count;
ensureCapacity(count + len);
- System.arraycopy(stringBuffer.value, 0, value, count, len);
+ VMSystem.arraycopy(stringBuffer.value, 0, value, count, len);
count += len;
}
return this;
@@ -395,7 +395,7 @@ public final class StringBuilder
if (offset < 0 || count < 0 || offset > data.length - count)
throw new StringIndexOutOfBoundsException();
ensureCapacity(this.count + count);
- System.arraycopy(data, offset, value, this.count, count);
+ VMSystem.arraycopy(data, offset, value, this.count, count);
this.count += count;
return this;
}
@@ -558,7 +558,7 @@ public final class StringBuilder
// This will unshare if required.
ensureCapacity(count);
if (count - end != 0)
- System.arraycopy(value, end, value, start, count - end);
+ VMSystem.arraycopy(value, end, value, start, count - end);
count -= end - start;
return this;
}
@@ -599,7 +599,7 @@ public final class StringBuilder
ensureCapacity(count + delta);
if (delta != 0 && end < count)
- System.arraycopy(value, end, value, end + delta, count - end);
+ VMSystem.arraycopy(value, end, value, end + delta, count - end);
str.getChars(0, len, value, start);
count += delta;
@@ -677,8 +677,8 @@ public final class StringBuilder
|| str_offset < 0 || str_offset > str.length - len)
throw new StringIndexOutOfBoundsException();
ensureCapacity(count + len);
- System.arraycopy(value, offset, value, offset + len, count - offset);
- System.arraycopy(str, str_offset, value, offset, len);
+ VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
+ VMSystem.arraycopy(str, str_offset, value, offset, len);
count += len;
return this;
}
@@ -717,7 +717,7 @@ public final class StringBuilder
str = "null";
int len = str.count;
ensureCapacity(count + len);
- System.arraycopy(value, offset, value, offset + len, count - offset);
+ VMSystem.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(0, len, value, offset);
count += len;
return this;
@@ -814,7 +814,7 @@ public final class StringBuilder
if (offset < 0 || offset > count)
throw new StringIndexOutOfBoundsException(offset);
ensureCapacity(count + 1);
- System.arraycopy(value, offset, value, offset + 1, count - offset);
+ VMSystem.arraycopy(value, offset, value, offset + 1, count - offset);
value[offset] = ch;
count++;
return this;
@@ -1063,7 +1063,7 @@ public final class StringBuilder
if (count < value.length)
{
char[] newValue = new char[count];
- System.arraycopy(value, 0, newValue, 0, count);
+ VMSystem.arraycopy(value, 0, newValue, 0, count);
value = newValue;
}
}
diff --git a/libjava/classpath/java/lang/System.java b/libjava/classpath/java/lang/System.java
index 34bbfdd..b538b79 100644
--- a/libjava/classpath/java/lang/System.java
+++ b/libjava/classpath/java/lang/System.java
@@ -364,7 +364,7 @@ public final class System
SecurityManager sm = SecurityManager.current; // Be thread-safe.
if (sm != null)
sm.checkPropertyAccess(key);
- else if (key.length() == 0)
+ if (key.length() == 0)
throw new IllegalArgumentException("key can't be empty");
return SystemProperties.getProperty(key);
}
@@ -385,6 +385,10 @@ public final class System
SecurityManager sm = SecurityManager.current; // Be thread-safe.
if (sm != null)
sm.checkPropertyAccess(key);
+ // This handles both the null pointer exception and the illegal
+ // argument exception.
+ if (key.length() == 0)
+ throw new IllegalArgumentException("key can't be empty");
return SystemProperties.getProperty(key, def);
}
@@ -405,10 +409,37 @@ public final class System
SecurityManager sm = SecurityManager.current; // Be thread-safe.
if (sm != null)
sm.checkPermission(new PropertyPermission(key, "write"));
+ // This handles both the null pointer exception and the illegal
+ // argument exception.
+ if (key.length() == 0)
+ throw new IllegalArgumentException("key can't be empty");
return SystemProperties.setProperty(key, value);
}
/**
+ * Remove a single system property by name. A security check may be
+ * performed, <code>checkPropertyAccess(key, "write")</code>.
+ *
+ * @param key the name of the system property to remove
+ * @return the previous value, or null
+ * @throws SecurityException if permission is denied
+ * @throws NullPointerException if key is null
+ * @throws IllegalArgumentException if key is ""
+ * @since 1.5
+ */
+ public static String clearProperty(String key)
+ {
+ SecurityManager sm = SecurityManager.current; // Be thread-safe.
+ if (sm != null)
+ sm.checkPermission(new PropertyPermission(key, "write"));
+ // This handles both the null pointer exception and the illegal
+ // argument exception.
+ if (key.length() == 0)
+ throw new IllegalArgumentException("key can't be empty");
+ return SystemProperties.remove(key);
+ }
+
+ /**
* Gets the value of an environment variable.
*
* @param name the name of the environment variable
diff --git a/libjava/classpath/java/lang/Thread.java b/libjava/classpath/java/lang/Thread.java
index 76df103..2362054 100644
--- a/libjava/classpath/java/lang/Thread.java
+++ b/libjava/classpath/java/lang/Thread.java
@@ -1,5 +1,5 @@
/* Thread -- an independent thread of executable code
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation
This file is part of GNU Classpath.
@@ -81,6 +81,7 @@ import java.util.Map;
* @author Tom Tromey
* @author John Keiser
* @author Eric Blake (ebb9@email.byu.edu)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @see Runnable
* @see Runtime#exit(int)
* @see #run()
@@ -130,15 +131,27 @@ public class Thread implements Runnable
/** The context classloader for this Thread. */
private ClassLoader contextClassLoader;
+
+ /** This thread's ID. */
+ private final long threadId;
/** The next thread number to use. */
private static int numAnonymousThreadsCreated;
+
+ /** The next thread ID to use. */
+ private static long nextThreadId;
+
+ /** The default exception handler. */
+ private static UncaughtExceptionHandler defaultHandler;
/** Thread local storage. Package accessible for use by
* InheritableThreadLocal.
*/
WeakIdentityHashMap locals;
+ /** The uncaught exception handler. */
+ UncaughtExceptionHandler exceptionHandler;
+
/**
* Allocates a new <code>Thread</code> object. This constructor has
* the same effect as <code>Thread(null, null,</code>
@@ -342,6 +355,11 @@ public class Thread implements Runnable
this.name = name.toString();
this.runnable = target;
this.stacksize = size;
+
+ synchronized (Thread.class)
+ {
+ this.threadId = nextThreadId++;
+ }
priority = current.priority;
daemon = current.daemon;
@@ -371,6 +389,11 @@ public class Thread implements Runnable
this.priority = priority;
this.daemon = daemon;
this.contextClassLoader = ClassLoader.getSystemClassLoader();
+ synchronized (Thread.class)
+ {
+ this.threadId = nextThreadId++;
+ }
+
}
/**
@@ -434,6 +457,19 @@ public class Thread implements Runnable
/**
* Originally intended to destroy this thread, this method was never
* implemented by Sun, and is hence a no-op.
+ *
+ * @deprecated This method was originally intended to simply destroy
+ * the thread without performing any form of cleanup operation.
+ * However, it was never implemented. It is now deprecated
+ * for the same reason as <code>suspend()</code>,
+ * <code>stop()</code> and <code>resume()</code>; namely,
+ * it is prone to deadlocks. If a thread is destroyed while
+ * it still maintains a lock on a resource, then this resource
+ * will remain locked and any attempts by other threads to
+ * access the resource will result in a deadlock. Thus, even
+ * an implemented version of this method would be still be
+ * deprecated, due to its unsafe nature.
+ * @throws NoSuchMethodError as this method was never implemented.
*/
public void destroy()
{
@@ -1000,4 +1036,159 @@ public class Thread implements Runnable
}
return locals;
}
+
+ /**
+ * Assigns the given <code>UncaughtExceptionHandler</code> to this
+ * thread. This will then be called if the thread terminates due
+ * to an uncaught exception, pre-empting that of the
+ * <code>ThreadGroup</code>.
+ *
+ * @param h the handler to use for this thread.
+ * @throws SecurityException if the current thread can't modify this thread.
+ * @since 1.5
+ */
+ public void setUncaughtExceptionHandler(UncaughtExceptionHandler h)
+ {
+ SecurityManager sm = SecurityManager.current; // Be thread-safe.
+ if (sm != null)
+ sm.checkAccess(this);
+ exceptionHandler = h;
+ }
+
+ /**
+ * <p>
+ * Returns the handler used when this thread terminates due to an
+ * uncaught exception. The handler used is determined by the following:
+ * </p>
+ * <ul>
+ * <li>If this thread has its own handler, this is returned.</li>
+ * <li>If not, then the handler of the thread's <code>ThreadGroup</code>
+ * object is returned.</li>
+ * <li>If both are unavailable, then <code>null</code> is returned
+ * (which can only happen when the thread was terminated since
+ * then it won't have an associated thread group anymore).</li>
+ * </ul>
+ *
+ * @return the appropriate <code>UncaughtExceptionHandler</code> or
+ * <code>null</code> if one can't be obtained.
+ * @since 1.5
+ */
+ public UncaughtExceptionHandler getUncaughtExceptionHandler()
+ {
+ return exceptionHandler != null ? exceptionHandler : group;
+ }
+
+ /**
+ * <p>
+ * Sets the default uncaught exception handler used when one isn't
+ * provided by the thread or its associated <code>ThreadGroup</code>.
+ * This exception handler is used when the thread itself does not
+ * have an exception handler, and the thread's <code>ThreadGroup</code>
+ * does not override this default mechanism with its own. As the group
+ * calls this handler by default, this exception handler should not defer
+ * to that of the group, as it may lead to infinite recursion.
+ * </p>
+ * <p>
+ * Uncaught exception handlers are used when a thread terminates due to
+ * an uncaught exception. Replacing this handler allows default code to
+ * be put in place for all threads in order to handle this eventuality.
+ * </p>
+ *
+ * @param h the new default uncaught exception handler to use.
+ * @throws SecurityException if a security manager is present and
+ * disallows the runtime permission
+ * "setDefaultUncaughtExceptionHandler".
+ * @since 1.5
+ */
+ public static void
+ setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler h)
+ {
+ SecurityManager sm = SecurityManager.current; // Be thread-safe.
+ if (sm != null)
+ sm.checkPermission(new RuntimePermission("setDefaultUncaughtExceptionHandler"));
+ defaultHandler = h;
+ }
+
+ /**
+ * Returns the handler used by default when a thread terminates
+ * unexpectedly due to an exception, or <code>null</code> if one doesn't
+ * exist.
+ *
+ * @return the default uncaught exception handler.
+ * @since 1.5
+ */
+ public static UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
+ {
+ return defaultHandler;
+ }
+
+ /**
+ * Returns the unique identifier for this thread. This ID is generated
+ * on thread creation, and may be re-used on its death.
+ *
+ * @return a positive long number representing the thread's ID.
+ * @since 1.5
+ */
+ public long getId()
+ {
+ return threadId;
+ }
+
+ /**
+ * <p>
+ * This interface is used to handle uncaught exceptions
+ * which cause a <code>Thread</code> to terminate. When
+ * a thread, t, is about to terminate due to an uncaught
+ * exception, the virtual machine looks for a class which
+ * implements this interface, in order to supply it with
+ * the dying thread and its uncaught exception.
+ * </p>
+ * <p>
+ * The virtual machine makes two attempts to find an
+ * appropriate handler for the uncaught exception, in
+ * the following order:
+ * </p>
+ * <ol>
+ * <li>
+ * <code>t.getUncaughtExceptionHandler()</code> --
+ * the dying thread is queried first for a handler
+ * specific to that thread.
+ * </li>
+ * <li>
+ * <code>t.getThreadGroup()</code> --
+ * the thread group of the dying thread is used to
+ * handle the exception. If the thread group has
+ * no special requirements for handling the exception,
+ * it may simply forward it on to
+ * <code>Thread.getDefaultUncaughtExceptionHandler()</code>,
+ * the default handler, which is used as a last resort.
+ * </li>
+ * </ol>
+ * <p>
+ * The first handler found is the one used to handle
+ * the uncaught exception.
+ * </p>
+ *
+ * @author Tom Tromey <tromey@redhat.com>
+ * @author Andrew John Hughes <gnu_andrew@member.fsf.org>
+ * @since 1.5
+ * @see Thread#getUncaughtExceptionHandler()
+ * @see Thread#setUncaughtExceptionHander(java.lang.Thread.UncaughtExceptionHandler)
+ * @see Thread#getDefaultUncaughtExceptionHandler()
+ * @see
+ * Thread#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
+ */
+ public interface UncaughtExceptionHandler
+ {
+ /**
+ * Invoked by the virtual machine with the dying thread
+ * and the uncaught exception. Any exceptions thrown
+ * by this method are simply ignored by the virtual
+ * machine.
+ *
+ * @param thr the dying thread.
+ * @param exc the uncaught exception.
+ */
+ void uncaughtException(Thread thr, Throwable exc);
+ }
}
diff --git a/libjava/classpath/java/lang/ThreadGroup.java b/libjava/classpath/java/lang/ThreadGroup.java
index 6e4c27a..7fbef88 100644
--- a/libjava/classpath/java/lang/ThreadGroup.java
+++ b/libjava/classpath/java/lang/ThreadGroup.java
@@ -37,6 +37,7 @@ exception statement from your version. */
package java.lang;
+import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Vector;
/**
@@ -53,7 +54,7 @@ import java.util.Vector;
* @since 1.0
* @status updated to 1.4
*/
-public class ThreadGroup
+public class ThreadGroup implements UncaughtExceptionHandler
{
/** The Initial, top-level ThreadGroup. */
static ThreadGroup root = new ThreadGroup();
@@ -545,6 +546,8 @@ public class ThreadGroup
{
if (parent != null)
parent.uncaughtException(thread, t);
+ else if (Thread.getDefaultUncaughtExceptionHandler() != null)
+ Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, t);
else if (! (t instanceof ThreadDeath))
{
if (t == null)
diff --git a/libjava/classpath/java/lang/ThreadLocal.java b/libjava/classpath/java/lang/ThreadLocal.java
index aceb255..64df8c3 100644
--- a/libjava/classpath/java/lang/ThreadLocal.java
+++ b/libjava/classpath/java/lang/ThreadLocal.java
@@ -152,4 +152,15 @@ public class ThreadLocal
// ever modify the map.
map.put(this, value == null ? NULL : value);
}
+
+ /**
+ * Removes the value associated with the ThreadLocal object for the
+ * currently executing Thread.
+ * @since 1.5
+ */
+ public void remove()
+ {
+ Map map = Thread.getThreadLocals();
+ map.remove(this);
+ }
}
diff --git a/libjava/classpath/java/lang/TypeNotPresentException.java b/libjava/classpath/java/lang/TypeNotPresentException.java
index 3010c96..65d98457 100644
--- a/libjava/classpath/java/lang/TypeNotPresentException.java
+++ b/libjava/classpath/java/lang/TypeNotPresentException.java
@@ -58,7 +58,8 @@ package java.lang;
public class TypeNotPresentException
extends RuntimeException
{
-
+ private static final long serialVersionUID = -5101214195716534496L;
+
/**
* Constructs a <code>TypeNotPresentException</code> for
* the supplied type. The specified cause <code>Throwable</code>
diff --git a/libjava/classpath/java/lang/annotation/Annotation.java b/libjava/classpath/java/lang/annotation/Annotation.java
new file mode 100644
index 0000000..01e2393
--- /dev/null
+++ b/libjava/classpath/java/lang/annotation/Annotation.java
@@ -0,0 +1,136 @@
+/* Annotation.java - Base interface for all annotations
+ Copyright (C) 2004 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package java.lang.annotation;
+
+/**
+ * This is the common interface for all annotations. Note that classes
+ * that implement this class manually are not classed as annotations, and
+ * that this interface does not define an annotation type in itself.
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+public interface Annotation
+{
+
+ /**
+ * Returns the type of this annotation.
+ *
+ * @return the class of which this annotation is an instance.
+ */
+ /* FIXME[GENERICS]: Should return Class<? extends Annotation> */
+ Class annotationType();
+
+ /**
+ * <p>
+ * Returns true if the supplied object is equivalent to this annotation.
+ * For this property to hold, the following must be true of <code>o</code>:
+ * </p>
+ * <ul>
+ * <li>The object is also an instance of the same annotation type.</li>
+ * <li>The members of the supplied annotation are equal to those of this
+ * annotation, according to the following:
+ * <ul>
+ * <li>If the members are <code>float</code>s, then, for floats
+ * <code>x</code> and <code>y</code>,
+ * <code>Float.valueOf(x).equals(Float.valueOf(y)</code> must return
+ * true. This differs from the usual (<code>==</code>) comparison
+ * in that <code>NaN</code> is considered equal to itself and positive
+ * and negative zero are seen as different.</li>
+ * <li>Likewise, if the members are <code>double</code>s, then, for doubles
+ * <code>x</code> and <code>y</code>,
+ * <code>Double.valueOf(x).equals(Double.valueOf(y)</code> must return
+ * true. This differs from the usual (<code>==</code>) comparison
+ * in that <code>NaN</code> is considered equal to itself and positive
+ * and negative zero are seen as different.</li>
+ * <li>Strings, classes, enumerations and annotations are considered
+ * equal according to the <code>equals()</code> implementation for these
+ * types.</li>
+ * <li>Arrays are considered equal according to <code>Arrays.equals()</code>
+ * </li>
+ * <li>Any remaining types are considered equal using <code>==</code>.</li>
+ * </li>
+ * </ul>
+ *
+ * @param o the object to compare with this annotation.
+ * @return true if the supplied object is an annotation with equivalent
+ * members.
+ */
+ boolean equals(Object o);
+
+ /**
+ * <p>
+ * Returns the hash code of the annotation. This is computed as the
+ * sum of the hash codes of the annotation's members.
+ * </p>
+ * <p>
+ * The hash code of a member of the annotation is the result of XORing
+ * the hash code of its value with the result of multiplying the hash code
+ * of its name by 127. Formally, if the value is <code>v</code> and the
+ * name is <code>n</code>, the hash code of the member is
+ * v.hashCode() XOR (127 * String.hashCode(n)). <code>v.hashCode()</code>
+ * is defined as follows:
+ * </p>
+ * <ul>
+ * <li>The hash code of a primitive value (i.e. <code>byte</code>,
+ * <code>char</code>, <code>double</code>, <code>float</code>,
+ * <code>int</code>, <code>long</code>, <code>short</code> and
+ * <code>boolean</code>) is the hash code obtained from its corresponding
+ * wrapper class using <code>valueOf(v).hashCode()</code>, where
+ * <code>v</code> is the primitive value.</li>
+ * <li>The hash code of an enumeration, string, class or other annotation
+ * is obtained using <code>v.hashCode()</code>.</li>
+ * <li>The hash code of an array is computed using
+ * <code>Arrays.hashCode(v)</code>.</li>
+ * </ul>
+ *
+ * @return the hash code of the annotation, computed as the sum of its
+ * member hashcodes.
+ */
+ int hashCode();
+
+ /**
+ * Returns a textual representation of the annotation. This is
+ * implementation-dependent, but is expected to include the classname
+ * and the names and values of each member.
+ *
+ * @return a textual representation of the annotation.
+ */
+ String toString();
+}
diff --git a/libjava/classpath/java/lang/annotation/AnnotationFormatError.java b/libjava/classpath/java/lang/annotation/AnnotationFormatError.java
index 40ce3ca..36f6006 100644
--- a/libjava/classpath/java/lang/annotation/AnnotationFormatError.java
+++ b/libjava/classpath/java/lang/annotation/AnnotationFormatError.java
@@ -49,6 +49,7 @@ package java.lang.annotation;
*/
public class AnnotationFormatError extends Error
{
+ private static final long serialVersionUID = -4256701562333669892L;
/**
* Constructs a new <code>AnnotationFormatError</code>
diff --git a/libjava/classpath/java/lang/class-dependencies.conf b/libjava/classpath/java/lang/class-dependencies.conf
deleted file mode 100644
index 4fbf75e..0000000
--- a/libjava/classpath/java/lang/class-dependencies.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-# end of file
diff --git a/libjava/classpath/java/lang/instrument/ClassDefinition.java b/libjava/classpath/java/lang/instrument/ClassDefinition.java
new file mode 100644
index 0000000..841597c
--- /dev/null
+++ b/libjava/classpath/java/lang/instrument/ClassDefinition.java
@@ -0,0 +1,88 @@
+/* ClassDefinition.java -- Class that binds a class with a new class file
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.instrument;
+
+/**
+ * This class binds a class that will be redefined with a new
+ * class file.
+ *
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @see Instrumentation#redefineClasses(java.lang.instrument.ClassDefinition[])
+ * @since 1.5
+ */
+public final class ClassDefinition
+{
+
+ /* The class it's related */
+ private Class theClass;
+
+ /* The new bytecode of theClass */
+ private byte[] theClassFile;
+
+ /**
+ * @param theClass the Class that will be redefined
+ * @param theClassFile the new class file
+ * @throws NullPointerException if one of the argument is null
+ */
+ /* FIXME[GENERICS]: Signature should be (Class<?>, byte[]) */
+ public ClassDefinition(Class theClass, byte[] theClassFile)
+ {
+ if (theClass == null || theClassFile == null)
+ throw new NullPointerException();
+ this.theClass = theClass;
+ this.theClassFile = theClassFile;
+ }
+
+ /**
+ * @return the Class
+ */
+ /* FIXME[GENERICS]: Should return Class<?> */
+ public Class getDefinitionClass()
+ {
+ return theClass;
+ }
+
+ /**
+ * @return the bytes
+ */
+ public byte[] getDefinitionClassFile()
+ {
+ return theClassFile;
+ }
+}
diff --git a/libjava/classpath/java/lang/instrument/ClassFileTransformer.java b/libjava/classpath/java/lang/instrument/ClassFileTransformer.java
new file mode 100644
index 0000000..68638d7
--- /dev/null
+++ b/libjava/classpath/java/lang/instrument/ClassFileTransformer.java
@@ -0,0 +1,86 @@
+/* ClassFileTransformer.java -- Implementation of this interface is used by an agent to
+ transform class files.
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.instrument;
+
+import java.security.ProtectionDomain;
+
+/**
+ * This interface should be implemented by classes wishing to transform
+ * classes bytecode when defining or redefining classes.
+ *
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @see Instrumentation
+ * @see Instrumentation#addTransformer(java.lang.instrument.ClassFileTransformer)
+ * @see Instrumentation#removeTransformer(java.lang.instrument.ClassFileTransformer)
+ * @since 1.5
+ */
+public interface ClassFileTransformer
+{
+
+ /**
+ * Implementation of this method transforms a class by redefining its
+ * bytecodes. Once a ClassFileTransformer object registers itself to the
+ * Instrumentation object, this method will be called each time a class is
+ * defined (<code>ClassLoader.defineClass</code>) or redefined
+ * (<code>Instrumentation.redefineClasses</code>)
+ * @param loader the loader of the class
+ * @param className the name of the class with packages separated with "/"
+ * @param classBeingRedefined the class being redefined if it's the case,
+ * null otherwise
+ * @param protectionDomain the protection domain of the class being defined or
+ * redefined
+ * @param classfileBuffer the input byte buffer in class file format
+ *
+ * @return a class file buffer or null when no transformation has been performed
+ *
+ * @throws IllegalClassFormatException if the byte buffer does not represent
+ * a well-formed class file
+ * @see Instrumentation#redefineClasses(java.lang.instrument.ClassDefinition[])
+ *
+ */
+ /* FIXME[GENERICS]: Class should be Class<?> */
+ byte[] transform(ClassLoader loader,
+ String className,
+ Class classBeingRedefined,
+ ProtectionDomain protectionDomain,
+ byte[] classfileBuffer)
+ throws IllegalClassFormatException;
+}
+
diff --git a/libjava/classpath/java/lang/instrument/IllegalClassFormatException.java b/libjava/classpath/java/lang/instrument/IllegalClassFormatException.java
new file mode 100644
index 0000000..c75bde0
--- /dev/null
+++ b/libjava/classpath/java/lang/instrument/IllegalClassFormatException.java
@@ -0,0 +1,70 @@
+/* IllegalClassFormatException.java -- thrown when an array of byte does
+ not represent a valid class file
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.instrument;
+
+/**
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+public class IllegalClassFormatException extends Exception
+{
+
+ /**
+ * Compatible with JDK 1.5+.
+ */
+ private static final long serialVersionUID = -3841736710924794009L;
+
+ /**
+ * Create an exception without a message.
+ */
+ public IllegalClassFormatException()
+ {
+ }
+
+ /**
+ * Create an exception with a message.
+ *
+ * @param s the message
+ */
+ public IllegalClassFormatException(String s)
+ {
+ super(s);
+ }
+}
diff --git a/libjava/classpath/java/lang/instrument/Instrumentation.java b/libjava/classpath/java/lang/instrument/Instrumentation.java
new file mode 100644
index 0000000..81aefa6
--- /dev/null
+++ b/libjava/classpath/java/lang/instrument/Instrumentation.java
@@ -0,0 +1,139 @@
+/* Instrumentation.java -- Implementation of this interface is used to
+ instrument Java bytecode.
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.instrument;
+
+/**
+ * An Instrumentation object has transformers that will
+ * be called each time a class is defined or redefined.
+ * The object is given to a <code>premain</code> function
+ * that is called before the <code>main</code> function.
+ *
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+public interface Instrumentation
+{
+
+ /**
+ * Adds a <code>ClassFileTransformer</class> object
+ * to the instrumentation. Each time a class is defined
+ * or redefined, the <code>transform</code> method of the
+ * <code>transformer</code> object is called.
+ *
+ * @param transformer the transformer to add
+ * @throws NullPointerException if transformer is null
+ */
+ void addTransformer(ClassFileTransformer transformer);
+
+ /**
+ * Removes the given transformer from the set of transformers
+ * this Instrumentation object has.
+ *
+ * @param transformer the transformer to remove
+ * @return true if the transformer was found and removed, false if
+ * the transformer was not found
+ * @throws NullPointerException if transformer is null
+ */
+ boolean removeTransformer(ClassFileTransformer transformer);
+
+ /**
+ * Returns if the current JVM supports class redefinition
+ *
+ * @return true if the current JVM supports class redefinition
+ */
+ boolean isRedefineClassesSupported();
+
+ /**
+ * Redefine classes present in the definitions array, with
+ * the corresponding class files.
+ *
+ * @param definitions an array of classes to redefine
+ *
+ * @throws ClassNotFoundException if a class cannot be found
+ * @throws UnmodifiableClassException if a class cannot be modified
+ * @throws UnsupportedOperationException if the JVM does not support
+ * redefinition or the redefinition made unsupported changes
+ * @throws ClassFormatError if a class file is not valid
+ * @throws NoClassDefFoundError if a class name is not equal to the name
+ * in the class file specified
+ * @throws UnsupportedClassVersionError if the class file version numbers
+ * are unsupported
+ * @throws ClassCircularityError if circularity occured with the new
+ * classes
+ * @throws LinkageError if a linkage error occurs
+ * @throws NullPointerException if the definitions array is null, or any
+ * of its element
+ *
+ * @see #isRedefineClassesSupported()
+ * @see #addTransformer(java.lang.instrument.ClassFileTransformer)
+ * @see ClassFileTransformer
+ */
+ void redefineClasses(ClassDefinition[] definitions)
+ throws ClassNotFoundException,
+ UnmodifiableClassException;
+
+
+ /**
+ * Get all the classes loaded by the JVM.
+ *
+ * @return an array containing all the classes loaded by the JVM. The array
+ * is empty if no class is loaded.
+ */
+ Class[] getAllLoadedClasses();
+
+ /**
+ * Get all the classes loaded by a given class loader
+ *
+ * @param loader the loader
+ *
+ * @return an array containing all the classes loaded by the given loader.
+ * The array is empty if no class was loaded by the loader.
+ */
+ Class[] getInitiatedClasses(ClassLoader loader);
+
+ /**
+ * Get the size of an object. It contains the size of all fields.
+ *
+ * @param objectToSize the object
+ * @return the size of the object
+ * @throws NullPointerException if objectToSize is null.
+ */
+ long getObjectSize(Object objectToSize);
+}
diff --git a/libjava/classpath/java/lang/instrument/UnmodifiableClassException.java b/libjava/classpath/java/lang/instrument/UnmodifiableClassException.java
new file mode 100644
index 0000000..a01bd70
--- /dev/null
+++ b/libjava/classpath/java/lang/instrument/UnmodifiableClassException.java
@@ -0,0 +1,69 @@
+/* UnmodifiableClassException.java -- thrown when attempting to redefine
+ an unmodifiable class
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.instrument;
+
+/**
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+public class UnmodifiableClassException extends Exception
+{
+ /**
+ * Compatible with JDK 1.5+.
+ */
+ private static final long serialVersionUID = 1716652643585309178L;
+
+ /**
+ * Create an exception without a message.
+ */
+ public UnmodifiableClassException()
+ {
+ }
+
+ /**
+ * Create an exception with a message.
+ *
+ * @param s the message
+ */
+ public UnmodifiableClassException(String s)
+ {
+ super(s);
+ }
+}
diff --git a/libjava/classpath/java/lang/reflect/AccessibleObject.java b/libjava/classpath/java/lang/reflect/AccessibleObject.java
index 24418c9..8f09eac 100644
--- a/libjava/classpath/java/lang/reflect/AccessibleObject.java
+++ b/libjava/classpath/java/lang/reflect/AccessibleObject.java
@@ -1,5 +1,5 @@
/* java.lang.reflect.AccessibleObject
- Copyright (C) 2001, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.lang.reflect;
+import java.lang.annotation.Annotation;
+
/**
* This class is the superclass of various reflection classes, and
* allows sufficiently trusted code to bypass normal restrictions to
@@ -53,9 +55,10 @@ package java.lang.reflect;
* @see Method
* @see ReflectPermission
* @since 1.2
- * @status updated to 1.4
+ * @status updated to 1.5
*/
public class AccessibleObject
+ implements AnnotatedElement
{
/**
* True if this object is marked accessible, which means the reflected
@@ -156,4 +159,26 @@ public class AccessibleObject
throw new SecurityException("Cannot make object accessible: " + this);
this.flag = flag;
}
+
+ /* FIXME[GENERICS]: <T extends Annotation> T getAnnotation(Class <T>) */
+ public Annotation getAnnotation(Class annotationClass)
+ {
+ throw new AssertionError("Subclass must override this method");
+ }
+
+ public Annotation[] getAnnotations()
+ {
+ return getDeclaredAnnotations();
+ }
+
+ public Annotation[] getDeclaredAnnotations()
+ {
+ throw new AssertionError("Subclass must override this method");
+ }
+
+ /* FIXME[GENERICS]: Signature is Class<? extends Annotation> */
+ public boolean isAnnotationPresent(Class annotationClass)
+ {
+ return getAnnotation(annotationClass) != null;
+ }
}
diff --git a/libjava/classpath/java/lang/reflect/AnnotatedElement.java b/libjava/classpath/java/lang/reflect/AnnotatedElement.java
new file mode 100644
index 0000000..69a64a0
--- /dev/null
+++ b/libjava/classpath/java/lang/reflect/AnnotatedElement.java
@@ -0,0 +1,117 @@
+/* AnnotatedElement.java
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.reflect;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * <p>
+ * Represents an element that can be annotated. The methods of this interface
+ * provide reflection-based access to the annotations associated with a
+ * particular element, such as a class, field, method or package. Each
+ * annotation returned by these methods is both immutable and serializable.
+ * The returned arrays may be freely modified, without any effect on the
+ * arrays returned to future callers.
+ * </p>
+ * <p>
+ * If an annotation refers to a type or enumeration constant that is
+ * inaccessible, then a <code>TypeNotPresentException</code> or
+ * <code>EnumConstantNotPresentException</code> will be thrown. Likewise,
+ * invalid annotations will produce either a
+ * <code>AnnotationTypeMismatchException</code> or
+ * <code>IncompleteAnnotationException</code>.
+ * </p>
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+public interface AnnotatedElement
+{
+
+ /**
+ * Returns the element's annotation for the specified annotation type,
+ * or <code>null</code> if no such annotation exists.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return this element's annotation for the specified type, or
+ * <code>null</code> if no such annotation exists.
+ * @throws NullPointerException if the annotation class is <code>null</code>.
+ */
+ /* FIXME[GENERICS]: <T extends Annotation> T getAnnotation(Class <T>) */
+ Annotation getAnnotation(Class annotationClass);
+
+ /**
+ * Returns all annotations associated with the element. If there are
+ * no annotations associated with the element, then a zero-length array
+ * will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of the
+ * element, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return this element's annotations.
+ */
+ Annotation[] getAnnotations();
+
+ /**
+ * Returns all annotations directly defined by the element. If there are
+ * no annotations directly associated with the element, then a zero-length
+ * array will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * class, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @return the annotations directly defined by the element.
+ * @since 1.5
+ */
+ Annotation[] getDeclaredAnnotations();
+
+ /**
+ * Returns true if an annotation for the specified type is associated
+ * with the element. This is primarily a short-hand for using marker
+ * annotations.
+ *
+ * @param annotationClass the type of annotation to look for.
+ * @return true if an annotation exists for the specified type.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Signature is Class<? extends Annotation> */
+ boolean isAnnotationPresent(Class annotationClass);
+
+}
diff --git a/libjava/classpath/java/lang/reflect/Array.java b/libjava/classpath/java/lang/reflect/Array.java
index 35c77da..ae65ffb 100644
--- a/libjava/classpath/java/lang/reflect/Array.java
+++ b/libjava/classpath/java/lang/reflect/Array.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package java.lang.reflect;
-import gnu.classpath.Configuration;
-
/**
* Array holds static helper functions that allow you to create and
* manipulate arrays by reflection. Operations know how to perform widening
@@ -78,13 +76,6 @@ import gnu.classpath.Configuration;
*/
public final class Array
{
- static
- {
- if (Configuration.INIT_LOAD_LIBRARY)
- {
- System.loadLibrary("javalangreflect");
- }
- }
/**
* This class is uninstantiable.
@@ -107,7 +98,7 @@ public final class Array
public static Object newInstance(Class componentType, int length)
{
if (! componentType.isPrimitive())
- return createObjectArray(componentType, length);
+ return VMArray.createObjectArray(componentType, length);
if (componentType == boolean.class)
return new boolean[length];
if (componentType == byte.class)
@@ -653,7 +644,7 @@ public final class Array
Object toAdd = createMultiArray(type, dimensions, index - 1);
Class thisType = toAdd.getClass();
Object[] retval
- = (Object[]) createObjectArray(thisType, dimensions[index]);
+ = (Object[]) VMArray.createObjectArray(thisType, dimensions[index]);
if (dimensions[index] > 0)
retval[0] = toAdd;
int i = dimensions[index];
@@ -662,14 +653,4 @@ public final class Array
return retval;
}
- /**
- * Dynamically create an array of objects.
- *
- * @param type guaranteed to be a valid object type
- * @param dim the length of the array
- * @return the new array
- * @throws NegativeArraySizeException if dim is negative
- * @throws OutOfMemoryError if memory allocation fails
- */
- private static native Object createObjectArray(Class type, int dim);
}
diff --git a/libjava/classpath/java/lang/reflect/GenericDeclaration.java b/libjava/classpath/java/lang/reflect/GenericDeclaration.java
new file mode 100644
index 0000000..14f5ba8
--- /dev/null
+++ b/libjava/classpath/java/lang/reflect/GenericDeclaration.java
@@ -0,0 +1,63 @@
+/* GenericDeclaration.java
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.reflect;
+
+/**
+ * Represents an entity that declares one or more type parameters.
+ * This includes classes and methods (including constructors).
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+public interface GenericDeclaration
+{
+ /**
+ * Returns a <code>TypeVariable</code> object for each type variable
+ * declared by this entity, in order of declaration. An empty array
+ * is returned if no type variables are declared.
+ *
+ * @return an array of <code>TypeVariable</code> objects.
+ * @throws GenericSignatureFormatError if the signature format within the
+ * class file does not conform to that specified in the 3rd edition
+ * of the Java Virtual Machine Specification.
+ */
+ /* FIXME[GENERICS]: Should be TypeVariable<?>[] */
+ TypeVariable[] getTypeParameters();
+}
diff --git a/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java b/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java
index ab6928d..0f09522 100644
--- a/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java
+++ b/libjava/classpath/java/lang/reflect/GenericSignatureFormatError.java
@@ -51,6 +51,7 @@ package java.lang.reflect;
public class GenericSignatureFormatError
extends ClassFormatError
{
+ private static final long serialVersionUID = 6709919147137911034L;
/**
* Constructs a new <code>GenericSignatureFormatError</code>.
diff --git a/libjava/classpath/java/lang/reflect/MalformedParameterizedTypeException.java b/libjava/classpath/java/lang/reflect/MalformedParameterizedTypeException.java
new file mode 100644
index 0000000..50ae230
--- /dev/null
+++ b/libjava/classpath/java/lang/reflect/MalformedParameterizedTypeException.java
@@ -0,0 +1,60 @@
+/* MalformedParameterizedTypeException.java
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.reflect;
+
+/**
+ * This exception class is thrown when one of the reflection
+ * methods encountered an invalid parameterized type within
+ * the metadata of a class. One possible reason for this
+ * exception being thrown is the specification of too few or
+ * too many type variables.
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+public class MalformedParameterizedTypeException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = -5696557788586220964L;
+
+ public MalformedParameterizedTypeException()
+ {
+ }
+}
diff --git a/libjava/classpath/java/lang/reflect/Member.java b/libjava/classpath/java/lang/reflect/Member.java
index c39731f..fed962c 100644
--- a/libjava/classpath/java/lang/reflect/Member.java
+++ b/libjava/classpath/java/lang/reflect/Member.java
@@ -97,4 +97,13 @@ public interface Member
* @see Modifier
*/
int getModifiers();
+
+ /**
+ * Return true if this member is synthetic, meaning that it was
+ * created by the compiler and does not appear in the user's
+ * source code.
+ * @return true if the member is synthetic
+ * @since 1.5
+ */
+ boolean isSynthetic();
}
diff --git a/libjava/classpath/java/lang/reflect/Modifier.java b/libjava/classpath/java/lang/reflect/Modifier.java
index efc88c9..45fc4e3 100644
--- a/libjava/classpath/java/lang/reflect/Modifier.java
+++ b/libjava/classpath/java/lang/reflect/Modifier.java
@@ -158,6 +158,26 @@ public class Modifier
static final int ALL_FLAGS = 0xfff;
/**
+ * Flag indicating a bridge method.
+ */
+ static final int BRIDGE = 0x40;
+
+ /**
+ * Flag indicating a varargs method.
+ */
+ static final int VARARGS = 0x80;
+
+ /**
+ * Flag indicating a synthetic member.
+ */
+ static final int SYNTHETIC = 0x1000;
+
+ /**
+ * Flag indicating an enum constant or an enum class.
+ */
+ static final int ENUM = 0x4000;
+
+ /**
* Check whether the given modifier is abstract.
* @param mod the modifier.
* @return <code>true</code> if abstract, <code>false</code> otherwise.
@@ -288,7 +308,19 @@ public class Modifier
*/
public static String toString(int mod)
{
- return toString(mod, new StringBuffer()).toString();
+ return toString(mod, new StringBuilder()).toString();
+ }
+
+ /**
+ * Package helper method that can take a StringBuilder.
+ * @param mod the modifier
+ * @param r the StringBuilder to which the String representation is appended
+ * @return r, with information appended
+ */
+ static StringBuilder toString(int mod, StringBuilder r)
+ {
+ r.append(toString(mod, new StringBuffer()));
+ return r;
}
/**
diff --git a/libjava/classpath/java/lang/reflect/ParameterizedType.java b/libjava/classpath/java/lang/reflect/ParameterizedType.java
index 61081c9..7a8a7b4 100644
--- a/libjava/classpath/java/lang/reflect/ParameterizedType.java
+++ b/libjava/classpath/java/lang/reflect/ParameterizedType.java
@@ -63,7 +63,7 @@ package java.lang.reflect;
*
* @author Tom Tromey (tromey@redhat.com)
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
- * @see GenericTypeDeclaration
+ * @see GenericDeclaration
* @see TypeVariable
* @since 1.5
*/
diff --git a/libjava/classpath/java/lang/reflect/TypeVariable.java b/libjava/classpath/java/lang/reflect/TypeVariable.java
new file mode 100644
index 0000000..4ecc20c
--- /dev/null
+++ b/libjava/classpath/java/lang/reflect/TypeVariable.java
@@ -0,0 +1,99 @@
+/* TypeVariable.java
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.reflect;
+
+/**
+ * <p>
+ * This is a common interface for all type variables provided by
+ * the Java language. Instances are created the first time a type
+ * variable is needed by one of the reflective methods declared in
+ * this package.
+ * </p>
+ * <p>
+ * Creating a type variable requires resolving the appropriate type.
+ * This may involve resolving other classes as a side effect (e.g.
+ * if the type is nested inside other classes). Creation should not
+ * involve resolving the bounds. Repeated creation has no effect; an
+ * equivalent instance is returned. Caching is not required, but all
+ * instances must be <code>equal()</code> to each other.
+ * </p>
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ * @since 1.5
+ */
+/* FIXME[GENERICS]: Should be TypeVariable<T extends GenericDeclaration> */
+public interface TypeVariable
+ extends Type
+{
+
+ /**
+ * Returns an array of <code>Type</code> objects which represent the upper
+ * bounds of this type variable. There is always a default bound of
+ * <code>Object</code>. Any <code>ParameterizedType</code>s will be
+ * created as necessary, and other types resolved.
+ *
+ * @return an array of <code>Type</code> objects representing the upper
+ * bounds.
+ * @throws TypeNotPresentException if any of the bounds refer to a
+ * non-existant type.
+ * @throws MalformedParameterizedTypeException if the creation of a
+ * <code>ParameterizedType</code> fails.
+ */
+ Type[] getBounds();
+
+
+ /**
+ * Returns a representation of the declaration used to declare this
+ * type variable.
+ *
+ * @return the <code>GenericDeclaration</code> object for this type
+ * variable.
+ */
+ /* FIXME[GENERICS]: Should return type T */
+ GenericDeclaration getGenericDeclaration();
+
+ /**
+ * Returns the name of the type variable, as written in the source
+ * code.
+ *
+ * @return the name of the type variable.
+ */
+ String getName();
+}
diff --git a/libjava/classpath/java/math/class-dependencies.conf b/libjava/classpath/java/math/class-dependencies.conf
deleted file mode 100644
index 4fbf75e..0000000
--- a/libjava/classpath/java/math/class-dependencies.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-# end of file
diff --git a/libjava/classpath/java/net/InetSocketAddress.java b/libjava/classpath/java/net/InetSocketAddress.java
index edeaf27..9125457 100644
--- a/libjava/classpath/java/net/InetSocketAddress.java
+++ b/libjava/classpath/java/net/InetSocketAddress.java
@@ -1,5 +1,5 @@
/* InetSocketAddress.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -107,10 +107,26 @@ public class InetSocketAddress extends SocketAddress
* @param hostname The hostname for the socket address
* @param port The port for the socket address
*
- * @exception IllegalArgumentException If the port number is illegal
+ * @exception IllegalArgumentException If the port number is illegal or
+ * the hostname argument is null
*/
public InetSocketAddress(String hostname, int port)
- throws IllegalArgumentException
+ {
+ this(hostname, port, true);
+ }
+
+ /**
+ * Constructs an InetSocketAddress instance.
+ *
+ * @param hostname The hostname for the socket address
+ * @param port The port for the socket address
+ * @param resolve <code>true</code> if the address has to be resolved,
+ * <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException If the port number is illegal or
+ * the hostname argument is null
+ */
+ private InetSocketAddress(String hostname, int port, boolean resolve)
{
if (hostname == null)
throw new IllegalArgumentException("Null host name value");
@@ -120,15 +136,36 @@ public class InetSocketAddress extends SocketAddress
this.port = port;
this.hostname = hostname;
+ this.addr = null;
- try
- {
- this.addr = InetAddress.getByName(hostname);
- }
- catch (Exception e) // UnknownHostException, SecurityException
- {
- this.addr = null;
- }
+ if (resolve)
+ {
+ try
+ {
+ this.addr = InetAddress.getByName(hostname);
+ }
+ catch (Exception e) // UnknownHostException, SecurityException
+ {
+ // Do nothing here. this.addr is already set to null.
+ }
+ }
+
+ }
+
+ /**
+ * Creates an unresolved <code>InetSocketAddress</code> object.
+ *
+ * @param hostname The hostname for the socket address
+ * @param port The port for the socket address
+ *
+ * @exception IllegalArgumentException If the port number is illegal or
+ * the hostname argument is null
+ *
+ * @since 1.5
+ */
+ public static InetSocketAddress createUnresolved(String hostname, int port)
+ {
+ return new InetSocketAddress(hostname, port, false);
}
/**
diff --git a/libjava/classpath/java/net/MimeTypeMapper.java b/libjava/classpath/java/net/MimeTypeMapper.java
index 1747f4d..8153694 100644
--- a/libjava/classpath/java/net/MimeTypeMapper.java
+++ b/libjava/classpath/java/net/MimeTypeMapper.java
@@ -37,7 +37,17 @@ exception statement from your version. */
package java.net;
+import gnu.classpath.SystemProperties;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.LineNumberReader;
import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
/**
@@ -56,131 +66,230 @@ class MimeTypeMapper implements FileNameMap
*/
protected static final String[][] mime_strings =
{
- { "application/mac-binhex40", "hqx" },
- { "application/mac-compactpro", "cpt" },
- { "application/msword", "doc" },
- { "application/octet-stream", "bin" },
- { "application/octet-stream", "dms" },
- { "application/octet-stream", "lha" },
- { "application/octet-stream", "lzh" },
- { "application/octet-stream", "exe" },
- { "application/octet-stream", "class" },
- { "application/oda", "oda" },
- { "application/pdf", "pdf" },
- { "application/postscript", "ai" },
- { "application/postscript", "eps" },
- { "application/postscript", "ps" },
- { "application/powerpoint", "ppt" },
- { "application/rtf", "rtf" },
- { "application/x-bcpio", "bcpio" },
- { "application/x-cdlink", "vcd" },
- { "application/x-compress", "Z" },
- { "application/x-cpio", "cpio" },
- { "application/x-csh", "csh" },
- { "application/x-director", "dcr" },
- { "application/x-director", "dir" },
- { "application/x-director", "dxr" },
- { "application/x-dvi", "dvi" },
- { "application/x-gtar", "gtar" },
- { "application/x-gzip", "gz" },
- { "application/x-hdf", "hdf" },
- { "application/x-httpd-cgi", "cgi" },
- { "application/x-koan", "skp" },
- { "application/x-koan", "skd" },
- { "application/x-koan", "skt" },
- { "application/x-koan", "skm" },
- { "application/x-latex", "latex" },
- { "application/x-mif", "mif" },
- { "application/x-netcdf", "nc" },
- { "application/x-netcdf", "cdf" },
- { "application/x-sh", "sh" },
- { "application/x-shar", "shar" },
- { "application/x-stuffit", "sit" },
- { "application/x-sv4cpio", "sv4cpio" },
- { "application/x-sv4crc", "sv4crc" },
- { "application/x-tar", "tar" },
- { "application/x-tcl", "tcl" },
- { "application/x-tex", "tex" },
- { "application/x-texinfo", "texinfo" },
- { "application/x-texinfo", "texi" },
- { "application/x-troff", "t" },
- { "application/x-troff", "tr" },
- { "application/x-troff", "roff" },
- { "application/x-troff-man", "man" },
- { "application/x-troff-me", "me" },
- { "application/x-troff-ms", "ms" },
- { "application/x-ustar", "ustar" },
- { "application/x-wais-source", "src" },
- { "application/zip", "zip" },
- { "audio/basic", "au" },
- { "audio/basic", "snd" },
- { "audio/mpeg", "mpga" },
- { "audio/mpeg", "mp2" },
- { "audio/mpeg", "mp3" },
- { "audio/x-aiff", "aif" },
- { "audio/x-aiff", "aiff" },
- { "audio/x-aiff", "aifc" },
- { "audio/x-pn-realaudio", "ram" },
- { "audio/x-pn-realaudio-plugin", "rpm" },
- { "audio/x-realaudio", "ra" },
- { "audio/x-wav", "wav" },
- { "chemical/x-pdb", "pdb" },
- { "chemical/x-pdb", "xyz" },
- { "image/gif", "gif" },
- { "image/ief", "ief" },
- { "image/jpeg", "jpeg" },
- { "image/jpeg", "jpg" },
- { "image/jpeg", "jpe" },
- { "image/png", "png" },
- { "image/tiff", "tiff" },
- { "image/tiff", "tif" },
- { "image/x-cmu-raster", "ras" },
- { "image/x-portable-anymap", "pnm" },
- { "image/x-portable-bitmap", "pbm" },
- { "image/x-portable-graymap", "pgm" },
- { "image/x-portable-pixmap", "ppm" },
- { "image/x-rgb", "rgb" },
- { "image/x-xbitmap", "xbm" },
- { "image/x-xpixmap", "xpm" },
- { "image/x-xwindowdump", "xwd" },
- { "text/html", "html" },
- { "text/html", "htm" },
- { "text/plain", "txt" },
- { "text/richtext", "rtx" },
- { "text/tab-separated-values", "tsv" },
- { "text/x-setext", "etx" },
- { "text/x-sgml", "sgml" },
- { "text/x-sgml", "sgm" },
- { "video/mpeg", "mpeg" },
- { "video/mpeg", "mpg" },
- { "video/mpeg", "mpe" },
- { "video/quicktime", "qt" },
- { "video/quicktime", "mov" },
- { "video/x-msvideo", "avi" },
- { "video/x-sgi-movie", "movie" },
- { "x-conference/x-cooltalk", "ice" },
- { "x-world/x-vrml", "wrl" },
- { "x-world/x-vrml", "vrml" }
+ { "ai", "application/postscript" }
+ , { "aif", "audio/x-aiff" }
+ , { "aifc", "audio/x-aiff" }
+ , { "aiff", "audio/x-aiff" }
+ , { "asc", "text/plain" }
+ , { "au", "audio/basic" }
+ , { "avi", "video/x-msvideo" }
+ , { "bcpio", "application/x-bcpio" }
+ , { "bin", "application/octet-stream" }
+ , { "bmp", "image/bmp" }
+ , { "bz2", "application/x-bzip2" }
+ , { "cdf", "application/x-netcdf" }
+ , { "chrt", "application/x-kchart" }
+ , { "class", "application/octet-stream" }
+ , { "cpio", "application/x-cpio" }
+ , { "cpt", "application/mac-compactpro" }
+ , { "csh", "application/x-csh" }
+ , { "css", "text/css" }
+ , { "dcr", "application/x-director" }
+ , { "dir", "application/x-director" }
+ , { "djv", "image/vnd.djvu" }
+ , { "djvu", "image/vnd.djvu" }
+ , { "dll", "application/octet-stream" }
+ , { "dms", "application/octet-stream" }
+ , { "doc", "application/msword" }
+ , { "dvi", "application/x-dvi" }
+ , { "dxr", "application/x-director" }
+ , { "eps", "application/postscript" }
+ , { "etx", "text/x-setext" }
+ , { "exe", "application/octet-stream" }
+ , { "ez", "application/andrew-inset" }
+ , { "gif", "image/gif" }
+ , { "gtar", "application/x-gtar" }
+ , { "gz", "application/x-gzip" }
+ , { "hdf", "application/x-hdf" }
+ , { "hqx", "application/mac-binhex40" }
+ , { "htm", "text/html" }
+ , { "html", "text/html" }
+ , { "ice", "x-conference/x-cooltalk" }
+ , { "ief", "image/ief" }
+ , { "iges", "model/iges" }
+ , { "igs", "model/iges" }
+ , { "img", "application/octet-stream" }
+ , { "iso", "application/octet-stream" }
+ , { "jpe", "image/jpeg" }
+ , { "jpeg", "image/jpeg" }
+ , { "jpg", "image/jpeg" }
+ , { "js", "application/x-javascript" }
+ , { "kar", "audio/midi" }
+ , { "kil", "application/x-killustrator" }
+ , { "kpr", "application/x-kpresenter" }
+ , { "kpt", "application/x-kpresenter" }
+ , { "ksp", "application/x-kspread" }
+ , { "kwd", "application/x-kword" }
+ , { "kwt", "application/x-kword" }
+ , { "latex", "application/x-latex" }
+ , { "lha", "application/octet-stream" }
+ , { "lzh", "application/octet-stream" }
+ , { "m3u", "audio/x-mpegurl" }
+ , { "man", "application/x-troff-man" }
+ , { "me", "application/x-troff-me" }
+ , { "mesh", "model/mesh" }
+ , { "mid", "audio/midi" }
+ , { "midi", "audio/midi" }
+ , { "mif", "application/vnd.mif" }
+ , { "mov", "video/quicktime" }
+ , { "movie", "video/x-sgi-movie" }
+ , { "mp2", "audio/mpeg" }
+ , { "mp3", "audio/mpeg" }
+ , { "mpe", "video/mpeg" }
+ , { "mpeg", "video/mpeg" }
+ , { "mpg", "video/mpeg" }
+ , { "mpga", "audio/mpeg" }
+ , { "ms", "application/x-troff-ms" }
+ , { "msh", "model/mesh" }
+ , { "mxu", "video/vnd.mpegurl" }
+ , { "nc", "application/x-netcdf" }
+ , { "ogg", "application/ogg" }
+ , { "pbm", "image/x-portable-bitmap" }
+ , { "pdb", "chemical/x-pdb" }
+ , { "pdf", "application/pdf" }
+ , { "pgm", "image/x-portable-graymap" }
+ , { "pgn", "application/x-chess-pgn" }
+ , { "png", "image/png" }
+ , { "pnm", "image/x-portable-anymap" }
+ , { "ppm", "image/x-portable-pixmap" }
+ , { "ppt", "application/vnd.ms-powerpoint" }
+ , { "ps", "application/postscript" }
+ , { "qt", "video/quicktime" }
+ , { "ra", "audio/x-realaudio" }
+ , { "ram", "audio/x-pn-realaudio" }
+ , { "ras", "image/x-cmu-raster" }
+ , { "rgb", "image/x-rgb" }
+ , { "rm", "audio/x-pn-realaudio" }
+ , { "roff", "application/x-troff" }
+ , { "rpm", "application/x-rpm" }
+ , { "rtf", "text/rtf" }
+ , { "rtx", "text/richtext" }
+ , { "sgm", "text/sgml" }
+ , { "sgml", "text/sgml" }
+ , { "sh", "application/x-sh" }
+ , { "shar", "application/x-shar" }
+ , { "silo", "model/mesh" }
+ , { "sit", "application/x-stuffit" }
+ , { "skd", "application/x-koan" }
+ , { "skm", "application/x-koan" }
+ , { "skp", "application/x-koan" }
+ , { "skt", "application/x-koan" }
+ , { "smi", "application/smil" }
+ , { "smil", "application/smil" }
+ , { "snd", "audio/basic" }
+ , { "so", "application/octet-stream" }
+ , { "spl", "application/x-futuresplash" }
+ , { "src", "application/x-wais-source" }
+ , { "stc", "application/vnd.sun.xml.calc.template" }
+ , { "std", "application/vnd.sun.xml.draw.template" }
+ , { "sti", "application/vnd.sun.xml.impress.template" }
+ , { "stw", "application/vnd.sun.xml.writer.template" }
+ , { "sv4cpio", "application/x-sv4cpio" }
+ , { "sv4crc", "application/x-sv4crc" }
+ , { "swf", "application/x-shockwave-flash" }
+ , { "sxc", "application/vnd.sun.xml.calc" }
+ , { "sxd", "application/vnd.sun.xml.draw" }
+ , { "sxg", "application/vnd.sun.xml.writer.global" }
+ , { "sxi", "application/vnd.sun.xml.impress" }
+ , { "sxm", "application/vnd.sun.xml.math" }
+ , { "sxw", "application/vnd.sun.xml.writer" }
+ , { "t", "application/x-troff" }
+ , { "tar", "application/x-tar" }
+ , { "tcl", "application/x-tcl" }
+ , { "tex", "application/x-tex" }
+ , { "texi", "application/x-texinfo" }
+ , { "texinfo", "application/x-texinfo" }
+ , { "tgz", "application/x-gzip" }
+ , { "tif", "image/tiff" }
+ , { "tiff", "image/tiff" }
+ , { "torrent", "application/x-bittorrent" }
+ , { "tr", "application/x-troff" }
+ , { "tsv", "text/tab-separated-values" }
+ , { "txt", "text/plain" }
+ , { "ustar", "application/x-ustar" }
+ , { "vcd", "application/x-cdlink" }
+ , { "vrml", "model/vrml" }
+ , { "wav", "audio/x-wav" }
+ , { "wbmp", "image/vnd.wap.wbmp" }
+ , { "wbxml", "application/vnd.wap.wbxml" }
+ , { "wml", "text/vnd.wap.wml" }
+ , { "wmlc", "application/vnd.wap.wmlc" }
+ , { "wmls", "text/vnd.wap.wmlscript" }
+ , { "wmlsc", "application/vnd.wap.wmlscriptc" }
+ , { "wrl", "model/vrml" }
+ , { "xbm", "image/x-xbitmap" }
+ , { "xht", "application/xhtml+xml" }
+ , { "xhtml", "application/xhtml+xml" }
+ , { "xls", "application/vnd.ms-excel" }
+ , { "xml", "text/xml" }
+ , { "xpm", "image/x-xpixmap" }
+ , { "xsl", "text/xml" }
+ , { "xwd", "image/x-xwindowdump" }
+ , { "xyz", "chemical/x-xyz" }
+ , { "zip", "application/zip" }
};
/**
* The MIME types above are put into this Hashtable for faster lookup.
*/
- private static Hashtable mime_types = new Hashtable(150);
-
- // Static initializer to load MIME types into Hashtable
- static
- {
- for (int i = 0; i < mime_strings.length; i++)
- mime_types.put(mime_strings[i][1], mime_strings[i][0]);
- }
+ private Hashtable mime_types = new Hashtable(150);
/**
* Create a new <code>MimeTypeMapper</code> object.
*/
public MimeTypeMapper()
{
- // Do nothing here.
+ for (int i = 0; i < mime_strings.length; i++)
+ mime_types.put(mime_strings[i][0], mime_strings[i][1]);
+
+ // Now read from the system mime database, if it exists. Entries found
+ // here override our internal ones.
+ try
+ {
+ // On Linux this usually means /etc/mime.types.
+ String file
+ = SystemProperties.getProperty("gnu.classpath.mime.types.file");
+ if (file != null)
+ fillFromFile(mime_types, file);
+ }
+ catch (IOException ignore)
+ {
+ }
+ }
+
+ public static void fillFromFile (Map table, String fname)
+ throws IOException
+ {
+ LineNumberReader reader =
+ new LineNumberReader (new FileReader (fname));
+
+ while (reader.ready ())
+ {
+ StringTokenizer tokenizer =
+ new StringTokenizer (reader.readLine ());
+
+ try
+ {
+ String t = tokenizer.nextToken ();
+
+ if (! t.startsWith ("#"))
+ {
+ while (true)
+ {
+ // Read the next extension
+ String e = tokenizer.nextToken ();
+ if ((e != null) && (! e.startsWith ("#")))
+ table.put (e, t);
+ else
+ break;
+ }
+ }
+ }
+ catch (NoSuchElementException ex)
+ {
+ // Do nothing.
+ }
+ }
}
/**
@@ -210,4 +319,27 @@ class MimeTypeMapper implements FileNameMap
else
return type;
}
+
+ /**
+ * Run this class as a program to create a new mime_strings table.
+ */
+ public static void main(String[] args) throws IOException
+ {
+ TreeMap map = new TreeMap();
+ // It is fine to hard-code the name here. This is only ever
+ // used by maintainers, who can hack it if they need to re-run
+ // it.
+ fillFromFile(map, "/etc/mime.types");
+ Iterator it = map.keySet().iterator();
+ boolean first = true;
+ while (it.hasNext())
+ {
+ String key = (String) it.next();
+ String value = (String) map.get(key);
+ // Put the "," first since it is easier to make correct syntax this way.
+ System.out.println(" " + (first ? " " : ", ")
+ + "{ \"" + key + "\", \"" + value + "\" }");
+ first = false;
+ }
+ }
}
diff --git a/libjava/classpath/java/net/URI.java b/libjava/classpath/java/net/URI.java
index 39e8dad..401352f 100644
--- a/libjava/classpath/java/net/URI.java
+++ b/libjava/classpath/java/net/URI.java
@@ -487,16 +487,14 @@ public final class URI
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
- if (legalCharacters.indexOf(c) == -1)
+ if ((legalCharacters.indexOf(c) == -1)
+ && (c <= 127))
{
- if (c <= 127)
- {
- sb.append('%');
- sb.append(HEX.charAt(c / 16));
- sb.append(HEX.charAt(c % 16));
- }
+ sb.append('%');
+ sb.append(HEX.charAt(c / 16));
+ sb.append(HEX.charAt(c % 16));
}
- else
+ else
sb.append(c);
}
return sb.toString();
diff --git a/libjava/classpath/java/net/URLClassLoader.java b/libjava/classpath/java/net/URLClassLoader.java
index 9e489db..183e645 100644
--- a/libjava/classpath/java/net/URLClassLoader.java
+++ b/libjava/classpath/java/net/URLClassLoader.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package java.net;
+import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.File;
@@ -46,6 +47,7 @@ import java.io.FileInputStream;
import java.io.FilePermission;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.CodeSource;
@@ -315,27 +317,51 @@ public class URLClassLoader extends SecureClassLoader
jarfile =
((JarURLConnection) baseJarURL.openConnection()).getJarFile();
-
+
Manifest manifest;
Attributes attributes;
String classPathString;
- if ((manifest = jarfile.getManifest()) != null
+ this.classPath = new Vector();
+
+ // This goes through the cached jar files listed
+ // in the INDEX.LIST file. All the jars found are added
+ // to the classPath vector so they can be loaded.
+ String dir = "META-INF/INDEX.LIST";
+ if (jarfile.getEntry(dir) != null)
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(new URL(baseJarURL,
+ dir).openStream()));
+ String line = br.readLine();
+ while (line != null)
+ {
+ if (line.endsWith(".jar"))
+ {
+ try
+ {
+ this.classPath.add(new URL(baseURL, line));
+ }
+ catch (java.net.MalformedURLException xx)
+ {
+ // Give up
+ }
+ }
+ line = br.readLine();
+ }
+ }
+ else if ((manifest = jarfile.getManifest()) != null
&& (attributes = manifest.getMainAttributes()) != null
&& ((classPathString
= attributes.getValue(Attributes.Name.CLASS_PATH))
!= null))
- {
- this.classPath = new Vector();
-
+ {
StringTokenizer st = new StringTokenizer(classPathString, " ");
while (st.hasMoreElements ())
{
String e = st.nextToken ();
try
{
- URL url = new URL(baseURL, e);
- this.classPath.add(url);
+ this.classPath.add(new URL(baseURL, e));
}
catch (java.net.MalformedURLException xx)
{
@@ -538,9 +564,14 @@ public class URLClassLoader extends SecureClassLoader
{
try
{
- File file = new File(dir, name).getCanonicalFile();
- if (file.exists() && !file.isDirectory())
- return new FileResource(this, file);
+ // Make sure that all components in name are valid by walking through
+ // them
+ File file = walkPathComponents(name);
+
+ if (file == null)
+ return null;
+
+ return new FileResource(this, file);
}
catch (IOException e)
{
@@ -548,6 +579,65 @@ public class URLClassLoader extends SecureClassLoader
}
return null;
}
+
+ /**
+ * Walk all path tokens and check them for validity. At no moment, we are
+ * allowed to reach a directory located "above" the root directory, stored
+ * in "dir" property. We are also not allowed to enter a non existing
+ * directory or a non directory component (plain file, symbolic link, ...).
+ * An empty or null path is valid. Pathnames components are separated by
+ * <code>File.separatorChar</code>
+ *
+ * @param resourceFileName the name to be checked for validity.
+ * @return the canonical file pointed by the resourceFileName or null if the
+ * walking failed
+ * @throws IOException in case of issue when creating the canonical
+ * resulting file
+ * @see File#separatorChar
+ */
+ private File walkPathComponents(String resourceFileName) throws IOException
+ {
+ StringTokenizer stringTokenizer = new StringTokenizer(resourceFileName, File.separator);
+ File currentFile = dir;
+ int tokenCount = stringTokenizer.countTokens();
+
+ for (int i = 0; i < tokenCount - 1; i++)
+ {
+ String currentToken = stringTokenizer.nextToken();
+
+ // If we are at the root directory and trying to go up, the walking is
+ // finished with an error
+ if ("..".equals(currentToken) && currentFile.equals(dir))
+ return null;
+
+ currentFile = new File(currentFile, currentToken);
+
+ // If the current file doesn't exist or is not a directory, the walking is
+ // finished with an error
+ if (! (currentFile.exists() && currentFile.isDirectory()))
+ return null;
+
+ }
+
+ // Treat the last token differently, if it exists, because it does not need
+ // to be a directory
+ if (tokenCount > 0)
+ {
+ String currentToken = stringTokenizer.nextToken();
+
+ if ("..".equals(currentToken) && currentFile.equals(dir))
+ return null;
+
+ currentFile = new File(currentFile, currentToken);
+
+ // If the current file doesn't exist, the walking is
+ // finished with an error
+ if (! currentFile.exists())
+ return null;
+ }
+
+ return currentFile.getCanonicalFile();
+ }
}
static final class FileResource extends Resource
diff --git a/libjava/classpath/java/net/URLConnection.java b/libjava/classpath/java/net/URLConnection.java
index b4a55a0..1f78dd8 100644
--- a/libjava/classpath/java/net/URLConnection.java
+++ b/libjava/classpath/java/net/URLConnection.java
@@ -1,5 +1,5 @@
/* URLConnection.java -- Abstract superclass for reading from URL's
- Copyright (C) 1998, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,9 @@ exception statement from your version. */
package java.net;
+import gnu.classpath.NotImplementedException;
+import gnu.classpath.SystemProperties;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -49,6 +52,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
+import java.util.StringTokenizer;
/**
* Written using on-line Java Platform 1.2 API Specification, as well
@@ -114,6 +118,12 @@ public abstract class URLConnection
private static boolean defaultUseCaches = true;
/**
+ * Default internal content handler factory.
+ */
+ private static ContentHandlerFactory defaultFactory
+ = new gnu.java.net.DefaultContentHandlerFactory();
+
+ /**
* This variable determines whether or not interaction is allowed with
* the user. For example, to prompt for a username and password.
*/
@@ -160,6 +170,7 @@ public abstract class URLConnection
* This is the URL associated with this connection
*/
protected URL url;
+
private static SimpleDateFormat[] dateFormats;
private static boolean dateformats_initialized;
@@ -168,7 +179,7 @@ public abstract class URLConnection
/**
* Creates a URL connection to a given URL. A real connection is not made.
- * Use #connect to do this.
+ * Use <code>connect()</code> to do this.
*
* @param url The Object to create the URL connection to
*
@@ -277,8 +288,8 @@ public abstract class URLConnection
/**
* Return a String representing the header value at the specified index.
* This allows the caller to walk the list of header fields. The analogous
- * getHeaderFieldKey(int) method allows access to the corresponding key
- * for this header field
+ * {@link #getHeaderField(int)} method allows access to the corresponding
+ * key for this header field
*
* @param index The index into the header field list to retrieve the value for
*
@@ -305,9 +316,10 @@ public abstract class URLConnection
}
/**
- * Returns a map of all sent header fields
- *
- * @return all header fields
+ * Returns an unmodifiable Map containing all sent header fields.
+ *
+ * @return The map of header fields. The map consists of String keys with
+ * an unmodifiable List of String objects as value.
*
* @since 1.4
*/
@@ -355,7 +367,7 @@ public abstract class URLConnection
* @param defaultValue The default date if the header field is not found
* or can't be converted.
*
- * @return Returns the date value of the header filed or the default value
+ * @return The date value of the header filed or the default value
* if the field is missing or malformed
*/
public long getHeaderFieldDate(String name, long defaultValue)
@@ -388,8 +400,8 @@ public abstract class URLConnection
/**
* Returns a String representing the header key at the specified index.
* This allows the caller to walk the list of header fields. The analogous
- * getHeaderField(int) method allows access to the corresponding value for
- * this tag.
+ * {@link #getHeaderField(int)} method allows access to the corresponding
+ * value for this tag.
*
* @param index The index into the header field list to retrieve the key for.
*
@@ -458,10 +470,16 @@ public abstract class URLConnection
* @exception UnknownServiceException If the protocol does not support the
* content type
*/
- public Object getContent(Class[] classes) throws IOException
+ public Object getContent(Class[] classes)
+ throws IOException
{
- // FIXME: implement this
- return getContent();
+ if (! connected)
+ connect();
+ String type = getContentType();
+ ContentHandler ch = getContentHandler(type);
+ if (ch != null)
+ return ch.getContent(this, classes);
+ throw new UnknownServiceException("protocol does not support the content type");
}
/**
@@ -722,7 +740,9 @@ public abstract class URLConnection
}
/**
- * Sets the value of the named request property
+ * Sets the value of the named request property.
+ * This method does overwrite the value of existing properties with
+ * the new value.
*
* @param key The name of the property
* @param value The value of the property
@@ -757,8 +777,8 @@ public abstract class URLConnection
* @exception IllegalStateException If already connected
* @exception NullPointerException If key is null
*
- * @see URLConnection#getRequestProperty(String key)
- * @see URLConnection#setRequestProperty(String key, String value)
+ * @see URLConnection#getRequestProperty(String)
+ * @see URLConnection#setRequestProperty(String, String)
*
* @since 1.4
*/
@@ -783,8 +803,8 @@ public abstract class URLConnection
*
* @exception IllegalStateException If already connected
*
- * @see URLConnection#setRequestProperty(String key, String value)
- * @see URLConnection#addRequestProperty(String key, String value)
+ * @see URLConnection#setRequestProperty(String, String)
+ * @see URLConnection#addRequestProperty(String, String)
*/
public String getRequestProperty(String key)
{
@@ -798,8 +818,9 @@ public abstract class URLConnection
/**
* Returns an unmodifiable Map containing the request properties.
- *
- * @return The map of properties
+ *
+ * @return The map of properties. The map consists of String keys with an
+ * unmodifiable List of String objects as value.
*
* @exception IllegalStateException If already connected
*
@@ -826,7 +847,7 @@ public abstract class URLConnection
* @deprecated 1.3 The method setRequestProperty should be used instead.
* This method does nothing now.
*
- * @see URLConnection#setRequestProperty(String key, String value)
+ * @see URLConnection#setRequestProperty(String, String)
*/
public static void setDefaultRequestProperty(String key, String value)
{
@@ -845,7 +866,7 @@ public abstract class URLConnection
* @deprecated 1.3 The method getRequestProperty should be used instead.
* This method does nothing now.
*
- * @see URLConnection#getRequestProperty(String key)
+ * @see URLConnection#getRequestProperty(String)
*/
public static String getDefaultRequestProperty(String key)
{
@@ -913,8 +934,10 @@ public abstract class URLConnection
* @exception IOException If an error occurs
*/
public static String guessContentTypeFromStream(InputStream is)
- throws IOException
+ throws IOException, NotImplementedException
{
+ // See /etc/gnome-vfs-mime-magic or /etc/mime-magic for a reasonable
+ // idea of how to handle this.
return "application/octet-stream";
}
@@ -969,44 +992,66 @@ public abstract class URLConnection
if (factory != null)
handler = factory.createContentHandler(contentType);
- // Then try our default class.
- try
- {
- String typeClass = contentType.replace('/', '.');
+ // Now try default factory. Using this factory to instantiate built-in
+ // content handlers is preferable
+ if (handler == null)
+ handler = defaultFactory.createContentHandler(contentType);
- // Deal with "Content-Type: text/html; charset=ISO-8859-1".
- int parameterBegin = typeClass.indexOf(';');
- if (parameterBegin >= 1)
- typeClass = typeClass.substring(0, parameterBegin);
-
- Class cls = Class.forName("gnu.java.net.content." + typeClass);
- Object obj = cls.newInstance();
-
- if (obj instanceof ContentHandler)
- {
- handler = (ContentHandler) obj;
- return handler;
- }
- }
- catch (ClassNotFoundException e)
- {
- // Ignore.
- }
- catch (InstantiationException e)
- {
- // Ignore.
- }
- catch (IllegalAccessException e)
+ // User-set factory has not returned a handler. Use the default search
+ // algorithm.
+ if (handler == null)
{
- // Ignore.
+ // Get the list of packages to check and append our default handler
+ // to it, along with the JDK specified default as a last resort.
+ // Except in very unusual environments the JDK specified one shouldn't
+ // ever be needed (or available).
+ String propVal = SystemProperties.getProperty("java.content.handler.pkgs");
+ propVal = (((propVal == null) ? "" : (propVal + "|"))
+ + "gnu.java.net.content|sun.net.www.content");
+
+ // Deal with "Content-Type: text/html; charset=ISO-8859-1".
+ int parameterBegin = contentType.indexOf(';');
+ if (parameterBegin >= 1)
+ contentType = contentType.substring(0, parameterBegin);
+ contentType = contentType.trim();
+
+ // Replace the '/' character in the content type with '.' and
+ // all other non-alphabetic, non-numeric characters with '_'.
+ char[] cArray = contentType.toCharArray();
+ for (int i = 0; i < cArray.length; i++)
+ {
+ if (cArray[i] == '/')
+ cArray[i] = '.';
+ else if (! ((cArray[i] >= 'A' && cArray[i] <= 'Z') ||
+ (cArray[i] >= 'a' && cArray[i] <= 'z') ||
+ (cArray[i] >= '0' && cArray[i] <= '9')))
+ cArray[i] = '_';
+ }
+ String contentClass = new String(cArray);
+
+ // See if a class of this content type exists in any of the packages.
+ StringTokenizer pkgPrefix = new StringTokenizer(propVal, "|");
+ do
+ {
+ String facName = pkgPrefix.nextToken() + "." + contentClass;
+ try
+ {
+ handler =
+ (ContentHandler) Class.forName(facName).newInstance();
+ }
+ catch (Exception e)
+ {
+ // Can't instantiate; handler still null, go on to next element.
+ }
+ } while (handler == null && pkgPrefix.hasMoreTokens());
}
return handler;
}
// We don't put these in a static initializer, because it creates problems
- // with initializer co-dependency: SimpleDateFormat's constructors eventually
- // depend on URLConnection (via the java.text.*Symbols classes).
+ // with initializer co-dependency: SimpleDateFormat's constructors
+ // eventually depend on URLConnection (via the java.text.*Symbols classes).
private static synchronized void initializeDateFormats()
{
if (dateformats_initialized)
diff --git a/libjava/classpath/java/net/class-dependencies.conf b/libjava/classpath/java/net/class-dependencies.conf
deleted file mode 100644
index 8b130f5..0000000
--- a/libjava/classpath/java/net/class-dependencies.conf
+++ /dev/null
@@ -1,122 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-java/net/InetAddress: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/net/UnknownHostException.<init>(Ljava/lang/String;)V
-
-java/net/DatagramSocketImpl: \
- java/net/DatagramSocketImpl.fd(Ljava/io/FileDescriptor;) \
- java/net/DatagramSocketImpl.localPort(I)
-
-java/net/PlainDatagramSocketImpl: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V \
- java/io/FileDescriptor.<init>()V \
- java/lang/Boolean.<init>(Z)V \
- java/lang/Integer.<init>(I)V \
- java/net/InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress; \
- java/net/InetAddress.getAddress()[B \
- java/lang/Boolean.booleanValue()Z \
- java/lang/Integer.intValue()I \
- java/net/SocketException.<init>(Ljava/lang/String;)V \
- java/net/DatagramPacket.getData()[B \
- java/net/SocketImpl.address(Ljava/net/InetAddress;) \
- java/net/PlainSocketImpl.native_fd(I) \
- java/net/SocketImpl.fd(Ljava/io/FileDescriptor;) \
- java/net/SocketImpl.address(Ljava/net/InetAddress;) \
- java/net/PlainDatagramSocketImpl.native_fd(I) \
- java/net/SocketImpl.localport(I) \
- java/net/SocketImpl.port(I)
-
-java/net/PlainSocketImpl: \
- java/lang/ClassNotFoundException.<init>(Ljava/lang/String;)V \
- java/lang/InternalError.<init>(Ljava/lang/String;)V \
- java/io/IOException.<init>(Ljava/lang/String;)V \
- java/io/FileDescriptor.<init>()V \
- java/lang/Boolean.<init>(Z)V \
- java/lang/Integer.<init>(I)V \
- java/net/InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress; \
- java/net/InetAddress.getAddress()[B \
- java/lang/Boolean.booleanValue()Z \
- java/lang/Integer.intValue()I \
- java/net/SocketException.<init>(Ljava/lang/String;)V \
- java/net/DatagramPacket.getData()[B \
- java/net/SocketImpl.address(Ljava/net/InetAddress;) \
- java/net/PlainSocketImpl.native_fd(I) \
- java/net/SocketImpl.fd(Ljava/io/FileDescriptor;) \
- java/net/SocketImpl.address(Ljava/net/InetAddress;) \
- java/net/PlainDatagramSocketImpl.native_fd(I) \
- java/net/SocketImpl.localport(I) \
- java/net/SocketImpl.port(I)
-
-# All protocols supported are loaded via URL.getURLStreamHandler from
-# class gnu.java.net.protocol.<protocol>.Handler.
-#
-# This introduces a dependency for all protocols. To allow an easy selection
-# and addition of protocols, the library variable {protocols} can be set to
-# the set of supported protocols.
-#
-{protocols}: http file jar
-
-java/net/URL.getURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;: \
- gnu/java/net/protocol/{protocols}/Handler.* \
- com/aicas/java/net/protocol/rom/Handler.*
-
-# end of file
diff --git a/libjava/classpath/java/nio/ByteBufferImpl.java b/libjava/classpath/java/nio/ByteBufferImpl.java
index 48d7152..aa51a65 100644
--- a/libjava/classpath/java/nio/ByteBufferImpl.java
+++ b/libjava/classpath/java/nio/ByteBufferImpl.java
@@ -115,18 +115,11 @@ final class ByteBufferImpl extends ByteBuffer
checkIfReadOnly();
mark = -1;
int pos = position();
- if (pos > 0)
- {
- int count = remaining();
- shiftDown(0, pos, count);
- position(count);
- limit(capacity());
- }
- else
- {
- position(limit());
- limit(capacity());
- }
+ int n = limit() - pos;
+ if (n > 0)
+ shiftDown(0, pos, n);
+ position(n);
+ limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/CharBufferImpl.java b/libjava/classpath/java/nio/CharBufferImpl.java
index 33f8dab..e6097cb 100644
--- a/libjava/classpath/java/nio/CharBufferImpl.java
+++ b/libjava/classpath/java/nio/CharBufferImpl.java
@@ -90,15 +90,14 @@ final class CharBufferImpl extends CharBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/DoubleBufferImpl.java b/libjava/classpath/java/nio/DoubleBufferImpl.java
index 248ab45e..98e8e97 100644
--- a/libjava/classpath/java/nio/DoubleBufferImpl.java
+++ b/libjava/classpath/java/nio/DoubleBufferImpl.java
@@ -82,15 +82,14 @@ final class DoubleBufferImpl extends DoubleBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/FloatBufferImpl.java b/libjava/classpath/java/nio/FloatBufferImpl.java
index b486878..f1182ba 100644
--- a/libjava/classpath/java/nio/FloatBufferImpl.java
+++ b/libjava/classpath/java/nio/FloatBufferImpl.java
@@ -82,15 +82,14 @@ final class FloatBufferImpl extends FloatBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/IntBufferImpl.java b/libjava/classpath/java/nio/IntBufferImpl.java
index 2265748..2bd1842 100644
--- a/libjava/classpath/java/nio/IntBufferImpl.java
+++ b/libjava/classpath/java/nio/IntBufferImpl.java
@@ -82,15 +82,14 @@ final class IntBufferImpl extends IntBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/LongBufferImpl.java b/libjava/classpath/java/nio/LongBufferImpl.java
index 8772f61..c04c417 100644
--- a/libjava/classpath/java/nio/LongBufferImpl.java
+++ b/libjava/classpath/java/nio/LongBufferImpl.java
@@ -82,15 +82,14 @@ final class LongBufferImpl extends LongBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/MappedByteBuffer.java b/libjava/classpath/java/nio/MappedByteBuffer.java
index fa25bb7..25b0993 100644
--- a/libjava/classpath/java/nio/MappedByteBuffer.java
+++ b/libjava/classpath/java/nio/MappedByteBuffer.java
@@ -85,7 +85,7 @@ public abstract class MappedByteBuffer extends ByteBuffer
forceImpl();
}
- public void finalize()
+ protected void finalize()
throws Throwable
{
unmapImpl();
diff --git a/libjava/classpath/java/nio/ShortBufferImpl.java b/libjava/classpath/java/nio/ShortBufferImpl.java
index ee5bff2..50f65ec 100644
--- a/libjava/classpath/java/nio/ShortBufferImpl.java
+++ b/libjava/classpath/java/nio/ShortBufferImpl.java
@@ -82,15 +82,14 @@ final class ShortBufferImpl extends ShortBuffer
{
checkIfReadOnly();
mark = -1;
- int copied = 0;
-
- while (remaining () > 0)
+ int p = position();
+ int n = limit() - p;
+ if (n > 0)
{
- put (copied, get ());
- copied++;
+ System.arraycopy(backing_buffer, array_offset + p,
+ backing_buffer, array_offset, n);
}
-
- position (copied);
+ position(n);
limit(capacity());
return this;
}
diff --git a/libjava/classpath/java/nio/channels/Channels.java b/libjava/classpath/java/nio/channels/Channels.java
index cfd8605..382a3d7 100644
--- a/libjava/classpath/java/nio/channels/Channels.java
+++ b/libjava/classpath/java/nio/channels/Channels.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package java.nio.channels;
import gnu.java.nio.ChannelReader;
+import gnu.java.nio.ChannelWriter;
import gnu.java.nio.InputStreamChannel;
import gnu.java.nio.OutputStreamChannel;
@@ -126,8 +127,7 @@ public final class Channels
public static Writer newWriter(WritableByteChannel ch, CharsetEncoder enc,
int minBufferCap)
{
- // FIXME: implement java.nio.channels.Channel.newWriter(WritableByteChannel, CharsetEncoder, int)
- throw new Error("not implemented");
+ return new ChannelWriter(ch, enc, minBufferCap);
}
/**
diff --git a/libjava/classpath/java/nio/class-dependencies.conf b/libjava/classpath/java/nio/class-dependencies.conf
deleted file mode 100644
index 4fbf75e..0000000
--- a/libjava/classpath/java/nio/class-dependencies.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-# end of file
diff --git a/libjava/classpath/java/rmi/activation/Activatable.java b/libjava/classpath/java/rmi/activation/Activatable.java
index b4c38bf..472c65c 100644
--- a/libjava/classpath/java/rmi/activation/Activatable.java
+++ b/libjava/classpath/java/rmi/activation/Activatable.java
@@ -1,5 +1,6 @@
-/* Activatable.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* Activatable.java -- A common ancestor for the activatable objects.
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,68 +39,493 @@ exception statement from your version. */
package java.rmi.activation;
+import gnu.java.rmi.server.ActivatableServerRef;
+import gnu.java.rmi.server.UnicastServer;
+import gnu.java.rmi.server.UnicastServerRef;
+
+import java.lang.reflect.Field;
import java.rmi.MarshalledObject;
import java.rmi.NoSuchObjectException;
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.server.ObjID;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RemoteObject;
import java.rmi.server.RemoteServer;
+import java.rmi.server.UnicastRemoteObject;
-public abstract class Activatable extends RemoteServer
+/**
+ * A common ancestor for the implementations of the activatable objects. Such
+ * objects require persistent access over time and can be activated by the
+ * system. The derived classes also implements the needed interface of some
+ * remote object and usually have the two parameter constructor, the first
+ * parameter being the {@link ActivationID} and the second the
+ * {@link MarshalledObject}. Activatable is the main class that developers need
+ * to use to implement and manage activatable objects. It also contains methods
+ * for making activatable remote objects that are not derived from the
+ * Activatable class.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub)
+ */
+public abstract class Activatable
+ extends RemoteServer
{
-static final long serialVersionUID = -3120617863591563455L;
-protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Use SVUID for interoperability.
+ */
+ static final long serialVersionUID = - 3120617863591563455L;
+
+ /**
+ * The object activation id.
+ */
+ final ActivationID id;
+
+ /**
+ * This constructor is used to register export the object on the given port. A
+ * subclass of the Activatable class calls this constructor to register and
+ * export the object during initial construction. As a side-effect of
+ * activatable object construction, the remote object is both "registered"
+ * with the activation system and "exported" (on an anonymous port, if port is
+ * zero) to the RMI runtime so that it is available to accept incoming calls
+ * from clients.
+ *
+ * @param codebase the object code base url
+ * @param data the data, needed to activate the object.
+ * @param restart specifies reactivation mode after crash. If true, the object
+ * is activated when activator is restarted or the activation group
+ * is restarted. If false, the object is only activated on demand.
+ * This flag does has no effect during the normal operation (the
+ * object is normally activated on demand).
+ * @param port the port, on which the object will become available. The value
+ * 0 means anonymous port.
+ * @throws ActivationException if the activation failed
+ * @throws RemoteException if the remote call failed.
+ */
+ protected Activatable(String codebase, MarshalledObject data,
+ boolean restart, int port) throws ActivationException,
+ RemoteException
+ {
+ ActivationDesc descriptor = new ActivationDesc(getClass().getName(),
+ codebase, data, restart);
+ id = obtainId(descriptor);
+ exportObject(this, id, port);
+ }
-protected Activatable(String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * This constructor is used to register export the object on the given port,
+ * additionally specifying the socket factories. A subclass of the Activatable
+ * class calls this constructor to register and export the object during
+ * initial construction.
+ *
+ * @param codebase the object code base url
+ * @param data the data, needed to activate the object.
+ * @param restart specifies reactivation mode after crash. If true, the object
+ * is activated when activator is restarted or the activation group
+ * is restarted. If false, the object is only activated on demand.
+ * This flag does has no effect during the normal operation (the
+ * object is normally activated on demand).
+ * @param port the port, on which the object will become available. The value
+ * 0 means anonymous port.
+ * @param csf the client socket factory
+ * @param ssf the server socket factory
+ * @throws ActivationException if the activation failed
+ * @throws RemoteException if the remote call failed.
+ */
+ protected Activatable(String codebase, MarshalledObject data,
+ boolean restart, int port, RMIClientSocketFactory csf,
+ RMIServerSocketFactory ssf) throws ActivationException,
+ RemoteException
+ {
+ ActivationDesc descriptor = new ActivationDesc(getClass().getName(),
+ codebase, data, restart);
+ id = obtainId(descriptor);
+ exportObject(this, id, port);
+ }
-protected Activatable(ActivationID id, int port) throws RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Creates the new instance of activatable with the given activation id and is
+ * listening at the given port. A subclass of the Activatable class calls this
+ * constructor when the object itself is activated via its special
+ * "activation" constructor with the two parameters ({@link ActivationID},
+ * {@link MarshalledObject}). As a side effect, the object is exported and is
+ * available to accept incomming calls.
+ *
+ * @param anId the activation id
+ * @param port the port, on which the activatable will be listening
+ * @throws RemoteException if the activation failed.
+ */
+ protected Activatable(ActivationID anId, int port) throws RemoteException
+ {
+ id = anId;
+ try
+ {
+ exportObject(this, anId, port);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ RemoteException acex =
+ new RemoteException("cannot export Activatable", e);
+ throw acex;
+ }
+ }
-protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Creates the new instance of activatable with the given activation id and is
+ * listening at the given port, using the specified client and server sockets
+ * factories. A subclass of the Activatable class calls this
+ * constructor when the object itself is activated via its special
+ * "activation" constructor with the two parameters ({@link ActivationID},
+ * {@link MarshalledObject}). As a side effect, the object is exported and is
+ * available to accept incomming calls.
+ *
+ * @param anId the activation id
+ * @param port the port, on which the activatable will be listening
+ * @param csf the client socket factory
+ * @param ssf the server socket factory
+ *
+ * @throws RemoteException if the remote call failed
+ */
+ protected Activatable(ActivationID anId, int port, RMIClientSocketFactory csf,
+ RMIServerSocketFactory ssf) throws RemoteException
+ {
+ id = anId;
+ try
+ {
+ exportObject(this, anId, port, csf, ssf);
+ }
+ catch (Exception e)
+ {
+ RemoteException acex = new RemoteException();
+ acex.initCause(e);
+ throw acex;
+ }
+ }
+
+ /**
+ * Get the objects activation identifier.
+ *
+ * @return the object activation identifier
+ */
+ protected ActivationID getID()
+ {
+ return id;
+ }
+
+ /**
+ * Obtain the activation Id from the activation descriptor by registering
+ * within the current group.
+ */
+ static ActivationID obtainId(ActivationDesc descriptor)
+ throws RemoteException, UnknownGroupException, ActivationException
+ {
+ ActivationGroupID id = descriptor.getGroupID();
+ ActivationSystem system;
-protected ActivationID getID() {
- throw new Error("Not implemented");
-}
+ if (id != null)
+ system = id.getSystem();
+ else
+ system = ActivationGroup.currentGroupID().getSystem();
+ return system.registerObject(descriptor);
+ }
+
+ /**
+ * This method registers an activatable object. The object is expected to be
+ * on the anonymous port (null client and server socket factories).
+ *
+ * @param desc the object description.
+ * @return the remote stub for the activatable object (the first call on this
+ * stub will activate the object).
+ * @throws UnknownGroupException if the object group identifier is unknown
+ * @throws ActivationException if the activation system is not running
+ * @throws RemoteException if the remote call fails
+ */
+ public static Remote register(ActivationDesc desc)
+ throws UnknownGroupException, ActivationException, RemoteException
+ {
+ ActivationID id = obtainId(desc);
+ try
+ {
+ return toStub(
+ id,
+ Thread.currentThread().getContextClassLoader().loadClass(
+ desc.getClassName()));
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new ActivationException("Class not found: "+desc.getClassName());
+ }
+ }
+
+ /**
+ * Inactivates and unexports the object. The subsequent calls will activate
+ * the object again. The object is not inactivated if it is currently
+ * executing calls.
+ *
+ * @param id the id of the object being inactivated
+ * @return true if the object has been inactivated, false if it has not been
+ * inactivated because of the running or pending calls.
+ * @throws UnknownObjectException if the object is unknown.
+ * @throws ActivationException if the object group is not active
+ * @throws RemoteException if the remote call fails
+ */
+ public static boolean inactive(ActivationID id)
+ throws UnknownObjectException, ActivationException, RemoteException
+ {
+ if (id.group!=null)
+ id.group.inactiveObject(id);
+ return UnicastRemoteObject.unexportObject(id.activate(false), false);
+ }
+
+ /**
+ * Unregister the object (the object will no longer be activable with that id)
+ *
+ * @param id the object id
+ * @throws UnknownObjectException if the id is unknown
+ * @throws ActivationException if the activation system is not running
+ * @throws RemoteException if the remote call fails.
+ */
+ public static void unregister(ActivationID id) throws UnknownObjectException,
+ ActivationException, RemoteException
+ {
+ ActivationGroup.currentGroupId.getSystem().unregisterObject(id);
+ UnicastServer.unregisterActivatable(id);
+ }
+
+ /**
+ * Register and export the object that activatable object that is not derived
+ * from the Activatable super class. It creates and registers the object
+ * activation descriptor. There is no need to call this method if the object
+ * extends Activable, as its work is done in the constructor
+ * {@link #Activatable(String, MarshalledObject, boolean, int)}.
+ *
+ * @param obj the object, that is exported, becoming available at the given
+ * port.
+ * @param location the object code location (codebase).
+ * @param data the data, needed to activate the object
+ * @param restart the restart mode
+ * @param port the port, where the object will be available
+ *
+ * @return the created object activation ID.
+ *
+ * @throws ActivationException if the activation group is not active
+ * @throws RemoteException if the registration or export fails
+ */
+ public static ActivationID exportObject(Remote obj, String location,
+ MarshalledObject data,
+ boolean restart, int port)
+ throws ActivationException, RemoteException
+ {
+ ActivationDesc descriptor = new ActivationDesc(obj.getClass().getName(),
+ location, data, restart);
+ ActivationID id = obtainId(descriptor);
+ Remote stub = exportObject(obj, id, port);
+ return id;
+ }
-public static Remote register(ActivationDesc desc) throws UnknownGroupException, ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Register and export the object that activatable object that is not derived
+ * from the Activatable super class. It creates and registers the object
+ * activation descriptor. There is no need to call this method if the object
+ * extends Activable, as its work is done in the constructor
+ * {@link #Activatable(String, MarshalledObject, boolean, int, RMIClientSocketFactory, RMIServerSocketFactory)}
+ *
+ * @param obj the object, that is exported, becoming available at the given
+ * port.
+ * @param location the object code location (codebase).
+ * @param data the data, needed to activate the object
+ * @param restart the restart mode
+ * @param port the port, where the object will be available
+ * @param csf the client socket factory
+ * @param ssf the server socket factory
+ *
+ * @return the created object activation ID.
+ *
+ * @throws ActivationException if the activation group is not active
+ * @throws RemoteException if the registration or export fails
+ */
+ public static ActivationID exportObject(Remote obj, String location,
+ MarshalledObject data,
+ boolean restart, int port,
+ RMIClientSocketFactory csf,
+ RMIServerSocketFactory ssf)
+ throws ActivationException, RemoteException
+ {
+ ActivationDesc descriptor = new ActivationDesc(obj.getClass().getName(),
+ location, data, restart);
+ ActivationID id = obtainId(descriptor);
+ Remote stub = exportObject(obj, id, port, csf, ssf);
+ return id;
-public static boolean inactive(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ }
-public static void unregister(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * During activation, this exportObject method should be invoked explicitly by
+ * the activatable object, that does is not derived from the Activatable
+ * class. There is no need to call this method if the object extends
+ * Activable, as its work is done in the constructor
+ * {@link #Activatable(ActivationID, int)}
+ *
+ * @param obj the object
+ * @param id the known activation id
+ * @param port the object port
+ *
+ * @return the remote stub of the activatable object
+ *
+ * @throws RemoteException if the object export fails
+ */
+ public static Remote exportObject(Remote obj, ActivationID id, int port)
+ throws RemoteException
+ {
+ Remote stub = export(id, obj, port, null);
+ return stub;
+ }
-public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * During activation, this exportObject method should be invoked explicitly by
+ * the activatable object, that does is not derived from the Activatable
+ * class. There is no need to call this method if the object extends
+ * Activable, as its work is done in the constructor
+ * {@link #Activatable(ActivationID, int)}
+ *
+ * @param obj the object
+ * @param id the known activation id
+ * @param port the object port
+ * @param csf the client socket factory
+ * @param ssf the server socket factory
+ *
+ * @return the remote stub of the activatable object
+ *
+ * @throws RemoteException if the object export fails
+ */
+ public static Remote exportObject(Remote obj, ActivationID id, int port,
+ RMIClientSocketFactory csf,
+ RMIServerSocketFactory ssf)
+ throws RemoteException
+ {
+ Remote stub = export(id, obj, port, ssf);
+ return stub;
-public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
- throw new Error("Not implemented");
-}
+ }
-public static Remote exportObject(Remote obj, ActivationID id, int port) throws RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Make the remote object unavailable for incoming calls. This method also
+ * unregisters the object, so it cannot be activated again by incomming call
+ * (unless registered).
+ *
+ * @param obj the object to unexport
+ * @param force if true, cancel all pending or running calls to that object
+ * (if false, the object with such calls is not unexported and false
+ * is returned by this method).
+ * @return if the object was successfully unexported, false otherwise
+ * @throws NoSuchObjectException if such object is not known
+ */
+ public static boolean unexportObject(Remote obj, boolean force)
+ throws NoSuchObjectException
+ {
+ Object aref = UnicastServer.getExportedRef(obj);
+
+ // Unregister it also (otherwise will be activated during the subsequent
+ // call.
+ if (aref instanceof ActivatableServerRef)
+ {
+ ActivatableServerRef aar = (ActivatableServerRef) aref;
+ UnicastServer.unregisterActivatable(aar.actId);
+ }
+ return UnicastRemoteObject.unexportObject(obj, force);
+ }
+
+ static Remote exportObject(Remote obj, int port,
+ RMIServerSocketFactory serverSocketFactory)
+ throws RemoteException
+ {
+ UnicastServerRef sref = null;
+ if (obj instanceof RemoteObject)
+ sref = (UnicastServerRef) ((RemoteObject) obj).getRef();
-public static Remote exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
- throw new Error("Not implemented");
-}
-
-public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException {
- throw new Error("Not implemented");
-}
+ if (sref == null)
+ sref = new UnicastServerRef(new ObjID(), port, serverSocketFactory);
+ Remote stub = sref.exportObject(obj);
+ // addStub(obj, stub);
+ // TODO Need to change the place of the stub repository
+ return stub;
+ }
+
+ /**
+ * Create and export the new remote object, making it available at the given
+ * port, using sockets, produced by the specified factories.
+ *
+ * @param port the port, on that the object should become available. Zero
+ * means anonymous port.
+ * @param serverSocketFactory the server socket factory
+ */
+ public static Remote export(ActivationID id, Remote obj, int port,
+ RMIServerSocketFactory serverSocketFactory)
+ throws RemoteException
+ {
+ ActivatableServerRef sref = null;
+ sref = new ActivatableServerRef(makeId(id), id, port, serverSocketFactory);
+ return sref.exportObject(obj);
+ }
+
+ /**
+ * Make the object ID from the activation ID. The same activation ID always
+ * produces the identical object id.
+ *
+ * @param aid the activation id
+ *
+ * @return the object id
+ */
+ public static ObjID makeId(ActivationID aid)
+ {
+ ObjID id = new ObjID(0);
+
+ // The fields of both ObjID and ActivationID must be package private,
+ // so we need to use the reflection to access them anyway.
+ // Probably other implementations use some very different approach.
+
+ try
+ {
+ Field idUid = ObjID.class.getDeclaredField("space");
+ Field aidUid = ActivationID.class.getDeclaredField("uid");
+
+ aidUid.setAccessible(true);
+ idUid.setAccessible(true);
+
+ idUid.set(id, aidUid.get(aid));
+ }
+ catch (Exception e)
+ {
+ InternalError ierr = new InternalError("Unable to set UID field");
+ ierr.initCause(e);
+ throw ierr;
+ }
+
+ return id;
+ }
+
+ /**
+ * Connect the object to the UnicastServer (export), but not activate it.
+ * The object will be activated on the first call.
+ */
+ static Remote toStub(ActivationID anId, Class stubFor)
+ {
+ try
+ {
+ ActivatableServerRef asr =
+ new ActivatableServerRef(makeId(anId), anId, 0, null);
+ UnicastServer.exportActivatableObject(asr);
+ return asr.exportClass(stubFor);
+ }
+ catch (RemoteException e)
+ {
+ InternalError ierr = new InternalError(
+ "Failed to obtain activatable stub");
+ ierr.initCause(e);
+ throw ierr;
+ }
+ }
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationDesc.java b/libjava/classpath/java/rmi/activation/ActivationDesc.java
index 65894f8..b861656 100644
--- a/libjava/classpath/java/rmi/activation/ActivationDesc.java
+++ b/libjava/classpath/java/rmi/activation/ActivationDesc.java
@@ -1,6 +1,6 @@
-/* ActivationDecc.java --
+/* ActivationDesc.java -- record with info to activate an object
Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
-
+
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
@@ -40,74 +40,215 @@ package java.rmi.activation;
import java.io.Serializable;
import java.rmi.MarshalledObject;
-public final class ActivationDesc implements Serializable
+/**
+ * Contains the information, necessary to activate the object. This information
+ * includes:
+ * <ul>
+ * <li>the object class name</li>
+ * <li>the object group identifier</li>
+ * <li>the code location (codebase URL) that can be used to load the class
+ * remotely</li>
+ * <li>the object restart mode</li>
+ * <li>the object specific intialization information</li>
+ * </ul>
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub)
+ */
+public final class ActivationDesc
+ implements Serializable
{
+ /**
+ * Use SVUID for interoperability.
+ */
static final long serialVersionUID = 7455834104417690957L;
-private ActivationGroupID groupid;
-private String classname;
-private String location;
-private MarshalledObject data;
-private boolean restart;
-
-public ActivationDesc(String className, String location, MarshalledObject data) throws ActivationException {
- this(ActivationGroup.currentGroupID(), className, location, data, false);
-}
-
-public ActivationDesc(String className, String location, MarshalledObject data, boolean restart) throws ActivationException {
- this(ActivationGroup.currentGroupID(), className, location, data, restart);
-}
-
-public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data) {
- this(groupID, className, location, data, false);
-}
-
-public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data, boolean restart) {
- this.groupid = groupID;
- this.classname = className;
- this.location = location;
- this.data = data;
- this.restart = restart;
-}
-
-public ActivationGroupID getGroupID() {
- return (groupid);
-}
-
-public String getClassName() {
- return (classname);
-}
-
-public String getLocation() {
- return (location);
-}
-
-public MarshalledObject getData() {
- return (data);
-}
-
-public boolean getRestartMode() {
- return (restart);
-}
-
-public boolean equals(Object obj) {
- if (!(obj instanceof ActivationDesc)) {
- return (false);
- }
- ActivationDesc that = (ActivationDesc)obj;
-
- if (this.groupid.equals(that.groupid) &&
- this.classname.equals(that.classname) &&
- this.location.equals(that.location) &&
- this.data.equals(that.data) &&
- this.restart == that.restart) {
- return (true);
- }
- return (false);
-}
-
-public int hashCode() {
- return (groupid.hashCode() ^ classname.hashCode() ^ location.hashCode() ^ data.hashCode());
-}
-
+ /**
+ * The group id.
+ */
+ private ActivationGroupID groupid;
+
+ /**
+ * The class name.
+ */
+ private String classname;
+
+ /**
+ * The code location URL.
+ */
+ private String location;
+
+ /**
+ * The object specific intitalization data.
+ */
+ private MarshalledObject data;
+
+ /**
+ * The start mode.
+ */
+ private boolean restart;
+
+ /**
+ * Create the new activation description, assuming the object group is the
+ * {@link ActivationGroup#currentGroupID()}.
+ *
+ * @param className the object fully qualified class name
+ * @param location the code base URL
+ * @param data the object initialization data, contained in a marshalled form
+ */
+ public ActivationDesc(String className, String location, MarshalledObject data)
+ throws ActivationException
+ {
+ this(ActivationGroup.currentGroupID(), className, location, data, false);
+ }
+
+ /**
+ * Create the new activation description, assuming the object group is the
+ * {@link ActivationGroup#currentGroupID()}.
+ *
+ * @param className the object fully qualified class name
+ * @param location the code base URL
+ * @param data the object initialization data, contained in a marshalled form
+ * @param restart specifies reactivation mode after crash. If true, the object
+ * is activated when activator is restarted or the activation group
+ * is restarted. If false, the object is only activated on demand.
+ * This flag does has no effect during the normal operation (the
+ * object is normally activated on demand).
+ */
+ public ActivationDesc(String className, String location,
+ MarshalledObject data, boolean restart)
+ throws ActivationException
+ {
+ this(ActivationGroup.currentGroupID(), className, location, data, restart);
+ }
+
+ /**
+ * Create the new activation description. Under crash, the object will only
+ * be reactivated on demand.
+ *
+ * @param groupID the object group id.
+ * @param className the object fully qualified class name
+ * @param location the code base URL
+ * @param data the object initialization data, contained in a marshalled form
+ */
+ public ActivationDesc(ActivationGroupID groupID, String className,
+ String location, MarshalledObject data)
+ {
+ this(groupID, className, location, data, false);
+ }
+
+ /**
+ * Create the new activation description, providing full information.
+ *
+ * @param groupID the object group id.
+ * @param className the object fully qualified class name
+ * @param location the code base URL
+ * @param data the object initialization data, contained in a marshalled form
+ * @param restart specifies reactivation mode after crash. If true, the object
+ * is activated when activator is restarted or the activation group
+ * is restarted. If false, the object is only activated on demand.
+ * This flag does has no effect during the normal operation (the
+ * object is normally activated on demand).
+ */
+ public ActivationDesc(ActivationGroupID groupID, String className,
+ String location, MarshalledObject data, boolean restart)
+ {
+ this.groupid = groupID;
+ this.classname = className;
+ this.location = location;
+ this.data = data;
+ this.restart = restart;
+ }
+
+ public ActivationGroupID getGroupID()
+ {
+ return groupid;
+ }
+
+ /**
+ * Get the class name of the object being activated
+ *
+ * @return the fully qualified class name of the object being activated
+ */
+ public String getClassName()
+ {
+ return classname;
+ }
+
+ /**
+ * Get the code location URL ("codebase") of the object being activated.
+ *
+ * @return the codebase of the object being activated.
+ */
+ public String getLocation()
+ {
+ return location;
+ }
+
+ public MarshalledObject getData()
+ {
+ return data;
+ }
+
+ /**
+ * Get the object reactivation strategy after crash.
+ *
+ * @return true ir the object is activated when activator is restarted or the
+ * activation group is restarted. False if the object is only
+ * activated on demand. This flag does has no effect during the normal
+ * operation (the object is normally activated on demand).
+ */
+ public boolean getRestartMode()
+ {
+ return restart;
+ }
+
+ /**
+ * Compare this object with another activation description for equality.
+ *
+ * @return true if all fields have the equal values, false otherwise.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ActivationDesc)
+ {
+ ActivationDesc that = (ActivationDesc) obj;
+ return eq(groupid, that.groupid) &&
+ eq(classname, that.classname) &&
+ eq(location, that.location) &&
+ eq(data, that.data)
+ && restart == that.restart;
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Get the hash code of this object (overridden to make the returned value
+ * consistent with .equals(..).
+ */
+ public int hashCode()
+ {
+ return hash(groupid) ^ hash(classname) ^
+ hash(location) ^ hash(data);
+ }
+
+ /**
+ * Get the hashcode of x or 0 if x == null.
+ */
+ static final int hash(Object x)
+ {
+ return x == null ? 0 : x.hashCode();
+ }
+
+ /**
+ * Compare by .equals if both a and b are not null, compare directly if at
+ * least one of them is null.
+ */
+ static final boolean eq(Object a, Object b)
+ {
+ if (a == null || b == null)
+ return a == b;
+ else
+ return a.equals(b);
+ }
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationGroup.java b/libjava/classpath/java/rmi/activation/ActivationGroup.java
index e5774a1..5e7bbd2 100644
--- a/libjava/classpath/java/rmi/activation/ActivationGroup.java
+++ b/libjava/classpath/java/rmi/activation/ActivationGroup.java
@@ -1,5 +1,5 @@
-/* ActivationGroup.java --
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* ActivationGroup.java -- the RMI activation group.
+ Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,48 +38,302 @@ exception statement from your version. */
package java.rmi.activation;
+import gnu.java.rmi.activation.DefaultActivationGroup;
+import gnu.java.rmi.activation.DefaultActivationSystem;
+
+import java.lang.reflect.Constructor;
import java.rmi.MarshalledObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
-public abstract class ActivationGroup extends UnicastRemoteObject
- implements ActivationInstantiator
+/**
+ * The entity that receives the request to activate object and activates it.
+ * Frequently there is one activation group per virtual machine.
+ *
+ * @author Audrius Meskauskas (audriusa@Bioinformatics.org) (from stub)
+ */
+public abstract class ActivationGroup
+ extends UnicastRemoteObject
+ implements ActivationInstantiator
{
-static final long serialVersionUID = -7696947875314805420L;
-protected ActivationGroup(ActivationGroupID groupID) throws RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Use the SVUID for interoperability.
+ */
+ static final long serialVersionUID = - 7696947875314805420L;
+
+ /**
+ * The Id of the current group on this VM (null if none).
+ */
+ static ActivationGroupID currentGroupId = null;
+
+ /**
+ * The groups identifier.
+ */
+ final ActivationGroupID groupId;
-public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * The groups activation monitor.
+ */
+ ActivationMonitor monitor;
+
+ /**
+ * The groups incarnation number.
+ */
+ long incarnation;
+
+ /**
+ * The groups activation system.
+ */
+ static ActivationSystem system;
+
+ /**
+ * Used during the group creation (required constructor).
+ */
+ static final Class[] cConstructorTypes = new Class[]
+ {
+ ActivationGroupID.class,
+ MarshalledObject.class
+ };
-public abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteException;
+ /**
+ * Create the new activation group with the given group id.
+ *
+ * @param aGroupId the group Id.
+ *
+ * @throws RemoteException if the group export fails.
+ */
+ protected ActivationGroup(ActivationGroupID aGroupId) throws RemoteException
+ {
+ groupId = aGroupId;
+ }
+
+ /**
+ * The method is called when the object is exported. The group must notify
+ * the activation monitor, if this was not already done before.
+ *
+ * @param id the object activation id
+ * @param obj the remote object implementation
+ *
+ * @throws ActivationException if the group is inactive
+ * @throws UnknownObjectException if such object is not known
+ * @throws RemoteException if the call to monitor fails
+ */
+ public abstract void activeObject(ActivationID id, Remote obj)
+ throws ActivationException, UnknownObjectException, RemoteException;
+
+ /**
+ * Notifies the monitor about the object being inactivated.
+ *
+ * @param id the object being inactivated.
+ * @return true always (must be overridden to return other values).
+ * @throws ActivationException never
+ * @throws UnknownObjectException if the object is not known
+ * @throws RemoteException if the remote call to monitor fails
+ */
+ public boolean inactiveObject(ActivationID id) throws ActivationException,
+ UnknownObjectException, RemoteException
+ {
+ if (monitor != null)
+ monitor.inactiveObject(id);
+ return true;
+ }
-public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException {
- throw new Error("Not implemented");
-}
+ /**
+ * Create the new instance of the activation group, using the class name and
+ * location information, stored in the passed descriptor. The method expects
+ * the group class to have the two parameter constructor, the first parameter
+ * being the {@link ActivationGroupID} and the second the
+ * {@link MarshalledObject}. The group must be first be registered with the
+ * ActivationSystem. Once a group is created, the currentGroupID method
+ * returns the identifier for this group until the group becomes inactive.
+ *
+ * @param id the activation group id
+ * @param desc the group descriptor, providing the information, necessary to
+ * create the group
+ * @param incarnation the incarnation number
+ * @return the created group instance
+ * @throws ActivationException if the activation fails due any reason
+ */
+ public static ActivationGroup createGroup(ActivationGroupID id,
+ ActivationGroupDesc desc,
+ long incarnation)
+ throws ActivationException
+ {
+ // If the activation system is not yet set, set it to the system.
+ // passed in the group id.
+ if (system == null)
+ system = id.system;
+
+ ActivationGroup group = null;
-public static ActivationGroupID currentGroupID() {
- throw new Error("Not implemented");
-}
+ // TODO at the moment all groups are created on the current jre and the
+ // group class must be reachable via thread context class loader.
+ Class groupClass;
-public static void setSystem(ActivationSystem system) throws ActivationException {
- throw new Error("Not implemented");
-}
+ if (desc.className != null)
+ {
+ try
+ {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ groupClass = loader.loadClass(desc.className);
+ }
+ catch (ClassNotFoundException e)
+ {
+ ActivationException acex = new ActivationException(
+ "Cannot load " + desc.className);
+ acex.detail = e;
+ throw acex;
+ }
+ }
+ else
+ groupClass = DefaultActivationGroup.class;
-public static ActivationSystem getSystem() throws ActivationException {
- throw new Error("Not implemented");
-}
+ try
+ {
+ Constructor constructor = groupClass.getConstructor(cConstructorTypes);
+ group = (ActivationGroup) constructor.newInstance(
+ new Object[] { id, desc.data });
+ }
+ catch (Exception e)
+ {
+ ActivationException acex = new ActivationException(
+ "Cannot instantiate " + desc.className);
+ acex.detail = e;
+ throw acex;
+ }
-protected void activeObject(ActivationID id, MarshalledObject mobj) throws ActivationException, UnknownObjectException, RemoteException {
- throw new Error("Not implemented");
-}
+ currentGroupId = id;
+ try
+ {
+ group.monitor = getSystem().activeGroup(id, group, incarnation);
+ return group;
+ }
+ catch (RemoteException e)
+ {
+ ActivationException acex = new ActivationException("createGroup");
+ acex.detail = e;
+ throw acex;
+ }
+ }
-protected void inactiveGroup() throws UnknownGroupException, RemoteException {
- throw new Error("Not implemented");
-}
+ /**
+ * Get the id of current activation group.
+ *
+ * @return the id of the current activation group or null if none exists.
+ */
+ public static ActivationGroupID currentGroupID()
+ {
+ try
+ {
+ if (currentGroupId==null)
+ {
+ // This will also assing the currentGroupId to the current
+ // (default) group of the default system.
+ setSystem(DefaultActivationSystem.get());
+ }
+ }
+ catch (ActivationException e)
+ {
+ InternalError ierr = new InternalError("Unable to activate AS");
+ ierr.initCause(e);
+ throw ierr;
+ }
+
+ return currentGroupId;
+ }
+
+ /**
+ * Set the activation system for this virtual machine. The system can only
+ * be set if no group is active.
+ *
+ * @param aSystem the system to set
+ *
+ * @throws ActivationException if some group is active now.
+ */
+ public static void setSystem(ActivationSystem aSystem)
+ throws ActivationException
+ {
+ if (currentGroupId!=null)
+ throw new ActivationException("Group active");
+ else
+ {
+ try
+ {
+ // Register the default transient activation system and group.
+ system = aSystem;
+ ActivationGroupDesc def = new ActivationGroupDesc(
+ DefaultActivationGroup.class.getName(),
+ "",
+ null,
+ null,
+ null);
+ currentGroupId = system.registerGroup(def);
+ }
+ catch (Exception ex)
+ {
+ InternalError ierr = new InternalError("Unable to start default AG");
+ ierr.initCause(ex);
+ throw ierr;
+ }
+ }
+ }
+
+ /**
+ * Get the current activation system. If the system is not set via
+ * {@link #setSystem} method, the default system for this virtual machine is
+ * returned. The default system is first searched by name
+ * "java.rmi.activation.ActivationSystem" on the activation registry port. The
+ * default value of the activation registry port is
+ * {@link ActivationSystem#SYSTEM_PORT}, but it can be changed by putting the
+ * system property java.rmi.activation.port. Both activation system and
+ * activation registry are provided by the RMI daemon tool, RMID, if it is
+ * running on the local host. If the RMID is not running, the internal
+ * transient activation system will be created and returned. This internal
+ * system is highly limited in in capabilities and is not intended to be used
+ * anywhere apart automated testing.
+ *
+ * @return the activation system for this virtual machine
+ * @throws ActivationException
+ */
+ public static ActivationSystem getSystem() throws ActivationException
+ {
+ if (system == null)
+ system = DefaultActivationSystem.get();
+ return system;
+ }
+
+ /**
+ * Makes the call back to the groups {@link ActivationMonitor}.
+ *
+ * @param id the id obj the object being activated
+ * @param mObject the marshalled object, contains the activated remote object
+ * stub.
+ * @throws ActivationException on activation error
+ * @throws UnknownObjectException if such object is not registered
+ * @throws RemoteException on remote call (to monitor) error
+ */
+ protected void activeObject(ActivationID id, MarshalledObject mObject)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ if (monitor!=null)
+ monitor.activeObject(id, mObject);
+
+ id.group = this;
+ }
+
+ /**
+ * Makes the call back to the groups {@link ActivationMonitor} and sets
+ * the current group to null.
+ */
+ protected void inactiveGroup() throws UnknownGroupException, RemoteException
+ {
+ if (monitor!=null)
+ monitor.inactiveGroup(groupId, incarnation);
+
+ if (currentGroupId!=null && currentGroupId.equals(groupId))
+ currentGroupId = null;
+ }
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java b/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java
index 35b546e..76ac63b 100644
--- a/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java
+++ b/libjava/classpath/java/rmi/activation/ActivationGroupDesc.java
@@ -1,5 +1,6 @@
-/* ActivationGroupDesc.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* ActivationGroupDesc.java -- the RMI activation group descriptor
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,97 +39,395 @@ exception statement from your version. */
package java.rmi.activation;
+import gnu.java.rmi.activation.DefaultActivationGroup;
+
import java.io.Serializable;
import java.rmi.MarshalledObject;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Iterator;
import java.util.Properties;
+import java.util.TreeSet;
+import java.util.zip.Adler32;
-public final class ActivationGroupDesc implements Serializable
+/**
+ * Contains information, necessary to create of recreate the activation objects.
+ * The group descriptor contains:
+ * <ul>
+ * <li>The name of the group's class. This class is derived from the
+ * {@link ActivationGroup}.</li>
+ * <li>The group class code location.</li>
+ * <li>The marshalled object that contains the group specific initialization
+ * information</li>
+ * </ul>
+ * The groups are created by the {@link ActivationGroup#createGroup} method that
+ * expectes the group class to have the two parameter constructor, the first
+ * parameter being the {@link ActivationGroupID} and the second the
+ * {@link MarshalledObject}.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub)
+ */
+public final class ActivationGroupDesc
+ implements Serializable
{
- static final long serialVersionUID = -4936225423168276595L;
+ /**
+ * Contains the startup options for the {@link ActivationGroup}
+ * implementations. Allows to override system properties and specify other
+ * options for the implementation groups.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub)
+ */
+ public static class CommandEnvironment
+ implements Serializable
+ {
-public static class CommandEnvironment
- implements Serializable {
+ /**
+ * Use the SVUID for interoperability.
+ */
+ static final long serialVersionUID = 6165754737887770191L;
+
+ /**
+ * The zero size string array used as argv value when null is passed.
+ */
+ private static final String[] NO_ARGS = new String[0];
-static final long serialVersionUID = 6165754737887770191L;
-
-private String cmdpath;
-private String[] argv;
+ /**
+ * The path to the java executable (or null for using default jre).
+ */
+ final String command;
+
+ /**
+ * The extra parameters (may be empty array but never null).
+ */
+ final String[] options;
+
+ /**
+ * Create the new command environment.
+ *
+ * @param commandPatch the full path (and name) to the java executable of
+ * null for using the default executable.
+ * @param args extra options that will be used when creating the activation
+ * group. Null has the same effect as the empty list.
+ */
+ public CommandEnvironment(String commandPatch, String[] args)
+ {
+ command = commandPatch;
+ if (args != null)
+ options = args;
+ else
+ options = NO_ARGS;
+ }
+
+ /**
+ * Get the path to the java executable.
+ *
+ * @return the path to the java executable or null for using the default
+ * jre.
+ */
+ public String getCommandPath()
+ {
+ return command;
+ }
+
+ /**
+ * Get the additional command options.
+ *
+ * @return the command options array, may be empty string
+ */
+ public String[] getCommandOptions()
+ {
+ return options;
+ }
+
+ /**
+ * Compare for content equality.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof CommandEnvironment)
+ {
+ CommandEnvironment that = (CommandEnvironment) obj;
-public CommandEnvironment(String cmdpath, String[] argv) {
- this.cmdpath = cmdpath;
- this.argv = argv;
-}
-
-public String getCommandPath() {
- return (cmdpath);
-}
-
-public String[] getCommandOptions() {
- return (argv);
-}
-
-public boolean equals(Object obj) {
- if (!(obj instanceof CommandEnvironment)) {
- return (false);
- }
- CommandEnvironment that = (CommandEnvironment)obj;
-
- if (!this.cmdpath.equals(that.cmdpath)) {
- return (false);
- }
-
- int len = this.argv.length;
- if (len != that.argv.length) {
- return (false);
- }
- for (int i = 0; i < len; i++) {
- if (!this.argv[i].equals(that.argv[i])) {
- return (false);
- }
- }
- return (true);
-}
+ if (command == null || that.command == null)
+ {
+ // Use direct comparison if null is involved.
+ if (command != that.command)
+ return false;
+ }
+ else
+ {
+ // Use .equals if null is not involved.
+ if (! this.command.equals(that.command))
+ return false;
+ }
-public int hashCode() {
- return (cmdpath.hashCode()); // Not a very good hash code.
-}
+ return Arrays.equals(options, that.options);
+ }
+ else
+ return false;
+ }
-}
+ /**
+ * Get the hash code.
+ */
+ public int hashCode()
+ {
+ int h = command == null ? 0 : command.hashCode();
+ for (int i = 0; i < options.length; i++)
+ h ^= options[i].hashCode();
-public ActivationGroupDesc(Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
- throw new Error("Not implemented");
-}
+ return h;
+ }
+ }
+
+ /**
+ * Use the SVUID for interoperability.
+ */
+ static final long serialVersionUID = - 4936225423168276595L;
+
+ /**
+ * The group class name or null for the default group class implementation.
+ */
+ final String className;
+
+ /**
+ * The group class download location URL (codebase), ignored by the
+ * default implementation.
+ */
+ final String location;
+
+ /**
+ * The group initialization data.
+ */
+ final MarshalledObject data;
+
+ /**
+ * The path to the group jre and the parameters of this jre, may be
+ * null for the default jre.
+ */
+ final ActivationGroupDesc.CommandEnvironment env;
+
+ /**
+ * The properties that override the system properties.
+ */
+ final Properties props;
+
+ /**
+ * The cached hash code.
+ */
+ transient long hash;
+
+ /**
+ * Create the new activation group descriptor that will use the default
+ * activation group implementation with the given properties and
+ * environment.
+ *
+ * @param aProperties the properties that override the system properties
+ * @param environment the command line (and parameters), indicating, where to
+ * find the jre executable and with that parameters to call it. May
+ * be null if the default executable should be used. In this case,
+ * the activation group with the null name (the system default group)
+ * will be created.
+ */
+ public ActivationGroupDesc(Properties aProperties,
+ ActivationGroupDesc.CommandEnvironment environment)
+ {
+ this(DefaultActivationGroup.class.getName(), null, null, aProperties,
+ environment);
+ }
+
+ /**
+ * Create the new activation group descriptor.
+ *
+ * @param aClassName the name of the group implementation class. The null
+ * value indicates the default implementation.
+ * @param aLocation the location, from where the group implementation class
+ * should be loaded (ignored for the system default implementation).
+ * @param aData the group intialization data
+ * @param aProperties the properties that will override the system properties
+ * of the new group. These properties will be translated into -D
+ * options.
+ * @param environment the record, containing path to the jre executable and
+ * start options for the jre or null for using the default jre and
+ * options.
+ */
+ public ActivationGroupDesc(String aClassName, String aLocation,
+ MarshalledObject aData, Properties aProperties,
+ ActivationGroupDesc.CommandEnvironment environment)
+ {
+ className = aClassName;
+ location = aLocation;
+ data = aData;
+ props = aProperties;
+ env = environment;
+ }
+
+ /**
+ * Get the activation group class name.
+ *
+ * @return the activation group class name (null for default implementation)
+ */
+ public String getClassName()
+ {
+ return className;
+ }
+
+ /**
+ * Get the location, from where the group class will be loaded
+ *
+ * @return the location, from where the implementation should be loaded (null
+ * for the default implementation)
+ */
+ public String getLocation()
+ {
+ return location;
+ }
+
+ /**
+ * Get the group intialization data.
+ *
+ * @return the group intialization data in the marshalled form.
+ */
+ public MarshalledObject getData()
+ {
+ return data;
+ }
-public ActivationGroupDesc(String className, String location, MarshalledObject data, Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
- throw new Error("Not implemented");
-}
+ /**
+ * Get the overridded system properties.
+ *
+ * @return the overridden group system properties.
+ */
+ public Properties getPropertyOverrides()
+ {
+ return props;
+ }
+
+ /**
+ * Get the group command environment, containing path to the jre executable
+ * and startup options.
+ *
+ * @return the command environment or null if the default environment should
+ * be used.
+ */
+ public ActivationGroupDesc.CommandEnvironment getCommandEnvironment()
+ {
+ return env;
+ }
+
+ /**
+ * Compare for the content equality.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ActivationGroupDesc)
+ {
+ ActivationGroupDesc that = (ActivationGroupDesc) obj;
-public String getClassName() {
- throw new Error("Not implemented");
-}
+ // Ensure the hashcodes are computed.
+ if (hash == 0)
+ hashCode();
+ if (that.hash == 0)
+ that.hashCode();
-public String getLocation() {
- throw new Error("Not implemented");
-}
+ // We compare the hash fields as they are type long rather than int.
+ if (hash != that.hash)
+ return false;
-public MarshalledObject getData() {
- throw new Error("Not implemented");
-}
+ if (! eq(className, that.className))
+ return false;
+ if (! eq(data, that.data))
+ return false;
+ if (! eq(env, that.env))
+ return false;
+ if (! eq(location, that.location))
+ return false;
-public Properties getPropertyOverrides() {
- throw new Error("Not implemented");
-}
+ // Compare the properties.
+ if (eq(props, that.props))
+ return true;
-public ActivationGroupDesc.CommandEnvironment getCommandEnvironment() {
- throw new Error("Not implemented");
-}
+ if (props.size() != that.props.size())
+ return false;
-public boolean equals(Object obj) {
- throw new Error("Not implemented");
-}
+ Enumeration en = props.propertyNames();
+ Object key, value;
-public int hashCode() {
- throw new Error("Not implemented");
-}
+ while (en.hasMoreElements())
+ {
+ key = en.nextElement();
+ if (! that.props.containsKey(key))
+ return false;
+ if (! eq(props.get(key), that.props.get(key)))
+ return false;
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Compare for direct equality if one or both parameters are null, otherwise
+ * call .equals.
+ */
+ static boolean eq(Object a, Object b)
+ {
+ if (a == null || b == null)
+ return a == b;
+ else
+ return a.equals(b);
+ }
+
+ /**
+ * Return the hashcode.
+ */
+ public int hashCode()
+ {
+ if (hash==0)
+ {
+ // Using Adler32 - the hashcode is cached, will be computed only
+ // once and due need to scan properties is the expensive operation
+ // anyway. Reliability is more important.
+ Adler32 adler = new Adler32();
+ if (className!=null)
+ adler.update(className.getBytes());
+ if (data!=null)
+ adler.update(data.hashCode());
+ if (env!=null)
+ adler.update(env.hashCode());
+ if (location!=null)
+ adler.update(location.getBytes());
+ if (props!=null)
+ {
+ Enumeration en = props.propertyNames();
+
+ // Using the intermediate sorted set to ensure that the
+ // properties are sorted.
+ TreeSet pr = new TreeSet();
+
+ Object key;
+ Object value;
+ while (en.hasMoreElements())
+ {
+ key = en.nextElement();
+ if (key!=null)
+ pr.add(key);
+ }
+
+ Iterator it = pr.iterator();
+ while (it.hasNext())
+ {
+ key = it.next();
+ value = props.get(key);
+ adler.update(key.hashCode());
+ if (value!=null)
+ adler.update(value.hashCode());
+ }
+ }
+ hash = adler.getValue();
+ }
+ return (int) hash;
+ }
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationGroupID.java b/libjava/classpath/java/rmi/activation/ActivationGroupID.java
index 5e0b964..e54b2a0 100644
--- a/libjava/classpath/java/rmi/activation/ActivationGroupID.java
+++ b/libjava/classpath/java/rmi/activation/ActivationGroupID.java
@@ -1,5 +1,5 @@
/* ActivationGroupID.java --
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,36 +35,88 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package java.rmi.activation;
import java.io.Serializable;
+import java.rmi.server.UID;
-public class ActivationGroupID implements Serializable
+/**
+ * This identifier identifies the activation group inside the scope of its
+ * activation system. It also contains (and can provide) the reference to the
+ * groups activation system.
+ *
+ * @see ActivationSystem#registerGroup(ActivationGroupDesc)
+ */
+public class ActivationGroupID
+ implements Serializable
{
- static final long serialVersionUID = -1648432278909740833L;
+ /**
+ * Use SVUID for interoperability.
+ */
+ static final long serialVersionUID = - 1648432278909740833L;
-private ActivationSystem system;
+ /**
+ * The associated activation system.
+ */
+ final ActivationSystem system;
+
+ /**
+ * The object identifier, making the ID unique.
+ */
+ final UID uid;
-public ActivationGroupID(ActivationSystem system) {
- this.system = system;
-}
+ /**
+ * Create the new activation group id in the scope of the given activation
+ * system
+ *
+ * @param aSystem the activation system
+ */
+ public ActivationGroupID(ActivationSystem aSystem)
+ {
+ system = aSystem;
+ uid = new UID();
+ }
-public ActivationSystem getSystem() {
- return (system);
-}
+ /**
+ * Get the associated activation system
+ *
+ * @return the associated activation system
+ */
+ public ActivationSystem getSystem()
+ {
+ return system;
+ }
-public int hashCode() {
- return (system.hashCode());
-}
+ /**
+ * Get the hash code of the associated activation system.
+ */
+ public int hashCode()
+ {
+ return uid.hashCode();
+ }
-public boolean equals(Object obj) {
- if (obj instanceof ActivationGroupID) {
- ActivationGroupID that = (ActivationGroupID)obj;
- if (this.system.equals(that.system)) {
- return (true);
- }
- }
- return (false);
-}
+ /**
+ * Copmare for equality, returns true if the passed object is also the
+ * activation group id and its activation system is the same.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ActivationGroupID)
+ {
+ ActivationGroupID that = (ActivationGroupID) obj;
+ return uid.equals(that.uid);
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Get the string representation
+ */
+ public String toString()
+ {
+ return uid.toString();
+ }
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java b/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java
index 249137b..fb55e5f 100644
--- a/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java
+++ b/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java
@@ -51,7 +51,7 @@ import java.rmi.server.RemoteStub;
*
* @author Roman Kennke (kennke@aicas.com)
*/
-public class ActivationGroup_Stub extends RemoteStub
+public final class ActivationGroup_Stub extends RemoteStub
implements ActivationInstantiator, Remote
{
private static final long serialVersionUID = 2L;
diff --git a/libjava/classpath/java/rmi/activation/ActivationID.java b/libjava/classpath/java/rmi/activation/ActivationID.java
index 23ed853..c4bbcd2 100644
--- a/libjava/classpath/java/rmi/activation/ActivationID.java
+++ b/libjava/classpath/java/rmi/activation/ActivationID.java
@@ -1,5 +1,5 @@
-/* ActivationID.java --
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* ActivationID.java -- the object activation identifier
+ Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,38 +35,165 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package java.rmi.activation;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.server.UID;
-public class ActivationID implements Serializable
+/**
+ * Denotes the object that can be activated over time. The instance of the
+ * ActivationID for the given object can be obtained in the following ways:
+ * <ul>
+ * <li>via {@link Activatable#register(ActivationDesc)}</li>
+ * <li>via Activatable constructor</li>
+ * <li>via Activatable.exportObject
+ * <li>
+ * </ul>
+ * An instance of the ActivationID has the {@link UID} as its component and
+ * hence is globally unique.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub)
+ */
+public class ActivationID
+ implements Serializable
{
- static final long serialVersionUID = -4608673054848209235L;
-
-private Activator activator;
-
-public ActivationID(Activator activator) {
- this.activator = activator;
-}
+ /**
+ * Use SVUID for interoperability.
+ */
+ static final long serialVersionUID = - 4608673054848209235L;
-public Remote activate(boolean force) throws ActivationException, UnknownObjectException, RemoteException {
- throw new Error("Not implemented");
-}
-
-public int hashCode() {
- return (activator.hashCode());
-}
+ /**
+ * The activator.
+ */
+ transient Activator activator;
+
+ /**
+ * The UID, making this instance unique.
+ */
+ transient UID uid;
+
+ /**
+ * The activation group that has activated the object with this
+ * activation id. The field is filled in inside the group and is used
+ * to notify the group about the request to inactivated the object.
+ */
+ transient ActivationGroup group;
-public boolean equals(Object obj) {
- if (obj instanceof ActivationID) {
- ActivationID that = (ActivationID)obj;
- if (this.activator.equals(that.activator)) {
- return (true);
- }
- }
- return (false);
-}
+ /**
+ * Create a new instance with the given activator.
+ *
+ * @param an_activator tha activator that should activate the object.
+ */
+ public ActivationID(Activator an_activator)
+ {
+ activator = an_activator;
+ uid = new UID();
+ }
+
+ /**
+ * Activate the object.
+ *
+ * @param force if true, always contact the group. Otherwise, the cached value
+ * may be returned.
+ * @return the activated object
+ * @throws UnknownObjectException if the object is unknown
+ * @throws ActivationException if the activation has failed
+ * @throws RemoteException if the remote call has failed
+ */
+ public Remote activate(boolean force) throws ActivationException,
+ UnknownObjectException, RemoteException
+ {
+ try
+ {
+ return (Remote) activator.activate(this, force).get();
+ }
+ catch (IOException e)
+ {
+ ActivationException acex = new ActivationException("id "+uid, e);
+ throw acex;
+ }
+ catch (ClassNotFoundException e)
+ {
+ ActivationException acex = new ActivationException("id "+uid, e);
+ throw acex;
+ }
+ }
+
+ /**
+ * Returns the hash code of the activator.
+ */
+ public int hashCode()
+ {
+ return uid == null ? 0 : uid.hashCode();
+ }
+
+ /**
+ * Compares the activators for equality.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ActivationID)
+ {
+ ActivationID that = (ActivationID) obj;
+ return eq(uid, that.uid);
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Read the object from the input stream.
+ *
+ * @param in the stream to read from
+ *
+ * @throws IOException if thrown by the stream
+ * @throws ClassNotFoundException
+ */
+ private void readObject(ObjectInputStream in) throws IOException,
+ ClassNotFoundException
+ {
+ uid = (UID) in.readObject();
+ activator = (Activator) in.readObject();
+ }
+
+ /**
+ * Write the object to the output stream.
+ *
+ * @param out the stream to write int
+ * @throws IOException if thrown by the stream
+ * @throws ClassNotFoundException
+ */
+ private void writeObject(ObjectOutputStream out) throws IOException,
+ ClassNotFoundException
+ {
+ out.writeObject(uid);
+ out.writeObject(activator);
+ };
+
+ /**
+ * Compare by .equals if both a and b are not null, compare directly if at
+ * least one of them is null.
+ */
+ static final boolean eq(Object a, Object b)
+ {
+ if (a == null || b == null)
+ return a == b;
+ else
+ return a.equals(b);
+ }
+ /**
+ * Return the content based string representation.
+ */
+ public String toString()
+ {
+ return uid.toString();
+ }
+
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationInstantiator.java b/libjava/classpath/java/rmi/activation/ActivationInstantiator.java
index 0aceb7a..a0f04ed 100644
--- a/libjava/classpath/java/rmi/activation/ActivationInstantiator.java
+++ b/libjava/classpath/java/rmi/activation/ActivationInstantiator.java
@@ -42,9 +42,32 @@ import java.rmi.MarshalledObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
+/**
+ * The implementation of this interface creates (instantiates) the new remote
+ * objects in response to the activation request. The instantiator is returned
+ * by the {@link ActivationGroup} that calls
+ * {@link ActivationSystem#activeGroup(ActivationGroupID, ActivationInstantiator, long)}.
+ */
public interface ActivationInstantiator
extends Remote
{
+ /**
+ * Creates and instantiate a new remote object. This method performs the
+ * following tasks:
+ * <ul>
+ * <li>Finds and loads (if not already loaded) the class of the object being
+ * instantiated</li>
+ * <li>Creates an instance of the object using its special two parameter
+ * activation constructor, the first parameter being the {@link ActivationID}
+ * and the second the {@link MarshalledObject}.</li>
+ *
+ * @param id the id of the object being instantiated
+ * @param desc the activation descriptor being instantiated
+ * @return the MarshalledObject, containing the stub to the newly created
+ * object.
+ * @throws ActivationException if the activation fails
+ * @throws RemoteException if the remote call fails
+ */
MarshalledObject newInstance (ActivationID id, ActivationDesc desc)
throws ActivationException, RemoteException;
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationMonitor.java b/libjava/classpath/java/rmi/activation/ActivationMonitor.java
index 1e64257..e9f43ae 100644
--- a/libjava/classpath/java/rmi/activation/ActivationMonitor.java
+++ b/libjava/classpath/java/rmi/activation/ActivationMonitor.java
@@ -1,5 +1,6 @@
-/* ActivationMonitor.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* ActivationMonitor.java -- the RMI activation/inactivation event listener
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,14 +43,45 @@ import java.rmi.MarshalledObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
+/**
+ * The activation and inactivation event listener. The group obtains this
+ * listener via {@link ActivationSystem#activeGroup} and must notify it
+ * when the group objects are activated or inactivated and also when the
+ * whole group becomes inactive.
+ * @author root.
+ */
public interface ActivationMonitor extends Remote
{
- void inactiveObject (ActivationID id)
+ /**
+ * Informs that the object is now active.
+ *
+ * @param id the activation id of the object that is now active
+ * @throws UnknownObjectException is such object is not known in this group
+ * @throws RemoteException if remote call fails
+ */
+ void activeObject (ActivationID id, MarshalledObject obj)
throws UnknownObjectException, RemoteException;
- void activeObject (ActivationID id, MarshalledObject obj)
+ /**
+ * Informs that the object is not inactive.
+ *
+ * @param id the activation id of the object that is now inactive
+ * @throws UnknownObjectException is such object is not known in this group
+ * @throws RemoteException if remote call fails
+ */
+ void inactiveObject (ActivationID id)
throws UnknownObjectException, RemoteException;
- void inactiveGroup (ActivationGroupID id, long incarnation)
+ /**
+ * Informs that the whole group is now inactive because all group objects are
+ * inactive. The group will be recreated upon the later request to activate
+ * any object, belonging to the group.
+ *
+ * @param groupId the group id
+ * @param incarnation the group incarnation number
+ * @throws UnknownGroupException if the group id is not known
+ * @throws RemoteException if the remote call fails
+ */
+ void inactiveGroup (ActivationGroupID groupId, long incarnation)
throws UnknownGroupException, RemoteException;
}
diff --git a/libjava/classpath/java/rmi/activation/ActivationSystem.java b/libjava/classpath/java/rmi/activation/ActivationSystem.java
index 4b92d40..7196764 100644
--- a/libjava/classpath/java/rmi/activation/ActivationSystem.java
+++ b/libjava/classpath/java/rmi/activation/ActivationSystem.java
@@ -1,5 +1,6 @@
-/* ActivationSystem.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* ActivationSystem.java -- registers groups and objects to be activated.
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,38 +42,165 @@ package java.rmi.activation;
import java.rmi.Remote;
import java.rmi.RemoteException;
-public interface ActivationSystem extends Remote
+/**
+ * <p>
+ * The ActivationSystem registers groups and activatable objects to be activated
+ * within those groups. The ActivationSystem cooperates with both the Activator,
+ * which activates objects registered via the ActivationSystem, and the
+ * ActivationMonitor, which obtains information about active and inactive
+ * objects and inactive groups.
+ * </p>
+ * <p>
+ * The activation system if frequently a remote object. As a security mean, all
+ * methods in this interface throw {@link java.rmi.AccessException} if called
+ * from the client that is not reside on the same host as the activation system.
+ * </p>
+ * @see ActivationGroup#getSystem()
+ */
+public interface ActivationSystem
+ extends Remote
{
+ /**
+ * The port, used by the activation system. The value is equal to 1098 by
+ * default, but it can be changed by putting the system property
+ * .
+ */
int SYSTEM_PORT = 1098;
-
- ActivationID registerObject (ActivationDesc desc)
- throws ActivationException, UnknownGroupException, RemoteException;
-
- void unregisterObject (ActivationID id)
- throws ActivationException, UnknownObjectException, RemoteException;
-
- ActivationGroupID registerGroup (ActivationGroupDesc desc)
- throws ActivationException, RemoteException;
-
- ActivationMonitor activeGroup (ActivationGroupID id,
- ActivationInstantiator group, long incarnation)
- throws UnknownGroupException, ActivationException, RemoteException;
-
- void unregisterGroup (ActivationGroupID id)
- throws ActivationException, UnknownGroupException, RemoteException;
-
- void shutdown()
- throws RemoteException;
-
- ActivationDesc setActivationDesc (ActivationID id, ActivationDesc desc)
- throws ActivationException, UnknownObjectException, UnknownGroupException,
- RemoteException;
-
- ActivationGroupDesc setActivationGroupDesc (ActivationGroupID id,
- ActivationGroupDesc desc)
- throws ActivationException, UnknownGroupException, RemoteException;
-
- ActivationDesc getActivationDesc (ActivationID id) throws ActivationException, UnknownObjectException, RemoteException;
-
- ActivationGroupDesc getActivationGroupDesc (ActivationGroupID id) throws ActivationException, UnknownGroupException, RemoteException;
+
+ /**
+ * Registers the activation descriptor and creates (and returns) its
+ * activation identifier. The map entry (identifier to descriptor) is stored
+ * in the stable map and used when the {@link Activator} receives the request
+ * to activate the object.
+ *
+ * @param desc the activation descriptor to register.
+ * @return the created activation identifier that is mapped to the passed
+ * descriptor.
+ * @throws ActivationException if the registration fails (database update
+ * problems, etc).
+ * @throws UnknownGroupException the if group, specified in decriptor, is
+ * unknown.
+ * @throws RemoteException if the remote call fails.
+ */
+ ActivationID registerObject(ActivationDesc desc) throws ActivationException,
+ UnknownGroupException, RemoteException;
+
+ /**
+ * Removes the stored identifier-description map entry. The object will no
+ * longer be activable using the passed activation id
+ *
+ * @param id the activation id to remove
+ * @throws ActivationException if the entry removing operation failed
+ * (database update problems, etc)
+ * @throws UnknownObjectException if the passed id is not known to the system
+ * @throws RemoteException if the remote call fails
+ */
+ void unregisterObject(ActivationID id) throws ActivationException,
+ UnknownObjectException, RemoteException;
+
+ /**
+ * Register the new activation group. For instance, it can be one activation
+ * group per virtual machine.
+ *
+ * @param groupDesc the activation group descriptor.
+ * @return the created activation group ID for the activation group
+ * @throws ActivationException if the group registration fails
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationGroupID registerGroup(ActivationGroupDesc groupDesc)
+ throws ActivationException, RemoteException;
+
+ /**
+ * This method is called from the {@link ActivationGroup} to inform the
+ * ActivatinSystem that the group is now active and there is the
+ * {@link ActivationInstantiator} for that group. This call is made internally
+ * from the {@link ActivationGroup#createGroup}.
+ *
+ * @param id the group id
+ * @param group the group activation instantiator
+ * @param incarnation the groups incarnatin number.
+ * @return the activation monitor that should be informed about the group
+ * state changes
+ * @throws UnknownGroupException if this group has not been registered
+ * @throws ActivationException if this group is already active
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationMonitor activeGroup(ActivationGroupID id,
+ ActivationInstantiator group, long incarnation)
+ throws UnknownGroupException, ActivationException, RemoteException;
+
+ /**
+ * Removes the activation group with the given identifier. The group calls
+ * back, informing the activator about the shutdown.
+ *
+ * @param id the group activation id.
+ * @throws ActivationException if the database update fails
+ * @throws UnknownGroupException if such group is not registered
+ * @throws RemoteException if the remote call fails
+ */
+ void unregisterGroup(ActivationGroupID id) throws ActivationException,
+ UnknownGroupException, RemoteException;
+
+ /**
+ * Shutdown the activation system and all associated activation groups
+ *
+ * @throws RemoteException if the remote call fails
+ */
+ void shutdown() throws RemoteException;
+
+ /**
+ * Replace the activation descriptor for the object with the given activation
+ * id.
+ *
+ * @param id the activation id
+ * @param desc the new activation descriptor
+ * @return the previous activation descriptor for that object.
+ * @throws ActivationException if the database update fails
+ * @throws UnknownObjectException if the object with such id is not known
+ * @throws UnknownGroupException if the activation group (in desc) is not
+ * known.
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationDesc setActivationDesc(ActivationID id, ActivationDesc desc)
+ throws ActivationException, UnknownObjectException,
+ UnknownGroupException, RemoteException;
+
+ /**
+ * Replaces the group descriptor for the group with the given group activation
+ * id.
+ *
+ * @param groupId the group id
+ * @param groupDesc the new group descriptor
+ * @return the previous group descriptor
+ * @throws ActivationException if the database update fails
+ * @throws UnknownGroupException if such group is not known
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationGroupDesc setActivationGroupDesc(ActivationGroupID groupId,
+ ActivationGroupDesc groupDesc)
+ throws ActivationException, UnknownGroupException, RemoteException;
+
+ /**
+ * Get the activation descriptor for the object with the given activation id.
+ *
+ * @param id the object activation id
+ * @return the activation descriptor for that object
+ * @throws ActivationException if the database access fails
+ * @throws UnknownObjectException if this object is not known
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationDesc getActivationDesc(ActivationID id) throws ActivationException,
+ UnknownObjectException, RemoteException;
+
+ /**
+ * Get the group descriptor for the group with the given id.
+ *
+ * @param groupId the group id
+ * @return the group descriptor
+ * @throws ActivationException if the database access fails
+ * @throws UnknownGroupException if the group with such id is not known
+ * @throws RemoteException if the remote call fails
+ */
+ ActivationGroupDesc getActivationGroupDesc(ActivationGroupID groupId)
+ throws ActivationException, UnknownGroupException, RemoteException;
}
diff --git a/libjava/classpath/java/rmi/activation/Activator.java b/libjava/classpath/java/rmi/activation/Activator.java
index 2fb5a58..57a4d16 100644
--- a/libjava/classpath/java/rmi/activation/Activator.java
+++ b/libjava/classpath/java/rmi/activation/Activator.java
@@ -42,9 +42,31 @@ import java.rmi.MarshalledObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
+/**
+ * Activates remote object, providing the live reference to the activable remote
+ * object. Usually there is only one activator per host.
+ *
+ * @see ActivationSystem
+ * @see ActivationMonitor
+ */
public interface Activator
extends Remote
{
+ /**
+ * Activate the object, associated with the given activation identifier. The
+ * activator looks for the {@link ActivationDesc}riptor for the passed
+ * identifier, determines the object activation group and initiates object
+ * recreation either via {@link ActivationInstantiator} or via
+ * {@link Class#newInstance()}.
+ *
+ * @param id the identifier of the object to activate.
+ * @param force if true, the activator always contacts the group to obtain the
+ * reference. If false, it may return the cached value.
+ * @return the activated remote object (its stub).
+ * @throws UnknownObjectException if the object with this id is unknown
+ * @throws ActivationException if the activation has failed due other reason
+ * @throws RemoteException if the remote call has failed.
+ */
MarshalledObject activate (ActivationID id, boolean force)
throws ActivationException, UnknownObjectException, RemoteException;
}
diff --git a/libjava/classpath/java/rmi/activation/package.html b/libjava/classpath/java/rmi/activation/package.html
index 444782d..9df518f 100644
--- a/libjava/classpath/java/rmi/activation/package.html
+++ b/libjava/classpath/java/rmi/activation/package.html
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in java.rmi.activation package.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,34 @@ exception statement from your version. -->
<head><title>GNU Classpath - java.rmi.activation</title></head>
<body>
-<p></p>
-
+In the previous Classpath releases, an instance of a UnicastRemoteObject
+could be accessed from a server that:
+<ul>
+<li>has created an instance of that object<li>
+<li>has been running <i>all<i> the time</li>
+</ul>
+<p>The the activation system allows to activate and execute the object
+implementation on demand rather than running all time. If the activation
+system is persistent, the server can be terminated and then restarted.
+The clients, still holding remote references to the server side
+activatable objects, will activate those objects again. The server side
+objects will be reinstantiated (activated) during the first call of any
+remote method of such object.
+</p><p>
+The RMI client code for activatable objects is no different than the code for
+accessing non-activatable remote objects. Activation is a server-side feature.
+</p><p>
+In order for an object to be activated, the "activatable" object class
+(independently if it extends the {@link Activatable} class or not) defines a
+special public constructor that takes two arguments, its activation identifier
+({@link ActivationID}) and its activation data ({@link java.rmi.MarshalledObject}),
+supplied in the activation descriptor used during registration. When an
+activation group activates a remote object, it constructs the object via
+this special constructor. The remote object implementation may use the
+activation data to initialize itself in a needed manner. The remote object may
+also retain its activation identifier, so that it can inform the activation
+group when it becomes inactive (via a call to the Activatable.inactive method).
+</p>
+@author Audrius Meskauskas (audriusa@bioinformatics.org) (from empty)
</body>
</html>
diff --git a/libjava/classpath/java/rmi/dgc/VMID.java b/libjava/classpath/java/rmi/dgc/VMID.java
index f960d9c..dc989c2 100644
--- a/libjava/classpath/java/rmi/dgc/VMID.java
+++ b/libjava/classpath/java/rmi/dgc/VMID.java
@@ -1,5 +1,5 @@
-/* VMID.java
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* VMID.java -- The object ID, unique between all virtual machines.
+ Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,37 +41,72 @@ import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.server.UID;
-
+import java.util.Arrays;
+
+/**
+ * An identifier that is unique accross the all virtual machines. This class is
+ * used by distributed garbage collector to identify the virtual machine of
+ * the client, but may also be used in various other cases, when such identifier
+ * is required. This class separately stores and transfers the host IP
+ * address, but will try to do its best also for the case if it failed to
+ * determine it. The alternative algorithms are used in {@link UID} that is
+ * part of this class. The VMID's, created on the same host, but in the two
+ * separately (parallely) running virtual machines are different.
+ */
public final class VMID implements Serializable
{
+ /**
+ * Use SVUID for interoperability.
+ */
static final long serialVersionUID = -538642295484486218L;
- static final boolean areWeUnique;
+ /**
+ * If true, the IP of this host can ve reliably determined.
+ */
+ static boolean areWeUnique;
+ /**
+ * The IP address of the local host.
+ */
static byte[] localAddr;
+ /**
+ * The IP address of the local host.
+ */
private byte[] addr;
+ /**
+ * The cached hash code.
+ */
+ transient int hash;
+
+ /**
+ * The UID of this VMID.
+ */
private UID uid;
static
- {
- byte[] addr;
- boolean awu = true;
- try {
- addr = InetAddress.getLocalHost().getAddress();
- if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) {
- awu = false;
- }
- }
- catch (UnknownHostException _) {
- addr = new byte[]{ 127, 0, 0, 1 };
- awu = false;
+ {
+ // This "local host" value usually indicates that the local
+ // IP address cannot be reliably determined.
+ byte[] localHost = new byte[] { 127, 0, 0, 1 };
+
+ try
+ {
+ localAddr = InetAddress.getLocalHost().getAddress();
+ areWeUnique = !Arrays.equals(localHost, localAddr);
+ }
+ catch (UnknownHostException uhex)
+ {
+ localAddr = localHost;
+ areWeUnique = false;
+ }
}
- localAddr = addr;
- areWeUnique = awu;
- }
-
+
+ /**
+ * Create the new VMID. All VMID's are unique accross tha all virtual
+ * machines.
+ */
public VMID()
{
addr = localAddr;
@@ -79,42 +114,58 @@ public final class VMID implements Serializable
}
/**
- * @deprecated
+ * Return true if it is possible to get the accurate address of this host.
+ * If false is returned, the created VMID's are less reliable, but the
+ * starting time and possibly the memory allocation are also taken into
+ * consideration in the incorporated UID. Hence the VMID's, created on the
+ * different virtual machines, still should be different.
+ *
+ * @deprecated VMID's are more or less always reliable.
+ *
+ * @return false if the local host ip address is 127.0.0.1 or unknown,
+ * true otherwise.
*/
public static boolean isUnique ()
{
return areWeUnique;
}
-
+
+ /**
+ * Get the hash code of this VMID.
+ */
public int hashCode ()
{
- return super.hashCode();
- }
-
- public boolean equals (Object obj)
- {
- if (!(obj instanceof VMID))
- {
- return false;
- }
-
- VMID other = (VMID) obj;
- if (addr.length != other.addr.length)
+ if (hash==0)
{
- return false;
+ for (int i = 0; i < localAddr.length; i++)
+ hash += addr[i];
+ hash = hash ^ uid.hashCode();
}
-
- for (int i = addr.length - 1; i >= 0; i--)
+ return hash;
+ }
+
+ /**
+ * Returns true if the passed parameter is also VMID and it is equal to this
+ * VMID. The VMID should only be equal to itself (also if the passed value is
+ * another instance, cloned by serialization).
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof VMID)
{
- if (addr[i] != other.addr[i])
- {
- return false;
- }
+ VMID other = (VMID) obj;
+
+ // The UID's are compared faster than arrays.
+ return uid.equals(other.uid) && Arrays.equals(addr, other.addr);
}
-
- return uid.equals(other.uid);
- }
+ else
+ return false;
+ }
+
+ /**
+ * Get the string representation of this VMID.
+ */
public String toString ()
{
StringBuffer buf = new StringBuffer ("[VMID: ");
diff --git a/libjava/classpath/java/rmi/dgc/package.html b/libjava/classpath/java/rmi/dgc/package.html
index 9458d4c..7f0a208 100644
--- a/libjava/classpath/java/rmi/dgc/package.html
+++ b/libjava/classpath/java/rmi/dgc/package.html
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in java.rmi.dgc package.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,13 @@ exception statement from your version. -->
<head><title>GNU Classpath - java.rmi.dgc</title></head>
<body>
-<p></p>
-
+The Distributed Garbage Collector (DGC). The DGC is reponsible for keeping all
+locally created and exported remote objects as long as they are referenced
+by some remote clients. The client must periodically notify the server that
+it still wants to keep the remote object on the server side. The client
+notifies the server by calling methods, defined in the DGC interface.
+Other classes in this package define the parameters that are used in this
+interface. The DGC object of some host can be found and accessed by its
+object identifier (ObjID.DGC_ID), without involving the name service.
</body>
</html>
diff --git a/libjava/classpath/java/rmi/server/ObjID.java b/libjava/classpath/java/rmi/server/ObjID.java
index 07cbbde..1aaa223 100644
--- a/libjava/classpath/java/rmi/server/ObjID.java
+++ b/libjava/classpath/java/rmi/server/ObjID.java
@@ -1,5 +1,6 @@
-/* ObjID.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* ObjID.java -- Unique object id with respect to the given host.
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,59 +46,152 @@ import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
-public final class ObjID implements Serializable
+/**
+ * Represents the object identifier, unique for the host that generated it.
+ * The ObjID contains inside the integer object identifier that, if needed,
+ * may indicated that this is a reference to one of the well known objects
+ * on that host (registry, activator or dgc) and the {@link UID} that
+ * ensures uniqueness.
+ */
+public final class ObjID
+ implements Serializable
{
-static final long serialVersionUID = -6386392263968365220L;
-private static long next = 0x8000000000000000L;
-private static final Object lock = ObjID.class;
-
-public static final int REGISTRY_ID = 0;
-public static final int ACTIVATOR_ID = 1;
-public static final int DGC_ID = 2;
-
-private long objNum;
-private UID space;
-
-public ObjID() {
- synchronized (lock) {
- objNum = next++;
- }
- space = new UID();
-}
-
-public ObjID(int num) {
- objNum = (long)num;
- space = new UID((short)0);
-}
-
-public void write(ObjectOutput out) throws IOException {
- DataOutput dout = (DataOutput)out;
- dout.writeLong(objNum);
- space.write(dout);
-}
-
-public static ObjID read(ObjectInput in) throws IOException {
- DataInput din = (DataInput)in;
- ObjID id = new ObjID();
- id.objNum = din.readLong();
- id.space = UID.read(din);
- return (id);
-}
-
-public int hashCode() {
- return ((int)objNum);
-}
-
-public boolean equals(Object obj) {
- if (obj instanceof ObjID && this.objNum == ((ObjID)obj).objNum) {
- return (true);
- }
- return (false);
-}
-
-public String toString() {
- return ("[objNum: " + objNum + ", " + space + "]");
-}
+ /**
+ * Use serial version uid for interoperability.
+ */
+ static final long serialVersionUID = - 6386392263968365220L;
+
+ /**
+ * The object counter, which value is assigned when creating the ordinary
+ * objects without the known object id. The counter is incremented each time
+ * the new ObjID is constructed.
+ */
+ private static long next = 0x8000000000000000L;
+
+ /**
+ * The object to put the lock on when incrementing {@link #next}
+ */
+ private static final Object lock = ObjID.class;
+
+ /**
+ * Defines the ID of the naming service.
+ */
+ public static final int REGISTRY_ID = 0;
+
+ /**
+ * Defines the ID of the activator.
+ */
+ public static final int ACTIVATOR_ID = 1;
+
+ /**
+ * Defines the ID of the distributed garbage collector.
+ */
+ public static final int DGC_ID = 2;
+
+ /**
+ * The object Id (either well-known value or the value of the incrementing
+ * object counter.
+ */
+ long objNum;
+
+ /**
+ * The object unique identifier, generated individually for each object.
+ */
+ UID space;
+
+ /**
+ * Create the new object id, unique for this host.
+ */
+ public ObjID()
+ {
+ synchronized (lock)
+ {
+ objNum = next++;
+ }
+ space = new UID();
+ }
+
+ /**
+ * Create the new object id defining the well known remotely accessible
+ * object, present in this host. The well - known objects are:
+ * <ul>
+ * <li>{@link #REGISTRY_ID} - RMI naming service.</li>
+ * <li>{@link #ACTIVATOR_ID} - activator</li>
+ * <li>{@link #DGC_ID} - distributed garbage collector (grants lease
+ * durations to keep the object before it is garbage collected.</li>
+ * </ul>
+ *
+ * @param id the well known object id, one of the above.
+ */
+ public ObjID(int id)
+ {
+ objNum = (long) id;
+ space = new UID((short) 0);
+ }
+
+ /**
+ * Write object id as long, then the object {@link UID}.
+ */
+ public void write(ObjectOutput out) throws IOException
+ {
+ DataOutput dout = (DataOutput) out;
+ dout.writeLong(objNum);
+ space.write(dout);
+ }
+
+ /**
+ * Read object id (as long), then the object {@link UID}.
+ */
+ public static ObjID read(ObjectInput in) throws IOException
+ {
+ DataInput din = (DataInput) in;
+ ObjID id = new ObjID();
+ id.objNum = din.readLong();
+ id.space = UID.read(din);
+ return (id);
+ }
+
+ /**
+ * Get the hashcode.
+ */
+ public int hashCode()
+ {
+ return space == null ? (int) objNum : space.hashCode() ^ (int) objNum;
+ }
+
+ /**
+ * Compare for equality.
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ObjID)
+ {
+ ObjID that = (ObjID) obj;
+ return that.objNum == objNum && eq(that.space, space);
+ }
+ else
+ return false;
+ }
+
+ /**
+ * Compare by .equals if both a and b are not null, compare directly if at
+ * least one of them is null.
+ */
+ static final boolean eq(Object a, Object b)
+ {
+ if (a == null || b == null)
+ return a == b;
+ else
+ return a.equals(b);
+ }
+
+ /**
+ * Get the string representation.
+ */
+ public String toString()
+ {
+ return (objNum + ":" + space);
+ }
}
diff --git a/libjava/classpath/java/rmi/server/Operation.java b/libjava/classpath/java/rmi/server/Operation.java
index 64faf66..f7b5f02 100644
--- a/libjava/classpath/java/rmi/server/Operation.java
+++ b/libjava/classpath/java/rmi/server/Operation.java
@@ -38,6 +38,9 @@ exception statement from your version. */
package java.rmi.server;
/**
+ * This class was used with jdk 1.1 stubs and skeletons. It is no longer
+ * needed since jdk 1.2 and higher.
+ *
* @deprecated
*/
public class Operation
@@ -45,6 +48,7 @@ public class Operation
private String operation;
/**
+ * Create operation with the given name.
* @deprecated
*/
public Operation (String op)
@@ -53,6 +57,8 @@ public class Operation
}
/**
+ * Get the name of the operation.
+ *
* @deprecated
*/
public String getOperation ()
@@ -61,6 +67,8 @@ public class Operation
}
/**
+ * Return the name of the operation.
+ *
* @deprecated
*/
public String toString ()
diff --git a/libjava/classpath/java/rmi/server/RemoteObject.java b/libjava/classpath/java/rmi/server/RemoteObject.java
index 60e57dc..5b926bf 100644
--- a/libjava/classpath/java/rmi/server/RemoteObject.java
+++ b/libjava/classpath/java/rmi/server/RemoteObject.java
@@ -39,6 +39,7 @@ package java.rmi.server;
import java.io.IOException;
import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.rmi.NoSuchObjectException;
@@ -101,6 +102,9 @@ public boolean equals(Object obj) {
return (this == obj);
}
+/**
+ * Get the string representation of this remote object.
+ */
public String toString()
{
if (ref == null)
@@ -108,55 +112,91 @@ public boolean equals(Object obj) {
return (ref.toString ());
}
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+ /**
+ * Read the remote object from the input stream. Expects the class name
+ * without package first. Then the method creates and assigns the {@link #ref}
+ * an instance of this class and calls its .readExternal method. The standard
+ * packageless class names are UnicastRef, UnicastRef2, UnicastServerRef,
+ * UnicastServerRef2, ActivatableRef or ActivatableServerRef.
+ *
+ * @param in the stream to read from
+ * @throws IOException if the IO exception occurs
+ * @throws ClassNotFoundException if the class with the given name is not
+ * present in the package gnu.java.rmi.server (for the case of the
+ * GNU Classpath.
+ */
+ private void readObject(ObjectInputStream in) throws IOException,
+ ClassNotFoundException
{
String cname = in.readUTF();
- if (!cname.equals(""))
+ if (! cname.equals(""))
{
- if (cname.equals ("UnicastRef2"))
- {
- // hack for interoperating with JDK
- cname = "UnicastRef";
- in.read (); //some unknown UnicastRef2 field
- }
-
- // It would be nice to use RemoteRef.packagePrefix here, but for binary
- // compatibility with the JDK that has to contain "sun.rmi.server"...
- cname = "gnu.java.rmi.server." + cname;
- try
- {
- Class cls = Class.forName(cname);
- ref = (RemoteRef)cls.newInstance();
- }
- catch (InstantiationException e1)
- {
- throw new UnmarshalException("failed to create ref", e1);
- }
- catch (IllegalAccessException e2)
- {
- throw new UnmarshalException("failed to create ref", e2);
- }
- ref.readExternal(in);
+ if (cname.equals("UnicastRef2"))
+ {
+ // hack for interoperating with JDK
+ cname = "UnicastRef";
+ in.read(); // some unknown UnicastRef2 field
+ }
+
+ // It would be nice to use RemoteRef.packagePrefix here, but for binary
+ // compatibility with the JDK that has to contain "sun.rmi.server"...
+ cname = "gnu.java.rmi.server." + cname;
+ try
+ {
+ Class cls = Class.forName(cname);
+ ref = (RemoteRef) cls.newInstance();
+ }
+ catch (InstantiationException e1)
+ {
+ throw new UnmarshalException("failed to create ref", e1);
+ }
+ catch (IllegalAccessException e2)
+ {
+ throw new UnmarshalException("failed to create ref", e2);
+ }
+ ref.readExternal(in);
}
- else
+ else
{
- ref = (RemoteRef)in.readObject();
+ ref = (RemoteRef) in.readObject();
}
}
-private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException {
- if (ref == null) {
- throw new UnmarshalException("no ref to serialize");
- }
- String cname = ref.getRefClass(out);
- if (cname != null && cname.length() > 0) {
- out.writeUTF(cname);
- ref.writeExternal(out);
- }
- else {
- out.writeUTF("");
- out.writeObject(ref);
- }
-}
+ /**
+ * Write the remote object to the output stream. This method first calls
+ * {@link RemoteRef#getRefClass(ObjectOutput)} on the {@link #ref} to get the
+ * class name without package, writes this name and then calls the
+ * ref.writeObject to write the data. The standard packageless class names are
+ * UnicastRef, UnicastRef2, UnicastServerRef, UnicastServerRef2,
+ * ActivatableRef or ActivatableServerRef. The empty string with the
+ * subsequently following serialized ref instance be written if the
+ * ref.getRefClass returns null.
+ *
+ * @param out the stream to write to
+ * @throws IOException if one occurs during writing
+ * @throws ClassNotFoundException never in this implementation (specified as
+ * part of the API standard)
+ * @throws UnmarshalException if the remote reference of this remote object is
+ * null.
+ */
+ private void writeObject(ObjectOutputStream out) throws IOException,
+ ClassNotFoundException
+ {
+ if (ref == null)
+ {
+ throw new UnmarshalException("no ref to serialize");
+ }
+ String cname = ref.getRefClass(out);
+ if (cname != null && cname.length() > 0)
+ {
+ out.writeUTF(cname);
+ ref.writeExternal(out);
+ }
+ else
+ {
+ out.writeUTF("");
+ out.writeObject(ref);
+ }
+ }
}
diff --git a/libjava/classpath/java/rmi/server/RemoteObjectInvocationHandler.java b/libjava/classpath/java/rmi/server/RemoteObjectInvocationHandler.java
index afd1d59..2c19cd5 100644
--- a/libjava/classpath/java/rmi/server/RemoteObjectInvocationHandler.java
+++ b/libjava/classpath/java/rmi/server/RemoteObjectInvocationHandler.java
@@ -90,6 +90,11 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements
static final Class[] anObjectC = new Class[] { Object.class };
/**
+ * The empty object array to replace null when no args are passed.
+ */
+ static final Object[] noArgs = new Object[0];
+
+ /**
* Construct the remote invocation handler that forwards calls to the given
* remote object.
*
@@ -143,6 +148,9 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements
throw new IllegalAccessException(name + " does not implement "
+ Remote.class.getName());
}
+
+ if (parameters == null)
+ parameters = noArgs;
String name = method.getName();
switch (name.charAt(0))
@@ -172,7 +180,7 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements
break;
case 't':
if (parameters.length == 0 && name.equals("toString"))
- return proxyInstance.toString();
+ return "Proxy stub:"+ref.remoteToString();
break;
default:
break;
diff --git a/libjava/classpath/java/rmi/server/RemoteServer.java b/libjava/classpath/java/rmi/server/RemoteServer.java
index 9efb12a..f022b73 100644
--- a/libjava/classpath/java/rmi/server/RemoteServer.java
+++ b/libjava/classpath/java/rmi/server/RemoteServer.java
@@ -1,5 +1,6 @@
/* RemoteServer.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,6 +36,7 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package java.rmi.server;
import gnu.java.rmi.server.RMIIncomingThread;
@@ -42,35 +44,72 @@ import gnu.java.rmi.server.RMIIncomingThread;
import java.io.OutputStream;
import java.io.PrintStream;
-public abstract class RemoteServer extends RemoteObject
+/**
+ * A common superclass for the server implementations.
+ */
+public abstract class RemoteServer
+ extends RemoteObject
{
-private static final long serialVersionUID = -4100238210092549637L;
-
-protected RemoteServer() {
- super();
-}
-
-protected RemoteServer(RemoteRef ref) {
- super(ref);
-}
-
-public static String getClientHost() throws ServerNotActiveException {
- Thread currThread = Thread.currentThread();
- if (currThread instanceof RMIIncomingThread) {
- RMIIncomingThread incomingThread = (RMIIncomingThread) currThread;
- return incomingThread.getClientHost();
- } else {
- throw new ServerNotActiveException(
- "Unknown client host - current thread not instance of 'RMIIncomingThread'");
- }
-}
-
-public static void setLog(OutputStream out) {
- throw new Error("Not implemented");
-}
-
-public static PrintStream getLog() {
- throw new Error("Not implemented");
-}
+ private static final long serialVersionUID = - 4100238210092549637L;
+
+ /**
+ * Does nothing, delegates to super().
+ */
+ protected RemoteServer()
+ {
+ super();
+ }
+
+ /**
+ * Does nothing, delegates to super(ref).
+ */
+ protected RemoteServer(RemoteRef ref)
+ {
+ super(ref);
+ }
+
+ /**
+ * Get the host of the calling client. The current thread must be an instance
+ * of the {@link RMIIncomingThread}.
+ *
+ * @return the client host address
+ *
+ * @throws ServerNotActiveException if the current thread is not an instance
+ * of the RMIIncomingThread.
+ */
+ public static String getClientHost() throws ServerNotActiveException
+ {
+ Thread currThread = Thread.currentThread();
+ if (currThread instanceof RMIIncomingThread)
+ {
+ RMIIncomingThread incomingThread = (RMIIncomingThread) currThread;
+ return incomingThread.getClientHost();
+ }
+ else
+ {
+ throw new ServerNotActiveException(
+ "Unknown client host - current thread not instance of 'RMIIncomingThread'");
+ }
+ }
+
+ /**
+ * Set the stream for logging RMI calls.
+ *
+ * @param out the stream to set or null to turn the logging off.
+ */
+ public static void setLog(OutputStream out)
+ {
+ throw new Error("Not implemented");
+ }
+
+ /**
+ * Get the stream for logging RMI calls.
+ *
+ * @return the associated stream.
+ */
+ public static PrintStream getLog()
+ {
+ throw new Error("Not implemented");
+ }
}
diff --git a/libjava/classpath/java/rmi/server/UID.java b/libjava/classpath/java/rmi/server/UID.java
index 0f492ba..3596304 100644
--- a/libjava/classpath/java/rmi/server/UID.java
+++ b/libjava/classpath/java/rmi/server/UID.java
@@ -1,5 +1,5 @@
-/* UID.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc.
+/* UID.java -- The unique object Id
+ Copyright (c) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,86 +42,186 @@ import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
-
-public final class UID implements Serializable
-{
-private static final long serialVersionUID = 1086053664494604050L;
-
-private static final Object lock = UID.class;
-private static long baseTime = System.currentTimeMillis();
-private static short nextCount = Short.MIN_VALUE;
-// This is sun's algorithm - don't ask me why ...
-private static final int uniqueNr = (new Object()).hashCode();
-
-private int unique;
-private long time;
-private short count;
+import java.net.InetAddress;
/**
- * This is sun's algorithm - don't ask me why ...
+ * Represents the unique identifier over time for the host which has generated
+ * it. It contains time (when created), counter (the number of the UID
+ * creation order) and virtual machine id components. The UID can also be
+ * constructed specifying a "well known" identifier in the for of short:
+ * this identifier defines the UID uniqueness alone.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
*/
-public UID() {
- synchronized (lock) {
- if (nextCount == Short.MAX_VALUE) {
- long newtime;
- for (;;) {
- newtime = System.currentTimeMillis();
- if (newtime - baseTime > 1000) {
- break;
- }
- try {
- Thread.sleep(1000);
- }
- catch (InterruptedException _) {
- }
- }
- baseTime = newtime;
- nextCount = Short.MIN_VALUE;
- }
- count = nextCount++;
- unique = uniqueNr;
- time = baseTime;
- }
-}
-
-public UID(short num) {
- unique = (int)num;
- time = 0;
- count = 0;
-}
-
-public int hashCode() {
- return (unique);
-}
-
-public boolean equals(Object obj) {
- if (obj instanceof UID) {
- UID uid = (UID)obj;
- if (this.unique == uid.unique &&
- this.time == uid.time &&
- this.count == uid.count) {
- return (true);
- }
- }
- return (false);
-}
-
-public String toString() {
- return ("[UID: " + unique + "," + time + "," + count + "]");
-}
-
-public void write(DataOutput out) throws IOException {
- out.writeInt(unique);
- out.writeLong(time);
- out.writeShort(count);
-}
-
-public static UID read(DataInput in) throws IOException {
- UID id = new UID();
- id.unique = in.readInt();
- id.time = in.readLong();
- id.count = in.readShort();
- return (id);
-}
-
+public final class UID
+ implements Serializable
+{
+ /**
+ * Use the serial version uid for interoperability.
+ */
+ private static final long serialVersionUID = 1086053664494604050L;
+
+ /**
+ * The UID counter (the ordinary number in the sequence of number of UID's,
+ * created during the recent millisecond). In the next millisecond, it
+ * starts from the minimal value again. In the unlikely case of creating
+ * more than 65536 uids per millisecond the process pauses till the next
+ * ms.
+ */
+ private static short uidCounter = Short.MIN_VALUE;
+
+ /**
+ * The time, when the last UID has been created.
+ */
+ private static long last;
+
+ /**
+ * This constant tries to be the unique identifier of the virtual machine.
+ */
+ private static final int machineId = getMachineId();
+
+ /**
+ * The UID number in the UID creation sequence.
+ */
+ private short count;
+
+ /**
+ * Always gets the uniqueNr value.
+ */
+ private int unique;
+
+ /**
+ * The time stamp, when the UID was created.
+ */
+ private long time;
+
+ /**
+ * Create the new UID that would have the described features of the
+ * uniqueness.
+ */
+ public UID()
+ {
+ time = System.currentTimeMillis();
+ unique = machineId;
+ if (time > last)
+ {
+ last = time;
+ count = uidCounter = Short.MIN_VALUE;
+ }
+ else
+ {
+ synchronized (UID.class)
+ {
+ if (uidCounter == Short.MAX_VALUE)
+ {
+ // Make a 2 ms pause if the counter has reached the maximal
+ // value. This should seldom happen.
+ try
+ {
+ Thread.sleep(2);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ uidCounter = Short.MIN_VALUE;
+ time = last = System.currentTimeMillis();
+ }
+
+ count = uidCounter++;
+ }
+ }
+ }
+
+ /**
+ * Create the new UID with the well known id (number). All UIDs, creates
+ * with the this constructor having the same parameter are equal to each
+ * other (regardless to the host and time where they were created.
+ *
+ * @param wellKnownId the well known UID.
+ */
+ public UID(short wellKnownId)
+ {
+ unique = wellKnownId;
+ }
+
+ /**
+ * Get the hashCode of this UID.
+ */
+ public int hashCode()
+ {
+ return (int) (unique ^ time ^ count);
+ }
+
+ /**
+ * Compare this UID with another UID for equality (not equal to other types of
+ * objects).
+ */
+ public boolean equals(Object other)
+ {
+ if (other instanceof UID)
+ {
+ UID ui = (UID) other;
+ return unique == ui.unique && time == ui.time && count == ui.count;
+ }
+ else
+ return false;
+ }
+
+ public static UID read(DataInput in) throws IOException
+ {
+ UID uid = new UID();
+ uid.unique = in.readInt();
+ uid.time = in.readLong();
+ uid.count = in.readShort();
+ return (uid);
+ }
+
+ public void write(DataOutput out) throws IOException
+ {
+ out.writeInt(unique);
+ out.writeLong(time);
+ out.writeShort(count);
+ }
+
+ /**
+ * Do our best to get the Id of this virtual machine.
+ */
+ static int getMachineId()
+ {
+ int hostIpHash;
+
+ try
+ {
+ // Try to get the host IP.
+ String host = InetAddress.getLocalHost().toString();
+ // This hash is content - based, not the address based.
+ hostIpHash = host.hashCode();
+ }
+ catch (Exception e)
+ {
+ // Failed due some reason.
+ hostIpHash = 0;
+ }
+
+ // Should be the unque address if hashcodes are addresses.
+ // Additionally, add the time when the RMI system was probably started
+ // (this class was first instantiated).
+ return new Object().hashCode() ^ (int) System.currentTimeMillis()
+ ^ hostIpHash;
+ }
+
+ /**
+ * Get the string representation of this UID.
+ *
+ * @return a string, uniquely identifying this id.
+ */
+ public String toString()
+ {
+ int max = Character.MAX_RADIX;
+ // Translate into object count, counting from 0.
+ long lc = (count + Short.MIN_VALUE) & 0xFFFF;
+ return Long.toString(time, max) + ":"
+ + Long.toString(unique, max) + ":"
+ + Long.toString(lc, max);
+ }
}
diff --git a/libjava/classpath/java/security/BasicPermission.java b/libjava/classpath/java/security/BasicPermission.java
index 267a6e2..ef2cc4d 100644
--- a/libjava/classpath/java/security/BasicPermission.java
+++ b/libjava/classpath/java/security/BasicPermission.java
@@ -1,5 +1,6 @@
/* BasicPermission.java -- implements a simple named permission
- Copyright (C) 1998, 1999, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -97,7 +98,7 @@ public abstract class BasicPermission extends java.security.Permission
// requirement exists in the specification and Sun's runtime
// doesn't appear to do it.
- if ("".equals(name))
+ if (name.equals(""))
throw new IllegalArgumentException("Empty name");
}
diff --git a/libjava/classpath/java/security/KeyStore.java b/libjava/classpath/java/security/KeyStore.java
index 6964487..8681d82 100644
--- a/libjava/classpath/java/security/KeyStore.java
+++ b/libjava/classpath/java/security/KeyStore.java
@@ -212,7 +212,7 @@ public class KeyStore
/**
* Returns the default KeyStore type. This method looks up the
* type in &lt;JAVA_HOME&gt;/lib/security/java.security with the
- * property "keystore.type" or if that fails then "jks" .
+ * property "keystore.type" or if that fails then "gkr" .
*/
public static final String getDefaultType()
{
@@ -221,7 +221,7 @@ public class KeyStore
String tmp = Security.getProperty("keystore.type");
if (tmp == null)
- tmp = "jks";
+ tmp = "gkr";
return tmp;
}
diff --git a/libjava/classpath/java/security/SecureRandom.java b/libjava/classpath/java/security/SecureRandom.java
index 0d89225..d403d49 100644
--- a/libjava/classpath/java/security/SecureRandom.java
+++ b/libjava/classpath/java/security/SecureRandom.java
@@ -1,5 +1,6 @@
/* SecureRandom.java --- Secure Random class implementation
- Copyright (C) 1999, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2001, 2002, 2003, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,11 +38,19 @@ exception statement from your version. */
package java.security;
+import gnu.classpath.SystemProperties;
import gnu.java.security.Engine;
+import gnu.java.security.action.GetSecurityPropertyAction;
import gnu.java.security.jce.prng.Sha160RandomSpi;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Enumeration;
import java.util.Random;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* An interface to a cryptographically secure pseudo-random number
@@ -71,6 +80,9 @@ public class SecureRandom extends Random
int randomBytesUsed = 0;
SecureRandomSpi secureRandomSpi = null;
byte[] state = null;
+ private String algorithm;
+
+ private boolean isSeeded = false;
// Constructors.
// ------------------------------------------------------------------------
@@ -111,6 +123,7 @@ public class SecureRandom extends Random
secureRandomSpi = (SecureRandomSpi) Class.
forName(classname).newInstance();
provider = p[i];
+ algorithm = key.substring(13); // Minus SecureRandom.
return;
}
catch (ThreadDeath death)
@@ -128,6 +141,7 @@ public class SecureRandom extends Random
// Nothing found. Fall back to SHA1PRNG
secureRandomSpi = new Sha160RandomSpi();
+ algorithm = "Sha160";
}
/**
@@ -159,8 +173,18 @@ public class SecureRandom extends Random
*/
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
{
+ this(secureRandomSpi, provider, "unknown");
+ }
+
+ /**
+ * Private constructor called from the getInstance() method.
+ */
+ private SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider,
+ String algorithm)
+ {
this.secureRandomSpi = secureRandomSpi;
this.provider = provider;
+ this.algorithm = algorithm;
}
// Class methods.
@@ -243,7 +267,7 @@ public class SecureRandom extends Random
{
return new SecureRandom((SecureRandomSpi)
Engine.getInstance(SECURE_RANDOM, algorithm, provider),
- provider);
+ provider, algorithm);
}
catch (java.lang.reflect.InvocationTargetException ite)
{
@@ -269,6 +293,18 @@ public class SecureRandom extends Random
}
/**
+ * Returns the algorithm name used or "unknown" when the algorithm
+ * used couldn't be determined (as when constructed by the protected
+ * 2 argument constructor).
+ *
+ * @since 1.5
+ */
+ public String getAlgorithm()
+ {
+ return algorithm;
+ }
+
+ /**
Seeds the SecureRandom. The class is re-seeded for each call and
each seed builds on the previous seed so as not to weaken security.
@@ -277,6 +313,7 @@ public class SecureRandom extends Random
public void setSeed(byte[] seed)
{
secureRandomSpi.engineSetSeed(seed);
+ isSeeded = true;
}
/**
@@ -304,6 +341,7 @@ public class SecureRandom extends Random
(byte) (0xff & seed)
};
secureRandomSpi.engineSetSeed(tmp);
+ isSeeded = true;
}
}
@@ -315,6 +353,8 @@ public class SecureRandom extends Random
*/
public void nextBytes(byte[] bytes)
{
+ if (!isSeeded)
+ setSeed(getSeed(32));
randomBytesUsed += bytes.length;
counter++;
secureRandomSpi.engineNextBytes(bytes);
@@ -360,10 +400,8 @@ public class SecureRandom extends Random
public static byte[] getSeed(int numBytes)
{
byte[] tmp = new byte[numBytes];
-
- new Random().nextBytes(tmp);
+ generateSeed(tmp);
return tmp;
- //return secureRandomSpi.engineGenerateSeed( numBytes );
}
/**
@@ -378,4 +416,64 @@ public class SecureRandom extends Random
return secureRandomSpi.engineGenerateSeed(numBytes);
}
+ // Seed methods.
+
+ private static final String SECURERANDOM_SOURCE = "securerandom.source";
+ private static final String JAVA_SECURITY_EGD = "java.security.egd";
+ private static final Logger logger = Logger.getLogger(SecureRandom.class.getName());
+
+ private static int generateSeed(byte[] buffer)
+ {
+ return generateSeed(buffer, 0, buffer.length);
+ }
+
+ private static int generateSeed(byte[] buffer, int offset, int length)
+ {
+ URL sourceUrl = null;
+ String urlStr = null;
+
+ GetSecurityPropertyAction action = new GetSecurityPropertyAction(SECURERANDOM_SOURCE);
+ try
+ {
+ urlStr = (String) AccessController.doPrivileged(action);
+ if (urlStr != null)
+ sourceUrl = new URL(urlStr);
+ }
+ catch (MalformedURLException ignored)
+ {
+ logger.log(Level.WARNING, SECURERANDOM_SOURCE + " property is malformed: {0}",
+ urlStr);
+ }
+
+ if (sourceUrl == null)
+ {
+ try
+ {
+ urlStr = SystemProperties.getProperty(JAVA_SECURITY_EGD);
+ if (urlStr != null)
+ sourceUrl = new URL(urlStr);
+ }
+ catch (MalformedURLException mue)
+ {
+ logger.log(Level.WARNING, JAVA_SECURITY_EGD + " property is malformed: {0}",
+ urlStr);
+ }
+ }
+
+ if (sourceUrl != null)
+ {
+ try
+ {
+ InputStream in = sourceUrl.openStream();
+ return in.read(buffer, offset, length);
+ }
+ catch (IOException ioe)
+ {
+ logger.log(Level.FINE, "error reading random bytes", ioe);
+ }
+ }
+
+ // If we get here, we did not get any seed from a property URL.
+ return VMSecureRandom.generateSeed(buffer, offset, length);
+ }
}
diff --git a/libjava/classpath/java/security/Security.java b/libjava/classpath/java/security/Security.java
index 4e31dab..d99c451 100644
--- a/libjava/classpath/java/security/Security.java
+++ b/libjava/classpath/java/security/Security.java
@@ -101,7 +101,12 @@ public final class Security
System.err.println
(" Falling back to standard GNU security provider");
}
+ // Note that this matches our classpath.security file.
providers.addElement (new gnu.java.security.provider.Gnu());
+ providers.addElement(new gnu.javax.crypto.jce.GnuCrypto());
+ providers.addElement(new gnu.javax.crypto.jce.GnuSasl());
+ providers.addElement(new gnu.javax.net.ssl.provider.Jessie());
+ providers.addElement(new gnu.javax.security.auth.callback.GnuCallbacks());
}
}
// This class can't be instantiated.
diff --git a/libjava/classpath/java/security/cert/CertPathValidatorSpi.java b/libjava/classpath/java/security/cert/CertPathValidatorSpi.java
index 8d18b49..282b7a6 100644
--- a/libjava/classpath/java/security/cert/CertPathValidatorSpi.java
+++ b/libjava/classpath/java/security/cert/CertPathValidatorSpi.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.security.cert;
+import java.security.InvalidAlgorithmParameterException;
+
/**
* The <i>service provider interface</i> (<b>SPI</b>) for the {@link
* CertPathValidator} class. Providers implementing certificate path
@@ -75,5 +77,5 @@ public abstract class CertPathValidatorSpi
public abstract CertPathValidatorResult
engineValidate(CertPath certPath, CertPathParameters params)
throws CertPathValidatorException,
- java.security.InvalidAlgorithmParameterException;
+ InvalidAlgorithmParameterException;
}
diff --git a/libjava/classpath/java/security/cert/CertStoreSpi.java b/libjava/classpath/java/security/cert/CertStoreSpi.java
index eca0e86..a69545f 100644
--- a/libjava/classpath/java/security/cert/CertStoreSpi.java
+++ b/libjava/classpath/java/security/cert/CertStoreSpi.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package java.security.cert;
+import java.security.InvalidAlgorithmParameterException;
import java.util.Collection;
/**
@@ -69,7 +70,7 @@ public abstract class CertStoreSpi
* parameters are inappropriate for this class.
*/
public CertStoreSpi(CertStoreParameters params)
- throws java.security.InvalidAlgorithmParameterException
+ throws InvalidAlgorithmParameterException
{
super();
}
diff --git a/libjava/classpath/java/security/cert/Certificate.java b/libjava/classpath/java/security/cert/Certificate.java
index f8456f9..33a14a4 100644
--- a/libjava/classpath/java/security/cert/Certificate.java
+++ b/libjava/classpath/java/security/cert/Certificate.java
@@ -73,7 +73,7 @@ import java.security.SignatureException;
*/
public abstract class Certificate implements Serializable
{
- private static final long serialVersionUID = -6751606818319535583L;
+ private static final long serialVersionUID = -3585440601605666277L;
private String type;
diff --git a/libjava/classpath/java/security/cert/PKIXCertPathChecker.java b/libjava/classpath/java/security/cert/PKIXCertPathChecker.java
index 7a33576..a6eef41 100644
--- a/libjava/classpath/java/security/cert/PKIXCertPathChecker.java
+++ b/libjava/classpath/java/security/cert/PKIXCertPathChecker.java
@@ -46,7 +46,7 @@ import java.util.Set;
*
* <p>Concrete subclasses can be passed to the {@link
* PKIXParameters#setCertPathCheckers(java.util.List)} and {@link
- * PKIXParameters#addCertPathChecker(java.security.cert.PKIXCertPathChecker}
+ * PKIXParameters#addCertPathChecker(java.security.cert.PKIXCertPathChecker)}
* methods, which are then used to set up PKIX certificate chain
* builders or validators. These classes then call the {@link
* #check(java.security.cert.Certificate,java.util.Collection)} method
diff --git a/libjava/classpath/java/security/cert/PKIXParameters.java b/libjava/classpath/java/security/cert/PKIXParameters.java
index 4a98711..16ef07f 100644
--- a/libjava/classpath/java/security/cert/PKIXParameters.java
+++ b/libjava/classpath/java/security/cert/PKIXParameters.java
@@ -55,7 +55,7 @@ import java.util.Set;
* Parameters for verifying certificate paths using the PKIX
* (Public-Key Infrastructure (X.509)) algorithm.
*
- * @see CertPathBulider
+ * @see CertPathBuilder
*/
public class PKIXParameters implements CertPathParameters
{
diff --git a/libjava/classpath/java/security/cert/X509CertSelector.java b/libjava/classpath/java/security/cert/X509CertSelector.java
index e3b8c0e..a46d228 100644
--- a/libjava/classpath/java/security/cert/X509CertSelector.java
+++ b/libjava/classpath/java/security/cert/X509CertSelector.java
@@ -367,7 +367,7 @@ public class X509CertSelector implements CertSelector, Cloneable
* Sets the authority key identifier criterion, or <code>null</code> to clear
* this criterion. Note that the byte array is cloned to prevent modification.
*
- * @param subjectKeyId The subject key identifier.
+ * @param authKeyId The authority key identifier.
*/
public void setAuthorityKeyIdentifier(byte[] authKeyId)
{
diff --git a/libjava/classpath/java/sql/Array.java b/libjava/classpath/java/sql/Array.java
index 5162875..c3c42d9 100644
--- a/libjava/classpath/java/sql/Array.java
+++ b/libjava/classpath/java/sql/Array.java
@@ -1,5 +1,5 @@
/* Array.java -- Interface for accessing SQL array object
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ public interface Array
* Returns the name of the SQL type of the elements in this
* array. This name is database specific.
*
- * @param The name of the SQL type of the elements in this array.
+ * @return The name of the SQL type of the elements in this array.
* @exception SQLException If an error occurs.
*/
String getBaseTypeName() throws SQLException;
@@ -87,22 +87,22 @@ public interface Array
Object getArray(Map map) throws SQLException;
/**
- * Returns a portion of this array starting at <code>index</code>
+ * Returns a portion of this array starting at <code>start</code>
* into the array and continuing for <code>count</code>
* elements. Fewer than the requested number of elements will be
* returned if the array does not contain the requested number of elements.
* The object returned will be an array of Java objects of
* the appropriate types.
*
- * @param offset The offset into this array to start returning elements from.
+ * @param start The index into this array to start returning elements from.
* @param count The requested number of elements to return.
* @return The requested portion of the array.
* @exception SQLException If an error occurs.
*/
- Object getArray(long index, int count) throws SQLException;
+ Object getArray(long start, int count) throws SQLException;
/**
- * This method returns a portion of this array starting at <code>index</code>
+ * This method returns a portion of this array starting at <code>start</code>
* into the array and continuing for <code>count</code>
* elements. Fewer than the requested number of elements will be
* returned if the array does not contain the requested number of elements.
@@ -110,13 +110,13 @@ public interface Array
* <code>Map</code> will be used for overriding selected SQL type to
* Java class mappings.
*
- * @param offset The offset into this array to start returning elements from.
+ * @param start The index into this array to start returning elements from.
* @param count The requested number of elements to return.
* @param map A mapping of SQL types to Java classes.
* @return The requested portion of the array.
* @exception SQLException If an error occurs.
*/
- Object getArray(long index, int count, Map map) throws SQLException;
+ Object getArray(long start, int count, Map map) throws SQLException;
/**
* Returns the elements in the array as a <code>ResultSet</code>.
@@ -147,24 +147,24 @@ public interface Array
/**
* This method returns a portion of the array as a <code>ResultSet</code>.
- * The returned portion will start at <code>index</code> into the
+ * The returned portion will start at <code>start</code> into the
* array and up to <code>count</code> elements will be returned.
* <p>
* Each row of the result set will have two columns. The first will be
* the index into the array of that row's contents. The second will be
* the actual value of that array element.
*
- * @param offset The index into the array to start returning elements from.
- * @param length The requested number of elements to return.
+ * @param start The index into the array to start returning elements from.
+ * @param count The requested number of elements to return.
* @return The requested elements of this array as a <code>ResultSet</code>.
* @exception SQLException If an error occurs.
* @see ResultSet
*/
- ResultSet getResultSet(long index, int count) throws SQLException;
+ ResultSet getResultSet(long start, int count) throws SQLException;
/**
* This method returns a portion of the array as a <code>ResultSet</code>.
- * The returned portion will start at <code>index</code> into the
+ * The returned portion will start at <code>start</code> into the
* array and up to <code>count</code> elements will be returned.
*
* <p> Each row of the result set will have two columns. The first will be
@@ -173,13 +173,13 @@ public interface Array
* will be used to override selected default mappings of SQL types to
* Java classes.</p>
*
- * @param offset The index into the array to start returning elements from.
- * @param length The requested number of elements to return.
+ * @param start The index into the array to start returning elements from.
+ * @param count The requested number of elements to return.
* @param map A mapping of SQL types to Java classes.
* @return The requested elements of this array as a <code>ResultSet</code>.
* @exception SQLException If an error occurs.
* @see ResultSet
*/
- ResultSet getResultSet(long index, int count, Map map)
+ ResultSet getResultSet(long start, int count, Map map)
throws SQLException;
}
diff --git a/libjava/classpath/java/sql/Blob.java b/libjava/classpath/java/sql/Blob.java
index 616839d..c662aad 100644
--- a/libjava/classpath/java/sql/Blob.java
+++ b/libjava/classpath/java/sql/Blob.java
@@ -1,5 +1,5 @@
/* Blob.java -- Access a SQL Binary Large OBject.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,48 +41,51 @@ import java.io.InputStream;
import java.io.OutputStream;
/**
- * This interface specified methods for accessing a SQL BLOB (Binary
- * Large OBject) type.
- *
+ * This interface specified methods for accessing a SQL BLOB (Binary Large
+ * OBject) type.
+ *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @since 1.2
*/
-public interface Blob
+public interface Blob
{
/**
- * This method returns the number of bytes in the BLOB.
- *
- * @return The number of bytes in the BLOB.
+ * This method returns the number of bytes in this <code>Blob</code>.
+ *
+ * @return The number of bytes in this <code>Blob</code>.
* @exception SQLException If an error occurs.
*/
long length() throws SQLException;
/**
- * This method returns up to the requested bytes of this BLOB as a
- * <code>byte</code> array.
- *
- * @param pos The index into the BLOB to start returning bytes from.
- * @param length The requested number of bytes to return.
- * @return The requested bytes from the BLOB.
+ * This method returns up to the requested bytes of this <code>Blob</code>
+ * as a <code>byte</code> array.
+ *
+ * @param start The index into this <code>Blob</code> to start returning
+ * bytes from.
+ * @param count The requested number of bytes to return.
+ * @return The requested bytes from this <code>Blob</code>.
* @exception SQLException If an error occurs.
*/
- byte[] getBytes(long pos, int length) throws SQLException;
+ byte[] getBytes(long start, int count) throws SQLException;
/**
- * This method returns a stream that will read the bytes of the BLOB.
- *
- * @return A stream that will read the bytes of the BLOB.
+ * This method returns a stream that will read the bytes of this
+ * <code>Blob</code>.
+ *
+ * @return A stream that will read the bytes of this <code>Blob</code>.
* @exception SQLException If an error occurs.
*/
InputStream getBinaryStream() throws SQLException;
/**
- * This method returns the index into the BLOB at which the first instance
- * of the specified bytes occur. The searching starts at the specified
- * index into the BLOB.
- *
+ * This method returns the index into this <code>Blob</code> at which the
+ * first instance of the specified bytes occur. The searching starts at the
+ * specified index into this <code>Blob</code>.
+ *
* @param pattern The byte pattern to search for.
- * @param offset The index into the BLOB to starting searching for the pattern.
+ * @param start The index into this <code>Blob</code> to start searching for
+ * the pattern.
* @return The offset at which the pattern is first found, or -1 if the
* pattern is not found.
* @exception SQLException If an error occurs.
@@ -90,14 +93,15 @@ public interface Blob
long position(byte[] pattern, long start) throws SQLException;
/**
- * This method returns the index into the BLOB at which the first instance
- * of the specified pattern occurs. The searching starts at the specified
- * index into this BLOB. The bytes in the specified <code>Blob</code> are
- * used as the search pattern.
- *
+ * This method returns the index into this <code>Blob</code> at which the
+ * first instance of the specified pattern occurs. The searching starts at the
+ * specified index into this <code>Blob</code>. The bytes in the specified
+ * <code>Blob</code> are used as the search pattern.
+ *
* @param pattern The <code>Blob</code> containing the byte pattern to
- * search for.
- * @param offset The index into the BLOB to starting searching for the pattern.
+ * search for.
+ * @param start The index into this <code>Blob</code> to start searching for
+ * the pattern.
* @return The offset at which the pattern is first found, or -1 if the
* pattern is not found.
* @exception SQLException If an error occurs.
@@ -105,27 +109,49 @@ public interface Blob
long position(Blob pattern, long start) throws SQLException;
/**
+ * Writes the specified data into this <code>Blob</code>, starting at the
+ * specified index.
+ *
+ * @param start The index at which the writing starts.
+ * @param bytes The data to write.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- int setBytes(long pos, byte[] bytes) throws SQLException;
+ int setBytes(long start, byte[] bytes) throws SQLException;
/**
+ * Writes a portion of the specified data into this <code>Blob</code>,
+ * starting at the specified index.
+ *
+ * @param startWrite The index into this <code>Blob</code> at which writing
+ * starts.
+ * @param bytes The data to write a portion of.
+ * @param startRead The offset into the data where the portion to copy starts.
+ * @param count The number of bytes to write.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- int setBytes(long pos, byte[] bytes, int offset, int len)
- throws SQLException;
+ int setBytes(long startWrite, byte[] bytes, int startRead, int count)
+ throws SQLException;
/**
+ * Returns a binary stream that writes into this <code>Blob</code>,
+ * starting at the specified index.
+ *
+ * @param start The index at which the writing starts.
+ * @return A binary stream to write into this <code>Blob</code>.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- OutputStream setBinaryStream(long pos) throws SQLException;
+ OutputStream setBinaryStream(long start) throws SQLException;
/**
+ * Truncates this <code>Blob</code> to be at most the specified number of
+ * bytes long.
+ *
+ * @param count The length this <code>Blob</code> is truncated to.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- void truncate(long len) throws SQLException;
+ void truncate(long count) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/CallableStatement.java b/libjava/classpath/java/sql/CallableStatement.java
index 4522941..75eade7 100644
--- a/libjava/classpath/java/sql/CallableStatement.java
+++ b/libjava/classpath/java/sql/CallableStatement.java
@@ -1,5 +1,5 @@
/* CallableStatement.java -- A statement for calling stored procedures.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,10 +56,10 @@ public interface CallableStatement extends PreparedStatement
* of the specified SQL type.
*
* @param index The index of the parameter to register as output.
- * @param type The SQL type value from <code>Types</code>.
+ * @param sqlType The SQL type value from <code>Types</code>.
* @exception SQLException If an error occurs.
*/
- void registerOutParameter(int parameterIndex, int sqlType)
+ void registerOutParameter(int index, int sqlType)
throws SQLException;
/**
@@ -67,11 +67,11 @@ public interface CallableStatement extends PreparedStatement
* of the specified SQL type and scale.
*
* @param index The index of the parameter to register as output.
- * @param type The SQL type value from <code>Types</code>.
+ * @param sqlType The SQL type value from <code>Types</code>.
* @param scale The scale of the value that will be returned.
* @exception SQLException If an error occurs.
*/
- void registerOutParameter(int parameterIndex, int sqlType, int scale)
+ void registerOutParameter(int index, int sqlType, int scale)
throws SQLException;
/**
@@ -92,7 +92,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>String</code>.
* @exception SQLException If an error occurs.
*/
- String getString(int parameterIndex) throws SQLException;
+ String getString(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -102,7 +102,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>boolean</code>.
* @exception SQLException If an error occurs.
*/
- boolean getBoolean(int parameterIndex) throws SQLException;
+ boolean getBoolean(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -112,7 +112,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>byte</code>.
* @exception SQLException If an error occurs.
*/
- byte getByte(int parameterIndex) throws SQLException;
+ byte getByte(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -122,7 +122,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>short</code>.
* @exception SQLException If an error occurs.
*/
- short getShort(int parameterIndex) throws SQLException;
+ short getShort(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -132,7 +132,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>int</code>.
* @exception SQLException If an error occurs.
*/
- int getInt(int parameterIndex) throws SQLException;
+ int getInt(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -142,7 +142,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>long</code>.
* @exception SQLException If an error occurs.
*/
- long getLong(int parameterIndex) throws SQLException;
+ long getLong(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -152,7 +152,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>float</code>.
* @exception SQLException If an error occurs.
*/
- float getFloat(int parameterIndex) throws SQLException;
+ float getFloat(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -162,31 +162,31 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>double</code>.
* @exception SQLException If an error occurs.
*/
- double getDouble(int parameterIndex) throws SQLException;
+ double getDouble(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
* <code>BigDecimal</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @param scale The number of digits to the right of the decimal to return.
* @return The parameter value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
- * @deprecated Use getBigDecimal(int parameterIndex)
- * or getBigDecimal(String parameterName) instead.
+ * @deprecated Use getBigDecimal(int index)
+ * or getBigDecimal(String name) instead.
*/
- BigDecimal getBigDecimal(int parameterIndex, int scale)
+ BigDecimal getBigDecimal(int index, int scale)
throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
* byte array.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @return The parameter value as a byte array
* @exception SQLException If an error occurs.
*/
- byte[] getBytes(int parameterIndex) throws SQLException;
+ byte[] getBytes(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -196,7 +196,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
*/
- Date getDate(int parameterIndex) throws SQLException;
+ Date getDate(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -206,7 +206,7 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
*/
- Time getTime(int parameterIndex) throws SQLException;
+ Time getTime(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -216,29 +216,29 @@ public interface CallableStatement extends PreparedStatement
* @return The parameter value as a <code>java.sql.Timestamp</code>.
* @exception SQLException If an error occurs.
*/
- Timestamp getTimestamp(int parameterIndex) throws SQLException;
+ Timestamp getTimestamp(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
* <code>Object</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @return The parameter value as an <code>Object</code>.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- Object getObject(int parameterIndex) throws SQLException;
+ Object getObject(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
* <code>BigDecimal</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @return The parameter value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- BigDecimal getBigDecimal(int parameterIndex) throws SQLException;
+ BigDecimal getBigDecimal(int index) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -289,7 +289,7 @@ public interface CallableStatement extends PreparedStatement
* This method returns the value of the specified parameter as a Java
* <code>Array</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @return The parameter value as a <code>Array</code>.
* @exception SQLException If an error occurs.
* @since 1.2
@@ -300,25 +300,25 @@ public interface CallableStatement extends PreparedStatement
* This method returns the value of the specified parameter as a Java
* <code>java.sql.Date</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @param cal The <code>Calendar</code> to use for timezone and locale.
* @return The parameter value as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- Date getDate(int parameterIndex, Calendar cal) throws SQLException;
+ Date getDate(int index, Calendar cal) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
* <code>java.sql.Time</code>.
*
- * @param parameterIndex The index of the parameter to return.
+ * @param index The index of the parameter to return.
* @param cal The <code>Calendar</code> to use for timezone and locale.
* @return The parameter value as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- Time getTime(int parameterIndex, Calendar cal) throws SQLException;
+ Time getTime(int index, Calendar cal) throws SQLException;
/**
* This method returns the value of the specified parameter as a Java
@@ -329,7 +329,7 @@ public interface CallableStatement extends PreparedStatement
* @exception SQLException If an error occurs.
* @since 1.2
*/
- Timestamp getTimestamp(int parameterIndex, Calendar cal)
+ Timestamp getTimestamp(int index, Calendar cal)
throws SQLException;
/**
@@ -337,25 +337,24 @@ public interface CallableStatement extends PreparedStatement
* of the specified SQL type.
*
* @param index The index of the parameter to register as output.
- * @param type The SQL type value from <code>Types</code>.
- * @param name The user defined data type name.
+ * @param sqlType The SQL type value from <code>Types</code>.
+ * @param typeName The user defined data type name.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- void registerOutParameter(int paramIndex, int sqlType,
- String typeName)
+ void registerOutParameter(int index, int sqlType, String typeName)
throws SQLException;
/**
* This method registers the specified parameter as an output parameter
* of the specified SQL type.
*
- * @param parameterName The name of the parameter to register as output.
+ * @param name The name of the parameter to register as output.
* @param sqlType The SQL type value from <code>Types</code>.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- void registerOutParameter(String parameterName, int sqlType)
+ void registerOutParameter(String name, int sqlType)
throws SQLException;
/**
@@ -363,14 +362,13 @@ public interface CallableStatement extends PreparedStatement
* of the specified SQL type. This version of registerOutParameter is used
* for NUMERIC or DECIMAL types.
*
- * @param parameterName The name of the parameter to register as output.
+ * @param name The name of the parameter to register as output.
* @param sqlType The SQL type value from <code>Types</code>.
* @param scale Number of digits to the right of the decimal point.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- void registerOutParameter(String parameterName, int sqlType,
- int scale)
+ void registerOutParameter(String name, int sqlType, int scale)
throws SQLException;
@@ -380,272 +378,584 @@ public interface CallableStatement extends PreparedStatement
* for user-named or REF types. If the type of the output parameter does
* not have such a type, the typeName argument is ignored.
*
- * @param parameterName The name of the parameter to register as output.
+ * @param name The name of the parameter to register as output.
* @param sqlType The SQL type value from <code>Types</code>.
* @param typeName The SQL structured type name.
* @exception SQLException If an error occurs.
* @since 1.4
*/
- void registerOutParameter(String parameterName, int sqlType,
- String typeName)
+ void registerOutParameter(String name, int sqlType, String typeName)
throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.net.URL</code>.
+ *
+ * @param index The index of the parameter to return.
+ * @return The parameter value as a <code>URL</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- URL getURL(int parameterIndex) throws SQLException;
+ URL getURL(int index) throws SQLException;
/**
+ * This method sets the value of the specified parameter to the specified
+ * <code>java.net.URL</code>
+ *
+ * @param name The name of the parameter to set.
+ * @param value The value the parameter.
* @since 1.4
*/
- void setURL(String parameterName, URL val) throws SQLException;
+ void setURL(String name, URL value) throws SQLException;
/**
+ * This method populates the specified parameter with a SQL NULL value
+ * for the specified type.
+ *
+ * @param name The name of the parameter to set.
+ * @param sqlType The SQL type identifier of the parameter from
+ * <code>Types</code>
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setNull(String parameterName, int sqlType) throws SQLException;
+ void setNull(String name, int sqlType) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>boolean</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setBoolean(String parameterName, boolean x) throws SQLException;
+ void setBoolean(String name, boolean value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>byte</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setByte(String parameterName, byte x) throws SQLException;
+ void setByte(String name, byte value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>short</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setShort(String parameterName, short x) throws SQLException;
+ void setShort(String name, short value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>int</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setInt(String parameterName, int x) throws SQLException;
+ void setInt(String name, int value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>long</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setLong(String parameterName, long x) throws SQLException;
+ void setLong(String name, long value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>float</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setFloat(String parameterName, float x) throws SQLException;
+ void setFloat(String name, float value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>double</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setDouble(String parameterName, double x) throws SQLException;
+ void setDouble(String name, double value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>BigDecimal</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setBigDecimal(String parameterName, BigDecimal x)
+ void setBigDecimal(String name, BigDecimal value)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>String</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setString(String parameterName, String x) throws SQLException;
+ void setString(String name, String value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>byte</code> array value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setBytes(String parameterName, byte[] x) throws SQLException;
+ void setBytes(String name, byte[] value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Date</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setDate(String parameterName, Date x) throws SQLException;
+ void setDate(String name, Date value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Time</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setTime(String parameterName, Time x) throws SQLException;
+ void setTime(String name, Time value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Timestamp</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setTimestamp(String parameterName, Timestamp x)
+ void setTimestamp(String name, Timestamp value)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * ASCII <code>InputStream</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param stream The stream from which the parameter value is read.
+ * @param count The number of bytes in the stream.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setAsciiStream(String parameterName, InputStream x, int length)
+ void setAsciiStream(String name, InputStream stream, int count)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * binary <code>InputStream</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param stream The stream from which the parameter value is read.
+ * @param count The number of bytes in the stream.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setBinaryStream(String parameterName, InputStream x, int length)
+ void setBinaryStream(String name, InputStream stream, int count)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>Object</code> value. The specified SQL object type will be used.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @param sqlType The SQL type to use for the parameter, from
+ * <code>Types</code>
+ * @param scale The scale of the value, for numeric values only.
+ * @exception SQLException If an error occurs.
+ * @see Types
* @since 1.4
*/
- void setObject(String parameterName, Object x, int targetSqlType,
- int scale)
+ void setObject(String name, Object value, int sqlType, int scale)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>Object</code> value. The specified SQL object type will be used.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @param sqlType The SQL type to use for the parameter, from
+ * <code>Types</code>
+ * @exception SQLException If an error occurs.
+ * @see Types
* @since 1.4
*/
- void setObject(String parameterName, Object x, int targetSqlType)
+ void setObject(String name, Object value, int sqlType)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>Object</code> value. The default object type to SQL type mapping
+ * will be used.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setObject(String parameterName, Object x) throws SQLException;
+ void setObject(String name, Object value) throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * character <code>Reader</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param reader The reader from which the parameter value is read.
+ * @param count The number of characters in the stream.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setCharacterStream(String parameterName, Reader reader,
- int length)
+ void setCharacterStream(String name, Reader reader, int count)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Date</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setDate(String parameterName, Date x, Calendar cal)
+ void setDate(String name, Date value, Calendar cal)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Time</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setTime(String parameterName, Time x, Calendar cal)
+ void setTime(String name, Time value, Calendar cal)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.sql.Timestamp</code> value.
+ *
+ * @param name The name of the parameter value to set.
+ * @param value The value of the parameter.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setTimestamp(String parameterName, Timestamp x, Calendar cal)
+ void setTimestamp(String name, Timestamp value, Calendar cal)
throws SQLException;
/**
+ * This method populates the specified parameter with a SQL NULL value
+ * for the specified type.
+ *
+ * @param name The name of the parameter to set.
+ * @param sqlType The SQL type identifier of the parameter from
+ * <code>Types</code>
+ * @param typeName The name of the data type, for user defined types.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setNull(String parameterName, int sqlType, String typeName)
+ void setNull(String name, int sqlType, String typeName)
throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>String</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>String</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- String getString(String parameterName) throws SQLException;
+ String getString(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>boolean</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>boolean</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- boolean getBoolean(String parameterName) throws SQLException;
+ boolean getBoolean(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>byte</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>byte</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- byte getByte(String parameterName) throws SQLException;
+ byte getByte(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>short</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>short</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- short getShort(String parameterName) throws SQLException;
+ short getShort(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>int</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>int</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- int getInt(String parameterName) throws SQLException;
+ int getInt(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>long</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>long</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- long getLong(String parameterName) throws SQLException;
+ long getLong(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>float</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>float</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- float getFloat(String parameterName) throws SQLException;
+ float getFloat(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>double</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>double</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- double getDouble(String parameterName) throws SQLException;
+ double getDouble(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>byte</code> array.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>byte[]</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- byte[] getBytes(String parameterName) throws SQLException;
+ byte[] getBytes(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Date</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>java.sql.Date</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Date getDate(String parameterName) throws SQLException;
+ Date getDate(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Time</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>java.sql.Time</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Time getTime(String parameterName) throws SQLException;
+ Time getTime(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Timestamp</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>java.sql.Timestamp</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Timestamp getTimestamp(String parameterName) throws SQLException;
+ Timestamp getTimestamp(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Object</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>Object</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Object getObject(String parameterName) throws SQLException;
+ Object getObject(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>BigDecimal</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>BigDecimal</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- BigDecimal getBigDecimal(String parameterName) throws SQLException;
+ BigDecimal getBigDecimal(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Object</code> using the specified mapping for conversion from
+ * SQL to Java types.
+ *
+ * @param name The name of the parameter to return.
+ * @param map The mapping to use for conversion from SQL to Java types.
+ * @return The parameter value as an <code>Object</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Object getObject(String parameterName, Map map) throws SQLException;
+ Object getObject(String name, Map map) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Ref</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>Ref</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Ref getRef(String parameterName) throws SQLException;
+ Ref getRef(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Blob</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>Blob</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Blob getBlob(String parameterName) throws SQLException;
+ Blob getBlob(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Clob</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>Clob</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Clob getClob(String parameterName) throws SQLException;
+ Clob getClob(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>Array</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>Array</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Array getArray(String parameterName) throws SQLException;
+ Array getArray(String name) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Date</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @return The parameter value as a <code>java.sql.Date</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Date getDate(String parameterName, Calendar cal) throws SQLException;
+ Date getDate(String name, Calendar cal) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Time</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @return The parameter value as a <code>java.sql.Time</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Time getTime(String parameterName, Calendar cal) throws SQLException;
+ Time getTime(String name, Calendar cal) throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.sql.Timestamp</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
+ * @return The parameter value as a <code>java.sql.Timestamp</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Timestamp getTimestamp(String parameterName, Calendar cal)
+ Timestamp getTimestamp(String name, Calendar cal)
throws SQLException;
/**
+ * This method returns the value of the specified parameter as a Java
+ * <code>java.net.URL</code>.
+ *
+ * @param name The name of the parameter to return.
+ * @return The parameter value as a <code>java.net.URL</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- URL getURL(String parameterName) throws SQLException;
+ URL getURL(String name) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/Clob.java b/libjava/classpath/java/sql/Clob.java
index 8789da5..53bf639 100644
--- a/libjava/classpath/java/sql/Clob.java
+++ b/libjava/classpath/java/sql/Clob.java
@@ -1,5 +1,5 @@
/* Clob.java -- Access Character Large OBjects
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,6 +35,7 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package java.sql;
import java.io.InputStream;
@@ -43,110 +44,144 @@ import java.io.Reader;
import java.io.Writer;
/**
- * This interface contains methods for accessing a SQL CLOB (Character
- * Large OBject) type.
- *
+ * This interface contains methods for accessing a SQL CLOB (Character Large
+ * OBject) type.
+ *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
-public interface Clob
+public interface Clob
{
- /**
- * This method returns the number of characters in the CLOB.
- *
- * @return The number of characters in the CLOB.
- * @exception SQLException If an error occurs.
- * @since 1.2
- */
+ /**
+ * This method returns the number of characters in this <code>Clob</code>.
+ *
+ * @return The number of characters in this <code>Clob</code>.
+ * @exception SQLException If an error occurs.
+ * @since 1.2
+ */
long length() throws SQLException;
/**
- * This method returns the specified portion of the CLOB as a
- * <code>String</code>.
- *
- * @param offset The index into the CLOB (index values start at 1) to
- * start returning characters from.
- * @param length The requested number of characters to return.
- * @return The requested CLOB section, as a <code>String</code>.
+ * This method returns the specified portion of this <code>Clob</code> as a
+ * <code>String</code>.
+ *
+ * @param start The index into this <code>Clob</code> (index values
+ * start at 1) to start returning characters from.
+ * @param count The requested number of characters to return.
+ * @return The requested <code>Clob</code> section, as a <code>String</code>.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- String getSubString(long pos, int length) throws SQLException;
+ String getSubString(long start, int count) throws SQLException;
/**
- * This method returns a character stream that reads the contents of the
- * CLOB.
- *
- * @return A character stream to read the CLOB's contents.
+ * This method returns a character stream that reads the contents of this
+ * <code>Clob</code>.
+ *
+ * @return A character stream to read this <code>Clob</code>'s contents.
* @exception SQLException If an error occurs.
* @since 1.2
*/
Reader getCharacterStream() throws SQLException;
/**
- * This method returns a byte stream that reads the contents of the
- * CLOB as a series of ASCII bytes.
- *
- * @return A stream to read the CLOB's contents.
+ * This method returns a byte stream that reads the contents of this
+ * <code>Clob</code> as a series of ASCII bytes.
+ *
+ * @return A stream to read this <code>Clob</code>'s contents.
* @exception SQLException If an error occurs.
* @since 1.2
*/
InputStream getAsciiStream() throws SQLException;
/**
- * This method returns the index into the CLOB of the first occurrence of
- * the specified character pattern (supplied by the caller as a
- * <code>String</code>). The search begins at the specified index.
- *
- * @param searchstr The character pattern to search for, passed as a
- * <code>String</code>.
- * @param start. The index into the CLOB to start search (indexes start
- * at 1).
- * @return The index at which the pattern was found (indexes start at 1),
- * or -1 if the pattern was not found.
+ * This method returns the index into this <code>Clob</code> of the first
+ * occurrence of the specified character pattern (supplied by the caller as a
+ * <code>String</code>). The search begins at the specified index.
+ *
+ * @param pattern The character pattern to search for, passed as a
+ * <code>String</code>.
+ * @param start The index into this <code>Clob</code> to start searching
+ * (indices start at 1).
+ * @return The index at which the pattern was found (indices start at 1), or
+ * -1 if the pattern was not found.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- long position(String searchstr, long start) throws SQLException;
+ long position(String pattern, long start) throws SQLException;
/**
- * This method returns the index into the CLOB of the first occurrence of
- * the specified character pattern (supplied by the caller as a
- * <code>Clob</code>). The search begins at the specified index.
- *
- * @param searchstr The character pattern to search for, passed as a
- * <code>Clob</code>.
- * @param start. The index into the CLOB to start search (indexes start
- * at 1).
- * @return The index at which the pattern was found (indexes start at 1),
- * or -1 if the pattern was not found.
+ * This method returns the index into this <code>Clob</code> of the first
+ * occurrence of the specified character pattern (supplied by the caller as a
+ * <code>Clob</code>). The search begins at the specified index.
+ *
+ * @param pattern The character pattern to search for, passed as a
+ * <code>Clob</code>.
+ * @param start The index into this <code>Clob</code> to start searching
+ * (indices start at 1).
+ * @return The index at which the pattern was found (indices start at 1), or
+ * -1 if the pattern was not found.
* @exception SQLException If an error occurs.
* @since 1.2
*/
- long position(Clob searchstr, long start) throws SQLException;
+ long position(Clob pattern, long start) throws SQLException;
/**
+ * Writes the specified string into this <code>Clob</code>, starting at the
+ * specified index.
+ *
+ * @param start The index at which the writing starts.
+ * @param value The string to write.
+ * @return The number of characters written.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- int setString(long pos, String str) throws SQLException;
+ int setString(long start, String value) throws SQLException;
/**
+ * Writes the specified portion of a string into this <code>Clob</code>,
+ * starting at the specified index.
+ *
+ * @param startWrite The index at which the writing starts.
+ * @param value The string to write a portion of.
+ * @param startRead The offset into the string where the portion to copy
+ * starts.
+ * @param count The number of characters to write.
+ * @return The number of characters written.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- int setString(long pos, String str, int offset, int len)
- throws SQLException;
+ int setString(long startWrite, String value, int startRead, int count)
+ throws SQLException;
/**
+ * Returns an ASCII text stream that writes into this <code>Clob</code>,
+ * starting at the specified index.
+ *
+ * @param start The index at which the writing starts.
+ * @return An ASCII text stream to write into this <code>Clob</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- OutputStream setAsciiStream(long pos) throws SQLException;
+ OutputStream setAsciiStream(long start) throws SQLException;
/**
+ * Returns a character stream that writes into this <code>Clob</code>,
+ * starting at the specified index.
+ *
+ * @param start The index at which the writing starts.
+ * @return A character stream to write into this <code>Clob</code>.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- Writer setCharacterStream(long pos) throws SQLException;
+ Writer setCharacterStream(long start) throws SQLException;
/**
+ * Truncates this <code>Clob</code> to be at most the specified number of
+ * characters long.
+ *
+ * @param count The length this <code>Clob</code> is truncated to.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void truncate(long len) throws SQLException;
+ void truncate(long count) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/Connection.java b/libjava/classpath/java/sql/Connection.java
index 48ec12d..d827e75 100644
--- a/libjava/classpath/java/sql/Connection.java
+++ b/libjava/classpath/java/sql/Connection.java
@@ -1,5 +1,5 @@
/* Connection.java -- Manage a database connection.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -61,7 +61,7 @@ public interface Connection
int TRANSACTION_READ_UNCOMMITTED = 1;
/**
- * This transaction isolation leve indicates that only committed data from
+ * This transaction isolation level indicates that only committed data from
* other transactions will be read. If a transaction reads a row, then
* another transaction commits a change to that row, the first transaction
* would retrieve the changed row on subsequent reads of the same row.
@@ -101,8 +101,8 @@ public interface Connection
* SQL string. This method is designed for use with parameterized
* statements. The default result set type and concurrency will be used.
*
- * @param The SQL statement to use in creating this
- * <code>PreparedStatement</code>.
+ * @param sql The SQL statement to use in creating this
+ * <code>PreparedStatement</code>.
* @return A new <code>PreparedStatement</code>.
* @exception SQLException If an error occurs.
* @see PreparedStatement
@@ -115,8 +115,8 @@ public interface Connection
* stored procedures. The default result set type and concurrency
* will be used.
*
- * @param The SQL statement to use in creating this
- * <code>CallableStatement</code>.
+ * @param sql The SQL statement to use in creating this
+ * <code>CallableStatement</code>.
* @return A new <code>CallableStatement</code>.
* @exception SQLException If an error occurs.
* @see CallableStatement
@@ -127,7 +127,7 @@ public interface Connection
* This method converts the specified generic SQL statement into the
* native grammer of the database this object is connected to.
*
- * @param The JDBC generic SQL statement.
+ * @param sql The JDBC generic SQL statement.
* @return The native SQL statement.
* @exception SQLException If an error occurs.
*/
@@ -139,10 +139,10 @@ public interface Connection
* transaction must be explicitly committed or rolled back.
*
* @param autoCommit <code>true</code> to enable auto commit mode,
- * <code>false</code> to disable it.
+ * <code>false</code> to disable it.
* @exception SQLException If an error occurs.
- * @see commit
- * @see rollback
+ * @see #commit()
+ * @see #rollback()
*/
void setAutoCommit(boolean autoCommit) throws SQLException;
@@ -152,12 +152,10 @@ public interface Connection
* Otherwise a transaction must be explicitly committed or rolled back.
*
* @return <code>true</code> if auto commit mode is enabled,
- * <code>false</code> otherwise.
- *
+ * <code>false</code> otherwise.
* @exception SQLException If an error occurs.
- *
- * @see commit
- * @see rollback
+ * @see #commit()
+ * @see #rollback()
*/
boolean getAutoCommit() throws SQLException;
@@ -207,7 +205,7 @@ public interface Connection
* a transaction is in progress.
*
* @param readOnly <code>true</code> if this connection is read only,
- * <code>false</code> otherwise.
+ * <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
void setReadOnly(boolean readOnly) throws SQLException;
@@ -235,8 +233,8 @@ public interface Connection
* This method returns the name of the catalog in use by this connection,
* if any.
*
- * @return The name of the catalog, or <code>null</code> if one does not
- * exist or catalogs are not supported by this database.
+ * @return The name of the catalog, or <code>null</code> if none
+ * exists or catalogs are not supported by this database.
* @exception SQLException If an error occurs.
*/
String getCatalog() throws SQLException;
@@ -283,8 +281,8 @@ public interface Connection
* <code>ResultSet</code> class.
*
* @param resultSetType The type of result set to use for this statement.
- * @param resultSetConcurrency. The type of concurrency to be used in
- * the result set for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
* @return A new <code>Statement</code> object.
* @exception SQLException If an error occurs.
* @see Statement
@@ -300,11 +298,11 @@ public interface Connection
* Valid values for these parameters are specified in the
* <code>ResultSet</code> class.
*
- * @param The SQL statement to use in creating this
- * <code>PreparedStatement</code>.
+ * @param sql The SQL statement to use in creating this
+ * <code>PreparedStatement</code>.
* @param resultSetType The type of result set to use for this statement.
- * @param resultSetConcurrency. The type of concurrency to be used in
- * the result set for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
* @return A new <code>PreparedStatement</code>.
* @exception SQLException If an error occurs.
* @see PreparedStatement
@@ -320,11 +318,11 @@ public interface Connection
* will be used. Valid values for these parameters are specified in the
* <code>ResultSet</code> class.
*
- * @param The SQL statement to use in creating this
- * <code>PreparedStatement</code>.
+ * @param sql The SQL statement to use in creating this
+ * <code>PreparedStatement</code>.
* @param resultSetType The type of result set to use for this statement.
- * @param resultSetConcurrency. The type of concurrency to be used in
- * the result set for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
* @return A new <code>CallableStatement</code>.
* @exception SQLException If an error occurs.
* @see CallableStatement
@@ -353,48 +351,130 @@ public interface Connection
void setTypeMap(Map map) throws SQLException;
/**
+ * Sets the default holdability of <code>ResultSet</code>S that are created
+ * from <code>Statement</code>S using this <code>Connection</code>.
+ *
+ * @param holdability The default holdability value to set, this must be one
+ * of <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
+ * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>.
+ * @exception SQLException If an error occurs.
+ * @see ResultSet
* @since 1.4
*/
void setHoldability(int holdability) throws SQLException;
/**
+ * Gets the default holdability of <code>ResultSet</code>S that are created
+ * from <code>Statement</code>S using this <code>Connection</code>.
+ *
+ * @return The current default holdability value, this must be one of
+ * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
+ * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>.
+ * @exception SQLException If an error occurs.
+ * @see ResultSet
* @since 1.4
*/
int getHoldability() throws SQLException;
/**
+ * Creates a new unnamed savepoint for this <code>Connection</code>
+ *
+ * @return The <code>Savepoint</code> object representing the savepoint.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
Savepoint setSavepoint() throws SQLException;
/**
+ * Creates a new savepoint with the specifiend name for this
+ * <code>Connection</code>.
+ *
+ * @param name The name of the savepoint.
+ * @return The <code>Savepoint</code> object representing the savepoint.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
Savepoint setSavepoint(String name) throws SQLException;
/**
+ * Undoes all changes made after the specified savepoint was set.
+ *
+ * @param savepoint The safepoint to roll back to.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
void rollback(Savepoint savepoint) throws SQLException;
/**
+ * Removes the specified savepoint from this <code>Connection</code>.
+ * Refering to a savepoint after it was removed is an error and will throw an
+ * SQLException.
+ *
+ * @param savepoint The savepoint to release.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
void releaseSavepoint(Savepoint savepoint) throws SQLException;
/**
+ * This method creates a new SQL statement with the specified type,
+ * concurrency and holdability, instead of using the defaults. Valid values
+ * for these parameters are specified in the <code>ResultSet</code> class.
+ *
+ * @param resultSetType The type of result set to use for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
+ * @param resultSetHoldability The type of holdability to be usd in the
+ * result set for this statement.
+ * @return A new <code>Statement</code>
+ * @exception SQLException If an error occurs.
+ * @see ResultSet
* @since 1.4
*/
Statement createStatement(int resultSetType, int
resultSetConcurrency, int resultSetHoldability) throws SQLException;
/**
+ * This method creates a new <code>PreparedStatement</code> for the specified
+ * SQL string. This method is designed for use with parameterized
+ * statements. The specified result set type, concurrency and holdability
+ * will be used. Valid values for these parameters are specified in the
+ * <code>ResultSet</code> class.
+ *
+ * @param sql The SQL statement to use in creating this
+ * <code>PreparedStatement</code>.
+ * @param resultSetType The type of result set to use for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
+ * @param resultSetHoldability The type of holdability to be usd in the
+ * result set for this statement.
+ * @return A new <code>PreparedStatement</code>.
+ * @exception SQLException If an error occurs.
+ * @see PreparedStatement
+ * @see ResultSet
* @since 1.4
*/
PreparedStatement prepareStatement(String sql, int resultSetType, int
resultSetConcurrency, int resultSetHoldability) throws SQLException;
/**
+ * This method creates a new <code>CallableStatement</code> for the
+ * specified SQL string. Thie method is designed to be used with
+ * stored procedures. The specified result set type, concurrency and
+ * holdability will be used. Valid values for these parameters are specified
+ * in the <code>ResultSet</code> class.
+ *
+ * @param sql The SQL statement to use in creating this
+ * <code>PreparedStatement</code>.
+ * @param resultSetType The type of result set to use for this statement.
+ * @param resultSetConcurrency The type of concurrency to be used in
+ * the result set for this statement.
+ * @param resultSetHoldability The type of holdability to be used in the
+ * result set for this statement.
+ * @return A new <code>CallableStatement</code>.
+ * @exception SQLException If an error occurs.
+ * @see CallableStatement
+ * @see ResultSet
* @since 1.4
*/
CallableStatement prepareCall(String sql, int resultSetType, int
diff --git a/libjava/classpath/java/sql/DatabaseMetaData.java b/libjava/classpath/java/sql/DatabaseMetaData.java
index d34c4e2..48c2d9a 100644
--- a/libjava/classpath/java/sql/DatabaseMetaData.java
+++ b/libjava/classpath/java/sql/DatabaseMetaData.java
@@ -1,5 +1,5 @@
/* DatabaseMetaData.java -- Information about the database itself.
- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -256,10 +256,19 @@ public interface DatabaseMetaData
*/
short tableIndexOther = 3;
+ /**
+ * A NULL value is not allowed for this attribute.
+ */
short attributeNoNulls = 0;
+ /**
+ * A NULL value is allowed for this attribute.
+ */
short attributeNullable = 1;
+ /**
+ * It is unknown whether or not NULL values are allowed for this attribute.
+ */
short attributeNullableUnknown = 2;
int sqlStateXOpen = 1;
@@ -1395,12 +1404,12 @@ public interface DatabaseMetaData
* or "" to return procedures from all catalogs.
* @param schemaPattern A schema pattern for the schemas to return stored
* procedures from, or "" to return procedures from all schemas.
- * @param namePattern The pattern of procedures names to return.
+ * @param procedurePattern The pattern of procedure names to return.
* @returns A <code>ResultSet</code> with all the requested procedures.
* @exception SQLException If an error occurs.
*/
ResultSet getProcedures(String catalog, String schemaPattern, String
- procedureNamePattern) throws SQLException;
+ procedurePattern) throws SQLException;
/**
* This method returns a list of the parameter and result columns for
@@ -1436,13 +1445,13 @@ public interface DatabaseMetaData
* or "" to return procedures from all catalogs.
* @param schemaPattern A schema pattern for the schemas to return stored
* procedures from, or "" to return procedures from all schemas.
- * @param namePattern The pattern of procedures names to return.
+ * @param procedurePattern The pattern of procedures names to return.
* @param columnPattern The pattern of column names to return.
* @returns A <code>ResultSet</code> with all the requested procedures.
* @exception SQLException If an error occurs.
*/
ResultSet getProcedureColumns(String catalog, String schemaPattern,
- String procedureNamePattern, String columnNamePattern) throws
+ String procedurePattern, String columnPattern) throws
SQLException;
/**
@@ -1462,13 +1471,13 @@ public interface DatabaseMetaData
* or "" to return tables from all catalogs.
* @param schemaPattern A schema pattern for the schemas to return tables
* from, or "" to return tables from all schemas.
- * @param namePattern The pattern of table names to return.
+ * @param tablePattern The pattern of table names to return.
* @param types The list of table types to include; null returns all types.
* @returns A <code>ResultSet</code> with all the requested tables.
* @exception SQLException If an error occurs.
*/
ResultSet getTables(String catalog, String schemaPattern, String
- tableNamePattern, String[] types) throws SQLException;
+ tablePattern, String[] types) throws SQLException;
/**
* This method returns the list of database schemas as a
@@ -1536,13 +1545,13 @@ public interface DatabaseMetaData
* or "" to return tables from all catalogs.
* @param schemaPattern A schema pattern for the schemas to return
* tables from, or "" to return tables from all schemas.
- * @param namePattern The pattern of tables names to return.
+ * @param tablePattern The pattern of table names to return.
* @param columnPattern The pattern of column names to return.
* @returns A <code>ResultSet</code> with all the requested tables.
* @exception SQLException If an error occurs.
*/
ResultSet getColumns(String catalog, String schemaPattern, String
- tableNamePattern, String columnNamePattern) throws SQLException;
+ tablePattern, String columnPattern) throws SQLException;
/**
* This method returns the access rights that have been granted to the
@@ -1568,13 +1577,13 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
+ * @param tableName The table name to return information for.
* @param columnPattern A pattern of column names to return information for.
* @return A <code>ResultSet</code> with all the requested privileges.
* @exception SQLException If an error occurs.
*/
ResultSet getColumnPrivileges(String catalog, String schema, String
- table, String columnNamePattern) throws SQLException;
+ tableName, String columnPattern) throws SQLException;
/**
* This method returns the access rights that have been granted to the
@@ -1597,7 +1606,7 @@ public interface DatabaseMetaData
* @param catalog The catalog to retrieve information from, or the empty string
* to return entities not associated with a catalog, or <code>null</code>
* to return information from all catalogs.
- * @param schema The schema to retrieve information from, or the empty string
+ * @param schemaPattern The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
* @param tablePattern The table name pattern of tables to return
* information for.
@@ -1605,7 +1614,7 @@ public interface DatabaseMetaData
* @exception SQLException If an error occurs.
*/
ResultSet getTablePrivileges(String catalog, String schemaPattern,
- String tableNamePattern) throws SQLException;
+ String tablePattern) throws SQLException;
/**
* This method returns the best set of columns for uniquely identifying
@@ -1634,8 +1643,7 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
- * @param columnPattern A pattern of column names to return information for.
+ * @param tableName The table name to return information for.
* @param scope One of the best row id scope constants from this class.
* @param nullable <code>true</code> to include columns that are nullable,
* <code>false</code> otherwise.
@@ -1643,7 +1651,7 @@ public interface DatabaseMetaData
* @exception SQLException If an error occurs.
*/
ResultSet getBestRowIdentifier(String catalog, String schema,
- String table, int scope, boolean nullable) throws SQLException;
+ String tableName, int scope, boolean nullable) throws SQLException;
/**
* This method returns the set of columns that are automatically updated
@@ -1670,13 +1678,12 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
- * @param columnPattern A pattern of column names to return information for.
+ * @param tableName The table name to return information for
* @return A <code>ResultSet</code> with the version columns.
* @exception SQLException If an error occurs.
*/
ResultSet getVersionColumns(String catalog, String schema,
- String table) throws SQLException;
+ String tableName) throws SQLException;
/**
* This method returns a list of a table's primary key columns. These
@@ -1696,12 +1703,11 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
- * @param columnPattern A pattern of column names to return information for.
+ * @param tableName The table name to return information for.
* @return A <code>ResultSet</code> with the primary key columns.
* @exception SQLException If an error occurs.
*/
- ResultSet getPrimaryKeys(String catalog, String schema, String table)
+ ResultSet getPrimaryKeys(String catalog, String schema, String tableName)
throws SQLException;
/**
@@ -1740,14 +1746,12 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
- *
+ * @param tableName The table name to return information for.
* @return A <code>ResultSet</code> with the foreign key columns.
- *
* @exception SQLException If an error occurs.
*/
ResultSet getImportedKeys(String catalog, String schema,
- String table) throws SQLException;
+ String tableName) throws SQLException;
/**
* This method returns a list of the table's which use this table's
@@ -1786,12 +1790,12 @@ public interface DatabaseMetaData
* to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
+ * @param tableName The table name to return information for.
* @return A <code>ResultSet</code> with the requested information
* @exception SQLException If an error occurs.
*/
ResultSet getExportedKeys(String catalog, String schema,
- String table) throws SQLException;
+ String tableName) throws SQLException;
/**
* This method returns a description of how one table imports another
@@ -1825,26 +1829,30 @@ public interface DatabaseMetaData
* <code>importedKeyNotDeferrable</code>).</li>
* </ol>
*
- * @param primCatalog The catalog to retrieve information from, or the empty string
- * to return entities not associated with a catalog, or <code>null</code>
- * to return information from all catalogs, on the exporting side.
- * @param primSchema The schema to retrieve information from, or the empty string
- * to return entities not associated with a schema, on the exporting side.
- * @param primTable The table name to return information for, on the exporting
- * side.
- * @param forCatalog The catalog to retrieve information from, or the empty string
- * to return entities not associated with a catalog, or <code>null</code>
- * to return information from all catalogs, on the importing side.
- * @param forSchema The schema to retrieve information from, or the empty string
- * to return entities not associated with a schema on the importing side.
- * @param forTable The table name to return information for on the importing
- * side.
+ * @param primaryCatalog The catalog to retrieve information from, or the
+ * empty string to return entities not associated with a catalog, or
+ * <code>null</code> to return information from all catalogs, on the
+ * exporting side.
+ * @param primarySchema The schema to retrieve information from, or the empty
+ * string to return entities not associated with a schema, on the
+ * exporting side.
+ * @param primaryTableName The table name to return information for, on the
+ * exporting side.
+ * @param foreignCatalog The catalog to retrieve information from, or the
+ * empty string to return entities not associated with a catalog,
+ * or <code>null</code> to return information from all catalogs, on
+ * the importing side.
+ * @param foreignSchema The schema to retrieve information from, or the
+ * empty string to return entities not associated with a schema on
+ * the importing side.
+ * @param foreignTableName The table name to return information for on the
+ * importing side.
* @return A <code>ResultSet</code> with the requested information
* @exception SQLException If an error occurs.
*/
ResultSet getCrossReference(String primaryCatalog, String
- primarySchema, String primaryTable, String foreignCatalog, String
- foreignSchema, String foreignTable) throws SQLException;
+ primarySchema, String primaryTableName, String foreignCatalog, String
+ foreignSchema, String foreignTableName) throws SQLException;
/**
* This method returns a list of the SQL types supported by this
@@ -1921,15 +1929,15 @@ public interface DatabaseMetaData
* <code>null</code> to return information from all catalogs.
* @param schema The schema to retrieve information from, or the empty string
* to return entities not associated with a schema.
- * @param table The table name to return information for.
+ * @param tableName The table name to return information for.
* @param unique <code>true</code> to return only unique indexes,
* <code>false</code> otherwise.
- * @param approx <code>true</code> if data values can be approximations,
+ * @param approximate <code>true</code> if data values can be approximations,
* <code>false</code> otherwise.
* @return A <code>ResultSet</code> with the requested index information
* @exception SQLException If an error occurs.
*/
- ResultSet getIndexInfo(String catalog, String schema, String table,
+ ResultSet getIndexInfo(String catalog, String schema, String tableName,
boolean unique, boolean approximate) throws SQLException;
/**
@@ -1954,8 +1962,8 @@ public interface DatabaseMetaData
*
* @param type The desired result type, which is one of the constants
* defined in <code>ResultSet</code>.
- * @param concur The desired concurrency type, which is one of the constants
- * defined in <code>ResultSet</code>.
+ * @param concurrency The desired concurrency type, which is one of the
+ * constants defined in <code>ResultSet</code>.
* @return <code>true</code> if the result set type is supported,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
@@ -2108,8 +2116,8 @@ public interface DatabaseMetaData
* @param catalog The catalog to retrieve information from, or the empty string
* to return entities not associated with a catalog, or <code>null</code>
* to return information from all catalogs.
- * @param schema The schema to retrieve information from, or the empty string
- * to return entities not associated with a schema.
+ * @param schemaPattern The schema to retrieve information from, or the
+ * empty string to return entities not associated with a schema.
* @param typePattern The type name pattern to match.
* @param types The type identifier patterns (from <code>Types</code>) to
* match.
@@ -2117,7 +2125,7 @@ public interface DatabaseMetaData
* @exception SQLException If an error occurs.
*/
ResultSet getUDTs(String catalog, String schemaPattern, String
- typeNamePattern, int[] types) throws SQLException;
+ typePattern, int[] types) throws SQLException;
/**
* This method returns the <code>Connection</code> object that was used
@@ -2129,16 +2137,33 @@ public interface DatabaseMetaData
Connection getConnection() throws SQLException;
/**
+ * This method tests whether the databse supports savepoints.
+ *
+ * @return <code>true</code> if the database supports savepoints,
+ * <code>false</code> if it does not.
+ * @exception SQLException If an error occurs.
+ * @see Savepoint
* @since 1.4
*/
boolean supportsSavepoints() throws SQLException;
/**
+ * This method tests whether the database supports named parameters.
+ *
+ * @return <code>true</code> if the database supports named parameters,
+ * <code>false</code> if it does not.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
boolean supportsNamedParameters() throws SQLException;
/**
+ * This method tests whether the database supports returning multiple
+ * <code>ResultSet</code>S from a <code>CallableStatement</code> at once.
+ *
+ * @return <code>true</code> if the database supports returnig multiple
+ * results at once, <code>false</code> if it does not.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
boolean supportsMultipleOpenResults() throws SQLException;
@@ -2152,47 +2177,78 @@ public interface DatabaseMetaData
* @since 1.4
*/
ResultSet getSuperTypes(String catalog, String schemaPattern,
- String typeNamePattern) throws SQLException;
+ String typePattern) throws SQLException;
/**
* @since 1.4
*/
ResultSet getSuperTables(String catalog, String schemaPattern,
- String tableNamePattern) throws SQLException;
+ String tablePattern) throws SQLException;
/**
* @since 1.4
*/
ResultSet getAttributes(String catalog, String schemaPattern, String
- typeNamePattern, String attributeNamePattern) throws SQLException;
+ typePattern, String attributePattern) throws SQLException;
/**
+ * This method tests if the database supports the specified holdability type.
+ * Valid values for this parameter are specified in the
+ * <code>ResultSet</code> class.
+ *
+ * @param holdability The holdability type to test.
+ * @return <code>true</code> if the database supports the holdability type,
+ * <code>false</code> if it does not.
+ * @exception SQLException If an error occurs.
+ * @see ResultSet
* @since 1.4
*/
boolean supportsResultSetHoldability(int holdability)
throws SQLException;
/**
+ * This method returns the default holdability type of <code>ResultSet</code>S
+ * retrieved from this database. The possible values are specified in the
+ * <code>ResultSet</code> class.
+ *
+ * @return The default holdability type.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
int getResultSetHoldability() throws SQLException;
/**
+ * This method returns the major version number of the database.
+ *
+ * @return The major version number of the database.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
int getDatabaseMajorVersion() throws SQLException;
/**
+ * This method returns the minor version number of the database.
+ *
+ * @return The minor version number of the database.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
int getDatabaseMinorVersion() throws SQLException;
/**
+ * This method returns the major version number of the JDBC driver.
+ *
+ * @return The major version number of the JDBC driver.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
int getJDBCMajorVersion() throws SQLException;
/**
+ * This method returns the minor version number of the JDBC driver.
+ *
+ * @return The minor version number of the database.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
int getJDBCMinorVersion() throws SQLException;
diff --git a/libjava/classpath/java/sql/Date.java b/libjava/classpath/java/sql/Date.java
index d429cc8..f4c3307 100644
--- a/libjava/classpath/java/sql/Date.java
+++ b/libjava/classpath/java/sql/Date.java
@@ -1,5 +1,5 @@
/* Date.java -- Wrapper around java.util.Date
- Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -72,10 +72,10 @@ public class Date extends java.util.Date
/**
* This method initializes a new instance of this class with the
- * specified time value representing the number of seconds since
+ * specified time value representing the number of milliseconds since
* Jan 1, 1970 at 12:00 midnight GMT.
*
- * @param time The time value to intialize this date to.
+ * @param date The time value to intialize this date to.
*/
public Date(long date)
{
diff --git a/libjava/classpath/java/sql/Driver.java b/libjava/classpath/java/sql/Driver.java
index 10f83ef..277dd17 100644
--- a/libjava/classpath/java/sql/Driver.java
+++ b/libjava/classpath/java/sql/Driver.java
@@ -1,5 +1,5 @@
/* Driver.java -- A JDBC driver
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -68,7 +68,7 @@ public interface Driver
* connection, or <code>null</code> if the URL is not understood.
* @exception SQLException If an error occurs.
*/
- Connection connect(String url, Properties info) throws SQLException;
+ Connection connect(String url, Properties properties) throws SQLException;
/**
* This method tests whether or not the driver believes it can connect to
@@ -76,7 +76,7 @@ public interface Driver
* understands and accepts the URL. It should not necessarily attempt to
* probe the database for a connection.
*
- * @param The database URL string.
+ * @param url The database URL string.
* @return <code>true</code> if the drivers can connect to the database,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
diff --git a/libjava/classpath/java/sql/DriverManager.java b/libjava/classpath/java/sql/DriverManager.java
index 9e252ab..94f743b 100644
--- a/libjava/classpath/java/sql/DriverManager.java
+++ b/libjava/classpath/java/sql/DriverManager.java
@@ -1,5 +1,6 @@
/* DriverManager.java -- Manage JDBC drivers
- Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2003, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -292,11 +293,11 @@ public class DriverManager
* This method set the login timeout used by JDBC drivers. This is a
* system-wide parameter that applies to all drivers.
*
- * @param login_timeout The new login timeout value.
+ * @param seconds The new login timeout value.
*/
public static void setLoginTimeout(int seconds)
{
- DriverManager.login_timeout = login_timeout;
+ DriverManager.login_timeout = seconds;
}
/**
@@ -312,20 +313,18 @@ public class DriverManager
/**
* This method sets the log stream in use by JDBC.
*
- * @param log_stream The log stream in use by JDBC.
- *
+ * @param stream The log stream in use by JDBC.
* @deprecated Use <code>setLogWriter</code> instead.
*/
- public static void setLogStream(PrintStream out)
+ public static void setLogStream(PrintStream stream)
{
- DriverManager.log_stream = log_stream;
+ DriverManager.log_stream = stream;
}
/**
* This method returns the log stream in use by JDBC.
*
* @return The log stream in use by JDBC.
- *
* @deprecated Use <code>getLogWriter()</code> instead.
*/
public static PrintStream getLogStream()
@@ -336,7 +335,7 @@ public class DriverManager
/**
* This method prints the specified line to the log stream.
*
- * @param str The string to write to the log stream.
+ * @param message The string to write to the log stream.
*/
public static void println(String message)
{
diff --git a/libjava/classpath/java/sql/PreparedStatement.java b/libjava/classpath/java/sql/PreparedStatement.java
index 3aedbc5..ca7eb2c 100644
--- a/libjava/classpath/java/sql/PreparedStatement.java
+++ b/libjava/classpath/java/sql/PreparedStatement.java
@@ -1,5 +1,5 @@
/* PreparedStatement.java -- Interface for pre-compiled statements.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,6 +48,8 @@ import java.util.Calendar;
* statements. This provides greater efficiency when calling the same
* statement multiple times. Parameters are allowed in a statement,
* providings for maximum reusability.
+ *
+ * <p> Note that in this class parameter indices start at 1, not 0.</p>
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
@@ -76,11 +78,12 @@ public interface PreparedStatement extends Statement
* for the specified type.
*
* @param index The index of the parameter to set.
- * @param type The SQL type identifier of the parameter from <code>Types</code>
+ * @param sqlType The SQL type identifier of the parameter from
+ * <code>Types</code>
*
* @exception SQLException If an error occurs.
*/
- void setNull(int parameterIndex, int sqlType) throws SQLException;
+ void setNull(int index, int sqlType) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -90,7 +93,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setBoolean(int parameterIndex, boolean x) throws SQLException;
+ void setBoolean(int index, boolean value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -100,7 +103,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setByte(int parameterIndex, byte x) throws SQLException;
+ void setByte(int index, byte value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -110,7 +113,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setShort(int parameterIndex, short x) throws SQLException;
+ void setShort(int index, short value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -120,7 +123,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setInt(int parameterIndex, int x) throws SQLException;
+ void setInt(int index, int value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -130,7 +133,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setLong(int parameterIndex, long x) throws SQLException;
+ void setLong(int index, long value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -140,7 +143,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setFloat(int parameterIndex, float x) throws SQLException;
+ void setFloat(int index, float value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -150,7 +153,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setDouble(int parameterIndex, double x) throws SQLException;
+ void setDouble(int index, double value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -160,7 +163,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setBigDecimal(int parameterIndex, BigDecimal x) throws
+ void setBigDecimal(int index, BigDecimal value) throws
SQLException;
/**
@@ -171,7 +174,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setString(int parameterIndex, String x) throws SQLException;
+ void setString(int index, String value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -181,7 +184,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setBytes(int parameterIndex, byte[] x) throws SQLException;
+ void setBytes(int index, byte[] value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -191,7 +194,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setDate(int parameterIndex, Date x) throws SQLException;
+ void setDate(int index, Date value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -201,7 +204,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setTime(int parameterIndex, Time x) throws SQLException;
+ void setTime(int index, Time value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -211,7 +214,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setTimestamp(int parameterIndex, Timestamp x)
+ void setTimestamp(int index, Timestamp value)
throws SQLException;
/**
@@ -219,11 +222,11 @@ public interface PreparedStatement extends Statement
* ASCII <code>InputStream</code> value.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
- * @param length The number of bytes in the stream.
+ * @param stream The stream from which the parameter value is read.
+ * @param count The number of bytes in the stream.
* @exception SQLException If an error occurs.
*/
- void setAsciiStream(int parameterIndex, InputStream x, int length)
+ void setAsciiStream(int index, InputStream stream, int count)
throws SQLException;
/**
@@ -231,12 +234,12 @@ public interface PreparedStatement extends Statement
* Unicode UTF-8 <code>InputStream</code> value.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
- * @param length The number of bytes in the stream.
+ * @param stream The stream from which the parameter value is read.
+ * @param count The number of bytes in the stream.
* @exception SQLException If an error occurs.
* @deprecated
*/
- void setUnicodeStream(int parameterIndex, InputStream x, int length)
+ void setUnicodeStream(int index, InputStream stream, int count)
throws SQLException;
/**
@@ -244,11 +247,11 @@ public interface PreparedStatement extends Statement
* binary <code>InputStream</code> value.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
- * @param length The number of bytes in the stream.
+ * @param stream The stream from which the parameter value is read.
+ * @param count The number of bytes in the stream.
* @exception SQLException If an error occurs.
*/
- void setBinaryStream(int parameterIndex, InputStream x, int length)
+ void setBinaryStream(int index, InputStream stream, int count)
throws SQLException;
/**
@@ -265,13 +268,14 @@ public interface PreparedStatement extends Statement
*
* @param index The index of the parameter value to set.
* @param value The value of the parameter.
- * @param type The SQL type to use for the parameter, from <code>Types</code>
+ * @param sqlType The SQL type to use for the parameter, from
+ * <code>Types</code>
* @param scale The scale of the value, for numeric values only.
* @exception SQLException If an error occurs.
* @see Types
*/
- void setObject(int parameterIndex, Object x, int targetSqlType,
- int scale) throws SQLException;
+ void setObject(int index, Object value, int sqlType, int scale)
+ throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -279,11 +283,12 @@ public interface PreparedStatement extends Statement
*
* @param index The index of the parameter value to set.
* @param value The value of the parameter.
- * @param type The SQL type to use for the parameter, from <code>Types</code>
+ * @param sqlType The SQL type to use for the parameter, from
+ * <code>Types</code>
* @exception SQLException If an error occurs.
* @see Types
*/
- void setObject(int parameterIndex, Object x, int targetSqlType)
+ void setObject(int index, Object value, int sqlType)
throws SQLException;
/**
@@ -295,7 +300,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setObject(int parameterIndex, Object x) throws SQLException;
+ void setObject(int index, Object value) throws SQLException;
/**
* This method executes a prepared SQL query.
@@ -319,12 +324,12 @@ public interface PreparedStatement extends Statement
* character <code>Reader</code> value.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
- * @param length The number of bytes in the stream.
+ * @param reader The reader from which the parameter value is read.
+ * @param count The number of characters in the stream.
* @exception SQLException If an error occurs.
*/
- void setCharacterStream(int parameterIndex, Reader reader,
- int length) throws SQLException;
+ void setCharacterStream(int index, Reader reader, int count)
+ throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -332,10 +337,10 @@ public interface PreparedStatement extends Statement
* will be used.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
+ * @param value The <code>Ref</code> used to set the value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setRef(int i, Ref x) throws SQLException;
+ void setRef(int index, Ref value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -343,10 +348,11 @@ public interface PreparedStatement extends Statement
* will be used.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
+ * @param value The <code>Blob</code> used to set the
+ * value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setBlob(int i, Blob x) throws SQLException;
+ void setBlob(int index, Blob value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -354,10 +360,11 @@ public interface PreparedStatement extends Statement
* will be used.
*
* @param index The index of the parameter value to set.
- * @param value The value of the parameter.
+ * @param value The <code>Clob</code> used to set the
+ * value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setClob(int i, Clob x) throws SQLException;
+ void setClob(int index, Clob value) throws SQLException;
/**
* This method sets the specified parameter from the given Java
@@ -368,7 +375,7 @@ public interface PreparedStatement extends Statement
* @param value The value of the parameter.
* @exception SQLException If an error occurs.
*/
- void setArray(int i, Array x) throws SQLException;
+ void setArray(int index, Array value) throws SQLException;
/**
* This method returns meta data for the result set from this statement.
@@ -384,10 +391,10 @@ public interface PreparedStatement extends Statement
*
* @param index The index of the parameter value to set.
* @param value The value of the parameter.
- * @param calendar The <code>Calendar</code> to use for timezone and locale.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
* @exception SQLException If an error occurs.
*/
- void setDate(int parameterIndex, Date x, Calendar cal)
+ void setDate(int index, Date value, Calendar cal)
throws SQLException;
/**
@@ -396,10 +403,10 @@ public interface PreparedStatement extends Statement
*
* @param index The index of the parameter value to set.
* @param value The value of the parameter.
- * @param calendar The <code>Calendar</code> to use for timezone and locale.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
* @exception SQLException If an error occurs.
*/
- void setTime(int parameterIndex, Time x, Calendar cal)
+ void setTime(int index, Time value, Calendar cal)
throws SQLException;
/**
@@ -408,10 +415,10 @@ public interface PreparedStatement extends Statement
*
* @param index The index of the parameter value to set.
* @param value The value of the parameter.
- * @param calendar The <code>Calendar</code> to use for timezone and locale.
+ * @param cal The <code>Calendar</code> to use for timezone and locale.
* @exception SQLException If an error occurs.
*/
- void setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
+ void setTimestamp(int index, Timestamp value, Calendar cal)
throws SQLException;
/**
@@ -419,19 +426,32 @@ public interface PreparedStatement extends Statement
* for the specified type.
*
* @param index The index of the parameter to set.
- * @param type The SQL type identifier of the parameter from <code>Types</code>
- * @param name The name of the data type, for user defined types.
+ * @param sqlType The SQL type identifier of the parameter from
+ * <code>Types</code>
+ * @param typeName The name of the data type, for user defined types.
* @exception SQLException If an error occurs.
*/
- void setNull(int paramIndex, int sqlType, String typeName)
+ void setNull(int index, int sqlType, String typeName)
throws SQLException;
/**
+ * This method sets the specified parameter from the given Java
+ * <code>java.net.URL</code> value.
+ *
+ * @param index The index of the parameter to set.
+ * @param value The value of the parameter.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void setURL(int parameterIndex, URL x) throws SQLException;
+ void setURL(int index, URL value) throws SQLException;
/**
+ * Returns information about the parameters set on this
+ * <code>PreparedStatement</code> (see {@link ParameterMetaData} for a
+ * detailed description of the provided information).
+ *
+ * @return Meta data for the parameters of this statement.
+ * @see ParameterMetaData
* @since 1.4
*/
ParameterMetaData getParameterMetaData() throws SQLException;
diff --git a/libjava/classpath/java/sql/ResultSet.java b/libjava/classpath/java/sql/ResultSet.java
index 97f2897..79cba63 100644
--- a/libjava/classpath/java/sql/ResultSet.java
+++ b/libjava/classpath/java/sql/ResultSet.java
@@ -1,5 +1,5 @@
/* ResultSet.java -- A SQL statement result set.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -138,7 +138,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>String</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>String</code>.
* @exception SQLException If an error occurs.
*/
@@ -148,7 +148,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>boolean</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>boolean</code>.
* @exception SQLException If an error occurs.
*/
@@ -158,7 +158,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>byte</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>byte</code>.
* @exception SQLException If an error occurs.
*/
@@ -168,7 +168,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>short</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>short</code>.
* @exception SQLException If an error occurs.
*/
@@ -178,7 +178,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>int</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>int</code>.
* @exception SQLException If an error occurs.
*/
@@ -188,7 +188,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>long</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>long</code>.
* @exception SQLException If an error occurs.
*/
@@ -198,7 +198,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>float</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>float</code>.
* @exception SQLException If an error occurs.
*/
@@ -208,7 +208,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>double</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>double</code>.
* @exception SQLException If an error occurs.
*/
@@ -218,7 +218,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>BigDecimal</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @param scale The number of digits to the right of the decimal to return.
* @return The column value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
@@ -231,7 +231,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* byte array.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a byte array
* @exception SQLException If an error occurs.
*/
@@ -241,7 +241,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Date</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
*/
@@ -251,7 +251,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Time</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
*/
@@ -261,7 +261,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Timestamp</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>java.sql.Timestamp</code>.
* @exception SQLException If an error occurs.
*/
@@ -274,7 +274,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as an ASCII <code>InputStream</code>.
* @exception SQLException If an error occurs.
*/
@@ -287,7 +287,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a Unicode UTF-8 <code>InputStream</code>.
* @exception SQLException If an error occurs.
* @deprecated Use getCharacterStream instead.
@@ -301,7 +301,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a raw byte <code>InputStream</code>.
* @exception SQLException If an error occurs.
*/
@@ -311,7 +311,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>String</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>String</code>.
* @exception SQLException If an error occurs.
*/
@@ -321,7 +321,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>boolean</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>boolean</code>.
* @exception SQLException If an error occurs.
*/
@@ -331,7 +331,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>byte</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>byte</code>.
* @exception SQLException If an error occurs.
*/
@@ -341,7 +341,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>short</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>short</code>.
* @exception SQLException If an error occurs.
*/
@@ -351,7 +351,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>int</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>int</code>.
* @exception SQLException If an error occurs.
*/
@@ -361,7 +361,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>long</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>long</code>.
* @exception SQLException If an error occurs.
*/
@@ -371,7 +371,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>float</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>float</code>.
* @exception SQLException If an error occurs.
*/
@@ -381,7 +381,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>double</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>double</code>.
* @exception SQLException If an error occurs.
*/
@@ -391,7 +391,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>BigDecimal</code>.
*
- * @param index The index of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
* @deprecated
@@ -403,7 +403,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* byte array.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a byte array
* @exception SQLException If an error occurs.
*/
@@ -413,7 +413,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Date</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
*/
@@ -423,7 +423,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Time</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
*/
@@ -433,7 +433,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>java.sql.Timestamp</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>java.sql.Timestamp</code>.
* @exception SQLException If an error occurs.
*/
@@ -446,7 +446,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as an ASCII <code>InputStream</code>.
* @exception SQLException If an error occurs.
*/
@@ -459,7 +459,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a Unicode UTF-8 <code>InputStream</code>.
* @exception SQLException If an error occurs.
* @deprecated Use getCharacterStream instead.
@@ -473,7 +473,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a raw byte <code>InputStream</code>.
* @exception SQLException If an error occurs.
*/
@@ -518,7 +518,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>Object</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as an <code>Object</code>.
* @exception SQLException If an error occurs.
*/
@@ -528,7 +528,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>Object</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as an <code>Object</code>.
* @exception SQLException If an error occurs.
*/
@@ -537,7 +537,7 @@ public interface ResultSet
/**
* This method returns the column index of the specified named column.
*
- * @param column The name of the column.
+ * @param columnName The name of the column.
* @return The index of the column.
* @exception SQLException If an error occurs.
*/
@@ -550,7 +550,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as an character <code>Reader</code>.
* @exception SQLException If an error occurs.
*/
@@ -563,7 +563,7 @@ public interface ResultSet
* calling <code>next()</code> or <code>close()</code> on this result set
* will close this stream as well.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as an character <code>Reader</code>.
* @exception SQLException If an error occurs.
*/
@@ -573,7 +573,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>BigDecimal</code>.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return The column value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
*/
@@ -583,7 +583,7 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>BigDecimal</code>.
*
- * @param column The name of the column to return.
+ * @param columnName The name of the column to return.
* @return The column value as a <code>BigDecimal</code>.
* @exception SQLException If an error occurs.
*/
@@ -692,7 +692,7 @@ public interface ResultSet
* This method moves the result set position relative to the current row.
* The offset can be positive or negative.
*
- * @param row The relative row position to move to.
+ * @param rows The number of row positions to move.
* @return <code>true</code> if the current position was changed,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
@@ -713,7 +713,9 @@ public interface ResultSet
* This method provides a hint to the driver about which direction the
* result set will be processed in.
*
- * @param direction The direction in which rows will be processed. (Values?)
+ * @param direction The direction in which rows will be processed. The
+ * allowed values are the <code>FETCH_*</code> constants
+ * defined in this interface.
* @exception SQLException If an error occurs.
*/
void setFetchDirection(int direction) throws SQLException;
@@ -746,7 +748,7 @@ public interface ResultSet
/**
* This method returns the result set type of this result set. This will
- * be one of the TYPE_* constants defined in this interface.
+ * be one of the <code>TYPE_*</code> constants defined in this interface.
*
* @return The result set type.
* @exception SQLException If an error occurs.
@@ -755,7 +757,7 @@ public interface ResultSet
/**
* This method returns the concurrency type of this result set. This will
- * be one of the CONCUR_* constants defined in this interface.
+ * be one of the <code>CONCUR_*</code> constants defined in this interface.
*
* @return The result set concurrency type.
* @exception SQLException If an error occurs.
@@ -800,7 +802,7 @@ public interface ResultSet
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @return index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @exception SQLException If an error occurs.
*/
void updateNull(int columnIndex) throws SQLException;
@@ -810,88 +812,88 @@ public interface ResultSet
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBoolean(int columnIndex, boolean x) throws SQLException;
+ void updateBoolean(int columnIndex, boolean value) throws SQLException;
/**
* This method updates the specified column to have a byte value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateByte(int columnIndex, byte x) throws SQLException;
+ void updateByte(int columnIndex, byte value) throws SQLException;
/**
* This method updates the specified column to have a short value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateShort(int columnIndex, short x) throws SQLException;
+ void updateShort(int columnIndex, short value) throws SQLException;
/**
* This method updates the specified column to have an int value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateInt(int columnIndex, int x) throws SQLException;
+ void updateInt(int columnIndex, int value) throws SQLException;
/**
* This method updates the specified column to have a long value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateLong(int columnIndex, long x) throws SQLException;
+ void updateLong(int columnIndex, long value) throws SQLException;
/**
* This method updates the specified column to have a float value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateFloat(int columnIndex, float x) throws SQLException;
+ void updateFloat(int columnIndex, float value) throws SQLException;
/**
* This method updates the specified column to have a double value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateDouble(int columnIndex, double x) throws SQLException;
+ void updateDouble(int columnIndex, double value) throws SQLException;
/**
* This method updates the specified column to have a BigDecimal value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBigDecimal(int columnIndex, BigDecimal x)
+ void updateBigDecimal(int columnIndex, BigDecimal value)
throws SQLException;
/**
@@ -899,55 +901,55 @@ public interface ResultSet
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateString(int columnIndex, String x) throws SQLException;
+ void updateString(int columnIndex, String value) throws SQLException;
/**
* This method updates the specified column to have a byte array value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBytes(int columnIndex, byte[] x) throws SQLException;
+ void updateBytes(int columnIndex, byte[] value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Date value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateDate(int columnIndex, Date x) throws SQLException;
+ void updateDate(int columnIndex, Date value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Time value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateTime(int columnIndex, Time x) throws SQLException;
+ void updateTime(int columnIndex, Time value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Timestamp value.
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateTimestamp(int columnIndex, Timestamp x)
+ void updateTimestamp(int columnIndex, Timestamp value)
throws SQLException;
/**
@@ -955,12 +957,12 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
+ * @param columnIndex The index of the column to update.
+ * @param stream The stream from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateAsciiStream(int columnIndex, InputStream x, int length)
+ void updateAsciiStream(int columnIndex, InputStream stream, int count)
throws SQLException;
/**
@@ -968,12 +970,12 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
+ * @param columnIndex The index of the column to update.
+ * @param stream The stream from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateBinaryStream(int columnIndex, InputStream x, int length)
+ void updateBinaryStream(int columnIndex, InputStream stream, int count)
throws SQLException;
/**
@@ -981,12 +983,12 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
+ * @param columnIndex The index of the column to update.
+ * @param reader The reader from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateCharacterStream(int columnIndex, Reader x, int length)
+ void updateCharacterStream(int columnIndex, Reader reader, int count)
throws SQLException;
/**
@@ -994,12 +996,13 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
- *
+ * @param scale The scale of the object in question, which is used only
+ * for numeric type objects.
* @exception SQLException If an error occurs.
*/
- void updateObject(int columnIndex, Object x, int scale)
+ void updateObject(int columnIndex, Object value, int scale)
throws SQLException;
/**
@@ -1007,20 +1010,18 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param index The index of the column to update.
+ * @param columnIndex The index of the column to update.
* @param value The new value of the column.
- * @param scale The scale of the object in question, which is used only
- * for numeric type objects.
* @exception SQLException If an error occurs.
*/
- void updateObject(int columnIndex, Object x) throws SQLException;
+ void updateObject(int columnIndex, Object value) throws SQLException;
/**
* This method updates the specified column to have a NULL value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @return name The name of the column to update.
+ * @param columnName The name of the column to update.
* @exception SQLException If an error occurs.
*/
void updateNull(String columnName) throws SQLException;
@@ -1030,88 +1031,88 @@ public interface ResultSet
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBoolean(String columnName, boolean x) throws SQLException;
+ void updateBoolean(String columnName, boolean value) throws SQLException;
/**
* This method updates the specified column to have a byte value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateByte(String columnName, byte x) throws SQLException;
+ void updateByte(String columnName, byte value) throws SQLException;
/**
* This method updates the specified column to have a short value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateShort(String columnName, short x) throws SQLException;
+ void updateShort(String columnName, short value) throws SQLException;
/**
* This method updates the specified column to have an int value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateInt(String columnName, int x) throws SQLException;
+ void updateInt(String columnName, int value) throws SQLException;
/**
* This method updates the specified column to have a long value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateLong(String columnName, long x) throws SQLException;
+ void updateLong(String columnName, long value) throws SQLException;
/**
* This method updates the specified column to have a float value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateFloat(String columnName, float x) throws SQLException;
+ void updateFloat(String columnName, float value) throws SQLException;
/**
* This method updates the specified column to have a double value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateDouble(String columnName, double x) throws SQLException;
+ void updateDouble(String columnName, double value) throws SQLException;
/**
* This method updates the specified column to have a BigDecimal value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBigDecimal(String columnName, BigDecimal x)
+ void updateBigDecimal(String columnName, BigDecimal value)
throws SQLException;
/**
@@ -1119,55 +1120,55 @@ public interface ResultSet
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateString(String columnName, String x) throws SQLException;
+ void updateString(String columnName, String value) throws SQLException;
/**
* This method updates the specified column to have a byte array value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateBytes(String columnName, byte[] x) throws SQLException;
+ void updateBytes(String columnName, byte[] value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Date value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateDate(String columnName, Date x) throws SQLException;
+ void updateDate(String columnName, Date value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Time value. This
* does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateTime(String columnName, Time x) throws SQLException;
+ void updateTime(String columnName, Time value) throws SQLException;
/**
* This method updates the specified column to have a java.sql.Timestamp value.
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
* @exception SQLException If an error occurs.
*/
- void updateTimestamp(String columnName, Timestamp x)
+ void updateTimestamp(String columnName, Timestamp value)
throws SQLException;
/**
@@ -1175,12 +1176,12 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
+ * @param columnName The name of the column to update.
+ * @param stream The stream from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateAsciiStream(String columnName, InputStream x, int length)
+ void updateAsciiStream(String columnName, InputStream stream, int count)
throws SQLException;
/**
@@ -1188,12 +1189,12 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
+ * @param columnName The name of the column to update.
+ * @param stream The stream from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateBinaryStream(String columnName, InputStream x, int length)
+ void updateBinaryStream(String columnName, InputStream stream, int count)
throws SQLException;
/**
@@ -1201,25 +1202,26 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
- * @param value The new value of the column.
- * @param length The length of the stream.
- *
+ * @param columnName The name of the column to update.
+ * @param reader The reader from which the column value is updated.
+ * @param count The length of the stream.
* @exception SQLException If an error occurs.
*/
- void updateCharacterStream(String columnName, Reader reader,
- int length) throws SQLException;
+ void updateCharacterStream(String columnName, Reader reader, int count)
+ throws SQLException;
/**
* This method updates the specified column to have an Object value.
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
+ * @param scale The scale of the object in question, which is used only
+ * for numeric type objects.
* @exception SQLException If an error occurs.
*/
- void updateObject(String columnName, Object x, int scale)
+ void updateObject(String columnName, Object value, int scale)
throws SQLException;
/**
@@ -1227,13 +1229,11 @@ public interface ResultSet
* This does not update the actual database. <code>updateRow</code> must be
* called in order to do that.
*
- * @param name The name of the column to update.
+ * @param columnName The name of the column to update.
* @param value The new value of the column.
- * @param scale The scale of the object in question, which is used only
- * for numeric type objects.
* @exception SQLException If an error occurs.
*/
- void updateObject(String columnName, Object x) throws SQLException;
+ void updateObject(String columnName, Object value) throws SQLException;
/**
* This method inserts the current row into the database. The result set
@@ -1304,97 +1304,97 @@ public interface ResultSet
* This method returns the value of the specified column as a Java
* <code>Object</code> using the specified SQL type to Java type map.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @param map The SQL type to Java type map to use.
* @return The value of the column as an <code>Object</code>.
* @exception SQLException If an error occurs.
*/
- Object getObject(int i, Map map) throws SQLException;
+ Object getObject(int columnIndex, Map map) throws SQLException;
/**
* This method returns a <code>Ref</code> for the specified column which
* represents the structured type for the column.
*
- * @param index The index of the column to return.
+ * @param columnIndex The index of the column to return.
* @return A <code>Ref</code> object for the column
* @exception SQLException If an error occurs.
*/
- Ref getRef(int i) throws SQLException;
+ Ref getRef(int columnIndex) throws SQLException;
/**
* This method returns the specified column value as a BLOB.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @return The value of the column as a BLOB.
* @exception SQLException If an error occurs.
*/
- Blob getBlob(int i) throws SQLException;
+ Blob getBlob(int columnIndex) throws SQLException;
/**
* This method returns the specified column value as a CLOB.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @return The value of the column as a CLOB.
* @exception SQLException If an error occurs.
*/
- Clob getClob(int i) throws SQLException;
+ Clob getClob(int columnIndex) throws SQLException;
/**
* This method returns the specified column value as an <code>Array</code>.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @return The value of the column as an <code>Array</code>.
* @exception SQLException If an error occurs.
*/
- Array getArray(int i) throws SQLException;
+ Array getArray(int columnIndex) throws SQLException;
/**
* This method returns the value of the specified column as a Java
* <code>Object</code> using the specified SQL type to Java type map.
*
- * @param name The name of the column to return.
+ * @param columnName The name of the column to return.
* @param map The SQL type to Java type map to use.
* @return The value of the column as an <code>Object</code>.
* @exception SQLException If an error occurs.
*/
- Object getObject(String colName, Map map) throws SQLException;
+ Object getObject(String columnName, Map map) throws SQLException;
/**
* This method returns a <code>Ref</code> for the specified column which
* represents the structured type for the column.
*
- * @param index The index of the column to return.
+ * @param columnName The name of the column to return.
* @return A <code>Ref</code> object for the column
* @exception SQLException If an error occurs.
*/
- Ref getRef(String colName) throws SQLException;
+ Ref getRef(String columnName) throws SQLException;
/**
* This method returns the specified column value as a BLOB.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @return The value of the column as a BLOB.
* @exception SQLException If an error occurs.
*/
- Blob getBlob(String colName) throws SQLException;
+ Blob getBlob(String columnName) throws SQLException;
/**
* This method returns the specified column value as a CLOB.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @return The value of the column as a CLOB.
* @exception SQLException If an error occurs.
*/
- Clob getClob(String colName) throws SQLException;
+ Clob getClob(String columnName) throws SQLException;
/**
* This method returns the specified column value as an <code>Array</code>.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @return The value of the column as an <code>Array</code>.
* @exception SQLException If an error occurs.
*/
- Array getArray(String colName) throws SQLException;
+ Array getArray(String columnName) throws SQLException;
/**
* This method returns the specified column value as a
@@ -1402,7 +1402,7 @@ public interface ResultSet
* to generate a value for the date if the database does not support
* timezones.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
* @return The value of the column as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
@@ -1415,7 +1415,7 @@ public interface ResultSet
* to generate a value for the date if the database does not support
* timezones.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
* @return The value of the column as a <code>java.sql.Date</code>.
* @exception SQLException If an error occurs.
@@ -1428,7 +1428,7 @@ public interface ResultSet
* to generate a value for the time if the database does not support
* timezones.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
* @return The value of the column as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
@@ -1441,7 +1441,7 @@ public interface ResultSet
* to generate a value for the time if the database does not support
* timezones.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
* @return The value of the column as a <code>java.sql.Time</code>.
* @exception SQLException If an error occurs.
@@ -1454,7 +1454,7 @@ public interface ResultSet
* to generate a value for the timestamp if the database does not support
* timezones.
*
- * @param index The index of the column value to return.
+ * @param columnIndex The index of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
* @return The value of the column as a <code>java.sql.Timestamp</code>.
* @exception SQLException If an error occurs.
@@ -1468,7 +1468,7 @@ public interface ResultSet
* to generate a value for the timestamp if the database does not support
* timezones.
*
- * @param name The name of the column value to return.
+ * @param columnName The name of the column value to return.
* @param cal The <code>Calendar</code> to use for calculating timezones.
*
* @return The value of the column as a <code>java.sql.Timestamp</code>.
@@ -1479,52 +1479,132 @@ public interface ResultSet
throws SQLException;
/**
+ * This method returns the specified column value as a
+ * <code>java.net.URL</code>.
+ *
+ * @param columnIndex The index of the column value to return.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
URL getURL(int columnIndex) throws SQLException;
/**
+ * This method returns the specified column value as a
+ * <code>java.net.URL</code>.
+ *
+ * @param columnName The name of the column value to return.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
URL getURL(String columnName) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Ref</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnIndex The index of the column value to update.
+ * @parm value The <code>java.sql.Ref</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateRef(int columnIndex, Ref x) throws SQLException;
+ void updateRef(int columnIndex, Ref value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Ref</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnName The name of the column value to update.
+ * @parm value The <code>java.sql.Ref</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateRef(String columnName, Ref x) throws SQLException;
+ void updateRef(String columnName, Ref value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Blob</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnIndex The index of the column value to update.
+ * @parm value The <code>java.sql.Blob</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateBlob(int columnIndex, Blob x) throws SQLException;
+ void updateBlob(int columnIndex, Blob value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Blob</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnName The name of the column value to update.
+ * @parm value The <code>java.sql.Blob</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateBlob(String columnName, Blob x) throws SQLException;
+ void updateBlob(String columnName, Blob value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Clob</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnIndex The index of the column value to update.
+ * @parm value The <code>java.sql.Clob</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateClob(int columnIndex, Clob x) throws SQLException;
+ void updateClob(int columnIndex, Clob value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sql.Clob</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnName The name of the column value to update.
+ * @parm value The <code>java.sql.Clob</code> used to set the new value
+ * of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateClob(String columnName, Clob x) throws SQLException;
+ void updateClob(String columnName, Clob value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sqlArray</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnIndex The index of the column value to update.
+ * @parm value The new value of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateArray(int columnIndex, Array x) throws SQLException;
+ void updateArray(int columnIndex, Array value) throws SQLException;
/**
+ * This method updates the specified column to have a
+ * <code>java.sqlArray</code> value.
+ * This does not update the actual database. <code>updateRow</code> must be
+ * called in order to do that.
+ *
+ * @parm columnName The name of the column value to update.
+ * @parm value The new value of the column.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void updateArray(String columnName, Array x) throws SQLException;
+ void updateArray(String columnName, Array value) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/ResultSetMetaData.java b/libjava/classpath/java/sql/ResultSetMetaData.java
index 0086677..5a62c54 100644
--- a/libjava/classpath/java/sql/ResultSetMetaData.java
+++ b/libjava/classpath/java/sql/ResultSetMetaData.java
@@ -1,5 +1,5 @@
/* ResultSetMetaData.java -- Returns information about the ResultSet
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,8 +41,8 @@ package java.sql;
/**
* This interface provides a mechanism for obtaining information about
* the columns that are present in a <code>ResultSet</code>.
- * <p>
- * Note that in this class column indexes start at 1, not 0.
+ *
+ * <p> Note that in this class column indices start at 1, not 0.</p>
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
@@ -75,207 +75,207 @@ public interface ResultSetMetaData
* This method test whether or not the column is an auto-increment column.
* Auto-increment columns are read-only.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return <code>true</code> if the column is auto-increment, <code>false</code>
* otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isAutoIncrement(int column) throws SQLException;
+ boolean isAutoIncrement(int columnIndex) throws SQLException;
/**
* This method tests whether or not a column is case sensitive in its values.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return <code>true</code> if the column value is case sensitive,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isCaseSensitive(int column) throws SQLException;
+ boolean isCaseSensitive(int columnIndex) throws SQLException;
/**
* This method tests whether not the specified column can be used in
* a WHERE clause.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return <code>true</code> if the column may be used in a WHERE clause,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isSearchable(int column) throws SQLException;
+ boolean isSearchable(int columnIndex) throws SQLException;
/**
* This method tests whether or not the column stores a monetary value.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return <code>true</code> if the column contains a monetary value,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isCurrency(int column) throws SQLException;
+ boolean isCurrency(int columnIndex) throws SQLException;
/**
* This method returns a value indicating whether or not the specified
* column may contain a NULL value.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return A constant indicating whether or not the column can contain NULL,
* which will be one of <code>columnNoNulls</code>,
* <code>columnNullable</code>, or <code>columnNullableUnknown</code>.
* @exception SQLException If an error occurs.
*/
- int isNullable(int column) throws SQLException;
+ int isNullable(int columnIndex) throws SQLException;
/**
* This method tests whether or not the value of the specified column
* is signed or unsigned.
*
- * @param index The index of the column to test.
+ * @param columnIndex The index of the column to test.
* @return <code>true</code> if the column value is signed, <code>false</code>
* otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isSigned(int column) throws SQLException;
+ boolean isSigned(int columnIndex) throws SQLException;
/**
* This method returns the maximum number of characters that can be used
* to display a value in this column.
*
- * @param index The index of the column to check.
+ * @param columnIndex The index of the column to check.
* @return The maximum number of characters that can be used to display a
* value for this column.
* @exception SQLException If an error occurs.
*/
- int getColumnDisplaySize(int column) throws SQLException;
+ int getColumnDisplaySize(int columnIndex) throws SQLException;
/**
* This method returns a string that should be used as a caption for this
* column for user display purposes.
*
- * @param index The index of the column to check.
+ * @param columnIndex The index of the column to check.
* @return A display string for the column.
* @exception SQLException If an error occurs.
*/
- String getColumnLabel(int column) throws SQLException;
+ String getColumnLabel(int columnIndex) throws SQLException;
/**
* This method returns the name of the specified column.
*
- * @param index The index of the column to return the name of.
+ * @param columnIndex The index of the column to return the name of.
* @return The name of the column.
* @exception SQLException If an error occurs.
*/
- String getColumnName(int column) throws SQLException;
+ String getColumnName(int columnIndex) throws SQLException;
/**
* This method returns the name of the schema that contains the specified
* column.
*
- * @param index The index of the column to check the schema name for.
+ * @param columnIndex The index of the column to check the schema name for.
* @return The name of the schema that contains the column.
* @exception SQLException If an error occurs.
*/
- String getSchemaName(int column) throws SQLException;
+ String getSchemaName(int columnIndex) throws SQLException;
/**
* This method returns the precision of the specified column, which is the
* number of decimal digits it contains.
*
- * @param index The index of the column to check the precision on.
+ * @param columnIndex The index of the column to check the precision on.
* @return The precision of the specified column.
* @exception SQLException If an error occurs.
*/
- int getPrecision(int column) throws SQLException;
+ int getPrecision(int columnIndex) throws SQLException;
/**
* This method returns the scale of the specified column, which is the
* number of digits to the right of the decimal point.
*
- * @param index The index column to check the scale of.
+ * @param columnIndex The index column to check the scale of.
* @return The scale of the column.
* @exception SQLException If an error occurs.
*/
- int getScale(int column) throws SQLException;
+ int getScale(int columnIndex) throws SQLException;
/**
* This method returns the name of the table containing the specified
* column.
*
- * @param index The index of the column to check the table name for.
+ * @param columnIndex The index of the column to check the table name for.
* @return The name of the table containing the column.
* @exception SQLException If an error occurs.
*/
- String getTableName(int column) throws SQLException;
+ String getTableName(int columnIndex) throws SQLException;
/**
* This method returns the name of the catalog containing the specified
* column.
*
- * @param index The index of the column to check the catalog name for.
+ * @param columnIndex The index of the column to check the catalog name for.
* @return The name of the catalog containing the column.
* @exception SQLException If an error occurs.
*/
- String getCatalogName(int column) throws SQLException;
+ String getCatalogName(int columnIndex) throws SQLException;
/**
* This method returns the SQL type of the specified column. This will
* be one of the constants from <code>Types</code>.
*
- * @param index The index of the column to check the SQL type of.
+ * @param columnIndex The index of the column to check the SQL type of.
* @return The SQL type for this column.
* @exception SQLException If an error occurs.
* @see Types
*/
- int getColumnType(int column) throws SQLException;
+ int getColumnType(int columnIndex) throws SQLException;
/**
* This method returns the name of the SQL type for this column.
*
- * @param index The index of the column to check the SQL type name for.
+ * @param columnIndex The index of the column to check the SQL type name for.
* @return The name of the SQL type for this column.
* @exception SQLException If an error occurs.
*/
- String getColumnTypeName(int column) throws SQLException;
+ String getColumnTypeName(int columnIndex) throws SQLException;
/**
* This method tests whether or not the specified column is read only.
*
- * @param index The index of the column to check.
+ * @param columnIndex The index of the column to check.
* @return <code>true</code> if the column is read only, <code>false</code>
* otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isReadOnly(int column) throws SQLException;
+ boolean isReadOnly(int columnIndex) throws SQLException;
/**
* This method tests whether or not the column may be writable. This
* does not guarantee that a write will be successful.
*
- * @param index The index of the column to check for writability.
+ * @param columnIndex The index of the column to check for writability.
* @return <code>true</code> if the column may be writable,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isWritable(int column) throws SQLException;
+ boolean isWritable(int columnIndex) throws SQLException;
/**
* This method tests whether or not the column is writable. This
* does guarantee that a write will be successful.
*
- * @param index The index of the column to check for writability.
+ * @param columnIndex The index of the column to check for writability.
* @return <code>true</code> if the column is writable,
* <code>false</code> otherwise.
* @exception SQLException If an error occurs.
*/
- boolean isDefinitelyWritable(int column) throws SQLException;
+ boolean isDefinitelyWritable(int columnIndex) throws SQLException;
/**
* This method returns the name of the Java class which will be used to
* create objects representing the data in this column.
*
- * @param index The index of the column to check.
+ * @param columnIndex The index of the column to check.
* @return The name of the Java class that will be used for values in
* this column.
* @exception SQLException If an error occurs.
*/
- String getColumnClassName(int column) throws SQLException;
+ String getColumnClassName(int columnIndex) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/SQLData.java b/libjava/classpath/java/sql/SQLData.java
index 2ba1fb1..cf006e1 100644
--- a/libjava/classpath/java/sql/SQLData.java
+++ b/libjava/classpath/java/sql/SQLData.java
@@ -1,5 +1,5 @@
/* SQLData.java -- Custom mapping for a user defined datatype
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -57,7 +57,7 @@ public interface SQLData
* This method populates the data in the object from the specified stream.
*
* @param stream The stream to read the data from.
- * @param name The data type name of the data on the stream.
+ * @param typeName The data type name of the data on the stream.
* @exception SQLException If an error occurs.
*/
void readSQL(SQLInput stream, String typeName) throws SQLException;
diff --git a/libjava/classpath/java/sql/SQLOutput.java b/libjava/classpath/java/sql/SQLOutput.java
index 8e6c88f..e210258 100644
--- a/libjava/classpath/java/sql/SQLOutput.java
+++ b/libjava/classpath/java/sql/SQLOutput.java
@@ -1,5 +1,5 @@
/* SQLOutput.java -- Write SQL values to a stream
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -59,7 +59,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeString(String x) throws SQLException;
+ void writeString(String value) throws SQLException;
/**
* This method writes the specified Java <code>boolean</code>
@@ -68,7 +68,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeBoolean(boolean x) throws SQLException;
+ void writeBoolean(boolean value) throws SQLException;
/**
* This method writes the specified Java <code>byte</code>
@@ -77,7 +77,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeByte(byte x) throws SQLException;
+ void writeByte(byte value) throws SQLException;
/**
* This method writes the specified Java <code>short</code>
@@ -86,7 +86,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeShort(short x) throws SQLException;
+ void writeShort(short value) throws SQLException;
/**
* This method writes the specified Java <code>int</code>
@@ -95,7 +95,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeInt(int x) throws SQLException;
+ void writeInt(int value) throws SQLException;
/**
* This method writes the specified Java <code>long</code>
@@ -104,7 +104,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeLong(long x) throws SQLException;
+ void writeLong(long value) throws SQLException;
/**
* This method writes the specified Java <code>float</code>
@@ -113,7 +113,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeFloat(float x) throws SQLException;
+ void writeFloat(float value) throws SQLException;
/**
* This method writes the specified Java <code>double</code>
@@ -122,7 +122,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeDouble(double x) throws SQLException;
+ void writeDouble(double value) throws SQLException;
/**
* This method writes the specified Java <code>BigDecimal</code>
@@ -131,7 +131,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeBigDecimal(BigDecimal x) throws SQLException;
+ void writeBigDecimal(BigDecimal value) throws SQLException;
/**
* This method writes the specified Java <code>byte</code> array
@@ -140,7 +140,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeBytes(byte[] x) throws SQLException;
+ void writeBytes(byte[] value) throws SQLException;
/**
* This method writes the specified Java <code>java.sql.Date</code>
@@ -149,7 +149,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeDate(Date x) throws SQLException;
+ void writeDate(Date value) throws SQLException;
/**
* This method writes the specified Java <code>java.sql.Time</code>
@@ -158,7 +158,7 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeTime(Time x) throws SQLException;
+ void writeTime(Time value) throws SQLException;
/**
* This method writes the specified Java <code>java.sql.Timestamp</code>
@@ -167,34 +167,34 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeTimestamp(Timestamp x) throws SQLException;
+ void writeTimestamp(Timestamp value) throws SQLException;
/**
* This method writes the specified Java character stream
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param stream The stream that holds the character data to write.
* @exception SQLException If an error occurs.
*/
- void writeCharacterStream(Reader x) throws SQLException;
+ void writeCharacterStream(Reader stream) throws SQLException;
/**
* This method writes the specified ASCII text stream
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param stream The stream that holds the ASCII data to write.
* @exception SQLException If an error occurs.
*/
- void writeAsciiStream(InputStream x) throws SQLException;
+ void writeAsciiStream(InputStream stream) throws SQLException;
/**
* This method writes the specified uninterpreted binary byte stream
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param stream The stream that holds the binary data to write.
* @exception SQLException If an error occurs.
*/
- void writeBinaryStream(InputStream x) throws SQLException;
+ void writeBinaryStream(InputStream stream) throws SQLException;
/**
* This method writes the specified Java <code>SQLData</code> object
@@ -203,43 +203,48 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeObject(SQLData x) throws SQLException;
+ void writeObject(SQLData value) throws SQLException;
/**
* This method writes the specified Java SQL <code>Ref</code> object
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param value The <code>Ref</code> object to write to the stream.
* @exception SQLException If an error occurs.
+ * @see Ref
*/
- void writeRef(Ref x) throws SQLException;
+ void writeRef(Ref value) throws SQLException;
+
/**
* This method writes the specified Java SQL <code>Blob</code> object
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param value The <code>Blob</code> object to write to the stream.
* @exception SQLException If an error occurs.
+ * @see Blob
*/
- void writeBlob(Blob x) throws SQLException;
+ void writeBlob(Blob value) throws SQLException;
/**
* This method writes the specified Java SQL <code>Clob</code> object
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param value The <code>Clob</code> object to write to the stream.
* @exception SQLException If an error occurs.
+ * @see Clob
*/
- void writeClob(Clob x) throws SQLException;
+ void writeClob(Clob value) throws SQLException;
/**
* This method writes the specified Java SQL <code>Struct</code> object
* to the SQL stream.
*
- * @param value The value to write to the stream.
+ * @param value The <code>Struct</code> object to write to the stream.
* @exception SQLException If an error occurs.
+ * @see Struct
*/
- void writeStruct(Struct x) throws SQLException;
+ void writeStruct(Struct value) throws SQLException;
/**
* This method writes the specified Java SQL <code>Array</code> object
@@ -248,10 +253,15 @@ public interface SQLOutput
* @param value The value to write to the stream.
* @exception SQLException If an error occurs.
*/
- void writeArray(Array x) throws SQLException;
+ void writeArray(Array value) throws SQLException;
/**
+ * This method writes the specified <code>java.net.URL</code> object to the
+ * SQL stream.
+ *
+ * @param value The value to write to the stream.
+ * @exception SQLException If an error occurs.
* @since 1.4
*/
- void writeURL(URL x) throws SQLException;
+ void writeURL(URL value) throws SQLException;
}
diff --git a/libjava/classpath/java/sql/SQLWarning.java b/libjava/classpath/java/sql/SQLWarning.java
index 841d137..d9c7e35 100644
--- a/libjava/classpath/java/sql/SQLWarning.java
+++ b/libjava/classpath/java/sql/SQLWarning.java
@@ -1,5 +1,5 @@
/* SQLWarning.java -- Database access warnings.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,9 +56,9 @@ public class SQLWarning extends SQLException
* @param SQLState A string containing the SQL state of the error.
* @param vendorCode The vendor error code associated with this error.
*/
- public SQLWarning(String reason, String SQLState, int vendorCode)
+ public SQLWarning(String message, String SQLState, int vendorCode)
{
- super(reason, SQLState, vendorCode);
+ super(message, SQLState, vendorCode);
}
/**
diff --git a/libjava/classpath/java/sql/Statement.java b/libjava/classpath/java/sql/Statement.java
index 42e8e8e..195600ea 100644
--- a/libjava/classpath/java/sql/Statement.java
+++ b/libjava/classpath/java/sql/Statement.java
@@ -1,5 +1,5 @@
/* Statement.java -- Interface for executing SQL statements.
- Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -91,10 +91,10 @@ public interface Statement
/**
* This method sets the limit for the maximum length of any column in bytes.
*
- * @param maxsize The new maximum length of any column in bytes.
+ * @param maxSize The new maximum length of any column in bytes.
* @exception SQLException If an error occurs.
*/
- void setMaxFieldSize(int max) throws SQLException;
+ void setMaxFieldSize(int maxSize) throws SQLException;
/**
* This method returns the maximum possible number of rows in a result set.
@@ -108,20 +108,20 @@ public interface Statement
* This method sets the maximum number of rows that can be present in a
* result set.
*
- * @param maxrows The maximum possible number of rows in a result set.
+ * @param maxRows The maximum possible number of rows in a result set.
* @exception SQLException If an error occurs.
*/
- void setMaxRows(int max) throws SQLException;
+ void setMaxRows(int maxRows) throws SQLException;
/**
* This method sets the local escape processing mode on or off. The
* default value is on.
*
* @param escape <code>true</code> to enable local escape processing,
- * <code>false</code> to disable it.
+ * <code>false</code> to disable it.
* @exception SQLException If an error occurs.
*/
- void setEscapeProcessing(boolean enable) throws SQLException;
+ void setEscapeProcessing(boolean escape) throws SQLException;
/**
* The method returns the number of seconds a statement may be in process
@@ -136,7 +136,7 @@ public interface Statement
* This method sets the number of seconds a statement may be in process
* before timing out. A value of 0 means there is no timeout.
*
- * @param timeout The new SQL statement timeout value.
+ * @param seconds The new SQL statement timeout value.
* @exception SQLException If an error occurs.
*/
void setQueryTimeout(int seconds) throws SQLException;
@@ -192,7 +192,10 @@ public interface Statement
* @return The result set of the query, or <code>null</code> if there was
* no result set (for example, if the statement was an UPDATE).
* @exception SQLException If an error occurs.
- * @see execute
+ * @see #execute(String)
+ * @see #execute(String, int)
+ * @see #execute(String, int[])
+ * @see #execute(String, String[])
*/
ResultSet getResultSet() throws SQLException;
@@ -203,7 +206,10 @@ public interface Statement
* @return The update count of the query, or -1 if there was no update
* count (for example, if the statement was a SELECT).
* @exception SQLException If an error occurs.
- * @see execute
+ * @see #execute(String)
+ * @see #execute(String, int)
+ * @see #execute(String, int[])
+ * @see #execute(String, String[])
*/
int getUpdateCount() throws SQLException;
@@ -215,7 +221,10 @@ public interface Statement
* <code>false</code> otherwise (for example, the next result is an
* update count).
* @exception SQLException If an error occurs.
- * @see execute
+ * @see #execute(String)
+ * @see #execute(String, int)
+ * @see #execute(String, int[])
+ * @see #execute(String, String[])
*/
boolean getMoreResults() throws SQLException;
@@ -241,11 +250,11 @@ public interface Statement
* This method informs the driver how many rows it should fetch from the
* database at a time.
*
- * @param numrows The number of rows the driver should fetch at a time
- * to populate the result set.
+ * @param numRows The number of rows the driver should fetch at a time
+ * to populate the result set.
* @exception SQLException If an error occurs.
*/
- void setFetchSize(int rows) throws SQLException;
+ void setFetchSize(int numRows) throws SQLException;
/**
* This method returns the number of rows the driver believes should be
diff --git a/libjava/classpath/java/sql/Time.java b/libjava/classpath/java/sql/Time.java
index 5755152..2d1a433 100644
--- a/libjava/classpath/java/sql/Time.java
+++ b/libjava/classpath/java/sql/Time.java
@@ -1,5 +1,6 @@
/* Time.java -- Wrapper around java.util.Date
- Copyright (C) 1999, 2000, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2003, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -177,10 +178,10 @@ public class Time extends java.util.Date
/**
* This method initializes a new instance of this class with the
- * specified time value representing the number of seconds since
+ * specified time value representing the number of milliseconds since
* Jan 1, 1970 at 12:00 midnight GMT.
*
- * @param time The time value to intialize this <code>Time</code> to.
+ * @param date The time value to intialize this <code>Time</code> to.
*/
public Time(long date)
{
diff --git a/libjava/classpath/java/sql/Timestamp.java b/libjava/classpath/java/sql/Timestamp.java
index f3459b2..66a5764 100644
--- a/libjava/classpath/java/sql/Timestamp.java
+++ b/libjava/classpath/java/sql/Timestamp.java
@@ -1,5 +1,5 @@
/* Time.java -- Wrapper around java.util.Date
- Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -143,7 +143,7 @@ public class Timestamp extends java.util.Date
* specified time value representing the number of milliseconds since
* Jan 1, 1970 at 12:00 midnight GMT.
*
- * @param time The time value to intialize this <code>Time</code> to.
+ * @param date The time value to intialize this <code>Time</code> to.
*/
public Timestamp(long date)
{
@@ -279,12 +279,13 @@ public class Timestamp extends java.util.Date
}
/**
- * Compare two Timestamp
- * @param when the other Timestamp.
- * @return 0, if the date represented
- * by obj is exactly the same as the time represented by this
- * object, a negative if this Timestamp is before the other Timestamp, and
- * a positive value otherwise.
+ * Compares this <code>Timestamp</code> to another one.
+ *
+ * @param ts The other Timestamp.
+ * @return <code>0</code>, if both <code>Timestamp</code>'s represent exactly
+ * the same date, a negative value if this <code>Timestamp</code> is
+ * before the specified <code>Timestamp</code> and a positive value
+ * otherwise.
* @since 1.2
*/
public int compareTo(Timestamp ts)
@@ -297,15 +298,18 @@ public class Timestamp extends java.util.Date
}
/**
- * Compares this Timestamp to another. This behaves like
+ * Compares this <code>Timestamp</code> to another one. This behaves like
* <code>compareTo(Timestamp)</code>, but it may throw a
- * <code>ClassCastException</code>
- * @param obj the other Timestamp.
- * @return 0, if the Timestamp represented
- * by obj is exactly the same as the time represented by this
- * object, a negative if this Timestamp is before the other Timestamp, and
- * a positive value otherwise.
+ * <code>ClassCastException</code>, if the specified object is not of type
+ * <code>Timestamp</code>.
+ *
+ * @param obj The object to compare with.
+ * @return <code>0</code>, if both <code>Timestamp</code>'s represent exactly
+ * the same date, a negative value if this <code>Timestamp</code> is
+ * before the specified <code>Timestamp</code> and a positive value
+ * otherwise.
* @exception ClassCastException if obj is not of type Timestamp.
+ * @see #compareTo(Timestamp)
* @since 1.2
*/
public int compareTo(Object obj)
diff --git a/libjava/classpath/java/text/AttributedCharacterIterator.java b/libjava/classpath/java/text/AttributedCharacterIterator.java
index 8413c20..37c7450 100644
--- a/libjava/classpath/java/text/AttributedCharacterIterator.java
+++ b/libjava/classpath/java/text/AttributedCharacterIterator.java
@@ -127,13 +127,13 @@ public interface AttributedCharacterIterator extends CharacterIterator
*/
protected Object readResolve() throws InvalidObjectException
{
- if (this.equals (READING))
+ if (getName().equals(READING.getName()))
return READING;
- if (this.equals (LANGUAGE))
+ if (getName().equals(LANGUAGE.getName()))
return LANGUAGE;
- if (this.equals (INPUT_METHOD_SEGMENT))
+ if (getName().equals(INPUT_METHOD_SEGMENT.getName()))
return INPUT_METHOD_SEGMENT;
throw new InvalidObjectException ("Can't resolve Attribute: "
diff --git a/libjava/classpath/java/text/Bidi.java b/libjava/classpath/java/text/Bidi.java
index 57b9a88..4374360 100644
--- a/libjava/classpath/java/text/Bidi.java
+++ b/libjava/classpath/java/text/Bidi.java
@@ -1,5 +1,5 @@
/* Bidi.java -- Bidirectional Algorithm implementation
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,18 +38,939 @@ exception statement from your version. */
package java.text;
+import java.awt.font.NumericShaper;
+import java.awt.font.TextAttribute;
+import java.util.ArrayList;
+
+
/**
* Bidirectional Algorithm implementation.
*
- * TODO/FIXME Only one method <code>requiresBidi</code> is implemented
- * for now by using <code>Character</code>. The full algorithm is <a
- * href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard
- * Annex #9: The Bidirectional Algorithm</a>. A full implementation is
- * <a href="http://fribidi.org/">GNU FriBidi</a>.
+ * The full algorithm is
+ * <a href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard
+ * Annex #9: The Bidirectional Algorithm</a>.
+ *
+ * @since 1.4
*/
-public class Bidi
+public final class Bidi
{
/**
+ * This indicates that a strongly directional character in the text should
+ * set the initial direction, but if no such character is found, then the
+ * initial direction will be left-to-right.
+ */
+ public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = -2;
+
+ /**
+ * This indicates that a strongly directional character in the text should
+ * set the initial direction, but if no such character is found, then the
+ * initial direction will be right-to-left.
+ */
+ public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = -1;
+
+ /**
+ * This indicates that the initial direction should be left-to-right.
+ */
+ public static final int DIRECTION_LEFT_TO_RIGHT = 0;
+
+ /**
+ * This indicates that the initial direction should be right-to-left.
+ */
+ public static final int DIRECTION_RIGHT_TO_LEFT = 1;
+
+ // Flags used when computing the result.
+ private static final int LTOR = 1 << DIRECTION_LEFT_TO_RIGHT;
+ private static final int RTOL = 1 << DIRECTION_RIGHT_TO_LEFT;
+
+ // The text we are examining, and the starting offset.
+ // If we had a better way to handle createLineBidi, we wouldn't
+ // need this at all -- which for the String case would be an
+ // efficiency win.
+ private char[] text;
+ private int textOffset;
+ // The embeddings corresponding to the text, and the starting offset.
+ private byte[] embeddings;
+ private int embeddingOffset;
+ // The length of the text (and embeddings) to use.
+ private int length;
+ // The flags.
+ private int flags;
+
+ // All instance fields following this point are initialized
+ // during analysis. Fields before this must be set by the constructor.
+
+ // The initial embedding level.
+ private int baseEmbedding;
+ // The type of each character in the text.
+ private byte[] types;
+ // The levels we compute.
+ private byte[] levels;
+
+ // A list of indices where a formatting code was found. These
+ // are indicies into the original text -- not into the text after
+ // the codes have been removed.
+ private ArrayList formatterIndices;
+
+ // Indices of the starts of runs in the text.
+ private int[] runs;
+
+ // A convenience field where we keep track of what kinds of runs
+ // we've seen.
+ private int resultFlags;
+
+ /**
+ * Create a new Bidi object given an attributed character iterator.
+ * This constructor will examine various attributes of the text:
+ * <ul>
+ * <li> {@link TextAttribute#RUN_DIRECTION} is used to determine the
+ * paragraph's base embedding level. This constructor will recognize
+ * either {@link TextAttribute#RUN_DIRECTION_LTR} or
+ * {@link TextAttribute#RUN_DIRECTION_RTL}. If neither is given,
+ * {@link #DIRECTION_DEFAULT_LEFT_TO_RIGHT} is assumed.
+ * </li>
+ *
+ * <li> If {@link TextAttribute#NUMERIC_SHAPING} is seen, then numeric
+ * shaping will be done before the Bidi algorithm is run.
+ * </li>
+ *
+ * <li> If {@link TextAttribute#BIDI_EMBEDDING} is seen on a given
+ * character, then the value of this attribute will be used as an
+ * embedding level override.
+ * </li>
+ * </ul>
+ * @param iter the attributed character iterator to use
+ */
+ public Bidi(AttributedCharacterIterator iter)
+ {
+ // If set, this attribute should be set on all characters.
+ // We don't check this (should we?) but we do assume that we
+ // can simply examine the first character.
+ Object val = iter.getAttribute(TextAttribute.RUN_DIRECTION);
+ if (val == TextAttribute.RUN_DIRECTION_LTR)
+ this.flags = DIRECTION_LEFT_TO_RIGHT;
+ else if (val == TextAttribute.RUN_DIRECTION_RTL)
+ this.flags = DIRECTION_RIGHT_TO_LEFT;
+ else
+ this.flags = DIRECTION_DEFAULT_LEFT_TO_RIGHT;
+
+ // Likewise this attribute should be specified on the whole text.
+ // We read it here and then, if it is set, we apply the numeric shaper
+ // to the text before processing it.
+ NumericShaper shaper = null;
+ val = iter.getAttribute(TextAttribute.NUMERIC_SHAPING);
+ if (val instanceof NumericShaper)
+ shaper = (NumericShaper) val;
+
+ char[] text = new char[iter.getEndIndex() - iter.getBeginIndex()];
+ this.embeddings = new byte[this.text.length];
+ this.embeddingOffset = 0;
+ this.length = text.length;
+ for (int i = 0; i < this.text.length; ++i)
+ {
+ this.text[i] = iter.current();
+
+ val = iter.getAttribute(TextAttribute.BIDI_EMBEDDING);
+ if (val instanceof Integer)
+ {
+ int ival = ((Integer) val).intValue();
+ byte bval;
+ if (ival < -62 || ival > 62)
+ bval = 0;
+ else
+ bval = (byte) ival;
+ this.embeddings[i] = bval;
+ }
+ }
+
+ // Invoke the numeric shaper, if specified.
+ if (shaper != null)
+ shaper.shape(this.text, 0, this.length);
+
+ runBidi();
+ }
+
+ /**
+ * Create a new Bidi object with the indicated text and, possibly, explicit
+ * embedding settings.
+ *
+ * If the embeddings array is null, it is ignored. Otherwise it is taken to
+ * be explicit embedding settings corresponding to the text. Positive values
+ * from 1 to 61 are embedding levels, and negative values from -1 to -61 are
+ * embedding overrides. (FIXME: not at all clear what this really means.)
+ *
+ * @param text the text to use
+ * @param offset the offset of the first character of the text
+ * @param embeddings the explicit embeddings, or null if there are none
+ * @param embedOffset the offset of the first embedding value to use
+ * @param length the length of both the text and the embeddings
+ * @param flags a flag indicating the base embedding direction
+ */
+ public Bidi(char[] text, int offset, byte[] embeddings, int embedOffset,
+ int length, int flags)
+ {
+ if (flags != DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ && flags != DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ && flags != DIRECTION_LEFT_TO_RIGHT
+ && flags != DIRECTION_RIGHT_TO_LEFT)
+ throw new IllegalArgumentException("unrecognized 'flags' argument: "
+ + flags);
+ this.text = text;
+ this.textOffset = offset;
+ this.embeddings = embeddings;
+ this.embeddingOffset = embedOffset;
+ this.length = length;
+ this.flags = flags;
+
+ runBidi();
+ }
+
+ /**
+ * Create a new Bidi object using the contents of the given String
+ * as the text.
+ * @param text the text to use
+ * @param flags a flag indicating the base embedding direction
+ */
+ public Bidi(String text, int flags)
+ {
+ if (flags != DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ && flags != DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ && flags != DIRECTION_LEFT_TO_RIGHT
+ && flags != DIRECTION_RIGHT_TO_LEFT)
+ throw new IllegalArgumentException("unrecognized 'flags' argument: "
+ + flags);
+
+ // This is inefficient, but it isn't clear whether it matters.
+ // If it does we can change our implementation a bit to allow either
+ // a String or a char[].
+ this.text = text.toCharArray();
+ this.textOffset = 0;
+ this.embeddings = null;
+ this.embeddingOffset = 0;
+ this.length = text.length();
+ this.flags = flags;
+
+ runBidi();
+ }
+
+ /**
+ * Implementation function which computes the initial type of
+ * each character in the input.
+ */
+ private void computeTypes()
+ {
+ types = new byte[length];
+ for (int i = 0; i < length; ++i)
+ types[i] = Character.getDirectionality(text[textOffset + i]);
+ }
+
+ /**
+ * An internal function which implements rules P2 and P3.
+ * This computes the base embedding level.
+ * @return the paragraph's base embedding level
+ */
+ private int computeParagraphEmbeddingLevel()
+ {
+ // First check to see if the user supplied a directionality override.
+ if (flags == DIRECTION_LEFT_TO_RIGHT
+ || flags == DIRECTION_RIGHT_TO_LEFT)
+ return flags;
+
+ // This implements rules P2 and P3.
+ // (Note that we don't need P1, as the user supplies
+ // a paragraph.)
+ for (int i = 0; i < length; ++i)
+ {
+ int dir = types[i];
+ if (dir == Character.DIRECTIONALITY_LEFT_TO_RIGHT)
+ return DIRECTION_LEFT_TO_RIGHT;
+ if (dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT
+ || dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT)
+ return DIRECTION_RIGHT_TO_LEFT;
+ }
+ return (flags == DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ ? DIRECTION_LEFT_TO_RIGHT
+ : DIRECTION_RIGHT_TO_LEFT);
+ }
+
+ /**
+ * An internal function which implements rules X1 through X9.
+ * This computes the initial levels for the text, handling
+ * explicit overrides and embeddings.
+ */
+ private void computeExplicitLevels()
+ {
+ levels = new byte[length];
+ byte currentEmbedding = (byte) baseEmbedding;
+ // The directional override is a Character directionality
+ // constant. -1 means there is no override.
+ byte directionalOverride = -1;
+ // The stack of pushed embeddings, and the stack pointer.
+ // Note that because the direction is inherent in the depth,
+ // and because we have a bit left over in a byte, we can encode
+ // the override, if any, directly in this value on the stack.
+ final int MAX_DEPTH = 62;
+ byte[] embeddingStack = new byte[MAX_DEPTH];
+ int sp = 0;
+
+ for (int i = 0; i < length; ++i)
+ {
+ // If we see an explicit embedding, we use that, even if
+ // the current character is itself a directional override.
+ if (embeddings != null && embeddings[embeddingOffset + i] != 0)
+ {
+ // It isn't at all clear what we're supposed to do here.
+ // What does a negative value really mean?
+ // Should we push on the embedding stack here?
+ currentEmbedding = embeddings[embeddingOffset + i];
+ if (currentEmbedding < 0)
+ {
+ currentEmbedding = (byte) -currentEmbedding;
+ directionalOverride
+ = (((currentEmbedding % 2) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+ }
+ else
+ directionalOverride = -1;
+ continue;
+ }
+ // No explicit embedding.
+ boolean isLtoR = false;
+ boolean isSpecial = true;
+ switch (types[i])
+ {
+ case Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING:
+ case Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE:
+ isLtoR = true;
+ // Fall through.
+ case Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING:
+ case Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE:
+ {
+ byte newEmbedding;
+ if (isLtoR)
+ {
+ // Least greater even.
+ newEmbedding = (byte) ((currentEmbedding & ~1) + 2);
+ }
+ else
+ {
+ // Least greater odd.
+ newEmbedding = (byte) ((currentEmbedding + 1) | 1);
+ }
+ // FIXME: we don't properly handle invalid pushes.
+ if (newEmbedding < MAX_DEPTH)
+ {
+ // The new level is valid. Push the old value.
+ // See above for a comment on the encoding here.
+ if (directionalOverride != -1)
+ currentEmbedding |= Byte.MIN_VALUE;
+ embeddingStack[sp++] = currentEmbedding;
+ currentEmbedding = newEmbedding;
+ if (types[i] == Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE)
+ directionalOverride = Character.DIRECTIONALITY_LEFT_TO_RIGHT;
+ else if (types[i] == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE)
+ directionalOverride = Character.DIRECTIONALITY_RIGHT_TO_LEFT;
+ else
+ directionalOverride = -1;
+ }
+ }
+ break;
+ case Character.DIRECTIONALITY_POP_DIRECTIONAL_FORMAT:
+ {
+ // FIXME: we don't properly handle a pop with a corresponding
+ // invalid push.
+ if (sp == 0)
+ {
+ // We saw a pop without a push. Just ignore it.
+ break;
+ }
+ byte newEmbedding = embeddingStack[--sp];
+ currentEmbedding = (byte) (newEmbedding & 0x7f);
+ if (newEmbedding < 0)
+ directionalOverride
+ = (((newEmbedding & 1) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+ else
+ directionalOverride = -1;
+ }
+ break;
+ default:
+ isSpecial = false;
+ break;
+ }
+ levels[i] = currentEmbedding;
+ if (isSpecial)
+ {
+ // Mark this character for removal.
+ if (formatterIndices == null)
+ formatterIndices = new ArrayList();
+ formatterIndices.add(Integer.valueOf(i));
+ }
+ else if (directionalOverride != -1)
+ types[i] = directionalOverride;
+ }
+
+ // Remove the formatting codes and update both the arrays
+ // and 'length'. It would be more efficient not to remove
+ // these codes, but it is also more complicated. Also, the
+ // Unicode algorithm reference does not properly describe
+ // how this is to be done -- from what I can tell, their suggestions
+ // in this area will not yield the correct results.
+ if (formatterIndices == null)
+ return;
+ int output = 0, input = 0;
+ final int size = formatterIndices.size();
+ for (int i = 0; i <= size; ++i)
+ {
+ int nextFmt;
+ if (i == size)
+ nextFmt = length;
+ else
+ nextFmt = ((Integer) formatterIndices.get(i)).intValue();
+ // Non-formatter codes are from 'input' to 'nextFmt'.
+ int len = nextFmt - input;
+ System.arraycopy(levels, input, levels, output, len);
+ System.arraycopy(types, input, types, output, len);
+ output += len;
+ input = nextFmt + 1;
+ }
+ length -= formatterIndices.size();
+ }
+
+ /**
+ * An internal function to compute the boundaries of runs
+ * in the text. It isn't strictly necessary to do this, but
+ * it lets us write some following passes in a less complicated
+ * way. Also it lets us efficiently implement some of the public
+ * methods. A run is simply a sequence of characters at the
+ * same level.
+ */
+ private void computeRuns()
+ {
+ int runCount = 0;
+ int currentEmbedding = baseEmbedding;
+ for (int i = 0; i < length; ++i)
+ {
+ if (levels[i] != currentEmbedding)
+ {
+ currentEmbedding = levels[i];
+ ++runCount;
+ }
+ }
+
+ // This may be called multiple times. If so, and if
+ // the number of runs has not changed, then don't bother
+ // allocating a new array.
+ if (runs == null || runs.length != runCount + 1)
+ runs = new int[runCount + 1];
+ int where = 0;
+ int lastRunStart = 0;
+ currentEmbedding = baseEmbedding;
+ for (int i = 0; i < length; ++i)
+ {
+ if (levels[i] != currentEmbedding)
+ {
+ runs[where++] = lastRunStart;
+ lastRunStart = i;
+ currentEmbedding = levels[i];
+ }
+ }
+ runs[where++] = lastRunStart;
+ }
+
+ /**
+ * An internal method to resolve weak types. This implements
+ * rules W1 through W7.
+ */
+ private void resolveWeakTypes()
+ {
+ final int runCount = getRunCount();
+
+ int previousLevel = baseEmbedding;
+ for (int run = 0; run < runCount; ++run)
+ {
+ int start = getRunStart(run);
+ int end = getRunLimit(run);
+ int level = getRunLevel(run);
+
+ // These are the names used in the Bidi algorithm.
+ byte sor = (((Math.max(previousLevel, level) % 2) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+ int nextLevel;
+ if (run == runCount - 1)
+ nextLevel = baseEmbedding;
+ else
+ nextLevel = getRunLevel(run + 1);
+ byte eor = (((Math.max(level, nextLevel) % 2) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+
+ byte prevType = sor;
+ byte prevStrongType = sor;
+ for (int i = start; i < end; ++i)
+ {
+ final byte nextType = (i == end - 1) ? eor : types[i + 1];
+
+ // Rule W1: change NSM to the prevailing direction.
+ if (types[i] == Character.DIRECTIONALITY_NONSPACING_MARK)
+ types[i] = prevType;
+ else
+ prevType = types[i];
+
+ // Rule W2: change EN to AN in some cases.
+ if (types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ {
+ if (prevStrongType == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC)
+ types[i] = Character.DIRECTIONALITY_ARABIC_NUMBER;
+ }
+ else if (types[i] == Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ || types[i] == Character.DIRECTIONALITY_RIGHT_TO_LEFT
+ || types[i] == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC)
+ prevStrongType = types[i];
+
+ // Rule W3: change AL to R.
+ if (types[i] == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC)
+ types[i] = Character.DIRECTIONALITY_RIGHT_TO_LEFT;
+
+ // Rule W4: handle separators between two numbers.
+ if (prevType == Character.DIRECTIONALITY_EUROPEAN_NUMBER
+ && nextType == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ {
+ if (types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR
+ || types[i] == Character.DIRECTIONALITY_COMMON_NUMBER_SEPARATOR)
+ types[i] = nextType;
+ }
+ else if (prevType == Character.DIRECTIONALITY_ARABIC_NUMBER
+ && nextType == Character.DIRECTIONALITY_ARABIC_NUMBER
+ && types[i] == Character.DIRECTIONALITY_COMMON_NUMBER_SEPARATOR)
+ types[i] = nextType;
+
+ // Rule W5: change a sequence of european terminators to
+ // european numbers, if they are adjacent to european numbers.
+ // We also include BN characters in this.
+ if (types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
+ || types[i] == Character.DIRECTIONALITY_BOUNDARY_NEUTRAL)
+ {
+ if (prevType == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ types[i] = prevType;
+ else
+ {
+ // Look ahead to see if there is an EN terminating this
+ // sequence of ETs.
+ int j = i + 1;
+ while (j < end
+ && (types[j] == Character.DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
+ || types[j] == Character.DIRECTIONALITY_BOUNDARY_NEUTRAL))
+ ++j;
+ if (j < end
+ && types[j] == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ {
+ // Change them all to EN now.
+ for (int k = i; k < j; ++k)
+ types[k] = Character.DIRECTIONALITY_EUROPEAN_NUMBER;
+ }
+ }
+ }
+
+ // Rule W6: separators and terminators change to ON.
+ // Again we include BN.
+ if (types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
+ || types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR
+ || types[i] == Character.DIRECTIONALITY_COMMON_NUMBER_SEPARATOR
+ || types[i] == Character.DIRECTIONALITY_BOUNDARY_NEUTRAL)
+ types[i] = Character.DIRECTIONALITY_OTHER_NEUTRALS;
+
+ // Rule W7: change european number types.
+ if (prevStrongType == Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ && types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ types[i] = prevStrongType;
+ }
+
+ previousLevel = level;
+ }
+ }
+
+ /**
+ * An internal method to resolve neutral types. This implements
+ * rules N1 and N2.
+ */
+ private void resolveNeutralTypes()
+ {
+ // This implements rules N1 and N2.
+ final int runCount = getRunCount();
+
+ int previousLevel = baseEmbedding;
+ for (int run = 0; run < runCount; ++run)
+ {
+ int start = getRunStart(run);
+ int end = getRunLimit(run);
+ int level = getRunLevel(run);
+
+ byte embeddingDirection
+ = (((level % 2) == 0) ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+ // These are the names used in the Bidi algorithm.
+ byte sor = (((Math.max(previousLevel, level) % 2) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+ int nextLevel;
+ if (run == runCount - 1)
+ nextLevel = baseEmbedding;
+ else
+ nextLevel = getRunLevel(run + 1);
+ byte eor = (((Math.max(level, nextLevel) % 2) == 0)
+ ? Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ : Character.DIRECTIONALITY_RIGHT_TO_LEFT);
+
+ byte prevStrong = sor;
+ int neutralStart = -1;
+ for (int i = start; i <= end; ++i)
+ {
+ byte newStrong = -1;
+ byte thisType = i == end ? eor : types[i];
+ switch (thisType)
+ {
+ case Character.DIRECTIONALITY_LEFT_TO_RIGHT:
+ newStrong = Character.DIRECTIONALITY_LEFT_TO_RIGHT;
+ break;
+ case Character.DIRECTIONALITY_RIGHT_TO_LEFT:
+ case Character.DIRECTIONALITY_ARABIC_NUMBER:
+ case Character.DIRECTIONALITY_EUROPEAN_NUMBER:
+ newStrong = Character.DIRECTIONALITY_RIGHT_TO_LEFT;
+ break;
+ case Character.DIRECTIONALITY_BOUNDARY_NEUTRAL:
+ case Character.DIRECTIONALITY_OTHER_NEUTRALS:
+ case Character.DIRECTIONALITY_SEGMENT_SEPARATOR:
+ case Character.DIRECTIONALITY_PARAGRAPH_SEPARATOR:
+ if (neutralStart == -1)
+ neutralStart = i;
+ break;
+ }
+ // If we see a strong character, update all the neutrals.
+ if (newStrong != -1)
+ {
+ if (neutralStart != -1)
+ {
+ byte override = (prevStrong == newStrong
+ ? prevStrong
+ : embeddingDirection);
+ for (int j = neutralStart; j < i; ++j)
+ types[i] = override;
+ }
+ prevStrong = newStrong;
+ neutralStart = -1;
+ }
+ }
+
+ previousLevel = level;
+ }
+ }
+
+ /**
+ * An internal method to resolve implicit levels.
+ * This implements rules I1 and I2.
+ */
+ private void resolveImplicitLevels()
+ {
+ // This implements rules I1 and I2.
+ for (int i = 0; i < length; ++i)
+ {
+ if ((levels[i] & 1) == 0)
+ {
+ if (types[i] == Character.DIRECTIONALITY_RIGHT_TO_LEFT)
+ ++levels[i];
+ else if (types[i] == Character.DIRECTIONALITY_ARABIC_NUMBER
+ || types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ levels[i] += 2;
+ }
+ else
+ {
+ if (types[i] == Character.DIRECTIONALITY_LEFT_TO_RIGHT
+ || types[i] == Character.DIRECTIONALITY_ARABIC_NUMBER
+ || types[i] == Character.DIRECTIONALITY_EUROPEAN_NUMBER)
+ ++levels[i];
+ }
+
+ // Update the result flags.
+ resultFlags |= 1 << (levels[i] & 1);
+ }
+ // One final update of the result flags, using the base level.
+ resultFlags |= 1 << baseEmbedding;
+ }
+
+ /**
+ * This reinserts the formatting codes that we removed early on.
+ * Actually it does not insert formatting codes per se, but rather
+ * simply inserts new levels at the appropriate locations in the
+ * 'levels' array.
+ */
+ private void reinsertFormattingCodes()
+ {
+ if (formatterIndices == null)
+ return;
+ int input = length;
+ int output = levels.length;
+ // Process from the end as we are copying the array over itself here.
+ for (int index = formatterIndices.size() - 1; index >= 0; --index)
+ {
+ int nextFmt = ((Integer) formatterIndices.get(index)).intValue();
+
+ // nextFmt points to a location in the original array. So,
+ // nextFmt+1 is the target of our copying. output is the location
+ // to which we last copied, thus we can derive the length of the
+ // copy from it.
+ int len = output - nextFmt - 1;
+ output = nextFmt;
+ input -= len;
+ // Note that we no longer need 'types' at this point, so we
+ // only edit 'levels'.
+ if (nextFmt + 1 < levels.length)
+ System.arraycopy(levels, input, levels, nextFmt + 1, len);
+
+ // Now set the level at the reinsertion point.
+ int rightLevel;
+ if (output == levels.length - 1)
+ rightLevel = baseEmbedding;
+ else
+ rightLevel = levels[output + 1];
+ int leftLevel;
+ if (input == 0)
+ leftLevel = baseEmbedding;
+ else
+ leftLevel = levels[input];
+ levels[output] = (byte) Math.max(leftLevel, rightLevel);
+ }
+ length = levels.length;
+ }
+
+ /**
+ * This is the main internal entry point. After a constructor
+ * has initialized the appropriate local state, it will call
+ * this method to do all the work.
+ */
+ private void runBidi()
+ {
+ computeTypes();
+ baseEmbedding = computeParagraphEmbeddingLevel();
+ computeExplicitLevels();
+ computeRuns();
+ resolveWeakTypes();
+ resolveNeutralTypes();
+ resolveImplicitLevels();
+ // We're done with the types. Let the GC clean up.
+ types = null;
+ reinsertFormattingCodes();
+ // After resolving the implicit levels, the number
+ // of runs may have changed.
+ computeRuns();
+ }
+
+ /**
+ * Return true if the paragraph base embedding is left-to-right,
+ * false otherwise.
+ */
+ public boolean baseIsLeftToRight()
+ {
+ return baseEmbedding == DIRECTION_LEFT_TO_RIGHT;
+ }
+
+ /**
+ * Create a new Bidi object for a single line of text, taken
+ * from the text used when creating the current Bidi object.
+ * @param start the index of the first character of the line
+ * @param end the index of the final character of the line
+ * @return a new Bidi object for the indicated line of text
+ */
+ public Bidi createLineBidi(int start, int end)
+ {
+ // This isn't the most efficient implementation possible.
+ // This probably does not matter, so we choose simplicity instead.
+ int level = getLevelAt(start);
+ int flag = (((level % 2) == 0)
+ ? DIRECTION_LEFT_TO_RIGHT
+ : DIRECTION_RIGHT_TO_LEFT);
+ return new Bidi(text, textOffset + start,
+ embeddings, embeddingOffset + start,
+ end - start, flag);
+ }
+
+ /**
+ * Return the base embedding level of the paragraph.
+ */
+ public int getBaseLevel()
+ {
+ return baseEmbedding;
+ }
+
+ /**
+ * Return the length of the paragraph, in characters.
+ */
+ public int getLength()
+ {
+ return length;
+ }
+
+ /**
+ * Return the level at the indicated character. If the
+ * supplied index is less than zero or greater than the length
+ * of the text, then the paragraph's base embedding level will
+ * be returned.
+ * @param offset the character to examine
+ * @return the level of that character
+ */
+ public int getLevelAt(int offset)
+ {
+ if (offset < 0 || offset >= length)
+ return getBaseLevel();
+ return levels[offset];
+ }
+
+ /**
+ * Return the number of runs in the result. A run is
+ * a sequence of characters at the same embedding level.
+ */
+ public int getRunCount()
+ {
+ return runs.length;
+ }
+
+ /**
+ * Return the level of the indicated run.
+ * @param which the run to examine
+ * @return the level of that run
+ */
+ public int getRunLevel(int which)
+ {
+ return levels[runs[which]];
+ }
+
+ /**
+ * Return the index of the character just following the end
+ * of the indicated run.
+ * @param which the run to examine
+ * @return the index of the character after the final character
+ * of the run
+ */
+ public int getRunLimit(int which)
+ {
+ if (which == runs.length - 1)
+ return length;
+ return runs[which + 1];
+ }
+
+ /**
+ * Return the index of the first character in the indicated run.
+ * @param which the run to examine
+ * @return the index of the first character of the run
+ */
+ public int getRunStart(int which)
+ {
+ return runs[which];
+ }
+
+ /**
+ * Return true if the text is entirely left-to-right, and the
+ * base embedding is also left-to-right.
+ */
+ public boolean isLeftToRight()
+ {
+ return resultFlags == LTOR;
+ }
+
+ /**
+ * Return true if the text consists of mixed left-to-right and
+ * right-to-left runs, or if the text consists of one kind of run
+ * which differs from the base embedding direction.
+ */
+ public boolean isMixed()
+ {
+ return resultFlags == (LTOR | RTOL);
+ }
+
+ /**
+ * Return true if the text is entirely right-to-left, and the
+ * base embedding is also right-to-left.
+ */
+ public boolean isRightToLeft()
+ {
+ return resultFlags == RTOL;
+ }
+
+ /**
+ * Return a String describing the internal state of this object.
+ * This is only useful for debugging.
+ */
+ public String toString()
+ {
+ return "Bidi Bidi Bidi I like you, Buck!";
+ }
+
+ /**
+ * Reorder objects according to the levels passed in. This implements
+ * reordering as defined by the Unicode bidirectional layout specification.
+ * The levels are integers from 0 to 62; even numbers represent left-to-right
+ * runs, and odd numbers represent right-to-left runs.
+ *
+ * @param levels the levels associated with each object
+ * @param levelOffset the index of the first level to use
+ * @param objs the objects to reorder according to the levels
+ * @param objOffset the index of the first object to use
+ * @param count the number of objects (and levels) to manipulate
+ */
+ public static void reorderVisually(byte[] levels, int levelOffset,
+ Object[] objs, int objOffset, int count)
+ {
+ // We need a copy of the 'levels' array, as we are going to modify it.
+ // This is unfortunate but difficult to avoid.
+ byte[] levelCopy = new byte[count];
+ // Do this explicitly so we can also find the maximum depth at the
+ // same time.
+ int max = 0;
+ int lowestOdd = 63;
+ for (int i = 0; i < count; ++i)
+ {
+ levelCopy[i] = levels[levelOffset + i];
+ max = Math.max(levelCopy[i], max);
+ if (levelCopy[i] % 2 != 0)
+ lowestOdd = Math.min(lowestOdd, levelCopy[i]);
+ }
+
+ // Reverse the runs starting with the deepest.
+ for (int depth = max; depth >= lowestOdd; --depth)
+ {
+ int start = 0;
+ while (start < count)
+ {
+ // Find the start of a run >= DEPTH.
+ while (start < count && levelCopy[start] < depth)
+ ++start;
+ if (start == count)
+ break;
+ // Find the end of the run.
+ int end = start + 1;
+ while (end < count && levelCopy[end] >= depth)
+ ++end;
+
+ // Reverse this run.
+ for (int i = 0; i < (end - start) / 2; ++i)
+ {
+ byte tmpb = levelCopy[end - i - 1];
+ levelCopy[end - i - 1] = levelCopy[start + i];
+ levelCopy[start + i] = tmpb;
+ Object tmpo = objs[objOffset + end - i - 1];
+ objs[objOffset + end - i - 1] = objs[objOffset + start + i];
+ objs[objOffset + start + i] = tmpo;
+ }
+
+ // Handle the next run.
+ start = end + 1;
+ }
+ }
+ }
+
+ /**
* Returns false if all characters in the text between start and end
* are all left-to-right text. This implementation is just calls
* <code>Character.getDirectionality(char)</code> on all characters
diff --git a/libjava/classpath/java/text/Collator.java b/libjava/classpath/java/text/Collator.java
index 7dea83f..0873916 100644
--- a/libjava/classpath/java/text/Collator.java
+++ b/libjava/classpath/java/text/Collator.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.text;
+import gnu.java.locale.LocaleHelper;
+
import java.util.Comparator;
import java.util.Locale;
import java.util.MissingResourceException;
@@ -68,10 +70,6 @@ import java.util.ResourceBundle;
* @author Aaron M. Renn (arenn@urbanophile.com)
* @date March 18, 1999
*/
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 from http://www.javasoft.com.
- * Status: Mostly complete, but parts stubbed out. Look for FIXME.
- */
public abstract class Collator implements Comparator, Cloneable
{
/**
@@ -244,10 +242,7 @@ public abstract class Collator implements Comparator, Cloneable
*/
public static synchronized Locale[] getAvailableLocales ()
{
- // FIXME
- Locale[] l = new Locale[1];
- l[0] = Locale.US;
- return l;
+ return LocaleHelper.getCollatorLocales();
}
/**
@@ -292,7 +287,7 @@ public abstract class Collator implements Comparator, Cloneable
* specified locale. If no <code>Collator</code> exists for the desired
* locale, a <code>Collator</code> for the default locale will be returned.
*
- * @param loc The desired localed to load a <code>Collator</code> for.
+ * @param loc The desired locale to load a <code>Collator</code> for.
*
* @return A <code>Collator</code> for the requested locale
*/
diff --git a/libjava/classpath/java/text/DateFormatSymbols.java b/libjava/classpath/java/text/DateFormatSymbols.java
index 6a20b4c..bffd31f 100644
--- a/libjava/classpath/java/text/DateFormatSymbols.java
+++ b/libjava/classpath/java/text/DateFormatSymbols.java
@@ -292,6 +292,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setAmPmStrings (String[] value)
{
+ if(value==null)
+ throw new NullPointerException();
ampms = value;
}
@@ -305,6 +307,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setEras (String[] labels)
{
+ if(labels==null)
+ throw new NullPointerException();
eras = labels;
}
@@ -343,6 +347,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setLocalPatternChars (String chars)
{
+ if(chars==null)
+ throw new NullPointerException();
localPatternChars = chars;
}
@@ -357,6 +363,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setMonths (String[] labels)
{
+ if(labels==null)
+ throw new NullPointerException();
months = labels;
}
@@ -372,6 +380,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setShortMonths (String[] labels)
{
+ if(labels==null)
+ throw new NullPointerException();
shortMonths = labels;
}
@@ -387,6 +397,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setShortWeekdays (String[] labels)
{
+ if(labels==null)
+ throw new NullPointerException();
shortWeekdays = labels;
}
@@ -401,6 +413,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setWeekdays (String[] labels)
{
+ if(labels==null)
+ throw new NullPointerException();
weekdays = labels;
}
@@ -421,6 +435,8 @@ public class DateFormatSymbols implements java.io.Serializable, Cloneable
*/
public void setZoneStrings (String[][] zones)
{
+ if(zones==null)
+ throw new NullPointerException();
zoneStrings = zones;
}
diff --git a/libjava/classpath/java/text/DecimalFormat.java b/libjava/classpath/java/text/DecimalFormat.java
index a9ec776..f64249b 100644
--- a/libjava/classpath/java/text/DecimalFormat.java
+++ b/libjava/classpath/java/text/DecimalFormat.java
@@ -542,9 +542,9 @@ public class DecimalFormat extends NumberFormat
// Compute exponent.
long exponent = 0;
double baseNumber;
- if (useExponentialNotation)
+ if (useExponentialNotation && number > 0)
{
- exponent = (long) Math.floor (Math.log(number) / Math.log(10));
+ exponent = (long) Math.floor (Math.log10(number));
exponent = exponent - (exponent % exponentRound);
if (minimumIntegerDigits > 0)
exponent -= minimumIntegerDigits - 1;
@@ -654,7 +654,7 @@ public class DecimalFormat extends NumberFormat
index = dest.length();
dest.setDefaultAttribute(NumberFormat.Field.EXPONENT);
String exponentString = Long.toString ((long) exponent);
-
+
for (count = 0; count < minExponentDigits-exponentString.length();
count++)
dest.append((char) symbols.getZeroDigit());
diff --git a/libjava/classpath/java/text/RuleBasedCollator.java b/libjava/classpath/java/text/RuleBasedCollator.java
index 5756e9a..4bffcaf 100644
--- a/libjava/classpath/java/text/RuleBasedCollator.java
+++ b/libjava/classpath/java/text/RuleBasedCollator.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package java.text;
+import gnu.classpath.NotImplementedException;
+
import java.util.ArrayList;
import java.util.HashMap;
@@ -921,6 +923,7 @@ element_loop:
* @return A <code>CollationElementIterator</code> for the specified <code>String</code>.
*/
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
+ throws NotImplementedException // Because decomposeCharacter does not work
{
StringBuffer expand = new StringBuffer("");
diff --git a/libjava/classpath/java/text/SimpleDateFormat.java b/libjava/classpath/java/text/SimpleDateFormat.java
index c0c4cf6..00c0850 100644
--- a/libjava/classpath/java/text/SimpleDateFormat.java
+++ b/libjava/classpath/java/text/SimpleDateFormat.java
@@ -805,7 +805,8 @@ public class SimpleDateFormat extends DateFormat
buffer.setDefaultAttribute(DateFormat.Field.RFC822_TIME_ZONE);
int pureMinutes = (calendar.get(Calendar.ZONE_OFFSET) +
calendar.get(Calendar.DST_OFFSET)) / (1000 * 60);
- String sign = (pureMinutes < 0) ? "-" : "+";
+ String sign = (pureMinutes < 0) ? "-" : "+";
+ pureMinutes = Math.abs(pureMinutes);
int hours = pureMinutes / 60;
int minutes = pureMinutes % 60;
buffer.append(sign);
diff --git a/libjava/classpath/java/text/class-dependencies.conf b/libjava/classpath/java/text/class-dependencies.conf
deleted file mode 100644
index 011b146..0000000
--- a/libjava/classpath/java/text/class-dependencies.conf
+++ /dev/null
@@ -1,220 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-# end of file
-
-# All locales supported are loaded via classes from java.text (see below)
-# from class gnu/java/locale/LocaleInformation_<locale_id>
-#
-# This introduces a dependency for all locales. To allow an easy selection
-# and addition of locales, the library variable {text_locales} can be set to
-# the set of supported locales.
-#
-
-{text_locales}: \
- af_ZA \
- ar_AE \
- ar_BH \
- ar_DZ \
- ar_EG \
- ar_IN \
- ar_IQ \
- ar_JO \
- ar_KW \
- ar_LB \
- ar_LY \
- ar_MA \
- ar_OM \
- ar_QA \
- ar_SD \
- ar_SY \
- ar_TN \
- ar_YE \
- be_BY \
- bn_IN \
- br_FR \
- bs_BA \
- ca_ES \
- cs_CZ \
- cy_GB \
- da_DK \
- de \
- de_AT \
- de_BE \
- de_CH \
- de_DE \
- de_LU \
- el_GR \
- en \
- en_AU \
- en_BW \
- en_CA \
- en_DK \
- en_GB \
- en_HK \
- en_IE \
- en_IN \
- en_NZ \
- en_PH \
- en_SG \
- en_US \
- en_ZA \
- en_ZW \
- es_AR \
- es_BO \
- es_CL \
- es_CO \
- es_CR \
- es_DO \
- es_EC \
- es_ES \
- es_GT \
- es_HN \
- es_MX \
- es_NI \
- es_PA \
- es_PE \
- es_PR \
- es_PY \
- es_SV \
- es_US \
- es_UY \
- es_VE \
- et_EE \
- eu_ES \
- fa_IR \
- fi_FI \
- fo_FO \
- fr_BE \
- fr_CA \
- fr_CH \
- fr_FR \
- fr_LU \
- ga_IE \
- gd_GB \
- gl_ES \
- gv_GB \
- he_IL \
- hi_IN \
- hr_HR \
- hu_HU \
- id_ID \
- it_CH \
- it_IT \
- iw_IL \
- ja_JP \
- ka_GE \
- kl_GL \
- ko_KR \
- kw_GB \
- lt_LT \
- lv_LV \
- mi_NZ \
- mk_MK \
- mr_IN \
- mt_MT \
- nl \
- nl_BE \
- nl_NL \
- nn_NO \
- no_NO \
- oc_FR \
- pl_PL \
- pt_BR \
- pt_PT \
- ro_RO \
- ru_RU \
- ru_UA \
- se_NO \
- sk_SK \
- sl_SI \
- sq_AL \
- sr_YU \
- sv_FI \
- sv_SE \
- ta_IN \
- te_IN \
- tg_TJ \
- tl_PH \
- tr_TR \
- uk_UA \
- ur_PK \
- uz_UZ \
- vi_VN \
- yi_US \
- zh_CN \
- zh_HK \
- zh_SG \
- zh_TW
-
-java/text/Collator.getInstance(Ljava/util/Locale;)Ljava/text/Collator;: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
-
-java/text/DateFormatSymbols.<init>(Ljava/util/Locale;)V: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
-
-java/text/DecimalFormatSymbols.<init>(Ljava/util/Locale;)V: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
-
-java/text/BreakIterator.getInstance(Ljava/lang/String;Ljava/util/Locale;)Ljava/text/BreakIterator;: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
-
-java/text/NumberFormat.computeInstance(Ljava/util/Locale;Ljava/lang/String;Ljava/lang/String;)Ljava/text/NumberFormat;: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
-
-java/text/DateFormat.computeInstance(IILjava/util/Locale;ZZ)Ljava/text/DateFormat;: \
- gnu/java/locale/LocaleInformation_{text_locales}.*
diff --git a/libjava/classpath/java/util/AbstractList.java b/libjava/classpath/java/util/AbstractList.java
index 8a9b6f1..114712e 100644
--- a/libjava/classpath/java/util/AbstractList.java
+++ b/libjava/classpath/java/util/AbstractList.java
@@ -327,12 +327,9 @@ while (i.hasNext())
*
* @return True if the end of the list has not yet been
* reached.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public boolean hasNext()
{
- checkMod();
return pos < size;
}
@@ -461,12 +458,9 @@ while (i.hasNext())
*
* @return True if the end of the list has not yet been
* reached.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public boolean hasNext()
{
- checkMod();
return position < size;
}
@@ -476,12 +470,9 @@ while (i.hasNext())
*
* @return True if objects exist prior to the current
* position of the iterator.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public boolean hasPrevious()
{
- checkMod();
return position > 0;
}
@@ -526,12 +517,9 @@ while (i.hasNext())
* list, which will be retrieved by <code>next()</code>
*
* @return The index of the next element.
- * @throws ConcurrentModificationException if the list
- * has been modified elsewhere.
*/
public int nextIndex()
{
- checkMod();
return position;
}
@@ -540,12 +528,9 @@ while (i.hasNext())
* list, which will be retrieved by <code>previous()</code>
*
* @return The index of the previous element.
- * @throws ConcurrentModificationException if the list
- * has been modified elsewhere.
*/
public int previousIndex()
{
- checkMod();
return position - 1;
}
@@ -1030,12 +1015,9 @@ while (i.hasNext())
*
* @return True if the end of the list has not yet been
* reached.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public boolean hasNext()
{
- checkMod();
return position < size;
}
@@ -1045,12 +1027,9 @@ while (i.hasNext())
*
* @return True if objects exist prior to the current
* position of the iterator.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public boolean hasPrevious()
{
- checkMod();
return position > 0;
}
@@ -1093,8 +1072,6 @@ while (i.hasNext())
* list, which will be retrieved by <code>next()</code>
*
* @return The index of the next element.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public int nextIndex()
{
@@ -1106,8 +1083,6 @@ while (i.hasNext())
* list, which will be retrieved by <code>previous()</code>
*
* @return The index of the previous element.
- * @throws ConcurrentModificationException if the
- * list has been modified elsewhere.
*/
public int previousIndex()
{
diff --git a/libjava/classpath/java/util/Arrays.java b/libjava/classpath/java/util/Arrays.java
index b28c156..2913446 100644
--- a/libjava/classpath/java/util/Arrays.java
+++ b/libjava/classpath/java/util/Arrays.java
@@ -2352,185 +2352,556 @@ public class Arrays
return new Arrays.ArrayList(a);
}
+ /**
+ * Returns the hashcode of an array of long numbers. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents longs in their wrapper class, <code>Long</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of long numbers for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(long[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ {
+ int elt = (int) (v[i] ^ (v[i] >>> 32));
+ result = 31 * result + elt;
+ }
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of integer numbers. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents ints in their wrapper class, <code>Integer</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of integer numbers for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(int[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + v[i];
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of short numbers. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents shorts in their wrapper class, <code>Short</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of short numbers for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(short[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + v[i];
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of characters. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents chars in their wrapper class, <code>Character</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of characters for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(char[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + v[i];
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of bytes. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents bytes in their wrapper class, <code>Byte</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of bytes for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(byte[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + v[i];
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of booleans. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents booleans in their wrapper class,
+ * <code>Boolean</code>. For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of booleans for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(boolean[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + (v[i] ? 1231 : 1237);
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of floats. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents floats in their wrapper class, <code>Float</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of floats for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(float[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ result = 31 * result + Float.floatToIntBits(v[i]);
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of doubles. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents doubles in their wrapper class, <code>Double</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of doubles for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(double[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ {
+ long l = Double.doubleToLongBits(v[i]);
+ int elt = (int) (l ^ (l >>> 32));
+ result = 31 * result + elt;
+ }
+ return result;
+ }
+
+ /**
+ * Returns the hashcode of an array of integer numbers. If two arrays
+ * are equal, according to <code>equals()</code>, they should have the
+ * same hashcode. The hashcode returned by the method is equal to that
+ * obtained by the corresponding <code>List</code> object. This has the same
+ * data, but represents ints in their wrapper class, <code>Integer</code>.
+ * For <code>null</code>, 0 is returned.
+ *
+ * @param v an array of integer numbers for which the hash code should be
+ * computed.
+ * @return the hash code of the array, or 0 if null was given.
+ * @since 1.5
+ */
+ public static int hashCode(Object[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ {
+ int elt = v[i] == null ? 0 : v[i].hashCode();
+ result = 31 * result + elt;
+ }
+ return result;
+ }
+
+ /** @since 1.5 */
+ public static int deepHashCode(Object[] v)
+ {
+ if (v == null)
+ return 0;
+ int result = 1;
+ for (int i = 0; i < v.length; ++i)
+ {
+ int elt;
+ if (v[i] == null)
+ elt = 0;
+ else if (v[i] instanceof boolean[])
+ elt = hashCode((boolean[]) v[i]);
+ else if (v[i] instanceof byte[])
+ elt = hashCode((byte[]) v[i]);
+ else if (v[i] instanceof char[])
+ elt = hashCode((char[]) v[i]);
+ else if (v[i] instanceof short[])
+ elt = hashCode((short[]) v[i]);
+ else if (v[i] instanceof int[])
+ elt = hashCode((int[]) v[i]);
+ else if (v[i] instanceof long[])
+ elt = hashCode((long[]) v[i]);
+ else if (v[i] instanceof float[])
+ elt = hashCode((float[]) v[i]);
+ else if (v[i] instanceof double[])
+ elt = hashCode((double[]) v[i]);
+ else if (v[i] instanceof Object[])
+ elt = hashCode((Object[]) v[i]);
+ else
+ elt = v[i].hashCode();
+ result = 31 * result + elt;
+ }
+ return result;
+ }
+
+ /** @since 1.5 */
+ public static boolean deepEquals(Object[] v1, Object[] v2)
+ {
+ if (v1 == null)
+ return v2 == null;
+ if (v2 == null || v1.length != v2.length)
+ return false;
+
+ for (int i = 0; i < v1.length; ++i)
+ {
+ Object e1 = v1[i];
+ Object e2 = v2[i];
+
+ if (e1 == e2)
+ continue;
+ if (e1 == null || e2 == null)
+ return false;
+
+ boolean check;
+ if (e1 instanceof boolean[] && e2 instanceof boolean[])
+ check = equals((boolean[]) e1, (boolean[]) e2);
+ else if (e1 instanceof byte[] && e2 instanceof byte[])
+ check = equals((byte[]) e1, (byte[]) e2);
+ else if (e1 instanceof char[] && e2 instanceof char[])
+ check = equals((char[]) e1, (char[]) e2);
+ else if (e1 instanceof short[] && e2 instanceof short[])
+ check = equals((short[]) e1, (short[]) e2);
+ else if (e1 instanceof int[] && e2 instanceof int[])
+ check = equals((int[]) e1, (int[]) e2);
+ else if (e1 instanceof long[] && e2 instanceof long[])
+ check = equals((long[]) e1, (long[]) e2);
+ else if (e1 instanceof float[] && e2 instanceof float[])
+ check = equals((float[]) e1, (float[]) e2);
+ else if (e1 instanceof double[] && e2 instanceof double[])
+ check = equals((double[]) e1, (double[]) e2);
+ else if (e1 instanceof Object[] && e2 instanceof Object[])
+ check = equals((Object[]) e1, (Object[]) e2);
+ else
+ check = e1.equals(e2);
+ if (! check)
+ return false;
+ }
+
+ return true;
+ }
+
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (long[] a)
+ public static String toString(boolean[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
-
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
+
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (int[] a)
+ public static String toString(byte[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
-
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
+
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (short[] a)
+ public static String toString(char[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (char[] a)
+ public static String toString(short[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (byte[] a)
+ public static String toString(int[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (boolean[] a)
+ public static String toString(long[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (float[] a)
+ public static String toString(float[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
-
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
+
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (double[] a)
+ public static String toString(double[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
/**
* Returns a String representation of the argument array. Returns "null"
* if <code>a</code> is null.
- * @param a the array to represent
+ * @param v the array to represent
* @return a String representing this array
* @since 1.5
*/
- public static String toString (Object[] a)
+ public static String toString(Object[] v)
{
- if (a == null)
+ if (v == null)
return "null";
- if (a.length == 0)
- return "[]";
- String result = "[";
- for (int i = 0; i < a.length - 1; i++)
- result += String.valueOf(a[i]) + ", ";
- result += String.valueOf(a[a.length - 1]) + "]";
- return result;
- }
+ StringBuilder b = new StringBuilder("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ b.append(v[i]);
+ }
+ b.append("]");
+ return b.toString();
+ }
+
+ private static void deepToString(Object[] v, StringBuilder b, HashSet seen)
+ {
+ b.append("[");
+ for (int i = 0; i < v.length; ++i)
+ {
+ if (i > 0)
+ b.append(", ");
+ Object elt = v[i];
+ if (elt == null)
+ b.append("null");
+ else if (elt instanceof boolean[])
+ b.append(toString((boolean[]) elt));
+ else if (elt instanceof byte[])
+ b.append(toString((byte[]) elt));
+ else if (elt instanceof char[])
+ b.append(toString((char[]) elt));
+ else if (elt instanceof short[])
+ b.append(toString((short[]) elt));
+ else if (elt instanceof int[])
+ b.append(toString((int[]) elt));
+ else if (elt instanceof long[])
+ b.append(toString((long[]) elt));
+ else if (elt instanceof float[])
+ b.append(toString((float[]) elt));
+ else if (elt instanceof double[])
+ b.append(toString((double[]) elt));
+ else if (elt instanceof Object[])
+ {
+ Object[] os = (Object[]) elt;
+ if (seen.contains(os))
+ b.append("[...]");
+ else
+ {
+ seen.add(os);
+ deepToString(os, b, seen);
+ }
+ }
+ else
+ b.append(elt);
+ }
+ b.append("]");
+ }
+
+ /** @since 1.5 */
+ public static String deepToString(Object[] v)
+ {
+ if (v == null)
+ return "null";
+ HashSet seen = new HashSet();
+ StringBuilder b = new StringBuilder();
+ deepToString(v, b, seen);
+ return b.toString();
+ }
/**
* Inner class used by {@link #asList(Object[])} to provide a list interface
diff --git a/libjava/classpath/java/util/BitSet.java b/libjava/classpath/java/util/BitSet.java
index ce88794..f1b5aaa 100644
--- a/libjava/classpath/java/util/BitSet.java
+++ b/libjava/classpath/java/util/BitSet.java
@@ -365,7 +365,7 @@ public class BitSet implements Cloneable, Serializable
throw new IndexOutOfBoundsException();
BitSet bs = new BitSet(to - from);
int lo_offset = from >>> 6;
- if (lo_offset >= bits.length)
+ if (lo_offset >= bits.length || to == from)
return bs;
int lo_bit = from & LONG_MASK;
diff --git a/libjava/classpath/java/util/Calendar.java b/libjava/classpath/java/util/Calendar.java
index f94bed4..a324f5a 100644
--- a/libjava/classpath/java/util/Calendar.java
+++ b/libjava/classpath/java/util/Calendar.java
@@ -1037,6 +1037,8 @@ public abstract class Calendar implements Serializable, Cloneable
public void setTimeZone(TimeZone zone)
{
this.zone = zone;
+ computeTime();
+ computeFields();
}
/**
diff --git a/libjava/classpath/java/util/Collection.java b/libjava/classpath/java/util/Collection.java
index 29e1b37..f7db708 100644
--- a/libjava/classpath/java/util/Collection.java
+++ b/libjava/classpath/java/util/Collection.java
@@ -81,9 +81,9 @@ package java.util;
* @see Arrays
* @see AbstractCollection
* @since 1.2
- * @status updated to 1.4
+ * @status updated to 1.5 (minus generics)
*/
-public interface Collection
+public interface Collection extends Iterable
{
/**
* Add an element to this collection.
diff --git a/libjava/classpath/java/util/GregorianCalendar.java b/libjava/classpath/java/util/GregorianCalendar.java
index 89b7c4db..5ce053a 100644
--- a/libjava/classpath/java/util/GregorianCalendar.java
+++ b/libjava/classpath/java/util/GregorianCalendar.java
@@ -588,7 +588,7 @@ public class GregorianCalendar extends Calendar
day = offs + 7 * (fields[WEEK_OF_MONTH] - 1);
offs = fields[DAY_OF_WEEK] - getFirstDayOfWeek();
- if (offs <= 0)
+ if (offs < 0)
offs += 7;
day += offs;
}
diff --git a/libjava/classpath/java/util/HashMap.java b/libjava/classpath/java/util/HashMap.java
index 7176db0..a734af4 100644
--- a/libjava/classpath/java/util/HashMap.java
+++ b/libjava/classpath/java/util/HashMap.java
@@ -849,12 +849,9 @@ public class HashMap extends AbstractMap
/**
* Returns true if the Iterator has more elements.
* @return true if there are more elements
- * @throws ConcurrentModificationException if the HashMap was modified
*/
public boolean hasNext()
{
- if (knownMod != modCount)
- throw new ConcurrentModificationException();
return count > 0;
}
diff --git a/libjava/classpath/java/util/Hashtable.java b/libjava/classpath/java/util/Hashtable.java
index 76b0d5c..4c00d18 100644
--- a/libjava/classpath/java/util/Hashtable.java
+++ b/libjava/classpath/java/util/Hashtable.java
@@ -1017,12 +1017,9 @@ public class Hashtable extends Dictionary
/**
* Returns true if the Iterator has more elements.
* @return true if there are more elements
- * @throws ConcurrentModificationException if the hashtable was modified
*/
public boolean hasNext()
{
- if (knownMod != modCount)
- throw new ConcurrentModificationException();
return count > 0;
}
diff --git a/libjava/classpath/java/util/IdentityHashMap.java b/libjava/classpath/java/util/IdentityHashMap.java
index 6369fac..89ef034 100644
--- a/libjava/classpath/java/util/IdentityHashMap.java
+++ b/libjava/classpath/java/util/IdentityHashMap.java
@@ -705,12 +705,9 @@ public class IdentityHashMap extends AbstractMap
/**
* Returns true if the Iterator has more elements.
* @return true if there are more elements
- * @throws ConcurrentModificationException if the Map was modified
*/
public boolean hasNext()
{
- if (knownMod != modCount)
- throw new ConcurrentModificationException();
return count > 0;
}
diff --git a/libjava/classpath/java/util/InvalidPropertiesFormatException.java b/libjava/classpath/java/util/InvalidPropertiesFormatException.java
index 6540c23..aaa6c4e 100644
--- a/libjava/classpath/java/util/InvalidPropertiesFormatException.java
+++ b/libjava/classpath/java/util/InvalidPropertiesFormatException.java
@@ -39,11 +39,16 @@ exception statement from your version. */
package java.util;
import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
-// FIXME: serialization methods should throw NotSerializableException
/** @since 1.5 */
public class InvalidPropertiesFormatException extends IOException
{
+ // This class won't serialize, but we have a UID to placate the compiler.
+ private static final long serialVersionUID = 7763056076009360219L;
+
public InvalidPropertiesFormatException(String message)
{
super(message);
@@ -54,4 +59,14 @@ public class InvalidPropertiesFormatException extends IOException
super();
initCause(cause);
}
+
+ private void writeObject(ObjectOutputStream out) throws IOException
+ {
+ throw new NotSerializableException("objects of this type are not serializable");
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException
+ {
+ throw new NotSerializableException("objects of this type are not serializable");
+ }
}
diff --git a/libjava/classpath/java/util/LinkedHashMap.java b/libjava/classpath/java/util/LinkedHashMap.java
index 8e895a9..2b002b2 100644
--- a/libjava/classpath/java/util/LinkedHashMap.java
+++ b/libjava/classpath/java/util/LinkedHashMap.java
@@ -452,12 +452,9 @@ public class LinkedHashMap extends HashMap
* Returns true if the Iterator has more elements.
*
* @return true if there are more elements
- * @throws ConcurrentModificationException if the HashMap was modified
*/
public boolean hasNext()
{
- if (knownMod != modCount)
- throw new ConcurrentModificationException();
return current != null;
}
diff --git a/libjava/classpath/java/util/LinkedList.java b/libjava/classpath/java/util/LinkedList.java
index 2a35425..e77ae53 100644
--- a/libjava/classpath/java/util/LinkedList.java
+++ b/libjava/classpath/java/util/LinkedList.java
@@ -804,11 +804,9 @@ public class LinkedList extends AbstractSequentialList
* Returns the index of the next element.
*
* @return the next index
- * @throws ConcurrentModificationException if the list was modified
*/
public int nextIndex()
{
- checkMod();
return position;
}
@@ -816,11 +814,9 @@ public class LinkedList extends AbstractSequentialList
* Returns the index of the previous element.
*
* @return the previous index
- * @throws ConcurrentModificationException if the list was modified
*/
public int previousIndex()
{
- checkMod();
return position - 1;
}
@@ -828,11 +824,9 @@ public class LinkedList extends AbstractSequentialList
* Returns true if more elements exist via next.
*
* @return true if next will succeed
- * @throws ConcurrentModificationException if the list was modified
*/
public boolean hasNext()
{
- checkMod();
return (next != null);
}
@@ -840,11 +834,9 @@ public class LinkedList extends AbstractSequentialList
* Returns true if more elements exist via previous.
*
* @return true if previous will succeed
- * @throws ConcurrentModificationException if the list was modified
*/
public boolean hasPrevious()
{
- checkMod();
return (previous != null);
}
diff --git a/libjava/classpath/java/util/Locale.java b/libjava/classpath/java/util/Locale.java
index 9e7bbfe..d2aead4 100644
--- a/libjava/classpath/java/util/Locale.java
+++ b/libjava/classpath/java/util/Locale.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package java.util;
import gnu.classpath.SystemProperties;
+import gnu.java.locale.LocaleHelper;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -65,11 +66,12 @@ import java.io.Serializable;
* be separated by an underscore (U+005F).
*
* <p>The default locale is determined by the values of the system properties
- * user.language, user.region, and user.variant, defaulting to "en". Note that
- * the locale does NOT contain the conversion and formatting capabilities (for
- * that, use ResourceBundle and java.text). Rather, it is an immutable tag
- * object for identifying a given locale, which is referenced by these other
- * classes when they must make locale-dependent decisions.
+ * user.language, user.country (or user.region), and user.variant, defaulting
+ * to "en_US". Note that the locale does NOT contain the conversion and
+ * formatting capabilities (for that, use ResourceBundle and java.text).
+ * Rather, it is an immutable tag object for identifying a given locale, which
+ * is referenced by these other classes when they must make locale-dependent
+ * decisions.
*
* @see ResourceBundle
* @see java.text.Format
@@ -209,10 +211,18 @@ public final class Locale implements Serializable, Cloneable
* null. Note the logic in the main constructor, to detect when
* bootstrapping has completed.
*/
- private static Locale defaultLocale =
- getLocale(SystemProperties.getProperty("user.language", "en"),
- SystemProperties.getProperty("user.region", ""),
- SystemProperties.getProperty("user.variant", ""));
+ private static Locale defaultLocale;
+
+ static {
+ String language = SystemProperties.getProperty("user.language", "en");
+ String country = SystemProperties.getProperty("user.country", "US");
+ String region = SystemProperties.getProperty("user.region", null);
+ String variant = SystemProperties.getProperty("user.variant", "");
+
+ defaultLocale = getLocale(language,
+ (region != null) ? region : country,
+ variant);
+ }
/**
* Array storing all the available two-letter ISO639 languages.
@@ -236,38 +246,38 @@ public final class Locale implements Serializable, Cloneable
}
/**
- * Retrieves the locale with the specified language and region
+ * Retrieves the locale with the specified language and country
* from the cache.
*
* @param language the language of the locale to retrieve.
- * @param region the region of the locale to retrieve.
+ * @param country the country of the locale to retrieve.
* @return the locale.
*/
- private static Locale getLocale(String language, String region)
+ private static Locale getLocale(String language, String country)
{
- return getLocale(language, region, "");
+ return getLocale(language, country, "");
}
/**
- * Retrieves the locale with the specified language, region
+ * Retrieves the locale with the specified language, country
* and variant from the cache.
*
* @param language the language of the locale to retrieve.
- * @param region the region of the locale to retrieve.
+ * @param country the country of the locale to retrieve.
* @param variant the variant of the locale to retrieve.
* @return the locale.
*/
- private static Locale getLocale(String language, String region, String variant)
+ private static Locale getLocale(String language, String country, String variant)
{
if (localeMap == null)
localeMap = new HashMap(256);
- String name = language + "_" + region + "_" + variant;
+ String name = language + "_" + country + "_" + variant;
Locale locale = (Locale) localeMap.get(name);
if (locale == null)
{
- locale = new Locale(language, region, variant);
+ locale = new Locale(language, country, variant);
localeMap.put(name, locale);
}
@@ -384,33 +394,33 @@ public final class Locale implements Serializable, Cloneable
{
if (availableLocales == null)
{
- String[] localeNames = LocaleData.localeNames;
- availableLocales = new Locale[localeNames.length];
+ int len = LocaleHelper.getLocaleCount();
+ availableLocales = new Locale[len];
- for (int i = 0; i < localeNames.length; i++)
+ for (int i = 0; i < len; i++)
{
String language;
- String region = "";
+ String country = "";
String variant = "";
- String name = localeNames[i];
+ String name = LocaleHelper.getLocaleName(i);
language = name.substring(0, 2);
if (name.length() > 2)
- region = name.substring(3);
+ country = name.substring(3);
- int index = region.indexOf("_");
+ int index = country.indexOf("_");
if (index > 0)
{
- variant = region.substring(index + 1);
- region = region.substring(0, index - 1);
+ variant = country.substring(index + 1);
+ country = country.substring(0, index - 1);
}
- availableLocales[i] = getLocale(language, region, variant);
+ availableLocales[i] = getLocale(language, country, variant);
}
}
- return availableLocales;
+ return (Locale[]) availableLocales.clone();
}
/**
@@ -426,7 +436,7 @@ public final class Locale implements Serializable, Cloneable
countryCache = getISOStrings("territories");
}
- return countryCache;
+ return (String[]) countryCache.clone();
}
/**
@@ -441,7 +451,7 @@ public final class Locale implements Serializable, Cloneable
{
languageCache = getISOStrings("languages");
}
- return languageCache;
+ return (String[]) languageCache.clone();
}
/**
diff --git a/libjava/classpath/java/util/SimpleTimeZone.java b/libjava/classpath/java/util/SimpleTimeZone.java
index 0bda44c..d94f89a 100644
--- a/libjava/classpath/java/util/SimpleTimeZone.java
+++ b/libjava/classpath/java/util/SimpleTimeZone.java
@@ -774,7 +774,7 @@ public class SimpleTimeZone extends TimeZone
* @param year The year.
*/
private int getDaysInMonth(int month, int year)
- {
+ {
if (month == Calendar.FEBRUARY)
{
if ((year & 3) != 0)
diff --git a/libjava/classpath/java/util/TreeMap.java b/libjava/classpath/java/util/TreeMap.java
index a00f257..60d0a4d 100644
--- a/libjava/classpath/java/util/TreeMap.java
+++ b/libjava/classpath/java/util/TreeMap.java
@@ -1434,12 +1434,9 @@ public class TreeMap extends AbstractMap
/**
* Returns true if the Iterator has more elements.
* @return true if there are more elements
- * @throws ConcurrentModificationException if the TreeMap was modified
*/
public boolean hasNext()
{
- if (knownMod != modCount)
- throw new ConcurrentModificationException();
return next != max;
}
diff --git a/libjava/classpath/java/util/WeakHashMap.java b/libjava/classpath/java/util/WeakHashMap.java
index 2ed982a..ef2444c 100644
--- a/libjava/classpath/java/util/WeakHashMap.java
+++ b/libjava/classpath/java/util/WeakHashMap.java
@@ -292,12 +292,9 @@ public class WeakHashMap extends AbstractMap implements Map
/**
* Checks if there are more entries.
* @return true, iff there are more elements.
- * @throws ConcurrentModificationException if the hash map was
- * modified.
*/
public boolean hasNext()
{
- checkMod();
return nextEntry != null;
}
diff --git a/libjava/classpath/java/util/class-dependencies.conf b/libjava/classpath/java/util/class-dependencies.conf
deleted file mode 100644
index 39f9606..0000000
--- a/libjava/classpath/java/util/class-dependencies.conf
+++ /dev/null
@@ -1,78 +0,0 @@
-# This property file contains dependencies of classes, methods, and
-# field on other methods or classes.
-#
-# Syntax:
-#
-# <used>: <needed 1> [... <needed N>]
-#
-# means that when <used> is included, <needed 1> (... <needed N>) must
-# be included as well.
-#
-# <needed X> and <used> are of the form
-#
-# <class.methodOrField(signature)>
-#
-# or just
-#
-# <class>
-#
-# Within dependencies, variables can be used. A variable is defined as
-# follows:
-#
-# {variable}: value1 value2 ... value<n>
-#
-# variables can be used on the right side of dependencies as follows:
-#
-# <used>: com.bla.blu.{variable}.Class.m()V
-#
-# The use of the variable will expand to <n> dependencies of the form
-#
-# <used>: com.bla.blu.value1.Class.m()V
-# <used>: com.bla.blu.value2.Class.m()V
-# ...
-# <used>: com.bla.blu.value<n>.Class.m()V
-#
-# Variables can be redefined when building a system to select the
-# required support for features like encodings, protocols, etc.
-#
-# Hints:
-#
-# - For methods and fields, the signature is mandatory. For
-# specification, please see the Java Virtual Machine Specification by
-# SUN. Unlike in the spec, field signatures (types) are in brackets.
-#
-# - Package names must be separated by '/' (and not '.'). E.g.,
-# java/lang/Class (this is necessary, because the '.' is used to
-# separate method or field names from classes)
-#
-# - In case <needed> refers to a class, only the class itself will be
-# included in the resulting binary, NOT necessarily all its methods
-# and fields. If you want to refer to all methods and fields, you can
-# write class.* as an abbreviation.
-#
-# - Abbreviations for packages are also possible: my/package/* means all
-# methods and fields of all classes in my/package.
-#
-# - A line with a trailing '\' continues in the next line.
-
-
-# All calendars supported are loaded via java/util/Calendar.getBundle or
-# java/util/GregorianCalendar.getBundle from class
-# gnu/java/locale/Calendar_{locale_id}
-#
-# This introduces a dependency for the localized calendars. To allow an easy
-# selection and addition of locales, the library variable {calendar_locales}
-# can be set to the set of supported calendar locales.
-#
-
-{calendar_locales}: de en nl
-
-java/util/Calendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
- gnu/java/locale/Calendar.* \
- gnu/java/locale/Calendar_{calendar_locales}.*
-
-java/util/GregorianCalendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
- gnu/java/locale/Calendar.* \
- gnu/java/locale/Calendar_{calendar_locales}.*
-
-# end of file
diff --git a/libjava/classpath/java/util/jar/Attributes.java b/libjava/classpath/java/util/jar/Attributes.java
index c8babdd..92d29cf 100644
--- a/libjava/classpath/java/util/jar/Attributes.java
+++ b/libjava/classpath/java/util/jar/Attributes.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package java.util.jar;
+import gnu.java.util.jar.JarUtils;
+
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map;
@@ -65,7 +67,8 @@ import java.util.Set;
* @see java.util.jar.Attributes.Name
* @author Mark Wielaard (mark@klomp.org)
*/
-public class Attributes implements Cloneable, Map
+public class Attributes
+ implements Cloneable, java.util.Map // Fully qualified for jikes 1.22
{
// Fields
@@ -121,14 +124,13 @@ public class Attributes implements Cloneable, Map
* General main attribute -
* the version of this Manifest file.
*/
- public static final Name MANIFEST_VERSION = new Name("Manifest-Version");
+ public static final Name MANIFEST_VERSION = new Name(JarUtils.MANIFEST_VERSION);
/**
* General main attribute -
* the version of the jar file signature.
*/
- public static final Name SIGNATURE_VERSION
- = new Name("Signature-Version");
+ public static final Name SIGNATURE_VERSION = new Name(JarUtils.SIGNATURE_VERSION);
/**
* General main attribute -
@@ -433,7 +435,7 @@ public class Attributes implements Cloneable, Map
* @returns the old value of the attribute name or null if it didn't exist
* yet
*/
- public String putValue(Name name, String value)
+ private String putValue(Name name, String value)
{
return (String) put(name, value);
}
diff --git a/libjava/classpath/java/util/jar/JarFile.java b/libjava/classpath/java/util/jar/JarFile.java
index 7ccbc60..88814f1 100644
--- a/libjava/classpath/java/util/jar/JarFile.java
+++ b/libjava/classpath/java/util/jar/JarFile.java
@@ -1,5 +1,5 @@
/* JarFile.java - Representation of a jar file
- Copyright (C) 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,7 @@ import gnu.java.io.Base64InputStream;
import gnu.java.security.OID;
import gnu.java.security.pkcs.PKCS7SignedData;
import gnu.java.security.pkcs.SignerInfo;
+import gnu.java.security.provider.Gnu;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -105,6 +106,14 @@ public class JarFile extends ZipFile
/** The suffix for signature files. */
private static final String SF_SUFFIX = ".SF";
+ /**
+ * The security provider to use for signature verification.
+ * We need a known fallback to be able to read any signed jar file
+ * (which might contain the user selected security provider).
+ * This is package-private to avoid accessor methods for inner classes.
+ */
+ static final Gnu provider = new Gnu();
+
// Signature OIDs.
private static final OID MD2_OID = new OID("1.2.840.113549.2.2");
private static final OID MD4_OID = new OID("1.2.840.113549.2.4");
@@ -636,19 +645,19 @@ public class JarFile extends ZipFile
{
if (!signerInfo.getDigestAlgorithmId().equals(SHA1_OID))
return;
- sig = Signature.getInstance("SHA1withDSA");
+ sig = Signature.getInstance("SHA1withDSA", provider);
}
else if (alg.equals(RSA_ENCRYPTION_OID))
{
OID hash = signerInfo.getDigestAlgorithmId();
if (hash.equals(MD2_OID))
- sig = Signature.getInstance("md2WithRsaEncryption");
+ sig = Signature.getInstance("md2WithRsaEncryption", provider);
else if (hash.equals(MD4_OID))
- sig = Signature.getInstance("md4WithRsaEncryption");
+ sig = Signature.getInstance("md4WithRsaEncryption", provider);
else if (hash.equals(MD5_OID))
- sig = Signature.getInstance("md5WithRsaEncryption");
+ sig = Signature.getInstance("md5WithRsaEncryption", provider);
else if (hash.equals(SHA1_OID))
- sig = Signature.getInstance("sha1WithRsaEncryption");
+ sig = Signature.getInstance("sha1WithRsaEncryption", provider);
else
return;
}
@@ -756,7 +765,7 @@ public class JarFile extends ZipFile
try
{
byte[] hash = Base64InputStream.decode((String) e.getValue());
- MessageDigest md = MessageDigest.getInstance(alg);
+ MessageDigest md = MessageDigest.getInstance(alg, provider);
md.update(entryBytes);
byte[] hash2 = md.digest();
if (DEBUG)
@@ -939,8 +948,9 @@ public class JarFile extends ZipFile
hashes.add(Base64InputStream.decode((String) e.getValue()));
try
{
- md.add(MessageDigest.getInstance
- (key.substring(0, key.length() - DIGEST_KEY_SUFFIX.length())));
+ int length = key.length() - DIGEST_KEY_SUFFIX.length();
+ String alg = key.substring(0, length);
+ md.add(MessageDigest.getInstance(alg, provider));
}
catch (NoSuchAlgorithmException nsae)
{
diff --git a/libjava/classpath/java/util/jar/Manifest.java b/libjava/classpath/java/util/jar/Manifest.java
index ff82aa2..aa869f4 100644
--- a/libjava/classpath/java/util/jar/Manifest.java
+++ b/libjava/classpath/java/util/jar/Manifest.java
@@ -37,16 +37,12 @@ exception statement from your version. */
package java.util.jar;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
+import gnu.java.util.jar.JarUtils;
+
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
import java.util.Hashtable;
-import java.util.Iterator;
import java.util.Map;
/**
@@ -156,282 +152,27 @@ public class Manifest implements Cloneable
}
/**
- * XXX
+ * Read and merge a <code>Mainfest</code> from the designated input stream.
+ *
+ * @param in the input stream to read from.
+ * @throws IOException if an I/O related exception occurs during the process.
*/
public void read(InputStream in) throws IOException
{
- BufferedReader br =
- new BufferedReader(new InputStreamReader(in, "8859_1"));
- read_main_section(getMainAttributes(), br);
- read_individual_sections(getEntries(), br);
- }
-
- // Private Static methods for reading the Manifest file from BufferedReader
-
- private static void read_main_section(Attributes attr,
- BufferedReader br) throws IOException
- {
- // According to the spec we should actually call read_version_info() here.
- read_attributes(attr, br);
- // Explicitly set Manifest-Version attribute if not set in Main
- // attributes of Manifest.
- if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null)
- attr.putValue(Attributes.Name.MANIFEST_VERSION, "0.0");
- }
-
- /**
- * Pedantic method that requires the next attribute in the Manifest to be
- * the "Manifest-Version". This follows the Manifest spec closely but
- * reject some jar Manifest files out in the wild.
- */
- private static void read_version_info(Attributes attr,
- BufferedReader br) throws IOException
- {
- String version_header = Attributes.Name.MANIFEST_VERSION.toString();
- try
- {
- String value = expect_header(version_header, br);
- attr.putValue(Attributes.Name.MANIFEST_VERSION, value);
- }
- catch (IOException ioe)
- {
- throw new JarException("Manifest should start with a " +
- version_header + ": " + ioe.getMessage());
- }
- }
-
- private static String expect_header(String header, BufferedReader br)
- throws IOException
- {
- String s = br.readLine();
- if (s == null)
- {
- throw new JarException("unexpected end of file");
- }
- return expect_header(header, br, s);
- }
-
- private static String expect_header(String header, BufferedReader br,
- String s) throws IOException
- {
- try
- {
- String name = s.substring(0, header.length() + 1);
- if (name.equalsIgnoreCase(header + ":"))
- {
- String value_start = s.substring(header.length() + 2);
- return read_header_value(value_start, br);
- }
- }
- catch (IndexOutOfBoundsException iobe)
- {
- }
- // If we arrive here, something went wrong
- throw new JarException("unexpected '" + s + "'");
- }
-
- private static String read_header_value(String s, BufferedReader br)
- throws IOException
- {
- boolean try_next = true;
- while (try_next)
- {
- // Lets see if there is something on the next line
- br.mark(1);
- if (br.read() == ' ')
- {
- s += br.readLine();
- }
- else
- {
- br.reset();
- try_next = false;
- }
- }
- return s;
- }
-
- private static void read_attributes(Attributes attr,
- BufferedReader br) throws IOException
- {
- String s = br.readLine();
- while (s != null && (!s.equals("")))
- {
- read_attribute(attr, s, br);
- s = br.readLine();
- }
- }
-
- private static void read_attribute(Attributes attr, String s,
- BufferedReader br) throws IOException
- {
- try
- {
- int colon = s.indexOf(": ");
- String name = s.substring(0, colon);
- String value_start = s.substring(colon + 2);
- String value = read_header_value(value_start, br);
- attr.putValue(name, value);
- }
- catch (IndexOutOfBoundsException iobe)
- {
- throw new JarException("Manifest contains a bad header: " + s);
- }
- }
-
- private static void read_individual_sections(Map entries,
- BufferedReader br) throws
- IOException
- {
- String s = br.readLine();
- while (s != null && (!s.equals("")))
- {
- Attributes attr = read_section_name(s, br, entries);
- read_attributes(attr, br);
- s = br.readLine();
- }
- }
-
- private static Attributes read_section_name(String s, BufferedReader br,
- Map entries) throws JarException
- {
- try
- {
- String name = expect_header("Name", br, s);
- Attributes attr = new Attributes();
- entries.put(name, attr);
- return attr;
- }
- catch (IOException ioe)
- {
- throw new JarException
- ("Section should start with a Name header: " + ioe.getMessage());
- }
+ JarUtils.readMFManifest(getMainAttributes(), getEntries(), in);
}
/**
- * XXX
+ * Writes the contents of this <code>Manifest</code> to the designated
+ * output stream. Line-endings are platform-independent and consist of the
+ * 2-codepoint sequence <code>0x0D</code> and <code>0x0A</code>.
+ *
+ * @param out the output stream to write this <code>Manifest</code> to.
+ * @throws IOException if an I/O related exception occurs during the process.
*/
public void write(OutputStream out) throws IOException
{
- PrintWriter pw =
- new PrintWriter(new
- BufferedWriter(new OutputStreamWriter(out, "8859_1")));
- write_main_section(getMainAttributes(), pw);
- pw.println();
- write_individual_sections(getEntries(), pw);
- if (pw.checkError())
- {
- throw new JarException("Error while writing manifest");
- }
- }
-
- // Private Static functions for writing the Manifest file to a PrintWriter
-
- private static void write_main_section(Attributes attr,
- PrintWriter pw) throws JarException
- {
- write_version_info(attr, pw);
- write_main_attributes(attr, pw);
- }
-
- private static void write_version_info(Attributes attr, PrintWriter pw)
- {
- // First check if there is already a version attribute set
- String version = attr.getValue(Attributes.Name.MANIFEST_VERSION);
- if (version == null)
- {
- version = "1.0";
- }
- write_header(Attributes.Name.MANIFEST_VERSION.toString(), version, pw);
- }
-
- private static void write_header(String name, String value, PrintWriter pw)
- {
- pw.print(name + ": ");
-
- int last = 68 - name.length();
- if (last > value.length())
- {
- pw.println(value);
- }
- else
- {
- pw.println(value.substring(0, last));
- }
- while (last < value.length())
- {
- pw.print(" ");
- int end = (last + 69);
- if (end > value.length())
- {
- pw.println(value.substring(last));
- }
- else
- {
- pw.println(value.substring(last, end));
- }
- last = end;
- }
- }
-
- private static void write_main_attributes(Attributes attr, PrintWriter pw)
- throws JarException
- {
- Iterator it = attr.entrySet().iterator();
- while (it.hasNext())
- {
- Map.Entry entry = (Map.Entry) it.next();
- // Don't print the manifest version again
- if (!Attributes.Name.MANIFEST_VERSION.equals(entry.getKey()))
- {
- write_attribute_entry(entry, pw);
- }
- }
- }
-
- private static void write_attribute_entry(Map.Entry entry, PrintWriter pw)
- throws JarException
- {
- String name = entry.getKey().toString();
- String value = entry.getValue().toString();
-
- if (name.equalsIgnoreCase("Name"))
- {
- throw new JarException("Attributes cannot be called 'Name'");
- }
- if (name.startsWith("From"))
- {
- throw new
- JarException("Header cannot start with the four letters 'From'" +
- name);
- }
- write_header(name, value, pw);
- }
-
- private static void write_individual_sections(Map entries, PrintWriter pw)
- throws JarException
- {
-
- Iterator it = entries.entrySet().iterator();
- while (it.hasNext())
- {
- Map.Entry entry = (Map.Entry) it.next();
- write_header("Name", entry.getKey().toString(), pw);
- write_entry_attributes((Attributes) entry.getValue(), pw);
- pw.println();
- }
- }
-
- private static void write_entry_attributes(Attributes attr, PrintWriter pw)
- throws JarException
- {
- Iterator it = attr.entrySet().iterator();
- while (it.hasNext())
- {
- Map.Entry entry = (Map.Entry) it.next();
- write_attribute_entry(entry, pw);
- }
+ JarUtils.writeMFManifest(getMainAttributes(), getEntries(), out);
}
/**
diff --git a/libjava/classpath/java/util/logging/Level.java b/libjava/classpath/java/util/logging/Level.java
index 2c400dc..48ff318 100644
--- a/libjava/classpath/java/util/logging/Level.java
+++ b/libjava/classpath/java/util/logging/Level.java
@@ -1,5 +1,5 @@
/* Level.java -- a class for indicating logging levels
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -341,6 +341,9 @@ public class Level implements Serializable
for (int i = 0; i < knownLevels.length; i++)
{
+ // It's safe to use == instead of .equals here because only the
+ // standard logging levels will be returned by this method, and
+ // they are all created using string literals.
if (name == knownLevels[i].name)
return knownLevels[i];
}
diff --git a/libjava/classpath/java/util/logging/LogManager.java b/libjava/classpath/java/util/logging/LogManager.java
index 73eb9bc..e260481 100644
--- a/libjava/classpath/java/util/logging/LogManager.java
+++ b/libjava/classpath/java/util/logging/LogManager.java
@@ -1,6 +1,6 @@
/* LogManager.java -- a class for maintaining Loggers and managing
configuration properties
- Copyright (C) 2002,2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,11 +48,14 @@ import java.lang.ref.WeakReference;
import java.net.URL;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
+import gnu.classpath.SystemProperties;
+
/**
* The <code>LogManager</code> maintains a hierarchical namespace
* of Logger objects and manages properties for configuring the logging
@@ -114,7 +117,6 @@ public class LogManager
* a WeakReference to it.
*/
private Map loggers;
- final Logger rootLogger;
/**
* The properties for the logging framework which have been
@@ -135,83 +137,62 @@ public class LogManager
* this case.
*/
private final PropertyChangeSupport pcs = new PropertyChangeSupport( /* source bean */
- LogManager.class);
+ LogManager.class);
protected LogManager()
{
- if (logManager != null)
- throw new IllegalStateException("there can be only one LogManager; use LogManager.getLogManager()");
-
- logManager = this;
- loggers = new java.util.HashMap();
- rootLogger = new Logger("", null);
- rootLogger.setLevel(Level.INFO);
- addLogger(rootLogger);
-
- /* Make sure that Logger.global has the rootLogger as its parent.
- *
- * Logger.global is set during class initialization of Logger,
- * which may or may not be before this code is being executed.
- * For example, on the Sun 1.3.1 and 1.4.0 JVMs, Logger.global
- * has been set before this code is being executed. In contrast,
- * Logger.global still is null on GCJ 3.2. Since the LogManager
- * and Logger classes are mutually dependent, both behaviors are
- * correct.
- *
- * This means that we cannot depend on Logger.global to have its
- * value when this code executes, although that variable is final.
- * Since Logger.getLogger will always return the same logger for
- * the same name, the subsequent line works fine irrespective of
- * the order in which classes are initialized.
- */
- Logger.getLogger("global").setParent(rootLogger);
- Logger.getLogger("global").setUseParentHandlers(true);
+ loggers = new HashMap();
}
/**
* Returns the globally shared LogManager instance.
*/
- public static LogManager getLogManager()
+ public static synchronized LogManager getLogManager()
{
+ if (logManager == null)
+ {
+ logManager = makeLogManager();
+ initLogManager();
+ }
return logManager;
}
- static
- {
- makeLogManager();
-
- /* The Javadoc description of the class explains
- * what is going on here.
- */
- Object configurator = createInstance(System.getProperty("java.util.logging.config.class"),
- /* must be instance of */ Object.class);
-
- try
- {
- if (configurator == null)
- getLogManager().readConfiguration();
- }
- catch (IOException ex)
- {
- /* FIXME: Is it ok to ignore exceptions here? */
- }
- }
+ private static final String MANAGER_PROPERTY = "java.util.logging.manager";
private static LogManager makeLogManager()
{
- String managerClassName;
- LogManager manager;
+ String managerClassName = SystemProperties.getProperty(MANAGER_PROPERTY);
+ LogManager manager = (LogManager) createInstance
+ (managerClassName, LogManager.class, MANAGER_PROPERTY);
+ if (manager == null)
+ manager = new LogManager();
+ return manager;
+ }
- managerClassName = System.getProperty("java.util.logging.manager");
- manager = (LogManager) createInstance(managerClassName, LogManager.class);
- if (manager != null)
- return manager;
+ private static final String CONFIG_PROPERTY = "java.util.logging.config.class";
- if (managerClassName != null)
- System.err.println("WARNING: System property \"java.util.logging.manager\""
- + " should be the name of a subclass of java.util.logging.LogManager");
+ private static void initLogManager()
+ {
+ LogManager manager = getLogManager();
+ Logger.root.setLevel(Level.INFO);
+ manager.addLogger(Logger.root);
+
+ /* The Javadoc description of the class explains
+ * what is going on here.
+ */
+ Object configurator = createInstance(System.getProperty(CONFIG_PROPERTY),
+ /* must be instance of */ Object.class,
+ CONFIG_PROPERTY);
- return new LogManager();
+ try
+ {
+ if (configurator == null)
+ manager.readConfiguration();
+ }
+ catch (IOException ex)
+ {
+ /* FIXME: Is it ok to ignore exceptions here? */
+ }
}
/**
@@ -314,7 +295,7 @@ public class LogManager
if(index > -1)
searchName = searchName.substring(0,index);
else
- searchName = "";
+ searchName = "";
}
logger.setLevel(logLevel);
@@ -324,12 +305,12 @@ public class LogManager
* When adding "foo.bar", the logger "foo.bar.baz" should change
* its parent to "foo.bar".
*/
- if (parent != rootLogger)
+ if (parent != Logger.root)
{
for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
{
Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
- .get();
+ .get();
if ((possChild == null) || (possChild == logger)
|| (possChild.getParent() != parent))
continue;
@@ -367,14 +348,14 @@ public class LogManager
{
String childName = child.getName();
int childNameLength = childName.length();
- Logger best = rootLogger;
+ Logger best = Logger.root;
int bestNameLength = 0;
Logger cand;
String candName;
int candNameLength;
- if (child == rootLogger)
+ if (child == Logger.root)
return null;
for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
@@ -468,7 +449,7 @@ public class LogManager
if (logger == null)
iter.remove();
- else if (logger != rootLogger)
+ else if (logger != Logger.root)
{
logger.resetLogger();
logger.setLevel(null);
@@ -476,8 +457,8 @@ public class LogManager
}
}
- rootLogger.setLevel(Level.INFO);
- rootLogger.resetLogger();
+ Logger.root.setLevel(Level.INFO);
+ Logger.root.resetLogger();
}
/**
@@ -524,11 +505,11 @@ public class LogManager
// If no config file could be found use a default configuration.
if(inputStream == null)
- {
- String defaultConfig = "handlers = java.util.logging.ConsoleHandler \n"
+ {
+ String defaultConfig = "handlers = java.util.logging.ConsoleHandler \n"
+ ".level=INFO \n";
- inputStream = new ByteArrayInputStream(defaultConfig.getBytes());
- }
+ inputStream = new ByteArrayInputStream(defaultConfig.getBytes());
+ }
}
else
inputStream = new java.io.FileInputStream(path);
@@ -574,21 +555,9 @@ public class LogManager
while (tokenizer.hasMoreTokens())
{
String handlerName = tokenizer.nextToken();
- try
- {
- Class handlerClass = ClassLoader.getSystemClassLoader().loadClass(handlerName);
- getLogger("").addHandler((Handler) handlerClass
- .newInstance());
- }
- catch (ClassCastException ex)
- {
- System.err.println("[LogManager] class " + handlerName
- + " is not subclass of java.util.logging.Handler");
- }
- catch (Exception ex)
- {
- //System.out.println("[LogManager.readConfiguration]"+ex);
- }
+ Handler handler = (Handler)
+ createInstance(handlerName, Handler.class, key);
+ Logger.root.addHandler(handler);
}
}
@@ -602,14 +571,19 @@ public class LogManager
logger = Logger.getLogger(loggerName);
addLogger(logger);
}
+ Level level = null;
try
- {
- logger.setLevel(Level.parse(value));
- }
- catch (Exception _)
- {
- //System.out.println("[LogManager.readConfiguration] "+_);
- }
+ {
+ level = Level.parse(value);
+ }
+ catch (IllegalArgumentException e)
+ {
+ warn("bad level \'" + value + "\'", e);
+ }
+ if (level != null)
+ {
+ logger.setLevel(level);
+ }
continue;
}
}
@@ -748,19 +722,17 @@ public class LogManager
*/
static final Class getClassProperty(String propertyName, Class defaultValue)
{
- Class usingClass = null;
+ String propertyValue = logManager.getProperty(propertyName);
- try
- {
- String propertyValue = logManager.getProperty(propertyName);
- if (propertyValue != null)
- usingClass = Class.forName(propertyValue);
- if (usingClass != null)
- return usingClass;
- }
- catch (Exception _)
- {
- }
+ if (propertyValue != null)
+ try
+ {
+ return locateClass(propertyValue);
+ }
+ catch (ClassNotFoundException e)
+ {
+ warn(propertyName + " = " + propertyValue, e);
+ }
return defaultValue;
}
@@ -774,12 +746,17 @@ public class LogManager
try
{
- Object obj = klass.newInstance();
- if (ofClass.isInstance(obj))
- return obj;
+ Object obj = klass.newInstance();
+ if (ofClass.isInstance(obj))
+ return obj;
}
- catch (Exception _)
+ catch (InstantiationException e)
{
+ warn(propertyName + " = " + klass.getName(), e);
+ }
+ catch (IllegalAccessException e)
+ {
+ warn(propertyName + " = " + klass.getName(), e);
}
if (defaultClass == null)
@@ -824,14 +801,17 @@ public class LogManager
}
/**
- * Creates a new instance of a class specified by name.
+ * Creates a new instance of a class specified by name and verifies
+ * that it is an instance (or subclass of) a given type.
*
* @param className the name of the class of which a new instance
* should be created.
*
- * @param ofClass the class to which the new instance should
- * be either an instance or an instance of a subclass.
- * FIXME: This description is just terrible.
+ * @param type the object created must be an instance of
+ * <code>type</code> or any subclass of <code>type</code>
+ *
+ * @param property the system property to reference in error
+ * messages
*
* @return the new instance, or <code>null</code> if
* <code>className</code> is <code>null</code>, if no class
@@ -839,28 +819,89 @@ public class LogManager
* loading that class, or if the constructor of the class
* has thrown an exception.
*/
- static final Object createInstance(String className, Class ofClass)
+ private static final Object createInstance(String className, Class type,
+ String property)
{
- Class klass;
+ Class klass = null;
if ((className == null) || (className.length() == 0))
return null;
try
{
- klass = Class.forName(className);
- if (! ofClass.isAssignableFrom(klass))
- return null;
-
- return klass.newInstance();
+ klass = locateClass(className);
+ if (type.isAssignableFrom(klass))
+ return klass.newInstance();
+ warn(property, className, "not an instance of " + type.getName());
+ }
+ catch (ClassNotFoundException e)
+ {
+ warn(property, className, "class not found");
+ }
+ catch (IllegalAccessException e)
+ {
+ warn(property, className, "illegal access");
}
- catch (Exception _)
+ catch (InstantiationException e)
{
- return null;
+ warn(property, className, e);
}
- catch (java.lang.LinkageError _)
+ catch (java.lang.LinkageError e)
{
- return null;
+ warn(property, className, "linkage error");
}
+
+ return null;
}
+
+ private static final void warn(String property, String klass, Throwable t)
+ {
+ warn(property, klass, null, t);
+ }
+
+ private static final void warn(String property, String klass, String msg)
+ {
+ warn(property, klass, msg, null);
+ }
+
+ private static final void warn(String property, String klass, String msg,
+ Throwable t)
+ {
+ warn("error instantiating '" + klass + "' referenced by " + property +
+ (msg == null ? "" : ", " + msg), t);
+ }
+
+ /**
+ * All debug warnings go through this method.
+ */
+
+ private static final void warn(String msg, Throwable t)
+ {
+ System.err.println("WARNING: " + msg);
+ if (t != null)
+ t.printStackTrace(System.err);
+ }
+
+ /**
+ * Locates a class by first checking the system class loader and
+ * then checking the context class loader.
+ *
+ * @param name the fully qualified name of the Class to locate
+ * @return Class the located Class
+ */
+
+ private static Class locateClass(String name) throws ClassNotFoundException
+ {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ return Class.forName(name, true, loader);
+ }
+ catch (ClassNotFoundException e)
+ {
+ loader = ClassLoader.getSystemClassLoader();
+ return Class.forName(name, true, loader);
+ }
+ }
+
}
diff --git a/libjava/classpath/java/util/logging/Logger.java b/libjava/classpath/java/util/logging/Logger.java
index 367faad..29f19e4 100644
--- a/libjava/classpath/java/util/logging/Logger.java
+++ b/libjava/classpath/java/util/logging/Logger.java
@@ -1,5 +1,5 @@
/* Logger.java -- a class for logging messages
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,6 +41,8 @@ package java.util.logging;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* A Logger is used for logging information about events. Usually, there
@@ -67,13 +69,29 @@ import java.util.ResourceBundle;
*/
public class Logger
{
+
+ static final Logger root = new Logger("", null);
+
/**
* A logger provided to applications that make only occasional use
* of the logging framework, typically early prototypes. Serious
* products are supposed to create and use their own Loggers, so
* they can be controlled individually.
*/
- public static final Logger global = getLogger("global");
+ public static final Logger global;
+
+ static
+ {
+ // Our class might be initialized from an unprivileged context
+ global = (Logger) AccessController.doPrivileged
+ (new PrivilegedAction()
+ {
+ public Object run()
+ {
+ return getLogger("global");
+ }
+ });
+ }
/**
@@ -175,7 +193,7 @@ public class Logger
/* This is null when the root logger is being constructed,
* and the root logger afterwards.
*/
- parent = LogManager.getLogManager().rootLogger;
+ parent = root;
useParentHandlers = (parent != null);
}
@@ -1148,16 +1166,12 @@ public class Logger
*/
public synchronized void setParent(Logger parent)
{
- LogManager lm;
-
/* Throw a new NullPointerException if parent is null. */
parent.getClass();
- lm = LogManager.getLogManager();
-
- if (this == lm.rootLogger)
+ if (this == root)
throw new IllegalArgumentException(
- "only the root logger can have a null parent");
+ "the root logger can only have a null parent");
/* An application is allowed to control an anonymous logger
* without having the permission to control the logging
diff --git a/libjava/classpath/java/util/regex/Matcher.java b/libjava/classpath/java/util/regex/Matcher.java
index 98086bf..e86be25 100644
--- a/libjava/classpath/java/util/regex/Matcher.java
+++ b/libjava/classpath/java/util/regex/Matcher.java
@@ -40,6 +40,7 @@ package java.util.regex;
import gnu.regexp.RE;
import gnu.regexp.REMatch;
+import gnu.regexp.CharIndexed;
/**
* Instance of a regular expression applied to a char sequence.
@@ -50,6 +51,10 @@ public final class Matcher implements MatchResult
{
private Pattern pattern;
private CharSequence input;
+ // We use CharIndexed as an input object to the getMatch method in order
+ // that /\G/ (the end of the previous match) may work. The information
+ // of the previous match is stored in the CharIndexed object.
+ private CharIndexed inputCharIndexed;
private int position;
private int appendPosition;
private REMatch match;
@@ -58,6 +63,7 @@ public final class Matcher implements MatchResult
{
this.pattern = pattern;
this.input = input;
+ this.inputCharIndexed = RE.makeCharIndexed(input, 0);
}
/**
@@ -119,7 +125,7 @@ public final class Matcher implements MatchResult
public boolean find ()
{
boolean first = (match == null);
- match = pattern.getRE().getMatch(input, position);
+ match = pattern.getRE().getMatch(inputCharIndexed, position);
if (match != null)
{
int endIndex = match.getEndIndex();
@@ -150,7 +156,7 @@ public final class Matcher implements MatchResult
*/
public boolean find (int start)
{
- match = pattern.getRE().getMatch(input, start);
+ match = pattern.getRE().getMatch(inputCharIndexed, start);
if (match != null)
{
position = match.getEndIndex();
@@ -212,7 +218,7 @@ public final class Matcher implements MatchResult
public boolean lookingAt ()
{
- match = pattern.getRE().getMatch(input, 0);
+ match = pattern.getRE().getMatch(inputCharIndexed, 0);
if (match != null)
{
if (match.getStartIndex() == 0)
@@ -237,7 +243,7 @@ public final class Matcher implements MatchResult
*/
public boolean matches ()
{
- match = pattern.getRE().getMatch(input, 0, RE.REG_TRY_ENTIRE_MATCH);
+ match = pattern.getRE().getMatch(inputCharIndexed, 0, RE.REG_TRY_ENTIRE_MATCH);
if (match != null)
{
if (match.getStartIndex() == 0)
diff --git a/libjava/classpath/java/util/regex/Pattern.java b/libjava/classpath/java/util/regex/Pattern.java
index d39f1cf..8c19983 100644
--- a/libjava/classpath/java/util/regex/Pattern.java
+++ b/libjava/classpath/java/util/regex/Pattern.java
@@ -74,14 +74,16 @@ public final class Pattern implements Serializable
this.flags = flags;
int gnuFlags = 0;
+ gnuFlags |= RE.REG_ICASE_USASCII;
if ((flags & CASE_INSENSITIVE) != 0)
gnuFlags |= RE.REG_ICASE;
if ((flags & MULTILINE) != 0)
gnuFlags |= RE.REG_MULTILINE;
if ((flags & DOTALL) != 0)
gnuFlags |= RE.REG_DOT_NEWLINE;
+ if ((flags & UNICODE_CASE) != 0)
+ gnuFlags &= ~RE.REG_ICASE_USASCII;
// not yet supported:
- // if ((flags & UNICODE_CASE) != 0) gnuFlags =
// if ((flags & CANON_EQ) != 0) gnuFlags =
RESyntax syntax = RESyntax.RE_SYNTAX_JAVA_1_4;
@@ -94,7 +96,7 @@ public final class Pattern implements Serializable
if ((flags & COMMENTS) != 0)
{
- // Use a syntax with support for comments?
+ gnuFlags |= RE.REG_X_COMMENTS;
}
try
diff --git a/libjava/classpath/java/util/zip/Deflater.java b/libjava/classpath/java/util/zip/Deflater.java
index 7bc1a19..a4ec0e6 100644
--- a/libjava/classpath/java/util/zip/Deflater.java
+++ b/libjava/classpath/java/util/zip/Deflater.java
@@ -221,7 +221,6 @@ public class Deflater
* where the compressor allocates native memory.
* If you call any method (even reset) afterwards the behaviour is
* <i>undefined</i>.
- * @deprecated Just clear all references to deflater instead.
*/
public void end()
{
diff --git a/libjava/classpath/java/util/zip/DeflaterEngine.java b/libjava/classpath/java/util/zip/DeflaterEngine.java
index 3eea7c2..f79e477 100644
--- a/libjava/classpath/java/util/zip/DeflaterEngine.java
+++ b/libjava/classpath/java/util/zip/DeflaterEngine.java
@@ -497,7 +497,7 @@ class DeflaterEngine implements DeflaterConstants
throw new InternalError();
}
}
- huffman.tallyDist(strstart - matchStart, matchLen);
+ boolean full = huffman.tallyDist(strstart - matchStart, matchLen);
lookahead -= matchLen;
if (matchLen <= max_lazy && lookahead >= MIN_MATCH)
@@ -516,7 +516,8 @@ class DeflaterEngine implements DeflaterConstants
updateHash();
}
matchLen = MIN_MATCH - 1;
- continue;
+ if (!full)
+ continue;
}
else
{
diff --git a/libjava/classpath/java/util/zip/GZIPInputStream.java b/libjava/classpath/java/util/zip/GZIPInputStream.java
index 2cea755..f244810 100644
--- a/libjava/classpath/java/util/zip/GZIPInputStream.java
+++ b/libjava/classpath/java/util/zip/GZIPInputStream.java
@@ -207,7 +207,7 @@ public class GZIPInputStream
/* 2. Check the compression type (must be 8) */
int CM = in.read();
- if (CM != 8)
+ if (CM != Deflater.DEFLATED)
throw new IOException("Error in GZIP header, data not in deflate format");
headCRC.update(CM);
diff --git a/libjava/classpath/java/util/zip/Inflater.java b/libjava/classpath/java/util/zip/Inflater.java
index 76de891..f1616d6 100644
--- a/libjava/classpath/java/util/zip/Inflater.java
+++ b/libjava/classpath/java/util/zip/Inflater.java
@@ -199,7 +199,6 @@ public class Inflater
* with Sun's JDK, where the compressor allocates native memory.
* If you call any method (even reset) afterwards the behaviour is
* <i>undefined</i>.
- * @deprecated Just clear all references to inflater instead.
*/
public void end ()
{
diff --git a/libjava/classpath/java/util/zip/ZipConstants.java b/libjava/classpath/java/util/zip/ZipConstants.java
index 6d66419..bdf9450 100644
--- a/libjava/classpath/java/util/zip/ZipConstants.java
+++ b/libjava/classpath/java/util/zip/ZipConstants.java
@@ -85,9 +85,6 @@ interface ZipConstants
long ENDSIG = 'P'|('K'<<8)|(5<<16)|(6<<24);
int ENDHDR = 22;
- /* The following two fields are missing in SUN JDK */
- int ENDNRD = 4;
- int ENDDCD = 6;
int ENDSUB = 8;
int ENDTOT = 10;
int ENDSIZ = 12;
diff --git a/libjava/classpath/java/util/zip/ZipFile.java b/libjava/classpath/java/util/zip/ZipFile.java
index 7307ee9..b849551 100644
--- a/libjava/classpath/java/util/zip/ZipFile.java
+++ b/libjava/classpath/java/util/zip/ZipFile.java
@@ -43,6 +43,7 @@ import gnu.java.util.EmptyEnumeration;
import java.io.EOFException;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
@@ -75,6 +76,11 @@ public class ZipFile implements ZipConstants
*/
public static final int OPEN_DELETE = 0x4;
+ /**
+ * This field isn't defined in the JDK's ZipConstants, but should be.
+ */
+ static final int ENDNRD = 4;
+
// Name of this zip file.
private final String name;
@@ -86,6 +92,37 @@ public class ZipFile implements ZipConstants
private boolean closed = false;
+
+ /**
+ * Helper function to open RandomAccessFile and throw the proper
+ * ZipException in case opening the file fails.
+ *
+ * @param name the file name, or null if file is provided
+ *
+ * @param file the file, or null if name is provided
+ *
+ * @return the newly open RandomAccessFile, never null
+ */
+ private RandomAccessFile openFile(String name,
+ File file)
+ throws ZipException, IOException
+ {
+ try
+ {
+ return
+ (name != null)
+ ? new RandomAccessFile(name, "r")
+ : new RandomAccessFile(file, "r");
+ }
+ catch (FileNotFoundException f)
+ {
+ ZipException ze = new ZipException(f.getMessage());
+ ze.initCause(f);
+ throw ze;
+ }
+ }
+
+
/**
* Opens a Zip file with the given name for reading.
* @exception IOException if a i/o error occured.
@@ -94,7 +131,7 @@ public class ZipFile implements ZipConstants
*/
public ZipFile(String name) throws ZipException, IOException
{
- this.raf = new RandomAccessFile(name, "r");
+ this.raf = openFile(name,null);
this.name = name;
checkZipFile();
}
@@ -107,7 +144,7 @@ public class ZipFile implements ZipConstants
*/
public ZipFile(File file) throws ZipException, IOException
{
- this.raf = new RandomAccessFile(file, "r");
+ this.raf = openFile(null,file);
this.name = file.getPath();
checkZipFile();
}
@@ -134,7 +171,7 @@ public class ZipFile implements ZipConstants
throw new IllegalArgumentException("invalid mode");
if ((mode & OPEN_DELETE) != 0)
file.deleteOnExit();
- this.raf = new RandomAccessFile(file, "r");
+ this.raf = openFile(null,file);
this.name = file.getPath();
checkZipFile();
}
@@ -408,7 +445,19 @@ public class ZipFile implements ZipConstants
case ZipOutputStream.STORED:
return inp;
case ZipOutputStream.DEFLATED:
- return new InflaterInputStream(inp, new Inflater(true));
+ final Inflater inf = new Inflater(true);
+ final int sz = (int) entry.getSize();
+ return new InflaterInputStream(inp, inf)
+ {
+ public int available() throws IOException
+ {
+ if (sz == -1)
+ return super.available();
+ if (super.available() != 0)
+ return sz - inf.getTotalOut();
+ return 0;
+ }
+ };
default:
throw new ZipException("Unknown compression method " + method);
}
@@ -514,6 +563,7 @@ public class ZipFile implements ZipConstants
pos = 0;
fillBuffer();
}
+
return buffer[pos++] & 0xFF;
}
@@ -544,7 +594,7 @@ public class ZipFile implements ZipConstants
len -= remain;
totalBytesRead += remain;
}
-
+
return totalBytesRead;
}
diff --git a/libjava/classpath/javax/accessibility/AccessibleAction.java b/libjava/classpath/javax/accessibility/AccessibleAction.java
index 2ca683e..a7cf05e 100644
--- a/libjava/classpath/javax/accessibility/AccessibleAction.java
+++ b/libjava/classpath/javax/accessibility/AccessibleAction.java
@@ -55,6 +55,28 @@ package javax.accessibility;
*/
public interface AccessibleAction
{
+
+ /**
+ * The name of an action which decrements a value.
+ *
+ * @since 1.5
+ */
+ static final String DECREMENT = "decrement";
+
+ /**
+ * The name of an action which increments a value.
+ *
+ * @since 1.5
+ */
+ static final String INCREMENT = "increment";
+
+ /**
+ * The name of an action which toggles the expansion of a tree node.
+ *
+ * @since 1.5
+ */
+ static final String TOGGLE_EXPAND = "toggle expand";
+
/**
* Get the number possible actions for this object, with the zeroth
* representing the default action.
diff --git a/libjava/classpath/javax/accessibility/AccessibleAttributeSequence.java b/libjava/classpath/javax/accessibility/AccessibleAttributeSequence.java
new file mode 100644
index 0000000..5ee50e5
--- /dev/null
+++ b/libjava/classpath/javax/accessibility/AccessibleAttributeSequence.java
@@ -0,0 +1,71 @@
+/* AccessibleAttributeSequence.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.accessibility;
+
+import javax.swing.text.AttributeSet;
+
+/**
+ * This is a convenience class that represents an accessible
+ * attribute sequence.
+ * @since 1.5
+ */
+public class AccessibleAttributeSequence
+{
+ /**
+ * The attributes of the text.
+ */
+ public AttributeSet attributes;
+
+ /**
+ * The starting index.
+ */
+ public int startIndex;
+
+ /**
+ * The ending index.
+ */
+ public int endIndex;
+
+ /**
+ * Create a new instance.
+ */
+ public AccessibleAttributeSequence()
+ {
+ }
+}
diff --git a/libjava/classpath/javax/accessibility/AccessibleContext.java b/libjava/classpath/javax/accessibility/AccessibleContext.java
index 536deac..972f4fe 100644
--- a/libjava/classpath/javax/accessibility/AccessibleContext.java
+++ b/libjava/classpath/javax/accessibility/AccessibleContext.java
@@ -249,6 +249,35 @@ public abstract class AccessibleContext
= "AccessibleHypertextOffset";
/**
+ * Constant used when a component's bounds have changed. The old and
+ * new bounds are given in the event.
+ * @since 1.5
+ */
+ public static final String ACCESSIBLE_COMPONENT_BOUNDS_CHANGED
+ = "accessibleComponentBoundsChanged";
+
+ /**
+ * Constant used when the state of child objects changes. The old
+ * value in the event is always null, and the new value is the component
+ * whose children have changed.
+ * @since 1.5
+ */
+ public static final String ACCESSIBLE_INVALIDATE_CHILDREN
+ = "accessibleInvalidateChildren";
+
+ /**
+ * Constant used when the attributes of some text have changed.
+ * On insertion, the old value is null and the new value is an
+ * {@link AccessibleAttributeSequence} describing the insertion.
+ * On deletion, the old value is an {@link AccessibleAttributeSequence}
+ * and the new value is null. For replacement, both the old
+ * and new values are {@link AccessibleAttributeSequence} objects.
+ * @since 1.5
+ */
+ public static final String ACCESSIBLE_TEXT_ATTRIBUTES_CHANGED
+ = "accessibleTextAttributesChanged";
+
+ /**
* The accessible parent of this object.
*
* @see #getAccessibleParent()
@@ -540,14 +569,15 @@ public abstract class AccessibleContext
/**
* Get any supported accessible relation set. The default implementation
- * returns null.
+ * returns an empty AccessibleRelationSet.
+ *
+ * @return the supported relation set, or <code>null</code>
*
- * @return the supported relation set, or null
* @see AccessibleRelationSet
*/
public AccessibleRelationSet getAccessibleRelationSet()
{
- return null;
+ return new AccessibleRelationSet();
}
/**
diff --git a/libjava/classpath/javax/accessibility/AccessibleExtendedText.java b/libjava/classpath/javax/accessibility/AccessibleExtendedText.java
new file mode 100644
index 0000000..f40fa0f
--- /dev/null
+++ b/libjava/classpath/javax/accessibility/AccessibleExtendedText.java
@@ -0,0 +1,108 @@
+/* AccessibleExtendedText.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.accessibility;
+
+import java.awt.Rectangle;
+
+/**
+ * This interface provides extended text functionality, similar
+ * to AccessibleText.
+ * @see AccessibleText
+ * @since 1.5
+ */
+public interface AccessibleExtendedText
+{
+ /**
+ * This constant indicates that the retrieved text should be a
+ * complete line.
+ */
+ int LINE = 4;
+
+ /**
+ * This constant indicates that the retrieved text should consist
+ * of a run with identical attributes.
+ */
+ int ATTRIBUTE_RUN = 5;
+
+ /**
+ * Determines the bounding box of some text held by this object.
+ * @param start the starting index
+ * @param end the ending index
+ * @return the bounding box
+ * @see AccessibleText#getCharacterBounds(int)
+ */
+ Rectangle getTextBounds(int start, int end);
+
+ /**
+ * Return a range of text from the underlying object.
+ * @param start the starting index
+ * @param end the ending index
+ */
+ String getTextRange(int start, int end);
+
+ /**
+ * Return a text sequence from the underlying object. The part
+ * parameter describes the type of sequence to return; it is one
+ * of the constants from {@link AccessibleText} or from this
+ * class.
+ * @param part the type of the sequence to return
+ * @param index start of the sequence
+ */
+ AccessibleTextSequence getTextSequenceAfter(int part, int index);
+
+ /**
+ * Return a text sequence from the underlying object. The part
+ * parameter describes the type of sequence to return; it is one
+ * of the constants from {@link AccessibleText} or from this
+ * class.
+ * @param part the type of the sequence to return
+ * @param index start of the sequence
+ */
+ AccessibleTextSequence getTextSequenceAt(int part, int index);
+
+ /**
+ * Return a text sequence from the underlying object. The part
+ * parameter describes the type of sequence to return; it is one
+ * of the constants from {@link AccessibleText} or from this
+ * class.
+ * @param part the type of the sequence to return
+ * @param index end of the sequence
+ */
+ AccessibleTextSequence getTextSequenceBefore(int part, int index);
+}
diff --git a/libjava/classpath/javax/accessibility/AccessibleRelation.java b/libjava/classpath/javax/accessibility/AccessibleRelation.java
index fae69ef..3d515fd 100644
--- a/libjava/classpath/javax/accessibility/AccessibleRelation.java
+++ b/libjava/classpath/javax/accessibility/AccessibleRelation.java
@@ -61,7 +61,7 @@ public class AccessibleRelation extends AccessibleBundle
* @see #LABELED_BY
* @see #MEMBER_OF
*/
- public static final String LABEL_FOR = "labelFor";
+ public static final String LABEL_FOR;
/**
* Indicates the object is labeled by other objects.
@@ -72,7 +72,7 @@ public class AccessibleRelation extends AccessibleBundle
* @see #LABEL_FOR
* @see #MEMBER_OF
*/
- public static final String LABELED_BY = "labeledBy";
+ public static final String LABELED_BY;
/**
* Indicates an object is a member of a group of target objects.
@@ -83,7 +83,7 @@ public class AccessibleRelation extends AccessibleBundle
* @see #LABEL_FOR
* @see #LABELED_BY
*/
- public static final String MEMBER_OF = "memberOf";
+ public static final String MEMBER_OF;
/**
* Indicates an object is a controller for other objects.
@@ -94,7 +94,7 @@ public class AccessibleRelation extends AccessibleBundle
* @see #LABELED_BY
* @see #MEMBER_OF
*/
- public static final String CONTROLLER_FOR = "controllerFor";
+ public static final String CONTROLLER_FOR;
/**
* Indicates an object is controlled by other objects.
@@ -105,7 +105,7 @@ public class AccessibleRelation extends AccessibleBundle
* @see #LABELED_BY
* @see #MEMBER_OF
*/
- public static final String CONTROLLED_BY = "controlledBy";
+ public static final String CONTROLLED_BY;
/** Indicates that the label target group has changed. */
public static final String LABEL_FOR_PROPERTY = "labelForProperty";
@@ -122,8 +122,104 @@ public class AccessibleRelation extends AccessibleBundle
/** Indicates that the controlling objects have changed. */
public static final String CONTROLLED_BY_PROPERTY = "controlledByProperty";
+ /**
+ * Indicates that an object is a child of another object.
+ * @since 1.5
+ */
+ public static final String CHILD_NODE_OF = "childNodeOf";
+
+ /**
+ * Indicates that the ancestry relationship has changed.
+ * @since 1.5
+ */
+ public static final String CHILD_NODE_OF_PROPERTY = "childNodeOfProperty";
+
+ /**
+ * Indicates that an object is embedded by another object.
+ * @since 1.5
+ */
+ public static final String EMBEDDED_BY = "embeddedBy";
+
+ /**
+ * Indicates that the {@link #EMBEDDED_BY} property changed.
+ * @since 1.5
+ */
+ public static final String EMBEDDED_BY_PROPERTY = "embeddedByProperty";
+
+ /**
+ * Indicates that an object embeds another object.
+ * @since 1.5
+ */
+ public static final String EMBEDS = "embeds";
+
+ /**
+ * Indicates that the {@link #EMBEDS} property changed.
+ * @since 1.5
+ */
+ public static final String EMBEDS_PROPERTY = "embedsProperty";
+
+ /**
+ * Indicates that one object directly follows another object,
+ * as in a paragraph flow.
+ * @since 1.5
+ */
+ public static final String FLOWS_FROM = "flowsFrom";
+
+ /**
+ * Indicates that the {@link #FLOWS_FROM} property changed.
+ * @since 1.5
+ */
+ public static final String FLOWS_FROM_PROPERTY = "flowsFromProperty";
+
+ /**
+ * Indicates that one object comes directly before another object,
+ * as in a paragraph flow.
+ * @since 1.5
+ */
+ public static final String FLOWS_TO = "flowsTo";
+
+ /**
+ * Indicates that the {@link #FLOWS_TO} property changed.
+ * @since 1.5
+ */
+ public static final String FLOWS_TO_PROPERTY = "flowsToProperty";
+
+ /**
+ * Indicates that one object is a parent window of another object.
+ * @since 1.5
+ */
+ public static final String PARENT_WINDOW_OF = "parentWindowOf";
+
+ /**
+ * Indicates that the {@link #PARENT_WINDOW_OF} property changed.
+ * @since 1.5
+ */
+ public static final String PARENT_WINDOW_OF_PROPERTY = "parentWindowOfProperty";
+
+ /**
+ * Indicates that one object is a subwindow of another object.
+ * @since 1.5
+ */
+ public static final String SUBWINDOW_OF = "subwindowOf";
+
+ /**
+ * Indicates that the {@link #SUBWINDOW_OF} property changed.
+ * @since 1.5
+ */
+ public static final String SUBWINDOW_OF_PROPERTY = "subwindowOfProperty";
+
/** An empty set of targets. */
private static final Object[] EMPTY_TARGETS = { };
+
+ static
+ {
+ // not constants in JDK
+ LABEL_FOR = "labelFor";
+ LABELED_BY = "labeledBy";
+ MEMBER_OF = "memberOf";
+ CONTROLLER_FOR = "controllerFor";
+ CONTROLLED_BY = "controlledBy";
+ }
/**
* The related objects.
diff --git a/libjava/classpath/javax/accessibility/AccessibleRole.java b/libjava/classpath/javax/accessibility/AccessibleRole.java
index f386ad0..a5396f1 100644
--- a/libjava/classpath/javax/accessibility/AccessibleRole.java
+++ b/libjava/classpath/javax/accessibility/AccessibleRole.java
@@ -467,6 +467,56 @@ public class AccessibleRole extends AccessibleBundle
= new AccessibleRole("groupbox");
/**
+ * A formula for creating a value.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole EDITBAR
+ = new AccessibleRole("editbar");
+
+ /**
+ * A text-based footer.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole FOOTER
+ = new AccessibleRole("footer");
+
+ /**
+ * A text-based header.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole HEADER
+ = new AccessibleRole("header");
+
+
+ /**
+ * A text-based paragraph.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole PARAGRAPH
+ = new AccessibleRole("paragraph");
+
+ /**
+ * Represents the current level of progress on a particular task.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole PROGRESS_MONITOR
+ = new AccessibleRole("progress monitor");
+
+ /**
+ * A ruler is a method of measuring the distance between two
+ * points.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleRole RULER
+ = new AccessibleRole("ruler");
+
+ /**
* Create a new constant with a locale independent key. Follow the example,
* keep the constructor private and make public constants instead.
*
diff --git a/libjava/classpath/javax/accessibility/AccessibleState.java b/libjava/classpath/javax/accessibility/AccessibleState.java
index a630354..e4d00bd 100644
--- a/libjava/classpath/javax/accessibility/AccessibleState.java
+++ b/libjava/classpath/javax/accessibility/AccessibleState.java
@@ -177,6 +177,28 @@ public class AccessibleState extends AccessibleBundle
= new AccessibleState("iconified");
/**
+ * Indicates that the state of this particular object is
+ * indeterminate. This commonly occurs when an object is incapable
+ * of representing the state by a single value.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleState INDETERMINATE
+ = new AccessibleState("indeterminate");
+
+ /**
+ * Indicates that this particular object manages a number of
+ * subcomponents. This is a common property of structures such as
+ * trees and tables, which have a number of sub-elements such as
+ * rows and columns. The subcomponents should be left to the
+ * object, and not managed by the application.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleState MANAGES_DESCENDANTS
+ = new AccessibleState("manages descendants");
+
+ /**
* Indicates that something must be done in the current object before
* interaction is allowed on other windows, usually for dialogs.
*
@@ -250,6 +272,15 @@ public class AccessibleState extends AccessibleBundle
= new AccessibleState("showing");
/**
+ * Indicates that this particular object is truncated when displayed
+ * visually.
+ *
+ * @since 1.5
+ */
+ public static final AccessibleState TRUNCATED
+ = new AccessibleState("truncated");
+
+ /**
* Indicates that this object intends to be visible. However, if its
* parent is invisible, this object is as well.
*
diff --git a/libjava/classpath/javax/accessibility/AccessibleStreamable.java b/libjava/classpath/javax/accessibility/AccessibleStreamable.java
new file mode 100644
index 0000000..cbeedf7
--- /dev/null
+++ b/libjava/classpath/javax/accessibility/AccessibleStreamable.java
@@ -0,0 +1,62 @@
+/* AccessibleStreamable.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.accessibility;
+
+import java.awt.datatransfer.DataFlavor;
+import java.io.InputStream;
+
+/**
+ * This interface represents a streamable accessible object.
+ * @since 1.5
+ */
+public interface AccessibleStreamable
+{
+ /**
+ * Return an array of the data flavors supported by this object.
+ */
+ DataFlavor[] getMimeTypes();
+
+ /**
+ * Return an input stream that yields the contents of this object,
+ * using the given data flavor. If the given data flavor cannot
+ * be used, returns null.
+ * @param flavor the data flavor
+ */
+ InputStream getStream(DataFlavor flavor);
+}
diff --git a/libjava/classpath/javax/accessibility/AccessibleText.java b/libjava/classpath/javax/accessibility/AccessibleText.java
index 88aee14..be5f45c 100644
--- a/libjava/classpath/javax/accessibility/AccessibleText.java
+++ b/libjava/classpath/javax/accessibility/AccessibleText.java
@@ -92,7 +92,7 @@ public interface AccessibleText
* Given a point in the coordinate system of this object, return the
* 0-based index of the character at that point, or -1 if there is none.
*
- * @param p the point to look at
+ * @param point the point to look at
* @return the character index, or -1
*/
int getIndexAtPoint(Point point);
diff --git a/libjava/classpath/javax/accessibility/AccessibleTextSequence.java b/libjava/classpath/javax/accessibility/AccessibleTextSequence.java
new file mode 100644
index 0000000..88fa4c2
--- /dev/null
+++ b/libjava/classpath/javax/accessibility/AccessibleTextSequence.java
@@ -0,0 +1,68 @@
+/* AccessibleTextSequence.java
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.accessibility;
+
+/**
+ * This is a convenience class that encapsulates a String and a range.
+ * @since 1.5
+ */
+public class AccessibleTextSequence
+{
+ /**
+ * The text of the sequence.
+ */
+ public String text;
+
+ /**
+ * The starting index.
+ */
+ public int startIndex;
+
+ /**
+ * The ending index.
+ */
+ public int endIndex;
+
+ /**
+ * Create a new instance.
+ */
+ public AccessibleTextSequence()
+ {
+ }
+}
diff --git a/libjava/classpath/javax/crypto/Cipher.java b/libjava/classpath/javax/crypto/Cipher.java
index b9dee74..1f68ea6 100644
--- a/libjava/classpath/javax/crypto/Cipher.java
+++ b/libjava/classpath/javax/crypto/Cipher.java
@@ -1,5 +1,5 @@
/* Cipher.java -- Interface to a cryptographic cipher.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,6 +40,9 @@ package javax.crypto;
import gnu.java.security.Engine;
+import java.nio.ByteBuffer;
+import java.nio.ReadOnlyBufferException;
+
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@@ -496,7 +499,6 @@ public class Cipher
{
throw new IllegalStateException("neither encrypting nor decrypting");
}
- state = INITIAL_STATE;
return cipherSpi.engineDoFinal(input, inputOffset, inputLength);
}
@@ -532,7 +534,6 @@ public class Cipher
{
throw new IllegalStateException("neither encrypting nor decrypting");
}
- state = INITIAL_STATE;
return cipherSpi.engineDoFinal(new byte[0], 0, 0, output, outputOffset);
}
@@ -576,7 +577,6 @@ public class Cipher
{
throw new IllegalStateException("neither encrypting nor decrypting");
}
- state = INITIAL_STATE;
return cipherSpi.engineDoFinal(input, inputOffset, inputLength,
output, outputOffset);
}
@@ -590,6 +590,43 @@ public class Cipher
}
/**
+ * Finishes a multi-part transformation with, or completely
+ * transforms, a byte buffer, and stores the result into the output
+ * buffer.
+ *
+ * @param input The input buffer.
+ * @param output The output buffer.
+ * @return The number of bytes stored into the output buffer.
+ * @throws IllegalArgumentException If the input and output buffers
+ * are the same object.
+ * @throws IllegalStateException If this cipher was not initialized
+ * for encryption or decryption.
+ * @throws ReadOnlyBufferException If the output buffer is not
+ * writable.
+ * @throws IllegalBlockSizeException If this cipher requires a total
+ * input that is a multiple of its block size to complete this
+ * transformation.
+ * @throws ShortBufferException If the output buffer is not large
+ * enough to hold the transformed bytes.
+ * @throws BadPaddingException If the cipher is a block cipher with
+ * a padding scheme, and the decrypted bytes do not end with a
+ * valid padding.
+ * @since 1.5
+ */
+ public final int doFinal (ByteBuffer input, ByteBuffer output)
+ throws ReadOnlyBufferException, ShortBufferException,
+ BadPaddingException, IllegalBlockSizeException
+ {
+ if (input == output)
+ throw new IllegalArgumentException
+ ("input and output buffers cannot be the same");
+ if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+ throw new IllegalStateException
+ ("not initialized for encrypting or decrypting");
+ return cipherSpi.engineDoFinal (input, output);
+ }
+
+ /**
* Returns the size an output buffer needs to be if this cipher is
* updated with a number of bytes.
*
@@ -672,11 +709,11 @@ public class Cipher
*/
public final void init(int opmode, Key key) throws InvalidKeyException
{
- state = opmode;
if (cipherSpi != null)
{
cipherSpi.engineInit(opmode, key, new SecureRandom());
}
+ state = opmode;
}
/**
@@ -791,11 +828,11 @@ public class Cipher
public final void init(int opmode, Key key, SecureRandom random)
throws InvalidKeyException
{
- state = opmode;
if (cipherSpi != null)
{
cipherSpi.engineInit(opmode, key, random);
}
+ state = opmode;
}
/**
@@ -890,11 +927,11 @@ public class Cipher
SecureRandom random)
throws InvalidKeyException, InvalidAlgorithmParameterException
{
- state = opmode;
if (cipherSpi != null)
{
cipherSpi.engineInit(opmode, key, params, random);
}
+ state = opmode;
}
/**
@@ -925,11 +962,11 @@ public class Cipher
SecureRandom random)
throws InvalidKeyException, InvalidAlgorithmParameterException
{
- state = opmode;
if (cipherSpi != null)
{
cipherSpi.engineInit(opmode, key, params, random);
}
+ state = opmode;
}
/**
@@ -1068,6 +1105,35 @@ public class Cipher
}
/**
+ * Continue a multi-part transformation on a byte buffer, storing
+ * the transformed bytes into another buffer.
+ *
+ * @param input The input buffer.
+ * @param output The output buffer.
+ * @return The number of bytes stored in <i>output</i>.
+ * @throws IllegalArgumentException If the two buffers are the same
+ * object.
+ * @throws IllegalStateException If this cipher was not initialized
+ * for encrypting or decrypting.
+ * @throws ReadOnlyBufferException If the output buffer is not
+ * writable.
+ * @throws ShortBufferException If the output buffer does not have
+ * enough available space for the transformed bytes.
+ * @since 1.5
+ */
+ public final int update (ByteBuffer input, ByteBuffer output)
+ throws ReadOnlyBufferException, ShortBufferException
+ {
+ if (input == output)
+ throw new IllegalArgumentException
+ ("input and output buffers must be different");
+ if (state != ENCRYPT_MODE && state != DECRYPT_MODE)
+ throw new IllegalStateException
+ ("not initialized for encryption or decryption");
+ return cipherSpi.engineUpdate (input, output);
+ }
+
+ /**
* Wrap a key.
*
* @param key The key to wrap.
diff --git a/libjava/classpath/javax/crypto/CipherSpi.java b/libjava/classpath/javax/crypto/CipherSpi.java
index a51a3ae..194c1da 100644
--- a/libjava/classpath/javax/crypto/CipherSpi.java
+++ b/libjava/classpath/javax/crypto/CipherSpi.java
@@ -1,5 +1,5 @@
/* CipherSpi.java -- The cipher service provider interface.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.crypto;
+import java.nio.ByteBuffer;
+
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@@ -179,6 +181,31 @@ public abstract class CipherSpi
throws IllegalBlockSizeException, BadPaddingException, ShortBufferException;
/**
+ * @since 1.5
+ */
+ protected int engineDoFinal (ByteBuffer input, ByteBuffer output)
+ throws BadPaddingException, IllegalBlockSizeException,
+ ShortBufferException
+ {
+ int total = 0;
+ byte[] inbuf = new byte[256];
+ while (input.hasRemaining ())
+ {
+ int in = Math.min (inbuf.length, input.remaining ());
+ input.get (inbuf, 0, in);
+ byte[] outbuf = new byte[engineGetOutputSize (in)];
+ int out = 0;
+ if (input.hasRemaining ()) // i.e., we have more 'update' calls
+ out = engineUpdate (inbuf, 0, in, outbuf, 0);
+ else
+ out = engineDoFinal (inbuf, 0, in, outbuf, 0);
+ output.put (outbuf, 0, out);
+ total += out;
+ }
+ return total;
+ }
+
+ /**
* Returns the block size of the underlying cipher.
*
* @return The block size.
@@ -380,6 +407,26 @@ public abstract class CipherSpi
throws ShortBufferException;
/**
+ * @since 1.5
+ */
+ protected int engineUpdate (ByteBuffer input, ByteBuffer output)
+ throws ShortBufferException
+ {
+ int total = 0;
+ byte[] inbuf = new byte[256];
+ while (input.hasRemaining ())
+ {
+ int in = Math.min (inbuf.length, input.remaining ());
+ input.get (inbuf, 0, in);
+ byte[] outbuf = new byte[engineGetOutputSize (in)];
+ int out = engineUpdate (inbuf, 0, in, outbuf, 0);
+ output.put (outbuf, 0, out);
+ total += out;
+ }
+ return total;
+ }
+
+ /**
* <p>Wrap a key.</p>
*
* <p>For compatibility this method is not declared
diff --git a/libjava/classpath/javax/crypto/KeyGenerator.java b/libjava/classpath/javax/crypto/KeyGenerator.java
index c3f4cee..e824c64 100644
--- a/libjava/classpath/javax/crypto/KeyGenerator.java
+++ b/libjava/classpath/javax/crypto/KeyGenerator.java
@@ -160,9 +160,11 @@ public class KeyGenerator
{
try
{
- return new KeyGenerator((KeyGeneratorSpi)
+ KeyGenerator instance = new KeyGenerator((KeyGeneratorSpi)
Engine.getInstance(SERVICE, algorithm, provider),
provider, algorithm);
+ instance.init(new SecureRandom());
+ return instance;
}
catch (InvocationTargetException ite)
{
diff --git a/libjava/classpath/javax/imageio/ImageIO.java b/libjava/classpath/javax/imageio/ImageIO.java
index 3ea7e85..b2304a7 100644
--- a/libjava/classpath/javax/imageio/ImageIO.java
+++ b/libjava/classpath/javax/imageio/ImageIO.java
@@ -1016,7 +1016,7 @@ public final class ImageIO
* The image data will be cached in the current cache directory if
* caching is enabled.
*
- * @param input an object to which to write image data
+ * @param output an object to which to write image data
*
* @return an ImageOutputStream that can send data to output, or
* null
diff --git a/libjava/classpath/javax/imageio/ImageWriteParam.java b/libjava/classpath/javax/imageio/ImageWriteParam.java
index 1979957..4d8efc3 100644
--- a/libjava/classpath/javax/imageio/ImageWriteParam.java
+++ b/libjava/classpath/javax/imageio/ImageWriteParam.java
@@ -103,7 +103,7 @@ public class ImageWriteParam extends IIOParam
protected float compressionQuality;
/**
- * Contains the name of the available compression types.
+ * Contains the name of the current compression type.
*/
protected String compressionType;
diff --git a/libjava/classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java
new file mode 100644
index 0000000..c0567be
--- /dev/null
+++ b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java
@@ -0,0 +1,280 @@
+/* JPEGHuffmanTable.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package javax.imageio.plugins.jpeg;
+
+/**
+ * The JPEGHuffmanTable class represents a Huffman table read from a
+ * JPEG image file. The standard JPEG AC and DC chrominance and
+ * luminance values are provided as static fields.
+ */
+public class JPEGHuffmanTable
+{
+ /**
+ * Huffman code lengths.
+ */
+ private short[] lengths;
+
+ /**
+ * Huffman values.
+ */
+ private short[] values;
+
+ // The private constructors are used for these final fields to avoid
+ // unnecessary copying.
+ /**
+ * The standard JPEG AC chrominance Huffman table.
+ */
+ public static final JPEGHuffmanTable StdACChrominance =
+ new JPEGHuffmanTable(new short[] { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5,
+ 4, 4, 0, 1, 2, 0x77 },
+ new short[] { 0x00, 0x01, 0x02, 0x03, 0x11,
+ 0x04, 0x05, 0x21, 0x31, 0x06,
+ 0x12, 0x41, 0x51, 0x07, 0x61,
+ 0x71, 0x13, 0x22, 0x32, 0x81,
+ 0x08, 0x14, 0x42, 0x91, 0xa1,
+ 0xb1, 0xc1, 0x09, 0x23, 0x33,
+ 0x52, 0xf0, 0x15, 0x62, 0x72,
+ 0xd1, 0x0a, 0x16, 0x24, 0x34,
+ 0xe1, 0x25, 0xf1, 0x17, 0x18,
+ 0x19, 0x1a, 0x26, 0x27, 0x28,
+ 0x29, 0x2a, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x43, 0x44,
+ 0x45, 0x46, 0x47, 0x48, 0x49,
+ 0x4a, 0x53, 0x54, 0x55, 0x56,
+ 0x57, 0x58, 0x59, 0x5a, 0x63,
+ 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x73, 0x74, 0x75,
+ 0x76, 0x77, 0x78, 0x79, 0x7a,
+ 0x82, 0x83, 0x84, 0x85, 0x86,
+ 0x87, 0x88, 0x89, 0x8a, 0x92,
+ 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0xa2, 0xa3,
+ 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
+ 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
+ 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
+ 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca,
+ 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
+ 0xd7, 0xd8, 0xd9, 0xda, 0xe2,
+ 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+ 0xf9, 0xfa }, false);
+
+ /**
+ * The standard JPEG AC luminance Huffman table.
+ */
+ public static final JPEGHuffmanTable StdACLuminance =
+ new JPEGHuffmanTable(new short[] { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5,
+ 4, 4, 0, 0, 1, 0x7d },
+ new short[] { 0x01, 0x02, 0x03, 0x00, 0x04,
+ 0x11, 0x05, 0x12, 0x21, 0x31,
+ 0x41, 0x06, 0x13, 0x51, 0x61,
+ 0x07, 0x22, 0x71, 0x14, 0x32,
+ 0x81, 0x91, 0xa1, 0x08, 0x23,
+ 0x42, 0xb1, 0xc1, 0x15, 0x52,
+ 0xd1, 0xf0, 0x24, 0x33, 0x62,
+ 0x72, 0x82, 0x09, 0x0a, 0x16,
+ 0x17, 0x18, 0x19, 0x1a, 0x25,
+ 0x26, 0x27, 0x28, 0x29, 0x2a,
+ 0x34, 0x35, 0x36, 0x37, 0x38,
+ 0x39, 0x3a, 0x43, 0x44, 0x45,
+ 0x46, 0x47, 0x48, 0x49, 0x4a,
+ 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x63, 0x64,
+ 0x65, 0x66, 0x67, 0x68, 0x69,
+ 0x6a, 0x73, 0x74, 0x75, 0x76,
+ 0x77, 0x78, 0x79, 0x7a, 0x83,
+ 0x84, 0x85, 0x86, 0x87, 0x88,
+ 0x89, 0x8a, 0x92, 0x93, 0x94,
+ 0x95, 0x96, 0x97, 0x98, 0x99,
+ 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
+ 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
+ 0xb7, 0xb8, 0xb9, 0xba, 0xc2,
+ 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xd2, 0xd3,
+ 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
+ 0xd9, 0xda, 0xe1, 0xe2, 0xe3,
+ 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
+ 0xe9, 0xea, 0xf1, 0xf2, 0xf3,
+ 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+ 0xf9, 0xfa }, false);
+
+ /**
+ * The standard JPEG DC chrominance Huffman table.
+ */
+ public static final JPEGHuffmanTable StdDCChrominance =
+ new JPEGHuffmanTable(new short[] { 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 0, 0, 0 },
+ new short[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11 }, false);
+
+ /**
+ * The standard JPEG DC luminance Huffman table.
+ */
+ public static final JPEGHuffmanTable StdDCLuminance =
+ new JPEGHuffmanTable(new short[] { 0, 1, 5, 1, 1, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0 },
+ new short[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11 }, false);
+
+ /**
+ * Construct and initialize a Huffman table. Copies are created of
+ * the array arguments. lengths[index] stores the number of Huffman
+ * values with Huffman codes of length index + 1. The values array
+ * stores the Huffman values in order of increasing code length.
+ *
+ * @param lengths an array of Huffman code lengths
+ * @param values a sorted array of Huffman values
+ * @throws IllegalArgumentException if either parameter is null, if
+ * lengths.length > 16 or values.length > 256, if any value in
+ * length or values is negative, or if the parameters do not
+ * describe a valid Huffman table
+ */
+ public JPEGHuffmanTable(short[] lengths, short[] values)
+ {
+ // Create copies of the lengths and values arguments.
+ this(checkLengths(lengths), checkValues(values, lengths), true);
+ }
+
+ /**
+ * Private constructor that avoids unnecessary copying and argument
+ * checking.
+ *
+ * @param lengths an array of Huffman code lengths
+ * @param values a sorted array of Huffman values
+ * @param copy true if copies should be created of the given arrays
+ */
+ private JPEGHuffmanTable(short[] lengths, short[] values, boolean copy)
+ {
+ this.lengths = copy ? (short[]) lengths.clone() : lengths;
+ this.values = copy ? (short[]) values.clone() : values;
+ }
+
+ private static short[] checkLengths(short[] lengths)
+ {
+ if (lengths == null || lengths.length > 16)
+ throw new IllegalArgumentException("invalid length array");
+
+ for (int i = 0; i < lengths.length; i++)
+ {
+ if (lengths[i] < 0)
+ throw new IllegalArgumentException("negative length");
+ }
+
+ int sum = 0;
+ for (int i = 0; i < lengths.length; i++)
+ {
+ if (lengths[i] > ((1 << (i + 1)) - 1))
+ throw new IllegalArgumentException("invalid number of codes"
+ + " for code length " + (i + 1));
+ sum += lengths[i];
+ }
+
+ return lengths;
+ }
+
+ private static short[] checkValues(short[] values, short[] lengths)
+ {
+ if (values == null || values.length > 256)
+ throw new IllegalArgumentException("invalid values array");
+
+ for (int i = 0; i < values.length; i++)
+ {
+ if (values[i] < 0)
+ throw new IllegalArgumentException("negative value");
+ }
+ // lengths is known-valid by this point.
+ int sum = 0;
+ for (int i = 0; i < lengths.length; i++)
+ sum += lengths[i];
+
+ if (values.length != sum)
+ throw new IllegalArgumentException("invalid number of values"
+ + " for number of codes");
+
+ return values;
+ }
+
+ /**
+ * Retrieve a copy of the array of Huffman code lengths. If the
+ * returned array is called lengthcount, there are
+ * lengthcount[index] codes of length index + 1.
+ *
+ * @return a copy of the array of Huffman code lengths
+ */
+ public short[] getLengths()
+ {
+ return (short[]) lengths.clone();
+ }
+
+ /**
+ * Retrieve a copy of the array of Huffman values, sorted in order
+ * of increasing code length.
+ *
+ * @return a copy of the array of Huffman values
+ */
+ public short[] getValues()
+ {
+ return (short[]) values.clone();
+ }
+
+ /**
+ * Create a string representation of this JPEG Huffman table.
+ *
+ * @return a string representation of this JPEG Huffman table.
+ */
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("JPEGHuffmanTable:\nlengths:");
+
+ for (int i = 0; i < lengths.length; i++)
+ buffer.append(" " + lengths[i]);
+
+ buffer.append("\nvalues:");
+
+ for (int i = 0; i < values.length; i++)
+ buffer.append(" " + values[i]);
+
+ return buffer.toString();
+ }
+}
diff --git a/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java
new file mode 100644
index 0000000..b570922
--- /dev/null
+++ b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java
@@ -0,0 +1,161 @@
+/* JPEGImageReadParam.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package javax.imageio.plugins.jpeg;
+
+import javax.imageio.ImageReadParam;
+
+/**
+ * The JPEGImageReadParam class is only used to set JPEG decoding
+ * tables for streams that do not provide their own tables. If a
+ * stream does not provide tables and a custom JPEGImageReadParam is
+ * not provided, then the standard JPEG tables are used from the
+ * JPEGQTable and JPEGHuffmanTable classes. If a stream does provide
+ * decoding tables then JPEGImageReadParam will be ignored.
+ * JPEGImageReadParam cannot be used to retrieve the tables from a
+ * stream. Instead, use IIOMetadata for this purpose.
+ *
+ * A JPEGImageReadParam instance is retrieved from the built-in JPEG
+ * ImageReader using the getDefaultImageReadParam method.
+ */
+public class JPEGImageReadParam
+ extends ImageReadParam
+{
+ private JPEGQTable[] qTables;
+ private JPEGHuffmanTable[] DCHuffmanTables;
+ private JPEGHuffmanTable[] ACHuffmanTables;
+
+ /**
+ * Construct a JPEGImageReadParam.
+ */
+ public JPEGImageReadParam()
+ {
+ super();
+ }
+
+ /**
+ * Check if the decoding tables are set.
+ *
+ * @return true if the decoding tables are set, false otherwise
+ */
+ public boolean areTablesSet()
+ {
+ // If qTables is not null then all tables are set.
+ return (qTables != null);
+ }
+
+ /**
+ * Set the quantization and Huffman tables that will be used to
+ * decode the stream. Copies are created of the array arguments.
+ * The number of Huffman tables must be the same in both Huffman
+ * table arrays. No argument may be null and no array may be longer
+ * than four elements.
+ *
+ * @param qTables JPEG quantization tables
+ * @param DCHuffmanTables JPEG DC Huffman tables
+ * @param ACHuffmanTables JPEG AC Huffman tables
+ *
+ * @throws IllegalArgumentException if any argument is null, if any
+ * of the arrays are longer than four elements, or if the Huffman
+ * table arrays do not have the same number of elements
+ */
+ public void setDecodeTables(JPEGQTable[] qTables,
+ JPEGHuffmanTable[] DCHuffmanTables,
+ JPEGHuffmanTable[] ACHuffmanTables)
+ {
+ if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null)
+ throw new IllegalArgumentException("null argument");
+
+ if (qTables.length > 4 || DCHuffmanTables.length > 4
+ || ACHuffmanTables.length > 4)
+ throw new IllegalArgumentException("argument has too many elements");
+
+ if (DCHuffmanTables.length != ACHuffmanTables.length)
+ throw new IllegalArgumentException("Huffman table arrays differ in length");
+
+ // Do a shallow copy. JPEGQTable's data is not directly
+ // modifyable since JPEGQTable.getTable returns a copy. Therefore
+ // it is safe to have multiple references to a single JPEGQTable.
+ // Likewise for JPEGHuffmanTable.
+ this.qTables = (JPEGQTable[]) qTables.clone();
+ this.DCHuffmanTables = (JPEGHuffmanTable[]) DCHuffmanTables.clone();
+ this.ACHuffmanTables = (JPEGHuffmanTable[]) ACHuffmanTables.clone();
+ }
+
+ /**
+ * Clear the quantization and Huffman decoding tables.
+ */
+ public void unsetDecodeTables()
+ {
+ qTables = null;
+ DCHuffmanTables = null;
+ ACHuffmanTables = null;
+ }
+
+ /**
+ * Retrieve the quantization tables.
+ *
+ * @returns an array of JPEG quantization tables
+ */
+ public JPEGQTable[] getQTables()
+ {
+ return qTables == null ? qTables : (JPEGQTable[]) qTables.clone();
+ }
+
+ /**
+ * Retrieve the DC Huffman tables.
+ *
+ * @return an array of JPEG DC Huffman tables
+ */
+ public JPEGHuffmanTable[] getDCHuffmanTables()
+ {
+ return DCHuffmanTables == null ? DCHuffmanTables
+ : (JPEGHuffmanTable[]) DCHuffmanTables.clone();
+ }
+
+ /**
+ * Retrieve the AC Huffman tables.
+ *
+ * @return an array of JPEG AC Huffman tables
+ */
+ public JPEGHuffmanTable[] getACHuffmanTables()
+ {
+ return ACHuffmanTables == null ? ACHuffmanTables
+ : (JPEGHuffmanTable[]) ACHuffmanTables.clone();
+ }
+}
diff --git a/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java
new file mode 100644
index 0000000..1e7989e
--- /dev/null
+++ b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java
@@ -0,0 +1,293 @@
+/* JPEGImageWriteParam.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package javax.imageio.plugins.jpeg;
+
+import java.util.Locale;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import javax.imageio.ImageWriteParam;
+
+/**
+ * The JPEGImageWriteParam class can be used to specify tables and
+ * settings used in the JPEG encoding process. Encoding tables are
+ * taken from the metadata associated with the output stream, and
+ * failing that (if the metadata tables are null) from an instance of
+ * JPEGImageWriteParam. The default metadata uses the standard JPEG
+ * tables from the JPEGQTable and JPEGHuffmanTable classes. Non-null
+ * metadata tables override JPEGImageWriteParam tables. Compression
+ * settings range from 1.0, best compression, through 0.75, default
+ * compression, to 0.0, worst compression.
+ *
+ * A JPEGImageWriteParam instance is retrieved from the built-in JPEG
+ * ImageWriter using the getDefaultImageWriteParam method.
+ */
+public class JPEGImageWriteParam
+ extends ImageWriteParam
+{
+ private JPEGQTable[] qTables;
+ private JPEGHuffmanTable[] DCHuffmanTables;
+ private JPEGHuffmanTable[] ACHuffmanTables;
+ private boolean optimize;
+ private String[] compressionQualityDescriptions;
+ private float[] compressionQualityValues;
+
+ /**
+ * Localized messages are stored in separate files.
+ */
+ private ResourceBundle messages;
+
+ /**
+ * Construct a JPEGImageWriteParam with the following state: tiling
+ * is not supported, progressive mode is supported, initial
+ * progressive mode is MODE_DISABLED, compression is supported, one
+ * compression type named "JPEG" is supported and the default
+ * compression quality is 0.75f. Compression type names and
+ * compression quality descriptions are localized to the given
+ * locale.
+ *
+ * @param locale the locale used for message localization
+ */
+ public JPEGImageWriteParam(Locale locale)
+ {
+ super(locale);
+
+ // Get localized compression type and compression quality
+ // description strings for the given locale.
+ messages = PropertyResourceBundle.getBundle
+ ("javax/imageio/plugins/jpeg/MessagesBundle", locale);
+
+ // Initialize inherited ImageWriter fields.
+ canWriteTiles = false;
+ canWriteProgressive = true;
+ progressiveMode = MODE_DISABLED;
+ canWriteCompressed = true;
+ compressionTypes = new String[]
+ {
+ messages.getString("compression.types.jpeg")
+ };
+ compressionType = compressionTypes[0];
+ compressionQuality = 0.75f;
+ }
+
+ /**
+ * Reset the compression quality to 0.75f.
+ */
+ public void unsetCompression()
+ {
+ compressionQuality = 0.75f;
+ }
+
+ /**
+ * Check if compression algorithm is lossless. JPEGImageWriteParam
+ * overrides this ImageWriteParam method to always return false
+ * since JPEG compression is inherently lossy.
+ *
+ * @return false
+ */
+ public boolean isCompressionLossless()
+ {
+ return false;
+ }
+
+ /**
+ * Retrieve an array of compression quality descriptions. These
+ * messages are localized using the locale provided upon
+ * construction. Each compression quality description in the
+ * returned array corresponds to the compression quality value at
+ * the same index in the array returned by
+ * getCompressionQualityValues.
+ *
+ * @return an array of strings each of which describes a compression
+ * quality value
+ */
+ public String[] getCompressionQualityDescriptions()
+ {
+ // Make sure exceptions are thrown when this image write param is
+ // in the wrong state.
+ super.getCompressionQualityDescriptions();
+
+ if (compressionQualityDescriptions == null)
+ {
+ compressionQualityDescriptions = new String[]
+ {
+ messages.getString("compression.minimum"),
+ messages.getString("compression.default"),
+ messages.getString("compression.maximum")
+ };
+ }
+
+ return compressionQualityDescriptions;
+ }
+
+ /**
+ * Retrieve an array of compression quality values, ordered from
+ * lowest quality to highest quality.
+ *
+ * @return an array of compressions quality values
+ */
+ public float[] getCompressionQualityValues()
+ {
+ // Make sure exceptions are thrown when this image write param is
+ // in the wrong state.
+ super.getCompressionQualityValues();
+
+ if (compressionQualityValues == null)
+ compressionQualityValues = new float[] { 0.05f, 0.75f, 0.95f };
+
+ return compressionQualityValues;
+ }
+
+ /**
+ * Check if the encoding tables are set.
+ *
+ * @return true if the encoding tables are set, false otherwise
+ */
+ public boolean areTablesSet()
+ {
+ // If qTables is not null then all tables are set.
+ return (qTables != null);
+ }
+
+ /**
+ * Set the quantization and Huffman tables that will be used to
+ * encode the stream. Copies are created of the array arguments.
+ * The number of Huffman tables must be the same in both Huffman
+ * table arrays. No argument may be null and no array may be longer
+ * than four elements.
+ *
+ * @param qTables JPEG quantization tables
+ * @param DCHuffmanTables JPEG DC Huffman tables
+ * @param ACHuffmanTables JPEG AC Huffman tables
+ *
+ * @throws IllegalArgumentException if any argument is null, if any
+ * of the arrays are longer than four elements, or if the Huffman
+ * table arrays do not have the same number of elements
+ */
+ public void setEncodeTables(JPEGQTable[] qTables,
+ JPEGHuffmanTable[] DCHuffmanTables,
+ JPEGHuffmanTable[] ACHuffmanTables)
+ {
+ if (qTables == null || DCHuffmanTables == null || ACHuffmanTables == null)
+ throw new IllegalArgumentException("null argument");
+
+ if (qTables.length > 4 || DCHuffmanTables.length > 4
+ || ACHuffmanTables.length > 4)
+ throw new IllegalArgumentException("argument has too many elements");
+
+ if (DCHuffmanTables.length != ACHuffmanTables.length)
+ throw new IllegalArgumentException("Huffman table arrays differ in length");
+
+ // Do a shallow copy. JPEGQTable's data is not directly
+ // modifyable since JPEGQTable.getTable returns a copy. Therefore
+ // it is safe to have multiple references to a single JPEGQTable.
+ // Likewise for JPEGHuffmanTable.
+ this.qTables = (JPEGQTable[]) qTables.clone();
+ this.DCHuffmanTables = (JPEGHuffmanTable[]) DCHuffmanTables.clone();
+ this.ACHuffmanTables = (JPEGHuffmanTable[]) ACHuffmanTables.clone();
+ }
+
+ /**
+ * Clear the quantization and Huffman encoding tables.
+ */
+ public void unsetEncodeTables()
+ {
+ qTables = null;
+ DCHuffmanTables = null;
+ ACHuffmanTables = null;
+ }
+
+ /**
+ * Retrieve the quantization tables.
+ *
+ * @returns an array of JPEG quantization tables
+ */
+ public JPEGQTable[] getQTables()
+ {
+ return qTables == null ? qTables : (JPEGQTable[]) qTables.clone();
+ }
+
+ /**
+ * Retrieve the DC Huffman tables.
+ *
+ * @return an array of JPEG DC Huffman tables
+ */
+ public JPEGHuffmanTable[] getDCHuffmanTables()
+ {
+ return DCHuffmanTables == null ? DCHuffmanTables
+ : (JPEGHuffmanTable[]) DCHuffmanTables.clone();
+ }
+
+ /**
+ * Retrieve the AC Huffman tables.
+ *
+ * @return an array of JPEG AC Huffman tables
+ */
+ public JPEGHuffmanTable[] getACHuffmanTables()
+ {
+ return ACHuffmanTables == null ? ACHuffmanTables
+ : (JPEGHuffmanTable[]) ACHuffmanTables.clone();
+ }
+
+ /**
+ * Specify whether or not Huffman tables written to the output
+ * stream should be optimized. Every image encoded with this flag
+ * set will contain a Huffman table, and the generated Huffman
+ * tables will override those specified in the metadata.
+ *
+ * @param optimize true to generate optimized Huffman tables, false
+ * otherwise
+ */
+ public void setOptimizeHuffmanTables(boolean optimize)
+ {
+ this.optimize = optimize;
+ }
+
+ /**
+ * Check whether or not Huffman tables written to the output stream
+ * will be optimized. Unless otherwise set using
+ * setOptimizeHuffmanTables, this returns false.
+ *
+ * @return true Huffman tables written to the output stream will be
+ * optimized, false otherwise
+ */
+ public boolean getOptimizeHuffmanTables()
+ {
+ return optimize;
+ }
+}
diff --git a/libjava/classpath/javax/imageio/plugins/jpeg/JPEGQTable.java b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGQTable.java
new file mode 100644
index 0000000..a94e8b1
--- /dev/null
+++ b/libjava/classpath/javax/imageio/plugins/jpeg/JPEGQTable.java
@@ -0,0 +1,196 @@
+/* JPEGQTable.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package javax.imageio.plugins.jpeg;
+
+/**
+ * The JPEGQTable class represents a quantization table that can be
+ * used to encode or decode a JPEG stream. The standard JPEG
+ * luminance and chrominance quantization tables are provided as
+ * static fields. Table entries are stored in natural order, not
+ * zig-zag order.
+ */
+public class JPEGQTable
+{
+ /**
+ * The table entries, stored in natural order.
+ */
+ private int[] table;
+
+ /**
+ * The standard JPEG luminance quantization table. Values are
+ * stored in natural order.
+ */
+ public static final JPEGQTable K1Luminance = new JPEGQTable(new int[]
+ {
+ 16, 11, 10, 16, 24, 40, 51, 61,
+ 12, 12, 14, 19, 26, 58, 60, 55,
+ 14, 13, 16, 24, 40, 57, 69, 56,
+ 14, 17, 22, 29, 51, 87, 80, 62,
+ 18, 22, 37, 56, 68, 109, 103, 77,
+ 24, 35, 55, 64, 81, 104, 113, 92,
+ 49, 64, 78, 87, 103, 121, 120, 101,
+ 72, 92, 95, 98, 112, 100, 103, 99
+ }, false);
+
+ /**
+ * The standard JPEG luminance quantization table, scaled by
+ * one-half. Values are stored in natural order.
+ */
+ public static final JPEGQTable K1Div2Luminance =
+ K1Luminance.getScaledInstance(0.5f, true);
+
+ /**
+ * The standard JPEG chrominance quantization table. Values are
+ * stored in natural order.
+ */
+ public static final JPEGQTable K2Chrominance = new JPEGQTable(new int[]
+ {
+ 17, 18, 24, 47, 99, 99, 99, 99,
+ 18, 21, 26, 66, 99, 99, 99, 99,
+ 24, 26, 56, 99, 99, 99, 99, 99,
+ 47, 66, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99
+ }, false);
+
+ /**
+ * The standard JPEG chrominance quantization table, scaled by
+ * one-half. Values are stored in natural order.
+ */
+ public static final JPEGQTable K2Div2Chrominance =
+ K2Chrominance.getScaledInstance(0.5f, true);
+
+ /**
+ * Construct a new JPEG quantization table. A copy is created of
+ * the table argument.
+ *
+ * @param table the 64-element value table, stored in natural order
+ *
+ * @throws IllegalArgumentException if the table is null or if
+ * table's length is not equal to 64.
+ */
+ public JPEGQTable(int[] table)
+ {
+ this(checkTable(table), true);
+ }
+
+ /**
+ * Private constructor that avoids unnecessary copying and argument
+ * checking.
+ *
+ * @param table the 64-element value table, stored in natural order
+ * @param copy true if a copy should be created of the given table
+ */
+ private JPEGQTable(int[] table, boolean copy)
+ {
+ this.table = copy ? (int[]) table.clone() : table;
+ }
+
+ private static int[] checkTable(int[] table)
+ {
+ if (table == null || table.length != 64)
+ throw new IllegalArgumentException("invalid JPEG quantization table");
+
+ return table;
+ }
+
+ /**
+ * Retrieve a copy of the quantization values for this table.
+ *
+ * @return a copy of the quantization value array
+ */
+ public int[] getTable()
+ {
+ return (int[]) table.clone();
+ }
+
+ /**
+ * Retrieve a copy of this JPEG quantization table with every value
+ * scaled by the given scale factor, and clamped from 1 to 255
+ * baseline or from 1 to 32767 otherwise.
+ *
+ * @param scaleFactor the factor by which to scale this table
+ * @param forceBaseline clamp scaled values to a maximum of 255 if
+ * true, 32767 if false
+ *
+ * @return a new scaled JPEG quantization table
+ */
+ public JPEGQTable getScaledInstance(float scaleFactor,
+ boolean forceBaseline)
+ {
+ int[] scaledTable = getTable();
+ int max = forceBaseline ? 255 : 32767;
+
+ for (int i = 0; i < scaledTable.length; i++)
+ {
+ scaledTable[i] = Math.round (scaleFactor * (float) scaledTable[i]);
+ if (scaledTable[i] < 1)
+ scaledTable[i] = 1;
+ else if (scaledTable[i] > max)
+ scaledTable[i] = max;
+ }
+
+ // Do not copy scaledTable. It is already a copy because we used
+ // getTable to retrieve it.
+ return new JPEGQTable(scaledTable, false);
+ }
+
+ /**
+ * Create a string representing this JPEG quantization table.
+ */
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("JPEGQTable:\n");
+ for (int i = 0; i < 8; i++)
+ {
+ buffer.append(" ");
+ for (int j = 0; j < 8; j++)
+ {
+ buffer.append(table[i * 8 + j] + " ");
+ }
+ buffer.append("\n");
+ }
+
+ return buffer.toString();
+ }
+}
diff --git a/libjava/classpath/javax/imageio/stream/FileCacheImageOutputStream.java b/libjava/classpath/javax/imageio/stream/FileCacheImageOutputStream.java
index 16cd0a7..ae65598 100644
--- a/libjava/classpath/javax/imageio/stream/FileCacheImageOutputStream.java
+++ b/libjava/classpath/javax/imageio/stream/FileCacheImageOutputStream.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.imageio.stream;
+import gnu.classpath.NotImplementedException;
+
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -92,14 +94,14 @@ public class FileCacheImageOutputStream extends ImageOutputStreamImpl
}
public int read()
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
}
public int read(byte[] data, int offset, int len)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
diff --git a/libjava/classpath/javax/imageio/stream/ImageInputStreamImpl.java b/libjava/classpath/javax/imageio/stream/ImageInputStreamImpl.java
index 0967fee..c1a5dd4 100644
--- a/libjava/classpath/javax/imageio/stream/ImageInputStreamImpl.java
+++ b/libjava/classpath/javax/imageio/stream/ImageInputStreamImpl.java
@@ -55,7 +55,7 @@ public abstract class ImageInputStreamImpl implements ImageInputStream
byte[] buffer = new byte[8];
protected int bitOffset;
- protected ByteOrder byteOrder;
+ protected ByteOrder byteOrder = ByteOrder.BIG_ENDIAN;
protected long flushedPos;
protected long streamPos;
diff --git a/libjava/classpath/javax/imageio/stream/ImageOutputStream.java b/libjava/classpath/javax/imageio/stream/ImageOutputStream.java
index 49a1bcf..4688ad9 100644
--- a/libjava/classpath/javax/imageio/stream/ImageOutputStream.java
+++ b/libjava/classpath/javax/imageio/stream/ImageOutputStream.java
@@ -54,7 +54,7 @@ public interface ImageOutputStream
extends ImageInputStream, DataOutput
{
/**
- * @param postion
+ * @param position
*
* @throws IOException if an errror occurs
*/
diff --git a/libjava/classpath/javax/imageio/stream/ImageOutputStreamImpl.java b/libjava/classpath/javax/imageio/stream/ImageOutputStreamImpl.java
index c708a23..1179fed 100644
--- a/libjava/classpath/javax/imageio/stream/ImageOutputStreamImpl.java
+++ b/libjava/classpath/javax/imageio/stream/ImageOutputStreamImpl.java
@@ -38,7 +38,10 @@ exception statement from your version. */
package javax.imageio.stream;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
+import java.io.UTFDataFormatException;
import java.nio.ByteOrder;
/**
@@ -52,8 +55,8 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
// Do nothing here.
}
- protected void flushBits()
- throws IOException
+ protected final void flushBits()
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
@@ -72,14 +75,14 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
throws IOException;
public void writeBit(int bit)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
}
public void writeBits(long bits, int numBits)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
@@ -100,13 +103,17 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
public void writeBytes(String data)
throws IOException
{
- write(data.getBytes());
+ // This is bogus, but it is how the method is specified.
+ // Sun ought to deprecate this method.
+ int len = data.length();
+ for (int i = 0; i < len; ++i)
+ writeByte(data.charAt(i));
}
public void writeChar(int value)
throws IOException
{
- writeShort((short) value);
+ writeShort(value);
}
public void writeChars(char[] data, int offset, int len)
@@ -119,14 +126,15 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
public void writeChars(String data)
throws IOException
{
- // FIXME: Implement me.
- throw new Error("not implemented");
+ int len = data.length();
+ for (int i = 0; i < len; ++i)
+ writeChar(data.charAt(i));
}
public void writeDouble(double value)
throws IOException
{
- writeLong((long) value);
+ writeLong(Double.doubleToLongBits(value));
}
public void writeDoubles(double[] data, int offset, int len)
@@ -139,7 +147,7 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
public void writeFloat(float value)
throws IOException
{
- writeInt((int) value);
+ writeInt(Float.floatToIntBits(value));
}
public void writeFloats(float[] data, int offset, int len)
@@ -237,9 +245,52 @@ public abstract class ImageOutputStreamImpl extends ImageInputStreamImpl
writeShort(data[offset + i]);
}
- public void writeUTF(String data)
+ public void writeUTF(String value)
throws IOException
{
- throw new Error("not implemented");
+ // NOTE: this code comes directly from DataOutputStream.
+ int len = value.length();
+ int sum = 0;
+
+ for (int i = 0; i < len && sum <= 65535; ++i)
+ {
+ char c = value.charAt(i);
+ if (c >= '\u0001' && c <= '\u007f')
+ sum += 1;
+ else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ sum += 2;
+ else
+ sum += 3;
+ }
+
+ if (sum > 65535)
+ throw new UTFDataFormatException ();
+
+ int pos = 0;
+ byte[] buf = new byte[sum];
+
+ for (int i = 0; i < len; ++i)
+ {
+ char c = value.charAt(i);
+ if (c >= '\u0001' && c <= '\u007f')
+ buf[pos++] = (byte) c;
+ else if (c == '\u0000' || (c >= '\u0080' && c <= '\u07ff'))
+ {
+ buf[pos++] = (byte) (0xc0 | (0x1f & (c >> 6)));
+ buf[pos++] = (byte) (0x80 | (0x3f & c));
+ }
+ else
+ {
+ // JSL says the first byte should be or'd with 0xc0, but
+ // that is a typo. Unicode says 0xe0, and that is what is
+ // consistent with DataInputStream.
+ buf[pos++] = (byte) (0xe0 | (0x0f & (c >> 12)));
+ buf[pos++] = (byte) (0x80 | (0x3f & (c >> 6)));
+ buf[pos++] = (byte) (0x80 | (0x3f & c));
+ }
+ }
+
+ writeShort (sum);
+ write(buf, 0, sum);
}
}
diff --git a/libjava/classpath/javax/imageio/stream/MemoryCacheImageInputStream.java b/libjava/classpath/javax/imageio/stream/MemoryCacheImageInputStream.java
index 3d9f618..935408c 100644
--- a/libjava/classpath/javax/imageio/stream/MemoryCacheImageInputStream.java
+++ b/libjava/classpath/javax/imageio/stream/MemoryCacheImageInputStream.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.imageio.stream;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
import java.io.InputStream;
@@ -61,7 +63,7 @@ public class MemoryCacheImageInputStream extends ImageInputStreamImpl
}
public void flushBefore(long position)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
diff --git a/libjava/classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java b/libjava/classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java
index 8914c33..17039f5 100644
--- a/libjava/classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java
+++ b/libjava/classpath/javax/imageio/stream/MemoryCacheImageOutputStream.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.imageio.stream;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
import java.io.OutputStream;
@@ -61,7 +63,7 @@ public class MemoryCacheImageOutputStream extends ImageOutputStreamImpl
}
public void flushBefore(long position)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
@@ -83,14 +85,14 @@ public class MemoryCacheImageOutputStream extends ImageOutputStreamImpl
}
public int read()
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
}
public int read (byte[] data, int offset, int len)
- throws IOException
+ throws IOException, NotImplementedException
{
// FIXME: Implement me.
throw new Error("not implemented");
diff --git a/libjava/classpath/javax/naming/Binding.java b/libjava/classpath/javax/naming/Binding.java
index 9d6608a..a34f8b3 100644
--- a/libjava/classpath/javax/naming/Binding.java
+++ b/libjava/classpath/javax/naming/Binding.java
@@ -39,31 +39,73 @@ exception statement from your version. */
package javax.naming;
/**
+ * <code>Binding</code> represents the name-object mapping of a
+ * binding in a context.
+ * <p>
+ * Bindings are mappings of a name to an object and this class is used to
+ * specify such mappings. The bindings of a context are retrieved by the
+ * <code>Context#listBindings()</code> methods.
+ * </p>
+ *
* @author Tom Tromey (tromey@redhat.com)
- * @date May 16, 2001
+ * @since 1.3
*/
public class Binding extends NameClassPair
{
private static final long serialVersionUID = 8839217842691845890L;
+ /**
+ * Constructs an instance with the given name and object.
+ *
+ * @param name the name of the binding relative to the target context
+ * (may not be <code>null</code>)
+ * @param obj the bound object
+ */
public Binding (String name, Object obj)
{
super (name, null);
boundObj = obj;
}
+ /**
+ * Constructs an instance with the given name and object and a
+ * flag indicating if the name is relative to the target context.
+ *
+ * @param name the name of the binding relative to the target context
+ * (may not be <code>null</code>)
+ * @param obj the bound object
+ * @param isRelative flag indicating if the name is relative or not
+ */
public Binding (String name, Object obj, boolean isRelative)
{
super (name, null, isRelative);
boundObj = obj;
}
+ /**
+ * Constructs an instance with the given name, classname and object.
+ *
+ * @param name the name of the binding relative to the target context
+ * (may not be <code>null</code>)
+ * @param className the classname to set (maybe <code>null</code>)
+ * @param obj the bound object
+ */
public Binding (String name, String className, Object obj)
{
super (name, className);
boundObj = obj;
}
+ /**
+ * Constructs an instance with the given name, classname, object and a
+ * flag indicating if the name is relative to the target context.
+ *
+ * @param name the name of the binding relative to the target context
+ * (may not be <code>null</code>)
+ * @param className the classname to set (maybe <code>null</code>)
+ * @param isRelative flag indicating if the name is relative or not
+ * @param obj the bound object
+ */
public Binding (String name, String className, Object obj,
boolean isRelative)
{
@@ -71,6 +113,15 @@ public class Binding extends NameClassPair
boundObj = obj;
}
+ /**
+ * Returns the classname of the bound object.
+ * <p>
+ * Returns the classname if set explicitly. If not and the bound object is
+ * not <code>null</code> the classname of the bound object is used.
+ * </p>
+ *
+ * @return The fully qualified classname (may be <code>null</code>).
+ */
public String getClassName ()
{
String r = super.getClassName ();
@@ -79,16 +130,29 @@ public class Binding extends NameClassPair
return boundObj == null ? null : boundObj.getClass ().getName ();
}
+ /**
+ * Returns the bound object of this binding.
+ * @return The bound object (maybe <code>null</code>).
+ */
public Object getObject ()
{
return boundObj;
}
+ /**
+ * Sets the bound object of this binding.
+ * @param obj the bound object.
+ */
public void setObject (Object obj)
{
boundObj = obj;
}
+ /**
+ * Returns the string representation.
+ * @return The string as given by the NameClassPair superclass plus
+ * the bound objects string representation seperated by a colon.
+ */
public String toString ()
{
// Format specified by the documentation.
diff --git a/libjava/classpath/javax/naming/CompositeName.java b/libjava/classpath/javax/naming/CompositeName.java
index 61adcf1..6f3466c 100644
--- a/libjava/classpath/javax/naming/CompositeName.java
+++ b/libjava/classpath/javax/naming/CompositeName.java
@@ -1,5 +1,5 @@
/* CompositeName.java --
- Copyright (C) 2001, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,9 @@ exception statement from your version. */
package javax.naming;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.NoSuchElementException;
@@ -45,10 +48,6 @@ import java.util.Vector;
/**
* @author Tom Tromey (tromey@redhat.com)
- * @date May 16, 2001
- *
- * FIXME: must write readObject and writeObject to conform to
- * serialization spec.
*/
public class CompositeName implements Name, Cloneable, Serializable
{
@@ -316,6 +315,22 @@ public class CompositeName implements Name, Cloneable, Serializable
}
return result.toString ();
}
+
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ int size = s.readInt();
+ elts = new Vector(size);
+ for (int i = 0; i < size; i++)
+ elts.add(s.readObject());
+ }
+
+ private void writeObject(ObjectOutputStream s) throws IOException
+ {
+ s.writeInt(elts.size());
+ for (int i = 0; i < elts.size(); i++)
+ s.writeObject(elts.get(i));
+ }
private transient Vector elts;
}
diff --git a/libjava/classpath/javax/naming/NameClassPair.java b/libjava/classpath/javax/naming/NameClassPair.java
index 127730a..7925d45 100644
--- a/libjava/classpath/javax/naming/NameClassPair.java
+++ b/libjava/classpath/javax/naming/NameClassPair.java
@@ -41,18 +41,43 @@ package javax.naming;
import java.io.Serializable;
/**
+ * <code>NameClassPair</code> represents the name-classname mapping pair
+ * of a binding in a context.
+ * <p>
+ * Bindings are mappings of a name to an object and this class is used to
+ * specify the mapping of the name to the class type of the bound object.
+ * As classname the fully qualified classname is used.
+ * </p>
+ *
* @author Tom Tromey (tromey@redhat.com)
- * @date May 16, 2001
+ * @since 1.3
*/
public class NameClassPair implements Serializable
{
private static final long serialVersionUID = 5620776610160863339L;
+ /**
+ * Constructs an instance with the given name and classname.
+ *
+ * @param name the name of the binding relative to the target context
+ * (may not be <code>null</code>)
+ * @param className the name of the class. If <code>null</code> the bound
+ * object is also <code>null</code>
+ */
public NameClassPair (String name, String className)
{
this (name, className, true);
}
+ /**
+ * Constructs an instance with the given name and classname and a
+ * flag indicating if the name is relative to the target context.
+ *
+ * @param name the name of the binding (may not be <code>null</code>)
+ * @param className the name of the class. If <code>null</code> the bound
+ * object is also <code>null</code>
+ * @param isRelative flag indicating if the name is relative or not
+ */
public NameClassPair (String name, String className, boolean isRelative)
{
this.name = name;
@@ -60,36 +85,105 @@ public class NameClassPair implements Serializable
this.isRel = isRelative;
}
+ /**
+ * Returns the classname of the binding.
+ * @return The fully qualified classname or <code>null</code> if the
+ * bound object is null.
+ */
public String getClassName ()
{
return className;
}
+ /**
+ * Returns the name of the binding.
+ * @return The name.
+ */
public String getName ()
{
return name;
}
+ /**
+ * Checks whether the name is relative to the target context or not.
+ * @return <code>true</code> if the name is relative,
+ * <code>false</code> otherwise.
+ */
public boolean isRelative ()
{
return isRel;
}
+ /**
+ * Sets the classname of the bound object.
+ * @param name the classname to set (maybe <code>null</code>)
+ */
public void setClassName (String name)
{
this.className = name;
}
+ /**
+ * Sets the name of the binding.
+ * @param name the name to set
+ */
public void setName (String name)
{
this.name = name;
}
+ /**
+ * Sets if the name is relative to the target context.
+ * @param r <code>true</code> to mark as relative
+ */
public void setRelative (boolean r)
{
this.isRel = r;
}
+
+ /**
+ * Sets the full name for this binding. Setting the full name by this
+ * method is the only way to initialize full names of bindings if
+ * supported by a specific naming system.
+ *
+ * @param fullName the full name of this binding. If not set or set to
+ * <code>null</code> the <code>getNameInNamespace()</code> method will
+ * throw an exception
+ *
+ * @see #getNameInNamespace()
+ *
+ * @since 1.5
+ */
+ public void setNameInNamespace(String fullName)
+ {
+ this.fullName = fullName;
+ }
+
+ /**
+ * Returns the full name for this binding. The full name of a binding is
+ * defined as the absolute name in its own namespace and is not valid
+ * outside.
+ *
+ * @return The full name in the bindings namespace.
+ * @throws UnsupportedOperationException if no full name is applicable in
+ * the specific naming system.
+ *
+ * @see Context#getNameInNamespace()
+ *
+ * @since 1.5
+ */
+ public String getNameInNamespace()
+ {
+ if (this.fullName == null)
+ throw new UnsupportedOperationException();
+
+ return this.fullName;
+ }
+ /**
+ * Returns the string representation.
+ * @return The string <code>getName() + ":" + getClassName()</code>.
+ */
public String toString ()
{
// Specified by class documentation.
@@ -100,4 +194,5 @@ public class NameClassPair implements Serializable
private String name;
private String className;
private boolean isRel;
+ private String fullName;
}
diff --git a/libjava/classpath/javax/naming/directory/BasicAttribute.java b/libjava/classpath/javax/naming/directory/BasicAttribute.java
index 0470365..c641979 100644
--- a/libjava/classpath/javax/naming/directory/BasicAttribute.java
+++ b/libjava/classpath/javax/naming/directory/BasicAttribute.java
@@ -1,5 +1,5 @@
/* BasicAttribute.java --
- Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,9 @@ exception statement from your version. */
package javax.naming.directory;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.NoSuchElementException;
import java.util.Vector;
@@ -48,6 +51,7 @@ import javax.naming.OperationNotSupportedException;
/**
* @author Tom Tromey (tromey@redhat.com)
* @date June 20, 2001
+ * @since 1.3
*/
public class BasicAttribute implements Attribute
{
@@ -297,11 +301,29 @@ public class BasicAttribute implements Attribute
return one.equals (two);
}
+
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ s.defaultReadObject();
+ int size = s.readInt();
+ values = new Vector(size);
+ for (int i=0; i < size; i++)
+ values.add(s.readObject());
+ }
+ private void writeObject(ObjectOutputStream s) throws IOException
+ {
+ s.defaultWriteObject();
+ s.writeInt(values.size());
+ for (int i=0; i < values.size(); i++)
+ s.writeObject(values.get(i));
+ }
+
// Used when enumerating this attribute.
private class BasicAttributeEnumeration implements NamingEnumeration
{
- int where = -1;
+ int where = 0;
public BasicAttributeEnumeration ()
{
@@ -328,10 +350,9 @@ public class BasicAttribute implements Attribute
public Object nextElement () throws NoSuchElementException
{
- if (where + 1 >= values.size ())
+ if (where == values.size ())
throw new NoSuchElementException ("no more elements");
- ++where;
- return values.get (where);
+ return values.get (where++);
}
}
}
diff --git a/libjava/classpath/javax/naming/directory/BasicAttributes.java b/libjava/classpath/javax/naming/directory/BasicAttributes.java
index 37ec195..9318fbb 100644
--- a/libjava/classpath/javax/naming/directory/BasicAttributes.java
+++ b/libjava/classpath/javax/naming/directory/BasicAttributes.java
@@ -1,5 +1,5 @@
/* BasicAttributes.java --
- Copyright (C) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,9 @@ exception statement from your version. */
package javax.naming.directory;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.NoSuchElementException;
import java.util.Vector;
@@ -196,6 +199,24 @@ public class BasicAttributes implements Attributes
// Package-private to avoid a trampoline.
transient Vector attributes;
+ private void readObject(ObjectInputStream s) throws IOException,
+ ClassNotFoundException
+ {
+ s.defaultReadObject();
+ int size = s.readInt();
+ attributes = new Vector(size);
+ for (int i = 0; i < size; i++)
+ attributes.add(s.readObject());
+ }
+
+ private void writeObject(ObjectOutputStream s) throws IOException
+ {
+ s.defaultWriteObject();
+ s.writeInt(attributes.size());
+ for (int i = 0; i < attributes.size(); i++)
+ s.writeObject(attributes.get(i));
+ }
+
// Used when enumerating.
private class BasicAttributesEnumeration implements NamingEnumeration
{
diff --git a/libjava/classpath/javax/naming/ldap/StartTlsRequest.java b/libjava/classpath/javax/naming/ldap/StartTlsRequest.java
new file mode 100644
index 0000000..b0a30b5
--- /dev/null
+++ b/libjava/classpath/javax/naming/ldap/StartTlsRequest.java
@@ -0,0 +1,108 @@
+/* StartTlsRequest.java -- extended ldap TLS request
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.naming.ldap;
+
+import java.util.Iterator;
+
+import gnu.classpath.ServiceFactory;
+
+import javax.naming.NamingException;
+
+/**
+ * @since 1.4
+ */
+public class StartTlsRequest
+ implements ExtendedRequest
+{
+ private static final long serialVersionUID = 4441679576360753397L;
+
+ /**
+ * The assigned object identifier for this response.
+ */
+ public static final String OID = "1.3.6.1.4.1.1466.20037";
+
+ /**
+ * Create a new instance.
+ */
+ public StartTlsRequest()
+ {
+ }
+
+ /**
+ * Return the response identifier. This is simply the value
+ * of the {@link #OID} field.
+ */
+ public String getID()
+ {
+ return OID;
+ }
+
+ /**
+ * Return the encoded value. This implementation always returns null.
+ */
+ public byte[] getEncodedValue()
+ {
+ return null;
+ }
+
+ /**
+ * Create a new extended reponse object, using the standard service
+ * provider approach to load a provider. The provider will be a subclass
+ * of StartTlsRequest with a no-argument constructor. The key is
+ * "javax.naming.ldap.StartTlsRequest".
+ * @param id the identifier, must be {@link #OID} or null
+ * @param berValue ignored
+ * @param offset ignored
+ * @param length ignored
+ * @throws NamingException if there is a problem creating the response
+ */
+ public ExtendedResponse createExtendedResponse(String id, byte[] berValue,
+ int offset, int length)
+ throws NamingException
+ {
+ if (id != null && ! OID.equals(id))
+ throw new NamingException("incorrect id: was \"" + id
+ + "\", but expected: \"" + OID + "\"");
+ Iterator it = ServiceFactory.lookupProviders(StartTlsRequest.class);
+ if (it.hasNext())
+ return (ExtendedResponse) it.next();
+ throw new NamingException("couldn't find provider for "
+ + "javax.naming.ldap.StartTlsRequest");
+ }
+}
diff --git a/libjava/classpath/javax/naming/ldap/StartTlsResponse.java b/libjava/classpath/javax/naming/ldap/StartTlsResponse.java
new file mode 100644
index 0000000..68cd5bf
--- /dev/null
+++ b/libjava/classpath/javax/naming/ldap/StartTlsResponse.java
@@ -0,0 +1,119 @@
+/* StartTlsResponse.java -- extended ldap TLS response
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.naming.ldap;
+
+import java.io.IOException;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+
+/**
+ * @since 1.4
+ */
+public abstract class StartTlsResponse
+ implements ExtendedResponse
+{
+ private static final long serialVersionUID = 8372842182579276418L;
+
+ /**
+ * The assigned object identifier for this response.
+ */
+ public static final String OID = "1.3.6.1.4.1.1466.20037";
+
+ /**
+ * Create a new instance.
+ */
+ protected StartTlsResponse()
+ {
+ }
+
+ /**
+ * Return the response identifier. This is simply the value
+ * of the {@link #OID} field.
+ */
+ public String getID()
+ {
+ return OID;
+ }
+
+ /**
+ * Return the encoded value. This implementation always returns null.
+ */
+ public byte[] getEncodedValue()
+ {
+ return null;
+ }
+
+ /**
+ * Set the list of cipher suites to use.
+ * @param cipherSuites the list of suites
+ * @see SSLSocketFactory#getSupportedCipherSuites()
+ */
+ public abstract void setEnabledCipherSuites(String[] cipherSuites);
+
+ /**
+ * Set the hostname verifier to use. This must be called before
+ * {@link #negotiate()}.
+ * @param verifier the hostname verifier
+ */
+ public abstract void setHostnameVerifier(HostnameVerifier verifier);
+
+ /**
+ * Negotiate the TLS session using the default SSL socket factory.
+ * @return the SSL session
+ * @throws IOException if communication fails for some reason
+ */
+ public abstract SSLSession negotiate() throws IOException;
+
+ /**
+ * Negotiate the TLS session using the supplied SSL socket factory.
+ * @param factory the socket factory to use
+ * @return the SSL session
+ * @throws IOException if communication fails for some reason
+ */
+ public abstract SSLSession negotiate(SSLSocketFactory factory)
+ throws IOException;
+
+ /**
+ * Close the connection.
+ * @throws IOException if communication fails for some reason
+ */
+ public abstract void close() throws IOException;
+}
diff --git a/libjava/classpath/javax/net/ssl/HttpsURLConnection.java b/libjava/classpath/javax/net/ssl/HttpsURLConnection.java
index 4c73edb..3f30dc1 100644
--- a/libjava/classpath/javax/net/ssl/HttpsURLConnection.java
+++ b/libjava/classpath/javax/net/ssl/HttpsURLConnection.java
@@ -1,5 +1,5 @@
/* HttpsURLConnection.java -- an HTTPS connection.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,7 +38,6 @@ exception statement from your version. */
package javax.net.ssl;
-import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.Certificate;
@@ -90,9 +89,10 @@ public abstract class HttpsURLConnection extends HttpURLConnection
* Creates a new HTTPS URL connection.
*
* @param url The URL of the connection being established.
- * @throws IOException If the connection cannot be established.
+ * @specnote This was marked as throwing IOException in 1.4,
+ * but this was removed in 1.5.
*/
- protected HttpsURLConnection(URL url) throws IOException
+ protected HttpsURLConnection(URL url)
{
super(url);
}
diff --git a/libjava/classpath/javax/print/MultiDoc.java b/libjava/classpath/javax/print/MultiDoc.java
index e7747bc..6e9ec84 100644
--- a/libjava/classpath/javax/print/MultiDoc.java
+++ b/libjava/classpath/javax/print/MultiDoc.java
@@ -1,5 +1,5 @@
/* MultiDoc.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,25 @@ import java.io.IOException;
/**
+ * <code>MultiDoc</code> defines the interface for objects providing multiple
+ * documents for use in a print job.
+ * <p>
+ * Implementations of this interface are used to pass multiple documents, to be
+ * printed as one print job, to the <code>MultiDocPrintJob</code> instance.
+ * </p><p>
+ * There exists no implementation of this interface in the Java Print Service
+ * API. Implementors may assume the following usage in print jobs and the needed
+ * behaviour for implementations: The print job fetches the single documents via
+ * iteration by consecutive calls of the {@link #getDoc()} method to obtain the
+ * current document follwing calls of the {@link #next()} method to get the next
+ * multidoc object for the next <code>getDoc()</code> method call (if returned
+ * multidoc object is not <code>null</code>). The print service will fetch the
+ * document object and then retrieve the print data from the document before it
+ * proceeds with the next call for the next MultiDoc object in the sequence.
+ * </p><p>
+ * Implementations of this interface have to be multiple thread-safe.
+ * </p>
+ *
* @author Michael Koch (konqueror@gmx.de)
*/
public interface MultiDoc
@@ -49,16 +68,18 @@ public interface MultiDoc
/**
* Returns the current document.
*
- * @return the current document
+ * @return The current document.
*
* @throws IOException if an error occurs
*/
Doc getDoc() throws IOException;
/**
- * Returns the next <code>MultiDoc</code> object.
+ * Returns the next <code>MultiDoc</code> object that contains the
+ * next document for retrieval.
*
- * @return the next <code>MultiDoc</code> object
+ * @return The next <code>MultiDoc</code> object, or <code>null</code>
+ * if no more documents are available.
*
* @throws IOException if an error occurs
*/
diff --git a/libjava/classpath/javax/print/MultiDocPrintJob.java b/libjava/classpath/javax/print/MultiDocPrintJob.java
index b096769..36089b5 100644
--- a/libjava/classpath/javax/print/MultiDocPrintJob.java
+++ b/libjava/classpath/javax/print/MultiDocPrintJob.java
@@ -1,5 +1,5 @@
/* MultiDocPrintJob.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,17 +42,34 @@ import javax.print.attribute.PrintRequestAttributeSet;
/**
+ * <code>MultiDocPrintJob</code> represents a print job which supports
+ * printing of multiple documents as one print job.
+ * <p>
+ * An instance can be obtained from every <code>MultiDocPrintService</code>
+ * available by calling the
+ * {@link javax.print.MultiDocPrintService#createMultiDocPrintJob()} method.
+ * A print job is bound to the print service it is created from.
+ * </p>
+ *
* @author Michael Koch (konqueror@gmx.de)
*/
public interface MultiDocPrintJob extends DocPrintJob
{
/**
- * Request a print of a <code>MultiDoc</code> object.
+ * Prints the documents supplied in the given <code>MultiDoc</code> object
+ * as one print job with the given printing attributes.
*
- * @param multiDoc the document to print
- * @param attributes the printing attributes to apply
+ * @param multiDoc the documents to print. Every document must have a
+ * flavor supported by the bound print service.
+ * @param attributes the printing attributes to apply to the print job. If
+ * <code>null</code> the default attribute values will be used.
*
- * @throws PrintExeption if an error occurs
+ * @throws PrintException if an error occurs. The thrown exception may
+ * implement refining print exception interface to provide more detail of
+ * the error.
+ *
+ * @see FlavorException
+ * @see AttributeException
*/
void print(MultiDoc multiDoc, PrintRequestAttributeSet attributes)
throws PrintException;
diff --git a/libjava/classpath/javax/print/MultiDocPrintService.java b/libjava/classpath/javax/print/MultiDocPrintService.java
index a71d23a..105e722 100644
--- a/libjava/classpath/javax/print/MultiDocPrintService.java
+++ b/libjava/classpath/javax/print/MultiDocPrintService.java
@@ -1,5 +1,5 @@
/* MultiDocPrintService.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,6 +40,13 @@ package javax.print;
/**
+ * <code>MultiDocPrintService</code> represents print services that are
+ * capable of printing multiple documents as one print job. It provides an
+ * additional method for the creation of a print job for multiple documents.
+ *
+ * @see javax.print.MultiDoc
+ * @see javax.print.MultiDocPrintJob
+ *
* @author Michael Koch (konqueror@gmx.de)
*/
public interface MultiDocPrintService extends PrintService
@@ -47,7 +54,7 @@ public interface MultiDocPrintService extends PrintService
/**
* Create a job that can print a <code>MultiDoc</code> object.
*
- * @return the new print job
+ * @return The created print job.
*/
MultiDocPrintJob createMultiDocPrintJob();
} \ No newline at end of file
diff --git a/libjava/classpath/javax/print/PrintServiceLookup.java b/libjava/classpath/javax/print/PrintServiceLookup.java
index 2add8d1..57cb8dc 100644
--- a/libjava/classpath/javax/print/PrintServiceLookup.java
+++ b/libjava/classpath/javax/print/PrintServiceLookup.java
@@ -1,5 +1,5 @@
/* PrintServiceLookup.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,39 +38,266 @@ exception statement from your version. */
package javax.print;
+import gnu.classpath.ServiceFactory;
+import gnu.javax.print.CupsPrintServiceLookup;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+
import javax.print.attribute.AttributeSet;
/**
+ * <code>PrintServiceLookup</code> implementations provide a way to lookup
+ * print services based on different constraints.
+ * <p>
+ * Implementations are located and loaded automatically through the SPI JAR
+ * file specification. Therefore implementation classes must provide a default
+ * constructor for instantiation. Furthermore, applications are able to
+ * register further instances directly at runtime.
+ * </p><p>
+ * If an SecurityManager is installed implementors should call
+ * <code>checkPrintJobAccess()</code> to disable access for untrusted code.
+ * This check is to be made in every lookup service implementation for
+ * flexibility. Print services registered by applications through
+ * <code>registerService(PrintService)</code> are suppressed in the
+ * lookup results if a security manager is installed and disallows access.
+ * </p>
+ *
* @author Michael Koch (konqueror@gmx.de)
+ * @author Wolfgang Baer (WBaer@gmx.de)
*/
public abstract class PrintServiceLookup
{
+
+ private static final CupsPrintServiceLookup systemProvider;
+ private static final HashSet printServices;
+ private static final HashSet printServiceLookups;
+
+ static
+ {
+ systemProvider = new CupsPrintServiceLookup();
+
+ printServices = new HashSet();
+ printServiceLookups = new HashSet();
+
+ // check for service providers
+ Iterator it = ServiceFactory.lookupProviders(PrintServiceLookup.class);
+
+ while (it.hasNext())
+ printServiceLookups.add(it.next());
+ }
+
/**
* Constructs a <code>PrintServiceLookup</code> object.
*/
public PrintServiceLookup()
{
- // Do nothing here
+ // nothing to do here
+ }
+
+ /**
+ * Explicitly registers the provided print service lookup implementation.
+ * <p>
+ * The registration will silently fail (returning <code>false</code>) if
+ * the lookup service is already registered or the registration somehow
+ * else fails.
+ * </p>
+ *
+ * @param sp the print service lookup implementation to register.
+ * @return <code>true</code> if registered, <code>false</code> otherwise.
+ */
+ public static boolean registerServiceProvider(PrintServiceLookup sp)
+ {
+ return printServiceLookups.add(sp);
+ }
+
+ /**
+ * Explicitly registers the provided print service instance.
+ * <p>
+ * The registration will silently fail (returning <code>false</code>) if
+ * the print service instance is already registered or the registration
+ * somehow else fails.
+ * </p>
+ * @param service the single print service to register.
+ * @return <code>true</code> if registered, <code>false</code> otherwise.
+ */
+ public static boolean registerService(PrintService service)
+ {
+ if (service instanceof StreamPrintService)
+ return false;
+
+ // security
+ try
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPrintJobAccess();
+
+ return printServices.add(service);
+ }
+ catch (SecurityException se)
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Searches print services capable of printing in the given document flavor
+ * which supports the specified printing attributes.
+ *
+ * @param flavor the document flavor to support. If <code>null</code> this
+ * constraint is ignored during lookup.
+ * @param attributes the printing attributes to support. If
+ * <code>null</code> this constraint is ignored during lookup.
+ * @return The resulting available print services, or an array of length 0
+ * if none is found.
+ */
+ public static final PrintService[] lookupPrintServices(DocFlavor flavor,
+ AttributeSet attributes)
+ {
+ ArrayList result = new ArrayList();
+
+ PrintService[] services =
+ systemProvider.getPrintServices(flavor, attributes);
+ result.addAll(Arrays.asList(services));
+
+ for (Iterator it = printServiceLookups.iterator(); it.hasNext(); )
+ {
+ PrintServiceLookup lookup = (PrintServiceLookup) it.next();
+ services = lookup.getPrintServices(flavor, attributes);
+ result.addAll(Arrays.asList(services));
+ }
+
+ for (Iterator it = printServices.iterator(); it.hasNext(); )
+ {
+ PrintService service = (PrintService) it.next();
+ if (systemProvider.checkPrintService(flavor, attributes, service))
+ result.add(service);
+ }
+
+ return (PrintService[]) result.toArray(new PrintService[result.size()]);
+ }
+
+ /**
+ * Searches print services capable of multi document printing in all of the
+ * given document flavors and supporting the specified printing attributes.
+ *
+ * @param flavors the document flavors to support. If <code>null</code> this
+ * constraint is ignored during lookup.
+ * @param attributes the printing attributes to support. If
+ * <code>null</code> this constraint is ignored during lookup.
+ * @return The resulting available multi document print services, or an
+ * array of length 0 if none is found.
+ */
+ public static final MultiDocPrintService[] lookupMultiDocPrintServices(
+ DocFlavor[] flavors, AttributeSet attributes)
+ {
+ ArrayList result = new ArrayList();
+
+ MultiDocPrintService[] services =
+ systemProvider.getMultiDocPrintServices(flavors, attributes);
+ result.addAll(Arrays.asList(services));
+
+ for (Iterator it = printServiceLookups.iterator(); it.hasNext(); )
+ {
+ PrintServiceLookup lookup = (PrintServiceLookup) it.next();
+ services = lookup.getMultiDocPrintServices(flavors, attributes);
+ result.addAll(Arrays.asList(services));
+ }
+
+ for (Iterator it = printServices.iterator(); it.hasNext(); )
+ {
+ PrintService service = (PrintService) it.next();
+ if (systemProvider.checkMultiDocPrintService(flavors, attributes, service))
+ result.add(service);
+ }
+
+ return (MultiDocPrintService[]) result.toArray(
+ new MultiDocPrintService[result.size()]);
+ }
+
+
+ /**
+ * Searches the default print service in the current environment.
+ * <p>
+ * If multiple lookup services are registered and each has a default
+ * print service the result is not specified. Usually the default
+ * print service of the native platform lookup service is returned.
+ * </p><p>
+ * The GNU classpath implementation will return the CUPS default
+ * printing service as the default print service, if available.
+ * </p><p>
+ * The default print service may be overriden by users through
+ * the property <code>javax.print.defaultPrinter</code>. A service
+ * specified must be found to be returned as the default.
+ * </p>
+ *
+ * @return The default print service, or <code>null</code> if none found.
+ */
+ public static final PrintService lookupDefaultPrintService()
+ {
+ // TODO Find out what the property controls and use it
+ // String defaultPrinter = System.getProperty("javax.print.defaultPrinter");
+
+ // first test for platform specified default services
+ PrintService service = systemProvider.getDefaultPrintService();
+
+ if (service != null)
+ return service;
+
+ // none available by systemDefaultProvider
+ // search in other registered ones and take first
+ for (Iterator it = printServiceLookups.iterator(); it.hasNext(); )
+ {
+ service = ((PrintServiceLookup) it.next()).getDefaultPrintService();
+ if (service != null)
+ return service;
+ }
+
+ return null;
}
/**
- * Not called direclty by applications.
+ * Not to be called directly by applications.
+ *
+ * @return The default lookup service of the implementing lookup service or
+ * <code>null</code> if there is no default one.
*/
public abstract PrintService getDefaultPrintService();
/**
- * Not called direclty by applications.
+ * Not to be called directly by applications.
+ *
+ * @param flavors the document flavors which have to be supported.
+ * @param attributes the attributes which have to be supported.
+ *
+ * @return The multidoc print services of the implementing lookup service
+ * for the given parameters, or an array of length 0 if none is available.
*/
- public abstract MultiDocPrintService[] getMultiDocPrintServices(DocFlavor[] flavors, AttributeSet attributes);
+ public abstract MultiDocPrintService[]
+ getMultiDocPrintServices(DocFlavor[] flavors, AttributeSet attributes);
/**
- * Not called direclty by applications.
+ * Not to be called directly by applications.
+ *
+ * @return All known print services of the implementing lookup service
+ * regardless of supported features, or an array of length 0 if none is
+ * available.
*/
public abstract PrintService[] getPrintServices();
/**
- * Not called direclty by applications.
+ * Not to be called directly by applications.
+ *
+ * @param flavor the document flavor which has to be supported.
+ * @param attributes the attributes which have to be supported.
+ *
+ * @return The print services of the implementing lookup service
+ * for the given parameters, or an array of length 0 if none is available.
*/
- public abstract PrintService[] getPrintServices(DocFlavor flavor, AttributeSet attributes);
+ public abstract PrintService[]
+ getPrintServices(DocFlavor flavor, AttributeSet attributes);
}
diff --git a/libjava/classpath/javax/print/ServiceUI.java b/libjava/classpath/javax/print/ServiceUI.java
new file mode 100644
index 0000000..4a7b5bd
--- /dev/null
+++ b/libjava/classpath/javax/print/ServiceUI.java
@@ -0,0 +1,137 @@
+/* ServiceUI.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.print;
+
+import gnu.javax.print.PrinterDialog;
+
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.HeadlessException;
+import java.util.Arrays;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+/**
+ * <code>ServiceUI</code> provides a method to create a graphical
+ * print dialog.
+ * <p>
+ * The graphical print dialog enables the user to browse the available
+ * print services on the system. It provides user interfaces to interact
+ * with the most common printing attributes likes specifying the number of
+ * copies to print or the page ranges.
+ * </p><p>
+ * The initial appearance of the print dialog as shown to the user may be
+ * specified by providing the default selected print service as well as
+ * initial values for the printing attributes in the user interface.
+ * </p>
+ *
+ * @author Wolfgang Baer (WBaer@gmx.de)
+ */
+public class ServiceUI
+{
+
+ /**
+ * Default constructor.
+ */
+ public ServiceUI()
+ {
+ // nothing to do here - only one static method
+ }
+
+ /**
+ * Creates a modal graphical printing dialog at the specified location on
+ * the screen.
+ * <p>
+ * The dialog will return the user selected print service and the given
+ * attributes set will contain the modified printing attributes. If the
+ * user cancels the printing dialog <code>null</code> will be returned and
+ * the printing attributes set will be unmodified.
+ * </p><p>
+ * The values of the given attributes set (if not empty) will be displayed
+ * initially unless the are unsupported by the print service. If a print
+ * service does not support a particular value it is substituted with the
+ * default value of the print service.
+ * </p>
+ *
+ * @param gc the screen to use. <code>null</code> is default screen.
+ * @param x the coordinate of the upper left edge of the dialog in screen
+ * coordinates (not relative to the parent frame).
+ * @param y the coordinate of the upper left edge of the dialog in screen
+ * coordinates (not relative to the parent frame).
+ * @param services the print services to browse (not null).
+ * @param defaultService the default service. If <code>null</code>
+ * the first of the print services in the services array will be used.
+ * @param flavor the flavours to be printed.
+ * @param attributes the attributes requested. Will be updated
+ * by selections done by the user in the dialog.
+ *
+ * @return The selected print service or <code>null</code> if user
+ * has cancelled the printer dialog.
+ *
+ * @throws HeadlessException if GraphicsEnvironment is headless
+ * @throws IllegalArgumentException if services is <code>null</code> or an
+ * empty array, attributes are <code>null</code> or the given default
+ * <code>PrintService<code> is not part of the print service array.
+ */
+ public static PrintService printDialog(GraphicsConfiguration gc, int x,
+ int y, PrintService[] services, PrintService defaultService,
+ DocFlavor flavor, PrintRequestAttributeSet attributes)
+ throws HeadlessException
+ {
+ if (GraphicsEnvironment.isHeadless())
+ throw new HeadlessException("GraphicsEnvironment is headless.");
+
+ if (services == null || services.length == 0 || attributes == null)
+ throw new IllegalArgumentException("Given print service array / "
+ + "attributes may not be null");
+
+ if (defaultService != null &&
+ ! Arrays.asList(services).contains(defaultService))
+ throw new IllegalArgumentException("defaultService is not contained "
+ + " in the print service array");
+
+ PrinterDialog dialog = new PrinterDialog(gc, services, defaultService,
+ flavor, attributes);
+
+ dialog.setLocation(x, y);
+ dialog.show();
+
+ return dialog.getSelectedPrintService();
+ }
+}
diff --git a/libjava/classpath/javax/print/attribute/package.html b/libjava/classpath/javax/print/attribute/package.html
index 37f24d5..0ab01ab 100644
--- a/libjava/classpath/javax/print/attribute/package.html
+++ b/libjava/classpath/javax/print/attribute/package.html
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in javax.print.attribute package.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,6 +43,35 @@ exception statement from your version. -->
<p>Provides classes and interfaces describing the roles and
syntax of attribute objects in the Java Print Service API.</p>
<p>
+The package contains the base attribute interface and several subinterfaces
+describing the different attribute roles of printing attributes. Furthermore,
+abstract classes defining the syntax of attributes are provided. For
+collections of attributes based on their roles different set interfaces and
+implementing classes are available.
+</p><p>
+Existing attribute roles are:
+<ul>
+<li><a href="PrintServiceAttribute.html">PrintServiceAttribute</a>s
+describing the state and other informations of a PrintService.</li>
+<li><a href="PrintJobAttribute.html">PrintJobAttribute</a>s describing
+the state of the print job.</li>
+<li><a href="PrintRequestAttribute.html">PrintRequestAttribute</a>s specifying
+how a print job should be printed and are applied to a complete print job.</li>
+<li><a href="PrintJobAttribute.html">PrintJobAttribute</a> s specifying
+how a single document in the print job should be printed.</li>
+</ul>
+</p><p>
+Every attribute is of a certain syntax which defines its type and the
+representation of its value. The different syntax types are provided as
+abstract syntax classes (e.g. <code>IntegerSyntax</code>). Concrete attribute
+implementations are subclasses of these abstract syntax classes.
+</p><p>
+Attributes may be collected as sets of attributes. Different interfaces for
+attribute collections per role and implementations based on a HashMap are
+provided (for example <a href="HashPrintJobAttributeSet.html">
+HashPrintJobAttributeSet</a> for the print job attributes).
+</p>
+<p>
<b>Since:</b> 1.4
</p>
</body>
diff --git a/libjava/classpath/javax/print/attribute/standard/package.html b/libjava/classpath/javax/print/attribute/standard/package.html
index 4248acf..f6bec5f 100644
--- a/libjava/classpath/javax/print/attribute/standard/package.html
+++ b/libjava/classpath/javax/print/attribute/standard/package.html
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in javax.print.attribute.standard
+<!-- package.html - describes classes in javax.print.attribute.standard
package.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,8 +41,18 @@ exception statement from your version. -->
<head><title>GNU Classpath - javax.print.attribute.standard</title></head>
<body>
-<p>Provides the printing attribute classes of the Java Print
-Service API.</p>
+Provides the printing attribute classes of the Java Print Service API.
+<p>
+The package contains the available printing attributes. Some attributes are
+used by the print service implementations to inform about the state of print
+services and print jobs. Other attributes are needs to be provided by the
+user/program to specify how a print job or a document in a print job should
+be printed.
+</p><p>
+<b>Note:</b> Printing attributes can implement more than one attribute role
+and therefore be used to specify e.g. print request attributes as well as
+document attributes.
+</p>
<p>
<b>Since:</b> 1.4
</p>
diff --git a/libjava/classpath/javax/print/event/package.html b/libjava/classpath/javax/print/event/package.html
index f811013..5091a71 100644
--- a/libjava/classpath/javax/print/event/package.html
+++ b/libjava/classpath/javax/print/event/package.html
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in javax.print.event package.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,15 @@ exception statement from your version. -->
<head><title>GNU Classpath - javax.print.event</title></head>
<body>
-<p>Provides events and listeners to be used with the Java Print Service API.</p>
+Provides events and listeners to be used with the Java Print Service API.
+<p>
+The provided listeners are used to register with print services and/or
+print jobs to receive state information or to monitor the progress of
+print jobs. Print jobs don't need to be implemented synchronous and
+therefore should be monitored to know if they succeed or fail. For this
+common task the <a href="PrintJobAdapter.html">PrintJobAdapter</a> class
+is provided.
+</p>
<p>
<b>Since:</b> 1.4
</p>
diff --git a/libjava/classpath/javax/print/package.html b/libjava/classpath/javax/print/package.html
index dfa4b0f..7527432 100644
--- a/libjava/classpath/javax/print/package.html
+++ b/libjava/classpath/javax/print/package.html
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!-- package.html - describes classes in javax.print package.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,9 +38,203 @@ exception statement from your version. -->
<html>
<head><title>GNU Classpath - javax.print</title></head>
-
<body>
-<p></p>
+Provides the basic interfaces and classes of the Java Print Service API.
+<p>
+The Java Print Service API enables programmers to:
+<ul>
+<li>Discover print services for printing to printer devices and to output
+streams. The discovery process can be constrained to return only print
+services supporting specific document formats or printing attributes.</li>
+<li>Print client-formatted print data like Postscript, PDF or various
+image formats and service-formatted print data from Java.</li>
+<li>Submit, cancel and monitor single and multi document print jobs.</li>
+<li>Provide users a graphical print service browser with printing attribute
+selection.</li>
+</ul>
+</p>
+<p>
+<h2>Print Service Discovery</h2>
+
+Print service types in the JPS API:
+<ul>
+<li><a href="PrintService.html">PrintService</a>:<br>The base interface
+describing a print service capable of printing a supplied document for a
+given document format to the printer device it is representing.</li><br>
+<li><a href="MultiDocPrintService.html">MultiDocPrintService</a>:<br>Extends
+the PrintService interface and provides a print service which is capable of
+printing multiple documents as one print job to its printer device.</li><br>
+<li><a href="StreamPrintService.html">StreamPrintService</a>:<br>Extends the
+PrintService interface and provides a print service which is capable of
+printing into a supplied output stream instead of to a physical printer
+device.</li>
+</ul>
+</p>
+<p>
+<h4>PrintService, MultiDocPrintService</h4>
+Discovery is done by the use of the static methods in the
+<a href="PrintServiceLookup.html">PrintServiceLookup</a> class. The discovery
+process can be constrained by supplying the document formats and printing
+attributes that need to be supported by the returned print service. Furthermore
+the <a href="PrintServiceLookup.html#lookupDefaultPrintService()">
+lookupDefaultPrintService()</a> method enables to lookup the default print
+service of the platforms printing system.
+</p>
+<p>
+<h4>StreamPrintService</h4>
+StreamPrintService provides the same functionality as a print service for output
+to a supplied <code>OutputStream</code>. Available stream print services are
+discovered via the static methods in the <a href="StreamPrintServiceFactory.html">
+StreamPrintServiceFactory</a> factory. The query can be constrained by supplying
+the the requested document format support and the needed output format.
+</p>
+
+<h2>Document formats</h2>
+
+The format of the printing documents are specified by the
+<a href="DocFlavor.html">DocFlavor</a> class in the JPS API. It provides the
+description of the format in which the print data will be supplied in a print
+job to the print service and consists of two parts:
+<ul>
+<li>The MIME type (Multipurpose Internet Mail Extensions types as described in
+RFC 2045/2046) specifying the media format of the print data.</li>
+<br>
+<li>The representation class name which is the fully qualified name of the
+class providing the print data to the print job. For example if the print data
+is supplied as a byte array the representation class name will be "[B" or for
+an input stream "java.io.InputStream".</li>
+</ul>
+The Java Print Service API differentiates between two types of print data,
+client-formatted and service-formatted. Client-formatted print data is already
+provided in a formatted representation by the client e.g. in an image format
+or as postscript. For service-formatted print data, the Java Print Service
+implementation produces the formatted print data. Here the doc flavor's
+representation class name does specify an interface instead of the actual
+print data source. The print service will call the methods of the given
+implementation of this interface with a special Graphics object capable of
+producing formatted print data from the graphics routines inside the
+interface methods.
+</ul>
+<h2>Printing attributes</h2>
+
+Print services as well as print jobs report their state and capabilities
+by the way of supplying printing attributes. Also the behaviour of print
+jobs (like how many copies should be printed) is controlled via printing
+attributes. For these requirements the JPS API defines different roles
+of attributes and common syntax classes in the package
+<code>javax.print.attribute</code>. The actual available printing attributes
+are implemented in the <code>javax.print.attribute.standard</code> package.
+<ul>
+
+<li>Print service attributes:<br>
+These printing attributes of role
+<a href="attribute/PrintServiceAttribute.html">PrintServiceAttribute</a> report
+the status and other informations of a PrintService. Example for informations
+available in the print services attributes are the attribute
+<code>PagesPerMinute</code> providing the number of pages a printer can print
+per minute. Status attributes like the <code>PrinterState</code> attribute
+gives the current state (e.g. printer currently processes or is idle) of the
+printer.</li>
+<br>
+<li>Print job attributes:<br>
+Print job attributes of role <a href="attribute/PrintJobAttribute.html">
+PrintJobAttribute</a> inform about the status of given print job. For example
+the <code>NumberOfInterveningJobs</code> attribute provides the number of jobs
+ahead in the print service queue before this job. Status attributes like the
+<code>JobState</code> attribute gives the current state of the print job (like
+pending, processing or canceled).</li>
+<br>
+<li>Print request attributes:<br>
+The attributes of role <a href="attribute/PrintRequestAttribute.html">
+PrintRequestAttribute</a> specify the behaviour of a complete print job.
+The print request attributes apply to all documents in a print job, whereas
+the doc attributes only apply to the specific document in a print job.
+Most of the print request attributes are also doc attributes and therefore
+implementing both attribute role interfaces.
+</li>
+<br>
+<li>Doc attributes:<br>
+As described above the <a href="attribute/PrintJobAttribute.html">
+PrintJobAttribute</a> attributes are specific to a single document in the
+print job.
+</li>
+</ul>
+<h2>Example of using the API</h2>
+<pre>
+import java.io.*;
+<br>
+import javax.print.*;
+import javax.print.attribute.*;
+import javax.print.attribute.standard.*;
+import javax.print.event.*;
+<br>
+public class Beispiel
+{
+&nbsp; public static void main(String[] args)
+&nbsp; {
+&nbsp; &nbsp; // Using the predefined doc flavor for postscript mimetype
+&nbsp; &nbsp; DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
+<br>
+&nbsp; &nbsp; // Looking for printservice supporting this doc flavor
+&nbsp; &nbsp; PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
+<br>
+&nbsp; &nbsp; // Just take the first
+&nbsp; &nbsp; PrintService service = services[0];
+&nbsp; &nbsp; System.out.println("Name :" + service.getName());
+<br>
+&nbsp; &nbsp; try
+&nbsp; &nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; &nbsp; // Create a print job
+&nbsp; &nbsp; &nbsp; &nbsp; DocPrintJob job = service.createPrintJob();
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // We want to print a file so we construct an inputstream
+&nbsp; &nbsp; &nbsp; &nbsp; // on the file to supply the print data as given in the doc flavor
+&nbsp; &nbsp; &nbsp; &nbsp; File file = new File("File.ps");
+&nbsp; &nbsp; &nbsp; &nbsp; InputStream stream = new FileInputStream(file);
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // Build a attribute set with the wanted printing attributes
+&nbsp; &nbsp; &nbsp; &nbsp; HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
+&nbsp; &nbsp; &nbsp; &nbsp; attr.add(new Copies(2)); // two copies
+&nbsp; &nbsp; &nbsp; &nbsp; attr.add(new PageRanges(2, 7)); // only the 2-7 pages
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // Construct a doc object with the provided class SimpleDoc
+&nbsp; &nbsp; &nbsp; &nbsp; SimpleDoc doc = new SimpleDoc(stream, flavor, null);
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // register us as the print - use the adapter class
+&nbsp; &nbsp; &nbsp; &nbsp; // and override the interesing failure condition
+&nbsp; &nbsp; &nbsp; &nbsp; job.addPrintJobListener(new PrintJobAdapter()
+&nbsp; &nbsp; &nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void printJobFailed(PrintJobEvent arg0)
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("The PrintJob failed.");
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
+&nbsp; &nbsp; &nbsp; &nbsp; });
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // start the printing process
+&nbsp; &nbsp; &nbsp; &nbsp; job.print(doc, attr);
+<br>
+&nbsp; &nbsp; &nbsp; &nbsp; // lets assume we want to cancel it
+&nbsp; &nbsp; &nbsp; &nbsp; if (job instanceof CancelablePrintJob)
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CancelablePrintJob cancelJob = (CancelablePrintJob) job;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelJob.cancel();
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
+<br>
+&nbsp; &nbsp; &nbsp; }
+&nbsp; &nbsp; catch (PrintException e)
+&nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; e.printStackTrace();
+&nbsp; &nbsp; }
+&nbsp; &nbsp; catch (FileNotFoundException e)
+&nbsp; &nbsp; {
+&nbsp; &nbsp; &nbsp; e.printStackTrace();
+&nbsp; &nbsp; }
+&nbsp; }
+}
+</pre>
+<p>
+<b>Since:</b> 1.4
+</p>
</body>
</html>
diff --git a/libjava/classpath/javax/security/auth/kerberos/DelegationPermission.java b/libjava/classpath/javax/security/auth/kerberos/DelegationPermission.java
new file mode 100644
index 0000000..33e1f98
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/DelegationPermission.java
@@ -0,0 +1,136 @@
+/* DelegationPermission.java -- kerberos delegation permission
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * @since 1.4
+ */
+public final class DelegationPermission
+ extends BasicPermission
+{
+ // FIXME: Enable this when serialization works.
+ // private static final long serialVersionUID = 883133252142523922L;
+
+ /**
+ * Create a new instance with the given name.
+ */
+ public DelegationPermission(String name)
+ {
+ super(name);
+ checkSyntax(name);
+ }
+
+ /**
+ * Create a new instance with the given name and actions.
+ *
+ * The name consists of two parts: first the subordinate
+ * service principal, then the target service principal.
+ * Each principal is surrounded by quotes; the two are separated
+ * by a space.
+ *
+ * @param name the name
+ * @param actions the actions; this is ignored
+ */
+ public DelegationPermission(String name, String actions)
+ {
+ super(name, actions);
+ checkSyntax(name);
+ }
+
+ private static void checkSyntax(String name)
+ {
+ int index = name.indexOf('"', 1);
+ int len = name.length();
+ if (name.charAt(0) != '"' || name.charAt(len - 1) != '"'
+ || index == -1 || index + 3 >= len
+ || name.charAt(index + 1) != ' '
+ || name.charAt(index + 2) != '"')
+ // FIXME: better message here.
+ throw new IllegalArgumentException("invalid syntax for principals");
+ }
+
+ public boolean implies(Permission perm)
+ {
+ return equals(perm);
+ }
+
+ public PermissionCollection newPermissionCollection()
+ {
+ // FIXME: don't know how to serialize here. I suspect this
+ // class has to have a particular name, etc ...
+ return new PermissionCollection()
+ {
+ private Vector permissions = new Vector();
+
+ public void add(Permission perm)
+ {
+ if (isReadOnly())
+ throw new SecurityException("readonly");
+ if (! (perm instanceof DelegationPermission))
+ throw new IllegalArgumentException("can only add DelegationPermissions");
+ permissions.add(perm);
+ }
+
+ public boolean implies(Permission perm)
+ {
+ if (! (perm instanceof DelegationPermission))
+ return false;
+ Enumeration e = elements();
+ while (e.hasMoreElements())
+ {
+ DelegationPermission dp = (DelegationPermission) e.nextElement();
+ if (dp.implies(perm))
+ return true;
+ }
+ return false;
+ }
+
+ public Enumeration elements()
+ {
+ return permissions.elements();
+ }
+ };
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/kerberos/KerberosKey.java b/libjava/classpath/javax/security/auth/kerberos/KerberosKey.java
new file mode 100644
index 0000000..3372a16
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/KerberosKey.java
@@ -0,0 +1,180 @@
+/* KerberosKey.java -- kerberos key
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import gnu.classpath.NotImplementedException;
+
+import java.io.Serializable;
+
+import javax.crypto.SecretKey;
+import javax.security.auth.DestroyFailedException;
+import javax.security.auth.Destroyable;
+
+/**
+ * This class represents a Kerberos key. See the Kerberos
+ * authentication RFC for more information:
+ * <a href="http://www.ietf.org/rfc/rfc1510.txt">RFC 1510</a>.
+ *
+ * @since 1.4
+ */
+public class KerberosKey
+ implements Serializable, SecretKey, Destroyable
+{
+ private static final long serialVersionUID = -4625402278148246993L;
+
+ private KerberosPrincipal principal;
+ private int versionNum;
+ private KeyImpl key;
+
+ /**
+ * Construct a new key with the indicated principal and key.
+ * @param principal the principal
+ * @param key the key's data
+ * @param type the key's type
+ * @param version the key's version number
+ */
+ public KerberosKey(KerberosPrincipal principal, byte[] key, int type,
+ int version)
+ {
+ this.principal = principal;
+ this.versionNum = version;
+ this.key = new KeyImpl(key, type);
+ }
+
+ /**
+ * Construct a new key with the indicated principal and a password.
+ * @param principal the principal
+ * @param passwd the password to use
+ * @param algo the algorithm; if null the "DES" algorithm is used
+ */
+ public KerberosKey(KerberosPrincipal principal, char[] passwd, String algo)
+ // Not implemented because KeyImpl really does nothing here.
+ throws NotImplementedException
+ {
+ this.principal = principal;
+ this.versionNum = 0; // FIXME: correct?
+ this.key = new KeyImpl(passwd, algo);
+ }
+
+ /**
+ * Return the name of the algorithm used to create this key.
+ */
+ public final String getAlgorithm()
+ {
+ checkDestroyed();
+ return key.algorithm;
+ }
+
+ /**
+ * Return the format of this key. This implementation always returns "RAW".
+ */
+ public final String getFormat()
+ {
+ checkDestroyed();
+ // Silly, but specified.
+ return "RAW";
+ }
+
+ /**
+ * Return the principal associated with this key.
+ */
+ public final KerberosPrincipal getPrincipal()
+ {
+ checkDestroyed();
+ return principal;
+ }
+
+ /**
+ * Return the type of this key.
+ */
+ public final int getKeyType()
+ {
+ checkDestroyed();
+ return key.type;
+ }
+
+ /**
+ * Return the version number of this key.
+ */
+ public final int getVersionNumber()
+ {
+ checkDestroyed();
+ return versionNum;
+ }
+
+ /**
+ * Return the encoded form of this key.
+ */
+ public final byte[] getEncoded()
+ {
+ checkDestroyed();
+ return (byte[]) key.key.clone();
+ }
+
+ /**
+ * Destroy this key.
+ */
+ public void destroy() throws DestroyFailedException
+ {
+ if (key == null)
+ throw new DestroyFailedException("already destroyed");
+ key = null;
+ }
+
+ /**
+ * Return true if this key has been destroyed. After this has been
+ * called, other methods on this object will throw IllegalStateException.
+ */
+ public boolean isDestroyed()
+ {
+ return key == null;
+ }
+
+ private void checkDestroyed()
+ {
+ if (key == null)
+ throw new IllegalStateException("key is destroyed");
+ }
+
+ public String toString()
+ {
+ // FIXME: random choice here.
+ return principal + ":" + versionNum;
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/kerberos/KerberosPrincipal.java b/libjava/classpath/javax/security/auth/kerberos/KerberosPrincipal.java
new file mode 100644
index 0000000..d52b5cf
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/KerberosPrincipal.java
@@ -0,0 +1,207 @@
+/* KerberosPrincipal.java -- a kerberos principal
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import gnu.classpath.NotImplementedException;
+import gnu.classpath.SystemProperties;
+
+import java.io.Serializable;
+import java.security.Principal;
+
+/**
+ * This represents a Kerberos principal. See the Kerberos
+ * authentication RFC for more information:
+ * <a href="http://www.ietf.org/rfc/rfc1510.txt">RFC 1510</a>.
+ *
+ * @since 1.4
+ */
+public final class KerberosPrincipal
+ implements Serializable, Principal
+{
+ // Uncomment when serialization is correct.
+ // private static final long serialVersionUID = -7374788026156829911L;
+
+ /**
+ * Constant from the RFC: "Just the name of the principal as in DCE, or
+ * for users".
+ */
+ public static final int KRB_NT_PRINCIPAL = 1;
+
+ /**
+ * Constant from the RFC: "Service and other unique instance (krbtgt)".
+ */
+ public static final int KRB_NT_SRV_HST = 3;
+
+ /**
+ * Constant from the RFC: "Service with host name as instance (telnet,
+ * rcommands)".
+ */
+ public static final int KRB_NT_SRV_INST = 2;
+
+ /**
+ * Constant from the RFC: "Service with host as remaining components".
+ */
+ public static final int KRB_NT_SRV_XHST = 4;
+
+ /**
+ * Constant from the RFC: "Unique ID".
+ */
+ public static final int KRB_NT_UID = 5;
+
+ /**
+ * Constant from the RFC: "Name type not known".
+ */
+ public static final int KRB_NT_UNKNOWN = 0;
+
+ private String name;
+ private int type;
+ private String realm;
+
+ /**
+ * Create a new instance with the given name and a type of
+ * {@link #KRB_NT_PRINCIPAL}.
+ * @param name the principal's name
+ */
+ public KerberosPrincipal(String name)
+ {
+ this(name, KRB_NT_PRINCIPAL);
+ }
+
+ /**
+ * Create a new instance with the given name and type. The name is
+ * parsed according to the rules in the RFC. If there is no realm,
+ * then the local realm is used instead.
+ *
+ * @param name the principal's name
+ * @param type the principal's type
+ */
+ public KerberosPrincipal(String name, int type)
+ // Marked as unimplemented because we don't look for the realm as needed.
+ throws NotImplementedException
+ {
+ if (type < KRB_NT_UNKNOWN || type > KRB_NT_UID)
+ throw new IllegalArgumentException("unknown type: " + type);
+ this.name = name;
+ this.type = type;
+ this.realm = parseRealm();
+ }
+
+ private String parseRealm()
+ {
+ // Handle quoting as specified by the Kerberos RFC.
+ int i, len = name.length();
+ boolean quoted = false;
+ for (i = 0; i < len; ++i)
+ {
+ if (quoted)
+ {
+ quoted = false;
+ continue;
+ }
+ char c = name.charAt(i);
+ if (c == '\\')
+ {
+ quoted = true;
+ continue;
+ }
+ if (c == '@')
+ break;
+ }
+ if (quoted || i == len - 1)
+ throw new IllegalArgumentException("malformed principal: " + name);
+ if (i < len)
+ {
+ // We have the realm. FIXME: verify its syntax?
+ return name.substring(i + 1);
+ }
+ // Try to find the default realm.
+ String def = SystemProperties.getProperty("java.security.krb5.realm");
+ if (def != null)
+ return def;
+ // Now ask the system.
+ // FIXME: use java.security.krb5.conf,
+ // or $JAVA_HOME/lib/security/krb5.conf to find the krb config file.
+ // Then pass to native code using krb5_set_config_files() and
+ // krb5_get_default_realm(). But... what about /etc/krb5.conf?
+ throw new IllegalArgumentException("default realm can't be found");
+ }
+
+ /**
+ * Return the name of this principal.
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ /**
+ * Return the realm of this principal.
+ */
+ public String getRealm()
+ {
+ return realm;
+ }
+
+ /**
+ * Return the type of this principal.
+ */
+ public int getNameType()
+ {
+ return type;
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ public boolean equals(Object other)
+ {
+ if (! (other instanceof KerberosPrincipal))
+ return false;
+ KerberosPrincipal kp = (KerberosPrincipal) other;
+ return name.equals(kp.name) && type == kp.type;
+ }
+
+ public String toString()
+ {
+ // This is what came to mind.
+ return name + ":" + type;
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/kerberos/KerberosTicket.java b/libjava/classpath/javax/security/auth/kerberos/KerberosTicket.java
new file mode 100644
index 0000000..85e2537
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/KerberosTicket.java
@@ -0,0 +1,339 @@
+/* KerberosTicket.java -- a kerberos ticket
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import gnu.classpath.NotImplementedException;
+
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.util.Date;
+
+import javax.crypto.SecretKey;
+import javax.security.auth.DestroyFailedException;
+import javax.security.auth.Destroyable;
+import javax.security.auth.RefreshFailedException;
+import javax.security.auth.Refreshable;
+
+/**
+ * This class represents a Kerberos ticket. See the Kerberos
+ * authentication RFC for more information:
+ * <a href="http://www.ietf.org/rfc/rfc1510.txt">RFC 1510</a>.
+ *
+ * @since 1.4
+ */
+public class KerberosTicket
+ implements Destroyable, Serializable, Refreshable
+{
+ private static final long serialVersionUID = 7395334370157380539L;
+
+ // Indices of the various flags. From the kerberos spec.
+ // We only list the ones we use.
+ private static final int FORWARDABLE = 1;
+ private static final int FORWARDED = 2;
+ private static final int PROXIABLE = 3;
+ private static final int PROXY = 4;
+ private static final int POSTDATED = 6;
+ private static final int RENEWABLE = 8;
+ private static final int INITIAL = 9;
+ private static final int NUM_FLAGS = 12;
+
+ private byte[] asn1Encoding;
+ private KeyImpl sessionKey;
+ private boolean[] flags;
+ private Date authTime;
+ private Date startTime;
+ private Date endTime;
+ private Date renewTill;
+ private KerberosPrincipal client;
+ private KerberosPrincipal server;
+ private InetAddress[] clientAddresses;
+
+ /**
+ * Create a new ticket given all the facts about it.
+ *
+ * Note that flags may be null or "short"; any flags not specified
+ * will be taken to be false.
+ *
+ * If the key is not renewable, then renewTill may be null.
+ *
+ * If authTime is null, then it is taken to be the same as startTime.
+ *
+ * If clientAddresses is null, then the ticket can be used anywhere.
+ *
+ * @param asn1Encoding the contents of the ticket, as ASN1
+ * @param client the client principal
+ * @param server the server principal
+ * @param key the contents of the session key
+ * @param type the type of the key
+ * @param flags an array of flags, as specified by the RFC
+ * @param authTime when the client was authenticated
+ * @param startTime starting time at which the ticket is valid
+ * @param endTime ending time, after which the ticket is invalid
+ * @param renewTill for a rewewable ticket, the time before which it must
+ * be renewed
+ * @param clientAddresses a possibly-null array of addresses where this
+ * ticket may be used
+ */
+ public KerberosTicket(byte[] asn1Encoding, KerberosPrincipal client,
+ KerberosPrincipal server, byte[] key, int type,
+ boolean[] flags, Date authTime, Date startTime,
+ Date endTime, Date renewTill,
+ InetAddress[] clientAddresses)
+ {
+ this.asn1Encoding = (byte[]) asn1Encoding.clone();
+ this.sessionKey = new KeyImpl(key, type);
+ this.flags = new boolean[NUM_FLAGS];
+ if (flags != null)
+ System.arraycopy(flags, 0, this.flags, 0,
+ Math.min(flags.length, NUM_FLAGS));
+ this.flags = (boolean[]) flags.clone();
+ this.authTime = (Date) authTime.clone();
+ this.startTime = (Date) ((startTime == null)
+ ? authTime : startTime).clone();
+ this.endTime = (Date) endTime.clone();
+ this.renewTill = (Date) renewTill.clone();
+ this.client = client;
+ this.server = server;
+ this.clientAddresses = (clientAddresses == null
+ ? null
+ : (InetAddress[]) clientAddresses.clone());
+ }
+
+ /**
+ * Destroy this ticket. This discards secret information. After this
+ * method is called, other methods will throw IllegalStateException.
+ */
+ public void destroy() throws DestroyFailedException
+ {
+ if (sessionKey == null)
+ throw new DestroyFailedException("already destroyed");
+ sessionKey = null;
+ asn1Encoding = null;
+ }
+
+ /**
+ * Return true if this ticket has been destroyed.
+ */
+ public boolean isDestroyed()
+ {
+ return sessionKey == null;
+ }
+
+ /**
+ * Return true if the ticket is currently valid. This is true if
+ * the system time is between the ticket's start and end times.
+ */
+ public boolean isCurrent()
+ {
+ long now = System.currentTimeMillis();
+ return startTime.getTime() <= now && now <= endTime.getTime();
+ }
+
+ /**
+ * If the ticket is renewable, and the renewal time has not yet elapsed,
+ * attempt to renew the ticket.
+ * @throws RefreshFailedException if the renewal fails for any reason
+ */
+ public void refresh() throws RefreshFailedException, NotImplementedException
+ {
+ if (! isRenewable())
+ throw new RefreshFailedException("not renewable");
+ if (renewTill != null
+ && System.currentTimeMillis() >= renewTill.getTime())
+ throw new RefreshFailedException("renewal time elapsed");
+ // FIXME: must contact the KDC.
+ // Use the java.security.krb5.kdc property...
+ throw new RefreshFailedException("not implemented");
+ }
+
+ /**
+ * Return the client principal for this ticket.
+ */
+ public final KerberosPrincipal getClient()
+ {
+ return client;
+ }
+
+ /**
+ * Return the server principal for this ticket.
+ */
+ public final KerberosPrincipal getServer()
+ {
+ return server;
+ }
+
+ /**
+ * Return true if this ticket is forwardable.
+ */
+ public final boolean isForwardable()
+ {
+ return flags[FORWARDABLE];
+ }
+
+ /**
+ * Return true if this ticket has been forwarded.
+ */
+ public final boolean isForwarded()
+ {
+ return flags[FORWARDED];
+ }
+
+ /**
+ * Return true if this ticket is proxiable.
+ */
+ public final boolean isProxiable()
+ {
+ return flags[PROXIABLE];
+ }
+
+ /**
+ * Return true if this ticket is a proxy ticket.
+ */
+ public final boolean isProxy()
+ {
+ return flags[PROXY];
+ }
+
+ /**
+ * Return true if this ticket was post-dated.
+ */
+ public final boolean isPostdated()
+ {
+ return flags[POSTDATED];
+ }
+
+ /**
+ * Return true if this ticket is renewable.
+ */
+ public final boolean isRenewable()
+ {
+ return flags[RENEWABLE];
+ }
+
+ /**
+ * Return true if this ticket was granted by an application
+ * server, and not via a ticket-granting ticket.
+ */
+ public final boolean isInitial()
+ {
+ return flags[INITIAL];
+ }
+
+ /**
+ * Return the flags for this ticket as a boolean array.
+ * See the RFC to understand what the different entries mean.
+ */
+ public final boolean[] getFlags()
+ {
+ return (boolean[]) flags.clone();
+ }
+
+ /**
+ * Return the authentication time for this ticket.
+ */
+ public final Date getAuthTime()
+ {
+ return (Date) authTime.clone();
+ }
+
+ /**
+ * Return the start time for this ticket.
+ */
+ public final Date getStartTime()
+ {
+ return (Date) startTime.clone();
+ }
+
+ /**
+ * Return the end time for this ticket.
+ */
+ public final Date getEndTime()
+ {
+ return (Date) endTime.clone();
+ }
+
+ /**
+ * Return the renewal time for this ticket. For a non-renewable
+ * ticket, this will return null.
+ */
+ public final Date getRenewTill()
+ {
+ return flags[RENEWABLE] ? ((Date) renewTill.clone()) : null;
+ }
+
+ /**
+ * Return the allowable client addresses for this ticket. This will
+ * return null if the ticket can be used anywhere.
+ */
+ public final InetAddress[] getClientAddresses()
+ {
+ return (clientAddresses == null
+ ? null
+ : (InetAddress[]) clientAddresses.clone());
+ }
+
+ /**
+ * Return the encoded form of this ticket.
+ */
+ public final byte[] getEncoded()
+ {
+ checkDestroyed();
+ return (byte[]) sessionKey.key.clone();
+ }
+
+ /**
+ * Return the secret key associated with this ticket.
+ */
+ public final SecretKey getSessionKey()
+ {
+ checkDestroyed();
+ return sessionKey;
+ }
+
+ private void checkDestroyed()
+ {
+ if (sessionKey == null)
+ throw new IllegalStateException("key is destroyed");
+ }
+
+ public String toString()
+ {
+ return "FIXME bob";
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/kerberos/KeyImpl.java b/libjava/classpath/javax/security/auth/kerberos/KeyImpl.java
new file mode 100644
index 0000000..6773dfa
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/KeyImpl.java
@@ -0,0 +1,93 @@
+/* KeyImpl.java -- kerberos key implementation
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import java.io.Serializable;
+
+import javax.crypto.SecretKey;
+
+/**
+ * Note that the name of this class is fixed by the serialization
+ * spec, even though the class itself is not public.
+ */
+final class KeyImpl implements Serializable, SecretKey
+{
+ // Enable this when serialization works.
+ // private static final long serialVersionUID = -7889313790214321193L;
+
+ public String algorithm;
+ public int type;
+ public byte[] key;
+
+ public KeyImpl(byte[] key, int type)
+ {
+ // From kerberos spec.
+ if (type == 0)
+ this.algorithm = null;
+ else if (type == 1)
+ this.algorithm = "DES";
+ else
+ this.algorithm = "FIXME";
+ this.type = type;
+ this.key = (byte[]) key.clone();
+ }
+
+ public KeyImpl(char[] passwd, String algo)
+ {
+ this.algorithm = (algo == null) ? "DES" : algo;
+ this.type = 0; // FIXME
+ this.key = null; // double FIXME
+ }
+
+ public String getAlgorithm()
+ {
+ return algorithm;
+ }
+
+ public byte[] getEncoded()
+ {
+ return key;
+ }
+
+ public String getFormat()
+ {
+ // FIXME.
+ return null;
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/kerberos/ServicePermission.java b/libjava/classpath/javax/security/auth/kerberos/ServicePermission.java
new file mode 100644
index 0000000..452f8e9
--- /dev/null
+++ b/libjava/classpath/javax/security/auth/kerberos/ServicePermission.java
@@ -0,0 +1,172 @@
+/* ServicePermission.java -- kerberos service permission
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.security.auth.kerberos;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+/**
+ * This represents permission to access to a Kerberos service principal.
+ * See the Kerberos authentication RFC for more information:
+ * <a href="http://www.ietf.org/rfc/rfc1510.txt">RFC 1510</a>.
+ *
+ * @since 1.4
+ */
+public final class ServicePermission
+ extends Permission
+{
+ // FIXME: Enable this when serialization works.
+ // private static final long serialVersionUID = -1227585031618624935L;
+
+ private static final int INITIATE = 1;
+ private static final int ACCEPT = 2;
+
+ private int flags;
+
+ /**
+ * Create a new service permission with the indicated name and actions.
+ *
+ * The name is the name of the kerberos principal for the service.
+ *
+ * The actions are a comma-separated list of strings. The recognized
+ * actions are "initiate" and "accept". The "initiate" action means
+ * that the holder of the permission can access the service. The
+ * "accept" action means that the holder of the permission can operate
+ * as this service.
+ *
+ * @param name the prinicpal's name
+ * @param action the allowed actions
+ */
+ public ServicePermission(String name, String action)
+ {
+ super(name);
+ parseActions(action);
+ }
+
+ public boolean implies(Permission perm)
+ {
+ if (! (perm instanceof ServicePermission))
+ return false;
+ ServicePermission sp = (ServicePermission) perm;
+ if ((flags & sp.flags) != sp.flags)
+ return false;
+ return getName().equals(sp.getName());
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (! (obj instanceof ServicePermission))
+ return false;
+ ServicePermission sp = (ServicePermission) obj;
+ return flags == sp.flags && getName().equals(sp.getName());
+ }
+
+ public int hashCode()
+ {
+ return getName().hashCode() + flags;
+ }
+
+ /**
+ * Return a string representing the actions.
+ */
+ public String getActions()
+ {
+ if (flags == (INITIATE | ACCEPT))
+ return "initiate,accept";
+ if (flags == INITIATE)
+ return "initiate";
+ if (flags == ACCEPT)
+ return "accept";
+ return "";
+ }
+
+ public PermissionCollection newPermissionCollection()
+ {
+ return new PermissionCollection()
+ {
+ private Vector permissions = new Vector();
+
+ public void add(Permission perm)
+ {
+ if (isReadOnly())
+ throw new SecurityException("readonly");
+ if (! (perm instanceof ServicePermission))
+ throw new IllegalArgumentException("can only add DelegationPermissions");
+ permissions.add(perm);
+ }
+
+ public boolean implies(Permission perm)
+ {
+ if (! (perm instanceof ServicePermission))
+ return false;
+ Enumeration e = elements();
+ while (e.hasMoreElements())
+ {
+ ServicePermission sp = (ServicePermission) e.nextElement();
+ if (sp.implies(perm))
+ return true;
+ }
+ return false;
+ }
+
+ public Enumeration elements()
+ {
+ return permissions.elements();
+ }
+ };
+ }
+
+ private void parseActions(String actions)
+ {
+ StringTokenizer tok = new StringTokenizer(actions, ",");
+ while (tok.hasMoreTokens())
+ {
+ String token = tok.nextToken();
+ if ("accept".equals(token))
+ flags |= ACCEPT;
+ else if ("initiate".equals(token))
+ flags |= INITIATE;
+ else
+ throw new IllegalArgumentException("unrecognized token: " + token);
+ }
+ }
+}
diff --git a/libjava/classpath/javax/security/auth/x500/X500Principal.java b/libjava/classpath/javax/security/auth/x500/X500Principal.java
index fcbb495..d78b0d3 100644
--- a/libjava/classpath/javax/security/auth/x500/X500Principal.java
+++ b/libjava/classpath/javax/security/auth/x500/X500Principal.java
@@ -395,7 +395,7 @@ public final class X500Principal implements Principal, Serializable
buf.append((char) ch);
}
sep = in.read();
- if (sep != '+' || sep != ',')
+ if (sep != '+' && sep != ',')
throw new IOException("illegal character: " + (char) ch);
return buf.toString();
}
diff --git a/libjava/classpath/javax/sound/midi/InvalidMidiDataException.java b/libjava/classpath/javax/sound/midi/InvalidMidiDataException.java
index d7f7707..9f56900 100644
--- a/libjava/classpath/javax/sound/midi/InvalidMidiDataException.java
+++ b/libjava/classpath/javax/sound/midi/InvalidMidiDataException.java
@@ -66,25 +66,4 @@ public class InvalidMidiDataException extends Exception
{
super(s);
}
-
- /**
- * Create an InvalidMidiDataException object.
- *
- * @param s the exception message string
- * @param cause the root cause of the exception
- */
- public InvalidMidiDataException(String s, Throwable cause)
- {
- super(s, cause);
- }
-
- /**
- * Create an InvalidMidiDataException object.
- *
- * @param cause the root cause of the exception
- */
- public InvalidMidiDataException(Throwable cause)
- {
- super(cause);
- }
}
diff --git a/libjava/classpath/javax/sound/midi/MetaMessage.java b/libjava/classpath/javax/sound/midi/MetaMessage.java
index 2ca93ac..f7c4fb4 100644
--- a/libjava/classpath/javax/sound/midi/MetaMessage.java
+++ b/libjava/classpath/javax/sound/midi/MetaMessage.java
@@ -76,7 +76,7 @@ public class MetaMessage extends MidiMessage
* Create a MetaMessage object.
* @param data a complete system exclusive message
*/
- public MetaMessage(byte[] data)
+ protected MetaMessage(byte[] data)
{
super(data);
int index = 2;
diff --git a/libjava/classpath/javax/sound/midi/MidiDevice.java b/libjava/classpath/javax/sound/midi/MidiDevice.java
index 6f43c25..387ccea 100644
--- a/libjava/classpath/javax/sound/midi/MidiDevice.java
+++ b/libjava/classpath/javax/sound/midi/MidiDevice.java
@@ -134,7 +134,7 @@ public interface MidiDevice
* @param description the device description
* @param version the device version string
*/
- public Info(String name, String vendor, String description, String version)
+ protected Info(String name, String vendor, String description, String version)
{
this.name = name;
this.vendor = vendor;
@@ -150,7 +150,7 @@ public interface MidiDevice
* @return true if this is the same object
* @see java.lang.Object#equals(java.lang.Object)
*/
- public boolean equals(Object obj)
+ public final boolean equals(Object obj)
{
return super.equals(obj);
}
@@ -161,7 +161,7 @@ public interface MidiDevice
* @return the hash code for this object
* @see java.lang.Object#hashCode()
*/
- public int hashCode()
+ public final int hashCode()
{
return super.hashCode();
}
@@ -171,7 +171,7 @@ public interface MidiDevice
*
* @return the device name
*/
- public String getName()
+ public final String getName()
{
return name;
}
@@ -181,7 +181,7 @@ public interface MidiDevice
*
* @return the device vendor
*/
- public String getVendor()
+ public final String getVendor()
{
return vendor;
}
@@ -191,7 +191,7 @@ public interface MidiDevice
*
* @return the device description
*/
- public String getDescription()
+ public final String getDescription()
{
return description;
}
@@ -201,7 +201,7 @@ public interface MidiDevice
*
* @return the device version
*/
- public String getVersion()
+ public final String getVersion()
{
return version;
}
@@ -212,7 +212,7 @@ public interface MidiDevice
* @return the device name
* @see java.lang.Object#toString()
*/
- public String toString()
+ public final String toString()
{
return name;
}
diff --git a/libjava/classpath/javax/sound/midi/MidiSystem.java b/libjava/classpath/javax/sound/midi/MidiSystem.java
index 8ea12eb..627dd95 100644
--- a/libjava/classpath/javax/sound/midi/MidiSystem.java
+++ b/libjava/classpath/javax/sound/midi/MidiSystem.java
@@ -64,6 +64,11 @@ import javax.sound.midi.spi.SoundbankReader;
*/
public class MidiSystem
{
+ private MidiSystem()
+ {
+ // Not instantiable.
+ }
+
/**
* Get an array of all available MIDI devices.
*
diff --git a/libjava/classpath/javax/sound/midi/MidiUnavailableException.java b/libjava/classpath/javax/sound/midi/MidiUnavailableException.java
index d4b85e8..a992c16 100644
--- a/libjava/classpath/javax/sound/midi/MidiUnavailableException.java
+++ b/libjava/classpath/javax/sound/midi/MidiUnavailableException.java
@@ -66,25 +66,4 @@ public class MidiUnavailableException extends Exception
{
super(s);
}
-
- /**
- * Create an MidiUnavailableException object.
- *
- * @param s the exception message string
- * @param cause the root cause of the exception
- */
- public MidiUnavailableException(String s, Throwable cause)
- {
- super(s, cause);
- }
-
- /**
- * Create an MidiUnavailableException object.
- *
- * @param cause the root cause of the exception
- */
- public MidiUnavailableException(Throwable cause)
- {
- super(cause);
- }
}
diff --git a/libjava/classpath/javax/sound/midi/Sequencer.java b/libjava/classpath/javax/sound/midi/Sequencer.java
index 894d876..24ee250 100644
--- a/libjava/classpath/javax/sound/midi/Sequencer.java
+++ b/libjava/classpath/javax/sound/midi/Sequencer.java
@@ -385,7 +385,7 @@ public interface Sequencer extends MidiDevice
/**
* SyncMode objects use the Object hashCode.
*/
- public int hashCode()
+ public final int hashCode()
{
return super.hashCode();
}
diff --git a/libjava/classpath/javax/sound/midi/ShortMessage.java b/libjava/classpath/javax/sound/midi/ShortMessage.java
index 43c0e25..ef01d11 100644
--- a/libjava/classpath/javax/sound/midi/ShortMessage.java
+++ b/libjava/classpath/javax/sound/midi/ShortMessage.java
@@ -48,11 +48,6 @@ package javax.sound.midi;
public class ShortMessage extends MidiMessage
{
/**
- * Status byte for System Exclusive message.
- */
- public static final int SYSTEM_EXCLUSIVE = 0xF0;
-
- /**
* Status byte for Time Code message.
*/
public static final int MIDI_TIME_CODE = 0xF1;
@@ -170,7 +165,7 @@ public class ShortMessage extends MidiMessage
*
* @param data the message data
*/
- public ShortMessage(byte[] data)
+ protected ShortMessage(byte[] data)
{
super(data);
}
@@ -263,9 +258,6 @@ public class ShortMessage extends MidiMessage
case 0xF5: // FIXME: unofficial bus select. Not in spec??
return 1;
- case SYSTEM_EXCLUSIVE:
- return 0; // FIXME: is this correct?
-
case TUNE_REQUEST:
case END_OF_EXCLUSIVE:
case TIMING_CLOCK:
diff --git a/libjava/classpath/javax/sound/midi/SysexMessage.java b/libjava/classpath/javax/sound/midi/SysexMessage.java
index 7ab60f4..6471a3e 100644
--- a/libjava/classpath/javax/sound/midi/SysexMessage.java
+++ b/libjava/classpath/javax/sound/midi/SysexMessage.java
@@ -69,7 +69,7 @@ public class SysexMessage extends MidiMessage
* Create a SysexMessage object.
* @param data a complete system exclusive message
*/
- public SysexMessage(byte[] data)
+ protected SysexMessage(byte[] data)
{
super(data);
}
diff --git a/libjava/classpath/javax/sound/midi/Track.java b/libjava/classpath/javax/sound/midi/Track.java
index da7ef2e..d06c8cc 100644
--- a/libjava/classpath/javax/sound/midi/Track.java
+++ b/libjava/classpath/javax/sound/midi/Track.java
@@ -54,11 +54,16 @@ public class Track
/**
* The list of MidiEvents for this track.
*/
- protected Vector events;
+ Vector events;
// A HashSet to speed processing
private HashSet eventSet;
-
+
+ // This is only instantiable within this package.
+ Track()
+ {
+ }
+
/**
* Add a new event to this track. Specific events may only be added once.
* The event will be inserted into the appropriate spot in the event list
diff --git a/libjava/classpath/javax/sound/sampled/AudioSystem.java b/libjava/classpath/javax/sound/sampled/AudioSystem.java
index 0b0b754..2f64f92 100644
--- a/libjava/classpath/javax/sound/sampled/AudioSystem.java
+++ b/libjava/classpath/javax/sound/sampled/AudioSystem.java
@@ -68,6 +68,11 @@ public class AudioSystem
*/
public static final int NOT_SPECIFIED = -1;
+ // This class is not instantiable.
+ private AudioSystem()
+ {
+ }
+
/**
* Return the file format of a given File.
* @param f the file to check
diff --git a/libjava/classpath/javax/sound/sampled/BooleanControl.java b/libjava/classpath/javax/sound/sampled/BooleanControl.java
index aae1e23..147a7f8 100644
--- a/libjava/classpath/javax/sound/sampled/BooleanControl.java
+++ b/libjava/classpath/javax/sound/sampled/BooleanControl.java
@@ -42,7 +42,7 @@ package javax.sound.sampled;
* A BooleanControl is a Control which has two states.
* @since 1.3
*/
-public class BooleanControl extends Control
+public abstract class BooleanControl extends Control
{
/**
* A Type specialized to represent a boolean control.
diff --git a/libjava/classpath/javax/sound/sampled/CompoundControl.java b/libjava/classpath/javax/sound/sampled/CompoundControl.java
index 8664abc..057bdfd 100644
--- a/libjava/classpath/javax/sound/sampled/CompoundControl.java
+++ b/libjava/classpath/javax/sound/sampled/CompoundControl.java
@@ -42,7 +42,7 @@ package javax.sound.sampled;
* A compound control provides control over several other controls.
* @since 1.3
*/
-public class CompoundControl extends Control
+public abstract class CompoundControl extends Control
{
/**
* This describes a single compound control.
diff --git a/libjava/classpath/javax/sound/sampled/Control.java b/libjava/classpath/javax/sound/sampled/Control.java
index 810c2ed..4759a33 100644
--- a/libjava/classpath/javax/sound/sampled/Control.java
+++ b/libjava/classpath/javax/sound/sampled/Control.java
@@ -43,7 +43,7 @@ package javax.sound.sampled;
* for instance its volume.
* @since 1.3
*/
-public class Control
+public abstract class Control
{
/**
* This describes a single control.
@@ -75,7 +75,7 @@ public class Control
/**
* Return the name of this Type.
*/
- public String toString()
+ public final String toString()
{
return name;
}
diff --git a/libjava/classpath/javax/sound/sampled/EnumControl.java b/libjava/classpath/javax/sound/sampled/EnumControl.java
index 798f3a9..1ddc8a9 100644
--- a/libjava/classpath/javax/sound/sampled/EnumControl.java
+++ b/libjava/classpath/javax/sound/sampled/EnumControl.java
@@ -43,7 +43,7 @@ package javax.sound.sampled;
* values.
* @since 1.3
*/
-public class EnumControl extends Control
+public abstract class EnumControl extends Control
{
/**
* This Type describes an EnumControl.
diff --git a/libjava/classpath/javax/sound/sampled/FloatControl.java b/libjava/classpath/javax/sound/sampled/FloatControl.java
index 409c90d..bbdb24b 100644
--- a/libjava/classpath/javax/sound/sampled/FloatControl.java
+++ b/libjava/classpath/javax/sound/sampled/FloatControl.java
@@ -39,7 +39,7 @@ exception statement from your version. */
package javax.sound.sampled;
/** @since 1.3 */
-public class FloatControl extends Control
+public abstract class FloatControl extends Control
{
/**
* An instance of this class describes a particular floating point control.
diff --git a/libjava/classpath/javax/sound/sampled/LineEvent.java b/libjava/classpath/javax/sound/sampled/LineEvent.java
index db92593..dd4a9ae 100644
--- a/libjava/classpath/javax/sound/sampled/LineEvent.java
+++ b/libjava/classpath/javax/sound/sampled/LineEvent.java
@@ -126,7 +126,7 @@ public class LineEvent extends EventObject
/**
* Return the frame position associated with this event.
*/
- public long getFramePosition()
+ public final long getFramePosition()
{
return framePosition;
}
@@ -134,7 +134,7 @@ public class LineEvent extends EventObject
/**
* Return the Line associated with this event.
*/
- public Line getLine()
+ public final Line getLine()
{
return line;
}
@@ -142,7 +142,7 @@ public class LineEvent extends EventObject
/**
* Return the Type associated with this event.
*/
- public Type getType()
+ public final Type getType()
{
return type;
}
diff --git a/libjava/classpath/javax/sound/sampled/Mixer.java b/libjava/classpath/javax/sound/sampled/Mixer.java
index b9afba3..ff657cf 100644
--- a/libjava/classpath/javax/sound/sampled/Mixer.java
+++ b/libjava/classpath/javax/sound/sampled/Mixer.java
@@ -62,7 +62,7 @@ public interface Mixer extends Line
* @param desc a descriptive string
* @param vers the mixer's version
*/
- public Info(String name, String vendor, String desc, String vers)
+ protected Info(String name, String vendor, String desc, String vers)
{
this.name = name;
this.description = desc;
@@ -83,7 +83,7 @@ public interface Mixer extends Line
/**
* Return the name of the mixer.
*/
- public String getName()
+ public final String getName()
{
return name;
}
@@ -91,7 +91,7 @@ public interface Mixer extends Line
/**
* Return the mixer's description.
*/
- public String getDescription()
+ public final String getDescription()
{
return description;
}
@@ -99,7 +99,7 @@ public interface Mixer extends Line
/**
* Return the mixer's vendor.
*/
- public String getVendor()
+ public final String getVendor()
{
return vendor;
}
@@ -107,12 +107,12 @@ public interface Mixer extends Line
/**
* Return the mixer's version.
*/
- public String getVersion()
+ public final String getVersion()
{
return version;
}
- public String toString()
+ public final String toString()
{
return ("name=" + name + "; description=" + description
+ "; vendor=" + vendor + "; version=" + version);
diff --git a/libjava/classpath/javax/sound/sampled/Port.java b/libjava/classpath/javax/sound/sampled/Port.java
index 7b3daaf..fb39e6c 100644
--- a/libjava/classpath/javax/sound/sampled/Port.java
+++ b/libjava/classpath/javax/sound/sampled/Port.java
@@ -127,7 +127,7 @@ public interface Port extends Line
return super.matches(other) && equals(other);
}
- public String toString()
+ public final String toString()
{
return super.toString() + "; name=" + name + "; isSource=" + isSource;
}
diff --git a/libjava/classpath/javax/sound/sampled/ReverbType.java b/libjava/classpath/javax/sound/sampled/ReverbType.java
index a089593..c7cced8 100644
--- a/libjava/classpath/javax/sound/sampled/ReverbType.java
+++ b/libjava/classpath/javax/sound/sampled/ReverbType.java
@@ -84,7 +84,7 @@ public class ReverbType
/**
* Return the decay time.
*/
- public int getDecayTime()
+ public final int getDecayTime()
{
return decayTime;
}
@@ -92,7 +92,7 @@ public class ReverbType
/**
* Return the early reflection delay.
*/
- public int getEarlyReflectionDelay()
+ public final int getEarlyReflectionDelay()
{
return earlyReflectionDelay;
}
@@ -100,7 +100,7 @@ public class ReverbType
/**
* Return the early reflection intensity.
*/
- public float getEarlyReflectionIntensity()
+ public final float getEarlyReflectionIntensity()
{
return earlyReflectionIntensity;
}
@@ -108,7 +108,7 @@ public class ReverbType
/**
* Return the late reflection delay.
*/
- public int getLateReflectionDelay()
+ public final int getLateReflectionDelay()
{
return lateReflectionDelay;
}
@@ -116,7 +116,7 @@ public class ReverbType
/**
* Return the late reflection intensity.
*/
- public float getLateReflectionIntensity()
+ public final float getLateReflectionIntensity()
{
return lateReflectionIntensity;
}
@@ -133,7 +133,7 @@ public class ReverbType
/**
* Return a description of this ReverbType.
*/
- public String toString()
+ public final String toString()
{
return ("name=" + name + "; earlyReflectionDelay=" + earlyReflectionDelay
+ "; earlyReflectionIntensity=" + earlyReflectionIntensity
diff --git a/libjava/classpath/javax/swing/AbstractAction.java b/libjava/classpath/javax/swing/AbstractAction.java
index 4a23345..ffd122f 100644
--- a/libjava/classpath/javax/swing/AbstractAction.java
+++ b/libjava/classpath/javax/swing/AbstractAction.java
@@ -40,9 +40,6 @@ package javax.swing;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;
@@ -110,32 +107,6 @@ public abstract class AbstractAction
}
/**
- * readObject
- *
- * @param stream the stream to read from
- *
- * @exception ClassNotFoundException TODO
- * @exception IOException if an error occurs
- */
- private void readObject(ObjectInputStream stream)
- throws ClassNotFoundException, IOException
- {
- // TODO
- }
-
- /**
- * writeObject
- *
- * @param stream the stream to write to
- *
- * @exception IOException if an error occurs
- */
- private void writeObject(ObjectOutputStream stream) throws IOException
- {
- // TODO
- }
-
- /**
* Returns a clone of the action.
*
* @return A clone of the action.
diff --git a/libjava/classpath/javax/swing/AbstractButton.java b/libjava/classpath/javax/swing/AbstractButton.java
index 3d28908..348daec 100644
--- a/libjava/classpath/javax/swing/AbstractButton.java
+++ b/libjava/classpath/javax/swing/AbstractButton.java
@@ -37,12 +37,17 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
+import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.ItemSelectable;
+import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Rectangle;
+import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
@@ -51,17 +56,26 @@ import java.awt.image.ImageObserver;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
+import java.util.Enumeration;
+import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
+import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleIcon;
+import javax.accessibility.AccessibleRelation;
import javax.accessibility.AccessibleRelationSet;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleText;
import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ButtonUI;
+import javax.swing.plaf.basic.BasicHTML;
import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Position;
+import javax.swing.text.View;
/**
@@ -275,6 +289,42 @@ public abstract class AbstractButton extends JComponent
protected ChangeEvent changeEvent = new ChangeEvent(this);
/**
+ * Indicates if the borderPainted property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientBorderPaintedSet = false;
+
+ /**
+ * Indicates if the rolloverEnabled property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientRolloverEnabledSet = false;
+
+ /**
+ * Indicates if the iconTextGap property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientIconTextGapSet = false;
+
+ /**
+ * Indicates if the contentAreaFilled property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientContentAreaFilledSet = false;
+
+ /**
* Fired in a PropertyChangeEvent when the "borderPainted" property changes.
*/
public static final String BORDER_PAINTED_CHANGED_PROPERTY = "borderPainted";
@@ -388,134 +438,405 @@ public abstract class AbstractButton extends JComponent
// Nothing to do here yet.
}
+ /**
+ * Returns the accessible state set of this object. In addition to the
+ * superclass's states, the <code>AccessibleAbstractButton</code>
+ * supports the following states: {@link AccessibleState#ARMED},
+ * {@link AccessibleState#FOCUSED}, {@link AccessibleState#PRESSED} and
+ * {@link AccessibleState#CHECKED}.
+ *
+ * @return the curren state of this accessible object
+ */
public AccessibleStateSet getAccessibleStateSet()
{
- return null; // TODO
+ AccessibleStateSet state = super.getAccessibleStateSet();
+
+ if (getModel().isArmed())
+ state.add(AccessibleState.ARMED);
+ if (getModel().isPressed())
+ state.add(AccessibleState.PRESSED);
+ if (isSelected())
+ state.add(AccessibleState.CHECKED);
+
+ return state;
}
+ /**
+ * Returns the accessible name for the button.
+ */
public String getAccessibleName()
{
- return null; // TODO
+ String result = super.getAccessibleName();
+ if (result == null)
+ result = text;
+ return result;
}
+ /**
+ * Returns the accessible icons of this object. If the AbstractButton's
+ * icon is an Accessible, and it's AccessibleContext is an AccessibleIcon,
+ * then this AccessibleIcon is returned, otherwise <code>null</code>.
+ *
+ * @return the accessible icons of this object, or <code>null</code> if
+ * there is no accessible icon
+ */
public AccessibleIcon[] getAccessibleIcon()
{
- return null; // TODO
+ AccessibleIcon[] ret = null;
+ Icon icon = getIcon();
+ if (icon instanceof Accessible)
+ {
+ AccessibleContext ctx = ((Accessible) icon).getAccessibleContext();
+ if (ctx instanceof AccessibleIcon)
+ {
+ ret = new AccessibleIcon[]{ (AccessibleIcon) ctx };
+ }
+ }
+ return ret;
}
+ /**
+ * Returns the accessible relations of this AccessibleAbstractButton.
+ * If the AbstractButton is part of a ButtonGroup, then all the buttons
+ * in this button group are added as targets in a MEMBER_OF relation,
+ * otherwise an empty relation set is returned (from super).
+ *
+ * @return the accessible relations of this AccessibleAbstractButton
+ */
public AccessibleRelationSet getAccessibleRelationSet()
{
- return null; // TODO
+ AccessibleRelationSet relations = super.getAccessibleRelationSet();
+ ButtonModel model = getModel();
+ if (model instanceof DefaultButtonModel)
+ {
+ ButtonGroup group = ((DefaultButtonModel) model).getGroup();
+ if (group != null)
+ {
+ Object[] target = new Object[group.getButtonCount()];
+ Enumeration els = group.getElements();
+
+ for (int index = 0; els.hasMoreElements(); ++index)
+ {
+ target[index] = els.nextElement();
+ }
+
+ AccessibleRelation rel =
+ new AccessibleRelation(AccessibleRelation.MEMBER_OF);
+ rel.setTarget(target);
+ relations.add(rel);
+ }
+ }
+ return relations;
}
+ /**
+ * Returns the accessible action associated with this object. For buttons,
+ * this will be <code>this</code>.
+ *
+ * @return <code>this</code>
+ */
public AccessibleAction getAccessibleAction()
{
- return null; // TODO
+ return this;
}
+ /**
+ * Returns the accessible value of this AccessibleAbstractButton, which
+ * is always <code>this</code>.
+ *
+ * @return the accessible value of this AccessibleAbstractButton, which
+ * is always <code>this</code>
+ */
public AccessibleValue getAccessibleValue()
{
- return null; // TODO
+ return this;
}
+ /**
+ * Returns the number of accessible actions that are supported by this
+ * object. Buttons support one action by default ('press button'), so this
+ * method always returns <code>1</code>.
+ *
+ * @return <code>1</code>, the number of supported accessible actions
+ */
public int getAccessibleActionCount()
{
- return 0; // TODO
+ return 1;
}
- public String getAccessibleActionDescription(int value0)
+ /**
+ * Returns a description for the action with the specified index or
+ * <code>null</code> if such action does not exist.
+ *
+ * @param actionIndex the zero based index to the actions
+ *
+ * @return a description for the action with the specified index or
+ * <code>null</code> if such action does not exist
+ */
+ public String getAccessibleActionDescription(int actionIndex)
{
- return null; // TODO
+ String descr = null;
+ if (actionIndex == 0)
+ {
+ // FIXME: Supply localized descriptions in the UIDefaults.
+ descr = UIManager.getString("AbstractButton.clickText");
+ }
+ return descr;
}
- public boolean doAccessibleAction(int value0)
+ /**
+ * Performs the acccessible action with the specified index on this object.
+ * Since buttons have only one action by default (which is to press the
+ * button), this method performs a 'press button' when the specified index
+ * is <code>0</code> and nothing otherwise.
+ *
+ * @param actionIndex a zero based index into the actions of this button
+ *
+ * @return <code>true</code> if the specified action has been performed
+ * successfully, <code>false</code> otherwise
+ */
+ public boolean doAccessibleAction(int actionIndex)
{
- return false; // TODO
+ boolean retVal = false;
+ if (actionIndex == 0)
+ {
+ doClick();
+ retVal = true;
+ }
+ return retVal;
}
+ /**
+ * Returns the current value of this object as a number. This
+ * implementation returns an <code>Integer(1)</code> if the button is
+ * selected, <code>Integer(0)</code> if the button is not selected.
+ *
+ * @return the current value of this object as a number
+ */
public Number getCurrentAccessibleValue()
{
- return null; // TODO
+ Integer retVal;
+ if (isSelected())
+ retVal = new Integer(1);
+ else
+ retVal = new Integer(0);
+ return retVal;
}
- public boolean setCurrentAccessibleValue(Number value0)
+ /**
+ * Sets the current accessible value as object. If the specified number
+ * is 0 the button will be deselected, otherwise the button will
+ * be selected.
+ *
+ * @param value 0 for deselected button, other for selected button
+ *
+ * @return <code>true</code> if the value has been set, <code>false</code>
+ * otherwise
+ */
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false; // TODO
+ boolean retVal = false;
+ if (value != null)
+ {
+ if (value.intValue() == 0)
+ setSelected(false);
+ else
+ setSelected(true);
+ retVal = true;
+ }
+ return retVal;
}
+ /**
+ * Returns the minimum accessible value for the AccessibleAbstractButton,
+ * which is <code>0</code>.
+ *
+ * @return the maxinimum accessible value for the AccessibleAbstractButton,
+ * which is <code>1</code>
+ */
public Number getMinimumAccessibleValue()
{
- return null; // TODO
+ return new Integer(0);
}
+ /**
+ * Returns the maximum accessible value for the AccessibleAbstractButton,
+ * which is <code>1</code>.
+ *
+ * @return the maximum accessible value for the AccessibleAbstractButton,
+ * which is <code>1</code>
+ */
public Number getMaximumAccessibleValue()
{
- return null; // TODO
+ return new Integer(1);
}
+ /**
+ * Returns the accessible text for this AccessibleAbstractButton. This
+ * will be <code>null</code> if the button has a non-HTML label, otherwise
+ * <code>this</code>.
+ *
+ * @return the accessible text for this AccessibleAbstractButton
+ */
public AccessibleText getAccessibleText()
{
- return null; // TODO
+ AccessibleText accessibleText = null;
+ if (getClientProperty(BasicHTML.propertyKey) != null)
+ accessibleText = this;
+
+ return accessibleText;
}
- public int getIndexAtPoint(Point value0)
+ /**
+ * Returns the index of the label's character at the specified point,
+ * relative to the local bounds of the button. This only works for
+ * HTML labels.
+ *
+ * @param p the point, relative to the buttons local bounds
+ *
+ * @return the index of the label's character at the specified point
+ */
+ public int getIndexAtPoint(Point p)
{
- return 0; // TODO
+ int index = -1;
+ View view = (View) getClientProperty(BasicHTML.propertyKey);
+ if (view != null)
+ {
+ Rectangle shape = new Rectangle(0, 0, getWidth(), getHeight());
+ index = view.viewToModel(p.x, p.y, shape, new Position.Bias[1]);
+ }
+ return index;
}
- public Rectangle getCharacterBounds(int value0)
+ /**
+ * Returns the bounds of the character at the specified index of the
+ * button's label. This will only work for HTML labels.
+ *
+ * @param i the index of the character of the label
+ *
+ * @return the bounds of the character at the specified index of the
+ * button's label
+ */
+ public Rectangle getCharacterBounds(int i)
{
- return null; // TODO
+ Rectangle rect = null;
+ View view = (View) getClientProperty(BasicHTML.propertyKey);
+ if (view != null)
+ {
+ Rectangle shape = new Rectangle(0, 0, getWidth(), getHeight());
+ try
+ {
+ Shape s = view.modelToView(i, shape, Position.Bias.Forward);
+ rect = s.getBounds();
+ }
+ catch (BadLocationException ex)
+ {
+ rect = null;
+ }
+ }
+ return rect;
}
+ /**
+ * Returns the number of characters in the button's label.
+ *
+ * @return the bounds of the character at the specified index of the
+ * button's label
+ */
public int getCharCount()
{
- return 0; // TODO
+ int charCount;
+ View view = (View) getClientProperty(BasicHTML.propertyKey);
+ if (view != null)
+ {
+ charCount = view.getDocument().getLength();
+ }
+ else
+ {
+ charCount = getAccessibleName().length();
+ }
+ return charCount;
}
+ /**
+ * This always returns <code>-1</code> since there is no caret in a button.
+ *
+ * @return <code>-1</code> since there is no caret in a button
+ */
public int getCaretPosition()
{
- return 0; // TODO
+ return -1;
}
public String getAtIndex(int value0, int value1)
+ throws NotImplementedException
{
return null; // TODO
}
public String getAfterIndex(int value0, int value1)
+ throws NotImplementedException
{
return null; // TODO
}
public String getBeforeIndex(int value0, int value1)
+ throws NotImplementedException
{
return null; // TODO
}
- public AttributeSet getCharacterAttribute(int value0)
+ /**
+ * Returns the text attribute for the character at the specified character
+ * index.
+ *
+ * @param i the character index
+ *
+ * @return the character attributes for the specified character or
+ * <code>null</code> if the character has no attributes
+ */
+ public AttributeSet getCharacterAttribute(int i)
{
- return null; // TODO
+ AttributeSet atts = null;
+ View view = (View) getClientProperty(BasicHTML.propertyKey);
+ if (view != null)
+ {
+
+ }
+ return atts;
}
+ /**
+ * This always returns <code>-1</code> since
+ * button labels can't be selected.
+ *
+ * @return <code>-1</code>, button labels can't be selected
+ */
public int getSelectionStart()
{
- return 0; // TODO
+ return -1;
}
+ /**
+ * This always returns <code>-1</code> since
+ * button labels can't be selected.
+ *
+ * @return <code>-1</code>, button labels can't be selected
+ */
public int getSelectionEnd()
{
- return 0; // TODO
+ return -1;
}
+ /**
+ * Returns the selected text. This always returns <code>null</code> since
+ * button labels can't be selected.
+ *
+ * @return <code>null</code>, button labels can't be selected
+ */
public String getSelectedText()
{
- return null; // TODO
- }
-
- private Rectangle getTextRectangle()
- {
- return null; // TODO
+ return null;
}
}
@@ -905,6 +1226,7 @@ public abstract class AbstractButton extends JComponent
*/
public void setRolloverEnabled(boolean r)
{
+ clientRolloverEnabledSet = true;
if (rollOverEnabled != r)
{
rollOverEnabled = r;
@@ -1137,9 +1459,9 @@ public abstract class AbstractButton extends JComponent
*/
public void setBorderPainted(boolean b)
{
+ clientBorderPaintedSet = true;
if (borderPainted == b)
return;
-
boolean old = borderPainted;
borderPainted = b;
firePropertyChange(BORDER_PAINTED_CHANGED_PROPERTY, old, b);
@@ -1283,15 +1605,18 @@ public abstract class AbstractButton extends JComponent
* Set the value of the {@link #iconTextGap} property.
*
* @param i The new value of the property
+ *
+ * @since 1.4
*/
public void setIconTextGap(int i)
{
+ clientIconTextGapSet = true;
if (iconTextGap == i)
return;
int old = iconTextGap;
iconTextGap = i;
- fireStateChanged();
+ firePropertyChange("iconTextGap", new Integer(old), new Integer(i));
revalidate();
repaint();
}
@@ -1300,6 +1625,8 @@ public abstract class AbstractButton extends JComponent
* Get the value of the {@link #iconTextGap} property.
*
* @return The current value of the property
+ *
+ * @since 1.4
*/
public int getIconTextGap()
{
@@ -1917,15 +2244,16 @@ public abstract class AbstractButton extends JComponent
*/
public void setContentAreaFilled(boolean b)
{
+ clientContentAreaFilledSet = true;
if (contentAreaFilled == b)
return;
- boolean old = contentAreaFilled;
- contentAreaFilled = b;
- firePropertyChange(CONTENT_AREA_FILLED_CHANGED_PROPERTY, old, b);
// The JDK sets the opaque property to the value of the contentAreaFilled
// property, so should we do.
setOpaque(b);
+ boolean old = contentAreaFilled;
+ contentAreaFilled = b;
+ firePropertyChange(CONTENT_AREA_FILLED_CHANGED_PROPERTY, old, b);
}
/**
@@ -2044,4 +2372,97 @@ public abstract class AbstractButton extends JComponent
multiClickThreshhold = threshhold;
}
+
+ /**
+ * Adds the specified component to this AbstractButton. This overrides the
+ * default in order to install an {@link OverlayLayout} layout manager
+ * before adding the component. The layout manager is only installed if
+ * no other layout manager has been installed before.
+ *
+ * @param comp the component to be added
+ * @param constraints constraints for the layout manager
+ * @param index the index at which the component is added
+ *
+ * @since 1.5
+ */
+ protected void addImpl(Component comp, Object constraints, int index)
+ {
+ // We use a client property here, so that no extra memory is used in
+ // the common case with no layout manager.
+ if (getClientProperty("AbstractButton.customLayoutSet") == null)
+ setLayout(new OverlayLayout(this));
+ super.addImpl(comp, constraints, index);
+ }
+
+ /**
+ * Sets a layout manager on this AbstractButton. This is overridden in order
+ * to detect if the application sets a custom layout manager. If no custom
+ * layout manager is set, {@link #addImpl(Component, Object, int)} installs
+ * an OverlayLayout before adding a component.
+ *
+ * @param layout the layout manager to install
+ *
+ * @since 1.5
+ */
+ public void setLayout(LayoutManager layout)
+ {
+ // We use a client property here, so that no extra memory is used in
+ // the common case with no layout manager.
+ putClientProperty("AbstractButton.customLayoutSet", Boolean.TRUE);
+ super.setLayout(layout);
+ }
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("borderPainted"))
+ {
+ if (! clientBorderPaintedSet)
+ {
+ setBorderPainted(((Boolean) value).booleanValue());
+ clientBorderPaintedSet = false;
+ }
+ }
+ else if (propertyName.equals("rolloverEnabled"))
+ {
+ if (! clientRolloverEnabledSet)
+ {
+ setRolloverEnabled(((Boolean) value).booleanValue());
+ clientRolloverEnabledSet = false;
+ }
+ }
+ else if (propertyName.equals("iconTextGap"))
+ {
+ if (! clientIconTextGapSet)
+ {
+ setIconTextGap(((Integer) value).intValue());
+ clientIconTextGapSet = false;
+ }
+ }
+ else if (propertyName.equals("contentAreaFilled"))
+ {
+ if (! clientContentAreaFilledSet)
+ {
+ setContentAreaFilled(((Boolean) value).booleanValue());
+ clientContentAreaFilledSet = false;
+ }
+ }
+ else
+ {
+ super.setUIProperty(propertyName, value);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/ActionMap.java b/libjava/classpath/javax/swing/ActionMap.java
index 65e193d..0d6706c 100644
--- a/libjava/classpath/javax/swing/ActionMap.java
+++ b/libjava/classpath/javax/swing/ActionMap.java
@@ -1,5 +1,5 @@
/* ActionMap.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,9 +37,6 @@ exception statement from your version. */
package javax.swing;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
@@ -195,30 +192,4 @@ public class ActionMap
return null;
}
- /**
- * writeObject
- *
- * @param stream the stream to write to
- *
- * @exception IOException If an error occurs
- */
- private void writeObject(ObjectOutputStream stream)
- throws IOException
- {
- // TODO
- }
-
- /**
- * readObject
- *
- * @param stream the stream to read from
- *
- * @exception ClassNotFoundException If the serialized class cannot be found
- * @exception IOException If an error occurs
- */
- private void readObject(ObjectInputStream stream)
- throws ClassNotFoundException, IOException
- {
- // TODO
- }
}
diff --git a/libjava/classpath/javax/swing/ButtonGroup.java b/libjava/classpath/javax/swing/ButtonGroup.java
index 94f0109..2f8d198 100644
--- a/libjava/classpath/javax/swing/ButtonGroup.java
+++ b/libjava/classpath/javax/swing/ButtonGroup.java
@@ -91,8 +91,12 @@ public class ButtonGroup implements Serializable
{
b.getModel().setGroup(this);
if (b.isSelected())
- sel = b.getModel();
- buttons.addElement(b);
+ {
+ if (sel == null)
+ sel = b.getModel();
+ else
+ b.setSelected(false);
+ } buttons.addElement(b);
}
/**
diff --git a/libjava/classpath/javax/swing/CompatibilityFocusTraversalPolicy.java b/libjava/classpath/javax/swing/CompatibilityFocusTraversalPolicy.java
new file mode 100644
index 0000000..40c2010
--- /dev/null
+++ b/libjava/classpath/javax/swing/CompatibilityFocusTraversalPolicy.java
@@ -0,0 +1,164 @@
+/* CompatibilityFocusTraversalPolicy.java -- Provides compatibility to old
+ focus API
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.swing;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FocusTraversalPolicy;
+import java.util.HashMap;
+
+/**
+ * Provides compatibility to the older focus API in
+ * {@link JComponent#setNextFocusableComponent(Component)}.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+class CompatibilityFocusTraversalPolicy
+ extends FocusTraversalPolicy
+{
+
+ /**
+ * The focus traversal policy that has been installed on the focus cycle
+ * root before, and to which we fall back.
+ */
+ private FocusTraversalPolicy fallback;
+
+ /**
+ * Maps components to their next focused components.
+ */
+ private HashMap forward;
+
+ /**
+ * Maps components to their previous focused components.
+ */
+ private HashMap backward;
+
+ /**
+ * Creates a new CompatibilityFocusTraversalPolicy with the specified
+ * policy as fallback.
+ *
+ * @param p the fallback policy
+ */
+ CompatibilityFocusTraversalPolicy(FocusTraversalPolicy p)
+ {
+ fallback = p;
+ forward = new HashMap();
+ backward = new HashMap();
+ }
+
+ public Component getComponentAfter(Container root, Component current)
+ {
+ Component next = (Component) forward.get(current);
+ if (next == null && fallback != null)
+ next = fallback.getComponentAfter(root, current);
+ return next;
+ }
+
+ public Component getComponentBefore(Container root, Component current)
+ {
+ Component previous = (Component) backward.get(current);
+ if (previous == null && fallback != null)
+ previous = fallback.getComponentAfter(root, current);
+ return previous;
+ }
+
+ public Component getFirstComponent(Container root)
+ {
+ Component first = null;
+ if (fallback != null)
+ first = fallback.getFirstComponent(root);
+ return first;
+ }
+
+ public Component getLastComponent(Container root)
+ {
+ Component last = null;
+ if (fallback != null)
+ last = fallback.getLastComponent(root);
+ return last;
+ }
+
+ public Component getDefaultComponent(Container root)
+ {
+ Component def = null;
+ if (fallback != null)
+ def = fallback.getDefaultComponent(root);
+ return def;
+ }
+
+ /**
+ * Sets a next focused component for a specified component. This is called
+ * by {@link JComponent#setNextFocusableComponent(Component)}.
+ *
+ * @param current the current component
+ * @param next the next focused component
+ */
+ void setNextFocusableComponent(Component current, Component next)
+ {
+ forward.put(current, next);
+ backward.put(next, current);
+ }
+
+ /**
+ * Sets a next focused component for a specified component. This is called
+ * by {@link JComponent#setNextFocusableComponent(Component)}.
+ *
+ * @param current the current component
+ * @param next the next focused component
+ */
+ void addNextFocusableComponent(Component current, Component next)
+ {
+ forward.put(current, next);
+ backward.put(next, current);
+ }
+
+ /**
+ * Removes a focused component mapping. This is called
+ * by {@link JComponent#setNextFocusableComponent(Component)}.
+ *
+ * @param current the current component
+ * @param next the next focused component
+ */
+ void removeNextFocusableComponent(Component current, Component next)
+ {
+ forward.remove(current);
+ backward.remove(next);
+ }
+}
diff --git a/libjava/classpath/javax/swing/DefaultCellEditor.java b/libjava/classpath/javax/swing/DefaultCellEditor.java
index 7f1c395..9c951d3 100644
--- a/libjava/classpath/javax/swing/DefaultCellEditor.java
+++ b/libjava/classpath/javax/swing/DefaultCellEditor.java
@@ -171,9 +171,7 @@ public class DefaultCellEditor
/**
* Cancel the cell editing session. This method notifies the registered
* cell editor listeners (including the table) that the editing has been
- * canceled.
- *
- * @returns boolean
+ * canceled.
*/
public void cancelCellEditing()
{
diff --git a/libjava/classpath/javax/swing/DefaultComboBoxModel.java b/libjava/classpath/javax/swing/DefaultComboBoxModel.java
index ea261a3..ab80b61 100644
--- a/libjava/classpath/javax/swing/DefaultComboBoxModel.java
+++ b/libjava/classpath/javax/swing/DefaultComboBoxModel.java
@@ -1,5 +1,5 @@
/* DefaultComboBoxModel.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -107,22 +107,24 @@ public class DefaultComboBoxModel extends AbstractListModel
public DefaultComboBoxModel(Vector vector)
{
this.list = vector;
- if (vector.size() > 0)
+ if (getSize() > 0)
selectedItem = vector.get(0);
}
/**
* Adds an element to the model's item list and sends a {@link ListDataEvent}
* to all registered listeners. If the new element is the first item added
- * to the list, it is set as the selected item.
+ * to the list, and the selected item is <code>null</code>, the new element
+ * is set as the selected item.
*
* @param object item to add to the model's item list.
*/
public void addElement(Object object)
{
- list.add(object);
- fireIntervalAdded(this, list.size() - 1, list.size() - 1);
- if (list.size() == 1)
+ list.addElement(object);
+ int index = list.size() - 1;
+ fireIntervalAdded(this, index, index);
+ if (list.size() == 1 && selectedItem == null)
setSelectedItem(object);
}
@@ -141,14 +143,14 @@ public class DefaultComboBoxModel extends AbstractListModel
public void removeElementAt(int index)
{
int selected = getIndexOf(selectedItem);
- list.remove(index);
if (selected == index) // choose a new selected item
{
if (selected > 0)
selectedItem = getElementAt(selected - 1);
else
- selectedItem = getElementAt(selected);
+ selectedItem = getElementAt(selected + 1);
}
+ list.removeElementAt(index);
fireIntervalRemoved(this, index, index);
}
diff --git a/libjava/classpath/javax/swing/DefaultDesktopManager.java b/libjava/classpath/javax/swing/DefaultDesktopManager.java
index 7f62c94..0304461 100644
--- a/libjava/classpath/javax/swing/DefaultDesktopManager.java
+++ b/libjava/classpath/javax/swing/DefaultDesktopManager.java
@@ -124,8 +124,6 @@ public class DefaultDesktopManager implements DesktopManager, Serializable
public void closeFrame(JInternalFrame frame)
{
Container c = frame.getParent();
- frame.doDefaultCloseAction();
-
if (c != null)
{
if (frame.isIcon())
@@ -244,7 +242,9 @@ public class DefaultDesktopManager implements DesktopManager, Serializable
c.add(icon);
icon.setVisible(true);
}
+ Rectangle b = frame.getBounds();
c.remove(frame);
+ c.repaint(b.x, b.y, b.width, b.height);
}
}
@@ -501,7 +501,11 @@ public class DefaultDesktopManager implements DesktopManager, Serializable
JDesktopIcon icon = frame.getDesktopIcon();
Container c = icon.getParent();
if (c != null && icon != null)
- c.remove(icon);
+ {
+ Rectangle b = icon.getBounds();
+ c.remove(icon);
+ c.repaint(b.x, b.y, b.width, b.height);
+ }
}
/**
diff --git a/libjava/classpath/javax/swing/DefaultFocusManager.java b/libjava/classpath/javax/swing/DefaultFocusManager.java
index 08db651..103a7f3 100644
--- a/libjava/classpath/javax/swing/DefaultFocusManager.java
+++ b/libjava/classpath/javax/swing/DefaultFocusManager.java
@@ -1,5 +1,5 @@
/* DefaultFocusManager.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,9 +49,10 @@ import java.util.Stack;
*
* @author Andrew Selkirk
*/
-public class DefaultFocusManager extends FocusManager {
+public class DefaultFocusManager extends FocusManager
+{
- /**
+ /**
* historyStack
*/
private Stack historyStack;
@@ -77,7 +78,7 @@ public class DefaultFocusManager extends FocusManager {
// TODO
} // processKeyEvent()
- /**
+ /**
* focusNextComponent
*
* @param component
@@ -88,7 +89,7 @@ public class DefaultFocusManager extends FocusManager {
// TODO
} // focusNextComponent()
- /**
+ /**
* focusPreviousComponent
*
* @param component
@@ -99,66 +100,66 @@ public class DefaultFocusManager extends FocusManager {
// TODO
} // focusPreviousComponent()
- /**
+ /**
* getFirstComponent
*
* @param container
* TODO
- * @returns Component
+ * @return Component
*/
public Component getFirstComponent(Container container)
{
return null; // TODO
} // getFirstComponent()
- /**
+ /**
* getLastComponent
*
* @param container
* TODO
- * @returns Component
+ * @return Component
*/
public Component getLastComponent(Container container)
{
return null; // TODO
} // getLastComponent()
- /**
+ /**
* getComponentBefore
*
* @param container
* TODO
* @param component
* TODO
- * @returns Component
+ * @return Component
*/
public Component getComponentBefore(Container container, Component component)
{
return null; // TODO
} // getComponentBefore()
- /**
+ /**
* getComponentAfter
*
* @param container
* TODO
* @param component
* TODO
- * @returns Component
+ * @return Component
*/
public Component getComponentAfter(Container container, Component component)
{
return null; // TODO
} // getComponentAfter()
- /**
+ /**
* compareTabOrder
*
* @param component1
* TODO
* @param component2
* TODO
- * @returns boolean
+ * @return boolean
*/
public boolean compareTabOrder(Component component1, Component component2)
{
diff --git a/libjava/classpath/javax/swing/DefaultListSelectionModel.java b/libjava/classpath/javax/swing/DefaultListSelectionModel.java
index 7ec4e61..998aee4 100644
--- a/libjava/classpath/javax/swing/DefaultListSelectionModel.java
+++ b/libjava/classpath/javax/swing/DefaultListSelectionModel.java
@@ -162,11 +162,14 @@ public class DefaultListSelectionModel implements Cloneable,
/**
* Sets the value of the {@link #selectionMode} property.
*
- * @param a The new value of the property
+ * @param mode The new value of the property
*/
- public void setSelectionMode(int a)
+ public void setSelectionMode(int mode)
{
- selectionMode = a;
+ if (mode < ListSelectionModel.SINGLE_SELECTION
+ || mode > ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
+ throw new IllegalArgumentException("Unrecognised mode: " + mode);
+ selectionMode = mode;
}
/**
@@ -286,8 +289,14 @@ public class DefaultListSelectionModel implements Cloneable,
int beg = sel.nextSetBit(0), end = -1;
for(int i=beg; i >= 0; i=sel.nextSetBit(i+1))
end = i;
- if (sel.equals(oldSel) == false)
- fireValueChanged(beg, end, valueIsAdjusting);
+
+ BitSet old = (BitSet) oldSel;
+
+ // The new and previous lead location requires repainting.
+ old.set(oldLeadIndex, !sel.get(oldLeadIndex));
+ old.set(leadSelectionIndex, !sel.get(leadSelectionIndex));
+
+ fireDifference(sel, old);
}
/**
@@ -492,8 +501,7 @@ public class DefaultListSelectionModel implements Cloneable,
leadSelectionIndex = index1;
anchorSelectionIndex = index0;
sel.set(lo, hi+1);
- if (sel.equals(oldSel) == false)
- fireValueChanged(lo, hi, valueIsAdjusting);
+ fireDifference(sel, (BitSet) oldSel);
}
}
@@ -530,8 +538,8 @@ public class DefaultListSelectionModel implements Cloneable,
//TODO: will probably need MouseDragged to test properly and know if this works
setAnchorSelectionIndex(index0);
leadSelectionIndex = index1;
- if (sel.equals(oldSel) == false)
- fireValueChanged(lo, hi, valueIsAdjusting);
+
+ fireDifference(sel, (BitSet) oldSel);
}
/**
@@ -539,20 +547,48 @@ public class DefaultListSelectionModel implements Cloneable,
*/
public void clearSelection()
{
- oldSel = sel.clone();
- int sz = sel.size();
+ // Find the selected interval.
+ int from = sel.nextSetBit(0);
+ if (from < 0)
+ return; // Empty selection - nothing to do.
+ int to = from;
+
+ int i;
+
+ for (i = from; i>=0; i=sel.nextSetBit(i+1))
+ to = i;
+
sel.clear();
- if (sel.equals(oldSel) == false)
- fireValueChanged(0, sz, valueIsAdjusting);
+ fireValueChanged(from, to, valueIsAdjusting);
}
/**
- * Clears the current selection and marks a given interval as
- * "selected". If the current selection mode is
- * <code>SINGLE_SELECTION</code> only the index <code>index2</code> is
- * selected.
- *
- * @param index0 The low end of the new selection
+ * Fire the change event, covering the difference between the two sets.
+ *
+ * @param current the current set
+ * @param x the previous set, the object will be reused.
+ */
+ private void fireDifference(BitSet current, BitSet x)
+ {
+ x.xor(current);
+ int from = x.nextSetBit(0);
+ if (from < 0)
+ return; // No difference.
+ int to = from;
+ int i;
+
+ for (i = from; i >= 0; i = x.nextSetBit(i+1))
+ to = i;
+
+ fireValueChanged(from, to, valueIsAdjusting);
+ }
+
+ /**
+ * Clears the current selection and marks a given interval as "selected". If
+ * the current selection mode is <code>SINGLE_SELECTION</code> only the
+ * index <code>index2</code> is selected.
+ *
+ * @param index0 The low end of the new selection
* @param index1 The high end of the new selection
*/
public void setSelectionInterval(int index0, int index1)
@@ -560,7 +596,7 @@ public class DefaultListSelectionModel implements Cloneable,
if (index0 == -1 || index1 == -1)
return;
- oldSel = sel.clone();
+ BitSet oldSel = (BitSet) sel.clone();
sel.clear();
if (selectionMode == SINGLE_SELECTION)
index0 = index1;
@@ -571,8 +607,8 @@ public class DefaultListSelectionModel implements Cloneable,
// update the anchorSelectionIndex and leadSelectionIndex variables
setAnchorSelectionIndex(index0);
leadSelectionIndex=index1;
- if (sel.equals(oldSel) == false)
- fireValueChanged(lo, hi, valueIsAdjusting);
+
+ fireDifference(sel, oldSel);
}
/**
@@ -744,6 +780,7 @@ public class DefaultListSelectionModel implements Cloneable,
DefaultListSelectionModel model =
(DefaultListSelectionModel) super.clone();
model.sel = (BitSet) sel.clone();
+ model.listenerList = new EventListenerList();
return model;
}
}
diff --git a/libjava/classpath/javax/swing/DefaultSingleSelectionModel.java b/libjava/classpath/javax/swing/DefaultSingleSelectionModel.java
index 8f4d405..1c6f473 100644
--- a/libjava/classpath/javax/swing/DefaultSingleSelectionModel.java
+++ b/libjava/classpath/javax/swing/DefaultSingleSelectionModel.java
@@ -1,5 +1,5 @@
/* DefaultSingleSelectionModel.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -59,7 +59,7 @@ public class DefaultSingleSelectionModel
/**
* changeEvent
*/
- protected transient ChangeEvent changeEvent = new ChangeEvent(this);
+ protected transient ChangeEvent changeEvent;
/**
* listenerList
@@ -67,12 +67,13 @@ public class DefaultSingleSelectionModel
protected EventListenerList listenerList = new EventListenerList();
/**
- * index
+ * The selected index (or -1 for no selection).
*/
private int index = -1;
/**
- * Constructor DefaultSingleSelectionModel
+ * Creates a new <code>DefaultSingleSelectionModel</code> with no current
+ * selection.
*/
public DefaultSingleSelectionModel()
{
@@ -80,8 +81,11 @@ public class DefaultSingleSelectionModel
}
/**
- * getSelectedIndex
- * @return int
+ * Returns the selected index or <code>-1</code> if there is no selection.
+ *
+ * @return The selected index.
+ *
+ * @see #setSelectedIndex(int)
*/
public int getSelectedIndex()
{
@@ -89,27 +93,38 @@ public class DefaultSingleSelectionModel
}
/**
- * setSelectedIndex
- * @param index TODO
+ * Sets the selected index and, if this is different to the previous
+ * selection, sends a {@link ChangeEvent} to all registered listeners.
+ *
+ * @param index the index (use <code>-1</code> to represent no selection).
+ *
+ * @see #getSelectedIndex()
+ * @see #clearSelection
*/
public void setSelectedIndex(int index)
{
- this.index = index;
- fireStateChanged();
+ if (this.index != index)
+ {
+ this.index = index;
+ fireStateChanged();
+ }
}
/**
- * clearSelection
+ * Clears the selection by setting the selected index to <code>-1</code> and
+ * sends a {@link ChangeEvent} to all registered listeners. If the selected
+ * index is already <code>-1</code>, this method does nothing.
*/
public void clearSelection()
{
- index = -1;
- fireStateChanged();
+ setSelectedIndex(-1);
}
/**
- * isSelected
- * @return boolean
+ * Returns <code>true</code> if there is a selection, and <code>false</code>
+ * otherwise.
+ *
+ * @return A boolean.
*/
public boolean isSelected()
{
@@ -117,9 +132,10 @@ public class DefaultSingleSelectionModel
}
/**
- * addChangeListener
+ * Registers a listener to receive {@link ChangeEvent} notifications from
+ * this model whenever the selected index changes.
*
- * @param listener the listener to add
+ * @param listener the listener to add.
*/
public void addChangeListener(ChangeListener listener)
{
@@ -127,9 +143,10 @@ public class DefaultSingleSelectionModel
}
/**
- * removeChangeListener
+ * Deregisters a listener so that it no longer receives {@link ChangeEvent}
+ * notifications from this model.
*
- * @param listener the listener to remove
+ * @param listener the listener to remove.
*/
public void removeChangeListener(ChangeListener listener)
{
@@ -141,8 +158,9 @@ public class DefaultSingleSelectionModel
*/
protected void fireStateChanged()
{
+ if (changeEvent == null)
+ changeEvent = new ChangeEvent(this);
ChangeListener[] listeners = getChangeListeners();
-
for (int i = 0; i < listeners.length; i++)
listeners[i].stateChanged(changeEvent);
}
diff --git a/libjava/classpath/javax/swing/FocusManager.java b/libjava/classpath/javax/swing/FocusManager.java
index a2109ee..21e4482 100644
--- a/libjava/classpath/javax/swing/FocusManager.java
+++ b/libjava/classpath/javax/swing/FocusManager.java
@@ -485,7 +485,7 @@ public abstract class FocusManager
/**
* getCurrentManager
- * @returns FocusManager
+ * @return FocusManager
*/
public static FocusManager getCurrentManager()
{
diff --git a/libjava/classpath/javax/swing/ImageIcon.java b/libjava/classpath/javax/swing/ImageIcon.java
index 9e62658..cedf4be 100644
--- a/libjava/classpath/javax/swing/ImageIcon.java
+++ b/libjava/classpath/javax/swing/ImageIcon.java
@@ -1,5 +1,5 @@
/* ImageIcon.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,6 +39,7 @@ package javax.swing;
import java.awt.Component;
import java.awt.Graphics;
+import java.awt.IllegalComponentStateException;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
@@ -60,7 +61,8 @@ public class ImageIcon
implements Icon, Serializable, Accessible
{
/**
- * Accessibility support for ImageIcon.
+ * Provides the accessibility features for the <code>ImageIcon</code>
+ * class.
*/
protected class AccessibleImageIcon
extends AccessibleContext
@@ -69,7 +71,7 @@ public class ImageIcon
private static final long serialVersionUID = 2113430526551336564L;
/**
- * Creates a new instance of AccessibleImageIcon.
+ * Creates a new instance of <code>AccessibleImageIcon</code>.
*/
protected AccessibleImageIcon()
{
@@ -77,10 +79,9 @@ public class ImageIcon
}
/**
- * Returns the AccessibleRole of ImageIcon, which is
- * {@link AccessibleRole#ICON}.
+ * Returns the accessible role for the <code>ImageIcon</code>.
*
- * @return {@link AccessibleRole#ICON}
+ * @return {@link AccessibleRole#ICON}.
*/
public AccessibleRole getAccessibleRole()
{
@@ -88,45 +89,47 @@ public class ImageIcon
}
/**
- * Returns the accessible state of this ImageIcon.
+ * Returns the accessible state for the <code>ImageIcon</code>. To
+ * match the reference implementation, this method always returns
+ * <code>null</code>.
*
- * @return the accessible state of this ImageIcon
+ * @return <code>null</code>.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- // TODO: which state information from ImageIcon is returned here??
- return new AccessibleStateSet();
+ // refer to Sun's bug report 4269253
+ return null;
}
/**
- * Returns the accessible parent of this object, which is <code>null</code>
- * in this case, because ImageIcons have no parent.
+ * Returns the accessible parent of this object. To match the reference
+ * implementation, this method always returns <code>null</code>.
*
- * @return <code>null</code>, because ImageIcons have no parent
+ * @return <code>null</code>.
*/
public Accessible getAccessibleParent()
{
- // TODO: ImageIcons have no parent, have they ??
+ // refer to Sun's bug report 4269253
return null;
}
/**
- * Returns the index of this object in its accessible parent, which is
- * -1 here, because ImageIcons have no accessible parent.
+ * Returns the index of this object in its accessible parent. To match
+ * the reference implementation, this method always returns <code>-1</code>.
*
- * @return -1 because ImageIcons have no parent
+ * @return <code>-1</code>.
*/
public int getAccessibleIndexInParent()
{
- // TODO: do ImageIcons have parents??
+ // refer to Sun's bug report 4269253
return -1;
}
/**
* Returns the number of accessible children of this component,
- * which is 0, because ImageIcons have no children.
+ * which is 0, because an {@link ImageIcon} has no children.
*
- * @return 0 because ImageIcons have no children
+ * @return <code>0</code>.
*/
public int getAccessibleChildrenCount()
{
@@ -135,11 +138,12 @@ public class ImageIcon
/**
* Returns the accessible child at index <code>i</code>, which is
- * <code>null</code> in this case because ImageIcons have no children.
+ * <code>null</code> in this case because an {@link ImageIcon} has no
+ * children.
*
* @param i the index of the child to be fetched
*
- * @return <code>null</code> because ImageIcons have no children
+ * @return <code>null</code>.
*/
public Accessible getAccessibleChild(int i)
{
@@ -147,21 +151,25 @@ public class ImageIcon
}
/**
- * Returns the locale of this object. This returns the default locale
- * that is set for the current VM.
+ * Returns the locale of this object. To match the reference
+ * implementation, this method always returns <code>null</code>.
*
- * @return the locale of this object
+ * @return <code>null</code>.
*/
- public Locale getLocale()
+ public Locale getLocale()
+ throws IllegalComponentStateException
{
- return Locale.getDefault();
+ // refer to Sun's bug report 4269253
+ return null;
}
/**
- * Returns the accessible Icon description. This returns the
- * actual 'description' property of the ImageIcon.
+ * Returns the accessible icon description. This returns the
+ * <code>description</code> property of the underlying {@link ImageIcon}.
*
- * @return the accessible Icon description
+ * @return The description (possibly <code>null</code>).
+ *
+ * @see #setAccessibleIconDescription(String)
*/
public String getAccessibleIconDescription()
{
@@ -169,10 +177,12 @@ public class ImageIcon
}
/**
- * Sets the accessible Icon description. This sets the
- * actual 'description' property of the ImageIcon.
+ * Sets the accessible icon description. This sets the
+ * <code>description</code> property of the underlying {@link ImageIcon}.
*
- * @param newDescr the description to be set
+ * @param newDescr the description (<code>null</code> permitted).
+ *
+ * @see #getAccessibleIconDescription()
*/
public void setAccessibleIconDescription(String newDescr)
{
@@ -180,10 +190,10 @@ public class ImageIcon
}
/**
- * Returns the icon height. This returns the iconHeight property of
- * the underlying Icon.
+ * Returns the icon height. This returns the <code>iconHeight</code>
+ * property of the underlying {@link ImageIcon}.
*
- * @return the icon height
+ * @return The icon height.
*/
public int getAccessibleIconHeight()
{
@@ -191,10 +201,10 @@ public class ImageIcon
}
/**
- * Returns the icon width. This returns the iconWidth property of
- * the underlying Icon.
+ * Returns the icon width. This returns the <code>iconWidth</code> property
+ * of the underlying {@link ImageIcon}.
*
- * @return the icon width
+ * @return The icon width.
*/
public int getAccessibleIconWidth()
{
@@ -278,12 +288,12 @@ public class ImageIcon
}
/**
- * Creates an ImageIcon from the given URL without any description
- * set.
+ * Creates an ImageIcon from the given URL and sets the description
+ * to the URL String representation.
*/
public ImageIcon(URL url)
{
- this(url, null);
+ this(url, url.toString());
}
/**
@@ -427,6 +437,7 @@ public class ImageIcon
finally
{
loadStatus = tracker.statusID(id - 1, false);
+ tracker.removeImage(image, id - 1);
}
}
@@ -445,9 +456,11 @@ public class ImageIcon
}
/**
- * Returns the AccessibleContext for this ImageIcon.
+ * Returns the object that provides accessibility features for this
+ * <code>ImageIcon</code> instance.
*
- * @return the AccessibleContext for this ImageIcon
+ * @return The accessible context (an instance of
+ * {@link AccessibleImageIcon}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/InputMap.java b/libjava/classpath/javax/swing/InputMap.java
index cc65dfe..28fccd9 100644
--- a/libjava/classpath/javax/swing/InputMap.java
+++ b/libjava/classpath/javax/swing/InputMap.java
@@ -190,8 +190,11 @@ public class InputMap
Set set = new HashSet();
if (parent != null)
- set.addAll(Arrays.asList(parent.allKeys()));
-
+ {
+ Object[] parentKeys = parent.allKeys();
+ if (parentKeys != null)
+ set.addAll(Arrays.asList(parentKeys));
+ }
set.addAll(inputMap.keySet());
if (set.size() == 0)
return null;
diff --git a/libjava/classpath/javax/swing/JButton.java b/libjava/classpath/javax/swing/JButton.java
index ff0ecfc..787adb8 100644
--- a/libjava/classpath/javax/swing/JButton.java
+++ b/libjava/classpath/javax/swing/JButton.java
@@ -1,5 +1,5 @@
/* JButton.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -72,49 +72,82 @@ public class JButton extends AbstractButton
}
private static final long serialVersionUID = -1907255238954382202L;
- boolean def;
- boolean is_def;
+ /**
+ * Indicates if this button is capable to become the default button.
+ */
+ private boolean defaultCapable;
+
+ /**
+ * Creates a new button with an empty string for the button text and no
+ * icon.
+ */
public JButton()
{
this(null, null);
}
+ /**
+ * Creates a new button from the specified action.
+ *
+ * @param a the action (<code>null</code> permitted).
+ *
+ * @see AbstractButton#setAction(Action)
+ */
public JButton(Action a)
{
this();
setAction(a);
}
+ /**
+ * Creates a new button with the specified icon (and an empty string for
+ * the button text).
+ *
+ * @param icon the icon (<code>null</code> permitted).
+ */
public JButton(Icon icon)
{
this(null, icon);
}
+ /**
+ * Creates a new button with the specified text and no icon.
+ *
+ * @param text the button text (<code>null</code> permitted, will be
+ * substituted by an empty string).
+ */
public JButton(String text)
{
this(text, null);
}
+ /**
+ * Creates a new button with the specified text and icon.
+ *
+ * @param text the button text (<code>null</code> permitted, will be
+ * substituted by an empty string).
+ * @param icon the icon (<code>null</code> permitted).
+ */
public JButton(String text, Icon icon)
{
super();
init(text, icon);
setModel(new DefaultButtonModel());
- }
-
- public Object[] getSelectedObjects()
- {
- return null;
+ defaultCapable = true;
}
protected void configurePropertiesFromAction(Action a)
- {
- // Factory method which sets the AbstractButton's properties according to
- // values from the Action instance.
+ {
super.configurePropertiesFromAction(a);
}
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JButton</code> component.
+ *
+ * @return The accessible context (an instance of {@link AccessibleJButton}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
@@ -122,6 +155,13 @@ public class JButton extends AbstractButton
return accessibleContext;
}
+ /**
+ * Returns the suffix (<code>"ButtonUI"</code> in this case) used to
+ * determine the class name for a UI delegate that can provide the look and
+ * feel for a <code>JButton</code>.
+ *
+ * @return <code>"ButtonUI"</code>.
+ */
public String getUIClassID()
{
// Returns a string that specifies the name of the L&F class that renders
@@ -129,28 +169,65 @@ public class JButton extends AbstractButton
return "ButtonUI";
}
+ /**
+ * Returns <code>true</code> if this button is the default button in
+ * its <code>JRootPane</code>. The default button gets automatically
+ * activated when the user presses <code>ENTER</code> (or whatever
+ * key this is bound to in the current Look and Feel).
+ *
+ * @return <code>true</code> if this button is the default button in
+ * its <code>JRootPane</code>
+ *
+ * @see #isDefaultCapable()
+ * @see #setDefaultCapable(boolean)
+ * @see JRootPane#getDefaultButton()
+ * @see JRootPane#setDefaultButton(JButton)
+ */
public boolean isDefaultButton()
{
- // Returns whether or not this button is the default button on the
- // RootPane.
- return is_def;
+ // The default button is managed by the JRootPane, so the safest way
+ // to determine this property is to ask the root pane of this button,
+ // if it exists.
+ JRootPane rp = SwingUtilities.getRootPane(this);
+ boolean isDefault = false;
+ if (rp != null)
+ isDefault = rp.getDefaultButton() == this;
+ return isDefault;
}
+ /**
+ * Returns <code>true</code> if this button can act as the default button.
+ * This is <code>true</code> by default.
+ *
+ * @return <code>true</code> if this button can act as the default button
+ *
+ * @see #setDefaultCapable(boolean)
+ * @see #isDefaultButton()
+ * @see JRootPane#getDefaultButton()
+ * @see JRootPane#setDefaultButton(JButton)
+ */
public boolean isDefaultCapable()
{
// Returns whether or not this button is capable of being the default
// button on the RootPane.
- return def;
+ return defaultCapable;
}
+ /**
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JButton</code>.
+ *
+ * @return A string describing the attributes of this <code>JButton</code>
+ * (never <code>null</code>).
+ */
protected String paramString()
{
String superParam = super.paramString();
// 41 is the maximum number of chars which may be needed.
StringBuffer sb = new StringBuffer(41);
- sb.append(",defaultButton=").append(is_def);
- sb.append(",defaultCapable=").append(def);
+ sb.append(",defaultButton=").append(isDefaultButton());
+ sb.append(",defaultCapable=").append(defaultCapable);
return superParam + sb.toString();
}
@@ -169,11 +246,27 @@ public class JButton extends AbstractButton
super.removeNotify();
}
+ /**
+ * Sets the <code>defaultCapable</code> property which indicates if
+ * this button may become the default button in its <code>JRootPane</code>.
+ *
+ * @param defaultCapable <code>true</code> if this button can become the
+ * default button in its JRootPane, <code>false</code> otherwise
+ *
+ * @see #setDefaultCapable(boolean)
+ * @see #isDefaultButton()
+ * @see JRootPane#getDefaultButton()
+ * @see JRootPane#setDefaultButton(JButton)
+ */
public void setDefaultCapable(boolean defaultCapable)
{
- def = defaultCapable;
+ this.defaultCapable = defaultCapable;
}
+ /**
+ * Sets this button's UI delegate to the default (obtained from the
+ * {@link UIManager}) for the current look and feel.
+ */
public void updateUI()
{
setUI((ButtonUI) UIManager.getUI(this));
diff --git a/libjava/classpath/javax/swing/JColorChooser.java b/libjava/classpath/javax/swing/JColorChooser.java
index a9650ff..674f0fd8 100644
--- a/libjava/classpath/javax/swing/JColorChooser.java
+++ b/libjava/classpath/javax/swing/JColorChooser.java
@@ -301,10 +301,9 @@ public class JColorChooser extends JComponent implements Accessible
throw new AWTError("No suitable parent found for Component.");
JDialog dialog;
if (parent instanceof Frame)
- dialog = new ModalDialog((Frame) parent, title);
+ dialog = new JDialog((Frame) parent, title, true);
else
- dialog = new ModalDialog((Dialog) parent, title);
- dialog.setModal(modal);
+ dialog = new JDialog((Dialog) parent, title, true);
dialog.getContentPane().setLayout(new BorderLayout());
@@ -362,8 +361,7 @@ public class JColorChooser extends JComponent implements Accessible
public void updateUI()
{
setUI((ColorChooserUI) UIManager.getUI(this));
- revalidate();
- } // updateUI()
+ }
/**
* This method returns a String identifier for the UI Class to be used with
@@ -643,64 +641,4 @@ public class JColorChooser extends JComponent implements Accessible
}
}
- /**
- * This is a custom JDialog that will notify when it is hidden and the modal
- * property is set.
- */
- static class ModalDialog extends JDialog
- {
- /** The modal property. */
- private boolean modal;
-
- /**
- * Creates a new ModalDialog object with the given parent and title.
- *
- * @param parent The parent of the JDialog.
- * @param title The title of the JDialog.
- */
- public ModalDialog(Frame parent, String title)
- {
- super(parent, title);
- }
-
- /**
- * Creates a new ModalDialog object with the given parent and title.
- *
- * @param parent The parent of the JDialog.
- * @param title The title of the JDialog.
- */
- public ModalDialog(Dialog parent, String title)
- {
- super(parent, title);
- }
-
- /**
- * This method sets the modal property.
- *
- * @param modal The modal property.
- */
- public void setModal(boolean modal)
- {
- this.modal = modal;
- }
-
- /**
- * This method shows the ModalDialog.
- */
- public void show()
- {
- super.show();
- if (modal)
- makeModal(this);
- }
-
- /**
- * This method hides the ModalDialog.
- */
- public synchronized void hide()
- {
- super.hide();
- notifyAll();
- }
- }
}
diff --git a/libjava/classpath/javax/swing/JComboBox.java b/libjava/classpath/javax/swing/JComboBox.java
index cd30840..175237a 100644
--- a/libjava/classpath/javax/swing/JComboBox.java
+++ b/libjava/classpath/javax/swing/JComboBox.java
@@ -1,5 +1,5 @@
/* JComboBox.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.ItemSelectable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -55,8 +57,8 @@ import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleSelection;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
-import javax.swing.event.PopupMenuListener;
import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
import javax.swing.plaf.ComboBoxUI;
/**
@@ -252,7 +254,6 @@ public class JComboBox extends JComponent implements ItemSelectable,
public void updateUI()
{
setUI((ComboBoxUI) UIManager.getUI(this));
- invalidate();
}
/**
@@ -927,7 +928,7 @@ public class JComboBox extends JComponent implements ItemSelectable,
*/
public void actionPerformed(ActionEvent e)
{
- setSelectedItem(((ComboBoxEditor) e.getSource()).getItem());
+ setSelectedItem(getEditor().getItem());
setPopupVisible(false);
}
@@ -944,8 +945,19 @@ public class JComboBox extends JComponent implements ItemSelectable,
*/
public boolean selectWithKeyChar(char keyChar)
{
- // FIXME: Need to implement
- return false;
+ if (keySelectionManager == null)
+ {
+ keySelectionManager = createDefaultKeySelectionManager();
+ }
+
+ int index = keySelectionManager.selectionForKey(keyChar, getModel());
+ boolean retVal = false;
+ if (index >= 0)
+ {
+ setSelectedIndex(index);
+ retVal = true;
+ }
+ return retVal;
}
/**
@@ -1090,15 +1102,33 @@ public class JComboBox extends JComponent implements ItemSelectable,
}
/**
- * A string that describes this JComboBox. Normally only used for debugging.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JComboBox</code>.
*
- * @return A string describing this JComboBox
+ * @return A string describing the attributes of this <code>JComboBox</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JComboBox";
+ String superParamStr = super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",isEditable=").append(isEditable());
+ sb.append(",lightWeightPopupEnabled=").append(isLightWeightPopupEnabled());
+ sb.append(",maximumRowCount=").append(getMaximumRowCount());
+
+ sb.append(",selectedItemReminder=");
+ if (selectedItemReminder != null)
+ sb.append(selectedItemReminder);
+ return superParamStr + sb.toString();
}
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JComboBox</code> component.
+ *
+ * @return The accessible context (an instance of
+ * {@link AccessibleJComboBox}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
@@ -1207,82 +1237,105 @@ public class JComboBox extends JComponent implements ItemSelectable,
{
private static final long serialVersionUID = 8217828307256675666L;
- protected AccessibleJComboBox()
+ /**
+ * @specnote This constructor was protected in 1.4, but made public
+ * in 1.5.
+ */
+ public AccessibleJComboBox()
{
// Nothing to do here.
}
public int getAccessibleChildrenCount()
+ throws NotImplementedException
{
return 0;
}
public Accessible getAccessibleChild(int value0)
+ throws NotImplementedException
{
return null;
}
public AccessibleSelection getAccessibleSelection()
+ throws NotImplementedException
{
return null;
}
public Accessible getAccessibleSelection(int value0)
+ throws NotImplementedException
{
return null;
}
public boolean isAccessibleChildSelected(int value0)
+ throws NotImplementedException
{
return false;
}
+ /**
+ * Returns the accessible role for the <code>JComboBox</code> component.
+ *
+ * @return {@link AccessibleRole#COMBO_BOX}.
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.COMBO_BOX;
}
public AccessibleAction getAccessibleAction()
+ throws NotImplementedException
{
return null;
}
public String getAccessibleActionDescription(int value0)
+ throws NotImplementedException
{
return null;
}
public int getAccessibleActionCount()
+ throws NotImplementedException
{
return 0;
}
public boolean doAccessibleAction(int value0)
+ throws NotImplementedException
{
return false;
}
public int getAccessibleSelectionCount()
+ throws NotImplementedException
{
return 0;
}
public void addAccessibleSelection(int value0)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void removeAccessibleSelection(int value0)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void clearAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void selectAllAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
diff --git a/libjava/classpath/javax/swing/JComponent.java b/libjava/classpath/javax/swing/JComponent.java
index ddd7086..d916d05 100644
--- a/libjava/classpath/javax/swing/JComponent.java
+++ b/libjava/classpath/javax/swing/JComponent.java
@@ -67,10 +67,10 @@ import java.awt.event.MouseEvent;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.EventListener;
import java.util.Hashtable;
import java.util.Locale;
@@ -81,6 +81,7 @@ import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleExtendedComponent;
import javax.accessibility.AccessibleKeyBinding;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
@@ -104,7 +105,7 @@ public abstract class JComponent extends Container implements Serializable
private static final long serialVersionUID = -7908749299918704233L;
/**
- * Accessibility support is currently missing.
+ * The accessible context of this <code>JComponent</code>.
*/
protected AccessibleContext accessibleContext;
@@ -117,78 +118,186 @@ public abstract class JComponent extends Container implements Serializable
implements AccessibleExtendedComponent
{
/**
- * Accessibility support for <code>JComponent</code>'s focus handler.
+ * Receives notification if the focus on the JComponent changes and
+ * fires appropriate PropertyChangeEvents to listeners registered with
+ * the AccessibleJComponent.
*/
protected class AccessibleFocusHandler
implements FocusListener
{
+ /**
+ * Creates a new AccessibleFocusHandler.
+ */
protected AccessibleFocusHandler()
{
- // TODO: Implement this properly.
+ // Nothing to do here.
}
+
+ /**
+ * Receives notification when the JComponent gained focus and fires
+ * a PropertyChangeEvent to listeners registered on the
+ * AccessibleJComponent with a property name of
+ * {@link AccessibleContext#ACCESSIBLE_STATE_PROPERTY} and a new value
+ * of {@link AccessibleState#FOCUSED}.
+ */
public void focusGained(FocusEvent event)
{
- // TODO: Implement this properly.
+ AccessibleJComponent.this.firePropertyChange
+ (AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null,
+ AccessibleState.FOCUSED);
}
+
+ /**
+ * Receives notification when the JComponent lost focus and fires
+ * a PropertyChangeEvent to listeners registered on the
+ * AccessibleJComponent with a property name of
+ * {@link AccessibleContext#ACCESSIBLE_STATE_PROPERTY} and an old value
+ * of {@link AccessibleState#FOCUSED}.
+ */
public void focusLost(FocusEvent valevent)
{
- // TODO: Implement this properly.
+ AccessibleJComponent.this.firePropertyChange
+ (AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+ AccessibleState.FOCUSED, null);
}
}
/**
- * Accessibility support for <code>JComponent</code>'s container handler.
+ * Receives notification if there are child components are added or removed
+ * from the JComponent and fires appropriate PropertyChangeEvents to
+ * interested listeners on the AccessibleJComponent.
*/
protected class AccessibleContainerHandler
implements ContainerListener
{
+ /**
+ * Creates a new AccessibleContainerHandler.
+ */
protected AccessibleContainerHandler()
{
- // TODO: Implement this properly.
+ // Nothing to do here.
}
+
+ /**
+ * Receives notification when a child component is added to the
+ * JComponent and fires a PropertyChangeEvent on listeners registered
+ * with the AccessibleJComponent with a property name of
+ * {@link AccessibleContext#ACCESSIBLE_CHILD_PROPERTY}.
+ *
+ * @param event the container event
+ */
public void componentAdded(ContainerEvent event)
{
- // TODO: Implement this properly.
+ Component c = event.getChild();
+ if (c != null && c instanceof Accessible)
+ {
+ AccessibleContext childCtx = c.getAccessibleContext();
+ AccessibleJComponent.this.firePropertyChange
+ (AccessibleContext.ACCESSIBLE_CHILD_PROPERTY, null, childCtx);
+ }
}
- public void componentRemoved(ContainerEvent valevent)
+
+ /**
+ * Receives notification when a child component is removed from the
+ * JComponent and fires a PropertyChangeEvent on listeners registered
+ * with the AccessibleJComponent with a property name of
+ * {@link AccessibleContext#ACCESSIBLE_CHILD_PROPERTY}.
+ *
+ * @param event the container event
+ */
+ public void componentRemoved(ContainerEvent event)
{
- // TODO: Implement this properly.
+ Component c = event.getChild();
+ if (c != null && c instanceof Accessible)
+ {
+ AccessibleContext childCtx = c.getAccessibleContext();
+ AccessibleJComponent.this.firePropertyChange
+ (AccessibleContext.ACCESSIBLE_CHILD_PROPERTY, childCtx, null);
+ }
}
}
private static final long serialVersionUID = -7047089700479897799L;
-
+
+ /**
+ * Receives notification when a child component is added to the
+ * JComponent and fires a PropertyChangeEvent on listeners registered
+ * with the AccessibleJComponent.
+ *
+ * @specnote AccessibleAWTContainer has a protected field with the same
+ * name. Looks like a bug or nasty misdesign to me.
+ */
protected ContainerListener accessibleContainerHandler;
- protected FocusListener accessibleFocusHandler;
/**
- * Manages the property change listeners;
+ * Receives notification if the focus on the JComponent changes and
+ * fires appropriate PropertyChangeEvents to listeners registered with
+ * the AccessibleJComponent.
+ *
+ * @specnote AccessibleAWTComponent has a protected field
+ * accessibleAWTFocusHandler. Looks like a bug or nasty misdesign
+ * to me.
*/
- private PropertyChangeSupport changeSupport;
+ protected FocusListener accessibleFocusHandler;
+ /**
+ * Creates a new AccessibleJComponent.
+ */
protected AccessibleJComponent()
{
- changeSupport = new PropertyChangeSupport(this);
+ // Nothing to do here.
}
/**
* Adds a property change listener to the list of registered listeners.
*
+ * This sets up the {@link #accessibleContainerHandler} and
+ * {@link #accessibleFocusHandler} fields and calls
+ * <code>super.addPropertyChangeListener(listener)</code>.
+ *
* @param listener the listener to add
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
- changeSupport.addPropertyChangeListener(listener);
+ // Tests seem to indicate that this method also sets up the other two
+ // handlers.
+ if (accessibleContainerHandler == null)
+ {
+ accessibleContainerHandler = new AccessibleContainerHandler();
+ addContainerListener(accessibleContainerHandler);
+ }
+ if (accessibleFocusHandler == null)
+ {
+ accessibleFocusHandler = new AccessibleFocusHandler();
+ addFocusListener(accessibleFocusHandler);
+ }
+ super.addPropertyChangeListener(listener);
}
/**
- * Removes a propery change listener from the list of registered listeners.
+ * Removes a property change listener from the list of registered listeners.
+ *
+ * This uninstalls the {@link #accessibleContainerHandler} and
+ * {@link #accessibleFocusHandler} fields and calls
+ * <code>super.removePropertyChangeListener(listener)</code>.
*
* @param listener the listener to remove
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
- changeSupport.removePropertyChangeListener(listener);
+ // Tests seem to indicate that this method also resets the other two
+ // handlers.
+ if (accessibleContainerHandler != null)
+ {
+ removeContainerListener(accessibleContainerHandler);
+ accessibleContainerHandler = null;
+ }
+ if (accessibleFocusHandler != null)
+ {
+ removeFocusListener(accessibleFocusHandler);
+ accessibleFocusHandler = null;
+ }
+ super.removePropertyChangeListener(listener);
}
/**
@@ -198,14 +307,11 @@ public abstract class JComponent extends Container implements Serializable
*/
public int getAccessibleChildrenCount()
{
- int count = 0;
- Component[] children = getComponents();
- for (int i = 0; i < children.length; ++i)
- {
- if (children[i] instanceof Accessible)
- count++;
- }
- return count;
+ // TODO: The functionality should be performed in the superclass.
+ // Find out why this is overridden. However, it is very well possible
+ // that this is left over from times when there was no such superclass
+ // method.
+ return super.getAccessibleChildrenCount();
}
/**
@@ -217,18 +323,11 @@ public abstract class JComponent extends Container implements Serializable
*/
public Accessible getAccessibleChild(int i)
{
- int index = 0;
- Component[] children = getComponents();
- Accessible found = null;
- for (int j = 0; index != i; j++)
- {
- if (children[j] instanceof Accessible)
- index++;
- if (index == i)
- found = (Accessible) children[index];
- }
- // TODO: Figure out what to do when i is not a valid index.
- return found;
+ // TODO: The functionality should be performed in the superclass.
+ // Find out why this is overridden. However, it is very well possible
+ // that this is left over from times when there was no such superclass
+ // method.
+ return super.getAccessibleChild(i);
}
/**
@@ -238,9 +337,14 @@ public abstract class JComponent extends Container implements Serializable
*/
public AccessibleStateSet getAccessibleStateSet()
{
- // FIXME: Figure out which states should be set here, and which are
- // inherited from the super class.
- return super.getAccessibleStateSet();
+ // Note: While the java.awt.Component has an 'opaque' property, it
+ // seems that it is not added to the accessible state set there, even
+ // if this property is true. However, it is handled for JComponent, so
+ // we add it here.
+ AccessibleStateSet state = super.getAccessibleStateSet();
+ if (isOpaque())
+ state.add(AccessibleState.OPAQUE);
+ return state;
}
/**
@@ -256,9 +360,33 @@ public abstract class JComponent extends Container implements Serializable
*/
public String getAccessibleName()
{
- // TODO: Figure out what exactly to return here. It's possible that this
- // method simply should return null.
- return null;
+ String name = super.getAccessibleName();
+
+ // There are two fallbacks provided by the JComponent in the case the
+ // superclass returns null:
+ // - If the component is inside a titled border, then it inherits the
+ // name from the border title.
+ // - If the component is not inside a titled border but has a label
+ // (via JLabel.setLabelFor()), then it gets the name from the label's
+ // accessible context.
+
+ if (name == null)
+ {
+ name = getTitledBorderText();
+ }
+
+ if (name == null)
+ {
+ Object l = getClientProperty(JLabel.LABEL_PROPERTY);
+ if (l instanceof Accessible)
+ {
+ AccessibleContext labelCtx =
+ ((Accessible) l).getAccessibleContext();
+ name = labelCtx.getAccessibleName();
+ }
+ }
+
+ return name;
}
/**
@@ -269,9 +397,32 @@ public abstract class JComponent extends Container implements Serializable
*/
public String getAccessibleDescription()
{
- // TODO: Figure out what exactly to return here. It's possible that this
- // method simply should return null.
- return null;
+ // There are two fallbacks provided by the JComponent in the case the
+ // superclass returns null:
+ // - If the component has a tooltip, then inherit the description from
+ // the tooltip.
+ // - If the component is not inside a titled border but has a label
+ // (via JLabel.setLabelFor()), then it gets the name from the label's
+ // accessible context.
+ String descr = super.getAccessibleDescription();
+
+ if (descr == null)
+ {
+ descr = getToolTipText();
+ }
+
+ if (descr == null)
+ {
+ Object l = getClientProperty(JLabel.LABEL_PROPERTY);
+ if (l instanceof Accessible)
+ {
+ AccessibleContext labelCtx =
+ ((Accessible) l).getAccessibleContext();
+ descr = labelCtx.getAccessibleName();
+ }
+ }
+
+ return descr;
}
/**
@@ -283,7 +434,6 @@ public abstract class JComponent extends Container implements Serializable
*/
public AccessibleRole getAccessibleRole()
{
- // TODO: Check if this is correct.
return AccessibleRole.SWING_COMPONENT;
}
@@ -349,7 +499,8 @@ public abstract class JComponent extends Container implements Serializable
*/
public AccessibleKeyBinding getAccessibleKeyBinding()
{
- // TODO: Implement this properly.
+ // The reference implementation seems to always return null here,
+ // independent of the key bindings of the JComponent. So do we.
return null;
}
}
@@ -550,6 +701,16 @@ public abstract class JComponent extends Container implements Serializable
private boolean paintingTile;
/**
+ * A temporary buffer used for fast dragging of components.
+ */
+ private Image dragBuffer;
+
+ /**
+ * Indicates if the dragBuffer is already initialized.
+ */
+ private boolean dragBufferInitialized;
+
+ /**
* A cached Rectangle object to be reused. Be careful when you use that,
* so that it doesn't get modified in another context within the same
* method call chain.
@@ -606,6 +767,24 @@ public abstract class JComponent extends Container implements Serializable
boolean isCompletelyDirty = false;
/**
+ * Indicates if the opaque property has been set by a client program or by
+ * the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientOpaqueSet = false;
+
+ /**
+ * Indicates if the autoscrolls property has been set by a client program or
+ * by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientAutoscrollsSet = false;
+
+ /**
* Creates a new <code>JComponent</code> instance.
*/
public JComponent()
@@ -1218,7 +1397,12 @@ public abstract class JComponent extends Container implements Serializable
*/
public Component getNextFocusableComponent()
{
- return null;
+ Container focusRoot = this;
+ if (! this.isFocusCycleRoot())
+ focusRoot = getFocusCycleRootAncestor();
+
+ FocusTraversalPolicy policy = focusRoot.getFocusTraversalPolicy();
+ return policy.getComponentAfter(focusRoot, this);
}
/**
@@ -1412,7 +1596,7 @@ public abstract class JComponent extends Container implements Serializable
*/
public void grabFocus()
{
- // TODO: Implement this properly.
+ requestFocus();
}
/**
@@ -1556,20 +1740,58 @@ public abstract class JComponent extends Container implements Serializable
}
else
{
+ if (getClientProperty("bufferedDragging") != null
+ && dragBuffer == null)
+ {
+ initializeDragBuffer();
+ }
+ else if (getClientProperty("bufferedDragging") == null
+ && dragBuffer != null)
+ {
+ dragBuffer = null;
+ }
+
if (g.getClip() == null)
g.setClip(0, 0, getWidth(), getHeight());
- Graphics g2 = getComponentGraphics(g);
- paintComponent(g2);
- paintBorder(g2);
- paintChildren(g2);
- Rectangle clip = g2.getClipBounds();
- if (clip.x == 0 && clip.y == 0 && clip.width == getWidth()
- && clip.height == getHeight())
- RepaintManager.currentManager(this).markCompletelyClean(this);
+ if (dragBuffer != null && dragBufferInitialized)
+ {
+ g.drawImage(dragBuffer, 0, 0, this);
+ }
+ else
+ {
+ Graphics g2 = getComponentGraphics(g);
+ paintComponent(g2);
+ paintBorder(g2);
+ paintChildren(g2);
+ Rectangle clip = g2.getClipBounds();
+ if (clip == null
+ || (clip.x == 0 && clip.y == 0 && clip.width == getWidth()
+ && clip.height == getHeight()))
+ RepaintManager.currentManager(this).markCompletelyClean(this);
+ }
}
}
/**
+ * Initializes the drag buffer by creating a new image and painting this
+ * component into it.
+ */
+ private void initializeDragBuffer()
+ {
+ dragBufferInitialized = false;
+ // Allocate new dragBuffer if the current one is too small.
+ if (dragBuffer == null || dragBuffer.getWidth(this) < getWidth()
+ || dragBuffer.getHeight(this) < getHeight())
+ {
+ dragBuffer = createImage(getWidth(), getHeight());
+ }
+ Graphics g = dragBuffer.getGraphics();
+ paint(g);
+ g.dispose();
+ dragBufferInitialized = true;
+ }
+
+ /**
* Paint the component's border. This usually means calling {@link
* Border#paintBorder} on the {@link #border} property, if it is
* non-<code>null</code>. You may override this if you wish to customize
@@ -1604,41 +1826,219 @@ public abstract class JComponent extends Container implements Serializable
*/
protected void paintChildren(Graphics g)
{
+ if (getComponentCount() > 0)
+ {
+ if (isOptimizedDrawingEnabled())
+ paintChildrenOptimized(g);
+ else
+ paintChildrenWithOverlap(g);
+ }
+ }
+
+ /**
+ * Paints the children of this JComponent in the case when the component
+ * is not marked as optimizedDrawingEnabled, that means the container cannot
+ * guarantee that it's children are tiled. For this case we must
+ * perform a more complex optimization to determine the minimal rectangle
+ * to be painted for each child component.
+ *
+ * @param g the graphics context to use
+ */
+ private void paintChildrenWithOverlap(Graphics g)
+ {
Shape originalClip = g.getClip();
Rectangle inner = SwingUtilities.calculateInnerArea(this, rectCache);
g.clipRect(inner.x, inner.y, inner.width, inner.height);
Component[] children = getComponents();
- // Find the bottommost component that needs to be painted. This is a
- // component that completely covers the current clip and is opaque. In
- // this case we don't need to paint the components below it.
- int startIndex = children.length - 1;
- // No need to check for overlapping components when this component is
- // optimizedDrawingEnabled (== it tiles its children).
- if (! isOptimizedDrawingEnabled())
+ // Find the rectangles that need to be painted for each child component.
+ // We push on this list arrays that have the Rectangles to be painted as
+ // the first elements and the component to be painted as the last one.
+ // Later we go through that list in reverse order and paint the rectangles.
+ ArrayList paintRegions = new ArrayList(children.length);
+ ArrayList paintRectangles = new ArrayList();
+ ArrayList newPaintRects = new ArrayList();
+ paintRectangles.add(g.getClipBounds());
+ ArrayList componentRectangles = new ArrayList();
+
+ // Go through children from top to bottom and find out their paint
+ // rectangles.
+ for (int index = 0; paintRectangles.size() > 0 &&
+ index < children.length; index++)
{
- for (int i = 0; i < children.length; i++)
+ Component comp = children[index];
+ if (! comp.isVisible())
+ continue;
+
+ Rectangle compBounds = comp.getBounds();
+ boolean isOpaque = comp instanceof JComponent
+ && ((JComponent) comp).isOpaque();
+
+ // Add all the current paint rectangles that intersect with the
+ // component to the component's paint rectangle array.
+ for (int i = paintRectangles.size() - 1; i >= 0; i--)
{
- Rectangle childBounds = children[i].getBounds();
- if (children[i].isOpaque() && children[i].isVisible()
- && SwingUtilities.isRectangleContainingRectangle(childBounds,
- g.getClipBounds()))
+ Rectangle r = (Rectangle) paintRectangles.get(i);
+ if (r.intersects(compBounds))
{
- startIndex = i;
- break;
+ Rectangle compRect = r.intersection(compBounds);
+ componentRectangles.add(compRect);
+ // If the component is opaque, split up each paint rect and
+ // add paintRect - compBounds to the newPaintRects array.
+ if (isOpaque)
+ {
+ int x, y, w, h;
+ Rectangle rect = new Rectangle();
+
+ // The north retangle.
+ x = Math.max(compBounds.x, r.x);
+ y = r.y;
+ w = Math.min(compBounds.width, r.width + r.x - x);
+ h = compBounds.y - r.y;
+ rect.setBounds(x, y, w, h);
+ if (! rect.isEmpty())
+ {
+ newPaintRects.add(rect);
+ rect = new Rectangle();
+ }
+
+ // The south rectangle.
+ x = Math.max(compBounds.x, r.x);
+ y = compBounds.y + compBounds.height;
+ w = Math.min(compBounds.width, r.width + r.x - x);
+ h = r.height - (compBounds.y - r.y) - compBounds.height;
+ rect.setBounds(x, y, w, h);
+ if (! rect.isEmpty())
+ {
+ newPaintRects.add(rect);
+ rect = new Rectangle();
+ }
+
+ // The west rectangle.
+ x = r.x;
+ y = r.y;
+ w = compBounds.x - r.x;
+ h = r.height;
+ rect.setBounds(x, y, w, h);
+ if (! rect.isEmpty())
+ {
+ newPaintRects.add(rect);
+ rect = new Rectangle();
+ }
+
+ // The east rectangle.
+ x = compBounds.x + compBounds.width;
+ y = r.y;
+ w = r.width - (compBounds.x - r.x) - compBounds.width;
+ h = r.height;
+ rect.setBounds(x, y, w, h);
+ if (! rect.isEmpty())
+ {
+ newPaintRects.add(rect);
+ }
+ }
+ else
+ {
+ // Not opaque, need to reuse the current paint rectangles
+ // for the next component.
+ newPaintRects.add(r);
+ }
+
}
+ else
+ {
+ newPaintRects.add(r);
+ }
+ }
+
+ // Replace the paintRectangles with the new split up
+ // paintRectangles.
+ paintRectangles.clear();
+ paintRectangles.addAll(newPaintRects);
+ newPaintRects.clear();
+
+ // Store paint rectangles if there are any for the current component.
+ int compRectsSize = componentRectangles.size();
+ if (compRectsSize > 0)
+ {
+ componentRectangles.add(comp);
+ paintRegions.add(componentRectangles);
+ componentRectangles = new ArrayList();
}
}
+
// paintingTile becomes true just before we start painting the component's
// children.
paintingTile = true;
- for (int i = startIndex; i >= 0; --i)
+
+ // We must go through the painting regions backwards, because the
+ // topmost components have been added first, followed by the components
+ // below.
+ int prEndIndex = paintRegions.size() - 1;
+ for (int i = prEndIndex; i >= 0; i--)
{
// paintingTile must be set to false before we begin to start painting
// the last tile.
if (i == 0)
paintingTile = false;
+ ArrayList paintingRects = (ArrayList) paintRegions.get(i);
+ // The last element is always the component.
+ Component c = (Component) paintingRects.get(paintingRects.size() - 1);
+ int endIndex = paintingRects.size() - 2;
+ for (int j = 0; j <= endIndex; j++)
+ {
+ Rectangle cBounds = c.getBounds();
+ Rectangle bounds = (Rectangle) paintingRects.get(j);
+ Rectangle oldClip = g.getClipBounds();
+ if (oldClip == null)
+ oldClip = bounds;
+
+ boolean translated = false;
+ try
+ {
+ g.setClip(bounds);
+ g.translate(cBounds.x, cBounds.y);
+ translated = true;
+ c.paint(g);
+ }
+ finally
+ {
+ if (translated)
+ g.translate(-cBounds.x, -cBounds.y);
+ g.setClip(oldClip);
+ }
+ }
+ }
+ g.setClip(originalClip);
+ }
+
+ /**
+ * Paints the children of this container when it is marked as
+ * optimizedDrawingEnabled. In this case the container can guarantee that
+ * it's children are tiled, which allows for a much more efficient
+ * algorithm to determine the minimum rectangles to be painted for
+ * each child.
+ *
+ * @param g the graphics context to use
+ */
+ private void paintChildrenOptimized(Graphics g)
+ {
+ Shape originalClip = g.getClip();
+ Rectangle inner = SwingUtilities.calculateInnerArea(this, rectCache);
+ g.clipRect(inner.x, inner.y, inner.width, inner.height);
+ Component[] children = getComponents();
+
+ // paintingTile becomes true just before we start painting the component's
+ // children.
+ paintingTile = true;
+ for (int i = children.length - 1; i >= 0; i--) //children.length; i++)
+ {
+ // paintingTile must be set to false before we begin to start painting
+ // the last tile.
+ if (i == children.length - 1)
+ paintingTile = false;
+
if (!children[i].isVisible())
continue;
@@ -1760,6 +2160,33 @@ public abstract class JComponent extends Container implements Serializable
}
/**
+ * Gets the root of the component given. If a parent of the
+ * component is an instance of Applet, then the applet is
+ * returned. The applet is considered the root for painting
+ * and adding/removing components. Otherwise, the root Window
+ * is returned if it exists.
+ *
+ * @param comp - The component to get the root for.
+ * @return the parent root. An applet if it is a parent,
+ * or the root window. If neither exist, null is returned.
+ */
+ private Component getRoot(Component comp)
+ {
+ Applet app = null;
+
+ while (comp != null)
+ {
+ if (app == null && comp instanceof Window)
+ return comp;
+ else if (comp instanceof Applet)
+ app = (Applet) comp;
+ comp = comp.getParent();
+ }
+
+ return app;
+ }
+
+ /**
* Performs double buffered repainting.
*/
private void paintDoubleBuffered(Rectangle r)
@@ -1767,7 +2194,7 @@ public abstract class JComponent extends Container implements Serializable
RepaintManager rm = RepaintManager.currentManager(this);
// Paint on the offscreen buffer.
- Component root = SwingUtilities.getRoot(this);
+ Component root = getRoot(this);
Image buffer = rm.getOffscreenBuffer(this, root.getWidth(),
root.getHeight());
//Rectangle targetClip = SwingUtilities.convertRectangle(this, r, root);
@@ -1993,15 +2420,15 @@ public abstract class JComponent extends Container implements Serializable
* Return the condition that determines whether a registered action
* occurs in response to the specified keystroke.
*
+ * As of 1.3 KeyStrokes can be registered with multiple simultaneous
+ * conditions.
+ *
* @param ks The keystroke to return the condition of
*
* @return One of the values {@link #UNDEFINED_CONDITION}, {@link
* #WHEN_ANCESTOR_OF_FOCUSED_COMPONENT}, {@link #WHEN_FOCUSED}, or {@link
* #WHEN_IN_FOCUSED_WINDOW}
*
- * @deprecated As of 1.3 KeyStrokes can be registered with multiple
- * simultaneous conditions.
- *
* @see #registerKeyboardAction(ActionListener, KeyStroke, int)
* @see #unregisterKeyboardAction
* @see #resetKeyboardActions
@@ -2028,8 +2455,6 @@ public abstract class JComponent extends Container implements Serializable
* @param ks The keystroke to retrieve the action of
*
* @return The action associated with the specified keystroke
- *
- * @deprecated Use {@link #getActionMap()}
*/
public ActionListener getActionForKeyStroke(KeyStroke ks)
{
@@ -2167,7 +2592,20 @@ public abstract class JComponent extends Container implements Serializable
*/
public void unregisterKeyboardAction(KeyStroke aKeyStroke)
{
- // FIXME: Must be implemented.
+ ActionMap am = getActionMap();
+ // This loops through the conditions WHEN_FOCUSED,
+ // WHEN_ANCESTOR_OF_FOCUSED_COMPONENT and WHEN_IN_FOCUSED_WINDOW.
+ for (int cond = 0; cond < 3; cond++)
+ {
+ InputMap im = getInputMap(cond);
+ if (im != null)
+ {
+ Object action = im.get(aKeyStroke);
+ if (action != null && am != null)
+ am.remove(action);
+ im.remove(aKeyStroke);
+ }
+ }
}
@@ -2306,6 +2744,7 @@ public abstract class JComponent extends Container implements Serializable
public void setAutoscrolls(boolean a)
{
autoscrolls = a;
+ clientAutoscrollsSet = true;
}
/**
@@ -2444,7 +2883,29 @@ public abstract class JComponent extends Container implements Serializable
*/
public void setNextFocusableComponent(Component aComponent)
{
- // TODO: Implement this properly.
+ Container focusRoot = this;
+ if (! this.isFocusCycleRoot())
+ focusRoot = getFocusCycleRootAncestor();
+
+ FocusTraversalPolicy policy = focusRoot.getFocusTraversalPolicy();
+ if (policy instanceof CompatibilityFocusTraversalPolicy)
+ {
+ policy = new CompatibilityFocusTraversalPolicy(policy);
+ focusRoot.setFocusTraversalPolicy(policy);
+ }
+ CompatibilityFocusTraversalPolicy p =
+ (CompatibilityFocusTraversalPolicy) policy;
+
+ Component old = getNextFocusableComponent();
+ if (old != null)
+ {
+ p.removeNextFocusableComponent(this, old);
+ }
+
+ if (aComponent != null)
+ {
+ p.addNextFocusableComponent(this, aComponent);
+ }
}
/**
@@ -2489,9 +2950,12 @@ public abstract class JComponent extends Container implements Serializable
}
/**
- * Set the value of the {@link #opaque} property.
+ * Set if the component should paint all pixels withing its bounds.
+ * If this property is set to false, the component expects the cleared
+ * background.
*
- * @param isOpaque The new value of the property
+ * @param isOpaque if true, paint all pixels. If false, expect the clean
+ * background.
*
* @see ComponentUI#update
*/
@@ -2499,6 +2963,7 @@ public abstract class JComponent extends Container implements Serializable
{
boolean oldOpaque = opaque;
opaque = isOpaque;
+ clientOpaqueSet = true;
firePropertyChange("opaque", oldOpaque, opaque);
}
@@ -3174,4 +3639,44 @@ public abstract class JComponent extends Container implements Serializable
km.registerEntireMap((ComponentInputMap)
getInputMap(WHEN_IN_FOCUSED_WINDOW));
}
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("opaque"))
+ {
+ if (! clientOpaqueSet)
+ {
+ setOpaque(((Boolean) value).booleanValue());
+ clientOpaqueSet = false;
+ }
+ }
+ else if (propertyName.equals("autoscrolls"))
+ {
+ if (! clientAutoscrollsSet)
+ {
+ setAutoscrolls(((Boolean) value).booleanValue());
+ clientAutoscrollsSet = false;
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException
+ ("Unsupported property for LookAndFeel.installProperty(): "
+ + propertyName);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/JDesktopPane.java b/libjava/classpath/javax/swing/JDesktopPane.java
index 43ab71e..454870e 100644
--- a/libjava/classpath/javax/swing/JDesktopPane.java
+++ b/libjava/classpath/javax/swing/JDesktopPane.java
@@ -56,7 +56,6 @@ import javax.swing.plaf.DesktopPaneUI;
*/
public class JDesktopPane extends JLayeredPane implements Accessible
{
- /** DOCUMENT ME! */
private static final long serialVersionUID = 766333777224038726L;
/**
@@ -85,15 +84,24 @@ public class JDesktopPane extends JLayeredPane implements Accessible
private transient int dragMode = LIVE_DRAG_MODE;
/**
- * AccessibleJDesktopPane
+ * Indicates if the dragMode property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientDragModeSet = false;
+
+ /**
+ * Provides the accessibility features for the <code>JDesktopPane</code>
+ * component.
*/
protected class AccessibleJDesktopPane extends AccessibleJComponent
{
- /** DOCUMENT ME! */
private static final long serialVersionUID = 6079388927946077570L;
/**
- * Constructor AccessibleJDesktopPane
+ * Creates a new <code>AccessibleJDesktopPane</code> instance.
*/
protected AccessibleJDesktopPane()
{
@@ -101,9 +109,9 @@ public class JDesktopPane extends JLayeredPane implements Accessible
}
/**
- * getAccessibleRole
+ * Returns the accessible role for the <code>JSlider</code> component.
*
- * @return AccessibleRole
+ * @return {@link AccessibleRole#DESKTOP_PANE}.
*/
public AccessibleRole getAccessibleRole()
{
@@ -153,6 +161,8 @@ public class JDesktopPane extends JLayeredPane implements Accessible
if ((mode != LIVE_DRAG_MODE) && (mode != OUTLINE_DRAG_MODE))
throw new IllegalArgumentException("Drag mode not valid.");
+ clientDragModeSet = true;
+
// FIXME: Unsupported mode.
if (mode == OUTLINE_DRAG_MODE)
// throw new IllegalArgumentException("Outline drag modes are
@@ -198,7 +208,6 @@ public class JDesktopPane extends JLayeredPane implements Accessible
public void updateUI()
{
setUI((DesktopPaneUI) UIManager.getUI(this));
- invalidate();
}
/**
@@ -288,13 +297,22 @@ public class JDesktopPane extends JLayeredPane implements Accessible
}
/**
- * This method returns a String that describes the JDesktopPane.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JDesktopPane</code>.
*
- * @return A String that describes the JDesktopPane.
+ * @return A string describing the attributes of this <code>JDesktopPane</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JDesktopPane";
+ String superParamStr = super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",isOptimizedDrawingPossible=");
+ sb.append(isOptimizedDrawingEnabled());
+ sb.append(",desktopManager=");
+ if (desktopManager != null)
+ sb.append(desktopManager);
+ return superParamStr + sb.toString();
}
/**
@@ -320,9 +338,11 @@ public class JDesktopPane extends JLayeredPane implements Accessible
}
/**
- * getAccessibleContext
+ * Returns the object that provides accessibility features for this
+ * <code>JDesktopPane</code> component.
*
- * @return AccessibleContext
+ * @return The accessible context (an instance of
+ * {@link AccessibleJDesktopPane}).
*/
public AccessibleContext getAccessibleContext()
{
@@ -331,4 +351,34 @@ public class JDesktopPane extends JLayeredPane implements Accessible
return accessibleContext;
}
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("dragMode"))
+ {
+ if (! clientDragModeSet)
+ {
+ setDragMode(((Integer) value).intValue());
+ clientDragModeSet = false;
+ }
+ }
+ else
+ {
+ super.setUIProperty(propertyName, value);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/JFileChooser.java b/libjava/classpath/javax/swing/JFileChooser.java
index 72bd2bb..7da3a13 100644
--- a/libjava/classpath/javax/swing/JFileChooser.java
+++ b/libjava/classpath/javax/swing/JFileChooser.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Frame;
import java.awt.HeadlessException;
@@ -49,7 +51,6 @@ import java.util.ArrayList;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
-import javax.swing.JDialog;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileSystemView;
import javax.swing.filechooser.FileView;
@@ -491,6 +492,7 @@ public class JFileChooser extends JComponent implements Accessible
* @param b DOCUMENT ME!
*/
public void setDragEnabled(boolean b)
+ throws NotImplementedException
{
// FIXME: Implement
}
@@ -501,6 +503,7 @@ public class JFileChooser extends JComponent implements Accessible
* @return DOCUMENT ME!
*/
public boolean getDragEnabled()
+ throws NotImplementedException
{
// FIXME: Implement
return false;
@@ -1488,7 +1491,6 @@ public class JFileChooser extends JComponent implements Accessible
public void updateUI()
{
setUI((FileChooserUI) UIManager.getUI(this));
- revalidate();
}
/**
@@ -1528,7 +1530,9 @@ public class JFileChooser extends JComponent implements Accessible
*/
public AccessibleContext getAccessibleContext()
{
- return new AccessibleJFileChooser();
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleJFileChooser();
+ return accessibleContext;
}
/**
diff --git a/libjava/classpath/javax/swing/JInternalFrame.java b/libjava/classpath/javax/swing/JInternalFrame.java
index 5bd6f78..79dcc73 100644
--- a/libjava/classpath/javax/swing/JInternalFrame.java
+++ b/libjava/classpath/javax/swing/JInternalFrame.java
@@ -1,5 +1,5 @@
/* JInternalFrame.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,6 +44,7 @@ import java.awt.Graphics;
import java.awt.KeyboardFocusManager;
import java.awt.LayoutManager;
import java.awt.Rectangle;
+import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import javax.accessibility.Accessible;
@@ -67,11 +68,12 @@ public class JInternalFrame extends JComponent implements Accessible,
WindowConstants,
RootPaneContainer
{
- /** DOCUMENT ME! */
+
private static final long serialVersionUID = -5425177187760785402L;
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JInternalFrame</code>
+ * component.
*/
protected class AccessibleJInternalFrame extends AccessibleJComponent
implements AccessibleValue
@@ -79,7 +81,7 @@ public class JInternalFrame extends JComponent implements Accessible,
private static final long serialVersionUID = 5931936924175476797L;
/**
- * Creates a new AccessibleJInternalFrame object.
+ * Creates a new <code>AccessibleJInternalFrame</code> instance.
*/
protected AccessibleJInternalFrame()
{
@@ -87,75 +89,83 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * DOCUMENT ME!
+ * Returns the frame title.
*
- * @return DOCUMENT ME!
+ * @return The frame title.
*/
public String getAccessibleName()
{
- return null;
+ return getTitle();
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JInternalFrame</code>
+ * component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#INTERNAL_FRAME}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.INTERNAL_FRAME;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values for the {@link JInternalFrame}. Since this class
+ * implements {@link AccessibleValue}, it returns itself.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current layer for the {@link JInternalFrame} component,
+ * as an {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The layer for the {@link JInternalFrame} component.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(getLayer());
}
/**
- * DOCUMENT ME!
+ * Returns the maximum permitted accessible value.
*
- * @return DOCUMENT ME!
+ * @return <code>Integer(Integer.MAX_VALUE)</code>.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(Integer.MAX_VALUE);
}
/**
- * DOCUMENT ME!
+ * Returns the minimum permitted accessible value.
*
- * @return DOCUMENT ME!
+ * @return <code>Integer(Integer.MIN_VALUE)</code>.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(Integer.MIN_VALUE);
}
/**
- * DOCUMENT ME!
+ * Sets the layer for the internal frame.
*
- * @param n DOCUMENT ME!
+ * @param n the layer (see the constants defined in {@link JLayeredPane}).
*
- * @return DOCUMENT ME!
+ * @return <code>true</code> if the value is set, and <code>false</code>
+ * if it was not set.
*/
public boolean setCurrentAccessibleValue(Number n)
{
- return false;
+ if (n == null)
+ return false;
+ setLayer(n.intValue());
+ return true;
}
}
@@ -165,7 +175,8 @@ public class JInternalFrame extends JComponent implements Accessible,
public static class JDesktopIcon extends JComponent implements Accessible
{
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JDesktopIcon</code>
+ * component.
*/
protected class AccessibleJDesktopIcon extends AccessibleJComponent
implements AccessibleValue
@@ -173,73 +184,83 @@ public class JInternalFrame extends JComponent implements Accessible,
private static final long serialVersionUID = 5035560458941637802L;
/**
- * Creates a new AccessibleJDesktopIcon object.
+ * Creates a new <code>AccessibleJDesktopIcon</code> instance.
*/
protected AccessibleJDesktopIcon()
{
- super();
+ super();
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JDesktopIcon</code>
+ * component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#DESKTOP_ICON}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.DESKTOP_ICON;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values for the {@link JDesktopIcon}. Since this class
+ * implements {@link AccessibleValue}, it returns itself.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current layer for the {@link JInternalFrame} component
+ * represented by this <code>JDesktopIcon</code>, as an {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The layer.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(frame.getLayer());
}
/**
- * DOCUMENT ME!
+ * Returns the maximum permitted accessible value.
*
- * @return DOCUMENT ME!
+ * @return <code>Integer(Integer.MAX_VALUE)</code>.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(Integer.MAX_VALUE);
}
/**
- * DOCUMENT ME!
+ * Returns the minimum permitted accessible value.
*
- * @return DOCUMENT ME!
+ * @return <code>Integer(Integer.MIN_VALUE)</code>.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(Integer.MIN_VALUE);
}
/**
- * DOCUMENT ME!
+ * Sets the layer for the internal frame represented by this
+ * <code>JDesktopIcon</code> component.
*
- * @param n DOCUMENT ME!
+ * @param n the layer (see the constants defined in
+ * {@link JLayeredPane}).
*
- * @return DOCUMENT ME!
+ * @return <code>true</code> if the value is set, and <code>false</code>
+ * if it was not set.
*/
public boolean setCurrentAccessibleValue(Number n)
{
- return false;
+ if (n == null)
+ return false;
+ frame.setLayer(n.intValue());
+ return true;
}
}
@@ -259,15 +280,17 @@ public class JInternalFrame extends JComponent implements Accessible,
updateUI();
}
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JDesktopIcon</code> component.
+ *
+ * @return The accessible context (an instance of
+ * {@link AccessibleJDesktopIcon}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
- accessibleContext = new AccessibleJDesktopIcon();
+ accessibleContext = new AccessibleJDesktopIcon();
return accessibleContext;
}
@@ -477,12 +500,13 @@ public class JInternalFrame extends JComponent implements Accessible,
private transient boolean wasIcon = false;
/**
- * Creates a new JInternalFrame object that has no title, and is
- * non-resizable, non-maximizable, non-iconifiable, and non-closable.
+ * Creates a new JInternalFrame object that has an empty string for its
+ * title, and is non-resizable, non-maximizable, non-iconifiable, and
+ * non-closable.
*/
public JInternalFrame()
{
- this(null, false, false, false, false);
+ this("", false, false, false, false);
}
/**
@@ -559,8 +583,9 @@ public class JInternalFrame extends JComponent implements Accessible,
this.iconable = iconifiable;
storedBounds = new Rectangle();
setRootPane(createRootPane());
- // JInternalFrames are invisible by default.
+ // JInternalFrames are invisible and opaque by default.
setVisible(false);
+ setOpaque(true);
updateUI();
setRootPaneCheckingEnabled(true); // Done the init stage, now adds go to content pane.
}
@@ -726,9 +751,11 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JInternalFrame</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of
+ * {@link AccessibleJInternalFrame}).
*/
public AccessibleContext getAccessibleContext()
{
@@ -748,10 +775,16 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method returns the default action taken when this JInternalFrame is
- * closed.
+ * Returns a code for the default action taken when this
+ * <code>JInternalFrame</code> is closed.
*
- * @return The default action taken when this JInternalFrame is closed.
+ * @return The action code (usually one of
+ * {@link WindowConstants#DO_NOTHING_ON_CLOSE},
+ * {@link WindowConstants#HIDE_ON_CLOSE}, or
+ * {@link WindowConstants#DISPOSE_ON_CLOSE}).
+ *
+ * @see #setDefaultCloseOperation(int)
+ * @see #doDefaultCloseAction()
*/
public int getDefaultCloseOperation()
{
@@ -759,11 +792,10 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method returns the JDesktopIcon that represents this JInternalFrame
- * while it is iconified.
+ * Returns the <code>JDesktopIcon</code> that represents this
+ * <code>JInternalFrame</code> while it is iconified.
*
- * @return The JDesktopIcon that represents this JInternalFrame while it is
- * iconified.
+ * @return The desktop icon component.
*/
public JDesktopIcon getDesktopIcon()
{
@@ -878,7 +910,12 @@ public class JInternalFrame extends JComponent implements Accessible,
// instead of the static method (this would lead to infinite
// recursion).
return pane.getLayer((Component) this);
- return -1;
+
+ Integer layer = (Integer) getClientProperty(JLayeredPane.LAYER_PROPERTY);
+ if (layer != null)
+ return layer.intValue();
+
+ return JLayeredPane.DEFAULT_LAYER.intValue();
}
/**
@@ -950,9 +987,11 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method sets the title of the JInternalFrame.
+ * Returns the frame's title.
*
- * @return The String displayed in the TitlePane of this JInternalFrame.
+ * @return The frame's title (can be <code>null</code>).
+ *
+ * @see #setTitle(String)
*/
public String getTitle()
{
@@ -1171,13 +1210,15 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method returns a String describing this JInternalFrame.
+ * An implementation dependent string describing the current state of this
+ * <code>JInternalFrame</code> instance.
*
- * @return A String describing this JInternalFrame.
+ * @return A string describing the current state of this
+ * <code>JInternalFrame</code> instance.
*/
protected String paramString()
{
- return super.paramString();
+ return super.paramString() + ",title=" + getTitle();
}
/**
@@ -1189,7 +1230,7 @@ public class JInternalFrame extends JComponent implements Accessible,
{
// If we're removing the root pane, use super.remove. Otherwise
// pass it on to the content pane instead.
- if (comp==rootPane)
+ if (comp==rootPane || ! isRootPaneCheckingEnabled())
super.remove(comp);
else
getContentPane().remove(comp);
@@ -1238,7 +1279,11 @@ public class JInternalFrame extends JComponent implements Accessible,
*/
public void setClosable(boolean b)
{
- closable = b;
+ if (closable != b)
+ {
+ closable = b;
+ firePropertyChange("closable", ! closable, closable);
+ }
}
/**
@@ -1287,12 +1332,17 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method sets the action taken when this JInternalFrame is closed.
+ * Sets a code for the action to be taken when this
+ * <code>JInternalFrame</code> is closed. Note that no validation is
+ * performed on the <code>operation</code> code, any integer will be
+ * accepted (nevertheless, you should pass in one of the listed values).
*
- * @param operation One of DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE or
- * DISPOSE_ON_CLOSE.
- *
- * @throws Error If the given operation is not one of the allowed modes.
+ * @param operation one of {@link WindowConstants#DO_NOTHING_ON_CLOSE},
+ * {@link WindowConstants#HIDE_ON_CLOSE} or
+ * {@link WindowConstants#DISPOSE_ON_CLOSE}.
+ *
+ * @see #getDefaultCloseOperation()
+ * @see #doDefaultCloseAction()
*/
public void setDefaultCloseOperation(int operation)
{
@@ -1304,16 +1354,24 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method sets the JDesktopIcon that represents this JInternalFrame
- * while it is iconified.
+ * Sets the <code>JDesktopIcon</code> instance that represents this
+ * <code>JInternalFrame</code> while it is iconified and, if the new icon is
+ * not the same instance as the existing icon, sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * <code>"desktopIcon"</code>) to all registered listeners..
*
- * @param d The JDesktopIcon that represents this JInternalFrame while it is
- * iconified.
+ * @param d the icon.
+ *
+ * @see #getDesktopIcon()
*/
public void setDesktopIcon(JDesktopIcon d)
{
- d.setInternalFrame(this);
- desktopIcon = d;
+ if (desktopIcon != d)
+ {
+ JDesktopIcon oldIcon = desktopIcon;
+ desktopIcon = d;
+ firePropertyChange("desktopIcon", oldIcon, d);
+ }
}
/**
@@ -1396,7 +1454,11 @@ public class JInternalFrame extends JComponent implements Accessible,
*/
public void setIconifiable(boolean b)
{
- iconable = b;
+ if (iconable != b)
+ {
+ iconable = b;
+ firePropertyChange("iconable", ! iconable, iconable);
+ }
}
/**
@@ -1461,7 +1523,11 @@ public class JInternalFrame extends JComponent implements Accessible,
*/
public void setMaximizable(boolean b)
{
- maximizable = b;
+ if (maximizable != b)
+ {
+ maximizable = b;
+ firePropertyChange("maximizable", ! maximizable, maximizable);
+ }
}
/**
@@ -1538,7 +1604,11 @@ public class JInternalFrame extends JComponent implements Accessible,
*/
public void setResizable(boolean b)
{
- resizable = b;
+ if (b != resizable)
+ {
+ resizable = b;
+ firePropertyChange("resizable", ! resizable, resizable);
+ }
}
/**
@@ -1594,6 +1664,9 @@ public class JInternalFrame extends JComponent implements Accessible,
if (selected)
restoreSubcomponentFocus();
+ if (isShowing())
+ repaint();
+
firePropertyChange(IS_SELECTED_PROPERTY, ! isSelected, isSelected);
if (isSelected)
@@ -1604,10 +1677,13 @@ public class JInternalFrame extends JComponent implements Accessible,
}
/**
- * This method sets the title displayed in the TitlePane of this
- * JInternalFrame.
+ * Sets the title for the <code>JInternalFrame</code> and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link #TITLE_PROPERTY}) to all registered listeners.
*
- * @param title The title displayed.
+ * @param title the new title (<code>null</code> permitted).
+ *
+ * @see #getTitle()
*/
public void setTitle(String title)
{
@@ -1615,9 +1691,9 @@ public class JInternalFrame extends JComponent implements Accessible,
return;
if (title == null || this.title == null || ! this.title.equals(title))
{
- String old = title;
- this.title = title;
- firePropertyChange(TITLE_PROPERTY, old, this.title);
+ String old = this.title;
+ this.title = title;
+ firePropertyChange(TITLE_PROPERTY, old, this.title);
}
}
diff --git a/libjava/classpath/javax/swing/JLabel.java b/libjava/classpath/javax/swing/JLabel.java
index a9adc96..a993fb8 100644
--- a/libjava/classpath/javax/swing/JLabel.java
+++ b/libjava/classpath/javax/swing/JLabel.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Font;
import java.awt.Image;
@@ -67,15 +69,15 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
implements AccessibleText, AccessibleExtendedComponent
{
/**
- * Returns the selected text. This is an empty string since JLabels
+ * Returns the selected text. This is null since JLabels
* are not selectable.
*
- * @return the selected text
+ * @return <code>null</code> because JLabels cannot have selected text
*/
public String getSelectedText()
{
- // We return "" here since JLabel's text is not selectable.
- return "";
+ // We return null here since JLabel's text is not selectable.
+ return null;
}
/**
@@ -85,8 +87,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public int getSelectionStart()
{
- // TODO: Figure out what should be returned here, because JLabels don't
- // allow selection. I guess -1 for now.
+ // JLabel don't have selected text, so we return -1 here.
return -1;
}
@@ -97,8 +98,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public int getSelectionEnd()
{
- // TODO: Figure out what should be returned here, because JLabels don't
- // allow selection. I guess -1 for now.
+ // JLabel don't have selected text, so we return -1 here.
return -1;
}
@@ -115,6 +115,8 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public AttributeSet getCharacterAttribute(int index)
{
+ // FIXME: Return null here for simple labels, and query the HTML
+ // view for HTML labels.
return new SimpleAttributeSet();
}
@@ -259,6 +261,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public int getCharCount()
{
+ // FIXME: Query HTML view for HTML labels.
return text.length();
}
@@ -271,6 +274,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
* @return the bounding box of the character at the specified index
*/
public Rectangle getCharacterBounds(int index)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return new Rectangle();
@@ -286,6 +290,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
* point
*/
public int getIndexAtPoint(Point point)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return 0;
@@ -295,6 +300,8 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
/** DOCUMENT ME! */
private static final long serialVersionUID = 5496508283662221534L;
+ static final String LABEL_PROPERTY = "labeledBy";
+
/**
* The Component the label will give focus to when its mnemonic is
* activated.
@@ -337,7 +344,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public JLabel()
{
- this(null, null, LEADING);
+ this("", null, LEADING);
}
/**
@@ -348,7 +355,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public JLabel(Icon image)
{
- this(null, image, CENTER);
+ this("", image, CENTER);
}
/**
@@ -361,7 +368,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
public JLabel(Icon image, int horizontalAlignment)
{
- this(null, image, horizontalAlignment);
+ this("", image, horizontalAlignment);
}
/**
@@ -452,7 +459,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
*/
protected String paramString()
{
- return "JLabel";
+ return super.paramString();
}
/**
@@ -510,6 +517,7 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
Icon oldIcon = icon;
icon = newIcon;
firePropertyChange("icon", oldIcon, newIcon);
+ repaint();
}
}
@@ -860,8 +868,23 @@ public class JLabel extends JComponent implements Accessible, SwingConstants
{
if (c != labelFor)
{
+ // We put the label into the client properties for the labeled
+ // component so that it can be read by the AccessibleJComponent.
+ // The other option would be to reserve a default visible field
+ // in JComponent, but since this is relativly seldomly used, it
+ // would be unnecessary waste of memory to do so.
Component oldLabelFor = labelFor;
+ if (oldLabelFor instanceof JComponent)
+ {
+ ((JComponent) oldLabelFor).putClientProperty(LABEL_PROPERTY, null);
+ }
+
labelFor = c;
+ if (labelFor instanceof JComponent)
+ {
+ ((JComponent) labelFor).putClientProperty(LABEL_PROPERTY, this);
+ }
+
firePropertyChange("labelFor", oldLabelFor, labelFor);
}
}
diff --git a/libjava/classpath/javax/swing/JLayeredPane.java b/libjava/classpath/javax/swing/JLayeredPane.java
index ffd803c..f887c24 100644
--- a/libjava/classpath/javax/swing/JLayeredPane.java
+++ b/libjava/classpath/javax/swing/JLayeredPane.java
@@ -599,6 +599,7 @@ public class JLayeredPane extends JComponent implements Accessible
int newIdx = insertIndexForLayer(layer, index);
setLayer(comp, layer);
super.addImpl(comp, layerConstraint, newIdx);
+ repaint(comp.getX(), comp.getY(), comp.getWidth(), comp.getHeight());
}
/**
diff --git a/libjava/classpath/javax/swing/JList.java b/libjava/classpath/javax/swing/JList.java
index d0e1090..55978a4 100644
--- a/libjava/classpath/javax/swing/JList.java
+++ b/libjava/classpath/javax/swing/JList.java
@@ -1,5 +1,5 @@
/* JList.java --
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -965,11 +965,19 @@ public class JList extends JComponent implements Accessible, Scrollable
int visibleRowCount;
/**
- * Fire a {@link ListSelectionEvent} to all the registered ListSelectionListeners.
+ * Fire a {@link ListSelectionEvent} to all the registered
+ * ListSelectionListeners.
+ *
+ * @param firstIndex the lowest index covering the selection change.
+ * @param lastIndex the highest index covering the selection change.
+ * @param isAdjusting a flag indicating if this event is one in a series
+ * of events updating the selection.
*/
- protected void fireSelectionValueChanged(int firstIndex, int lastIndex, boolean isAdjusting)
+ protected void fireSelectionValueChanged(int firstIndex, int lastIndex,
+ boolean isAdjusting)
{
- ListSelectionEvent evt = new ListSelectionEvent(this, firstIndex, lastIndex, isAdjusting);
+ ListSelectionEvent evt = new ListSelectionEvent(this, firstIndex,
+ lastIndex, isAdjusting);
ListSelectionListener listeners[] = getListSelectionListeners();
for (int i = 0; i < listeners.length; ++i)
{
@@ -1022,48 +1030,56 @@ public class JList extends JComponent implements Accessible, Scrollable
/**
- * Creates a new JList object.
+ * Creates a new <code>JList</code> object.
*/
public JList()
{
- init();
+ init(new DefaultListModel());
}
/**
- * Creates a new JList object.
+ * Creates a new <code>JList</code> object.
*
- * @param listData Initial data to populate the list with
+ * @param items the initial list items.
*/
- public JList(Object[] listData)
+ public JList(Object[] items)
{
- init();
- setListData(listData);
+ init(createListModel(items));
}
/**
- * Creates a new JList object.
+ * Creates a new <code>JList</code> object.
*
- * @param listData Initial data to populate the list with
+ * @param items the initial list items.
*/
- public JList(Vector listData)
+ public JList(Vector items)
{
- init();
- setListData(listData);
+ init(createListModel(items));
}
/**
- * Creates a new JList object.
+ * Creates a new <code>JList</code> object.
*
- * @param listData Initial data to populate the list with
+ * @param model a model containing the list items (<code>null</code> not
+ * permitted).
+ *
+ * @throws IllegalArgumentException if <code>model</code> is
+ * <code>null</code>.
*/
- public JList(ListModel listData)
+ public JList(ListModel model)
{
- init();
- setModel(listData);
+ init(model);
}
- void init()
+ /**
+ * Initializes the list.
+ *
+ * @param m the list model (<code>null</code> not permitted).
+ */
+ private void init(ListModel m)
{
+ if (m == null)
+ throw new IllegalArgumentException("Null model not permitted.");
dragEnabled = false;
fixedCellHeight = -1;
fixedCellWidth = -1;
@@ -1075,9 +1091,17 @@ public class JList extends JComponent implements Accessible, Scrollable
cellRenderer = new DefaultListCellRenderer();
listListener = new ListListener();
- setModel(new DefaultListModel());
- setSelectionModel(createSelectionModel());
- setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ model = m;
+ if (model != null)
+ model.addListDataListener(listListener);
+
+ selectionModel = createSelectionModel();
+ if (selectionModel != null)
+ {
+ selectionModel.addListSelectionListener(listListener);
+ selectionModel.setSelectionMode
+ (ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ }
setLayout(null);
updateUI();
@@ -1117,6 +1141,8 @@ public class JList extends JComponent implements Accessible, Scrollable
* #prototypeCellValue} property is set, but setting it explicitly
* overrides the height computed from {@link #prototypeCellValue}.
*
+ * @param h the height.
+ *
* @see #getFixedCellHeight
* @see #getPrototypeCellValue
*/
@@ -1127,7 +1153,7 @@ public class JList extends JComponent implements Accessible, Scrollable
int old = fixedCellHeight;
fixedCellHeight = h;
- firePropertyChange("fixedCellWidth", old, h);
+ firePropertyChange("fixedCellHeight", old, h);
}
@@ -1154,6 +1180,8 @@ public class JList extends JComponent implements Accessible, Scrollable
* #prototypeCellValue} property is set, but setting it explicitly
* overrides the width computed from {@link #prototypeCellValue}.
*
+ * @param w the width.
+ *
* @see #getFixedCellHeight
* @see #getPrototypeCellValue
*/
@@ -1229,6 +1257,16 @@ public class JList extends JComponent implements Accessible, Scrollable
return (ListSelectionListener[]) getListeners(ListSelectionListener.class);
}
+ /**
+ * Returns the selection mode for the list (one of:
+ * {@link ListSelectionModel#SINGLE_SELECTION},
+ * {@link ListSelectionModel#SINGLE_INTERVAL_SELECTION} and
+ * {@link ListSelectionModel#MULTIPLE_INTERVAL_SELECTION}).
+ *
+ * @return The selection mode.
+ *
+ * @see #setSelectionMode(int)
+ */
public int getSelectionMode()
{
return selectionModel.getSelectionMode();
@@ -1274,6 +1312,9 @@ public class JList extends JComponent implements Accessible, Scrollable
* For each element <code>a[i]</code> of the provided array
* <code>a</code>, calls {@link #setSelectedIndex} on <code>a[i]</code>.
*
+ * @param a an array of selected indices (<code>null</code> not permitted).
+ *
+ * @throws NullPointerException if <code>a</code> is <code>null</code>.
* @see #setSelectionMode
* @see #selectionModel
*/
@@ -1536,7 +1577,9 @@ public class JList extends JComponent implements Accessible, Scrollable
*/
public void ensureIndexIsVisible(int i)
{
- scrollRectToVisible(getUI().getCellBounds(this, i, i));
+ Rectangle r = getUI().getCellBounds(this, i, i);
+ if (r != null)
+ scrollRectToVisible(r);
}
/**
@@ -1547,20 +1590,53 @@ public class JList extends JComponent implements Accessible, Scrollable
* @param listData The object array to build a new list model on
* @see #setModel
*/
- public void setListData(final Object[] listData)
+ public void setListData(Object[] listData)
{
- setModel(new AbstractListModel()
- {
- public int getSize()
- {
- return listData.length;
- }
+ setModel(createListModel(listData));
+ }
- public Object getElementAt(int i)
- {
- return listData[i];
- }
- });
+ /**
+ * Returns a {@link ListModel} backed by the specified array.
+ *
+ * @param items the list items (don't use <code>null</code>).
+ *
+ * @return A list model containing the specified items.
+ */
+ private ListModel createListModel(final Object[] items)
+ {
+ return new AbstractListModel()
+ {
+ public int getSize()
+ {
+ return items.length;
+ }
+ public Object getElementAt(int i)
+ {
+ return items[i];
+ }
+ };
+ }
+
+ /**
+ * Returns a {@link ListModel} backed by the specified vector.
+ *
+ * @param items the list items (don't use <code>null</code>).
+ *
+ * @return A list model containing the specified items.
+ */
+ private ListModel createListModel(final Vector items)
+ {
+ return new AbstractListModel()
+ {
+ public int getSize()
+ {
+ return items.size();
+ }
+ public Object getElementAt(int i)
+ {
+ return items.get(i);
+ }
+ };
}
/**
@@ -1571,20 +1647,9 @@ public class JList extends JComponent implements Accessible, Scrollable
* @param listData The object array to build a new list model on
* @see #setModel
*/
- public void setListData(final Vector listData)
+ public void setListData(Vector listData)
{
- setModel(new AbstractListModel()
- {
- public int getSize()
- {
- return listData.size();
- }
-
- public Object getElementAt(int i)
- {
- return listData.elementAt(i);
- }
- });
+ setModel(createListModel(listData));
}
/**
@@ -1655,7 +1720,21 @@ public class JList extends JComponent implements Accessible, Scrollable
repaint();
}
-
+ /**
+ * Returns the selection model for the {@link JList} component. Note that
+ * this class contains a range of convenience methods for configuring the
+ * selection model:<br>
+ * <ul>
+ * <li>{@link #clearSelection()};</li>
+ * <li>{@link #setSelectionMode(int)};</li>
+ * <li>{@link #addSelectionInterval(int, int)};</li>
+ * <li>{@link #setSelectedIndex(int)};</li>
+ * <li>{@link #setSelectedIndices(int[])};</li>
+ * <li>{@link #setSelectionInterval(int, int)}.</li>
+ * </ul>
+ *
+ * @return The selection model.
+ */
public ListSelectionModel getSelectionModel()
{
return selectionModel;
@@ -2010,41 +2089,96 @@ public class JList extends JComponent implements Accessible, Scrollable
return retVal;
}
+ /**
+ * Returns the index of the anchor item in the current selection, or
+ * <code>-1</code> if there is no anchor item.
+ *
+ * @return The item index.
+ */
public int getAnchorSelectionIndex()
{
return selectionModel.getAnchorSelectionIndex();
}
+ /**
+ * Returns the index of the lead item in the current selection, or
+ * <code>-1</code> if there is no lead item.
+ *
+ * @return The item index.
+ */
public int getLeadSelectionIndex()
{
return selectionModel.getLeadSelectionIndex();
}
+ /**
+ * Returns the lowest item index in the current selection, or <code>-1</code>
+ * if there is no selection.
+ *
+ * @return The index.
+ *
+ * @see #getMaxSelectionIndex()
+ */
public int getMinSelectionIndex()
{
- return selectionModel.getMaxSelectionIndex();
+ return selectionModel.getMinSelectionIndex();
}
+ /**
+ * Returns the highest item index in the current selection, or
+ * <code>-1</code> if there is no selection.
+ *
+ * @return The index.
+ *
+ * @see #getMinSelectionIndex()
+ */
public int getMaxSelectionIndex()
{
return selectionModel.getMaxSelectionIndex();
}
+ /**
+ * Clears the current selection.
+ */
public void clearSelection()
{
selectionModel.clearSelection();
}
+ /**
+ * Sets the current selection to the items in the specified range (inclusive).
+ * Note that <code>anchor</code> can be less than, equal to, or greater than
+ * <code>lead</code>.
+ *
+ * @param anchor the index of the anchor item.
+ * @param lead the index of the anchor item.
+ */
public void setSelectionInterval(int anchor, int lead)
{
selectionModel.setSelectionInterval(anchor, lead);
}
+ /**
+ * Adds the specified interval to the current selection. Note that
+ * <code>anchor</code> can be less than, equal to, or greater than
+ * <code>lead</code>.
+ *
+ * @param anchor the index of the anchor item.
+ * @param lead the index of the lead item.
+ */
public void addSelectionInterval(int anchor, int lead)
{
selectionModel.addSelectionInterval(anchor, lead);
}
+ /**
+ * Removes the specified interval from the current selection. Note that
+ * <code>index0</code> can be less than, equal to, or greater than
+ * <code>index1</code>.
+ *
+ * @param index0 an index for one end of the range.
+ * @param index1 an index for the other end of the range.
+ */
public void removeSelectionInterval(int index0, int index1)
{
selectionModel.removeSelectionInterval(index0, index1);
@@ -2138,7 +2272,14 @@ public class JList extends JComponent implements Accessible, Scrollable
*/
public Rectangle getCellBounds(int index0, int index1)
{
- return getUI().getCellBounds(this, index0, index1);
+ ListUI ui = getUI();
+ Rectangle bounds = null;
+ if (ui != null)
+ {
+ bounds = ui.getCellBounds(this, index0, index1);
+ }
+ // When the UI is null, this method also returns null in the RI.
+ return bounds;
}
/**
@@ -2201,4 +2342,28 @@ public class JList extends JComponent implements Accessible, Scrollable
}
return index;
}
+
+ /**
+ * Returns a string describing the attributes for the <code>JList</code>
+ * component, for use in debugging. The return value is guaranteed to be
+ * non-<code>null</code>, but the format of the string may vary between
+ * implementations.
+ *
+ * @return A string describing the attributes of the <code>JList</code>.
+ */
+ protected String paramString()
+ {
+ StringBuffer sb = new StringBuffer(super.paramString());
+ sb.append(",fixedCellHeight=").append(getFixedCellHeight());
+ sb.append(",fixedCellWidth=").append(getFixedCellWidth());
+ sb.append(",selectionBackground=");
+ if (getSelectionBackground() != null)
+ sb.append(getSelectionBackground());
+ sb.append(",selectionForeground=");
+ if (getSelectionForeground() != null)
+ sb.append(getSelectionForeground());
+ sb.append(",visibleRowCount=").append(getVisibleRowCount());
+ sb.append(",layoutOrientation=").append(getLayoutOrientation());
+ return sb.toString();
+ }
}
diff --git a/libjava/classpath/javax/swing/JMenu.java b/libjava/classpath/javax/swing/JMenu.java
index a160dd4..37ed148 100644
--- a/libjava/classpath/javax/swing/JMenu.java
+++ b/libjava/classpath/javax/swing/JMenu.java
@@ -1,5 +1,5 @@
/* JMenu.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Point;
import java.awt.event.KeyEvent;
@@ -293,8 +295,7 @@ public class JMenu extends JMenuItem implements Accessible, MenuElement
*/
public void updateUI()
{
- super.setUI((MenuItemUI) UIManager.getUI(this));
- invalidate();
+ setUI((MenuItemUI) UIManager.getUI(this));
}
/**
@@ -765,7 +766,7 @@ public class JMenu extends JMenuItem implements Accessible, MenuElement
*/
protected void processKeyEvent(KeyEvent event)
{
- // TODO: Implement this properly.
+ MenuSelectionManager.defaultManager().processKeyEvent(event);
}
/**
@@ -822,26 +823,31 @@ public class JMenu extends JMenuItem implements Accessible, MenuElement
}
public int getAccessibleChildrenCount()
+ throws NotImplementedException
{
return 0;
}
public Accessible getAccessibleChild(int value0)
+ throws NotImplementedException
{
return null;
}
public AccessibleSelection getAccessibleSelection()
+ throws NotImplementedException
{
return null;
}
public Accessible getAccessibleSelection(int value0)
+ throws NotImplementedException
{
return null;
}
public boolean isAccessibleChildSelected(int value0)
+ throws NotImplementedException
{
return false;
}
@@ -852,26 +858,31 @@ public class JMenu extends JMenuItem implements Accessible, MenuElement
}
public int getAccessibleSelectionCount()
+ throws NotImplementedException
{
return 0;
}
public void addAccessibleSelection(int value0)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void removeAccessibleSelection(int value0)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void clearAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
public void selectAllAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
diff --git a/libjava/classpath/javax/swing/JMenuBar.java b/libjava/classpath/javax/swing/JMenuBar.java
index 60726fb..18e47dc 100644
--- a/libjava/classpath/javax/swing/JMenuBar.java
+++ b/libjava/classpath/javax/swing/JMenuBar.java
@@ -658,6 +658,5 @@ public class JMenuBar extends JComponent implements Accessible, MenuElement
public void updateUI()
{
setUI((MenuBarUI) UIManager.getUI(this));
- invalidate();
}
}
diff --git a/libjava/classpath/javax/swing/JMenuItem.java b/libjava/classpath/javax/swing/JMenuItem.java
index b2cfbd1..272c1cf 100644
--- a/libjava/classpath/javax/swing/JMenuItem.java
+++ b/libjava/classpath/javax/swing/JMenuItem.java
@@ -1,5 +1,5 @@
/* JMenuItem.java --
- Copyright (C) 2002, 2004, 2005,2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
@@ -204,9 +206,7 @@ public class JMenuItem extends AbstractButton implements Accessible,
*/
public void updateUI()
{
- MenuItemUI mi = ((MenuItemUI) UIManager.getUI(this));
- setUI(mi);
- invalidate();
+ setUI((MenuItemUI) UIManager.getUI(this));
}
/**
@@ -398,7 +398,15 @@ public class JMenuItem extends AbstractButton implements Accessible,
public void processKeyEvent(KeyEvent event, MenuElement[] path,
MenuSelectionManager manager)
{
- // Need to implement.
+ MenuKeyEvent e = new MenuKeyEvent(event.getComponent(), event.getID(),
+ event.getWhen(), event.getModifiers(),
+ event.getKeyCode(), event.getKeyChar(),
+ path, manager);
+ processMenuKeyEvent(e);
+
+ // Consume original key event, if the menu key event has been consumed.
+ if (e.isConsumed())
+ event.consume();
}
/**
@@ -436,7 +444,20 @@ public class JMenuItem extends AbstractButton implements Accessible,
*/
public void processMenuKeyEvent(MenuKeyEvent event)
{
- // Need to implement.
+ switch (event.getID())
+ {
+ case KeyEvent.KEY_PRESSED:
+ fireMenuKeyPressed(event);
+ break;
+ case KeyEvent.KEY_RELEASED:
+ fireMenuKeyReleased(event);
+ break;
+ case KeyEvent.KEY_TYPED:
+ fireMenuKeyTyped(event);
+ break;
+ default:
+ break;
+ }
}
/**
@@ -652,16 +673,26 @@ public class JMenuItem extends AbstractButton implements Accessible,
}
/**
- * A string that describes this JMenuItem. Normally only used
- * for debugging.
+ * Returns a string describing the attributes for the <code>JToolTip</code>
+ * component, for use in debugging. The return value is guaranteed to be
+ * non-<code>null</code>, but the format of the string may vary between
+ * implementations.
*
- * @return A string describing this JMenuItem
+ * @return A string describing the attributes of the <code>JMenuItem</code>.
*/
protected String paramString()
{
+ // calling super seems to be sufficient here...
return super.paramString();
}
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JMenuItem</code> component.
+ *
+ * @return The accessible context (an instance of
+ * {@link AccessibleJMenuItem}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
@@ -670,13 +701,19 @@ public class JMenuItem extends AbstractButton implements Accessible,
return accessibleContext;
}
+ /**
+ * Provides the accessibility features for the <code>JMenuItem</code>
+ * component.
+ *
+ * @see JMenuItem#getAccessibleContext()
+ */
protected class AccessibleJMenuItem extends AccessibleAbstractButton
implements ChangeListener
{
private static final long serialVersionUID = 6748924232082076534L;
/**
- * Creates a new AccessibleJMenuItem object.
+ * Creates a new <code>AccessibleJMenuItem</code> instance.
*/
AccessibleJMenuItem()
{
@@ -684,10 +721,16 @@ public class JMenuItem extends AbstractButton implements Accessible,
}
public void stateChanged(ChangeEvent event)
+ throws NotImplementedException
{
// TODO: What should be done here, if anything?
}
+ /**
+ * Returns the accessible role for the <code>JMenuItem</code> component.
+ *
+ * @return {@link AccessibleRole#MENU_ITEM}.
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.MENU_ITEM;
diff --git a/libjava/classpath/javax/swing/JOptionPane.java b/libjava/classpath/javax/swing/JOptionPane.java
index 705eca8..0bef12b 100644
--- a/libjava/classpath/javax/swing/JOptionPane.java
+++ b/libjava/classpath/javax/swing/JOptionPane.java
@@ -75,13 +75,14 @@ public class JOptionPane extends JComponent implements Accessible
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role of this object, which is always
+ * {@link AccessibleRole#OPTION_PANE}.
*
- * @return DOCUMENT ME!
+ * @return the accessible role of this object
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.OPTION_PANE;
}
}
@@ -1475,7 +1476,6 @@ public class JOptionPane extends JComponent implements Accessible
public void updateUI()
{
setUI((OptionPaneUI) UIManager.getUI(this));
- invalidate();
}
/**
diff --git a/libjava/classpath/javax/swing/JPanel.java b/libjava/classpath/javax/swing/JPanel.java
index 815e452..3bd71d1 100644
--- a/libjava/classpath/javax/swing/JPanel.java
+++ b/libjava/classpath/javax/swing/JPanel.java
@@ -1,5 +1,5 @@
/* JPanel.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -80,54 +80,108 @@ public class JPanel extends JComponent implements Accessible
}
}
+ /**
+ * Creates a new panel with a new instance of {@link FlowLayout} as the
+ * layout manager and double-buffering enabled.
+ */
public JPanel()
{
this(new FlowLayout(), true);
}
- public JPanel(boolean double_buffered)
+ /**
+ * Creates a new panel with double-buffering enabled or disabled as
+ * specified. The default layout manager is an instance of
+ * {@link FlowLayout}.
+ *
+ * @param isDoubleBuffered a flag that controls whether or not
+ * double-buffering is enabled.
+ */
+ public JPanel(boolean isDoubleBuffered)
{
- this(new FlowLayout(), double_buffered);
+ this(new FlowLayout(), isDoubleBuffered);
}
+ /**
+ * Creates a new panel with the specified layout manager. Double-buffering
+ * is enabled by default.
+ *
+ * @param layout the layout manager (<code>null</code> permitted).
+ */
public JPanel(LayoutManager layout)
{
this(layout, true);
}
+ /**
+ * Creates a new panel with the specified layout manager and
+ * double-buffering.
+ *
+ * @param layout the layout manager (<code>null</code> permitted).
+ * @param isDoubleBuffered a flag that controls whether or not
+ * double-buffering is enabled.
+ */
public JPanel(LayoutManager layout, boolean isDoubleBuffered)
{
- if (layout == null)
- {
- // TODO: Is this correct? Or should we throw a NPE?
- layout = new FlowLayout();
- }
setLayout(layout);
- setOpaque(true);
-
+ setOpaque(true);
+ setDoubleBuffered(isDoubleBuffered);
updateUI();
}
+ /**
+ * Returns the suffix (<code>"PanelUI"</code> in this case) used to
+ * determine the class name for a UI delegate that can provide the look and
+ * feel for a <code>JPanel</code>.
+ *
+ * @return <code>"PanelUI"</code>.
+ */
public String getUIClassID()
{
return "PanelUI";
}
+ /**
+ * Sets the UI delegate for the <code>JPanel</code> component.
+ *
+ * @param ui the UI delegate.
+ *
+ * @since 1.4
+ * @see #getUI()
+ */
public void setUI(PanelUI ui)
{
super.setUI(ui);
}
+ /**
+ * Returns the UI delegate for the <code>JPanel</code> component.
+ *
+ * @return The UI delegate.
+ *
+ * @since 1.4
+ * @see #setUI(PanelUI)
+ */
public PanelUI getUI()
{
return (PanelUI) ui;
}
+ /**
+ * Sets this panel's UI delegate to the default (obtained from the
+ * {@link UIManager}) for the current look and feel.
+ */
public void updateUI()
{
setUI((PanelUI) UIManager.getUI(this));
}
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JPanel</code> component.
+ *
+ * @return The accessible context (an instance of {@link AccessibleJPanel}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
@@ -135,7 +189,14 @@ public class JPanel extends JComponent implements Accessible
return accessibleContext;
}
- protected String paramString()
+ /**
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JPanel</code>.
+ *
+ * @return A string describing the attributes of this <code>JPanel</code>
+ * (never <code>null</code>).
+ */
+ protected String paramString()
{
return super.paramString();
}
diff --git a/libjava/classpath/javax/swing/JPopupMenu.java b/libjava/classpath/javax/swing/JPopupMenu.java
index 74f733e..a54bd77 100644
--- a/libjava/classpath/javax/swing/JPopupMenu.java
+++ b/libjava/classpath/javax/swing/JPopupMenu.java
@@ -292,7 +292,6 @@ public class JPopupMenu extends JComponent implements Accessible, MenuElement
public void updateUI()
{
setUI((PopupMenuUI) UIManager.getUI(this));
- invalidate();
}
/**
@@ -542,11 +541,25 @@ public class JPopupMenu extends JComponent implements Accessible, MenuElement
this.visible = visible;
if (old != isVisible())
{
- firePropertyChange("visible", old, isVisible());
if (visible)
{
+ if (invoker != null && !(invoker instanceof JMenu))
+ {
+ MenuElement[] menuEls;
+ if (getSubElements().length > 0)
+ {
+ menuEls = new MenuElement[2];
+ menuEls[0] = this;
+ menuEls[1] = getSubElements()[0];
+ }
+ else
+ {
+ menuEls = new MenuElement[1];
+ menuEls[0] = this;
+ }
+ MenuSelectionManager.defaultManager().setSelectedPath(menuEls);
+ }
firePopupMenuWillBecomeVisible();
-
PopupFactory pf = PopupFactory.getSharedInstance();
pack();
popup = pf.getPopup(invoker, this, popupLocationX, popupLocationY);
@@ -554,9 +567,11 @@ public class JPopupMenu extends JComponent implements Accessible, MenuElement
}
else
{
+ getSelectionModel().clearSelection();
firePopupMenuWillBecomeInvisible();
popup.hide();
}
+ firePropertyChange("visible", old, isVisible());
}
}
diff --git a/libjava/classpath/javax/swing/JProgressBar.java b/libjava/classpath/javax/swing/JProgressBar.java
index e7ee800..db936f6 100644
--- a/libjava/classpath/javax/swing/JProgressBar.java
+++ b/libjava/classpath/javax/swing/JProgressBar.java
@@ -39,10 +39,12 @@ exception statement from your version. */
package javax.swing;
import java.awt.Graphics;
+import java.beans.PropertyChangeEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.border.Border;
@@ -79,17 +81,16 @@ public class JProgressBar extends JComponent implements SwingConstants,
Accessible
{
/**
- * AccessibleJProgressBar
+ * Provides the accessibility features for the <code>JProgressBar</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and needs to be implemented
- // properly.
protected class AccessibleJProgressBar extends AccessibleJComponent
implements AccessibleValue
{
private static final long serialVersionUID = -2938130009392721813L;
/**
- * Constructor AccessibleJProgressBar
+ * Creates a new <code>AccessibleJProgressBar</code> instance.
*/
protected AccessibleJProgressBar()
{
@@ -97,19 +98,25 @@ public class JProgressBar extends JComponent implements SwingConstants,
}
/**
- * getAccessibleStateSet
+ * Returns a set containing the current state of the {@link JProgressBar}
+ * component.
*
- * @return AccessibleStateSet
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null;
+ AccessibleStateSet result = super.getAccessibleStateSet();
+ if (orientation == JProgressBar.HORIZONTAL)
+ result.add(AccessibleState.HORIZONTAL);
+ else if (orientation == JProgressBar.VERTICAL)
+ result.add(AccessibleState.VERTICAL);
+ return result;
}
/**
- * getAccessibleRole
+ * Returns the accessible role for the <code>JProgressBar</code> component.
*
- * @return AccessibleRole
+ * @return {@link AccessibleRole#PROGRESS_BAR}.
*/
public AccessibleRole getAccessibleRole()
{
@@ -117,56 +124,71 @@ public class JProgressBar extends JComponent implements SwingConstants,
}
/**
- * getAccessibleValue
+ * Returns an object that provides access to the current, minimum and
+ * maximum values.
*
- * @return AccessibleValue
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * getCurrentAccessibleValue
+ * Returns the current value of the {@link JProgressBar} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The current value of the {@link JProgressBar} component.
*/
public Number getCurrentAccessibleValue()
{
- return null;
- }
+ return new Integer(getValue());
+ }
/**
- * setCurrentAccessibleValue
+ * Sets the current value of the {@link JProgressBar} component and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link AccessibleContext#ACCESSIBLE_VALUE_PROPERTY}) to all registered
+ * listeners. If the supplied value is <code>null</code>, this method
+ * does nothing and returns <code>false</code>.
*
- * @param value0 TODO
+ * @param value the new progress bar value (<code>null</code> permitted).
*
- * @return boolean
+ * @return <code>true</code> if the slider value is updated, and
+ * <code>false</code> otherwise.
*/
- public boolean setCurrentAccessibleValue(Number value0)
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false;
- }
+ if (value == null)
+ return false;
+ Number oldValue = getCurrentAccessibleValue();
+ setValue(value.intValue());
+ firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, oldValue,
+ new Integer(getValue()));
+ return true;
+ }
/**
- * getMinimumAccessibleValue
+ * Returns the minimum value of the {@link JProgressBar} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The minimum value of the {@link JProgressBar} component.
*/
public Number getMinimumAccessibleValue()
{
- return null;
- }
+ return new Integer(getMinimum());
+ }
/**
- * getMaximumAccessibleValue
+ * Returns the maximum value of the {@link JProgressBar} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The maximum value of the {@link JProgressBar} component.
*/
public Number getMaximumAccessibleValue()
{
- return null;
- }
+ return new Integer(getMaximum());
+ }
}
private static final long serialVersionUID = 1980046021813598781L;
@@ -465,7 +487,6 @@ public class JProgressBar extends JComponent implements SwingConstants,
public void updateUI()
{
setUI((ProgressBarUI) UIManager.getUI(this));
- invalidate();
}
/**
@@ -613,15 +634,28 @@ public class JProgressBar extends JComponent implements SwingConstants,
}
/**
- * This method returns a string that can be used to
- * describe this JProgressBar. This method is usually
- * only used for debugging purposes.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JProgressBar</code>.
*
- * @return A string that describes this JProgressBar.
+ * @return A string describing the attributes of this
+ * <code>JProgressBar</code> (never <code>null</code>).
*/
protected String paramString()
{
- return "JProgressBar";
+ String superParamStr = super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",orientation=");
+ if (orientation == HORIZONTAL)
+ sb.append("HORIZONTAL");
+ else
+ sb.append("VERTICAL");
+ sb.append(",paintBorder=").append(isBorderPainted());
+ sb.append(",paintString=").append(isStringPainted());
+ sb.append(",progressString=");
+ if (progressString != null)
+ sb.append(progressString);
+ sb.append(",indeterminateString=").append(isIndeterminate());
+ return superParamStr + sb.toString();
}
/**
@@ -655,9 +689,11 @@ public class JProgressBar extends JComponent implements SwingConstants,
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JProgressBar</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of
+ * {@link AccessibleJProgressBar}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/JRadioButtonMenuItem.java b/libjava/classpath/javax/swing/JRadioButtonMenuItem.java
index 61a8dba..0d7c1d1 100644
--- a/libjava/classpath/javax/swing/JRadioButtonMenuItem.java
+++ b/libjava/classpath/javax/swing/JRadioButtonMenuItem.java
@@ -1,5 +1,5 @@
/* JRadioButtonMenuItem.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -168,16 +168,27 @@ public class JRadioButtonMenuItem extends JMenuItem implements Accessible
}
/**
- * A string that describes this JRadioButtonMenuItem. Normally only used
- * for debugging.
+ * Returns a string describing the attributes for the
+ * <code>JRadioButtonMenuItem</code> component, for use in debugging. The
+ * return value is guaranteed to be non-<code>null</code>, but the format of
+ * the string may vary between implementations.
*
- * @return A string describing this JRadioButtonMenuItem
+ * @return A string describing the attributes of the
+ * <code>JRadioButtonMenuItem</code>.
*/
protected String paramString()
{
- return "JRadioButtonMenuItem";
+ // calling super seems to be sufficient here...
+ return super.paramString();
}
+ /**
+ * Returns the object that provides accessibility features for this
+ * <code>JRadioButtonMenuItem</code> component.
+ *
+ * @return The accessible context (an instance of
+ * {@link AccessibleJRadioButtonMenuItem}).
+ */
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
@@ -186,18 +197,30 @@ public class JRadioButtonMenuItem extends JMenuItem implements Accessible
return accessibleContext;
}
+ /**
+ * Provides the accessibility features for the
+ * <code>JRadioButtonMenuItem</code> component.
+ *
+ * @see JRadioButtonMenuItem#getAccessibleContext()
+ */
protected class AccessibleJRadioButtonMenuItem extends AccessibleJMenuItem
{
private static final long serialVersionUID = 4381471510145292179L;
/**
- * Creates a new AccessibleJRadioButtonMenuItem object.
+ * Creates a new <code>AccessibleJRadioButtonMenuItem</code> instance.
*/
protected AccessibleJRadioButtonMenuItem()
{
// Nothing to do here.
}
+ /**
+ * Returns the accessible role for the <code>JRadioButtonMenuItem</code>
+ * component.
+ *
+ * @return {@link AccessibleRole#RADIO_BUTTON}.
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.RADIO_BUTTON;
diff --git a/libjava/classpath/javax/swing/JRootPane.java b/libjava/classpath/javax/swing/JRootPane.java
index dec4395..a2cd9c7 100644
--- a/libjava/classpath/javax/swing/JRootPane.java
+++ b/libjava/classpath/javax/swing/JRootPane.java
@@ -50,6 +50,7 @@ import java.awt.Rectangle;
import java.io.Serializable;
import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.swing.plaf.RootPaneUI;
@@ -624,12 +625,15 @@ public class JRootPane extends JComponent implements Accessible
public void setDefaultButton(JButton newButton)
{
- if (defaultButton == newButton)
- return;
-
- JButton oldButton = defaultButton;
- defaultButton = newButton;
- firePropertyChange("defaultButton", oldButton, newButton);
+ // We only change the default button if the new button is defaultCapable
+ // or null and the old and new button are different objects.
+ if (defaultButton != newButton
+ && (newButton == null || newButton.isDefaultCapable()))
+ {
+ JButton oldButton = defaultButton;
+ defaultButton = newButton;
+ firePropertyChange("defaultButton", oldButton, newButton);
+ }
}
/**
@@ -674,4 +678,17 @@ public class JRootPane extends JComponent implements Accessible
{
return ! glassPane.isVisible();
}
+
+ /**
+ * Returns the accessible context for this JRootPane. This will be
+ * an instance of {@link AccessibleJRootPane}.
+ *
+ * @return the accessible context for this JRootPane
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleJRootPane();
+ return accessibleContext;
+ }
}
diff --git a/libjava/classpath/javax/swing/JScrollBar.java b/libjava/classpath/javax/swing/JScrollBar.java
index a2cc76c..bca2468 100644
--- a/libjava/classpath/javax/swing/JScrollBar.java
+++ b/libjava/classpath/javax/swing/JScrollBar.java
@@ -1,5 +1,5 @@
/* JScrollBar.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,10 +42,12 @@ import java.awt.Adjustable;
import java.awt.Dimension;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
+import java.beans.PropertyChangeEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.plaf.ScrollBarUI;
@@ -60,7 +62,8 @@ import javax.swing.plaf.ScrollBarUI;
public class JScrollBar extends JComponent implements Adjustable, Accessible
{
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JScrollBar</code>
+ * component.
*/
protected class AccessibleJScrollBar extends JComponent.AccessibleJComponent
implements AccessibleValue
@@ -68,7 +71,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible
private static final long serialVersionUID = -7758162392045586663L;
/**
- * Creates a new AccessibleJSlider object.
+ * Creates a new <code>AccessibleJScrollBar</code> instance.
*/
protected AccessibleJScrollBar()
{
@@ -76,75 +79,96 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible
}
/**
- * DOCUMENT ME!
+ * Returns a set containing the current state of the {@link JScrollBar}
+ * component.
*
- * @return DOCUMENT ME!
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null;
+ AccessibleStateSet result = super.getAccessibleStateSet();
+ if (orientation == JScrollBar.HORIZONTAL)
+ result.add(AccessibleState.HORIZONTAL);
+ else if (orientation == JScrollBar.VERTICAL)
+ result.add(AccessibleState.VERTICAL);
+ return result;
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JScrollBar</code> component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#SCROLL_BAR}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.SCROLL_BAR;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current value of the {@link JScrollBar} component, as an
+ * {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The current value of the {@link JScrollBar} component.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(getValue());
}
/**
- * setCurrentAccessibleValue
+ * Sets the current value of the {@link JScrollBar} component and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link AccessibleContext#ACCESSIBLE_VALUE_PROPERTY}) to all registered
+ * listeners. If the supplied value is <code>null</code>, this method
+ * does nothing and returns <code>false</code>.
*
- * @param value0 TODO
+ * @param value the new slider value (<code>null</code> permitted).
*
- * @return boolean
+ * @return <code>true</code> if the slider value is updated, and
+ * <code>false</code> otherwise.
*/
- public boolean setCurrentAccessibleValue(Number value0)
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false;
+ if (value == null)
+ return false;
+ Number oldValue = getCurrentAccessibleValue();
+ setValue(value.intValue());
+ firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, oldValue,
+ new Integer(getValue()));
+ return true;
}
/**
- * getMinimumAccessibleValue
+ * Returns the minimum value of the {@link JScrollBar} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The minimum value of the {@link JScrollBar} component.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(getMinimum());
}
/**
- * getMaximumAccessibleValue
+ * Returns the maximum value of the {@link JScrollBar} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The maximum value of the {@link JScrollBar} component.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(getMaximum() - model.getExtent());
}
}
@@ -233,8 +257,6 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible
public void updateUI()
{
setUI((ScrollBarUI) UIManager.getUI(this));
- invalidate();
- repaint();
}
/**
@@ -632,9 +654,11 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JScrollBar</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of
+ * {@link AccessibleJScrollBar}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/JScrollPane.java b/libjava/classpath/javax/swing/JScrollPane.java
index 45dfbf5..09e3737 100644
--- a/libjava/classpath/javax/swing/JScrollPane.java
+++ b/libjava/classpath/javax/swing/JScrollPane.java
@@ -631,8 +631,7 @@ public class JScrollPane extends JComponent
public void updateUI()
{
- ScrollPaneUI b = (ScrollPaneUI)UIManager.getUI(this);
- setUI(b);
+ setUI((ScrollPaneUI) UIManager.getUI(this));
}
/**
diff --git a/libjava/classpath/javax/swing/JSeparator.java b/libjava/classpath/javax/swing/JSeparator.java
index 602af6a..c87783b 100644
--- a/libjava/classpath/javax/swing/JSeparator.java
+++ b/libjava/classpath/javax/swing/JSeparator.java
@@ -37,12 +37,13 @@ exception statement from your version. */
package javax.swing;
+import java.beans.PropertyChangeEvent;
+
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.swing.plaf.SeparatorUI;
-
/**
* The JSeparator. It is mostly used to divide/space out
* components.
@@ -51,14 +52,15 @@ public class JSeparator extends JComponent implements SwingConstants,
Accessible
{
/**
- * AccessibleJSeparator
+ * Provides the accessibility features for the <code>JSeparator</code>
+ * component.
*/
protected class AccessibleJSeparator extends AccessibleJComponent
{
private static final long serialVersionUID = 916332890553201095L;
/**
- * Constructor AccessibleJSeparator
+ * Creates a new <code>AccessibleJSeparator</code> instance.
*/
protected AccessibleJSeparator()
{
@@ -66,9 +68,9 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * getAccessibleRole
+ * Returns the accessible role for the <code>JSeparator</code> component.
*
- * @return AccessibleRole
+ * @return {@link AccessibleRole#SEPARATOR}.
*/
public AccessibleRole getAccessibleRole()
{
@@ -82,7 +84,7 @@ public class JSeparator extends JComponent implements SwingConstants,
private transient int orientation = HORIZONTAL;
/**
- * Creates a new horizontal JSeparator object.
+ * Creates a new horizontal <code>JSeparator</code> object.
*/
public JSeparator()
{
@@ -90,9 +92,13 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * Creates a new JSeparator object with the given orientation.
+ * Creates a new <code>JSeparator</code> object with the given orientation.
*
- * @param orientation The orientation of the JSeparator.
+ * @param orientation the orientation (either {@link #HORIZONTAL} or
+ * {@link #VERTICAL}).
+ *
+ * @throws IllegalArgumentException if <code>orientation</code> is not
+ * one of the specified values.
*/
public JSeparator(int orientation)
{
@@ -104,10 +110,9 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method returns the UI delegate being
- * used with the JSeparator.
+ * Returns the UI delegate being used with the <code>JSeparator</code>.
*
- * @return SeparatorUI The JSeparator's UI delegate.
+ * @return The JSeparator's UI delegate.
*/
public SeparatorUI getUI()
{
@@ -115,10 +120,9 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method sets the UI delegate to use
- * with the JSeparator.
+ * Sets the separator's UI delegate.
*
- * @param ui The UI delegate to use.
+ * @param ui the UI delegate.
*/
public void setUI(SeparatorUI ui)
{
@@ -126,8 +130,8 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method resets the UI delegate to the
- * default for the current look and feel.
+ * Sets this separator's UI delegate to the default (obtained from the
+ * {@link UIManager}) for the current look and feel.
*/
public void updateUI()
{
@@ -135,11 +139,11 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method returns the identifier string
- * that is used to determine the UI delegate
- * from the current look and feel.
+ * Returns the suffix (<code>"SeparatorUI"</code> in this case) used to
+ * determine the class name for a UI delegate that can provide the look and
+ * feel for a <code>JSeparator</code>.
*
- * @return String The identifier string for the UI.
+ * @return <code>"SeparatorUI"</code>.
*/
public String getUIClassID()
{
@@ -147,9 +151,11 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method returns the JSeparator's orientation.
+ * Returns the orientation of the <code>JSeparator</code>.
*
- * @return int The JSeparator's orientation.
+ * @return The orientation (one of {@link #HORIZONTAL} and {@link #VERTICAL}).
+ *
+ * @see #setOrientation(int)
*/
public int getOrientation()
{
@@ -157,33 +163,50 @@ public class JSeparator extends JComponent implements SwingConstants,
}
/**
- * This method changes the JSeparator's orientation.
+ * Sets the orientation for the <code>JSeparator</code> and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * <code>orientation</code>) to all registered listeners.
*
- * @param orientation The JSeparator's orientation.
+ * @param orientation the orientation (either {@link #HORIZONTAL} or
+ * {@link #VERTICAL}).
+ *
+ * @throws IllegalArgumentException if <code>orientation</code> is not
+ * one of the specified values.
+ *
+ * @see #getOrientation()
*/
public void setOrientation(int orientation)
{
if (orientation != HORIZONTAL && orientation != VERTICAL)
throw new IllegalArgumentException(orientation
+ " is not a valid orientation.");
+ int old = this.orientation;
this.orientation = orientation;
+ firePropertyChange("orientation", old, orientation);
}
/**
- * This method returns a string desribing the JSeparator.
- * Normally only used in debugging.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JSeparator</code>.
*
- * @return String A string describing the JSeparator.
+ * @return A string describing the attributes of this <code>JSeparator</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JSeparator";
+ String superParamStr = super.paramString();
+ if (orientation == HORIZONTAL)
+ return superParamStr + ",orientation=HORIZONTAL";
+ else
+ return superParamStr + ",orientation=VERTICAL";
}
/**
- * getAccessibleContext
+ * Returns the object that provides accessibility features for this
+ * <code>JSeparator</code> component.
*
- * @return AccessibleContext
+ * @return The accessible context (an instance of
+ * {@link AccessibleJSeparator}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/JSlider.java b/libjava/classpath/javax/swing/JSlider.java
index b28b06a..ed94c4e 100644
--- a/libjava/classpath/javax/swing/JSlider.java
+++ b/libjava/classpath/javax/swing/JSlider.java
@@ -1,5 +1,5 @@
/* JSlider.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,6 +50,7 @@ import java.util.Hashtable;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
@@ -57,13 +58,12 @@ import javax.swing.event.ChangeListener;
import javax.swing.plaf.SliderUI;
/**
- * The JSlider is a Swing component that allows selection of a value within a
+ * A visual component that allows selection of a value within a
* range by adjusting a thumb in a track. The values for the minimum,
* maximum, extent and value are stored in a {@link
* DefaultBoundedRangeModel}.
- *
* <p>
- * JSliders have the following properties:
+ * A <code>JSlider</code> component has the following properties:
* </p>
*
* <table>
@@ -72,38 +72,38 @@ import javax.swing.plaf.SliderUI;
* <tr><td> inverted </td><td> slider </td><td> yes </td></tr>
* <tr><td> labelTable </td><td> slider </td><td> yes </td></tr>
* <tr><td> majorTickSpacing </td><td> slider </td><td> yes </td></tr>
- * <tr><td> maximum </td><td> model </td><td> no </td></tr>
- * <tr><td> minimum </td><td> model </td><td> no </td></tr>
+ * <tr><td> maximum </td><td> model </td><td> yes </td></tr>
+ * <tr><td> minimum </td><td> model </td><td> yes </td></tr>
* <tr><td> minorTickSpacing </td><td> slider </td><td> yes </td></tr>
* <tr><td> model </td><td> slider </td><td> yes </td></tr>
* <tr><td> orientation </td><td> slider </td><td> yes </td></tr>
* <tr><td> paintLabels </td><td> slider </td><td> yes </td></tr>
* <tr><td> paintTicks </td><td> slider </td><td> yes </td></tr>
- * <tr><td> snapToTicks </td><td> slider </td><td> no </td></tr>
+ * <tr><td> snapToTicks </td><td> slider </td><td> yes </td></tr>
* <tr><td> value </td><td> model </td><td> no </td></tr>
* <tr><td> valueIsAdjusting </td><td> model </td><td> no </td></tr>
* </table>
*
* <p>
- * The various behavioral aspects of these properties follows:
+ * The various behavioural aspects of these properties follows:
* </p>
*
* <ul>
* <li>
- * When non-bound properties stored in the slider change, the slider fires
- * ChangeEvents to its ChangeListeners.
+ * When a non-bound property stored in the slider changes, the slider fires
+ * a {@link ChangeEvent} to its change listeners.
* </li>
* <li>
- * When bound properties stored in the slider change, the slider fires
- * PropertyChangeEvents to its PropertyChangeListeners
+ * When a bound property stored in the slider changes, the slider fires a
+ * {@link PropertyChangeEvent} to its property change listeners.
* </li>
* <li>
- * If any of the model's properties change, it fires a ChangeEvent to its
- * ChangeListeners, which include the slider.
+ * If any of the model's properties change, it fires a {@link ChangeEvent} to
+ * its listeners, which include the slider.
* </li>
* <li>
- * If the slider receives a ChangeEvent from its model, it will propagate the
- * ChangeEvent to its ChangeListeners, with the ChangeEvent's "source"
+ * If the slider receives a {@link ChangeEvent} from its model, it will
+ * propagate the event to its own change listeners, with the event's "source"
* property set to refer to the slider, rather than the model.
* </li>
* </ul>
@@ -112,21 +112,19 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
ImageObserver,
MenuContainer, Serializable
{
- /** DOCUMENT ME! */
private static final long serialVersionUID = -1441275936141218479L;
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JSlider</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and needs to be implemented
- // properly.
protected class AccessibleJSlider extends JComponent.AccessibleJComponent
implements AccessibleValue
{
private static final long serialVersionUID = -6301740148041106789L;
/**
- * Creates a new AccessibleJSlider object.
+ * Creates a new <code>AccessibleJSlider</code> instance.
*/
protected AccessibleJSlider()
{
@@ -134,75 +132,97 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * DOCUMENT ME!
+ * Returns a set containing the current state of the {@link JSlider}
+ * component.
*
- * @return DOCUMENT ME!
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null;
+ AccessibleStateSet result = super.getAccessibleStateSet();
+ if (orientation == JSlider.HORIZONTAL)
+ result.add(AccessibleState.HORIZONTAL);
+ else if (orientation == JSlider.VERTICAL)
+ result.add(AccessibleState.VERTICAL);
+ return result;
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JSlider</code> component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#SLIDER}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.SLIDER;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values for the {@link JSlider}. Since this class implements
+ * {@link AccessibleValue}, it returns itself.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The current value of the {@link JSlider} component.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(getValue());
}
/**
- * setCurrentAccessibleValue
+ * Sets the current value of the {@link JSlider} component and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link AccessibleContext#ACCESSIBLE_VALUE_PROPERTY}) to all registered
+ * listeners. If the supplied value is <code>null</code>, this method
+ * does nothing and returns <code>false</code>.
*
- * @param value0 TODO
+ * @param value the new slider value (<code>null</code> permitted).
*
- * @return boolean
+ * @return <code>true</code> if the slider value is updated, and
+ * <code>false</code> otherwise.
*/
- public boolean setCurrentAccessibleValue(Number value0)
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false;
+ if (value == null)
+ return false;
+ Number oldValue = getCurrentAccessibleValue();
+ setValue(value.intValue());
+ firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, oldValue,
+ new Integer(getValue()));
+ return true;
}
/**
- * getMinimumAccessibleValue
+ * Returns the minimum value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The minimum value of the {@link JSlider} component.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(getMinimum());
}
/**
- * getMaximumAccessibleValue
+ * Returns the maximum value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The maximum value of the {@link JSlider} component.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(getMaximum());
}
}
@@ -221,33 +241,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
*/
private transient Dictionary labelTable;
- /** The model used to describe the slider. */
+ /** The model used to store the slider's range and current value. */
protected BoundedRangeModel sliderModel;
- /** The space between major ticks. */
+ /** The space/distance between major ticks. */
protected int majorTickSpacing;
- /** The space between minor ticks. */
+ /** The space/distance between minor ticks. */
protected int minorTickSpacing;
/** Whether the slider snaps its values to ticks. */
protected boolean snapToTicks = false;
- /** The orientation of the slider. */
+ /** The orientation (horizontal or vertical) of the slider. */
protected int orientation = HORIZONTAL;
/** Whether the slider is inverted. */
private transient boolean isInverted;
- /** The ChangeListener that listens to the model. */
+ /**
+ * The listener that monitors the slider's model and forwards events to the
+ * slider's listeners (see <code>createChangeListener()</code>).
+ */
protected ChangeListener changeListener;
- /** The ChangeEvent that is passed to all listeners of this slider. */
+ /** The change event that is passed to all listeners of this slider. */
protected transient ChangeEvent changeEvent;
/**
- * Creates a new horizontal JSlider object with a minimum of 0, a maximum of
- * 100, and a value of 50.
+ * Creates a new horizontal <code>JSlider</code> instance with a minimum of
+ * 0, a maximum of 100, and a value of 50.
*/
public JSlider()
{
@@ -255,8 +278,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new JSlider object with the given orientation and a minimum of
- * 0, a maximum of 100, and a value of 50.
+ * Creates a new <code>JSlider</code> instance with the given orientation
+ * and a minimum of 0, a maximum of 100, and a value of 50.
*
* @param orientation The orientation of the slider ({@link #HORIZONTAL} or
* {@link #VERTICAL}).
@@ -270,12 +293,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given maximum and
- * minimum and a value that is halfway between the minimum and the
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * maximum and minimum and a value that is halfway between the minimum and the
* maximum.
*
- * @param minimum The minimum value of the JSlider.
- * @param maximum The maximum value of the JSlider.
+ * @param minimum The minimum value.
+ * @param maximum The maximum value.
+ *
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int minimum, int maximum)
{
@@ -283,12 +309,17 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given minimum, maximum,
- * and value.
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * minimum, maximum, and value.
*
- * @param minimum The minimum value of the JSlider.
- * @param maximum The maximum value of the JSlider.
- * @param value The initial value of the JSlider.
+ * @param minimum The minimum value.
+ * @param maximum The maximum value.
+ * @param value The initial value.
+ *
+ * @throws IllegalArgumentException if <code>value</code> is not in the
+ * specified range.
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int minimum, int maximum, int value)
{
@@ -296,8 +327,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new JSlider object with the given orientation, minimum,
- * maximum, and value.
+ * Creates a new <code>JSlider</code> instance with the given orientation,
+ * minimum, maximum, and value.
*
* @param orientation The orientation of the slider ({@link #HORIZONTAL} or
* {@link #VERTICAL}).
@@ -306,13 +337,18 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
* @param value The initial value of the JSlider.
*
* @throws IllegalArgumentException if <code>orientation</code> is not one of
- * the specified values.
+ * the specified values.
+ * @throws IllegalArgumentException if <code>value</code> is not in the
+ * specified range.
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int orientation, int minimum, int maximum, int value)
{
sliderModel = new DefaultBoundedRangeModel(value, 0, minimum, maximum);
if (orientation != HORIZONTAL && orientation != VERTICAL)
- throw new IllegalArgumentException(orientation + " is not a legal orientation");
+ throw new IllegalArgumentException(orientation
+ + " is not a legal orientation");
this.orientation = orientation;
changeListener = createChangeListener();
sliderModel.addChangeListener(changeListener);
@@ -320,7 +356,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given model.
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * model.
*
* @param model The model (<code>null</code> not permitted).
*
@@ -335,9 +372,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the current value of the slider.
+ * Returns the slider's value (from the slider's model).
*
- * @return The value of the slider stored in the model.
+ * @return The value of the slider.
+ *
+ * @see #setValue(int)
*/
public int getValue()
{
@@ -345,9 +384,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the value of the slider.
+ * Sets the slider's value and sends a {@link ChangeEvent} to all
+ * registered listeners. Note that the model will fire a change event to all
+ * of its registered listeners first (with the model as the event source) and
+ * then the slider will fire another change event to all of its registered
+ * listeners (this time with the slider as the event source).
*
- * @param value The slider's new value.
+ * @param value the new value.
+ *
+ * @see #getValue()
*/
public void setValue(int value)
{
@@ -355,7 +400,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the slider's UI delegate.
+ * Returns the slider's UI delegate.
*
* @return The slider's UI delegate.
*/
@@ -365,9 +410,9 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the slider's UI delegate.
+ * Sets the slider's UI delegate.
*
- * @param ui A SliderUI object to use with this slider.
+ * @param ui the UI delegate.
*/
public void setUI(SliderUI ui)
{
@@ -375,21 +420,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets this slider's UI to the UIManager's default for the
- * current look and feel.
+ * Sets this slider's UI delegate to the default (obtained from the
+ * {@link UIManager}) for the current look and feel.
*/
public void updateUI()
{
setUI((SliderUI) UIManager.getUI(this));
- invalidate();
- repaint();
}
/**
- * This method returns a name to identify which look and feel class will be
- * the UI delegate for the slider.
+ * Returns the suffix (<code>"SliderUI"</code> in this case) used to
+ * determine the class name for a UI delegate that can provide the look and
+ * feel for a <code>JSlider</code>.
*
- * @return The Look and Feel classID. "SliderUI"
+ * @return <code>"SliderUI"</code>.
*/
public String getUIClassID()
{
@@ -397,29 +441,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a ChangeListener for this Slider.
+ * Creates a {@link ChangeListener} that is added to the slider's model and
+ * forwards change events generated by the model to the listeners that are
+ * registered with the <code>JSlider</code> (by calling the
+ * {@link #fireStateChanged} method).
*
- * @return A new ChangeListener.
+ * @return A new listener.
*/
protected ChangeListener createChangeListener()
{
return new ChangeListener()
{
- public void stateChanged(ChangeEvent ce)
- {
- // No need to trigger a repaint since the UI listens to the model
- // as well. All we need to do is pass on the stateChanged event
- // to our listeners.
- fireStateChanged();
- }
+ public void stateChanged(ChangeEvent ce)
+ {
+ // No need to trigger a repaint since the UI listens to the model
+ // as well. All we need to do is pass on the stateChanged event
+ // to our listeners.
+ fireStateChanged();
+ }
};
}
/**
- * This method registers a listener to this slider. The listener will be
- * informed of new ChangeEvents.
+ * Registers a listener with the slider so that it will receive
+ * {@link ChangeEvent} notifications. Note that change events generated
+ * by the slider's model will be forwarded automatically to the slider's
+ * listeners.
*
- * @param listener The listener to register.
+ * @param listener the listener to register.
+ *
+ * @see #removeChangeListener(ChangeListener)
*/
public void addChangeListener(ChangeListener listener)
{
@@ -427,9 +478,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method removes a listener from this slider.
+ * Removes a listener from this slider so that it will no longer receive
+ * {@link ChangeEvent} notifications from the slider.
*
* @param listener The listener to remove.
+ *
+ * @see #addChangeListener(ChangeListener)
*/
public void removeChangeListener(ChangeListener listener)
{
@@ -437,9 +491,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method is called whenever the model fires a ChangeEvent. It should
- * propagate the ChangeEvent to its listeners with a new ChangeEvent that
- * identifies the slider as the source.
+ * Sends a {@link ChangeEvent} to all registered listeners, with this slider
+ * as the source.
*/
protected void fireStateChanged()
{
@@ -448,16 +501,19 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
changeEvent = new ChangeEvent(this);
for (int i = changeListeners.length - 2; i >= 0; i -= 2)
{
- if (changeListeners[i] == ChangeListener.class)
- ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
+ if (changeListeners[i] == ChangeListener.class)
+ ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
}
}
/**
- * This method returns an array of all ChangeListeners listening to this
- * slider.
+ * Returns an array containing all the {@link ChangeListener} instances
+ * registered with this slider. If no listeners are registered, this method
+ * returns an empty array.
*
- * @return An array of ChangeListeners listening to this slider.
+ * @return An array array containing all the {@link ChangeListener} instances
+ * registered with this slider (possibly empty, but never
+ * <code>null</code>).
*/
public ChangeListener[] getChangeListeners()
{
@@ -465,9 +521,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the model of the slider.
+ * Returns the slider's model, which stores the minimum, maximum and current
+ * values.
*
* @return The slider's model.
+ *
+ * @see #setModel(BoundedRangeModel)
*/
public BoundedRangeModel getModel()
{
@@ -475,11 +534,16 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "model" property. It also needs to unregister
- * any listeners to the old model and register any listeners to the new
- * model.
+ * Sets the slider's model and sends a {@link PropertyChangeEvent} (with the
+ * property name "model") to all registered listeners. The change listener
+ * that the slider registered with the original model is removed and added
+ * to the new model (this ensures that {@link ChangeEvent} notifications
+ * generated by the model are automatically forwarded to listeners that are
+ * registered with the slider).
*
* @param model The model to use with the slider.
+ *
+ * @see #getModel()
*/
public void setModel(BoundedRangeModel model)
{
@@ -488,18 +552,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
// and bork the next time it tries to access the model.
if (model != sliderModel)
{
- BoundedRangeModel oldModel = sliderModel;
- sliderModel = model;
- oldModel.removeChangeListener(changeListener);
- sliderModel.addChangeListener(changeListener);
- firePropertyChange("model", oldModel, sliderModel);
+ BoundedRangeModel oldModel = sliderModel;
+ sliderModel = model;
+ oldModel.removeChangeListener(changeListener);
+ sliderModel.addChangeListener(changeListener);
+ firePropertyChange("model", oldModel, sliderModel);
}
}
/**
- * This method returns the minimum value of the slider.
+ * Returns the minimum value of the slider (from the slider's model).
*
* @return The minimum value of the slider.
+ *
+ * @see #setMinimum(int)
*/
public int getMinimum()
{
@@ -507,9 +573,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the minimum value of the slider.
- *
+ * Sets the minimum value of the slider and fires a
+ * {@link PropertyChangeEvent} (with the property name "minimum") to all
+ * registered listeners. Note that:
+ * <p>
+ * <ul>
+ * <li>the minimum value is stored in the slider's model (see
+ * {@link #getModel()});</li>
+ * <li>in addition to the property change event, the slider also fires a
+ * {@link ChangeEvent}.</li>
+ * </ul>
+ *
* @param minimum The minimum value of the slider.
+ *
+ * @see #getMinimum()
*/
public void setMinimum(int minimum)
{
@@ -520,9 +597,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the maximum value of the slider.
+ * Returns the slider's maximum value (obtained from the slider's model).
*
* @return The maximum value of the slider.
+ *
+ * @see #setMaximum(int)
*/
public int getMaximum()
{
@@ -530,9 +609,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the maximum value of the slider.
+ * Sets the maximum value of the slider and fires a
+ * {@link PropertyChangeEvent} (with the property name "maximum") to all
+ * registered listeners. Note that:
+ * <p>
+ * <ul>
+ * <li>the maximum value is stored in the slider's model (see
+ * {@link #getModel()});</li>
+ * <li>in addition to the property change event, the slider also fires a
+ * {@link ChangeEvent}.</li>
+ * </ul>
*
* @param maximum The maximum value of the slider.
+ *
+ * @see #getMaximum()
*/
public void setMaximum(int maximum)
{
@@ -543,10 +633,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns this slider's isAdjusting value which is true if the
- * thumb is being dragged.
+ * Returns the <code>valueIsAdjusting</code> flag from the slider's model.
*
- * @return The slider's isAdjusting value.
+ * @return The <code>valueIsAdjusting</code> flag from the slider's model.
+ *
+ * @see #setValueIsAdjusting(boolean)
*/
public boolean getValueIsAdjusting()
{
@@ -554,9 +645,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the isAdjusting value for the slider.
+ * Sets the <code>valueIsAdjusting</code> flag in the slider's model, and
+ * sends a {@link ChangeEvent} to all registered listeners.
*
- * @param adjusting The slider's isAdjusting value.
+ * @param adjusting the new flag value.
+ *
+ * @see #getValueIsAdjusting()
*/
public void setValueIsAdjusting(boolean adjusting)
{
@@ -564,9 +658,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the extent value for this slider.
+ * Returns the slider's extent value, obtained from the slider's model.
*
- * @return The extent value for this slider.
+ * @return The extent value.
+ *
+ * @see #setExtent(int)
*/
public int getExtent()
{
@@ -574,9 +670,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the extent value for this slider.
+ * Sets the slider's extent value and sends a {@link ChangeEvent} to all
+ * registered listeners. Note that the model will fire a change event to all
+ * of its registered listeners first (with the model as the event source) and
+ * then the slider will fire another change event to all of its registered
+ * listeners (this time with the slider as the event source).
*
* @param extent The extent value for this slider.
+ *
+ * @see #getExtent()
*/
public void setExtent(int extent)
{
@@ -584,9 +686,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the slider orientation.
+ * Returns the orientation of the slider, either {@link JSlider#HORIZONTAL}
+ * or {@link JSlider#VERTICAL}.
*
* @return The orientation of the slider.
+ *
+ * @see #setOrientation(int)
*/
public int getOrientation()
{
@@ -594,28 +699,37 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "orientation" property of this slider. If the
- * orientation is not VERTICAL or HORIZONTAL, this method does nothing.
+ * Sets the orientation for the slider and sends a
+ * {@link PropertyChangeEvent} (with the property name "orientation") to all
+ * registered listeners.
*
- * @param orientation The orientation of this slider.
+ * @param orientation the orientation (one of {@link JSlider#HORIZONTAL} or
+ * {@link JSlider#VERTICAL}).
+ *
+ * @throws IllegalArgumentException if <code>orientation</code> is not one of
+ * the permitted values.
+ *
+ * @see #getOrientation()
*/
public void setOrientation(int orientation)
{
if (orientation != VERTICAL && orientation != HORIZONTAL)
- throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
+ throw new IllegalArgumentException(
+ "orientation must be one of: VERTICAL, HORIZONTAL");
if (orientation != this.orientation)
{
- int oldOrientation = this.orientation;
- this.orientation = orientation;
- firePropertyChange("orientation", oldOrientation,
- this.orientation);
+ int oldOrientation = this.orientation;
+ this.orientation = orientation;
+ firePropertyChange("orientation", oldOrientation, this.orientation);
}
}
/**
- * This method returns the label table for this slider.
+ * Returns the label table for the slider.
*
- * @return The label table for this slider.
+ * @return The label table for the slider (possibly <code>null</code>).
+ *
+ * @see #setLabelTable(Dictionary)
*/
public Dictionary getLabelTable()
{
@@ -623,23 +737,27 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "labelTable" property of this slider.
+ * Sets the table of labels for the slider and sends a
+ * {@link PropertyChangeEvent} (with the property name "labelTable") to all
+ * registered listeners.
*
- * @param table The label table for this slider.
+ * @param table the table of labels (<code>null</code> permitted).
+ *
+ * @see #getLabelTable()
*/
public void setLabelTable(Dictionary table)
{
if (table != labelTable)
{
- Dictionary oldTable = labelTable;
- labelTable = table;
- firePropertyChange("labelTable", oldTable, labelTable);
+ Dictionary oldTable = labelTable;
+ labelTable = table;
+ firePropertyChange("labelTable", oldTable, labelTable);
}
}
/**
- * This method is called to reset UI delegates for the labels in the
- * labelTable to a default for the current look and feel.
+ * Resets the UI delegates for the labels in the <code>labelTable</code> to
+ * the default for the current look and feel.
*/
protected void updateLabelUIs()
{
@@ -647,20 +765,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
return;
for (Enumeration list = labelTable.elements(); list.hasMoreElements();)
{
- JLabel label = (JLabel) list.nextElement();
- label.updateUI();
+ JLabel label = (JLabel) list.nextElement();
+ label.updateUI();
}
}
/**
- * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
- * label table for this slider. The labels will start from the sliders
- * minimum and increase by the increment. Each label will have a text
- * string indicating their integer value.
+ * Creates a hashtable of <code>(Integer, JLabel)</code> pairs that can be
+ * used as a label table for this slider. The labels will start from the
+ * slider's minimum and increase by the increment. Each label will have a text
+ * string indicating its integer value.
*
* @param increment The increment between labels (must be > 0).
*
- * @return A hashtable with the labels and their keys.
+ * @return A hashtable containing the labels.
*
* @throws IllegalArgumentException if <code>increment</code> is not greater
* than zero.
@@ -671,10 +789,10 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
- * label table for this slider. The labels will start from the given start
- * value and increase by the increment. Each label will have a text string
- * indicating its integer value.
+ * Creates a hashtable of <code>(Integer, JLabel)</code> pairs that can be
+ * used as a label table for this slider. The labels will start from the
+ * given start value and increase by the increment. Each label will have a
+ * text string indicating its integer value.
*
* @param increment The increment between labels (must be > 0).
* @param start The value to start from.
@@ -699,29 +817,29 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
for (int i = start; i <= max; i += increment)
{
- label = new JLabel(String.valueOf(i));
- label.setVerticalAlignment(CENTER);
- label.setHorizontalAlignment(CENTER);
-
- // Make sure these labels have the width and height
- // they want.
- dim = label.getPreferredSize();
- label.setBounds(label.getX(), label.getY(),
- (int) dim.getWidth(),
- (int) dim.getHeight());
- table.put(new Integer(i), label);
+ label = new JLabel(String.valueOf(i));
+ label.setVerticalAlignment(CENTER);
+ label.setHorizontalAlignment(CENTER);
+
+ // Make sure these labels have the width and height
+ // they want.
+ dim = label.getPreferredSize();
+ label.setBounds(label.getX(), label.getY(),
+ (int) dim.getWidth(),
+ (int) dim.getHeight());
+ table.put(new Integer(i), label);
}
return table;
}
/**
- * This method returns whether the slider is inverted. Horizontal sliders
- * that are not inverted will have the minimums on the left. If they are
- * inverted, the minimums will be on the right. Vertical sliders that are
- * not inverted will have the minimums at the bottom. If they are inverted,
- * the minimums will be at the top.
+ * Returns the flag that controls whether or not the value scale for the
+ * slider is inverted (the default value is <code>false</code>).
*
- * @return Whether this slider is inverted.
+ * @return The flag that controls whether or not the value scale for the
+ * slider is inverted.
+ *
+ * @see #setInverted(boolean)
*/
public boolean getInverted()
{
@@ -729,30 +847,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "inverted" property for this slider.Horizontal
- * sliders that are not inverted will have the minimums on the left. If
- * they are inverted, the minimums will be on the right. Vertical sliders
- * that are not inverted will have the minimums at the bottom. If they are
- * inverted, the minimums will be at the top. However, if the slider's
- * componentOrientation is set to RIGHT_TO_LEFT, then everything gets
- * reversed again.
+ * Sets the flag that controls whether or not the value scale for the
+ * slider is inverted and, if the new flag value is different to the old flag
+ * value, sends a {@link PropertyChangeEvent} to all registered listeners.
+ * Typically, a horizontal slider will display a scale that increases from
+ * left to right, but this is reversed if the 'inverted' flag is set to
+ * <code>true</code>. Similarly, a vertical slider will display a scale that
+ * increases from bottom to top, and this is reversed if the 'inverted' flag
+ * is set to <code>true</code>.
*
- * @param inverted Whether the slider should be inverted.
+ * @param inverted the new flag value.
+ *
+ * @see #getInverted()
*/
public void setInverted(boolean inverted)
{
if (isInverted != inverted)
{
- boolean oldInverted = isInverted;
- isInverted = inverted;
- firePropertyChange("inverted", oldInverted, isInverted);
+ boolean oldInverted = isInverted;
+ isInverted = inverted;
+ firePropertyChange("inverted", oldInverted, isInverted);
}
}
/**
- * This method returns the amount of units between each major tick mark.
+ * Returns the distance between major tick marks along the slider's value
+ * scale.
*
* @return The amount of units between each major tick mark.
+ *
+ * @see #setMajorTickSpacing(int)
*/
public int getMajorTickSpacing()
{
@@ -760,26 +884,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "majorTickSpacing" property for this slider. The
- * major tick spacing is the amount of units between each major tick mark.
+ * Sets the distance between major tick marks along the slider's value scale,
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * "majorTickSpacing") to all registered listeners.
*
- * @param spacing The amount of units between each major tick mark.
+ * @param spacing the distance between major tick marks.
+ *
+ * @see #getMajorTickSpacing()
*/
public void setMajorTickSpacing(int spacing)
{
if (majorTickSpacing != spacing)
{
- int oldSpacing = majorTickSpacing;
- majorTickSpacing = spacing;
- firePropertyChange("majorTickSpacing", oldSpacing,
- majorTickSpacing);
+ int oldSpacing = majorTickSpacing;
+ majorTickSpacing = spacing;
+ firePropertyChange("majorTickSpacing", oldSpacing, majorTickSpacing);
}
}
/**
- * This method returns the amount of units between each minor tick mark.
+ * Returns the distance between minor tick marks along the slider's value
+ * scale.
*
- * @return The amount of units between each minor tick mark.
+ * @return The distance between minor tick marks along the slider's value
+ * scale.
+ *
+ * @see #setMinorTickSpacing(int)
*/
public int getMinorTickSpacing()
{
@@ -787,28 +917,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "minorTickSpacing" property for this slider. The
- * minor tick spacing is the amount of units between each minor tick mark.
+ * Sets the distance between minor tick marks along the slider's value scale,
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * "minorTickSpacing") to all registered listeners.
*
- * @param spacing The amount of units between each minor tick mark.
+ * @param spacing the distance between minor tick marks.
+ *
+ * @see #getMinorTickSpacing()
*/
public void setMinorTickSpacing(int spacing)
{
if (minorTickSpacing != spacing)
{
- int oldSpacing = minorTickSpacing;
- minorTickSpacing = spacing;
- firePropertyChange("minorTickSpacing", oldSpacing,
- minorTickSpacing);
+ int oldSpacing = minorTickSpacing;
+ minorTickSpacing = spacing;
+ firePropertyChange("minorTickSpacing", oldSpacing, minorTickSpacing);
}
}
/**
- * This method returns whether this slider is snapping to ticks. Sliders
- * that snap to ticks will automatically move the thumb to the nearest tick
- * mark.
+ * Returns the flag that controls whether the slider thumb will snap to ticks.
+ * Sliders that snap to ticks will automatically move the thumb to the
+ * nearest tick mark.
*
- * @return Whether this slider snaps to ticks.
+ * @return <code>true</code> if the slider thumb automatically.
+ *
+ * @see #setSnapToTicks(boolean)
*/
public boolean getSnapToTicks()
{
@@ -816,28 +950,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets whether this slider will snap to ticks. Sliders that
- * snap to ticks will automatically move the thumb to the nearest tick
- * mark.
+ * Sets the flag that controls whether the slider thumb will snap to ticks
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * 'snapToTicks') to all registered listeners. Sliders that snap to ticks
+ * will automatically move the thumb to the nearest tick mark.
*
- * @param snap Whether this slider snaps to ticks.
+ * @param snap the new flag value.
+ *
+ * @see #getSnapToTicks()
*/
public void setSnapToTicks(boolean snap)
{
if (snap != snapToTicks)
{
- snapToTicks = snap;
- firePropertyChange("snapToTicks", !snap, snap);
+ snapToTicks = snap;
+ firePropertyChange("snapToTicks", !snap, snap);
}
}
/**
- * This method returns whether the slider will paint its tick marks. In
- * addition to setting this property to true, one of minor tick spacing or
- * major tick spacing must be set to a value greater than 0 in order for
- * ticks to be painted.
+ * Returns the flag that controls whether or not tick marks are painted along
+ * the slider's value scale.
*
- * @return Whether ticks will be painted.
+ * @return <code>true</code> if tick marks should be painted, and
+ * <code>false</code> if tick marks should not be painted.
+ *
+ * @see #setPaintTicks(boolean)
*/
public boolean getPaintTicks()
{
@@ -845,27 +983,33 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "paintTicks" property for this slider. In
- * addition to setting this property to true, one of minor tick spacing or
- * major tick spacing must be set to a value greater than 0 in order for
- * ticks to be painted.
+ * Sets the flag that controls whether or not tick marks are painted along
+ * the slider's value scale, and sends a {@link PropertyChangeEvent} (with
+ * the property name "paintTicks") to all registered listeners. In
+ * addition to setting this property to <code>true</code>, one or both of the
+ * minor tick spacing and major tick spacing attributes must be set to a
+ * value greater than 0 in order for ticks to be painted.
*
* @param paint Whether ticks will be painted.
+ *
+ * @see #getPaintTicks()
*/
public void setPaintTicks(boolean paint)
{
if (paint != paintTicks)
{
- boolean oldPaintTicks = paintTicks;
- paintTicks = paint;
- firePropertyChange("paintTicks", oldPaintTicks, paintTicks);
+ boolean oldPaintTicks = paintTicks;
+ paintTicks = paint;
+ firePropertyChange("paintTicks", oldPaintTicks, paintTicks);
}
}
/**
- * This method returns whether the track will be painted.
+ * Returns the flag that controls whether or not the track is painted.
*
* @return Whether the track will be painted.
+ *
+ * @see #setPaintTrack(boolean)
*/
public boolean getPaintTrack()
{
@@ -878,6 +1022,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
* registered listeners.
*
* @param paint Whether the track will be painted.
+ *
+ * @see #getPaintTrack()
*/
public void setPaintTrack(boolean paint)
{
@@ -889,9 +1035,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns whether labels will be painted.
+ * Returns the flag that controls whether or not labels are painted for the
+ * tick marks along the slider.
*
* @return Whether labels will be painted.
+ *
+ * @see #setPaintLabels(boolean)
*/
public boolean getPaintLabels()
{
@@ -899,36 +1048,62 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "paintLabels" property.
+ * Sets the flag that controls whether or not labels are painted for the
+ * tick marks along the slider and sends a {@link PropertyChangeEvent} (with
+ * the property name "paintLabels") to all registered listeners.
*
* @param paint Whether labels will be painted.
+ *
+ * @see #getPaintLabels()
*/
public void setPaintLabels(boolean paint)
{
if (paint != paintLabels)
{
- paintLabels = paint;
- if (paint && majorTickSpacing > 0)
+ paintLabels = paint;
+ if (paint && majorTickSpacing > 0 && labelTable == null)
labelTable = createStandardLabels(majorTickSpacing);
- firePropertyChange("paintLabels", !paint, paint);
+ firePropertyChange("paintLabels", !paint, paint);
}
}
/**
- * This method is used primarily for debugging purposes and returns a string
- * that can be used to represent this slider.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JSlider</code>.
*
- * @return A string representing this slider.
+ * @return A string describing the attributes of this <code>JSlider</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JSlider";
+ String superParamStr = super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",isInverted=").append(getInverted());
+ sb.append(",majorTickSpacing=").append(getMajorTickSpacing());
+ sb.append(",minorTickSpacing=").append(getMinorTickSpacing());
+ sb.append(",orientation=");
+ if (orientation == HORIZONTAL)
+ sb.append("HORIZONTAL");
+ else
+ sb.append("VERTICAL");
+ sb.append(",paintLabels=").append(getPaintLabels());
+ sb.append(",paintTicks=").append(getPaintTicks());
+ sb.append(",paintTrack=").append(getPaintTrack());
+ sb.append(",snapToTicks=").append(getSnapToTicks());
+
+ // the following is output by the reference implementation. We don't
+ // strictly need to replicate this. Perhaps it has some meaning, but
+ // I couldn't determine it yet...
+ sb.append(",snapToValue=true");
+
+ return superParamStr + sb.toString();
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JSlider</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of {@link AccessibleJSlider}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/JSpinner.java b/libjava/classpath/javax/swing/JSpinner.java
index 882d216..70045ed 100644
--- a/libjava/classpath/javax/swing/JSpinner.java
+++ b/libjava/classpath/javax/swing/JSpinner.java
@@ -106,6 +106,10 @@ public class JSpinner extends JComponent
add(ftf);
ftf.setValue(spinner.getValue());
ftf.addPropertyChangeListener(this);
+ if(getComponentOrientation().isLeftToRight())
+ ftf.setHorizontalAlignment(JTextField.RIGHT);
+ else
+ ftf.setHorizontalAlignment(JTextField.LEFT);
spinner.addChangeListener(this);
}
diff --git a/libjava/classpath/javax/swing/JSplitPane.java b/libjava/classpath/javax/swing/JSplitPane.java
index dc75dfe..c115121 100644
--- a/libjava/classpath/javax/swing/JSplitPane.java
+++ b/libjava/classpath/javax/swing/JSplitPane.java
@@ -1,5 +1,5 @@
/* JSplitPane.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,10 +40,12 @@ package javax.swing;
import java.awt.Component;
import java.awt.Graphics;
+import java.beans.PropertyChangeEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.plaf.SplitPaneUI;
@@ -56,18 +58,18 @@ import javax.swing.plaf.SplitPaneUI;
*/
public class JSplitPane extends JComponent implements Accessible
{
+
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JSplitPane</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and must be implemented
- // properly.
protected class AccessibleJSplitPane extends JComponent.AccessibleJComponent
implements AccessibleValue
{
private static final long serialVersionUID = -1788116871416305366L;
/**
- * Creates a new AccessibleJSplitPane object.
+ * Creates a new <code>AccessibleJSplitPane</code> instance.
*/
protected AccessibleJSplitPane()
{
@@ -75,75 +77,101 @@ public class JSplitPane extends JComponent implements Accessible
}
/**
- * DOCUMENT ME!
+ * Returns a set containing the current state of the {@link JSplitPane}
+ * component.
*
- * @return DOCUMENT ME!
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null;
+ AccessibleStateSet result = super.getAccessibleStateSet();
+ if (getOrientation() == HORIZONTAL_SPLIT)
+ {
+ result.add(AccessibleState.HORIZONTAL);
+ }
+ else if (getOrientation() == VERTICAL_SPLIT)
+ {
+ result.add(AccessibleState.VERTICAL);
+ }
+ return result;
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JSplitPane</code> component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#SPLIT_PANE}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.SPLIT_PANE;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values for the {@link JSlider}. Since this class implements
+ * {@link AccessibleValue}, it returns itself.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current divider location for the {@link JSplitPane}
+ * component, as an {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The current divider location.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(getDividerLocation());
}
/**
- * DOCUMENT ME!
+ * Sets the divider location for the {@link JSplitPane} component and sends
+ * a {@link PropertyChangeEvent} (with the property name
+ * {@link AccessibleContext#ACCESSIBLE_VALUE_PROPERTY}) to all registered
+ * listeners. If the supplied value is <code>null</code>, this method
+ * does nothing and returns <code>false</code>.
*
- * @param value0 DOCUMENT ME!
+ * @param value the new slider value (<code>null</code> permitted).
*
- * @return DOCUMENT ME!
+ * @return <code>true</code> if the slider value is updated, and
+ * <code>false</code> otherwise.
*/
- public boolean setCurrentAccessibleValue(Number value0)
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false;
+ if (value == null)
+ return false;
+ Number oldValue = getCurrentAccessibleValue();
+ setDividerLocation(value.intValue());
+ firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, oldValue,
+ new Integer(value.intValue()));
+ return true;
}
/**
- * DOCUMENT ME!
+ * Returns the minimum divider location for the {@link JSplitPane}
+ * component, as an {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The minimum divider location.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(getMinimumDividerLocation());
}
/**
- * DOCUMENT ME!
+ * Returns the maximum divider location for the {@link JSplitPane}
+ * component, as an {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The maximum divider location.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(getMaximumDividerLocation());
}
}
@@ -223,6 +251,24 @@ public class JSplitPane extends JComponent implements Accessible
private transient double resizeWeight;
/**
+ * Indicates if the dividerSize property has been set by a client program or
+ * by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientDividerSizeSet = false;
+
+ /**
+ * Indicates if the oneTouchExpandable property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientOneTouchExpandableSet = false;
+
+ /**
* Creates a new JSplitPane object with the given orientation, layout mode,
* and left and right components.
*
@@ -353,9 +399,11 @@ public class JSplitPane extends JComponent implements Accessible
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JSplitPane</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of
+ * {@link AccessibleJSplitPane}).
*/
public AccessibleContext getAccessibleContext()
{
@@ -541,14 +589,27 @@ public class JSplitPane extends JComponent implements Accessible
}
/**
- * This method returns a String that describes this JSplitPane. The string
- * is primarily used for debugging purposes.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JSplitPane</code>.
*
- * @return A String used for debugging purposes.
+ * @return A string describing the attributes of this <code>JSplitPane</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JSplitPane";
+ // FIXME: the next line can be restored once PR27208 is fixed
+ String superParamStr = ""; //super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",continuousLayout=").append(isContinuousLayout());
+ sb.append(",dividerSize=").append(getDividerSize());
+ sb.append(",lastDividerLocation=").append(getLastDividerLocation());
+ sb.append(",oneTouchExpandable=").append(isOneTouchExpandable());
+ sb.append(",orientation=");
+ if (orientation == HORIZONTAL_SPLIT)
+ sb.append("HORIZONTAL_SPLIT");
+ else
+ sb.append("VERTICAL_SPLIT");
+ return superParamStr + sb.toString();
}
/**
@@ -652,16 +713,23 @@ public class JSplitPane extends JComponent implements Accessible
/**
* This method sets the location of the divider.
- *
- * @param location The location of the divider.
+ *
+ * @param location The location of the divider. The negative value forces to
+ * compute the new location from the preferred sizes of the split
+ * pane components.
*/
public void setDividerLocation(int location)
{
if (ui != null && location != getDividerLocation())
{
- int oldLocation = getDividerLocation();
- ((SplitPaneUI) ui).setDividerLocation(this, location);
- firePropertyChange(DIVIDER_LOCATION_PROPERTY, oldLocation, location);
+ int oldLocation = getDividerLocation();
+ if (location < 0)
+ ((SplitPaneUI) ui).resetToPreferredSizes(this);
+ else
+ ((SplitPaneUI) ui).setDividerLocation(this, location);
+
+ firePropertyChange(DIVIDER_LOCATION_PROPERTY, oldLocation,
+ getDividerLocation());
}
}
@@ -672,6 +740,7 @@ public class JSplitPane extends JComponent implements Accessible
*/
public void setDividerSize(int newSize)
{
+ clientDividerSizeSet = true;
if (newSize != dividerSize)
{
int oldSize = dividerSize;
@@ -723,6 +792,7 @@ public class JSplitPane extends JComponent implements Accessible
*/
public void setOneTouchExpandable(boolean newValue)
{
+ clientOneTouchExpandableSet = true;
if (newValue != oneTouchExpandable)
{
boolean oldValue = oneTouchExpandable;
@@ -733,11 +803,15 @@ public class JSplitPane extends JComponent implements Accessible
}
/**
- * This method sets the orientation of the JSplitPane.
+ * Sets the orientation for the <code>JSplitPane</code> and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link #ORIENTATION_PROPERTY}) to all registered listeners.
*
- * @param orientation The orientation of the JSplitPane.
+ * @param orientation the orientation (either {@link #HORIZONTAL_SPLIT}
+ * or {@link #VERTICAL_SPLIT}).
*
- * @throws IllegalArgumentException DOCUMENT ME!
+ * @throws IllegalArgumentException if <code>orientation</code> is not one of
+ * the listed values.
*/
public void setOrientation(int orientation)
{
@@ -764,7 +838,14 @@ public class JSplitPane extends JComponent implements Accessible
*/
public void setResizeWeight(double value)
{
- resizeWeight = value;
+ if (value < 0.0 || value > 1.0)
+ throw new IllegalArgumentException("Value outside permitted range.");
+ if (this.resizeWeight != value)
+ {
+ double old = resizeWeight;
+ resizeWeight = value;
+ firePropertyChange(RESIZE_WEIGHT_PROPERTY, old, value);
+ }
}
/**
@@ -810,8 +891,6 @@ public class JSplitPane extends JComponent implements Accessible
public void updateUI()
{
setUI((SplitPaneUI) UIManager.getUI(this));
- invalidate();
- repaint();
}
/**
@@ -824,4 +903,42 @@ public class JSplitPane extends JComponent implements Accessible
{
return "SplitPaneUI";
}
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("dividerSize"))
+ {
+ if (! clientDividerSizeSet)
+ {
+ setDividerSize(((Integer) value).intValue());
+ clientDividerSizeSet = false;
+ }
+ }
+ else if (propertyName.equals("oneTouchExpandable"))
+ {
+ if (! clientOneTouchExpandableSet)
+ {
+ setOneTouchExpandable(((Boolean) value).booleanValue());
+ clientOneTouchExpandableSet = false;
+ }
+ }
+ else
+ {
+ super.setUIProperty(propertyName, value);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/JTabbedPane.java b/libjava/classpath/javax/swing/JTabbedPane.java
index 3c91a5e..34ab8ee 100644
--- a/libjava/classpath/javax/swing/JTabbedPane.java
+++ b/libjava/classpath/javax/swing/JTabbedPane.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
@@ -102,6 +104,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @param e the change event describing the change
*/
public void stateChanged(ChangeEvent e)
+ throws NotImplementedException
{
// Implement this properly.
}
@@ -113,6 +116,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @return the accessible role of the <code>JTabbedPane</code>
*/
public AccessibleRole getAccessibleRole()
+ throws NotImplementedException
{
return null;
}
@@ -125,6 +129,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* <code>JTabbedPane</code>
*/
public int getAccessibleChildrenCount()
+ throws NotImplementedException
{
return 0;
}
@@ -153,6 +158,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @return the current selection state of the <code>JTabbedPane</code>
*/
public AccessibleSelection getAccessibleSelection()
+ throws NotImplementedException
{
return null;
}
@@ -169,6 +175,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* this location
*/
public Accessible getAccessibleAt(Point p)
+ throws NotImplementedException
{
return null;
}
@@ -183,6 +190,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* <code>JTabbedPane</code>
*/
public int getAccessibleSelectionCount()
+ throws NotImplementedException
{
return 0;
}
@@ -195,6 +203,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @return DOCUMENT ME!
*/
public Accessible getAccessibleSelection(int i)
+ throws NotImplementedException
{
return null;
}
@@ -207,6 +216,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @return DOCUMENT ME!
*/
public boolean isAccessibleChildSelected(int i)
+ throws NotImplementedException
{
return false;
}
@@ -217,6 +227,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @param i DOCUMENT ME!
*/
public void addAccessibleSelection(int i)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -227,6 +238,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* @param i DOCUMENT ME!
*/
public void removeAccessibleSelection(int i)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -235,6 +247,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* DOCUMENT ME!
*/
public void clearAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -243,6 +256,7 @@ public class JTabbedPane extends JComponent implements Serializable,
* DOCUMENT ME!
*/
public void selectAllAccessibleSelection()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -379,7 +393,12 @@ public class JTabbedPane extends JComponent implements Serializable,
*/
public Color getBackground()
{
- return bg;
+ Color background;
+ if (bg == null)
+ background = JTabbedPane.this.getBackground();
+ else
+ background = bg;
+ return background;
}
/**
@@ -399,7 +418,12 @@ public class JTabbedPane extends JComponent implements Serializable,
*/
public Color getForeground()
{
- return fg;
+ Color foreground;
+ if (fg == null)
+ foreground = JTabbedPane.this.getForeground();
+ else
+ foreground = fg;
+ return foreground;
}
/**
@@ -585,12 +609,14 @@ public class JTabbedPane extends JComponent implements Serializable,
}
public AccessibleStateSet getAccessibleStateSet()
+ throws NotImplementedException
{
// FIXME: Implement this properly.
return null;
}
public int getAccessibleIndexInParent()
+ throws NotImplementedException
{
// FIXME: Implement this properly.
return 0;
@@ -739,7 +765,6 @@ public class JTabbedPane extends JComponent implements Serializable,
public void updateUI()
{
setUI((TabbedPaneUI) UIManager.getUI(this));
- invalidate();
}
/**
@@ -950,7 +975,11 @@ public class JTabbedPane extends JComponent implements Serializable,
*/
public Component getSelectedComponent()
{
- return getComponentAt(getSelectedIndex());
+ int selectedIndex = getSelectedIndex();
+ Component selected = null;
+ if (selectedIndex >= 0)
+ selected = getComponentAt(selectedIndex);
+ return selected;
}
/**
@@ -1144,8 +1173,45 @@ public class JTabbedPane extends JComponent implements Serializable,
public void removeTabAt(int index)
{
checkIndex(index, 0, tabs.size());
+
+ // We need to adjust the selection if we remove a tab that comes
+ // before the selected tab or if the selected tab is removed.
+ // This decrements the selected index by 1 if any of this is the case.
+ // Note that this covers all cases:
+ // - When the selected tab comes after the removed tab, this simply
+ // adjusts the selection so that after the removal the selected tab
+ // is still the same.
+ // - When we remove the currently selected tab, then the tab before the
+ // selected tab gets selected.
+ // - When the last tab is removed, then we have an index==0, which gets
+ // decremented to -1, which means no selection, which is 100% perfect.
+ int selectedIndex = getSelectedIndex();
+ if (selectedIndex >= index)
+ setSelectedIndex(selectedIndex - 1);
+
+ Component comp = getComponentAt(index);
+
+ // Remove the tab object.
tabs.remove(index);
- getComponentAt(index).show();
+
+ // Remove the component. I think we cannot assume that the tab order
+ // is equal to the component order, so we iterate over the children
+ // here to find the and remove the correct component.
+ if (comp != null)
+ {
+ Component[] children = getComponents();
+ for (int i = children.length - 1; i >= 0; --i)
+ {
+ if (children[i] == comp)
+ {
+ super.remove(i);
+ comp.setVisible(true);
+ break;
+ }
+ }
+ }
+ revalidate();
+ repaint();
}
/**
@@ -1175,7 +1241,8 @@ public class JTabbedPane extends JComponent implements Serializable,
*/
public void removeAll()
{
- for (int i = tabs.size() - 1; i >= 0; i--)
+ setSelectedIndex(-1);
+ for (int i = getTabCount() - 1; i >= 0; i--)
removeTabAt(i);
}
diff --git a/libjava/classpath/javax/swing/JTable.java b/libjava/classpath/javax/swing/JTable.java
index fbf7493..3485344 100644
--- a/libjava/classpath/javax/swing/JTable.java
+++ b/libjava/classpath/javax/swing/JTable.java
@@ -1018,19 +1018,7 @@ public class JTable
* The CheckBox that is used for rendering.
*/
private final JCheckBox checkBox = new JCheckBox();
-
- /**
- * The check box must have the text field background and be centered.
- */
- private BooleanCellRenderer()
- {
- // Render the checkbox identically as the text field.
- JTextField f = new JTextField();
- checkBox.setForeground(f.getForeground());
- checkBox.setBackground(f.getBackground());
- checkBox.setHorizontalAlignment(SwingConstants.CENTER);
- }
-
+
/**
* Get the check box.
*/
@@ -1041,14 +1029,13 @@ public class JTable
/**
* Returns the component that is used for rendering the value.
- *
+ *
* @param table the JTable
* @param value the value of the object
* @param isSelected is the cell selected?
* @param hasFocus has the cell the focus?
* @param row the row to render
* @param column the cell to render
- *
* @return this component (the default table cell renderer)
*/
public Component getTableCellRendererComponent(JTable table, Object value,
@@ -1056,6 +1043,32 @@ public class JTable
boolean hasFocus, int row,
int column)
{
+ if (isSelected)
+ {
+ checkBox.setBackground(table.getSelectionBackground());
+ checkBox.setForeground(table.getSelectionForeground());
+ }
+ else
+ {
+ checkBox.setBackground(table.getBackground());
+ checkBox.setForeground(table.getForeground());
+ }
+
+ if (hasFocus)
+ {
+ checkBox.setBorder(
+ UIManager.getBorder("Table.focusCellHighlightBorder"));
+ if (table.isCellEditable(row, column))
+ {
+ checkBox.setBackground(
+ UIManager.getColor("Table.focusCellBackground"));
+ checkBox.setForeground(
+ UIManager.getColor("Table.focusCellForeground"));
+ }
+ }
+ else
+ checkBox.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
// Null is rendered as false.
if (value == null)
checkBox.setSelected(false);
@@ -1233,8 +1246,12 @@ public class JTable
{
Icon iconValue = (Icon) value;
setIcon(iconValue);
- setText("");
}
+ else
+ {
+ setIcon(null);
+ }
+ setText("");
return this;
}
}
@@ -1253,22 +1270,18 @@ public class JTable
*/
TableTextField()
{
- setBorder(null);
+ setBorder(BorderFactory.createLineBorder(getGridColor(), 2));
}
/**
- * Scroll the table, making the given rectangle of this component
- * visible. Mind the component position with relate to the table.
* With not this method overridden, the scroll pane scrolls to the
* top left cornec (untranslated position of the caret) after the first
- * keystroke.
+ * keystroke.
*/
public void scrollRectToVisible(Rectangle r)
{
- // In private class we known that the rectangle data will not be
- // reused and we need not to clone it.
- r.translate(getX(), getY());
- super.scrollRectToVisible(r);
+ // Do nothing here. If the editing session starts outside the visible
+ // bounds, the editCellAt will scroll.
}
}
@@ -1317,7 +1330,6 @@ public class JTable
*/
public static final int AUTO_RESIZE_LAST_COLUMN = 3;
-
/**
* A table mapping {@link java.lang.Class} objects to
* {@link TableCellEditor} objects. This table is consulted by the
@@ -1567,6 +1579,15 @@ public class JTable
private Rectangle rectCache = new Rectangle();
/**
+ * Indicates if the rowHeight property has been set by a client program or by
+ * the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientRowHeightSet = false;
+
+ /**
* Creates a new <code>JTable</code> instance.
*/
public JTable ()
@@ -1643,13 +1664,22 @@ public class JTable
public JTable (TableModel dm, TableColumnModel cm, ListSelectionModel sm)
{
boolean autoCreate = false;
+ TableColumnModel columnModel;
if (cm != null)
- setColumnModel(cm);
+ columnModel = cm;
else
{
- setColumnModel(createDefaultColumnModel());
+ columnModel = createDefaultColumnModel();
autoCreate = true;
- }
+ }
+
+ // Initialise the intercelar spacing before setting the column model to
+ // avoid firing unnecessary events.
+ // The initial incellar spacing is new Dimenstion(1,1).
+ rowMargin = 1;
+ columnModel.setColumnMargin(1);
+ setColumnModel(columnModel);
+
setSelectionModel(sm == null ? createDefaultSelectionModel() : sm);
setModel(dm == null ? createDefaultDataModel() : dm);
setAutoCreateColumnsFromModel(autoCreate);
@@ -1709,7 +1739,6 @@ public class JTable
this.showVerticalLines = true;
this.editingColumn = -1;
this.editingRow = -1;
- setIntercellSpacing(new Dimension(1,1));
}
/**
@@ -1856,13 +1885,38 @@ public class JTable
}
/**
- * Invoked when the the column selection changes.
+ * Invoked when the the column selection changes, repaints the changed
+ * columns. It is not recommended to override this method, register the
+ * listener instead.
*/
public void columnSelectionChanged (ListSelectionEvent event)
{
- repaint();
+ // Does not make sense for the table with the single column.
+ if (getColumnCount() < 2)
+ return;
+
+ int x0 = 0;
+
+ // We must limit the indices to the bounds of the JTable's model, because
+ // we might get values of -1 or greater then columnCount in the case
+ // when columns get removed.
+ int idx0 = Math.max(0, Math.min(getColumnCount() - 1,
+ event.getFirstIndex()));
+ int idxn = Math.max(0, Math.min(getColumnCount() - 1,
+ event.getLastIndex()));
+ int i;
+
+ for (i = 0; i < idx0; i++)
+ x0 += columnModel.getColumn(i).getWidth();
+
+ int xn = x0;
+
+ for (i = idx0; i <= idxn; i++)
+ xn += columnModel.getColumn(i).getWidth();
+
+ repaint(x0, 0, xn-x0, getHeight());
}
-
+
/**
* Invoked when the editing is cancelled.
*/
@@ -1910,9 +1964,33 @@ public class JTable
// affect the size parameters of the JTable. Otherwise we only need
// to perform a repaint to update the view.
if (event == null || event.getType() == TableModelEvent.INSERT)
- revalidate();
+ {
+ // Sync selection model with data model.
+ if (event != null)
+ {
+ int first = event.getFirstRow();
+ if (first < 0)
+ first = 0;
+ int last = event.getLastRow();
+ if (last < 0)
+ last = getRowCount() - 1;
+ selectionModel.insertIndexInterval(first, last - first + 1, true);
+ }
+ revalidate();
+ }
if (event == null || event.getType() == TableModelEvent.DELETE)
{
+ // Sync selection model with data model.
+ if (event != null)
+ {
+ int first = event.getFirstRow();
+ if (first < 0)
+ first = 0;
+ int last = event.getLastRow();
+ if (last < 0)
+ last = getRowCount() - 1;
+ selectionModel.removeIndexInterval(first, last);
+ }
if (dataModel.getRowCount() == 0)
clearSelection();
revalidate();
@@ -1921,11 +1999,19 @@ public class JTable
}
/**
- * Invoked when another table row is selected.
+ * Invoked when another table row is selected. It is not recommended
+ * to override thid method, register the listener instead.
*/
public void valueChanged (ListSelectionEvent event)
{
- repaint();
+ // Does not make sense for the table with the single row.
+ if (getRowCount() < 2)
+ return;
+
+ int y_gap = rowMargin;
+ int y0 = (getRowHeight() + y_gap) * (event.getFirstIndex());
+ int yn = (getRowHeight() + y_gap) * (event.getLastIndex()+1);
+ repaint(0, y0, getWidth(), yn-y0);
}
/**
@@ -1938,21 +2024,18 @@ public class JTable
*/
public int columnAtPoint(Point point)
{
- if (point != null)
- {
- int ncols = getColumnCount();
- Dimension gap = getIntercellSpacing();
- TableColumnModel cols = getColumnModel();
- int x = point.x;
+ int ncols = getColumnCount();
+ Dimension gap = getIntercellSpacing();
+ TableColumnModel cols = getColumnModel();
+ int x = point.x;
- for (int i = 0; i < ncols; ++i)
- {
- int width = cols.getColumn(i).getWidth()
- + (gap == null ? 0 : gap.width);
- if (0 <= x && x < width)
- return i;
- x -= width;
- }
+ for (int i = 0; i < ncols; ++i)
+ {
+ int width = cols.getColumn(i).getWidth()
+ + (gap == null ? 0 : gap.width);
+ if (0 <= x && x < width)
+ return i;
+ x -= width;
}
return -1;
}
@@ -1961,8 +2044,7 @@ public class JTable
* Returns index of the row that contains specified point or -1 if this table
* doesn't contain this point.
*
- * @param point
- * point to identify the row
+ * @param point point to identify the row
* @return index of the row that contains specified point or -1 if this table
* doesn't contain this point.
*/
@@ -2004,9 +2086,6 @@ public class JTable
int column,
boolean includeSpacing)
{
- // moveToCellBeingEdited expects the cached value and clones it.
- // If the caching would be removed later, uplate moveToCellBeingEdited
- // as well.
int height = getRowHeight(row);
int width = columnModel.getColumn(column).getWidth();
int x_gap = columnModel.getColumnMargin();
@@ -2020,12 +2099,14 @@ public class JTable
for (int i = 0; i < column; ++i)
x += columnModel.getColumn(i).getWidth();
+
+ Rectangle rect = new Rectangle();
if (includeSpacing)
- rectCache.setBounds(x, y, width, height +y_gap);
+ rect.setBounds(x, y, width, height +y_gap);
else
- rectCache.setBounds(x, y, width - x_gap, height);
- return rectCache;
+ rect.setBounds(x, y, width - x_gap, height);
+ return rect;
}
public void clearSelection()
@@ -2088,26 +2169,39 @@ public class JTable
else
return true;
}
-
- public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
+
+ /**
+ * Return the preferred scrolling amount (in pixels) for the given scrolling
+ * direction and orientation. This method handles a partially exposed row by
+ * returning the distance required to completely expose the item. When
+ * scrolling the top item is completely exposed.
+ *
+ * @param visibleRect the currently visible part of the component.
+ * @param orientation the scrolling orientation
+ * @param direction the scrolling direction (negative - up, positive -down).
+ * The values greater than one means that more mouse wheel or similar
+ * events were generated, and hence it is better to scroll the longer
+ * distance.
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+ public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
+ int direction)
{
- // FIXME: I don't exactly know what sun does here. in both cases they
- // pick values which do *not* simply expose the next cell in a given
- // scroll direction.
+ int h = (rowHeight + rowMargin);
+ int delta = h * direction;
+ // Round so that the top would start from the row boundary
if (orientation == SwingConstants.VERTICAL)
- return direction * rowHeight;
- else
{
- int sum = 0;
- for (int i = 0; i < getColumnCount(); ++i)
- sum += columnModel.getColumn(0).getWidth();
- int inc = getColumnCount() == 0 ? 10 : sum / getColumnCount();
- return direction * inc;
+ // Completely expose the top row
+ int near = ((visibleRect.y + delta + h / 2) / h) * h;
+ int diff = visibleRect.y + delta - near;
+ delta -= diff;
}
+ return delta;
+ // TODO when scrollng horizontally, scroll into the column boundary.
}
-
/**
* Get the cell editor, suitable for editing the given cell. The default
* method requests the editor from the column model. If the column model does
@@ -2372,7 +2466,7 @@ public class JTable
/**
* Get the value of the <code>columnCount</code> property by
- * delegation to the @{link #columnModel} field.
+ * delegation to the {@link #columnModel} field.
*
* @return The current value of the columnCount property
*/
@@ -2383,7 +2477,7 @@ public class JTable
/**
* Get the value of the <code>rowCount</code> property by
- * delegation to the @{link #dataModel} field.
+ * delegation to the {@link #dataModel} field.
*
* @return The current value of the rowCount property
*/
@@ -2404,7 +2498,7 @@ public class JTable
/**
* Get the value of the <code>selectedColumn</code> property by
- * delegation to the @{link #columnModel} field.
+ * delegation to the {@link #columnModel} field.
*
* @return The current value of the selectedColumn property
*/
@@ -2473,7 +2567,7 @@ public class JTable
/**
* Get the value of the <code>selectedColumnCount</code> property by
- * delegation to the @{link #columnModel} field.
+ * delegation to the {@link #columnModel} field.
*
* @return The current value of the selectedColumnCount property
*/
@@ -2484,7 +2578,7 @@ public class JTable
/**
* Get the value of the <code>selectedColumns</code> property by
- * delegation to the @{link #columnModel} field.
+ * delegation to the {@link #columnModel} field.
*
* @return The current value of the selectedColumns property
*/
@@ -2505,7 +2599,7 @@ public class JTable
/**
* Get the value of the <code>selectedRowCount</code> property by
- * delegation to the @{link #selectionModel} field.
+ * delegation to the {@link #selectionModel} field.
*
* @return The current value of the selectedRowCount property
*/
@@ -2516,7 +2610,7 @@ public class JTable
/**
* Get the value of the <code>selectedRows</code> property by
- * delegation to the @{link #selectionModel} field.
+ * delegation to the {@link #selectionModel} field.
*
* @return The current value of the selectedRows property
*/
@@ -2694,7 +2788,9 @@ public class JTable
{
if (r < 1)
throw new IllegalArgumentException();
-
+
+ clientRowHeightSet = true;
+
rowHeight = r;
revalidate();
repaint();
@@ -3260,8 +3356,6 @@ public class JTable
public void updateUI()
{
setUI((TableUI) UIManager.getUI(this));
- revalidate();
- repaint();
}
/**
@@ -3501,8 +3595,7 @@ public class JTable
}
/**
- * Set value for the cell at the given position. If the cell is not
- * editable, this method returns without action. The modified cell is
+ * Set value for the cell at the given position. The modified cell is
* repainted.
*
* @param value the value to set
@@ -3511,8 +3604,6 @@ public class JTable
*/
public void setValueAt(Object value, int row, int column)
{
- if (!isCellEditable(row, column))
- return;
dataModel.setValueAt(value, row, convertColumnIndexToModel(column));
repaint(getCellRect(row, column, true));
@@ -3660,18 +3751,14 @@ public class JTable
private void moveToCellBeingEdited(Component component)
{
Rectangle r = getCellRect(editingRow, editingColumn, true);
- // Place the text field so that it would not touch the table
- // border.
-
- // TODO Figure out while 5 and which constant should here be.
- int xOffset = 5;
- r.x+=xOffset;
- r.y++;
- r.width -=xOffset;
- r.height --;
-
- // Clone rectangle as getCellRect returns the cached value.
- component.setBounds(new Rectangle(r));
+ // Adjust bounding box of the editing component, so that it lies
+ // 'above' the grid on all edges, not only right and bottom.
+ // The table grid is painted only at the right and bottom edge of a cell.
+ r.x -= 1;
+ r.y -= 1;
+ r.width += 1;
+ r.height += 1;
+ component.setBounds(r);
}
/**
@@ -3749,4 +3836,34 @@ public class JTable
// TODO: Implement functionality of this property (in UI impl).
return surrendersFocusOnKeystroke;
}
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("rowHeight"))
+ {
+ if (! clientRowHeightSet)
+ {
+ setRowHeight(((Integer) value).intValue());
+ clientRowHeightSet = false;
+ }
+ }
+ else
+ {
+ super.setUIProperty(propertyName, value);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/JTextField.java b/libjava/classpath/javax/swing/JTextField.java
index 01c5c06..367503b 100644
--- a/libjava/classpath/javax/swing/JTextField.java
+++ b/libjava/classpath/javax/swing/JTextField.java
@@ -1,5 +1,5 @@
/* JTextField.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,7 @@ import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Insets;
+import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
@@ -110,8 +111,7 @@ public class JTextField extends JTextComponent
private int columns;
private int align;
- private int scrollOffset;
-
+
/** @since 1.3 */
private Action action;
@@ -184,6 +184,9 @@ public class JTextField extends JTextComponent
this.columns = columns;
+ // Initialize the horizontal visibility model.
+ horizontalVisibility = new DefaultBoundedRangeModel();
+
setDocument(doc == null ? createDefaultModel() : doc);
if (text != null)
@@ -191,9 +194,6 @@ public class JTextField extends JTextComponent
// default value for alignment
align = LEADING;
-
- // Initialize the horizontal visibility model.
- horizontalVisibility = new DefaultBoundedRangeModel();
}
/**
@@ -270,7 +270,7 @@ public class JTextField extends JTextComponent
*/
protected void fireActionPerformed()
{
- ActionEvent event = new ActionEvent(this, 0, notifyAction);
+ ActionEvent event = new ActionEvent(this, 0, getText());
ActionListener[] listeners = getActionListeners();
for (int index = 0; index < listeners.length; ++index)
@@ -368,8 +368,7 @@ public class JTextField extends JTextComponent
*/
public int getScrollOffset()
{
- //FIXME: this should return horizontalVisibility's value
- return scrollOffset;
+ return horizontalVisibility.getValue();
}
/**
@@ -379,8 +378,13 @@ public class JTextField extends JTextComponent
*/
public void setScrollOffset(int offset)
{
- //FIXME: this should actualy scroll the field if needed
- scrollOffset = offset;
+ // Automatically sets to the highest possible value if
+ // offset is bigger than that.
+ horizontalVisibility.setValue(
+ Math.min(horizontalVisibility.getMaximum()
+ - horizontalVisibility.getExtent(),
+ offset));
+
}
/**
@@ -525,9 +529,6 @@ public class JTextField extends JTextComponent
*/
public BoundedRangeModel getHorizontalVisibility()
{
- // TODO: The real implementation of this property is still missing.
- // However, this is not done in JTextField but must instead be handled in
- // javax.swing.text.FieldView.
return horizontalVisibility;
}
@@ -544,4 +545,25 @@ public class JTextField extends JTextComponent
{
return ! (getParent() instanceof JViewport);
}
+
+ public void scrollRectToVisible(Rectangle r)
+ {
+ int v = horizontalVisibility.getValue();
+
+ // The extent value is the inner width of the text field.
+ int e = horizontalVisibility.getExtent();
+ Insets i = getInsets();
+
+ // The x value in the rectangle (usually) denotes the new location
+ // of the caret. We check whether the location lies inside the left or
+ // right border and scroll into the appropriate direction.
+ // The calculation has to be shifted by the BoundedRangeModel's value
+ // because that value was already used to calculate r.x (this happens
+ // as part of a modelToView() call in FieldView).
+ if (r.x < i.left)
+ setScrollOffset(v + r.x - i.left);
+ else if (r.x > e + i.left)
+ setScrollOffset(r.x + v - e - i.left);
+ }
+
}
diff --git a/libjava/classpath/javax/swing/JToggleButton.java b/libjava/classpath/javax/swing/JToggleButton.java
index 077e5ad..1769c5e 100644
--- a/libjava/classpath/javax/swing/JToggleButton.java
+++ b/libjava/classpath/javax/swing/JToggleButton.java
@@ -179,7 +179,7 @@ public class JToggleButton extends AbstractButton implements Accessible
/**
* Checks if the button is selected.
*
- * @returns true if the button is selected
+ * @return <code>true</code> if the button is selected.
*/
public boolean isSelected()
{
diff --git a/libjava/classpath/javax/swing/JToolBar.java b/libjava/classpath/javax/swing/JToolBar.java
index a508ee6..b576b4f 100644
--- a/libjava/classpath/javax/swing/JToolBar.java
+++ b/libjava/classpath/javax/swing/JToolBar.java
@@ -50,7 +50,6 @@ import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
-import javax.swing.JButton;
import javax.swing.plaf.ToolBarUI;
/**
@@ -66,17 +65,15 @@ import javax.swing.plaf.ToolBarUI;
public class JToolBar extends JComponent implements SwingConstants, Accessible
{
/**
- * AccessibleJToolBar
+ * Provides the accessibility features for the <code>JToolBar</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and must be implemented
- // properly.
protected class AccessibleJToolBar extends AccessibleJComponent
{
- /** DOCUMENT ME! */
private static final long serialVersionUID = -5516888265903814215L;
/**
- * Constructor AccessibleJToolBar
+ * Creates a new <code>AccessibleJToolBar</code> instance.
*/
protected AccessibleJToolBar()
{
@@ -84,19 +81,23 @@ public class JToolBar extends JComponent implements SwingConstants, Accessible
}
/**
- * getAccessibleStateSet
+ * Returns a set containing the current state of the {@link JToolBar}
+ * component. The current implementation simply calls the superclass.
*
- * @return AccessibleStateSet
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null; // TODO
+ // running tests against the reference implementation, I was unable
+ // to find any state information that is set specifically by the
+ // tool bar...
+ return super.getAccessibleStateSet();
}
/**
- * getAccessibleRole
+ * Returns the accessible role for the <code>JToolBar</code> component.
*
- * @return AccessibleRole
+ * @return {@link AccessibleRole#TOOL_BAR}.
*/
public AccessibleRole getAccessibleRole()
{
@@ -426,8 +427,9 @@ public class JToolBar extends JComponent implements SwingConstants, Accessible
setOrientation(orientation);
setLayout(new DefaultToolBarLayout());
revalidate();
+ setOpaque(true);
updateUI();
- } // JToolBar()
+ }
/**
* This method adds a new JButton that performs the given Action to the
@@ -481,9 +483,7 @@ public class JToolBar extends JComponent implements SwingConstants, Accessible
public void updateUI()
{
setUI((ToolBarUI) UIManager.getUI(this));
- revalidate();
- repaint();
- } // updateUI()
+ }
/**
* This method returns the String identifier for the UI class to the used
@@ -767,9 +767,10 @@ public class JToolBar extends JComponent implements SwingConstants, Accessible
} // paramString()
/**
- * getAccessibleContext
+ * Returns the object that provides accessibility features for this
+ * <code>JToolBar</code> component.
*
- * @return AccessibleContext
+ * @return The accessible context (an instance of {@link AccessibleJToolBar}).
*/
public AccessibleContext getAccessibleContext()
{
diff --git a/libjava/classpath/javax/swing/JToolTip.java b/libjava/classpath/javax/swing/JToolTip.java
index 6bc3e3f..836c122 100644
--- a/libjava/classpath/javax/swing/JToolTip.java
+++ b/libjava/classpath/javax/swing/JToolTip.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package javax.swing;
import java.awt.AWTEvent;
+import java.beans.PropertyChangeEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
@@ -52,14 +53,13 @@ import javax.swing.plaf.ToolTipUI;
*/
public class JToolTip extends JComponent implements Accessible
{
- /** DOCUMENT ME! */
+
private static final long serialVersionUID = -1138929898906751643L;
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JToolTip</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and must be implemented
- // properly.
protected class AccessibleJToolTip extends AccessibleJComponent
{
private static final long serialVersionUID = -6222548177795408476L;
@@ -73,34 +73,37 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * DOCUMENT ME!
+ * Returns a description for the accessible component.
*
- * @return DOCUMENT ME!
+ * @return A description for the accessible component.
*/
public String getAccessibleDescription()
{
- return null;
+ String result = super.getAccessibleDescription();
+ if (result == null)
+ result = text;
+ return result;
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JToolTip</code> component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#TOOL_TIP}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.TOOL_TIP;
}
}
/** The text to display in the JToolTip. */
String text;
- /** The JComponent this JToolTip is used for. */
+ /** The component that the tool tip is associated with. */
JComponent component;
/**
- * Creates a new JToolTip object.
+ * Creates a new <code>JToolTip</code> instance.
*/
public JToolTip()
{
@@ -109,9 +112,11 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * This method returns the text this JToolTip displays.
+ * Returns the text displayed by the tool tip.
*
- * @return The text that this JToolTip displays.
+ * @return The text (possibly <code>null</code>).
+ *
+ * @see #setTipText(String)
*/
public String getTipText()
{
@@ -119,19 +124,24 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JToolTip</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of {@link AccessibleJToolTip}).
*/
public AccessibleContext getAccessibleContext()
{
- return null;
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleJToolTip();
+ return accessibleContext;
}
/**
- * This method returns the JComponent this JToolTip displays for.
+ * Returns the component that the tool tip is associated with.
*
- * @return The JComponent this JToolTip displays for.
+ * @return The component (possibly <code>null</code>).
+ *
+ * @see #setComponent(JComponent)
*/
public JComponent getComponent()
{
@@ -139,9 +149,9 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * This method returns the UI responsible for displaying this JToolTip.
+ * Returns the current UI delegate for this component.
*
- * @return The UI responsible for displaying this JToolTip.
+ * @return The UI delegate.
*/
public ToolTipUI getUI()
{
@@ -149,9 +159,10 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * This method returns the String identifier for the UI class.
+ * Returns the string suffix used to identify the UI class, in this case
+ * <code>"ToolTipUI"</code>.
*
- * @return The String identifier for the UI class.
+ * @return <code>"ToolTipUI"</code>.
*/
public String getUIClassID()
{
@@ -159,33 +170,52 @@ public class JToolTip extends JComponent implements Accessible
}
/**
- * This method returns a debugging String describing the JToolTip.
+ * Returns a string describing the attributes for the <code>JToolTip</code>
+ * component, for use in debugging. The return value is guaranteed to be
+ * non-<code>null</code>, but the format of the string may vary between
+ * implementations.
*
- * @return A debugging String describing the JToolTip.
+ * @return A string describing the attributes of the <code>JToolTip</code>.
*/
protected String paramString()
{
- return "JToolTip";
+ StringBuffer sb = new StringBuffer(super.paramString());
+ sb.append(",tiptext=");
+ if (text != null);
+ sb.append(text);
+ return sb.toString();
}
/**
- * This method sets the JComponent that the JToolTip displays for.
+ * Sets the component that the tool tip is associated with and sends a
+ * {@link PropertyChangeEvent} (with the property name 'component') to all
+ * registered listeners.
*
- * @param c The JComponent that the JToolTip displays for.
+ * @param c the component (<code>null</code> permitted).
+ *
+ * @see #getComponent()
*/
public void setComponent(JComponent c)
{
+ JComponent oldValue = component;
component = c;
+ firePropertyChange("component", oldValue, c);
}
/**
- * This method sets the text that the JToolTip displays.
+ * Sets the text to be displayed by the tool tip and sends a
+ * {@link PropertyChangeEvent} (with the property name 'tiptext') to all
+ * registered listeners.
*
- * @param tipText The text that the JToolTip displays.
+ * @param tipText the text (<code>null</code> permitted).
+ *
+ * @see #getTipText()
*/
public void setTipText(String tipText)
{
+ String oldValue = text;
text = tipText;
+ firePropertyChange("tiptext", oldValue, tipText);
}
/**
@@ -194,7 +224,5 @@ public class JToolTip extends JComponent implements Accessible
public void updateUI()
{
setUI((ToolTipUI) UIManager.getUI(this));
- revalidate();
- repaint();
}
}
diff --git a/libjava/classpath/javax/swing/JTree.java b/libjava/classpath/javax/swing/JTree.java
index 7876eeb..e3b8b7e 100644
--- a/libjava/classpath/javax/swing/JTree.java
+++ b/libjava/classpath/javax/swing/JTree.java
@@ -1276,10 +1276,16 @@ public class JTree extends JComponent implements Scrollable, Accessible
*/
public void valueChanged(TreeSelectionEvent ev)
{
- TreeSelectionEvent rewritten =
+ TreeSelectionEvent rewritten =
(TreeSelectionEvent) ev.cloneWithSource(JTree.this);
fireValueChanged(rewritten);
- JTree.this.repaint();
+
+ // Only repaint the changed nodes.
+ TreePath[] changed = ev.getPaths();
+ for (int i = 0; i < changed.length; i++)
+ {
+ repaint(getPathBounds(changed[i]));
+ }
}
}
@@ -1396,8 +1402,6 @@ public class JTree extends JComponent implements Scrollable, Accessible
private TreePath anchorSelectionPath;
- private TreePath leadSelectionPath;
-
/**
* This contains the state of all nodes in the tree. Al/ entries map the
* TreePath of a note to to its state. Valid states are EXPANDED and
@@ -1443,6 +1447,33 @@ public class JTree extends JComponent implements Scrollable, Accessible
new TreeSelectionRedirector();
/**
+ * Indicates if the rowHeight property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientRowHeightSet = false;
+
+ /**
+ * Indicates if the scrollsOnExpand property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientScrollsOnExpandSet = false;
+
+ /**
+ * Indicates if the showsRootHandles property has been set by a client
+ * program or by the UI.
+ *
+ * @see #setUIProperty(String, Object)
+ * @see LookAndFeel#installProperty(JComponent, String, Object)
+ */
+ private boolean clientShowsRootHandlesSet = false;
+
+ /**
* Creates a new <code>JTree</code> object.
*/
public JTree()
@@ -1477,8 +1508,8 @@ public class JTree extends JComponent implements Scrollable, Accessible
*/
public JTree(TreeModel model)
{
- updateUI();
setRootVisible(true);
+ // The setModel also calls the updateUI
setModel(model);
setSelectionModel(new EmptySelectionModel());
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
@@ -1535,7 +1566,15 @@ public class JTree extends JComponent implements Scrollable, Accessible
TreeUI ui = getUI();
return ui != null ? ui.getPathForRow(this, row) : null;
}
-
+
+ /**
+ * Get the pathes that are displayes between the two given rows.
+ *
+ * @param index0 the starting row, inclusive
+ * @param index1 the ending row, inclusive
+ *
+ * @return the array of the tree pathes
+ */
protected TreePath[] getPathBetweenRows(int index0, int index1)
{
TreeUI ui = getUI();
@@ -1619,19 +1658,48 @@ public class JTree extends JComponent implements Scrollable, Accessible
*/
public Dimension getPreferredScrollableViewportSize()
{
- return new Dimension (getPreferredSize().width, getVisibleRowCount()*getRowHeight());
+ return getPreferredSize();
}
-
- public int getScrollableUnitIncrement(Rectangle visibleRect,
- int orientation, int direction)
+
+ /**
+ * Return the preferred scrolling amount (in pixels) for the given scrolling
+ * direction and orientation. This method handles a partially exposed row by
+ * returning the distance required to completely expose the item.
+ *
+ * @param visibleRect the currently visible part of the component.
+ * @param orientation the scrolling orientation
+ * @param direction the scrolling direction (negative - up, positive -down).
+ * The values greater than one means that more mouse wheel or similar
+ * events were generated, and hence it is better to scroll the longer
+ * distance.
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+ public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
+ int direction)
{
- return 1;
+ int delta;
+
+ // Round so that the top would start from the row boundary
+ if (orientation == SwingConstants.VERTICAL)
+ {
+ // One pixel down, otherwise picks another row too high.
+ int row = getClosestRowForLocation(visibleRect.x, visibleRect.y + 1);
+ row = row + direction;
+ if (row < 0)
+ row = 0;
+
+ Rectangle newTop = getRowBounds(row);
+ delta = newTop.y - visibleRect.y;
+ }
+ else
+ delta = direction * rowHeight == 0 ? 20 : rowHeight;
+ return delta;
}
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation, int direction)
{
- return 1;
+ return getScrollableUnitIncrement(visibleRect, orientation, direction);
}
public boolean getScrollableTracksViewportHeight()
@@ -1885,9 +1953,19 @@ public class JTree extends JComponent implements Scrollable, Accessible
if (rootVisible == flag)
return;
+ // If the root is currently selected, unselect it
+ if (rootVisible && !flag)
+ {
+ TreeSelectionModel model = getSelectionModel();
+ // The root is always shown in the first row
+ TreePath rootPath = getPathForRow(0);
+ model.removeSelectionPath(rootPath);
+ }
+
boolean oldValue = rootVisible;
rootVisible = flag;
firePropertyChange(ROOT_VISIBLE_PROPERTY, oldValue, flag);
+
}
public boolean getShowsRootHandles()
@@ -1897,6 +1975,8 @@ public class JTree extends JComponent implements Scrollable, Accessible
public void setShowsRootHandles(boolean flag)
{
+ clientShowsRootHandlesSet = true;
+
if (showsRootHandles == flag)
return;
@@ -1996,6 +2076,8 @@ public class JTree extends JComponent implements Scrollable, Accessible
public void setRowHeight(int height)
{
+ clientRowHeightSet = true;
+
if (rowHeight == height)
return;
@@ -2050,27 +2132,8 @@ public class JTree extends JComponent implements Scrollable, Accessible
{
if (path == null)
return;
-
- Object[] oPath = path.getPath();
- TreePath temp = new TreePath(oPath[0]);
- boolean stop = false;
- int i = 1;
- while (!stop)
- {
- while (isVisible(temp))
- if (i < oPath.length)
- temp = temp.pathByAddingChild(oPath[i++]);
- else
- {
- stop = true;
- break;
- }
- makeVisible(temp);
- }
Rectangle rect = getPathBounds(path);
scrollRectToVisible(rect);
- revalidate();
- repaint();
}
public void scrollRowToVisible(int row)
@@ -2085,6 +2148,7 @@ public class JTree extends JComponent implements Scrollable, Accessible
public void setScrollsOnExpand(boolean scroll)
{
+ clientScrollsOnExpandSet = true;
if (scrollsOnExpand == scroll)
return;
@@ -2164,7 +2228,15 @@ public class JTree extends JComponent implements Scrollable, Accessible
addSelectionPaths(paths);
}
-
+
+ /**
+ * Select all rows between the two given indexes, inclusive. The method
+ * will not select the inner leaves and braches of the currently collapsed
+ * nodes in this interval.
+ *
+ * @param index0 the starting row, inclusive
+ * @param index1 the ending row, inclusive
+ */
public void addSelectionInterval(int index0, int index1)
{
TreePath[] paths = getPathBetweenRows(index0, index1);
@@ -2220,7 +2292,10 @@ public class JTree extends JComponent implements Scrollable, Accessible
public TreePath getLeadSelectionPath()
{
- return leadSelectionPath;
+ if (selectionModel == null)
+ return null;
+ else
+ return selectionModel.getLeadSelectionPath();
}
/**
@@ -2228,12 +2303,24 @@ public class JTree extends JComponent implements Scrollable, Accessible
*/
public void setLeadSelectionPath(TreePath path)
{
- if (leadSelectionPath == path)
- return;
-
- TreePath oldValue = leadSelectionPath;
- leadSelectionPath = path;
- firePropertyChange(LEAD_SELECTION_PATH_PROPERTY, oldValue, path);
+ if (selectionModel != null)
+ {
+ TreePath oldValue = selectionModel.getLeadSelectionPath();
+ if (path.equals(oldValue))
+ return;
+
+ // Repaint the previous and current rows with the lead selection path.
+ if (path != null)
+ {
+ repaint(getPathBounds(path));
+ selectionModel.addSelectionPath(path);
+ }
+
+ if (oldValue!=null)
+ repaint(getPathBounds(oldValue));
+
+ firePropertyChange(LEAD_SELECTION_PATH_PROPERTY, oldValue, path);
+ }
}
/**
@@ -2369,7 +2456,8 @@ public class JTree extends JComponent implements Scrollable, Accessible
public void expandPath(TreePath path)
{
// Don't expand if path is null
- if (path == null)
+ // or is already expanded.
+ if (path == null || isExpanded(path))
return;
try
@@ -2906,13 +2994,69 @@ public class JTree extends JComponent implements Scrollable, Accessible
}
/**
- * Sent when the tree has changed enough that we need to resize the bounds,
- * but not enough that we need to remove the expanded node set (e.g nodes
- * were expanded or collapsed, or nodes were inserted into the tree). You
- * should never have to invoke this, the UI will invoke this as it needs to.
+ * <p>
+ * Sent when the tree has changed enough that we need to resize the bounds,
+ * but not enough that we need to remove the expanded node set (e.g nodes were
+ * expanded or collapsed, or nodes were inserted into the tree). You should
+ * never have to invoke this, the UI will invoke this as it needs to.
+ * </p>
+ * <p>
+ * If the tree uses {@link DefaultTreeModel}, you must call
+ * {@link DefaultTreeModel#reload(TreeNode)} or
+ * {@link DefaultTreeModel#reload()} after adding or removing nodes. Following
+ * the official Java 1.5 API standard, just calling treeDidChange, repaint()
+ * or revalidate() does <i>not</i> update the tree appearance properly.
+ *
+ * @see DefaultTreeModel#reload()
*/
public void treeDidChange()
{
repaint();
}
+
+ /**
+ * Helper method for
+ * {@link LookAndFeel#installProperty(JComponent, String, Object)}.
+ *
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ */
+ void setUIProperty(String propertyName, Object value)
+ {
+ if (propertyName.equals("rowHeight"))
+ {
+ if (! clientRowHeightSet)
+ {
+ setRowHeight(((Integer) value).intValue());
+ clientRowHeightSet = false;
+ }
+ }
+ else if (propertyName.equals("scrollsOnExpand"))
+ {
+ if (! clientScrollsOnExpandSet)
+ {
+ setScrollsOnExpand(((Boolean) value).booleanValue());
+ clientScrollsOnExpandSet = false;
+ }
+ }
+ else if (propertyName.equals("showsRootHandles"))
+ {
+ if (! clientShowsRootHandlesSet)
+ {
+ setShowsRootHandles(((Boolean) value).booleanValue());
+ clientShowsRootHandlesSet = false;
+ }
+ }
+ else
+ {
+ super.setUIProperty(propertyName, value);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/KeyboardManager.java b/libjava/classpath/javax/swing/KeyboardManager.java
index aa9524c..4f778f7 100644
--- a/libjava/classpath/javax/swing/KeyboardManager.java
+++ b/libjava/classpath/javax/swing/KeyboardManager.java
@@ -195,7 +195,7 @@ class KeyboardManager
if (map == null)
return;
JComponent comp = map.getComponent();
- KeyStroke[] keys = map.keys();
+ KeyStroke[] keys = map.allKeys();
if (keys == null)
return;
// Find the top-level container associated with this ComponentInputMap
diff --git a/libjava/classpath/javax/swing/LookAndFeel.java b/libjava/classpath/javax/swing/LookAndFeel.java
index 358a811..7f59f1b 100644
--- a/libjava/classpath/javax/swing/LookAndFeel.java
+++ b/libjava/classpath/javax/swing/LookAndFeel.java
@@ -1,5 +1,5 @@
/* LookAndFeel.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,15 +49,25 @@ import javax.swing.plaf.ComponentInputMapUIResource;
import javax.swing.plaf.IconUIResource;
import javax.swing.plaf.InputMapUIResource;
import javax.swing.plaf.UIResource;
+import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.text.JTextComponent;
+/**
+ * A <i>look-and-feel</i> controls most aspects of the appearance and
+ * operation of user interface components in <code>javax.swing</code>. A
+ * cross-platform look-and-feel (the {@link MetalLookAndFeel}) is provided.
+ *
+ * @see UIManager#getInstalledLookAndFeels()
+ * @see UIManager#setLookAndFeel(LookAndFeel)
+ */
public abstract class LookAndFeel
{
/**
- * This method is called once by UIManager.setLookAndFeel to create
- * the look and feel specific defaults table.
+ * Creates and returns a look-and-feel specific defaults table. This method
+ * is called once by {@link UIManager#setLookAndFeel(LookAndFeel)} and
+ * shouldn't be called again (as it creates a large table of defaults).
*
- * @return the UI defaults
+ * @return The UI defaults.
*/
public UIDefaults getDefaults()
{
@@ -71,10 +81,21 @@ public abstract class LookAndFeel
*/
public abstract String getDescription();
+ /**
+ * Returns the value of <code>Toolkit.getDefaultToolkit()
+ * .getDesktopProperty(systemPropertyName)</code>, or
+ * <code>fallbackValue</code> if no such property is defined.
+ *
+ * @param systemPropertyName the system property name.
+ * @param fallbackValue the fallback value.
+ *
+ * @return The property value or <code>fallbackValue</code>.
+ */
public static Object getDesktopPropertyValue(String systemPropertyName,
Object fallbackValue)
{
- Object value = Toolkit.getDefaultToolkit().getDesktopProperty(systemPropertyName);
+ Object value = Toolkit.getDefaultToolkit().getDesktopProperty(
+ systemPropertyName);
return value != null ? value : fallbackValue;
}
@@ -93,11 +114,12 @@ public abstract class LookAndFeel
public abstract String getName();
/**
- * Returns true when the Look and Feel supports window decorations,
- * false others. This method returns always false and needs to be overwritten
- * when the derived Look and Feel supports this.
+ * Returns <code>true</code> when the look-and-feel supports window
+ * decorations, and <code>false</code> otherwise. This default implementation
+ * always returns <code>false</code> and needs to be overridden when the
+ * derived look-and-feel supports this.
*
- * @return false
+ * @return <code>false</code>.
*
* @since 1.4
*/
@@ -107,8 +129,11 @@ public abstract class LookAndFeel
}
/**
- * UIManager.setLookAndFeel calls this method before the first call
- * (and typically the only call) to getDefaults().
+ * Initializes the look-and-feel. The
+ * {@link UIManager#setLookAndFeel(LookAndFeel)} method calls this method
+ * before the first call (and typically the only call) to
+ * {@link #getDefaults()}. This default implementation does nothing, but
+ * subclasses can override this behaviour.
*/
public void initialize()
{
@@ -117,9 +142,13 @@ public abstract class LookAndFeel
}
/**
- * Convenience method for installing a component's default Border object
- * on the specified component if either the border is currently null
- * or already an instance of UIResource.
+ * Convenience method for installing a component's default {@link Border}
+ * object on the specified component if either the border is currently
+ * <code>null</code> or already an instance of {@link UIResource}.
+ *
+ * @param c the component (<code>null</code> not permitted).
+ * @param defaultBorderName the border name (for lookup in the UIDefaults
+ * table).
*/
public static void installBorder(JComponent c, String defaultBorderName)
{
@@ -131,6 +160,12 @@ public abstract class LookAndFeel
/**
* Convenience method for initializing a component's foreground and
* background color properties with values from the current defaults table.
+ *
+ * @param c the component (<code>null</code> not permitted).
+ * @param defaultBgName the key for the background color in the UIDefaults
+ * table.
+ * @param defaultFgName the key for the foreground color in the UIDefaults
+ * table.
*/
public static void installColors(JComponent c, String defaultBgName,
String defaultFgName)
@@ -147,8 +182,15 @@ public abstract class LookAndFeel
}
/**
- * Convenience method for initializing a components foreground background
- * and font properties with values from the current defaults table.
+ * Convenience method for initializing a component's foreground, background
+ * and font properties with values from the current defaults table.
+ *
+ * @param component the component (<code>null</code> not permitted).
+ * @param defaultBgName the key for the background color in the UIDefaults
+ * table.
+ * @param defaultFgName the key for the foreground color in the UIDefaults
+ * table.
+ * @param defaultFontName the key for the font in the UIDefaults table.
*/
public static void installColorsAndFont(JComponent component,
String defaultBgName,
@@ -164,8 +206,10 @@ public abstract class LookAndFeel
}
/**
- * Returns <code>true</code> if the look and feel is the "native" look and
- * feel for the current platform, and <code>false</code> otherwise.
+ * Returns <code>true</code> if the look-and-feel is the "native"
+ * look-and-feel for the current platform, and <code>false</code> otherwise.
+ * A native look-and-feel emulates the appearance and behaviour of the
+ * default windowing system on the host operating system.
*
* @return A flag indicating whether or not this is the native look and feel
* for the current platform.
@@ -173,13 +217,13 @@ public abstract class LookAndFeel
public abstract boolean isNativeLookAndFeel();
/**
- * Returns <code>true</code> if the look and feel is supported on the
+ * Returns <code>true</code> if the look-and-feel is supported on the
* current operating system, and <code>false</code> otherwise. This
- * mechanism is provided so that it is possible to prevent a look and feel
+ * mechanism is provided so that it is possible to prevent a look-and-feel
* from being used on some operating systems (usually for legal, not
* technical, reasons).
*
- * @return A flag indicating whether or not the look and feel is supported
+ * @return A flag indicating whether or not the look-and-feel is supported
* on the current platform.
*/
public abstract boolean isSupportedLookAndFeel();
@@ -219,6 +263,8 @@ public abstract class LookAndFeel
*
* @param c the JComponent associated with the ComponentInputMap
* @param keys the Object array describing the InputMap as above
+ *
+ * @return A new input map.
*/
public static ComponentInputMap makeComponentInputMap(JComponent c,
Object[] keys)
@@ -230,7 +276,13 @@ public abstract class LookAndFeel
/**
* Utility method that creates a UIDefaults.LazyValue that creates an
- * ImageIcon UIResource for the specified gifFile filename.
+ * ImageIcon UIResource for the specified gifFile filename.
+ *
+ * @param baseClass the base class for accessing the icon resource.
+ * @param gifFile the file name.
+ *
+ * @return A {@link UIDefaults.LazyValue} that serves up an
+ * {@link IconUIResource}.
*/
public static Object makeIcon(Class baseClass, String gifFile)
{
@@ -252,6 +304,8 @@ public abstract class LookAndFeel
* ActionMap.
*
* @param keys the Object array describing the InputMap as above
+ *
+ * @return A new input map.
*/
public static InputMap makeInputMap(Object[] keys)
{
@@ -269,7 +323,8 @@ public abstract class LookAndFeel
* @param keyBindingList the array of KeyStroke-Action pairs
* @return a JTextComponent.KeyBinding array
*/
- public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
+ public static JTextComponent.KeyBinding[] makeKeyBindings(
+ Object[] keyBindingList)
{
JTextComponent.KeyBinding[] retBindings =
new JTextComponent.KeyBinding[keyBindingList.length / 2];
@@ -280,15 +335,16 @@ public abstract class LookAndFeel
stroke = (KeyStroke)keyBindingList[i];
else
stroke = KeyStroke.getKeyStroke((String)keyBindingList[i]);
- retBindings[i/2] = new JTextComponent.KeyBinding(stroke, (String)keyBindingList[i+1]);
+ retBindings[i/2] = new JTextComponent.KeyBinding(stroke,
+ (String) keyBindingList[i+1]);
}
return retBindings;
}
/**
- * Invoked when the user attempts an invalid operation. The default implement
- * just beeps. Subclasses that wish to change this need to override this
- * method.
+ * Invoked when the user attempts an invalid operation. The default
+ * implementation just beeps. Subclasses that wish to change this need to
+ * override this method.
*
* @param component the component the error occured in
*/
@@ -320,10 +376,58 @@ public abstract class LookAndFeel
/**
* Convenience method for un-installing a component's default border on the
* specified component if the border is currently an instance of UIResource.
+ *
+ * @param c the component (<code>null</code> not permitted).
*/
public static void uninstallBorder(JComponent c)
{
if (c.getBorder() instanceof UIResource)
c.setBorder(null);
}
+
+ /**
+ * This methods installs a UI property if it hasn't already been set by an
+ * application. This method is used by UI delegates that install a default
+ * value for a property with a primitive type but do not want to override
+ * a value that has been set by an application.
+ *
+ * The supported properties depend on the actual type of the component and
+ * are listed in the table below. The supported properties are of course
+ * inherited to subclasses.
+ *
+ * <table>
+ * <tr><th>Type</th><th>Supported properties</th></tr>
+ * <tr><td><code>JComponent</code></td>
+ * <td><code>opaque, autoscrolls</code></td></tr>
+ * <tr><td><code>AbstractButton</code></td>
+ * <td><code>borderPainted, rolloverEnabled, iconTextGap,
+ * contentAreaFilled</code></td></tr>
+ * <tr><td><code>JDesktopPane</code></td>
+ * <td><code>dragMode</code></td></tr>
+ * <tr><td><code>JSplitPane</code></td>
+ * <td><code>dividerSize, oneTouchExpandable</code></td></tr>
+ * <tr><td><code>JTable</code></td>
+ * <td><code>rowHeight</code></td></tr>
+ * <tr><td><code>JTree</code></td>
+ * <td><code>rowHeight, scrollsOnExpand, showsRootHandles</code></td></tr>
+ * </table>
+ *
+ * @param c the component to install the property to
+ * @param propertyName the name of the property
+ * @param value the value of the property
+ *
+ * @throws IllegalArgumentException if the specified property cannot be set
+ * by this method
+ * @throws ClassCastException if the property value does not match the
+ * property type
+ * @throws NullPointerException if <code>c</code> or
+ * <code>propertyValue</code> is <code>null</code>
+ *
+ * @since 1.5
+ */
+ public static void installProperty(JComponent c, String propertyName,
+ Object value)
+ {
+ c.setUIProperty(propertyName, value);
+ }
}
diff --git a/libjava/classpath/javax/swing/MenuSelectionManager.java b/libjava/classpath/javax/swing/MenuSelectionManager.java
index 4e52751..df7b420 100644
--- a/libjava/classpath/javax/swing/MenuSelectionManager.java
+++ b/libjava/classpath/javax/swing/MenuSelectionManager.java
@@ -216,28 +216,90 @@ public class MenuSelectionManager
public boolean isComponentPartOfCurrentMenu(Component c)
{
MenuElement[] subElements;
- for (int i = 0; i < selectedPath.size(); i++)
+ boolean ret = false;
+ for (int i = 0; i < selectedPath.size(); i++)
{
- subElements = ((MenuElement) selectedPath.get(i)).getSubElements();
- for (int j = 0; j < subElements.length; j++)
- {
- MenuElement me = subElements[j];
- if (me != null && (me.getComponent()).equals(c))
- return true;
- }
+ // Check first element.
+ MenuElement first = (MenuElement) selectedPath.get(i);
+ if (SwingUtilities.isDescendingFrom(c, first.getComponent()))
+ {
+ ret = true;
+ break;
+ }
+ else
+ {
+ // Check sub elements.
+ subElements = first.getSubElements();
+ for (int j = 0; j < subElements.length; j++)
+ {
+ MenuElement me = subElements[j];
+ if (me != null
+ && (SwingUtilities.isDescendingFrom(c, me.getComponent())))
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
}
- return false;
+ return ret;
}
/**
- * DOCUMENT ME!
+ * Processes key events on behalf of the MenuElements. MenuElement
+ * instances should always forward their key events to this method and
+ * get their {@link MenuElement#processKeyEvent(KeyEvent, MenuElement[],
+ * MenuSelectionManager)} eventually called back.
*
- * @param e DOCUMENT ME!
+ * @param e the key event
*/
public void processKeyEvent(KeyEvent e)
{
- throw new UnsupportedOperationException("not implemented");
+ MenuElement[] selection = (MenuElement[])
+ selectedPath.toArray(new MenuElement[selectedPath.size()]);
+ MenuElement[] path;
+ for (int index = selection.length - 1; index >= 0; index--)
+ {
+ MenuElement el = selection[index];
+ // This method's main purpose is to forward key events to the
+ // relevant menu items, so that they can act in response to their
+ // mnemonics beeing typed. So we also need to forward the key event
+ // to all the subelements of the currently selected menu elements
+ // in the path.
+ MenuElement[] subEls = el.getSubElements();
+ path = null;
+ for (int subIndex = 0; subIndex < subEls.length; subIndex++)
+ {
+ MenuElement sub = subEls[subIndex];
+ // Skip elements that are not showing or not enabled.
+ if (sub == null || ! sub.getComponent().isShowing()
+ || ! sub.getComponent().isEnabled())
+ {
+ continue;
+ }
+
+ if (path == null)
+ {
+ path = new MenuElement[index + 2];
+ System.arraycopy(selection, 0, path, 0, index + 1);
+ }
+ path[index + 1] = sub;
+ sub.processKeyEvent(e, path, this);
+ if (e.isConsumed())
+ break;
+ }
+ if (e.isConsumed())
+ break;
+ }
+
+ // Dispatch to first element in selection if it hasn't been consumed.
+ if (! e.isConsumed())
+ {
+ path = new MenuElement[1];
+ path[0] = selection[0];
+ path[0].processKeyEvent(e, path, this);
+ }
}
/**
@@ -303,53 +365,35 @@ public class MenuSelectionManager
return;
}
- int i;
- int minSize = path.length; // size of the smaller path.
+ int minSize = path.length; // size of the smaller path.
+ int currentSize = selectedPath.size();
+ int firstDiff = 0;
- if (path.length > selectedPath.size())
+ // Search first item that is different in the current and new path.
+ for (int i = 0; i < minSize; i++)
{
- minSize = selectedPath.size();
-
- // if new selected path contains more elements then current
- // selection then first add all elements at
- // the indexes > selectedPath.size
- for (i = selectedPath.size(); i < path.length; i++)
- {
- selectedPath.add(path[i]);
- path[i].menuSelectionChanged(true);
- }
+ if (i < currentSize && (MenuElement) selectedPath.get(i) == path[i])
+ firstDiff++;
+ else
+ break;
}
- else if (path.length < selectedPath.size())
+ // Remove items from selection and send notification.
+ for (int i = currentSize - 1; i >= firstDiff; i--)
{
- // if new selected path contains less elements then current
- // selection then first remove all elements from the selection
- // at the indexes > path.length
- for (i = selectedPath.size() - 1; i >= path.length; i--)
- {
- ((MenuElement) selectedPath.get(i)).menuSelectionChanged(false);
- selectedPath.remove(i);
- }
-
- minSize = path.length;
+ MenuElement el = (MenuElement) selectedPath.get(i);
+ selectedPath.remove(i);
+ el.menuSelectionChanged(false);
}
- // Now compare elements in new and current selection path at the
- // same location and adjust selection until
- // same menu elements will be encountered at the
- // same index in both current and new selection path.
- MenuElement oldSelectedItem;
-
- for (i = minSize - 1; i >= 0; i--)
+ // Add new items to selection and send notification.
+ for (int i = firstDiff; i < minSize; i++)
{
- oldSelectedItem = (MenuElement) selectedPath.get(i);
-
- if (path[i].equals(oldSelectedItem))
- break;
-
- oldSelectedItem.menuSelectionChanged(false);
- path[i].menuSelectionChanged(true);
- selectedPath.setElementAt(path[i], i);
+ if (path[i] != null)
+ {
+ selectedPath.add(path[i]);
+ path[i].menuSelectionChanged(true);
+ }
}
fireStateChanged();
diff --git a/libjava/classpath/javax/swing/OverlayLayout.java b/libjava/classpath/javax/swing/OverlayLayout.java
index 56b8c8b..a2cccb9 100644
--- a/libjava/classpath/javax/swing/OverlayLayout.java
+++ b/libjava/classpath/javax/swing/OverlayLayout.java
@@ -1,5 +1,5 @@
/* OverlayLayout.java -- A layout manager
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -198,7 +198,7 @@ public class OverlayLayout implements LayoutManager2, Serializable
*
* @param target not used here
*
- * @returns the preferred size of the container that is laid out
+ * @return the preferred size of the container that is laid out
*/
public Dimension preferredLayoutSize(Container target)
{
@@ -216,7 +216,7 @@ public class OverlayLayout implements LayoutManager2, Serializable
*
* @param target not used here
*
- * @returns the minimum size of the container that is laid out
+ * @return the minimum size of the container that is laid out
*/
public Dimension minimumLayoutSize(Container target)
{
@@ -234,7 +234,7 @@ public class OverlayLayout implements LayoutManager2, Serializable
*
* @param target not used here
*
- * @returns the maximum size of the container that is laid out
+ * @return the maximum size of the container that is laid out
*/
public Dimension maximumLayoutSize(Container target)
{
@@ -252,7 +252,7 @@ public class OverlayLayout implements LayoutManager2, Serializable
*
* @param target not used here
*
- * @returns the X alignment of the container that is laid out
+ * @return the X alignment of the container that is laid out
*/
public float getLayoutAlignmentX(Container target)
{
@@ -270,7 +270,7 @@ public class OverlayLayout implements LayoutManager2, Serializable
*
* @param target not used here
*
- * @returns the X alignment of the container that is laid out
+ * @return the X alignment of the container that is laid out
*/
public float getLayoutAlignmentY(Container target)
{
diff --git a/libjava/classpath/javax/swing/Popup.java b/libjava/classpath/javax/swing/Popup.java
index c3de69e..308cd66 100644
--- a/libjava/classpath/javax/swing/Popup.java
+++ b/libjava/classpath/javax/swing/Popup.java
@@ -285,6 +285,7 @@ public class Popup
Point layeredPaneLoc = layeredPane.getLocationOnScreen();
panel.setLocation(x - layeredPaneLoc.x, y - layeredPaneLoc.y);
layeredPane.add(panel, JLayeredPane.POPUP_LAYER);
+ panel.repaint();
}
/**
diff --git a/libjava/classpath/javax/swing/ProgressMonitor.java b/libjava/classpath/javax/swing/ProgressMonitor.java
index 60f1c71..73e36b9 100644
--- a/libjava/classpath/javax/swing/ProgressMonitor.java
+++ b/libjava/classpath/javax/swing/ProgressMonitor.java
@@ -1,5 +1,5 @@
/* ProgressMonitor.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -100,10 +100,16 @@ public class ProgressMonitor
boolean canceled;
/**
- * Constructor ProgressMonitor
- * @param component The parent component of the progress dialog or <code>null</code>.
- * @param message A constant message object which works in the way it does in <code>JOptionPane</code>.
- * @param note A string message which can be changed while the operation goes on.
+ * Creates a new <code>ProgressMonitor</code> instance. This is used to
+ * monitor a task and pops up a dialog if the task is taking a long time to
+ * run.
+ *
+ * @param component The parent component of the progress dialog or
+ * <code>null</code>.
+ * @param message A constant message object which works in the way it does
+ * in {@link JOptionPane}.
+ * @param note A string message which can be changed while the operation goes
+ * on.
* @param minimum The minimum value for the operation (start value).
* @param maximum The maximum value for the operation (end value).
*/
@@ -178,9 +184,10 @@ public class ProgressMonitor
}
- /** Returns the minimum or start value of the operation.
+ /**
+ * Returns the minimum or start value of the operation.
*
- * @returns Minimum or start value of the operation.
+ * @return Minimum or start value of the operation.
*/
public int getMinimum()
{
@@ -207,7 +214,7 @@ public class ProgressMonitor
/**
* Return the maximum or end value of your operation.
*
- * @returns Maximum or end value.
+ * @return Maximum or end value.
*/
public int getMaximum()
{
@@ -228,7 +235,7 @@ public class ProgressMonitor
/**
* Returns whether the user canceled the operation.
*
- * @returns Whether the operation was canceled.
+ * @return Whether the operation was canceled.
*/
public boolean isCanceled()
{
@@ -243,7 +250,7 @@ public class ProgressMonitor
* until the ProgressMonitor should decide whether
* a progress dialog is to be shown or not.
*
- * @returns The duration in milliseconds.
+ * @return The duration in milliseconds.
*/
public int getMillisToDecideToPopup()
{
@@ -266,8 +273,12 @@ public class ProgressMonitor
}
/**
- * getMillisToPopup
- * @returns int
+ * Returns the number of milliseconds to wait before displaying the progress
+ * dialog. The default value is 2000.
+ *
+ * @return The number of milliseconds.
+ *
+ * @see #setMillisToPopup(int)
*/
public int getMillisToPopup()
{
@@ -275,8 +286,12 @@ public class ProgressMonitor
}
/**
- * setMillisToPopup
- * @param time TODO
+ * Sets the number of milliseconds to wait before displaying the progress
+ * dialog.
+ *
+ * @param time the number of milliseconds.
+ *
+ * @see #getMillisToPopup()
*/
public void setMillisToPopup(int time)
{
@@ -286,7 +301,7 @@ public class ProgressMonitor
/**
* Returns a message which is shown in the progress dialog.
*
- * @returns The changeable message visible in the progress dialog.
+ * @return The changeable message visible in the progress dialog.
*/
public String getNote()
{
@@ -313,7 +328,8 @@ public class ProgressMonitor
}
}
- /** Internal method that creates the progress dialog.
+ /**
+ * Internal method that creates the progress dialog.
*/
void createDialog()
{
@@ -382,7 +398,11 @@ public class ProgressMonitor
if (( now - timestamp ) > millisToDecideToPopup )
{
first = false;
- long expected = ( now - timestamp ) * ( max - min ) / ( progress - min );
+
+
+ long expected = ( progress - min == 0 ) ?
+ ( now - timestamp ) * ( max - min ) :
+ ( now - timestamp ) * ( max - min ) / ( progress - min );
if ( expected > millisToPopup )
{
diff --git a/libjava/classpath/javax/swing/ProgressMonitorInputStream.java b/libjava/classpath/javax/swing/ProgressMonitorInputStream.java
index 02ac597..fec5c2e 100644
--- a/libjava/classpath/javax/swing/ProgressMonitorInputStream.java
+++ b/libjava/classpath/javax/swing/ProgressMonitorInputStream.java
@@ -1,5 +1,5 @@
/* ProgressMonitorInputStream.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,8 @@ import java.io.InterruptedIOException;
import java.io.IOException;
/**
- * ProgressMonitorInputStream
+ * An input stream with a {@link ProgressMonitor}.
+ *
* @author Andrew Selkirk
* @author Robert Schuster (robertschuster@fsfe.org)
* @status updated to 1.2
@@ -56,7 +57,7 @@ public class ProgressMonitorInputStream extends FilterInputStream
{
/**
- * monitor
+ * The monitor watching the progress of the input stream.
*/
private ProgressMonitor monitor;
@@ -66,10 +67,11 @@ public class ProgressMonitorInputStream extends FilterInputStream
private int read;
/**
- * Constructor ProgressMonitorInputStream
- * @param component TODO
- * @param message TODO
- * @param stream TODO
+ * Creates a new <code>ProgressMonitorInputStream</code>.
+ *
+ * @param component the parent component for the progress monitor dialog.
+ * @param message the task description.
+ * @param stream the underlying input stream.
*/
public ProgressMonitorInputStream(Component component, Object message,
InputStream stream)
@@ -87,12 +89,12 @@ public class ProgressMonitorInputStream extends FilterInputStream
// Behave like the JDK here.
}
- monitor = new ProgressMonitor(
- component, message, null, 0, max );
+ monitor = new ProgressMonitor(component, message, null, 0, max);
}
/**
- * reset
+ * Resets the input stream to the point where {@link #mark(int)} was called.
+ *
* @exception IOException TODO
*/
public void reset() throws IOException
@@ -106,9 +108,13 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * read
- * @exception IOException TODO
- * @returns int
+ * Reads an unsigned byte from the input stream and returns it as an
+ * <code>int</code> in the range of 0-255. Returns -1 if the end of the
+ * stream has been reached. The progress monitor is updated.
+ *
+ * @return int
+ *
+ * @exception IOException if there is a problem reading the stream.
*/
public int read() throws IOException
{
@@ -122,10 +128,16 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * read
- * @param data TODO
- * @exception IOException TODO
- * @returns int
+ * Reads bytes from the input stream and stores them in the supplied array,
+ * and updates the progress monitor (or closes it if the end of the stream
+ * is reached).
+ *
+ * @param data the data array for returning bytes read from the stream.
+ *
+ * @return The number of bytes read, or -1 if there are no more bytes in the
+ * stream.
+ *
+ * @throws IOException if there is a problem reading bytes from the stream.
*/
public int read(byte[] data) throws IOException
{
@@ -147,12 +159,18 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * read
- * @param data TODO
- * @param offset TODO
- * @param length TODO
- * @exception IOException TODO
- * @returns int
+ * Reads up to <code>length</code> bytes from the input stream and stores
+ * them in the supplied array at the given index, and updates the progress
+ * monitor (or closes it if the end of the stream is reached).
+ *
+ * @param data the data array for returning bytes read from the stream.
+ * @param offset the offset into the array where the bytes should be written.
+ * @param length the maximum number of bytes to read from the stream.
+ *
+ * @return The number of bytes read, or -1 if there are no more bytes in the
+ * stream.
+ *
+ * @throws IOException if there is a problem reading bytes from the stream.
*/
public int read(byte[] data, int offset, int length) throws IOException
{
@@ -174,10 +192,14 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * skip
- * @param length TODO
- * @exception IOException TODO
- * @returns long
+ * Skips the specified number of bytes and updates the
+ * {@link ProgressMonitor}.
+ *
+ * @param length the number of bytes to skip.
+ *
+ * @return The actual number of bytes skipped.
+ *
+ * @throws IOException if there is a problem skipping bytes in the stream.
*/
public long skip(long length) throws IOException
{
@@ -196,8 +218,9 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * close
- * @exception IOException TODO
+ * Closes the input stream and the associated {@link ProgressMonitor}.
+ *
+ * @throws IOException if there is a problem closing the input stream.
*/
public void close() throws IOException
{
@@ -206,8 +229,9 @@ public class ProgressMonitorInputStream extends FilterInputStream
}
/**
- * getProgressMonitor
- * @returns ProgressMonitor
+ * Returns the {@link ProgressMonitor} used by this input stream.
+ *
+ * @return The progress monitor.
*/
public ProgressMonitor getProgressMonitor()
{
diff --git a/libjava/classpath/javax/swing/RepaintManager.java b/libjava/classpath/javax/swing/RepaintManager.java
index ed05009..345c348 100644
--- a/libjava/classpath/javax/swing/RepaintManager.java
+++ b/libjava/classpath/javax/swing/RepaintManager.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package javax.swing;
+import java.applet.Applet;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
@@ -161,9 +162,9 @@ public class RepaintManager
if (o1 instanceof JComponent && o2 instanceof JComponent)
{
JComponent c1 = (JComponent) o1;
- Rectangle d1 = (Rectangle) dirtyComponents.get(c1);
+ Rectangle d1 = (Rectangle) dirtyComponentsWork.get(c1);
JComponent c2 = (JComponent) o2;
- Rectangle d2 = (Rectangle) dirtyComponents.get(c2);
+ Rectangle d2 = (Rectangle) dirtyComponentsWork.get(c2);
return d2.width * d2.height - d1.width * d1.height;
}
throw new ClassCastException("This comparator can only be used with "
@@ -189,6 +190,12 @@ public class RepaintManager
HashMap dirtyComponents;
/**
+ * The dirtyComponents which is used in paintDiryRegions to avoid unnecessary
+ * locking.
+ */
+ HashMap dirtyComponentsWork;
+
+ /**
* The comparator used for ordered inserting into the repaintOrder list.
*/
private transient Comparator comparator;
@@ -263,6 +270,7 @@ public class RepaintManager
public RepaintManager()
{
dirtyComponents = new HashMap();
+ dirtyComponentsWork = new HashMap();
invalidComponents = new ArrayList();
repaintWorker = new RepaintWorker();
doubleBufferMaximumSize = new Dimension(2000,2000);
@@ -414,7 +422,6 @@ public class RepaintManager
{
if (w <= 0 || h <= 0 || !component.isShowing())
return;
-
component.computeVisibleRect(rectCache);
SwingUtilities.computeIntersection(x, y, w, h, rectCache);
@@ -556,31 +563,36 @@ public class RepaintManager
if (dirtyComponents.size() == 0)
return;
+ // Swap dirtyRegions with dirtyRegionsWork to avoid locking.
synchronized (dirtyComponents)
{
- // We sort the components by their size here. This way we have a good
- // chance that painting the bigger components also paints the smaller
- // components and we don't need to paint them twice.
- ArrayList repaintOrder = new ArrayList(dirtyComponents.size());
- repaintOrder.addAll(dirtyComponents.keySet());
- if (comparator == null)
- comparator = new ComponentComparator();
- Collections.sort(repaintOrder, comparator);
- repaintUnderway = true;
- for (Iterator i = repaintOrder.iterator(); i.hasNext();)
- {
- JComponent comp = (JComponent) i.next();
- // If a component is marked completely clean in the meantime, then skip
- // it.
- Rectangle damaged = (Rectangle) dirtyComponents.get(comp);
- if (damaged == null || damaged.isEmpty())
- continue;
- comp.paintImmediately(damaged);
- dirtyComponents.remove(comp);
- }
- repaintUnderway = false;
- commitRemainingBuffers();
+ HashMap swap = dirtyComponents;
+ dirtyComponents = dirtyComponentsWork;
+ dirtyComponentsWork = swap;
}
+
+ ArrayList repaintOrder = new ArrayList(dirtyComponentsWork.size());;
+ // We sort the components by their size here. This way we have a good
+ // chance that painting the bigger components also paints the smaller
+ // components and we don't need to paint them twice.
+ repaintOrder.addAll(dirtyComponentsWork.keySet());
+
+ if (comparator == null)
+ comparator = new ComponentComparator();
+ Collections.sort(repaintOrder, comparator);
+ repaintUnderway = true;
+ for (Iterator i = repaintOrder.iterator(); i.hasNext();)
+ {
+ JComponent comp = (JComponent) i.next();
+ // If a component is marked completely clean in the meantime, then skip
+ // it.
+ Rectangle damaged = (Rectangle) dirtyComponentsWork.remove(comp);
+ if (damaged == null || damaged.isEmpty())
+ continue;
+ comp.paintImmediately(damaged);
+ }
+ repaintUnderway = false;
+ commitRemainingBuffers();
}
/**
@@ -597,7 +609,7 @@ public class RepaintManager
public Image getOffscreenBuffer(Component component, int proposedWidth,
int proposedHeight)
{
- Component root = SwingUtilities.getRoot(component);
+ Component root = getRoot(component);
Image buffer = (Image) offscreenBuffers.get(root);
if (buffer == null
|| buffer.getWidth(null) < proposedWidth
@@ -612,7 +624,33 @@ public class RepaintManager
}
return buffer;
}
-
+
+ /**
+ * Gets the root of the component given. If a parent of the
+ * component is an instance of Applet, then the applet is
+ * returned. The applet is considered the root for painting.
+ * Otherwise, the root Window is returned if it exists.
+ *
+ * @param comp - The component to get the root for.
+ * @return the parent root. An applet if it is a parent,
+ * or the root window. If neither exist, null is returned.
+ */
+ private Component getRoot(Component comp)
+ {
+ Applet app = null;
+
+ while (comp != null)
+ {
+ if (app == null && comp instanceof Window)
+ return comp;
+ else if (comp instanceof Applet)
+ app = (Applet) comp;
+ comp = comp.getParent();
+ }
+
+ return app;
+ }
+
/**
* Blits the back buffer of the specified root component to the screen. If
* the RepaintManager is currently working on a paint request, the commit
@@ -663,8 +701,7 @@ public class RepaintManager
dy1 = Math.min(bufferHeight, dy1);
dx2 = Math.min(bufferWidth, dx2);
dy2 = Math.min(bufferHeight, dy2);
- g.drawImage(buffer, dx1, dy1, dx2, dy2,
- dx1, dy1, dx2, dy2, root);
+ g.drawImage(buffer, 0, 0, root);
g.dispose();
}
// Otherwise queue this request up, until all the RepaintManager work
diff --git a/libjava/classpath/javax/swing/ScrollPaneLayout.java b/libjava/classpath/javax/swing/ScrollPaneLayout.java
index b00b5c4..31846fa 100644
--- a/libjava/classpath/javax/swing/ScrollPaneLayout.java
+++ b/libjava/classpath/javax/swing/ScrollPaneLayout.java
@@ -328,7 +328,13 @@ public class ScrollPaneLayout
// parent is no JScrollPane, so do we.
JScrollPane sc = (JScrollPane) parent;
JViewport viewport = sc.getViewport();
- Dimension viewSize = viewport.getViewSize();
+ Component view = viewport.getView();
+
+ // If there is no view in the viewport, there is no work to be done.
+ if (view == null)
+ return;
+
+ Dimension viewSize = viewport.getView().getPreferredSize();
int x1 = 0, x2 = 0, x3 = 0, x4 = 0;
int y1 = 0, y2 = 0, y3 = 0, y4 = 0;
@@ -350,27 +356,49 @@ public class ScrollPaneLayout
int vsbPolicy = sc.getVerticalScrollBarPolicy();
int hsbPolicy = sc.getHorizontalScrollBarPolicy();
+
+ int vsWidth = 0;
+ int hsHeight = 0;
boolean showVsb =
(vsb != null)
&& ((vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS)
|| (vsbPolicy == VERTICAL_SCROLLBAR_AS_NEEDED
&& viewSize.height > (y4 - y2)));
+
+ if (showVsb)
+ vsWidth = vsb.getPreferredSize().width;
+
+ // The horizontal scroll bar may become necessary if the vertical scroll
+ // bar appears, reducing the space, left for the component.
+
boolean showHsb =
(hsb != null)
&& ((hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS)
|| (hsbPolicy == HORIZONTAL_SCROLLBAR_AS_NEEDED
- && viewSize.width > (x4 - x2)));
-
+ && viewSize.width > (x4 - x2 - vsWidth)));
+
+ if (showHsb)
+ hsHeight = hsb.getPreferredSize().height;
+
+ // If the horizontal scroll bar appears, and the vertical scroll bar
+ // was not necessary assuming that there is no horizontal scroll bar,
+ // the vertical scroll bar may become necessary because the horizontal
+ // scroll bar reduces the vertical space for the component.
if (!showVsb)
- x3 = x4;
- else
- x3 = x4 - vsb.getPreferredSize().width;
+ {
+ showVsb =
+ (vsb != null)
+ && ((vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS)
+ || (vsbPolicy == VERTICAL_SCROLLBAR_AS_NEEDED
+ && viewSize.height > (y4 - y2)));
+
+ if (showVsb)
+ vsWidth = vsb.getPreferredSize().width;
+ }
- if (!showHsb)
- y3 = y4;
- else
- y3 = y4 - hsb.getPreferredSize().height;
+ x3 = x4 - vsWidth;
+ y3 = y4 - hsHeight;
// now set the layout
if (viewport != null)
diff --git a/libjava/classpath/javax/swing/Scrollable.java b/libjava/classpath/javax/swing/Scrollable.java
index 9dce665..396d530 100644
--- a/libjava/classpath/javax/swing/Scrollable.java
+++ b/libjava/classpath/javax/swing/Scrollable.java
@@ -50,14 +50,57 @@ public interface Scrollable
{
Dimension getPreferredScrollableViewportSize();
+ /**
+ * Return the preferred scrolling amount (in pixels) for the given
+ * scrolling direction and orientation when scrolling in small amounts
+ * like table lines.
+ *
+ * @param visibleRect the currently visible part of the component.
+ * @param orientation the scrolling orientation
+ * @param direction the scrolling direction (negative - up, positive -down).
+ * The values greater than one means that more mouse wheel or similar
+ * events were generated, and hence it is better to scroll the longer
+ * distance.
+ *
+ * @return the preferred scrolling distance, negative if up or left.
+ */
int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
int direction);
+ /**
+ * Return the preferred scrolling amount (in pixels) for the given
+ * scrolling direction and orientation when scrolling in large amounts
+ * (pages).
+ *
+ * @param visibleRect the currently visible part of the component.
+ * @param orientation the scrolling orientation
+ * @param direction the scrolling direction (negative - up, positive -down).
+ * The values greater than one means that more mouse wheel or similar
+ * events were generated, and hence it is better to scroll the longer
+ * distance.
+ *
+ * @return the preferred scrolling distance, negative if up or left.
+ */
int getScrollableBlockIncrement(Rectangle visibleRect, int orientation,
int direction);
+ /**
+ * Return true if the width of the scrollable is always equal to the
+ * view, where it is displayed, width (for instance, the text area with
+ * the word wrap). In such case, the horizontal scrolling should not be
+ * performed.
+ *
+ * @return true is no horizontal scrolling is assumed, faster otherwise.
+ */
boolean getScrollableTracksViewportWidth();
+ /**
+ * Return true if the height of the scrollable is always equal to the view,
+ * where it is displayed, height.In such case, the vertical scrolling should
+ * not be performed.
+ *
+ * @return true is no horizontal scrolling is assumed, faster otherwise.
+ */
boolean getScrollableTracksViewportHeight();
}
diff --git a/libjava/classpath/javax/swing/SingleSelectionModel.java b/libjava/classpath/javax/swing/SingleSelectionModel.java
index d57443b..9f33e33 100644
--- a/libjava/classpath/javax/swing/SingleSelectionModel.java
+++ b/libjava/classpath/javax/swing/SingleSelectionModel.java
@@ -37,6 +37,7 @@ exception statement from your version. */
package javax.swing;
+import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
@@ -49,37 +50,53 @@ import javax.swing.event.ChangeListener;
public interface SingleSelectionModel
{
/**
- * getSelectedIndex
- * @returns int
+ * Returns the selected index or <code>-1</code> if there is no selection.
+ *
+ * @return The selected index.
+ *
+ * @see #setSelectedIndex(int)
*/
int getSelectedIndex();
/**
- * setSelectedIndex
- * @param index TODO
+ * Sets the selected index and, if this is different to the previous
+ * selection, sends a {@link ChangeEvent} to all registered listeners.
+ *
+ * @param index the index (use <code>-1</code> to represent no selection).
+ *
+ * @see #getSelectedIndex()
+ * @see #clearSelection
*/
void setSelectedIndex(int index);
/**
- * clearSelection
+ * Clears the selection by setting the selected index to <code>-1</code> and
+ * sends a {@link ChangeEvent} to all registered listeners. If the selected
+ * index is already <code>-1</code>, this method does nothing.
*/
void clearSelection();
/**
- * isSelected
- * @returns boolean
+ * Returns <code>true</code> if there is a selection, and <code>false</code>
+ * otherwise.
+ *
+ * @return A boolean.
*/
boolean isSelected();
/**
- * addChangeListener
- * @param listener TODO
+ * Registers a listener to receive {@link ChangeEvent} notifications from
+ * this model whenever the selected index changes.
+ *
+ * @param listener the listener to add.
*/
void addChangeListener(ChangeListener listener);
/**
- * removeChangeListener
- * @param listener TODO
+ * Deregisters a listener so that it no longer receives {@link ChangeEvent}
+ * notifications from this model.
+ *
+ * @param listener the listener to remove.
*/
void removeChangeListener(ChangeListener listener);
diff --git a/libjava/classpath/javax/swing/SizeSequence.java b/libjava/classpath/javax/swing/SizeSequence.java
index dff966b..26099a1 100644
--- a/libjava/classpath/javax/swing/SizeSequence.java
+++ b/libjava/classpath/javax/swing/SizeSequence.java
@@ -1,5 +1,5 @@
/* SizeSequence.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,20 +38,22 @@ exception statement from your version. */
package javax.swing;
/**
- * SizeSequence
+ * A sequence of values that represent the dimensions (widths or heights) of
+ * some collection of items (for example, the widths of the columns in a table).
+ *
* @author Andrew Selkirk
- * @version 1.0
*/
public class SizeSequence
{
+ // TODO: Sun's API specification for this class contains an implementation
+ // note regarding the encoding for the element sizes. We currently use the
+ // simple size encoding but we should look at improving this.
- /**
- * sizes
- */
- private int[] sizes = new int[0];
+ /** Storage for the element sizes. */
+ private int[] sizes;
/**
- * Constructor SizeSequence
+ * Creates a new empty <code>SizeSequence</code> instance.
*/
public SizeSequence()
{
@@ -59,8 +61,10 @@ public class SizeSequence
}
/**
- * Constructor SizeSequence
- * @param numEntries TODO
+ * Creates a new <code>SizeSequence</code> instance with the specified number
+ * of elements, each having a size of 0.
+ *
+ * @param numEntries the number of elements.
*/
public SizeSequence(int numEntries)
{
@@ -68,48 +72,66 @@ public class SizeSequence
}
/**
- * Constructor SizeSequence
- * @param numEntries TODO
- * @param value TODO
+ * Creates a new <code>SizeSequence</code> instance with the specified number
+ * of elements all having the same size (<code>value</code>).
+ *
+ * @param numEntries the number of elements.
+ * @param value the value for each element.
*/
public SizeSequence(int numEntries, int value)
{
+ sizes = new int[0];
insertEntries(0, numEntries, value);
}
/**
- * Constructor SizeSequence
- * @param sizes TODO
+ * Creates a new <code>SizeSequence</code> instance using the specified
+ * element sizes.
+ *
+ * @param sizes the element sizes (<code>null</code> not permitted).
*/
public SizeSequence(int[] sizes)
{
- setSizes(sizes);
+ this.sizes = (int[]) sizes.clone();
}
/**
- * setSize
- * @param index TODO
- * @param size TODO
+ * Sets the size of the element at the specified index.
+ *
+ * @param index the index.
+ * @param size the size.
*/
public void setSize(int index, int size)
{
- sizes[index] = size;
+ if (index >= 0 && index < sizes.length)
+ sizes[index] = size;
}
/**
- * getIndex
- * @param position TODO
- * @returns int
+ * Returns the index of the element that contains the specified position.
+ *
+ * @param position the position.
+ *
+ * @return The index of the element that contains the specified position.
*/
public int getIndex(int position)
{
- return 0; // TODO
+ int i = 0;
+ int runningTotal = 0;
+ while (i < sizes.length && position >= runningTotal + sizes[i])
+ {
+ runningTotal += sizes[i];
+ i++;
+ }
+ return i;
}
/**
- * getSize
- * @param index TODO
- * @returns int
+ * Returns the size of the specified element.
+ *
+ * @param index the element index.
+ *
+ * @return The size of the specified element.
*/
public int getSize(int index)
{
@@ -117,122 +139,81 @@ public class SizeSequence
}
/**
- * setSizes
- * @param sizes TODO
+ * Sets the sizes for the elements in the sequence.
+ *
+ * @param sizes the element sizes (<code>null</code> not permitted).
*/
public void setSizes(int[] sizes)
{
- int index;
- // Initialize sizes.
- this.sizes = new int[sizes.length];
- for (index = 0; index < sizes.length; index++)
- this.sizes[index] = sizes[index];
-
+ this.sizes = (int[]) sizes.clone();
}
/**
- * getSizes
- * @returns int[]
+ * Returns an array containing the sizes for all the elements in the sequence.
+ *
+ * @return The element sizes.
*/
public int[] getSizes()
{
- int[] array;
- int index;
-
- // Create new array.
- array = new int[sizes.length];
- for (index = 0; index < sizes.length; index++)
- array[index] = sizes[index];
-
- // Return newly created array.
- return array;
-
+ return (int[]) sizes.clone();
}
/**
- * getPosition
- * @param index TODO
- * @returns int
+ * Returns the position of the specified element.
+ *
+ * @param index the element index.
+ *
+ * @return The position.
*/
public int getPosition(int index)
{
int position;
int loop;
-
- // Process sizes.
position = 0;
for (loop = 0; loop < index; loop++)
position += sizes[loop];
-
- // Return position.
return position;
}
/**
- * insertEntries
- * @param start TODO
- * @param length TODO
- * @param value TODO
+ * Inserts new entries into the sequence at the <code>start</code> position.
+ * There are <code>length</code> new entries each having the specified
+ * <code>value</code>.
+ *
+ * @param start the start element.
+ * @param length the number of elements to insert.
+ * @param value the size for each of the new elements.
*/
public void insertEntries(int start, int length, int value)
{
- int[] array;
- int index;
- int arrayIndex;
- int loop;
-
- // Create new array.
- array = new int[sizes.length + length];
- arrayIndex = 0;
- for (index = 0; index < sizes.length; index++)
- {
- if (index == start)
- {
- for (loop = 0; loop < length; loop++)
- {
- array[arrayIndex] = value;
- arrayIndex++;
- }
- }
- else
- {
- array[arrayIndex] = sizes[index];
- arrayIndex++;
- }
- }
-
- }
+ int[] newSizes = new int[sizes.length + length];
+ System.arraycopy(sizes, 0, newSizes, 0, start);
+ for (int i = start; i < start + length; i++)
+ newSizes[i] = value;
+ System.arraycopy(sizes, start, newSizes, start + length,
+ sizes.length - start);
+ sizes = newSizes;
+ }
/**
- * removeEntries
- * @param start TODO
- * @param length TODO
+ * Removes the element(s) at index <code>start</code> (the number of elements
+ * removed is <code>length</code>).
+ *
+ * @param start the index of the first element to remove.
+ * @param length the number of elements to remove.
*/
public void removeEntries(int start, int length)
{
- int[] array;
- int index;
- int arrayIndex;
-
// Sanity check.
if ((start + length) > sizes.length)
throw new IllegalArgumentException("Specified start/length that "
+ "is greater than available sizes");
- // Create new array.
- array = new int[sizes.length - length];
- arrayIndex = 0;
- for (index = 0; index < sizes.length; index++)
- {
- if (index == start)
- index += length - 1;
- else
- {
- array[arrayIndex] = sizes[index];
- arrayIndex++;
- }
- }
+ int[] newSizes = new int[sizes.length - length];
+ System.arraycopy(sizes, 0, newSizes, 0, start);
+ System.arraycopy(sizes, start + length, newSizes, start,
+ sizes.length - start - length);
+ sizes = newSizes;
}
-
}
diff --git a/libjava/classpath/javax/swing/SpinnerDateModel.java b/libjava/classpath/javax/swing/SpinnerDateModel.java
index e0ccab7..e5ff76f 100644
--- a/libjava/classpath/javax/swing/SpinnerDateModel.java
+++ b/libjava/classpath/javax/swing/SpinnerDateModel.java
@@ -59,13 +59,13 @@ public class SpinnerDateModel extends AbstractSpinnerModel
private Calendar date;
/**
- * The start or earliest permitted date (<code>null</code> for no
- * minimum).
+ * A constraint on the start or earliest permitted date (<code>null</code>
+ * for no minimum).
*/
private Comparable start;
/**
- * The end or latest permitted date (<code>null</code> for no
+ * A constraint on the end or latest permitted date (<code>null</code> for no
* maximum).
*/
private Comparable end;
@@ -77,7 +77,6 @@ public class SpinnerDateModel extends AbstractSpinnerModel
/**
* For compatability with Sun's JDK
- * FIXME: Which fields should be serialized?
*/
private static final long serialVersionUID = -4802518107105940612L;
@@ -92,23 +91,30 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Constructs a SpinnerDateModel which spins a given calendar field,
- * using a given date and start and end date limits.
- * @param value - the initial Date value
- * @param start - start limit, as a Date object, or <code>null</code>
- * for no lower limit.
- * @param end - end limit, or <code>null</code> for no upper limit.
- * @param calendarField - the <code>Calendar</code> field to spin,
- * (Calendar.ZONE_OFFSET and Calendar.DST_OFFSET are invalid)
+ * Constructs a <code>SpinnerDateModel</code> with the specified value, lower
+ * and upper bounds, and which spins the specified calendar field.
+ * <p>
+ * The <code>start</code> and <code>end</code> limits must have a
+ * <code>compareTo</code> method that supports instances of {@link Date}, but
+ * do not themselves need to be instances of {@link Date} (although typically
+ * they are).
+ *
+ * @param value the initial value/date (<code>null</code> not permitted).
+ * @param start a constraint that specifies the earliest permitted date
+ * value, or <code>null</code> for no lower limit.
+ * @param end a constraint that specifies the latest permitted date value,
+ * or <code>null</code> for no upper limit.
+ * @param calendarField the <code>Calendar</code> field to spin,
+ * (Calendar.ZONE_OFFSET and Calendar.DST_OFFSET are invalid)
*/
public SpinnerDateModel(Date value, Comparable start, Comparable end,
int calendarField)
{
if (value == null)
throw new IllegalArgumentException("Null 'value' argument.");
- if (start != null && value.compareTo(start) < 0)
+ if (start != null && start.compareTo(value) > 0)
throw new IllegalArgumentException("Require value on or after start.");
- if (end != null && value.compareTo(end) > 0)
+ if (end != null && end.compareTo(value) < 0)
throw new IllegalArgumentException("Require value on or before end.");
date = Calendar.getInstance();
date.setTime(value);
@@ -129,9 +135,11 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Returns the current date.
+ * Returns the current date/time.
+ *
+ * @return The current date/time (never <code>null</code>).
*
- * @return The current date.
+ * @see #getValue()
*/
public Date getDate()
{
@@ -139,9 +147,12 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Returns the start date, or <code>null</code> if there is no minimum date.
+ * Returns the lower limit on the date/time value, or <code>null</code> if
+ * there is no minimum date/time.
*
- * @return The start date.
+ * @return The lower limit.
+ *
+ * @see #setStart(Comparable)
*/
public Comparable getStart()
{
@@ -149,9 +160,12 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Returns the end date, or <code>null</code> if there is no maximum date.
+ * Returns the upper limit on the date/time value, or <code>null</code> if
+ * there is no maximum date/time.
+ *
+ * @return The upper limit.
*
- * @return The end date.
+ * @see #setEnd(Comparable)
*/
public Comparable getEnd()
{
@@ -160,9 +174,9 @@ public class SpinnerDateModel extends AbstractSpinnerModel
/**
* Returns the current date in the sequence (this method returns the same as
- * {@link #getDate()}.
+ * {@link #getDate()}).
*
- * @return The current date.
+ * @return The current date (never <code>null</code>).
*/
public Object getValue()
{
@@ -171,10 +185,13 @@ public class SpinnerDateModel extends AbstractSpinnerModel
/**
* Returns the next date in the sequence, or <code>null</code> if the
- * next date is after the end date. The current date is not changed.
+ * next date is past the upper limit (if one is specified). The current date
+ * is not changed.
*
* @return The next date, or <code>null</code> if the current value is
* the latest date represented by the model.
+ *
+ * @see #getEnd()
*/
public Object getNextValue()
{
@@ -190,11 +207,13 @@ public class SpinnerDateModel extends AbstractSpinnerModel
/**
* Returns the previous date in the sequence, or <code>null</code> if the
- * previous date is prior to the start date. The current date is not
- * changed.
+ * previous date is prior to the lower limit (if one is specified). The
+ * current date is not changed.
*
* @return The previous date, or <code>null</code> if the current value is
* the earliest date represented by the model.
+ *
+ * @see #getStart()
*/
public Object getPreviousValue()
{
@@ -233,14 +252,16 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Sets the start date and, if the new date is different to the old date,
- * sends a {@link ChangeEvent} to all registered listeners. A
- * <code>null</code> date is interpreted as "no start date". No check
- * is made to ensure that the new start date is on or before the current
- * date - the caller is responsible for ensuring that this relationship
- * holds.
+ * Sets the lower limit for the date/time value and, if the new limit is
+ * different to the old limit, sends a {@link ChangeEvent} to all registered
+ * listeners. A <code>null</code> value is interpreted as "no lower limit".
+ * No check is made to ensure that the current date/time is on or after the
+ * new lower limit - the caller is responsible for ensuring that this
+ * relationship holds. In addition, the caller should ensure that
+ * <code>start</code> is {@link Serializable}.
*
- * @param start the new start date (<code>null</code> permitted).
+ * @param start the new lower limit for the date/time value
+ * (<code>null</code> permitted).
*/
public void setStart(Comparable start)
{
@@ -252,13 +273,16 @@ public class SpinnerDateModel extends AbstractSpinnerModel
}
/**
- * Sets the end date and, if the new date is different to the old date,
- * sends a {@link ChangeEvent} to all registered listeners. A
- * <code>null</code> date is interpreted as "no end date". No check
- * is made to ensure that the new end date is on or after the current date -
- * the caller is responsible for ensuring that this relationship holds.
+ * Sets the upper limit for the date/time value and, if the new limit is
+ * different to the old limit, sends a {@link ChangeEvent} to all registered
+ * listeners. A <code>null</code> value is interpreted as "no upper limit".
+ * No check is made to ensure that the current date/time is on or before the
+ * new upper limit - the caller is responsible for ensuring that this
+ * relationship holds. In addition, the caller should ensure that
+ * <code>end</code> is {@link Serializable}.
*
- * @param end the new end date (<code>null</code> permitted).
+ * @param end the new upper limit for the date/time value (<code>null</code>
+ * permitted).
*/
public void setEnd(Comparable end)
{
diff --git a/libjava/classpath/javax/swing/SpinnerNumberModel.java b/libjava/classpath/javax/swing/SpinnerNumberModel.java
index 389c536..1abbbe3 100644
--- a/libjava/classpath/javax/swing/SpinnerNumberModel.java
+++ b/libjava/classpath/javax/swing/SpinnerNumberModel.java
@@ -110,12 +110,14 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
}
/**
- * Creates a <code>SpinnerNumberModel</code> with the given attributes.
+ * Creates a <code>SpinnerNumberModel</code> with the given attributes. The
+ * caller should ensure that both <code>minimum</code> and
+ * <code>maximum</code> are serializable.
*
- * @param value the initial value.
+ * @param value the initial value (<code>null</code> not permitted).
* @param minimum the minimum value (<code>null</code> permitted).
* @param maximum the maximum value (<code>null</code> permitted).
- * @param stepSize the step size.
+ * @param stepSize the step size (<code>null</code> not permitted).
*
* @throws IllegalArgumentException if minimum &lt;= value &lt;= maximum
* does not hold
@@ -171,9 +173,12 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
}
/**
- * Returns the current value.
+ * Returns the current value, which for this class is always an instance of
+ * {@link Number}.
*
* @return The current value.
+ *
+ * @see #getNumber()
*/
public Object getValue()
{
@@ -258,6 +263,8 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
* Returns the minimum value, or <code>null</code> if there is no minimum.
*
* @return The minimum value.
+ *
+ * @see #setMinimum(Comparable)
*/
public Comparable getMinimum()
{
@@ -270,9 +277,12 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
* <code>null</code> value is interpreted as "no minimum value". No check
* is made to ensure that the new minimum is less than or equal to the
* current value, the caller is responsible for ensuring that this
- * relationship holds.
+ * relationship holds. In addition, the caller should ensure that
+ * <code>newMinimum</code> is {@link Serializable}.
*
* @param newMinimum the new minimum value (<code>null</code> permitted).
+ *
+ * @see #getMinimum()
*/
public void setMinimum(Comparable newMinimum)
{
@@ -287,6 +297,9 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
* Returns the maximum value, or <code>null</code> if there is no maximum.
*
* @return The maximum value.
+ *
+ * @see #getMinimum()
+ * @see #setMaximum(Comparable)
*/
public Comparable getMaximum()
{
@@ -299,9 +312,12 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
* <code>null</code> value is interpreted as "no maximum value". No check
* is made to ensure that the new maximum is greater than or equal to the
* current value, the caller is responsible for ensuring that this
- * relationship holds.
+ * relationship holds. In addition, the caller should ensure that
+ * <code>newMaximum</code> is {@link Serializable}.
*
* @param newMaximum the new maximum (<code>null</code> permitted).
+ *
+ * @see #getMaximum()
*/
public void setMaximum(Comparable newMaximum)
{
@@ -315,7 +331,7 @@ public class SpinnerNumberModel extends AbstractSpinnerModel
/**
* Returns the step size.
*
- * @return The step size.
+ * @return The step size (never <code>null</code>).
*/
public Number getStepSize()
{
diff --git a/libjava/classpath/javax/swing/Spring.java b/libjava/classpath/javax/swing/Spring.java
index b9890c7..4775259 100644
--- a/libjava/classpath/javax/swing/Spring.java
+++ b/libjava/classpath/javax/swing/Spring.java
@@ -60,7 +60,7 @@ public abstract class Spring
{
/** Indicates a not-set value. **/
- public static final int UNSET = -2147483648;
+ public static final int UNSET = Integer.MIN_VALUE;
/**
* Creates a new Spring object. This constructor is used by the static
@@ -156,6 +156,33 @@ public abstract class Spring
*/
public abstract void setValue(int value);
+ private int getShrinkRange()
+ {
+ return (getPreferredValue() - getMinimumValue());
+ }
+
+ private int getExpandRange()
+ {
+ return (getMaximumValue() - getPreferredValue());
+ }
+
+ double getStrain()
+ {
+ int v = getValue();
+ int p = getPreferredValue();
+ int r = (v < p) ? getShrinkRange() : getExpandRange();
+ if (r == 0)
+ r = 1;
+ return (double)(v - p) / r;
+ }
+
+ void setStrain(double strain)
+ {
+ int r = (strain < 0) ? getShrinkRange() : getExpandRange();
+ int v = (getPreferredValue() + (int)(strain * r));
+ setValue(v);
+ }
+
/**
* Creates and returns a Spring, which is always the sum of s1 and s2.
* min_sum = min_s1 + min_s2, pref_sum = pref_s1 + pref_s2, max_sum =
@@ -323,6 +350,11 @@ public abstract class Spring
/** The actual value of the spring. */
private int value;
+ public String toString()
+ {
+ return "SimpleSpring of " + value;
+ }
+
/**
* Creates a new SimpleSpring object.
*
@@ -335,7 +367,7 @@ public abstract class Spring
min = newMin;
pref = newPref;
max = newMax;
- value = Spring.UNSET;
+ value = newPref;
}
/**
@@ -375,12 +407,8 @@ public abstract class Spring
*/
public int getValue()
{
-
if (value == Spring.UNSET)
- {
- value = pref;
- }
-
+ return pref;
return value;
}
@@ -391,21 +419,8 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > max)
- {
- value = max;
- }
- else if (val < min)
- {
- value = min;
- }
- else
- {
- value = val;
- }
+ value = val;
}
-
}
@@ -424,6 +439,11 @@ public abstract class Spring
/** The current value for this Spring. */
private int value;
+ public String toString()
+ {
+ return "AddSpring of " + s1 + " and " + s2;
+ }
+
/**
* Creates a new AddSpring object.
*
@@ -497,20 +517,24 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
- else
+ if (val == Spring.UNSET)
+ {
+ if (value != Spring.UNSET)
{
- value = val;
+ s1.setValue(Spring.UNSET);
+ s2.setValue(Spring.UNSET);
}
+ value = Spring.UNSET;
+ return;
+ }
+
+ value = val;
+ //Spead the value over the two components
+ double fStrain = getStrain();
+ s1.setStrain(fStrain);
+ int remainder = val - s1.getValue();
+ s2.setValue(remainder);
}
}
@@ -527,8 +551,10 @@ public abstract class Spring
/** The Spring from which to calculate the negation. */
private final Spring s;
- /** The current value of this Spring. */
- private int value;
+ public String toString()
+ {
+ return "MinusSpring of " + s;
+ }
/**
* Creates a new MinusSpring object.
@@ -538,7 +564,6 @@ public abstract class Spring
{
super();
this.s = s;
- value = Spring.UNSET;
}
/** Returns the maximum value of this Spring.
@@ -577,11 +602,7 @@ public abstract class Spring
*/
public int getValue()
{
- if (value == Spring.UNSET)
- {
- value = -s.getValue();
- }
- return value;
+ return -s.getValue();
}
/**
@@ -591,22 +612,11 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
+ if (val == Spring.UNSET)
+ s.setValue(Spring.UNSET);
else
- {
- value = val;
- }
-
+ s.setValue(-val);
}
-
}
@@ -622,6 +632,11 @@ public abstract class Spring
private final Spring s1;
private final Spring s2;
+ public String toString()
+ {
+ return "MaxSpring of " + s1 + " and " + s2;
+ }
+
/** The current value of this Spring. */
private int value;
@@ -684,7 +699,7 @@ public abstract class Spring
public int getValue()
{
if (value == Spring.UNSET)
- {
+ {
int val1 = s1.getValue();
int val2 = s2.getValue();
value = Math.max(val1, val2);
@@ -699,19 +714,32 @@ public abstract class Spring
*/
public void setValue(int val)
{
-
- if (val > getMaximumValue())
- {
- value = getMaximumValue();
- }
- else if (val < getMinimumValue())
- {
- value = getMinimumValue();
- }
- else
+ if (val == Spring.UNSET)
+ {
+ if (value != Spring.UNSET)
{
- value = val;
+ s1.setValue(Spring.UNSET);
+ s2.setValue(Spring.UNSET);
}
+ value = Spring.UNSET;
+ return;
+ }
+
+ value = val;
+
+ int p1 = s1.getPreferredValue();
+ int p2 = s2.getPreferredValue();
+
+ if (p1 < p2)
+ {
+ s1.setValue(Math.min(val, p1));
+ s2.setValue(val);
+ }
+ else
+ {
+ s1.setValue(val);
+ s2.setValue(Math.min(val, p2));
+ }
}
}
}
diff --git a/libjava/classpath/javax/swing/SpringLayout.java b/libjava/classpath/javax/swing/SpringLayout.java
index 8d46a73..d870506 100644
--- a/libjava/classpath/javax/swing/SpringLayout.java
+++ b/libjava/classpath/javax/swing/SpringLayout.java
@@ -110,13 +110,22 @@ public class SpringLayout implements LayoutManager2
/** The Spring for the bottom edge. */
private Spring south;
+ /**
+ In each axis the user can set three values, i.e. x, width, east, if all
+ three are set, then there's no room for manoeuvre so in those cases the
+ third will be described by the below spring which is calculated in terms
+ of the other two
+ */
+ private Spring v;
+ private Spring h;
+
/**
* Creates a new Constraints object.
* There is no constraint set.
*/
public Constraints()
{
- x = y = height = width = east = south = null;
+ x = y = height = width = east = south = v = h = null;
}
/**
@@ -129,7 +138,7 @@ public class SpringLayout implements LayoutManager2
{
this.x = x;
this.y = y;
- width = height = east = south = null;
+ width = height = east = south = v = h = null;
}
/**
@@ -146,7 +155,7 @@ public class SpringLayout implements LayoutManager2
this.y = y;
this.width = width;
this.height = height;
- east = south = null;
+ east = south = v = h = null;
}
/**
@@ -180,22 +189,13 @@ public class SpringLayout implements LayoutManager2
{
Spring retVal = null;
if (edgeName.equals(SpringLayout.NORTH))
- retVal = y;
+ retVal = getY();
else if (edgeName.equals(SpringLayout.WEST))
- retVal = x;
+ retVal = getX();
else if (edgeName.equals(SpringLayout.SOUTH))
- {
- retVal = south;
- if ((retVal == null) && (y != null) && (height != null))
- retVal = Spring.sum(y, height);
- }
+ retVal = getSouth();
else if (edgeName.equals(SpringLayout.EAST))
- {
- retVal = east;
- if ((retVal == null) && (x != null) && (width != null))
- retVal = Spring.sum(x, width);
- }
-
+ retVal = getEast();
return retVal;
}
@@ -206,12 +206,11 @@ public class SpringLayout implements LayoutManager2
*/
public Spring getHeight()
{
- Spring retVal = height;
- if ((retVal == null) && (y != null) && (south != null))
- {
- retVal = Spring.sum(south, Spring.minus(y));
- }
- return retVal;
+ if (height != null)
+ return height;
+ else if ((v == null) && (y != null) && (south != null))
+ v = Spring.sum(south, Spring.minus(y));
+ return v;
}
/**
@@ -221,12 +220,11 @@ public class SpringLayout implements LayoutManager2
*/
public Spring getWidth()
{
- Spring retVal = width;
- if ((retVal == null) && (x != null) && (east != null))
- {
- retVal = Spring.sum(east, Spring.minus(x));
- }
- return retVal;
+ if (width != null)
+ return width;
+ else if ((h == null) && (x != null) && (east != null))
+ h = Spring.sum(east, Spring.minus(x));
+ return h;
}
/**
@@ -236,12 +234,11 @@ public class SpringLayout implements LayoutManager2
*/
public Spring getX()
{
- Spring retVal = x;
- if ((retVal == null) && (width != null) && (east != null))
- {
- retVal = Spring.sum(east, Spring.minus(width));
- }
- return retVal;
+ if (x != null)
+ return x;
+ else if ((h == null) && (width != null) && (east != null))
+ h = Spring.sum(east, Spring.minus(width));
+ return h;
}
/**
@@ -251,12 +248,39 @@ public class SpringLayout implements LayoutManager2
*/
public Spring getY()
{
- Spring retVal = y;
- if ((retVal == null) && (height != null) && (south != null))
- {
- retVal = Spring.sum(south, Spring.minus(height));
- }
- return retVal;
+ if (y != null)
+ return y;
+ else if ((v == null) && (height != null) && (south != null))
+ v = Spring.sum(south, Spring.minus(height));
+ return v;
+ }
+
+ /**
+ * Returns the constraint for the lower edge of the component.
+ *
+ * @return the lower-edge constraint (== SOUTH).
+ */
+ public Spring getSouth()
+ {
+ if (south != null)
+ return south;
+ else if ((v == null) && (height != null) && (y != null))
+ v = Spring.sum(y, height);
+ return v;
+ }
+
+ /**
+ * Returns the constraint for the right edge of the component.
+ *
+ * @return the right-edge constraint (== EAST).
+ */
+ public Spring getEast()
+ {
+ if (east != null)
+ return east;
+ else if ((h == null) && (width != null) && (x != null))
+ h = Spring.sum(x, width);
+ return h;
}
/**
@@ -272,29 +296,13 @@ public class SpringLayout implements LayoutManager2
{
if (edgeName.equals(SpringLayout.WEST))
- {
- x = s;
- if ((width != null) && (east != null))
- width = Spring.sum(east, Spring.minus(x));
- }
+ setX(s);
else if (edgeName.equals(SpringLayout.NORTH))
- {
- y = s;
- if ((height != null) && (south != null))
- height = Spring.sum(south, Spring.minus(y));
- }
+ setY(s);
else if (edgeName.equals(SpringLayout.EAST))
- {
- east = s;
- if ((x != null) && (width != null))
- x = Spring.sum(east, Spring.minus(width));
- }
+ setEast(s);
else if (edgeName.equals(SpringLayout.SOUTH))
- {
- south = s;
- if ((height != null) && (y != null))
- y = Spring.sum(south, Spring.minus(height));
- }
+ setSouth(s);
}
@@ -306,9 +314,9 @@ public class SpringLayout implements LayoutManager2
public void setHeight(Spring s)
{
height = s;
- if ((south != null) && (y != null))
- south = Spring.sum(y, height);
-
+ v = null;
+ if ((south != null) && (y != null) && (height != null))
+ south = null;
}
/**
@@ -319,9 +327,9 @@ public class SpringLayout implements LayoutManager2
public void setWidth(Spring s)
{
width = s;
- if ((east != null) && (x != null))
- east = Spring.sum(x, width);
-
+ h = null;
+ if ((east != null) && (x != null) && (width != null))
+ east = null;
}
/**
@@ -332,9 +340,9 @@ public class SpringLayout implements LayoutManager2
public void setX(Spring s)
{
x = s;
- if ((width != null) && (east != null))
- width = Spring.sum(east, Spring.minus(x));
-
+ h = null;
+ if ((width != null) && (east != null) && (x != null))
+ width = null;
}
/**
@@ -345,9 +353,55 @@ public class SpringLayout implements LayoutManager2
public void setY(Spring s)
{
y = s;
- if ((height != null) && (south != null))
- height = Spring.sum(south, Spring.minus(y));
+ v = null;
+ if ((height != null) && (south != null) && (y != null))
+ height = null;
+ }
+ /**
+ * Sets the SOUTH-constraint.
+ *
+ * @param s the constraint to be set.
+ */
+ public void setSouth(Spring s)
+ {
+ south = s;
+ v = null;
+ if ((height != null) && (south != null) && (y != null))
+ y = null;
+ }
+
+ /**
+ * Sets the EAST-constraint.
+ *
+ * @param s the constraint to be set.
+ */
+ public void setEast(Spring s)
+ {
+ east = s;
+ h = null;
+ if ((width != null) && (east != null) && (x != null))
+ x = null;
+ }
+
+ public void dropCalcResult()
+ {
+ if (x != null)
+ x.setValue(Spring.UNSET);
+ if (y != null)
+ y.setValue(Spring.UNSET);
+ if (width != null)
+ width.setValue(Spring.UNSET);
+ if (height != null)
+ height.setValue(Spring.UNSET);
+ if (east != null)
+ east.setValue(Spring.UNSET);
+ if (south != null)
+ south.setValue(Spring.UNSET);
+ if (h != null)
+ h.setValue(Spring.UNSET);
+ if (v != null)
+ v.setValue(Spring.UNSET);
}
}
@@ -356,7 +410,6 @@ public class SpringLayout implements LayoutManager2
*/
public SpringLayout()
{
-
constraintsMap = new HashMap();
}
@@ -373,7 +426,6 @@ public class SpringLayout implements LayoutManager2
constraintsMap.put(component, constraint);
}
-
/**
* Adds a layout component and a constraint object to this layout.
* This method is usually only called by a {@link java.awt.Container}s add
@@ -389,6 +441,158 @@ public class SpringLayout implements LayoutManager2
}
/**
+ * The trick to SpringLayout is that the network of Springs needs to
+ * completely created before the positioning results are generated.
+ *
+ * Using the springs directly during network creation will set their values
+ * before the network is completed, Using Deferred Springs during creation of
+ * the network allows all the edges to be connected together and the network
+ * to be created without resolving the Springs until their results need to be
+ * known, at which point the network is complete and the spring addition and
+ * and substitution calculations will work on a complete and valid network.
+ *
+ * @author Caolan McNamara (caolanm@redhat.com)
+ */
+ private static class DeferredSpring extends Spring
+ {
+ private SpringLayout sl;
+ private String edgeName;
+ private Component c;
+
+ public String toString()
+ {
+ return "DeferredSpring of edge" + edgeName + " of " + "something";
+ }
+
+ public DeferredSpring(SpringLayout s, String edge, Component component)
+ {
+ sl = s;
+ edgeName = edge;
+ c = component;
+ }
+
+ private Spring resolveSpring()
+ {
+ return sl.getConstraints(c).getConstraint(edgeName);
+ }
+
+ public int getMaximumValue()
+ {
+ return resolveSpring().getMaximumValue();
+ }
+
+ public int getMinimumValue()
+ {
+ return resolveSpring().getMinimumValue();
+ }
+
+ public int getPreferredValue()
+ {
+ return resolveSpring().getPreferredValue();
+ }
+
+ public int getValue()
+ {
+ int nRet = resolveSpring().getValue();
+ if (nRet == Spring.UNSET)
+ nRet = getPreferredValue();
+ return nRet;
+ }
+
+ public void setValue(int size)
+ {
+ resolveSpring().setValue(size);
+ }
+ }
+
+ private static abstract class DeferredDimension extends Spring
+ {
+ private int value;
+
+ public DeferredDimension()
+ {
+ value = Spring.UNSET;
+ }
+
+ public void setValue(int val)
+ {
+ value = val;
+ }
+
+ public int getValue()
+ {
+ if (value == Spring.UNSET)
+ return getPreferredValue();
+ return value;
+ }
+ }
+
+ private static class DeferredWidth extends DeferredDimension
+ {
+ private Component c;
+
+
+ public DeferredWidth(Component component)
+ {
+ c = component;
+ }
+
+ public String toString()
+ {
+ return "DeferredWidth of " + "something";
+ }
+
+ //clip max to a value we can do meaningful calculation with
+ public int getMaximumValue()
+ {
+ int widget_width = c.getMaximumSize().width;
+ return Math.min(Short.MAX_VALUE, widget_width);
+ }
+
+ public int getMinimumValue()
+ {
+ return c.getMinimumSize().width;
+ }
+
+ public int getPreferredValue()
+ {
+ return c.getPreferredSize().width;
+ }
+ }
+
+ private static class DeferredHeight extends DeferredDimension
+ {
+ private Component c;
+
+ public String toString()
+ {
+ return "DeferredHeight of " + "something";
+ }
+
+ public DeferredHeight(Component component)
+ {
+ c = component;
+ }
+
+ //clip max to a value we can do meaningful calculations with it
+ public int getMaximumValue()
+ {
+ int widget_height = c.getMaximumSize().height;
+ return Math.min(Short.MAX_VALUE, widget_height);
+ }
+
+ public int getMinimumValue()
+ {
+ return c.getMinimumSize().height;
+ }
+
+ public int getPreferredValue()
+ {
+ return c.getPreferredSize().height;
+ }
+ }
+
+ /**
* Returns the constraint of the edge named by <code>edgeName</code>.
*
* @param c the component from which to get the constraint.
@@ -399,8 +603,7 @@ public class SpringLayout implements LayoutManager2
*/
public Spring getConstraint(String edgeName, Component c)
{
- Constraints constraints = getConstraints(c);
- return constraints.getConstraint(edgeName);
+ return new DeferredSpring(this, edgeName, c);
}
/**
@@ -416,28 +619,16 @@ public class SpringLayout implements LayoutManager2
Constraints constraints = (Constraints) constraintsMap.get(c);
if (constraints == null)
- {
- Container parent = c.getParent();
- constraints = new Constraints();
-
- if (parent != null)
- {
- constraints.setX(Spring.constant(parent.getInsets().left));
- constraints.setY(Spring.constant(parent.getInsets().top));
- }
- else
- {
- constraints.setX(Spring.constant(0));
- constraints.setY(Spring.constant(0));
- }
- }
- constraints.setWidth(Spring.constant(c.getMinimumSize().width,
- c.getPreferredSize().width,
- c.getMaximumSize().width));
- constraints.setHeight(Spring.constant(c.getMinimumSize().height,
- c.getPreferredSize().height,
- c.getMaximumSize().height));
- constraintsMap.put(c, constraints);
+ {
+ constraints = new Constraints();
+
+ constraints.setWidth(new DeferredWidth(c));
+ constraints.setHeight(new DeferredHeight(c));
+ constraints.setX(Spring.constant(0));
+ constraints.setY(Spring.constant(0));
+
+ constraintsMap.put(c, constraints);
+ }
return constraints;
}
@@ -475,6 +666,22 @@ public class SpringLayout implements LayoutManager2
// nothing to do here yet
}
+ private Constraints initContainer(Container p)
+ {
+ Constraints c = getConstraints(p);
+
+ c.setX(Spring.constant(0));
+ c.setY(Spring.constant(0));
+ c.setWidth(null);
+ c.setHeight(null);
+ if (c.getEast() == null)
+ c.setEast(Spring.constant(0, 0, Integer.MAX_VALUE));
+ if (c.getSouth() == null)
+ c.setSouth(Spring.constant(0, 0, Integer.MAX_VALUE));
+
+ return c;
+ }
+
/**
* Lays out the container <code>p</code>.
*
@@ -482,28 +689,40 @@ public class SpringLayout implements LayoutManager2
*/
public void layoutContainer(Container p)
{
+ java.awt.Insets insets = p.getInsets();
- addLayoutComponent(p, new Constraints(Spring.constant(0),
- Spring.constant(0)));
+ Component[] components = p.getComponents();
- int offsetX = p.getInsets().left;
- int offsetY = p.getInsets().right;
+ Constraints cs = initContainer(p);
+ cs.dropCalcResult();
- Component[] components = p.getComponents();
- for (int index = 0; index < components.length; index++)
- {
+ for (int index = 0 ; index < components.length; index++)
+ {
Component c = components[index];
+ getConstraints(c).dropCalcResult();
+ }
- Constraints constraints = getConstraints(c);
- int x = constraints.getX().getValue();
- int y = constraints.getY().getValue();
- int width = constraints.getWidth().getValue();
- int height = constraints.getHeight().getValue();
+ int offsetX = p.getInsets().left;
+ int offsetY = p.getInsets().right;
- c.setLocation(x + offsetX, y + offsetY);
- c.setSize(width, height);
- }
+ cs.getX().setValue(0);
+ cs.getY().setValue(0);
+ cs.getWidth().setValue(p.getWidth() - offsetX - insets.right);
+ cs.getHeight().setValue(p.getHeight() - offsetY - insets.bottom);
+ for (int index = 0; index < components.length; index++)
+ {
+ Component c = components[index];
+
+ Constraints constraints = getConstraints(c);
+
+ int x = constraints.getX().getValue();
+ int y = constraints.getY().getValue();
+ int width = constraints.getWidth().getValue();
+ int height = constraints.getHeight().getValue();
+
+ c.setBounds(x + offsetX, y + offsetY, width, height);
+ }
}
/**
@@ -515,29 +734,12 @@ public class SpringLayout implements LayoutManager2
*/
public Dimension maximumLayoutSize(Container p)
{
- int maxX = 0;
- int maxY = 0;
+ java.awt.Insets insets = p.getInsets();
- int offsetX = p.getInsets().left;
- int offsetY = p.getInsets().right;
+ Constraints cs = initContainer(p);
- Component[] components = p.getComponents();
- for (int index = 0; index < components.length; index++)
- {
- Component c = components[index];
- Constraints constraints = getConstraints(c);
- int x = constraints.getX().getMaximumValue();
- int y = constraints.getY().getMaximumValue();
- int width = constraints.getWidth().getMaximumValue();
- int height = constraints.getHeight().getMaximumValue();
-
- int rightEdge = offsetX + x + width;
- if (rightEdge > maxX)
- maxX = rightEdge;
- int bottomEdge = offsetY + y + height;
- if (bottomEdge > maxY)
- maxY = bottomEdge;
- }
+ int maxX = cs.getWidth().getMaximumValue() + insets.left + insets.right;
+ int maxY = cs.getHeight().getMaximumValue() + insets.top + insets.bottom;
return new Dimension(maxX, maxY);
}
@@ -552,29 +754,12 @@ public class SpringLayout implements LayoutManager2
*/
public Dimension minimumLayoutSize(Container p)
{
- int maxX = 0;
- int maxY = 0;
+ java.awt.Insets insets = p.getInsets();
- int offsetX = p.getInsets().left;
- int offsetY = p.getInsets().right;
+ Constraints cs = initContainer(p);
- Component[] components = p.getComponents();
- for (int index = 0; index < components.length; index++)
- {
- Component c = components[index];
- Constraints constraints = getConstraints(c);
- int x = constraints.getX().getMinimumValue();
- int y = constraints.getY().getMinimumValue();
- int width = constraints.getWidth().getMinimumValue();
- int height = constraints.getHeight().getMinimumValue();
-
- int rightEdge = offsetX + x + width;
- if (rightEdge > maxX)
- maxX = rightEdge;
- int bottomEdge = offsetY + y + height;
- if (bottomEdge > maxY)
- maxY = bottomEdge;
- }
+ int maxX = cs.getWidth().getMinimumValue() + insets.left + insets.right;
+ int maxY = cs.getHeight().getMinimumValue() + insets.top + insets.bottom;
return new Dimension(maxX, maxY);
}
@@ -588,29 +773,13 @@ public class SpringLayout implements LayoutManager2
*/
public Dimension preferredLayoutSize(Container p)
{
- int maxX = 0;
- int maxY = 0;
+ java.awt.Insets insets = p.getInsets();
- int offsetX = p.getInsets().left;
- int offsetY = p.getInsets().right;
+ Constraints cs = initContainer(p);
+
+ int maxX = cs.getWidth().getPreferredValue() + insets.left + insets.right;
+ int maxY = cs.getHeight().getPreferredValue() + insets.top + insets.bottom;
- Component[] components = p.getComponents();
- for (int index = 0; index < components.length; index++)
- {
- Component c = components[index];
- Constraints constraints = getConstraints(c);
- int x = constraints.getX().getPreferredValue();
- int y = constraints.getY().getPreferredValue();
- int width = constraints.getWidth().getPreferredValue();
- int height = constraints.getHeight().getPreferredValue();
-
- int rightEdge = offsetX + x + width;
- if (rightEdge > maxX)
- maxX = rightEdge;
- int bottomEdge = offsetY + y + height;
- if (bottomEdge > maxY)
- maxY = bottomEdge;
- }
return new Dimension(maxX, maxY);
}
@@ -628,12 +797,7 @@ public class SpringLayout implements LayoutManager2
public void putConstraint(String e1, Component c1, int pad, String e2,
Component c2)
{
- Constraints constraints1 = getConstraints(c1);
- Constraints constraints2 = getConstraints(c2);
-
- Spring strut = Spring.constant(pad);
- Spring otherEdge = constraints2.getConstraint(e2);
- constraints1.setConstraint(e1, Spring.sum(strut, otherEdge));
+ putConstraint(e1, c1, Spring.constant(pad), e2, c2);
}
/**
@@ -651,9 +815,8 @@ public class SpringLayout implements LayoutManager2
Component c2)
{
Constraints constraints1 = getConstraints(c1);
- Constraints constraints2 = getConstraints(c2);
- Spring otherEdge = constraints2.getConstraint(e2);
+ Spring otherEdge = getConstraint(e2, c2);
constraints1.setConstraint(e1, Spring.sum(s, otherEdge));
}
diff --git a/libjava/classpath/javax/swing/SwingUtilities.java b/libjava/classpath/javax/swing/SwingUtilities.java
index 6762ccd..9d8e8df 100644
--- a/libjava/classpath/javax/swing/SwingUtilities.java
+++ b/libjava/classpath/javax/swing/SwingUtilities.java
@@ -1,5 +1,5 @@
/* SwingUtilities.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -91,23 +91,23 @@ public class SwingUtilities
* of the <em>component's</em> coordinate system, where (0,0) is the
* upper left corner of the component's bounds.
*
- * @param c The component to measure the bounds of
- * @param r A Rectangle to store the return value in, or
- * <code>null</code>
+ * @param c the component to measure the bounds of (if <code>null</code>,
+ * this method returns <code>null</code>).
+ * @param r a carrier to store the return value in (if <code>null</code>, a
+ * new <code>Rectangle</code> instance is created).
*
- * @return The calculated area inside the component and its border
- * insets
+ * @return The calculated area inside the component and its border insets.
*/
public static Rectangle calculateInnerArea(JComponent c, Rectangle r)
{
- Rectangle b = getLocalBounds(c);
- if (r == null)
- r = new Rectangle();
+ if (c == null)
+ return null;
+ r = c.getBounds(r);
Insets i = c.getInsets();
- r.x = b.x + i.left;
- r.width = b.width - i.left - i.right;
- r.y = b.y + i.top;
- r.height = b.height - i.top - i.bottom;
+ r.x = i.left;
+ r.width = r.width - i.left - i.right;
+ r.y = i.top;
+ r.height = r.height - i.top - i.bottom;
return r;
}
@@ -386,20 +386,17 @@ public class SwingUtilities
app = (Applet) comp;
comp = comp.getParent();
}
-
+
if (win != null)
return win;
- else
- return app;
+ return app;
}
/**
- * Return true if a descends from b, in other words if b is an
- * ancestor of a.
- *
+ * Return true if a descends from b, in other words if b is an ancestor of a.
+ *
* @param a The child to search the ancestry of
* @param b The potential ancestor to search for
- *
* @return true if a is a descendent of b, false otherwise
*/
public static boolean isDescendingFrom(Component a, Component b)
@@ -600,20 +597,46 @@ public class SwingUtilities
*/
public static void updateComponentTreeUI(Component comp)
{
- if (comp == null)
- return;
-
- if (comp instanceof Container)
+ updateComponentTreeUIImpl(comp);
+ if (comp instanceof JComponent)
{
- Component[] children = ((Container)comp).getComponents();
- for (int i = 0; i < children.length; ++i)
- updateComponentTreeUI(children[i]);
+ JComponent jc = (JComponent) comp;
+ jc.revalidate();
}
-
- if (comp instanceof JComponent)
- ((JComponent)comp).updateUI();
+ else
+ {
+ comp.invalidate();
+ comp.validate();
+ }
+ comp.repaint();
}
+ /**
+ * Performs the actual work for {@link #updateComponentTreeUI(Component)}.
+ * This calls updateUI() on c if it is a JComponent, and then walks down
+ * the component tree and calls this method on each child component.
+ *
+ * @param c the component to update the UI
+ */
+ private static void updateComponentTreeUIImpl(Component c)
+ {
+ if (c instanceof JComponent)
+ {
+ JComponent jc = (JComponent) c;
+ jc.updateUI();
+ }
+
+ Component[] components = null;
+ if (c instanceof JMenu)
+ components = ((JMenu) c).getMenuComponents();
+ else if (c instanceof Container)
+ components = ((Container) c).getComponents();
+ if (components != null)
+ {
+ for (int i = 0; i < components.length; ++i)
+ updateComponentTreeUIImpl(components[i]);
+ }
+ }
/**
* <p>Layout a "compound label" consisting of a text string and an icon
@@ -1128,7 +1151,9 @@ public class SwingUtilities
child = parent;
parent = child.getParent();
}
- child.setParent(uiActionMap);
+ // Sanity check to avoid loops.
+ if (child != uiActionMap)
+ child.setParent(uiActionMap);
}
}
@@ -1170,7 +1195,9 @@ public class SwingUtilities
child = parent;
parent = parent.getParent();
}
- child.setParent(uiInputMap);
+ // Sanity check to avoid loops.
+ if (child != uiInputMap)
+ child.setParent(uiInputMap);
}
}
diff --git a/libjava/classpath/javax/swing/UIManager.java b/libjava/classpath/javax/swing/UIManager.java
index bf8739d..e1ee28b 100644
--- a/libjava/classpath/javax/swing/UIManager.java
+++ b/libjava/classpath/javax/swing/UIManager.java
@@ -1,5 +1,5 @@
/* UIManager.java --
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -121,7 +121,8 @@ public class UIManager implements Serializable
/** The installed look and feel(s). */
static LookAndFeelInfo [] installed = {
- new LookAndFeelInfo("Metal", "javax.swing.plaf.metal.MetalLookAndFeel")
+ new LookAndFeelInfo("Metal", "javax.swing.plaf.metal.MetalLookAndFeel"),
+ new LookAndFeelInfo("GNU", "gnu.javax.swing.plaf.gnu.GNULookAndFeel")
};
/** The installed auxiliary look and feels. */
@@ -612,7 +613,10 @@ public class UIManager implements Serializable
*/
public static void installLookAndFeel(LookAndFeelInfo info)
{
- // FIXME: not yet implemented
+ LookAndFeelInfo[] newInstalled = new LookAndFeelInfo[installed.length + 1];
+ System.arraycopy(installed, 0, newInstalled, 0, installed.length);
+ newInstalled[newInstalled.length - 1] = info;
+ setInstalledLookAndFeels(newInstalled);
}
/**
@@ -632,7 +636,7 @@ public class UIManager implements Serializable
*/
public static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos)
{
- // FIXME: not yet implemented.
+ installed = infos;
}
/**
diff --git a/libjava/classpath/javax/swing/ViewportLayout.java b/libjava/classpath/javax/swing/ViewportLayout.java
index 674de95..b61834e 100644
--- a/libjava/classpath/javax/swing/ViewportLayout.java
+++ b/libjava/classpath/javax/swing/ViewportLayout.java
@@ -120,80 +120,83 @@ public class ViewportLayout implements LayoutManager, Serializable
}
/**
- * Layout the view and viewport to respect the following rules. These are
- * not precisely the rules described in sun's javadocs, but they are the
- * rules which sun's swing implementation follows, if you watch its
- * behavior:
- *
- * <ol>
- *
- * <li>If the port is smaller than the view, leave the view at its
- * current size. Also, do not move the port, <em>unless</em> the port
- * extends into space <em>past</em> the edge of the view. If so, move the
- * port up or to the left, in view space, by the amount of empty space
- * (keep the lower and right edges lined up)</li>
+ * Layout the view and viewport to respect the following rules. These are not
+ * precisely the rules described in sun's javadocs, but they are the rules
+ * which sun's swing implementation follows, if you watch its behavior:
+ * <ol>
+ * <li>If the port is smaller than the view, leave the view at its current
+ * size.</li>
+ * <li>If the view is smaller than the port, the view is top aligned.</li>
+ * <li>If the view tracks the port size, the view position is always zero and
+ * the size equal to the viewport size</li>
* <li>In {@link JViewport#setViewSize(Dimension)}, the view size is never
* set smaller that its minimum size.</li>
- *
* </ol>
- *
+ *
* @see JViewport#getViewSize
* @see JViewport#setViewSize
* @see JViewport#getViewPosition
* @see JViewport#setViewPosition
*/
- public void layoutContainer(Container parent)
+ public void layoutContainer(Container parent)
{
// The way to interpret this function is basically to ignore the names
// of methods it calls, and focus on the variable names here. getViewRect
// doesn't, for example, return the view; it returns the port bounds in
- // view space. Likwise setViewPosition doesn't reposition the view; it
+ // view space. Likwise setViewPosition doesn't reposition the view; it
// positions the port, in view coordinates.
- JViewport port = (JViewport) parent;
+ JViewport port = (JViewport) parent;
Component view = port.getView();
-
+
if (view == null)
return;
- // These dimensions and positions are in *view space*. Do not mix
+ // These dimensions and positions are in *view space*. Do not mix
// variables in here from port space (eg. parent.getBounds()). This
// function should be entirely in view space, because the methods on
// the viewport require inputs in view space.
Rectangle portBounds = port.getViewRect();
- Dimension viewPref = view.getPreferredSize();
- Dimension viewMinimum = view.getMinimumSize();
-
+ Dimension viewPref = new Dimension(view.getPreferredSize());
+
Point portLowerRight = new Point(portBounds.x + portBounds.width,
portBounds.y + portBounds.height);
- int overextension;
// vertical implementation of the above rules
- if ((! (view instanceof Scrollable) && viewPref.height < portBounds.height
- || (view instanceof Scrollable
- && ((Scrollable) view).getScrollableTracksViewportHeight())))
- viewPref.height = portBounds.height;
-
- // If the view is larger than the port, and port is partly outside
- // the view, it is moved fully into the view area.
- overextension = portLowerRight.y - viewPref.height;
- if (overextension > 0)
- portBounds.y -= overextension;
-
- // horizontal implementation of the above rules
- if ((! (view instanceof Scrollable) && viewPref.width < portBounds.width
- || (view instanceof Scrollable
- && ((Scrollable) view).getScrollableTracksViewportWidth())))
- viewPref.width = portBounds.width;
-
- // If the view is larger than the port, and port is partly outside
- // the view, it is moved fully into the view area.
- overextension = portLowerRight.x - viewPref.width;
- if (overextension > 0)
- portBounds.x -= overextension;
+ if (view instanceof Scrollable)
+ {
+ Scrollable sView = (Scrollable) view;
+
+ // If the view size matches viewport size, the port offset can
+ // only be zero.
+ if (sView.getScrollableTracksViewportWidth())
+ {
+ viewPref.width = portBounds.width;
+ portBounds.x = 0;
+ }
+ if (sView.getScrollableTracksViewportHeight())
+ {
+ viewPref.height = portBounds.height;
+ portBounds.y = 0;
+ }
+ }
+
+ if (viewPref.width < portBounds.width)
+ viewPref.width = portBounds.width;
+ if (viewPref.height < portBounds.height)
+ viewPref.height = portBounds.height;
+
+ // If the view is larger than the port, the port is top and right
+ // aligned.
+ if (portLowerRight.x > viewPref.width)
+ portBounds.x = 0;
+
+ if (portLowerRight.y > viewPref.height)
+ portBounds.y = 0;
port.setViewSize(viewPref);
port.setViewPosition(portBounds.getLocation());
}
+
}
diff --git a/libjava/classpath/javax/swing/border/AbstractBorder.java b/libjava/classpath/javax/swing/border/AbstractBorder.java
index 7cbbcda..c995de1 100644
--- a/libjava/classpath/javax/swing/border/AbstractBorder.java
+++ b/libjava/classpath/javax/swing/border/AbstractBorder.java
@@ -1,5 +1,5 @@
/* AbstractBorder.java --
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -68,7 +68,7 @@ public abstract class AbstractBorder implements Border, Serializable
* Performs nothing, because the default implementation provided by
* this class is an invisible, zero-width border. Subclasses will
* likely want to override this method, but they are not required
- * for doing so.
+ * to do so.
*
* @param c the component whose border is to be painted.
* @param g the graphics for painting.
@@ -87,9 +87,11 @@ public abstract class AbstractBorder implements Border, Serializable
}
/**
- * Measures the width of this border.
+ * Returns the insets required for drawing this border around the specified
+ * component.
*
- * @param c the component whose border is to be measured.
+ * @param c the component that the border applies to (ignored here,
+ * subclasses may use it).
*
* @return an Insets object whose <code>left</code>, <code>right</code>,
* <code>top</code> and <code>bottom</code> fields indicate the
@@ -104,16 +106,23 @@ public abstract class AbstractBorder implements Border, Serializable
}
/**
- * Determines the insets of this border. The implementation provided
- * by AbstractButton sets the <code>left</code>, <code>right</code>,
- * <code>top</code> and <code>bottom</code> fields of the passed
- * <code>insets</code> parameter to zero.
+ * Returns the insets required for drawing this border around the specified
+ * component. The default implementation provided here sets the
+ * <code>left</code>, <code>right</code>, <code>top</code> and
+ * <code>bottom</code> fields of the passed <code>insets</code> parameter to
+ * zero.
*
- * @param c the component whose border is to be measured
+ * @param c the component that the border applies to (ignored here,
+ * subclasses may use it).
+ * @param insets an instance that will be overwritten and returned as the
+ * result (<code>null</code> not permitted).
*
- * @return the same object that was passed for <code>insets</code>
+ * @return The border insets (the same object that was passed as the
+ * <code>insets</code> argument).
*
* @see #getBorderInsets(Component)
+ *
+ * @throws NullPointerException if <code>insets</code> is <code>null</code>.
*/
public Insets getBorderInsets(Component c, Insets insets)
{
@@ -126,7 +135,7 @@ public abstract class AbstractBorder implements Border, Serializable
* fills every pixel in its area when painting. Partially
* translucent borders must return <code>false</code>, or ugly
* artifacts can appear on screen. The default implementation
- * provided by AbstractBorder always returns <code>false</code>.
+ * provided here always returns <code>false</code>.
*
* @return <code>false</code>.
*/
@@ -136,9 +145,9 @@ public abstract class AbstractBorder implements Border, Serializable
}
/**
- * Returns a rectangle that covers the specified area minus this
- * border. Components that wish to determine an area into which
- * they can safely draw without intersecting with a border might
+ * Returns a rectangle that covers the specified area minus the insets
+ * required to draw this border. Components that wish to determine an area
+ * into which they can safely draw without intersecting with a border might
* want to use this helper method.
*
* @param c the component in the center of this border.
@@ -146,24 +155,30 @@ public abstract class AbstractBorder implements Border, Serializable
* @param y the vertical position of the border.
* @param width the width of the available area for the border.
* @param height the height of the available area for the border.
+ *
+ * @return The interior rectangle.
*/
public Rectangle getInteriorRectangle(Component c, int x, int y, int width,
int height)
{
- return getInteriorRectangle (c, this, x, y, width, height);
+ return getInteriorRectangle(c, this, x, y, width, height);
}
/**
- * Returns a rectangle that covers the specified area minus a
- * border. Components that wish to determine an area into which
- * they can safely draw without intersecting with a border might
- * want to use this helper method.
+ * Returns a rectangle that covers the specified area minus the insets
+ * required to draw the specified border (if the border is <code>null</code>,
+ * zero insets are assumed). Components that wish to determine an area into
+ * which they can safely draw without intersecting with a border might want
+ * to use this helper method.
*
* @param c the component in the center of this border.
+ * @param b the border (<code>null</code> permitted).
* @param x the horizontal position of the border.
* @param y the vertical position of the border.
* @param width the width of the available area for the border.
* @param height the height of the available area for the border.
+ *
+ * @return The interior rectangle.
*/
public static Rectangle getInteriorRectangle(Component c, Border b, int x,
int y, int width, int height)
@@ -172,7 +187,7 @@ public abstract class AbstractBorder implements Border, Serializable
if (b != null)
{
- borderInsets = b.getBorderInsets (c);
+ borderInsets = b.getBorderInsets(c);
x += borderInsets.left;
y += borderInsets.top;
width -= borderInsets.left + borderInsets.right;
diff --git a/libjava/classpath/javax/swing/border/BevelBorder.java b/libjava/classpath/javax/swing/border/BevelBorder.java
index 45b758c..403c35c 100644
--- a/libjava/classpath/javax/swing/border/BevelBorder.java
+++ b/libjava/classpath/javax/swing/border/BevelBorder.java
@@ -305,6 +305,8 @@ public class BevelBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The color.
+ *
* @see #getHighlightInnerColor(java.awt.Component)
* @see java.awt.Color#brighter()
*/
@@ -326,6 +328,8 @@ public class BevelBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The color.
+ *
* @see java.awt.Component#getBackground()
* @see java.awt.Color#brighter()
*/
@@ -347,6 +351,8 @@ public class BevelBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The color.
+ *
* @see java.awt.Component#getBackground()
* @see java.awt.Color#darker()
*/
@@ -367,6 +373,8 @@ public class BevelBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The color.
+ *
* @see #getShadowInnerColor(java.awt.Component)
* @see java.awt.Color#darker()
*/
@@ -384,6 +392,8 @@ public class BevelBorder extends AbstractBorder
* highlighted edges when painting the border, or <code>null</code>
* if that color will be derived from the background of the enclosed
* Component.
+ *
+ * @return The color (possibly <code>null</code>).
*/
public Color getHighlightOuterColor()
{
@@ -396,6 +406,8 @@ public class BevelBorder extends AbstractBorder
* highlighted edges when painting the border, or <code>null</code>
* if that color will be derived from the background of the enclosed
* Component.
+ *
+ * @return The color (possibly <code>null</code>).
*/
public Color getHighlightInnerColor()
{
@@ -408,6 +420,8 @@ public class BevelBorder extends AbstractBorder
* shadowed edges when painting the border, or <code>null</code> if
* that color will be derived from the background of the enclosed
* Component.
+ *
+ * @return The color (possibly <code>null</code>).
*/
public Color getShadowInnerColor()
{
@@ -420,6 +434,8 @@ public class BevelBorder extends AbstractBorder
* shadowed edges when painting the border, or <code>null</code> if
* that color will be derived from the background of the enclosed
* Component.
+ *
+ * @return The color (possibly <code>null</code>).
*/
public Color getShadowOuterColor()
{
@@ -430,6 +446,8 @@ public class BevelBorder extends AbstractBorder
/**
* Returns the appearance of this border, which is either {@link
* #RAISED} or {@link #LOWERED}.
+ *
+ * @return The bevel type ({@link #RAISED} or {@link #LOWERED}).
*/
public int getBevelType()
{
diff --git a/libjava/classpath/javax/swing/border/CompoundBorder.java b/libjava/classpath/javax/swing/border/CompoundBorder.java
index 998a9ba..a69c5e2 100644
--- a/libjava/classpath/javax/swing/border/CompoundBorder.java
+++ b/libjava/classpath/javax/swing/border/CompoundBorder.java
@@ -224,6 +224,8 @@ public class CompoundBorder extends AbstractBorder
* Returns the outside border, which is painted outside both the
* bordered Component and the inside border. It is valid for the
* result to be <code>null</code>.
+ *
+ * @return The outside border (possibly <code>null</code>).
*/
public Border getOutsideBorder()
{
@@ -234,6 +236,8 @@ public class CompoundBorder extends AbstractBorder
* Returns the inside border, which is painted between the bordered
* Component and the outside border. It is valid for the result to
* be <code>null</code>.
+ *
+ * @return The inside border (possibly <code>null</code>).
*/
public Border getInsideBorder ()
{
diff --git a/libjava/classpath/javax/swing/border/EtchedBorder.java b/libjava/classpath/javax/swing/border/EtchedBorder.java
index 22882b7..cd48b18 100644
--- a/libjava/classpath/javax/swing/border/EtchedBorder.java
+++ b/libjava/classpath/javax/swing/border/EtchedBorder.java
@@ -281,6 +281,8 @@ public class EtchedBorder extends AbstractBorder
/**
* Returns the appearance of this EtchedBorder, which is either
* {@link #RAISED} or {@link #LOWERED}.
+ *
+ * @return The type ({@link #RAISED} or {@link #LOWERED}).
*/
public int getEtchType()
{
@@ -297,6 +299,8 @@ public class EtchedBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The color.
+ *
* @see java.awt.Component#getBackground()
* @see java.awt.Color#brighter()
*/
@@ -312,6 +316,8 @@ public class EtchedBorder extends AbstractBorder
* Returns the color that will be used for highlighted parts when
* painting the border, or <code>null</code> if that color will be
* derived from the background of the enclosed Component.
+ *
+ * @return The highlight color (possibly <code>null</code>).
*/
public Color getHighlightColor()
{
@@ -328,6 +334,8 @@ public class EtchedBorder extends AbstractBorder
*
* @param c the component enclosed by this border.
*
+ * @return The shadow color.
+ *
* @see java.awt.Component#getBackground()
* @see java.awt.Color#darker()
*/
@@ -344,6 +352,8 @@ public class EtchedBorder extends AbstractBorder
* Returns the color that will be used for shadowed parts when
* painting the border, or <code>null</code> if that color will be
* derived from the background of the enclosed Component.
+ *
+ * @return The shadow color (possibly <code>null</code>).
*/
public Color getShadowColor()
{
diff --git a/libjava/classpath/javax/swing/border/LineBorder.java b/libjava/classpath/javax/swing/border/LineBorder.java
index 36abddd..31e19fe 100644
--- a/libjava/classpath/javax/swing/border/LineBorder.java
+++ b/libjava/classpath/javax/swing/border/LineBorder.java
@@ -162,8 +162,10 @@ public class LineBorder extends AbstractBorder
/**
- * Returns a black, one pixel thick, plain LineBorder. The method
- * may always return the same (singleton) LineBorder instance.
+ * Returns a black, one pixel thick, plain {@link LineBorder}. The method
+ * may always return the same (singleton) {@link LineBorder} instance.
+ *
+ * @return The border.
*/
public static Border createBlackLineBorder()
{
@@ -178,8 +180,10 @@ public class LineBorder extends AbstractBorder
/**
- * Returns a gray, one pixel thick, plain LineBorder. The method
- * may always return the same (singleton) LineBorder instance.
+ * Returns a gray, one pixel thick, plain {@link LineBorder}. The method
+ * may always return the same (singleton) {@link LineBorder} instance.
+ *
+ * @return The border.
*/
public static Border createGrayLineBorder()
{
@@ -295,6 +299,8 @@ public class LineBorder extends AbstractBorder
/**
* Returns the color of the line.
+ *
+ * @return The line color (never <code>null</code>).
*/
public Color getLineColor()
{
@@ -304,6 +310,8 @@ public class LineBorder extends AbstractBorder
/**
* Returns the thickness of the line in pixels.
+ *
+ * @return The line thickness (in pixels).
*/
public int getThickness()
{
diff --git a/libjava/classpath/javax/swing/border/MatteBorder.java b/libjava/classpath/javax/swing/border/MatteBorder.java
index 4d5b8c2..114cac6 100644
--- a/libjava/classpath/javax/swing/border/MatteBorder.java
+++ b/libjava/classpath/javax/swing/border/MatteBorder.java
@@ -299,6 +299,8 @@ public class MatteBorder extends EmptyBorder
* Returns the color that is used for filling the border, or
* <code>null</code> if the border is filled with repetitions of a
* tile icon.
+ *
+ * @return The color (possibly <code>null</code>).
*/
public Color getMatteColor()
{
@@ -310,6 +312,8 @@ public class MatteBorder extends EmptyBorder
* Returns the icon is used for tiling the border, or
* <code>null</code> if the border is filled with a color instead of
* an icon.
+ *
+ * @return The icon (possibly <code>null</code>).
*/
public Icon getTileIcon()
{
diff --git a/libjava/classpath/javax/swing/border/TitledBorder.java b/libjava/classpath/javax/swing/border/TitledBorder.java
index 8d3ee13..38b5754 100644
--- a/libjava/classpath/javax/swing/border/TitledBorder.java
+++ b/libjava/classpath/javax/swing/border/TitledBorder.java
@@ -912,8 +912,10 @@ public class TitledBorder extends AbstractBorder
* Calculates the minimum size needed for displaying the border
* and its title.
*
- * @param c the Component for which this TitledBorder consitutes
+ * @param c the Component for which this TitledBorder constitutes
* a border.
+ *
+ * @return The minimum size.
*/
public Dimension getMinimumSize(Component c)
{
@@ -980,6 +982,10 @@ public class TitledBorder extends AbstractBorder
/**
* Performs various measurements for the current state of this TitledBorder
* and the given Component.
+ *
+ * @param c the component (<code>null</code> not permitted).
+ *
+ * @return Various measurements.
*/
private Measurements getMeasurements(Component c)
{
@@ -1172,6 +1178,8 @@ public class TitledBorder extends AbstractBorder
/**
* Calculates the minimum size needed for displaying the border
* and its title. Used by {@link TitledBorder#getMinimumSize(Component)}.
+ *
+ * @return The minimum size.
*/
public Dimension getMinimumSize()
{
diff --git a/libjava/classpath/javax/swing/colorchooser/ColorSelectionModel.java b/libjava/classpath/javax/swing/colorchooser/ColorSelectionModel.java
index 5f30708..b660505 100644
--- a/libjava/classpath/javax/swing/colorchooser/ColorSelectionModel.java
+++ b/libjava/classpath/javax/swing/colorchooser/ColorSelectionModel.java
@@ -1,5 +1,5 @@
/* ColorSelectionModel.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,42 +40,47 @@ package javax.swing.colorchooser;
import java.awt.Color;
+import javax.swing.JColorChooser;
+import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
- * ColorSelectionModel
+ * A model that is used by the {@link JColorChooser} component to represent the
+ * selected color.
+ *
* @author Andrew Selkirk
- * @version 1.0
*/
-public interface ColorSelectionModel {
-
- //-------------------------------------------------------------
- // Methods ----------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * getSelectedColor
- * @returns Color
- */
- Color getSelectedColor();
-
- /**
- * setSelectedColor
- * @param color TODO
- */
- void setSelectedColor(Color color);
-
- /**
- * addChangeListener
- * @param listener TODO
- */
- void addChangeListener(ChangeListener listener);
-
- /**
- * removeChangeListener
- * @param listener TODO
- */
- void removeChangeListener(ChangeListener listener);
-
-
-} // ColorSelectionModel
+public interface ColorSelectionModel
+{
+
+ /**
+ * Returns the selected color.
+ *
+ * @return The selected color.
+ */
+ Color getSelectedColor();
+
+ /**
+ * Sets the selected color.
+ *
+ * @param color the selected color.
+ */
+ void setSelectedColor(Color color);
+
+ /**
+ * Registers a listener to receive {@link ChangeEvent} notifications
+ * from this model.
+ *
+ * @param listener the listener.
+ */
+ void addChangeListener(ChangeListener listener);
+
+ /**
+ * Deregisters a listener so that it no longer receives {@link ChangeEvent}
+ * notifications from this action.
+ *
+ * @param listener the listener.
+ */
+ void removeChangeListener(ChangeListener listener);
+
+}
diff --git a/libjava/classpath/javax/swing/event/ChangeEvent.java b/libjava/classpath/javax/swing/event/ChangeEvent.java
index f75c15a..8854282 100644
--- a/libjava/classpath/javax/swing/event/ChangeEvent.java
+++ b/libjava/classpath/javax/swing/event/ChangeEvent.java
@@ -1,5 +1,5 @@
/* ChangeEvent.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,23 +37,30 @@ exception statement from your version. */
package javax.swing.event;
-// Imports
import java.util.EventObject;
/**
- * ChangeEvent
+ * An event used to signal a state change for an object.
+ *
+ * @see ChangeListener
+ * @see CellEditorListener
+ * @see TableColumnModelListener
+ *
* @author Andrew Selkirk
* @author Ronald Veldema
*/
-public class ChangeEvent extends EventObject {
+public class ChangeEvent
+ extends EventObject
+{
- /**
- * ChangeEvent constructor
- * @param source Source object
- */
- public ChangeEvent(Object source) {
- super(source);
- } // ChangeEvent()
+ /**
+ * Creates a new <code>ChangeEvent</code> instance for the specified source.
+ *
+ * @param source the source for the event (<code>null</code> not permitted).
+ */
+ public ChangeEvent(Object source)
+ {
+ super(source);
+ }
-
-} // ChangeEvent
+}
diff --git a/libjava/classpath/javax/swing/event/ChangeListener.java b/libjava/classpath/javax/swing/event/ChangeListener.java
index 1e58b1d..7580970 100644
--- a/libjava/classpath/javax/swing/event/ChangeListener.java
+++ b/libjava/classpath/javax/swing/event/ChangeListener.java
@@ -1,5 +1,5 @@
/* ChangeListener.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,21 +37,27 @@ exception statement from your version. */
package javax.swing.event;
-// Imports
import java.util.EventListener;
/**
- * ChangeListener interface
+ * A <code>ChangeListener</code> can register with an object to receive
+ * notification of state changes (for objects that support this mechanism).
+ *
* @author Andrew Selkirk
* @author Ronald Veldema
*/
-public interface ChangeListener extends EventListener {
-
- /**
- * State changed
- * @param event Change Event
- */
- void stateChanged(ChangeEvent event);
-
-
-} // ChangeListener
+public interface ChangeListener
+ extends EventListener
+{
+
+ /**
+ * Called by an object to notify the listener that the object's state has
+ * changed. The incoming <code>event</code> identifies the
+ * <code>source</code> of the event, allowing the listener to differentiate
+ * when it is listening for changes in multiple sources.
+ *
+ * @param event the change event.
+ */
+ void stateChanged(ChangeEvent event);
+
+}
diff --git a/libjava/classpath/javax/swing/event/InternalFrameEvent.java b/libjava/classpath/javax/swing/event/InternalFrameEvent.java
index badfa80..4e289bf 100644
--- a/libjava/classpath/javax/swing/event/InternalFrameEvent.java
+++ b/libjava/classpath/javax/swing/event/InternalFrameEvent.java
@@ -1,5 +1,5 @@
/* InternalFrameEvent.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,6 +43,8 @@ import java.awt.AWTEvent;
import javax.swing.JInternalFrame;
/**
+ * An event that indicates a change to a {@link JInternalFrame} component.
+ *
* @author Andrew Selkirk
*/
public class InternalFrameEvent extends AWTEvent
@@ -50,55 +52,59 @@ public class InternalFrameEvent extends AWTEvent
private static final long serialVersionUID = -5204823611874873183L;
/**
- * Internal frame activated event
+ * Internal frame activated event.
*/
public static final int INTERNAL_FRAME_ACTIVATED = 25554;
/**
- * Internal frame closed event
+ * Internal frame closed event.
*/
public static final int INTERNAL_FRAME_CLOSED = 25551;
/**
- * Internal frame closing event
+ * Internal frame closing event.
*/
public static final int INTERNAL_FRAME_CLOSING = 25550;
/**
- * Internal frame deactivated event
+ * Internal frame deactivated event.
*/
public static final int INTERNAL_FRAME_DEACTIVATED = 25555;
/**
- * Internal frame deiconifed event
+ * Internal frame deiconifed event.
*/
public static final int INTERNAL_FRAME_DEICONIFIED = 25553;
/**
- * Internal frame frame first event
+ * Internal frame frame first event.
*/
public static final int INTERNAL_FRAME_FIRST = 25549;
/**
- * Internal frame iconified event
+ * Internal frame iconified event.
*/
public static final int INTERNAL_FRAME_ICONIFIED = 25552;
/**
- * Internal frame last event
+ * Internal frame last event.
*/
public static final int INTERNAL_FRAME_LAST = 25555;
/**
- * Internal frame opened event
+ * Internal frame opened event.
*/
public static final int INTERNAL_FRAME_OPENED = 25549;
/**
- * Creates a <code>JInternalFrameEvent</code> object.
+ * Creates a new <code>JInternalFrameEvent</code> instance.
*
- * @param source The source of this event.
- * @param id Then event ID of this event.
+ * @param source the source of this event (<code>null</code> not permitted).
+ * @param id the event ID of this event (see the constants defined by this
+ * class).
+ *
+ * @throws IllegalArgumentException if <code>source</code> is
+ * <code>null</code>.
*/
public InternalFrameEvent(JInternalFrame source, int id)
{
@@ -106,10 +112,43 @@ public class InternalFrameEvent extends AWTEvent
}
/**
- * Returns the <code>JInternalFrame</code> object stored in this event.
+ * Returns the <code>JInternalFrame</code> component that is the source for
+ * this event.
+ *
+ * @return The source.
+ *
+ * @since 1.3
*/
public JInternalFrame getInternalFrame()
{
return (JInternalFrame) source;
}
+
+ /**
+ * Returns a string that indicates the event id. This is used by the
+ * {@link #toString()} method.
+ *
+ * @return A string that indicates the event id.
+ */
+ public String paramString()
+ {
+ switch (id) {
+ case INTERNAL_FRAME_ACTIVATED:
+ return "INTERNAL_FRAME_ACTIVATED";
+ case INTERNAL_FRAME_CLOSED:
+ return "INTERNAL_FRAME_CLOSED";
+ case INTERNAL_FRAME_CLOSING:
+ return "INTERNAL_FRAME_CLOSING";
+ case INTERNAL_FRAME_DEACTIVATED:
+ return "INTERNAL_FRAME_DEACTIVATED";
+ case INTERNAL_FRAME_DEICONIFIED:
+ return "INTERNAL_FRAME_DEICONIFIED";
+ case INTERNAL_FRAME_ICONIFIED:
+ return "INTERNAL_FRAME_ICONIFIED";
+ case INTERNAL_FRAME_OPENED:
+ return "INTERNAL_FRAME_OPENED";
+ default:
+ return "unknown type";
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/event/TableColumnModelListener.java b/libjava/classpath/javax/swing/event/TableColumnModelListener.java
index 90e1b29..522e0a8 100644
--- a/libjava/classpath/javax/swing/event/TableColumnModelListener.java
+++ b/libjava/classpath/javax/swing/event/TableColumnModelListener.java
@@ -1,5 +1,5 @@
/* TableColumnModelListener.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,44 +37,58 @@ exception statement from your version. */
package javax.swing.event;
-// Imports
import java.util.EventListener;
+import javax.swing.table.TableColumnModel;
+
/**
- * TableColumnModelListener public interface
+ * A <code>TableColumnModelListener</code> can register with a
+ * {@link TableColumnModel} to receive notification of changes to the model.
+ *
* @author Andrew Selkirk
*/
-public interface TableColumnModelListener extends EventListener {
-
- /**
- * Column added
- * @param event Table Column Model Event
- */
- void columnAdded(TableColumnModelEvent event);
-
- /**
- * Column margin changed
- * @param event Change Event
- */
- void columnMarginChanged(ChangeEvent event);
-
- /**
- * Column moved
- * @param event Table Column Model Event
- */
- void columnMoved(TableColumnModelEvent event);
-
- /**
- * Column removed
- * @param event Table Column Model Event
- */
- void columnRemoved(TableColumnModelEvent event);
-
- /**
- * Column selection changed
- * @param event List Selection Event
- */
- void columnSelectionChanged(ListSelectionEvent event);
-
-
-} // TableColumnModelListener
+public interface TableColumnModelListener
+ extends EventListener
+{
+
+ /**
+ * Called by the {@link TableColumnModel} to indicate that a column has been
+ * added to the model.
+ *
+ * @param event information about the column addition.
+ */
+ void columnAdded(TableColumnModelEvent event);
+
+ /**
+ * Called by the {@link TableColumnModel} to indicate that the model's
+ * column margin has changed.
+ *
+ * @param event the event (identifies the source).
+ */
+ void columnMarginChanged(ChangeEvent event);
+
+ /**
+ * Called by the {@link TableColumnModel} to indicate that a column has been
+ * moved.
+ *
+ * @param event information about the column move.
+ */
+ void columnMoved(TableColumnModelEvent event);
+
+ /**
+ * Called by the {@link TableColumnModel} to indicate that a column has been
+ * removed from the model.
+ *
+ * @param event information about the column removal.
+ */
+ void columnRemoved(TableColumnModelEvent event);
+
+ /**
+ * Called by the {@link TableColumnModel} to indicate that the column
+ * selection state has changed.
+ *
+ * @param event information about the column selection state.
+ */
+ void columnSelectionChanged(ListSelectionEvent event);
+
+}
diff --git a/libjava/classpath/javax/swing/event/TreeSelectionEvent.java b/libjava/classpath/javax/swing/event/TreeSelectionEvent.java
index 1930677..532a1db 100644
--- a/libjava/classpath/javax/swing/event/TreeSelectionEvent.java
+++ b/libjava/classpath/javax/swing/event/TreeSelectionEvent.java
@@ -41,41 +41,57 @@ package javax.swing.event;
import java.util.EventObject;
import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
/**
- * TreeSelectionEvent
+ * An event that carries information about a change to a
+ * {@link TreeSelectionModel}.
+ *
+ * @see TreeSelectionListener
+ *
* @author Andrew Selkirk
- * @version 1.0
*/
-public class TreeSelectionEvent extends EventObject {
+public class TreeSelectionEvent extends EventObject
+{
/**
- * paths
+ * The paths that have been added or removed from the selection.
*/
protected TreePath[] paths;
/**
- * areNew
+ * Flags indicating if the paths were added (<code>true</code>) or removed
+ * (<code>false</code>) from the selection.
*/
protected boolean[] areNew;
/**
- * oldLeadSelectionPath
+ * The old lead selection path (may be <code>null</code>).
*/
protected TreePath oldLeadSelectionPath;
/**
- * newLeadSelectionPath
+ * The new lead selection path (may be <code>null</code>).
*/
protected TreePath newLeadSelectionPath;
/**
- * Constructor TreeSelectionEvent
- * @param source TODO
- * @param paths TODO
- * @param areNew TODO
- * @param oldLeadSelectionPath TODO
- * @param newLeadSelectionPath TODO
+ * Creates a new <code>TreeSelectionEvent</code>.
+ *
+ * @param source the source (usually a {@link TreeSelectionModel},
+ * <code>null</code> not permitted).
+ * @param paths an array of the paths that have been added to or removed
+ * from the selection.
+ * @param areNew a flag for each path where <code>true</code> indicates the
+ * corresponding path has been added to the selection and
+ * <code>false</code> indicates the path has been removed.
+ * @param oldLeadSelectionPath the old lead selection path (<code>null</code>
+ * permitted).
+ * @param newLeadSelectionPath the new lead selection path (<code>null</code>
+ * permitted).
+ *
+ * @throws IllegalArgumentException if <code>source</code> is
+ * <code>null</code>.
*/
public TreeSelectionEvent(Object source, TreePath[] paths,
boolean[] areNew, TreePath oldLeadSelectionPath,
@@ -89,12 +105,21 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * Constructor TreeSelectionEvent
- * @param source TODO
- * @param path TODO
- * @param isNew TODO
- * @param oldLeadSelectionPath TODO
- * @param newLeadSelectionPath TODO
+ * Creates a new <code>TreeSelectionEvent</code>.
+ *
+ * @param source the event source (usually a {@link TreeSelectionModel},
+ * <code>null</code> not permitted).
+ * @param path the path.
+ * @param isNew <code>true</code> indicates that <code>path</code> has been
+ * added to the selection, and <code>false</code> indicates that it has
+ * been removed.
+ * @param oldLeadSelectionPath the old lead selection path (<code>null</code>
+ * permitted).
+ * @param newLeadSelectionPath the new lead selection path (<code>null</code>
+ * permitted).
+ *
+ * @throws IllegalArgumentException if <code>source</code> is
+ * <code>null</code>.
*/
public TreeSelectionEvent(Object source, TreePath path,
boolean isNew, TreePath oldLeadSelectionPath,
@@ -108,7 +133,11 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @return the first path element
+ * Returns the first path element.
+ *
+ * @return The first path element.
+ *
+ * @see #getPaths()
*/
public TreePath getPath()
{
@@ -116,8 +145,11 @@ public class TreeSelectionEvent extends EventObject {
}
/**
+ * Returns an array of the paths that changed in the selection.
+ *
+ * @return The paths that changed in the selection.
*
- * @return the paths with selection changed
+ * @see #isAddedPath(TreePath)
*/
public TreePath[] getPaths()
{
@@ -125,7 +157,13 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @return true if the first path is added to the selection, false otherwise
+ * Returns <code>true</code> if the path returned by {@link #getPath()} has
+ * been added to the selection, and <code>false</code> if it has been
+ * removed.
+ *
+ * @return A boolean.
+ *
+ * @see #isAddedPath(int)
*/
public boolean isAddedPath()
{
@@ -133,21 +171,42 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @param path the path to check
- * @return true if the path is added to the selection, false otherwise
+ * Returns <code>true</code> if <code>path</code> has been added to the
+ * selection, and <code>false</code> if the path has been removed from the
+ * selection.
+ *
+ * @param path the path to check.
+ *
+ * @return A flag indicating whether the path has been added to, or removed
+ * from, the selection.
+ *
+ * @throw IllegalArgumentException if <code>path</code> is not one of the
+ * paths in {@link #getPaths()}.
+ *
+ * @see #isAddedPath(int)
*/
public boolean isAddedPath(TreePath path)
{
for (int i = paths.length - 1; i >= 0; i--)
if (paths[i].equals(path))
- return areNew[i];
+ return areNew[i];
- return false;
+ throw new IllegalArgumentException("Unknown 'path' argument.");
}
/**
- * @param index the index'th path
- * @return true if the path is added to the selection, false otherwise
+ * Returns <code>true</code> if the path at the specified index has been
+ * added to the selection, and <code>false</code> if the path has been
+ * removed from the selection.
+ *
+ * @param index the path index.
+ *
+ * @return A flag indicating whether the path has been added to, or removed
+ * from, the selection.
+ *
+ * @since 1.3
+ *
+ * @see #isAddedPath(TreePath)
*/
public boolean isAddedPath(int index)
{
@@ -155,7 +214,11 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @return the previous lead selection path
+ * Returns the old lead selection path.
+ *
+ * @return The old lead selection path (possibly <code>null</code>).
+ *
+ * @see #getNewLeadSelectionPath()
*/
public TreePath getOldLeadSelectionPath()
{
@@ -163,7 +226,11 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @return the current lead selection path
+ * Returns the new lead selection path.
+ *
+ * @return The new lead selection path (possibly <code>null</code>).
+ *
+ * @see #getOldLeadSelectionPath()
*/
public TreePath getNewLeadSelectionPath()
{
@@ -171,14 +238,20 @@ public class TreeSelectionEvent extends EventObject {
}
/**
- * @param source the new event source
- * @return a cloned event with another event source
+ * Creates a shallow copy of this <code>TreeSelectionEvent</code>, replacing
+ * the source with <code>source</code>.
+ *
+ * @param source the new event source (<code>null</code> not permitted).
+ *
+ * @return A cloned event with another event source.
+ *
+ * @throws IllegalArgumentException if <code>source</code> is
+ * <code>null</code>.
*/
public Object cloneWithSource(Object source)
{
- return new TreeSelectionEvent (source, paths, areNew,
- oldLeadSelectionPath,
- newLeadSelectionPath);
+ return new TreeSelectionEvent (source, paths, areNew, oldLeadSelectionPath,
+ newLeadSelectionPath);
}
}
diff --git a/libjava/classpath/javax/swing/event/TreeSelectionListener.java b/libjava/classpath/javax/swing/event/TreeSelectionListener.java
index b844a6e..2171e39 100644
--- a/libjava/classpath/javax/swing/event/TreeSelectionListener.java
+++ b/libjava/classpath/javax/swing/event/TreeSelectionListener.java
@@ -1,5 +1,5 @@
/* TreeSelectionListener.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,20 +37,24 @@ exception statement from your version. */
package javax.swing.event;
-// Imports
import java.util.EventListener;
+import javax.swing.tree.TreeSelectionModel;
+
/**
- * TreeSelectionListener public interface
+ * A listener that receives {@link TreeSelectionEvent} notifications from a
+ * source (such as a {@link TreeSelectionModel}).
+ *
* @author Andrew Selkirk
*/
-public interface TreeSelectionListener extends EventListener {
-
- /**
- * Value changed
- * @param event Tree Selection Event
- */
- void valueChanged(TreeSelectionEvent event);
+public interface TreeSelectionListener extends EventListener
+{
+ /**
+ * Receives notification of a change to a tree selection model.
+ *
+ * @param event information about the event.
+ */
+ void valueChanged(TreeSelectionEvent event);
-} // TreeSelectionListener
+}
diff --git a/libjava/classpath/javax/swing/filechooser/FileFilter.java b/libjava/classpath/javax/swing/filechooser/FileFilter.java
index ecfa54b..de11525 100644
--- a/libjava/classpath/javax/swing/filechooser/FileFilter.java
+++ b/libjava/classpath/javax/swing/filechooser/FileFilter.java
@@ -1,5 +1,5 @@
/* FileFilter.java --
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -67,7 +67,7 @@ public abstract class FileFilter
*
* @param file the file.
*
- * @returns A boolean.
+ * @return A boolean.
*/
public abstract boolean accept(File file);
@@ -78,7 +78,7 @@ public abstract class FileFilter
* is used to select the appropriate filter (in cases where more than one
* filter is available).
*
- * @returns A description of the filter.
+ * @return A description of the filter.
*/
public abstract String getDescription();
diff --git a/libjava/classpath/javax/swing/filechooser/FileView.java b/libjava/classpath/javax/swing/filechooser/FileView.java
index ea1989f..8c2be32 100644
--- a/libjava/classpath/javax/swing/filechooser/FileView.java
+++ b/libjava/classpath/javax/swing/filechooser/FileView.java
@@ -1,5 +1,5 @@
/* FileView.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -118,7 +118,7 @@ public abstract class FileView
*
* @param directory the directory.
*
- * @returns Always <code>null</code>.
+ * @return Always <code>null</code>.
*/
public Boolean isTraversable(File directory)
{
diff --git a/libjava/classpath/javax/swing/filechooser/UnixFileSystemView.java b/libjava/classpath/javax/swing/filechooser/UnixFileSystemView.java
index c2f6596..96dfd2e 100644
--- a/libjava/classpath/javax/swing/filechooser/UnixFileSystemView.java
+++ b/libjava/classpath/javax/swing/filechooser/UnixFileSystemView.java
@@ -37,8 +37,11 @@ exception statement from your version. */
package javax.swing.filechooser;
+import gnu.classpath.NotImplementedException;
+
import java.io.File;
import java.io.IOException;
+
import javax.swing.Icon;
@@ -110,6 +113,7 @@ class UnixFileSystemView extends FileSystemView
* @return <code>null</code>.
*/
public String getSystemDisplayName(File f)
+ throws NotImplementedException
{
// FIXME: Implement;
return null;
@@ -124,6 +128,7 @@ class UnixFileSystemView extends FileSystemView
* @return <code>null</code>.
*/
public Icon getSystemIcon(File f)
+ throws NotImplementedException
{
// FIXME: Implement;
return null;
@@ -138,6 +143,7 @@ class UnixFileSystemView extends FileSystemView
* @return <code>null</code>.
*/
public String getSystemTypeDescription(File f)
+ throws NotImplementedException
{
// FIXME: Implement.
return null;
diff --git a/libjava/classpath/javax/swing/plaf/ComboBoxUI.java b/libjava/classpath/javax/swing/plaf/ComboBoxUI.java
index 3e81ed7..58f6e81 100644
--- a/libjava/classpath/javax/swing/plaf/ComboBoxUI.java
+++ b/libjava/classpath/javax/swing/plaf/ComboBoxUI.java
@@ -1,5 +1,5 @@
/* ComboBoxUI.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,9 +41,7 @@ import javax.swing.JComboBox;
/**
* An abstract base class for delegates that implement the pluggable
- * look and feel for a <code>JButton</code>.
- *
- * @see javax.swing.JComboBox
+ * look and feel for a {@link JComboBox}.
*
* @author Andrew Selkirk
* @author Sascha Brawer (brawer@dandelis.ch)
@@ -57,8 +55,7 @@ public abstract class ComboBoxUI extends ComponentUI
{
// Nothing to do here.
}
-
-
+
/**
* Sets the visibility of the popup button.
*
@@ -70,7 +67,6 @@ public abstract class ComboBoxUI extends ComponentUI
*/
public abstract void setPopupVisible(JComboBox c, boolean visible);
-
/**
* Determines whether the popup button is currently visible.
*
@@ -82,15 +78,15 @@ public abstract class ComboBoxUI extends ComponentUI
*/
public abstract boolean isPopupVisible(JComboBox c);
-
/**
* Determines whether the combo box can receive input focus.
*
* @param c <code>JComboBox</code> whose focus traversability
* is to be retrieved.
*
- * @returns <code>true</code> if <code>c</code> can receive
+ * @return <code>true</code> if <code>c</code> can receive
* input focus, <code>false</code> otherwise.
*/
public abstract boolean isFocusTraversable(JComboBox c);
+
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java b/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java
index 1fca694..89e99a2 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java
@@ -52,6 +52,7 @@ import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JComponent;
+import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -204,14 +205,12 @@ public class BasicButtonListener implements MouseListener, MouseMotionListener,
{
AbstractButton button = (AbstractButton) e.getSource();
ButtonModel model = button.getModel();
- if (button.isRolloverEnabled())
+ if (button.isRolloverEnabled()
+ && ! SwingUtilities.isLeftMouseButton(e))
model.setRollover(true);
-
- if (model.isPressed()
- && (e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0)
+
+ if (model.isPressed())
model.setArmed(true);
- else
- model.setArmed(false);
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java
index 7a63331..7dbcb91 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java
@@ -156,7 +156,8 @@ public class BasicButtonUI extends ButtonUI
LookAndFeel.installColorsAndFont(b, prefix + "background",
prefix + "foreground", prefix + "font");
LookAndFeel.installBorder(b, prefix + "border");
- b.setMargin(UIManager.getInsets(prefix + "margin"));
+ if (b.getMargin() == null || b.getMargin() instanceof UIResource)
+ b.setMargin(UIManager.getInsets(prefix + "margin"));
b.setIconTextGap(UIManager.getInt(prefix + "textIconGap"));
b.setInputMap(JComponent.WHEN_FOCUSED,
(InputMap) UIManager.get(prefix + "focusInputMap"));
@@ -171,11 +172,15 @@ public class BasicButtonUI extends ButtonUI
{
if (b.getFont() instanceof UIResource)
b.setFont(null);
- b.setForeground(null);
- b.setBackground(null);
- b.setBorder(null);
+ if (b.getForeground() instanceof UIResource)
+ b.setForeground(null);
+ if (b.getBackground() instanceof UIResource)
+ b.setBackground(null);
+ if (b.getBorder() instanceof UIResource)
+ b.setBorder(null);
b.setIconTextGap(defaultTextIconGap);
- b.setMargin(null);
+ if (b.getMargin() instanceof UIResource)
+ b.setMargin(null);
}
protected BasicButtonListener listener;
@@ -308,7 +313,7 @@ public class BasicButtonUI extends ButtonUI
* @param c The component to paint the state of
*/
public void paint(Graphics g, JComponent c)
- {
+ {
AbstractButton b = (AbstractButton) c;
Rectangle tr = new Rectangle();
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java
index 831dde8..d879261 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java
@@ -1,5 +1,5 @@
/* BasicComboBoxEditor.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -177,4 +177,5 @@ public class BasicComboBoxEditor extends Object implements ComboBoxEditor,
// Nothing to do here.
}
}
+
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java
index 8115605..48195ff 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java
@@ -40,15 +40,13 @@ package javax.swing.plaf.basic;
import java.awt.Component;
import java.awt.Dimension;
-import java.awt.FontMetrics;
import java.io.Serializable;
+import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
@@ -64,14 +62,14 @@ public class BasicComboBoxRenderer
/**
* A shared border instance for all renderers.
*/
- protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0);
+ protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
/**
* Creates a new <code>BasicComboBoxRenderer</code> object.
*/
public BasicComboBoxRenderer()
{
- setHorizontalAlignment(SwingConstants.LEFT);
+ setOpaque(true);
setBorder(noFocusBorder);
}
@@ -103,32 +101,7 @@ public class BasicComboBoxRenderer
int index, boolean isSelected,
boolean cellHasFocus)
{
- String s = value.toString();
-
- // String maybe larger than comboBox.
- FontMetrics fm = getToolkit().getFontMetrics(list.getFont());
- int strWidth = SwingUtilities.computeStringWidth(fm, s);
- int cbWidth = getSize().width;
- if (cbWidth != 0 && strWidth > cbWidth)
- {
- char[] str = s.toCharArray();
- int currWidth = 0;
- int i = 0;
- String postStr = "... ";
- cbWidth -= SwingUtilities.computeStringWidth(fm, postStr);
- while (i < str.length && currWidth < cbWidth)
- {
- ++i;
- currWidth = SwingUtilities.computeStringWidth(fm, new String(str, 0, i));
- }
- setText(new String(str, 0, i) + postStr);
- }
- else
- setText(s);
-
- setOpaque(true);
-
- if (isSelected || cellHasFocus)
+ if (isSelected)
{
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
@@ -138,9 +111,13 @@ public class BasicComboBoxRenderer
setBackground(list.getBackground());
setForeground(list.getForeground());
}
-
- setEnabled(list.isEnabled());
setFont(list.getFont());
+
+ if (value instanceof Icon)
+ setIcon((Icon) value);
+ else
+ setText(value == null ? "" : value.toString());
+
return this;
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java
index 288a8d8..557eea9 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java
@@ -38,12 +38,13 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
-import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
@@ -55,8 +56,6 @@ import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeEvent;
@@ -66,13 +65,13 @@ import javax.accessibility.Accessible;
import javax.swing.CellRendererPane;
import javax.swing.ComboBoxEditor;
import javax.swing.ComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.LookAndFeel;
-import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
@@ -129,11 +128,6 @@ public class BasicComboBoxUI extends ComboBoxUI
protected KeyListener keyListener;
/**
- * A listener listening to mouse events occuring in the {@link JComboBox}.
- */
- private MouseListener mouseListener;
-
- /**
* List used when rendering selected item of the combo box. The selection
* and foreground colors for combo box renderer are configured from this
* list.
@@ -161,36 +155,14 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected PropertyChangeListener propertyChangeListener;
- /**
- * The button background.
- * @see #installDefaults()
- */
- private Color buttonBackground;
-
- /**
- * The button shadow.
- * @see #installDefaults()
- */
- private Color buttonShadow;
-
- /**
- * The button dark shadow.
- * @see #installDefaults()
- */
- private Color buttonDarkShadow;
-
- /**
- * The button highlight.
- * @see #installDefaults()
- */
- private Color buttonHighlight;
-
/* Size of the largest item in the comboBox
* This is package-private to avoid an accessor method.
*/
- Dimension displaySize;
+ Dimension displaySize = new Dimension();
- // FIXME: This field isn't used anywhere at this moment.
+ /**
+ * Used to render the combo box values.
+ */
protected CellRendererPane currentValuePane;
/**
@@ -209,7 +181,8 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public BasicComboBoxUI()
{
- // Nothing to do here.
+ currentValuePane = new CellRendererPane();
+ cachedMinimumSize = new Dimension();
}
/**
@@ -238,12 +211,33 @@ public class BasicComboBoxUI extends ComboBoxUI
if (c instanceof JComboBox)
{
+ isMinimumSizeDirty = true;
comboBox = (JComboBox) c;
- comboBox.setOpaque(true);
- comboBox.setLayout(createLayoutManager());
installDefaults();
+
+ // Set editor and renderer for the combo box. Editor is used
+ // only if combo box becomes editable, otherwise renderer is used
+ // to paint the selected item; combobox is not editable by default.
+ ListCellRenderer renderer = comboBox.getRenderer();
+ if (renderer == null || renderer instanceof UIResource)
+ comboBox.setRenderer(createRenderer());
+
+ ComboBoxEditor currentEditor = comboBox.getEditor();
+ if (currentEditor == null || currentEditor instanceof UIResource)
+ {
+ currentEditor = createEditor();
+ comboBox.setEditor(currentEditor);
+ }
+ editor = currentEditor.getEditorComponent();
+
installComponents();
installListeners();
+ if (arrowButton != null)
+ configureArrowButton();
+ if (editor != null)
+ configureEditor();
+ comboBox.setLayout(createLayoutManager());
+ comboBox.setFocusable(true);
installKeyboardActions();
}
}
@@ -257,9 +251,12 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void uninstallUI(JComponent c)
{
+ setPopupVisible(comboBox, false);
+ popup.uninstallingUI();
uninstallKeyboardActions();
- uninstallListeners();
+ comboBox.setLayout(null);
uninstallComponents();
+ uninstallListeners();
uninstallDefaults();
comboBox = null;
}
@@ -274,12 +271,7 @@ public class BasicComboBoxUI extends ComboBoxUI
{
LookAndFeel.installColorsAndFont(comboBox, "ComboBox.background",
"ComboBox.foreground", "ComboBox.font");
-
- // fetch the button color scheme
- buttonBackground = UIManager.getColor("ComboBox.buttonBackground");
- buttonShadow = UIManager.getColor("ComboBox.buttonShadow");
- buttonDarkShadow = UIManager.getColor("ComboBox.buttonDarkShadow");
- buttonHighlight = UIManager.getColor("ComboBox.buttonHighlight");
+ LookAndFeel.installBorder(comboBox, "ComboBox.border");
}
/**
@@ -302,12 +294,19 @@ public class BasicComboBoxUI extends ComboBoxUI
keyListener = createKeyListener();
comboBox.addKeyListener(keyListener);
- mouseListener = createMouseListener();
- arrowButton.addMouseListener(mouseListener);
-
// install listeners that listen to combo box model
listDataListener = createListDataListener();
comboBox.getModel().addListDataListener(listDataListener);
+
+ // Install mouse and key listeners from the popup.
+ popupMouseListener = popup.getMouseListener();
+ comboBox.addMouseListener(popupMouseListener);
+
+ popupMouseMotionListener = popup.getMouseMotionListener();
+ comboBox.addMouseMotionListener(popupMouseMotionListener);
+
+ popupKeyListener = popup.getKeyListener();
+ comboBox.addKeyListener(popupKeyListener);
}
/**
@@ -327,10 +326,7 @@ public class BasicComboBoxUI extends ComboBoxUI
if (comboBox.getBackground() instanceof UIResource)
comboBox.setBackground(null);
- buttonBackground = null;
- buttonShadow = null;
- buttonDarkShadow = null;
- buttonHighlight = null;
+ LookAndFeel.uninstallBorder(comboBox);
}
/**
@@ -353,11 +349,20 @@ public class BasicComboBoxUI extends ComboBoxUI
comboBox.removeKeyListener(keyListener);
keyListener = null;
- arrowButton.removeMouseListener(mouseListener);
- mouseListener = null;
-
comboBox.getModel().removeListDataListener(listDataListener);
listDataListener = null;
+
+ if (popupMouseListener != null)
+ comboBox.removeMouseListener(popupMouseListener);
+ popupMouseListener = null;
+
+ if (popupMouseMotionListener != null)
+ comboBox.removeMouseMotionListener(popupMouseMotionListener);
+ popupMouseMotionListener = null;
+
+ if (popupKeyListener != null)
+ comboBox.removeKeyListener(popupKeyListener);
+ popupKeyListener = null;
}
/**
@@ -381,17 +386,6 @@ public class BasicComboBoxUI extends ComboBoxUI
}
/**
- * Creates a {@link MouseListener} that will listen to mouse events occurring
- * in the combo box.
- *
- * @return the MouseListener
- */
- private MouseListener createMouseListener()
- {
- return new MouseHandler();
- }
-
- /**
* Creates the {@link FocusListener} that will listen to changes in this
* JComboBox's focus.
*
@@ -453,7 +447,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected ListCellRenderer createRenderer()
{
- return new BasicComboBoxRenderer();
+ return new BasicComboBoxRenderer.UIResource();
}
/**
@@ -480,25 +474,14 @@ public class BasicComboBoxUI extends ComboBoxUI
popup = createPopup();
listBox = popup.getList();
- // set editor and renderer for the combo box. Editor is used
- // only if combo box becomes editable, otherwise renderer is used
- // to paint the selected item; combobox is not editable by default.
- comboBox.setRenderer(createRenderer());
-
// create and install arrow button
arrowButton = createArrowButton();
- configureArrowButton();
comboBox.add(arrowButton);
- ComboBoxEditor currentEditor = comboBox.getEditor();
- if (currentEditor == null || currentEditor instanceof UIResource)
- {
- currentEditor = createEditor();
- comboBox.setEditor(currentEditor);
- }
- editor = currentEditor.getEditorComponent();
+ if (comboBox.isEditable())
+ addEditor();
- comboBox.revalidate();
+ comboBox.add(currentValuePane);
}
/**
@@ -513,10 +496,10 @@ public class BasicComboBoxUI extends ComboBoxUI
comboBox.remove(arrowButton);
arrowButton = null;
- listBox = null;
popup = null;
- comboBox.setRenderer(null);
+ if (comboBox.getRenderer() instanceof UIResource)
+ comboBox.setRenderer(null);
// if the editor is not an instanceof UIResource, it was not set by the
// UI delegate, so don't clear it...
@@ -533,6 +516,8 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void addEditor()
{
+ removeEditor();
+ editor = comboBox.getEditor().getEditorComponent();
comboBox.add(editor);
}
@@ -541,7 +526,11 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void removeEditor()
{
- comboBox.remove(editor);
+ if (editor != null)
+ {
+ unconfigureEditor();
+ comboBox.remove(editor);
+ }
}
/**
@@ -550,8 +539,10 @@ public class BasicComboBoxUI extends ComboBoxUI
protected void configureEditor()
{
editor.setFont(comboBox.getFont());
- comboBox.getEditor().setItem(comboBox.getSelectedItem());
- // FIXME: Need to implement. Set font and add listeners.
+ if (popupKeyListener != null)
+ editor.addKeyListener(popupKeyListener);
+ comboBox.configureEditor(comboBox.getEditor(),
+ comboBox.getSelectedItem());
}
/**
@@ -559,7 +550,8 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected void unconfigureEditor()
{
- // FIXME: Need to implement
+ if (popupKeyListener != null)
+ editor.removeKeyListener(popupKeyListener);
}
/**
@@ -569,9 +561,15 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void configureArrowButton()
{
- arrowButton.setEnabled(comboBox.isEnabled());
- arrowButton.setFont(comboBox.getFont());
- arrowButton.setFocusable(false);
+ if (arrowButton != null)
+ {
+ arrowButton.setEnabled(comboBox.isEnabled());
+ arrowButton.setFocusable(false);
+ if (popupMouseListener != null)
+ arrowButton.addMouseListener(popupMouseListener);
+ if (popupMouseMotionListener != null)
+ arrowButton.addMouseMotionListener(popupMouseMotionListener);
+ }
}
/**
@@ -584,7 +582,13 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void unconfigureArrowButton()
{
- // Nothing to do here yet.
+ if (arrowButton != null)
+ {
+ if (popupMouseListener != null)
+ arrowButton.removeMouseListener(popupMouseListener);
+ if (popupMouseMotionListener != null)
+ arrowButton.removeMouseMotionListener(popupMouseMotionListener);
+ }
}
/**
@@ -596,8 +600,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected JButton createArrowButton()
{
- return new BasicArrowButton(BasicArrowButton.SOUTH, buttonBackground,
- buttonShadow, buttonDarkShadow, buttonHighlight);
+ return new BasicArrowButton(BasicArrowButton.SOUTH);
}
/**
@@ -627,11 +630,6 @@ public class BasicComboBoxUI extends ComboBoxUI
popup.show();
else
popup.hide();
-
- if (comboBox.isEditable())
- editor.requestFocus();
- else
- comboBox.requestFocus();
}
/**
@@ -657,9 +655,13 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void paint(Graphics g, JComponent c)
{
- Rectangle rect = rectangleForCurrentValue();
- paintCurrentValueBackground(g, rect, hasFocus);
- paintCurrentValue(g, rect, hasFocus);
+ hasFocus = comboBox.hasFocus();
+ if (! comboBox.isEditable())
+ {
+ Rectangle rect = rectangleForCurrentValue();
+ paintCurrentValueBackground(g, rect, hasFocus);
+ paintCurrentValue(g, rect, hasFocus);
+ }
}
/**
@@ -671,9 +673,6 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public Dimension getPreferredSize(JComponent c)
{
- // note: overriding getMinimumSize() (for example in the MetalComboBoxUI
- // class) affects the getPreferredSize() result, so it seems logical that
- // this method is implemented by delegating to the getMinimumSize() method
return getMinimumSize(c);
}
@@ -689,18 +688,15 @@ public class BasicComboBoxUI extends ComboBoxUI
{
if (isMinimumSizeDirty)
{
- Dimension d = getDisplaySize();
- int arrowButtonWidth = d.height;
- cachedMinimumSize = new Dimension(d.width + arrowButtonWidth,
- d.height);
- isMinimumSizeDirty = false;
+ Insets i = getInsets();
+ Dimension d = getDisplaySize();
+ d.width += i.left + i.right + d.height;
+ cachedMinimumSize = new Dimension(d.width, d.height + i.top + i.bottom);
+ isMinimumSizeDirty = false;
}
return new Dimension(cachedMinimumSize);
}
- /** The value returned by the getMaximumSize() method. */
- private static final Dimension MAXIMUM_SIZE = new Dimension(32767, 32767);
-
/**
* Returns the maximum size for this {@link JComboBox} for this
* look and feel.
@@ -711,7 +707,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public Dimension getMaximumSize(JComponent c)
{
- return MAXIMUM_SIZE;
+ return new Dimension(32767, 32767);
}
public int getAccessibleChildrenCount(JComponent c)
@@ -779,11 +775,16 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected Rectangle rectangleForCurrentValue()
{
- Rectangle cbBounds = SwingUtilities.getLocalBounds(comboBox);
- Rectangle abBounds = arrowButton.getBounds();
- Rectangle rectForCurrentValue = new Rectangle(cbBounds.x, cbBounds.y,
- cbBounds.width - abBounds.width, cbBounds.height);
- return rectForCurrentValue;
+ int w = comboBox.getWidth();
+ int h = comboBox.getHeight();
+ Insets i = comboBox.getInsets();
+ int arrowSize = h - (i.top + i.bottom);
+ if (arrowButton != null)
+ {
+ arrowSize = arrowButton.getWidth();
+ }
+ return new Rectangle(i.left, i.top, w - (i.left + i.right + arrowSize),
+ h - (i.top + i.left));
}
/**
@@ -793,7 +794,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected Insets getInsets()
{
- return new Insets(0, 0, 0, 0);
+ return comboBox.getInsets();
}
/**
@@ -807,34 +808,52 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus)
{
- if (! comboBox.isEditable())
+ Object currentValue = comboBox.getSelectedItem();
+ boolean isPressed = arrowButton.getModel().isPressed();
+
+ /* Gets the component to be drawn for the current value.
+ * If there is currently no selected item we will take an empty
+ * String as replacement.
+ */
+ ListCellRenderer renderer = comboBox.getRenderer();
+ if (comboBox.getSelectedIndex() != -1)
{
- Object currentValue = comboBox.getSelectedItem();
- boolean isPressed = arrowButton.getModel().isPressed();
-
- /* Gets the component to be drawn for the current value.
- * If there is currently no selected item we will take an empty
- * String as replacement.
- */
- Component comp = comboBox.getRenderer().getListCellRendererComponent(
- listBox, (currentValue != null ? currentValue : ""), -1,
- isPressed, hasFocus);
- if (! comboBox.isEnabled())
+ Component comp;
+ if (hasFocus && ! isPopupVisible(comboBox))
+ {
+ comp = renderer.getListCellRendererComponent(listBox,
+ comboBox.getSelectedItem(),
+ -1, true, false);
+ }
+ else
{
- comp.setBackground(UIManager.getColor(
- "ComboBox.disabledBackground"));
- comp.setForeground(UIManager.getColor(
- "ComboBox.disabledForeground"));
- comp.setEnabled(false);
+ comp = renderer.getListCellRendererComponent(listBox,
+ comboBox.getSelectedItem(),
+ -1, false, false);
+ Color bg = UIManager.getColor("ComboBox.disabledForeground");
+ comp.setBackground(bg);
}
- comp.setBounds(0, 0, bounds.width, bounds.height);
comp.setFont(comboBox.getFont());
- comp.paint(g);
-
- comboBox.revalidate();
+ if (hasFocus && ! isPopupVisible(comboBox))
+ {
+ comp.setForeground(listBox.getSelectionForeground());
+ comp.setBackground(listBox.getSelectionBackground());
+ }
+ else if (comboBox.isEnabled())
+ {
+ comp.setForeground(comboBox.getForeground());
+ comp.setBackground(comboBox.getBackground());
+ }
+ else
+ {
+ Color fg = UIManager.getColor("ComboBox.disabledForeground");
+ comp.setForeground(fg);
+ Color bg = UIManager.getColor("ComboBox.disabledBackground");
+ comp.setBackground(bg);
+ }
+ currentValuePane.paintComponent(g, comp, comboBox, bounds.x, bounds.y,
+ bounds.width, bounds.height);
}
- else
- comboBox.getEditor().setItem(comboBox.getSelectedItem());
}
/**
@@ -850,10 +869,22 @@ public class BasicComboBoxUI extends ComboBoxUI
public void paintCurrentValueBackground(Graphics g, Rectangle bounds,
boolean hasFocus)
{
- // background is painted by renderer, so it seems that nothing
- // should be done here.
+ Color saved = g.getColor();
+ if (comboBox.isEnabled())
+ {
+ g.setColor(UIManager.getColor("UIManager.background"));
+ }
+ else
+ {
+ g.setColor(UIManager.getColor("UIManager.disabledBackground"));
+ }
+ g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
+ g.setColor(saved);
}
+ private static final ListCellRenderer DEFAULT_RENDERER
+ = new DefaultListCellRenderer();
+
/**
* Returns the default size for the display area of a combo box that does
* not contain any elements. This method returns the width and height of
@@ -865,14 +896,15 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected Dimension getDefaultSize()
{
- // There is nothing in the spec to say how this method should be
- // implemented...so I've done some guessing, written some Mauve tests,
- // and written something that gives dimensions that are close to the
- // reference implementation.
- FontMetrics fm = comboBox.getFontMetrics(comboBox.getFont());
- int w = fm.charWidth(' ') + 2;
- int h = fm.getHeight() + 2;
- return new Dimension(w, h);
+ Component comp = DEFAULT_RENDERER.getListCellRendererComponent(listBox,
+ " ", -1,
+ false,
+ false);
+ currentValuePane.add(comp);
+ comp.setFont(comboBox.getFont());
+ Dimension d = comp.getPreferredSize();
+ currentValuePane.remove(comp);
+ return d;
}
/**
@@ -883,70 +915,58 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
protected Dimension getDisplaySize()
{
- if (!comboBox.isEditable())
+ Dimension dim = new Dimension();
+ ListCellRenderer renderer = comboBox.getRenderer();
+ if (renderer == null)
+ {
+ renderer = DEFAULT_RENDERER;
+ }
+
+ Object prototype = comboBox.getPrototypeDisplayValue();
+ if (prototype != null)
{
- Object prototype = comboBox.getPrototypeDisplayValue();
- if (prototype != null)
+ Component comp = renderer.getListCellRendererComponent
+ (listBox, prototype, -1, false, false);
+ currentValuePane.add(comp);
+ comp.setFont(comboBox.getFont());
+ Dimension renderSize = comp.getPreferredSize();
+ currentValuePane.remove(comp);
+ dim.height = renderSize.height;
+ dim.width = renderSize.width;
+ }
+ else
+ {
+ ComboBoxModel model = comboBox.getModel();
+ int size = model.getSize();
+ if (size > 0)
{
- // calculate result based on prototype
- ListCellRenderer renderer = comboBox.getRenderer();
- Component comp = renderer.getListCellRendererComponent(listBox,
- prototype, -1, false, false);
- Dimension compSize = comp.getPreferredSize();
- compSize.width += 2; // add 1 pixel margin around area
- compSize.height += 2;
- return compSize;
+ for (int i = 0; i < size; ++i)
+ {
+ Component comp = renderer.getListCellRendererComponent
+ (listBox, model.getElementAt(i), -1, false, false);
+ currentValuePane.add(comp);
+ comp.setFont(comboBox.getFont());
+ Dimension renderSize = comp.getPreferredSize();
+ currentValuePane.remove(comp);
+ dim.width = Math.max(dim.width, renderSize.width);
+ dim.height = Math.max(dim.height, renderSize.height);
+ }
}
else
{
- ComboBoxModel model = comboBox.getModel();
- int numItems = model.getSize();
-
- // if combo box doesn't have any items then simply
- // return its default size
- if (numItems == 0)
- {
- displaySize = getDefaultSize();
- return displaySize;
- }
-
- Dimension size = new Dimension(0, 0);
-
- // ComboBox's display size should be equal to the
- // size of the largest item in the combo box.
- ListCellRenderer renderer = comboBox.getRenderer();
-
- for (int i = 0; i < numItems; i++)
- {
- Object item = model.getElementAt(i);
- Component comp = renderer.getListCellRendererComponent(listBox,
- item, -1, false, false);
-
- Dimension compSize = comp.getPreferredSize();
- if (compSize.width + 2 > size.width)
- size.width = compSize.width + 2;
- if (compSize.height + 2 > size.height)
- size.height = compSize.height + 2;
- }
- displaySize = size;
- return displaySize;
+ dim = getDefaultSize();
+ if (comboBox.isEditable())
+ dim.width = 100;
}
}
- else // an editable combo,
+ if (comboBox.isEditable())
{
- Component comp = comboBox.getEditor().getEditorComponent();
- Dimension prefSize = comp.getPreferredSize();
- int width = prefSize.width;
- int height = prefSize.height + 2;
- Object prototype = comboBox.getPrototypeDisplayValue();
- if (prototype != null)
- {
- FontMetrics fm = comboBox.getFontMetrics(comboBox.getFont());
- width = Math.max(width, fm.stringWidth(prototype.toString()) + 2);
- }
- displaySize = new Dimension(width, height);
- return displaySize;
+ Dimension editSize = editor.getPreferredSize();
+ dim.width = Math.max(dim.width, editSize.width);
+ dim.height = Math.max(dim.height, editSize.height);
}
+ displaySize.setSize(dim.width, dim.height);
+ return dim;
}
/**
@@ -954,6 +974,7 @@ public class BasicComboBoxUI extends ComboBoxUI
* by the look and feel.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement.
}
@@ -963,6 +984,7 @@ public class BasicComboBoxUI extends ComboBoxUI
* installed by in {@link #installListeners}.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement.
}
@@ -1016,7 +1038,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public Dimension preferredLayoutSize(Container parent)
{
- return getPreferredSize((JComponent) parent);
+ return parent.getPreferredSize();
}
/**
@@ -1028,7 +1050,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public Dimension minimumLayoutSize(Container parent)
{
- return preferredLayoutSize(parent);
+ return parent.getMinimumSize();
}
/**
@@ -1043,14 +1065,15 @@ public class BasicComboBoxUI extends ComboBoxUI
{
// Position editor component to the left of arrow button if combo box is
// editable
- int arrowSize = comboBox.getHeight();
+ Insets i = getInsets();
+ int arrowSize = comboBox.getHeight() - (i.top + i.bottom);
int editorWidth = comboBox.getBounds().width - arrowSize;
- if (comboBox.isEditable())
- editor.setBounds(0, 0, editorWidth, comboBox.getBounds().height);
-
- arrowButton.setBounds(editorWidth, 0, arrowSize, arrowSize);
- comboBox.revalidate();
+ if (arrowButton != null)
+ arrowButton.setBounds(comboBox.getWidth() - (i.right + arrowSize),
+ i.top, arrowSize, arrowSize);
+ if (editor != null)
+ editor.setBounds(rectangleForCurrentValue());
}
}
@@ -1078,9 +1101,6 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void focusGained(FocusEvent e)
{
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
-
hasFocus = true;
comboBox.repaint();
}
@@ -1093,11 +1113,9 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void focusLost(FocusEvent e)
{
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
-
hasFocus = false;
- setPopupVisible(comboBox, false);
+ if (! e.isTemporary() && comboBox.isLightWeightPopupEnabled())
+ setPopupVisible(comboBox, false);
comboBox.repaint();
}
}
@@ -1124,11 +1142,12 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void itemStateChanged(ItemEvent e)
{
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
-
- if (e.getStateChange() == ItemEvent.SELECTED && comboBox.isEditable())
- comboBox.getEditor().setItem(e.getItem());
+ ComboBoxModel model = comboBox.getModel();
+ Object v = model.getSelectedItem();
+ if (editor != null)
+ {
+ comboBox.configureEditor(comboBox.getEditor(), v);
+ }
comboBox.repaint();
}
}
@@ -1173,10 +1192,17 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void contentsChanged(ListDataEvent e)
{
- // if the item is selected or deselected
-
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
+ if (e.getIndex0() != -1 || e.getIndex1() != -1)
+ {
+ isMinimumSizeDirty = true;
+ comboBox.revalidate();
+ }
+ if (editor != null)
+ {
+ comboBox.configureEditor(comboBox.getEditor(),
+ comboBox.getSelectedItem());
+ }
+ comboBox.repaint();
}
/**
@@ -1186,20 +1212,51 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void intervalAdded(ListDataEvent e)
{
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
-
- ComboBoxModel model = comboBox.getModel();
- ListCellRenderer renderer = comboBox.getRenderer();
-
- if (displaySize == null)
- displaySize = getDisplaySize();
- if (displaySize.width < getDefaultSize().width)
- displaySize.width = getDefaultSize().width;
- if (displaySize.height < getDefaultSize().height)
- displaySize.height = getDefaultSize().height;
-
- comboBox.repaint();
+ int start = e.getIndex0();
+ int end = e.getIndex1();
+ if (start == 0 && comboBox.getItemCount() - (end - start + 1) == 0)
+ {
+ contentsChanged(e);
+ }
+ else if (start != -1 || end != -1)
+ {
+ ListCellRenderer renderer = comboBox.getRenderer();
+ ComboBoxModel model = comboBox.getModel();
+ int w = displaySize.width;
+ int h = displaySize.height;
+ // TODO: Optimize using prototype here.
+ for (int i = start; i <= end; ++i)
+ {
+ Component comp =
+ renderer.getListCellRendererComponent(listBox,
+ model.getElementAt(i),
+ -1, false, false);
+ currentValuePane.add(comp);
+ comp.setFont(comboBox.getFont());
+ Dimension dim = comp.getPreferredSize();
+ w = Math.max(w, dim.width);
+ h = Math.max(h, dim.height);
+ currentValuePane.remove(comp);
+ }
+ if (displaySize.width < w || displaySize.height < h)
+ {
+ if (displaySize.width < w)
+ {
+ displaySize.width = w;
+ }
+ if (displaySize.height < h)
+ {
+ displaySize.height = h;
+ }
+ comboBox.revalidate();
+ if (editor != null)
+ {
+ comboBox.configureEditor(comboBox.getEditor(),
+ comboBox.getSelectedItem());
+ }
+ }
+ }
+
}
/**
@@ -1210,12 +1267,7 @@ public class BasicComboBoxUI extends ComboBoxUI
*/
public void intervalRemoved(ListDataEvent e)
{
- // Lets assume every change invalidates the minimumsize.
- isMinimumSizeDirty = true;
-
- // recalculate display size of the JComboBox.
- displaySize = getDisplaySize();
- comboBox.repaint();
+ contentsChanged(e);
}
}
@@ -1291,22 +1343,4 @@ public class BasicComboBoxUI extends ComboBoxUI
}
}
- /**
- * A handler for mouse events occurring in the combo box. An instance of
- * this class is returned by the <code>createMouseListener()</code> method.
- */
- private class MouseHandler extends MouseAdapter
- {
- /**
- * Invoked when mouse is pressed over the combo box. It toggles the
- * visibility of the popup list.
- *
- * @param e the event
- */
- public void mousePressed(MouseEvent e)
- {
- if (comboBox.isEnabled())
- toggleOpenClose();
- }
- }
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java
index 798101d..d4eabc6 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java
@@ -38,9 +38,12 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
+import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ItemEvent;
@@ -59,13 +62,13 @@ import java.beans.PropertyChangeListener;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
-import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPopupMenu;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
+import javax.swing.MenuSelectionManager;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
@@ -165,9 +168,17 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
public BasicComboPopup(JComboBox comboBox)
{
this.comboBox = comboBox;
- installComboBoxListeners();
+ mouseListener = createMouseListener();
+ mouseMotionListener = createMouseMotionListener();
+ keyListener = createKeyListener();
+
+ list = createList();
+ configureList();
+ scroller = createScroller();
+ configureScroller();
configurePopup();
- setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());
+ installComboBoxListeners();
+ installKeyboardActions();
}
/**
@@ -175,42 +186,23 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void show()
{
- Rectangle cbBounds = comboBox.getBounds();
-
- // popup should have same width as the comboBox and should be hight anough
- // to display number of rows equal to 'maximumRowCount' property
- int popupHeight = getPopupHeightForRowCount(comboBox.getMaximumRowCount());
-
- scroller.setPreferredSize(new Dimension(cbBounds.width, popupHeight));
- pack();
+ Dimension size = comboBox.getSize();
+ size.height = getPopupHeightForRowCount(comboBox.getMaximumRowCount());
+ Insets i = getInsets();
+ size.width -= i.left + i.right;
+ Rectangle bounds = computePopupBounds(0, comboBox.getBounds().height,
+ size.width, size.height);
- // Highlight selected item in the combo box's drop down list
- if (comboBox.getSelectedIndex() != -1)
- list.setSelectedIndex(comboBox.getSelectedIndex());
+ scroller.setMaximumSize(bounds.getSize());
+ scroller.setPreferredSize(bounds.getSize());
+ scroller.setMinimumSize(bounds.getSize());
+ list.invalidate();
- //scroll scrollbar s.t. selected item is visible
- JScrollBar scrollbar = scroller.getVerticalScrollBar();
- int selectedIndex = comboBox.getSelectedIndex();
- if (selectedIndex > comboBox.getMaximumRowCount())
- scrollbar.setValue(getPopupHeightForRowCount(selectedIndex));
-
- // We put the autoclose-registration inside an InvocationEvent, so that
- // the same event that triggered this show() call won't hide the popup
- // immediately.
- SwingUtilities.invokeLater
- (new Runnable()
- {
- public void run()
- {
- // Register this popup to be autoclosed when user clicks outside the
- // popup.
- BasicLookAndFeel laf = (BasicLookAndFeel) UIManager.getLookAndFeel();
- laf.registerForAutoClose(BasicComboPopup.this);
- }});
-
- // location specified is relative to comboBox
- super.show(comboBox, 0, cbBounds.height);
+ syncListSelection();
+ list.ensureIndexIsVisible(list.getSelectedIndex());
+ setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());
+ show(comboBox, bounds.x, bounds.y);
}
/**
@@ -218,7 +210,19 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void hide()
{
- super.setVisible(false);
+ MenuSelectionManager menuSelectionManager =
+ MenuSelectionManager.defaultManager();
+ javax.swing.MenuElement[] menuElements =
+ menuSelectionManager.getSelectedPath();
+ for (int i = 0; i < menuElements.length; i++)
+ {
+ if (menuElements[i] == this)
+ {
+ menuSelectionManager.clearSelectedPath();
+ break;
+ }
+ }
+ comboBox.repaint();
}
/**
@@ -270,7 +274,6 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
public void uninstallingUI()
{
uninstallComboBoxModelListeners(comboBox.getModel());
-
uninstallListeners();
uninstallKeyboardActions();
}
@@ -291,6 +294,7 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
* This method uninstalls keyboard actions installed by the UI.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
@@ -446,7 +450,6 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
protected JList createList()
{
JList l = new JList(comboBox.getModel());
- l.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
return l;
}
@@ -456,9 +459,18 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected void configureList()
{
- list.setModel(comboBox.getModel());
- list.setVisibleRowCount(comboBox.getMaximumRowCount());
+ list.setFont(comboBox.getFont());
+ list.setForeground(comboBox.getForeground());
+ list.setBackground(comboBox.getBackground());
+ Color sfg = UIManager.getColor("ComboBox.selectionForeground");
+ list.setSelectionForeground(sfg);
+ Color sbg = UIManager.getColor("ComboBox.selectionBackground");
+ list.setSelectionBackground(sbg);
+ list.setBorder(null);
+ list.setCellRenderer(comboBox.getRenderer());
list.setFocusable(false);
+ syncListSelection();
+ list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
installListListeners();
}
@@ -489,7 +501,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected JScrollPane createScroller()
{
- return new JScrollPane();
+ return new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
}
/**
@@ -498,8 +511,8 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
protected void configureScroller()
{
scroller.setBorder(null);
- scroller.getViewport().setView(list);
- scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ scroller.setFocusable(false);
+ scroller.getVerticalScrollBar().setFocusable(false);
}
/**
@@ -508,18 +521,11 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected void configurePopup()
{
+ setBorderPainted(true);
setBorder(BorderFactory.createLineBorder(Color.BLACK));
- // initialize list that will be used to display combo box's items
- this.list = createList();
- ((JLabel) list.getCellRenderer()).setHorizontalAlignment(SwingConstants.LEFT);
- configureList();
-
- // initialize scroller. Add list to the scroller.
- scroller = createScroller();
- configureScroller();
-
- // add scroller with list inside of it to JPopupMenu
- super.add(scroller);
+ setOpaque(false);
+ add(scroller);
+ setFocusable(false);
}
/*
@@ -528,20 +534,14 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected void installComboBoxListeners()
{
- // mouse listener that listens to mouse event in combo box
- mouseListener = createMouseListener();
- comboBox.addMouseListener(mouseListener);
-
- // mouse listener that listens to mouse dragging events in the combo box
- mouseMotionListener = createMouseMotionListener();
- comboBox.addMouseMotionListener(mouseMotionListener);
-
// item listener listenening to selection events in the combo box
itemListener = createItemListener();
comboBox.addItemListener(itemListener);
propertyChangeListener = createPropertyChangeListener();
comboBox.addPropertyChangeListener(propertyChangeListener);
+
+ installComboBoxModelListeners(comboBox.getModel());
}
/**
@@ -562,6 +562,7 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
* DOCUMENT ME!
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
@@ -651,7 +652,10 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected void delegateFocus(MouseEvent e)
{
- // FIXME: Need to implement
+ if (comboBox.isEditable())
+ comboBox.getEditor().getEditorComponent().requestFocus();
+ else
+ comboBox.requestFocus();
}
/**
@@ -660,7 +664,7 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected void togglePopup()
{
- if (BasicComboPopup.this.isVisible())
+ if (isVisible())
hide();
else
show();
@@ -675,7 +679,14 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
protected MouseEvent convertMouseEvent(MouseEvent e)
{
- return null;
+ Point point = SwingUtilities.convertPoint((Component) e.getSource(),
+ e.getPoint(), list);
+ MouseEvent newEvent= new MouseEvent((Component) e.getSource(),
+ e.getID(), e.getWhen(),
+ e.getModifiers(), point.x, point.y,
+ e.getModifiers(),
+ e.isPopupTrigger());
+ return newEvent;
}
/**
@@ -707,7 +718,7 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
totalHeight += dim.height;
}
- return totalHeight;
+ return totalHeight == 0 ? 100 : totalHeight;
}
/**
@@ -735,11 +746,24 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
protected void updateListBoxSelectionForEvent(MouseEvent anEvent,
boolean shouldScroll)
{
- // TODO: We need to handle the shouldScroll parameter somehow.
- int index = list.locationToIndex(anEvent.getPoint());
- // Check for valid index.
- if (index >= 0)
- list.setSelectedIndex(index);
+ Point point = anEvent.getPoint();
+ if (list != null)
+ {
+ int index = list.locationToIndex(point);
+ if (index == -1)
+ {
+ if (point.y < 0)
+ index = 0;
+ else
+ index = comboBox.getModel().getSize() - 1;
+ }
+ if (list.getSelectedIndex() != index)
+ {
+ list.setSelectedIndex(index);
+ if (shouldScroll)
+ list.ensureIndexIsVisible(index);
+ }
+ }
}
/**
@@ -769,8 +793,11 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void mousePressed(MouseEvent e)
{
- if (comboBox.isEnabled())
- togglePopup();
+ if (SwingUtilities.isLeftMouseButton(e) && comboBox.isEnabled())
+ {
+ delegateFocus(e);
+ togglePopup();
+ }
}
/**
@@ -782,28 +809,27 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void mouseReleased(MouseEvent e)
{
- // Get component over which mouse was released
- Component src = (Component) e.getSource();
- int x = e.getX();
- int y = e.getY();
- Component releasedComponent = SwingUtilities.getDeepestComponentAt(src,
- x, y);
-
- // if mouse was released inside the bounds of combo box then do nothing,
+ Component component = (Component) e.getSource();
+ Dimension size = component.getSize();
+ Rectangle bounds = new Rectangle(0, 0, size.width - 1, size.height - 1);
+ // If mouse was released inside the bounds of combo box then do nothing,
// Otherwise if mouse was released inside the list of combo box items
// then change selection and close popup
- if (! (releasedComponent instanceof JComboBox))
+ if (! bounds.contains(e.getPoint()))
{
- // List model contains the item over which mouse is released,
- // since it is updated every time the mouse is moved over a different
- // item in the list. Now that the mouse is released we need to
- // update model of the combo box as well.
- comboBox.setSelectedIndex(list.getSelectedIndex());
-
- if (isAutoScrolling)
- stopAutoScrolling();
+ MouseEvent convEvent = convertMouseEvent(e);
+ Point point = convEvent.getPoint();
+ Rectangle visRect = new Rectangle();
+ list.computeVisibleRect(visRect);
+ if (visRect.contains(point))
+ {
+ updateListBoxSelectionForEvent(convEvent, false);
+ comboBox.setSelectedIndex(list.getSelectedIndex());
+ }
hide();
}
+ hasEntered = false;
+ stopAutoScrolling();
}
}
@@ -827,58 +853,42 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void mouseDragged(MouseEvent e)
{
- // convert point of the drag event relative to combo box list component
- // figure out over which list cell the mouse is currently being dragged
- // and highlight the cell. The list model is changed but the change has
- // no effect on combo box's data model. The list model is changed so
- // that the appropriate item would be highlighted in the combo box's
- // list.
- if (BasicComboPopup.this.isVisible())
+ if (isVisible())
{
- int cbHeight = (int) comboBox.getPreferredSize().getHeight();
- int popupHeight = BasicComboPopup.this.getSize().height;
-
- // if mouse is dragged inside the the combo box's items list.
- if (e.getY() > cbHeight && ! (e.getY() - cbHeight >= popupHeight))
- {
- int index = list.locationToIndex(new Point(e.getX(),
- (int) (e.getY()
- - cbHeight)));
-
- int firstVisibleIndex = list.getFirstVisibleIndex();
-
- // list.locationToIndex returns item's index that would
- // be located at the specified point if the first item that
- // is visible is item 0. However in the JComboBox it is not
- // necessarily the case since list is contained in the
- // JScrollPane so we need to adjust the index returned.
- if (firstVisibleIndex != 0)
- // FIXME: adjusted index here is off by one. I am adding one
- // here to compensate for that. This should be
- // index += firstVisibleIndex. Remove +1 once the bug is fixed.
- index += firstVisibleIndex + 1;
-
- list.setSelectedIndex(index);
- }
- else
- {
- // if mouse is being dragged at the bottom of combo box's list
- // of items or at the very top then scroll the list in the
- // desired direction.
- boolean movingUP = e.getY() < cbHeight;
- boolean movingDown = e.getY() > cbHeight;
-
- if (movingUP)
- {
- scrollDirection = SCROLL_UP;
- startAutoScrolling(SCROLL_UP);
- }
- else if (movingDown)
- {
- scrollDirection = SCROLL_DOWN;
- startAutoScrolling(SCROLL_DOWN);
- }
- }
+ MouseEvent convEvent = convertMouseEvent(e);
+ Rectangle visRect = new Rectangle();
+ list.computeVisibleRect(visRect);
+ if (convEvent.getPoint().y >= visRect.y
+ && (convEvent.getPoint().y <= visRect.y + visRect.height - 1))
+ {
+ hasEntered = true;
+ if (isAutoScrolling)
+ stopAutoScrolling();
+ Point point = convEvent.getPoint();
+ if (visRect.contains(point))
+ {
+ valueIsAdjusting = true;
+ updateListBoxSelectionForEvent(convEvent, false);
+ valueIsAdjusting = false;
+ }
+ }
+ else if (hasEntered)
+ {
+ int dir = convEvent.getPoint().y < visRect.y ? SCROLL_UP
+ : SCROLL_DOWN;
+ if (isAutoScrolling && scrollDirection != dir)
+ {
+ stopAutoScrolling();
+ startAutoScrolling(dir);
+ }
+ else if (!isAutoScrolling)
+ startAutoScrolling(dir);
+ }
+ else if (e.getPoint().y < 0)
+ {
+ hasEntered = true;
+ startAutoScrolling(SCROLL_UP);
+ }
}
}
}
@@ -905,7 +915,13 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
public void itemStateChanged(ItemEvent e)
{
- // TODO: What should be done here?
+ if (e.getStateChange() == ItemEvent.SELECTED && ! valueIsAdjusting)
+ {
+ valueIsAdjusting = true;
+ syncListSelection();
+ valueIsAdjusting = false;
+ list.ensureIndexIsVisible(comboBox.getSelectedIndex());
+ }
}
}
@@ -924,15 +940,12 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
public void mousePressed(MouseEvent e)
{
- // TODO: What should be do here?
+ // Nothing to do here.
}
public void mouseReleased(MouseEvent anEvent)
{
- int index = list.locationToIndex(anEvent.getPoint());
- // Check for valid index.
- if (index >= 0)
- comboBox.setSelectedIndex(index);
+ comboBox.setSelectedIndex(list.getSelectedIndex());
hide();
}
}
@@ -951,7 +964,15 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
public void mouseMoved(MouseEvent anEvent)
{
- updateListBoxSelectionForEvent(anEvent, false);
+ Point point = anEvent.getPoint();
+ Rectangle visRect = new Rectangle();
+ list.computeVisibleRect(visRect);
+ if (visRect.contains(point))
+ {
+ valueIsAdjusting = true;
+ updateListBoxSelectionForEvent(anEvent, false);
+ valueIsAdjusting = false;
+ }
}
}
@@ -971,15 +992,21 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
{
if (e.getPropertyName().equals("renderer"))
{
- list.setCellRenderer((ListCellRenderer) e.getNewValue());
- revalidate();
- repaint();
+ list.setCellRenderer(comboBox.getRenderer());
+ if (isVisible())
+ hide();
}
- if (e.getPropertyName().equals("dataModel"))
+ if (e.getPropertyName().equals("model"))
{
- list.setModel((ComboBoxModel) e.getNewValue());
- revalidate();
- repaint();
+ ComboBoxModel oldModel = (ComboBoxModel) e.getOldValue();
+ uninstallComboBoxModelListeners(oldModel);
+ ComboBoxModel newModel = (ComboBoxModel) e.getNewValue();
+ list.setModel(newModel);
+ installComboBoxModelListeners(newModel);
+ if (comboBox.getItemCount() > 0)
+ comboBox.setSelectedIndex(0);
+ if (isVisible())
+ hide();
}
}
}
@@ -991,7 +1018,6 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
private void uninstallListeners()
{
- uninstallListListeners();
uninstallComboBoxListeners();
uninstallComboBoxModelListeners(comboBox.getModel());
}
@@ -1015,12 +1041,6 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
*/
private void uninstallComboBoxListeners()
{
- comboBox.removeMouseListener(mouseListener);
- mouseListener = null;
-
- comboBox.removeMouseMotionListener(mouseMotionListener);
- mouseMotionListener = null;
-
comboBox.removeItemListener(itemListener);
itemListener = null;
@@ -1028,6 +1048,15 @@ public class BasicComboPopup extends JPopupMenu implements ComboPopup
propertyChangeListener = null;
}
+ void syncListSelection()
+ {
+ int index = comboBox.getSelectedIndex();
+ if (index == -1)
+ list.clearSelection();
+ else
+ list.setSelectedIndex(index);
+ }
+
// --------------------------------------------------------------------
// The following classes are here only for backwards API compatibility
// They aren't used.
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java
index 30e3156..daa9770 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java
@@ -157,6 +157,21 @@ public class BasicFileChooserUI extends FileChooserUI
closeDialog();
}
}
+ else
+ {
+ File f = new File(filechooser.getCurrentDirectory(), getFileName());
+ if (filechooser.isTraversable(f))
+ {
+ filechooser.setCurrentDirectory(f);
+ filechooser.rescanCurrentDirectory();
+ }
+ else
+ {
+ filechooser.setSelectedFile(f);
+ filechooser.approveSelection();
+ closeDialog();
+ }
+ }
}
}
@@ -1046,9 +1061,7 @@ public class BasicFileChooserUI extends FileChooserUI
*/
public String getFileName()
{
- // FIXME: I'm thinking that this method just provides access to the
- // text value in the JTextField component...but not sure yet
- return null; //filename;
+ return entry.getText();
}
/**
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
index 56022f3..11980f6 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java
@@ -301,27 +301,27 @@ public class BasicInternalFrameTitlePane extends JComponent
{
String propName = evt.getPropertyName();
if (propName.equals("closable"))
- {
- if (evt.getNewValue().equals(Boolean.TRUE))
- closeButton.setVisible(true);
- else
- closeButton.setVisible(false);
- }
- else if (propName.equals("iconifiable"))
- {
- if (evt.getNewValue().equals(Boolean.TRUE))
- iconButton.setVisible(true);
- else
- iconButton.setVisible(false);
- }
+ {
+ if (evt.getNewValue().equals(Boolean.TRUE))
+ closeButton.setVisible(true);
+ else
+ closeButton.setVisible(false);
+ }
+ else if (propName.equals("iconable"))
+ {
+ if (evt.getNewValue().equals(Boolean.TRUE))
+ iconButton.setVisible(true);
+ else
+ iconButton.setVisible(false);
+ }
else if (propName.equals("maximizable"))
- {
- if (evt.getNewValue().equals(Boolean.TRUE))
- maxButton.setVisible(true);
- else
- maxButton.setVisible(false);
- }
-
+ {
+ if (evt.getNewValue().equals(Boolean.TRUE))
+ maxButton.setVisible(true);
+ else
+ maxButton.setVisible(false);
+ }
+ enableActions();
}
}
@@ -340,7 +340,7 @@ public class BasicInternalFrameTitlePane extends JComponent
*
* @return True if this Component can receive focus.
*/
- public boolean isFocusTransversable()
+ public boolean isFocusTraversable()
{
return true;
}
@@ -520,22 +520,22 @@ public class BasicInternalFrameTitlePane extends JComponent
}
/** The action command for the Close action. */
- protected static final String CLOSE_CMD = "Close";
+ protected static final String CLOSE_CMD;
/** The action command for the Minimize action. */
- protected static final String ICONIFY_CMD = "Minimize";
+ protected static final String ICONIFY_CMD;
/** The action command for the Maximize action. */
- protected static final String MAXIMIZE_CMD = "Maximize";
+ protected static final String MAXIMIZE_CMD;
/** The action command for the Move action. */
- protected static final String MOVE_CMD = "Move";
+ protected static final String MOVE_CMD;
/** The action command for the Restore action. */
- protected static final String RESTORE_CMD = "Restore";
+ protected static final String RESTORE_CMD;
/** The action command for the Size action. */
- protected static final String SIZE_CMD = "Size";
+ protected static final String SIZE_CMD;
/** The action associated with closing the JInternalFrame. */
protected Action closeAction;
@@ -614,6 +614,17 @@ public class BasicInternalFrameTitlePane extends JComponent
* This is package-private to avoid an accessor method.
*/
transient JLabel title;
+
+ static
+ {
+ // not constants in JDK
+ CLOSE_CMD = "Close";
+ ICONIFY_CMD = "Minimize";
+ MAXIMIZE_CMD = "Maximize";
+ MOVE_CMD = "Move";
+ RESTORE_CMD = "Restore";
+ SIZE_CMD = "Size";
+ }
/**
* Creates a new BasicInternalFrameTitlePane object that is used in the
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java
index f6cbeec..7ec3aa0 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java
@@ -38,10 +38,13 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
+import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
@@ -164,6 +167,12 @@ public class BasicInternalFrameUI extends InternalFrameUI
protected class BorderListener extends MouseInputAdapter
implements SwingConstants
{
+ /**
+ * If true, the cursor is being already shown in the alternative "resize"
+ * shape.
+ */
+ transient boolean showingResizeCursor;
+
/** FIXME: Use for something. */
protected final int RESIZE_NONE = 0;
@@ -255,7 +264,7 @@ public class BasicInternalFrameUI extends InternalFrameUI
else if (e.getSource() == titlePane)
{
Rectangle fBounds = frame.getBounds();
-
+ frame.putClientProperty("bufferedDragging", Boolean.TRUE);
dm.dragFrame(frame, e.getX() - xOffset + b.x, e.getY() - yOffset
+ b.y);
}
@@ -263,25 +272,69 @@ public class BasicInternalFrameUI extends InternalFrameUI
/**
* This method is called when the mouse exits the JInternalFrame.
- *
+ *
* @param e The MouseEvent.
*/
public void mouseExited(MouseEvent e)
{
- // There is nothing to do when the mouse exits
- // the border area.
+ // Reset the cursor shape.
+ if (showingResizeCursor)
+ {
+ frame.setCursor(Cursor.getDefaultCursor());
+ showingResizeCursor = false;
+ }
}
/**
- * This method is called when the mouse is moved inside the
- * JInternalFrame.
- *
+ * This method is called when the mouse is moved inside the JInternalFrame.
+ *
* @param e The MouseEvent.
*/
public void mouseMoved(MouseEvent e)
{
- // There is nothing to do when the mouse moves
- // over the border area.
+ // Turn off the resize cursor if we are in the frame header.
+ if (showingResizeCursor && e.getSource() != frame)
+ {
+ frame.setCursor(Cursor.getDefaultCursor());
+ showingResizeCursor = false;
+ }
+ else if (e.getSource()==frame && frame.isResizable())
+ {
+ int cursor;
+ switch (sectionOfClick(e.getX(), e.getY()))
+ {
+ case NORTH:
+ cursor = Cursor.N_RESIZE_CURSOR;
+ break;
+ case NORTH_EAST:
+ cursor = Cursor.NE_RESIZE_CURSOR;
+ break;
+ case EAST:
+ cursor = Cursor.E_RESIZE_CURSOR;
+ break;
+ case SOUTH_EAST:
+ cursor = Cursor.SE_RESIZE_CURSOR;
+ break;
+ case SOUTH:
+ cursor = Cursor.S_RESIZE_CURSOR;
+ break;
+ case SOUTH_WEST:
+ cursor = Cursor.SW_RESIZE_CURSOR;
+ break;
+ case WEST:
+ cursor = Cursor.W_RESIZE_CURSOR;
+ break;
+ case NORTH_WEST:
+ cursor = Cursor.NW_RESIZE_CURSOR;
+ break;
+ default:
+ cursor = Cursor.DEFAULT_CURSOR;
+ }
+
+ Cursor resize = Cursor.getPredefinedCursor(cursor);
+ frame.setCursor(resize);
+ showingResizeCursor = true;
+ }
}
/**
@@ -326,7 +379,10 @@ public class BasicInternalFrameUI extends InternalFrameUI
if (e.getSource() == frame && frame.isResizable())
dm.endResizingFrame(frame);
else if (e.getSource() == titlePane)
- dm.endDraggingFrame(frame);
+ {
+ dm.endDraggingFrame(frame);
+ frame.putClientProperty("bufferedDragging", null);
+ }
}
/**
@@ -1119,12 +1175,8 @@ public class BasicInternalFrameUI extends InternalFrameUI
installComponents();
installKeyboardActions();
- ((JComponent) frame.getRootPane().getGlassPane()).setOpaque(false);
if (! frame.isSelected())
- frame.getRootPane().getGlassPane().setVisible(true);
-
- frame.setOpaque(true);
- frame.invalidate();
+ frame.getGlassPane().setVisible(true);
}
}
@@ -1140,9 +1192,7 @@ public class BasicInternalFrameUI extends InternalFrameUI
uninstallListeners();
uninstallDefaults();
- ((JComponent) frame.getRootPane().getGlassPane()).setOpaque(true);
frame.getRootPane().getGlassPane().setVisible(false);
-
frame = null;
}
@@ -1155,12 +1205,22 @@ public class BasicInternalFrameUI extends InternalFrameUI
frame.setLayout(internalFrameLayout);
LookAndFeel.installBorder(frame, "InternalFrame.border");
frame.setFrameIcon(UIManager.getIcon("InternalFrame.icon"));
+
+ // Let the content pane inherit the background color from its
+ // frame by setting the background to null.
+ Component contentPane = frame.getContentPane();
+ if (contentPane != null
+ && contentPane.getBackground() instanceof UIResource)
+ {
+ contentPane.setBackground(null);
+ }
}
/**
* This method installs the keyboard actions for the JInternalFrame.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Implement.
}
@@ -1243,6 +1303,7 @@ public class BasicInternalFrameUI extends InternalFrameUI
* This method uninstalls the keyboard actions for the JInternalFrame.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Implement.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java
index d0964f4..60e3a98 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java
@@ -37,6 +37,8 @@
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
@@ -372,6 +374,7 @@ public class BasicLabelUI extends LabelUI implements PropertyChangeListener
* @param l The {@link JLabel} to install keyboard actions for.
*/
protected void installKeyboardActions(JLabel l)
+ throws NotImplementedException
{
//FIXME: implement.
}
@@ -382,6 +385,7 @@ public class BasicLabelUI extends LabelUI implements PropertyChangeListener
* @param l The {@link JLabel} to uninstall keyboard actions for.
*/
protected void uninstallKeyboardActions(JLabel l)
+ throws NotImplementedException
{
//FIXME: implement.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java
index 19dfe21..d9bc067 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java
@@ -1,5 +1,5 @@
/* BasicListUI.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
@@ -179,7 +181,8 @@ public class BasicListUI extends ListUI
int index1 = e.getFirstIndex();
int index2 = e.getLastIndex();
Rectangle damaged = getCellBounds(list, index1, index2);
- list.repaint(damaged);
+ if (damaged != null)
+ list.repaint(damaged);
}
}
@@ -716,7 +719,8 @@ public class BasicListUI extends ListUI
* @param index2 The last row to incude in the bounds
*
* @return A rectangle encompassing the range of rows between
- * <code>index1</code> and <code>index2</code> inclusive
+ * <code>index1</code> and <code>index2</code> inclusive, or null
+ * such a rectangle couldn't be calculated for the given indexes.
*/
public Rectangle getCellBounds(JList l, int index1, int index2)
{
@@ -1023,6 +1027,7 @@ public class BasicListUI extends ListUI
* Uninstalls keyboard actions for this UI in the {@link JList}.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -1182,7 +1187,7 @@ public class BasicListUI extends ListUI
for (int row = startIndex; row <= endIndex; ++row)
{
Rectangle bounds = getCellBounds(list, row, row);
- if (bounds.intersects(clip))
+ if (bounds != null && bounds.intersects(clip))
paintCell(g, row, bounds, render, model, sel, lead);
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java b/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java
index 3451224..78c16ef 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java
@@ -44,6 +44,7 @@ import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
+import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
@@ -52,10 +53,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Enumeration;
-import java.util.Iterator;
import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.WeakHashMap;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
@@ -66,11 +64,9 @@ import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
-import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.MenuSelectionManager;
-import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
@@ -104,11 +100,6 @@ public abstract class BasicLookAndFeel extends LookAndFeel
{
/**
- * Registered popups for autoclose.
- */
- private WeakHashMap autoClosePopups = new WeakHashMap();
-
- /**
* Receives an event from the event queue.
*
* @param event
@@ -137,46 +128,8 @@ public abstract class BasicLookAndFeel extends LookAndFeel
target = ((Container) target).findComponentAt(ev.getPoint());
if (! m.isComponentPartOfCurrentMenu(target))
m.clearSelectedPath();
-
- // Handle other registered popup instances, like ComboBox popups.
- autoClosePopups(ev, target);
- }
-
- /**
- * Registers Popup and its content to be autoclosed when a mouseclick
- * occurs outside of the popup.
- *
- * @param popup the popup to be autoclosed when clicked outside
- */
- void registerForAutoClose(JPopupMenu popup)
- {
- autoClosePopups.put(popup, null);
}
- /**
- * Automatically closes all popups that are not 'hit' by the mouse event.
- *
- * @param ev the mouse event
- * @param target the target of the mouse event
- */
- private void autoClosePopups(MouseEvent ev, Component target)
- {
- if (autoClosePopups.size() != 0)
- {
- Set popups = autoClosePopups.keySet();
- Iterator i = popups.iterator();
- while (i.hasNext())
- {
- JPopupMenu popup = (JPopupMenu) i.next();
- if (!(target == popup
- || SwingUtilities.isDescendingFrom(target, popup)))
- {
- popup.setVisible(false);
- i.remove();
- }
- }
- }
- }
}
/**
@@ -251,7 +204,7 @@ public abstract class BasicLookAndFeel extends LookAndFeel
*/
public BasicLookAndFeel()
{
- // TODO
+ // Nothing to do here.
}
/**
@@ -337,59 +290,138 @@ public abstract class BasicLookAndFeel extends LookAndFeel
/**
* Populates the <code>defaults</code> table with system color defaults.
+ *
+ * This sets up a couple of default values and passes them to
+ * {@link #loadSystemColors(UIDefaults, String[], boolean)}. If the
+ * look and feel is a native look and feel, these defaults may be overridden
+ * by the corresponding SystemColor constants.
*
* @param defaults the defaults table (<code>null</code> not permitted).
*/
protected void initSystemColorDefaults(UIDefaults defaults)
{
- Color highLight = new Color(249, 247, 246);
- Color light = new Color(239, 235, 231);
- Color shadow = new Color(139, 136, 134);
- Color darkShadow = new Color(16, 16, 16);
-
- Object[] uiDefaults;
- uiDefaults = new Object[] {
- "activeCaption", new ColorUIResource(0, 0, 128),
- "activeCaptionBorder", new ColorUIResource(Color.lightGray),
- "activeCaptionText", new ColorUIResource(Color.white),
- "control", new ColorUIResource(light),
- "controlDkShadow", new ColorUIResource(shadow),
- "controlHighlight", new ColorUIResource(highLight),
- "controlLtHighlight", new ColorUIResource(highLight),
- "controlShadow", new ColorUIResource(shadow),
- "controlText", new ColorUIResource(darkShadow),
- "desktop", new ColorUIResource(0, 92, 92),
- "inactiveCaption", new ColorUIResource(Color.gray),
- "inactiveCaptionBorder", new ColorUIResource(Color.lightGray),
- "inactiveCaptionText", new ColorUIResource(Color.lightGray),
- "info", new ColorUIResource(light),
- "infoText", new ColorUIResource(darkShadow),
- "menu", new ColorUIResource(light),
- "menuText", new ColorUIResource(darkShadow),
- "scrollbar", new ColorUIResource(light),
- "text", new ColorUIResource(Color.white),
- "textHighlight", new ColorUIResource(Color.black),
- "textHighlightText", new ColorUIResource(Color.white),
- "textInactiveText", new ColorUIResource(Color.gray),
- "textText", new ColorUIResource(Color.black),
- "window", new ColorUIResource(light),
- "windowBorder", new ColorUIResource(Color.black),
- "windowText", new ColorUIResource(darkShadow)
+ String[] defaultColors = new String[] {
+ "activeCaption", "#000080",
+ "activeCaptionBorder", "#C0C0C0",
+ "activeCaptionText", "#FFFFFF",
+ "control", "#C0C0C0",
+ "controlDkShadow", "#000000",
+ "controlHighlight", "#C0C0C0",
+ "controlLtHighlight", "#FFFFFF",
+ "controlShadow", "#808080",
+ "controlText", "#000000",
+ "desktop", "#005C5C",
+ "inactiveCaption", "#808080",
+ "inactiveCaptionBorder", "#C0C0C0",
+ "inactiveCaptionText", "#C0C0C0",
+ "info", "#FFFFE1",
+ "infoText", "#000000",
+ "menu", "#C0C0C0",
+ "menuText", "#000000",
+ "scrollbar", "#E0E0E0",
+ "text", "#C0C0C0",
+ "textHighlight", "#000080",
+ "textHighlightText", "#FFFFFF",
+ "textInactiveText", "#808080",
+ "textText", "#000000",
+ "window", "#FFFFFF",
+ "windowBorder", "#000000",
+ "windowText", "#000000"
};
- defaults.putDefaults(uiDefaults);
+ loadSystemColors(defaults, defaultColors, isNativeLookAndFeel());
}
/**
- * Loads the system colors. This method is not implemented yet.
- *
+ * Populates the <code>defaults</code> table with the system colors. If
+ * <code>useNative</code> is <code>true</code>, the table is populated
+ * with the constants in {@link SystemColor}, otherwise the
+ * <code>systemColors</code> parameter is decoded into the defaults table.
+ * The system colors array is made up of pairs, where the first entry is the
+ * name of the system color, and the second entry is a string denoting
+ * an RGB color value like &quot;#C0C0C0&quot;, which is decoded using
+ * {@link Color#decode(String)}.
+ *
* @param defaults the defaults table (<code>null</code> not permitted).
- * @param systemColors TODO
- * @param useNative TODO
+ * @param systemColors defaults to use when <code>useNative</code> is
+ * <code>false</code>
+ * @param useNative when <code>true</code>, installs the values of the
+ * SystemColor constants, when <code>false</code>, install the values
+ * from <code>systemColors</code>
*/
protected void loadSystemColors(UIDefaults defaults, String[] systemColors,
boolean useNative)
{
- // TODO
+ if (useNative)
+ {
+ defaults.put("activeCaption",
+ new ColorUIResource(SystemColor.ACTIVE_CAPTION));
+ defaults.put("activeCaptionBorder",
+ new ColorUIResource(SystemColor.ACTIVE_CAPTION_BORDER));
+ defaults.put("activeCaptionText",
+ new ColorUIResource(SystemColor.ACTIVE_CAPTION_TEXT));
+ defaults.put("control",
+ new ColorUIResource(SystemColor.CONTROL));
+ defaults.put("controlDkShadow",
+ new ColorUIResource(SystemColor.CONTROL_DK_SHADOW));
+ defaults.put("controlHighlight",
+ new ColorUIResource(SystemColor.CONTROL_HIGHLIGHT));
+ defaults.put("controlLtHighlight",
+ new ColorUIResource(SystemColor.CONTROL_LT_HIGHLIGHT));
+ defaults.put("controlShadow",
+ new ColorUIResource(SystemColor.CONTROL_SHADOW));
+ defaults.put("controlText",
+ new ColorUIResource(SystemColor.CONTROL_TEXT));
+ defaults.put("desktop",
+ new ColorUIResource(SystemColor.DESKTOP));
+ defaults.put("inactiveCaption",
+ new ColorUIResource(SystemColor.INACTIVE_CAPTION));
+ defaults.put("inactiveCaptionBorder",
+ new ColorUIResource(SystemColor.INACTIVE_CAPTION_BORDER));
+ defaults.put("inactiveCaptionText",
+ new ColorUIResource(SystemColor.INACTIVE_CAPTION_TEXT));
+ defaults.put("info",
+ new ColorUIResource(SystemColor.INFO));
+ defaults.put("infoText",
+ new ColorUIResource(SystemColor.INFO_TEXT));
+ defaults.put("menu",
+ new ColorUIResource(SystemColor.MENU));
+ defaults.put("menuText",
+ new ColorUIResource(SystemColor.MENU_TEXT));
+ defaults.put("scrollbar",
+ new ColorUIResource(SystemColor.SCROLLBAR));
+ defaults.put("text",
+ new ColorUIResource(SystemColor.TEXT));
+ defaults.put("textHighlight",
+ new ColorUIResource(SystemColor.TEXT_HIGHLIGHT));
+ defaults.put("textHighlightText",
+ new ColorUIResource(SystemColor.TEXT_HIGHLIGHT_TEXT));
+ defaults.put("textInactiveText",
+ new ColorUIResource(SystemColor.TEXT_INACTIVE_TEXT));
+ defaults.put("textText",
+ new ColorUIResource(SystemColor.TEXT_TEXT));
+ defaults.put("window",
+ new ColorUIResource(SystemColor.WINDOW));
+ defaults.put("windowBorder",
+ new ColorUIResource(SystemColor.WINDOW_BORDER));
+ defaults.put("windowText",
+ new ColorUIResource(SystemColor.WINDOW_TEXT));
+ }
+ else
+ {
+ for (int i = 0; i < systemColors.length; i += 2)
+ {
+ Color color = Color.BLACK;
+ try
+ {
+ color = Color.decode(systemColors[i + 1]);
+ }
+ catch (NumberFormatException e)
+ {
+ e.printStackTrace();
+ }
+ defaults.put(systemColors[i], new ColorUIResource(color));
+ }
+ }
}
/**
@@ -1162,6 +1194,7 @@ public abstract class BasicLookAndFeel extends LookAndFeel
"TabbedPane.shadow", new ColorUIResource(shadow),
"TabbedPane.tabbedPaneContentBorderInsets", new InsetsUIResource(3, 2, 1, 2),
"TabbedPane.tabbedPaneTabPadInsets", new InsetsUIResource(1, 1, 1, 1),
+ "TabbedPane.tabsOpaque", Boolean.TRUE,
"TabbedPane.tabAreaInsets", new InsetsUIResource(3, 2, 0, 2),
"TabbedPane.tabInsets", new InsetsUIResource(0, 4, 1, 4),
"TabbedPane.tabRunOverlay", new Integer(2),
@@ -1648,17 +1681,4 @@ public abstract class BasicLookAndFeel extends LookAndFeel
toolkit.removeAWTEventListener(popupHelper);
popupHelper = null;
}
-
- /**
- * Registers a JPopupMenu for autoclosing when a mouseclick occurs outside
- * of the JPopupMenu. This must be called when the popup gets opened. The
- * popup is unregistered from autoclosing as soon as it either got closed
- * by this helper, or when it has been garbage collected.
- *
- * @param popup the popup menu to autoclose
- */
- void registerForAutoClose(JPopupMenu popup)
- {
- popupHelper.registerForAutoClose(popup);
- }
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java
index daa9b0d..f258ebe 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Dimension;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
@@ -68,7 +70,7 @@ public class BasicMenuBarUI extends MenuBarUI
protected ContainerListener containerListener;
/*Property change listeners that listener to PropertyChangeEvent from menu bar*/
- protected PropertyChangeListener propertyChangeListener;
+ private PropertyChangeListener propertyChangeListener;
/* menu bar for which this UI delegate is for*/
protected JMenuBar menuBar;
@@ -176,6 +178,7 @@ public class BasicMenuBarUI extends MenuBarUI
* This method installs the keyboard actions for the JMenuBar.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement
}
@@ -223,6 +226,7 @@ public class BasicMenuBarUI extends MenuBarUI
* This method reverses the work done in installKeyboardActions.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -252,7 +256,7 @@ public class BasicMenuBarUI extends MenuBarUI
menuBar = null;
}
- protected class ChangeHandler implements ChangeListener
+ private class ChangeHandler implements ChangeListener
{
public void stateChanged(ChangeEvent event)
{
@@ -264,7 +268,7 @@ public class BasicMenuBarUI extends MenuBarUI
* This class handles ContainerEvents fired by JMenuBar. It revalidates
* and repaints menu bar whenever menu is added or removed from it.
*/
- protected class ContainerHandler implements ContainerListener
+ private class ContainerHandler implements ContainerListener
{
/**
* This method is called whenever menu is added to the menu bar
@@ -292,7 +296,7 @@ public class BasicMenuBarUI extends MenuBarUI
/**
* This class handles PropertyChangeEvents fired from the JMenuBar
*/
- protected class PropertyChangeHandler implements PropertyChangeListener
+ private class PropertyChangeHandler implements PropertyChangeListener
{
/**
* This method is called whenever one of the properties of the MenuBar
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java
index 9166c49..69c9c45 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java
@@ -40,6 +40,7 @@ package javax.swing.plaf.basic;
import java.awt.Color;
import java.awt.Component;
+import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
@@ -82,6 +83,7 @@ import javax.swing.plaf.ActionMapUIResource;
import javax.swing.plaf.ComponentInputMapUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.MenuItemUI;
+import javax.swing.text.View;
/**
* UI Delegate for JMenuItem.
@@ -183,7 +185,43 @@ public class BasicMenuItemUI extends MenuItemUI
/** A PropertyChangeListener to make UI updates after property changes **/
PropertyChangeHandler propertyChangeListener;
-
+
+ /**
+ * The view rectangle used for layout of the menu item.
+ */
+ private Rectangle viewRect;
+
+ /**
+ * The rectangle that holds the area of the label.
+ */
+ private Rectangle textRect;
+
+ /**
+ * The rectangle that holds the area of the accelerator.
+ */
+ private Rectangle accelRect;
+
+ /**
+ * The rectangle that holds the area of the icon.
+ */
+ private Rectangle iconRect;
+
+ /**
+ * The rectangle that holds the area of the icon.
+ */
+ private Rectangle arrowIconRect;
+
+ /**
+ * The rectangle that holds the area of the check icon.
+ */
+ private Rectangle checkIconRect;
+
+ /**
+ * A rectangle used for temporary storage to avoid creation of new
+ * rectangles.
+ */
+ private Rectangle cachedRect;
+
/**
* A class to handle PropertChangeEvents for the JMenuItem
* @author Anthony Balkissoon abalkiss at redhat dot com.
@@ -242,6 +280,15 @@ public class BasicMenuItemUI extends MenuItemUI
menuKeyListener = createMenuKeyListener(menuItem);
itemListener = new ItemHandler();
propertyChangeListener = new PropertyChangeHandler();
+
+ // Initialize rectangles for layout.
+ viewRect = new Rectangle();
+ textRect = new Rectangle();
+ iconRect = new Rectangle();
+ arrowIconRect = new Rectangle();
+ checkIconRect = new Rectangle();
+ accelRect = new Rectangle();
+ cachedRect = new Rectangle();
}
/**
@@ -378,50 +425,69 @@ public class BasicMenuItemUI extends MenuItemUI
int defaultTextIconGap)
{
JMenuItem m = (JMenuItem) c;
- Dimension d = BasicGraphicsUtils.getPreferredButtonSize(m,
- defaultTextIconGap);
-
- // if menu item has accelerator then take accelerator's size into account
- // when calculating preferred size.
- KeyStroke accelerator = m.getAccelerator();
- Rectangle rect;
-
- if (accelerator != null)
+ String accelText = getAcceleratorString(m);
+
+ // Layout the menu item. The result gets stored in the rectangle
+ // fields of this class.
+ layoutMenuItem(m, accelText);
+
+ // The union of the text and icon areas is the label area.
+ cachedRect.setBounds(textRect);
+ Rectangle pref = SwingUtilities.computeUnion(iconRect.x, iconRect.y,
+ iconRect.width,
+ iconRect.height,
+ cachedRect);
+
+ // Find the widest menu item text and accelerator and store it in
+ // client properties of the parent, so that we can align the accelerators
+ // properly. Of course, we only need can do this, if the parent is
+ // a JComponent and this menu item is not a toplevel menu.
+ Container parent = m.getParent();
+ if (parent != null && parent instanceof JComponent
+ && !(m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
{
- rect = getAcceleratorRect(
- accelerator,
- m.getToolkit().getFontMetrics(acceleratorFont));
+ JComponent p = (JComponent) parent;
- // add width of accelerator's text
- d.width += rect.width + defaultAcceleratorLabelGap;
+ // The widest text so far.
+ Integer maxTextWidth = (Integer) p.getClientProperty("maxTextWidth");
+ int maxTextValue = maxTextWidth == null ? 0 : maxTextWidth.intValue();
+ if (pref.width < maxTextValue)
+ pref.width = maxTextValue;
+ else
+ p.putClientProperty("maxTextWidth", new Integer(pref.width));
- // adjust the heigth of the preferred size if necessary
- if (d.height < rect.height)
- d.height = rect.height;
+ // The widest accelerator so far.
+ Integer maxAccelWidth = (Integer) p.getClientProperty("maxAccelWidth");
+ int maxAccelValue = maxAccelWidth == null ? 0
+ : maxAccelWidth.intValue();
+ if (accelRect.width > maxAccelValue)
+ {
+ maxAccelValue = accelRect.width;
+ p.putClientProperty("maxAccelWidth", new Integer(accelRect.width));
+ }
+ pref.width += maxAccelValue;
+ pref.width += defaultTextIconGap;
}
- if (checkIcon != null)
+ // Add arrow and check size if appropriate.
+ if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
{
- d.width += checkIcon.getIconWidth() + defaultTextIconGap;
-
- if (checkIcon.getIconHeight() > d.height)
- d.height = checkIcon.getIconHeight();
+ pref.width += checkIconRect.width;
+ pref.width += defaultTextIconGap;
+ pref.width += arrowIconRect.width;
+ pref.width += defaultTextIconGap;
}
- if (arrowIcon != null && (c instanceof JMenu))
- {
- int pWidth = m.getParent().getWidth();
- if (!((JMenu)c).isTopLevelMenu() && d.width < pWidth)
- d.width = pWidth
- - m.getInsets().left - m.getInsets().right;
- else
- d.width += arrowIcon.getIconWidth() + MenuGap;
-
- if (arrowIcon.getIconHeight() > d.height)
- d.height = arrowIcon.getIconHeight();
- }
-
- return d;
+ // Add a gap ~2 times as wide as the defaultTextIconGap.
+ pref.width += 2 * defaultTextIconGap;
+
+ // Respect the insets of the menu item.
+ Insets i = m.getInsets();
+ pref.width += i.left + i.right;
+ pref.height += i.top + i.bottom;
+
+ // Return a copy, so that nobody messes with our textRect.
+ return pref.getSize();
}
/**
@@ -541,7 +607,7 @@ public class BasicMenuItemUI extends MenuItemUI
*/
public void paint(Graphics g, JComponent c)
{
- paintMenuItem(g, c, checkIcon, arrowIcon, c.getBackground(),
+ paintMenuItem(g, c, checkIcon, arrowIcon, selectionBackground,
c.getForeground(), defaultTextIconGap);
}
@@ -560,16 +626,18 @@ public class BasicMenuItemUI extends MenuItemUI
// Menu item is considered to be highlighted when it is selected.
// But we don't want to paint the background of JCheckBoxMenuItems
ButtonModel mod = menuItem.getModel();
- if (menuItem.isContentAreaFilled())
+ Color saved = g.getColor();
+ if (mod.isArmed() || ((menuItem instanceof JMenu) && mod.isSelected()))
{
- if ((menuItem.isSelected() && checkIcon == null) || (mod != null &&
- mod.isArmed())
- && (menuItem.getParent() instanceof MenuElement))
- g.setColor(selectionBackground);
- else
- g.setColor(bgColor);
+ g.setColor(bgColor);
+ g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight());
+ }
+ else if (menuItem.isOpaque())
+ {
+ g.setColor(menuItem.getBackground());
g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight());
- }
+ }
+ g.setColor(saved);
}
/**
@@ -595,87 +663,123 @@ public class BasicMenuItemUI extends MenuItemUI
Color foreground, int defaultTextIconGap)
{
JMenuItem m = (JMenuItem) c;
- Rectangle tr = new Rectangle(); // text rectangle
- Rectangle ir = new Rectangle(); // icon rectangle
- Rectangle vr = new Rectangle(); // view rectangle
- Rectangle br = new Rectangle(); // border rectangle
- Rectangle ar = new Rectangle(); // accelerator rectangle
- Rectangle cr = new Rectangle(); // checkIcon rectangle
-
- int vertAlign = m.getVerticalAlignment();
- int horAlign = m.getHorizontalAlignment();
- int vertTextPos = m.getVerticalTextPosition();
- int horTextPos = m.getHorizontalTextPosition();
-
- Font f = m.getFont();
- g.setFont(f);
- FontMetrics fm = g.getFontMetrics(f);
- SwingUtilities.calculateInnerArea(m, vr);
+
+ // Fetch fonts.
+ Font oldFont = g.getFont();
+ Font font = c.getFont();
+ g.setFont(font);
+ FontMetrics accelFm = m.getFontMetrics(acceleratorFont);
+
+ // Create accelerator string.
+ String accelText = getAcceleratorString(m);
+
+ // Layout menu item. The result gets stored in the rectangle fields
+ // of this class.
+ layoutMenuItem(m, accelText);
+
+ // Paint the background.
paintBackground(g, m, background);
- /*
- * MenuItems insets are equal to menuItems margin, space between text and
- * menuItems border. We need to paint insets region as well.
- */
- Insets insets = m.getInsets();
- br.x -= insets.left;
- br.y -= insets.top;
- br.width += insets.right + insets.left;
- br.height += insets.top + insets.bottom;
+ Color oldColor = g.getColor();
- // If this menu item is a JCheckBoxMenuItem then paint check icon
+ // Paint the check icon.
if (checkIcon != null)
{
- SwingUtilities.layoutCompoundLabel(m, fm, null, checkIcon, vertAlign,
- horAlign, vertTextPos, horTextPos,
- vr, cr, tr, defaultTextIconGap);
- checkIcon.paintIcon(m, g, cr.x, cr.y);
- // We need to calculate position of the menu text and position of
- // user menu icon if there exists one relative to the check icon.
- // So we need to adjust view rectangle s.t. its starting point is at
- // checkIcon.width + defaultTextIconGap.
- vr.x = cr.x + cr.width + defaultTextIconGap;
+ checkIcon.paintIcon(m, g, checkIconRect.x, checkIconRect.y);
+ }
+
+ // Paint the icon.
+ ButtonModel model = m.getModel();
+ if (m.getIcon() != null)
+ {
+ // Determine icon depending on the menu item
+ // state (normal/disabled/pressed).
+ Icon icon;
+ if (! m.isEnabled())
+ {
+ icon = m.getDisabledIcon();
+ }
+ else if (model.isPressed() && model.isArmed())
+ {
+ icon = m.getPressedIcon();
+ if (icon == null)
+ {
+ icon = m.getIcon();
+ }
+ }
+ else
+ {
+ icon = m.getIcon();
+ }
+
+ if (icon != null)
+ {
+ icon.paintIcon(m, g, iconRect.x, iconRect.y);
+ }
}
- // if this is a submenu, then paint arrow icon to indicate it.
- if (arrowIcon != null && (c instanceof JMenu))
+ // Paint the text.
+ String text = m.getText();
+ if (text != null)
{
- if (!((JMenu) c).isTopLevelMenu())
+ // Handle HTML.
+ View html = (View) m.getClientProperty(BasicHTML.propertyKey);
+ if (html != null)
+ {
+ html.paint(g, textRect);
+ }
+ else
{
- int width = arrowIcon.getIconWidth();
- int height = arrowIcon.getIconHeight();
- int offset = (vr.height - height) / 2;
- arrowIcon.paintIcon(m, g, vr.width - width, vr.y + offset);
+ paintText(g, m, textRect, text);
}
}
- // paint text and user menu icon if it exists
- Icon i = m.getIcon();
- SwingUtilities.layoutCompoundLabel(c, fm, m.getText(), i, vertAlign,
- horAlign, vertTextPos, horTextPos, vr,
- ir, tr, defaultTextIconGap);
- if (i != null)
- i.paintIcon(c, g, ir.x, ir.y);
- paintText(g, m, tr, m.getText());
+ // Paint accelerator text.
+ if (! accelText.equals(""))
+ {
+ // Align the accelerator text. In getPreferredMenuItemSize() we
+ // store a client property 'maxAccelWidth' in the parent which holds
+ // the maximum accelerator width for the children of this parent.
+ // We use this here to align the accelerators properly.
+ int accelOffset = 0;
+ Container parent = m.getParent();
+ if (parent != null && parent instanceof JComponent)
+ {
+ JComponent p = (JComponent) parent;
+ Integer maxAccelWidth =
+ (Integer) p.getClientProperty("maxAccelWidth");
+ int maxAccelValue = maxAccelWidth == null ? 0
+ : maxAccelWidth.intValue();
+ accelOffset = maxAccelValue - accelRect.width;
+ }
- // paint accelerator
- String acceleratorText = "";
+ g.setFont(acceleratorFont);
+ if (! m.isEnabled())
+ {
+ // Paint accelerator disabled.
+ g.setColor(disabledForeground);
+ }
+ else
+ {
+ if (m.isArmed() || (m instanceof JMenu && m.isSelected()))
+ g.setColor(acceleratorSelectionForeground);
+ else
+ g.setColor(acceleratorForeground);
+ }
+ g.drawString(accelText, accelRect.x - accelOffset,
+ accelRect.y + accelFm.getAscent());
+ }
- if (m.getAccelerator() != null)
+ // Paint arrow.
+ if (arrowIcon != null
+ && ! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
{
- acceleratorText = getAcceleratorText(m.getAccelerator());
- fm = g.getFontMetrics(acceleratorFont);
- ar.width = fm.stringWidth(acceleratorText);
- ar.x = br.width - ar.width;
- vr.x = br.width - ar.width - defaultTextIconGap;
-
- SwingUtilities.layoutCompoundLabel(m, fm, acceleratorText, null,
- vertAlign, horAlign, vertTextPos,
- horTextPos, vr, ir, ar,
- defaultTextIconGap);
-
- paintAccelerator(g, m, ar, acceleratorText);
+ arrowIcon.paintIcon(m, g, arrowIconRect.x, arrowIconRect.y);
}
+
+ g.setFont(oldFont);
+ g.setColor(oldColor);
+
}
/**
@@ -860,37 +964,6 @@ public class BasicMenuItemUI extends MenuItemUI
}
/**
- * Paints accelerator inside menu item
- *
- * @param g
- * The graphics context used to paint the border
- * @param menuItem
- * Menu item for which to draw accelerator
- * @param acceleratorRect
- * rectangle representing position of the accelerator relative to the
- * menu item
- * @param acceleratorText
- * accelerator's text
- */
- private void paintAccelerator(Graphics g, JMenuItem menuItem,
- Rectangle acceleratorRect,
- String acceleratorText)
- {
- g.setFont(acceleratorFont);
- FontMetrics fm = g.getFontMetrics(acceleratorFont);
-
- if (menuItem.isEnabled())
- g.setColor(acceleratorForeground);
- else
- // FIXME: should fix this to use 'disabledForeground', but its
- // default value in BasicLookAndFeel is null.
- g.setColor(Color.gray);
-
- BasicGraphicsUtils.drawString(g, acceleratorText, 0, acceleratorRect.x,
- acceleratorRect.y + fm.getAscent());
- }
-
- /**
* This class handles mouse events occuring inside the menu item. Most of the
* events are forwarded for processing to MenuSelectionManager of the current
* menu hierarchy.
@@ -1139,4 +1212,134 @@ public class BasicMenuItemUI extends MenuItemUI
menuItem.repaint();
}
}
+
+ /**
+ * A helper method to create the accelerator string from the menu item's
+ * accelerator property. The returned string is empty if there is
+ * no accelerator defined.
+ *
+ * @param m the menu item
+ *
+ * @return the accelerator string, not null
+ */
+ private String getAcceleratorString(JMenuItem m)
+ {
+ // Create accelerator string.
+ KeyStroke accel = m.getAccelerator();
+ String accelText = "";
+ if (accel != null)
+ {
+ int mods = accel.getModifiers();
+ if (mods > 0)
+ {
+ accelText = KeyEvent.getKeyModifiersText(mods);
+ accelText += acceleratorDelimiter;
+ }
+ int keycode = accel.getKeyCode();
+ if (keycode != 0)
+ accelText += KeyEvent.getKeyText(keycode);
+ else
+ accelText += accel.getKeyChar();
+ }
+ return accelText;
+ }
+
+ /**
+ * A helper method that lays out the menu item. The layout is stored
+ * in the fields of this class.
+ *
+ * @param m the menu item to layout
+ * @param accelText the accelerator text
+ */
+ private void layoutMenuItem(JMenuItem m, String accelText)
+ {
+ int width = m.getWidth();
+ int height = m.getHeight();
+
+ // Reset rectangles.
+ iconRect.setBounds(0, 0, 0, 0);
+ textRect.setBounds(0, 0, 0, 0);
+ accelRect.setBounds(0, 0, 0, 0);
+ checkIconRect.setBounds(0, 0, 0, 0);
+ arrowIconRect.setBounds(0, 0, 0, 0);
+ viewRect.setBounds(0, 0, width, height);
+
+ // Substract insets to the view rect.
+ Insets insets = m.getInsets();
+ viewRect.x += insets.left;
+ viewRect.y += insets.top;
+ viewRect.width -= (insets.left + insets.right);
+ viewRect.height -= (insets.top + insets.bottom);
+
+ // Fetch the fonts.
+ Font font = m.getFont();
+ FontMetrics fm = m.getFontMetrics(font);
+ FontMetrics accelFm = m.getFontMetrics(acceleratorFont);
+
+ String text = m.getText();
+ SwingUtilities.layoutCompoundLabel(m, fm, text, m.getIcon(),
+ m.getVerticalAlignment(),
+ m.getHorizontalAlignment(),
+ m.getVerticalTextPosition(),
+ m.getHorizontalTextPosition(),
+ viewRect, iconRect, textRect,
+ defaultTextIconGap);
+
+ // Initialize accelerator width and height.
+ if (! accelText.equals(""))
+ {
+ accelRect.width = accelFm.stringWidth(accelText);
+ accelRect.height = accelFm.getHeight();
+ }
+
+ // Initialize check and arrow icon width and height.
+ if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
+ {
+ if (checkIcon != null)
+ {
+ checkIconRect.width = checkIcon.getIconWidth();
+ checkIconRect.height = checkIcon.getIconHeight();
+ }
+ if (arrowIcon != null)
+ {
+ arrowIconRect.width = arrowIcon.getIconWidth();
+ arrowIconRect.height = arrowIcon.getIconHeight();
+ }
+ }
+
+ // The union of the icon and text of the menu item is the 'label area'.
+ cachedRect.setBounds(textRect);
+ Rectangle labelRect = SwingUtilities.computeUnion(iconRect.x,
+ iconRect.y,
+ iconRect.width,
+ iconRect.height,
+ cachedRect);
+ textRect.x += defaultTextIconGap;
+ iconRect.x += defaultTextIconGap;
+
+ // Layout accelerator rect.
+ accelRect.x = viewRect.x + viewRect.width - arrowIconRect.width
+ - defaultTextIconGap - accelRect.width;
+ // Layout check and arrow icons only when not in toplevel menu.
+ if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
+ {
+ checkIconRect.x = viewRect.x + defaultTextIconGap;
+ textRect.x += defaultTextIconGap + checkIconRect.width;
+ iconRect.x += defaultTextIconGap + checkIconRect.width;
+ arrowIconRect.x = viewRect.x + viewRect.width - defaultTextIconGap
+ - arrowIconRect.width;
+ }
+
+ // Align the accelerator text and all the icons vertically centered to
+ // the menu text.
+ accelRect.y = labelRect.y + (labelRect.height / 2)
+ - (accelRect.height / 2);
+ if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu()))
+ {
+ arrowIconRect.y = labelRect.y + (labelRect.height / 2)
+ - (arrowIconRect.height / 2);
+ checkIconRect.y = labelRect.y + (labelRect.height / 2)
+ - (checkIconRect.height / 2);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java
index e638b68..f8936be 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java
@@ -38,10 +38,11 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JComponent;
@@ -219,6 +220,7 @@ public class BasicMenuUI extends BasicMenuItemUI
*
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
@@ -263,6 +265,7 @@ public class BasicMenuUI extends BasicMenuItemUI
* Basic look and feel's defaults.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
@@ -391,7 +394,7 @@ public class BasicMenuUI extends BasicMenuItemUI
/**
* This class handles MenuEvents fired by the JMenu
*/
- protected class MenuHandler implements MenuListener
+ private class MenuHandler implements MenuListener
{
/**
* This method is called when menu is cancelled. The menu is cancelled
@@ -440,24 +443,7 @@ public class BasicMenuUI extends BasicMenuItemUI
}
/**
- * This class handles PropertyChangeEvents fired from the JMenu
- */
- protected class PropertyChangeHandler implements PropertyChangeListener
- {
- /**
- * This method is called whenever one of the properties of the menu item
- * changes.
- *
- * @param e The PropertyChangeEvent.
- */
- public void propertyChange(PropertyChangeEvent e)
- {
- // TODO: Implement this properly.
- }
- }
-
- /**
- * @deprecated
+ * Obsolete as of JDK1.4.
*/
public class ChangeHandler implements ChangeListener
{
@@ -501,7 +487,7 @@ public class BasicMenuUI extends BasicMenuItemUI
/**
* This class handles mouse dragged events occuring in the menu.
*/
- protected class MenuDragMouseHandler implements MenuDragMouseListener
+ private class MenuDragMouseHandler implements MenuDragMouseListener
{
/**
* This method is invoked when mouse is dragged over the menu item.
@@ -553,7 +539,7 @@ public class BasicMenuUI extends BasicMenuItemUI
* This class handles key events occuring when menu item is visible on the
* screen.
*/
- protected class MenuKeyHandler implements MenuKeyListener
+ private class MenuKeyHandler implements MenuKeyListener
{
/**
* This method is invoked when key has been pressed
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java
index 005a3b3..88bca3b 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
@@ -1204,6 +1206,7 @@ public class BasicOptionPaneUI extends OptionPaneUI
* This method installs keyboard actions for the JOptionpane.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -1336,6 +1339,7 @@ public class BasicOptionPaneUI extends OptionPaneUI
* This method uninstalls keyboard actions for the JOptionPane.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java
index 783cec4..4f535f6 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java
@@ -61,11 +61,10 @@ public class BasicPanelUI extends PanelUI
}
}
- public void installDefaults(JPanel p)
+ protected void installDefaults(JPanel p)
{
LookAndFeel.installColorsAndFont(p, "Panel.background", "Panel.foreground",
"Panel.font");
- p.setOpaque(true);
}
/**
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java
index 6ecd06b..a26a5c7 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
@@ -137,6 +139,7 @@ public class BasicPopupMenuUI extends PopupMenuUI
* This method installs the keyboard actions for this {@link JPopupMenu}.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
@@ -179,6 +182,7 @@ public class BasicPopupMenuUI extends PopupMenuUI
* Uninstalls any keyboard actions.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Need to implement
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java
index 66e5380..a66fa28 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java
@@ -45,6 +45,7 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
+import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
@@ -142,14 +143,15 @@ public class BasicRadioButtonUI extends BasicToggleButtonUI
g.setFont(f);
+ ButtonModel m = b.getModel();
Icon currentIcon = null;
- if (b.isSelected() && b.isEnabled())
+ if (m.isSelected() && m.isEnabled())
currentIcon = b.getSelectedIcon();
- else if (!b.isSelected() && b.isEnabled())
+ else if (! m.isSelected() && m.isEnabled())
currentIcon = b.getIcon();
- else if (b.isSelected() && !b.isEnabled())
+ else if (m.isSelected() && ! m.isEnabled())
currentIcon = b.getDisabledSelectedIcon();
- else // (!b.isSelected() && !b.isEnabled())
+ else // (!m.isSelected() && ! m.isEnabled())
currentIcon = b.getDisabledIcon();
SwingUtilities.calculateInnerArea(b, vr);
@@ -166,7 +168,7 @@ public class BasicRadioButtonUI extends BasicToggleButtonUI
if (text != null)
paintText(g, b, tr, text);
// TODO: Figure out what is the size parameter?
- if (b.hasFocus() && b.isFocusPainted() && b.isEnabled())
+ if (b.hasFocus() && b.isFocusPainted() && m.isEnabled())
paintFocus(g, tr, null);
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java
index 28e3b67..933db4c 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java
@@ -38,17 +38,98 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import javax.swing.AbstractAction;
+import javax.swing.ButtonModel;
+import javax.swing.InputMap;
+import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JRootPane;
+import javax.swing.LookAndFeel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.plaf.ActionMapUIResource;
+import javax.swing.plaf.ComponentInputMapUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.RootPaneUI;
public class BasicRootPaneUI extends RootPaneUI
implements PropertyChangeListener
{
+
+ /**
+ * Performed when the user activates the default button inside the JRootPane,
+ * usually by pressing 'ENTER'.
+ */
+ private class DefaultPressAction
+ extends AbstractAction
+ {
+ /**
+ * The JRootPane for which this action should be installed.
+ */
+ private JRootPane rootPane;
+
+ /**
+ * Creates a new DefaultPressAction for the specified JRootPane.
+ */
+ DefaultPressAction(JRootPane rp)
+ {
+ rootPane = rp;
+ }
+
+ /**
+ * Performes the action.
+ */
+ public void actionPerformed(ActionEvent ev)
+ {
+ JButton b = rootPane.getDefaultButton();
+ if (b != null)
+ {
+ ButtonModel m = b.getModel();
+ m.setArmed(true);
+ m.setPressed(true);
+ }
+ }
+ }
+
+ /**
+ * Performed when the user activates the default button inside the JRootPane,
+ * usually by releasing 'ENTER'.
+ */
+ private class DefaultReleaseAction
+ extends AbstractAction
+ {
+ /**
+ * The JRootPane for which this action should be installed.
+ */
+ private JRootPane rootPane;
+
+ /**
+ * Creates a new DefaultReleaseAction for the specified JRootPane.
+ */
+ DefaultReleaseAction(JRootPane rp)
+ {
+ rootPane = rp;
+ }
+
+ /**
+ * Performes the action.
+ */
+ public void actionPerformed(ActionEvent ev)
+ {
+ JButton b = rootPane.getDefaultButton();
+ if (b != null)
+ {
+ ButtonModel m = b.getModel();
+ m.setPressed(false);
+ m.setArmed(false);
+ }
+ }
+ }
+
public static ComponentUI createUI(JComponent x)
{
return new BasicRootPaneUI();
@@ -107,14 +188,43 @@ public class BasicRootPaneUI extends RootPaneUI
*/
protected void installKeyboardActions(JRootPane rp)
{
- // We currently do not install any keyboard actions here.
- // This method is here anyway for compatibility and to provide
- // the necessary hooks to subclasses.
+ // Install the keyboard actions.
+ ActionMapUIResource am = new ActionMapUIResource();
+ am.put("press", new DefaultPressAction(rp));
+ am.put("release", new DefaultReleaseAction(rp));
+ SwingUtilities.replaceUIActionMap(rp, am);
+
+ // Install the input map from the UIManager. It seems like the actual
+ // bindings are installed in the JRootPane only when the defaultButton
+ // property receives a value. So we also only install an empty
+ // input map here, and fill it in propertyChange.
+ ComponentInputMapUIResource im = new ComponentInputMapUIResource(rp);
+ SwingUtilities.replaceUIInputMap(rp, JComponent.WHEN_IN_FOCUSED_WINDOW,
+ im);
}
public void propertyChange(PropertyChangeEvent event)
{
- // TODO: Implement this properly.
+ JRootPane source = (JRootPane) event.getSource();
+ String propertyName = event.getPropertyName();
+ if (propertyName.equals("defaultButton"))
+ {
+ Object newValue = event.getNewValue();
+ InputMap im =
+ SwingUtilities.getUIInputMap(source,
+ JComponent.WHEN_IN_FOCUSED_WINDOW);
+ if (newValue != null)
+ {
+ Object[] keybindings =
+ (Object[]) UIManager.get
+ ("RootPane.defaultButtonWindowKeyBindings");
+ LookAndFeel.loadKeyBindings(im, keybindings);
+ }
+ else
+ {
+ im.clear();
+ }
+ }
}
/**
@@ -176,6 +286,8 @@ public class BasicRootPaneUI extends RootPaneUI
*/
protected void uninstallKeyboardActions(JRootPane rp)
{
- // We do nothing here.
+ SwingUtilities.replaceUIActionMap(rp, null);
+ SwingUtilities.replaceUIInputMap(rp, JComponent.WHEN_IN_FOCUSED_WINDOW,
+ null);
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java
index c8713c9..f244854 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -383,7 +385,7 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
*
* @return Whether the thumb should keep scrolling.
*/
- public boolean shouldScroll(int direction)
+ boolean shouldScroll(int direction)
{
int value;
if (scrollbar.getOrientation() == HORIZONTAL)
@@ -763,6 +765,7 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
* This method installs the keyboard actions for the scrollbar.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -1141,6 +1144,7 @@ public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager,
* during install.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java
index 71671b7..e6a4eaf 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java
@@ -38,9 +38,15 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
+import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.beans.PropertyChangeEvent;
@@ -53,6 +59,8 @@ import javax.swing.JViewport;
import javax.swing.LookAndFeel;
import javax.swing.ScrollPaneConstants;
import javax.swing.ScrollPaneLayout;
+import javax.swing.Scrollable;
+import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ComponentUI;
@@ -222,18 +230,149 @@ public class BasicScrollPaneUI extends ScrollPaneUI
*/
protected class MouseWheelHandler implements MouseWheelListener
{
+ /**
+ * Use to compute the visible rectangle.
+ */
+ final Rectangle rect = new Rectangle();
/**
- * Receives notification whenever the mouse wheel is moved.
- *
- * @param event the mouse wheel event
+ * Scroll with the mouse whell.
+ *
+ * @author Audrius Meskauskas (audriusa@Bioinformatics.org)
*/
- public void mouseWheelMoved(MouseWheelEvent event)
+ public void mouseWheelMoved(MouseWheelEvent e)
{
- // TODO: Implement this properly.
+ if (scrollpane.getViewport().getComponentCount() == 0)
+ return;
+
+ Component target = scrollpane.getViewport().getComponent(0);
+ JScrollBar bar = scrollpane.getVerticalScrollBar();
+ Scrollable scrollable = (target instanceof Scrollable) ? (Scrollable) target
+ : null;
+
+ boolean tracksHeight = scrollable != null
+ && scrollable.getScrollableTracksViewportHeight();
+ int wheel = e.getWheelRotation() * ROWS_PER_WHEEL_CLICK;
+ int delta;
+
+ // If possible, scroll vertically.
+ if (bar != null && ! tracksHeight)
+ {
+ if (scrollable != null)
+ {
+ bounds(target);
+ delta = scrollable.getScrollableUnitIncrement(
+ rect, SwingConstants.VERTICAL, wheel);
+ }
+ else
+ {
+ // Scroll non scrollables.
+ delta = wheel * SCROLL_NON_SCROLLABLES;
+ }
+ scroll(bar, delta);
+ }
+ // If not, try to scroll horizontally
+ else
+ {
+ bar = scrollpane.getHorizontalScrollBar();
+ boolean tracksWidth = scrollable != null
+ && scrollable.getScrollableTracksViewportWidth();
+
+ if (bar != null && ! tracksWidth)
+ {
+ if (scrollable != null)
+ {
+ bounds(target);
+ delta = scrollable.getScrollableUnitIncrement(
+ rect, SwingConstants.HORIZONTAL, wheel);
+ }
+ else
+ {
+ // Scroll non scrollables.
+ delta = wheel * SCROLL_NON_SCROLLABLES;
+ }
+ scroll(bar, delta);
+ }
+ }
}
+
+ /**
+ * Place the component bounds into rect. The x and y values
+ * need to be reversed.
+ *
+ * @param target the target being scrolled
+ */
+ final void bounds(Component target)
+ {
+ // Viewport bounds, translated by the scroll bar positions.
+ target.getParent().getBounds(rect);
+ rect.x = getValue(scrollpane.getHorizontalScrollBar());
+ rect.y = getValue(scrollpane.getVerticalScrollBar());
+ }
+
+ /**
+ * Get the scroll bar value or null if there is no such scroll bar.
+ */
+ final int getValue(JScrollBar bar)
+ {
+ return bar != null ? bar.getValue() : 0;
+ }
+
+ /**
+ * Scroll the given distance.
+ *
+ * @param bar the scrollbar to scroll
+ * @param delta the distance
+ */
+ final void scroll(JScrollBar bar, int delta)
+ {
+ int y = bar.getValue() + delta;
+
+ if (y < bar.getMinimum())
+ y = bar.getMinimum();
+ if (y > bar.getMaximum())
+ y = bar.getMaximum();
+ bar.setValue(y);
+ }
+ }
+
+ /**
+ * Adds/removes the mouse wheel listener when the component is added/removed
+ * to/from the scroll pane view port.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+ class ViewportContainerListener implements ContainerListener
+ {
+ /**
+ * Add the mouse wheel listener, allowing to scroll with the mouse.
+ */
+ public void componentAdded(ContainerEvent e)
+ {
+ e.getChild().addMouseWheelListener(mouseWheelListener);
+ }
+
+ /**
+ * Remove the mouse wheel listener.
+ */
+ public void componentRemoved(ContainerEvent e)
+ {
+ e.getChild().removeMouseWheelListener(mouseWheelListener);
+ }
}
+
+ /**
+ * The number of pixels by that we should scroll the content that does
+ * not implement Scrollable.
+ */
+ static int SCROLL_NON_SCROLLABLES = 10;
+
+ /**
+ * The number of rows to scroll per mouse wheel click. From impression,
+ * Sun seems using the value 3.
+ */
+ static int ROWS_PER_WHEEL_CLICK = 3;
/** The Scrollpane for which the UI is provided by this class. */
protected JScrollPane scrollpane;
@@ -262,6 +401,12 @@ public class BasicScrollPaneUI extends ScrollPaneUI
* The mousewheel listener for the scrollpane.
*/
MouseWheelListener mouseWheelListener;
+
+ /**
+ * The listener to add and remove the mouse wheel listener to/from
+ * the component container.
+ */
+ ContainerListener containerListener;
public static ComponentUI createUI(final JComponent c)
{
@@ -316,11 +461,21 @@ public class BasicScrollPaneUI extends ScrollPaneUI
if (viewportChangeListener == null)
viewportChangeListener = createViewportChangeListener();
- sp.getViewport().addChangeListener(viewportChangeListener);
-
+
if (mouseWheelListener == null)
mouseWheelListener = createMouseWheelListener();
- sp.addMouseWheelListener(mouseWheelListener);
+
+ if (containerListener == null)
+ containerListener = new ViewportContainerListener();
+
+ JViewport v = sp.getViewport();
+ v.addChangeListener(viewportChangeListener);
+ v.addContainerListener(containerListener);
+
+ // Add mouse wheel listeners to the componets that are probably already
+ // in the view port.
+ for (int i = 0; i < v.getComponentCount(); i++)
+ v.getComponent(i).addMouseWheelListener(mouseWheelListener);
}
/**
@@ -331,6 +486,7 @@ public class BasicScrollPaneUI extends ScrollPaneUI
* @param sp the scrollpane to install keyboard actions on
*/
protected void installKeyboardActions(JScrollPane sp)
+ throws NotImplementedException
{
// TODO: Is this only a hook method or should we actually do something
// here? If the latter, than figure out what and implement this.
@@ -408,8 +564,14 @@ public class BasicScrollPaneUI extends ScrollPaneUI
.removeChangeListener(hsbChangeListener);
sp.getVerticalScrollBar().getModel()
.removeChangeListener(vsbChangeListener);
- sp.getViewport().removeChangeListener(viewportChangeListener);
- sp.removeMouseWheelListener(mouseWheelListener);
+
+ JViewport v = sp.getViewport();
+ v.removeChangeListener(viewportChangeListener);
+ v.removeContainerListener(containerListener);
+
+ for (int i = 0; i < v.getComponentCount(); i++)
+ v.getComponent(i).removeMouseWheelListener(mouseWheelListener);
+
}
/**
@@ -420,6 +582,7 @@ public class BasicScrollPaneUI extends ScrollPaneUI
* @param sp the scrollpane to uninstall keyboard actions from
*/
protected void uninstallKeyboardActions(JScrollPane sp)
+ throws NotImplementedException
{
// TODO: Is this only a hook method or should we actually do something
// here? If the latter, than figure out what and implement this.
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java
index 26f5805..137ab55 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java
@@ -1,5 +1,5 @@
/* BasicSliderUI.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
@@ -61,7 +63,9 @@ import java.util.Dictionary;
import java.util.Enumeration;
import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
import javax.swing.BoundedRangeModel;
+import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JSlider;
@@ -72,6 +76,7 @@ import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MouseInputAdapter;
+import javax.swing.plaf.ActionMapUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.SliderUI;
@@ -204,6 +209,7 @@ public class BasicSliderUI extends SliderUI
* @param e A {@link FocusEvent}.
*/
public void focusGained(FocusEvent e)
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -215,6 +221,7 @@ public class BasicSliderUI extends SliderUI
* @param e A {@link FocusEvent}.
*/
public void focusLost(FocusEvent e)
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -236,14 +243,16 @@ public class BasicSliderUI extends SliderUI
{
// Check for orientation changes.
if (e.getPropertyName().equals("orientation"))
- recalculateIfOrientationChanged();
+ recalculateIfOrientationChanged();
else if (e.getPropertyName().equals("model"))
{
- BoundedRangeModel oldModel = (BoundedRangeModel) e.getOldValue();
- oldModel.removeChangeListener(changeListener);
- slider.getModel().addChangeListener(changeListener);
- calculateThumbLocation();
+ BoundedRangeModel oldModel = (BoundedRangeModel) e.getOldValue();
+ oldModel.removeChangeListener(changeListener);
+ slider.getModel().addChangeListener(changeListener);
+ calculateThumbLocation();
}
+ else if (e.getPropertyName().equals("paintTicks"))
+ calculateGeometry();
// elif the componentOrientation changes (this is a bound property,
// just undocumented) we change leftToRightCache. In Sun's
@@ -304,14 +313,14 @@ public class BasicSliderUI extends SliderUI
{
if (! trackListener.shouldScroll(direction))
{
- scrollTimer.stop();
- return;
+ scrollTimer.stop();
+ return;
}
if (block)
- scrollByBlock(direction);
+ scrollByBlock(direction);
else
- scrollByUnit(direction);
+ scrollByUnit(direction);
}
/**
@@ -364,17 +373,20 @@ public class BasicSliderUI extends SliderUI
*/
public void mouseDragged(MouseEvent e)
{
- currentMouseX = e.getX();
- currentMouseY = e.getY();
- if (slider.getValueIsAdjusting())
+ if (slider.isEnabled())
{
- int value;
- if (slider.getOrientation() == JSlider.HORIZONTAL)
- value = valueForXPosition(currentMouseX) - offset;
- else
- value = valueForYPosition(currentMouseY) - offset;
-
- slider.setValue(value);
+ currentMouseX = e.getX();
+ currentMouseY = e.getY();
+ if (slider.getValueIsAdjusting())
+ {
+ int value;
+ if (slider.getOrientation() == JSlider.HORIZONTAL)
+ value = valueForXPosition(currentMouseX) - offset;
+ else
+ value = valueForYPosition(currentMouseY) - offset;
+
+ slider.setValue(value);
+ }
}
}
@@ -399,32 +411,36 @@ public class BasicSliderUI extends SliderUI
*/
public void mousePressed(MouseEvent e)
{
- currentMouseX = e.getX();
- currentMouseY = e.getY();
-
- int value;
- if (slider.getOrientation() == JSlider.HORIZONTAL)
- value = valueForXPosition(currentMouseX);
- else
- value = valueForYPosition(currentMouseY);
-
- if (slider.getSnapToTicks())
- value = findClosestTick(value);
-
- // If the thumb is hit, then we don't need to set the timers to move it.
- if (! thumbRect.contains(e.getPoint()))
- {
- // The mouse has hit some other part of the slider.
- // The value moves no matter where in the slider you hit.
- if (value > slider.getValue())
- scrollDueToClickInTrack(POSITIVE_SCROLL);
- else
- scrollDueToClickInTrack(NEGATIVE_SCROLL);
- }
- else
+ if (slider.isEnabled())
{
- slider.setValueIsAdjusting(true);
- offset = value - slider.getValue();
+ currentMouseX = e.getX();
+ currentMouseY = e.getY();
+
+ int value;
+ if (slider.getOrientation() == JSlider.HORIZONTAL)
+ value = valueForXPosition(currentMouseX);
+ else
+ value = valueForYPosition(currentMouseY);
+
+ if (slider.getSnapToTicks())
+ value = findClosestTick(value);
+
+ // If the thumb is hit, then we don't need to set the timers to
+ // move it.
+ if (! thumbRect.contains(e.getPoint()))
+ {
+ // The mouse has hit some other part of the slider.
+ // The value moves no matter where in the slider you hit.
+ if (value > slider.getValue())
+ scrollDueToClickInTrack(POSITIVE_SCROLL);
+ else
+ scrollDueToClickInTrack(NEGATIVE_SCROLL);
+ }
+ else
+ {
+ slider.setValueIsAdjusting(true);
+ offset = value - slider.getValue();
+ }
}
}
@@ -436,17 +452,20 @@ public class BasicSliderUI extends SliderUI
*/
public void mouseReleased(MouseEvent e)
{
- currentMouseX = e.getX();
- currentMouseY = e.getY();
-
- if (slider.getValueIsAdjusting())
+ if (slider.isEnabled())
{
- slider.setValueIsAdjusting(false);
- if (slider.getSnapToTicks())
- slider.setValue(findClosestTick(slider.getValue()));
+ currentMouseX = e.getX();
+ currentMouseY = e.getY();
+
+ if (slider.getValueIsAdjusting())
+ {
+ slider.setValueIsAdjusting(false);
+ if (slider.getSnapToTicks())
+ slider.setValue(findClosestTick(slider.getValue()));
+ }
+ if (scrollTimer != null)
+ scrollTimer.stop();
}
- if (scrollTimer != null)
- scrollTimer.stop();
}
/**
@@ -460,14 +479,14 @@ public class BasicSliderUI extends SliderUI
{
int value;
if (slider.getOrientation() == JSlider.HORIZONTAL)
- value = valueForXPosition(currentMouseX);
+ value = valueForXPosition(currentMouseX);
else
- value = valueForYPosition(currentMouseY);
+ value = valueForYPosition(currentMouseY);
if (direction == POSITIVE_SCROLL)
- return (value > slider.getValue());
+ return (value > slider.getValue());
else
- return (value < slider.getValue());
+ return (value < slider.getValue());
}
}
@@ -643,35 +662,35 @@ public class BasicSliderUI extends SliderUI
super.installUI(c);
if (c instanceof JSlider)
{
- slider = (JSlider) c;
+ slider = (JSlider) c;
- focusRect = new Rectangle();
- contentRect = new Rectangle();
- thumbRect = new Rectangle();
- trackRect = new Rectangle();
- tickRect = new Rectangle();
- labelRect = new Rectangle();
+ focusRect = new Rectangle();
+ contentRect = new Rectangle();
+ thumbRect = new Rectangle();
+ trackRect = new Rectangle();
+ tickRect = new Rectangle();
+ labelRect = new Rectangle();
- insetCache = slider.getInsets();
- leftToRightCache = ! slider.getInverted();
+ insetCache = slider.getInsets();
+ leftToRightCache = ! slider.getInverted();
- scrollTimer = new Timer(200, null);
- scrollTimer.setRepeats(true);
+ scrollTimer = new Timer(200, null);
+ scrollTimer.setRepeats(true);
- installDefaults(slider);
- installListeners(slider);
- installKeyboardActions(slider);
+ installDefaults(slider);
+ installListeners(slider);
+ installKeyboardActions(slider);
- calculateFocusRect();
+ calculateFocusRect();
- calculateContentRect();
- calculateThumbSize();
- calculateTrackBuffer();
- calculateTrackRect();
- calculateThumbLocation();
+ calculateContentRect();
+ calculateThumbSize();
+ calculateTrackBuffer();
+ calculateTrackRect();
+ calculateThumbLocation();
- calculateTickRect();
- calculateLabelRect();
+ calculateTickRect();
+ calculateLabelRect();
}
}
@@ -856,7 +875,10 @@ public class BasicSliderUI extends SliderUI
*/
protected void installKeyboardActions(JSlider slider)
{
- // FIXME: implement.
+ InputMap keyMap = getInputMap(JComponent.WHEN_FOCUSED);
+ SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, keyMap);
+ ActionMap map = getActionMap();
+ SwingUtilities.replaceUIActionMap(slider, map);
}
/**
@@ -868,7 +890,8 @@ public class BasicSliderUI extends SliderUI
*/
protected void uninstallKeyboardActions(JSlider slider)
{
- // FIXME: implement.
+ SwingUtilities.replaceUIActionMap(slider, null);
+ SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, null);
}
/* XXX: This is all after experimentation with SUN's implementation.
@@ -899,8 +922,7 @@ public class BasicSliderUI extends SliderUI
// The width should cover all the labels (which are usually the
// deciding factor of the width)
int width = getWidthOfWidestLabel() * (slider.getLabelTable() == null ? 0
- : slider.getLabelTable()
- .size());
+ : slider.getLabelTable().size());
// If there are not enough labels.
// This number is pretty much arbitrary, but it looks nice.
@@ -1120,8 +1142,8 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method calculates the size but not the position of the thumbRect. It
- * must take into account the orientation of the slider.
+ * Sets the width and height of the <code>thumbRect</code> field, using the
+ * dimensions returned by {@link #getThumbSize()}.
*/
protected void calculateThumbSize()
{
@@ -1135,8 +1157,9 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method calculates the size and position of the contentRect. This
- * method does not need to be called if the orientation changes.
+ * Updates the <code>contentRect</code> field to an area inside the
+ * <code>focusRect</code>. This method does not need to be called if the
+ * orientation changes.
*/
protected void calculateContentRect()
{
@@ -1163,36 +1186,50 @@ public class BasicSliderUI extends SliderUI
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- thumbRect.x = xPositionForValue(value) - thumbRect.width / 2;
- thumbRect.y = trackRect.y;
+ thumbRect.x = xPositionForValue(value) - thumbRect.width / 2;
+ thumbRect.y = trackRect.y;
}
else
{
- thumbRect.x = trackRect.x;
- thumbRect.y = yPositionForValue(value) - thumbRect.height / 2;
+ thumbRect.x = trackRect.x;
+ thumbRect.y = yPositionForValue(value) - thumbRect.height / 2;
}
}
/**
- * Calculates the gap size between the left edge of the contentRect and the
- * left edge of the trackRect.
+ * Calculates the gap size between the edge of the <code>contentRect</code>
+ * and the edge of the <code>trackRect</code>, storing the result in the
+ * <code>trackBuffer</code> field. Sufficient space needs to be reserved
+ * for the slider thumb and/or the labels at each end of the slider track.
*/
protected void calculateTrackBuffer()
{
if (slider.getOrientation() == JSlider.HORIZONTAL)
- trackBuffer = thumbRect.width / 2;
+ {
+ int w = Math.max(getWidthOfLowValueLabel(), getWidthOfHighValueLabel());
+ trackBuffer = Math.max(thumbRect.width / 2, w / 2);
+
+ }
else
- trackBuffer = thumbRect.height / 2;
+ {
+ int h = Math.max(getHeightOfLowValueLabel(),
+ getHeightOfHighValueLabel());
+ trackBuffer = Math.max(thumbRect.height / 2, h / 2);
+ }
}
/**
- * This method returns the size of the thumbRect.
+ * Returns the size of the slider's thumb. The size is hard coded to
+ * <code>11 x 20</code> for horizontal sliders, and <code>20 x 11</code> for
+ * vertical sliders. Note that a new instance of {@link Dimension} is
+ * returned for every call to this method (this seems wasteful, but
+ * {@link Dimension} instances are not immutable, so this is probably
+ * unavoidable).
*
- * @return The dimensions of the thumb.
+ * @return The size of the slider's thumb.
*/
protected Dimension getThumbSize()
{
- // TODO: shouldn't create new objects every time
if (slider.getOrientation() == JSlider.HORIZONTAL)
return new Dimension(11, 20);
else
@@ -1207,14 +1244,16 @@ public class BasicSliderUI extends SliderUI
{
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- trackRect.x = contentRect.x + trackBuffer;
+ trackRect.x = contentRect.x + trackBuffer;
int h = getThumbSize().height;
if (slider.getPaintTicks() && (slider.getMajorTickSpacing() > 0
|| slider.getMinorTickSpacing() > 0))
h += getTickLength();
- trackRect.y = contentRect.y + (contentRect.height - h) / 2 - 1;
- trackRect.width = contentRect.width - 2 * trackBuffer;
- trackRect.height = thumbRect.height;
+ if (slider.getPaintLabels())
+ h += getHeightOfTallestLabel();
+ trackRect.y = contentRect.y + (contentRect.height - h) / 2 - 1;
+ trackRect.width = contentRect.width - 2 * trackBuffer;
+ trackRect.height = thumbRect.height;
}
else
{
@@ -1222,10 +1261,12 @@ public class BasicSliderUI extends SliderUI
if (slider.getPaintTicks() && (slider.getMajorTickSpacing() > 0
|| slider.getMinorTickSpacing() > 0))
w += getTickLength();
- trackRect.x = contentRect.x + (contentRect.width - w) / 2 - 1;
- trackRect.y = contentRect.y + trackBuffer;
- trackRect.width = thumbRect.width;
- trackRect.height = contentRect.height - 2 * trackBuffer;
+ if (slider.getPaintLabels())
+ w += getWidthOfWidestLabel();
+ trackRect.x = contentRect.x + (contentRect.width - w) / 2 - 1;
+ trackRect.y = contentRect.y + trackBuffer;
+ trackRect.width = thumbRect.width;
+ trackRect.height = contentRect.height - 2 * trackBuffer;
}
}
@@ -1252,23 +1293,23 @@ public class BasicSliderUI extends SliderUI
{
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- tickRect.x = trackRect.x;
- tickRect.y = trackRect.y + trackRect.height;
- tickRect.width = trackRect.width;
- tickRect.height = getTickLength();
+ tickRect.x = trackRect.x;
+ tickRect.y = trackRect.y + trackRect.height;
+ tickRect.width = trackRect.width;
+ tickRect.height = (slider.getPaintTicks() ? getTickLength() : 0);
- if (tickRect.y + tickRect.height > contentRect.y + contentRect.height)
- tickRect.height = contentRect.y + contentRect.height - tickRect.y;
+ if (tickRect.y + tickRect.height > contentRect.y + contentRect.height)
+ tickRect.height = contentRect.y + contentRect.height - tickRect.y;
}
else
{
- tickRect.x = trackRect.x + trackRect.width;
- tickRect.y = trackRect.y;
- tickRect.width = getTickLength();
- tickRect.height = trackRect.height;
+ tickRect.x = trackRect.x + trackRect.width;
+ tickRect.y = trackRect.y;
+ tickRect.width = (slider.getPaintTicks() ? getTickLength() : 0);
+ tickRect.height = trackRect.height;
- if (tickRect.x + tickRect.width > contentRect.x + contentRect.width)
- tickRect.width = contentRect.x + contentRect.width - tickRect.x;
+ if (tickRect.x + tickRect.width > contentRect.x + contentRect.width)
+ tickRect.width = contentRect.x + contentRect.width - tickRect.x;
}
}
@@ -1280,17 +1321,17 @@ public class BasicSliderUI extends SliderUI
{
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- labelRect.x = contentRect.x;
- labelRect.y = tickRect.y + tickRect.height;
- labelRect.width = contentRect.width;
- labelRect.height = contentRect.height - labelRect.y;
+ labelRect.x = contentRect.x;
+ labelRect.y = tickRect.y + tickRect.height;
+ labelRect.width = contentRect.width;
+ labelRect.height = getHeightOfTallestLabel();
}
else
{
- labelRect.x = tickRect.x + tickRect.width;
- labelRect.y = contentRect.y;
- labelRect.width = contentRect.width - labelRect.x;
- labelRect.height = contentRect.height;
+ labelRect.x = tickRect.x + tickRect.width;
+ labelRect.y = contentRect.y;
+ labelRect.width = getWidthOfWidestLabel();
+ labelRect.height = contentRect.height;
}
}
@@ -1312,13 +1353,13 @@ public class BasicSliderUI extends SliderUI
for (Enumeration list = slider.getLabelTable().elements();
list.hasMoreElements();)
{
- Object comp = list.nextElement();
- if (! (comp instanceof Component))
- continue;
- label = (Component) comp;
- pref = label.getPreferredSize();
- if (pref != null && pref.width > widest)
- widest = pref.width;
+ Object comp = list.nextElement();
+ if (! (comp instanceof Component))
+ continue;
+ label = (Component) comp;
+ pref = label.getPreferredSize();
+ if (pref != null && pref.width > widest)
+ widest = pref.width;
}
return widest;
}
@@ -1340,50 +1381,54 @@ public class BasicSliderUI extends SliderUI
for (Enumeration list = slider.getLabelTable().elements();
list.hasMoreElements();)
{
- Object comp = list.nextElement();
- if (! (comp instanceof Component))
- continue;
- label = (Component) comp;
- pref = label.getPreferredSize();
- if (pref != null && pref.height > tallest)
- tallest = pref.height;
+ Object comp = list.nextElement();
+ if (! (comp instanceof Component))
+ continue;
+ label = (Component) comp;
+ pref = label.getPreferredSize();
+ if (pref != null && pref.height > tallest)
+ tallest = pref.height;
}
return tallest;
}
/**
- * This method returns the width of the label whose key has the highest
- * value.
+ * Returns the width of the label whose key has the highest value, or 0 if
+ * there are no labels.
*
- * @return The width of the high value label or 0 if no label table exists.
+ * @return The width of the label whose key has the highest value.
+ *
+ * @see #getHighestValueLabel()
*/
protected int getWidthOfHighValueLabel()
{
Component highValueLabel = getHighestValueLabel();
if (highValueLabel != null)
- return highValueLabel.getWidth();
+ return highValueLabel.getPreferredSize().width;
else
return 0;
}
/**
- * This method returns the width of the label whose key has the lowest
- * value.
+ * Returns the width of the label whose key has the lowest value, or 0 if
+ * there are no labels.
*
- * @return The width of the low value label or 0 if no label table exists.
+ * @return The width of the label whose key has the lowest value.
+ *
+ * @see #getLowestValueLabel()
*/
protected int getWidthOfLowValueLabel()
{
Component lowValueLabel = getLowestValueLabel();
if (lowValueLabel != null)
- return lowValueLabel.getWidth();
+ return lowValueLabel.getPreferredSize().width;
else
return 0;
}
/**
- * This method returns the height of the label whose key has the highest
- * value.
+ * Returns the height of the label whose key has the highest value, or 0 if
+ * there are no labels.
*
* @return The height of the high value label or 0 if no label table exists.
*/
@@ -1391,14 +1436,14 @@ public class BasicSliderUI extends SliderUI
{
Component highValueLabel = getHighestValueLabel();
if (highValueLabel != null)
- return highValueLabel.getHeight();
+ return highValueLabel.getPreferredSize().height;
else
return 0;
}
/**
- * This method returns the height of the label whose key has the lowest
- * value.
+ * Returns the height of the label whose key has the lowest value, or 0 if
+ * there are no labels.
*
* @return The height of the low value label or 0 if no label table exists.
*/
@@ -1406,19 +1451,20 @@ public class BasicSliderUI extends SliderUI
{
Component lowValueLabel = getLowestValueLabel();
if (lowValueLabel != null)
- return lowValueLabel.getHeight();
+ return lowValueLabel.getPreferredSize().height;
else
return 0;
}
/**
- * This method returns whether the slider is to be drawn inverted.
+ * Returns <code>true</code> if the slider scale is to be drawn inverted,
+ * and <code>false</code> if not.
*
- * @return True is the slider is to be drawn inverted.
+ * @return <code>true</code> if the slider is to be drawn inverted.
*/
protected boolean drawInverted()
{
- return ! (slider.getInverted() ^ leftToRightCache);
+ return slider.getInverted();
}
/**
@@ -1437,12 +1483,12 @@ public class BasicSliderUI extends SliderUI
for (Enumeration list = labelTable.keys(); list.hasMoreElements();)
{
- Object value = list.nextElement();
- if (! (value instanceof Integer))
- continue;
- tmpKey = (Integer) value;
- if (tmpKey.intValue() < key.intValue())
- key = tmpKey;
+ Object value = list.nextElement();
+ if (! (value instanceof Integer))
+ continue;
+ tmpKey = (Integer) value;
+ if (tmpKey.intValue() < key.intValue())
+ key = tmpKey;
}
Object comp = labelTable.get(key);
if (! (comp instanceof Component))
@@ -1451,9 +1497,10 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method returns the label whose key has the highest value.
+ * Returns the label whose key has the highest value.
*
- * @return The high value label or null if no label table exists.
+ * @return The label whose key has the highest value or <code>null</code> if
+ * no label table exists.
*/
protected Component getHighestValueLabel()
{
@@ -1466,12 +1513,12 @@ public class BasicSliderUI extends SliderUI
for (Enumeration list = labelTable.keys(); list.hasMoreElements();)
{
- Object value = list.nextElement();
- if (! (value instanceof Integer))
- continue;
- tmpKey = (Integer) value;
- if (tmpKey.intValue() > key.intValue())
- key = tmpKey;
+ Object value = list.nextElement();
+ if (! (value instanceof Integer))
+ continue;
+ tmpKey = (Integer) value;
+ if (tmpKey.intValue() > key.intValue())
+ key = tmpKey;
}
Object comp = labelTable.get(key);
if (! (comp instanceof Component))
@@ -1490,7 +1537,8 @@ public class BasicSliderUI extends SliderUI
public void paint(Graphics g, JComponent c)
{
// FIXME: Move this to propertyChangeEvent handler, when we get those.
- leftToRightCache = slider.getComponentOrientation() != ComponentOrientation.RIGHT_TO_LEFT;
+ leftToRightCache = slider.getComponentOrientation()
+ != ComponentOrientation.RIGHT_TO_LEFT;
// FIXME: This next line is only here because the above line is here.
calculateGeometry();
@@ -1599,23 +1647,23 @@ public class BasicSliderUI extends SliderUI
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- width = trackRect.width;
- height = (thumbRect.height / 4 == 0) ? 1 : thumbRect.height / 4;
+ width = trackRect.width;
+ height = (thumbRect.height / 4 == 0) ? 1 : thumbRect.height / 4;
- a.translate(0, (trackRect.height / 2) - (height / 2));
- b.translate(0, (trackRect.height / 2) + (height / 2));
- c.translate(trackRect.width, (trackRect.height / 2) + (height / 2));
- d.translate(trackRect.width, (trackRect.height / 2) - (height / 2));
+ a.translate(0, (trackRect.height / 2) - (height / 2));
+ b.translate(0, (trackRect.height / 2) + (height / 2));
+ c.translate(trackRect.width, (trackRect.height / 2) + (height / 2));
+ d.translate(trackRect.width, (trackRect.height / 2) - (height / 2));
}
else
{
- width = (thumbRect.width / 4 == 0) ? 1 : thumbRect.width / 4;
- height = trackRect.height;
+ width = (thumbRect.width / 4 == 0) ? 1 : thumbRect.width / 4;
+ height = trackRect.height;
- a.translate((trackRect.width / 2) - (width / 2), 0);
- b.translate((trackRect.width / 2) - (width / 2), trackRect.height);
- c.translate((trackRect.width / 2) + (width / 2), trackRect.height);
- d.translate((trackRect.width / 2) + (width / 2), 0);
+ a.translate((trackRect.width / 2) - (width / 2), 0);
+ b.translate((trackRect.width / 2) - (width / 2), trackRect.height);
+ c.translate((trackRect.width / 2) + (width / 2), trackRect.height);
+ d.translate((trackRect.width / 2) + (width / 2), 0);
}
g.setColor(Color.GRAY);
g.fillRect(a.x, a.y, width, height);
@@ -1647,86 +1695,42 @@ public class BasicSliderUI extends SliderUI
if (majorSpace > 0)
{
- if (slider.getOrientation() == JSlider.HORIZONTAL)
- {
- double loc = tickRect.x + 0.5;
- double increment = (max == min) ? 0
- : majorSpace * (double) (tickRect.width - 1) / (max - min);
- if (drawInverted())
- {
- loc += tickRect.width;
- increment *= -1;
- }
+ if (slider.getOrientation() == JSlider.HORIZONTAL)
+ {
g.translate(0, tickRect.y);
- for (int i = min; i <= max; i += majorSpace)
- {
- paintMajorTickForHorizSlider(g, tickRect, (int) loc);
- loc += increment;
- }
+ for (int i = min; i <= max; i += majorSpace)
+ paintMajorTickForHorizSlider(g, tickRect, xPositionForValue(i));
g.translate(0, -tickRect.y);
- }
- else
- {
- double loc = tickRect.height + tickRect.y + 0.5;
- double increment = (max == min) ? 0
- : -majorSpace * (double) (tickRect.height - 1) / (max - min);
- if (drawInverted())
- {
- loc = tickRect.y + 0.5;
- increment *= -1;
- }
+ }
+ else // JSlider.VERTICAL
+ {
g.translate(tickRect.x, 0);
- for (int i = min; i <= max; i += majorSpace)
- {
- paintMajorTickForVertSlider(g, tickRect, (int) loc);
- loc += increment;
- }
+ for (int i = min; i <= max; i += majorSpace)
+ paintMajorTickForVertSlider(g, tickRect, yPositionForValue(i));
g.translate(-tickRect.x, 0);
- }
+ }
}
if (minorSpace > 0)
{
- if (slider.getOrientation() == JSlider.HORIZONTAL)
- {
- double loc = tickRect.x + 0.5;
- double increment = (max == min) ? 0
- : minorSpace * (double) (tickRect.width - 1) / (max - min);
- if (drawInverted())
- {
- loc += tickRect.width;
- increment *= -1;
- }
+ if (slider.getOrientation() == JSlider.HORIZONTAL)
+ {
g.translate(0, tickRect.y);
- for (int i = min; i <= max; i += minorSpace)
- {
- paintMinorTickForHorizSlider(g, tickRect, (int) loc);
- loc += increment;
- }
+ for (int i = min; i <= max; i += minorSpace)
+ paintMinorTickForHorizSlider(g, tickRect, xPositionForValue(i));
g.translate(0, -tickRect.y);
- }
- else
- {
- double loc = tickRect.height + tickRect.y + 0.5;
- double increment = (max == min) ? 0
- : -minorSpace * (double) (tickRect.height - 1) / (max - min);
- if (drawInverted())
- {
- loc = tickRect.y + 0.5;
- increment *= -1;
- }
+ }
+ else
+ {
g.translate(tickRect.x, 0);
- for (int i = min; i <= max; i += minorSpace)
- {
- paintMinorTickForVertSlider(g, tickRect, (int) loc);
- loc += increment;
- }
+ for (int i = min; i <= max; i += minorSpace)
+ paintMinorTickForVertSlider(g, tickRect, yPositionForValue(i));
g.translate(-tickRect.x, 0);
- }
+ }
}
}
- /* Minor ticks start at 1/4 of the height (or width) of the tickRect and extend
- to 1/2 of the tickRect.
+ /* Minor ticks start at 1/4 of the height (or width) of the tickRect and
+ extend to 1/2 of the tickRect.
Major ticks start at 1/4 of the height and extend to 3/4.
*/
@@ -1819,45 +1823,45 @@ public class BasicSliderUI extends SliderUI
{
if (slider.getLabelTable() != null)
{
- Dictionary table = slider.getLabelTable();
- Integer tmpKey;
- Object key;
- Object element;
- Component label;
- if (slider.getOrientation() == JSlider.HORIZONTAL)
- {
- for (Enumeration list = table.keys(); list.hasMoreElements();)
- {
- key = list.nextElement();
- if (! (key instanceof Integer))
- continue;
- tmpKey = (Integer) key;
- element = table.get(tmpKey);
- // We won't paint them if they're not
- // JLabels so continue anyway
- if (! (element instanceof JLabel))
- continue;
- label = (Component) element;
- paintHorizontalLabel(g, tmpKey.intValue(), label);
- }
- }
- else
- {
- for (Enumeration list = table.keys(); list.hasMoreElements();)
- {
- key = list.nextElement();
- if (! (key instanceof Integer))
- continue;
- tmpKey = (Integer) key;
- element = table.get(tmpKey);
- // We won't paint them if they're not
- // JLabels so continue anyway
- if (! (element instanceof JLabel))
- continue;
- label = (Component) element;
- paintVerticalLabel(g, tmpKey.intValue(), label);
- }
- }
+ Dictionary table = slider.getLabelTable();
+ Integer tmpKey;
+ Object key;
+ Object element;
+ Component label;
+ if (slider.getOrientation() == JSlider.HORIZONTAL)
+ {
+ for (Enumeration list = table.keys(); list.hasMoreElements();)
+ {
+ key = list.nextElement();
+ if (! (key instanceof Integer))
+ continue;
+ tmpKey = (Integer) key;
+ element = table.get(tmpKey);
+ // We won't paint them if they're not
+ // JLabels so continue anyway
+ if (! (element instanceof JLabel))
+ continue;
+ label = (Component) element;
+ paintHorizontalLabel(g, tmpKey.intValue(), label);
+ }
+ }
+ else
+ {
+ for (Enumeration list = table.keys(); list.hasMoreElements();)
+ {
+ key = list.nextElement();
+ if (! (key instanceof Integer))
+ continue;
+ tmpKey = (Integer) key;
+ element = table.get(tmpKey);
+ // We won't paint them if they're not
+ // JLabels so continue anyway
+ if (! (element instanceof JLabel))
+ continue;
+ label = (Component) element;
+ paintVerticalLabel(g, tmpKey.intValue(), label);
+ }
+ }
}
}
@@ -1918,7 +1922,7 @@ public class BasicSliderUI extends SliderUI
h = labelRect.height;
label.setBounds(xpos, ypos, w, h);
- javax.swing.SwingUtilities.paintComponent(g, label, null, label.getBounds());
+ SwingUtilities.paintComponent(g, label, null, label.getBounds());
}
/**
@@ -1957,7 +1961,7 @@ public class BasicSliderUI extends SliderUI
w = labelRect.width;
label.setBounds(xpos, ypos, w, h);
- javax.swing.SwingUtilities.paintComponent(g, label, null, label.getBounds());
+ SwingUtilities.paintComponent(g, label, null, label.getBounds());
}
/**
@@ -1997,49 +2001,52 @@ public class BasicSliderUI extends SliderUI
Polygon dark; // dark shadow
Polygon all;
- // This will be in X-dimension if the slider is inverted and y if it isn't.
+ // This will be in X-dimension if the slider is inverted and y if it isn't.
int turnPoint;
if (slider.getOrientation() == JSlider.HORIZONTAL)
{
- turnPoint = thumbRect.height * 3 / 4;
+ turnPoint = thumbRect.height * 3 / 4;
- b.translate(thumbRect.width - 1, 0);
- c.translate(thumbRect.width - 1, turnPoint);
- d.translate(thumbRect.width / 2 - 1, thumbRect.height - 1);
- e.translate(0, turnPoint);
+ b.translate(thumbRect.width - 1, 0);
+ c.translate(thumbRect.width - 1, turnPoint);
+ d.translate(thumbRect.width / 2 - 1, thumbRect.height - 1);
+ e.translate(0, turnPoint);
- bright = new Polygon(new int[] { b.x - 1, a.x, e.x, d.x },
- new int[] { b.y, a.y, e.y, d.y }, 4);
+ bright = new Polygon(new int[] { b.x - 1, a.x, e.x, d.x },
+ new int[] { b.y, a.y, e.y, d.y }, 4);
- dark = new Polygon(new int[] { b.x, c.x, d.x + 1 },
- new int[] { b.y, c.y - 1, d.y }, 3);
+ dark = new Polygon(new int[] { b.x, c.x, d.x + 1 },
+ new int[] { b.y, c.y - 1, d.y }, 3);
light = new Polygon(new int[] { b.x - 1, c.x - 1, d.x + 1 },
new int[] { b.y + 1, c.y - 1, d.y - 1 }, 3);
- all = new Polygon(new int[] { a.x + 1, b.x - 2, c.x - 2, d.x, e.x + 1 },
- new int[] { a.y + 1, b.y + 1, c.y - 1, d.y - 1, e.y }, 5);
+ all = new Polygon(new int[] { a.x + 1, b.x - 2, c.x - 2, d.x, e.x + 1 },
+ new int[] { a.y + 1, b.y + 1, c.y - 1, d.y - 1, e.y },
+ 5);
}
else
{
- turnPoint = thumbRect.width * 3 / 4 - 1;
+ turnPoint = thumbRect.width * 3 / 4 - 1;
- b.translate(turnPoint, 0);
- c.translate(thumbRect.width - 1, thumbRect.height / 2);
- d.translate(turnPoint, thumbRect.height - 1);
- e.translate(0, thumbRect.height - 1);
+ b.translate(turnPoint, 0);
+ c.translate(thumbRect.width - 1, thumbRect.height / 2);
+ d.translate(turnPoint, thumbRect.height - 1);
+ e.translate(0, thumbRect.height - 1);
- bright = new Polygon(new int[] { c.x - 1, b.x, a.x, e.x },
- new int[] { c.y - 1, b.y, a.y, e.y - 1 }, 4);
+ bright = new Polygon(new int[] { c.x - 1, b.x, a.x, e.x },
+ new int[] { c.y - 1, b.y, a.y, e.y - 1 }, 4);
- dark = new Polygon(new int[] { c.x, d.x, e.x },
- new int[] { c.y, d.y, e.y }, 3);
+ dark = new Polygon(new int[] { c.x, d.x, e.x },
+ new int[] { c.y, d.y, e.y }, 3);
light = new Polygon(new int[] { c.x - 1, d.x, e.x + 1},
new int[] { c.y, d.y - 1, e.y - 1}, 3);
- all = new Polygon(new int[] { a.x + 1, b.x, c.x - 2, c.x - 2, d.x, e.x + 1 },
- new int[] { a.y + 1, b.y + 1, c.y - 1, c.y, d.y - 2, e.y - 2 }, 6);
+ all = new Polygon(new int[] { a.x + 1, b.x, c.x - 2, c.x - 2, d.x,
+ e.x + 1 },
+ new int[] { a.y + 1, b.y + 1, c.y - 1, c.y, d.y - 2,
+ e.y - 2 }, 6);
}
g.setColor(Color.WHITE);
@@ -2071,18 +2078,22 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method is used to move the thumb one block in the direction
- * specified. If the slider snaps to ticks, this method is responsible for
- * snapping it to a tick after the thumb has been moved.
+ * Moves the thumb one block in the direction specified (a block is 1/10th
+ * of the slider range). If the slider snaps to ticks, this method is
+ * responsible for snapping it to a tick after the thumb has been moved.
*
- * @param direction The direction to move in.
+ * @param direction the direction (positive values increment the thumb
+ * position by one block, zero/negative values decrement the thumb position
+ * by one block).
*/
public void scrollByBlock(int direction)
{
- // The direction is -1 for backwards and 1 for forwards.
- int unit = direction * (slider.getMaximum() - slider.getMinimum()) / 10;
-
- int moveTo = slider.getValue() + unit;
+ int unit = (slider.getMaximum() - slider.getMinimum()) / 10;
+ int moveTo = slider.getValue();
+ if (direction > 0)
+ moveTo += unit;
+ else
+ moveTo -= unit;
if (slider.getSnapToTicks())
moveTo = findClosestTick(moveTo);
@@ -2091,16 +2102,21 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method is used to move the thumb one unit in the direction
- * specified. If the slider snaps to ticks, this method is responsible for
- * snapping it to a tick after the thumb has been moved.
+ * Moves the thumb one unit in the specified direction. If the slider snaps
+ * to ticks, this method is responsible for snapping it to a tick after the
+ * thumb has been moved.
*
- * @param direction The direction to move in.
+ * @param direction the direction (positive values increment the thumb
+ * position by one, zero/negative values decrement the thumb position by
+ * one).
*/
public void scrollByUnit(int direction)
{
- // The direction is -1 for backwards and 1 for forwards.
- int moveTo = slider.getValue() + direction;
+ int moveTo = slider.getValue();
+ if (direction > 0)
+ moveTo++;
+ else
+ moveTo--;
if (slider.getSnapToTicks())
moveTo = findClosestTick(moveTo);
@@ -2126,53 +2142,60 @@ public class BasicSliderUI extends SliderUI
}
/**
- * This method returns the X coordinate for the value passed in.
+ * Returns the x-coordinate (relative to the component) for the given slider
+ * value. This method assumes that the <code>trackRect</code> field is
+ * set up.
*
- * @param value The value to calculate an x coordinate for.
+ * @param value the slider value.
*
- * @return The x coordinate for the value.
+ * @return The x-coordinate.
*/
protected int xPositionForValue(int value)
{
- int min = slider.getMinimum();
- int max = slider.getMaximum();
- int len = trackRect.width - 1;
-
- int xPos = (max == min) ? 0 : (value - min) * len / (max - min);
+ double min = slider.getMinimum();
+ if (value < min)
+ value = (int) min;
+ double max = slider.getMaximum();
+ if (value > max)
+ value = (int) max;
+ double len = trackRect.width;
+ if ((max - min) <= 0.0)
+ return 0;
+ int xPos = (int) ((value - min) / (max - min) * len + 0.5);
- if (! drawInverted())
- xPos += trackRect.x;
+ if (drawInverted())
+ return trackRect.x + Math.max(trackRect.width - xPos - 1, 0);
else
- {
- xPos = len - xPos;
- xPos += trackRect.x;
- }
- return xPos;
+ return trackRect.x + Math.min(xPos, trackRect.width - 1);
}
/**
- * This method returns the y coordinate for the value passed in.
+ * Returns the y-coordinate (relative to the component) for the given slider
+ * value. This method assumes that the <code>trackRect</code> field is
+ * set up.
*
- * @param value The value to calculate a y coordinate for.
+ * @param value the slider value.
*
- * @return The y coordinate for the value.
+ * @return The y-coordinate.
*/
protected int yPositionForValue(int value)
{
- int min = slider.getMinimum();
- int max = slider.getMaximum();
- int len = trackRect.height - 1;
+ double min = slider.getMinimum();
+ if (value < min)
+ value = (int) min;
+ double max = slider.getMaximum();
+ if (value > max)
+ value = (int) max;
+ int len = trackRect.height;
+ if ((max - min) <= 0.0)
+ return 0;
- int yPos = (max == min) ? 0 : (value - min) * len / (max - min);
+ int yPos = (int) ((value - min) / (max - min) * len + 0.5);
if (! drawInverted())
- {
- yPos = len - yPos;
- yPos += trackRect.y;
- }
+ return trackRect.y + trackRect.height - Math.max(yPos, 1);
else
- yPos += trackRect.y;
- return yPos;
+ return trackRect.y + Math.min(yPos, trackRect.height - 1);
}
/**
@@ -2279,26 +2302,26 @@ public class BasicSliderUI extends SliderUI
// First check the major ticks.
if (majorSpace > 0)
{
- int lowerBound = (value - min) / majorSpace;
- int majLower = majorSpace * lowerBound + min;
- int majHigher = majorSpace * (lowerBound + 1) + min;
-
- if (majHigher <= max && majHigher - value <= value - majLower)
- major = majHigher - value;
- else
- major = majLower - value;
+ int lowerBound = (value - min) / majorSpace;
+ int majLower = majorSpace * lowerBound + min;
+ int majHigher = majorSpace * (lowerBound + 1) + min;
+
+ if (majHigher <= max && majHigher - value <= value - majLower)
+ major = majHigher - value;
+ else
+ major = majLower - value;
}
if (minorSpace > 0)
{
- int lowerBound = value / minorSpace;
- int minLower = minorSpace * lowerBound;
- int minHigher = minorSpace * (lowerBound + 1);
-
- if (minHigher <= max && minHigher - value <= value - minLower)
- minor = minHigher - value;
- else
- minor = minLower - value;
+ int lowerBound = value / minorSpace;
+ int minLower = minorSpace * lowerBound;
+ int minHigher = minorSpace * (lowerBound + 1);
+
+ if (minHigher <= max && minHigher - value <= value - minLower)
+ minor = minHigher - value;
+ else
+ minor = minLower - value;
}
// Give preference to minor ticks
@@ -2307,4 +2330,123 @@ public class BasicSliderUI extends SliderUI
else
return value + minor;
}
+
+ InputMap getInputMap(int condition)
+ {
+ if (condition == JComponent.WHEN_FOCUSED)
+ return (InputMap) UIManager.get("Slider.focusInputMap");
+ return null;
+ }
+
+ /**
+ * Returns the action map for the {@link JSlider}. All sliders share
+ * a single action map which is created the first time this method is
+ * called, then stored in the UIDefaults table for subsequent access.
+ *
+ * @return The shared action map.
+ */
+ ActionMap getActionMap()
+ {
+ ActionMap map = (ActionMap) UIManager.get("Slider.actionMap");
+
+ if (map == null) // first time here
+ {
+ map = createActionMap();
+ if (map != null)
+ UIManager.put("Slider.actionMap", map);
+ }
+ return map;
+ }
+
+ /**
+ * Creates the action map shared by all {@link JSlider} instances.
+ * This method is called once by {@link #getActionMap()} when it
+ * finds no action map in the UIDefaults table...after the map is
+ * created, it gets added to the defaults table so that subsequent
+ * calls to {@link #getActionMap()} will return the same shared
+ * instance.
+ *
+ * @return The action map.
+ */
+ ActionMap createActionMap()
+ {
+ ActionMap map = new ActionMapUIResource();
+ map.put("positiveUnitIncrement",
+ new AbstractAction("positiveUnitIncrement") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ BasicSliderUI ui = (BasicSliderUI) slider.getUI();
+ if (slider.getInverted())
+ ui.scrollByUnit(BasicSliderUI.NEGATIVE_SCROLL);
+ else
+ ui.scrollByUnit(BasicSliderUI.POSITIVE_SCROLL);
+ }
+ }
+ );
+ map.put("negativeUnitIncrement",
+ new AbstractAction("negativeUnitIncrement") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ BasicSliderUI ui = (BasicSliderUI) slider.getUI();
+ if (slider.getInverted())
+ ui.scrollByUnit(BasicSliderUI.POSITIVE_SCROLL);
+ else
+ ui.scrollByUnit(BasicSliderUI.NEGATIVE_SCROLL);
+ }
+ }
+ );
+ map.put("positiveBlockIncrement",
+ new AbstractAction("positiveBlockIncrement") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ BasicSliderUI ui = (BasicSliderUI) slider.getUI();
+ if (slider.getInverted())
+ ui.scrollByBlock(BasicSliderUI.NEGATIVE_SCROLL);
+ else
+ ui.scrollByBlock(BasicSliderUI.POSITIVE_SCROLL);
+ }
+ }
+ );
+ map.put("negativeBlockIncrement",
+ new AbstractAction("negativeBlockIncrement") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ BasicSliderUI ui = (BasicSliderUI) slider.getUI();
+ if (slider.getInverted())
+ ui.scrollByBlock(BasicSliderUI.POSITIVE_SCROLL);
+ else
+ ui.scrollByBlock(BasicSliderUI.NEGATIVE_SCROLL);
+ }
+ }
+ );
+ map.put("minScroll",
+ new AbstractAction("minScroll") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ if (slider.getInverted())
+ slider.setValue(slider.getMaximum());
+ else
+ slider.setValue(slider.getMinimum());
+ }
+ }
+ );
+ map.put("maxScroll",
+ new AbstractAction("maxScroll") {
+ public void actionPerformed(ActionEvent event)
+ {
+ JSlider slider = (JSlider) event.getSource();
+ if (slider.getInverted())
+ slider.setValue(slider.getMinimum());
+ else
+ slider.setValue(slider.getMaximum());
+ }
+ }
+ );
+ return map;
+ }
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java
index 6f7a41a..465374b 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java
@@ -41,7 +41,6 @@ package javax.swing.plaf.basic;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
-import java.awt.Font;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
@@ -365,9 +364,9 @@ public class BasicSpinnerUI extends SpinnerUI
private class DefaultLayoutManager implements LayoutManager
{
/**
- * DOCUMENT ME!
+ * Layout the spinners inner parts.
*
- * @param parent DOCUMENT ME!
+ * @param parent The parent container
*/
public void layoutContainer(Container parent)
{
@@ -385,12 +384,12 @@ public class BasicSpinnerUI extends SpinnerUI
Dimension e = prefSize(editor);
Dimension n = prefSize(next);
Dimension p = prefSize(previous);
- Dimension s = spinner.getPreferredSize();
+ Dimension s = parent.getSize();
int x = l2r ? i.left : i.right;
int y = i.top;
int w = Math.max(p.width, n.width);
- int h = e.height / 2;
+ int h = (s.height - i.bottom) / 2;
int e_width = s.width - w - i.left - i.right;
if (l2r)
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java
index 8a7c9d2..694baad 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Component;
@@ -101,6 +103,16 @@ public class BasicSplitPaneUI extends SplitPaneUI
protected int[] sizes = new int[3];
/**
+ * Creates a new instance. This is package private because the reference
+ * implementation has no public constructor either. Still, we need to
+ * call it from BasicVerticalLayoutManager.
+ */
+ BasicHorizontalLayoutManager()
+ {
+ // Nothing to do here.
+ }
+
+ /**
* This method adds the component given to the JSplitPane. The position of
* the component is given by the constraints object.
*
@@ -1037,6 +1049,7 @@ public class BasicSplitPaneUI extends SplitPaneUI
* This method installs the keyboard actions for the JSplitPane.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -1045,6 +1058,7 @@ public class BasicSplitPaneUI extends SplitPaneUI
* This method reverses the work done in installKeyboardActions.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java
index 5b1e1ff..6d9bed3 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -130,52 +132,49 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
public void mousePressed(MouseEvent e)
{
- int x = e.getX();
- int y = e.getY();
- int tabCount = tabPane.getTabCount();
-
- if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT)
+ if (tabPane.isEnabled())
{
- if (e.getSource() == incrButton)
+ int index = tabForCoordinate(tabPane, e.getX(), e.getY());
+ if (index >= 0 && tabPane.isEnabledAt(index))
{
- if (++currentScrollLocation >= tabCount)
- currentScrollLocation = tabCount - 1;
-
- int width = 0;
- for (int i = currentScrollLocation - 1; i < tabCount; i++)
- width += rects[i].width;
- if (width < viewport.getWidth())
- // FIXME: Still getting mouse events after the button is disabled.
- // incrButton.setEnabled(false);
- currentScrollLocation--;
- else if (! decrButton.isEnabled())
- decrButton.setEnabled(true);
- tabPane.revalidate();
- tabPane.repaint();
- return;
- }
- else if (e.getSource() == decrButton)
- {
- if (--currentScrollLocation < 0)
- currentScrollLocation = 0;
- if (currentScrollLocation == 0)
- decrButton.setEnabled(false);
- else if (! incrButton.isEnabled())
- incrButton.setEnabled(true);
- tabPane.revalidate();
- tabPane.repaint();
- return;
+ tabPane.setSelectedIndex(index);
}
}
+ }
- int index = tabForCoordinate(tabPane, x, y);
+ /**
+ * Receives notification when the mouse pointer has entered the tabbed
+ * pane.
+ *
+ * @param ev the mouse event
+ */
+ public void mouseEntered(MouseEvent ev)
+ {
+ int tabIndex = tabForCoordinate(tabPane, ev.getX(), ev.getY());
+ setRolloverTab(tabIndex);
+ }
- // We need to check since there are areas where tabs cannot be
- // e.g. in the inset area.
- if (index != -1 && tabPane.isEnabledAt(index))
- tabPane.setSelectedIndex(index);
- tabPane.revalidate();
- tabPane.repaint();
+ /**
+ * Receives notification when the mouse pointer has exited the tabbed
+ * pane.
+ *
+ * @param ev the mouse event
+ */
+ public void mouseExited(MouseEvent ev)
+ {
+ setRolloverTab(-1);
+ }
+
+ /**
+ * Receives notification when the mouse pointer has moved over the tabbed
+ * pane.
+ *
+ * @param ev the mouse event
+ */
+ public void mouseMoved(MouseEvent ev)
+ {
+ int tabIndex = tabForCoordinate(tabPane, ev.getX(), ev.getY());
+ setRolloverTab(tabIndex);
}
}
@@ -241,21 +240,10 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
public void calculateLayoutInfo()
{
- assureRectsCreated(tabPane.getTabCount());
- contentRect = SwingUtilities.calculateInnerArea(tabPane, contentRect);
-
- calculateTabRects(tabPane.getTabPlacement(), tabPane.getTabCount());
-
- if (tabPane.getSelectedIndex() != -1)
- {
- Component visible = getVisibleComponent();
- Insets insets = getContentBorderInsets(tabPane.getTabPlacement());
- if (visible != null)
- visible.setBounds(contentRect.x + insets.left,
- contentRect.y + insets.top,
- contentRect.width - insets.left - insets.right,
- contentRect.height - insets.top - insets.bottom);
- }
+ int count = tabPane.getTabCount();
+ assureRectsCreated(count);
+ calculateTabRects(tabPane.getTabPlacement(), count);
+ tabRunsDirty = false;
}
/**
@@ -269,45 +257,51 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
protected Dimension calculateSize(boolean minimum)
{
int tabPlacement = tabPane.getTabPlacement();
+
int width = 0;
int height = 0;
-
- int componentHeight = 0;
- int componentWidth = 0;
Component c;
Dimension dims;
+
+ // Find out the minimum/preferred size to display the largest child
+ // of the tabbed pane.
for (int i = 0; i < tabPane.getTabCount(); i++)
{
c = tabPane.getComponentAt(i);
if (c == null)
continue;
- calcRect = c.getBounds();
- dims = c.getPreferredSize();
+ dims = minimum ? c.getMinimumSize() : c.getPreferredSize();
if (dims != null)
{
- componentHeight = Math.max(componentHeight, dims.height);
- componentWidth = Math.max(componentWidth, dims.width);
+ height = Math.max(height, dims.height);
+ width = Math.max(width, dims.width);
}
}
+
+ Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
if (tabPlacement == SwingConstants.TOP
|| tabPlacement == SwingConstants.BOTTOM)
{
int min = calculateMaxTabWidth(tabPlacement);
- width = Math.max(min, componentWidth);
-
- int tabAreaHeight = preferredTabAreaHeight(tabPlacement, width);
- height = tabAreaHeight + componentHeight;
+ width = Math.max(min, width);
+ int tabAreaHeight = preferredTabAreaHeight(tabPlacement,
+ width - tabAreaInsets.left
+ -tabAreaInsets.right);
+ height += tabAreaHeight;
}
else
{
int min = calculateMaxTabHeight(tabPlacement);
- height = Math.max(min, componentHeight);
-
- int tabAreaWidth = preferredTabAreaWidth(tabPlacement, height);
- width = tabAreaWidth + componentWidth;
+ height = Math.max(min, height);
+ int tabAreaWidth = preferredTabAreaWidth(tabPlacement,
+ height - tabAreaInsets.top
+ - tabAreaInsets.bottom);
+ width += tabAreaWidth;
}
- return new Dimension(width, height);
+ Insets tabPaneInsets = tabPane.getInsets();
+ return new Dimension(width + tabPaneInsets.left + tabPaneInsets.right,
+ height + tabPaneInsets.top + tabPaneInsets.bottom);
}
// if tab placement is LEFT OR RIGHT, they share width.
@@ -330,192 +324,197 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
protected void calculateTabRects(int tabPlacement, int tabCount)
{
+ Insets insets = tabPane.getInsets();
+ Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
+ Dimension size = tabPane.getSize();
+
+ // The coordinates of the upper left corner of the tab area.
+ int x;
+ int y;
+ // The location at which the runs must be broken.
+ int breakAt;
+
+ // Calculate the bounds for the tab area.
+ switch (tabPlacement)
+ {
+ case LEFT:
+ maxTabWidth = calculateMaxTabWidth(tabPlacement);
+ x = insets.left + tabAreaInsets.left;
+ y = insets.top + tabAreaInsets.top;
+ breakAt = size.height - (insets.bottom + tabAreaInsets.bottom);
+ break;
+ case RIGHT:
+ maxTabWidth = calculateMaxTabWidth(tabPlacement);
+ x = size.width - (insets.right + tabAreaInsets.right) - maxTabWidth;
+ y = insets.top + tabAreaInsets.top;
+ breakAt = size.height - (insets.bottom + tabAreaInsets.bottom);
+ break;
+ case BOTTOM:
+ maxTabHeight = calculateMaxTabHeight(tabPlacement);
+ x = insets.left + tabAreaInsets.left;
+ y = size.height - (insets.bottom + tabAreaInsets.bottom)
+ - maxTabHeight;
+ breakAt = size.width - (insets.right + tabAreaInsets.right);
+ break;
+ case TOP:
+ default:
+ maxTabHeight = calculateMaxTabHeight(tabPlacement);
+ x = insets.left + tabAreaInsets.left;
+ y = insets.top + tabAreaInsets.top;
+ breakAt = size.width - (insets.right + tabAreaInsets.right);
+ break;
+ }
+
if (tabCount == 0)
return;
FontMetrics fm = getFontMetrics();
- SwingUtilities.calculateInnerArea(tabPane, calcRect);
- Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
- Insets insets = tabPane.getInsets();
- int max = 0;
- int runs = 0;
- int start = getTabRunIndent(tabPlacement, 1);
+ runCount = 0;
+ selectedRun = -1;
+ int selectedIndex = tabPane.getSelectedIndex();
+
+ Rectangle rect;
+
+ // Go through all the tabs and build the tab runs.
if (tabPlacement == SwingConstants.TOP
|| tabPlacement == SwingConstants.BOTTOM)
{
- int maxHeight = calculateMaxTabHeight(tabPlacement);
-
- calcRect.width -= tabAreaInsets.left + tabAreaInsets.right;
- max = calcRect.width + tabAreaInsets.left + insets.left;
- start += tabAreaInsets.left + insets.left;
- int width = 0;
- int runWidth = start;
-
for (int i = 0; i < tabCount; i++)
{
- width = calculateTabWidth(tabPlacement, i, fm);
- if (runWidth + width > max)
+ rect = rects[i];
+ if (i > 0)
{
- runWidth = tabAreaInsets.left + insets.left
- + getTabRunIndent(tabPlacement, ++runs);
- rects[i] = new Rectangle(runWidth,
- insets.top + tabAreaInsets.top,
- width, maxHeight);
- runWidth += width;
- if (runs > tabRuns.length - 1)
- expandTabRunsArray();
- tabRuns[runs] = i;
+ rect.x = rects[i - 1].x + rects[i - 1].width;
}
else
{
- rects[i] = new Rectangle(runWidth,
- insets.top + tabAreaInsets.top,
- width, maxHeight);
- runWidth += width;
+ tabRuns[0] = 0;
+ runCount = 1;
+ maxTabWidth = 0;
+ rect.x = x;
}
- }
- runs++;
- tabAreaRect.width = tabPane.getWidth() - insets.left - insets.right;
- tabAreaRect.height = runs * maxTabHeight
- - (runs - 1) * tabRunOverlay
- + tabAreaInsets.top + tabAreaInsets.bottom;
- contentRect.width = tabAreaRect.width;
- contentRect.height = tabPane.getHeight() - insets.top
- - insets.bottom - tabAreaRect.height;
- contentRect.x = insets.left;
- tabAreaRect.x = insets.left;
- if (tabPlacement == SwingConstants.BOTTOM)
- {
- contentRect.y = insets.top;
- tabAreaRect.y = contentRect.y + contentRect.height;
- }
- else
- {
- tabAreaRect.y = insets.top;
- contentRect.y = tabAreaRect.y + tabAreaRect.height;
+ rect.width = calculateTabWidth(tabPlacement, i, fm);
+ maxTabWidth = Math.max(maxTabWidth, rect.width);
+
+ if (rect.x != 2 + insets.left && rect.x + rect.width > breakAt)
+ {
+ if (runCount > tabRuns.length - 1)
+ expandTabRunsArray();
+ tabRuns[runCount] = i;
+ runCount++;
+ rect.x = x;
+ }
+
+ rect.y = y;
+ rect.height = maxTabHeight;
+ if (i == selectedIndex)
+ selectedRun = runCount - 1;
+
}
}
else
{
- int maxWidth = calculateMaxTabWidth(tabPlacement);
- calcRect.height -= tabAreaInsets.top + tabAreaInsets.bottom;
- max = calcRect.height + tabAreaInsets.top + insets.top;
-
- int height = 0;
- start += tabAreaInsets.top + insets.top;
- int runHeight = start;
-
- int fontHeight = fm.getHeight();
-
for (int i = 0; i < tabCount; i++)
{
- height = calculateTabHeight(tabPlacement, i, fontHeight);
- if (runHeight + height > max)
+ rect = rects[i];
+ if (i > 0)
{
- runHeight = tabAreaInsets.top + insets.top
- + getTabRunIndent(tabPlacement, ++runs);
- rects[i] = new Rectangle(insets.left + tabAreaInsets.left,
- runHeight, maxWidth, height);
- runHeight += height;
- if (runs > tabRuns.length - 1)
- expandTabRunsArray();
- tabRuns[runs] = i;
+ rect.y = rects[i - 1].y + rects[i - 1].height;
}
else
{
- rects[i] = new Rectangle(insets.left + tabAreaInsets.left,
- runHeight, maxWidth, height);
- runHeight += height;
+ tabRuns[0] = 0;
+ runCount = 1;
+ maxTabHeight = 0;
+ rect.y = y;
}
- }
- runs++;
+ rect.height = calculateTabHeight(tabPlacement, i,
+ fm.getHeight());
+ maxTabHeight = Math.max(maxTabHeight, rect.height);
- tabAreaRect.width = runs * maxTabWidth - (runs - 1) * tabRunOverlay
- + tabAreaInsets.left + tabAreaInsets.right;
- tabAreaRect.height = tabPane.getHeight() - insets.top
- - insets.bottom;
- tabAreaRect.y = insets.top;
- contentRect.width = tabPane.getWidth() - insets.left - insets.right
- - tabAreaRect.width;
- contentRect.height = tabAreaRect.height;
- contentRect.y = insets.top;
- if (tabPlacement == SwingConstants.LEFT)
- {
- tabAreaRect.x = insets.left;
- contentRect.x = tabAreaRect.x + tabAreaRect.width;
- }
- else
- {
- contentRect.x = insets.left;
- tabAreaRect.x = contentRect.x + contentRect.width;
+ if (rect.y != 2 + insets.top && rect.y + rect.height > breakAt)
+ {
+ if (runCount > tabRuns.length - 1)
+ expandTabRunsArray();
+ tabRuns[runCount] = i;
+ runCount++;
+ rect.y = y;
+ }
+
+ rect.x = x;
+ rect.width = maxTabWidth;
+
+ if (i == selectedIndex)
+ selectedRun = runCount - 1;
}
}
- runCount = runs;
- if (runCount > tabRuns.length)
- expandTabRunsArray();
-
- tabRuns[0] = 0;
- normalizeTabRuns(tabPlacement, tabCount, start, max);
- selectedRun = getRunForTab(tabCount, tabPane.getSelectedIndex());
- if (shouldRotateTabRuns(tabPlacement))
- rotateTabRuns(tabPlacement, selectedRun);
- // Need to pad the runs and move them to the correct location.
- for (int i = 0; i < runCount; i++)
+ if (runCount > 1)
{
- int first = lastTabInRun(tabCount, getPreviousTabRun(i)) + 1;
- if (first == tabCount)
- first = 0;
- int last = lastTabInRun(tabCount, i);
- if (shouldPadTabRun(tabPlacement, i))
- padTabRun(tabPlacement, first, last, max);
-
- // Done padding, now need to move it.
- if (tabPlacement == SwingConstants.TOP && i > 0)
+ int start;
+ if (tabPlacement == SwingConstants.TOP
+ || tabPlacement == SwingConstants.BOTTOM)
+ start = y;
+ else
+ start = x;
+ normalizeTabRuns(tabPlacement, tabCount, start, breakAt);
+ selectedRun = getRunForTab(tabCount, selectedIndex);
+ if (shouldRotateTabRuns(tabPlacement))
{
- for (int j = first; j <= last; j++)
- rects[j].y += (runCount - i) * maxTabHeight
- - (runCount - i) * tabRunOverlay;
+ rotateTabRuns(tabPlacement, selectedRun);
}
+ }
- if (tabPlacement == SwingConstants.BOTTOM)
+ // Pad the runs.
+ int tabRunOverlay = getTabRunOverlay(tabPlacement);
+ for (int i = runCount - 1; i >= 0; --i)
+ {
+ int start = tabRuns[i];
+ int nextIndex;
+ if (i == runCount - 1)
+ nextIndex = 0;
+ else
+ nextIndex = i + 1;
+ int next = tabRuns[nextIndex];
+ int end = (next != 0 ? next - 1 : tabCount - 1);
+ if (tabPlacement == SwingConstants.TOP
+ || tabPlacement == SwingConstants.BOTTOM)
{
- int height = tabPane.getBounds().height - insets.bottom
- - tabAreaInsets.bottom;
- int adjustment;
- if (i == 0)
- adjustment = height - maxTabHeight;
+ for (int j = start; j <= end; ++j)
+ {
+ rect = rects[j];
+ rect.y = y;
+ rect.x += getTabRunIndent(tabPlacement, i);
+ }
+ if (shouldPadTabRun(tabPlacement, i))
+ {
+ padTabRun(tabPlacement, start, end, breakAt);
+ }
+ if (tabPlacement == BOTTOM)
+ y -= (maxTabHeight - tabRunOverlay);
else
- adjustment = height - (runCount - i + 1) * maxTabHeight
- - (runCount - i) * tabRunOverlay;
-
- for (int j = first; j <= last; j++)
- rects[j].y = adjustment;
- }
-
- if (tabPlacement == SwingConstants.LEFT && i > 0)
- {
- for (int j = first; j <= last; j++)
- rects[j].x += (runCount - i) * maxTabWidth
- - (runCount - i) * tabRunOverlay;
+ y += (maxTabHeight - tabRunOverlay);
}
-
- if (tabPlacement == SwingConstants.RIGHT)
+ else
{
- int width = tabPane.getBounds().width - insets.right
- - tabAreaInsets.right;
- int adjustment;
- if (i == 0)
- adjustment = width - maxTabWidth;
+ for (int j = start; j <= end; ++j)
+ {
+ rect = rects[j];
+ rect.x = x;
+ rect.y += getTabRunIndent(tabPlacement, i);
+ }
+ if (shouldPadTabRun(tabPlacement, i))
+ {
+ padTabRun(tabPlacement, start, end, breakAt);
+ }
+ if (tabPlacement == RIGHT)
+ x -= (maxTabWidth - tabRunOverlay);
else
- adjustment = width - (runCount - i + 1) * maxTabWidth
- + (runCount - i) * tabRunOverlay;
-
- for (int j = first; j <= last; j++)
- rects[j].x = adjustment;
+ x += (maxTabWidth - tabRunOverlay);
+
}
}
- padSelectedTab(tabPlacement, tabPane.getSelectedIndex());
+ padSelectedTab(tabPlacement, selectedIndex);
}
/**
@@ -528,6 +527,58 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
public void layoutContainer(Container parent)
{
calculateLayoutInfo();
+
+ int tabPlacement = tabPane.getTabPlacement();
+ Insets insets = tabPane.getInsets();
+ int childCount = tabPane.getComponentCount();
+ if (childCount > 0)
+ {
+ int compX;
+ int compY;
+ int tabAreaWidth = 0;
+ int tabAreaHeight = 0;
+ switch (tabPlacement)
+ {
+ case LEFT:
+ tabAreaWidth = calculateTabAreaWidth(tabPlacement, runCount,
+ maxTabWidth);
+ compX = tabAreaWidth + insets.left + contentBorderInsets.left;
+ compY = insets.top + contentBorderInsets.top;
+ break;
+ case RIGHT:
+ tabAreaWidth = calculateTabAreaWidth(tabPlacement, runCount,
+ maxTabWidth);
+ compX = insets.left + contentBorderInsets.left;
+ compY = insets.top + contentBorderInsets.top;
+ break;
+ case BOTTOM:
+ tabAreaHeight = calculateTabAreaHeight(tabPlacement, runCount,
+ maxTabHeight);
+ compX = insets.left + contentBorderInsets.left;
+ compY = insets.top + contentBorderInsets.top;
+ break;
+ case TOP:
+ default:
+ tabAreaHeight = calculateTabAreaHeight(tabPlacement, runCount,
+ maxTabHeight);
+ compX = insets.left + contentBorderInsets.left;
+ compY = tabAreaHeight + insets.top + contentBorderInsets.top;
+ }
+ Rectangle bounds = tabPane.getBounds();
+ int compWidth = bounds.width - tabAreaWidth - insets.left
+ - insets.right - contentBorderInsets.left
+ - contentBorderInsets.right;
+ int compHeight = bounds.height - tabAreaHeight - insets.top
+ - insets.bottom - contentBorderInsets.top
+ - contentBorderInsets.bottom;
+
+
+ for (int i = 0; i < childCount; ++i)
+ {
+ Component c = tabPane.getComponent(i);
+ c.setBounds(compX, compY, compWidth, compHeight);
+ }
+ }
}
/**
@@ -1288,6 +1339,12 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
protected int[] tabRuns;
/**
+ * Indicates if the layout of the tab runs is ok or not. This is package
+ * private to avoid a synthetic accessor method.
+ */
+ boolean tabRunsDirty;
+
+ /**
* This is the keystroke for moving down.
*
* @deprecated 1.3
@@ -1343,6 +1400,17 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
transient Rectangle contentRect;
/**
+ * The index over which the mouse is currently moving.
+ */
+ private int rolloverTab;
+
+ /**
+ * Determines if tabs are painted opaque or not. This can be adjusted using
+ * the UIManager property 'TabbedPane.tabsOpaque'.
+ */
+ private boolean tabsOpaque;
+
+ /**
* Creates a new BasicTabbedPaneUI object.
*/
public BasicTabbedPaneUI()
@@ -1557,6 +1625,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
selectedTabPadInsets = UIManager.getInsets("TabbedPane.tabbedPaneTabPadInsets");
tabAreaInsets = UIManager.getInsets("TabbedPane.tabAreaInsets");
contentBorderInsets = UIManager.getInsets("TabbedPane.tabbedPaneContentBorderInsets");
+ tabsOpaque = UIManager.getBoolean("TabbedPane.tabsOpaque");
calcRect = new Rectangle();
tabRuns = new int[10];
@@ -1585,9 +1654,10 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
lightHighlight = null;
highlight = null;
- tabPane.setBackground(null);
- tabPane.setForeground(null);
- tabPane.setFont(null);
+ // Install UI colors and fonts.
+ LookAndFeel.installColorsAndFont(tabPane, "TabbedPane.background",
+ "TabbedPane.foreground",
+ "TabbedPane.font");
}
/**
@@ -1666,6 +1736,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
* This method installs keyboard actions for the JTabbedPane.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Implement.
}
@@ -1674,6 +1745,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
* This method uninstalls keyboard actions for the JTabbedPane.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Implement.
}
@@ -1710,6 +1782,9 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
public void paint(Graphics g, JComponent c)
{
+ if (!tabPane.isValid())
+ tabPane.validate();
+
if (tabPane.getTabCount() == 0)
return;
if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT)
@@ -1735,42 +1810,26 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
// Please note: the ordering of the painting is important.
// we WANT to paint the outermost run first and then work our way in.
int tabCount = tabPane.getTabCount();
- int currRun = 1;
-
- if (tabCount < 1)
- return;
-
- if (runCount > 1)
- currRun = 0;
- for (int i = 0; i < runCount; i++)
+ for (int i = runCount - 1; i >= 0; --i)
{
- int first = lastTabInRun(tabCount, getPreviousTabRun(currRun)) + 1;
- if (isScroll)
- first = currentScrollLocation;
- else if (first == tabCount)
- first = 0;
- int last = lastTabInRun(tabCount, currRun);
- if (isScroll)
+ int start = tabRuns[i];
+ int next;
+ if (i == runCount - 1)
+ next = tabRuns[0];
+ else
+ next = tabRuns[i + 1];
+ int end = (next != 0 ? next - 1 : tabCount - 1);
+ for (int j = start; j <= end; ++j)
{
- for (int k = first; k < tabCount; k++)
+ if (j != selectedIndex)
{
- if (rects[k].x + rects[k].width - rects[first].x > viewport
- .getWidth())
- {
- last = k;
- break;
- }
+ paintTab(g, tabPlacement, rects, j, ir, tr);
}
}
-
- for (int j = first; j <= last; j++)
- {
- if (j != selectedIndex || isScroll)
- paintTab(g, tabPlacement, rects, j, ir, tr);
- }
- currRun = getPreviousTabRun(currRun);
}
- if (! isScroll)
+
+ // Paint selected tab in front of every other tab.
+ if (selectedIndex >= 0)
paintTab(g, tabPlacement, rects, selectedIndex, ir, tr);
}
@@ -1788,49 +1847,34 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects,
int tabIndex, Rectangle iconRect, Rectangle textRect)
{
- FontMetrics fm = getFontMetrics();
- Icon icon = getIconForTab(tabIndex);
- String title = tabPane.getTitleAt(tabIndex);
+ Rectangle rect = rects[tabIndex];
boolean isSelected = tabIndex == tabPane.getSelectedIndex();
- calcRect = getTabBounds(tabPane, tabIndex);
-
- int x = calcRect.x;
- int y = calcRect.y;
- int w = calcRect.width;
- int h = calcRect.height;
- if (getRunForTab(tabPane.getTabCount(), tabIndex) == 1)
+ // Paint background if necessary.
+ if (tabsOpaque || tabPane.isOpaque())
{
- Insets insets = getTabAreaInsets(tabPlacement);
- switch (tabPlacement)
- {
- case TOP:
- h += insets.bottom;
- break;
- case LEFT:
- w += insets.right;
- break;
- case BOTTOM:
- y -= insets.top;
- h += insets.top;
- break;
- case RIGHT:
- x -= insets.left;
- w += insets.left;
- break;
- }
+ paintTabBackground(g, tabPlacement, tabIndex, rect.x, rect.y,
+ rect.width, rect.height, isSelected);
}
- layoutLabel(tabPlacement, fm, tabIndex, title, icon, calcRect, iconRect,
- textRect, isSelected);
- paintTabBackground(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
- paintTabBorder(g, tabPlacement, tabIndex, x, y, w, h, isSelected);
+ // Paint border.
+ paintTabBorder(g, tabPlacement, tabIndex, rect.x, rect.y, rect.width,
+ rect.height, isSelected);
- // FIXME: Paint little folding corner and jagged edge clipped tab.
- if (icon != null)
- paintIcon(g, tabPlacement, tabIndex, icon, iconRect, isSelected);
- if (title != null && ! title.equals(""))
- paintText(g, tabPlacement, tabPane.getFont(), fm, tabIndex, title,
+
+ // Layout label.
+ FontMetrics fm = getFontMetrics();
+ Icon icon = getIconForTab(tabIndex);
+ String title = tabPane.getTitleAt(tabIndex);
+ layoutLabel(tabPlacement, fm, tabIndex, title, icon, rect, iconRect,
textRect, isSelected);
+ // Paint the text.
+ paintText(g, tabPlacement, tabPane.getFont(), fm, tabIndex, title,
+ textRect, isSelected);
+ // Paint icon if necessary.
+ paintIcon(g, tabPlacement, tabIndex, icon, iconRect, isSelected);
+ // Paint focus indicator.
+ paintFocusIndicator(g, tabPlacement, rects, tabIndex, iconRect, textRect,
+ isSelected);
}
/**
@@ -1902,6 +1946,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
FontMetrics metrics, int tabIndex, String title,
Rectangle textRect, boolean isSelected)
{
+ g.setFont(font);
View textView = getTextViewForTab(tabIndex);
if (textView != null)
{
@@ -1909,54 +1954,48 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
return;
}
- Color fg = tabPane.getForegroundAt(tabIndex);
- if (fg == null)
- fg = tabPane.getForeground();
- Color bg = tabPane.getBackgroundAt(tabIndex);
- if (bg == null)
- bg = tabPane.getBackground();
-
- Color saved_color = g.getColor();
- Font f = g.getFont();
- g.setFont(font);
+ int ascent = metrics.getAscent();
- if (tabPane.isEnabledAt(tabIndex))
+ int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);
+ if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex))
{
+ Color fg = tabPane.getForegroundAt(tabIndex);
+ if (isSelected && (fg instanceof UIResource))
+ {
+ Color selectionForeground =
+ UIManager.getColor("TabbedPane.selectionForeground");
+ if (selectionForeground != null)
+ fg = selectionForeground;
+ }
g.setColor(fg);
- int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);
-
if (mnemIndex != -1)
BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
textRect.x,
- textRect.y
- + metrics.getAscent());
+ textRect.y + ascent);
else
- g.drawString(title, textRect.x, textRect.y + metrics.getAscent());
+ g.drawString(title, textRect.x, textRect.y + ascent);
}
else
{
+ Color bg = tabPane.getBackgroundAt(tabIndex);
g.setColor(bg.brighter());
-
- int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);
-
if (mnemIndex != -1)
BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
- textRect.x, textRect.y);
+ textRect.x, textRect.y
+ + ascent);
else
- g.drawString(title, textRect.x, textRect.y);
+ g.drawString(title, textRect.x, textRect.y + ascent);
g.setColor(bg.darker());
if (mnemIndex != -1)
BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex,
textRect.x + 1,
- textRect.y + 1);
+ textRect.y + 1
+ + ascent);
else
- g.drawString(title, textRect.x + 1, textRect.y + 1);
+ g.drawString(title, textRect.x + 1, textRect.y + 1 + ascent);
}
-
- g.setColor(saved_color);
- g.setFont(f);
}
/**
@@ -2009,14 +2048,45 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
Rectangle iconRect, Rectangle textRect,
boolean isSelected)
{
- Color saved = g.getColor();
- calcRect = iconRect.union(textRect);
-
- g.setColor(focus);
-
- g.drawRect(calcRect.x, calcRect.y, calcRect.width, calcRect.height);
-
- g.setColor(saved);
+ if (tabPane.hasFocus() && isSelected)
+ {
+ Rectangle rect = rects[tabIndex];
+ // The focus rectangle.
+ int x;
+ int y;
+ int w;
+ int h;
+
+ g.setColor(focus);
+ switch (tabPlacement)
+ {
+ case LEFT:
+ x = rect.x + 3;
+ y = rect.y + 3;
+ w = rect.width - 5;
+ h = rect.height - 6;
+ break;
+ case RIGHT:
+ x = rect.x + 2;
+ y = rect.y + 3;
+ w = rect.width - 6;
+ h = rect.height - 5;
+ break;
+ case BOTTOM:
+ x = rect.x + 3;
+ y = rect.y + 2;
+ w = rect.width - 6;
+ h = rect.height - 5;
+ break;
+ case TOP:
+ default:
+ x = rect.x + 3;
+ y = rect.y + 3;
+ w = rect.width - 6;
+ h = rect.height - 5;
+ }
+ BasicGraphicsUtils.drawDashedRect(g, x, y, w, h);
+ }
}
/**
@@ -2109,10 +2179,44 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
protected void paintContentBorder(Graphics g, int tabPlacement,
int selectedIndex)
{
- int x = contentRect.x;
- int y = contentRect.y;
- int w = contentRect.width;
- int h = contentRect.height;
+ int width = tabPane.getWidth();
+ int height = tabPane.getHeight();
+ Insets insets = tabPane.getInsets();
+ Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
+
+ // Calculate coordinates of content area.
+ int x = insets.left;
+ int y = insets.top;
+ int w = width - insets.left - insets.right;
+ int h = height - insets.top - insets.bottom;
+
+ switch (tabPlacement)
+ {
+ case LEFT:
+ x += calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);
+ w -= (x - insets.left);
+ break;
+ case RIGHT:
+ w -= calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);
+ break;
+ case BOTTOM:
+ h -= calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);
+ break;
+ case TOP:
+ default:
+ y += calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);
+ h -= (y - insets.top);
+ }
+
+ // Fill background if necessary.
+ if (tabPane.isOpaque())
+ {
+ Color bg = UIManager.getColor("TabbedPane.contentAreaColor");
+ g.setColor(bg);
+ g.fillRect(x, y, w, h);
+ }
+
+ // Paint border.
paintContentBorderTopEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderLeftEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderBottomEdge(g, tabPlacement, selectedIndex, x, y, w, h);
@@ -2332,23 +2436,23 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
public int tabForCoordinate(JTabbedPane pane, int x, int y)
{
- Point p = new Point(x, y);
+ if (! tabPane.isValid())
+ tabPane.validate();
+
int tabCount = tabPane.getTabCount();
- int currRun = 1;
- for (int i = 0; i < runCount; i++)
+ int index = -1;
+ for (int i = 0; i < tabCount; ++i)
{
- int first = lastTabInRun(tabCount, getPreviousTabRun(currRun)) + 1;
- if (first == tabCount)
- first = 0;
- int last = lastTabInRun(tabCount, currRun);
- for (int j = first; j <= last; j++)
+ if (rects[i].contains(x, y))
{
- if (getTabBounds(pane, j).contains(p))
- return j;
+ index = i;
+ break;
}
- currRun = getNextTabRun(currRun);
}
- return -1;
+
+ // FIXME: Handle scrollable tab layout.
+
+ return index;
}
/**
@@ -2455,10 +2559,23 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
protected int lastTabInRun(int tabCount, int run)
{
- if (tabRuns[run] == 0)
- return tabCount - 1;
+ int lastTab;
+ if (runCount == 1)
+ lastTab = tabCount - 1;
else
- return tabRuns[run] - 1;
+ {
+ int nextRun;
+ if (run == runCount - 1)
+ nextRun = 0;
+ else
+ nextRun = run + 1;
+
+ if (tabRuns[nextRun] == 0)
+ lastTab = tabCount - 1;
+ else
+ lastTab = tabRuns[nextRun] - 1;
+ }
+ return lastTab;
}
/**
@@ -2554,24 +2671,14 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
protected int calculateTabHeight(int tabPlacement, int tabIndex,
int fontHeight)
{
- Icon icon = getIconForTab(tabIndex);
- Insets insets = getTabInsets(tabPlacement, tabIndex);
+ // FIXME: Handle HTML somehow.
- int height = 0;
+ int height = fontHeight;
+ Icon icon = getIconForTab(tabIndex);
+ Insets tabInsets = getTabInsets(tabPlacement, tabIndex);
if (icon != null)
- {
- Rectangle vr = new Rectangle();
- Rectangle ir = new Rectangle();
- Rectangle tr = new Rectangle();
- layoutLabel(tabPlacement, getFontMetrics(), tabIndex,
- tabPane.getTitleAt(tabIndex), icon, vr, ir, tr,
- tabIndex == tabPane.getSelectedIndex());
- height = tr.union(ir).height;
- }
- else
- height = fontHeight;
-
- height += insets.top + insets.bottom;
+ height = Math.max(height, icon.getIconHeight());
+ height += tabInsets.top + tabInsets.bottom + 2;
return height;
}
@@ -2704,9 +2811,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
*/
protected Insets getTabInsets(int tabPlacement, int tabIndex)
{
- Insets target = new Insets(0, 0, 0, 0);
- rotateInsets(tabInsets, target, tabPlacement);
- return target;
+ return tabInsets;
}
/**
@@ -3068,4 +3173,33 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants
break;
}
}
+
+ /**
+ * Sets the tab which should be highlighted when in rollover mode. And
+ * <code>index</code> of <code>-1</code> means that the rollover tab
+ * is deselected (i.e. the mouse is outside of the tabarea).
+ *
+ * @param index the index of the tab that is under the mouse, <code>-1</code>
+ * for no tab
+ *
+ * @since 1.5
+ */
+ protected void setRolloverTab(int index)
+ {
+ rolloverTab = index;
+ }
+
+ /**
+ * Retunrs the index of the tab over which the mouse is currently moving,
+ * or <code>-1</code> for no tab.
+ *
+ * @return the index of the tab over which the mouse is currently moving,
+ * or <code>-1</code> for no tab
+ *
+ * @since 1.5
+ */
+ protected int getRolloverTab()
+ {
+ return rolloverTab;
+ }
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java
index 1e8e39f..cfbebda 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
@@ -96,7 +98,12 @@ public class BasicTableHeaderUI extends TableHeaderUI
/**
* The header cell border.
*/
- protected Border cellBorder;
+ private Border cellBorder;
+
+ /**
+ * Original mouse cursor prior to resizing.
+ */
+ private Cursor originalCursor;
/**
* If not null, one of the columns is currently being dragged.
@@ -243,6 +250,7 @@ public class BasicTableHeaderUI extends TableHeaderUI
if (onBoundary)
{
+ originalCursor = header.getCursor();
if (p < x)
header.setCursor(Cursor.getPredefinedCursor
(Cursor.W_RESIZE_CURSOR));
@@ -252,7 +260,7 @@ public class BasicTableHeaderUI extends TableHeaderUI
}
else
{
- header.setCursor(Cursor.getDefaultCursor());
+ header.setCursor(originalCursor);
header.setResizingColumn(null);
}
@@ -343,7 +351,7 @@ public class BasicTableHeaderUI extends TableHeaderUI
showingResizeCursor = false;
if (timer != null)
timer.stop();
- header.setCursor(Cursor.getDefaultCursor());
+ header.setCursor(originalCursor);
}
/**
@@ -415,6 +423,7 @@ public class BasicTableHeaderUI extends TableHeaderUI
}
protected void installKeyboardActions()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -447,6 +456,7 @@ public class BasicTableHeaderUI extends TableHeaderUI
}
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java
index 8360a9e..ef491cb 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
@@ -88,7 +90,7 @@ public class BasicTableUI extends TableUI
protected FocusListener focusListener;
protected KeyListener keyListener;
- protected MouseInputListener mouseInputListener;
+ protected MouseInputListener mouseInputListener;
protected CellRendererPane rendererPane;
protected JTable table;
@@ -115,6 +117,8 @@ public class BasicTableUI extends TableUI
/**
* Receives notification that a key has been pressed and released.
+ * Activates the editing session for the focused cell by pressing the
+ * character keys.
*
* @param event the key event
*/
@@ -122,6 +126,16 @@ public class BasicTableUI extends TableUI
{
// Key events should be handled through the InputMap/ActionMap mechanism
// since JDK1.3. This class is only there for backwards compatibility.
+
+ // Editor activation is a specific kind of response to ''any''
+ // character key. Hence it is handled here.
+ if (!table.isEditing() && table.isEnabled())
+ {
+ int r = table.getSelectedRow();
+ int c = table.getSelectedColumn();
+ if (table.isCellEditable(r, c))
+ table.editCellAt(r, c);
+ }
}
/**
@@ -509,11 +523,9 @@ public class BasicTableUI extends TableUI
if (command.equals("selectPreviousRowExtendSelection"))
{
rowModel.setLeadSelectionIndex(Math.max(rowLead - 1, 0));
- colModel.setLeadSelectionIndex(colLead);
}
else if (command.equals("selectLastColumn"))
{
- rowModel.setSelectionInterval(rowLead, rowLead);
colModel.setSelectionInterval(colMax, colMax);
}
else if (command.equals("startEditing"))
@@ -524,53 +536,43 @@ public class BasicTableUI extends TableUI
else if (command.equals("selectFirstRowExtendSelection"))
{
rowModel.setLeadSelectionIndex(0);
- colModel.setLeadSelectionIndex(colLead);
}
else if (command.equals("selectFirstColumn"))
{
- rowModel.setSelectionInterval(rowLead, rowLead);
colModel.setSelectionInterval(0, 0);
}
else if (command.equals("selectFirstColumnExtendSelection"))
{
colModel.setLeadSelectionIndex(0);
- rowModel.setLeadSelectionIndex(rowLead);
}
else if (command.equals("selectLastRow"))
{
rowModel.setSelectionInterval(rowMax,rowMax);
- colModel.setSelectionInterval(colLead, colLead);
}
else if (command.equals("selectNextRowExtendSelection"))
{
rowModel.setLeadSelectionIndex(Math.min(rowLead + 1, rowMax));
- colModel.setLeadSelectionIndex(colLead);
}
else if (command.equals("selectFirstRow"))
{
rowModel.setSelectionInterval(0,0);
- colModel.setSelectionInterval(colLead, colLead);
}
else if (command.equals("selectNextColumnExtendSelection"))
{
colModel.setLeadSelectionIndex(Math.min(colLead + 1, colMax));
- rowModel.setLeadSelectionIndex(rowLead);
}
else if (command.equals("selectLastColumnExtendSelection"))
{
colModel.setLeadSelectionIndex(colMax);
- rowModel.setLeadSelectionIndex(rowLead);
}
else if (command.equals("selectPreviousColumnExtendSelection"))
{
colModel.setLeadSelectionIndex(Math.max(colLead - 1, 0));
- rowModel.setLeadSelectionIndex(rowLead);
}
else if (command.equals("selectNextRow"))
{
rowModel.setSelectionInterval(Math.min(rowLead + 1, rowMax),
Math.min(rowLead + 1, rowMax));
- colModel.setSelectionInterval(colLead,colLead);
}
else if (command.equals("scrollUpExtendSelection"))
{
@@ -589,7 +591,6 @@ public class BasicTableUI extends TableUI
{
rowModel.setSelectionInterval(Math.max(rowLead - 1, 0),
Math.max(rowLead - 1, 0));
- colModel.setSelectionInterval(colLead,colLead);
}
else if (command.equals("scrollRightChangeSelection"))
{
@@ -606,7 +607,6 @@ public class BasicTableUI extends TableUI
}
else if (command.equals("selectPreviousColumn"))
{
- rowModel.setSelectionInterval(rowLead,rowLead);
colModel.setSelectionInterval(Math.max(colLead - 1, 0),
Math.max(colLead - 1, 0));
}
@@ -715,7 +715,6 @@ public class BasicTableUI extends TableUI
}
else if (command.equals("selectNextColumn"))
{
- rowModel.setSelectionInterval(rowLead,rowLead);
colModel.setSelectionInterval(Math.min(colLead + 1, colMax),
Math.min(colLead + 1, colMax));
}
@@ -903,7 +902,6 @@ public class BasicTableUI extends TableUI
table.scrollRectToVisible
(table.getCellRect(rowModel.getLeadSelectionIndex(),
colModel.getLeadSelectionIndex(), false));
- table.repaint();
}
/**
@@ -1172,6 +1170,7 @@ public class BasicTableUI extends TableUI
}
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
@@ -1247,16 +1246,18 @@ public class BasicTableUI extends TableUI
if (rn == -1)
rn = table.getRowCount() - 1;
+ int columnMargin = table.getColumnModel().getColumnMargin();
+ int rowMargin = table.getRowMargin();
+
TableColumnModel cmodel = table.getColumnModel();
int [] widths = new int[cn+1];
for (int i = c0; i <=cn ; i++)
{
- widths[i] = cmodel.getColumn(i).getWidth();
+ widths[i] = cmodel.getColumn(i).getWidth() - columnMargin;
}
Rectangle bounds = table.getCellRect(r0, c0, false);
- bounds.height = table.getRowHeight()+table.getRowMargin();
-
+
// The left boundary of the area being repainted.
int left = bounds.x;
@@ -1266,9 +1267,6 @@ public class BasicTableUI extends TableUI
// The bottom boundary of the area being repainted.
int bottom;
- // The cell height.
- int height = bounds.height;
-
// paint the cell contents
Color grid = table.getGridColor();
for (int r = r0; r <= rn; ++r)
@@ -1277,25 +1275,28 @@ public class BasicTableUI extends TableUI
{
bounds.width = widths[c];
paintCell(gfx, r, c, bounds, table.getCellRenderer(r, c));
- bounds.x += widths[c];
+ bounds.x += widths[c] + columnMargin;
}
- bounds.y += height;
bounds.x = left;
+ bounds.y += table.getRowHeight(r) + rowMargin;
+ // Update row height for tables with custom heights.
+ bounds.height = table.getRowHeight(r + 1);
}
- bottom = bounds.y;
+ bottom = bounds.y - rowMargin;
// paint vertical grid lines
if (grid != null && table.getShowVerticalLines())
{
Color save = gfx.getColor();
gfx.setColor(grid);
- int x = left;
-
+ int x = left - columnMargin;
for (int c = c0; c <= cn; ++c)
{
+ // The vertical grid is draw right from the cells, so we
+ // add before drawing.
+ x += widths[c] + columnMargin;
gfx.drawLine(x, top, x, bottom);
- x += widths[c];
}
gfx.setColor(save);
}
@@ -1305,11 +1306,13 @@ public class BasicTableUI extends TableUI
{
Color save = gfx.getColor();
gfx.setColor(grid);
- int y = top;
+ int y = top - rowMargin;
for (int r = r0; r <= rn; ++r)
{
+ // The horizontal grid is draw below the cells, so we
+ // add before drawing.
+ y += table.getRowHeight(r) + rowMargin;
gfx.drawLine(left, y, p2.x, y);
- y += height;
}
gfx.setColor(save);
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java
index 36854e0..93e119b 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java
@@ -1,5 +1,5 @@
/* BasicTextAreaUI.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -108,6 +108,9 @@ public class BasicTextAreaUI extends BasicTextUI
JTextArea comp = (JTextArea)getComponent();
if (ev.getPropertyName() == "lineWrap"
|| ev.getPropertyName() == "wrapStyleWord")
- modelChanged();
+ {
+ // Changes the View (without modifying the document or it's listeners).
+ setView(create(textComponent.getDocument().getDefaultRootElement()));
+ }
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java
index 4e2ca9f..89c4e5a 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java
@@ -1,5 +1,5 @@
/* BasicTextFieldUI.java
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,7 @@ import java.beans.PropertyChangeEvent;
import javax.swing.JComponent;
import javax.swing.UIDefaults;
+import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.text.Element;
import javax.swing.text.FieldView;
@@ -83,6 +84,9 @@ public class BasicTextFieldUI extends BasicTextUI
* Receives notification whenever one of the text component's bound
* properties changes. Here we check for the editable and enabled
* properties and adjust the background color accordingly.
+ *
+ * <p>The colors are only changed if they are not a
+ * <code>ColorUIResource</code>.</p>
*
* @param event the property change event
*/
@@ -91,10 +95,11 @@ public class BasicTextFieldUI extends BasicTextUI
if (event.getPropertyName().equals("editable"))
{
boolean editable = ((Boolean) event.getNewValue()).booleanValue();
- if (editable)
- textComponent.setBackground(background);
- else
- textComponent.setBackground(inactiveBackground);
+
+ // Changing the color only if the current background is an instance of
+ // ColorUIResource is the behavior of the RI.
+ if (textComponent.getBackground() instanceof ColorUIResource)
+ textComponent.setBackground(editable ? background : inactiveBackground);
}
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java
index beb1a6d..3b620f0 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java
@@ -38,14 +38,20 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
+import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
@@ -55,7 +61,6 @@ import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
-import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
@@ -63,7 +68,6 @@ import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.plaf.ActionMapUIResource;
-import javax.swing.plaf.InputMapUIResource;
import javax.swing.plaf.TextUI;
import javax.swing.plaf.UIResource;
import javax.swing.text.AbstractDocument;
@@ -436,6 +440,9 @@ public abstract class BasicTextUI extends TextUI
*/
public void changedUpdate(DocumentEvent ev)
{
+ // Updates are forwarded to the View even if 'getVisibleEditorRect'
+ // method returns null. This means the View classes have to be
+ // aware of that possibility.
rootView.changedUpdate(ev, getVisibleEditorRect(),
rootView.getViewFactory());
}
@@ -447,6 +454,9 @@ public abstract class BasicTextUI extends TextUI
*/
public void insertUpdate(DocumentEvent ev)
{
+ // Updates are forwarded to the View even if 'getVisibleEditorRect'
+ // method returns null. This means the View classes have to be
+ // aware of that possibility.
rootView.insertUpdate(ev, getVisibleEditorRect(),
rootView.getViewFactory());
}
@@ -458,6 +468,9 @@ public abstract class BasicTextUI extends TextUI
*/
public void removeUpdate(DocumentEvent ev)
{
+ // Updates are forwarded to the View even if 'getVisibleEditorRect'
+ // method returns null. This means the View classes have to be
+ // aware of that possibility.
rootView.removeUpdate(ev, getVisibleEditorRect(),
rootView.getViewFactory());
}
@@ -546,7 +559,6 @@ public abstract class BasicTextUI extends TextUI
public void installUI(final JComponent c)
{
super.installUI(c);
- c.setOpaque(true);
textComponent = (JTextComponent) c;
Document doc = textComponent.getDocument();
@@ -608,6 +620,44 @@ public abstract class BasicTextUI extends TextUI
public void focusLost(FocusEvent e)
{
textComponent.repaint();
+
+ // Integrates Swing text components with the system clipboard:
+ // The idea is that if one wants to copy text around X11-style
+ // (select text and middle-click in the target component) the focus
+ // will move to the new component which gives the old focus owner the
+ // possibility to paste its selection into the clipboard.
+ if (!e.isTemporary()
+ && textComponent.getSelectionStart()
+ != textComponent.getSelectionEnd())
+ {
+ SecurityManager sm = System.getSecurityManager();
+ try
+ {
+ if (sm != null)
+ sm.checkSystemClipboardAccess();
+
+ Clipboard cb = Toolkit.getDefaultToolkit().getSystemSelection();
+ if (cb != null)
+ {
+ StringSelection selection = new StringSelection(textComponent.getSelectedText());
+ cb.setContents(selection, selection);
+ }
+ }
+ catch (SecurityException se)
+ {
+ // Not allowed to access the clipboard: Ignore and
+ // do not access it.
+ }
+ catch (HeadlessException he)
+ {
+ // There is no AWT: Ignore and do not access the
+ // clipboard.
+ }
+ catch (IllegalStateException ise)
+ {
+ // Clipboard is currently unavaible.
+ }
+ }
}
};
@@ -655,33 +705,23 @@ public abstract class BasicTextUI extends TextUI
*/
protected Keymap createKeymap()
{
- // FIXME: It seems to me that this method implementation is wrong. It seems
- // to fetch the focusInputMap and transform it to the KeyBinding/Keymap
- // implemenation. I would think that it should be done the other way,
- // fetching the keybindings (from prefix + ".bindings") and transform
- // it to the newer InputMap/ActionMap implementation.
- JTextComponent.KeyBinding[] bindings = null;
- String prefix = getPropertyPrefix();
- InputMapUIResource m = (InputMapUIResource) UIManager.get(prefix + ".focusInputMap");
- if (m != null)
+ String keymapName = getKeymapName();
+ Keymap keymap = JTextComponent.getKeymap(keymapName);
+ if (keymap == null)
{
- KeyStroke[] keys = m.keys();
- int len = keys.length;
- bindings = new JTextComponent.KeyBinding[len];
- for (int i = 0; i < len; i++)
+ Keymap parentMap =
+ JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP);
+ keymap = JTextComponent.addKeymap(keymapName, parentMap);
+ Object val = UIManager.get(getPropertyPrefix() + ".keyBindings");
+ if (val != null && val instanceof JTextComponent.KeyBinding[])
{
- KeyStroke curr = keys[i];
- bindings[i] = new JTextComponent.KeyBinding(curr,
- (String) m.get(curr));
+ JTextComponent.KeyBinding[] bindings =
+ (JTextComponent.KeyBinding[]) val;
+ JTextComponent.loadKeymap(keymap, bindings,
+ getComponent().getActions());
}
}
- if (bindings == null)
- bindings = new JTextComponent.KeyBinding[0];
-
- Keymap km = JTextComponent.addKeymap(getKeymapName(),
- JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP));
- JTextComponent.loadKeymap(km, bindings, textComponent.getActions());
- return km;
+ return keymap;
}
/**
@@ -689,11 +729,8 @@ public abstract class BasicTextUI extends TextUI
*/
protected void installKeyboardActions()
{
- // load key bindings for the older interface
- Keymap km = JTextComponent.getKeymap(getKeymapName());
- if (km == null)
- km = createKeymap();
- textComponent.setKeymap(km);
+ // This is only there for backwards compatibility.
+ textComponent.setKeymap(createKeymap());
// load any bindings for the newer InputMap / ActionMap interface
SwingUtilities.replaceUIInputMap(textComponent, JComponent.WHEN_FOCUSED,
@@ -794,6 +831,7 @@ public abstract class BasicTextUI extends TextUI
* this UI.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: Uninstall keyboard actions here.
}
@@ -986,6 +1024,10 @@ public abstract class BasicTextUI extends TextUI
public void damageRange(JTextComponent t, int p0, int p1,
Position.Bias firstBias, Position.Bias secondBias)
{
+ // Do nothing if the component cannot be properly displayed.
+ if (t.getWidth() == 0 || t.getHeight() == 0)
+ return;
+
try
{
// Limit p0 and p1 to sane values to prevent unfriendly
@@ -1000,7 +1042,10 @@ public abstract class BasicTextUI extends TextUI
Rectangle l1 = modelToView(t, p0, firstBias);
Rectangle l2 = modelToView(t, p1, secondBias);
if (l1.y == l2.y)
- t.repaint(l1.union(l2));
+ {
+ SwingUtilities.computeUnion(l2.x, l2.y, l2.width, l2.height, l1);
+ t.repaint(l1);
+ }
else
{
// The two rectangles lie on different lines and we need a
@@ -1023,7 +1068,11 @@ public abstract class BasicTextUI extends TextUI
// we should stop searching for one.
int posBelow = Utilities.getPositionBelow(t, p0, l1.x);
- if (posBelow < p1 && posBelow != -1 && posBelow != p0)
+ int p1RowStart = Utilities.getRowStart(t, p1);
+
+ if (posBelow != -1
+ && posBelow != p0
+ && Utilities.getRowStart(t, posBelow) != p1RowStart)
{
// Take the rectangle of the offset we just found and grow it
// to the maximum width. Retain y because this is our start
@@ -1034,10 +1083,15 @@ public abstract class BasicTextUI extends TextUI
// Find further lines which have to be damaged completely.
int nextPosBelow = posBelow;
- while (nextPosBelow < p1 && nextPosBelow != -1 && posBelow != nextPosBelow)
+ while (nextPosBelow != -1
+ && posBelow != nextPosBelow
+ && Utilities.getRowStart(t, nextPosBelow) != p1RowStart)
{
posBelow = nextPosBelow;
nextPosBelow = Utilities.getPositionBelow(t, posBelow, l1.x);
+
+ if (posBelow == nextPosBelow)
+ break;
}
// Now posBelow is an offset on the last line which has to be damaged
// completely. (newPosBelow is on the same line as p1)
@@ -1099,7 +1153,12 @@ public abstract class BasicTextUI extends TextUI
Position.Bias[] biasRet)
throws BadLocationException
{
- return 0; // TODO: Implement me.
+ // A comment in the spec of NavigationFilter.getNextVisualPositionFrom()
+ // suggests that this method should be implemented by forwarding the call
+ // the root view.
+ return rootView.getNextVisualPositionFrom(pos, b,
+ getVisibleEditorRect(),
+ direction, biasRet);
}
/**
@@ -1155,7 +1214,10 @@ public abstract class BasicTextUI extends TextUI
public Rectangle modelToView(JTextComponent t, int pos, Position.Bias bias)
throws BadLocationException
{
- return rootView.modelToView(pos, getVisibleEditorRect(), bias).getBounds();
+ Rectangle r = getVisibleEditorRect();
+
+ return (r != null) ? rootView.modelToView(pos, r, bias).getBounds()
+ : null;
}
/**
@@ -1232,8 +1294,9 @@ public abstract class BasicTextUI extends TextUI
int width = textComponent.getWidth();
int height = textComponent.getHeight();
+ // Return null if the component has no valid size.
if (width <= 0 || height <= 0)
- return new Rectangle(0, 0, 0, 0);
+ return null;
Insets insets = textComponent.getInsets();
return new Rectangle(insets.left, insets.top,
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java
index 261db68..80fec6a 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.basic;
+import gnu.classpath.NotImplementedException;
+
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
@@ -60,6 +62,7 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Hashtable;
+import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
@@ -72,8 +75,8 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.Border;
+import javax.swing.border.EtchedBorder;
import javax.swing.event.MouseInputListener;
-import javax.swing.plaf.BorderUIResource.EtchedBorderUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.ToolBarUI;
import javax.swing.plaf.UIResource;
@@ -307,7 +310,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
*/
protected Border createNonRolloverBorder()
{
- return new EtchedBorderUIResource();
+ return new EtchedBorder();
}
/**
@@ -328,7 +331,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
*/
protected Border createRolloverBorder()
{
- return new EtchedBorderUIResource()
+ return new EtchedBorder()
{
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height)
@@ -577,6 +580,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
rolloverBorder = createRolloverBorder();
borders = new Hashtable();
+ setRolloverBorders(toolBar.isRollover());
fillHashtable();
}
@@ -595,7 +599,6 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
floatingBorderColor = UIManager.getColor("ToolBar.floatingForeground");
floatingColor = UIManager.getColor("ToolBar.floatingBackground");
- setRolloverBorders(toolBar.isRollover());
}
/**
@@ -603,6 +606,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
* by the look and feel.
*/
protected void installKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -707,9 +711,8 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
if (c instanceof JToolBar)
{
toolBar = (JToolBar) c;
- toolBar.setOpaque(true);
- installDefaults();
- installComponents();
+ installDefaults();
+ installComponents();
installListeners();
installKeyboardActions();
}
@@ -754,9 +757,9 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
*/
protected void setBorderToNonRollover(Component c)
{
- if (c instanceof JButton)
+ if (c instanceof AbstractButton)
{
- JButton b = (JButton) c;
+ AbstractButton b = (AbstractButton) c;
b.setRolloverEnabled(false);
b.setBorder(nonRolloverBorder);
}
@@ -875,8 +878,6 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
{
installNormalBorders(toolBar);
borders = null;
- rolloverBorder = null;
- nonRolloverBorder = null;
cachedBounds = null;
floatFrame = null;
@@ -902,6 +903,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
* This method uninstalls keyboard actions installed by the UI.
*/
protected void uninstallKeyboardActions()
+ throws NotImplementedException
{
// FIXME: implement.
}
@@ -1231,8 +1233,8 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants
public void propertyChange(PropertyChangeEvent e)
{
// FIXME: need name properties so can change floatFrame title.
- if (e.getPropertyName().equals("rollover"))
- setRolloverBorders(toolBar.isRollover());
+ if (e.getPropertyName().equals("rollover") && toolBar != null)
+ setRolloverBorders(toolBar.isRollover());
}
}
diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java
index 1c6e6c5..be61cca 100644
--- a/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java
+++ b/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java
@@ -1,5 +1,5 @@
/* BasicTreeUI.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@
package javax.swing.plaf.basic;
+import gnu.javax.swing.tree.GnuPath;
+
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
@@ -55,6 +57,7 @@ import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
+import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
@@ -76,7 +79,6 @@ import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
-import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
@@ -96,17 +98,16 @@ import javax.swing.plaf.ActionMapUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.InputMapUIResource;
import javax.swing.plaf.TreeUI;
-import javax.swing.text.Caret;
import javax.swing.tree.AbstractLayoutCache;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.FixedHeightLayoutCache;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
+import javax.swing.tree.VariableHeightLayoutCache;
/**
* A delegate providing the user interface for <code>JTree</code> according to
@@ -117,16 +118,17 @@ import javax.swing.tree.TreeSelectionModel;
* @author Sascha Brawer (brawer@dandelis.ch)
* @author Audrius Meskauskas (audriusa@bioinformatics.org)
*/
-public class BasicTreeUI extends TreeUI
+public class BasicTreeUI
+ extends TreeUI
{
/**
* The tree cell editing may be started by the single mouse click on the
* selected cell. To separate it from the double mouse click, the editing
- * session starts after this time (in ms) after that single click, and only
- * no other clicks were performed during that time.
+ * session starts after this time (in ms) after that single click, and only no
+ * other clicks were performed during that time.
*/
- static int WAIT_TILL_EDITING = 900;
-
+ static int WAIT_TILL_EDITING = 900;
+
/** Collapse Icon for the tree. */
protected transient Icon collapsedIcon;
@@ -251,39 +253,40 @@ public class BasicTreeUI extends TreeUI
int maxHeight = 0;
/** Listeners */
- private PropertyChangeListener propertyChangeListener;
+ PropertyChangeListener propertyChangeListener;
- private FocusListener focusListener;
+ FocusListener focusListener;
- private TreeSelectionListener treeSelectionListener;
+ TreeSelectionListener treeSelectionListener;
- private MouseListener mouseListener;
+ MouseListener mouseListener;
- private KeyListener keyListener;
+ KeyListener keyListener;
- private PropertyChangeListener selectionModelPropertyChangeListener;
+ PropertyChangeListener selectionModelPropertyChangeListener;
- private ComponentListener componentListener;
+ ComponentListener componentListener;
CellEditorListener cellEditorListener;
- private TreeExpansionListener treeExpansionListener;
+ TreeExpansionListener treeExpansionListener;
+
+ TreeModelListener treeModelListener;
- private TreeModelListener treeModelListener;
-
/**
* This timer fires the editing action after about 1200 ms if not reset during
- * that time. It handles the editing start with the single mouse click
- * (and not the double mouse click) on the selected tree node.
+ * that time. It handles the editing start with the single mouse click (and
+ * not the double mouse click) on the selected tree node.
*/
Timer startEditTimer;
-
+
/**
* The special value of the mouse event is sent indicating that this is not
* just the mouse click, but the mouse click on the selected node. Sending
* such event forces to start the cell editing session.
*/
- static final MouseEvent EDIT = new MouseEvent(new Label(), 7,7,7,7,7,7, false);
+ static final MouseEvent EDIT = new MouseEvent(new Label(), 7, 7, 7, 7, 7, 7,
+ false);
/**
* Creates a new BasicTreeUI object.
@@ -306,22 +309,21 @@ public class BasicTreeUI extends TreeUI
treeExpansionListener = createTreeExpansionListener();
treeModelListener = createTreeModelListener();
- editingRow = -1;
- lastSelectedRow = -1;
+ editingRow = - 1;
+ lastSelectedRow = - 1;
}
/**
* Returns an instance of the UI delegate for the specified component.
*
- * @param c
- * the <code>JComponent</code> for which we need a UI delegate for.
+ * @param c the <code>JComponent</code> for which we need a UI delegate for.
* @return the <code>ComponentUI</code> for c.
*/
public static ComponentUI createUI(JComponent c)
{
return new BasicTreeUI();
}
-
+
/**
* Returns the Hash color.
*
@@ -335,8 +337,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the Hash color.
*
- * @param color
- * the <code>Color</code> to set the Hash to.
+ * @param color the <code>Color</code> to set the Hash to.
*/
protected void setHashColor(Color color)
{
@@ -347,8 +348,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the left child's indent value.
*
- * @param newAmount
- * is the new indent value for the left child.
+ * @param newAmount is the new indent value for the left child.
*/
public void setLeftChildIndent(int newAmount)
{
@@ -368,8 +368,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the right child's indent value.
*
- * @param newAmount
- * is the new indent value for the right child.
+ * @param newAmount is the new indent value for the right child.
*/
public void setRightChildIndent(int newAmount)
{
@@ -389,8 +388,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the expanded icon.
*
- * @param newG
- * is the new expanded icon.
+ * @param newG is the new expanded icon.
*/
public void setExpandedIcon(Icon newG)
{
@@ -410,8 +408,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the collapsed icon.
*
- * @param newG
- * is the new collapsed icon.
+ * @param newG is the new collapsed icon.
*/
public void setCollapsedIcon(Icon newG)
{
@@ -431,8 +428,7 @@ public class BasicTreeUI extends TreeUI
/**
* Updates the componentListener, if necessary.
*
- * @param largeModel
- * sets this.largeModel to it.
+ * @param largeModel sets this.largeModel to it.
*/
protected void setLargeModel(boolean largeModel)
{
@@ -457,13 +453,12 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the row height.
*
- * @param rowHeight
- * is the height to set this.rowHeight to.
+ * @param rowHeight is the height to set this.rowHeight to.
*/
protected void setRowHeight(int rowHeight)
{
if (rowHeight == 0)
- rowHeight = Math.max(getMaxHeight(tree), 20);
+ rowHeight = getMaxHeight(tree);
treeState.setRowHeight(rowHeight);
}
@@ -474,15 +469,14 @@ public class BasicTreeUI extends TreeUI
*/
protected int getRowHeight()
{
- return treeState.getRowHeight();
+ return tree.getRowHeight();
}
/**
* Sets the TreeCellRenderer to <code>tcr</code>. This invokes
* <code>updateRenderer</code>.
*
- * @param tcr
- * is the new TreeCellRenderer.
+ * @param tcr is the new TreeCellRenderer.
*/
protected void setCellRenderer(TreeCellRenderer tcr)
{
@@ -507,13 +501,13 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the tree's model.
*
- * @param model
- * to set the treeModel to.
+ * @param model to set the treeModel to.
*/
protected void setModel(TreeModel model)
{
tree.setModel(model);
treeModel = tree.getModel();
+ treeState.setModel(treeModel);
}
/**
@@ -529,8 +523,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the root to being visible.
*
- * @param newValue
- * sets the visibility of the root
+ * @param newValue sets the visibility of the root
*/
protected void setRootVisible(boolean newValue)
{
@@ -550,8 +543,7 @@ public class BasicTreeUI extends TreeUI
/**
* Determines whether the node handles are to be displayed.
*
- * @param newValue
- * sets whether or not node handles should be displayed.
+ * @param newValue sets whether or not node handles should be displayed.
*/
protected void setShowsRootHandles(boolean newValue)
{
@@ -571,8 +563,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the cell editor.
*
- * @param editor
- * to set the cellEditor to.
+ * @param editor to set the cellEditor to.
*/
protected void setCellEditor(TreeCellEditor editor)
{
@@ -593,8 +584,7 @@ public class BasicTreeUI extends TreeUI
/**
* Configures the receiver to allow, or not allow, editing.
*
- * @param newValue
- * sets the receiver to allow editing if true.
+ * @param newValue sets the receiver to allow editing if true.
*/
protected void setEditable(boolean newValue)
{
@@ -615,8 +605,7 @@ public class BasicTreeUI extends TreeUI
* Resets the selection model. The appropriate listeners are installed on the
* model.
*
- * @param newLSM
- * resets the selection model.
+ * @param newLSM resets the selection model.
*/
protected void setSelectionModel(TreeSelectionModel newLSM)
{
@@ -642,35 +631,23 @@ public class BasicTreeUI extends TreeUI
* path will be drawn to. Will return null if any component in path is
* currently valid.
*
- * @param tree
- * is the current tree the path will be drawn to.
- * @param path
- * is the current path the tree to draw to.
+ * @param tree is the current tree the path will be drawn to.
+ * @param path is the current path the tree to draw to.
* @return the Rectangle enclosing the label portion that the last item in the
* path will be drawn to.
*/
public Rectangle getPathBounds(JTree tree, TreePath path)
{
- int row = -1;
- Object cell = null;
- if (path != null)
- {
- row = getRowForPath(tree, path);
- cell = path.getLastPathComponent();
- }
- return nodeDimensions.getNodeDimensions(cell, row, getLevel(cell),
- tree.isExpanded(path),
- new Rectangle());
+ return treeState.getBounds(path, new Rectangle());
}
/**
* Returns the max height of all the nodes in the tree.
*
- * @param tree -
- * the current tree
+ * @param tree - the current tree
* @return the max height.
*/
- private int getMaxHeight(JTree tree)
+ int getMaxHeight(JTree tree)
{
if (maxHeight != 0)
return maxHeight;
@@ -692,72 +669,47 @@ public class BasicTreeUI extends TreeUI
maxHeight = Math.max(maxHeight, iconHeight + gap);
}
-
+
+ treeState.setRowHeight(maxHeight);
return maxHeight;
}
/**
* Returns the path for passed in row. If row is not visible null is returned.
*
- * @param tree
- * is the current tree to return path for.
- * @param row
- * is the row number of the row to return.
+ * @param tree is the current tree to return path for.
+ * @param row is the row number of the row to return.
* @return the path for passed in row. If row is not visible null is returned.
*/
public TreePath getPathForRow(JTree tree, int row)
{
- if (treeModel != null && currentVisiblePath != null)
- {
- Object[] nodes = currentVisiblePath.getPath();
- if (row < nodes.length)
- return new TreePath(getPathToRoot(nodes[row], 0));
- }
- return null;
+ return treeState.getPathForRow(row);
}
/**
* Returns the row that the last item identified in path is visible at. Will
* return -1 if any of the elments in the path are not currently visible.
*
- * @param tree
- * is the current tree to return the row for.
- * @param path
- * is the path used to find the row.
+ * @param tree is the current tree to return the row for.
+ * @param path is the path used to find the row.
* @return the row that the last item identified in path is visible at. Will
* return -1 if any of the elments in the path are not currently
* visible.
*/
public int getRowForPath(JTree tree, TreePath path)
{
- int row = 0;
- Object dest = path.getLastPathComponent();
- int rowCount = getRowCount(tree);
- if (currentVisiblePath != null)
- {
- Object[] nodes = currentVisiblePath.getPath();
- while (row < rowCount)
- {
- if (dest.equals(nodes[row]))
- return row;
- row++;
- }
- }
- return -1;
+ return treeState.getRowForPath(path);
}
/**
* Returns the number of rows that are being displayed.
*
- * @param tree
- * is the current tree to return the number of rows for.
+ * @param tree is the current tree to return the number of rows for.
* @return the number of rows being displayed.
*/
public int getRowCount(JTree tree)
{
- if (currentVisiblePath != null)
- return currentVisiblePath.getPathCount();
- return 0;
+ return treeState.getRowCount();
}
/**
@@ -766,35 +718,21 @@ public class BasicTreeUI extends TreeUI
* valid path. If you need to test if the returned object is exactly at x,y
* you should get the bounds for the returned path and test x,y against that.
*
- * @param tree
- * the tree to search for the closest path
- * @param x
- * is the x coordinate of the location to search
- * @param y
- * is the y coordinate of the location to search
+ * @param tree the tree to search for the closest path
+ * @param x is the x coordinate of the location to search
+ * @param y is the y coordinate of the location to search
* @return the tree path closes to x,y.
*/
public TreePath getClosestPathForLocation(JTree tree, int x, int y)
{
- int row = Math.round(y / getMaxHeight(tree));
- TreePath path = getPathForRow(tree, row);
-
- // no row is visible at this node
- while (row > 0 && path == null)
- {
- --row;
- path = getPathForRow(tree, row);
- }
-
- return path;
+ return treeState.getPathClosestTo(x, y);
}
/**
* Returns true if the tree is being edited. The item that is being edited can
* be returned by getEditingPath().
*
- * @param tree
- * is the tree to check for editing.
+ * @param tree is the tree to check for editing.
* @return true if the tree is being edited.
*/
public boolean isEditing(JTree tree)
@@ -807,8 +745,7 @@ public class BasicTreeUI extends TreeUI
* being edited. Returns true if the editor allows the editing session to
* stop.
*
- * @param tree
- * is the tree to stop the editing on
+ * @param tree is the tree to stop the editing on
* @return true if the editor allows the editing session to stop.
*/
public boolean stopEditing(JTree tree)
@@ -818,32 +755,29 @@ public class BasicTreeUI extends TreeUI
completeEditing(false, false, true);
finish();
}
- return !isEditing(tree);
+ return ! isEditing(tree);
}
/**
* Cancels the current editing session.
*
- * @param tree
- * is the tree to cancel the editing session on.
+ * @param tree is the tree to cancel the editing session on.
*/
public void cancelEditing(JTree tree)
- {
- // There is no need to send the cancel message to the editor,
- // as the cancellation event itself arrives from it. This would
- // only be necessary when cancelling the editing programatically.
- completeEditing(false, false, false);
- finish();
+ {
+ // There is no need to send the cancel message to the editor,
+ // as the cancellation event itself arrives from it. This would
+ // only be necessary when cancelling the editing programatically.
+ completeEditing(false, false, false);
+ finish();
}
/**
* Selects the last item in path and tries to edit it. Editing will fail if
* the CellEditor won't allow it for the selected item.
*
- * @param tree
- * is the tree to edit on.
- * @param path
- * is the path in tree to edit on.
+ * @param tree is the tree to edit on.
+ * @param path is the path in tree to edit on.
*/
public void startEditingAtPath(JTree tree, TreePath path)
{
@@ -853,8 +787,7 @@ public class BasicTreeUI extends TreeUI
/**
* Returns the path to the element that is being editted.
*
- * @param tree
- * is the tree to get the editing path from.
+ * @param tree is the tree to get the editing path from.
* @return the path that is being edited.
*/
public TreePath getEditingPath(JTree tree)
@@ -902,7 +835,8 @@ public class BasicTreeUI extends TreeUI
/**
* Creates an instance of NodeDimensions that is able to determine the size of
- * a given node in the tree.
+ * a given node in the tree. The node dimensions must be created before
+ * configuring the layout cache.
*
* @return the NodeDimensions of a given node in the tree
*/
@@ -1018,7 +952,7 @@ public class BasicTreeUI extends TreeUI
*/
protected AbstractLayoutCache createLayoutCache()
{
- return new FixedHeightLayoutCache();
+ return new VariableHeightLayoutCache();
}
/**
@@ -1152,8 +1086,7 @@ public class BasicTreeUI extends TreeUI
* by getting the expanded descendants from the tree and forwarding to the
* tree state.
*
- * @param path
- * the path used to update the expanded states
+ * @param path the path used to update the expanded states
*/
protected void updateExpandedDescendants(TreePath path)
{
@@ -1165,8 +1098,7 @@ public class BasicTreeUI extends TreeUI
/**
* Returns a path to the last child of <code>parent</code>
*
- * @param parent
- * is the topmost path to specified
+ * @param parent is the topmost path to specified
* @return a path to the last child of parent
*/
protected TreePath getLastChildPath(TreePath parent)
@@ -1212,11 +1144,13 @@ public class BasicTreeUI extends TreeUI
/**
* Resets the treeState instance based on the tree we're providing the look
- * and feel for.
+ * and feel for. The node dimensions handler is required and must be created
+ * in advance.
*/
protected void configureLayoutCache()
{
treeState = createLayoutCache();
+ treeState.setNodeDimensions(nodeDimensions);
}
/**
@@ -1236,42 +1170,19 @@ public class BasicTreeUI extends TreeUI
*/
protected void updateCachedPreferredSize()
{
- int maxWidth = 0;
- updateCurrentVisiblePath();
- boolean isLeaf = false;
- if (currentVisiblePath != null)
- {
- Object[] path = currentVisiblePath.getPath();
- for (int i = 0; i < path.length; i++)
- {
- TreePath curr = new TreePath(getPathToRoot(path[i], 0));
- Rectangle bounds = getPathBounds(tree, curr);
- if (treeModel != null)
- isLeaf = treeModel.isLeaf(path[i]);
- if (!isLeaf && hasControlIcons())
- bounds.width += getCurrentControlIcon(curr).getIconWidth();
- maxWidth = Math.max(maxWidth, bounds.x + bounds.width);
- }
-
- maxHeight = 0;
- maxHeight = getMaxHeight(tree);
- preferredSize = new Dimension(maxWidth, (maxHeight * path.length));
- }
- else
- preferredSize = new Dimension(0, 0);
- validCachedPreferredSize = true;
+ validCachedPreferredSize = false;
}
/**
* Messaged from the VisibleTreeNode after it has been expanded.
*
- * @param path
- * is the path that has been expanded.
+ * @param path is the path that has been expanded.
*/
protected void pathWasExpanded(TreePath path)
{
validCachedPreferredSize = false;
- tree.repaint();
+ treeState.setExpandedState(path, true);
+ tree.repaint();
}
/**
@@ -1280,6 +1191,7 @@ public class BasicTreeUI extends TreeUI
protected void pathWasCollapsed(TreePath path)
{
validCachedPreferredSize = false;
+ treeState.setExpandedState(path, false);
tree.repaint();
}
@@ -1345,8 +1257,7 @@ public class BasicTreeUI extends TreeUI
/**
* Converts the modifiers.
*
- * @param mod -
- * modifier to convert
+ * @param mod - modifier to convert
* @returns the new modifier
*/
private int convertModifiers(int mod)
@@ -1354,27 +1265,27 @@ public class BasicTreeUI extends TreeUI
if ((mod & KeyEvent.SHIFT_DOWN_MASK) != 0)
{
mod |= KeyEvent.SHIFT_MASK;
- mod &= ~KeyEvent.SHIFT_DOWN_MASK;
+ mod &= ~ KeyEvent.SHIFT_DOWN_MASK;
}
if ((mod & KeyEvent.CTRL_DOWN_MASK) != 0)
{
mod |= KeyEvent.CTRL_MASK;
- mod &= ~KeyEvent.CTRL_DOWN_MASK;
+ mod &= ~ KeyEvent.CTRL_DOWN_MASK;
}
if ((mod & KeyEvent.META_DOWN_MASK) != 0)
{
mod |= KeyEvent.META_MASK;
- mod &= ~KeyEvent.META_DOWN_MASK;
+ mod &= ~ KeyEvent.META_DOWN_MASK;
}
if ((mod & KeyEvent.ALT_DOWN_MASK) != 0)
{
mod |= KeyEvent.ALT_MASK;
- mod &= ~KeyEvent.ALT_DOWN_MASK;
+ mod &= ~ KeyEvent.ALT_DOWN_MASK;
}
if ((mod & KeyEvent.ALT_GRAPH_DOWN_MASK) != 0)
{
mod |= KeyEvent.ALT_GRAPH_MASK;
- mod &= ~KeyEvent.ALT_GRAPH_DOWN_MASK;
+ mod &= ~ KeyEvent.ALT_GRAPH_DOWN_MASK;
}
return mod;
}
@@ -1399,16 +1310,16 @@ public class BasicTreeUI extends TreeUI
/**
* Install the UI for the component
*
- * @param c
- * the component to install UI for
+ * @param c the component to install UI for
*/
public void installUI(JComponent c)
{
tree = (JTree) c;
+ treeModel = tree.getModel();
+
prepareForUIInstall();
super.installUI(c);
installDefaults();
-
installComponents();
installKeyboardActions();
installListeners();
@@ -1419,6 +1330,8 @@ public class BasicTreeUI extends TreeUI
setModel(tree.getModel());
treeSelectionModel = tree.getSelectionModel();
+ setRootVisible(tree.isRootVisible());
+ treeState.setRootVisible(tree.isRootVisible());
completeUIInstall();
}
@@ -1436,8 +1349,7 @@ public class BasicTreeUI extends TreeUI
/**
* Uninstall the UI for the component
*
- * @param c
- * the component to uninstall UI for
+ * @param c the component to uninstall UI for
*/
public void uninstallUI(JComponent c)
{
@@ -1456,51 +1368,103 @@ public class BasicTreeUI extends TreeUI
* component is being painted. Subclasses should override this method and use
* the specified Graphics object to render the content of the component.
*
- * @param g
- * the Graphics context in which to paint
- * @param c
- * the component being painted; this argument is often ignored, but
+ * @param g the Graphics context in which to paint
+ * @param c the component being painted; this argument is often ignored, but
* might be used if the UI object is stateless and shared by multiple
* components
*/
public void paint(Graphics g, JComponent c)
{
JTree tree = (JTree) c;
- updateCurrentVisiblePath();
+
+ int rows = treeState.getRowCount();
+
+ if (rows == 0)
+ // There is nothing to do if the tree is empty.
+ return;
Rectangle clip = g.getClipBounds();
+
Insets insets = tree.getInsets();
- if (clip != null && treeModel != null && currentVisiblePath != null)
+ if (clip != null && treeModel != null)
{
int startIndex = tree.getClosestRowForLocation(clip.x, clip.y);
int endIndex = tree.getClosestRowForLocation(clip.x + clip.width,
clip.y + clip.height);
- paintVerticalPartOfLeg(g, clip, insets, currentVisiblePath);
- for (int i = startIndex; i <= endIndex; i++)
+ // Also paint dashes to the invisible nodes below.
+ // These should be painted first, otherwise they may cover
+ // the control icons.
+ if (endIndex < rows)
+ for (int i = endIndex + 1; i < rows; i++)
+ {
+ TreePath path = treeState.getPathForRow(i);
+ if (isLastChild(path))
+ paintVerticalPartOfLeg(g, clip, insets, path);
+ }
+
+ // The two loops are required to ensure that the lines are not
+ // painted over the other tree components.
+
+ int n = endIndex - startIndex + 1;
+ Rectangle[] bounds = new Rectangle[n];
+ boolean[] isLeaf = new boolean[n];
+ boolean[] isExpanded = new boolean[n];
+ TreePath[] path = new TreePath[n];
+ int k;
+
+ k = 0;
+ for (int i = startIndex; i <= endIndex; i++, k++)
+ {
+ path[k] = treeState.getPathForRow(i);
+ isLeaf[k] = treeModel.isLeaf(path[k].getLastPathComponent());
+ isExpanded[k] = tree.isExpanded(path[k]);
+ bounds[k] = getPathBounds(tree, path[k]);
+
+ paintHorizontalPartOfLeg(g, clip, insets, bounds[k], path[k], i,
+ isExpanded[k], false, isLeaf[k]);
+ if (isLastChild(path[k]))
+ paintVerticalPartOfLeg(g, clip, insets, path[k]);
+ }
+
+ k = 0;
+ for (int i = startIndex; i <= endIndex; i++, k++)
{
- Object curr = currentVisiblePath.getPathComponent(i);
- boolean isLeaf = treeModel.isLeaf(curr);
- TreePath path = new TreePath(getPathToRoot(curr, 0));
-
- boolean isExpanded = tree.isExpanded(path);
- Rectangle bounds = getPathBounds(tree, path);
- paintHorizontalPartOfLeg(g, clip, insets, bounds, path, i,
- isExpanded, false, isLeaf);
- paintRow(g, clip, insets, bounds, path, i, isExpanded, false,
- isLeaf);
+ paintRow(g, clip, insets, bounds[k], path[k], i, isExpanded[k],
+ false, isLeaf[k]);
}
}
}
/**
+ * Check if the path is referring to the last child of some parent.
+ */
+ private boolean isLastChild(TreePath path)
+ {
+ if (path instanceof GnuPath)
+ {
+ // Except the seldom case when the layout cache is changed, this
+ // optimized code will be executed.
+ return ((GnuPath) path).isLastChild;
+ }
+ else
+ {
+ // Non optimized general case.
+ TreePath parent = path.getParentPath();
+ if (parent == null)
+ return false;
+ int childCount = treeState.getVisibleChildCount(parent);
+ int p = treeModel.getIndexOfChild(parent, path.getLastPathComponent());
+ return p == childCount - 1;
+ }
+ }
+
+ /**
* Ensures that the rows identified by beginRow through endRow are visible.
*
- * @param beginRow
- * is the first row
- * @param endRow
- * is the last row
+ * @param beginRow is the first row
+ * @param endRow is the last row
*/
protected void ensureRowsAreVisible(int beginRow, int endRow)
{
@@ -1514,7 +1478,7 @@ public class BasicTreeUI extends TreeUI
for (int i = beginRow; i < endRow; i++)
{
TreePath path = getPathForRow(tree, i);
- if (!tree.isVisible(path))
+ if (! tree.isVisible(path))
tree.makeVisible(path);
}
}
@@ -1522,8 +1486,7 @@ public class BasicTreeUI extends TreeUI
/**
* Sets the preferred minimum size.
*
- * @param newSize
- * is the new preferred minimum size.
+ * @param newSize is the new preferred minimum size.
*/
public void setPreferredMinSize(Dimension newSize)
{
@@ -1537,15 +1500,17 @@ public class BasicTreeUI extends TreeUI
*/
public Dimension getPreferredMinSize()
{
- return preferredMinSize;
+ if (preferredMinSize == null)
+ return getPreferredSize(tree);
+ else
+ return preferredMinSize;
}
/**
* Returns the preferred size to properly display the tree, this is a cover
* method for getPreferredSize(c, false).
*
- * @param c
- * the component whose preferred size is being queried; this argument
+ * @param c the component whose preferred size is being queried; this argument
* is often ignored but might be used if the UI object is stateless
* and shared by multiple components
* @return the preferred size
@@ -1559,17 +1524,20 @@ public class BasicTreeUI extends TreeUI
* Returns the preferred size to represent the tree in c. If checkConsistancy
* is true, checkConsistancy is messaged first.
*
- * @param c
- * the component whose preferred size is being queried.
- * @param checkConsistancy
- * if true must check consistancy
+ * @param c the component whose preferred size is being queried.
+ * @param checkConsistancy if true must check consistancy
* @return the preferred size
*/
public Dimension getPreferredSize(JComponent c, boolean checkConsistancy)
{
- // FIXME: checkConsistancy not implemented, c not used
- if (!validCachedPreferredSize)
- updateCachedPreferredSize();
+ if (! validCachedPreferredSize)
+ {
+ Rectangle size = tree.getBounds();
+ // Add the scrollbar dimensions to the preferred size.
+ preferredSize = new Dimension(treeState.getPreferredWidth(size),
+ treeState.getPreferredHeight());
+ validCachedPreferredSize = true;
+ }
return preferredSize;
}
@@ -1577,31 +1545,24 @@ public class BasicTreeUI extends TreeUI
* Returns the minimum size for this component. Which will be the min
* preferred size or (0,0).
*
- * @param c
- * the component whose min size is being queried.
+ * @param c the component whose min size is being queried.
* @returns the preferred size or null
*/
public Dimension getMinimumSize(JComponent c)
{
- Dimension min = getPreferredMinSize();
- if (min == null)
- return new Dimension();
- return min;
+ return preferredMinSize = getPreferredSize(c);
}
/**
* Returns the maximum size for the component, which will be the preferred
* size if the instance is currently in JTree or (0,0).
*
- * @param c
- * the component whose preferred size is being queried
+ * @param c the component whose preferred size is being queried
* @return the max size or null
*/
public Dimension getMaximumSize(JComponent c)
{
- if (c instanceof JTree)
- return ((JTree) c).getPreferredSize();
- return new Dimension();
+ return getPreferredSize(c);
}
/**
@@ -1622,12 +1583,9 @@ public class BasicTreeUI extends TreeUI
* cancelEditing. If messageTree is true, the treeModel is messaged with
* valueForPathChanged.
*
- * @param messageStop
- * message to stop editing
- * @param messageCancel
- * message to cancel editing
- * @param messageTree
- * message to treeModel
+ * @param messageStop message to stop editing
+ * @param messageCancel message to cancel editing
+ * @param messageTree message to treeModel
*/
protected void completeEditing(boolean messageStop, boolean messageCancel,
boolean messageTree)
@@ -1659,25 +1617,16 @@ public class BasicTreeUI extends TreeUI
* Will start editing for node if there is a cellEditor and shouldSelectCall
* returns true. This assumes that path is valid and visible.
*
- * @param path
- * is the path to start editing
- * @param event
- * is the MouseEvent performed on the path
+ * @param path is the path to start editing
+ * @param event is the MouseEvent performed on the path
* @return true if successful
*/
protected boolean startEditing(TreePath path, MouseEvent event)
{
- // Force to recalculate the maximal row height.
- maxHeight = 0;
-
- // Force to recalculate the cached preferred size.
- validCachedPreferredSize = false;
-
updateCellEditor();
TreeCellEditor ed = getCellEditor();
- if (ed != null
- && (event == EDIT || ed.shouldSelectCell(event))
+ if (ed != null && (event == EDIT || ed.shouldSelectCell(event))
&& ed.isCellEditable(event))
{
Rectangle bounds = getPathBounds(tree, path);
@@ -1718,12 +1667,9 @@ public class BasicTreeUI extends TreeUI
* If the <code>mouseX</code> and <code>mouseY</code> are in the expand or
* collapse region of the row, this will toggle the row.
*
- * @param path
- * the path we are concerned with
- * @param mouseX
- * is the cursor's x position
- * @param mouseY
- * is the cursor's y position
+ * @param path the path we are concerned with
+ * @param mouseX is the cursor's x position
+ * @param mouseY is the cursor's y position
*/
protected void checkForClickInExpandControl(TreePath path, int mouseX,
int mouseY)
@@ -1737,12 +1683,9 @@ public class BasicTreeUI extends TreeUI
* the area of row that is used to expand/collpse the node and the node at row
* does not represent a leaf.
*
- * @param path
- * the path we are concerned with
- * @param mouseX
- * is the cursor's x position
- * @param mouseY
- * is the cursor's y position
+ * @param path the path we are concerned with
+ * @param mouseX is the cursor's x position
+ * @param mouseY is the cursor's y position
* @return true if the <code>mouseX</code> and <code>mouseY</code> fall in
* the area of row that is used to expand/collpse the node and the
* node at row does not represent a leaf.
@@ -1753,7 +1696,7 @@ public class BasicTreeUI extends TreeUI
boolean cntlClick = false;
int row = getRowForPath(tree, path);
- if (!isLeaf(row))
+ if (! isLeaf(row))
{
Rectangle bounds = getPathBounds(tree, path);
@@ -1769,12 +1712,9 @@ public class BasicTreeUI extends TreeUI
* Messaged when the user clicks the particular row, this invokes
* toggleExpandState.
*
- * @param path
- * the path we are concerned with
- * @param mouseX
- * is the cursor's x position
- * @param mouseY
- * is the cursor's y position
+ * @param path the path we are concerned with
+ * @param mouseX is the cursor's x position
+ * @param mouseY is the cursor's y position
*/
protected void handleExpandControlClick(TreePath path, int mouseX, int mouseY)
{
@@ -1787,8 +1727,7 @@ public class BasicTreeUI extends TreeUI
* invoked to scroll as many of the children to visible as possible (tries to
* scroll to last visible descendant of path).
*
- * @param path
- * the path we are concerned with
+ * @param path the path we are concerned with
*/
protected void toggleExpandState(TreePath path)
{
@@ -1800,30 +1739,40 @@ public class BasicTreeUI extends TreeUI
/**
* Returning true signifies a mouse event on the node should toggle the
- * selection of only the row under the mouse.
+ * selection of only the row under the mouse. The BasisTreeUI treats the
+ * event as "toggle selection event" if the CTRL button was pressed while
+ * clicking. The event is not counted as toggle event if the associated
+ * tree does not support the multiple selection.
*
- * @param event
- * is the MouseEvent performed on the row.
+ * @param event is the MouseEvent performed on the row.
* @return true signifies a mouse event on the node should toggle the
* selection of only the row under the mouse.
*/
protected boolean isToggleSelectionEvent(MouseEvent event)
{
- return (tree.getSelectionModel().getSelectionMode() == TreeSelectionModel.SINGLE_TREE_SELECTION);
+ return
+ (tree.getSelectionModel().getSelectionMode() !=
+ TreeSelectionModel.SINGLE_TREE_SELECTION) &&
+ ((event.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0);
}
/**
* Returning true signifies a mouse event on the node should select from the
- * anchor point.
+ * anchor point. The BasisTreeUI treats the event as "multiple selection
+ * event" if the SHIFT button was pressed while clicking. The event is not
+ * counted as multiple selection event if the associated tree does not support
+ * the multiple selection.
*
- * @param event
- * is the MouseEvent performed on the node.
+ * @param event is the MouseEvent performed on the node.
* @return true signifies a mouse event on the node should select from the
* anchor point.
*/
protected boolean isMultiSelectEvent(MouseEvent event)
{
- return (tree.getSelectionModel().getSelectionMode() == TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);
+ return
+ (tree.getSelectionModel().getSelectionMode() !=
+ TreeSelectionModel.SINGLE_TREE_SELECTION) &&
+ ((event.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0);
}
/**
@@ -1831,8 +1780,7 @@ public class BasicTreeUI extends TreeUI
* the event. This is invoked after checkForClickInExpandControl, implying the
* location is not in the expand (toggle) control.
*
- * @param event
- * is the MouseEvent performed on the row.
+ * @param event is the MouseEvent performed on the row.
* @return true indicates the row under the mouse should be toggled based on
* the event.
*/
@@ -1846,17 +1794,19 @@ public class BasicTreeUI extends TreeUI
* row. If the even is a toggle selection event, the row is either selected,
* or deselected. If the event identifies a multi selection event, the
* selection is updated from the anchor point. Otherwise, the row is selected,
- * and if the even specified a toggle event the row is expanded/collapsed.
+ * and the previous selection is cleared.</p>
+ *
+ * @param path is the path selected for an event
+ * @param event is the MouseEvent performed on the path.
*
- * @param path
- * is the path selected for an event
- * @param event
- * is the MouseEvent performed on the path.
+ * @see #isToggleSelectionEvent(MouseEvent)
+ * @see #isMultiSelectEvent(MouseEvent)
*/
protected void selectPathForEvent(TreePath path, MouseEvent event)
{
if (isToggleSelectionEvent(event))
{
+ // The event selects or unselects the clicked row.
if (tree.isPathSelected(path))
tree.removeSelectionPath(path);
else
@@ -1867,6 +1817,7 @@ public class BasicTreeUI extends TreeUI
}
else if (isMultiSelectEvent(event))
{
+ // The event extends selection form anchor till the clicked row.
TreePath anchor = tree.getAnchorSelectionPath();
if (anchor != null)
{
@@ -1877,14 +1828,17 @@ public class BasicTreeUI extends TreeUI
tree.addSelectionPath(path);
}
else
- tree.addSelectionPath(path);
+ {
+ // This is an ordinary event that just selects the clicked row.
+ tree.setSelectionPath(path);
+ tree.setAnchorSelectionPath(path);
+ }
}
/**
* Returns true if the node at <code>row</code> is a leaf.
*
- * @param row
- * is the row we are concerned with.
+ * @param row is the row we are concerned with.
* @return true if the node at <code>row</code> is a leaf.
*/
protected boolean isLeaf(int row)
@@ -1902,46 +1856,38 @@ public class BasicTreeUI extends TreeUI
* are pressed for the JTree. The actionPerformed method is called when a key
* that has been registered for the JTree is received.
*/
- class TreeAction extends AbstractAction
+ class TreeAction
+ extends AbstractAction
{
/**
* What to do when this action is called.
*
- * @param e
- * the ActionEvent that caused this action.
+ * @param e the ActionEvent that caused this action.
*/
public void actionPerformed(ActionEvent e)
{
+ String command = e.getActionCommand();
TreePath lead = tree.getLeadSelectionPath();
- if (e.getActionCommand().equals("selectPreviousChangeLead")
- || e.getActionCommand().equals("selectPreviousExtendSelection")
- || e.getActionCommand().equals("selectPrevious")
- || e.getActionCommand().equals("selectNext")
- || e.getActionCommand().equals("selectNextExtendSelection")
- || e.getActionCommand().equals("selectNextChangeLead"))
+ if (command.equals("selectPreviousChangeLead")
+ || command.equals("selectPreviousExtendSelection")
+ || command.equals("selectPrevious") || command.equals("selectNext")
+ || command.equals("selectNextExtendSelection")
+ || command.equals("selectNextChangeLead"))
(new TreeIncrementAction(0, "")).actionPerformed(e);
- else if (e.getActionCommand().equals("selectParent")
- || e.getActionCommand().equals("selectChild"))
+ else if (command.equals("selectParent") || command.equals("selectChild"))
(new TreeTraverseAction(0, "")).actionPerformed(e);
- else if (e.getActionCommand().equals("selectAll"))
+ else if (command.equals("selectAll"))
{
- TreePath[] paths = new TreePath[tree.getVisibleRowCount()];
-
- Object curr = getNextVisibleNode(treeModel.getRoot());
- int i = 0;
- while (curr != null && i < paths.length)
- {
- paths[i] = new TreePath(getPathToRoot(curr, 0));
- i++;
- }
-
+ TreePath[] paths = new TreePath[treeState.getRowCount()];
+ for (int i = 0; i < paths.length; i++)
+ paths[i] = treeState.getPathForRow(i);
tree.addSelectionPaths(paths);
}
- else if (e.getActionCommand().equals("startEditing"))
+ else if (command.equals("startEditing"))
tree.startEditingAtPath(lead);
- else if (e.getActionCommand().equals("toggle"))
+ else if (command.equals("toggle"))
{
if (tree.isEditing())
tree.stopEditing();
@@ -1949,17 +1895,17 @@ public class BasicTreeUI extends TreeUI
{
Object last = lead.getLastPathComponent();
TreePath path = new TreePath(getPathToRoot(last, 0));
- if (!treeModel.isLeaf(last))
+ if (! treeModel.isLeaf(last))
toggleExpandState(path);
}
}
- else if (e.getActionCommand().equals("clearSelection"))
+ else if (command.equals("clearSelection"))
tree.clearSelection();
- if (tree.isEditing() && !e.getActionCommand().equals("startEditing"))
+ if (tree.isEditing() && ! command.equals("startEditing"))
tree.stopEditing();
- tree.scrollPathToVisible(lead);
+ tree.scrollPathToVisible(tree.getLeadSelectionPath());
}
}
@@ -1970,7 +1916,8 @@ public class BasicTreeUI extends TreeUI
* to the true receiver after altering the actionCommand property of the
* event.
*/
- private static class ActionListenerProxy extends AbstractAction
+ private static class ActionListenerProxy
+ extends AbstractAction
{
ActionListener target;
@@ -1992,11 +1939,12 @@ public class BasicTreeUI extends TreeUI
}
}
- /**
+ /**
* Updates the preferred size when scrolling, if necessary.
*/
- public class ComponentHandler extends ComponentAdapter implements
- ActionListener
+ public class ComponentHandler
+ extends ComponentAdapter
+ implements ActionListener
{
/**
* Timer used when inside a scrollpane and the scrollbar is adjusting
@@ -2017,8 +1965,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when the component's position changes.
*
- * @param e
- * the event that occurs when moving the component
+ * @param e the event that occurs when moving the component
*/
public void componentMoved(ComponentEvent e)
{
@@ -2048,8 +1995,7 @@ public class BasicTreeUI extends TreeUI
* Public as a result of Timer. If the scrollBar is null, or not adjusting,
* this stops the timer and updates the sizing.
*
- * @param ae
- * is the action performed
+ * @param ae is the action performed
*/
public void actionPerformed(ActionEvent ae)
{
@@ -2061,7 +2007,8 @@ public class BasicTreeUI extends TreeUI
* Listener responsible for getting cell editing events and updating the tree
* accordingly.
*/
- public class CellEditorHandler implements CellEditorListener
+ public class CellEditorHandler
+ implements CellEditorListener
{
/**
* Constructor
@@ -2075,8 +2022,7 @@ public class BasicTreeUI extends TreeUI
* Messaged when editing has stopped in the tree. Tells the listeners
* editing has stopped.
*
- * @param e
- * is the notification event
+ * @param e is the notification event
*/
public void editingStopped(ChangeEvent e)
{
@@ -2087,8 +2033,7 @@ public class BasicTreeUI extends TreeUI
* Messaged when editing has been canceled in the tree. This tells the
* listeners the editor has canceled editing.
*
- * @param e
- * is the notification event
+ * @param e is the notification event
*/
public void editingCanceled(ChangeEvent e)
{
@@ -2099,7 +2044,8 @@ public class BasicTreeUI extends TreeUI
/**
* Repaints the lead selection row when focus is lost/grained.
*/
- public class FocusHandler implements FocusListener
+ public class FocusHandler
+ implements FocusListener
{
/**
* Constructor
@@ -2111,26 +2057,38 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when focus is activated on the tree we're in, redraws the lead
- * row. Invoked when a component gains the keyboard focus.
+ * row. Invoked when a component gains the keyboard focus. The method
+ * repaints the lead row that is shown differently when the tree is in
+ * focus.
*
- * @param e
- * is the focus event that is activated
+ * @param e is the focus event that is activated
*/
public void focusGained(FocusEvent e)
{
- // TODO: Implement this properly.
+ repaintLeadRow();
}
/**
* Invoked when focus is deactivated on the tree we're in, redraws the lead
- * row. Invoked when a component loses the keyboard focus.
+ * row. Invoked when a component loses the keyboard focus. The method
+ * repaints the lead row that is shown differently when the tree is in
+ * focus.
*
- * @param e
- * is the focus event that is deactivated
+ * @param e is the focus event that is deactivated
*/
public void focusLost(FocusEvent e)
{
- // TODO: Implement this properly.
+ repaintLeadRow();
+ }
+
+ /**
+ * Repaint the lead row.
+ */
+ void repaintLeadRow()
+ {
+ TreePath lead = tree.getLeadSelectionPath();
+ if (lead!=null)
+ tree.repaint(tree.getPathBounds(lead));
}
}
@@ -2138,7 +2096,8 @@ public class BasicTreeUI extends TreeUI
* This is used to get multiple key down events to appropriately genereate
* events.
*/
- public class KeyHandler extends KeyAdapter
+ public class KeyHandler
+ extends KeyAdapter
{
/** Key code that is being generated for. */
protected Action repeatKeyAction;
@@ -2160,8 +2119,7 @@ public class BasicTreeUI extends TreeUI
* user. Subsequent same key presses move the keyboard focus to the next
* object that starts with the same letter.
*
- * @param e
- * the key typed
+ * @param e the key typed
*/
public void keyTyped(KeyEvent e)
{
@@ -2171,8 +2129,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a key has been pressed.
*
- * @param e
- * the key pressed
+ * @param e the key pressed
*/
public void keyPressed(KeyEvent e)
{
@@ -2182,8 +2139,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a key has been released
*
- * @param e
- * the key released
+ * @param e the key released
*/
public void keyReleased(KeyEvent e)
{
@@ -2195,7 +2151,9 @@ public class BasicTreeUI extends TreeUI
* MouseListener is responsible for updating the selection based on mouse
* events.
*/
- public class MouseHandler extends MouseAdapter implements MouseMotionListener
+ public class MouseHandler
+ extends MouseAdapter
+ implements MouseMotionListener
{
/**
* Constructor
@@ -2208,11 +2166,10 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a mouse button has been pressed on a component.
*
- * @param e
- * is the mouse event that occured
+ * @param e is the mouse event that occured
*/
public void mousePressed(MouseEvent e)
- {
+ {
// Any mouse click cancels the previous waiting edit action, initiated
// by the single click on the selected node.
if (startEditTimer != null)
@@ -2220,7 +2177,7 @@ public class BasicTreeUI extends TreeUI
startEditTimer.stop();
startEditTimer = null;
}
-
+
Point click = e.getPoint();
TreePath path = getClosestPathForLocation(tree, click.x, click.y);
@@ -2228,6 +2185,11 @@ public class BasicTreeUI extends TreeUI
{
Rectangle bounds = getPathBounds(tree, path);
int row = getRowForPath(tree, path);
+
+ // Cancel the editing session if clicked on the different row.
+ if (tree.isEditing() && row != editingRow)
+ cancelEditing(tree);
+
boolean cntlClick = isLocationInExpandControl(path, click.x, click.y);
boolean isLeaf = isLeaf(row);
@@ -2258,35 +2220,32 @@ public class BasicTreeUI extends TreeUI
if (inBounds)
{
TreePath currentLead = tree.getLeadSelectionPath();
- if (
- currentLead != null &&
- currentLead.equals(path) &&
- e.getClickCount() == 1 &&
- tree.isEditable()
- )
+ if (currentLead != null && currentLead.equals(path)
+ && e.getClickCount() == 1 && tree.isEditable())
{
// Schedule the editing session.
final TreePath editPath = path;
-
+
if (startEditTimer != null)
startEditTimer.stop();
-
- startEditTimer = new Timer(WAIT_TILL_EDITING,
- new ActionListener()
- {
+
+ startEditTimer = new Timer(WAIT_TILL_EDITING,
+ new ActionListener()
+ {
public void actionPerformed(ActionEvent e)
- {
- startEditing(editPath, EDIT);
- }
+ {
+ startEditing(editPath, EDIT);
+ }
});
- startEditTimer.setRepeats(false);
- startEditTimer.start();
+ startEditTimer.setRepeats(false);
+ startEditTimer.start();
}
else
{
- selectPath(tree, path);
- if (e.getClickCount() == 2 && !isLeaf(row))
+ if (e.getClickCount() == 2 && ! isLeaf(row))
toggleExpandState(path);
+ else
+ selectPathForEvent(path, e);
}
}
@@ -2309,8 +2268,7 @@ public class BasicTreeUI extends TreeUI
* the drag originated until the mouse button is released (regardless of
* whether the mouse position is within the bounds of the component).
*
- * @param e
- * is the mouse event that occured
+ * @param e is the mouse event that occured
*/
public void mouseDragged(MouseEvent e)
{
@@ -2321,8 +2279,7 @@ public class BasicTreeUI extends TreeUI
* Invoked when the mouse button has been moved on a component (with no
* buttons no down).
*
- * @param e
- * the mouse event that occured
+ * @param e the mouse event that occured
*/
public void mouseMoved(MouseEvent e)
{
@@ -2332,8 +2289,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a mouse button has been released on a component.
*
- * @param e
- * is the mouse event that occured
+ * @param e is the mouse event that occured
*/
public void mouseReleased(MouseEvent e)
{
@@ -2346,7 +2302,8 @@ public class BasicTreeUI extends TreeUI
* events, until the mouse is released to the destination it is constructed
* with.
*/
- public class MouseInputHandler implements MouseInputListener
+ public class MouseInputHandler
+ implements MouseInputListener
{
/** Source that events are coming from */
protected Component source;
@@ -2357,12 +2314,9 @@ public class BasicTreeUI extends TreeUI
/**
* Constructor
*
- * @param source
- * that events are coming from
- * @param destination
- * that receives all events
- * @param e
- * is the event received
+ * @param source that events are coming from
+ * @param destination that receives all events
+ * @param e is the event received
*/
public MouseInputHandler(Component source, Component destination,
MouseEvent e)
@@ -2375,8 +2329,7 @@ public class BasicTreeUI extends TreeUI
* Invoked when the mouse button has been clicked (pressed and released) on
* a component.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseClicked(MouseEvent e)
{
@@ -2386,8 +2339,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a mouse button has been pressed on a component.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mousePressed(MouseEvent e)
{
@@ -2397,8 +2349,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when a mouse button has been released on a component.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseReleased(MouseEvent e)
{
@@ -2408,8 +2359,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when the mouse enters a component.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseEntered(MouseEvent e)
{
@@ -2419,8 +2369,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when the mouse exits a component.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseExited(MouseEvent e)
{
@@ -2433,8 +2382,7 @@ public class BasicTreeUI extends TreeUI
* the drag originated until the mouse button is released (regardless of
* whether the mouse position is within the bounds of the component).
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseDragged(MouseEvent e)
{
@@ -2445,8 +2393,7 @@ public class BasicTreeUI extends TreeUI
* Invoked when the mouse cursor has been moved onto a component but no
* buttons have been pushed.
*
- * @param e
- * mouse event that occured
+ * @param e mouse event that occured
*/
public void mouseMoved(MouseEvent e)
{
@@ -2467,7 +2414,8 @@ public class BasicTreeUI extends TreeUI
* BasicTreeUI method. X location does not include insets, that is handled in
* getPathBounds.
*/
- public class NodeDimensionsHandler extends AbstractLayoutCache.NodeDimensions
+ public class NodeDimensionsHandler
+ extends AbstractLayoutCache.NodeDimensions
{
/**
* Constructor
@@ -2483,16 +2431,11 @@ public class BasicTreeUI extends TreeUI
* bounds is null, a newly created Rectangle should be returned, otherwise
* the value should be placed in bounds and returned.
*
- * @param cell
- * the value to be represented
- * @param row
- * row being queried
- * @param depth
- * the depth of the row
- * @param expanded
- * true if row is expanded
- * @param size
- * a Rectangle containing the size needed to represent value
+ * @param cell the value to be represented
+ * @param row row being queried
+ * @param depth the depth of the row
+ * @param expanded true if row is expanded
+ * @param size a Rectangle containing the size needed to represent value
* @return containing the node dimensions, or null if node has no dimension
*/
public Rectangle getNodeDimensions(Object cell, int row, int depth,
@@ -2509,6 +2452,8 @@ public class BasicTreeUI extends TreeUI
{
size.x = getRowX(row, depth);
size.width = SwingUtilities.computeStringWidth(fm, s);
+ size.width = size.width + getCurrentControlIcon(null).getIconWidth()
+ + gap;
size.height = getMaxHeight(tree);
size.y = size.height * row;
}
@@ -2523,17 +2468,17 @@ public class BasicTreeUI extends TreeUI
*/
protected int getRowX(int row, int depth)
{
- if (row == 0)
- return 0;
- return depth * rightChildIndent;
+ int iw = getCurrentControlIcon(null).getIconWidth();
+ return depth * (rightChildIndent + iw/2);
}
}// NodeDimensionsHandler
/**
- * PropertyChangeListener for the tree. Updates the appropriate varaible, or
+ * PropertyChangeListener for the tree. Updates the appropriate variable, or
* TreeState, based on what changes.
*/
- public class PropertyChangeHandler implements PropertyChangeListener
+ public class PropertyChangeHandler
+ implements PropertyChangeListener
{
/**
@@ -2547,17 +2492,28 @@ public class BasicTreeUI extends TreeUI
/**
* This method gets called when a bound property is changed.
*
- * @param event
- * A PropertyChangeEvent object describing the event source and the
- * property that has changed.
+ * @param event A PropertyChangeEvent object describing the event source and
+ * the property that has changed.
*/
public void propertyChange(PropertyChangeEvent event)
{
- if ((event.getPropertyName()).equals("rootVisible"))
+ String property = event.getPropertyName();
+ if (property.equals(JTree.ROOT_VISIBLE_PROPERTY))
{
validCachedPreferredSize = false;
+ treeState.setRootVisible(tree.isRootVisible());
tree.repaint();
}
+ else if (property.equals(JTree.SELECTION_MODEL_PROPERTY))
+ {
+ treeSelectionModel = tree.getSelectionModel();
+ treeSelectionModel.setRowMapper(treeState);
+ }
+ else if (property.equals(JTree.TREE_MODEL_PROPERTY))
+ {
+ treeModel = tree.getModel();
+ treeModel.addTreeModelListener(treeModelListener);
+ }
}
}
@@ -2565,8 +2521,8 @@ public class BasicTreeUI extends TreeUI
* Listener on the TreeSelectionModel, resets the row selection if any of the
* properties of the model change.
*/
- public class SelectionModelPropertyChangeHandler implements
- PropertyChangeListener
+ public class SelectionModelPropertyChangeHandler
+ implements PropertyChangeListener
{
/**
@@ -2580,9 +2536,8 @@ public class BasicTreeUI extends TreeUI
/**
* This method gets called when a bound property is changed.
*
- * @param event
- * A PropertyChangeEvent object describing the event source and the
- * property that has changed.
+ * @param event A PropertyChangeEvent object describing the event source and
+ * the property that has changed.
*/
public void propertyChange(PropertyChangeEvent event)
{
@@ -2593,7 +2548,8 @@ public class BasicTreeUI extends TreeUI
/**
* ActionListener that invokes cancelEditing when action performed.
*/
- public class TreeCancelEditingAction extends AbstractAction
+ public class TreeCancelEditingAction
+ extends AbstractAction
{
/**
@@ -2607,8 +2563,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * event that occured
+ * @param e event that occured
*/
public void actionPerformed(ActionEvent e)
{
@@ -2630,7 +2585,8 @@ public class BasicTreeUI extends TreeUI
/**
* Updates the TreeState in response to nodes expanding/collapsing.
*/
- public class TreeExpansionHandler implements TreeExpansionListener
+ public class TreeExpansionHandler
+ implements TreeExpansionListener
{
/**
@@ -2644,24 +2600,26 @@ public class BasicTreeUI extends TreeUI
/**
* Called whenever an item in the tree has been expanded.
*
- * @param event
- * is the event that occured
+ * @param event is the event that occured
*/
public void treeExpanded(TreeExpansionEvent event)
{
validCachedPreferredSize = false;
+ treeState.setExpandedState(event.getPath(), true);
+ tree.revalidate();
tree.repaint();
}
/**
* Called whenever an item in the tree has been collapsed.
*
- * @param event
- * is the event that occured
+ * @param event is the event that occured
*/
public void treeCollapsed(TreeExpansionEvent event)
{
validCachedPreferredSize = false;
+ treeState.setExpandedState(event.getPath(), false);
+ tree.revalidate();
tree.repaint();
}
}// TreeExpansionHandler
@@ -2670,7 +2628,8 @@ public class BasicTreeUI extends TreeUI
* TreeHomeAction is used to handle end/home actions. Scrolls either the first
* or last cell to be visible based on direction.
*/
- public class TreeHomeAction extends AbstractAction
+ public class TreeHomeAction
+ extends AbstractAction
{
/** The direction, either home or end */
@@ -2679,10 +2638,8 @@ public class BasicTreeUI extends TreeUI
/**
* Constructor
*
- * @param direction -
- * it is home or end
- * @param name
- * is the name of the direction
+ * @param direction - it is home or end
+ * @param name is the name of the direction
*/
public TreeHomeAction(int direction, String name)
{
@@ -2692,8 +2649,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void actionPerformed(ActionEvent e)
{
@@ -2716,7 +2672,8 @@ public class BasicTreeUI extends TreeUI
* TreeIncrementAction is used to handle up/down actions. Selection is moved
* up or down based on direction.
*/
- public class TreeIncrementAction extends AbstractAction
+ public class TreeIncrementAction
+ extends AbstractAction
{
/** Specifies the direction to adjust the selection by. */
@@ -2725,10 +2682,8 @@ public class BasicTreeUI extends TreeUI
/**
* Constructor
*
- * @param direction
- * up or down
- * @param name
- * is the name of the direction
+ * @param direction up or down
+ * @param name is the name of the direction
*/
public TreeIncrementAction(int direction, String name)
{
@@ -2738,73 +2693,79 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void actionPerformed(ActionEvent e)
{
- Object last = tree.getLeadSelectionPath().getLastPathComponent();
+ TreePath currentPath = tree.getLeadSelectionPath();
+ int currentRow;
- if (e.getActionCommand().equals("selectPreviousChangeLead"))
- {
- Object prev = getPreviousVisibleNode(last);
+ if (currentPath != null)
+ currentRow = treeState.getRowForPath(currentPath);
+ else
+ currentRow = 0;
- if (prev != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(prev, 0));
- selectPath(tree, newPath);
- tree.setLeadSelectionPath(newPath);
- }
- }
- else if (e.getActionCommand().equals("selectPreviousExtendSelection"))
+ int rows = treeState.getRowCount();
+
+ int nextRow = currentRow + 1;
+ int prevRow = currentRow - 1;
+ boolean hasNext = nextRow < rows;
+ boolean hasPrev = prevRow >= 0 && rows > 0;
+ TreePath newPath;
+ String command = e.getActionCommand();
+
+ if (command.equals("selectPreviousChangeLead") && hasPrev)
{
- Object prev = getPreviousVisibleNode(last);
- if (prev != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(prev, 0));
- tree.addSelectionPath(newPath);
- tree.setLeadSelectionPath(newPath);
- }
+ newPath = treeState.getPathForRow(prevRow);
+ tree.setSelectionPath(newPath);
+ tree.setAnchorSelectionPath(newPath);
+ tree.setLeadSelectionPath(newPath);
}
- else if (e.getActionCommand().equals("selectPrevious"))
+ else if (command.equals("selectPreviousExtendSelection") && hasPrev)
{
- Object prev = getPreviousVisibleNode(last);
+ newPath = treeState.getPathForRow(prevRow);
- if (prev != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(prev, 0));
- selectPath(tree, newPath);
- }
+ // If the new path is already selected, the selection shrinks,
+ // unselecting the previously current path.
+ if (tree.isPathSelected(newPath))
+ tree.getSelectionModel().removeSelectionPath(currentPath);
+
+ // This must be called in any case because it updates the model
+ // lead selection index.
+ tree.addSelectionPath(newPath);
+ tree.setLeadSelectionPath(newPath);
}
- else if (e.getActionCommand().equals("selectNext"))
+ else if (command.equals("selectPrevious") && hasPrev)
{
- Object next = getNextVisibleNode(last);
-
- if (next != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(next, 0));
- selectPath(tree, newPath);
- }
+ newPath = treeState.getPathForRow(prevRow);
+ tree.setSelectionPath(newPath);
}
- else if (e.getActionCommand().equals("selectNextExtendSelection"))
+ else if (command.equals("selectNext") && hasNext)
{
- Object next = getNextVisibleNode(last);
- if (next != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(next, 0));
- tree.addSelectionPath(newPath);
- tree.setLeadSelectionPath(newPath);
- }
+ newPath = treeState.getPathForRow(nextRow);
+ tree.setSelectionPath(newPath);
}
- else if (e.getActionCommand().equals("selectNextChangeLead"))
+ else if (command.equals("selectNextExtendSelection") && hasNext)
{
- Object next = getNextVisibleNode(last);
- if (next != null)
- {
- TreePath newPath = new TreePath(getPathToRoot(next, 0));
- selectPath(tree, newPath);
- tree.setLeadSelectionPath(newPath);
- }
+ newPath = treeState.getPathForRow(nextRow);
+
+ // If the new path is already selected, the selection shrinks,
+ // unselecting the previously current path.
+ if (tree.isPathSelected(newPath))
+ tree.getSelectionModel().removeSelectionPath(currentPath);
+
+ // This must be called in any case because it updates the model
+ // lead selection index.
+ tree.addSelectionPath(newPath);
+
+ tree.setLeadSelectionPath(newPath);
+ }
+ else if (command.equals("selectNextChangeLead") && hasNext)
+ {
+ newPath = treeState.getPathForRow(nextRow);
+ tree.setSelectionPath(newPath);
+ tree.setAnchorSelectionPath(newPath);
+ tree.setLeadSelectionPath(newPath);
}
}
@@ -2823,7 +2784,8 @@ public class BasicTreeUI extends TreeUI
/**
* Forwards all TreeModel events to the TreeState.
*/
- public class TreeModelHandler implements TreeModelListener
+ public class TreeModelHandler
+ implements TreeModelListener
{
/**
* Constructor
@@ -2843,12 +2805,12 @@ public class BasicTreeUI extends TreeUI
* node(s). e.getChildIndices() returns the index(es) of the changed
* node(s).
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void treeNodesChanged(TreeModelEvent e)
{
validCachedPreferredSize = false;
+ treeState.treeNodesChanged(e);
tree.repaint();
}
@@ -2857,12 +2819,12 @@ public class BasicTreeUI extends TreeUI
* get the parent of the new node(s). e.getChildIndices() returns the
* index(es) of the new node(s) in ascending order.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void treeNodesInserted(TreeModelEvent e)
{
validCachedPreferredSize = false;
+ treeState.treeNodesInserted(e);
tree.repaint();
}
@@ -2874,12 +2836,12 @@ public class BasicTreeUI extends TreeUI
* node(s). e.getChildIndices() returns, in ascending order, the index(es)
* the node(s) had before being deleted.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void treeNodesRemoved(TreeModelEvent e)
{
validCachedPreferredSize = false;
+ treeState.treeNodesRemoved(e);
tree.repaint();
}
@@ -2890,15 +2852,15 @@ public class BasicTreeUI extends TreeUI
* should become the new root of the tree. Use e.getPath() to get the path
* to the node. e.getChildIndices() returns null.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void treeStructureChanged(TreeModelEvent e)
{
if (e.getPath().length == 1
- && !e.getPath()[0].equals(treeModel.getRoot()))
+ && ! e.getPath()[0].equals(treeModel.getRoot()))
tree.expandPath(new TreePath(treeModel.getRoot()));
validCachedPreferredSize = false;
+ treeState.treeStructureChanged(e);
tree.repaint();
}
}// TreeModelHandler
@@ -2906,7 +2868,8 @@ public class BasicTreeUI extends TreeUI
/**
* TreePageAction handles page up and page down events.
*/
- public class TreePageAction extends AbstractAction
+ public class TreePageAction
+ extends AbstractAction
{
/** Specifies the direction to adjust the selection by. */
protected int direction;
@@ -2914,10 +2877,8 @@ public class BasicTreeUI extends TreeUI
/**
* Constructor
*
- * @param direction
- * up or down
- * @param name
- * is the name of the direction
+ * @param direction up or down
+ * @param name is the name of the direction
*/
public TreePageAction(int direction, String name)
{
@@ -2927,8 +2888,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * is the event that occured
+ * @param e is the event that occured
*/
public void actionPerformed(ActionEvent e)
{
@@ -2950,7 +2910,8 @@ public class BasicTreeUI extends TreeUI
* Listens for changes in the selection model and updates the display
* accordingly.
*/
- public class TreeSelectionHandler implements TreeSelectionListener
+ public class TreeSelectionHandler
+ implements TreeSelectionListener
{
/**
* Constructor
@@ -2964,26 +2925,42 @@ public class BasicTreeUI extends TreeUI
* Messaged when the selection changes in the tree we're displaying for.
* Stops editing, messages super and displays the changed paths.
*
- * @param event
- * the event that characterizes the change.
+ * @param event the event that characterizes the change.
*/
public void valueChanged(TreeSelectionEvent event)
{
if (tree.isEditing())
- tree.stopEditing();
+ tree.cancelEditing();
+
+ TreePath op = event.getOldLeadSelectionPath();
+ TreePath np = event.getNewLeadSelectionPath();
+
+ // Repaint of the changed lead selection path.
+ if (op != np)
+ {
+ Rectangle o = treeState.getBounds(event.getOldLeadSelectionPath(),
+ new Rectangle());
+ Rectangle n = treeState.getBounds(event.getNewLeadSelectionPath(),
+ new Rectangle());
+
+ if (o!=null)
+ tree.repaint(o);
+ if (n!=null)
+ tree.repaint(n);
+ }
}
}// TreeSelectionHandler
/**
* For the first selected row expandedness will be toggled.
*/
- public class TreeToggleAction extends AbstractAction
+ public class TreeToggleAction
+ extends AbstractAction
{
/**
* Constructor
*
- * @param name
- * is the name of <code>Action</code> field
+ * @param name is the name of <code>Action</code> field
*/
public TreeToggleAction(String name)
{
@@ -2993,8 +2970,7 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * the event that occured
+ * @param e the event that occured
*/
public void actionPerformed(ActionEvent e)
{
@@ -3016,7 +2992,8 @@ public class BasicTreeUI extends TreeUI
* TreeTraverseAction is the action used for left/right keys. Will toggle the
* expandedness of a node, as well as potentially incrementing the selection.
*/
- public class TreeTraverseAction extends AbstractAction
+ public class TreeTraverseAction
+ extends AbstractAction
{
/**
* Determines direction to traverse, 1 means expand, -1 means collapse.
@@ -3026,10 +3003,8 @@ public class BasicTreeUI extends TreeUI
/**
* Constructor
*
- * @param direction
- * to traverse
- * @param name
- * is the name of the direction
+ * @param direction to traverse
+ * @param name is the name of the direction
*/
public TreeTraverseAction(int direction, String name)
{
@@ -3039,35 +3014,49 @@ public class BasicTreeUI extends TreeUI
/**
* Invoked when an action occurs.
*
- * @param e
- * the event that occured
+ * @param e the event that occured
*/
public void actionPerformed(ActionEvent e)
{
- Object last = tree.getLeadSelectionPath().getLastPathComponent();
+ TreePath current = tree.getLeadSelectionPath();
+ if (current == null)
+ return;
if (e.getActionCommand().equals("selectParent"))
{
- TreePath path = new TreePath(getPathToRoot(last, 0));
- Object p = getParent(treeModel.getRoot(), last);
+ if (current == null)
+ return;
- if (!treeModel.isLeaf(last))
- toggleExpandState(path);
- else if (p != null)
- selectPath(tree, new TreePath(getPathToRoot(p, 0)));
+ if (tree.isExpanded(current))
+ {
+ tree.collapsePath(current);
+ }
+ else
+ {
+ // If the node is not expanded (also, if it is a leaf node),
+ // we just select the parent. We do not select the root if it
+ // is not visible.
+ TreePath parent = current.getParentPath();
+ if (parent != null &&
+ !(parent.getPathCount()==1 && !tree.isRootVisible()) )
+ tree.setSelectionPath(parent);
+ }
}
else if (e.getActionCommand().equals("selectChild"))
{
- TreePath path = new TreePath(getPathToRoot(last, 0));
-
- if (!treeModel.isLeaf(last))
- toggleExpandState(path);
+ Object node = current.getLastPathComponent();
+ int nc = treeModel.getChildCount(node);
+ if (nc == 0 || treeState.isExpanded(current))
+ {
+ // If the node is leaf or it is already expanded,
+ // we just select the next row.
+ int nextRow = tree.getLeadSelectionRow() + 1;
+ if (nextRow <= tree.getRowCount())
+ tree.setSelectionRow(nextRow);
+ }
else
{
- Object next = getNextVisibleNode(last);
-
- if (next != null)
- selectPath(tree, new TreePath(getPathToRoot(next, 0)));
+ tree.expandPath(current);
}
}
}
@@ -3113,10 +3102,8 @@ public class BasicTreeUI extends TreeUI
/**
* Returns the parent of the current node
*
- * @param root
- * is the root of the tree
- * @param node
- * is the current node
+ * @param root is the root of the tree
+ * @param node is the current node
* @return is the parent of the current node
*/
Object getParent(Object root, Object node)
@@ -3132,15 +3119,13 @@ public class BasicTreeUI extends TreeUI
/**
* Recursively checks the tree for the specified node, starting at the root.
*
- * @param root
- * is starting node to start searching at.
- * @param node
- * is the node to search for
+ * @param root is starting node to start searching at.
+ * @param node is the node to search for
* @return the parent node of node
*/
private Object findNode(Object root, Object node)
{
- if (!treeModel.isLeaf(root) && !root.equals(node))
+ if (! treeModel.isLeaf(root) && ! root.equals(node))
{
int size = treeModel.getChildCount(root);
for (int j = 0; j < size; j++)
@@ -3158,167 +3143,20 @@ public class BasicTreeUI extends TreeUI
}
/**
- * Get previous visible node in the tree. Package private for use in inner
- * classes.
- *
- * @param node -
- * current node
- * @return the next visible node in the JTree. Return null if there are no
- * more.
- */
- Object getPreviousVisibleNode(Object node)
- {
- if (currentVisiblePath != null)
- {
- Object[] nodes = currentVisiblePath.getPath();
- int i = 0;
- while (i < nodes.length && !node.equals(nodes[i]))
- i++;
- // return the next node
- if (i - 1 >= 0)
- return nodes[i - 1];
- }
- return null;
- }
-
- /**
- * Returns the next node in the tree Package private for use in inner classes.
- *
- * @param curr -
- * current node
- * @return the next node in the tree
- */
- Object getNextNode(Object curr)
- {
- if (!treeModel.isLeaf(curr) && treeModel.getChildCount(curr) > 0)
- return treeModel.getChild(curr, 0);
-
- Object node = curr;
- Object sibling = null;
- do
- {
- sibling = getNextSibling(node);
- node = getParent(treeModel.getRoot(), node);
- }
- while (sibling == null && node != null);
-
- return sibling;
- }
-
- /**
- * Returns the previous node in the tree Package private for use in inner
- * classes.
- *
- * @param node
- * current node
- * @return the previous node in the tree
- */
- Object getPreviousNode(Object node)
- {
- Object parent = getParent(treeModel.getRoot(), node);
- if (parent == null)
- return null;
-
- Object sibling = getPreviousSibling(node);
-
- if (sibling == null)
- return parent;
-
- int size = 0;
- if (!treeModel.isLeaf(sibling))
- size = treeModel.getChildCount(sibling);
- while (size > 0)
- {
- sibling = treeModel.getChild(sibling, size - 1);
- if (!treeModel.isLeaf(sibling))
- size = treeModel.getChildCount(sibling);
- else
- size = 0;
- }
-
- return sibling;
- }
-
- /**
- * Returns the next sibling in the tree Package private for use in inner
- * classes.
- *
- * @param node -
- * current node
- * @return the next sibling in the tree
- */
- Object getNextSibling(Object node)
- {
- Object parent = getParent(treeModel.getRoot(), node);
- if (parent == null)
- return null;
-
- int index = treeModel.getIndexOfChild(parent, node) + 1;
-
- int size = 0;
- if (!treeModel.isLeaf(parent))
- size = treeModel.getChildCount(parent);
- if (index == 0 || index >= size)
- return null;
-
- return treeModel.getChild(parent, index);
- }
-
- /**
- * Returns the previous sibling in the tree Package private for use in inner
- * classes.
- *
- * @param node -
- * current node
- * @return the previous sibling in the tree
- */
- Object getPreviousSibling(Object node)
- {
- Object parent = getParent(treeModel.getRoot(), node);
- if (parent == null)
- return null;
-
- int index = treeModel.getIndexOfChild(parent, node) - 1;
-
- int size = 0;
- if (!treeModel.isLeaf(parent))
- size = treeModel.getChildCount(parent);
- if (index < 0 || index >= size)
- return null;
-
- return treeModel.getChild(parent, index);
- }
-
- /**
* Selects the specified path in the tree depending on modes. Package private
* for use in inner classes.
*
- * @param tree
- * is the tree we are selecting the path in
- * @param path
- * is the path we are selecting
+ * @param tree is the tree we are selecting the path in
+ * @param path is the path we are selecting
*/
void selectPath(JTree tree, TreePath path)
{
if (path != null)
{
- if (tree.getSelectionModel().getSelectionMode() == TreeSelectionModel.SINGLE_TREE_SELECTION)
- {
- tree.getSelectionModel().clearSelection();
- tree.addSelectionPath(path);
- tree.setLeadSelectionPath(path);
- }
- else if (tree.getSelectionModel().getSelectionMode() == TreeSelectionModel.CONTIGUOUS_TREE_SELECTION)
- {
- // TODO
- }
- else
- {
- tree.addSelectionPath(path);
- tree.setLeadSelectionPath(path);
- tree.getSelectionModel().setSelectionMode(
- TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
- }
+ tree.setSelectionPath(path);
+ tree.setLeadSelectionPath(path);
+ tree.makeVisible(path);
+ tree.scrollPathToVisible(path);
}
}
@@ -3326,10 +3164,8 @@ public class BasicTreeUI extends TreeUI
* Returns the path from node to the root. Package private for use in inner
* classes.
*
- * @param node
- * the node to get the path to
- * @param depth
- * the depth of the tree to return a path for
+ * @param node the node to get the path to
+ * @param depth the depth of the tree to return a path for
* @return an array of tree nodes that represent the path to node.
*/
Object[] getPathToRoot(Object node, int depth)
@@ -3349,47 +3185,13 @@ public class BasicTreeUI extends TreeUI
}
/**
- * Returns the level of the node in the tree.
- *
- * @param node -
- * current node
- * @return the number of the level
- */
- int getLevel(Object node)
- {
- int count = -1;
-
- Object current = node;
-
- if (treeModel != null)
- {
- Object root = treeModel.getRoot();
- if (!tree.isRootVisible() && tree.isExpanded(new TreePath(root)))
- count--;
-
- do
- {
- current = getParent(root, current);
- count++;
- }
- while (current != null);
- }
- return count;
- }
-
- /**
* Draws a vertical line using the given graphic context
*
- * @param g
- * is the graphic context
- * @param c
- * is the component the new line will belong to
- * @param x
- * is the horizonal position
- * @param top
- * specifies the top of the line
- * @param bottom
- * specifies the bottom of the line
+ * @param g is the graphic context
+ * @param c is the component the new line will belong to
+ * @param x is the horizonal position
+ * @param top specifies the top of the line
+ * @param bottom specifies the bottom of the line
*/
protected void paintVerticalLine(Graphics g, JComponent c, int x, int top,
int bottom)
@@ -3402,16 +3204,11 @@ public class BasicTreeUI extends TreeUI
/**
* Draws a horizontal line using the given graphic context
*
- * @param g
- * is the graphic context
- * @param c
- * is the component the new line will belong to
- * @param y
- * is the vertical position
- * @param left
- * specifies the left point of the line
- * @param right
- * specifies the right point of the line
+ * @param g is the graphic context
+ * @param c is the component the new line will belong to
+ * @param y is the vertical position
+ * @param left specifies the left point of the line
+ * @param right specifies the right point of the line
*/
protected void paintHorizontalLine(Graphics g, JComponent c, int y, int left,
int right)
@@ -3424,16 +3221,11 @@ public class BasicTreeUI extends TreeUI
/**
* Draws an icon at around a specific position
*
- * @param c
- * is the component the new line will belong to
- * @param g
- * is the graphic context
- * @param icon
- * is the icon which will be drawn
- * @param x
- * is the center position in x-direction
- * @param y
- * is the center position in y-direction
+ * @param c is the component the new line will belong to
+ * @param g is the graphic context
+ * @param icon is the icon which will be drawn
+ * @param x is the center position in x-direction
+ * @param y is the center position in y-direction
*/
protected void drawCentered(Component c, Graphics g, Icon icon, int x, int y)
{
@@ -3451,14 +3243,10 @@ public class BasicTreeUI extends TreeUI
/**
* Draws a dashed horizontal line.
*
- * @param g -
- * the graphics configuration.
- * @param y -
- * the y location to start drawing at
- * @param x1 -
- * the x location to start drawing at
- * @param x2 -
- * the x location to finish drawing at
+ * @param g - the graphics configuration.
+ * @param y - the y location to start drawing at
+ * @param x1 - the x location to start drawing at
+ * @param x2 - the x location to finish drawing at
*/
protected void drawDashedHorizontalLine(Graphics g, int y, int x1, int x2)
{
@@ -3470,14 +3258,10 @@ public class BasicTreeUI extends TreeUI
/**
* Draws a dashed vertical line.
*
- * @param g -
- * the graphics configuration.
- * @param x -
- * the x location to start drawing at
- * @param y1 -
- * the y location to start drawing at
- * @param y2 -
- * the y location to finish drawing at
+ * @param g - the graphics configuration.
+ * @param x - the x location to start drawing at
+ * @param y1 - the y location to start drawing at
+ * @param y2 - the y location to finish drawing at
*/
protected void drawDashedVerticalLine(Graphics g, int x, int y1, int y2)
{
@@ -3490,22 +3274,15 @@ public class BasicTreeUI extends TreeUI
* Paints the expand (toggle) part of a row. The receiver should NOT modify
* clipBounds, or insets.
*
- * @param g -
- * the graphics configuration
+ * @param g - the graphics configuration
* @param clipBounds -
* @param insets -
- * @param bounds -
- * bounds of expand control
- * @param path -
- * path to draw control for
- * @param row -
- * row to draw control for
- * @param isExpanded -
- * is the row expanded
- * @param hasBeenExpanded -
- * has the row already been expanded
- * @param isLeaf -
- * is the path a leaf
+ * @param bounds - bounds of expand control
+ * @param path - path to draw control for
+ * @param row - row to draw control for
+ * @param isExpanded - is the row expanded
+ * @param hasBeenExpanded - has the row already been expanded
+ * @param isLeaf - is the path a leaf
*/
protected void paintExpandControl(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds,
@@ -3516,9 +3293,7 @@ public class BasicTreeUI extends TreeUI
{
Icon icon = getCurrentControlIcon(path);
int iconW = icon.getIconWidth();
- int x = bounds.x - rightChildIndent + iconW / 2;
- if (x + iconW > bounds.x)
- x = bounds.x - rightChildIndent - gap;
+ int x = bounds.x - iconW - gap;
icon.paintIcon(tree, g, x, bounds.y + bounds.height / 2
- icon.getIconHeight() / 2);
}
@@ -3529,22 +3304,15 @@ public class BasicTreeUI extends TreeUI
* clipBounds, or insets. NOTE: parentRow can be -1 if the root is not
* visible.
*
- * @param g -
- * the graphics configuration
+ * @param g - the graphics configuration
* @param clipBounds -
* @param insets -
- * @param bounds -
- * bounds of the cell
- * @param path -
- * path to draw leg for
- * @param row -
- * row to start drawing at
- * @param isExpanded -
- * is the row expanded
- * @param hasBeenExpanded -
- * has the row already been expanded
- * @param isLeaf -
- * is the path a leaf
+ * @param bounds - bounds of the cell
+ * @param path - path to draw leg for
+ * @param row - row to start drawing at
+ * @param isExpanded - is the row expanded
+ * @param hasBeenExpanded - has the row already been expanded
+ * @param isLeaf - is the path a leaf
*/
protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds,
Insets insets, Rectangle bounds,
@@ -3554,45 +3322,34 @@ public class BasicTreeUI extends TreeUI
boolean isLeaf)
{
if (row != 0)
- paintHorizontalLine(g, tree, bounds.y + bounds.height / 2, bounds.x - gap
- - 2, bounds.x);
+ {
+ Icon icon = getCurrentControlIcon(path);
+ int iconW = icon.getIconWidth();
+ paintHorizontalLine(g, tree, bounds.y + bounds.height / 2,
+ bounds.x - iconW/2 - gap, bounds.x - gap);
+ }
}
/**
* Paints the vertical part of the leg. The receiver should NOT modify
* clipBounds, insets.
*
- * @param g -
- * the graphics configuration.
+ * @param g - the graphics configuration.
* @param clipBounds -
* @param insets -
- * @param path -
- * the path to draw the vertical part for.
+ * @param path - the path to draw the vertical part for.
*/
protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds,
Insets insets, TreePath path)
{
- int max = tree.getVisibleRowCount();
- for (int i = 0; i < max; i++)
+ Rectangle bounds = getPathBounds(tree, path);
+ TreePath parent = path.getParentPath();
+ if (parent != null)
{
- Object curr = path.getPathComponent(i);
- TreePath currPath = new TreePath(getPathToRoot(curr, 0));
- int numChild = treeModel.getChildCount(curr);
- if (numChild > 0 && tree.isExpanded(currPath))
- {
- Rectangle bounds = getPathBounds(tree, currPath);
- Rectangle lastChildBounds = getPathBounds(
- tree,
- new TreePath(
- getPathToRoot(
- treeModel.getChild(
- curr,
- numChild - 1),
- 0)));
- paintVerticalLine(g, tree, bounds.x + gap + 2, bounds.y
- + bounds.height - 2,
- lastChildBounds.y + lastChildBounds.height / 2);
- }
+ Rectangle parentBounds = getPathBounds(tree, parent);
+ paintVerticalLine(g, tree, parentBounds.x + 2* gap,
+ parentBounds.y + parentBounds.height / 2,
+ bounds.y + bounds.height / 2);
}
}
@@ -3600,22 +3357,15 @@ public class BasicTreeUI extends TreeUI
* Paints the renderer part of a row. The receiver should NOT modify
* clipBounds, or insets.
*
- * @param g -
- * the graphics configuration
+ * @param g - the graphics configuration
* @param clipBounds -
* @param insets -
- * @param bounds -
- * bounds of expand control
- * @param path -
- * path to draw control for
- * @param row -
- * row to draw control for
- * @param isExpanded -
- * is the row expanded
- * @param hasBeenExpanded -
- * has the row already been expanded
- * @param isLeaf -
- * is the path a leaf
+ * @param bounds - bounds of expand control
+ * @param path - path to draw control for
+ * @param row - row to draw control for
+ * @param isExpanded - is the row expanded
+ * @param hasBeenExpanded - has the row already been expanded
+ * @param isLeaf - is the path a leaf
*/
protected void paintRow(Graphics g, Rectangle clipBounds, Insets insets,
Rectangle bounds, TreePath path, int row,
@@ -3626,26 +3376,23 @@ public class BasicTreeUI extends TreeUI
boolean hasIcons = false;
Object node = path.getLastPathComponent();
- if (tree.isVisible(path))
- {
- if (!validCachedPreferredSize)
- updateCachedPreferredSize();
-
- paintExpandControl(g, clipBounds, insets, bounds, path, row,
- isExpanded, hasBeenExpanded, isLeaf);
-
- if (row != 0)
- bounds.x += gap;
- bounds.width = preferredSize.width + bounds.x;
- TreeCellRenderer dtcr = tree.getCellRenderer();
- if (dtcr == null)
- dtcr = createDefaultCellRenderer();
-
- Component c = dtcr.getTreeCellRendererComponent(tree, node, selected,
- isExpanded, isLeaf,
- row, tree.hasFocus());
- rendererPane.paintComponent(g, c, c.getParent(), bounds);
- }
+ paintExpandControl(g, clipBounds, insets, bounds, path, row, isExpanded,
+ hasBeenExpanded, isLeaf);
+
+ TreeCellRenderer dtcr = tree.getCellRenderer();
+ if (dtcr == null)
+ dtcr = createDefaultCellRenderer();
+
+ boolean focused = false;
+ if (treeSelectionModel!= null)
+ focused = treeSelectionModel.getLeadSelectionRow() == row
+ && tree.isFocusOwner();
+
+ Component c = dtcr.getTreeCellRendererComponent(tree, node, selected,
+ isExpanded, isLeaf, row,
+ focused);
+
+ rendererPane.paintComponent(g, c, c.getParent(), bounds);
}
/**
@@ -3660,16 +3407,11 @@ public class BasicTreeUI extends TreeUI
* Returns true if the expand (toggle) control should be drawn for the
* specified row.
*
- * @param path -
- * current path to check for.
- * @param row -
- * current row to check for.
- * @param isExpanded -
- * true if the path is expanded
- * @param hasBeenExpanded -
- * true if the path has been expanded already
- * @param isLeaf -
- * true if the row is a lead
+ * @param path - current path to check for.
+ * @param row - current row to check for.
+ * @param isExpanded - true if the path is expanded
+ * @param hasBeenExpanded - true if the path has been expanded already
+ * @param isLeaf - true if the row is a lead
*/
protected boolean shouldPaintExpandControl(TreePath path, int row,
boolean isExpanded,
@@ -3677,121 +3419,25 @@ public class BasicTreeUI extends TreeUI
boolean isLeaf)
{
Object node = path.getLastPathComponent();
- return (!isLeaf && getLevel(node) != 0 && hasControlIcons());
+ return (! isLeaf && hasControlIcons());
}
/**
- * Updates the cached current TreePath of all visible nodes in the tree.
+ * Finish the editing session.
*/
- void updateCurrentVisiblePath()
- {
- if (treeModel == null)
- return;
-
- Object next = treeModel.getRoot();
- if (next == null)
- return;
-
- TreePath rootPath = new TreePath(next);
- Rectangle bounds = getPathBounds(tree, rootPath);
-
- // If root is not a valid size to be visible, or is
- // not visible and the tree is expanded, then the next node acts
- // as the root
- if ((bounds.width == 0 && bounds.height == 0)
- || (!isRootVisible() && tree.isExpanded(new TreePath(next))))
- {
- next = getNextNode(next);
- rootPath = new TreePath(next);
- }
-
- Object root = next;
- TreePath current = null;
- while (next != null)
- {
- if (current == null)
- current = rootPath;
- else
- current = current.pathByAddingChild(next);
-
- do
- {
- TreePath path = new TreePath(getPathToRoot(next, 0));
- if ((tree.isVisible(path) && tree.isExpanded(path))
- || treeModel.isLeaf(next))
- next = getNextNode(next);
- else
- {
- Object pNext = next;
- next = getNextSibling(pNext);
- // if no next sibling, check parent's next sibling.
- if (next == null)
- {
- Object parent = getParent(root, pNext);
- while (next == null && parent != null)
- {
- next = getNextSibling(parent);
- if (next == null)
- parent = getParent(root, parent);
- }
- }
- }
- }
- while (next != null
- && !tree.isVisible(new TreePath(getPathToRoot(next, 0))));
- }
-
- currentVisiblePath = current;
- tree.setVisibleRowCount(getRowCount(tree));
-
- if (tree.getSelectionModel() != null && tree.getSelectionCount() == 0
- && currentVisiblePath != null)
- selectPath(
- tree,
- new TreePath(
- getPathToRoot(
- currentVisiblePath.getPathComponent(0),
- 0)));
- }
-
- /**
- * Get next visible node in the currentVisiblePath. Package private for use in
- * inner classes.
- *
- * @param node
- * current node
- * @return the next visible node in the JTree. Return null if there are no
- * more.
- */
- Object getNextVisibleNode(Object node)
- {
- if (currentVisiblePath != null)
- {
- Object[] nodes = currentVisiblePath.getPath();
- int i = 0;
- while (i < nodes.length && !node.equals(nodes[i]))
- i++;
- // return the next node
- if (i + 1 < nodes.length)
- return nodes[i + 1];
- }
- return null;
- }
-
- /**
- * Finish the editing session.
- */
void finish()
{
+ treeState.invalidatePathBounds(treeState.getPathForRow(editingRow));
editingPath = null;
- editingRow = -1;
+ editingRow = - 1;
stopEditingInCompleteEditing = false;
isEditing = false;
+ Rectangle bounds = editingComponent.getParent().getBounds();
tree.removeAll();
validCachedPreferredSize = false;
-
// Repaint the region, where was the editing component.
- tree.repaint(editingComponent.getParent().getBounds());
+ tree.repaint(bounds);
editingComponent = null;
+ tree.requestFocus();
}
} // BasicTreeUI
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java b/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java
index 99c90ac..98a00ee 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java
@@ -59,6 +59,7 @@ import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
+import javax.swing.border.CompoundBorder;
import javax.swing.plaf.BorderUIResource;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicBorders;
@@ -138,24 +139,59 @@ public class MetalBorders
if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)
paintOceanButtonBorder(c, g, x, y, w, h);
else
- {
- ButtonModel bmodel = null;
-
- if (c instanceof AbstractButton)
- bmodel = ((AbstractButton) c).getModel();
+ paintDefaultButtonBorder(c, g, x, y, w, h);
+ }
- Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
- Color shadow = MetalLookAndFeel.getControlShadow();
- Color light = MetalLookAndFeel.getControlHighlight();
- Color middle = MetalLookAndFeel.getControl();
+ /**
+ * Paints the button border for the DefaultMetalTheme.
+ *
+ * @param c the component (button)
+ * @param g the graphics object to use
+ * @param x the upper left corner of the component, X coordinate
+ * @param y the upper left corner of the component, Y coordinate
+ * @param w the width of the component
+ * @param h the height of the component
+ */
+ private void paintDefaultButtonBorder(Component c, Graphics g, int x,
+ int y, int w, int h)
+ {
+ ButtonModel bmodel = null;
- if (c.isEnabled())
- {
- // draw dark border
- g.setColor(darkShadow);
- g.drawRect(x, y, w - 2, h - 2);
+ if (c instanceof AbstractButton)
+ bmodel = ((AbstractButton) c).getModel();
+
+ Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
+ Color shadow = MetalLookAndFeel.getControlShadow();
+ Color light = MetalLookAndFeel.getControlHighlight();
+ Color middle = MetalLookAndFeel.getControl();
+
+ if (c.isEnabled())
+ {
+ // draw dark border
+ g.setColor(darkShadow);
+ g.drawRect(x, y, w - 2, h - 2);
- if (!bmodel.isPressed())
+ // If the button is the default button, we paint a special border,
+ // regardless of the pressed state.
+ if (c instanceof JButton && ((JButton) c).isDefaultButton())
+ {
+ g.drawRect(x + 1, y + 1, w - 4, h - 4);
+ // Draw white highlight.
+ g.setColor(light);
+ g.drawLine(x + 2, y + 2, x + w - 4, y + 2);
+ g.drawLine(x + 2, y + 2, x + 2, y + h - 4);
+ g.drawLine(x + 2, y + h - 1, x + w - 1, y + h - 1);
+ g.drawLine(x + w - 1, y + 2, x + w - 1, y + h - 1);
+ // Draw crossing pixels.
+ g.setColor(middle);
+ g.fillRect(x + w - 2, y + 2, 1, 1);
+ g.fillRect(x + 2, y + h - 2, 1, 1);
+ }
+ else
+ {
+ // The normal border. This is used when the button is not
+ // pressed or the button is not armed.
+ if (! (bmodel.isPressed() && bmodel.isArmed()) )
{
// draw light border
g.setColor(light);
@@ -166,6 +202,8 @@ public class MetalBorders
g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
}
+ // The pressed border. This border is painted only when
+ // the button is both pressed and armed.
else
{
// draw light border
@@ -184,12 +222,12 @@ public class MetalBorders
g.drawRect(x + w - 2, y + 1, 0, 0);
}
}
- else
- {
- // draw disabled border
- g.setColor(MetalLookAndFeel.getInactiveControlTextColor());
- g.drawRect(x, y, w - 2, h - 2);
- }
+ }
+ else
+ {
+ // draw disabled border
+ g.setColor(MetalLookAndFeel.getInactiveControlTextColor());
+ g.drawRect(x, y, w - 2, h - 2);
}
}
@@ -218,11 +256,16 @@ public class MetalBorders
if (c.isEnabled())
{
- if (bmodel.isPressed())
+ // Paint the pressed border if the button is pressed, or if
+ // the button is the default button. In the OceanTheme, the default
+ // button has the same border as a pressed button.
+ if (bmodel.isPressed() || ((c instanceof JButton)
+ && ((JButton) c).isDefaultButton()))
{
- // draw fat border
- g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
- g.drawLine(x + 1, y + 1, x + 1, y + h - 2);
+ // Draw fat border.
+ g.setColor(darkShadow);
+ g.drawRect(x, y, w - 1, h - 1);
+ g.drawRect(x + 1, y + 1, w - 3, h - 3);
}
else if (bmodel.isRollover())
{
@@ -1025,14 +1068,10 @@ public class MetalBorders
public void paintBorder(Component c, Graphics g, int x, int y, int w,
int h)
{
- boolean mouseIsOver = false;
- if (c instanceof AbstractButton)
- {
- ButtonModel bmodel = ((AbstractButton) c).getModel();
- mouseIsOver = bmodel.isRollover();
- }
- if (mouseIsOver)
- super.paintBorder(c, g, x, y, w, h);
+ // TODO: What should be done here? Obviously the ButtonBorder already
+ // handles the rollover state in Sun's impl. Maybe this is only there
+ // for backwards compatibility.
+ super.paintBorder(c, g, x, y, w, h);
}
}
@@ -1520,8 +1559,7 @@ public class MetalBorders
{
Border outer = new ButtonBorder();
Border inner = new RolloverMarginBorder();
- toolbarButtonBorder = new BorderUIResource.CompoundBorderUIResource
- (outer, inner);
+ toolbarButtonBorder = new CompoundBorder(outer, inner);
}
return toolbarButtonBorder;
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java b/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java
index e6fb22e..f2f778f 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java
@@ -41,7 +41,6 @@ package javax.swing.plaf.metal;
import java.beans.PropertyChangeEvent;
import javax.swing.AbstractButton;
-import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicButtonListener;
/**
@@ -70,17 +69,6 @@ class MetalButtonListener extends BasicButtonListener
public void propertyChange(PropertyChangeEvent e)
{
super.propertyChange(e);
- if (e.getPropertyName().equals(
- AbstractButton.ROLLOVER_ENABLED_CHANGED_PROPERTY))
- {
- AbstractButton b = (AbstractButton) e.getSource();
- if (b.getBorder() instanceof UIResource)
- {
- if (Boolean.TRUE.equals(e.getNewValue()))
- b.setBorder(MetalBorders.getRolloverBorder());
- else if (Boolean.FALSE.equals(e.getNewValue()))
- b.setBorder(MetalBorders.getButtonBorder());
- }
- }
+ // TODO: What should be done here?
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java
index 10e5111..83cd336 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java
@@ -45,6 +45,7 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
+import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.SwingConstants;
@@ -160,8 +161,8 @@ public class MetalButtonUI
}
/**
- * Paints the background of the button to indicate that it is in the "pressed"
- * state.
+ * Paints the background of the button to indicate that it is in the
+ * "pressed" state.
*
* @param g the graphics context.
* @param b the button.
@@ -234,8 +235,12 @@ public class MetalButtonUI
public void update(Graphics g, JComponent c)
{
AbstractButton b = (AbstractButton) c;
- if (b.isOpaque() && UIManager.get(getPropertyPrefix() + "gradient") != null
- && !b.getModel().isPressed() && b.isEnabled())
+ ButtonModel m = b.getModel();
+ if (b.isContentAreaFilled()
+ && (UIManager.get(getPropertyPrefix() + "gradient") != null)
+ && ! m.isPressed() && ! m.isArmed()
+ && b.isEnabled()
+ && (b.getBackground() instanceof UIResource))
{
MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(),
SwingConstants.VERTICAL,
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java
index 6993e18..3787a98 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java
@@ -38,22 +38,25 @@ exception statement from your version. */
package javax.swing.plaf.metal;
+import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
-import java.awt.Rectangle;
import javax.swing.CellRendererPane;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JList;
-import javax.swing.SwingUtilities;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
/**
* A button used by the {@link MetalComboBoxUI} class.
*/
-public class MetalComboBoxButton extends JButton {
+public class MetalComboBoxButton
+ extends JButton
+{
/** A reference to the JComboBox that the button belongs to. */
protected JComboBox comboBox;
@@ -61,7 +64,9 @@ public class MetalComboBoxButton extends JButton {
/** A reference to the JList. */
protected JList listBox;
- /** ??? */
+ /**
+ * Used for rendering the selected item.
+ */
protected CellRendererPane rendererPane;
/** The button icon. */
@@ -91,7 +96,7 @@ public class MetalComboBoxButton extends JButton {
* @param cb the combo that the button is used for (<code>null</code> not
* permitted).
* @param i the icon displayed on the button.
- * @parma onlyIcon a flag that specifies whether the button displays only an
+ * @param onlyIcon a flag that specifies whether the button displays only an
* icon, or text as well.
* @param pane the rendering pane.
* @param list the list.
@@ -107,6 +112,9 @@ public class MetalComboBoxButton extends JButton {
iconOnly = onlyIcon;
listBox = list;
rendererPane = pane;
+ setRolloverEnabled(false);
+ setEnabled(comboBox.isEnabled());
+ setFocusable(comboBox.isEnabled());
}
/**
@@ -191,8 +199,16 @@ public class MetalComboBoxButton extends JButton {
public void setEnabled(boolean enabled)
{
super.setEnabled(enabled);
- // TODO: figure out what this might need to be used for
- // perhaps it has something to do with the button's icon and/or border?
+ if (enabled)
+ {
+ setBackground(comboBox.getBackground());
+ setForeground(comboBox.getForeground());
+ }
+ else
+ {
+ setBackground(UIManager.getColor("ComboBox.disabledBackground"));
+ setForeground(UIManager.getColor("ComboBox.disabledForeground"));
+ }
}
/**
@@ -203,39 +219,75 @@ public class MetalComboBoxButton extends JButton {
public void paintComponent(Graphics g)
{
super.paintComponent(g);
- if (iconOnly)
- {
- Rectangle bounds = getBounds();
- int x = (bounds.width - comboIcon.getIconWidth()) / 2;
- int y = (bounds.height - comboIcon.getIconHeight()) / 2;
- comboIcon.paintIcon(comboBox, g, x, y);
- }
- else
+ Insets insets = this.getInsets();
+ int w = getWidth() - (insets.left + insets.right);
+ int h = getHeight() - (insets.top + insets.bottom);
+ if (h > 0 && w > 0)
{
- Object selected = comboBox.getModel().getSelectedItem();
- if (selected == null)
- selected = "";
- Rectangle bounds = comboBox.getBounds();
- Rectangle innerArea = SwingUtilities.calculateInnerArea(this, null);
- Insets insets = comboBox.getInsets();
- Rectangle renderArea = new Rectangle(innerArea.x, innerArea.y,
- innerArea.width - comboIcon.getIconWidth() - 4, innerArea.height);
- Component cellRenderer
- = comboBox.getRenderer().getListCellRendererComponent(this.listBox,
- selected, comboBox.getSelectedIndex(), false, false);
- cellRenderer.setBackground(comboBox.getBackground());
- cellRenderer.setEnabled(comboBox.isEnabled());
- rendererPane.paintComponent(g, cellRenderer, this, renderArea);
- if (comboBox.hasFocus())
+ int x1 = insets.left;
+ int y1 = insets.top;
+ int x2 = x1 + (w - 1);
+ int y2 = y1 + (h - 1);
+ int iconWidth = 0;
+ int iconX = x2;
+ if (comboIcon != null)
+ {
+ iconWidth = comboIcon.getIconWidth();
+ int iconHeight = comboIcon.getIconHeight();
+ int iconY;
+ if (iconOnly)
+ {
+ iconX = getWidth() / 2 - iconWidth / 2;
+ iconY = getHeight() / 2 - iconHeight / 2;
+ }
+ else
+ {
+ iconX = x1 + (w - 1) - iconWidth;
+ iconY = y1 + (y2 - y1) / 2 - iconHeight / 2;
+ }
+ comboIcon.paintIcon(this, g, iconX, iconY);
+ if (this.hasFocus())
+ {
+ g.setColor(MetalLookAndFeel.getFocusColor());
+ g.drawRect(x1 - 1, y1 - 1, w + 3, h + 1);
+ }
+ }
+ if (! iconOnly && comboBox != null)
{
- g.setColor(MetalLookAndFeel.getFocusColor());
- g.drawRect(innerArea.x, innerArea.y - 1, innerArea.width - 1,
- innerArea.height);
+ ListCellRenderer renderer = comboBox.getRenderer();
+ boolean pressed = this.getModel().isPressed();
+ Component comp= renderer.getListCellRendererComponent(listBox,
+ comboBox.getSelectedItem(),
+ -1, false, false);
+ comp.setFont(rendererPane.getFont());
+ if (model.isArmed() && model.isPressed())
+ {
+ if (isOpaque())
+ {
+ comp.setBackground(UIManager.getColor("Button.select"));
+ comp.setForeground(comboBox.getForeground());
+ }
+ }
+ else if (! comboBox.isEnabled())
+ {
+ if (this.isOpaque())
+ {
+ Color dbg =
+ UIManager.getColor("ComboBox.disabledBackground");
+ comp.setBackground(dbg);
+ Color dfg =
+ UIManager.getColor("ComboBox.disabledForeground");
+ comp.setForeground(dfg);
+ }
+ }
+ else
+ {
+ comp.setForeground(comboBox.getForeground());
+ comp.setBackground(comboBox.getBackground());
+ }
+ int wr = w - (insets.right + iconWidth);
+ rendererPane.paintComponent(g, comp, this, x1, y1, wr, h);
}
- int iconX = bounds.width - insets.right - comboIcon.getIconWidth() - 7;
- int iconY = insets.top
- + (bounds.height - comboIcon.getIconHeight()) / 2;
- comboIcon.paintIcon(comboBox, g, iconX, iconY);
}
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java
index a531079..11e4151 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java
@@ -38,15 +38,15 @@ exception statement from your version. */
package javax.swing.plaf.metal;
-import java.awt.Color;
import java.awt.Component;
+import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.JTextField;
+import javax.swing.border.AbstractBorder;
import javax.swing.plaf.basic.BasicComboBoxEditor;
import javax.swing.plaf.metal.MetalLookAndFeel;
-import javax.swing.plaf.metal.MetalBorders.Flush3DBorder;
/**
* An editor used by the {@link MetalComboBoxUI} class.
@@ -56,7 +56,7 @@ public class MetalComboBoxEditor extends BasicComboBoxEditor
/**
* A border used for the {@link JTextField} component.
*/
- static class MetalComboBoxEditorBorder extends Flush3DBorder
+ static class MetalComboBoxEditorBorder extends AbstractBorder
{
/**
* Creates a new border instance.
@@ -78,20 +78,34 @@ public class MetalComboBoxEditor extends BasicComboBoxEditor
*/
public void paintBorder(Component c, Graphics g, int x, int y, int w,
int h)
- {
- Color savedColor = g.getColor();
- if (c.isEnabled())
- g.setColor(MetalLookAndFeel.getControlDarkShadow());
+ {
+ g.translate(x, y);
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)
+ {
+ g.setColor(MetalLookAndFeel.getControlDarkShadow());
+ g.drawLine(0, 0, w - 1, 0);
+ g.drawLine(0, 0, 0, h - 1);
+ g.drawLine(0, h - 1, w - 1, h - 1);
+ g.setColor(MetalLookAndFeel.getControlShadow());
+ g.drawLine(1, 1, w - 2, 1);
+ g.drawLine(1, 1, 1, h - 2);
+ g.drawLine(1, h - 2, w - 1, h - 2);
+ g.drawLine(w - 1, 1, w - 1, h - 2);
+ }
else
- g.setColor(MetalLookAndFeel.getControlShadow());
- g.drawLine(x, y, x + w - 1, y);
- g.drawLine(x, y, x, y + h - 2);
- g.drawLine(x + 2, y + h - 2, x + w - 1, y + h - 2);
- g.setColor(MetalLookAndFeel.getControl());
- g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
- g.setColor(MetalLookAndFeel.getWhite());
- g.drawLine(x, y + h - 1, x + w - 1, y + h - 1);
- g.setColor(savedColor);
+ {
+ g.setColor(MetalLookAndFeel.getControlDarkShadow());
+ g.drawLine(0, 0, w - 1, 0);
+ g.drawLine(0, 0, 0, h - 2);
+ g.drawLine(0, h - 2, w - 1, h - 2);
+ g.setColor(MetalLookAndFeel.getControlHighlight());
+ g.drawLine(1, 1, w - 1, 1);
+ g.drawLine(1, 1, 1, h - 1);
+ g.drawLine(1, h - 1, w - 1, h - 1);
+ g.setColor(MetalLookAndFeel.getControl());
+ g.drawLine(1, h - 2, 1, h - 2);
+ }
+ g.translate(-x, -y);
}
/**
@@ -127,16 +141,49 @@ public class MetalComboBoxEditor extends BasicComboBoxEditor
// Nothing to do here.
}
}
-
+
+ /**
+ * A special textfield implementation for the MetalComboBoxEditor.
+ */
+ private class EditorTextField extends JTextField
+ {
+ EditorTextField(String s, int columns)
+ {
+ super(s, columns);
+ }
+
+ /**
+ * Tests seem to show that the textfield in MetalComboBoxEditors have
+ * a height + 4.
+ */
+ public Dimension getPreferredSize()
+ {
+ Dimension size = super.getPreferredSize();
+ size.height += 4;
+ return size;
+ }
+
+ /**
+ * Tests seem to show that the textfield in MetalComboBoxEditors have
+ * a height + 4.
+ */
+ public Dimension getMinimumSize()
+ {
+ Dimension size = super.getMinimumSize();
+ size.height += 4;
+ return size;
+ }
+ }
+
/** The editor's border insets. */
- protected static Insets editorBorderInsets = new Insets(4, 2, 4, 0);
+ protected static Insets editorBorderInsets = new Insets(2, 2, 2, 0);
/**
* Creates a new editor.
*/
public MetalComboBoxEditor()
{
- super();
+ editor = new EditorTextField("", 9);
editor.setBorder(new MetalComboBoxEditorBorder());
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java
index 0006b78..c24c085 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java
@@ -38,12 +38,12 @@ exception statement from your version. */
package javax.swing.plaf.metal;
+import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
-import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
@@ -88,14 +88,7 @@ public class MetalComboBoxUI extends BasicComboBoxUI
*/
public void layoutContainer(Container parent)
{
- JComboBox cb = (JComboBox) parent;
- if (!cb.isEditable())
- {
- Rectangle bounds = parent.getBounds();
- arrowButton.setBounds(0, 0, bounds.width, bounds.height);
- }
- else
- superLayout(parent);
+ layoutComboBox(parent, this);
}
/**
@@ -134,9 +127,31 @@ public class MetalComboBoxUI extends BasicComboBoxUI
*/
public void propertyChange(PropertyChangeEvent e)
{
- if (e.getPropertyName().equals("editable"))
- editablePropertyChanged(e);
super.propertyChange(e);
+ String name = e.getPropertyName();
+ if (name.equals("editable"))
+ editablePropertyChanged(e);
+ else if (name.equals("enabled"))
+ {
+ if (arrowButton instanceof MetalComboBoxButton)
+ {
+ arrowButton.setFocusable(!comboBox.isEditable()
+ && comboBox.isEnabled());
+ comboBox.repaint();
+ }
+ }
+ else if (name.equals("background"))
+ {
+ Color c = (Color) e.getNewValue();
+ arrowButton.setBackground(c);
+ listBox.setBackground(c);
+ }
+ else if (name.equals("foreground"))
+ {
+ Color c = (Color) e.getNewValue();
+ arrowButton.setForeground(c);
+ listBox.setForeground(c);
+ }
}
}
@@ -247,22 +262,8 @@ public class MetalComboBoxUI extends BasicComboBoxUI
{
MetalComboBoxButton b = (MetalComboBoxButton) arrowButton;
b.setIconOnly(comboBox.isEditable());
- }
- if (comboBox.isEditable())
- {
- arrowButton.setText(null);
- if (editor != null)
- editor.setVisible(true);
- }
- else
- {
- String text = "";
- Object selected = comboBox.getSelectedItem();
- if (selected != null)
- text = selected.toString();
- arrowButton.setText(text);
- if (editor != null)
- editor.setVisible(true);
+ b.setFocusable(!comboBox.isEditable() && comboBox.isEnabled());
+ comboBox.repaint();
}
}
@@ -295,22 +296,39 @@ public class MetalComboBoxUI extends BasicComboBoxUI
*/
public Dimension getMinimumSize(JComponent c)
{
- Dimension d = getDisplaySize();
- MetalComboBoxButton b = (MetalComboBoxButton) arrowButton;
- Insets insets = b.getInsets();
- int insetsH = insets.top + insets.bottom;
- int insetsW = insets.left + insets.right;
- if (!comboBox.isEditable())
+ if (!isMinimumSizeDirty)
+ return new Dimension(cachedMinimumSize);
+
+ Dimension d;
+ if (!comboBox.isEditable() && arrowButton != null
+ && arrowButton instanceof MetalComboBoxButton)
{
+ MetalComboBoxButton b = (MetalComboBoxButton) arrowButton;
+ d = getDisplaySize();
+ Insets insets = b.getInsets();
+ Insets arrowInsets = b.getInsets();
+ Insets comboInsets = comboBox.getInsets();
Icon icon = b.getComboIcon();
- int iconWidth = icon.getIconWidth() + 6;
- return new Dimension(d.width + insetsW + iconWidth, d.height + insetsH);
+ d.width += comboInsets.left + comboInsets.right;
+ d.width += arrowInsets.left + arrowInsets.right;
+ d.width += arrowInsets.right + icon.getIconWidth();
+ d.height += comboInsets.top + comboInsets.bottom;
+ d.height += arrowInsets.top + arrowInsets.bottom;
+ }
+ else if (comboBox.isEditable() && arrowButton != null && editor != null)
+ {
+ d = super.getMinimumSize(c);
+ Insets arrowMargin = arrowButton.getMargin();
+ d.height += arrowMargin.top + arrowMargin.bottom;
+ d.width += arrowMargin.left + arrowMargin.right;
}
else
- // FIXME: the following dimensions pass most of the Mauve tests, but
- // I don't yet understand the logic behind this...it is probably wrong
- return new Dimension(d.width + insetsW + (d.height + insetsH) - 4,
- d.height + insetsH + 1);
+ {
+ d = super.getMinimumSize(c);
+ }
+ cachedMinimumSize.setSize(d.width, d.height);
+ isMinimumSizeDirty = false;
+ return new Dimension(cachedMinimumSize);
}
/**
@@ -318,27 +336,21 @@ public class MetalComboBoxUI extends BasicComboBoxUI
*/
public void configureEditor()
{
- ComboBoxEditor cbe = comboBox.getEditor();
- if (cbe != null)
- {
- cbe.getEditorComponent().setFont(comboBox.getFont());
- cbe.setItem(comboBox.getSelectedItem());
- cbe.addActionListener(comboBox);
- }
+ super.configureEditor();
+ if (popupKeyListener != null)
+ editor.removeKeyListener(popupKeyListener);
+ if (focusListener != null)
+ editor.addFocusListener(focusListener);
}
-
+
/**
* Unconfigures the editor for this combo box.
*/
public void unconfigureEditor()
{
- ComboBoxEditor cbe = comboBox.getEditor();
- if (cbe != null)
- {
- cbe.getEditorComponent().setFont(null);
- cbe.setItem(null);
- cbe.removeActionListener(comboBox);
- }
+ super.unconfigureEditor();
+ if (focusListener != null)
+ editor.removeFocusListener(focusListener);
}
/**
@@ -347,6 +359,16 @@ public class MetalComboBoxUI extends BasicComboBoxUI
public void layoutComboBox(Container parent,
MetalComboBoxUI.MetalComboBoxLayoutManager manager)
{
- manager.layoutContainer(parent);
+ if (comboBox.isEditable())
+ manager.superLayout(parent);
+ else if (arrowButton != null)
+ {
+ Insets comboInsets = comboBox.getInsets();
+ int width = comboBox.getWidth();
+ int height = comboBox.getHeight();
+ arrowButton.setBounds(comboInsets.left, comboInsets.top,
+ width - (comboInsets.left + comboInsets.right),
+ height - (comboInsets.top + comboInsets.bottom));
+ }
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java
index ecbb76e..0c1163a 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java
@@ -1,5 +1,5 @@
/* MetalDesktopIconUI.java
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,10 +50,6 @@ public class MetalDesktopIconUI
extends BasicDesktopIconUI
{
- // FIXME: maybe replace by a Map of instances when this becomes stateful
- /** The shared UI instance for MetalDesktopIcons */
- private static MetalDesktopIconUI instance = null;
-
/**
* Constructs a new instance of <code>MetalDesktopIconUI</code>.
*/
@@ -63,16 +59,14 @@ public class MetalDesktopIconUI
}
/**
- * Returns a shared instance of <code>MetalDesktopIconUI</code>.
+ * Returns a new <code>MetalDesktopIconUI</code> instance.
*
- * @param component the component for which we return an UI instance
+ * @param component the component (ignored).
*
- * @return A shared instance of <code>MetalDesktopIconUI</code>.
+ * @return A new <code>MetalDesktopIconUI</code> instance.
*/
public static ComponentUI createUI(JComponent component)
{
- if (instance == null)
- instance = new MetalDesktopIconUI();
- return instance;
+ return new MetalDesktopIconUI();
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java b/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java
index 0b644f3..d24a052 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java
@@ -756,6 +756,17 @@ public class MetalIconFactory implements Serializable
{
/**
+ * This is used as a mask when painting the gradient. See
+ * {@link MetalUtils#paintGradient(java.awt.Graphics, int, int, int, int,
+ * float, float, java.awt.Color, java.awt.Color, java.awt.Color, int,
+ * int[][])} for details.
+ */
+ private static int[][] gradientMask = new int[][] {{3, 7}, {1, 9}, {1, 9},
+ {0, 10}, {0, 10}, {0, 10},
+ {0, 10}, {1, 9}, {1, 9},
+ {3, 7}};
+
+ /**
* Returns the width of the icon in pixels.
*
* @return the width of the icon in pixels
@@ -788,12 +799,13 @@ public class MetalIconFactory implements Serializable
public void paintIcon(Component c, Graphics g, int x, int y)
{
if (UIManager.get("RadioButton.gradient") != null)
- MetalUtils.paintGradient(g, x, y, getIconWidth(), getIconHeight(),
- SwingConstants.VERTICAL, "RadioButton.gradient");
+ MetalUtils.paintGradient(g, x + 2, y + 2, 8, 8,
+ SwingConstants.VERTICAL, "RadioButton.gradient",
+ gradientMask);
Color savedColor = g.getColor();
JRadioButton b = (JRadioButton) c;
-
+
// draw outer circle
if (b.isEnabled())
g.setColor(MetalLookAndFeel.getControlDarkShadow());
@@ -951,6 +963,14 @@ public class MetalIconFactory implements Serializable
{
/**
+ * This mask is used to paint the gradient in the shape of the thumb.
+ */
+ int[][] gradientMask = new int[][] { {0, 12}, {0, 12}, {0, 12}, {0, 12},
+ {0, 12}, {0, 12}, {0, 12}, {1, 12},
+ {2, 10}, {3, 9}, {4, 8}, {5, 7},
+ {6, 6}};
+
+ /**
* Creates a new instance.
*/
public HorizontalSliderThumbIcon()
@@ -1008,21 +1028,37 @@ public class MetalIconFactory implements Serializable
g.drawLine(x + 6, y + 14, x, y + 8);
g.drawLine(x, y + 7, x, y + 1);
- // fill the icon
- if (focus)
- g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ // Fill the icon.
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme
+ && enabled)
+ {
+ String gradient;
+ if (focus)
+ gradient = "Slider.focusGradient";
+ else
+ gradient = "Slider.gradient";
+ MetalUtils.paintGradient(g, x + 1, y + 2, 12, 13,
+ SwingConstants.VERTICAL, gradient,
+ gradientMask);
+ }
else
- g.setColor(MetalLookAndFeel.getControl());
- g.fillRect(x + 1, y + 2, 13, 7);
- g.drawLine(x + 2, y + 9, x + 12, y + 9);
- g.drawLine(x + 3, y + 10, x + 11, y + 10);
- g.drawLine(x + 4, y + 11, x + 10, y + 11);
- g.drawLine(x + 5, y + 12, x + 9, y + 12);
- g.drawLine(x + 6, y + 13, x + 8, y + 13);
- g.drawLine(x + 7, y + 14, x + 7, y + 14);
-
- // if the slider is enabled, draw dots and highlights
- if (c.isEnabled())
+ {
+ if (focus)
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ else
+ g.setColor(MetalLookAndFeel.getControl());
+ g.fillRect(x + 1, y + 2, 13, 7);
+ g.drawLine(x + 2, y + 9, x + 12, y + 9);
+ g.drawLine(x + 3, y + 10, x + 11, y + 10);
+ g.drawLine(x + 4, y + 11, x + 10, y + 11);
+ g.drawLine(x + 5, y + 12, x + 9, y + 12);
+ g.drawLine(x + 6, y + 13, x + 8, y + 13);
+ g.drawLine(x + 7, y + 14, x + 7, y + 14);
+ }
+
+ // If the slider is enabled, draw dots and highlights.
+ if (c.isEnabled()
+ && !(MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme))
{
if (focus)
g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
@@ -1039,7 +1075,7 @@ public class MetalIconFactory implements Serializable
g.drawLine(x + 7, y + 7, x + 7, y + 7);
g.drawLine(x + 11, y + 7, x + 11, y + 7);
- // draw highlights
+ // Draw highlights
if (focus)
g.setColor(MetalLookAndFeel.getPrimaryControl());
else
@@ -1583,6 +1619,14 @@ public class MetalIconFactory implements Serializable
private static class VerticalSliderThumbIcon implements Icon, Serializable
{
/**
+ * This mask is used to paint the gradient in the shape of the thumb.
+ */
+ int[][] gradientMask = new int[][] { {0, 12}, {0, 12}, {0, 12}, {0, 12},
+ {0, 12}, {0, 12}, {0, 12}, {1, 12},
+ {2, 10}, {3, 9}, {4, 8}, {5, 7},
+ {6, 6}};
+
+ /**
* Creates a new instance.
*/
public VerticalSliderThumbIcon()
@@ -1641,21 +1685,37 @@ public class MetalIconFactory implements Serializable
g.drawLine(x + 8, y + 14, x + 1, y + 14);
g.drawLine(x, y + 13, x, y + 1);
- // fill the icon
- if (focus)
- g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ // Fill the icon.
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme
+ && enabled)
+ {
+ String gradient;
+ if (focus)
+ gradient = "Slider.focusGradient";
+ else
+ gradient = "Slider.gradient";
+ MetalUtils.paintGradient(g, x + 2, y + 1, 13, 12,
+ SwingConstants.HORIZONTAL, gradient,
+ gradientMask);
+ }
else
- g.setColor(MetalLookAndFeel.getControl());
- g.fillRect(x + 2, y + 1, 7, 13);
- g.drawLine(x + 9, y + 2, x + 9, y + 12);
- g.drawLine(x + 10, y + 3, x + 10, y + 11);
- g.drawLine(x + 11, y + 4, x + 11, y + 10);
- g.drawLine(x + 12, y + 5, x + 12, y + 9);
- g.drawLine(x + 13, y + 6, x + 13, y + 8);
- g.drawLine(x + 14, y + 7, x + 14, y + 7);
-
+ {
+ if (focus)
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ else
+ g.setColor(MetalLookAndFeel.getControl());
+ g.fillRect(x + 2, y + 1, 7, 13);
+ g.drawLine(x + 9, y + 2, x + 9, y + 12);
+ g.drawLine(x + 10, y + 3, x + 10, y + 11);
+ g.drawLine(x + 11, y + 4, x + 11, y + 10);
+ g.drawLine(x + 12, y + 5, x + 12, y + 9);
+ g.drawLine(x + 13, y + 6, x + 13, y + 8);
+ g.drawLine(x + 14, y + 7, x + 14, y + 7);
+ }
+
// if the slider is enabled, draw dots and highlights
- if (enabled)
+ if (enabled
+ && ! (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme))
{
if (focus)
g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java b/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
index 2cf5f67..f74828e 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java
@@ -93,7 +93,11 @@ public class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane
public void propertyChange(PropertyChangeEvent e)
{
String propName = e.getPropertyName();
- if (propName.equals("JInternalFrame.isPalette"))
+ if (e.getPropertyName().equals(JInternalFrame.FRAME_ICON_PROPERTY))
+ {
+ title.setIcon( frame.getFrameIcon() );
+ }
+ else if (propName.equals("JInternalFrame.isPalette"))
{
if (e.getNewValue().equals(Boolean.TRUE))
setPalette(true);
@@ -262,7 +266,7 @@ public class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane
paletteTitleHeight = UIManager.getInt("InternalFrame.paletteTitleHeight");
paletteCloseIcon = UIManager.getIcon("InternalFrame.paletteCloseIcon");
minIcon = MetalIconFactory.getInternalFrameAltMaximizeIcon(16);
-
+
title = new JLabel(frame.getTitle(),
MetalIconFactory.getInternalFrameDefaultMenuIcon(),
SwingConstants.LEFT);
@@ -329,9 +333,10 @@ public class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane
}
/**
- * Creates a new instance of {@link MetalTitlePaneLayout}.
+ * Creates a new instance of <code>MetalTitlePaneLayout</code> (not part of
+ * the public API).
*
- * @return A new instance of {@link MetalTitlePaneLayout}.
+ * @return A new instance of <code>MetalTitlePaneLayout</code>.
*/
protected LayoutManager createLayout()
{
@@ -382,8 +387,8 @@ public class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane
paintPalette(g);
else
{
- paintTitleBackground(g);
- paintChildren(g);
+ paintTitleBackground(g);
+ paintChildren(g);
Dimension d = getSize();
if (frame.isSelected())
g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java b/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java
index e846446..7a973d4 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java
@@ -1,5 +1,5 @@
/* MetalLookAndFeel.java
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -90,7 +90,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel
protected void createDefaultTheme()
{
if (theme == null)
- setCurrentTheme(new DefaultMetalTheme());
+ setCurrentTheme(new OceanTheme());
}
/**
@@ -899,7 +899,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel
"CheckBoxMenuItem.acceleratorForeground", getAcceleratorForeground(),
"CheckBoxMenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(),
"CheckBoxMenuItem.background", getMenuBackground(),
- "CheckBoxMenuItem.borderPainted", new Boolean(true),
+ "CheckBoxMenuItem.borderPainted", Boolean.TRUE,
"CheckBoxMenuItem.commandSound", "sounds/MenuItemCommand.wav",
"CheckBoxMenuItem.checkIcon", MetalIconFactory.getCheckBoxMenuItemIcon(),
"CheckBoxMenuItem.disabledForeground", getMenuDisabledForeground(),
@@ -1204,7 +1204,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel
"Table.focusCellForeground", getControlTextColor(),
"Table.foreground", getControlTextColor(),
"Table.focusCellHighlightBorder",
- new BorderUIResource.LineBorderUIResource(getControlShadow()),
+ new BorderUIResource.LineBorderUIResource(getFocusColor()),
"Table.focusCellBackground", getWindowBackground(),
"Table.gridColor", getControlDarkShadow(),
"Table.selectionBackground", new ColorUIResource(204, 204, 255),
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java
index 23051e9..6cabc7e 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java
@@ -47,11 +47,11 @@ import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.LayoutManager2;
+import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.ActionEvent;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
+import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import javax.swing.AbstractAction;
@@ -70,6 +70,7 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.AbstractBorder;
+import javax.swing.event.MouseInputAdapter;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicRootPaneUI;
@@ -191,6 +192,50 @@ public class MetalRootPaneUI
*/
private static class MetalTitlePane extends JComponent
{
+
+ /**
+ * Handles dragging of the title pane and moves the window accordingly.
+ */
+ private class MouseHandler
+ extends MouseInputAdapter
+ {
+ /**
+ * The point where the dragging started.
+ */
+ Point lastDragLocation;
+
+ /**
+ * Receives notification when the mouse gets pressed on the title pane.
+ * This updates the lastDragLocation.
+ *
+ * @param ev the mouse event
+ */
+ public void mousePressed(MouseEvent ev)
+ {
+ lastDragLocation = ev.getPoint();
+ }
+
+ /**
+ * Receives notification when the mouse is dragged on the title pane.
+ * This will move the nearest window accordingly.
+ *
+ * @param ev the mouse event
+ */
+ public void mouseDragged(MouseEvent ev)
+ {
+ Point dragLocation = ev.getPoint();
+ int deltaX = dragLocation.x - lastDragLocation.x;
+ int deltaY = dragLocation.y - lastDragLocation.y;
+ Window window = SwingUtilities.getWindowAncestor(rootPane);
+ Point loc = window.getLocation();
+ window.setLocation(loc.x + deltaX, loc.y + deltaY);
+ // Note that we do not update the lastDragLocation. This is because
+ // we move the underlying window while dragging the component, which
+ // results in having the same lastDragLocation under the mouse while
+ // dragging.
+ }
+ }
+
/**
* The Action responsible for closing the JInternalFrame.
*/
@@ -255,6 +300,45 @@ public class MetalRootPaneUI
}
/**
+ * This action is performed when the iconify button is pressed.
+ */
+ private class IconifyAction
+ extends AbstractAction
+ {
+
+ public void actionPerformed(ActionEvent event)
+ {
+ Window w = SwingUtilities.getWindowAncestor(rootPane);
+ if (w instanceof Frame)
+ {
+ Frame f = (Frame) w;
+ int state = f.getExtendedState();
+ f.setExtendedState(Frame.ICONIFIED);
+ }
+ }
+
+ }
+
+ /**
+ * This action is performed when the maximize button is pressed.
+ */
+ private class MaximizeAction
+ extends AbstractAction
+ {
+
+ public void actionPerformed(ActionEvent event)
+ {
+ Window w = SwingUtilities.getWindowAncestor(rootPane);
+ if (w instanceof Frame)
+ {
+ Frame f = (Frame) w;
+ int state = f.getExtendedState();
+ f.setExtendedState(Frame.MAXIMIZED_BOTH);
+ }
+ }
+ }
+
+ /**
* This helper class is used to create the minimize, maximize and close
* buttons in the top right corner of the Title Pane. These buttons are
* special since they cannot be given focus and have no border.
@@ -499,23 +583,16 @@ public class MetalRootPaneUI
private void installListeners()
{
- Window window = SwingUtilities.getWindowAncestor(rootPane);
- window.addWindowFocusListener(new WindowFocusListener()
- {
- public void windowGainedFocus(WindowEvent ev)
- {
- repaint();
- }
- public void windowLostFocus(WindowEvent ev)
- {
- repaint();
- }
- });
+ MouseInputAdapter mouseHandler = new MouseHandler();
+ addMouseListener(mouseHandler);
+ addMouseMotionListener(mouseHandler);
}
private void createActions()
{
closeAction = new CloseAction();
+ iconifyAction = new IconifyAction();
+ maximizeAction = new MaximizeAction();
}
private void assembleSystemMenu()
@@ -699,6 +776,21 @@ public class MetalRootPaneUI
*/
private Dimension prefSize;
+ /**
+ * The title pane for l&f decorated frames.
+ */
+ private MetalTitlePane titlePane;
+
+ /**
+ * Creates a new MetalRootLayout.
+ *
+ * @param tp the title pane
+ */
+ MetalRootLayout(MetalTitlePane tp)
+ {
+ titlePane = tp;
+ }
+
public void addLayoutComponent(Component component, Object constraints)
{
// Nothing to do here.
@@ -747,12 +839,8 @@ public class MetalRootPaneUI
{
JRootPane rp = (JRootPane) parent;
JLayeredPane layeredPane = rp.getLayeredPane();
- Component contentPane = layeredPane.getComponent(0);
- Component titlePane = layeredPane.getComponent(1);
- Component menuBar = null;
- if (layeredPane.getComponentCount() > 2
- && layeredPane.getComponent(2) instanceof JMenuBar)
- menuBar = layeredPane.getComponent(2);
+ Component contentPane = rp.getContentPane();
+ Component menuBar = rp.getJMenuBar();
// We must synchronize here, otherwise we cannot guarantee that the
// prefSize is still non-null when returning.
@@ -789,12 +877,8 @@ public class MetalRootPaneUI
{
JRootPane rp = (JRootPane) parent;
JLayeredPane layeredPane = rp.getLayeredPane();
- Component contentPane = layeredPane.getComponent(0);
- Component titlePane = layeredPane.getComponent(1);
- Component menuBar = null;
- if (layeredPane.getComponentCount() > 2
- && layeredPane.getComponent(2) instanceof JMenuBar)
- menuBar = layeredPane.getComponent(2);
+ Component contentPane = rp.getContentPane();
+ Component menuBar = rp.getJMenuBar();
Component glassPane = rp.getGlassPane();
if (glassPaneBounds == null || layeredPaneBounds == null
@@ -937,6 +1021,7 @@ public class MetalRootPaneUI
*/
public void propertyChange(PropertyChangeEvent ev)
{
+ super.propertyChange(ev);
String propertyName = ev.getPropertyName();
if (propertyName.equals("windowDecorationStyle"))
{
@@ -958,12 +1043,14 @@ public class MetalRootPaneUI
private void installWindowDecorations(JRootPane rp)
{
rp.setBorder(new MetalFrameBorder());
- rp.setLayout(new MetalRootLayout());
+ MetalTitlePane titlePane = new MetalTitlePane(rp);
+ rp.setLayout(new MetalRootLayout(titlePane));
// We should have a contentPane already.
- assert rp.getLayeredPane().getComponentCount() == 1
+ assert rp.getLayeredPane().getComponentCount() > 0
: "We should have a contentPane already";
- rp.getLayeredPane().add(new MetalTitlePane(rp),
- JLayeredPane.FRAME_CONTENT_LAYER);
+
+ rp.getLayeredPane().add(titlePane,
+ JLayeredPane.FRAME_CONTENT_LAYER, 1);
}
/**
@@ -975,6 +1062,14 @@ public class MetalRootPaneUI
private void uninstallWindowDecorations(JRootPane rp)
{
rp.setBorder(null);
- rp.getLayeredPane().remove(1);
+ JLayeredPane lp = rp.getLayeredPane();
+ for (int i = lp.getComponentCount() - 1; i >= 0; --i)
+ {
+ if (lp.getComponent(i) instanceof MetalTitlePane)
+ {
+ lp.remove(i);
+ break;
+ }
+ }
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java
index 155bb81..c7dfd11 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java
@@ -349,10 +349,15 @@ public class MetalScrollBarUI extends BasicScrollBarUI
else
paintThumbVertical(g, c, thumbBounds);
- // draw the pattern
- MetalUtils.fillMetalPattern(c, g, thumbBounds.x + 3, thumbBounds.y + 3,
- thumbBounds.width - 6, thumbBounds.height - 6,
- thumbHighlightColor, thumbLightShadowColor);
+ // Draw the pattern when the theme is not Ocean.
+ if (! (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme))
+ {
+ MetalUtils.fillMetalPattern(c, g, thumbBounds.x + 3, thumbBounds.y + 3,
+ thumbBounds.width - 6,
+ thumbBounds.height - 6,
+ thumbHighlightColor,
+ thumbLightShadowColor);
+ }
}
/**
@@ -370,13 +375,24 @@ public class MetalScrollBarUI extends BasicScrollBarUI
int w = thumbBounds.width;
int h = thumbBounds.height;
- // first we fill the background
- g.setColor(thumbColor);
- if (isFreeStanding)
- g.fillRect(x, y, w, h - 1);
+ // First we fill the background.
+ MetalTheme theme = MetalLookAndFeel.getCurrentTheme();
+ if (theme instanceof OceanTheme
+ && UIManager.get("ScrollBar.gradient") != null)
+ {
+ MetalUtils.paintGradient(g, x + 2, y + 2, w - 4, h - 2,
+ SwingConstants.VERTICAL,
+ "ScrollBar.gradient");
+ }
else
- g.fillRect(x, y, w, h);
-
+ {
+ g.setColor(thumbColor);
+ if (isFreeStanding)
+ g.fillRect(x, y, w, h - 1);
+ else
+ g.fillRect(x, y, w, h);
+ }
+
// then draw the dark box
g.setColor(thumbLightShadowColor);
if (isFreeStanding)
@@ -405,6 +421,19 @@ public class MetalScrollBarUI extends BasicScrollBarUI
g.setColor(UIManager.getColor("ScrollBar.shadow"));
g.drawLine(x + w, y + 1, x + w, y + h - 1);
+ // For the OceanTheme, draw the 3 lines in the middle.
+ if (theme instanceof OceanTheme)
+ {
+ g.setColor(thumbLightShadowColor);
+ int middle = x + w / 2;
+ g.drawLine(middle - 2, y + 4, middle - 2, y + h - 5);
+ g.drawLine(middle, y + 4, middle, y + h - 5);
+ g.drawLine(middle + 2, y + 4, middle + 2, y + h - 5);
+ g.setColor(UIManager.getColor("ScrollBar.highlight"));
+ g.drawLine(middle - 1, y + 5, middle - 1, y + h - 4);
+ g.drawLine(middle + 1, y + 5, middle + 1, y + h - 4);
+ g.drawLine(middle + 3, y + 5, middle + 3, y + h - 4);
+ }
}
/**
@@ -422,13 +451,24 @@ public class MetalScrollBarUI extends BasicScrollBarUI
int w = thumbBounds.width;
int h = thumbBounds.height;
- // first we fill the background
- g.setColor(thumbColor);
- if (isFreeStanding)
- g.fillRect(x, y, w - 1, h);
+ // First we fill the background.
+ MetalTheme theme = MetalLookAndFeel.getCurrentTheme();
+ if (theme instanceof OceanTheme
+ && UIManager.get("ScrollBar.gradient") != null)
+ {
+ MetalUtils.paintGradient(g, x + 2, y + 2, w - 2, h - 4,
+ SwingConstants.HORIZONTAL,
+ "ScrollBar.gradient");
+ }
else
- g.fillRect(x, y, w, h);
-
+ {
+ g.setColor(thumbColor);
+ if (isFreeStanding)
+ g.fillRect(x, y, w - 1, h);
+ else
+ g.fillRect(x, y, w, h);
+ }
+
// then draw the dark box
g.setColor(thumbLightShadowColor);
if (isFreeStanding)
@@ -456,6 +496,20 @@ public class MetalScrollBarUI extends BasicScrollBarUI
// draw the shadow line
g.setColor(UIManager.getColor("ScrollBar.shadow"));
g.drawLine(x + 1, y + h, x + w - 2, y + h);
+
+ // For the OceanTheme, draw the 3 lines in the middle.
+ if (theme instanceof OceanTheme)
+ {
+ g.setColor(thumbLightShadowColor);
+ int middle = y + h / 2;
+ g.drawLine(x + 4, middle - 2, x + w - 5, middle - 2);
+ g.drawLine(x + 4, middle, x + w - 5, middle);
+ g.drawLine(x + 4, middle + 2, x + w - 5, middle + 2);
+ g.setColor(UIManager.getColor("ScrollBar.highlight"));
+ g.drawLine(x + 5, middle - 1, x + w - 4, middle - 1);
+ g.drawLine(x + 5, middle + 1, x + w - 4, middle + 1);
+ g.drawLine(x + 5, middle + 3, x + w - 4, middle + 3);
+ }
}
/**
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java
index 08fb99d..f97717f 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java
@@ -1,5 +1,5 @@
/* MetalSliderUI.java
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -210,7 +210,7 @@ public class MetalSliderUI extends BasicSliderUI
{
int trackX = trackRect.x;
int trackY = trackRect.y + (trackRect.height - getTrackWidth()) / 2;
- int trackW = trackRect.width - 1;
+ int trackW = trackRect.width;
int trackH = getTrackWidth();
// draw border
@@ -224,29 +224,47 @@ public class MetalSliderUI extends BasicSliderUI
}
// fill track (if required)
- if (filledSlider)
- {
- int xPos = xPositionForValue(slider.getValue());
- int x = (slider.getInverted() ? xPos : trackRect.x);
- int w = (slider.getInverted() ? trackX + trackW - xPos
- : xPos - trackRect.x);
- g.setColor(MetalLookAndFeel.getControlShadow());
- g.fillRect(x + 1, trackY + 1, w - 3, getTrackWidth() - 3);
- if (slider.isEnabled())
- {
- g.setColor(MetalLookAndFeel.getControl());
- g.drawLine(x + 1, trackY + 1, x + w - 3, trackY + 1);
- g.drawLine(x + 1, trackY + 1, x + 1,
- trackY + getTrackWidth() - 3);
- }
- }
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)
+ {
+ if (slider.isEnabled())
+ {
+ int xPos = xPositionForValue(slider.getValue());
+ int x = (slider.getInverted() ? xPos : trackRect.x);
+ int w = (slider.getInverted() ? trackX + trackW - xPos
+ : xPos - trackRect.x);
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(x + 1, trackY + 1, x + w - 3, trackY + 1);
+ g.setColor(UIManager.getColor("Slider.altTrackColor"));
+ g.drawLine(x + 1, trackY + 2, x + w - 3, trackY + 2);
+ g.setColor(MetalLookAndFeel.getControlShadow());
+ g.drawLine(x + 1, trackY + 3, x + w - 3, trackY + 3);
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ g.drawLine(x + 1, trackY + 4, x + w - 3, trackY + 4);
+ }
+ }
+ else if (filledSlider)
+ {
+ int xPos = xPositionForValue(slider.getValue());
+ int x = (slider.getInverted() ? xPos : trackRect.x);
+ int w = (slider.getInverted() ? trackX + trackW - xPos
+ : xPos - trackRect.x);
+ g.setColor(MetalLookAndFeel.getControlShadow());
+ g.fillRect(x + 1, trackY + 1, w - 3, getTrackWidth() - 3);
+ if (slider.isEnabled())
+ {
+ g.setColor(MetalLookAndFeel.getControl());
+ g.drawLine(x + 1, trackY + 1, x + w - 3, trackY + 1);
+ g.drawLine(x + 1, trackY + 1, x + 1,
+ trackY + getTrackWidth() - 3);
+ }
+ }
}
else
{
int trackX = trackRect.x + (trackRect.width - getTrackWidth()) / 2;
int trackY = trackRect.y;
int trackW = getTrackWidth();
- int trackH = trackRect.height - 1;
+ int trackH = trackRect.height;
if (slider.isEnabled())
BasicGraphicsUtils.drawEtchedRect(g, trackX, trackY, trackW, trackH,
darkShadowColor, shadowColor, darkShadowColor, highlightColor);
@@ -255,8 +273,28 @@ public class MetalSliderUI extends BasicSliderUI
g.setColor(MetalLookAndFeel.getControlShadow());
g.drawRect(trackX, trackY, trackW - 2, trackH - 2);
}
-
- if (filledSlider)
+
+ // Fill track if necessary.
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)
+ {
+ if (slider.isEnabled())
+ {
+ int yPos = yPositionForValue(slider.getValue());
+ int y = (slider.getInverted() ? trackY : yPos);
+ int h = (slider.getInverted() ? yPos - trackY
+ : trackY + trackH - yPos);
+
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(trackX + 1, y + 1, trackX + 1, y + h - 3);
+ g.setColor(UIManager.getColor("Slider.altTrackColor"));
+ g.drawLine(trackX + 2, y + 1, trackX + 2, y + h - 3);
+ g.setColor(MetalLookAndFeel.getControlShadow());
+ g.drawLine(trackX + 3, y + 1, trackX + 3, y + h - 3);
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ g.drawLine(trackX + 4, y + 1, trackX + 4, y + h - 3);
+ }
+ }
+ else if (filledSlider)
{
int yPos = yPositionForValue(slider.getValue());
int y = (slider.getInverted() ? trackY : yPos);
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java
index c6c46ff..39dec3d 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java
@@ -47,6 +47,7 @@ import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
/**
@@ -101,6 +102,17 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
// do nothing, because the selected tab does not have extra padding in
// the MetalLookAndFeel
}
+
+ /**
+ * Overridden because tab runs are only normalized for TOP and BOTTOM
+ * tab placement in the Metal L&F.
+ */
+ protected void normalizeTabRuns(int tabPlacement, int tabCount, int start,
+ int max)
+ {
+ if (tabPlacement == TOP || tabPlacement == BOTTOM)
+ super.normalizeTabRuns(tabPlacement, tabCount, start, max);
+ }
}
/**
@@ -125,7 +137,12 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
/** The graphics to draw the highlight below the tab. */
private Graphics hg;
-
+
+ /**
+ * Indicates if the tabs are having their background filled.
+ */
+ private boolean tabsOpaque;
+
/**
* Constructs a new instance of MetalTabbedPaneUI.
*/
@@ -153,7 +170,7 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
*/
protected LayoutManager createLayoutManager()
{
- return super.createLayoutManager();
+ return new TabbedPaneLayout();
}
/**
@@ -172,16 +189,24 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex,
int x, int y, int w, int h, boolean isSelected)
{
- if (tabPlacement == TOP)
- paintTopTabBorder(tabIndex, g, x, y, w, h, 0, 0, isSelected);
- else if (tabPlacement == LEFT)
- paintLeftTabBorder(tabIndex, g, x, y, w, h, 0, 0, isSelected);
- else if (tabPlacement == BOTTOM)
- paintBottomTabBorder(tabIndex, g, x, y, w, h, 0, 0, isSelected);
- else if (tabPlacement == RIGHT)
- paintRightTabBorder(tabIndex, g, x, y, w, h, 0, 0, isSelected);
- else
- throw new AssertionError("Unrecognised 'tabPlacement' argument.");
+ int bottom = y + h - 1;
+ int right = x + w - 1;
+
+ switch (tabPlacement)
+ {
+ case LEFT:
+ paintLeftTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected);
+ break;
+ case BOTTOM:
+ paintBottomTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected);
+ break;
+ case RIGHT:
+ paintRightTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected);
+ break;
+ case TOP:
+ default:
+ paintTopTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected);
+ }
}
/**
@@ -194,35 +219,90 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
* @param y the y-coordinate for the tab's bounding rectangle.
* @param w the width for the tab's bounding rectangle.
* @param h the height for the tab's bounding rectangle.
- * @param btm ???
- * @param rght ???
+ * @param btm the y coordinate of the bottom border
+ * @param rght the x coordinate of the right border
* @param isSelected indicates whether the tab is selected.
*/
protected void paintTopTabBorder(int tabIndex, Graphics g, int x, int y,
int w, int h, int btm, int rght, boolean isSelected)
{
- int currentRun = getRunForTab(tabPane.getTabCount(), tabIndex);
+ int tabCount = tabPane.getTabCount();
+ int currentRun = getRunForTab(tabCount, tabIndex);
+ int right = w - 1;
+ int bottom = h - 1;
+
+ // Paint gap.
if (shouldFillGap(currentRun, tabIndex, x, y))
{
g.translate(x, y);
- g.setColor(getColorForGap(currentRun, x, y));
+ g.setColor(getColorForGap(currentRun, x, y + 1));
g.fillRect(1, 0, 5, 3);
g.fillRect(1, 3, 2, 2);
g.translate(-x, -y);
}
-
- if (isSelected)
- {
- g.setColor(MetalLookAndFeel.getControlHighlight());
- g.drawLine(x + 1, y + h, x + 1, y + 6);
- g.drawLine(x + 1, y + 6, x + 6, y + 1);
- g.drawLine(x + 6, y + 1, x + w - 1, y + 1);
- }
- g.setColor(MetalLookAndFeel.getControlDarkShadow());
- g.drawLine(x, y + h - 1, x, y + 6);
- g.drawLine(x, y + 6, x + 6, y);
- g.drawLine(x + 6, y, x + w, y);
- g.drawLine(x + w, y, x + w, y + h - 1);
+
+ g.translate(x, y);
+
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ if (isOcean && isSelected)
+ g.setColor(oceanSelectedBorder);
+ else
+ g.setColor(darkShadow);
+
+ // Slant
+ g.drawLine(1, 5, 6, 0);
+ // Top.
+ g.drawLine(6, 0, right, 0);
+ // Right.
+ int lastIndex = lastTabInRun(tabCount, currentRun);
+ if (tabIndex == lastIndex)
+ g.drawLine(right, 1, right, bottom);
+ // Left.
+ int selectedIndex = tabPane.getSelectedIndex();
+ if (isOcean && tabIndex - 1 == selectedIndex
+ && currentRun == getRunForTab(tabCount, selectedIndex))
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ if (tabIndex != tabRuns[runCount - 1])
+ {
+ if (isOcean && isSelected)
+ {
+ g.drawLine(0, 6, 0, bottom);
+ g.setColor(darkShadow);
+ g.drawLine(0, 0, 0, 5);
+ }
+ else
+ {
+ g.drawLine(0, 0, 0, bottom);
+ }
+ }
+ else
+ {
+ g.drawLine(0, 6, 0, bottom);
+ }
+
+ // Paint the highlight.
+ g.setColor(isSelected ? selectHighlight : highlight);
+ // Slant.
+ g.drawLine(1, 6, 6, 1);
+ // Top.
+ g.drawLine(6, 1, right, 1);
+ // Left.
+ g.drawLine(1, 6, 1, bottom);
+ int firstIndex = tabRuns[currentRun];
+ if (tabIndex == firstIndex && tabIndex != tabRuns[runCount - 1])
+ {
+ if (tabPane.getSelectedIndex() == tabRuns[currentRun + 1])
+ g.setColor(selectHighlight);
+ else
+ g.setColor(highlight);
+ g.drawLine(1, 0, 1, 4);
+ }
+
+ g.translate(-x, -y);
}
/**
@@ -242,18 +322,115 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
protected void paintLeftTabBorder(int tabIndex, Graphics g, int x, int y,
int w, int h, int btm, int rght, boolean isSelected)
{
- if (isSelected)
- {
- g.setColor(MetalLookAndFeel.getControlHighlight());
- g.drawLine(x + 1, y + h, x + 1, y + 6);
- g.drawLine(x + 1, y + 6, x + 6, y + 1);
- g.drawLine(x + 6, y + 1, x + w - 1, y + 1);
- }
- g.setColor(MetalLookAndFeel.getControlDarkShadow());
- g.drawLine(x, y + h, x, y + 6);
- g.drawLine(x, y + 6, x + 6, y);
- g.drawLine(x + 6, y, x + w - 1, y);
- g.drawLine(x, y + h, x + w - 1, y + h);
+ g.translate(x, y);
+ int bottom = h - 1;
+ int right = w - 1;
+
+
+ int tabCount = tabPane.getTabCount();
+ int currentRun = getRunForTab(tabCount, tabIndex);
+ int firstIndex = tabRuns[currentRun];
+
+ // Paint the part of the above tab.
+ if (tabIndex != firstIndex && tabIndex > 0 && tabsOpaque)
+ {
+ Color c;
+ if (tabPane.getSelectedIndex() == tabIndex - 1)
+ c = selectColor;
+ else
+ c = getUnselectedBackground(tabIndex - 1);
+ g.setColor(c);
+ g.fillRect(2, 0, 4, 3);
+ g.drawLine(2, 3, 2, 3);
+ }
+
+ // Paint the highlight.
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ if (isOcean)
+ {
+ g.setColor(isSelected ? selectHighlight : MetalLookAndFeel.getWhite());
+ }
+ else
+ {
+ g.setColor(isSelected ? selectHighlight : highlight);
+ }
+ // Slant.
+ g.drawLine(1, 6, 6, 1);
+ // Left.
+ g.drawLine(1, 6, 1, bottom);
+ // Top.
+ g.drawLine(6, 1, right, 1);
+ if (tabIndex != firstIndex)
+ {
+ if (isOcean)
+ {
+ g.setColor(MetalLookAndFeel.getWhite());
+ }
+ g.drawLine(1, 0, 1, 4);
+ }
+
+ // Paint border.
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ if (isOcean && isSelected)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ else
+ {
+ g.setColor(darkShadow);
+ }
+
+ // Slant.
+ g.drawLine(1, 5, 6, 0);
+ // Top.
+ g.drawLine(6, 0, right, 0);
+ // Bottom.
+ int lastIndex = lastTabInRun(tabCount, currentRun);
+ if (tabIndex == lastIndex)
+ {
+ g.drawLine(0, bottom, right, bottom);
+ }
+ // Left.
+ if (isOcean)
+ {
+ if (tabPane.getSelectedIndex() == tabIndex - 1)
+ {
+ g.drawLine(0, 5, 0, bottom);
+ g.setColor(oceanSelectedBorder);
+ g.drawLine(0, 0, 0, 5);
+ }
+ else if (isSelected)
+ {
+ g.drawLine(0, 5, 0, bottom);
+ if (tabIndex != 0)
+ {
+ g.setColor(darkShadow);
+ g.drawLine(0, 0, 0, 5);
+ }
+ }
+ else if (tabIndex != firstIndex)
+ {
+ g.drawLine(0, 0, 0, bottom);
+ }
+ else
+ {
+ g.drawLine(0, 6, 0, bottom);
+ }
+ }
+ else
+ {
+ if (tabIndex != firstIndex)
+ {
+ g.drawLine(0, 0, 0, bottom);
+ }
+ else
+ {
+ g.drawLine(0, 6, 0, bottom);
+ }
+ }
+
+ g.translate(-x, -y);
}
/**
@@ -273,17 +450,92 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
protected void paintRightTabBorder(int tabIndex, Graphics g, int x, int y,
int w, int h, int btm, int rght, boolean isSelected)
{
- if (isSelected)
- {
- g.setColor(MetalLookAndFeel.getControlHighlight());
- g.drawLine(x, y + 1, x + w - 7, y + 1);
- g.drawLine(x + w - 7, y + 1, x + w - 1, y + 7);
- }
- g.setColor(MetalLookAndFeel.getControlDarkShadow());
- g.drawLine(x, y, x + w - 7, y);
- g.drawLine(x + w - 7, y, x + w - 1, y + 6);
- g.drawLine(x + w - 1, y + 6, x + w - 1, y + h - 1);
- g.drawLine(x + w - 1, y + h, x, y + h);
+ g.translate(x, y);
+ int bottom = h - 1;
+ int right = w - 1;
+
+ int tabCount = tabPane.getTabCount();
+ int currentRun = getRunForTab(tabCount, tabIndex);
+ int firstIndex = tabRuns[currentRun];
+
+ // Paint part of the above tab.
+ if (tabIndex != firstIndex && tabIndex > 0 && tabsOpaque)
+ {
+ Color c;
+ if (tabPane.getSelectedIndex() == tabIndex - 1)
+ c = UIManager.getColor("TabbedPane.tabAreaBackground");
+ else
+ c = getUnselectedBackground(tabIndex - 1);
+ g.fillRect(right - 5, 0, 5, 3);
+ g.fillRect(right - 2, 3, 2, 2);
+ }
+
+ // Paint highlight.
+ g.setColor(isSelected ? selectHighlight : highlight);
+
+ // Slant.
+ g.drawLine(right - 6, 1, right - 1, 6);
+ // Top.
+ g.drawLine(0, 1, right - 6, 1);
+ // Left.
+ if (! isSelected)
+ {
+ g.drawLine(0, 1, 0, bottom);
+ }
+
+ // Paint border.
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ if (isOcean && isSelected)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ else
+ {
+ g.setColor(darkShadow);
+ }
+
+ // Bottom.
+ int lastIndex = lastTabInRun(tabCount, currentRun);
+ if (tabIndex == lastIndex)
+ {
+ g.drawLine(0, bottom, right, bottom);
+ }
+ // Slant.
+ if (isOcean && tabPane.getSelectedIndex() == tabIndex - 1)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ g.drawLine(right - 6, 0, right, 6);
+ // Top.
+ g.drawLine(0, 0, right - 6, 0);
+ // Right.
+ if (isOcean && isSelected)
+ {
+ g.drawLine(right, 6, right, bottom);
+ if (tabIndex != firstIndex)
+ {
+ g.setColor(darkShadow);
+ g.drawLine(right, 0, right, 5);
+ }
+ }
+ else if (isOcean && tabPane.getSelectedIndex() == tabIndex - 1)
+ {
+ g.setColor(oceanSelectedBorder);
+ g.drawLine(right, 0, right, 6);
+ g.setColor(darkShadow);
+ g.drawLine(right, 6, right, bottom);
+ }
+ else if (tabIndex != firstIndex)
+ {
+ g.drawLine(right, 0, right, bottom);
+ }
+ else
+ {
+ g.drawLine(right, 6, right, bottom);
+ }
+ g.translate(-x, -y);
}
/**
@@ -303,27 +555,94 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
protected void paintBottomTabBorder(int tabIndex, Graphics g, int x, int y,
int w, int h, int btm, int rght, boolean isSelected)
{
- int currentRun = getRunForTab(tabPane.getTabCount(), tabIndex);
+ int bottom = h - 1;
+ int right = w - 1;
+
+ int tabCount = tabPane.getTabCount();
+ int currentRun = getRunForTab(tabCount, tabIndex);
+ // Paint gap if necessary.
if (shouldFillGap(currentRun, tabIndex, x, y))
{
g.translate(x, y);
g.setColor(getColorForGap(currentRun, x, y));
- g.fillRect(1, h - 5, 3, 5);
- g.fillRect(4, h - 2, 2, 2);
+ g.fillRect(1, bottom - 4, 3, 5);
+ g.fillRect(4, bottom - 1, 2, 2);
g.translate(-x, -y);
}
-
- if (isSelected)
- {
- g.setColor(MetalLookAndFeel.getControlHighlight());
- g.drawLine(x + 1, y, x + 1, y + h - 7);
- g.drawLine(x + 1, y + h - 7, x + 7, y + h - 1);
- }
- g.setColor(MetalLookAndFeel.getControlDarkShadow());
- g.drawLine(x, y, x, y + h - 7);
- g.drawLine(x, y + h - 7, x + 6, y + h - 1);
- g.drawLine(x + 6, y + h - 1, x + w, y + h - 1);
- g.drawLine(x + w, y + h - 1, x + w, y);
+
+ g.translate(x, y);
+
+ // Paint border.
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ if (isOcean && isSelected)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ else
+ {
+ g.setColor(darkShadow);
+ }
+ // Slant.
+ g.drawLine(1, bottom - 5, 6, bottom);
+ // Bottom.
+ g.drawLine(6, bottom, right, bottom);
+ // Right.
+ int lastIndex = lastTabInRun(tabCount, currentRun);
+ if (tabIndex == lastIndex)
+ {
+ g.drawLine(right, 0, right, bottom);
+ }
+ // Left.
+ if (isOcean && isSelected)
+ {
+ g.drawLine(0, 0, 0, bottom - 5);
+ if ((currentRun == 0 && tabIndex != 0)
+ || (currentRun > 0 && tabIndex != tabRuns[currentRun - 1]))
+ {
+ g.setColor(darkShadow);
+ g.drawLine(0, bottom - 5, 0, bottom);
+ }
+ }
+ else
+ {
+ if (isOcean && tabIndex == tabPane.getSelectedIndex()+ 1)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ if (tabIndex != tabRuns[runCount- 1])
+ {
+ g.drawLine(0, 0, 0, bottom);
+ }
+ else
+ {
+ g.drawLine(0, 0, 0, bottom - 6);
+ }
+ }
+
+ // Paint highlight.
+ g.setColor(isSelected ? selectHighlight : highlight);
+ // Slant.
+ g.drawLine(1, bottom - 6, 6, bottom - 1);
+ // Left.
+ g.drawLine(1, 0, 1, bottom - 6);
+
+ int firstIndex = tabRuns[currentRun];
+ if (tabIndex == firstIndex && tabIndex != tabRuns[runCount - 1])
+ {
+ if (tabPane.getSelectedIndex() == tabRuns[currentRun + 1])
+ {
+ g.setColor(selectHighlight);
+ }
+ else
+ {
+ g.setColor(highlight);
+ }
+ g.drawLine(1, bottom - 4, 1, bottom);
+ }
+
+ g.translate(-x, -y);
}
/**
@@ -343,42 +662,29 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
int tabIndex, int x, int y, int w, int h, boolean isSelected)
{
if (isSelected)
- g.setColor(UIManager.getColor("TabbedPane.selected"));
+ g.setColor(selectColor);
else
- {
- // This is only present in the OceanTheme, so we must check if it
- // is actually there
- Color background = UIManager.getColor("TabbedPane.unselectedBackground");
- if (background == null)
- background = UIManager.getColor("TabbedPane.background");
- g.setColor(background);
- }
- int[] px, py;
- if (tabPlacement == TOP)
- {
- px = new int[] {x + 6, x + w - 1, x + w -1, x + 2, x + 2};
- py = new int[] {y + 2, y + 2, y + h - 1, y + h -1, y + 6};
- }
- else if (tabPlacement == LEFT)
- {
- px = new int[] {x + 6, x + w - 1, x + w -1, x + 2, x + 2};
- py = new int[] {y + 2, y + 2, y + h - 1, y + h -1, y + 6};
- }
- else if (tabPlacement == BOTTOM)
- {
- px = new int[] {x + 2, x + w - 1, x + w -1, x + 8, x + 2};
- py = new int[] {y, y, y + h - 1, y + h -1, y + h - 7};
- }
- else if (tabPlacement == RIGHT)
- {
- px = new int[] {x + 2, x + w - 7, x + w - 1, x + w - 1, x + 2};
- py = new int[] {y + 2, y + 2, y + 7, y + h -1, y + h - 1};
- }
- else
- throw new AssertionError("Unrecognised 'tabPlacement' argument.");
- g.fillPolygon(px, py, 5);
- hg = g;
- paintHighlightBelowTab();
+ g.setColor(getUnselectedBackground(tabIndex));
+
+ switch (tabPlacement)
+ {
+ case LEFT:
+ g.fillRect(x + 5, y + 1, w - 5, h - 1);
+ g.fillRect(x + 2, y + 4, 3, h - 4);
+ break;
+ case BOTTOM:
+ g.fillRect(x + 2, y, w - 2, h - 3);
+ g.fillRect(x + 5, y + h - 4, w - 5, 3);
+ break;
+ case RIGHT:
+ g.fillRect(x, y + 1, w - 4, h - 1);
+ g.fillRect(x + w - 4, y + 5, 3, h - 5);
+ break;
+ case TOP:
+ default:
+ g.fillRect(x + 4, y + 2, w - 4, h - 2);
+ g.fillRect(x + 2, y + 5, 2, h - 5);
+ }
}
/**
@@ -408,6 +714,7 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
selectColor = UIManager.getColor("TabbedPane.selected");
selectHighlight = UIManager.getColor("TabbedPane.selectHighlight");
tabAreaBackground = UIManager.getColor("TabbedPane.tabAreaBackground");
+ tabsOpaque = UIManager.getBoolean("TabbedPane.tabsOpaque");
minTabWidth = 0;
}
@@ -487,4 +794,354 @@ public class MetalTabbedPaneUI extends BasicTabbedPaneUI
// false because tab runs are not rotated in the MetalLookAndFeel
return false;
}
+
+ protected int calculateMaxTabHeight(int tabPlacement)
+ {
+ // FIXME: Why is this overridden?
+ return super.calculateMaxTabHeight(tabPlacement);
+ }
+
+ /**
+ * Returns the amount of overlay among the tabs. In
+ * the Metal L&F the overlay for LEFT and RIGHT placement
+ * is half of the maxTabHeight. For TOP and BOTTOM placement
+ * the tabs do not overlay.
+ *
+ * @param tabPlacement the placement
+ *
+ * @return the amount of overlay among the tabs
+ */
+ protected int getTabRunOverlay(int tabPlacement)
+ {
+ int overlay = 0;
+ if (tabPlacement == LEFT || tabPlacement == RIGHT)
+ {
+ int maxHeight = calculateMaxTabHeight(tabPlacement);
+ overlay = maxTabHeight / 2;
+ }
+ return overlay;
+ }
+
+ /**
+ * Paints the upper edge of the content border.
+ *
+ * @param g the graphics to use for painting
+ * @param tabPlacement the tab placement
+ * @param selectedIndex the index of the selected tab
+ * @param x the upper left coordinate of the content area
+ * @param y the upper left coordinate of the content area
+ * @param w the width of the content area
+ * @param h the height of the content area
+ */
+ protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
+ int selectedIndex, int x, int y,
+ int w, int h)
+ {
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ if (isOcean)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ else
+ {
+ g.setColor(selectHighlight);
+ }
+
+ Rectangle rect = selectedIndex < 0 ? null :
+ getTabBounds(selectedIndex, calcRect);
+
+ // If tabs are not placed on TOP, or if the selected tab is not in the
+ // run directly above the content or the selected tab is not visible,
+ // then we draw an unbroken line.
+ if (tabPlacement != TOP || selectedIndex < 0
+ || rect.y + rect.height + 1 < y || rect.x < x ||rect.x > x + w)
+ {
+ g.drawLine(x, y, x + w - 2, y);
+ if (isOcean && tabPlacement == TOP)
+ {
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(x, y + 1, x + w - 2, y + 1);
+ }
+ }
+ else
+ {
+ boolean isLast = isLastTabInRun(selectedIndex);
+ if (isLast)
+ {
+ g.drawLine(x, y, rect.x + 1, y);
+ }
+ else
+ {
+ g.drawLine(x, y, rect.x, y);
+ }
+
+ int right = x + w - 1;
+ if (rect.x + rect.width < right - 1)
+ {
+ if (isLast)
+ {
+ g.drawLine(rect.x + rect.width - 1, y, right - 1, y);
+ }
+ else
+ {
+ g.drawLine(rect.x + rect.width, y, right - 1, y);
+ }
+ }
+ else
+ {
+ g.setColor(shadow);
+ g.drawLine(x + w - 2, y, x + w - 2, y);
+ }
+
+ // When in OceanTheme, draw another white line.
+ if (isOcean)
+ {
+ g.setColor(MetalLookAndFeel.getWhite());
+ if (isLast)
+ {
+ g.drawLine(x, y + 1, rect.x + 1, y + 1);
+ }
+ else
+ {
+ g.drawLine(x, y + 1, rect.x, y + 1);
+ }
+
+ if (rect.x + rect.width < right - 1)
+ {
+ if (isLast)
+ {
+ g.drawLine(rect.x + rect.width - 1, y + 1, right - 1,
+ y + 1);
+ }
+ else
+ {
+ g.drawLine(rect.x + rect.width, y + 1, right - 1, y + 1);
+ }
+ }
+ else
+ {
+ g.setColor(shadow);
+ g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
+ }
+ }
+ }
+ }
+
+ /**
+ * Paints the lower edge of the content border.
+ *
+ * @param g the graphics to use for painting
+ * @param tabPlacement the tab placement
+ * @param selectedIndex the index of the selected tab
+ * @param x the upper left coordinate of the content area
+ * @param y the upper left coordinate of the content area
+ * @param w the width of the content area
+ * @param h the height of the content area
+ */
+ protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
+ int selectedIndex, int x, int y,
+ int w, int h)
+ {
+ g.setColor(darkShadow);
+
+ // If tabs are not placed on BOTTOM, or if the selected tab is not in the
+ // run directly below the content or the selected tab is not visible,
+ // then we draw an unbroken line.
+ Rectangle rect = selectedIndex < 0 ? null :
+ getTabBounds(selectedIndex, calcRect);
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ if (tabPlacement != BOTTOM || selectedIndex < 0 || rect.y - 1 > h
+ || rect.x < x || rect.x > x + w)
+ {
+ if (isOcean && tabPlacement == BOTTOM)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ g.drawLine(x, y + h - 1, x + w - 1, y + h - 1);
+ }
+ else
+ {
+ boolean isLast = isLastTabInRun(selectedIndex);
+ if (isOcean)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+
+ int bottom = y + h - 1;
+ int right = x + w - 1;
+ if (isLast)
+ {
+ g.drawLine(x, bottom, rect.x, bottom);
+ }
+ else
+ {
+ g.drawLine(x, bottom, rect.x - 1, bottom);
+ }
+
+ if (rect.x + rect.width < x + w - 2)
+ {
+ if (isLast)
+ {
+ g.drawLine(rect.x + rect.width - 1, bottom, right, bottom);
+ }
+ else
+ {
+ g.drawLine(rect.x + rect.width, bottom, right, bottom);
+ }
+ }
+ }
+ }
+
+ /**
+ * Paints the left edge of the content border.
+ *
+ * @param g the graphics to use for painting
+ * @param tabPlacement the tab placement
+ * @param selectedIndex the index of the selected tab
+ * @param x the upper left coordinate of the content area
+ * @param y the upper left coordinate of the content area
+ * @param w the width of the content area
+ * @param h the height of the content area
+ */
+ protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
+ int selectedIndex, int x, int y,
+ int w, int h)
+ {
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+ Rectangle rect = selectedIndex < 0 ? null :
+ getTabBounds(selectedIndex, calcRect);
+
+ if (isOcean)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ else
+ {
+ g.setColor(selectHighlight);
+ }
+
+ // If tabs are not placed on LEFT, or if the selected tab is not in the
+ // run directly left to the content or the selected tab is not visible,
+ // then we draw an unbroken line.
+ if (tabPlacement != LEFT || selectedIndex < 0
+ || rect.x + rect.width + 1 < x || rect.y < y || rect.y > y + h)
+ {
+ g.drawLine(x, y + 1, x, y + h - 2);
+ if (isOcean && tabPlacement == LEFT)
+ {
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(x, y + 1, x, y + h - 2);
+ }
+ }
+ else
+ {
+ g.drawLine(x, y, x, rect.y + 1);
+ if (rect.y + rect.height < y + h - 2)
+ {
+ g.drawLine(x, rect.y + rect.height + 1, x, y + h + 2);
+ }
+ if (isOcean)
+ {
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(x + 1, y + 1, x + 1, rect.y + 1);
+ if (rect.y + rect.height < y + h - 2)
+ {
+ g.drawLine(x + y, rect.y + rect.height + 1, x + 1, y + h + 2);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Paints the right edge of the content border.
+ *
+ * @param g the graphics to use for painting
+ * @param tabPlacement the tab placement
+ * @param selectedIndex the index of the selected tab
+ * @param x the upper left coordinate of the content area
+ * @param y the upper left coordinate of the content area
+ * @param w the width of the content area
+ * @param h the height of the content area
+ */
+ protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
+ int selectedIndex, int x, int y,
+ int w, int h)
+ {
+ g.setColor(darkShadow);
+ Rectangle rect = selectedIndex < 0 ? null :
+ getTabBounds(selectedIndex, calcRect);
+ boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme;
+ Color oceanSelectedBorder =
+ UIManager.getColor("TabbedPane.borderHightlightColor");
+
+ // If tabs are not placed on RIGHT, or if the selected tab is not in the
+ // run directly right to the content or the selected tab is not visible,
+ // then we draw an unbroken line.
+ if (tabPlacement != RIGHT || selectedIndex < 0 || rect.x - 1 > w
+ || rect.y < y || rect.y > y + h)
+ {
+ if (isOcean && tabPlacement == RIGHT)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ g.drawLine(x + w - 1, y, x + w - 1, y + h - 1);
+ }
+ else
+ {
+ if (isOcean)
+ {
+ g.setColor(oceanSelectedBorder);
+ }
+ g.drawLine(x + w - 1, y, x + w - 1, rect.y);
+
+ if (rect.y + rect.height < y + h - 2)
+ {
+ g.drawLine(x + w - 1, rect.y + rect.height, x + w - 1, y + h - 2);
+ }
+ }
+ }
+
+ /**
+ * Determines if the specified tab is the last tab in its tab run.
+ *
+ * @param tabIndex the index of the tab
+ *
+ * @return if the specified tab is the last tab in its tab run
+ */
+ private boolean isLastTabInRun(int tabIndex)
+ {
+ int count = tabPane.getTabCount();
+ int run = getRunForTab(count, tabIndex);
+ int lastIndex = lastTabInRun(count, run);
+ return tabIndex == lastIndex;
+ }
+
+ /**
+ * Returns the background for an unselected tab. This first asks the
+ * JTabbedPane for the background at the specified tab index, if this
+ * is an UIResource (that means, it is inherited from the JTabbedPane)
+ * and the TabbedPane.unselectedBackground UI property is not null,
+ * this returns the value of the TabbedPane.unselectedBackground property,
+ * otherwise the value returned by the JTabbedPane.
+ *
+ * @param tabIndex the index of the tab for which we query the background
+ *
+ * @return the background for an unselected tab
+ */
+ private Color getUnselectedBackground(int tabIndex)
+ {
+ Color bg = tabPane.getBackgroundAt(tabIndex);
+ Color unselectedBackground =
+ UIManager.getColor("TabbedPane.unselectedBackground");
+ if (bg instanceof UIResource && unselectedBackground != null)
+ bg = unselectedBackground;
+ return bg;
+ }
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java
index 0b56d59..8c7a46e 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java
@@ -45,12 +45,14 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
+import javax.swing.ButtonModel;
import javax.swing.JComponent;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
+import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.basic.BasicToggleButtonUI;
@@ -157,13 +159,15 @@ public class MetalToggleButtonUI
/**
* Paints the text for the button.
*
+ * As of JDK 1.4 this method is obsolete.
+ * Use {@link BasicButtonUI#paintText(java.awt.Graphics,
+ * javax.swing.AbstractButton, java.awt.Rectangle, java.lang.String)}.
+ *
* @param g the graphics device.
* @param c the component.
* @param textRect the bounds for the text.
* @param text the text.
*
- * @deprecated 1.4 Use {@link BasicButtonUI#paintText(java.awt.Graphics,
- * javax.swing.AbstractButton, java.awt.Rectangle, java.lang.String)}.
*/
protected void paintText(Graphics g, JComponent c, Rectangle textRect,
String text)
@@ -207,7 +211,12 @@ public class MetalToggleButtonUI
*/
public void update(Graphics g, JComponent c)
{
- if (c.isOpaque() && UIManager.get(getPropertyPrefix() + "gradient") != null)
+ AbstractButton b = (AbstractButton) c;
+ ButtonModel m = b.getModel();
+ if (b.getBackground() instanceof UIResource
+ && b.isContentAreaFilled()
+ && b.isEnabled() && ! m.isArmed() && ! m.isPressed()
+ && UIManager.get(getPropertyPrefix() + "gradient") != null)
{
MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(),
SwingConstants.VERTICAL,
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java
index 16e22ac..1848c1f 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package javax.swing.plaf.metal;
+import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ContainerListener;
import java.awt.event.MouseEvent;
@@ -46,6 +47,8 @@ import java.beans.PropertyChangeListener;
import javax.swing.JComponent;
import javax.swing.JToolBar;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.event.MouseInputListener;
import javax.swing.plaf.ComponentUI;
@@ -225,4 +228,71 @@ public class MetalToolBarUI extends BasicToolBarUI
super.mouseDragged(e);
}
}
+
+ /**
+ * Installs the UI on the toolbar. This calls super and sets the rollover
+ * property according to the <code>UIManager</code> property
+ * &quot;ToolBar.isRollover&quot;.
+ *
+ * @param c the component to install the UI on
+ */
+ public void installUI(JComponent c)
+ {
+ super.installUI(c);
+ if (c instanceof JToolBar)
+ {
+ JToolBar tb = (JToolBar) c;
+ tb.setRollover(UIManager.getBoolean("ToolBar.isRollover"));
+ }
+ }
+
+ /**
+ * Uninstalls the UI from the toolbar. This calls super and resets the
+ * rollover property.
+ *
+ * @param c the component to uninstall the UI from
+ */
+ public void uninstallUI(JComponent c)
+ {
+ if (c instanceof JToolBar)
+ {
+ JToolBar tb = (JToolBar) c;
+ tb.setRollover(false);
+ }
+ super.uninstallUI(c);
+ }
+
+ /**
+ * Paints the background of the component if necessary and then calls
+ * <code>paint(g, c)</code>.
+ *
+ * This is overridden to implement the OceanTheme gradient when an OceanTheme
+ * is installed.
+ *
+ * @param g the graphics to use
+ * @param c the component to paint.
+ *
+ * @since 1.5
+ */
+ public void update(Graphics g, JComponent c)
+ {
+ // TODO: Sun's implementation uses the MenuBar.gradient here.
+ // I would consider this a bug, but implement it like this
+ // for compatibility.
+ if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme
+ && UIManager.get("MenuBar.gradient") != null)
+ {
+ if (c.isOpaque())
+ {
+ MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(),
+ SwingConstants.VERTICAL,
+ "MenuBar.gradient");
+ }
+ paint(g, c);
+ }
+ else
+ {
+ super.update(g, c);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java
index 24432a2..3ea37c8 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.metal;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
@@ -133,6 +135,7 @@ public class MetalTreeUI extends BasicTreeUI
* @param lineStyleFlag - String representation
*/
protected void decodeLineStyle(Object lineStyleFlag)
+ throws NotImplementedException
{
// FIXME: not implemented
}
@@ -176,6 +179,7 @@ public class MetalTreeUI extends BasicTreeUI
* @param c - the current component to draw
*/
protected void paintHorizontalSeparators(Graphics g, JComponent c)
+ throws NotImplementedException
{
// FIXME: not implemented
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java b/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java
index b9d5ea7..03617aa 100644
--- a/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java
+++ b/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java
@@ -91,7 +91,7 @@ class MetalUtils
Color light, Color dark)
{
if (g instanceof Graphics2D
- && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") != null)
+ && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") == null)
fillMetalPattern2D((Graphics2D) g, x, y, w, h, light, dark);
else
{
@@ -161,14 +161,35 @@ class MetalUtils
/**
* Paints the typical Metal gradient. See {@link #paintGradient(Graphics,
- * int, int, int, int, double, double, Color, Color, Color, int)}
+ * int, int, int, int, float, float, Color, Color, Color, int, int[][])}
+ * for more details.
+ *
+ * This variant paints a gradient without a mask.
+ *
+ * @param g the graphics context to use
+ * @param x the X coordinate of the upper left corner of the rectangle
+ * @param y the Y coordinate of the upper left corner of the rectangle
+ * @param w the width of the rectangle
+ * @param h the height of the rectangle
+ * @param dir the direction of the gradient, either
+ * @param uiProp the key of the UIManager property that has the parameters
+ */
+ static void paintGradient(Graphics g, int x, int y, int w, int h,
+ int dir, String uiProp)
+ {
+ paintGradient(g, x, y, w, h, dir, uiProp, null);
+ }
+
+ /**
+ * Paints the typical Metal gradient. See {@link #paintGradient(Graphics,
+ * int, int, int, int, float, float, Color, Color, Color, int, int[][])}
* for more details.
*
* The parameters are fetched from the UIManager using the key
* <code>uiProp</code>. The value is expected to be a {@link List} that
* contains 4 values: two {@link Double}s and 3 {@link Color} object that
* together make up the parameters passed to the painting method.
- *
+ *
* @param g the graphics context to use
* @param x the X coordinate of the upper left corner of the rectangle
* @param y the Y coordinate of the upper left corner of the rectangle
@@ -176,17 +197,19 @@ class MetalUtils
* @param h the height of the rectangle
* @param dir the direction of the gradient, either
* @param uiProp the key of the UIManager property that has the parameters
+ * @param mask the mask that should be used when painting the gradient as
+ * described above
*/
static void paintGradient(Graphics g, int x, int y, int w, int h,
- int dir, String uiProp)
+ int dir, String uiProp, int[][] mask)
{
List params = (List) UIManager.get(uiProp);
- double g1 = ((Double) params.get(0)).doubleValue();
- double g2 = ((Double) params.get(1)).doubleValue();
+ float g1 = ((Float) params.get(0)).floatValue();
+ float g2 = ((Float) params.get(1)).floatValue();
Color c1 = (Color) params.get(2);
Color c2 = (Color) params.get(3);
Color c3 = (Color) params.get(4);
- paintGradient(g, x, y, w, h, g1, g2, c1, c2, c3, dir);
+ paintGradient(g, x, y, w, h, g1, g2, c1, c2, c3, dir, mask);
}
/**
@@ -209,6 +232,33 @@ class MetalUtils
* <li>A gradient from color 2 to color 1 with the relative width specified
* by <code>g1</code></li>
*
+ * The <code>mask</code> parameter is an array if int arrays, where the first
+ * index specifies the row (in the gradient direction), and the second index
+ * is the starting and end offset of that line. This way you can specify a
+ * mask that should be laid over the gradient for paintint non-rectangular
+ * gradients. The following example should demonstrate this for painting
+ * a circular shaped gradient (note that the first and last line should not
+ * be drawn at all, they are only here to show the circular shape more
+ * clearly). Everything <em>inside</code> the surrounded area is filled by
+ * the gradient:
+ *
+ * <pre>
+ * 012345678
+ * xxx
+ * 0 x x { {4, 7},
+ * 1 x x {3, 8},
+ * 2 x x {3, 8},
+ * 3 x x {3, 8},
+ * 4 x x {4, 7} }
+ * xxx
+ * </pre>
+ *
+ * The <code>mask</code> array is expected to have <code>w</code> or
+ * <code>h</code> array elements, depending on the direction.
+ *
+ * If the <code>mask</code> parameter is null, then the gradient is painted
+ * without a mask.
+ *
* @param g the graphics context to use
* @param x the X coordinate of the upper left corner of the rectangle
* @param y the Y coordinate of the upper left corner of the rectangle
@@ -221,19 +271,23 @@ class MetalUtils
* @param c3 the color 3
* @param dir the direction of the gradient, either
* {@link SwingConstants#HORIZONTAL} or {@link SwingConstants#VERTICAL}
+ * @param mask the mask that should be used when painting the gradient as
+ * described above
*/
- static void paintGradient(Graphics g, int x, int y, int w, int h, double g1,
- double g2, Color c1, Color c2, Color c3, int dir)
+ static void paintGradient(Graphics g, int x, int y, int w, int h, float g1,
+ float g2, Color c1, Color c2, Color c3, int dir,
+ int[][] mask)
{
if (dir == SwingConstants.HORIZONTAL)
- paintHorizontalGradient(g, x, y, w, h, g1, g2, c1, c2, c3);
+ paintHorizontalGradient(g, x, y, w, h, g1, g2, c1, c2, c3, mask);
else
- paintVerticalGradient(g, x, y, w, h, g1, g2, c1, c2, c3);
+ paintVerticalGradient(g, x, y, w, h, g1, g2, c1, c2, c3, mask);
}
/**
* Paints a horizontal gradient. See {@link #paintGradient(Graphics, int,
- * int, int, int, double, double, Color, Color, Color, int)} for details.
+ * int, int, int, float, float, Color, Color, Color, int, int[][])}
+ * for details.
*
* @param x the X coordinate of the upper left corner of the rectangle
* @param y the Y coordinate of the upper left corner of the rectangle
@@ -244,12 +298,16 @@ class MetalUtils
* @param c1 the color 1
* @param c2 the color 2
* @param c3 the color 3
+ * @param mask the mask that should be used when painting the gradient as
+ * described above
*/
static void paintHorizontalGradient(Graphics g, int x, int y, int w, int h,
- double g1, double g2, Color c1, Color c2,
- Color c3)
+ float g1, float g2, Color c1, Color c2,
+ Color c3, int[][] mask)
{
// Calculate the coordinates.
+ int y0 = y;
+ int y1 = y + h;
// The size of the first gradient area (c1->2).
int w1 = (int) (w * g1);
// The size of the solid c2 area.
@@ -276,11 +334,28 @@ class MetalUtils
+ c1.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(xc, y, xc, y + h);
+ if (mask != null)
+ {
+ y0 = mask[xc - x0][0] + y;
+ y1 = mask[xc - x0][1] + y;
+ }
+ g.drawLine(xc, y0, xc, y1);
}
// Paint solid c2 area.
g.setColor(c2);
- g.fillRect(x1, y, x2 - x1, h);
+ if (mask == null)
+ {
+ g.fillRect(x1, y, x2 - x1, h);
+ }
+ else
+ {
+ for (xc = x1; xc < x2; xc++)
+ {
+ y0 = mask[xc - x0][0] + y;
+ y1 = mask[xc - x0][1] + y;
+ g.drawLine(xc, y0, xc, y1);
+ }
+ }
// Paint second gradient area (c2->c1).
for (xc = x2; xc < x3; xc++)
@@ -297,7 +372,12 @@ class MetalUtils
+ c2.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(xc, y, xc, y + h);
+ if (mask != null)
+ {
+ y0 = mask[xc - x0][0] + y;
+ y1 = mask[xc - x0][1] + y;
+ }
+ g.drawLine(xc, y0, xc, y1);
}
// Paint third gradient area (c1->c3).
@@ -315,13 +395,18 @@ class MetalUtils
+ c1.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(xc, y, xc, y + h);
+ if (mask != null)
+ {
+ y0 = mask[xc - x0][0] + y;
+ y1 = mask[xc - x0][1] + y;
+ }
+ g.drawLine(xc, y0, xc, y1);
}
}
/**
* Paints a vertical gradient. See {@link #paintGradient(Graphics, int, int,
- * int, int, double, double, Color, Color, Color, int)} for details.
+ * int, int, float, float, Color, Color, Color, int, int[][])} for details.
*
* @param x the X coordinate of the upper left corner of the rectangle
* @param y the Y coordinate of the upper left corner of the rectangle
@@ -332,12 +417,16 @@ class MetalUtils
* @param c1 the color 1
* @param c2 the color 2
* @param c3 the color 3
+ * @param mask the mask that should be used when painting the gradient as
+ * described above
*/
static void paintVerticalGradient(Graphics g, int x, int y, int w, int h,
double g1, double g2, Color c1, Color c2,
- Color c3)
+ Color c3, int[][] mask)
{
// Calculate the coordinates.
+ int x0 = x;
+ int x1 = x + w;
// The size of the first gradient area (c1->2).
int w1 = (int) (h * g1);
// The size of the solid c2 area.
@@ -364,11 +453,28 @@ class MetalUtils
+ c1.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(x, yc, x + w, yc);
+ if (mask != null)
+ {
+ x0 = mask[yc - y0][0] + x;
+ x1 = mask[yc - y0][1] + x;
+ }
+ g.drawLine(x0, yc, x1, yc);
}
// Paint solid c2 area.
g.setColor(c2);
- g.fillRect(x, y1, w, y2 - y1);
+ if (mask == null)
+ {
+ g.fillRect(x, y1, w, y2 - y1);
+ }
+ else
+ {
+ for (yc = y1; yc < y2; yc++)
+ {
+ x0 = mask[yc - y0][0] + x;
+ x1 = mask[yc - y0][1] + x;
+ g.drawLine(x0, yc, x1, yc);
+ }
+ }
// Paint second gradient area (c2->c1).
for (yc = y2; yc < y3; yc++)
@@ -385,7 +491,12 @@ class MetalUtils
+ c2.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(x, yc, x + w, yc);
+ if (mask != null)
+ {
+ x0 = mask[yc - y0][0] + x;
+ x1 = mask[yc - y0][1] + x;
+ }
+ g.drawLine(x0, yc, x1, yc);
}
// Paint third gradient area (c1->c3).
@@ -403,7 +514,12 @@ class MetalUtils
+ c1.getBlue());
Color interpolated = new Color(rInt, gInt, bInt);
g.setColor(interpolated);
- g.drawLine(x, yc, x + w, yc);
+ if (mask != null)
+ {
+ x0 = mask[yc - y0][0] + x;
+ x1 = mask[yc - y0][1] + x;
+ }
+ g.drawLine(x0, yc, x1, yc);
}
}
}
diff --git a/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java b/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java
index d1fc4cf..9d76ff7 100644
--- a/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java
+++ b/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java
@@ -38,10 +38,12 @@ exception statement from your version. */
package javax.swing.plaf.metal;
import java.awt.Color;
+import java.awt.Insets;
import java.util.Arrays;
import javax.swing.UIDefaults;
import javax.swing.plaf.ColorUIResource;
+import javax.swing.plaf.BorderUIResource.LineBorderUIResource;
/**
* A modern theme for the Metal Look &amp; Feel.
@@ -207,41 +209,108 @@ public class OceanTheme extends DefaultMetalTheme
*/
public void addCustomEntriesToTable(UIDefaults defaults)
{
+ // Gradients.
defaults.put("Button.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("CheckBox.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("CheckBoxMenuItem.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("MenuBar.gradient", Arrays.asList(new Object[]
- {new Double(1.0), new Double(0.0), new ColorUIResource(Color.WHITE),
+ {new Float(1.0), new Float(0.0), new ColorUIResource(Color.WHITE),
new ColorUIResource(218, 218, 218), new ColorUIResource(218, 218, 218)}));
defaults.put("RadioButton.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("RadioButtonMenuItem.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("ScrollBar.gradient", Arrays.asList(new Object[]
- {new Double(1.0), new Double(0.0), new ColorUIResource(Color.WHITE),
- new ColorUIResource(218, 218, 218), new ColorUIResource(218, 218, 218)}));
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
+ new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("Slider.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.2), new ColorUIResource(200, 221, 242),
+ {new Float(0.3), new Float(0.2), new ColorUIResource(200, 221, 242),
+ new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
+ defaults.put("Slider.focusGradient", Arrays.asList(new Object[]
+ {new Float(0.3), new Float(0.2), new ColorUIResource(200, 221, 242),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("ToggleButton.gradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
defaults.put("InternalFrame.activeTitleGradient", Arrays.asList(new Object[]
- {new Double(0.3), new Double(0.0), new ColorUIResource(221, 232, 243),
+ {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243),
new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)}));
-
+ // Colors.
+ ColorUIResource c1 = new ColorUIResource(200, 221, 242);
+ ColorUIResource c2 = new ColorUIResource(153, 153, 153);
+ ColorUIResource c3 = new ColorUIResource(204, 204, 204);
+ ColorUIResource c4 = new ColorUIResource(210, 226, 239);
+ ColorUIResource c5 = new ColorUIResource(218, 218, 218);
+ defaults.put("Button.disabledToolBarBorderBackground", c3);
+ defaults.put("Button.toolBarBorderBackground", c2);
+ defaults.put("Label.disabledForeground", c2);
+ defaults.put("MenuBar.borderColor", c3);
+ defaults.put("Slider.altTrackColor", c4);
+ defaults.put("SplitPane.dividerFocusColor", c1);
+ defaults.put("TabbedPane.contentAreaColor", c1);
+ defaults.put("TabbedPane.borderHightlightColor", PRIMARY1);
+ defaults.put("TabbedPane.selected", c1);
+ defaults.put("TabbedPane.tabAreaBackground", c5);
+ defaults.put("TabbedPane.unselectedBackground", SECONDARY3);
+ defaults.put("Table.gridColor", SECONDARY1);
+ defaults.put("ToolBar.borderColor", c3);
+ defaults.put("Tree.selectionBorderColor", PRIMARY1);
+
+ // Borders.
+ defaults.put("Table.focusCellHighlightBorder",
+ new LineBorderUIResource(getPrimary1()));
+
+ // Insets.
+ defaults.put("TabbedPane.contentBorderInsets", new Insets(4, 2, 3, 3));
+ defaults.put("TabbedPane.tabAreaInsets", new Insets(2, 2, 0, 6));
+
+ // Flags.
+ defaults.put("SplitPane.oneTouchButtonsOpaque", Boolean.FALSE);
+ defaults.put("Menu.opaque", Boolean.FALSE);
+ defaults.put("ToolBar.isRollover", Boolean.TRUE);
+ defaults.put("RadioButton.rollover", Boolean.TRUE);
+ defaults.put("CheckBox.rollover", Boolean.TRUE);
defaults.put("Button.rollover", Boolean.TRUE);
- defaults.put("TabbedPane.selected", new ColorUIResource(200, 221, 242));
- defaults.put("TabbedPane.unselectedBackground", SECONDARY3);
+ // Icons.
+ // FIXME: Add OceanTheme icons.
+// defaults.put("Tree.leafIcon", XXX);
+// defaults.put("Tree.expandedIcon", XXX);
+// defaults.put("Tree.openIcon", XXX);
+// defaults.put("Tree.closedIcon", XXX);
+// defaults.put("Tree.collapsedIcon", XXX);
+// defaults.put("FileChooser.newFolderIcon", XXX);
+// defaults.put("FileChooser.homeFolderIcon", XXX);
+// defaults.put("FileChooser.upFolderIcon", XXX);
+// defaults.put("FileView.hardDriveIcon", XXX);
+// defaults.put("FileView.floppyDriveIcon", XXX);
+// defaults.put("FileView.fileIcon", XXX);
+// defaults.put("FileView.computerIcon", XXX);
+// defaults.put("FileView.directoryIcon", XXX);
+// defaults.put("OptionPane.questionIcon", XXX);
+// defaults.put("OptionPane.errorIcon", XXX);
+// defaults.put("OptionPane.warningIcon", XXX);
+// defaults.put("OptionPane.informationIcon", XXX);
+// defaults.put("InternalFrame.icon", XXX);
+// defaults.put("InternalFrame.closeIcon", XXX);
+// defaults.put("InternalFrame.iconifyIcon", XXX);
+// defaults.put("InternalFrame.minimizeIcon", XXX);
+// defaults.put("InternalFrame.maximizeIcon", XXX);
+// defaults.put("InternalFrame.paletteCloseIcon", XXX);
+
+ // UI classes.
+ defaults.put("MenuBarUI", "javax.swing.plaf.metal.MetalMenuBarUI");
+
+ // Others.
+ defaults.put("Button.rolloverIconType", "ocean");
}
}
diff --git a/libjava/classpath/javax/swing/plaf/synth/ColorType.java b/libjava/classpath/javax/swing/plaf/synth/ColorType.java
index 954e309..ced1efc 100644
--- a/libjava/classpath/javax/swing/plaf/synth/ColorType.java
+++ b/libjava/classpath/javax/swing/plaf/synth/ColorType.java
@@ -78,7 +78,12 @@ public class ColorType
/**
* The maximum number of color types.
*/
- public static final int MAX_COUNT = 5;
+ public static final int MAX_COUNT;
+ static
+ {
+ // This is not a constant in the JDK.
+ MAX_COUNT = 5;
+ }
/**
* A counter used to assign an ID to the created color types.
diff --git a/libjava/classpath/javax/swing/plaf/synth/Region.java b/libjava/classpath/javax/swing/plaf/synth/Region.java
index 7ede65f..25d1a11 100644
--- a/libjava/classpath/javax/swing/plaf/synth/Region.java
+++ b/libjava/classpath/javax/swing/plaf/synth/Region.java
@@ -108,13 +108,13 @@ public class Region
/**
* Specifies the region of a file chooser.
*/
- public static final Region FILECHOOSER =
+ public static final Region FILE_CHOOSER =
new Region("FileChooser", "FileChooserUI", false);
/**
* Specifies the region of a formatted text field.
*/
- public static final Region FormattedTextField =
+ public static final Region FORMATTED_TEXT_FIELD =
new Region("FormattedTextField", "FormattedTextFieldUI", false);
/**
diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java b/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java
index a68b6f6..1907d75 100644
--- a/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java
+++ b/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.synth;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
@@ -159,6 +161,7 @@ public class SynthGraphicsUtils
Icon icon, int hAlign, int vAlign,
int hTextPosition,int vTextPosition,
int iconTextGap,int mnemonicIndex)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return new Dimension(0, 0);
@@ -187,6 +190,7 @@ public class SynthGraphicsUtils
Icon icon, int hAlign, int vAlign,
int hTextPosition,int vTextPosition,
int iconTextGap,int mnemonicIndex)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return new Dimension(0, 0);
@@ -215,6 +219,7 @@ public class SynthGraphicsUtils
Icon icon, int hAlign, int vAlign,
int hTextPosition,int vTextPosition,
int iconTextGap,int mnemonicIndex)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return new Dimension(0, 0);
@@ -277,6 +282,7 @@ public class SynthGraphicsUtils
int hAlign, int vAlign, int hTextPosition,
int vTextPosition, int iconTextGap, int mnemonicIndex,
int textOffset)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
}
diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java b/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java
index 8d0596d..1a2489e 100644
--- a/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java
+++ b/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.synth;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Component;
import java.io.InputStream;
import java.text.ParseException;
@@ -119,6 +121,7 @@ public class SynthLookAndFeel
* @param c the componenent for which to update the style
*/
public static void updateStyles(Component c)
+ throws NotImplementedException
{
// FIXME: Implement this properly.
}
@@ -131,6 +134,7 @@ public class SynthLookAndFeel
* @return the region for a given Swing component
*/
public static Region getRegion(JComponent c)
+ throws NotImplementedException
{
// FIXME: This can be implemented as soon as we have the component UI
// classes in place, since this region will be matched via the UI classes.
@@ -147,6 +151,7 @@ public class SynthLookAndFeel
* component
*/
public static ComponentUI createUI(JComponent c)
+ throws NotImplementedException
{
// FIXME: This can be implemented as soon as we have the component UI
// classes in place.
@@ -157,6 +162,7 @@ public class SynthLookAndFeel
* Initializes this look and feel.
*/
public void initialize()
+ throws NotImplementedException
{
super.initialize();
// TODO: Implement at least the following here:
@@ -168,6 +174,7 @@ public class SynthLookAndFeel
* Uninitializes the look and feel.
*/
public void uninitialize()
+ throws NotImplementedException
{
super.uninitialize();
// TODO: What to do here?
@@ -179,6 +186,7 @@ public class SynthLookAndFeel
* @return the UI defaults of this look and feel
*/
public UIDefaults getDefaults()
+ throws NotImplementedException
{
// FIXME: This is certainly wrong. The defaults should be fetched/merged
// from the file from which the l&f is loaded.
@@ -191,6 +199,7 @@ public class SynthLookAndFeel
* @return FIXME
*/
public boolean shouldUpdateStyleOnAncestorChanged()
+ throws NotImplementedException
{
return false;
}
@@ -210,14 +219,14 @@ public class SynthLookAndFeel
// FIXME: The signature in the JDK has a Class<?> here. Should be fixed as
// soon as we switch to the generics branch.
public void load(InputStream in, Class resourceBase)
- throws ParseException, IllegalArgumentException
+ throws ParseException, IllegalArgumentException, NotImplementedException
{
// FIXME: Implement this correctly.
}
/**
* Returns a textual description of the Synth look and feel. This returns
- * &quot;Synt look and feel&quot;.
+ * &quot;Synth look and feel&quot;.
*
* @return a textual description of the Synth look and feel
*/
@@ -238,7 +247,7 @@ public class SynthLookAndFeel
/**
* Returns the name of the Synth look and feel. This returns
- * &quot;Synt look and feel&quot;.
+ * &quot;Synth look and feel&quot;.
*
* @return the name of the Synth look and feel
*/
diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java b/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java
index 0d63c6d..fa1f6f5 100644
--- a/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java
+++ b/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java
@@ -62,6 +62,117 @@ public abstract class SynthPainter
}
/**
+ * Paints the foreground of an arrow button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param dir the orientation of the arrow
+ */
+ public void paintArrowButtonForeground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int dir)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the foreground of a progress bar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param dir the orientation of the progress bar
+ */
+ public void paintProgressBarForeground(SynthContext ctx, Graphics g,
+ int x, int y, int w, int h,
+ int dir)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the foreground of a separator.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param dir the orientation of the separator
+ */
+ public void paintSeparatorForeground(SynthContext ctx, Graphics g,
+ int x, int y, int w, int h,
+ int dir)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the foreground of a split pane's divider.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param dir the orientation of the divider
+ */
+ public void paintSplitPaneDividerForeground(SynthContext ctx, Graphics g,
+ int x, int y, int w, int h,
+ int dir)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints a split pane's divider, when it is being dragged.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param dir the orientation of the divider
+ */
+ public void paintSplitPaneDragDivider(SynthContext ctx, Graphics g,
+ int x, int y, int w, int h,
+ int dir)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the indicator for a tree cell which has the focus.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTreeCellFocus(SynthContext ctx, Graphics g,
+ int x, int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
* Paints the background of an arrow button.
*
* @param ctx the synth context identifying the component and region for
@@ -73,7 +184,1815 @@ public abstract class SynthPainter
* @param h the height of the area to paint
*/
public void paintArrowButtonBackground(SynthContext ctx, Graphics g, int x,
- int y, int w, int h)
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of an arrow button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintArrowButtonBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintButtonBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintButtonBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a check box.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintCheckBoxBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a check box.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintCheckBoxBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a check box menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintCheckBoxMenuItemBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a check box menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintCheckBoxMenuItemBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a color chooser.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintColorChooserBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a color chooser.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintColorChooserBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a combo box.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintComboBoxBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a combo box.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintComboBoxBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a desktop icon.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintDesktopIconBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a desktop icon.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintDesktopIconBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a desktop pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintDesktopPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a desktop pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintDesktopPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of an editor pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintEditorPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of an editor pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintEditorPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a file chooser.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintFileChooserBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a file chooser.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintFileChooserBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a formatted text field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintFormattedTextFieldBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a formatted text field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintFormattedTextFieldBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of an internal frame.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintInternalFrameBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of an internal frame.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintInternalFrameBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of an internal frame's title pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintInternalFrameTitlePaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of an internal frame's title pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintInternalFrameTitlePaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a label.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintLabelBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a label.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintLabelBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a list.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintListBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a list.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintListBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a menu.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a menu.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a menu bar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuBarBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a menu bar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuBarBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuItemBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintMenuItemBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of an option pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintOptionPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of an option pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintOptionPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a panel.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPanelBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a panel.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPanelBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a password field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPasswordFieldBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a password field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPasswordFieldBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a popup menu.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPopupMenuBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a popup menu.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintPopupMenuBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a progress bar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintProgressBarBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a progress bar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintProgressBarBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a radio button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRadioButtonBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a radio button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRadioButtonBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a radio button menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRadioButtonMenuItemBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a radio button menu item.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRadioButtonMenuItemBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a root pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRootPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a root pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintRootPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a scrollbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollBarBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a scrollbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollBarBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a scrollbar's thumb.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param orientation orientation of the scrollbar
+ */
+ public void paintScrollBarThumbBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int orientation)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a scrollbar's thumb.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param orientation orientation of the scrollbar
+ */
+ public void paintScrollBarThumbBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int orientation)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a scrollbar's track.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollBarTrackBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a scrollbar's track.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollBarTrackBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a scroll pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a scroll pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintScrollPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a separator.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSeparatorBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a separator.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSeparatorBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a slider.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSliderBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a slider.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSliderBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a slider's thumb.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param orientation orientation of the slider
+ */
+ public void paintSliderThumbBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int orientation)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a slider's thumb.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param orientation orientation of the slider
+ */
+ public void paintSliderThumbBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int orientation)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a slider's track.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSliderTrackBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a slider's track.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSliderTrackBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a spinner.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSpinnerBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a spinner.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSpinnerBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a split pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSplitPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a split pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSplitPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a split pane's divider.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintSplitPaneDividerBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of the contents of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneContentBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of the contents of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneContentBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of the tab area of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneTabAreaBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of the tab area of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTabbedPaneTabAreaBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a tab of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param index the index of the tab to paint
+ */
+ public void paintTabbedPaneTabBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int index)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a tab of a tabbed pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ * @param index the index of the tab to paint
+ */
+ public void paintTabbedPaneTabBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h, int index)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a table.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTableBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a table.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTableBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a table's header.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTableHeaderBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a table's header.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTableHeaderBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a text area.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextAreaBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a text area.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextAreaBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a text field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextFieldBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a text field.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextFieldBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a text pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextPaneBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a text pane.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTextPaneBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a toggle button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToggleButtonBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a toggle button.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToggleButtonBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of the contents of a toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarContentBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of the contents of a toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarContentBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of the window of a detached toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarDragWindowBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of the window of a detached toolbar.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolBarDragWindowBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a tool tip.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolTipBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a tool tip.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintToolTipBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a tree.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTreeBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a tree.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTreeBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a cell in a tree.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTreeCellBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a cell in a tree.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintTreeCellBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the background of a viewport.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintViewportBackground(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Paints the border of a viewport.
+ *
+ * @param ctx the synth context identifying the component and region for
+ * painting
+ * @param g the graphics context to use for painting
+ * @param x the X coordinate of the area to paint
+ * @param y the Y coordinate of the area to paint
+ * @param w the width of the area to paint
+ * @param h the height of the area to paint
+ */
+ public void paintViewportBorder(SynthContext ctx, Graphics g, int x,
+ int y, int w, int h)
{
// Nothing to do here.
}
diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java b/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java
index e0a8dbc..f5ab3df 100644
--- a/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java
+++ b/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.plaf.synth;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
@@ -58,87 +60,144 @@ public abstract class SynthStyle
* Creates a new <code>SynthStyle</code> object.
*/
public SynthStyle()
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
}
public SynthGraphicsUtils getGraphicsUtils(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
public Color getColor(SynthContext ctx, ColorType type)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
- public abstract Color getColorForState(SynthContext ctx, ColorType type);
+ protected abstract Color getColorForState(SynthContext ctx, ColorType type);
public Font getFont(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
- public abstract Font getFontForState(SynthContext ctx);
+ protected abstract Font getFontForState(SynthContext ctx);
- public Insets getInsets(SynthContext ctx)
+ public Insets getInsets(SynthContext ctx, Insets result)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
- public SynthPainter getPainted(SynthContext ctx)
+ public SynthPainter getPainter(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
public boolean isOpaque(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return true;
}
public Object get(SynthContext ctx, Object key)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
return null;
}
public void installDefaults(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
}
public void uninstallDefaults(SynthContext ctx)
+ throws NotImplementedException
{
// FIXME: Implement this correctly.
}
+ /**
+ * A convenience method to fetch an integer property.
+ * If the property's value is a {@link Number}, then the
+ * integer value is returned. Otherwise, the default value
+ * is returned.
+ * @param ctx the context
+ * @param key the key to fetch
+ * @param defaultValue the default value
+ * @return the integer value of the property, or the default value
+ */
public int getInt(SynthContext ctx, Object key, int defaultValue)
{
- // FIXME: Implement this correctly.
- return -1;
+ Object obj = get(ctx, key);
+ if (obj instanceof Number)
+ return ((Number) obj).intValue();
+ return defaultValue;
}
- public boolean getBoolean(SynthContext ctx, Object key, boolean defaultValue)
+ /**
+ * A convenience method to fetch an integer property.
+ * If the property's value is a {@link Boolean}, then the
+ * value is returned. Otherwise, the default value
+ * is returned.
+ * @param ctx the context
+ * @param key the key to fetch
+ * @param defaultValue the default value
+ * @return the boolean value of the property, or the default value
+ */
+ public boolean getBoolean(SynthContext ctx, Object key,
+ boolean defaultValue)
{
- // FIXME: Implement this correctly.
- return false;
+ Object obj = get(ctx, key);
+ if (obj instanceof Boolean)
+ return ((Boolean) obj).booleanValue();
+ return defaultValue;
}
+ /**
+ * A convenience method to fetch an Icon-valued property.
+ * If the property's value is an {@link Icon}, then the
+ * value is returned. Otherwise, null is returned.
+ * @param ctx the context
+ * @param key the key to fetch
+ * @return the icon, or null
+ */
public Icon getIcon(SynthContext ctx, Object key)
{
- // FIXME: Implement this correctly.
+ Object obj = get(ctx, key);
+ if (key instanceof Icon)
+ return (Icon) obj;
return null;
}
+ /**
+ * A convenience method to fetch a String property.
+ * If the property's value is a {@link String}, then the
+ * value is returned. Otherwise, the default value
+ * is returned.
+ * @param ctx the context
+ * @param key the key to fetch
+ * @param defaultValue the default value
+ * @return the String value of the property, or the default value
+ */
public String getString(SynthContext ctx, Object key, String defaultValue)
{
- // FIXME: Implement this correctly.
- return null;
+ Object obj = get(ctx, key);
+ if (obj instanceof String)
+ return (String) obj;
+ return defaultValue;
}
}
diff --git a/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java b/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java
index 0d9b625..a9bbe9a 100644
--- a/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java
+++ b/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java
@@ -1,5 +1,5 @@
/* DefaultTableCellRenderer.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,6 @@ import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
-import javax.swing.JTextField;
/**
* Class to display every cells.
@@ -59,7 +58,7 @@ public class DefaultTableCellRenderer extends JLabel
{
static final long serialVersionUID = 7878911414715528324L;
- protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0);
+ protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
public static class UIResource extends DefaultTableCellRenderer
implements javax.swing.plaf.UIResource
@@ -164,17 +163,17 @@ public class DefaultTableCellRenderer extends JLabel
super.setForeground(table.getForeground());
}
+ Border b = null;
if (hasFocus)
{
- setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
- if (table.isCellEditable(row, column))
- {
- super.setBackground(UIManager.getColor("Table.focusCellBackground"));
- super.setForeground(UIManager.getColor("Table.focusCellForeground"));
- }
+ if (isSelected)
+ b = UIManager.getBorder("Table.focusSelectedCellHighlightBorder");
+ if (b == null)
+ b = UIManager.getBorder("Table.focusCellHighlightBorder");
}
else
- setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+ b = noFocusBorder;
+ setBorder(b);
setFont(table.getFont());
diff --git a/libjava/classpath/javax/swing/table/DefaultTableColumnModel.java b/libjava/classpath/javax/swing/table/DefaultTableColumnModel.java
index 1087177..24ac8fc 100644
--- a/libjava/classpath/javax/swing/table/DefaultTableColumnModel.java
+++ b/libjava/classpath/javax/swing/table/DefaultTableColumnModel.java
@@ -1,5 +1,5 @@
/* DefaultTableColumnModel.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,6 +46,7 @@ import java.util.EventListener;
import java.util.Vector;
import javax.swing.DefaultListSelectionModel;
+import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.EventListenerList;
@@ -55,9 +56,11 @@ import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
/**
- * DefaultTableColumnModel
+ * A model that stores information about the columns used in a {@link JTable}.
+ *
+ * @see JTable#setColumnModel(TableColumnModel)
+ *
* @author Andrew Selkirk
- * @version 1.0
*/
public class DefaultTableColumnModel
implements TableColumnModel, PropertyChangeListener, ListSelectionListener,
@@ -66,88 +69,116 @@ public class DefaultTableColumnModel
private static final long serialVersionUID = 6580012493508960512L;
/**
- * Columns that this model keeps track of.
+ * Storage for the table columns.
*/
protected Vector tableColumns;
/**
- * Selection Model that keeps track of columns selection
+ * A selection model that keeps track of column selections.
*/
protected ListSelectionModel selectionModel;
/**
- * Space between two columns. By default it is set to 1
+ * The space between the columns (the default value is <code>1</code>).
*/
protected int columnMargin;
/**
- * listenerList keeps track of all listeners registered with this model
+ * Storage for the listeners registered with the model.
*/
protected EventListenerList listenerList = new EventListenerList();
/**
- * changeEvent is fired when change occurs in one of the columns properties
+ * A change event used when notifying listeners of a change to the
+ * <code>columnMargin</code> field. This single event is reused for all
+ * notifications.
*/
+ // FIXME: use lazy instantiation
protected transient ChangeEvent changeEvent = new ChangeEvent(this);
/**
- * Indicates whether columns can be selected
+ * A flag that indicates whether or not columns can be selected.
*/
protected boolean columnSelectionAllowed;
/**
- * Total width of all the columns in this model
+ * The total width of all the columns in this model.
*/
protected int totalColumnWidth;
/**
- * Constructor DefaultTableColumnModel
+ * Creates a new table column model with zero columns. A default column
+ * selection model is created by calling {@link #createSelectionModel()}.
+ * The default value for <code>columnMargin</code> is <code>1</code> and
+ * the default value for <code>columnSelectionAllowed</code> is
+ * <code>false</code>.
*/
public DefaultTableColumnModel()
{
tableColumns = new Vector();
- setSelectionModel(createSelectionModel());
+ selectionModel = createSelectionModel();
+ selectionModel.addListSelectionListener(this);
columnMargin = 1;
columnSelectionAllowed = false;
}
/**
- * addColumn adds column to the model. This method fires ColumnAdded
- * event to model's registered TableColumnModelListeners.
+ * Adds a column to the model then calls
+ * {@link #fireColumnAdded(TableColumnModelEvent)} to notify the registered
+ * listeners. The model registers itself with the column as a
+ * {@link PropertyChangeListener} so that changes to the column width will
+ * invalidate the cached {@link #totalColumnWidth} value.
*
- * @param col column to add
+ * @param column the column (<code>null</code> not permitted).
+ *
+ * @throws IllegalArgumentException if <code>column</code> is
+ * <code>null</code>.
+ *
+ * @see #removeColumn(TableColumn)
*/
- public void addColumn(TableColumn col)
+ public void addColumn(TableColumn column)
{
- if (col == null)
+ if (column == null)
throw new IllegalArgumentException("Null 'col' argument.");
- tableColumns.add(col);
+ tableColumns.add(column);
+ column.addPropertyChangeListener(this);
invalidateWidthCache();
- fireColumnAdded(new TableColumnModelEvent(this, 0, tableColumns.size() - 1));
+ fireColumnAdded(new TableColumnModelEvent(this, 0,
+ tableColumns.size() - 1));
}
/**
- * removeColumn removes table column from the model. This method fires
- * ColumnRemoved event to model's registered TableColumnModelListeners.
+ * Removes a column from the model then calls
+ * {@link #fireColumnRemoved(TableColumnModelEvent)} to notify the registered
+ * listeners. If the specified column does not belong to the model, or is
+ * <code>null</code>, this method does nothing.
*
- * @param col column to be removed
+ * @param column the column to be removed (<code>null</code> permitted).
+ *
+ * @see #addColumn(TableColumn)
*/
- public void removeColumn(TableColumn col)
+ public void removeColumn(TableColumn column)
{
- int index = this.tableColumns.indexOf(col);
+ int index = this.tableColumns.indexOf(column);
if (index < 0)
return;
+ tableColumns.remove(column);
fireColumnRemoved(new TableColumnModelEvent(this, index, 0));
- tableColumns.remove(col);
+ column.removePropertyChangeListener(this);
invalidateWidthCache();
}
/**
- * moveColumn moves column at index i to index j. This method fires
- * ColumnMoved event to model's registered TableColumnModelListeners.
+ * Moves the column at index i to the position specified by index j, then
+ * calls {@link #fireColumnMoved(TableColumnModelEvent)} to notify registered
+ * listeners.
*
- * @param i index of the column that will be moved
- * @param j index of column's new location
+ * @param i index of the column that will be moved.
+ * @param j index of the column's new location.
+ *
+ * @throws IllegalArgumentException if <code>i</code> or <code>j</code> are
+ * outside the range <code>0</code> to <code>N-1</code>, where
+ * <code>N</code> is the column count.
*/
public void moveColumn(int i, int j)
{
@@ -158,22 +189,27 @@ public class DefaultTableColumnModel
throw new IllegalArgumentException("Index 'j' out of range.");
Object column = tableColumns.remove(i);
tableColumns.add(j, column);
- fireColumnAdded(new TableColumnModelEvent(this, i, j));
+ fireColumnMoved(new TableColumnModelEvent(this, i, j));
}
/**
- * setColumnMargin sets margin of the columns.
- * @param m new column margin
+ * Sets the column margin then calls {@link #fireColumnMarginChanged()} to
+ * notify the registered listeners.
+ *
+ * @param margin the column margin.
+ *
+ * @see #getColumnMargin()
*/
- public void setColumnMargin(int m)
+ public void setColumnMargin(int margin)
{
- columnMargin = m;
+ columnMargin = margin;
fireColumnMarginChanged();
}
/**
- * getColumnCount returns number of columns in the model
- * @return int number of columns in the model
+ * Returns the number of columns in the model.
+ *
+ * @return The column count.
*/
public int getColumnCount()
{
@@ -181,8 +217,9 @@ public class DefaultTableColumnModel
}
/**
- * getColumns
- * @return Enumeration
+ * Returns an enumeration of the columns in the model.
+ *
+ * @return An enumeration of the columns in the model.
*/
public Enumeration getColumns()
{
@@ -214,18 +251,28 @@ public class DefaultTableColumnModel
}
/**
- * getColumn returns column at the specified index
- * @param i index of the column
- * @return TableColumn column at the specified index
+ * Returns the column at the specified index.
+ *
+ * @param columnIndex the column index (in the range from <code>0</code> to
+ * <code>N-1</code>, where <code>N</code> is the number of columns in
+ * the model).
+ *
+ * @return The column at the specified index.
+ *
+ * @throws ArrayIndexOutOfBoundsException if <code>i</code> is not within
+ * the specified range.
*/
- public TableColumn getColumn(int i)
+ public TableColumn getColumn(int columnIndex)
{
- return (TableColumn) tableColumns.get(i);
+ return (TableColumn) tableColumns.get(columnIndex);
}
/**
- * getColumnMargin returns column margin
- * @return int column margin
+ * Returns the column margin.
+ *
+ * @return The column margin.
+ *
+ * @see #setColumnMargin(int)
*/
public int getColumnMargin()
{
@@ -233,16 +280,26 @@ public class DefaultTableColumnModel
}
/**
- * getColumnIndexAtX returns column that contains specified x-coordinate.
- * @param x x-coordinate that column should contain
- * @return int index of the column that contains specified x-coordinate relative
- * to this column model
+ * Returns the index of the column that contains the specified x-coordinate.
+ * This method assumes that:
+ * <ul>
+ * <li>column zero begins at position zero;</li>
+ * <li>all columns appear in order;</li>
+ * <li>individual column widths are taken into account, but the column margin
+ * is ignored.</li>
+ * </ul>
+ * If no column contains the specified position, this method returns
+ * <code>-1</code>.
+ *
+ * @param x the x-position.
+ *
+ * @return The column index, or <code>-1</code>.
*/
public int getColumnIndexAtX(int x)
{
for (int i = 0; i < tableColumns.size(); ++i)
{
- int w = ((TableColumn)tableColumns.get(i)).getWidth();
+ int w = ((TableColumn) tableColumns.get(i)).getWidth();
if (0 <= x && x < w)
return i;
else
@@ -252,10 +309,10 @@ public class DefaultTableColumnModel
}
/**
- * getTotalColumnWidth returns total width of all the columns including
- * column's margins.
+ * Returns total width of all the columns in the model, ignoring the
+ * {@link #columnMargin}.
*
- * @return total width of all the columns
+ * @return The total width of all the columns.
*/
public int getTotalColumnWidth()
{
@@ -265,24 +322,32 @@ public class DefaultTableColumnModel
}
/**
- * setSelectionModel sets selection model that will be used by this ColumnTableModel
- * to keep track of currently selected columns
+ * Sets the selection model that will be used to keep track of the selected
+ * columns.
*
- * @param model new selection model
- * @exception IllegalArgumentException if model is null
+ * @param model the selection model (<code>null</code> not permitted).
+ *
+ * @throws IllegalArgumentException if <code>model</code> is
+ * <code>null</code>.
+ *
+ * @see #getSelectionModel()
*/
public void setSelectionModel(ListSelectionModel model)
{
if (model == null)
throw new IllegalArgumentException();
+ selectionModel.removeListSelectionListener(this);
selectionModel = model;
selectionModel.addListSelectionListener(this);
}
/**
- * getSelectionModel returns selection model
- * @return ListSelectionModel selection model
+ * Returns the selection model used to track table column selections.
+ *
+ * @return The selection model.
+ *
+ * @see #setSelectionModel(ListSelectionModel)
*/
public ListSelectionModel getSelectionModel()
{
@@ -290,10 +355,11 @@ public class DefaultTableColumnModel
}
/**
- * setColumnSelectionAllowed sets whether column selection is allowed
- * or not.
+ * Sets the flag that indicates whether or not column selection is allowed.
*
- * @param flag true if column selection is allowed and false otherwise
+ * @param flag the new flag value.
+ *
+ * @see #getColumnSelectionAllowed()
*/
public void setColumnSelectionAllowed(boolean flag)
{
@@ -301,10 +367,12 @@ public class DefaultTableColumnModel
}
/**
- * getColumnSelectionAllowed indicates whether column selection is
- * allowed or not.
+ * Returns <code>true</code> if column selection is allowed, and
+ * <code>false</code> if column selection is not allowed.
*
- * @return boolean true if column selection is allowed and false otherwise.
+ * @return A boolean.
+ *
+ * @see #setColumnSelectionAllowed(boolean)
*/
public boolean getColumnSelectionAllowed()
{
@@ -312,10 +380,9 @@ public class DefaultTableColumnModel
}
/**
- * getSelectedColumns returns array containing indexes of currently
- * selected columns
+ * Returns an array containing the indices of the selected columns.
*
- * @return int[] array containing indexes of currently selected columns
+ * @return An array containing the indices of the selected columns.
*/
public int[] getSelectedColumns()
{
@@ -356,8 +423,11 @@ public class DefaultTableColumnModel
}
/**
- * getSelectedColumnCount returns number of currently selected columns
- * @return int number of currently selected columns
+ * Returns the number of selected columns in the model.
+ *
+ * @return The selected column count.
+ *
+ * @see #getSelectionModel()
*/
public int getSelectedColumnCount()
{
@@ -395,10 +465,10 @@ public class DefaultTableColumnModel
}
/**
- * addColumnModelListener adds specified listener to the model's
- * listener list
+ * Registers a listener with the model, so that it will receive
+ * {@link TableColumnModelEvent} notifications.
*
- * @param listener the listener to add
+ * @param listener the listener (<code>null</code> ignored).
*/
public void addColumnModelListener(TableColumnModelListener listener)
{
@@ -406,10 +476,10 @@ public class DefaultTableColumnModel
}
/**
- * removeColumnModelListener removes specified listener from the model's
- * listener list.
+ * Deregisters a listener so that it no longer receives notification of
+ * changes to this model.
*
- * @param listener the listener to remove
+ * @param listener the listener to remove
*/
public void removeColumnModelListener(TableColumnModelListener listener)
{
@@ -417,6 +487,13 @@ public class DefaultTableColumnModel
}
/**
+ * Returns an array containing the listeners that are registered with the
+ * model. If there are no listeners, an empty array is returned.
+ *
+ * @return An array containing the listeners that are registered with the
+ * model.
+ *
+ * @see #addColumnModelListener(TableColumnModelListener)
* @since 1.4
*/
public TableColumnModelListener[] getColumnModelListeners()
@@ -426,78 +503,97 @@ public class DefaultTableColumnModel
}
/**
- * fireColumnAdded fires TableColumnModelEvent to registered
- * TableColumnModelListeners to indicate that column was added
- *
- * @param e TableColumnModelEvent
+ * Sends the specified {@link TableColumnModelEvent} to all registered
+ * listeners, to indicate that a column has been added to the model. The
+ * event's <code>toIndex</code> attribute should contain the index of the
+ * added column.
+ *
+ * @param e the event.
+ *
+ * @see #addColumn(TableColumn)
*/
protected void fireColumnAdded(TableColumnModelEvent e)
{
TableColumnModelListener[] listeners = getColumnModelListeners();
- for (int i=0; i< listeners.length; i++)
+ for (int i = 0; i < listeners.length; i++)
listeners[i].columnAdded(e);
}
/**
- * fireColumnAdded fires TableColumnModelEvent to registered
- * TableColumnModelListeners to indicate that column was removed
- *
- * @param e TableColumnModelEvent
+ * Sends the specified {@link TableColumnModelEvent} to all registered
+ * listeners, to indicate that a column has been removed from the model. The
+ * event's <code>fromIndex</code> attribute should contain the index of the
+ * removed column.
+ *
+ * @param e the event.
+ *
+ * @see #removeColumn(TableColumn)
*/
protected void fireColumnRemoved(TableColumnModelEvent e)
{
TableColumnModelListener[] listeners = getColumnModelListeners();
- for (int i=0; i< listeners.length; i++)
+ for (int i = 0; i < listeners.length; i++)
listeners[i].columnRemoved(e);
}
/**
- * fireColumnAdded fires TableColumnModelEvent to registered
- * TableColumnModelListeners to indicate that column was moved
- *
- * @param e TableColumnModelEvent
+ * Sends the specified {@link TableColumnModelEvent} to all registered
+ * listeners, to indicate that a column in the model has been moved. The
+ * event's <code>fromIndex</code> attribute should contain the old column
+ * index, and the <code>toIndex</code> attribute should contain the new
+ * column index.
+ *
+ * @param e the event.
+ *
+ * @see #moveColumn(int, int)
*/
protected void fireColumnMoved(TableColumnModelEvent e)
{
TableColumnModelListener[] listeners = getColumnModelListeners();
- for (int i=0; i< listeners.length; i++)
+ for (int i = 0; i < listeners.length; i++)
listeners[i].columnMoved(e);
}
/**
- * fireColumnSelectionChanged fires TableColumnModelEvent to model's
- * registered TableColumnModelListeners to indicate that different column
- * was selected.
+ * Sends the specified {@link ListSelectionEvent} to all registered listeners,
+ * to indicate that the column selections have changed.
*
- * @param evt ListSelectionEvent
+ * @param e the event.
+ *
+ * @see #valueChanged(ListSelectionEvent)
*/
- protected void fireColumnSelectionChanged(ListSelectionEvent evt)
+ protected void fireColumnSelectionChanged(ListSelectionEvent e)
{
EventListener [] listeners = getListeners(TableColumnModelListener.class);
for (int i = 0; i < listeners.length; ++i)
- ((TableColumnModelListener)listeners[i]).columnSelectionChanged(evt);
+ ((TableColumnModelListener) listeners[i]).columnSelectionChanged(e);
}
/**
- * fireColumnMarginChanged fires TableColumnModelEvent to model's
- * registered TableColumnModelListeners to indicate that column margin
- * was changed.
+ * Sends a {@link ChangeEvent} to the model's registered listeners to
+ * indicate that the column margin was changed.
+ *
+ * @see #setColumnMargin(int)
*/
protected void fireColumnMarginChanged()
{
EventListener [] listeners = getListeners(TableColumnModelListener.class);
for (int i = 0; i < listeners.length; ++i)
- ((TableColumnModelListener)listeners[i]).columnMarginChanged(changeEvent);
+ ((TableColumnModelListener) listeners[i]).columnMarginChanged(changeEvent);
}
/**
- * getListeners returns currently registered listeners with this model.
- * @param listenerType type of listeners to return
+ * Returns an array containing the listeners (of the specified type) that
+ * are registered with this model.
+ *
+ * @param listenerType the listener type (must indicate a subclass of
+ * {@link EventListener}, <code>null</code> not permitted).
*
- * @return EventListener[] array of model's listeners of the specified type
+ * @return An array containing the listeners (of the specified type) that
+ * are registered with this model.
*/
public EventListener[] getListeners(Class listenerType)
{
@@ -505,20 +601,26 @@ public class DefaultTableColumnModel
}
/**
- * propertyChange handles changes occuring in the properties of the
- * model's columns.
+ * Receives notification of property changes for the columns in the model.
+ * If the <code>width</code> property for any column changes, we invalidate
+ * the {@link #totalColumnWidth} value here.
*
- * @param evt PropertyChangeEvent
+ * @param event the event.
*/
- public void propertyChange(PropertyChangeEvent evt)
+ public void propertyChange(PropertyChangeEvent event)
{
- if (evt.getPropertyName().equals(TableColumn.COLUMN_WIDTH_PROPERTY))
- invalidateWidthCache();
+ if (event.getPropertyName().equals("width"))
+ invalidateWidthCache();
}
/**
- * valueChanged handles changes in the selectionModel.
- * @param e ListSelectionEvent
+ * Receives notification of the change to the list selection model, and
+ * responds by calling
+ * {@link #fireColumnSelectionChanged(ListSelectionEvent)}.
+ *
+ * @param e the list selection event.
+ *
+ * @see #getSelectionModel()
*/
public void valueChanged(ListSelectionEvent e)
{
@@ -526,10 +628,11 @@ public class DefaultTableColumnModel
}
/**
- * createSelectionModel creates selection model that will keep track
- * of currently selected column(s)
+ * Creates a default selection model to track the currently selected
+ * column(s). This method is called by the constructor and returns a new
+ * instance of {@link DefaultListSelectionModel}.
*
- * @return ListSelectionModel selection model of the columns
+ * @return A new default column selection model.
*/
protected ListSelectionModel createSelectionModel()
{
@@ -537,9 +640,10 @@ public class DefaultTableColumnModel
}
/**
- * recalcWidthCache calculates total width of the columns.
- * If the current cache of the total width is in invalidated state,
- * then width is recalculated. Otherwise nothing is done.
+ * Recalculates the total width of the columns, if the cached value is
+ * <code>-1</code>. Otherwise this method does nothing.
+ *
+ * @see #getTotalColumnWidth()
*/
protected void recalcWidthCache()
{
@@ -548,13 +652,15 @@ public class DefaultTableColumnModel
totalColumnWidth = 0;
for (int i = 0; i < tableColumns.size(); ++i)
{
- totalColumnWidth += ((TableColumn)tableColumns.get(i)).getWidth();
+ totalColumnWidth += ((TableColumn) tableColumns.get(i)).getWidth();
}
}
}
/**
- * invalidateWidthCache
+ * Sets the {@link #totalColumnWidth} field to <code>-1</code>.
+ *
+ * @see #recalcWidthCache()
*/
private void invalidateWidthCache()
{
diff --git a/libjava/classpath/javax/swing/table/DefaultTableModel.java b/libjava/classpath/javax/swing/table/DefaultTableModel.java
index c281caa..09be2f7 100644
--- a/libjava/classpath/javax/swing/table/DefaultTableModel.java
+++ b/libjava/classpath/javax/swing/table/DefaultTableModel.java
@@ -294,12 +294,7 @@ public class DefaultTableModel extends AbstractTableModel
else
{
int rowsToAdd = rowCount - existingRowCount;
- for (int i = 0; i < rowsToAdd; i++)
- {
- Vector tmp = new Vector();
- tmp.setSize(columnIdentifiers.size());
- dataVector.add(tmp);
- }
+ addExtraRows(rowsToAdd, columnIdentifiers.size());
fireTableRowsInserted(existingRowCount,rowCount-1);
}
}
@@ -366,12 +361,7 @@ public class DefaultTableModel extends AbstractTableModel
if (columnData.length > dataVector.size())
{
int rowsToAdd = columnData.length - dataVector.size();
- for (int i = 0; i < rowsToAdd; i++)
- {
- Vector tmp = new Vector();
- tmp.setSize(columnIdentifiers.size());
- dataVector.add(tmp);
- }
+ addExtraRows(rowsToAdd, columnIdentifiers.size());
}
else if (columnData.length < dataVector.size())
{
@@ -502,7 +492,8 @@ public class DefaultTableModel extends AbstractTableModel
else
{
if (column < getColumnCount())
- {
+ {
+ checkSize();
Object id = columnIdentifiers.get(column);
if (id != null)
result = id.toString();
@@ -588,4 +579,41 @@ public class DefaultTableModel extends AbstractTableModel
vector.add(convertToVector(data[i]));
return vector;
}
+
+ /**
+ * This method adds some rows to <code>dataVector</code>.
+ *
+ * @param rowsToAdd number of rows to add
+ * @param nbColumns size of the added rows
+ */
+ private void addExtraRows(int rowsToAdd, int nbColumns)
+ {
+ for (int i = 0; i < rowsToAdd; i++)
+ {
+ Vector tmp = new Vector();
+ tmp.setSize(columnIdentifiers.size());
+ dataVector.add(tmp);
+ }
+ }
+
+ /**
+ * Checks the real columns/rows sizes against the ones returned by
+ * <code>getColumnCount()</code> and <code>getRowCount()</code>.
+ * If the supposed one are bigger, then we grow <code>columIdentifiers</code>
+ * and <code>dataVector</code> to their expected size.
+ */
+ private void checkSize()
+ {
+ int columnCount = getColumnCount();
+ int rowCount = getRowCount();
+
+ if (columnCount > columnIdentifiers.size())
+ columnIdentifiers.setSize(columnCount);
+
+ if (rowCount > dataVector.size())
+ {
+ int rowsToAdd = rowCount - dataVector.size();
+ addExtraRows(rowsToAdd, columnCount);
+ }
+ }
}
diff --git a/libjava/classpath/javax/swing/table/JTableHeader.java b/libjava/classpath/javax/swing/table/JTableHeader.java
index 4e8dcd7..f7c1e1c 100644
--- a/libjava/classpath/javax/swing/table/JTableHeader.java
+++ b/libjava/classpath/javax/swing/table/JTableHeader.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.table;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
@@ -80,232 +82,278 @@ public class JTableHeader extends JComponent
protected class AccessibleJTableHeaderEntry extends AccessibleContext
implements Accessible, AccessibleComponent
{
- public AccessibleJTableHeaderEntry(int c, JTableHeader p, JTable t)
+ public AccessibleJTableHeaderEntry(int c, JTableHeader p, JTable t)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void addFocusListener(FocusListener l)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void addPropertyChangeListener(PropertyChangeListener l)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public boolean contains(Point p)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleAction getAccessibleAction()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Accessible getAccessibleAt(Point p)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Accessible getAccessibleChild(int i)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public int getAccessibleChildrenCount()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleComponent getAccessibleComponent()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleContext getAccessibleContext()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public String getAccessibleDescription()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public int getAccessibleIndexInParent()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public String getAccessibleName()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleRole getAccessibleRole()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleSelection getAccessibleSelection()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleStateSet getAccessibleStateSet()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleText getAccessibleText()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public AccessibleValue getAccessibleValue()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Color getBackground()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Rectangle getBounds()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Cursor getCursor()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Font getFont()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public FontMetrics getFontMetrics(Font f)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Color getForeground()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Locale getLocale()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Point getLocation()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Point getLocationOnScreen()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public Dimension getSize()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public boolean isEnabled()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public boolean isFocusTraversable()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public boolean isShowing()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public boolean isVisible()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void removeFocusListener(FocusListener l)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void removePropertyChangeListener(PropertyChangeListener l)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void requestFocus()
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setAccessibleDescription(String s)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setAccessibleName(String s)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setBackground(Color c)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setBounds(Rectangle r)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setCursor(Cursor c)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setEnabled(boolean b)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setFont(Font f)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setForeground(Color c)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setLocation(Point p)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setSize(Dimension d)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
public void setVisible(boolean b)
+ throws NotImplementedException
{
throw new Error("not implemented");
}
diff --git a/libjava/classpath/javax/swing/table/TableColumn.java b/libjava/classpath/javax/swing/table/TableColumn.java
index 9f06c5b..fbb877d 100644
--- a/libjava/classpath/javax/swing/table/TableColumn.java
+++ b/libjava/classpath/javax/swing/table/TableColumn.java
@@ -1,5 +1,5 @@
/* TableColumn.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.table;
+import java.awt.Component;
+import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
@@ -49,7 +51,6 @@ import javax.swing.event.SwingPropertyChangeSupport;
* width, minimum width, preferred width and maximum width.
*
* @author Andrew Selkirk
- * @version 1.0
*/
public class TableColumn
implements Serializable
@@ -57,8 +58,9 @@ public class TableColumn
static final long serialVersionUID = -6113660025878112608L;
/**
- * The name for the <code>columnWidth</code> property. Note that the typo
- * in the name value is deliberate, to match the specification.
+ * The name for the <code>columnWidth</code> property (this field is
+ * obsolete and no longer used). Note also that the typo in the value
+ * string is deliberate, to match the specification.
*/
public static final String COLUMN_WIDTH_PROPERTY = "columWidth";
@@ -88,47 +90,48 @@ public class TableColumn
protected Object identifier;
/**
- * The width.
+ * The current width for the column.
*/
protected int width;
/**
- * The minimum width.
+ * The minimum width for the column.
*/
protected int minWidth = 15;
/**
- * The preferred width.
+ * The preferred width for the column.
*/
private int preferredWidth;
/**
- * The maximum width.
+ * The maximum width for the column.
*/
protected int maxWidth = Integer.MAX_VALUE;
/**
- * headerRenderer
+ * The renderer for the column header.
*/
protected TableCellRenderer headerRenderer;
/**
- * The header value.
+ * The value for the column header.
*/
protected Object headerValue;
/**
- * cellRenderer
+ * The renderer for the regular cells in this column.
*/
protected TableCellRenderer cellRenderer;
/**
- * cellEditor
+ * An editor for the regular cells in this column.
*/
protected TableCellEditor cellEditor;
/**
- * isResizable
+ * A flag that determines whether or not the column is resizable (the default
+ * is <code>true</code>).
*/
protected boolean isResizable = true;
@@ -140,7 +143,7 @@ public class TableColumn
protected transient int resizedPostingDisableCount;
/**
- * changeSupport
+ * A storage and notification mechanism for property change listeners.
*/
private SwingPropertyChangeSupport changeSupport =
new SwingPropertyChangeSupport(this);
@@ -200,60 +203,31 @@ public class TableColumn
}
/**
- * firePropertyChange
- *
- * @param property the name of the property
- * @param oldValue the old value
- * @param newValue the new value
- */
- private void firePropertyChange(String property, Object oldValue,
- Object newValue)
- {
- changeSupport.firePropertyChange(property, oldValue, newValue);
- }
-
- /**
- * firePropertyChange
- *
- * @param property the name of the property
- * @param oldValue the old value
- * @param newValue the new value
- */
- private void firePropertyChange(String property, int oldValue, int newValue)
- {
- firePropertyChange(property, new Integer(oldValue), new Integer(newValue));
- }
-
- /**
- * firePropertyChange
- *
- * @param property the name of the property
- * @param oldValue the old value
- * @param newValue the new value
- */
- private void firePropertyChange(String property, boolean oldValue,
- boolean newValue)
- {
- firePropertyChange(property, Boolean.valueOf(oldValue),
- Boolean.valueOf(newValue));
- }
-
- /**
* Sets the index of the column in the related {@link TableModel} that this
- * <code>TableColumn</code> maps to.
+ * <code>TableColumn</code> maps to, and sends a {@link PropertyChangeEvent}
+ * (with the property name 'modelIndex') to all registered listeners.
*
* @param modelIndex the column index in the model.
+ *
+ * @see #getModelIndex()
*/
public void setModelIndex(int modelIndex)
{
- this.modelIndex = modelIndex;
+ if (this.modelIndex != modelIndex)
+ {
+ int oldValue = this.modelIndex;
+ this.modelIndex = modelIndex;
+ changeSupport.firePropertyChange("modelIndex", oldValue, modelIndex);
+ }
}
/**
* Returns the index of the column in the related {@link TableModel} that
* this <code>TableColumn</code> maps to.
*
- * @return the model index
+ * @return the model index.
+ *
+ * @see #setModelIndex(int)
*/
public int getModelIndex()
{
@@ -261,13 +235,21 @@ public class TableColumn
}
/**
- * Sets the identifier for the column.
+ * Sets the identifier for the column and sends a {@link PropertyChangeEvent}
+ * (with the property name 'identifier') to all registered listeners.
+ *
+ * @param identifier the identifier (<code>null</code> permitted).
*
- * @param identifier the identifier
+ * @see #getIdentifier()
*/
public void setIdentifier(Object identifier)
{
- this.identifier = identifier;
+ if (this.identifier != identifier)
+ {
+ Object oldValue = this.identifier;
+ this.identifier = identifier;
+ changeSupport.firePropertyChange("identifier", oldValue, identifier);
+ }
}
/**
@@ -285,11 +267,12 @@ public class TableColumn
}
/**
- * Sets the header value and sends a {@link PropertyChangeEvent} to all
- * registered listeners. The header value property uses the name
- * {@link #HEADER_VALUE_PROPERTY}.
+ * Sets the header value and sends a {@link PropertyChangeEvent} (with the
+ * property name {@link #HEADER_VALUE_PROPERTY}) to all registered listeners.
*
- * @param headerValue the value of the header
+ * @param headerValue the value of the header (<code>null</code> permitted).
+ *
+ * @see #getHeaderValue()
*/
public void setHeaderValue(Object headerValue)
{
@@ -298,13 +281,16 @@ public class TableColumn
Object oldValue = this.headerValue;
this.headerValue = headerValue;
- firePropertyChange(HEADER_VALUE_PROPERTY, oldValue, headerValue);
+ changeSupport.firePropertyChange(HEADER_VALUE_PROPERTY, oldValue,
+ headerValue);
}
/**
* Returns the header value.
*
- * @return the value of the header
+ * @return the value of the header.
+ *
+ * @see #getHeaderValue()
*/
public Object getHeaderValue()
{
@@ -312,9 +298,13 @@ public class TableColumn
}
/**
- * setHeaderRenderer
+ * Sets the renderer for the column header and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link #HEADER_RENDERER_PROPERTY}) to all registered listeners.
+ *
+ * @param renderer the header renderer (<code>null</code> permitted).
*
- * @param renderer the renderer to use
+ * @see #getHeaderRenderer()
*/
public void setHeaderRenderer(TableCellRenderer renderer)
{
@@ -323,13 +313,16 @@ public class TableColumn
TableCellRenderer oldRenderer = headerRenderer;
headerRenderer = renderer;
- firePropertyChange(HEADER_RENDERER_PROPERTY,
- oldRenderer, headerRenderer);
+ changeSupport.firePropertyChange(HEADER_RENDERER_PROPERTY, oldRenderer,
+ headerRenderer);
}
/**
- * getHeaderRenderer
- * @return TableCellRenderer
+ * Returns the renderer for the column header.
+ *
+ * @return The renderer for the column header (possibly <code>null</code>).
+ *
+ * @see #setHeaderRenderer(TableCellRenderer)
*/
public TableCellRenderer getHeaderRenderer()
{
@@ -338,9 +331,12 @@ public class TableColumn
/**
* Sets the renderer for cells in this column and sends a
- * {@link PropertyChangeEvent} to all registered listeners.
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link #CELL_RENDERER_PROPERTY}) to all registered listeners.
*
* @param renderer the cell renderer (<code>null</code> permitted).
+ *
+ * @see #getCellRenderer()
*/
public void setCellRenderer(TableCellRenderer renderer)
{
@@ -349,14 +345,16 @@ public class TableColumn
TableCellRenderer oldRenderer = cellRenderer;
cellRenderer = renderer;
- firePropertyChange(CELL_RENDERER_PROPERTY,
- oldRenderer, cellRenderer);
+ changeSupport.firePropertyChange(CELL_RENDERER_PROPERTY, oldRenderer,
+ cellRenderer);
}
/**
* Returns the renderer for the table cells in this column.
*
- * @return The cell renderer.
+ * @return The cell renderer (possibly <code>null</code>).
+ *
+ * @see #setCellRenderer(TableCellRenderer)
*/
public TableCellRenderer getCellRenderer()
{
@@ -364,19 +362,30 @@ public class TableColumn
}
/**
- * setCellEditor
+ * Sets the cell editor for the column and sends a {@link PropertyChangeEvent}
+ * (with the property name 'cellEditor') to all registered listeners.
+ *
+ * @param cellEditor the cell editor (<code>null</code> permitted).
*
- * @param cellEditor the cell editor
+ * @see #getCellEditor()
*/
public void setCellEditor(TableCellEditor cellEditor)
{
- this.cellEditor = cellEditor;
+ if (this.cellEditor != cellEditor)
+ {
+ TableCellEditor oldValue = this.cellEditor;
+ this.cellEditor = cellEditor;
+ changeSupport.firePropertyChange("cellEditor", oldValue, cellEditor);
+ }
}
/**
- * getCellEditor
+ * Returns the cell editor for the column (the default value is
+ * <code>null</code>).
+ *
+ * @return The cell editor (possibly <code>null</code>).
*
- * @return the cell editor
+ * @see #setCellEditor(TableCellEditor)
*/
public TableCellEditor getCellEditor()
{
@@ -384,9 +393,14 @@ public class TableColumn
}
/**
- * setWidth
+ * Sets the width for the column and sends a {@link PropertyChangeEvent}
+ * (with the property name 'width') to all registered listeners. If the new
+ * width falls outside the range getMinWidth() to getMaxWidth() it is
+ * adjusted to the appropriate boundary value.
+ *
+ * @param newWidth the width.
*
- * @param newWidth the width
+ * @see #getWidth()
*/
public void setWidth(int newWidth)
{
@@ -406,13 +420,15 @@ public class TableColumn
// however, tests show that the actual fired property name is 'width'
// and even Sun's API docs say that this constant field is obsolete and
// not used.
- firePropertyChange("width", oldWidth, width);
+ changeSupport.firePropertyChange("width", oldWidth, width);
}
/**
- * getWidth
+ * Returns the width for the column (the default value is <code>75</code>).
*
- * @return int
+ * @return The width.
+ *
+ * @see #setWidth(int)
*/
public int getWidth()
{
@@ -420,9 +436,15 @@ public class TableColumn
}
/**
- * setPreferredWidth
+ * Sets the preferred width for the column and sends a
+ * {@link PropertyChangeEvent} (with the property name 'preferredWidth') to
+ * all registered listeners. If necessary, the supplied value will be
+ * adjusted to fit in the range {@link #getMinWidth()} to
+ * {@link #getMaxWidth()}.
+ *
+ * @param preferredWidth the preferred width.
*
- * @param preferredWidth the preferred width
+ * @see #getPreferredWidth()
*/
public void setPreferredWidth(int preferredWidth)
{
@@ -435,13 +457,17 @@ public class TableColumn
else
this.preferredWidth = preferredWidth;
- firePropertyChange("preferredWidth", oldPrefWidth, this.preferredWidth);
+ changeSupport.firePropertyChange("preferredWidth", oldPrefWidth,
+ this.preferredWidth);
}
/**
- * getPreferredWidth
+ * Returns the preferred width for the column (the default value is
+ * <code>75</code>).
+ *
+ * @return The preferred width.
*
- * @return the preferred width
+ * @see #setPreferredWidth(int)
*/
public int getPreferredWidth()
{
@@ -449,22 +475,39 @@ public class TableColumn
}
/**
- * Sets the minimum width for the column and, if necessary, updates the
- * <code>width</code> and <code>preferredWidth</code>.
+ * Sets the minimum width for the column and sends a
+ * {@link PropertyChangeEvent} (with the property name 'minWidth') to all
+ * registered listeners. If the current <code>width</code> and/or
+ * <code>preferredWidth</code> are less than the new minimum width, they are
+ * adjusted accordingly.
*
- * @param minWidth the minimum width
+ * @param minWidth the minimum width (negative values are treated as 0).
+ *
+ * @see #getMinWidth()
*/
public void setMinWidth(int minWidth)
{
- this.minWidth = minWidth;
- setWidth(getWidth());
- setPreferredWidth(getPreferredWidth());
+ if (minWidth < 0)
+ minWidth = 0;
+ if (this.minWidth != minWidth)
+ {
+ if (width < minWidth)
+ setWidth(minWidth);
+ if (preferredWidth < minWidth)
+ setPreferredWidth(minWidth);
+ int oldValue = this.minWidth;
+ this.minWidth = minWidth;
+ changeSupport.firePropertyChange("minWidth", oldValue, minWidth);
+ }
}
/**
- * Returns the <code>TableColumn</code>'s minimum width.
+ * Returns the <code>TableColumn</code>'s minimum width (the default value
+ * is <code>15</code>).
*
* @return The minimum width.
+ *
+ * @see #setMinWidth(int)
*/
public int getMinWidth()
{
@@ -472,22 +515,37 @@ public class TableColumn
}
/**
- * Sets the maximum width and, if necessary, updates the <code>width</code>
- * and <code>preferredWidth</code>.
+ * Sets the maximum width for the column and sends a
+ * {@link PropertyChangeEvent} (with the property name 'maxWidth') to all
+ * registered listeners. If the current <code>width</code> and/or
+ * <code>preferredWidth</code> are greater than the new maximum width, they
+ * are adjusted accordingly.
+ *
+ * @param maxWidth the maximum width.
*
- * @param maxWidth the maximum width
+ * @see #getMaxWidth()
*/
public void setMaxWidth(int maxWidth)
{
- this.maxWidth = maxWidth;
- setWidth(getWidth());
- setPreferredWidth(getPreferredWidth());
+ if (this.maxWidth != maxWidth)
+ {
+ if (width > maxWidth)
+ setWidth(maxWidth);
+ if (preferredWidth > maxWidth)
+ setPreferredWidth(maxWidth);
+ int oldValue = this.maxWidth;
+ this.maxWidth = maxWidth;
+ changeSupport.firePropertyChange("maxWidth", oldValue, maxWidth);
+ }
}
/**
- * Returns the maximum width.
+ * Returns the maximum width for the column (the default value is
+ * {@link Integer#MAX_VALUE}).
*
- * @return The maximum width.
+ * @return The maximum width for the column.
+ *
+ * @see #setMaxWidth(int)
*/
public int getMaxWidth()
{
@@ -495,21 +553,32 @@ public class TableColumn
}
/**
- * setResizable
+ * Sets the flag that controls whether or not the column is resizable, and
+ * sends a {@link PropertyChangeEvent} (with the property name 'isResizable')
+ * to all registered listeners.
*
* @param isResizable <code>true</code> if this column is resizable,
- * <code>false</code> otherwise
+ * <code>false</code> otherwise.
+ *
+ * @see #getResizable()
*/
public void setResizable(boolean isResizable)
{
- this.isResizable = isResizable;
+ if (this.isResizable != isResizable)
+ {
+ this.isResizable = isResizable;
+ changeSupport.firePropertyChange("isResizable", !this.isResizable,
+ isResizable);
+ }
}
/**
- * getResizable
+ * Returns the flag that controls whether or not the column is resizable.
*
* @return <code>true</code> if this column is resizable,
- * <code>false</code> otherwise
+ * <code>false</code> otherwise.
+ *
+ * @see #setResizable(boolean)
*/
public boolean getResizable()
{
@@ -517,11 +586,23 @@ public class TableColumn
}
/**
- * sizeWidthToFit
+ * Sets the minimum, maximum, preferred and current width to match the
+ * minimum, maximum and preferred width of the header renderer component.
+ * If there is no header renderer component, this method does nothing.
*/
public void sizeWidthToFit()
{
- // TODO
+ if (headerRenderer == null)
+ return;
+ Component c = headerRenderer.getTableCellRendererComponent(null,
+ getHeaderValue(), false, false, 0, 0);
+ Dimension min = c.getMinimumSize();
+ Dimension max = c.getMaximumSize();
+ Dimension pref = c.getPreferredSize();
+ setMinWidth(min.width);
+ setMaxWidth(max.width);
+ setPreferredWidth(pref.width);
+ setWidth(pref.width);
}
/**
@@ -543,26 +624,55 @@ public class TableColumn
}
/**
- * Adds a property change listener.
+ * Adds a listener so that it receives {@link PropertyChangeEvent}
+ * notifications from this column. The properties defined by the column are:
+ * <ul>
+ * <li><code>width</code> - see {@link #setWidth(int)};</li>
+ * <li><code>preferredWidth</code> - see {@link #setPreferredWidth(int)};</li>
+ * <li><code>minWidth</code> - see {@link #setMinWidth(int)};</li>
+ * <li><code>maxWidth</code> - see {@link #setMaxWidth(int)};</li>
+ * <li><code>modelIndex</code> - see {@link #setModelIndex(int)};</li>
+ * <li><code>isResizable</code> - see {@link #setResizable(boolean)};</li>
+ * <li><code>cellRenderer</code> - see
+ * {@link #setCellRenderer(TableCellRenderer)};</li>
+ * <li><code>cellEditor</code> - see
+ * {@link #setCellEditor(TableCellEditor)};</li>
+ * <li><code>headerRenderer</code> - see
+ * {@link #setHeaderRenderer(TableCellRenderer)};</li>
+ * <li><code>headerValue</code> - see {@link #setHeaderValue(Object)};</li>
+ * <li><code>identifier</code> - see {@link #setIdentifier(Object)}.</li>
+ * </ul>
+ *
+ * @param listener the listener to add (<code>null</code> is ignored).
*
- * @param listener the listener to add
+ * @see #removePropertyChangeListener(PropertyChangeListener)
*/
- public synchronized void addPropertyChangeListener(PropertyChangeListener listener)
+ public synchronized void addPropertyChangeListener(
+ PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener(listener);
}
/**
- * removePropertyChangeListener
- * @param listener the listener to remove
+ * Removes a listener so that it no longer receives
+ * {@link PropertyChangeEvent} notifications from this column. If
+ * <code>listener</code> is not registered with the column, or is
+ * <code>null</code>, this method does nothing.
+ *
+ * @param listener the listener to remove (<code>null</code> is ignored).
*/
- public synchronized void removePropertyChangeListener(PropertyChangeListener listener)
+ public synchronized void removePropertyChangeListener(
+ PropertyChangeListener listener)
{
changeSupport.removePropertyChangeListener(listener);
}
/**
* Returns the property change listeners for this <code>TableColumn</code>.
+ * An empty array is returned if there are currently no listeners registered.
+ *
+ * @return The property change listeners registered with this column.
+ *
* @since 1.4
*/
public PropertyChangeListener[] getPropertyChangeListeners()
@@ -571,8 +681,10 @@ public class TableColumn
}
/**
- * createDefaultHeaderRenderer
- * @return TableCellRenderer
+ * Creates and returns a default renderer for the column header (in this case,
+ * a new instance of {@link DefaultTableCellRenderer}).
+ *
+ * @return A default renderer for the column header.
*/
protected TableCellRenderer createDefaultHeaderRenderer()
{
diff --git a/libjava/classpath/javax/swing/table/TableColumnModel.java b/libjava/classpath/javax/swing/table/TableColumnModel.java
index b006f9a..986c025 100644
--- a/libjava/classpath/javax/swing/table/TableColumnModel.java
+++ b/libjava/classpath/javax/swing/table/TableColumnModel.java
@@ -1,5 +1,5 @@
/* TableColumnModel.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,6 +42,8 @@ import java.util.Enumeration;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.TableColumnModelListener;
/**
@@ -50,7 +52,6 @@ import javax.swing.event.TableColumnModelListener;
*
* @author Andrew Selkirk
*/
-// FIXME: The API documentation in this class is incomplete.
public interface TableColumnModel
{
/**
@@ -80,21 +81,26 @@ public interface TableColumnModel
void moveColumn(int columnIndex, int newIndex);
/**
- * setColumnMargin
- * @param margin Margin of column
+ * Sets the column margin and sends a {@link ChangeEvent} to all registered
+ * {@link TableColumnModelListener}s registered with the model.
+ *
+ * @param margin the column margin.
+ *
+ * @see #getColumnMargin()
*/
void setColumnMargin(int margin);
/**
* Returns the number of columns in the model.
*
- * @return The column count
+ * @return The column count.
*/
int getColumnCount();
/**
- * getColumns
- * @return Enumeration of columns
+ * Returns an enumeration of the columns in the model.
+ *
+ * @return An enumeration of the columns in the model.
*/
Enumeration getColumns();
@@ -123,30 +129,53 @@ public interface TableColumnModel
* Returns the column margin.
*
* @return The column margin.
+ *
+ * @see #setColumnMargin(int)
*/
int getColumnMargin();
/**
- * getColumnIndexAtX
- * @return Column index as position x
+ * Returns the index of the column that contains the specified x-coordinate,
+ * assuming that:
+ * <ul>
+ * <li>column zero begins at position zero;</li>
+ * <li>all columns appear in order;</li>
+ * <li>individual column widths are taken into account, but the column margin
+ * is ignored.</li>
+ * </ul>
+ * If no column contains the specified position, this method returns
+ * <code>-1</code>.
+ *
+ * @param xPosition the x-position.
+ *
+ * @return The column index, or <code>-1</code>.
*/
int getColumnIndexAtX(int xPosition);
/**
- * getTotalColumnWidth
- * @return Total column width
+ * Returns total width of all the columns in the model, ignoring the
+ * column margin (see {@link #getColumnMargin()}).
+ *
+ * @return The total width of all the columns.
*/
int getTotalColumnWidth();
/**
- * setColumnSelectionAllowed
- * @param value Set column selection
+ * Sets the flag that indicates whether or not column selection is allowed.
+ *
+ * @param allowed the new flag value.
+ *
+ * @see #getColumnSelectionAllowed()
*/
- void setColumnSelectionAllowed(boolean value);
+ void setColumnSelectionAllowed(boolean allowed);
/**
- * getColumnSelectionAllowed
- * @return true if column selection allowed, false otherwise
+ * Returns <code>true</code> if column selection is allowed, and
+ * <code>false</code> if column selection is not allowed.
+ *
+ * @return A boolean.
+ *
+ * @see #setColumnSelectionAllowed(boolean)
*/
boolean getColumnSelectionAllowed();
@@ -157,31 +186,47 @@ public interface TableColumnModel
int[] getSelectedColumns();
/**
- * getSelectedColumnCount
- * @return Count of selected columns
+ * Returns the number of selected columns in the model.
+ *
+ * @return The selected column count.
+ *
+ * @see #getSelectionModel()
*/
int getSelectedColumnCount();
/**
- * setSelectionModel
- * @param model ListSelectionModel
+ * Sets the selection model that will be used to keep track of the selected
+ * columns.
+ *
+ * @param model the selection model (<code>null</code> not permitted).
+ *
+ * @throws IllegalArgumentException if <code>model</code> is
+ * <code>null</code>.
*/
void setSelectionModel(ListSelectionModel model);
/**
- * getSelectionModel
+ * Returns the selection model used to track table column selections.
+ *
+ * @return The selection model.
+ *
+ * @see #setSelectionModel(ListSelectionModel)
*/
ListSelectionModel getSelectionModel();
/**
- * addColumnModelListener
- * @param listener TableColumnModelListener
+ * Registers a listener with the model, so that it will receive
+ * {@link TableColumnModelEvent} notifications.
+ *
+ * @param listener the listener (<code>null</code> ignored).
*/
void addColumnModelListener(TableColumnModelListener listener);
/**
- * removeColumnModelListener
- * @param listener TableColumnModelListener
+ * Deregisters a listener, so that it will no longer receive
+ * {@link TableColumnModelEvent} notifications.
+ *
+ * @param listener the listener.
*/
void removeColumnModelListener(TableColumnModelListener listener);
}
diff --git a/libjava/classpath/javax/swing/text/AbstractDocument.java b/libjava/classpath/javax/swing/text/AbstractDocument.java
index a3e8c46..1ef8173 100644
--- a/libjava/classpath/javax/swing/text/AbstractDocument.java
+++ b/libjava/classpath/javax/swing/text/AbstractDocument.java
@@ -51,6 +51,7 @@ import javax.swing.event.DocumentListener;
import javax.swing.event.EventListenerList;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
+import javax.swing.text.DocumentFilter;
import javax.swing.tree.TreeNode;
import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.CompoundEdit;
@@ -148,6 +149,11 @@ public abstract class AbstractDocument implements Document, Serializable
*/
Object documentCV = new Object();
+ /** An instance of a DocumentFilter.FilterBypass which allows calling
+ * the insert, remove and replace method without checking for an installed
+ * document filter.
+ */
+ DocumentFilter.FilterBypass bypass;
/**
* Creates a new <code>AbstractDocument</code> with the specified
@@ -180,6 +186,19 @@ public abstract class AbstractDocument implements Document, Serializable
content = doc;
context = ctx;
}
+
+ /** Returns the DocumentFilter.FilterBypass instance for this
+ * document and create it if it does not exist yet.
+ *
+ * @return This document's DocumentFilter.FilterBypass instance.
+ */
+ private DocumentFilter.FilterBypass getBypass()
+ {
+ if (bypass == null)
+ bypass = new Bypass();
+
+ return bypass;
+ }
/**
* Returns the paragraph {@link Element} that holds the specified position.
@@ -329,7 +348,7 @@ public abstract class AbstractDocument implements Document, Serializable
*
* @return the {@link AttributeContext} used in this <code>Document</code>
*/
- protected AttributeContext getAttributeContext()
+ protected final AttributeContext getAttributeContext()
{
return context;
}
@@ -366,7 +385,7 @@ public abstract class AbstractDocument implements Document, Serializable
* @return the thread that currently modifies this <code>Document</code>
* if there is one, otherwise <code>null</code>
*/
- protected Thread getCurrentWriter()
+ protected final Thread getCurrentWriter()
{
return currentWriter;
}
@@ -392,7 +411,7 @@ public abstract class AbstractDocument implements Document, Serializable
* @return a {@link Position} which will always mark the end of the
* <code>Document</code>
*/
- public Position getEndPosition()
+ public final Position getEndPosition()
{
// FIXME: Properly implement this by calling Content.createPosition().
return new Position()
@@ -437,7 +456,7 @@ public abstract class AbstractDocument implements Document, Serializable
* @return the property for <code>key</code> or <code>null</code> if there
* is no such property stored
*/
- public Object getProperty(Object key)
+ public final Object getProperty(Object key)
{
// FIXME: make me thread-safe
Object value = null;
@@ -470,7 +489,7 @@ public abstract class AbstractDocument implements Document, Serializable
* @return a {@link Position} which will always mark the beginning of the
* <code>Document</code>
*/
- public Position getStartPosition()
+ public final Position getStartPosition()
{
// FIXME: Properly implement this using Content.createPosition().
return new Position()
@@ -521,6 +540,13 @@ public abstract class AbstractDocument implements Document, Serializable
/**
* Inserts a String into this <code>Document</code> at the specified
* position and assigning the specified attributes to it.
+ *
+ * <p>If a {@link DocumentFilter} is installed in this document, the
+ * corresponding method of the filter object is called.</p>
+ *
+ * <p>The method has no effect when <code>text</code> is <code>null</code>
+ * or has a length of zero.</p>
+ *
*
* @param offset the location at which the string should be inserted
* @param text the content to be inserted
@@ -532,6 +558,19 @@ public abstract class AbstractDocument implements Document, Serializable
public void insertString(int offset, String text, AttributeSet attributes)
throws BadLocationException
{
+ // Bail out if we have a bogus insertion (Behavior observed in RI).
+ if (text == null || text.length() == 0)
+ return;
+
+ if (documentFilter == null)
+ insertStringImpl(offset, text, attributes);
+ else
+ documentFilter.insertString(getBypass(), offset, text, attributes);
+ }
+
+ void insertStringImpl(int offset, String text, AttributeSet attributes)
+ throws BadLocationException
+ {
// Just return when no text to insert was given.
if (text == null || text.length() == 0)
return;
@@ -589,7 +628,7 @@ public abstract class AbstractDocument implements Document, Serializable
* @param key the key of the property to be stored
* @param value the value of the property to be stored
*/
- public void putProperty(Object key, Object value)
+ public final void putProperty(Object key, Object value)
{
// FIXME: make me thread-safe
if (properties == null)
@@ -602,7 +641,7 @@ public abstract class AbstractDocument implements Document, Serializable
* Blocks until a read lock can be obtained. Must block if there is
* currently a writer modifying the <code>Document</code>.
*/
- public void readLock()
+ public final void readLock()
{
if (currentWriter != null && currentWriter.equals(Thread.currentThread()))
return;
@@ -627,7 +666,7 @@ public abstract class AbstractDocument implements Document, Serializable
* Releases the read lock. If this was the only reader on this
* <code>Document</code>, writing may begin now.
*/
- public void readUnlock()
+ public final void readUnlock()
{
// Note we could have a problem here if readUnlock was called without a
// prior call to readLock but the specs simply warn users to ensure that
@@ -673,7 +712,16 @@ public abstract class AbstractDocument implements Document, Serializable
/**
* Removes a piece of content from this <code>Document</code>.
- *
+ *
+ * <p>If a {@link DocumentFilter} is installed in this document, the
+ * corresponding method of the filter object is called. The
+ * <code>DocumentFilter</code> is called even if <code>length</code>
+ * is zero. This is different from {@link #replace}.</p>
+ *
+ * <p>Note: When <code>length</code> is zero or below the call is not
+ * forwarded to the underlying {@link AbstractDocument.Content} instance
+ * of this document and no exception is thrown.</p>
+ *
* @param offset the start offset of the fragment to be removed
* @param length the length of the fragment to be removed
*
@@ -683,6 +731,18 @@ public abstract class AbstractDocument implements Document, Serializable
*/
public void remove(int offset, int length) throws BadLocationException
{
+ if (documentFilter == null)
+ removeImpl(offset, length);
+ else
+ documentFilter.remove(getBypass(), offset, length);
+ }
+
+ void removeImpl(int offset, int length) throws BadLocationException
+ {
+ // Prevent some unneccessary method invocation (observed in the RI).
+ if (length <= 0)
+ return;
+
DefaultDocumentEvent event =
new DefaultDocumentEvent(offset, length,
DocumentEvent.EventType.REMOVE);
@@ -707,6 +767,13 @@ public abstract class AbstractDocument implements Document, Serializable
/**
* Replaces a piece of content in this <code>Document</code> with
* another piece of content.
+ *
+ * <p>If a {@link DocumentFilter} is installed in this document, the
+ * corresponding method of the filter object is called.</p>
+ *
+ * <p>The method has no effect if <code>length</code> is zero (and
+ * only zero) and, at the same time, <code>text</code> is
+ * <code>null</code> or has zero length.</p>
*
* @param offset the start offset of the fragment to be removed
* @param length the length of the fragment to be removed
@@ -720,11 +787,36 @@ public abstract class AbstractDocument implements Document, Serializable
* @since 1.4
*/
public void replace(int offset, int length, String text,
+ AttributeSet attributes)
+ throws BadLocationException
+ {
+ // Bail out if we have a bogus replacement (Behavior observed in RI).
+ if (length == 0
+ && (text == null || text.length() == 0))
+ return;
+
+ if (documentFilter == null)
+ {
+ // It is important to call the methods which again do the checks
+ // of the arguments and the DocumentFilter because subclasses may
+ // have overridden these methods and provide crucial behavior
+ // which would be skipped if we call the non-checking variants.
+ // An example for this is PlainDocument where insertString can
+ // provide a filtering of newlines.
+ remove(offset, length);
+ insertString(offset, text, attributes);
+ }
+ else
+ documentFilter.replace(getBypass(), offset, length, text, attributes);
+
+ }
+
+ void replaceImpl(int offset, int length, String text,
AttributeSet attributes)
throws BadLocationException
{
- remove(offset, length);
- insertString(offset, text, attributes);
+ removeImpl(offset, length);
+ insertStringImpl(offset, text, attributes);
}
/**
@@ -854,7 +946,7 @@ public abstract class AbstractDocument implements Document, Serializable
* Blocks until a write lock can be obtained. Must wait if there are
* readers currently reading or another thread is currently writing.
*/
- protected void writeLock()
+ protected final void writeLock()
{
if (currentWriter != null && currentWriter.equals(Thread.currentThread()))
return;
@@ -881,7 +973,7 @@ public abstract class AbstractDocument implements Document, Serializable
* Releases the write lock. This allows waiting readers or writers to
* obtain the lock.
*/
- protected void writeUnlock()
+ protected final void writeUnlock()
{
synchronized (documentCV)
{
@@ -2239,4 +2331,37 @@ public abstract class AbstractDocument implements Document, Serializable
+ getStartOffset() + "," + getEndOffset() + "\n");
}
}
+
+ /** A class whose methods delegate to the insert, remove and replace methods
+ * of this document which do not check for an installed DocumentFilter.
+ */
+ class Bypass extends DocumentFilter.FilterBypass
+ {
+
+ public Document getDocument()
+ {
+ return AbstractDocument.this;
+ }
+
+ public void insertString(int offset, String string, AttributeSet attr)
+ throws BadLocationException
+ {
+ AbstractDocument.this.insertStringImpl(offset, string, attr);
+ }
+
+ public void remove(int offset, int length)
+ throws BadLocationException
+ {
+ AbstractDocument.this.removeImpl(offset, length);
+ }
+
+ public void replace(int offset, int length, String string,
+ AttributeSet attrs)
+ throws BadLocationException
+ {
+ AbstractDocument.this.replaceImpl(offset, length, string, attrs);
+ }
+
+ }
+
}
diff --git a/libjava/classpath/javax/swing/text/AsyncBoxView.java b/libjava/classpath/javax/swing/text/AsyncBoxView.java
index 1988bba..90447f8 100644
--- a/libjava/classpath/javax/swing/text/AsyncBoxView.java
+++ b/libjava/classpath/javax/swing/text/AsyncBoxView.java
@@ -1030,7 +1030,7 @@ public class AsyncBoxView
*
* @since 1.4
*/
- public void setEstimatedMajorSpan(boolean estimated)
+ protected void setEstimatedMajorSpan(boolean estimated)
{
estimatedMajorSpan = estimated;
}
@@ -1045,7 +1045,7 @@ public class AsyncBoxView
*
* @since 1.4
*/
- public boolean getEstimatedMajorSpan()
+ protected boolean getEstimatedMajorSpan()
{
return estimatedMajorSpan;
}
@@ -1367,7 +1367,7 @@ public class AsyncBoxView
/**
* Updates the layout for this view. This is implemented to trigger
- * {link ChildLocator#childChanged} for the changed view, if there is
+ * {@link ChildLocator#childChanged} for the changed view, if there is
* any.
*
* @param ec the element change, may be <code>null</code> if there were
diff --git a/libjava/classpath/javax/swing/text/BoxView.java b/libjava/classpath/javax/swing/text/BoxView.java
index b5907dc..a184a81 100644
--- a/libjava/classpath/javax/swing/text/BoxView.java
+++ b/libjava/classpath/javax/swing/text/BoxView.java
@@ -1,5 +1,5 @@
/* BoxView.java -- An composite view
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -591,9 +591,12 @@ public class BoxView
for (int i = 0; i < count; ++i)
{
copy.setBounds(r);
- childAllocation(i, r);
+ // The next call modifies copy.
+ childAllocation(i, copy);
if (copy.contains(x, y))
{
+ // Modify r on success.
+ r.setBounds(copy);
result = getView(i);
break;
}
@@ -919,7 +922,7 @@ public class BoxView
return super.viewToModel(x, y, a, bias);
}
- protected boolean flipEastAndWestEnds(int position, Position.Bias bias)
+ protected boolean flipEastAndWestAtEnds(int position, Position.Bias bias)
{
// FIXME: What to do here?
return super.flipEastAndWestAtEnds(position, bias);
diff --git a/libjava/classpath/javax/swing/text/CompositeView.java b/libjava/classpath/javax/swing/text/CompositeView.java
index a10aca7..17f13db 100644
--- a/libjava/classpath/javax/swing/text/CompositeView.java
+++ b/libjava/classpath/javax/swing/text/CompositeView.java
@@ -1,5 +1,5 @@
/* CompositeView.java -- An abstract view that manages child views
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -218,21 +218,24 @@ public abstract class CompositeView
throws BadLocationException
{
int childIndex = getViewIndex(pos, bias);
+ if (childIndex == -1)
+ throw new BadLocationException("Position " + pos + " is not represented by view.", pos);
+
Shape ret = null;
- if (childIndex != -1)
- {
- View child = getView(childIndex);
- Shape childAlloc = getChildAllocation(childIndex, a);
- if (childAlloc == null)
- ret = createDefaultLocation(a, bias);
- Shape result = child.modelToView(pos, childAlloc, bias);
- if (result != null)
- ret = result;
- else
- ret = createDefaultLocation(a, bias);
- }
- else
+
+ View child = getView(childIndex);
+ Shape childAlloc = getChildAllocation(childIndex, a);
+
+ if (childAlloc == null)
ret = createDefaultLocation(a, bias);
+
+ Shape result = child.modelToView(pos, childAlloc, bias);
+
+ if (result != null)
+ ret = result;
+ else
+ ret = createDefaultLocation(a, bias);
+
return ret;
}
@@ -301,7 +304,7 @@ public abstract class CompositeView
{
Rectangle r = getInsideAllocation(a);
View view = getViewAtPoint((int) x, (int) y, r);
- return view.viewToModel(x, y, a, b);
+ return view.viewToModel(x, y, r, b);
}
return 0;
}
@@ -630,8 +633,51 @@ public abstract class CompositeView
Position.Bias[] biasRet)
throws BadLocationException
{
- // FIXME: Implement this correctly.
- return pos;
+ // TODO: It is unknown to me how this method has to be implemented and
+ // there is no specification telling me how to do it properly. Therefore
+ // the implementation was done for cases that are known.
+ //
+ // If this method ever happens to act silly for your particular case then
+ // it is likely that it is a cause of not knowing about your case when it
+ // was implemented first. You are free to fix the behavior.
+ //
+ // Here are the assumptions that lead to the implementation:
+ // If direction is NORTH chose the View preceding the one that contains the
+ // offset 'pos' (imagine the views are stacked on top of each other where
+ // the top is 0 and the bottom is getViewCount()-1.
+ // Consecutively when the direction is SOUTH the View following the one
+ // the offset 'pos' lies in is questioned.
+ //
+ // This limitation is described as PR 27345.
+ int index = getViewIndex(pos, b);
+ View v = null;
+
+ if (index == -1)
+ return pos;
+
+ switch (direction)
+ {
+ case NORTH:
+ // If we cannot calculate a proper offset return the one that was
+ // provided.
+ if (index <= 0)
+ return pos;
+
+ v = getView(index - 1);
+ break;
+ case SOUTH:
+ // If we cannot calculate a proper offset return the one that was
+ // provided.
+ if (index >= getViewCount() - 1)
+ return pos;
+
+ v = getView(index + 1);
+ break;
+ default:
+ throw new IllegalArgumentException();
+ }
+
+ return v.getNextVisualPositionFrom(pos, b, a, direction, biasRet);
}
/**
@@ -664,8 +710,55 @@ public abstract class CompositeView
Position.Bias[] biasRet)
throws BadLocationException
{
- // FIXME: Implement this correctly.
- return pos;
+ // TODO: It is unknown to me how this method has to be implemented and
+ // there is no specification telling me how to do it properly. Therefore
+ // the implementation was done for cases that are known.
+ //
+ // If this method ever happens to act silly for your particular case then
+ // it is likely that it is a cause of not knowing about your case when it
+ // was implemented first. You are free to fix the behavior.
+ //
+ // Here are the assumptions that lead to the implementation:
+ // If direction is EAST increase the offset by one and ask the View to
+ // which that index belong to calculate the 'next visual position'.
+ // If the direction is WEST do the same with offset 'pos' being decreased
+ // by one.
+ // This behavior will fail in a right-to-left or bidi environment!
+ //
+ // This limitation is described as PR 27346.
+ int index;
+
+ View v = null;
+
+ switch (direction)
+ {
+ case EAST:
+ index = getViewIndex(pos + 1, b);
+ // If we cannot calculate a proper offset return the one that was
+ // provided.
+ if (index == -1)
+ return pos;
+
+ v = getView(index);
+ break;
+ case WEST:
+ index = getViewIndex(pos - 1, b);
+ // If we cannot calculate a proper offset return the one that was
+ // provided.
+ if (index == -1)
+ return pos;
+
+ v = getView(index);
+ break;
+ default:
+ throw new IllegalArgumentException();
+ }
+
+ return v.getNextVisualPositionFrom(pos,
+ b,
+ a,
+ direction,
+ biasRet);
}
/**
diff --git a/libjava/classpath/javax/swing/text/DefaultCaret.java b/libjava/classpath/javax/swing/text/DefaultCaret.java
index f2a68c0..c9369af 100644
--- a/libjava/classpath/javax/swing/text/DefaultCaret.java
+++ b/libjava/classpath/javax/swing/text/DefaultCaret.java
@@ -59,17 +59,48 @@ import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.EventListenerList;
+import javax.swing.text.Position.Bias;
/**
* The default implementation of the {@link Caret} interface.
*
- * @author orgininal author unknown
+ * @author original author unknown
* @author Roman Kennke (roman@kennke.org)
*/
public class DefaultCaret extends Rectangle
implements Caret, FocusListener, MouseListener, MouseMotionListener
{
+
+ /** A text component in the current VM which currently has a
+ * text selection or <code>null</code>.
+ */
+ static JTextComponent componentWithSelection;
+
+ /** An implementation of NavigationFilter.FilterBypass which delegates
+ * to the corresponding methods of the <code>DefaultCaret</code>.
+ *
+ * @author Robert Schuster (robertschuster@fsfe.org)
+ */
+ class Bypass extends NavigationFilter.FilterBypass
+ {
+
+ public Caret getCaret()
+ {
+ return DefaultCaret.this;
+ }
+ public void moveDot(int dot, Bias bias)
+ {
+ DefaultCaret.this.moveDotImpl(dot);
+ }
+
+ public void setDot(int dot, Bias bias)
+ {
+ DefaultCaret.this.setDotImpl(dot);
+ }
+
+ }
+
/**
* Controls the blinking of the caret.
*
@@ -294,12 +325,29 @@ public class DefaultCaret extends Rectangle
private BlinkTimerListener blinkListener;
/**
+ * A <code>NavigationFilter.FilterBypass</code> instance which
+ * is provided to the a <code>NavigationFilter</code> to
+ * unconditionally set or move the caret.
+ */
+ NavigationFilter.FilterBypass bypass;
+
+ /**
* Creates a new <code>DefaultCaret</code> instance.
*/
public DefaultCaret()
{
// Nothing to do here.
}
+
+ /** Returns the caret's <code>NavigationFilter.FilterBypass</code> instance
+ * and creates it if it does not yet exist.
+ *
+ * @return The caret's <code>NavigationFilter.FilterBypass</code> instance.
+ */
+ private NavigationFilter.FilterBypass getBypass()
+ {
+ return (bypass == null) ? bypass = new Bypass() : bypass;
+ }
/**
* Sets the Caret update policy.
@@ -346,7 +394,8 @@ public class DefaultCaret extends Rectangle
*/
public void mouseDragged(MouseEvent event)
{
- moveCaret(event);
+ if (event.getButton() == MouseEvent.BUTTON1)
+ moveCaret(event);
}
/**
@@ -379,7 +428,7 @@ public class DefaultCaret extends Rectangle
{
int count = event.getClickCount();
- if (count >= 2)
+ if (event.getButton() == MouseEvent.BUTTON1 && count >= 2)
{
int newDot = getComponent().viewToModel(event.getPoint());
JTextComponent t = getComponent();
@@ -387,29 +436,42 @@ public class DefaultCaret extends Rectangle
try
{
if (count == 3)
- t.select(Utilities.getRowStart(t, newDot), Utilities.getRowEnd(t, newDot));
+ {
+ setDot(Utilities.getRowStart(t, newDot));
+ moveDot( Utilities.getRowEnd(t, newDot));
+ }
else
{
- int nextWord = Utilities.getNextWord(t, newDot);
+ int wordStart = Utilities.getWordStart(t, newDot);
// When the mouse points at the offset of the first character
// in a word Utilities().getPreviousWord will not return that
// word but we want to select that. We have to use
- // Utilities.nextWord() to get it.
- if (newDot == nextWord)
- t.select(nextWord, Utilities.getNextWord(t, nextWord));
+ // Utilities.getWordStart() to get it.
+ if (newDot == wordStart)
+ {
+ setDot(wordStart);
+ moveDot(Utilities.getWordEnd(t, wordStart));
+ }
else
{
+ int nextWord = Utilities.getNextWord(t, newDot);
int previousWord = Utilities.getPreviousWord(t, newDot);
int previousWordEnd = Utilities.getWordEnd(t, previousWord);
// If the user clicked in the space between two words,
// then select the space.
if (newDot >= previousWordEnd && newDot <= nextWord)
- t.select(previousWordEnd, nextWord);
+ {
+ setDot(previousWordEnd);
+ moveDot(nextWord);
+ }
// Otherwise select the word under the mouse pointer.
else
- t.select(previousWord, previousWordEnd);
+ {
+ setDot(previousWord);
+ moveDot(previousWordEnd);
+ }
}
}
}
@@ -417,8 +479,6 @@ public class DefaultCaret extends Rectangle
{
// TODO: Swallowing ok here?
}
-
- dot = newDot;
}
}
@@ -455,10 +515,35 @@ public class DefaultCaret extends Rectangle
*/
public void mousePressed(MouseEvent event)
{
- if (event.isShiftDown())
- moveCaret(event);
- else
- positionCaret(event);
+ int button = event.getButton();
+
+ // The implementation assumes that consuming the event makes the AWT event
+ // mechanism forget about this event instance and not transfer focus.
+ // By observing how the RI reacts the following behavior has been
+ // implemented (in regard to text components):
+ // - a left-click moves the caret
+ // - a left-click when shift is held down expands the selection
+ // - a right-click or click with any additionaly mouse button
+ // on a text component is ignored
+ // - a middle-click positions the caret and pastes the clipboard
+ // contents.
+ // - a middle-click when shift is held down is ignored
+
+ if (button == MouseEvent.BUTTON1)
+ if (event.isShiftDown())
+ moveCaret(event);
+ else
+ positionCaret(event);
+ else if(button == MouseEvent.BUTTON2)
+ if (event.isShiftDown())
+ event.consume();
+ else
+ {
+ positionCaret(event);
+ textComponent.paste();
+ }
+ else
+ event.consume();
}
/**
@@ -636,10 +721,13 @@ public class DefaultCaret extends Rectangle
{
try
{
- if (highlightEntry == null)
- highlightEntry = highlighter.addHighlight(0, 0, getSelectionPainter());
- else
+ if (highlightEntry != null)
highlighter.changeHighlight(highlightEntry, 0, 0);
+
+ // Free the global variable which stores the text component with an active
+ // selection.
+ if (componentWithSelection == textComponent)
+ componentWithSelection = null;
}
catch (BadLocationException e)
{
@@ -675,6 +763,17 @@ public class DefaultCaret extends Rectangle
highlightEntry = highlighter.addHighlight(p0, p1, getSelectionPainter());
else
highlighter.changeHighlight(highlightEntry, p0, p1);
+
+ // If another component currently has a text selection clear that selection
+ // first.
+ if (componentWithSelection != null)
+ if (componentWithSelection != textComponent)
+ {
+ Caret c = componentWithSelection.getCaret();
+ c.setDot(c.getDot());
+ }
+ componentWithSelection = textComponent;
+
}
catch (BadLocationException e)
{
@@ -776,7 +875,7 @@ public class DefaultCaret extends Rectangle
if (visible)
{
g.setColor(textComponent.getCaretColor());
- g.drawLine(rect.x, rect.y, rect.x, rect.y + rect.height);
+ g.drawLine(rect.x, rect.y, rect.x, rect.y + rect.height - 1);
}
}
@@ -888,12 +987,24 @@ public class DefaultCaret extends Rectangle
* Moves the <code>dot</code> location without touching the
* <code>mark</code>. This is used when making a selection.
*
+ * <p>If the underlying text component has a {@link NavigationFilter}
+ * installed the caret will call the corresponding method of that object.</p>
+ *
* @param dot the location where to move the dot
*
* @see #setDot(int)
*/
public void moveDot(int dot)
{
+ NavigationFilter filter = textComponent.getNavigationFilter();
+ if (filter != null)
+ filter.moveDot(getBypass(), dot, Bias.Forward);
+ else
+ moveDotImpl(dot);
+ }
+
+ void moveDotImpl(int dot)
+ {
if (dot >= 0)
{
Document doc = textComponent.getDocument();
@@ -902,8 +1013,8 @@ public class DefaultCaret extends Rectangle
this.dot = Math.max(this.dot, 0);
handleHighlight();
- adjustVisibility(this);
appear();
+ adjustVisibility(this);
}
}
@@ -912,12 +1023,24 @@ public class DefaultCaret extends Rectangle
* <code>Document</code>. This also sets the <code>mark</code> to the new
* location.
*
+ * <p>If the underlying text component has a {@link NavigationFilter}
+ * installed the caret will call the corresponding method of that object.</p>
+ *
* @param dot
* the new position to be set
* @see #moveDot(int)
*/
public void setDot(int dot)
{
+ NavigationFilter filter = textComponent.getNavigationFilter();
+ if (filter != null)
+ filter.setDot(getBypass(), dot, Bias.Forward);
+ else
+ setDotImpl(dot);
+ }
+
+ void setDotImpl(int dot)
+ {
if (dot >= 0)
{
Document doc = textComponent.getDocument();
@@ -927,8 +1050,8 @@ public class DefaultCaret extends Rectangle
this.mark = this.dot;
clearHighlight();
- adjustVisibility(this);
appear();
+ adjustVisibility(this);
}
}
@@ -1043,7 +1166,16 @@ public class DefaultCaret extends Rectangle
// must set a valid value here, since otherwise the painting mechanism
// sets a zero clip and never calls paint.
if (height <= 0)
- height = getComponent().getHeight();
+ try
+ {
+ height = textComponent.modelToView(dot).height;
+ }
+ catch (BadLocationException ble)
+ {
+ // Should not happen.
+ throw new InternalError("Caret location not within document range.");
+ }
+
repaint();
}
@@ -1068,4 +1200,5 @@ public class DefaultCaret extends Rectangle
blinkTimer = new Timer(getBlinkRate(), blinkListener);
blinkTimer.setRepeats(true);
}
+
}
diff --git a/libjava/classpath/javax/swing/text/DefaultEditorKit.java b/libjava/classpath/javax/swing/text/DefaultEditorKit.java
index c005696..1b68618 100644
--- a/libjava/classpath/javax/swing/text/DefaultEditorKit.java
+++ b/libjava/classpath/javax/swing/text/DefaultEditorKit.java
@@ -63,6 +63,663 @@ import javax.swing.Action;
*/
public class DefaultEditorKit extends EditorKit
{
+ static class SelectionPreviousWordAction
+ extends TextAction
+ {
+ SelectionPreviousWordAction()
+ {
+ super(selectionPreviousWordAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ try
+ {
+ JTextComponent t = getTextComponent(event);
+
+ if (t != null)
+ {
+ int offs = Utilities.getPreviousWord(t, t.getCaretPosition());
+
+ Caret c = t.getCaret();
+ c.moveDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class SelectionNextWordAction
+ extends TextAction
+ {
+ SelectionNextWordAction()
+ {
+ super(selectionNextWordAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ try
+ {
+ JTextComponent t = getTextComponent(event);
+
+ if (t != null)
+ {
+ int offs = Utilities.getNextWord(t, t.getCaretPosition());
+
+ Caret c = t.getCaret();
+ c.moveDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class PreviousWordAction
+ extends TextAction
+ {
+ PreviousWordAction()
+ {
+ super(previousWordAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ try
+ {
+ JTextComponent t = getTextComponent(event);
+
+ if (t != null)
+ {
+ int offs = Utilities.getPreviousWord(t, t.getCaretPosition());
+
+ Caret c = t.getCaret();
+ c.setDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class NextWordAction
+ extends TextAction
+ {
+ NextWordAction()
+ {
+ super(nextWordAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ try
+ {
+ JTextComponent t = getTextComponent(event);
+
+ if (t != null)
+ {
+ int offs = Utilities.getNextWord(t, t.getCaretPosition());
+
+ Caret c = t.getCaret();
+ c.setDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class SelectAllAction
+ extends TextAction
+ {
+ SelectAllAction()
+ {
+ super(selectAllAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ int offs = t.getDocument().getLength();
+ Caret c = t.getCaret();
+ c.setDot(0);
+ c.moveDot(offs);
+
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class SelectionBeginAction
+ extends TextAction
+ {
+ SelectionBeginAction()
+ {
+ super(selectionBeginAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ Caret c = t.getCaret();
+ c.moveDot(0);
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(0).getLocation());
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class SelectionEndAction
+ extends TextAction
+ {
+ SelectionEndAction()
+ {
+ super(selectionEndAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ int offs = t.getDocument().getLength();
+ Caret c = t.getCaret();
+ c.moveDot(offs);
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+
+ static class SelectionEndLineAction
+ extends TextAction
+ {
+ SelectionEndLineAction()
+ {
+ super(selectionEndLineAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ Point p = t.modelToView(t.getCaret().getDot()).getLocation();
+ int cur = t.getCaretPosition();
+ int y = p.y;
+ int length = t.getDocument().getLength();
+ while (y == p.y && cur < length)
+ y = t.modelToView(++cur).getLocation().y;
+ if (cur != length)
+ cur--;
+
+ Caret c = t.getCaret();
+ c.moveDot(cur);
+ c.setMagicCaretPosition(t.modelToView(cur).getLocation());
+ }
+ catch (BadLocationException ble)
+ {
+ // Nothing to do here
+ }
+ }
+ }
+
+ static class SelectionBeginLineAction
+ extends TextAction
+ {
+ SelectionBeginLineAction()
+ {
+ super(selectionBeginLineAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+
+ try
+ {
+ // TODO: There is a more efficent solution, but
+ // viewToModel doesn't work properly.
+ Point p = t.modelToView(t.getCaret().getDot()).getLocation();
+
+ int cur = t.getCaretPosition();
+ int y = p.y;
+
+ while (y == p.y && cur > 0)
+ y = t.modelToView(--cur).getLocation().y;
+ if (cur != 0)
+ cur++;
+
+ Caret c = t.getCaret();
+ c.moveDot(cur);
+ c.setMagicCaretPosition(t.modelToView(cur).getLocation());
+ }
+ catch (BadLocationException ble)
+ {
+ // Do nothing here.
+ }
+ }
+ }
+
+ static class SelectionDownAction
+ extends TextAction
+ {
+ SelectionDownAction()
+ {
+ super(selectionDownAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ if (t != null)
+ {
+ Caret c = t.getCaret();
+ // The magic caret position may be null when the caret
+ // has not moved yet.
+ Point mcp = c.getMagicCaretPosition();
+ int x = (mcp != null) ? mcp.x : 0;
+ int pos = Utilities.getPositionBelow(t, t.getCaretPosition(), x);
+
+ if (pos > -1)
+ t.moveCaretPosition(pos);
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // FIXME: Swallowing allowed?
+ }
+ }
+ }
+
+ static class SelectionUpAction
+ extends TextAction
+ {
+ SelectionUpAction()
+ {
+ super(selectionUpAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ if (t != null)
+ {
+ Caret c = t.getCaret();
+ // The magic caret position may be null when the caret
+ // has not moved yet.
+ Point mcp = c.getMagicCaretPosition();
+ int x = (mcp != null) ? mcp.x : 0;
+ int pos = Utilities.getPositionAbove(t, t.getCaretPosition(), x);
+
+ if (pos > -1)
+ t.moveCaretPosition(pos);
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // FIXME: Swallowing allowed?
+ }
+ }
+ }
+
+ static class SelectionForwardAction
+ extends TextAction
+ {
+ SelectionForwardAction()
+ {
+ super(selectionForwardAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ int offs = t.getCaretPosition() + 1;
+
+ if(offs <= t.getDocument().getLength())
+ {
+ Caret c = t.getCaret();
+ c.moveDot(offs);
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+ }
+ }
+
+ static class SelectionBackwardAction
+ extends TextAction
+ {
+ SelectionBackwardAction()
+ {
+ super(selectionBackwardAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ int offs = t.getCaretPosition() - 1;
+
+ if(offs >= 0)
+ {
+ Caret c = t.getCaret();
+ c.moveDot(offs);
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch(BadLocationException ble)
+ {
+ // Can't happen.
+ }
+ }
+ }
+ }
+ }
+
+ static class DownAction
+ extends TextAction
+ {
+ DownAction()
+ {
+ super(downAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ if (t != null)
+ {
+ Caret c = t.getCaret();
+ // The magic caret position may be null when the caret
+ // has not moved yet.
+ Point mcp = c.getMagicCaretPosition();
+ int x = (mcp != null) ? mcp.x : 0;
+ int pos = Utilities.getPositionBelow(t, t.getCaretPosition(), x);
+
+ if (pos > -1)
+ t.setCaretPosition(pos);
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // FIXME: Swallowing allowed?
+ }
+ }
+ }
+
+ static class UpAction
+ extends TextAction
+ {
+ UpAction()
+ {
+ super(upAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ if (t != null)
+ {
+ Caret c = t.getCaret();
+ // The magic caret position may be null when the caret
+ // has not moved yet.
+ Point mcp = c.getMagicCaretPosition();
+ int x = (mcp != null) ? mcp.x : 0;
+ int pos = Utilities.getPositionAbove(t, t.getCaretPosition(), x);
+
+ if (pos > -1)
+ t.setCaretPosition(pos);
+ }
+ }
+ catch(BadLocationException ble)
+ {
+ // FIXME: Swallowing allowed?
+ }
+ }
+ }
+
+ static class ForwardAction
+ extends TextAction
+ {
+ ForwardAction()
+ {
+ super(forwardAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ int offs = t.getCaretPosition() + 1;
+ if (offs <= t.getDocument().getLength())
+ {
+ Caret c = t.getCaret();
+ c.setDot(offs);
+
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch (BadLocationException ble)
+ {
+ // Should not happen.
+ }
+ }
+ }
+
+ }
+ }
+
+ static class BackwardAction
+ extends TextAction
+ {
+ BackwardAction()
+ {
+ super(backwardAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ int offs = t.getCaretPosition() - 1;
+ if (offs >= 0)
+ {
+ Caret c = t.getCaret();
+ c.setDot(offs);
+
+ try
+ {
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ catch (BadLocationException ble)
+ {
+ // Should not happen.
+ }
+ }
+ }
+ }
+ }
+
+ static class DeletePrevCharAction
+ extends TextAction
+ {
+ DeletePrevCharAction()
+ {
+ super(deletePrevCharAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ try
+ {
+ int pos = t.getSelectionStart();
+ int len = t.getSelectionEnd() - pos;
+
+ if (len > 0)
+ t.getDocument().remove(pos, len);
+ else if (pos > 0)
+ {
+ pos--;
+ t.getDocument().remove(pos, 1);
+ Caret c = t.getCaret();
+ c.setDot(pos);
+ c.setMagicCaretPosition(t.modelToView(pos).getLocation());
+ }
+ }
+ catch (BadLocationException e)
+ {
+ // FIXME: we're not authorized to throw this.. swallow it?
+ }
+ }
+ }
+ }
+
+ static class DeleteNextCharAction
+ extends TextAction
+ {
+ DeleteNextCharAction()
+ {
+ super(deleteNextCharAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ if (t != null)
+ {
+ try
+ {
+ int pos = t.getSelectionStart();
+ int len = t.getSelectionEnd() - pos;
+
+ if (len > 0)
+ t.getDocument().remove(pos, len);
+ else if (pos < t.getDocument().getLength())
+ t.getDocument().remove(pos, 1);
+
+ Caret c = t.getCaret();
+ c.setDot(pos);
+ c.setMagicCaretPosition(t.modelToView(pos).getLocation());
+ }
+ catch (BadLocationException e)
+ {
+ // FIXME: we're not authorized to throw this.. swallow it?
+ }
+ }
+ }
+ }
+
+ static class EndLineAction
+ extends TextAction
+ {
+ EndLineAction()
+ {
+ super(endLineAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ int offs = Utilities.getRowEnd(t, t.getCaretPosition());
+
+ if (offs > -1)
+ {
+ Caret c = t.getCaret();
+ c.setDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch (BadLocationException ble)
+ {
+ // Nothing to do here
+ }
+ }
+ }
+
+ static class BeginLineAction
+ extends TextAction
+ {
+ BeginLineAction()
+ {
+ super(beginLineAction);
+ }
+
+ public void actionPerformed(ActionEvent event)
+ {
+ JTextComponent t = getTextComponent(event);
+ try
+ {
+ int offs = Utilities.getRowStart(t, t.getCaretPosition());
+
+ if (offs > -1)
+ {
+ Caret c = t.getCaret();
+ c.setDot(offs);
+ c.setMagicCaretPosition(t.modelToView(offs).getLocation());
+ }
+ }
+ catch (BadLocationException ble)
+ {
+ // Do nothing here.
+ }
+ }
+ }
+
/**
* Creates a beep on the PC speaker.
*
@@ -692,6 +1349,7 @@ public class DefaultEditorKit extends EditorKit
// to handle this.
private static Action[] defaultActions =
new Action[] {
+ // These classes are public because they are so in the RI.
new BeepAction(),
new CopyAction(),
new CutAction(),
@@ -700,404 +1358,38 @@ public class DefaultEditorKit extends EditorKit
new InsertContentAction(),
new InsertTabAction(),
new PasteAction(),
- new TextAction(beginLineAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- int offs = Utilities.getRowStart(t, t.getCaretPosition());
-
- if (offs > -1)
- {
- Caret c = t.getCaret();
- c.setDot(offs);
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- }
- catch (BadLocationException ble)
- {
- // Do nothing here.
- }
- }
- },
- new TextAction(endLineAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- int offs = Utilities.getRowEnd(t, t.getCaretPosition());
-
- if (offs > -1)
- {
- Caret c = t.getCaret();
- c.setDot(offs);
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- }
- catch (BadLocationException ble)
- {
- // Nothing to do here
- }
- }
- },
- new TextAction(deleteNextCharAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- try
- {
- int pos = t.getSelectionStart();
- int len = t.getSelectionEnd() - pos;
-
- if (len > 0)
- t.getDocument().remove(pos, len);
- else if (pos < t.getDocument().getLength())
- t.getDocument().remove(pos, 1);
-
- Caret c = t.getCaret();
- c.setDot(pos);
- c.setMagicCaretPosition(t.modelToView(pos).getLocation());
- }
- catch (BadLocationException e)
- {
- // FIXME: we're not authorized to throw this.. swallow it?
- }
- }
- }
- },
- new TextAction(deletePrevCharAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- try
- {
- int pos = t.getSelectionStart();
- int len = t.getSelectionEnd() - pos;
-
- if (len > 0)
- t.getDocument().remove(pos, len);
- else if (pos > 0)
- {
- pos--;
- t.getDocument().remove(pos, 1);
- Caret c = t.getCaret();
- c.setDot(pos);
- c.setMagicCaretPosition(t.modelToView(pos).getLocation());
- }
- }
- catch (BadLocationException e)
- {
- // FIXME: we're not authorized to throw this.. swallow it?
- }
- }
- }
- },
- new TextAction(backwardAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- int offs = t.getCaretPosition() - 1;
- if (offs >= 0)
- {
- Caret c = t.getCaret();
- c.setDot(offs);
-
- try
- {
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- catch (BadLocationException ble)
- {
- // Should not happen.
- }
- }
- }
- }
- },
- new TextAction(forwardAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- int offs = t.getCaretPosition() + 1;
- if (offs <= t.getDocument().getLength())
- {
- Caret c = t.getCaret();
- c.setDot(offs);
-
- try
- {
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- catch (BadLocationException ble)
- {
- // Should not happen.
- }
- }
- }
-
- }
- },
- new TextAction(upAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- if (t != null)
- {
- Caret c = t.getCaret();
- // The magic caret position may be null when the caret
- // has not moved yet.
- Point mcp = c.getMagicCaretPosition();
- int x = (mcp != null) ? mcp.x : 0;
- int pos = Utilities.getPositionAbove(t, t.getCaretPosition(), x);
-
- if (pos > -1)
- t.setCaretPosition(pos);
- }
- }
- catch(BadLocationException ble)
- {
- // FIXME: Swallowing allowed?
- }
- }
- },
- new TextAction(downAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- if (t != null)
- {
- Caret c = t.getCaret();
- // The magic caret position may be null when the caret
- // has not moved yet.
- Point mcp = c.getMagicCaretPosition();
- int x = (mcp != null) ? mcp.x : 0;
- int pos = Utilities.getPositionBelow(t, t.getCaretPosition(), x);
-
- if (pos > -1)
- t.setCaretPosition(pos);
- }
- }
- catch(BadLocationException ble)
- {
- // FIXME: Swallowing allowed?
- }
- }
- },
- new TextAction(selectionBackwardAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- int offs = t.getCaretPosition() - 1;
-
- if(offs >= 0)
- {
- Caret c = t.getCaret();
- c.moveDot(offs);
- try
- {
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- catch(BadLocationException ble)
- {
- // Can't happen.
- }
- }
- }
- }
- },
- new TextAction(selectionForwardAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- if (t != null)
- {
- int offs = t.getCaretPosition() + 1;
-
- if(offs <= t.getDocument().getLength())
- {
- Caret c = t.getCaret();
- c.moveDot(offs);
- try
- {
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- catch(BadLocationException ble)
- {
- // Can't happen.
- }
- }
- }
- }
- },
- new TextAction(selectionUpAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- if (t != null)
- {
- Caret c = t.getCaret();
- // The magic caret position may be null when the caret
- // has not moved yet.
- Point mcp = c.getMagicCaretPosition();
- int x = (mcp != null) ? mcp.x : 0;
- int pos = Utilities.getPositionAbove(t, t.getCaretPosition(), x);
-
- if (pos > -1)
- t.moveCaretPosition(pos);
- }
- }
- catch(BadLocationException ble)
- {
- // FIXME: Swallowing allowed?
- }
- }
- },
- new TextAction(selectionDownAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- if (t != null)
- {
- Caret c = t.getCaret();
- // The magic caret position may be null when the caret
- // has not moved yet.
- Point mcp = c.getMagicCaretPosition();
- int x = (mcp != null) ? mcp.x : 0;
- int pos = Utilities.getPositionBelow(t, t.getCaretPosition(), x);
-
- if (pos > -1)
- t.moveCaretPosition(pos);
- }
- }
- catch(BadLocationException ble)
- {
- // FIXME: Swallowing allowed?
- }
- }
- },
- new TextAction(selectionBeginLineAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
-
- try
- {
- // TODO: There is a more efficent solution, but
- // viewToModel doesn't work properly.
- Point p = t.modelToView(t.getCaret().getDot()).getLocation();
-
- int cur = t.getCaretPosition();
- int y = p.y;
-
- while (y == p.y && cur > 0)
- y = t.modelToView(--cur).getLocation().y;
- if (cur != 0)
- cur++;
-
- Caret c = t.getCaret();
- c.moveDot(cur);
- c.setMagicCaretPosition(t.modelToView(cur).getLocation());
- }
- catch (BadLocationException ble)
- {
- // Do nothing here.
- }
- }
- },
- new TextAction(selectionEndLineAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- try
- {
- Point p = t.modelToView(t.getCaret().getDot()).getLocation();
- int cur = t.getCaretPosition();
- int y = p.y;
- int length = t.getDocument().getLength();
- while (y == p.y && cur < length)
- y = t.modelToView(++cur).getLocation().y;
- if (cur != length)
- cur--;
-
- Caret c = t.getCaret();
- c.moveDot(cur);
- c.setMagicCaretPosition(t.modelToView(cur).getLocation());
- }
- catch (BadLocationException ble)
- {
- // Nothing to do here
- }
- }
- },
- new TextAction(selectionEndAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- int offs = t.getDocument().getLength();
- Caret c = t.getCaret();
- c.moveDot(offs);
- try
- {
- c.setMagicCaretPosition(t.modelToView(offs).getLocation());
- }
- catch(BadLocationException ble)
- {
- // Can't happen.
- }
- }
- },
- new TextAction(selectionBeginAction)
- {
- public void actionPerformed(ActionEvent event)
- {
- JTextComponent t = getTextComponent(event);
- Caret c = t.getCaret();
- c.moveDot(0);
- try
- {
- c.setMagicCaretPosition(t.modelToView(0).getLocation());
- }
- catch(BadLocationException ble)
- {
- // Can't happen.
- }
- }
- }
+
+ // These are (package-)private inner classes.
+ new DeleteNextCharAction(),
+ new DeletePrevCharAction(),
+
+ new BeginLineAction(),
+ new SelectionBeginLineAction(),
+
+ new EndLineAction(),
+ new SelectionEndLineAction(),
+
+ new BackwardAction(),
+ new SelectionBackwardAction(),
+
+ new ForwardAction(),
+ new SelectionForwardAction(),
+
+ new UpAction(),
+ new SelectionUpAction(),
+
+ new DownAction(),
+ new SelectionDownAction(),
+
+ new NextWordAction(),
+ new SelectionNextWordAction(),
+
+ new PreviousWordAction(),
+ new SelectionPreviousWordAction(),
+
+ new SelectionBeginAction(),
+ new SelectionEndAction(),
+ new SelectAllAction(),
};
/**
diff --git a/libjava/classpath/javax/swing/text/DefaultHighlighter.java b/libjava/classpath/javax/swing/text/DefaultHighlighter.java
index 33b5fca..59f7731 100644
--- a/libjava/classpath/javax/swing/text/DefaultHighlighter.java
+++ b/libjava/classpath/javax/swing/text/DefaultHighlighter.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.text;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
@@ -45,6 +47,7 @@ import java.awt.Rectangle;
import java.awt.Shape;
import java.util.ArrayList;
+import javax.swing.SwingUtilities;
import javax.swing.plaf.TextUI;
public class DefaultHighlighter extends LayeredHighlighter
@@ -71,60 +74,102 @@ public class DefaultHighlighter extends LayeredHighlighter
}
public void paint(Graphics g, int p0, int p1, Shape bounds,
- JTextComponent c)
+ JTextComponent t)
{
- Rectangle r0 = null;
- Rectangle r1 = null;
- Rectangle rect = bounds.getBounds();
-
- try
- {
- r0 = c.modelToView(p0);
- r1 = c.modelToView(p1);
- }
- catch (BadLocationException e)
- {
- // This should never occur.
- return;
- }
+ if (p0 == p1)
+ return;
- if (r0 == null || r1 == null)
- return;
+ Rectangle rect = bounds.getBounds();
if (color == null)
- g.setColor(c.getSelectionColor());
+ g.setColor(t.getSelectionColor());
else
- g.setColor(color);
-
- // Check if only one line to highlight.
- if (r0.y == r1.y)
- {
- r0.width = r1.x - r0.x;
- paintHighlight(g, r0);
- return;
- }
-
- // First line, from p0 to end-of-line.
- r0.width = rect.x + rect.width - r0.x;
- paintHighlight(g, r0);
-
- // FIXME: All the full lines in between, if any (assumes that all lines
- // have the same height -- not a good assumption with JEditorPane/JTextPane).
- r0.y += r0.height;
- r0.x = rect.x;
- r0.width = rect.width;
+ g.setColor(color);
+
+ TextUI ui = t.getUI();
- while (r0.y < r1.y)
- {
- paintHighlight(g, r0);
- r0.y += r0.height;
- }
-
- // Last line, from beginning-of-line to p1.
- // The "-1" is neccessary else we would paint one pixel column more
- // than in the case where the selection is only on one line.
- r0.width = r1.x + r1.width - 1;
- paintHighlight(g, r0);
+ try
+ {
+
+ Rectangle l0 = ui.modelToView(t, p0, null);
+ Rectangle l1 = ui.modelToView(t, p1, null);
+
+ // Note: The computed locations may lie outside of the allocation
+ // area if the text is scrolled.
+
+ if (l0.y == l1.y)
+ {
+ SwingUtilities.computeUnion(l0.x, l0.y, l0.width, l0.height, l1);
+
+ // Paint only inside the allocation area.
+ SwingUtilities.computeIntersection(rect.x, rect.y, rect.width, rect.height, l1);
+
+ paintHighlight(g, l1);
+ }
+ else
+ {
+ // 1. The line of p0 is painted from the position of p0
+ // to the right border.
+ // 2. All lines between the ones where p0 and p1 lie on
+ // are completely highlighted. The allocation area is used to find
+ // out the bounds.
+ // 3. The final line is painted from the left border to the
+ // position of p1.
+
+ // Highlight first line until the end.
+ // If rect.x is non-zero the calculation will properly adjust the
+ // area to be painted.
+ l0.x -= rect.x;
+ l0.width = rect.width - l0.x - rect.x;
+
+ paintHighlight(g, l0);
+
+ int posBelow = Utilities.getPositionBelow(t, p0, l0.x);
+ int p1RowStart = Utilities.getRowStart(t, p1);
+ if (posBelow != -1
+ && posBelow != p0
+ && Utilities.getRowStart(t, posBelow)
+ != p1RowStart)
+ {
+ Rectangle grow = ui.modelToView(t, posBelow);
+ grow.x = rect.x;
+ grow.width = rect.width;
+
+ // Find further lines which have to be highlighted completely.
+ int nextPosBelow = posBelow;
+ while (nextPosBelow != -1
+ && Utilities.getRowStart(t, nextPosBelow) != p1RowStart)
+ {
+ posBelow = nextPosBelow;
+ nextPosBelow = Utilities.getPositionBelow(t, posBelow, l0.x);
+
+ if (nextPosBelow == posBelow)
+ break;
+ }
+ // Now posBelow is an offset on the last line which has to be painted
+ // completely. (newPosBelow is on the same line as p1)
+
+ // Retrieve the rectangle of posBelow and use its y and height
+ // value to calculate the final height of the multiple line
+ // spanning rectangle.
+ Rectangle end = ui.modelToView(t, posBelow);
+ grow.height = end.y + end.height - grow.y;
+
+ paintHighlight(g, grow);
+ }
+
+ // Paint last line from its beginning to the position of p1.
+ l1.width = l1.x + l1.width - rect.x;
+ l1.x = rect.x;
+ paintHighlight(g, l1);
+ }
+ }
+ catch (BadLocationException ex)
+ {
+ AssertionError err = new AssertionError("Unexpected bad location exception");
+ err.initCause(ex);
+ throw err;
+ }
}
public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
@@ -330,6 +375,7 @@ public class DefaultHighlighter extends LayeredHighlighter
public void paintLayeredHighlights(Graphics g, int p0, int p1,
Shape viewBounds, JTextComponent editor,
View view)
+ throws NotImplementedException
{
// TODO: Implement this properly.
}
diff --git a/libjava/classpath/javax/swing/text/FieldView.java b/libjava/classpath/javax/swing/text/FieldView.java
index 2496418..0c2f0fe 100644
--- a/libjava/classpath/javax/swing/text/FieldView.java
+++ b/libjava/classpath/javax/swing/text/FieldView.java
@@ -1,5 +1,5 @@
/* FieldView.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,20 +39,86 @@ exception statement from your version. */
package javax.swing.text;
import java.awt.Component;
-import java.awt.ComponentOrientation;
+import java.awt.Container;
import java.awt.FontMetrics;
import java.awt.Graphics;
+import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Shape;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.BoundedRangeModel;
import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
public class FieldView extends PlainView
{
+ BoundedRangeModel horizontalVisibility;
+
+ /** Caches the preferred span of the X axis. It is invalidated by
+ * setting it to -1f. This is done when text in the document
+ * is inserted, removed or changed. The value is corrected as
+ * soon as calculateHorizontalSpan() is called.
+ */
+ float cachedSpan = -1f;
+
public FieldView(Element elem)
{
super(elem);
+
+ }
+
+ /** Checks whether the given container is a JTextField. If so
+ * it retrieves the textfield's horizontalVisibility instance.
+ *
+ * <p>This method should be only called when the view's container
+ * is valid. Naturally that would be the setParent() method however
+ * that method is not overridden in the RI and that is why we chose
+ * paint() instead.</p>
+ */
+ private void checkContainer()
+ {
+ Container c = getContainer();
+
+ if (c instanceof JTextField)
+ {
+ horizontalVisibility = ((JTextField) c).getHorizontalVisibility();
+
+ // Provokes a repaint when the BoundedRangeModel's values change
+ // (which is what the RI does).
+ horizontalVisibility.addChangeListener(new ChangeListener(){
+ public void stateChanged(ChangeEvent event) {
+ getContainer().repaint();
+ };
+ });
+
+ // It turned out that the span calculated at this point is wrong
+ // and needs to be recalculated (e.g. a different font setting is
+ // not taken into account).
+ calculateHorizontalSpan();
+
+ // Initializes the BoundedRangeModel properly.
+ updateVisibility();
+ }
+
+ }
+
+ private void updateVisibility()
+ {
+ JTextField tf = (JTextField) getContainer();
+ Insets insets = tf.getInsets();
+
+ int width = tf.getWidth() - insets.left - insets.right;
+
+ horizontalVisibility.setMaximum(Math.max((int) ((cachedSpan != -1f)
+ ? cachedSpan
+ : calculateHorizontalSpan()),
+ width));
+
+ horizontalVisibility.setExtent(width - 1);
}
protected FontMetrics getFontMetrics()
@@ -72,41 +138,47 @@ public class FieldView extends PlainView
*/
protected Shape adjustAllocation(Shape shape)
{
+ // Return null when the original allocation is null (like the RI).
+ if (shape == null)
+ return null;
+
Rectangle rectIn = shape.getBounds();
// vertical adjustment
int height = (int) getPreferredSpan(Y_AXIS);
int y = rectIn.y + (rectIn.height - height) / 2;
// horizontal adjustment
JTextField textField = (JTextField) getContainer();
- int halign = textField.getHorizontalAlignment();
- int width = (int) getPreferredSpan(X_AXIS);
+ int width = (int) ((cachedSpan != -1f) ? cachedSpan : calculateHorizontalSpan());
int x;
- ComponentOrientation orientation = textField.getComponentOrientation();
- switch (halign)
- {
- case JTextField.CENTER:
- x = rectIn.x + (rectIn.width - width) / 2;
- break;
- case JTextField.RIGHT:
- x = rectIn.x + (rectIn.width - width);
- break;
- case JTextField.TRAILING:
- if (orientation.isLeftToRight())
- x = rectIn.x + (rectIn.width - width);
- else
- x = rectIn.x;
- break;
- case JTextField.LEADING:
- if (orientation.isLeftToRight())
+ if (horizontalVisibility != null && horizontalVisibility.getExtent() < width)
+ x = rectIn.x - horizontalVisibility.getValue();
+ else
+ switch (textField.getHorizontalAlignment())
+ {
+ case JTextField.CENTER:
+ x = rectIn.x + (rectIn.width - width) / 2;
+ break;
+ case JTextField.RIGHT:
+ x = rectIn.x + (rectIn.width - width - 1);
+ break;
+ case JTextField.TRAILING:
+ if (textField.getComponentOrientation().isLeftToRight())
+ x = rectIn.x + (rectIn.width - width - 1);
+ else
+ x = rectIn.x;
+ break;
+ case JTextField.LEADING:
+ if (textField.getComponentOrientation().isLeftToRight())
+ x = rectIn.x;
+ else
+ x = rectIn.x + (rectIn.width - width - 1);
+ break;
+ case JTextField.LEFT:
+ default:
x = rectIn.x;
- else
- x = rectIn.x + (rectIn.width - width);
- break;
- case JTextField.LEFT:
- default:
- x = rectIn.x;
- break;
- }
+ break;
+ }
+
return new Rectangle(x, y, width, height);
}
@@ -115,18 +187,31 @@ public class FieldView extends PlainView
if (axis != X_AXIS && axis != Y_AXIS)
throw new IllegalArgumentException();
- FontMetrics fm = getFontMetrics();
if (axis == Y_AXIS)
return super.getPreferredSpan(axis);
- String text;
+ if (cachedSpan != -1f)
+ return cachedSpan;
+
+ return calculateHorizontalSpan();
+ }
+
+ /** Calculates and sets the horizontal span and stores the value
+ * in cachedSpan.
+ */
+ private float calculateHorizontalSpan()
+ {
+ Segment s = getLineBuffer();
Element elem = getElement();
try
{
- text = elem.getDocument().getText(elem.getStartOffset(),
- elem.getEndOffset());
+ elem.getDocument().getText(elem.getStartOffset(),
+ elem.getEndOffset() - 1,
+ s);
+
+ return cachedSpan = Utilities.getTabbedTextWidth(s, getFontMetrics(), 0, this, s.offset);
}
catch (BadLocationException e)
{
@@ -135,8 +220,6 @@ public class FieldView extends PlainView
ae.initCause(e);
throw ae;
}
-
- return fm.stringWidth(text);
}
public int getResizeWeight(int axis)
@@ -153,19 +236,39 @@ public class FieldView extends PlainView
public void paint(Graphics g, Shape s)
{
+ if (horizontalVisibility == null)
+ checkContainer();
+
Shape newAlloc = adjustAllocation(s);
+
+ // Set a clip to prevent drawing outside of the allocation area.
+ // TODO: Is there a better way to achieve this?
+ Shape clip = g.getClip();
+ g.setClip(s);
super.paint(g, newAlloc);
+ g.setClip(clip);
}
public void insertUpdate(DocumentEvent ev, Shape shape, ViewFactory vf)
{
+ cachedSpan = -1f;
+
+ if (horizontalVisibility != null)
+ updateVisibility();
+
Shape newAlloc = adjustAllocation(shape);
+
super.insertUpdate(ev, newAlloc, vf);
getContainer().repaint();
}
public void removeUpdate(DocumentEvent ev, Shape shape, ViewFactory vf)
{
+ cachedSpan = -1f;
+
+ if (horizontalVisibility != null)
+ updateVisibility();
+
Shape newAlloc = adjustAllocation(shape);
super.removeUpdate(ev, newAlloc, vf);
getContainer().repaint();
@@ -173,14 +276,19 @@ public class FieldView extends PlainView
public void changedUpdate(DocumentEvent ev, Shape shape, ViewFactory vf)
{
+ cachedSpan = -1f;
+
+ if (horizontalVisibility != null)
+ updateVisibility();
+
Shape newAlloc = adjustAllocation(shape);
- super.removeUpdate(ev, newAlloc, vf);
+ super.changedUpdate(ev, newAlloc, vf);
getContainer().repaint();
}
public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias)
{
- return super.viewToModel(fx, fy, a, bias);
+ return super.viewToModel(fx, fy, adjustAllocation(a), bias);
}
}
diff --git a/libjava/classpath/javax/swing/text/FlowView.java b/libjava/classpath/javax/swing/text/FlowView.java
index 8be8f41..8ca55d8 100644
--- a/libjava/classpath/javax/swing/text/FlowView.java
+++ b/libjava/classpath/javax/swing/text/FlowView.java
@@ -433,7 +433,7 @@ public abstract class FlowView extends BoxView
/**
* Loads the children of this view. The <code>FlowView</code> does not
* directly load its children. Instead it creates a logical view
- * (@{link #layoutPool}) which is filled by the logical child views.
+ * ({@link #layoutPool}) which is filled by the logical child views.
* The real children are created at layout time and each represent one
* row.
*
diff --git a/libjava/classpath/javax/swing/text/GapContent.java b/libjava/classpath/javax/swing/text/GapContent.java
index 28d1d6e..219accb 100644
--- a/libjava/classpath/javax/swing/text/GapContent.java
+++ b/libjava/classpath/javax/swing/text/GapContent.java
@@ -289,6 +289,7 @@ public class GapContent
*/
public GapContent(int size)
{
+ size = Math.max(size, 2);
buffer = (char[]) allocateArray(size);
gapStart = 1;
gapEnd = size;
@@ -351,7 +352,7 @@ public class GapContent
throw new BadLocationException("The where argument cannot be smaller"
+ " than the zero", where);
- if (where >= length)
+ if (where > length)
throw new BadLocationException("The where argument cannot be greater"
+ " than the content length", where);
@@ -375,14 +376,11 @@ public class GapContent
{
// check arguments
int length = length();
-
- if (where >= length)
- throw new BadLocationException("the where argument cannot be greater"
- + " than the content length", where);
- if ((where + nitems) > length)
+
+ if ((where + nitems) >= length)
throw new BadLocationException("where + nitems cannot be greater"
+ " than the content length", where + nitems);
-
+
String removedText = getString(where, nitems);
replace(where, nitems, null, 0);
@@ -439,6 +437,8 @@ public class GapContent
{
// check arguments
int length = length();
+ if (where < 0)
+ throw new BadLocationException("the where argument may not be below zero", where);
if (where >= length)
throw new BadLocationException("the where argument cannot be greater"
+ " than the content length", where);
@@ -642,6 +642,10 @@ public class GapContent
if (addItems != null)
{
System.arraycopy(addItems, 0, buffer, gapStart, addSize);
+
+
+ resetMarksAtZero();
+
gapStart += addSize;
}
}
diff --git a/libjava/classpath/javax/swing/text/InternationalFormatter.java b/libjava/classpath/javax/swing/text/InternationalFormatter.java
index ba3cffa..8db435c 100644
--- a/libjava/classpath/javax/swing/text/InternationalFormatter.java
+++ b/libjava/classpath/javax/swing/text/InternationalFormatter.java
@@ -350,7 +350,7 @@ public class InternationalFormatter
* There is no such method in the whole API! So we just call
* super.getActions here.
*/
- public Action[] getActions()
+ protected Action[] getActions()
{
return super.getActions();
}
diff --git a/libjava/classpath/javax/swing/text/JTextComponent.java b/libjava/classpath/javax/swing/text/JTextComponent.java
index 6b8348c..1103de9 100644
--- a/libjava/classpath/javax/swing/text/JTextComponent.java
+++ b/libjava/classpath/javax/swing/text/JTextComponent.java
@@ -1138,6 +1138,7 @@ public abstract class JTextComponent extends JComponent
setFocusable(true);
setEditable(true);
enableEvents(AWTEvent.KEY_EVENT_MASK);
+ setOpaque(true);
updateUI();
}
@@ -1190,6 +1191,7 @@ public abstract class JTextComponent extends JComponent
catch (BadLocationException e)
{
// This can never happen.
+ throw (InternalError) new InternalError().initCause(e);
}
}
diff --git a/libjava/classpath/javax/swing/text/PlainView.java b/libjava/classpath/javax/swing/text/PlainView.java
index 4bb3a8e..18818c0 100644
--- a/libjava/classpath/javax/swing/text/PlainView.java
+++ b/libjava/classpath/javax/swing/text/PlainView.java
@@ -59,6 +59,18 @@ public class PlainView extends View implements TabExpander
* The color that is used to draw disabled text fields.
*/
Color disabledColor;
+
+ /**
+ * While painting this is the textcomponent's current start index
+ * of the selection.
+ */
+ int selectionStart;
+
+ /**
+ * While painting this is the textcomponent's current end index
+ * of the selection.
+ */
+ int selectionEnd;
Font font;
@@ -150,12 +162,47 @@ public class PlainView extends View implements TabExpander
{
try
{
- metrics = g.getFontMetrics();
- // FIXME: Selected text are not drawn yet.
Element line = getElement().getElement(lineIndex);
- drawUnselectedText(g, x, y, line.getStartOffset(),
- line.getEndOffset() - 1);
- //drawSelectedText(g, , , , );
+ int startOffset = line.getStartOffset();
+ int endOffset = line.getEndOffset() - 1;
+
+ if (selectionStart <= startOffset)
+ // Selection starts before the line ...
+ if (selectionEnd <= startOffset)
+ {
+ // end ends before the line: Draw completely unselected text.
+ drawUnselectedText(g, x, y, startOffset, endOffset);
+ }
+ else if (selectionEnd <= endOffset)
+ {
+ // and ends within the line: First part is selected,
+ // second is not.
+ x = drawSelectedText(g, x, y, startOffset, selectionEnd);
+ drawUnselectedText(g, x, y, selectionEnd, endOffset);
+ }
+ else
+ // and ends behind the line: Draw completely selected text.
+ drawSelectedText(g, x, y, startOffset, endOffset);
+ else if (selectionStart < endOffset)
+ // Selection starts within the line ..
+ if (selectionEnd < endOffset)
+ {
+ // and ends within it: First part unselected, second part
+ // selected, third part unselected.
+ x = drawUnselectedText(g, x, y, startOffset, selectionStart);
+ x = drawSelectedText(g, x, y, selectionStart, selectionEnd);
+ drawUnselectedText(g, x, y, selectionEnd, endOffset);
+ }
+ else
+ {
+ // and ends behind the line: First part unselected, second
+ // part selected.
+ x = drawUnselectedText(g, x, y, startOffset, selectionStart);
+ drawSelectedText(g, x, y, selectionStart, endOffset);
+ }
+ else
+ // Selection is behind this line: Draw completely unselected text.
+ drawUnselectedText(g, x, y, startOffset, endOffset);
}
catch (BadLocationException e)
{
@@ -171,7 +218,7 @@ public class PlainView extends View implements TabExpander
g.setColor(selectedColor);
Segment segment = getLineBuffer();
getDocument().getText(p0, p1 - p0, segment);
- return Utilities.drawTabbedText(segment, x, y, g, this, 0);
+ return Utilities.drawTabbedText(segment, x, y, g, this, segment.offset);
}
/**
@@ -212,6 +259,8 @@ public class PlainView extends View implements TabExpander
selectedColor = textComponent.getSelectedTextColor();
unselectedColor = textComponent.getForeground();
disabledColor = textComponent.getDisabledTextColor();
+ selectionStart = textComponent.getSelectionStart();
+ selectionEnd = textComponent.getSelectionEnd();
Rectangle rect = s.getBounds();
@@ -219,11 +268,13 @@ public class PlainView extends View implements TabExpander
Document document = textComponent.getDocument();
Element root = document.getDefaultRootElement();
int y = rect.y + metrics.getAscent();
+ int height = metrics.getHeight();
- for (int i = 0; i < root.getElementCount(); i++)
+ int count = root.getElementCount();
+ for (int i = 0; i < count; i++)
{
drawLine(i, g, rect.x, y);
- y += metrics.getHeight();
+ y += height;
}
}
@@ -274,7 +325,7 @@ public class PlainView extends View implements TabExpander
{
Element child = el.getElement(i);
int start = child.getStartOffset();
- int end = child.getEndOffset();
+ int end = child.getEndOffset() - 1;
try
{
el.getDocument().getText(start, end - start, seg);
@@ -386,6 +437,11 @@ public class PlainView extends View implements TabExpander
*/
protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f)
{
+ // Return early and do no updates if the allocation area is null
+ // (like the RI).
+ if (a == null)
+ return;
+
float oldMaxLineLength = maxLineLength;
Rectangle alloc = a.getBounds();
Element el = getElement();
@@ -467,7 +523,7 @@ public class PlainView extends View implements TabExpander
{
Element child = newElements[i];
int start = child.getStartOffset();
- int end = child.getEndOffset();
+ int end = child.getEndOffset() - 1;
try
{
el.getDocument().getText(start, end - start, seg);
@@ -586,7 +642,7 @@ public class PlainView extends View implements TabExpander
* @returna {@link Segment} object, that can be used to fetch text from
* the document
*/
- protected Segment getLineBuffer()
+ protected final Segment getLineBuffer()
{
if (lineBuffer == null)
lineBuffer = new Segment();
diff --git a/libjava/classpath/javax/swing/text/Position.java b/libjava/classpath/javax/swing/text/Position.java
index a9d3d09..bb1449e 100644
--- a/libjava/classpath/javax/swing/text/Position.java
+++ b/libjava/classpath/javax/swing/text/Position.java
@@ -40,7 +40,7 @@ package javax.swing.text;
public interface Position
{
- static class Bias
+ static final class Bias
{
public static final Bias Backward = new Bias("backward");
public static final Bias Forward = new Bias("forward");
diff --git a/libjava/classpath/javax/swing/text/Segment.java b/libjava/classpath/javax/swing/text/Segment.java
index 875d996..d2364e0 100644
--- a/libjava/classpath/javax/swing/text/Segment.java
+++ b/libjava/classpath/javax/swing/text/Segment.java
@@ -245,7 +245,8 @@ public class Segment implements Cloneable, CharacterIterator
|| position > getEndIndex())
throw new IllegalArgumentException("position: " + position
+ ", beginIndex: " + getBeginIndex()
- + ", endIndex: " + getEndIndex());
+ + ", endIndex: " + getEndIndex()
+ + ", text: " + toString());
current = position;
@@ -264,7 +265,7 @@ public class Segment implements Cloneable, CharacterIterator
*/
public String toString()
{
- return new String(array, offset, count);
+ return (array != null) ? new String(array, offset, count) : "";
}
/**
diff --git a/libjava/classpath/javax/swing/text/StyleContext.java b/libjava/classpath/javax/swing/text/StyleContext.java
index e2643a2..8ef3440 100644
--- a/libjava/classpath/javax/swing/text/StyleContext.java
+++ b/libjava/classpath/javax/swing/text/StyleContext.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.text;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
@@ -711,35 +713,37 @@ public class StyleContext
// have left incomplete; I'm not sure I understand the intent properly.
public static Object getStaticAttribute(Object key)
+ throws NotImplementedException
{
throw new InternalError("not implemented");
}
public static Object getStaticAttributeKey(Object key)
+ throws NotImplementedException
{
throw new InternalError("not implemented");
}
public static void readAttributeSet(ObjectInputStream in, MutableAttributeSet a)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new InternalError("not implemented");
}
public static void writeAttributeSet(ObjectOutputStream out, AttributeSet a)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new InternalError("not implemented");
}
public void readAttributes(ObjectInputStream in, MutableAttributeSet a)
- throws ClassNotFoundException, IOException
+ throws ClassNotFoundException, IOException, NotImplementedException
{
throw new InternalError("not implemented");
}
public void writeAttributes(ObjectOutputStream out, AttributeSet a)
- throws IOException
+ throws IOException, NotImplementedException
{
throw new InternalError("not implemented");
}
diff --git a/libjava/classpath/javax/swing/text/Utilities.java b/libjava/classpath/javax/swing/text/Utilities.java
index d109a4a..f154e55 100644
--- a/libjava/classpath/javax/swing/text/Utilities.java
+++ b/libjava/classpath/javax/swing/text/Utilities.java
@@ -1,5 +1,5 @@
/* Utilities.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,6 +48,7 @@ import java.text.BreakIterator;
* inside this package.
*
* @author Roman Kennke (roman@ontographics.com)
+ * @author Robert Schuster (robertschuster@fsfe.org)
*/
public class Utilities
{
@@ -99,8 +100,10 @@ public class Utilities
int pixelWidth = 0;
int pos = s.offset;
int len = 0;
+
+ int end = s.offset + s.count;
- for (int offset = s.offset; offset < (s.offset + s.count); ++offset)
+ for (int offset = s.offset; offset < end; ++offset)
{
char c = buffer[offset];
if (c == '\t' || c == '\n')
@@ -140,7 +143,7 @@ public class Utilities
if (len > 0)
g.drawChars(buffer, pos, len, pixelX, pixelY + ascent);
- return pixelX;
+ return pixelX + pixelWidth;
}
/**
@@ -236,35 +239,39 @@ public class Utilities
// At the end of the for loop, this holds the requested model location
int pos;
int currentX = x0;
-
+ int width = 0;
+
for (pos = 0; pos < s.count; pos++)
{
char nextChar = s.array[s.offset+pos];
if (nextChar == 0)
- {
- if (! round)
- pos--;
break;
- }
+
if (nextChar != '\t')
- currentX += fm.charWidth(nextChar);
+ width = fm.charWidth(nextChar);
else
{
if (te == null)
- currentX += fm.charWidth(' ');
+ width = fm.charWidth(' ');
else
- currentX = (int) te.nextTabStop(currentX, pos);
+ width = ((int) te.nextTabStop(currentX, pos)) - currentX;
}
- if (currentX > x)
+ if (round)
{
- if (! round)
- pos--;
- break;
+ if (currentX + (width>>1) > x)
+ break;
+ }
+ else
+ {
+ if (currentX + width > x)
+ break;
}
+
+ currentX += width;
}
-
+
return pos + p0;
}
@@ -315,21 +322,31 @@ public class Utilities
String text = c.getText();
BreakIterator wb = BreakIterator.getWordInstance();
wb.setText(text);
+
int last = wb.following(offs);
int current = wb.next();
+ int cp;
+
while (current != BreakIterator.DONE)
{
for (int i = last; i < current; i++)
{
- // FIXME: Should use isLetter(int) and text.codePointAt(int)
- // instead, but isLetter(int) isn't implemented yet
- if (Character.isLetter(text.charAt(i)))
+ cp = text.codePointAt(i);
+
+ // Return the last found bound if there is a letter at the current
+ // location or is not whitespace (meaning it is a number or
+ // punctuation). The first case means that 'last' denotes the
+ // beginning of a word while the second case means it is the start
+ // of some else.
+ if (Character.isLetter(cp)
+ || !Character.isWhitespace(cp))
return last;
}
last = current;
current = wb.next();
}
- return BreakIterator.DONE;
+
+ throw new BadLocationException("no more word", offs);
}
/**
@@ -358,9 +375,7 @@ public class Utilities
{
for (int i = last; i < offs; i++)
{
- // FIXME: Should use isLetter(int) and text.codePointAt(int)
- // instead, but isLetter(int) isn't implemented yet
- if (Character.isLetter(text.charAt(i)))
+ if (Character.isLetter(text.codePointAt(i)))
return last;
}
last = current;
@@ -510,24 +525,28 @@ public class Utilities
int x0, int x, TabExpander e,
int startOffset)
{
- int mark = Utilities.getTabbedTextOffset(s, metrics, x0, x, e, startOffset);
+ int mark = Utilities.getTabbedTextOffset(s, metrics, x0, x, e, startOffset, false);
BreakIterator breaker = BreakIterator.getWordInstance();
breaker.setText(s);
- // If mark is equal to the end of the string, just use that position
- if (mark == s.count + s.offset)
+ // If startOffset and s.offset differ then we need to use
+ // that difference two convert the offset between the two metrics.
+ int shift = startOffset - s.offset;
+
+ // If mark is equal to the end of the string, just use that position.
+ if (mark >= shift + s.count)
return mark;
// Try to find a word boundary previous to the mark at which we
- // can break the text
- int preceding = breaker.preceding(mark + 1);
+ // can break the text.
+ int preceding = breaker.preceding(mark + 1 - shift);
if (preceding != 0)
- return preceding;
- else
- // If preceding is 0 we couldn't find a suitable word-boundary so
- // just break it on the character boundary
- return mark;
+ return preceding + shift;
+
+ // If preceding is 0 we couldn't find a suitable word-boundary so
+ // just break it on the character boundary
+ return mark;
}
/**
@@ -619,8 +638,22 @@ public class Utilities
if(offs == -1)
return -1;
- // Effectively calculates the y value of the previous line.
- Point pt = c.modelToView(offs+1).getLocation();
+ Point pt = null;
+
+ // Note: Some views represent the position after the last
+ // typed character others do not. Converting offset 3 in "a\nb"
+ // in a PlainView will return a valid rectangle while in a
+ // WrappedPlainView this will throw a BadLocationException.
+ // This behavior has been observed in the RI.
+ try
+ {
+ // Effectively calculates the y value of the next line.
+ pt = c.modelToView(offs+1).getLocation();
+ }
+ catch(BadLocationException ble)
+ {
+ return offset;
+ }
pt.x = x;
diff --git a/libjava/classpath/javax/swing/text/View.java b/libjava/classpath/javax/swing/text/View.java
index 2feaf29..d8ad5f5 100644
--- a/libjava/classpath/javax/swing/text/View.java
+++ b/libjava/classpath/javax/swing/text/View.java
@@ -1,5 +1,5 @@
/* View.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -733,23 +733,38 @@ public abstract class View implements SwingConstants
throws BadLocationException
{
int ret = pos;
+ Rectangle r;
+ View parent;
+
switch (d)
{
- case WEST:
- ret = pos - 1;
- break;
case EAST:
- ret = pos + 1;
+ // TODO: take component orientation into account?
+ // Note: If pos is below zero the implementation will return
+ // pos + 1 regardless of whether that value is a correct offset
+ // in the document model. However this is what the RI does.
+ ret = Math.min(pos + 1, getEndOffset());
+ break;
+ case WEST:
+ // TODO: take component orientation into account?
+ ret = Math.max(pos - 1, getStartOffset());
break;
case NORTH:
- // TODO: Implement this
+ // Try to find a suitable offset by examining the area above.
+ parent = getParent();
+ r = parent.modelToView(pos, a, b).getBounds();
+ ret = parent.viewToModel(r.x, r.y - 1, a, biasRet);
break;
case SOUTH:
- // TODO: Implement this
+ // Try to find a suitable offset by examining the area below.
+ parent = getParent();
+ r = parent.modelToView(pos, a, b).getBounds();
+ ret = parent.viewToModel(r.x + r.width, r.y + r.height, a, biasRet);
break;
default:
throw new IllegalArgumentException("Illegal value for d");
}
+
return ret;
}
}
diff --git a/libjava/classpath/javax/swing/text/WrappedPlainView.java b/libjava/classpath/javax/swing/text/WrappedPlainView.java
index e2790a0..a6c369a 100644
--- a/libjava/classpath/javax/swing/text/WrappedPlainView.java
+++ b/libjava/classpath/javax/swing/text/WrappedPlainView.java
@@ -1,5 +1,5 @@
/* WrappedPlainView.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,6 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
-import javax.swing.SwingConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.text.Position.Bias;
@@ -64,8 +63,11 @@ public class WrappedPlainView extends BoxView implements TabExpander
/** The color for disabled components **/
Color disabledColor;
- /** Stores the font metrics **/
- protected FontMetrics metrics;
+ /**
+ * Stores the font metrics. This is package private to avoid synthetic
+ * accessor method.
+ */
+ FontMetrics metrics;
/** Whether or not to wrap on word boundaries **/
boolean wordWrap;
@@ -79,6 +81,9 @@ public class WrappedPlainView extends BoxView implements TabExpander
/** The end of the selected text **/
int selectionEnd;
+ /** The height of the line (used while painting) **/
+ int lineHeight;
+
/**
* The instance returned by {@link #getLineBuffer()}.
*/
@@ -270,8 +275,20 @@ public class WrappedPlainView extends BoxView implements TabExpander
protected int calculateBreakPosition(int p0, int p1)
{
Container c = getContainer();
- Rectangle alloc = new Rectangle(0, 0, getWidth(), getHeight());
+
+ int li = getLeftInset();
+ int ti = getTopInset();
+
+ Rectangle alloc = new Rectangle(li, ti,
+ getWidth()-getRightInset()-li,
+ getHeight()-getBottomInset()-ti);
+
+ // Mimic a behavior observed in the RI.
+ if (alloc.isEmpty())
+ return 0;
+
updateMetrics();
+
try
{
getDocument().getText(p0, p1 - p0, getLineBuffer());
@@ -279,18 +296,16 @@ public class WrappedPlainView extends BoxView implements TabExpander
catch (BadLocationException ble)
{
// this shouldn't happen
+ throw new InternalError("Invalid offsets p0: " + p0 + " - p1: " + p1);
}
- // FIXME: Should we account for the insets of the container?
+
if (wordWrap)
- return p0
- + Utilities.getBreakLocation(lineBuffer, metrics, alloc.x,
- alloc.x + alloc.width, this, 0);
+ return Utilities.getBreakLocation(lineBuffer, metrics, alloc.x,
+ alloc.x + alloc.width, this, p0);
else
- {
- return p0
- + Utilities.getTabbedTextOffset(lineBuffer, metrics, alloc.x,
- alloc.x + alloc.width, this, 0);
- }
+ return p0 + Utilities.getTabbedTextOffset(lineBuffer, metrics, alloc.x,
+ alloc.x + alloc.width, this, 0,
+ true);
}
void updateMetrics()
@@ -336,8 +351,8 @@ public class WrappedPlainView extends BoxView implements TabExpander
public void insertUpdate (DocumentEvent e, Shape a, ViewFactory f)
{
super.insertUpdate(e, a, viewFactory);
- // FIXME: could improve performance by repainting only the necessary area
- getContainer().repaint();
+
+ // No repaint needed, as this is done by the WrappedLine instances.
}
/**
@@ -347,8 +362,8 @@ public class WrappedPlainView extends BoxView implements TabExpander
public void removeUpdate (DocumentEvent e, Shape a, ViewFactory f)
{
super.removeUpdate(e, a, viewFactory);
- // FIXME: could improve performance by repainting only the necessary area
- getContainer().repaint();
+
+ // No repaint needed, as this is done by the WrappedLine instances.
}
/**
@@ -359,8 +374,8 @@ public class WrappedPlainView extends BoxView implements TabExpander
public void changedUpdate (DocumentEvent e, Shape a, ViewFactory f)
{
super.changedUpdate(e, a, viewFactory);
- // FIXME: could improve performance by repainting only the necessary area
- getContainer().repaint();
+
+ // No repaint needed, as this is done by the WrappedLine instances.
}
class WrappedLineCreator implements ViewFactory
@@ -383,9 +398,19 @@ public class WrappedPlainView extends BoxView implements TabExpander
public void paint(Graphics g, Shape a)
{
JTextComponent comp = (JTextComponent)getContainer();
+ // Ensure metrics are up-to-date.
+ updateMetrics();
+
selectionStart = comp.getSelectionStart();
selectionEnd = comp.getSelectionEnd();
- updateMetrics();
+
+ selectedColor = comp.getSelectedTextColor();
+ unselectedColor = comp.getForeground();
+ disabledColor = comp.getDisabledTextColor();
+ selectedColor = comp.getSelectedTextColor();
+ lineHeight = metrics.getHeight();
+ g.setFont(comp.getFont());
+
super.paint(g, a);
}
@@ -404,7 +429,7 @@ public class WrappedPlainView extends BoxView implements TabExpander
class WrappedLine extends View
{
/** Used to cache the number of lines for this View **/
- int numLines;
+ int numLines = 1;
public WrappedLine(Element elem)
{
@@ -418,48 +443,47 @@ public class WrappedPlainView extends BoxView implements TabExpander
*/
public void paint(Graphics g, Shape s)
{
- // Ensure metrics are up-to-date.
- updateMetrics();
- JTextComponent textComponent = (JTextComponent) getContainer();
-
- g.setFont(textComponent.getFont());
- selectedColor = textComponent.getSelectedTextColor();
- unselectedColor = textComponent.getForeground();
- disabledColor = textComponent.getDisabledTextColor();
-
- // FIXME: this is a hack, for some reason textComponent.getSelectedColor
- // was returning black, which is not visible against a black background
- selectedColor = Color.WHITE;
-
Rectangle rect = s.getBounds();
- int lineHeight = metrics.getHeight();
int end = getEndOffset();
int currStart = getStartOffset();
- int currEnd;
+ int currEnd;
+ int count = 0;
while (currStart < end)
{
currEnd = calculateBreakPosition(currStart, end);
- drawLine(currStart, currEnd, g, rect.x, rect.y);
+
+ drawLine(currStart, currEnd, g, rect.x, rect.y + metrics.getAscent());
+
rect.y += lineHeight;
if (currEnd == currStart)
currStart ++;
else
- currStart = currEnd;
+ currStart = currEnd;
+
+ count++;
+
}
+
+ if (count != numLines)
+ {
+ numLines = count;
+ preferenceChanged(this, false, true);
+ }
+
}
/**
- * Determines the number of logical lines that the Element
- * needs to be displayed
- * @return the number of lines needed to display the Element
+ * Calculates the number of logical lines that the Element
+ * needs to be displayed and updates the variable numLines
+ * accordingly.
*/
- int determineNumLines()
+ void determineNumLines()
{
numLines = 0;
int end = getEndOffset();
if (end == 0)
- return 0;
+ return;
int breakPoint;
for (int i = getStartOffset(); i < end;)
@@ -468,12 +492,17 @@ public class WrappedPlainView extends BoxView implements TabExpander
// careful: check that there's no off-by-one problem here
// depending on which position calculateBreakPosition returns
breakPoint = calculateBreakPosition(i, end);
+
+ if (breakPoint == 0)
+ return;
+
+ // If breakPoint is equal to the current index no further
+ // line is needed and we can end the loop.
if (breakPoint == i)
- i ++;
+ break;
else
i = breakPoint;
}
- return numLines;
}
/**
@@ -489,7 +518,11 @@ public class WrappedPlainView extends BoxView implements TabExpander
if (axis == X_AXIS)
return getWidth();
else if (axis == Y_AXIS)
- return numLines * metrics.getHeight();
+ {
+ if (metrics == null)
+ updateMetrics();
+ return numLines * metrics.getHeight();
+ }
throw new IllegalArgumentException("Invalid axis for getPreferredSpan: "
+ axis);
@@ -509,9 +542,15 @@ public class WrappedPlainView extends BoxView implements TabExpander
public Shape modelToView(int pos, Shape a, Bias b)
throws BadLocationException
{
+ Rectangle rect = a.getBounds();
+
+ // Throwing a BadLocationException is an observed behavior of the RI.
+ if (rect.isEmpty())
+ throw new BadLocationException("Unable to calculate view coordinates "
+ + "when allocation area is empty.", 5);
+
Segment s = getLineBuffer();
int lineHeight = metrics.getHeight();
- Rectangle rect = a.getBounds();
// Return a rectangle with width 1 and height equal to the height
// of the text
@@ -530,7 +569,7 @@ public class WrappedPlainView extends BoxView implements TabExpander
// If pos is between currLineStart and currLineEnd then just find
// the width of the text from currLineStart to pos and add that
// to rect.x
- if (pos >= currLineStart && pos < currLineEnd || pos == end - 1)
+ if (pos >= currLineStart && pos < currLineEnd)
{
try
{
@@ -574,68 +613,93 @@ public class WrappedPlainView extends BoxView implements TabExpander
Segment s = getLineBuffer();
Rectangle rect = a.getBounds();
int currLineStart = getStartOffset();
+
+ // Although calling modelToView with the last possible offset will
+ // cause a BadLocationException in CompositeView it is allowed
+ // to return that offset in viewToModel.
int end = getEndOffset();
+
int lineHeight = metrics.getHeight();
if (y < rect.y)
return currLineStart;
+
if (y > rect.y + rect.height)
- return end - 1;
+ return end;
+
+ // Note: rect.x and rect.width do not represent the width of painted
+ // text but the area where text *may* be painted. This means the width
+ // is most of the time identical to the component's width.
- while (true)
+ while (currLineStart != end)
{
int currLineEnd = calculateBreakPosition(currLineStart, end);
+
// If we're at the right y-position that means we're on the right
// logical line and we should look for the character
if (y >= rect.y && y < rect.y + lineHeight)
{
- // Check if the x position is to the left or right of the text
- if (x < rect.x)
- return currLineStart;
- if (x > rect.x + rect.width)
- return currLineEnd - 1;
-
try
{
- getDocument().getText(currLineStart, end - currLineStart, s);
+ getDocument().getText(currLineStart, currLineEnd - currLineStart, s);
}
catch (BadLocationException ble)
{
// Shouldn't happen
}
- int mark = Utilities.getTabbedTextOffset(s, metrics, rect.x,
- (int) x,
- WrappedPlainView.this,
- currLineStart);
- return currLineStart + mark;
+
+ int offset = Utilities.getTabbedTextOffset(s, metrics, rect.x,
+ (int) x,
+ WrappedPlainView.this,
+ currLineStart);
+ // If the calculated offset is the end of the line (in the
+ // document (= start of the next line) return the preceding
+ // offset instead. This makes sure that clicking right besides
+ // the last character in a line positions the cursor after the
+ // last character and not in the beginning of the next line.
+ return (offset == currLineEnd) ? offset - 1 : offset;
}
// Increment rect.y so we're checking the next logical line
rect.y += lineHeight;
// Increment currLineStart to the model position of the start
- // of the next logical line
- if (currLineEnd == currLineStart)
- currLineStart = end;
- else
- currLineStart = currLineEnd;
+ // of the next logical line.
+ currLineStart = currLineEnd;
+
}
+
+ return end;
}
/**
- * This method is called from insertUpdate and removeUpdate.
- * If the number of lines in the document has changed, just repaint
+ * <p>This method is called from insertUpdate and removeUpdate.</p>
+ *
+ * <p>If the number of lines in the document has changed, just repaint
* the whole thing (note, could improve performance by not repainting
* anything above the changes). If the number of lines hasn't changed,
- * just repaint the given Rectangle.
+ * just repaint the given Rectangle.</p>
+ *
+ * <p>Note that the <code>Rectangle</code> argument may be <code>null</code>
+ * when the allocation area is empty.</code>
+ *
* @param a the Rectangle to repaint if the number of lines hasn't changed
*/
void updateDamage (Rectangle a)
{
- int newNumLines = determineNumLines();
- if (numLines != newNumLines)
+ // If the allocation area is empty we can't do anything useful.
+ // As determining the number of lines is impossible in that state we
+ // reset it to an invalid value which can then be recalculated at a
+ // later point.
+ if (a == null || a.isEmpty())
{
- numLines = newNumLines;
- getContainer().repaint();
+ numLines = 1;
+ return;
}
+
+ int oldNumLines = numLines;
+ determineNumLines();
+
+ if (numLines != oldNumLines)
+ preferenceChanged(this, false, true);
else
getContainer().repaint(a.x, a.y, a.width, a.height);
}
@@ -663,6 +727,15 @@ public class WrappedPlainView extends BoxView implements TabExpander
*/
public void removeUpdate (DocumentEvent changes, Shape a, ViewFactory f)
{
+ // Note: This method is not called when characters from the
+ // end of the document are removed. The reason for this
+ // can be found in the implementation of View.forwardUpdate:
+ // The document event will denote offsets which do not exist
+ // any more, getViewIndex() will therefore return -1 and this
+ // makes View.forwardUpdate() skip this method call.
+ // However this seems to cause no trouble and as it reduces the
+ // number of method calls it can stay this way.
+
updateDamage((Rectangle)a);
}
}
diff --git a/libjava/classpath/javax/swing/text/html/FormView.java b/libjava/classpath/javax/swing/text/html/FormView.java
index b85c694..d540210 100644
--- a/libjava/classpath/javax/swing/text/html/FormView.java
+++ b/libjava/classpath/javax/swing/text/html/FormView.java
@@ -39,8 +39,11 @@ exception statement from your version. */
package javax.swing.text.html;
import java.awt.Component;
+import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
@@ -83,6 +86,24 @@ public class FormView
implements ActionListener
{
+ protected class MouseEventListener
+ extends MouseAdapter
+ {
+ /**
+ * Creates a new <code>MouseEventListener</code>.
+ */
+ protected MouseEventListener()
+ {
+ // Nothing to do here.
+ }
+
+ public void mouseReleased(MouseEvent ev)
+ {
+ String data = getImageData(ev.getPoint());
+ imageSubmit(data);
+ }
+ }
+
/**
* If the value attribute of an <code>&lt;input type=&quot;submit&quot;&gt>
* tag is not specified, then this string is used.
@@ -227,4 +248,28 @@ public class FormView
{
// FIXME: Implement this.
}
+
+ /**
+ * Determines the image data that should be submitted in response to a
+ * mouse click on a image. This is either 'x=<p.x>&y=<p.y>' if the name
+ * attribute of the element is null or '' or
+ * <name>.x=<p.x>&<name>.y=<p.y>' when the name attribute is not empty.
+ *
+ * @param p the coordinates of the mouseclick
+ */
+ String getImageData(Point p)
+ {
+ String name = (String) getElement().getAttributes()
+ .getAttribute(HTML.Attribute.NAME);
+ String data;
+ if (name == null || name.equals(""))
+ {
+ data = "x=" + p.x + "&y=" + p.y;
+ }
+ else
+ {
+ data = name + ".x=" + p.x + "&" + name + ".y=" + p.y;
+ }
+ return data;
+ }
}
diff --git a/libjava/classpath/javax/swing/text/html/HTML.java b/libjava/classpath/javax/swing/text/html/HTML.java
index 2b521cd..2c908f6 100644
--- a/libjava/classpath/javax/swing/text/html/HTML.java
+++ b/libjava/classpath/javax/swing/text/html/HTML.java
@@ -292,7 +292,7 @@ public class HTML
/**
* The media attribute
*/
- public static final Attribute MEDIA = new Attribute("media");
+ static final Attribute MEDIA = new Attribute("media");
/**
* The method attribute
@@ -758,7 +758,7 @@ public class HTML
/**
* The &lt;nobr&gt; tag
*/
- public static final Tag NOBR = new Tag("nobr");
+ static final Tag NOBR = new Tag("nobr");
/**
* The &lt;noframes&gt; tag , breaks flow, block tag.
diff --git a/libjava/classpath/javax/swing/text/html/HTMLDocument.java b/libjava/classpath/javax/swing/text/html/HTMLDocument.java
index 2a96953..fba6cad 100644
--- a/libjava/classpath/javax/swing/text/html/HTMLDocument.java
+++ b/libjava/classpath/javax/swing/text/html/HTMLDocument.java
@@ -38,6 +38,8 @@ exception statement from your version. */
package javax.swing.text.html;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
@@ -667,6 +669,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("FormAction.start not implemented");
@@ -677,6 +680,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("FormAction.end not implemented");
@@ -690,6 +694,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HiddenAction.start not implemented");
@@ -700,6 +705,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HiddenAction.end not implemented");
@@ -713,6 +719,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("IsindexAction.start not implemented");
@@ -723,6 +730,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("IsindexAction.end not implemented");
@@ -759,6 +767,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("PreAction.start not implemented");
@@ -769,6 +778,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("PreAction.end not implemented");
@@ -782,6 +792,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("SpecialAction.start not implemented");
@@ -792,6 +803,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("SpecialAction.end not implemented");
@@ -805,6 +817,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("AreaAction.start not implemented");
@@ -815,6 +828,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("AreaAction.end not implemented");
@@ -828,6 +842,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("BaseAction.start not implemented");
@@ -838,6 +853,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("BaseAction.end not implemented");
@@ -851,6 +867,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HeadAction.start not implemented: "+t);
@@ -862,6 +879,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HeadAction.end not implemented: "+t);
@@ -876,6 +894,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("LinkAction.start not implemented");
@@ -886,6 +905,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("LinkAction.end not implemented");
@@ -899,6 +919,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("MapAction.start not implemented");
@@ -909,6 +930,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("MapAction.end not implemented");
@@ -922,6 +944,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("MetaAction.start not implemented");
@@ -932,6 +955,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("MetaAction.end not implemented");
@@ -945,6 +969,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("StyleAction.start not implemented");
@@ -955,6 +980,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("StyleAction.end not implemented");
@@ -968,6 +994,7 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("TitleAction.start not implemented");
@@ -978,6 +1005,7 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("TitleAction.end not implemented");
@@ -1253,6 +1281,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @since 1.3
*/
public void handleEndOfLineString(String eol)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HTMLReader.handleEndOfLineString not implemented yet");
@@ -1265,6 +1294,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @param data the text to add to the textarea
*/
protected void textAreaContent(char[] data)
+ throws NotImplementedException
{
// FIXME: Implement.
print ("HTMLReader.textAreaContent not implemented yet");
@@ -1276,6 +1306,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @param data the text
*/
protected void preContent(char[] data)
+ throws NotImplementedException
{
// FIXME: Implement
print ("HTMLReader.preContent not implemented yet");
@@ -1447,6 +1478,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @param a the attribute set specifying the special content
*/
protected void addSpecialElement(HTML.Tag t, MutableAttributeSet a)
+ throws NotImplementedException
{
// FIXME: Implement
print ("HTMLReader.addSpecialElement not implemented yet");
@@ -1550,7 +1582,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if an HTMLEditorKit.Parser has not been set
*/
public void setInnerHTML(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (elem.isLeaf())
throw new IllegalArgumentException("Element is a leaf");
@@ -1574,7 +1606,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if parser is not set
*/
public void setOuterHTML(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (parser == null)
throw new IllegalStateException("Parser has not been set");
@@ -1593,7 +1625,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if parser has not been set
*/
public void insertBeforeStart(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (parser == null)
throw new IllegalStateException("Parser has not been set");
@@ -1613,7 +1645,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if parser is not set
*/
public void insertBeforeEnd(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (parser == null)
throw new IllegalStateException("Parser has not been set");
@@ -1632,7 +1664,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if parser is not set
*/
public void insertAfterEnd(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (parser == null)
throw new IllegalStateException("Parser has not been set");
@@ -1651,7 +1683,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @throws IllegalStateException - if parser is not set
*/
public void insertAfterStart(Element elem, String htmlText)
- throws BadLocationException, IOException
+ throws BadLocationException, IOException, NotImplementedException
{
if (parser == null)
throw new IllegalStateException("Parser has not been set");
@@ -1676,6 +1708,7 @@ public class HTMLDocument extends DefaultStyledDocument
*/
public void setParagraphAttributes(int offset, int length, AttributeSet s,
boolean replace)
+ throws NotImplementedException
{
// FIXME: Not implemented.
System.out.println("setParagraphAttributes not implemented");
@@ -1688,6 +1721,7 @@ public class HTMLDocument extends DefaultStyledDocument
* @param e - the Document event
*/
protected void fireChangedUpdate(DocumentEvent e)
+ throws NotImplementedException
{
// FIXME: Not implemented.
System.out.println("fireChangedUpdate not implemented");
diff --git a/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java b/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
index 2d5d1eb..92d9de9 100644
--- a/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
+++ b/libjava/classpath/javax/swing/text/html/HTMLEditorKit.java
@@ -39,6 +39,8 @@ exception statement from your version. */
package javax.swing.text.html;
+import gnu.classpath.NotImplementedException;
+
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@@ -298,6 +300,7 @@ public class HTMLEditorKit
Element insertElement,
String html, HTML.Tag parentTag,
HTML.Tag addTag)
+ throws NotImplementedException
{
/*
As its name implies, this protected method is used when HTML is inserted at a
diff --git a/libjava/classpath/javax/swing/text/html/ListView.java b/libjava/classpath/javax/swing/text/html/ListView.java
new file mode 100644
index 0000000..c07d359
--- /dev/null
+++ b/libjava/classpath/javax/swing/text/html/ListView.java
@@ -0,0 +1,131 @@
+/* ListView.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package javax.swing.text.html;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.Shape;
+
+import javax.swing.text.Element;
+
+/**
+ * A View to render HTML lists, like the <code>&lt;ul&gt;</code> and
+ * <code>&lt;ol&gt;</code> tags.
+ *
+ * @author Roman Kennke (kennke@aicas.com)
+ */
+public class ListView
+ extends BlockView
+{
+
+ /**
+ * The painter used to paint the list items.
+ */
+ private StyleSheet.ListPainter painter;
+
+ /**
+ * Creates a new <code>ListView</code> for the specified element.
+ *
+ * @param el the element to create a list view for
+ */
+ public ListView(Element el)
+ {
+ super(el, Y_AXIS);
+ }
+
+ /**
+ * Returns the alignment of this view along the specified axis.
+ *
+ * This returns <code>0.5</code> unconditionally.
+ *
+ * @param axis the axis
+ *
+ * @return the alignment of this view along the specified axis
+ */
+ public float getAlignment(int axis)
+ {
+ if (axis != X_AXIS && axis != Y_AXIS)
+ throw new IllegalArgumentException("Illegal axis parameter: " + axis);
+
+ return 0.5F;
+ }
+
+ /**
+ * Paints the <code>ListView</code>.
+ *
+ * @param g the graphics context to use for painting
+ * @param allocation the allocation given to this view
+ */
+ public void paint(Graphics g, Shape allocation)
+ {
+ super.paint(g, allocation);
+ // FIXME: Why is this overridden? I think that painting would be done
+ // by the superclass and the stylesheet... Maybe find out when this
+ // stuff is implemented properly.
+ }
+
+ /**
+ * Paints the child with the specified index into the specified allocation.
+ *
+ * This implementation forwards to the list painter fetched from the
+ * {@link StyleSheet} and then calls
+ * <code>super.paintChild(g, a, index)</code>.
+ *
+ * @param g the graphics context to use
+ * @param a the allocation for the child
+ * @param index the child index
+ */
+ protected void paintChild(Graphics g, Rectangle a, int index)
+ {
+ painter.paint(g, a.x, a.y, a.width, a.height, this, index);
+ super.paintChild(g, a, index);
+ }
+
+ /**
+ * Fetches this view's properties from the style attributes of this view's
+ * element.
+ *
+ * This forwards to super and then fetches a {@link StyleSheet.ListPainter}
+ * from the stylesheet suitable for painting the list.
+ */
+ protected void setPropertiesFromAttributes()
+ {
+ super.setPropertiesFromAttributes();
+ painter = getStyleSheet().getListPainter(getAttributes());
+ }
+}
diff --git a/libjava/classpath/javax/swing/text/html/NullView.java b/libjava/classpath/javax/swing/text/html/NullView.java
index 4b66c5a..86ce0c1 100644
--- a/libjava/classpath/javax/swing/text/html/NullView.java
+++ b/libjava/classpath/javax/swing/text/html/NullView.java
@@ -52,8 +52,8 @@ import javax.swing.text.Position.Bias;
*
* @author Roman Kennke (kennke@aicas.com)
*/
-public class NullView
- extends View
+class NullView
+ extends View
{
/**
diff --git a/libjava/classpath/javax/swing/text/html/parser/Entity.java b/libjava/classpath/javax/swing/text/html/parser/Entity.java
index 766984f..cf294c7 100644
--- a/libjava/classpath/javax/swing/text/html/parser/Entity.java
+++ b/libjava/classpath/javax/swing/text/html/parser/Entity.java
@@ -54,7 +54,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public final class Entity
- implements DTDConstants, Serializable
+ implements DTDConstants
{
/**
* Package level mapper between type names and they string values.
diff --git a/libjava/classpath/javax/swing/text/rtf/package.html b/libjava/classpath/javax/swing/text/rtf/package.html
new file mode 100644
index 0000000..c695aef
--- /dev/null
+++ b/libjava/classpath/javax/swing/text/rtf/package.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!-- package.html - describes classes in javax.swing.text.rtf package.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. -->
+
+<html>
+<head><title>GNU Classpath - javax.swing.text.rtf</title></head>
+
+<body>
+<p>Provides support for Rich Text Format (RTF) data to be used with the
+{@link JEditorPane} component.
+</p>
+
+</body>
+</html>
diff --git a/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java b/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java
index adece10..8dbdd2f 100644
--- a/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java
+++ b/libjava/classpath/javax/swing/tree/AbstractLayoutCache.java
@@ -38,10 +38,13 @@ exception statement from your version. */
package javax.swing.tree;
+import gnu.classpath.NotImplementedException;
+
import java.awt.Rectangle;
import java.util.Enumeration;
import javax.swing.event.TreeModelEvent;
+import javax.swing.tree.VariableHeightLayoutCache.NodeRecord;
/**
* class AbstractLayoutCache
@@ -49,361 +52,397 @@ import javax.swing.event.TreeModelEvent;
* @author Andrew Selkirk
*/
public abstract class AbstractLayoutCache
- implements RowMapper
+ implements RowMapper
{
- /**
- * class NodeDimensions
- */
- public abstract static class NodeDimensions
- {
- /**
- * Creates <code>NodeDimensions</code> object.
- */
- public NodeDimensions()
- {
- // Do nothing here.
- }
-
- /**
- * getNodeDimensions
- *
- * @param value0 TODO
- * @param value1 TODO
- * @param value2 TODO
- * @param value3 TODO
- * @param value4 TODO
- * @return Rectangle
- */
- public abstract Rectangle getNodeDimensions(Object value0, int value1,
- int value2, boolean value3, Rectangle value4);
- }
-
- /**
- * nodeDimensions
- */
- protected NodeDimensions nodeDimensions;
-
- /**
- * treeModel
- */
- protected TreeModel treeModel;
-
- /**
- * treeSelectionModel
- */
- protected TreeSelectionModel treeSelectionModel;
-
- /**
- * rootVisible
- */
- protected boolean rootVisible;
-
- /**
- * rowHeight
- */
- protected int rowHeight;
-
- /**
- * Constructor AbstractLayoutCache
- */
- public AbstractLayoutCache()
- {
- // Do nothing here.
- }
-
- /**
- * setNodeDimensions
- *
- * @param dimensions TODO
- */
- public void setNodeDimensions(NodeDimensions dimensions)
- {
- nodeDimensions = dimensions;
- }
-
- /**
- * getNodeDimensions
- *
- * @return NodeDimensions
- */
- public NodeDimensions getNodeDimensions()
- {
- return nodeDimensions;
- }
-
- /**
- * getNodeDimensions
- *
- * @param value TODO
- * @param row TODO
- * @param depth TODO
- * @param expanded TODO
- * @param bounds TODO
- *
- * @return Rectangle
- */
- protected Rectangle getNodeDimensions(Object value, int row, int depth,
- boolean expanded, Rectangle bounds)
- {
- if (bounds == null)
- return new Rectangle();
- return null;
- // TODO
- }
-
- /**
- * Sets the model that provides the tree data.
- *
- * @param model the model
- */
- public void setModel(TreeModel model)
- {
- treeModel = model;
- }
-
- /**
- * Returns the model that provides the tree data.
- *
- * @return the model
- */
- public TreeModel getModel()
- {
- return treeModel;
- }
-
- /**
- * setRootVisible
- *
- * @param visible <code>true</code> if root should be visible,
- * <code>false</code> otherwise
- */
- public void setRootVisible(boolean visible)
- {
- rootVisible = visible;
- }
-
- /**
- * isRootVisible
- *
- * @return <code>true</code> if root is visible,
- * <code>false</code> otherwise
- */
- public boolean isRootVisible()
- {
- return rootVisible;
- }
-
- /**
- * setRowHeight
- *
- * @param height the row height
- */
- public void setRowHeight(int height)
- {
- rowHeight = height;
- }
-
- /**
- * getRowHeight
- *
- * @return the row height
- */
- public int getRowHeight()
- {
- return rowHeight;
- }
-
- /**
- * setSelectionModel
- *
- * @param model the model
- */
- public void setSelectionModel(TreeSelectionModel model)
- {
- treeSelectionModel = model;
- }
-
- /**
- * getSelectionModel
- *
- * @return the model
- */
- public TreeSelectionModel getSelectionModel()
- {
- return treeSelectionModel;
- }
-
- /**
- * getPreferredHeight
- *
- * @return int
- */
- public int getPreferredHeight()
- {
- return 0; // TODO
- }
-
- /**
- * getPreferredWidth
- *
- * @param value0 TODO
- *
- * @return int
- */
- public int getPreferredWidth(Rectangle value0)
- {
- return 0; // TODO
- }
-
- /**
- * isExpanded
- *
- * @param value0 TODO
- *
- * @return boolean
- */
- public abstract boolean isExpanded(TreePath value0);
-
- /**
- * getBounds
- *
- * @param value0 TODO
- * @param value1 TODO
- *
- * @return Rectangle
- */
- public abstract Rectangle getBounds(TreePath value0, Rectangle value1);
-
- /**
- * getPathForRow
- *
- * @param row the row
- *
- * @return the tree path
- */
- public abstract TreePath getPathForRow(int row);
-
- /**
- * getRowForPath
- *
- * @param path the tree path
- *
- * @return the row
- */
- public abstract int getRowForPath(TreePath path);
-
- /**
- * getPathClosestTo
- *
- * @param value0 TODO
- * @param value1 TODO
- *
- * @return the tree path
- */
- public abstract TreePath getPathClosestTo(int value0, int value1);
-
- /**
- * getVisiblePathsFrom
- *
- * @param path the tree path
- *
- * @return Enumeration
- */
- public abstract Enumeration getVisiblePathsFrom(TreePath path);
-
- /**
- * getVisibleChildCount
- *
- * @param path the tree path
- *
- * @return int
- */
- public abstract int getVisibleChildCount(TreePath path);
-
- /**
- * setExpandedState
- *
- * @param value0 TODO
- *
- * @param value1 TODO
- */
- public abstract void setExpandedState(TreePath value0, boolean value1);
-
- /**
- * getExpandedState
- *
- * @param path the tree path
- *
- * @return boolean
- */
- public abstract boolean getExpandedState(TreePath path);
-
- /**
- * getRowCount
- *
- * @return the number of rows
- */
- public abstract int getRowCount();
-
- /**
- * invalidateSizes
- */
- public abstract void invalidateSizes();
-
- /**
- * invalidatePathBounds
- *
- * @param path the tree path
- */
- public abstract void invalidatePathBounds(TreePath path);
-
- /**
- * treeNodesChanged
- *
- * @param event the event to send
- */
- public abstract void treeNodesChanged(TreeModelEvent event);
-
- /**
- * treeNodesInserted
- *
- * @param event the event to send
- */
- public abstract void treeNodesInserted(TreeModelEvent event);
-
- /**
- * treeNodesRemoved
- *
- * @param event the event to send
- */
- public abstract void treeNodesRemoved(TreeModelEvent event);
-
- /**
- * treeStructureChanged
- *
- * @param event the event to send
- */
- public abstract void treeStructureChanged(TreeModelEvent event);
-
- /**
- * getRowsForPaths
- *
- * @param paths the tree paths
- *
- * @return an array of rows
- */
- public int[] getRowsForPaths(TreePath[] paths)
- {
- return null; // TODO
- }
-
- /**
- * isFixedRowHeight
- *
- * @return boolean
- */
- protected boolean isFixedRowHeight()
- {
- return false; // TODO
- }
+ /**
+ * class NodeDimensions
+ */
+ public abstract static class NodeDimensions
+ {
+ /**
+ * Creates <code>NodeDimensions</code> object.
+ */
+ public NodeDimensions()
+ {
+ // Do nothing here.
+ }
+
+ /**
+ * Get the node dimensions. The NodeDimensions property must be set (unless
+ * the method is overridden, like if {@link FixedHeightLayoutCache}. If the
+ * method is not overridden and the property is not set, the InternalError is
+ * thrown.
+ *
+ * @param value the last node in the path
+ * @param row the node row
+ * @param depth the indentation depth
+ * @param expanded true if this node is expanded, false otherwise
+ * @param bounds the area where the tree is displayed
+ */
+ public abstract Rectangle getNodeDimensions(Object value, int row,
+ int depth, boolean expanded,
+ Rectangle bounds);
+ }
+
+ /**
+ * nodeDimensions
+ */
+ protected NodeDimensions nodeDimensions;
+
+ /**
+ * treeModel
+ */
+ protected TreeModel treeModel;
+
+ /**
+ * treeSelectionModel
+ */
+ protected TreeSelectionModel treeSelectionModel;
+
+ /**
+ * rootVisible
+ */
+ protected boolean rootVisible;
+
+ /**
+ * rowHeight
+ */
+ protected int rowHeight;
+
+ /**
+ * Constructor AbstractLayoutCache
+ */
+ public AbstractLayoutCache()
+ {
+ // Do nothing here.
+ }
+
+ /**
+ * setNodeDimensions
+ *
+ * @param dimensions TODO
+ */
+ public void setNodeDimensions(NodeDimensions dimensions)
+ {
+ nodeDimensions = dimensions;
+ }
+
+ /**
+ * getNodeDimensions
+ *
+ * @return NodeDimensions
+ */
+ public NodeDimensions getNodeDimensions()
+ {
+ return nodeDimensions;
+ }
+
+ /**
+ * Get the node dimensions. The NodeDimensions property must be set
+ * (unless the method is overridden, like if
+ * {@link FixedHeightLayoutCache}. If the method is not overridden and
+ * the property is not set, the InternalError is thrown.
+ *
+ * @param value the last node in the path
+ * @param row the node row
+ * @param depth the indentation depth
+ * @param expanded true if this node is expanded, false otherwise
+ * @param bounds the area where the tree is displayed
+ */
+ protected Rectangle getNodeDimensions(Object value, int row, int depth,
+ boolean expanded, Rectangle bounds)
+ {
+ if (nodeDimensions == null)
+ throw new InternalError("The NodeDimensions are not set");
+ return nodeDimensions.getNodeDimensions(value, row, depth, expanded, bounds);
+ }
+
+ /**
+ * Sets the model that provides the tree data.
+ *
+ * @param model the model
+ */
+ public void setModel(TreeModel model)
+ {
+ treeModel = model;
+ }
+
+ /**
+ * Returns the model that provides the tree data.
+ *
+ * @return the model
+ */
+ public TreeModel getModel()
+ {
+ return treeModel;
+ }
+
+ /**
+ * setRootVisible
+ *
+ * @param visible <code>true</code> if root should be visible,
+ * <code>false</code> otherwise
+ */
+ public void setRootVisible(boolean visible)
+ {
+ rootVisible = visible;
+ }
+
+ /**
+ * isRootVisible
+ *
+ * @return <code>true</code> if root is visible,
+ * <code>false</code> otherwise
+ */
+ public boolean isRootVisible()
+ {
+ return rootVisible;
+ }
+
+ /**
+ * setRowHeight
+ *
+ * @param height the row height
+ */
+ public void setRowHeight(int height)
+ {
+ rowHeight = height;
+ invalidateSizes();
+ }
+
+ /**
+ * getRowHeight
+ *
+ * @return the row height
+ */
+ public int getRowHeight()
+ {
+ return rowHeight;
+ }
+
+ /**
+ * setSelectionModel
+ *
+ * @param model the model
+ */
+ public void setSelectionModel(TreeSelectionModel model)
+ {
+ treeSelectionModel = model;
+ }
+
+ /**
+ * getSelectionModel
+ *
+ * @return the model
+ */
+ public TreeSelectionModel getSelectionModel()
+ {
+ return treeSelectionModel;
+ }
+
+ /**
+ * Get the sum of heights for all rows. This class provides a general not
+ * optimized implementation that is overridded in derived classes
+ * ({@link VariableHeightLayoutCache}, {@link FixedHeightLayoutCache}) for
+ * the better performance.
+ */
+ public int getPreferredHeight()
+ {
+ int height = 0;
+ int n = getRowCount();
+ Rectangle r = new Rectangle();
+ for (int i = 0; i < n; i++)
+ {
+ TreePath path = getPathForRow(i);
+ height += getBounds(path, r).height;
+ }
+ return height;
+ }
+
+ /**
+ * Get the maximal width. This class provides a general not
+ * optimized implementation that is overridded in derived classes
+ * ({@link VariableHeightLayoutCache}, {@link FixedHeightLayoutCache}) for
+ * the better performance.
+ *
+ * @param rect the rectangle that is used during the method work
+ */
+ public int getPreferredWidth(Rectangle rect)
+ {
+ int maximalWidth = 0;
+ Rectangle r = new Rectangle();
+ int n = getRowCount();
+ for (int i = 0; i < n; i++)
+ {
+ TreePath path = getPathForRow(i);
+ r.setBounds(0,0,0,0);
+ r = getBounds(path, r);
+ if (r.x + r.width > maximalWidth)
+ maximalWidth = r.x + r.width;
+ // Invalidate the cached value as this may be the very early call
+ // before the heigth is properly set (the vertical coordinate may
+ // not be correct).
+ invalidatePathBounds(path);
+ }
+ return maximalWidth;
+ }
+ /**
+ * isExpanded
+ *
+ * @param value0 TODO
+ *
+ * @return boolean
+ */
+ public abstract boolean isExpanded(TreePath value0);
+
+ /**
+ * getBounds
+ *
+ * @param value0 TODO
+ * @param value1 TODO
+ *
+ * @return Rectangle
+ */
+ public abstract Rectangle getBounds(TreePath value0, Rectangle value1);
+
+ /**
+ * getPathForRow
+ *
+ * @param row the row
+ *
+ * @return the tree path
+ */
+ public abstract TreePath getPathForRow(int row);
+
+ /**
+ * getRowForPath
+ *
+ * @param path the tree path
+ *
+ * @return the row
+ */
+ public abstract int getRowForPath(TreePath path);
+
+ /**
+ * getPathClosestTo
+ *
+ * @param value0 TODO
+ * @param value1 TODO
+ *
+ * @return the tree path
+ */
+ public abstract TreePath getPathClosestTo(int value0, int value1);
+
+ /**
+ * getVisiblePathsFrom
+ *
+ * @param path the tree path
+ *
+ * @return Enumeration
+ */
+ public abstract Enumeration getVisiblePathsFrom(TreePath path);
+
+ /**
+ * getVisibleChildCount
+ *
+ * @param path the tree path
+ *
+ * @return int
+ */
+ public abstract int getVisibleChildCount(TreePath path);
+
+ /**
+ * setExpandedState
+ *
+ * @param value0 TODO
+ *
+ * @param value1 TODO
+ */
+ public abstract void setExpandedState(TreePath value0, boolean value1);
+
+ /**
+ * getExpandedState
+ *
+ * @param path the tree path
+ *
+ * @return boolean
+ */
+ public abstract boolean getExpandedState(TreePath path);
+
+ /**
+ * getRowCount
+ *
+ * @return the number of rows
+ */
+ public abstract int getRowCount();
+
+ /**
+ * invalidateSizes
+ */
+ public abstract void invalidateSizes();
+
+ /**
+ * invalidatePathBounds
+ *
+ * @param path the tree path
+ */
+ public abstract void invalidatePathBounds(TreePath path);
+
+ /**
+ * treeNodesChanged
+ *
+ * @param event the event to send
+ */
+ public abstract void treeNodesChanged(TreeModelEvent event);
+
+ /**
+ * treeNodesInserted
+ *
+ * @param event the event to send
+ */
+ public abstract void treeNodesInserted(TreeModelEvent event);
+
+ /**
+ * treeNodesRemoved
+ *
+ * @param event the event to send
+ */
+ public abstract void treeNodesRemoved(TreeModelEvent event);
+
+ /**
+ * treeStructureChanged
+ *
+ * @param event the event to send
+ */
+ public abstract void treeStructureChanged(TreeModelEvent event);
+
+ /**
+ * Get the tree row numbers for the given pathes. This method performs
+ * the "bulk" conversion that may be faster than mapping pathes one by
+ * one. To have the benefit from the bulk conversion, the method must be
+ * overridden in the derived classes. The default method delegates work
+ * to the {@link #getRowForPath(TreePath)}.
+ *
+ * @param paths the tree paths the array of the tree pathes.
+ * @return the array of the matching tree rows.
+ */
+ public int[] getRowsForPaths(TreePath[] paths)
+ {
+ int[] rows = new int[paths.length];
+ for (int i = 0; i < rows.length; i++)
+ rows[i] = getRowForPath(paths[i]);
+ return rows;
+ }
+
+ /**
+ * Returns true if this layout supposes that all rows have the fixed
+ * height.
+ *
+ * @return boolean true if all rows in the tree must have the fixed
+ * height (false by default).
+ */
+ protected boolean isFixedRowHeight()
+ {
+ return false;
+ }
}
diff --git a/libjava/classpath/javax/swing/tree/DefaultMutableTreeNode.java b/libjava/classpath/javax/swing/tree/DefaultMutableTreeNode.java
index d974772..be8317f 100644
--- a/libjava/classpath/javax/swing/tree/DefaultMutableTreeNode.java
+++ b/libjava/classpath/javax/swing/tree/DefaultMutableTreeNode.java
@@ -1,5 +1,5 @@
/* DefaultMutableTreeNode.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,7 +53,7 @@ import java.util.Vector;
/**
- * DefaultMutableTreeNode
+ * A default implementation of the {@link MutableTreeNode} interface.
*
* @author Andrew Selkirk
* @author Robert Schuster (robertschuster@fsfe.org)
@@ -64,18 +64,19 @@ public class DefaultMutableTreeNode
private static final long serialVersionUID = -4298474751201349152L;
/**
- * EMPTY_ENUMERATION
+ * An empty enumeration, returned by {@link #children()} if a node has no
+ * children.
*/
public static final Enumeration EMPTY_ENUMERATION =
EmptyEnumeration.getInstance();
/**
- * parent
+ * The parent of this node (possibly <code>null</code>).
*/
protected MutableTreeNode parent;
/**
- * children
+ * The child nodes for this node (may be empty).
*/
protected Vector children = new Vector();
@@ -91,7 +92,7 @@ public class DefaultMutableTreeNode
/**
* Creates a <code>DefaultMutableTreeNode</code> object.
- * This node allows to add child nodes.
+ * This is equivalent to <code>DefaultMutableTreeNode(null, true)</code>.
*/
public DefaultMutableTreeNode()
{
@@ -100,9 +101,10 @@ public class DefaultMutableTreeNode
/**
* Creates a <code>DefaultMutableTreeNode</code> object with the given
- * user object attached to it. This node allows to add child nodes.
+ * user object attached to it. This is equivalent to
+ * <code>DefaultMutableTreeNode(userObject, true)</code>.
*
- * @param userObject the user object
+ * @param userObject the user object (<code>null</code> permitted).
*/
public DefaultMutableTreeNode(Object userObject)
{
@@ -113,7 +115,7 @@ public class DefaultMutableTreeNode
* Creates a <code>DefaultMutableTreeNode</code> object with the given
* user object attached to it.
*
- * @param userObject the user object
+ * @param userObject the user object (<code>null</code> permitted).
* @param allowsChildren <code>true</code> if the code allows to add child
* nodes, <code>false</code> otherwise
*/
@@ -124,28 +126,22 @@ public class DefaultMutableTreeNode
}
/**
- * clone
+ * Returns a clone of the node. The clone contains a shallow copy of the
+ * user object, and does not copy the parent node or the child nodes.
*
- * @return Object
+ * @return A clone of the node.
*/
public Object clone()
{
- try
- {
- return super.clone();
- // TODO: Do we need to do more here ?
- }
- catch (CloneNotSupportedException e)
- {
- // This never happens.
- return null;
- }
+ return new DefaultMutableTreeNode(this.userObject, this.allowsChildren);
}
/**
- * Returns a string representation of this node
+ * Returns a string representation of the node. This implementation returns
+ * <code>getUserObject().toString()</code>, or <code>null</code> if there
+ * is no user object.
*
- * @return a human-readable String representing this node
+ * @return A string representation of the node (possibly <code>null</code>).
*/
public String toString()
{
@@ -156,20 +152,30 @@ public class DefaultMutableTreeNode
}
/**
- * Adds a new child node to this node.
+ * Adds a new child node to this node and sets this node as the parent of
+ * the child node. The child node must not be an ancestor of this node.
+ * If the tree uses the {@link DefaultTreeModel}, you must subsequently
+ * call {@link DefaultTreeModel#reload(TreeNode)}.
*
- * @param child the child node
+ * @param child the child node (<code>null</code> not permitted).
*
- * @throws IllegalArgumentException if <code>child</code> is null
- * @throws IllegalStateException if the node does not allow children
+ * @throws IllegalStateException if {@link #getAllowsChildren()} returns
+ * <code>false</code>.
+ * @throws IllegalArgumentException if {@link #isNodeAncestor} returns
+ * <code>true</code>.
+ * @throws IllegalArgumentException if <code>child</code> is
+ * <code>null</code>.
*/
public void add(MutableTreeNode child)
{
+ if (! allowsChildren)
+ throw new IllegalStateException();
+
if (child == null)
throw new IllegalArgumentException();
- if (! allowsChildren)
- throw new IllegalStateException();
+ if (isNodeAncestor(child))
+ throw new IllegalArgumentException("Cannot add ancestor node.");
children.add(child);
child.setParent(this);
@@ -178,7 +184,7 @@ public class DefaultMutableTreeNode
/**
* Returns the parent node of this node.
*
- * @return the parent node
+ * @return The parent node (possibly <code>null</code>).
*/
public TreeNode getParent()
{
@@ -186,23 +192,39 @@ public class DefaultMutableTreeNode
}
/**
- * Removes the child with the given index from this node
+ * Removes the child with the given index from this node.
*
- * @param index the index
+ * @param index the index (in the range <code>0</code> to
+ * <code>getChildCount() - 1</code>).
+ *
+ * @throws ArrayIndexOutOfBoundsException if <code>index</code> is outside
+ * the valid range.
*/
public void remove(int index)
{
- children.remove(index);
+ MutableTreeNode child = (MutableTreeNode) children.remove(index);
+ child.setParent(null);
}
/**
- * Removes the given child from this node.
+ * Removes the given child from this node and sets its parent to
+ * <code>null</code>.
*
- * @param node the child node
+ * @param node the child node (<code>null</code> not permitted).
+ *
+ * @throws IllegalArgumentException if <code>node</code> is not a child of
+ * this node.
+ * @throws IllegalArgumentException if <code>node</code> is null.
*/
public void remove(MutableTreeNode node)
{
+ if (node == null)
+ throw new IllegalArgumentException("Null 'node' argument.");
+ if (node.getParent() != this)
+ throw new IllegalArgumentException(
+ "The given 'node' is not a child of this node.");
children.remove(node);
+ node.setParent(null);
}
/**
@@ -235,11 +257,23 @@ public class DefaultMutableTreeNode
/**
* Inserts given child node at the given index.
*
- * @param node the child node
+ * @param node the child node (<code>null</code> not permitted).
* @param index the index.
+ *
+ * @throws IllegalArgumentException if <code>node</code> is
+ * </code>null</code>.
*/
public void insert(MutableTreeNode node, int index)
{
+ if (! allowsChildren)
+ throw new IllegalStateException();
+
+ if (node == null)
+ throw new IllegalArgumentException("Null 'node' argument.");
+
+ if (isNodeAncestor(node))
+ throw new IllegalArgumentException("Cannot insert ancestor node.");
+
children.insertElementAt(node, index);
}
@@ -300,24 +334,33 @@ public class DefaultMutableTreeNode
}
/**
- * Returns the child index for a given node.
- *
- * @param node this node
- *
- * @return the index
+ * Returns the index of the specified child node, or -1 if the node is not
+ * in fact a child of this node.
+ *
+ * @param node the node (<code>null</code> not permitted).
+ *
+ * @return The index of the specified child node, or -1.
+ *
+ * @throws IllegalArgumentException if <code>node</code> is <code>null</code>.
*/
public int getIndex(TreeNode node)
{
+ if (node == null)
+ throw new IllegalArgumentException("Null 'node' argument.");
return children.indexOf(node);
}
/**
- * setAllowsChildren
+ * Sets the flag that controls whether or not this node allows the addition /
+ * insertion of child nodes. If the flag is set to <code>false</code>, any
+ * existing children are removed.
*
- * @param allowsChildren TODO
+ * @param allowsChildren the flag.
*/
public void setAllowsChildren(boolean allowsChildren)
{
+ if (!allowsChildren)
+ removeAllChildren();
this.allowsChildren = allowsChildren;
}
@@ -366,15 +409,24 @@ public class DefaultMutableTreeNode
*/
public void removeAllChildren()
{
- children.removeAllElements();
+ for (int i = getChildCount() - 1; i >= 0; i--)
+ remove(i);
}
/**
- * isNodeAncestor
- *
- * @param node TODO
- *
- * @return boolean
+ * Returns <code>true</code> if <code>node</code> is an ancestor of this
+ * tree node, and <code>false</code> otherwise. An ancestor node is any of:
+ * <ul>
+ * <li>this tree node;</li>
+ * <li>the parent node (if there is one);</li>
+ * <li>any ancestor of the parent node;</li>
+ * </ul>
+ * If <code>node</code> is <code>null</code>, this method returns
+ * <code>false</code>.
+ *
+ * @param node the node (<code>null</code> permitted).
+ *
+ * @return A boolean.
*/
public boolean isNodeAncestor(TreeNode node)
{
@@ -383,19 +435,26 @@ public class DefaultMutableTreeNode
TreeNode current = this;
- while (current != null
- && current != node)
+ while (current != null && current != node)
current = current.getParent();
return current == node;
}
/**
- * isNodeDescendant
- *
- * @param node TODO
- *
- * @return boolean
+ * Returns <code>true</code> if <code>node</code> is a descendant of this
+ * tree node, and <code>false</code> otherwise. A descendant node is any of:
+ * <ul>
+ * <li>this tree node;</li>
+ * <li>the child nodes belonging to this tree node, if there are any;</li>
+ * <li>any descendants of the child nodes;</li>
+ * </ul>
+ * If <code>node</code> is <code>null</code>, this method returns
+ * <code>false</code>.
+ *
+ * @param node the node (<code>null</code> permitted).
+ *
+ * @return A boolean.
*/
public boolean isNodeDescendant(DefaultMutableTreeNode node)
{
@@ -722,11 +781,13 @@ public class DefaultMutableTreeNode
}
/**
- * isNodeChild
+ * Returns <code>true</code> if <code>node</code> is a child of this tree
+ * node, and <code>false</code> otherwise. If <code>node</code> is
+ * <code>null</code>, this method returns <code>false</code>.
*
- * @param node TODO
+ * @param node the node (<code>null</code> permitted).
*
- * @return boolean
+ * @return A boolean.
*/
public boolean isNodeChild(TreeNode node)
{
@@ -737,9 +798,11 @@ public class DefaultMutableTreeNode
}
/**
- * getFirstChild
+ * Returns the first child node belonging to this tree node.
*
- * @return TreeNode
+ * @return The first child node.
+ *
+ * @throws NoSuchElementException if this tree node has no children.
*/
public TreeNode getFirstChild()
{
@@ -747,9 +810,11 @@ public class DefaultMutableTreeNode
}
/**
- * getLastChild
+ * Returns the last child node belonging to this tree node.
*
- * @return TreeNode
+ * @return The last child node.
+ *
+ * @throws NoSuchElementException if this tree node has no children.
*/
public TreeNode getLastChild()
{
@@ -757,16 +822,20 @@ public class DefaultMutableTreeNode
}
/**
- * getChildAfter
+ * Returns the next child after the specified <code>node</code>, or
+ * <code>null</code> if there is no child after the specified
+ * <code>node</code>.
*
- * @param node TODO
+ * @param node a child of this node (<code>null</code> not permitted).
*
- * @return TreeNode
+ * @return The next child, or <code>null</code>.
+ *
+ * @throws IllegalArgumentException if <code>node</code> is not a child of
+ * this node, or is <code>null</code>.
*/
public TreeNode getChildAfter(TreeNode node)
{
- if (node == null
- || node.getParent() != this)
+ if (node == null || node.getParent() != this)
throw new IllegalArgumentException();
int index = getIndex(node) + 1;
@@ -778,16 +847,20 @@ public class DefaultMutableTreeNode
}
/**
- * getChildBefore
+ * Returns the previous child before the specified <code>node</code>, or
+ * <code>null</code> if there is no child before the specified
+ * <code>node</code>.
*
- * @param node TODO
+ * @param node a child of this node (<code>null</code> not permitted).
*
- * @return TreeNode
+ * @return The previous child, or <code>null</code>.
+ *
+ * @throws IllegalArgumentException if <code>node</code> is not a child of
+ * this node, or is <code>null</code>.
*/
public TreeNode getChildBefore(TreeNode node)
{
- if (node == null
- || node.getParent() != this)
+ if (node == null || node.getParent() != this)
throw new IllegalArgumentException();
int index = getIndex(node) - 1;
@@ -799,25 +872,31 @@ public class DefaultMutableTreeNode
}
/**
- * isNodeSibling
+ * Returns <code>true</code> if this tree node and <code>node</code> share
+ * the same parent. If <code>node</code> is this tree node, the method
+ * returns <code>true</code> and if <code>node</code> is <code>null</code>
+ * this method returns <code>false</code>.
*
- * @param node TODO
+ * @param node the node (<code>null</code> permitted).
*
- * @return boolean
+ * @return A boolean.
*/
public boolean isNodeSibling(TreeNode node)
{
if (node == null)
return false;
-
+ if (node == this)
+ return true;
return (node.getParent() == getParent()
&& getParent() != null);
}
/**
- * getSiblingCount
+ * Returns the number of siblings for this tree node. If the tree node has
+ * a parent, this method returns the child count for the parent, otherwise
+ * it returns <code>1</code>.
*
- * @return int
+ * @return The sibling count.
*/
public int getSiblingCount()
{
@@ -828,9 +907,11 @@ public class DefaultMutableTreeNode
}
/**
- * getNextSibling
+ * Returns the next sibling for this tree node. If this node has no parent,
+ * or this node is the last child of its parent, this method returns
+ * <code>null</code>.
*
- * @return DefaultMutableTreeNode
+ * @return The next sibling, or <code>null</code>.
*/
public DefaultMutableTreeNode getNextSibling()
{
@@ -846,9 +927,11 @@ public class DefaultMutableTreeNode
}
/**
- * getPreviousSibling
+ * Returns the previous sibling for this tree node. If this node has no
+ * parent, or this node is the first child of its parent, this method returns
+ * <code>null</code>.
*
- * @return DefaultMutableTreeNode
+ * @return The previous sibling, or <code>null</code>.
*/
public DefaultMutableTreeNode getPreviousSibling()
{
@@ -864,9 +947,10 @@ public class DefaultMutableTreeNode
}
/**
- * isLeaf
+ * Returns <code>true</code> if this tree node is a lead node (that is, it
+ * has no children), and <code>false</otherwise>.
*
- * @return boolean
+ * @return A boolean.
*/
public boolean isLeaf()
{
@@ -874,9 +958,11 @@ public class DefaultMutableTreeNode
}
/**
- * getFirstLeaf
+ * Returns the first leaf node that is a descendant of this node. Recall
+ * that a node is its own descendant, so if this node has no children then
+ * it is returned as the first leaf.
*
- * @return DefaultMutableTreeNode
+ * @return The first leaf node.
*/
public DefaultMutableTreeNode getFirstLeaf()
{
@@ -889,9 +975,11 @@ public class DefaultMutableTreeNode
}
/**
- * getLastLeaf
+ * Returns the last leaf node that is a descendant of this node. Recall
+ * that a node is its own descendant, so if this node has no children then
+ * it is returned as the last leaf.
*
- * @return DefaultMutableTreeNode
+ * @return The first leaf node.
*/
public DefaultMutableTreeNode getLastLeaf()
{
@@ -908,33 +996,37 @@ public class DefaultMutableTreeNode
}
/**
- * getNextLeaf
+ * Returns the next leaf node after this tree node.
*
- * @return DefaultMutableTreeNode
+ * @return The next leaf node, or <code>null</code>.
*/
public DefaultMutableTreeNode getNextLeaf()
{
- if (parent == null)
- return null;
-
- // TODO: Fix implementation.
+ // if there is a next sibling, return its first leaf
+ DefaultMutableTreeNode sibling = getNextSibling();
+ if (sibling != null)
+ return sibling.getFirstLeaf();
+ // otherwise move up one level and try again...
+ if (parent != null)
+ return ((DefaultMutableTreeNode) parent).getNextLeaf();
return null;
- //return parent.getChildAfter(this);
}
/**
- * getPreviousLeaf
+ * Returns the previous leaf node before this tree node.
*
- * @return DefaultMutableTreeNode
+ * @return The previous leaf node, or <code>null</code>.
*/
public DefaultMutableTreeNode getPreviousLeaf()
{
- if (parent == null)
- return null;
-
- // TODO: Fix implementation.
+ // if there is a previous sibling, return its last leaf
+ DefaultMutableTreeNode sibling = getPreviousSibling();
+ if (sibling != null)
+ return sibling.getLastLeaf();
+ // otherwise move up one level and try again...
+ if (parent != null)
+ return ((DefaultMutableTreeNode) parent).getPreviousLeaf();
return null;
- //return parent.getChildBefore(this);
}
/**
diff --git a/libjava/classpath/javax/swing/tree/DefaultTreeCellEditor.java b/libjava/classpath/javax/swing/tree/DefaultTreeCellEditor.java
index e28c926..cc19501 100644
--- a/libjava/classpath/javax/swing/tree/DefaultTreeCellEditor.java
+++ b/libjava/classpath/javax/swing/tree/DefaultTreeCellEditor.java
@@ -77,17 +77,6 @@ public class DefaultTreeCellEditor
implements ActionListener, TreeCellEditor, TreeSelectionListener
{
/**
- * The gap between the icon and editing component during editing.
- */
- static int ICON_TEXT_GAP = 3;
-
- /**
- * The left margin of the editing container (the gap between the tree and
- * the editing component of the editing icon.
- */
- static int TREE_ICON_GAP = ICON_TEXT_GAP;
-
- /**
* The number of the fast mouse clicks, required to start the editing
* session.
*/
@@ -141,7 +130,7 @@ public class DefaultTreeCellEditor
{
// From the previous version, the left margin is taken as half
// of the icon width.
- editingIcon.paintIcon(this, g, TREE_ICON_GAP, 0);
+ editingIcon.paintIcon(this, g, 0, 0);
}
super.paint(g);
}
@@ -157,7 +146,7 @@ public class DefaultTreeCellEditor
// Move the component to the left, leaving room for the editing icon:
if (editingIcon != null)
- eOffset = TREE_ICON_GAP + editingIcon.getIconWidth() + ICON_TEXT_GAP;
+ eOffset = editingIcon.getIconWidth();
else
eOffset = 0;
@@ -166,7 +155,7 @@ public class DefaultTreeCellEditor
c.setLocation(eOffset, 0);
// Span the editing component near over all window width.
- c.setSize(bounds.width - eOffset - TREE_ICON_GAP, bounds.height);
+ c.setSize(bounds.width - eOffset, bounds.height);
/*
* @specnote the Sun sets some more narrow editing component width (it is
* not documented how does it is calculated). However as our text field is
@@ -542,7 +531,8 @@ public class DefaultTreeCellEditor
* If the realEditor returns true to this message, prepareForEditing
* is messaged and true is returned.
*
- * @param event - the event the editor should use to consider whether to begin editing or not
+ * @param event - the event the editor should use to consider whether to
+ * begin editing or not
* @return true if editing can be started
*/
public boolean isCellEditable(EventObject event)
diff --git a/libjava/classpath/javax/swing/tree/DefaultTreeCellRenderer.java b/libjava/classpath/javax/swing/tree/DefaultTreeCellRenderer.java
index df70ba7..5e93145 100644
--- a/libjava/classpath/javax/swing/tree/DefaultTreeCellRenderer.java
+++ b/libjava/classpath/javax/swing/tree/DefaultTreeCellRenderer.java
@@ -407,7 +407,7 @@ public class DefaultTreeCellRenderer
this.hasFocus = hasFocus;
setHorizontalAlignment(LEFT);
setOpaque(false);
- setVerticalAlignment(TOP);
+ setVerticalAlignment(CENTER);
setEnabled(true);
super.setFont(UIManager.getFont("Tree.font"));
@@ -445,8 +445,7 @@ public class DefaultTreeCellRenderer
/**
* Paints the value. The background is filled based on selected.
*
- * @param g
- * the graphics device.
+ * @param g the graphics device.
*/
public void paint(Graphics g)
{
@@ -468,17 +467,27 @@ public class DefaultTreeCellRenderer
getHorizontalTextPosition(), vr, ir, tr,
getIconTextGap());
+ // Reusing one rectangle.
+ Rectangle bounds = getBounds(ir);
+
+ bounds.x = tr.x - insets.left;
+ bounds.width = tr.width + insets.left+insets.right;
+
g.setColor(super.getBackground());
- g.fillRect(tr.x, tr.y, tr.width, tr.height - insets.top - insets.bottom);
+ g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
- // paint border
- Color b = getBorderSelectionColor();
- if (b != null)
+ super.paint(g);
+
+ // Paint the border of the focused element only (lead selection)
+ if (hasFocus)
{
- g.setColor(b);
- g.drawRect(tr.x, tr.y, tr.width, tr.height - insets.top - insets.bottom);
+ Color b = getBorderSelectionColor();
+ if (b != null)
+ {
+ g.setColor(b);
+ g.drawRect(bounds.x, bounds.y, bounds.width, bounds.height - 1);
+ }
}
- super.paint(g);
}
/**
diff --git a/libjava/classpath/javax/swing/tree/DefaultTreeModel.java b/libjava/classpath/javax/swing/tree/DefaultTreeModel.java
index 818f548..c1ca679 100644
--- a/libjava/classpath/javax/swing/tree/DefaultTreeModel.java
+++ b/libjava/classpath/javax/swing/tree/DefaultTreeModel.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package javax.swing.tree;
+import gnu.classpath.NotImplementedException;
+
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
@@ -46,7 +48,6 @@ import java.util.EventListener;
import javax.swing.event.EventListenerList;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
-import javax.swing.tree.DefaultMutableTreeNode;
/**
* DefaultTreeModel
@@ -74,26 +75,29 @@ public class DefaultTreeModel
protected boolean asksAllowsChildren;
/**
- * Constructor DefaultTreeModel
+ * Constructor DefaultTreeModel where any node can have children.
*
* @param root the tree root.
*/
public DefaultTreeModel(TreeNode root)
{
- if (root == null)
- root = new DefaultMutableTreeNode();
- setRoot(root);
+ this (root, false);
}
/**
- * Constructor DefaultTreeModel
+ * Create the DefaultTreeModel that may check if the nodes can have
+ * children or not.
*
- * @param root the tree root.
- * @param asksAllowsChildren TODO
+ * @param aRoot the tree root.
+ * @param asksAllowsChildren if true, each node is asked if it can have
+ * children. If false, the model does not care about this, supposing, that
+ * any node can have children.
*/
- public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren)
+ public DefaultTreeModel(TreeNode aRoot, boolean asksAllowsChildren)
{
- setRoot(root);
+ if (aRoot == null)
+ aRoot = new DefaultMutableTreeNode();
+ this.root = aRoot;
this.asksAllowsChildren = asksAllowsChildren;
}
@@ -222,25 +226,60 @@ public class DefaultTreeModel
}
/**
- * Invoke this method if you've modified the TreeNodes upon
- * which this model depends. The model will notify all of its
- * listeners that the model has changed.
+ * <p>
+ * Invoke this method if you've modified the TreeNodes upon which this model
+ * depends. The model will notify all of its listeners that the model has
+ * changed. It will fire the events, necessary to update the layout caches and
+ * repaint the tree. The tree will <i>not</i> be properly refreshed if you
+ * call the JTree.repaint instead.
+ * </p>
+ * <p>
+ * This method will refresh the information about whole tree from the root. If
+ * only part of the tree should be refreshed, it is more effective to call
+ * {@link #reload(TreeNode)}.
+ * </p>
*/
public void reload()
{
- // TODO
+ // Need to duplicate the code because the root can formally be
+ // no an instance of the TreeNode.
+ int n = getChildCount(root);
+ int[] childIdx = new int[n];
+ Object[] children = new Object[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ childIdx[i] = i;
+ children[i] = getChild(root, i);
+ }
+
+ fireTreeStructureChanged(this, new Object[] { root }, childIdx, children);
}
/**
- * Invoke this method if you've modified the TreeNodes upon
- * which this model depends. The model will notify all of its
- * listeners that the model has changed.
+ * Invoke this method if you've modified the TreeNodes upon which this model
+ * depends. The model will notify all of its listeners that the model has
+ * changed. It will fire the events, necessary to update the layout caches and
+ * repaint the tree. The tree will <i>not</i> be properly refreshed if you
+ * call the JTree.repaint instead.
*
- * @param node - TODO
+ * @param node - the tree node, from which the tree nodes have changed
+ * (inclusive). If you do not know this node, call {@link #reload()}
+ * instead.
*/
public void reload(TreeNode node)
{
- // TODO
+ int n = getChildCount(node);
+ int[] childIdx = new int[n];
+ Object[] children = new Object[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ childIdx[i] = i;
+ children[i] = getChild(node, i);
+ }
+
+ fireTreeStructureChanged(this, getPathToRoot(node), childIdx, children);
}
/**
@@ -390,7 +429,17 @@ public class DefaultTreeModel
*/
public void nodeStructureChanged(TreeNode node)
{
- // TODO
+ int n = getChildCount(root);
+ int[] childIdx = new int[n];
+ Object[] children = new Object[n];
+
+ for (int i = 0; i < n; i++)
+ {
+ childIdx[i] = i;
+ children[i] = getChild(root, i);
+ }
+
+ fireTreeStructureChanged(this, new Object[] { root }, childIdx, children);
}
/**
diff --git a/libjava/classpath/javax/swing/tree/DefaultTreeSelectionModel.java b/libjava/classpath/javax/swing/tree/DefaultTreeSelectionModel.java
index de27dad..0676f7e 100644
--- a/libjava/classpath/javax/swing/tree/DefaultTreeSelectionModel.java
+++ b/libjava/classpath/javax/swing/tree/DefaultTreeSelectionModel.java
@@ -1,5 +1,5 @@
/* DefaultTreeSelectionModel.java
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,6 +35,7 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package javax.swing.tree;
import java.beans.PropertyChangeListener;
@@ -42,7 +43,10 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import java.util.Arrays;
import java.util.EventListener;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.Vector;
import javax.swing.DefaultListSelectionModel;
@@ -52,703 +56,968 @@ import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
/**
- * DefaultTreeSelectionModel
+ * The implementation of the default tree selection model. The installed
+ * listeners are notified about the path and not the row changes. If you
+ * specifically need to track the row changes, register the listener for the
+ * expansion events.
*
* @author Andrew Selkirk
+ * @author Audrius Meskauskas
*/
public class DefaultTreeSelectionModel
- implements Cloneable, Serializable, TreeSelectionModel
+ implements Cloneable, Serializable, TreeSelectionModel
{
- static final long serialVersionUID = 3288129636638950196L;
-
- /**
- * SELECTION_MODE_PROPERTY
- */
- public static final String SELECTION_MODE_PROPERTY = "selectionMode";
-
- /**
- * Our Swing property change support.
- */
- protected SwingPropertyChangeSupport changeSupport;
-
- /**
- * The current selection.
- */
- protected TreePath[] selection;
-
- /**
- * Our TreeSelectionListeners.
- */
- protected EventListenerList listenerList;
-
- /**
- * The current RowMapper.
- */
- protected transient RowMapper rowMapper;
-
- /**
- * The current listSelectionModel.
- */
- protected DefaultListSelectionModel listSelectionModel;
-
- /**
- * The current selection mode.
- */
- protected int selectionMode;
-
- /**
- * The path that has been added last.
- */
- protected TreePath leadPath;
-
- /**
- * The index of the last added path.
- */
- protected int leadIndex;
-
- /**
- * The row of the last added path according to the RowMapper.
- */
- protected int leadRow;
-
- /**
- * Constructs a new DefaultTreeSelectionModel.
- */
- public DefaultTreeSelectionModel()
- {
- setSelectionMode(DISCONTIGUOUS_TREE_SELECTION);
- listenerList = new EventListenerList();
- }
-
- /**
- * Creates a clone of this DefaultTreeSelectionModel with the same
- * selection.
- *
- * @exception CloneNotSupportedException should not be thrown here
- *
- * @return a clone of this DefaultTreeSelectionModel
- */
- public Object clone() throws CloneNotSupportedException
- {
- return null; // TODO
- }
-
- /**
- * Returns a string that shows this object's properties.
- *
- * @return a string that shows this object's properties
- */
- public String toString()
- {
- return null; // TODO
- }
-
- /**
- * writeObject
- *
- * @param value0 TODO
- * @exception IOException TODO
- */
- private void writeObject(ObjectOutputStream value0) throws IOException
- {
- // TODO
- }
-
- /**
- * readObject
- *
- * @param value0 TODO
- * @exception IOException TODO
- * @exception ClassNotFoundException TODO
- */
- private void readObject(ObjectInputStream value0) throws IOException,
- ClassNotFoundException
- {
- // TODO
- }
-
- /**
- * Sets the RowMapper that should be used to map between paths and their
- * rows.
- *
- * @param rowMapper the RowMapper to set
- *
- * @see RowMapper
- */
- public void setRowMapper(RowMapper rowMapper)
- {
- // TODO
- }
-
- /**
- * Returns the RowMapper that is currently used to map between paths and
- * their rows.
- *
- * @return the current RowMapper
- *
- * @see RowMapper
- */
- public RowMapper getRowMapper()
- {
- return rowMapper;
- }
-
- /**
- * Sets the current selection mode. Possible values are
- * {@link #SINGLE_TREE_SELECTION}, {@link #CONTIGUOUS_TREE_SELECTION} and
- * {@link #DISCONTIGUOUS_TREE_SELECTION}.
- *
- * @param mode the selection mode to be set
- *
- * @see #getSelectionMode
- * @see #SINGLE_TREE_SELECTION
- * @see #CONTIGUOUS_TREE_SELECTION
- * @see #DISCONTIGUOUS_TREE_SELECTION
- */
- public void setSelectionMode(int mode)
- {
- selectionMode = mode;
- }
-
- /**
- * Returns the current selection mode.
- *
- * @return the current selection mode
- *
- * @see #setSelectionMode
- * @see #SINGLE_TREE_SELECTION
- * @see #CONTIGUOUS_TREE_SELECTION
- * @see #DISCONTIGUOUS_TREE_SELECTION
- */
- public int getSelectionMode()
- {
- return selectionMode;
- }
-
- /**
- * Sets this path as the only selection.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param path the path to set as selection
- */
- public void setSelectionPath(TreePath path)
- {
- selection = new TreePath[] {
- path };
- }
-
- /**
- * Sets the paths as selection. This method checks for duplicates and
- * removes them.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param paths the paths to set as selection
- */
- public void setSelectionPaths(TreePath[] paths)
- {
- // TODO
- }
-
- /**
- * Adds a path to the list of selected paths. This method checks if the path
- * is already selected and doesn't add the same path twice.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param path the path to add to the selection
- */
- public void addSelectionPath(TreePath path)
- {
- if (!isPathSelected(path))
- {
- if (isSelectionEmpty())
- setSelectionPath(path);
- else
- {
- TreePath[] temp = new TreePath[selection.length + 1];
- System.arraycopy(selection, 0, temp, 0, selection.length);
- temp[temp.length - 1] = path;
- selection = new TreePath[temp.length];
- System.arraycopy(temp, 0, selection, 0, temp.length);
- }
- leadPath = path;
- fireValueChanged(new TreeSelectionEvent(this, path, true,
- leadPath, path));
- }
- }
-
- /**
- * Adds the paths to the list of selected paths. This method checks if the
- * paths are already selected and doesn't add the same path twice.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param paths the paths to add to the selection
- */
- public void addSelectionPaths(TreePath[] paths)
- {
- if (paths != null)
- {
- TreePath v0 = null;
- for (int i = 0; i < paths.length; i++)
- {
- v0 = paths[i];
- if (!isPathSelected(v0))
- {
- if (isSelectionEmpty())
- setSelectionPath(v0);
- else
- {
- TreePath[] temp = new TreePath[selection.length + 1];
- System.arraycopy(selection, 0, temp, 0,
- selection.length);
- temp[temp.length - 1] = v0;
- selection = new TreePath[temp.length];
- System.arraycopy(temp, 0, selection, 0, temp.length);
- }
- leadPath = paths[paths.length - 1];
- fireValueChanged(new TreeSelectionEvent(this, v0, true,
- leadPath, paths[0]));
- }
- }
- }
- }
-
- /**
- * Removes the path from the selection.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param path the path to remove
- */
- public void removeSelectionPath(TreePath path)
- {
- int index = -1;
- if (isPathSelected(path))
- {
- for (int i = 0; i < selection.length; i++)
- {
- if (selection[i].equals(path))
- {
- index = i;
- break;
- }
- }
- TreePath[] temp = new TreePath[selection.length - 1];
- System.arraycopy(selection, 0, temp, 0, index);
- System.arraycopy(selection, index + 1, temp, index,
- selection.length - index - 1);
- selection = new TreePath[temp.length];
- System.arraycopy(temp, 0, selection, 0, temp.length);
-
- fireValueChanged(new TreeSelectionEvent(this, path, false,
- leadPath, path));
- }
- }
-
- /**
- * Removes the paths from the selection.
- *
- * If this changes the selection the registered TreeSelectionListeners are
- * notified.
- *
- * @param paths the paths to remove
- */
- public void removeSelectionPaths(TreePath[] paths)
- {
- if (paths != null)
- {
- int index = -1;
- TreePath v0 = null;
- for (int i = 0; i < paths.length; i++)
- {
- v0 = paths[i];
- if (isPathSelected(v0))
- {
- for (int x = 0; x < selection.length; x++)
- {
- if (selection[i].equals(v0))
- {
- index = x;
- break;
- }
- }
- TreePath[] temp = new TreePath[selection.length - 1];
- System.arraycopy(selection, 0, temp, 0, index);
- System.arraycopy(selection, index + 1, temp, index,
- selection.length - index - 1);
- selection = new TreePath[temp.length];
- System.arraycopy(temp, 0, selection, 0, temp.length);
-
- fireValueChanged(new TreeSelectionEvent(this, v0, false,
- leadPath, paths[0]));
- }
- }
- }
- }
-
- /**
- * Returns the first path in the selection. This is especially useful when
- * the selectionMode is {@link #SINGLE_TREE_SELECTION}.
- *
- * @return the first path in the selection
- */
- public TreePath getSelectionPath()
- {
- if ((selection == null) || (selection.length == 0))
- return null;
- else
- return selection[0];
- }
-
- /**
- * Returns the complete selection.
- *
- * @return the complete selection
- */
- public TreePath[] getSelectionPaths()
- {
- return selection;
- }
-
- /**
- * Returns the number of paths in the selection.
- *
- * @return the number of paths in the selection
- */
- public int getSelectionCount()
- {
- if (selection == null)
- return 0;
- else
- return selection.length;
- }
-
- /**
- * Checks if a given path is in the selection.
- *
- * @param path the path to check
- *
- * @return <code>true</code> if the path is in the selection,
- * <code>false</code> otherwise
- */
- public boolean isPathSelected(TreePath path)
- {
- if (selection == null)
- return false;
-
- for (int i = 0; i < selection.length; i++)
- {
- if (selection[i].equals(path))
- return true;
- }
- return false;
- }
-
- /**
- * Checks if the selection is empty.
- *
- * @return <code>true</code> if the selection is empty, <code>false</code>
- * otherwise
- */
- public boolean isSelectionEmpty()
- {
- return ((selection == null) || (selection.length == 0));
- }
-
- /**
- * Removes all paths from the selection.
- */
- public void clearSelection()
- {
- leadPath = null;
- selection = null;
- }
-
- /**
- * Adds a <code>TreeSelectionListener</code> object to this model.
- *
- * @param listener the listener to add
- */
- public void addTreeSelectionListener(TreeSelectionListener listener)
- {
- listenerList.add(TreeSelectionListener.class, listener);
- }
-
- /**
- * Removes a <code>TreeSelectionListener</code> object from this model.
- *
- * @param listener the listener to remove
- */
- public void removeTreeSelectionListener(TreeSelectionListener listener)
- {
- listenerList.remove(TreeSelectionListener.class, listener);
- }
-
- /**
- * Returns all <code>TreeSelectionListener</code> added to this model.
- *
- * @return an array of listeners
- *
- * @since 1.4
- */
- public TreeSelectionListener[] getTreeSelectionListeners()
- {
- return (TreeSelectionListener[])
- getListeners(TreeSelectionListener.class);
- }
-
- /**
- * fireValueChanged
- *
- * @param event the event to fire.
- */
- protected void fireValueChanged(TreeSelectionEvent event)
- {
- TreeSelectionListener[] listeners = getTreeSelectionListeners();
-
- for (int i = 0; i < listeners.length; ++i)
- listeners[i].valueChanged(event);
- }
-
- /**
- * Returns all added listeners of a special type.
- *
- * @param listenerType the listener type
- *
- * @return an array of listeners
- *
- * @since 1.3
- */
- public EventListener[] getListeners(Class listenerType)
- {
- return listenerList.getListeners(listenerType);
- }
-
- /**
- * Returns the currently selected rows.
- *
- * @return the currently selected rows
- */
- public int[] getSelectionRows()
- {
- if (rowMapper == null)
- return null;
- else
- return rowMapper.getRowsForPaths(selection);
- }
-
- /**
- * Returns the smallest row index from the selection.
- *
- * @return the smallest row index from the selection
- */
- public int getMinSelectionRow()
- {
- if ((rowMapper == null) || (selection == null)
- || (selection.length == 0))
- return -1;
- else
- {
- int[] rows = rowMapper.getRowsForPaths(selection);
- int minRow = Integer.MAX_VALUE;
- for (int index = 0; index < rows.length; index++)
- minRow = Math.min(minRow, rows[index]);
- return minRow;
- }
- }
-
- /**
- * Returns the largest row index from the selection.
- *
- * @return the largest row index from the selection
- */
- public int getMaxSelectionRow()
- {
- if ((rowMapper == null) || (selection == null)
- || (selection.length == 0))
- return -1;
- else
- {
- int[] rows = rowMapper.getRowsForPaths(selection);
- int maxRow = -1;
- for (int index = 0; index < rows.length; index++)
- maxRow = Math.max(maxRow, rows[index]);
- return maxRow;
- }
- }
-
- /**
- * Checks if a particular row is selected.
- *
- * @param row the index of the row to check
- *
- * @return <code>true</code> if the row is in this selection,
- * <code>false</code> otherwise
- */
- public boolean isRowSelected(int row)
- {
- return false; // TODO
- }
-
- /**
- * Updates the mappings from TreePaths to row indices.
- */
- public void resetRowSelection()
- {
- // TODO
- }
-
- /**
- * getLeadSelectionRow
- *
- * @return int
- */
- public int getLeadSelectionRow()
- {
- if ((rowMapper == null) || (leadPath == null))
- return -1;
- else
- return rowMapper.getRowsForPaths(new TreePath[] {
- leadPath })[0];
- }
-
- /**
- * getLeadSelectionPath
- *
- * @return TreePath
- */
- public TreePath getLeadSelectionPath()
- {
- return leadPath;
- }
-
- /**
- * Adds a <code>PropertyChangeListener</code> object to this model.
- *
- * @param listener the listener to add.
- */
- public void addPropertyChangeListener(PropertyChangeListener listener)
- {
- changeSupport.addPropertyChangeListener(listener);
- }
-
- /**
- * Removes a <code>PropertyChangeListener</code> object from this model.
- *
- * @param listener the listener to remove.
- */
- public void removePropertyChangeListener(PropertyChangeListener listener)
- {
- changeSupport.removePropertyChangeListener(listener);
- }
-
- /**
- * Returns all added <code>PropertyChangeListener</code> objects.
- *
- * @return an array of listeners.
- *
- * @since 1.4
- */
- public PropertyChangeListener[] getPropertyChangeListeners()
- {
- return changeSupport.getPropertyChangeListeners();
- }
-
- /**
- * Makes sure the currently selected paths are valid according to the
- * current selectionMode.
- *
- * If the selectionMode is set to {@link #CONTIGUOUS_TREE_SELECTION} and the
- * selection isn't contiguous then the selection is reset to the first set
- * of contguous paths.
- *
- * If the selectionMode is set to {@link #SINGLE_TREE_SELECTION} and the
- * selection has more than one path, the selection is reset to the contain
- * only the first path.
- */
- protected void insureRowContinuity()
- {
- // TODO
- }
-
- /**
- * Returns <code>true</code> if the paths are contiguous or we have no
- * RowMapper assigned.
- *
- * @param paths the paths to check for continuity
- * @return <code>true</code> if the paths are contiguous or we have no
- * RowMapper assigned
- */
- protected boolean arePathsContiguous(TreePath[] paths)
- {
- return false; // TODO
- }
-
- /**
- * Checks if the paths can be added. This returns <code>true</code> if:
- * <ul>
- * <li><code>paths</code> is <code>null</code> or empty</li>
- * <li>we have no RowMapper assigned</li>
- * <li>nothing is currently selected</li>
- * <li>selectionMode is {@link #DISCONTIGUOUS_TREE_SELECTION}</li>
- * <li>adding the paths to the selection still results in a contiguous set
- * of paths</li>
- *
- * @param paths the paths to check
- *
- * @return <code>true</code> if the paths can be added with respect to the
- * selectionMode
- */
- protected boolean canPathsBeAdded(TreePath[] paths)
- {
- return false; // TODO
- }
-
- /**
- * Checks if the paths can be removed without breaking the continuity of the
- * selection according to selectionMode.
- *
- * @param paths the paths to check
- * @return <code>true</code> if the paths can be removed with respect to
- * the selectionMode
- */
- protected boolean canPathsBeRemoved(TreePath[] paths)
- {
- return false; // TODO
- }
-
- /**
- * notifyPathChange
- *
- * @param value0 TODO
- * @param value1 TODO
- */
- protected void notifyPathChange(Vector value0, TreePath value1)
- {
- // TODO
- }
-
- /**
- * Updates the lead index instance field.
- */
- protected void updateLeadIndex()
- {
- // TODO
- }
-
- /**
- * Deprecated and not used.
- */
- protected void insureUniqueness()
- {
- // TODO
- }
+
+ /**
+ * Use serialVersionUID for interoperability.
+ */
+ static final long serialVersionUID = 3288129636638950196L;
+
+ /**
+ * The name of the selection mode property.
+ */
+ public static final String SELECTION_MODE_PROPERTY = "selectionMode";
+
+ /**
+ * Our Swing property change support.
+ */
+ protected SwingPropertyChangeSupport changeSupport;
+
+ /**
+ * The current selection.
+ */
+ protected TreePath[] selection;
+
+ /**
+ * Our TreeSelectionListeners.
+ */
+ protected EventListenerList listenerList;
+
+ /**
+ * The current RowMapper.
+ */
+ protected transient RowMapper rowMapper;
+
+ /**
+ * The current listSelectionModel.
+ */
+ protected DefaultListSelectionModel listSelectionModel;
+
+ /**
+ * The current selection mode.
+ */
+ protected int selectionMode;
+
+ /**
+ * The path that has been added last.
+ */
+ protected TreePath leadPath;
+
+ /**
+ * The index of the last added path.
+ */
+ protected int leadIndex;
+
+ /**
+ * The row of the last added path according to the RowMapper.
+ */
+ protected int leadRow = -1;
+
+ /**
+ * Constructs a new DefaultTreeSelectionModel.
+ */
+ public DefaultTreeSelectionModel()
+ {
+ setSelectionMode(DISCONTIGUOUS_TREE_SELECTION);
+ listenerList = new EventListenerList();
+ }
+
+ /**
+ * Creates a clone of this DefaultTreeSelectionModel with the same selection.
+ * The cloned instance will have the same registered listeners, the listeners
+ * themselves will not be cloned. The selection will be cloned.
+ *
+ * @exception CloneNotSupportedException should not be thrown here
+ * @return a copy of this DefaultTreeSelectionModel
+ */
+ public Object clone() throws CloneNotSupportedException
+ {
+ DefaultTreeSelectionModel cloned =
+ (DefaultTreeSelectionModel) super.clone();
+
+ // Clone the selection and the list selection model.
+ cloned.selection = (TreePath[]) selection.clone();
+ if (listSelectionModel!=null)
+ cloned.listSelectionModel =
+ (DefaultListSelectionModel) listSelectionModel.clone();
+ return cloned;
+ }
+
+ /**
+ * Returns a string that shows this object's properties.
+ * The returned string lists the selected tree rows, if any.
+ *
+ * @return a string that shows this object's properties
+ */
+ public String toString()
+ {
+ if (isSelectionEmpty())
+ return "[selection empty]";
+ else
+ {
+ StringBuffer b = new StringBuffer("selected rows: [");
+ for (int i = 0; i < selection.length; i++)
+ {
+ b.append(getRow(selection[i]));
+ b.append(' ');
+ }
+ b.append(", lead "+getLeadSelectionRow());
+ return b.toString();
+ }
+ }
+
+ /**
+ * writeObject
+ *
+ * @param value0 TODO
+ * @exception IOException TODO
+ */
+ private void writeObject(ObjectOutputStream value0) throws IOException
+ {
+ // TODO
+ }
+
+ /**
+ * readObject
+ *
+ * @param value0 TODO
+ * @exception IOException TODO
+ * @exception ClassNotFoundException TODO
+ */
+ private void readObject(ObjectInputStream value0) throws IOException,
+ ClassNotFoundException
+ {
+ // TODO
+ }
+
+ /**
+ * Sets the RowMapper that should be used to map between paths and their rows.
+ *
+ * @param mapper the RowMapper to set
+ * @see RowMapper
+ */
+ public void setRowMapper(RowMapper mapper)
+ {
+ rowMapper = mapper;
+ }
+
+ /**
+ * Returns the RowMapper that is currently used to map between paths and their
+ * rows.
+ *
+ * @return the current RowMapper
+ * @see RowMapper
+ */
+ public RowMapper getRowMapper()
+ {
+ return rowMapper;
+ }
+
+ /**
+ * Sets the current selection mode. Possible values are
+ * {@link #SINGLE_TREE_SELECTION}, {@link #CONTIGUOUS_TREE_SELECTION} and
+ * {@link #DISCONTIGUOUS_TREE_SELECTION}.
+ *
+ * @param mode the selection mode to be set
+ * @see #getSelectionMode
+ * @see #SINGLE_TREE_SELECTION
+ * @see #CONTIGUOUS_TREE_SELECTION
+ * @see #DISCONTIGUOUS_TREE_SELECTION
+ */
+ public void setSelectionMode(int mode)
+ {
+ selectionMode = mode;
+ insureRowContinuity();
+ }
+
+ /**
+ * Returns the current selection mode.
+ *
+ * @return the current selection mode
+ * @see #setSelectionMode
+ * @see #SINGLE_TREE_SELECTION
+ * @see #CONTIGUOUS_TREE_SELECTION
+ * @see #DISCONTIGUOUS_TREE_SELECTION
+ */
+ public int getSelectionMode()
+ {
+ return selectionMode;
+ }
+
+ /**
+ * Sets this path as the only selection. If this changes the selection the
+ * registered TreeSelectionListeners are notified.
+ *
+ * @param path the path to set as selection
+ */
+ public void setSelectionPath(TreePath path)
+ {
+ // The most frequently only one cell in the tree is selected.
+ TreePath[] ose = selection;
+ selection = new TreePath[] { path };
+ TreePath oldLead = leadPath;
+ leadIndex = 0;
+ leadRow = getRow(path);
+ leadPath = path;
+
+ TreeSelectionEvent event;
+
+ if (ose != null && ose.length > 0)
+ {
+ // The first item in the path list is the selected path.
+ // The remaining items are unselected pathes.
+ TreePath[] changed = new TreePath[ose.length + 1];
+ boolean[] news = new boolean[changed.length];
+ news[0] = true;
+ changed[0] = path;
+ System.arraycopy(ose, 0, changed, 1, ose.length);
+ event = new TreeSelectionEvent(this, changed, news, oldLead, path);
+ }
+ else
+ {
+ event = new TreeSelectionEvent(this, path, true, oldLead, path);
+ }
+ fireValueChanged(event);
+ }
+
+ /**
+ * Get the number of the tree row for the given path.
+ *
+ * @param path the tree path
+ * @return the tree row for this path or -1 if the path is not visible.
+ */
+ int getRow(TreePath path)
+ {
+ RowMapper mapper = getRowMapper();
+
+ if (mapper instanceof AbstractLayoutCache)
+ {
+ // The absolute majority of cases, unless the TreeUI is very
+ // seriously rewritten
+ AbstractLayoutCache ama = (AbstractLayoutCache) mapper;
+ return ama.getRowForPath(path);
+ }
+ else
+ {
+ // Generic non optimized implementation.
+ int[] rows = mapper.getRowsForPaths(new TreePath[] { path });
+ if (rows.length == 0)
+ return - 1;
+ else
+ return rows[0];
+ }
+ }
+
+ /**
+ * Sets the paths as selection. This method checks for duplicates and removes
+ * them. If this changes the selection the registered TreeSelectionListeners
+ * are notified.
+ *
+ * @param paths the paths to set as selection
+ */
+ public void setSelectionPaths(TreePath[] paths)
+ {
+ // Must be called, as defined in JDK API 1.4.
+ insureUniqueness();
+ clearSelection();
+ addSelectionPaths(paths);
+ }
+
+ /**
+ * Adds a path to the list of selected paths. This method checks if the path
+ * is already selected and doesn't add the same path twice. If this changes
+ * the selection the registered TreeSelectionListeners are notified.
+ *
+ * The lead path is changed to the added path. This also happen if the
+ * passed path was already selected before.
+ *
+ * @param path the path to add to the selection
+ */
+ public void addSelectionPath(TreePath path)
+ {
+ if (! isPathSelected(path))
+ {
+ if (selectionMode == SINGLE_TREE_SELECTION || isSelectionEmpty()
+ || ! canPathBeAdded(path))
+ setSelectionPath(path);
+ else
+ {
+ TreePath[] temp = new TreePath[selection.length + 1];
+ System.arraycopy(selection, 0, temp, 0, selection.length);
+ temp[temp.length - 1] = path;
+ selection = new TreePath[temp.length];
+ System.arraycopy(temp, 0, selection, 0, temp.length);
+ }
+ }
+
+ if (path!=leadPath)
+ {
+ TreePath oldLead = leadPath;
+ leadPath = path;
+ leadRow = getRow(path);
+ leadIndex = selection.length - 1;
+ fireValueChanged(new TreeSelectionEvent(this, path, true, oldLead,
+ leadPath));
+ }
+ }
+
+ /**
+ * Adds the paths to the list of selected paths. This method checks if the
+ * paths are already selected and doesn't add the same path twice. If this
+ * changes the selection the registered TreeSelectionListeners are notified.
+ *
+ * @param paths the paths to add to the selection
+ */
+ public void addSelectionPaths(TreePath[] paths)
+ {
+ // Must be called, as defined in JDK API 1.4.
+ insureUniqueness();
+
+ if (paths != null)
+ {
+ TreePath v0 = null;
+ for (int i = 0; i < paths.length; i++)
+ {
+ v0 = paths[i];
+ if (! isPathSelected(v0))
+ {
+ if (isSelectionEmpty())
+ setSelectionPath(v0);
+ else
+ {
+ TreePath[] temp = new TreePath[selection.length + 1];
+ System.arraycopy(selection, 0, temp, 0, selection.length);
+ temp[temp.length - 1] = v0;
+ selection = new TreePath[temp.length];
+ System.arraycopy(temp, 0, selection, 0, temp.length);
+ }
+ TreePath oldLead = leadPath;
+ leadPath = paths[paths.length - 1];
+ leadRow = getRow(leadPath);
+ leadIndex = selection.length - 1;
+
+ fireValueChanged(new TreeSelectionEvent(this, v0, true,
+ oldLead, leadPath));
+ }
+ }
+ insureRowContinuity();
+ }
+ }
+
+ /**
+ * Removes the path from the selection. If this changes the selection the
+ * registered TreeSelectionListeners are notified.
+ *
+ * @param path the path to remove
+ */
+ public void removeSelectionPath(TreePath path)
+ {
+ if (isSelectionEmpty())
+ return;
+
+ int index = - 1;
+ if (isPathSelected(path))
+ {
+ for (int i = 0; i < selection.length; i++)
+ {
+ if (selection[i].equals(path))
+ {
+ index = i;
+ break;
+ }
+ }
+ TreePath[] temp = new TreePath[selection.length - 1];
+ System.arraycopy(selection, 0, temp, 0, index);
+ System.arraycopy(selection, index + 1, temp, index, selection.length
+ - index - 1);
+ selection = new TreePath[temp.length];
+ System.arraycopy(temp, 0, selection, 0, temp.length);
+
+ // If the removed path was the lead path, set the lead path to null.
+ TreePath oldLead = leadPath;
+ if (path!=null && leadPath!=null && path.equals(leadPath))
+ leadPath = null;
+
+ fireValueChanged(new TreeSelectionEvent(this, path, false, oldLead,
+ leadPath));
+ insureRowContinuity();
+ }
+ }
+
+ /**
+ * Removes the paths from the selection. If this changes the selection the
+ * registered TreeSelectionListeners are notified.
+ *
+ * @param paths the paths to remove
+ */
+ public void removeSelectionPaths(TreePath[] paths)
+ {
+ if (isSelectionEmpty())
+ return;
+ if (paths != null)
+ {
+ int index = - 1;
+ TreePath v0 = null;
+ TreePath oldLead = leadPath;
+ for (int i = 0; i < paths.length; i++)
+ {
+ v0 = paths[i];
+ if (isPathSelected(v0))
+ {
+ for (int x = 0; x < selection.length; x++)
+ {
+ if (selection[i].equals(v0))
+ {
+ index = x;
+ break;
+ }
+ if (leadPath != null && leadPath.equals(v0))
+ leadPath = null;
+ }
+ TreePath[] temp = new TreePath[selection.length - 1];
+ System.arraycopy(selection, 0, temp, 0, index);
+ System.arraycopy(selection, index + 1, temp, index,
+ selection.length - index - 1);
+ selection = new TreePath[temp.length];
+ System.arraycopy(temp, 0, selection, 0, temp.length);
+
+ fireValueChanged(new TreeSelectionEvent(this, v0, false,
+ oldLead, leadPath));
+ }
+ }
+ insureRowContinuity();
+ }
+ }
+
+ /**
+ * Returns the first path in the selection. This is especially useful when the
+ * selectionMode is {@link #SINGLE_TREE_SELECTION}.
+ *
+ * @return the first path in the selection
+ */
+ public TreePath getSelectionPath()
+ {
+ if ((selection == null) || (selection.length == 0))
+ return null;
+ else
+ return selection[0];
+ }
+
+ /**
+ * Returns the complete selection.
+ *
+ * @return the complete selection
+ */
+ public TreePath[] getSelectionPaths()
+ {
+ return selection;
+ }
+
+ /**
+ * Returns the number of paths in the selection.
+ *
+ * @return the number of paths in the selection
+ */
+ public int getSelectionCount()
+ {
+ if (selection == null)
+ return 0;
+ else
+ return selection.length;
+ }
+
+ /**
+ * Checks if a given path is in the selection.
+ *
+ * @param path the path to check
+ * @return <code>true</code> if the path is in the selection,
+ * <code>false</code> otherwise
+ */
+ public boolean isPathSelected(TreePath path)
+ {
+ if (selection == null)
+ return false;
+
+ for (int i = 0; i < selection.length; i++)
+ {
+ if (selection[i].equals(path))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the selection is empty.
+ *
+ * @return <code>true</code> if the selection is empty, <code>false</code>
+ * otherwise
+ */
+ public boolean isSelectionEmpty()
+ {
+ return ((selection == null) || (selection.length == 0));
+ }
+
+ /**
+ * Removes all paths from the selection. Fire the unselection event.
+ */
+ public void clearSelection()
+ {
+ if (! isSelectionEmpty())
+ {
+ TreeSelectionEvent event = new TreeSelectionEvent(
+ this, selection, new boolean[selection.length], leadPath, null);
+ leadPath = null;
+ selection = null;
+ fireValueChanged(event);
+ }
+ else
+ {
+ leadPath = null;
+ selection = null;
+ }
+ }
+
+ /**
+ * Adds a <code>TreeSelectionListener</code> object to this model.
+ *
+ * @param listener the listener to add
+ */
+ public void addTreeSelectionListener(TreeSelectionListener listener)
+ {
+ listenerList.add(TreeSelectionListener.class, listener);
+ }
+
+ /**
+ * Removes a <code>TreeSelectionListener</code> object from this model.
+ *
+ * @param listener the listener to remove
+ */
+ public void removeTreeSelectionListener(TreeSelectionListener listener)
+ {
+ listenerList.remove(TreeSelectionListener.class, listener);
+ }
+
+ /**
+ * Returns all <code>TreeSelectionListener</code> added to this model.
+ *
+ * @return an array of listeners
+ * @since 1.4
+ */
+ public TreeSelectionListener[] getTreeSelectionListeners()
+ {
+ return (TreeSelectionListener[]) getListeners(TreeSelectionListener.class);
+ }
+
+ /**
+ * fireValueChanged
+ *
+ * @param event the event to fire.
+ */
+ protected void fireValueChanged(TreeSelectionEvent event)
+ {
+ TreeSelectionListener[] listeners = getTreeSelectionListeners();
+
+ for (int i = 0; i < listeners.length; ++i)
+ listeners[i].valueChanged(event);
+ }
+
+ /**
+ * Returns all added listeners of a special type.
+ *
+ * @param listenerType the listener type
+ * @return an array of listeners
+ * @since 1.3
+ */
+ public EventListener[] getListeners(Class listenerType)
+ {
+ return listenerList.getListeners(listenerType);
+ }
+
+ /**
+ * Returns the currently selected rows.
+ *
+ * @return the currently selected rows
+ */
+ public int[] getSelectionRows()
+ {
+ if (rowMapper == null)
+ return null;
+ else
+ return rowMapper.getRowsForPaths(selection);
+ }
+
+ /**
+ * Returns the smallest row index from the selection.
+ *
+ * @return the smallest row index from the selection
+ */
+ public int getMinSelectionRow()
+ {
+ if ((rowMapper == null) || (selection == null) || (selection.length == 0))
+ return - 1;
+ else
+ {
+ int[] rows = rowMapper.getRowsForPaths(selection);
+ int minRow = Integer.MAX_VALUE;
+ for (int index = 0; index < rows.length; index++)
+ minRow = Math.min(minRow, rows[index]);
+ return minRow;
+ }
+ }
+
+ /**
+ * Returns the largest row index from the selection.
+ *
+ * @return the largest row index from the selection
+ */
+ public int getMaxSelectionRow()
+ {
+ if ((rowMapper == null) || (selection == null) || (selection.length == 0))
+ return - 1;
+ else
+ {
+ int[] rows = rowMapper.getRowsForPaths(selection);
+ int maxRow = - 1;
+ for (int index = 0; index < rows.length; index++)
+ maxRow = Math.max(maxRow, rows[index]);
+ return maxRow;
+ }
+ }
+
+ /**
+ * Checks if a particular row is selected.
+ *
+ * @param row the index of the row to check
+ * @return <code>true</code> if the row is in this selection,
+ * <code>false</code> otherwise
+ * @throws NullPointerException if the row mapper is not set (can only happen
+ * if the user has plugged in the custom incorrect TreeUI
+ * implementation.
+ */
+ public boolean isRowSelected(int row)
+ {
+ // Return false if nothing is selected.
+ if (isSelectionEmpty())
+ return false;
+
+ RowMapper mapper = getRowMapper();
+
+ if (mapper instanceof AbstractLayoutCache)
+ {
+ // The absolute majority of cases, unless the TreeUI is very
+ // seriously rewritten
+ AbstractLayoutCache ama = (AbstractLayoutCache) mapper;
+ TreePath path = ama.getPathForRow(row);
+ return isPathSelected(path);
+ }
+ else
+ {
+ // Generic non optimized implementation.
+ int[] rows = mapper.getRowsForPaths(selection);
+ for (int i = 0; i < rows.length; i++)
+ if (rows[i] == row)
+ return true;
+ return false;
+ }
+ }
+
+ /**
+ * Updates the mappings from TreePaths to row indices.
+ */
+ public void resetRowSelection()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * getLeadSelectionRow
+ *
+ * @return int
+ */
+ public int getLeadSelectionRow()
+ {
+ return leadRow;
+ }
+
+ /**
+ * getLeadSelectionPath
+ *
+ * @return TreePath
+ */
+ public TreePath getLeadSelectionPath()
+ {
+ return leadPath;
+ }
+
+ /**
+ * Adds a <code>PropertyChangeListener</code> object to this model.
+ *
+ * @param listener the listener to add.
+ */
+ public void addPropertyChangeListener(PropertyChangeListener listener)
+ {
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * Removes a <code>PropertyChangeListener</code> object from this model.
+ *
+ * @param listener the listener to remove.
+ */
+ public void removePropertyChangeListener(PropertyChangeListener listener)
+ {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * Returns all added <code>PropertyChangeListener</code> objects.
+ *
+ * @return an array of listeners.
+ * @since 1.4
+ */
+ public PropertyChangeListener[] getPropertyChangeListeners()
+ {
+ return changeSupport.getPropertyChangeListeners();
+ }
+
+ /**
+ * Makes sure the currently selected paths are valid according to the current
+ * selectionMode. If the selectionMode is set to
+ * {@link #CONTIGUOUS_TREE_SELECTION} and the selection isn't contiguous then
+ * the selection is reset to the first set of contguous paths. If the
+ * selectionMode is set to {@link #SINGLE_TREE_SELECTION} and the selection
+ * has more than one path, the selection is reset to the contain only the
+ * first path.
+ */
+ protected void insureRowContinuity()
+ {
+ if (selection == null || selection.length < 2)
+ return;
+ else if (selectionMode == CONTIGUOUS_TREE_SELECTION)
+ {
+ if (rowMapper == null)
+ // This is the best we can do without the row mapper:
+ selectOne();
+ else
+ {
+ int[] rows = rowMapper.getRowsForPaths(selection);
+ Arrays.sort(rows);
+ int i;
+ for (i = 1; i < rows.length; i++)
+ {
+ if (rows[i - 1] != rows[i] - 1)
+ // Break if no longer continuous.
+ break;
+ }
+
+ if (i < rows.length)
+ {
+ TreePath[] ns = new TreePath[i];
+ for (int j = 0; j < ns.length; j++)
+ ns[i] = getPath(j);
+ setSelectionPaths(ns);
+ }
+ }
+ }
+ else if (selectionMode == SINGLE_TREE_SELECTION)
+ selectOne();
+ }
+
+ /**
+ * Keep only one (normally last or leading) path in the selection.
+ */
+ private void selectOne()
+ {
+ if (leadIndex > 0 && leadIndex < selection.length)
+ setSelectionPath(selection[leadIndex]);
+ else
+ setSelectionPath(selection[selection.length -1]);
+ }
+
+ /**
+ * Get path for the given row that must be in the current selection.
+ */
+ private TreePath getPath(int row)
+ {
+ if (rowMapper instanceof AbstractLayoutCache)
+ return ((AbstractLayoutCache) rowMapper).getPathForRow(row);
+ else
+ {
+ int[] rows = rowMapper.getRowsForPaths(selection);
+ for (int i = 0; i < rows.length; i++)
+ if (rows[i] == row)
+ return selection[i];
+ }
+ throw new InternalError(row + " not in selection");
+ }
+
+ /**
+ * Returns <code>true</code> if the paths are contiguous (take subsequent
+ * rows in the diplayed tree view. The method returns <code>true</code> if
+ * we have no RowMapper assigned.
+ *
+ * @param paths the paths to check for continuity
+ * @return <code>true</code> if the paths are contiguous or we have no
+ * RowMapper assigned
+ */
+ protected boolean arePathsContiguous(TreePath[] paths)
+ {
+ if (rowMapper == null || paths.length < 2)
+ return true;
+
+ int[] rows = rowMapper.getRowsForPaths(paths);
+
+ // The patches may not be sorted.
+ Arrays.sort(rows);
+
+ for (int i = 1; i < rows.length; i++)
+ {
+ if (rows[i-1] != rows[i] - 1)
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Checks if the paths can be added. This returns <code>true</code> if:
+ * <ul>
+ * <li><code>paths</code> is <code>null</code> or empty</li>
+ * <li>we have no RowMapper assigned</li>
+ * <li>nothing is currently selected</li>
+ * <li>selectionMode is {@link #DISCONTIGUOUS_TREE_SELECTION}</li>
+ * <li>adding the paths to the selection still results in a contiguous set of
+ * paths</li>
+ *
+ * @param paths the paths to check
+ * @return <code>true</code> if the paths can be added with respect to the
+ * selectionMode
+ */
+ protected boolean canPathsBeAdded(TreePath[] paths)
+ {
+ if (rowMapper == null || isSelectionEmpty()
+ || selectionMode == DISCONTIGUOUS_TREE_SELECTION)
+ return true;
+
+ TreePath [] all = new TreePath[paths.length + selection.length];
+ System.arraycopy(paths, 0, all, 0, paths.length);
+ System.arraycopy(selection, 0, all, paths.length, selection.length);
+
+ return arePathsContiguous(all);
+ }
+
+ /**
+ * Checks if the single path can be added to selection.
+ */
+ private boolean canPathBeAdded(TreePath path)
+ {
+ if (rowMapper == null || isSelectionEmpty()
+ || selectionMode == DISCONTIGUOUS_TREE_SELECTION)
+ return true;
+
+ TreePath[] all = new TreePath[selection.length + 1];
+ System.arraycopy(selection, 0, all, 0, selection.length);
+ all[all.length - 1] = path;
+
+ return arePathsContiguous(all);
+ }
+
+ /**
+ * Checks if the paths can be removed without breaking the continuity of the
+ * selection according to selectionMode.
+ *
+ * @param paths the paths to check
+ * @return <code>true</code> if the paths can be removed with respect to the
+ * selectionMode
+ */
+ protected boolean canPathsBeRemoved(TreePath[] paths)
+ {
+ if (rowMapper == null || isSelectionEmpty()
+ || selectionMode == DISCONTIGUOUS_TREE_SELECTION)
+ return true;
+
+ HashSet set = new HashSet();
+ for (int i = 0; i < selection.length; i++)
+ set.add(selection[i]);
+
+ for (int i = 0; i < paths.length; i++)
+ set.remove(paths[i]);
+
+ TreePath[] remaining = new TreePath[set.size()];
+ Iterator iter = set.iterator();
+
+ for (int i = 0; i < remaining.length; i++)
+ remaining[i] = (TreePath) iter.next();
+
+ return arePathsContiguous(remaining);
+ }
+
+ /**
+ * Notify the installed listeners that the given patches have changed. This
+ * method will call listeners if invoked, but it is not called from the
+ * implementation of this class.
+ *
+ * @param vPathes the vector of the changed patches
+ * @param oldLeadSelection the old selection index
+ */
+ protected void notifyPathChange(Vector vPathes, TreePath oldLeadSelection)
+ {
+ TreePath[] pathes = new TreePath[vPathes.size()];
+ for (int i = 0; i < pathes.length; i++)
+ pathes[i] = (TreePath) vPathes.get(i);
+
+ boolean[] news = new boolean[pathes.length];
+ for (int i = 0; i < news.length; i++)
+ news[i] = isPathSelected(pathes[i]);
+
+ TreeSelectionEvent event = new TreeSelectionEvent(this, pathes, news,
+ oldLeadSelection,
+ leadPath);
+ fireValueChanged(event);
+ }
+
+ /**
+ * Updates the lead selection row number after changing the lead selection
+ * path.
+ */
+ protected void updateLeadIndex()
+ {
+ if (isSelectionEmpty())
+ {
+ leadRow = leadIndex = - 1;
+ }
+ else
+ {
+ leadRow = getRow(leadPath);
+ for (int i = 0; i < selection.length; i++)
+ {
+ if (selection[i].equals(leadPath))
+ {
+ leadIndex = i;
+ break;
+ }
+ }
+ leadIndex = leadRow;
+ }
+ }
+
+ /**
+ * This method exists due historical reasons and returns without action
+ * (unless overridden). For compatibility with the applications that override
+ * it, it is still called from the {@link #setSelectionPaths(TreePath[])} and
+ * {@link #addSelectionPaths(TreePath[])}.
+ */
+ protected void insureUniqueness()
+ {
+ // Following the API 1.4, the method should return without action.
+ }
}
diff --git a/libjava/classpath/javax/swing/tree/FixedHeightLayoutCache.java b/libjava/classpath/javax/swing/tree/FixedHeightLayoutCache.java
index 535417e..96655ce 100644
--- a/libjava/classpath/javax/swing/tree/FixedHeightLayoutCache.java
+++ b/libjava/classpath/javax/swing/tree/FixedHeightLayoutCache.java
@@ -1,5 +1,5 @@
-/* FixedHeightLayoutCache.java --
-Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+/* FixedHeightLayoutCache.java -- Fixed cell height tree layout cache
+Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,208 +37,592 @@ exception statement from your version. */
package javax.swing.tree;
+import gnu.javax.swing.tree.GnuPath;
+
import java.awt.Rectangle;
import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.Vector;
import javax.swing.event.TreeModelEvent;
+
/**
- * FixedHeightLayoutCache
+ * The fixed height tree layout. This class assumes that all cells in the tree
+ * have the same fixed height. This may be not the case, for instance, if leaves
+ * and branches have different height, of if the tree rows may have arbitrary
+ * variable height. This class will also work if the NodeDimensions are not
+ * set.
*
- * @author Andrew Selkirk
+ * @author Audrius Meskauskas
+ * @author Andrew Selkirk
*/
public class FixedHeightLayoutCache
- extends AbstractLayoutCache
+ extends VariableHeightLayoutCache
{
+ /**
+ * The cached node record.
+ */
+ class NodeRecord
+ {
+ NodeRecord(int aRow, int aDepth, Object aNode, Object aParent)
+ {
+ row = aRow;
+ depth = aDepth;
+ parent = aParent;
+ node = aNode;
+
+ isExpanded = expanded.contains(aNode);
+ }
+
+ /**
+ * The row, where the tree node is displayed.
+ */
+ final int row;
+
+ /**
+ * The nesting depth
+ */
+ final int depth;
+
+ /**
+ * The parent of the given node, null for the root node.
+ */
+ final Object parent;
+
+ /**
+ * This node.
+ */
+ final Object node;
+
+ /**
+ * True for the expanded nodes. The value is calculated in constructor.
+ * Using this field saves one hashtable access operation.
+ */
+ final boolean isExpanded;
+
+ /**
+ * The cached bounds of the tree row.
+ */
+ Rectangle bounds;
+
+ /**
+ * The path from the tree top to the given node (computed under first
+ * demand)
+ */
+ private TreePath path;
+
+ /**
+ * Get the path for this node. The derived class is returned,
+ * making check for the last child of some parent easier.
+ */
+ TreePath getPath()
+ {
+ if (path == null)
+ {
+ boolean lastChild = false;
+ if (parent != null)
+ {
+ int nc = treeModel.getChildCount(parent);
+ if (nc > 0)
+ {
+ int n = treeModel.getIndexOfChild(parent, node);
+ if (n == nc - 1)
+ lastChild = true;
+ }
+ }
+
+ LinkedList lpath = new LinkedList();
+ NodeRecord rp = this;
+ while (rp != null)
+ {
+ lpath.addFirst(rp.node);
+ if (rp.parent != null)
+ {
+ Object parent = rp.parent;
+ rp = (NodeRecord) nodes.get(parent);
+ // Add the root node, even if it is not visible.
+ if (rp == null)
+ lpath.addFirst(parent);
+ }
+ else
+ rp = null;
+ }
+ path = new GnuPath(lpath.toArray(), lastChild);
+ }
+ return path;
+ }
+
+ /**
+ * Get the rectangle bounds (compute, if required).
+ */
+ Rectangle getBounds()
+ {
+ // This method may be called in the context when the tree rectangle is
+ // not known. To work around this, it is assumed near infinitely large.
+ if (bounds==null)
+ bounds = getNodeDimensions(node, row, depth, isExpanded,
+ new Rectangle());
+ return bounds;
+ }
+ }
+
+ /**
+ * The set of all expanded tree nodes.
+ */
+ Set expanded = new HashSet();
+
+ /**
+ * Maps nodes to the row numbers.
+ */
+ Hashtable nodes = new Hashtable();
+
+ /**
+ * Maps row numbers to nodes.
+ */
+ Hashtable row2node = new Hashtable();
+
+ /**
+ * If true, the row map must be recomputed before using.
+ */
+ boolean dirty;
+
+ /**
+ * The cumulative height of all rows.
+ */
+ int totalHeight;
+
+ /**
+ * The maximal width.
+ */
+ int maximalWidth;
+
+ /**
+ * Creates the unitialised instance. Before using the class, the row height
+ * must be set with the {@link #setRowHeight(int)} and the model must be set
+ * with {@link #setModel(TreeModel)}. The node dimensions may not be set.
+ */
+ public FixedHeightLayoutCache()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Get the total number of rows in the tree. Every displayed node occupies the
+ * single row. The root node row is included if the root node is set as
+ * visible (false by default).
+ *
+ * @return int the number of the displayed rows.
+ */
+ public int getRowCount()
+ {
+ if (dirty) update();
+ return row2node.size();
+ }
+
+ /**
+ * Refresh the row map.
+ */
+ private final void update()
+ {
+ nodes.clear();
+ row2node.clear();
+
+ totalHeight = maximalWidth = 0;
+
+ Object root = treeModel.getRoot();
+
+ if (rootVisible)
+ {
+ countRows(root, null, 0);
+ }
+ else
+ {
+ int sc = treeModel.getChildCount(root);
+ for (int i = 0; i < sc; i++)
+ {
+ Object child = treeModel.getChild(root, i);
+ countRows(child, root, 0);
+ }
+ }
+ dirty = false;
+ }
+
+ /**
+ * Recursively counts all rows in the tree.
+ */
+ private final void countRows(Object node, Object parent, int depth)
+ {
+ Integer n = new Integer(row2node.size());
+ row2node.put(n, node);
+
+ NodeRecord nr = new NodeRecord(n.intValue(), depth, node, parent);
+ nodes.put(node, nr);
+
+ // For expanded nodes and for the root node.
+ if (expanded.contains(node))
+ {
+ int sc = treeModel.getChildCount(node);
+ int deeper = depth+1;
+ for (int i = 0; i < sc; i++)
+ {
+ Object child = treeModel.getChild(node, i);
+ countRows(child, node, deeper);
+ }
+ }
+ }
+
+ /**
+ * Discard the bound information for the given path.
+ *
+ * @param path the path, for that the bound information must be recomputed.
+ */
+ public void invalidatePathBounds(TreePath path)
+ {
+ NodeRecord r = (NodeRecord) nodes.get(path.getLastPathComponent());
+ if (r!=null)
+ r.bounds = null;
+ }
+
+ /**
+ * Mark all cached information as invalid.
+ */
+ public void invalidateSizes()
+ {
+ dirty = true;
+ }
+
+ /**
+ * Set the expanded state of the given path. The expansion states must be
+ * always updated when expanding and colapsing the tree nodes. Otherwise
+ * other methods will not work correctly after the nodes are collapsed or
+ * expanded.
+ *
+ * @param path the tree path, for that the state is being set.
+ * @param isExpanded the expanded state of the given path.
+ */
+ public void setExpandedState(TreePath path, boolean isExpanded)
+ {
+ if (isExpanded)
+ expanded.add(path.getLastPathComponent());
+ else
+ expanded.remove(path.getLastPathComponent());
+
+ dirty = true;
+ }
+
+ /**
+ * Get the expanded state for the given tree path.
+ *
+ * @return true if the given path is expanded, false otherwise.
+ */
+ public boolean isExpanded(TreePath path)
+ {
+ return expanded.contains(path.getLastPathComponent());
+ }
+
+ /**
+ * Get bounds for the given tree path.
+ *
+ * @param path the tree path
+ * @param rect the rectangle that will be reused to return the result.
+ * @return Rectangle the bounds of the last line, defined by the given path.
+ */
+ public Rectangle getBounds(TreePath path, Rectangle rect)
+ {
+ if (path == null)
+ return null;
+ if (dirty)
+ update();
+ Object last = path.getLastPathComponent();
+ NodeRecord r = (NodeRecord) nodes.get(last);
+ if (r == null)
+ // This node is not visible.
+ {
+ rect.x = rect.y = rect.width = rect.height = 0;
+ }
+ else
+ {
+ if (r.bounds == null)
+ {
+ Rectangle dim = getNodeDimensions(last, r.row, r.depth,
+ r.isExpanded, rect);
+ r.bounds = dim;
+ }
+
+ rect.setRect(r.bounds);
+ }
+ return rect;
+ }
+
+ /**
+ * Get the path, the last element of that is displayed in the given row.
+ *
+ * @param row the row
+ * @return TreePath the path
+ */
+ public TreePath getPathForRow(int row)
+ {
+ if (dirty)
+ update();
+ Object last = row2node.get(new Integer(row));
+ if (last == null)
+ return null;
+ else
+ {
+ NodeRecord r = (NodeRecord) nodes.get(last);
+ return r.getPath();
+ }
+ }
+
+ /**
+ * Get the row, displaying the last node of the given path.
+ *
+ * @param path the path
+ * @return int the row number or -1 if the end of the path is not visible.
+ */
+ public int getRowForPath(TreePath path)
+ {
+ if (path == null)
+ return -1;
+
+ if (dirty) update();
+
+ NodeRecord r = (NodeRecord) nodes.get(path.getLastPathComponent());
+ if (r == null)
+ return - 1;
+ else
+ return r.row;
+ }
+
+ /**
+ * Get the path, closest to the given point.
+ *
+ * @param x the point x coordinate
+ * @param y the point y coordinate
+ * @return the tree path, closest to the the given point
+ */
+ public TreePath getPathClosestTo(int x, int y)
+ {
+ if (dirty)
+ update();
+
+ // As the rows have arbitrary height, we need to iterate.
+ NodeRecord best = null;
+ NodeRecord r;
+ Enumeration en = nodes.elements();
+
+ int dist = Integer.MAX_VALUE;
+
+ while (en.hasMoreElements() && dist > 0)
+ {
+ r = (NodeRecord) en.nextElement();
+ if (best == null)
+ {
+ best = r;
+ dist = distance(r.getBounds(), x, y);
+ }
+ else
+ {
+ int rr = distance(r.getBounds(), x, y);
+ if (rr < dist)
+ {
+ best = r;
+ dist = rr;
+ }
+ }
+ }
+
+ if (best == null)
+ return null;
+ else
+ return best.getPath();
+ }
+
+ /**
+ * Get the closest distance from this point till the given rectangle. Only
+ * vertical distance is taken into consideration.
+ */
+ int distance(Rectangle r, int x, int y)
+ {
+ if (y < r.y)
+ return r.y - y;
+ else if (y > r.y + r.height)
+ return y - (r.y + r.height);
+ else
+ return 0;
+ }
+
+ /**
+ * Get the number of the visible childs for the given tree path. If the node
+ * is not expanded, 0 is returned. Otherwise, the number of children is
+ * obtained from the model as the number of children for the last path
+ * component.
+ *
+ * @param path the tree path
+ * @return int the number of the visible childs (for row).
+ */
+ public int getVisibleChildCount(TreePath path)
+ {
+ if (isExpanded(path))
+ return 0;
+ else
+ return treeModel.getChildCount(path.getLastPathComponent());
+ }
+
+ /**
+ * Get the enumeration over all visible pathes that start from the given
+ * parent path.
+ *
+ * @param parentPath the parent path
+ * @return the enumeration over pathes
+ */
+ public Enumeration getVisiblePathsFrom(TreePath parentPath)
+ {
+ if (dirty)
+ update();
+ Vector p = new Vector(parentPath.getPathCount());
+ Object node;
+ NodeRecord nr;
+
+ for (int i = 0; i < parentPath.getPathCount(); i++)
+ {
+ node = parentPath.getPathComponent(i);
+ nr = (NodeRecord) nodes.get(node);
+ if (nr.row >= 0)
+ p.add(node);
+ }
+ return p.elements();
+ }
+
+ /**
+ * Return the expansion state of the given tree path. The expansion state
+ * must be previously set with the
+ * {@link #setExpandedState(TreePath, boolean)}
+ *
+ * @param path the path being checked
+ * @return true if the last node of the path is expanded, false otherwise.
+ */
+ public boolean getExpandedState(TreePath path)
+ {
+ return expanded.contains(path.getLastPathComponent());
+ }
+
+ /**
+ * The listener method, called when the tree nodes are changed.
+ *
+ * @param event the change event
+ */
+ public void treeNodesChanged(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * The listener method, called when the tree nodes are inserted.
+ *
+ * @param event the change event
+ */
+ public void treeNodesInserted(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * The listener method, called when the tree nodes are removed.
+ *
+ * @param event the change event
+ */
+ public void treeNodesRemoved(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * Called when the tree structure has been changed.
+ *
+ * @param event the change event
+ */
+ public void treeStructureChanged(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * Set the tree model that will provide the data.
+ */
+ public void setModel(TreeModel newModel)
+ {
+ treeModel = newModel;
+ // The root node is expanded by default.
+ expanded.add(treeModel.getRoot());
+ dirty = true;
+ }
+
+ /**
+ * Inform the instance if the tree root node is visible. If this method
+ * is not called, it is assumed that the tree root node is not visible.
+ *
+ * @param visible true if the tree root node is visible, false
+ * otherwise.
+ */
+ public void setRootVisible(boolean visible)
+ {
+ rootVisible = visible;
+ dirty = true;
+ }
+
+ /**
+ * Get the sum of heights for all rows.
+ */
+ public int getPreferredHeight()
+ {
+ if (dirty)
+ update();
+ totalHeight = 0;
+ Enumeration en = nodes.elements();
+ while (en.hasMoreElements())
+ {
+ NodeRecord nr = (NodeRecord) en.nextElement();
+ Rectangle r = nr.getBounds();
+ totalHeight += r.height;
+ }
+ return totalHeight;
+ }
- // -------------------------------------------------------------
- // Variables --------------------------------------------------
- // -------------------------------------------------------------
-
- // -------------------------------------------------------------
- // Initialization ---------------------------------------------
- // -------------------------------------------------------------
-
- /**
- * Constructor FixedHeightLayoutCache
- */
- public FixedHeightLayoutCache()
- {
- // TODO
- } // FixedHeightLayoutCache()
-
- // -------------------------------------------------------------
- // Methods ----------------------------------------------------
- // -------------------------------------------------------------
-
- /**
- * getRowCount
- *
- * @returns int
- */
- public int getRowCount()
- {
- return 0; // TODO
- } // getRowCount()
-
- /**
- * invalidatePathBounds
- *
- * @param value0 TODO
- */
- public void invalidatePathBounds(TreePath value0)
- {
- // TODO
- } // invalidatePathBounds()
-
- /**
- * invalidateSizes
- */
- public void invalidateSizes()
- {
- // TODO
- } // invalidateSizes()
-
- /**
- * isExpanded
- *
- * @param value0 TODO
- * @returns boolean
- */
- public boolean isExpanded(TreePath value0)
- {
- return false; // TODO
- } // isExpanded()
-
- /**
- * getBounds
- *
- * @param value0 TODO
- * @param value1 TODO
- * @returns Rectangle
- */
- public Rectangle getBounds(TreePath value0, Rectangle value1)
- {
- return null; // TODO
- } // getBounds()
-
- /**
- * getPathForRow
- *
- * @param row TODO
- * @returns TreePath
- */
- public TreePath getPathForRow(int row)
- {
- //TODO
- return null;
- } // getPathForRow()
-
- /**
- * getRowForPath
- *
- * @param value0 TODO
- * @returns int
- */
- public int getRowForPath(TreePath value0)
- {
- return 0;
- } // getRowForPath()
-
- /**
- * getPathClosestTo
- *
- * @param value0 TODO
- * @param value1 TODO
- * @returns TreePath
- */
- public TreePath getPathClosestTo(int value0, int value1)
- {
- return null; // TODO
- } // getPathClosestTo()
-
- /**
- * getVisibleChildCount
- *
- * @param value0 TODO
- * @returns int
- */
- public int getVisibleChildCount(TreePath value0)
- {
- return 0; // TODO
- } // getVisibleChildCount()
-
- /**
- * getVisiblePathsFrom
- *
- * @param value0 TODO
- * @returns Enumeration
- */
- public Enumeration getVisiblePathsFrom(TreePath value0)
- {
- return null; // TODO
- } // getVisiblePathsFrom()
-
- /**
- * setExpandedState
- *
- * @param value0 TODO
- * @param value1 TODO
- */
- public void setExpandedState(TreePath value0, boolean value1)
- {
- // TODO
- } // setExpandedState()
-
- /**
- * getExpandedState
- *
- * @param value0 TODO
- * @returns boolean
- */
- public boolean getExpandedState(TreePath value0)
- {
- return false; // TODO
- } // getExpandedState()
-
- /**
- * treeNodesChanged
- *
- * @param value0 TODO
- */
- public void treeNodesChanged(TreeModelEvent value0)
- {
- // TODO
- } // treeNodesChanged()
-
- /**
- * treeNodesInserted
- *
- * @param value0 TODO
- */
- public void treeNodesInserted(TreeModelEvent value0)
- {
- // TODO
- } // treeNodesInserted()
-
- /**
- * treeNodesRemoved
- *
- * @param value0 TODO
- */
- public void treeNodesRemoved(TreeModelEvent value0)
- {
- // TODO
- } // treeNodesRemoved()
-
- /**
- * treeStructureChanged
- *
- * @param value0 TODO
- */
- public void treeStructureChanged(TreeModelEvent value0)
- {
- // TODO
- } // treeStructureChanged()
-
-} // FixedHeightLayoutCache
+ /**
+ * Get the maximal width.
+ */
+ public int getPreferredWidth(Rectangle value)
+ {
+ if (dirty)
+ update();
+
+ maximalWidth = 0;
+ Enumeration en = nodes.elements();
+ while (en.hasMoreElements())
+ {
+ NodeRecord nr = (NodeRecord) en.nextElement();
+ Rectangle r = nr.getBounds();
+ if (r.x + r.width > maximalWidth)
+ maximalWidth = r.x + r.width;
+ }
+ return maximalWidth;
+ }
+
+ /**
+ * Returns true if this layout supposes that all rows have the fixed
+ * height.
+ *
+ * @return boolean true if all rows in the tree must have the fixed
+ * height (true by default).
+ */
+ protected boolean isFixedRowHeight()
+ {
+ return true;
+ }
+
+}
diff --git a/libjava/classpath/javax/swing/tree/TreeCellEditor.java b/libjava/classpath/javax/swing/tree/TreeCellEditor.java
index 691cbc1..8951f31 100644
--- a/libjava/classpath/javax/swing/tree/TreeCellEditor.java
+++ b/libjava/classpath/javax/swing/tree/TreeCellEditor.java
@@ -1,5 +1,5 @@
/* TreeCellEditor.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,20 +44,26 @@ import javax.swing.CellEditor;
import javax.swing.JTree;
/**
- * TreeCellEditor public interface
+ * A <code>TreeCellEditor</code> is used by the {@link JTree} component to
+ * edit individual tree elements (nodes).
+ *
* @author Andrew Selkirk
*/
public interface TreeCellEditor extends CellEditor
{
/**
- * getTreeCellEditorComponent
- * @param tree TODO
- * @param value TODO
- * @param isSelected TODO
- * @param expanded TODO
- * @param leaf TODO
- * @param row TODO
- * @return TODO
+ * Returns a component that has been configured to edit one element (or
+ * node) in a {@link JTree} component. The arguments to this method are used
+ * to pass in the value and state of the element to be edited.
+ *
+ * @param tree the tree.
+ * @param value the value to render.
+ * @param isSelected is the tree element selected?
+ * @param expanded is the tree element expanded?
+ * @param leaf is the tree element a leaf node?
+ * @param row the row index.
+ *
+ * @return A component that is configured for editing the tree element.
*/
Component getTreeCellEditorComponent(JTree tree, Object value,
boolean isSelected, boolean expanded,
diff --git a/libjava/classpath/javax/swing/tree/TreeCellRenderer.java b/libjava/classpath/javax/swing/tree/TreeCellRenderer.java
index a1808c9..b7eeb9c 100644
--- a/libjava/classpath/javax/swing/tree/TreeCellRenderer.java
+++ b/libjava/classpath/javax/swing/tree/TreeCellRenderer.java
@@ -1,5 +1,5 @@
/* TreeCellRenderer.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,27 +43,31 @@ import java.awt.Component;
import javax.swing.JTree;
/**
- * TreeCellRenderer public interface
+ * A <code>TreeCellRenderer</code> is used by the {@link JTree} component to
+ * paint individual tree elements (nodes).
+ *
* @author Andrew Selkirk
*/
public interface TreeCellRenderer
{
-
/**
- * getTreeCellRendererComponent
- * @param tree TODO
- * @param value TODO
- * @param selected TODO
- * @param expanded TODO
- * @param leaf TODO
- * @param row TODO
- * @param hasFocus TODO
- * @returns TODO
+ * Returns a component that has been configured to display one element (or
+ * node) in a {@link JTree} component. The arguments to this method are used
+ * to pass in the value and state of the element to be rendered.
+ *
+ * @param tree the tree.
+ * @param value the value to render.
+ * @param selected is the tree element selected?
+ * @param expanded is the tree element expanded?
+ * @param leaf is the tree element a leaf node?
+ * @param row the row index.
+ * @param hasFocus does the tree element have the focus?
+ *
+ * @return A component that is configured for rendering the tree element.
*/
Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row,
boolean hasFocus);
-
}
diff --git a/libjava/classpath/javax/swing/tree/TreeNode.java b/libjava/classpath/javax/swing/tree/TreeNode.java
index fb8f880..94f2c69 100644
--- a/libjava/classpath/javax/swing/tree/TreeNode.java
+++ b/libjava/classpath/javax/swing/tree/TreeNode.java
@@ -1,5 +1,5 @@
/* TreeNode.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,59 +41,72 @@ package javax.swing.tree;
import java.util.Enumeration;
/**
- * TreeNode public interface
+ * A tree node.
+ *
* @author Andrew Selkirk
*/
public interface TreeNode {
- //-------------------------------------------------------------
- // Methods ----------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * getParent
- * @returns TreeNode
- */
- TreeNode getParent();
-
- /**
- * getIndex
- * @param node TODO
- * @returns int
- */
- int getIndex(TreeNode node);
-
- /**
- * getChildAt
- * @param index TODO
- * @returns TreeNode
- */
- TreeNode getChildAt(int index);
-
- /**
- * getChildCount
- * @returns int
- */
- int getChildCount();
-
- /**
- * getAllowsChildren
- * @returns boolean
- */
- boolean getAllowsChildren();
-
- /**
- * isLeaf
- * @returns boolean
- */
- boolean isLeaf();
-
- /**
- * children
- * @returns Enumeration
- */
- Enumeration children();
-
-
-} // TreeNode
+ /**
+ * Returns the parent node for this tree node, or <code>null</code> if this
+ * node has no parent.
+ *
+ * @return The parent node (possibly <code>null</code>).
+ */
+ TreeNode getParent();
+
+ /**
+ * Returns the index of the specified child node, or -1 if the node is not
+ * in fact a child of this node.
+ *
+ * @param node the node (<code>null</code> not permitted).
+ *
+ * @return The index of the specified child node, or -1.
+ *
+ * @throws IllegalArgumentException if <code>node</code> is <code>null</code>.
+ */
+ int getIndex(TreeNode node);
+
+ /**
+ * Returns the child node at the given index.
+ *
+ * @param index the index (in the range <code>0</code> to
+ * <code>getChildCount() - 1</code>).
+ *
+ * @return The child node at the given index.
+ */
+ TreeNode getChildAt(int index);
+
+ /**
+ * Returns the number of children for this node.
+ *
+ * @return The number of children for this node.
+ */
+ int getChildCount();
+
+ /**
+ * Returns <code>true</code> if this node allows children, and
+ * <code>false</code> otherwise.
+ *
+ * @return A boolean.
+ */
+ boolean getAllowsChildren();
+
+ /**
+ * Returns <code>true</code> if this node is a leaf node, and
+ * <code>false</code> otherwise.
+ *
+ * @return A boolean.
+ */
+ boolean isLeaf();
+
+ /**
+ * Returns an enumeration of the children of this node, or an empty
+ * enumeration if this node has no children.
+ *
+ * @return An enumeration of the children of this node.
+ */
+ Enumeration children();
+
+}
diff --git a/libjava/classpath/javax/swing/tree/TreePath.java b/libjava/classpath/javax/swing/tree/TreePath.java
index 37ec632..4671c4b 100644
--- a/libjava/classpath/javax/swing/tree/TreePath.java
+++ b/libjava/classpath/javax/swing/tree/TreePath.java
@@ -1,5 +1,5 @@
/* TreePath.java --
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,9 +53,15 @@ public class TreePath implements Serializable
static final long serialVersionUID = 4380036194768077479L;
/**
- * path
+ * The actual patch. The {@link DefaultTreeSelectionModel#clone()}
+ * assumes that the TreePath is immutable, so it is marked final here.
*/
- private Object[] path = null;
+ private final Object[] path;
+
+ /**
+ * The parent path (to be reused).
+ */
+ private transient TreePath parentPath;
/**
@@ -153,8 +159,8 @@ public class TreePath implements Serializable
*
* @param object the object (<code>null</code> permitted).
*
- * @returns <code>true</code> if <code>obj</code> is equal to this tree path,
- * and <code>false</code> otherwise.
+ * @return <code>true</code> if <code>obj</code> is equal to this tree path,
+ * and <code>false</code> otherwise.
*/
public boolean equals(Object object)
{
@@ -196,7 +202,7 @@ public class TreePath implements Serializable
/**
* Returns an array containing the path elements.
*
- * @returns An array containing the path elements.
+ * @return An array containing the path elements.
*/
public Object[] getPath()
{
@@ -216,7 +222,7 @@ public class TreePath implements Serializable
/**
* Returns the number of elements in the path.
*
- * @returns The number of elements in the path.
+ * @return The number of elements in the path.
*/
public int getPathCount()
{
@@ -248,8 +254,8 @@ public class TreePath implements Serializable
*
* @param path the path to check (<code>null</code> permitted).
*
- * @returns <code>true</code> if <code>path</code> is a descendant of this
- * path, and <code>false</code> otherwise
+ * @return <code>true</code> if <code>path</code> is a descendant of this
+ * path, and <code>false</code> otherwise
*/
public boolean isDescendant(TreePath path)
{
@@ -272,7 +278,7 @@ public class TreePath implements Serializable
*
* @param element the element.
*
- * @returns A tree path.
+ * @return A tree path.
*/
public TreePath pathByAddingChild(Object element)
{
@@ -284,8 +290,8 @@ public class TreePath implements Serializable
* as this path, except for the last one. If this path contains only one
* element, the method returns <code>null</code>.
*
- * @returns The parent path, or <code>null</code> if this path has only one
- * element.
+ * @return The parent path, or <code>null</code> if this path has only one
+ * element.
*/
public TreePath getParentPath()
{
@@ -293,7 +299,12 @@ public class TreePath implements Serializable
// is what the JDK does.
if (path.length <= 1)
return null;
-
- return new TreePath(this.getPath(), path.length - 1);
+
+ // Reuse the parent path, if possible. The parent path is requested
+ // during the tree repainting, so reusing generates a lot less garbage.
+ if (parentPath == null)
+ parentPath = new TreePath(this.getPath(), path.length - 1);
+
+ return parentPath;
}
}
diff --git a/libjava/classpath/javax/swing/tree/VariableHeightLayoutCache.java b/libjava/classpath/javax/swing/tree/VariableHeightLayoutCache.java
index 2c9136c..a9ed552 100644
--- a/libjava/classpath/javax/swing/tree/VariableHeightLayoutCache.java
+++ b/libjava/classpath/javax/swing/tree/VariableHeightLayoutCache.java
@@ -1,5 +1,5 @@
/* VariableHeightLayoutCache.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,219 +35,579 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-
package javax.swing.tree;
+import gnu.javax.swing.tree.GnuPath;
+
import java.awt.Rectangle;
import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.Vector;
import javax.swing.event.TreeModelEvent;
/**
- * VariableHeightLayoutCache
- * @author Andrew Selkirk
+ * The fixed height tree layout. This class requires the NodeDimensions to be
+ * set and ignores the row height property.
+ *
+ * @specnote the methods, of this class, returning TreePath, actually returns
+ * the derived class GnuPath that provides additional information for optimized
+ * painting. See the GnuPath code for details.
+ *
+ * @author Audrius Meskauskas
*/
-public class VariableHeightLayoutCache extends AbstractLayoutCache {
-
- //-------------------------------------------------------------
- // Variables --------------------------------------------------
- //-------------------------------------------------------------
-
-
- //-------------------------------------------------------------
- // Initialization ---------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * Constructor VariableHeightLayoutCache
- */
- public VariableHeightLayoutCache() {
- // TODO
- } // VariableHeightLayoutCache()
-
-
- //-------------------------------------------------------------
- // Methods ----------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * setModel
- * @param value0 TODO
- */
- public void setModel(TreeModel value0) {
- // TODO
- } // setModel()
-
- /**
- * setRootVisible
- * @param value0 TODO
- */
- public void setRootVisible(boolean value0) {
- // TODO
- } // setRootVisible()
-
- /**
- * setNodeDimensions
- * @param value0 TODO
- */
- public void setNodeDimensions(NodeDimensions value0) {
- // TODO
- } // setNodeDimensions()
-
- /**
- * setExpandedState
- * @param value0 TODO
- * @param value1 TODO
- */
- public void setExpandedState(TreePath value0, boolean value1) {
- // TODO
- } // setExpandedState()
-
- /**
- * getExpandedState
- * @param value0 TODO
- * @returns boolean
- */
- public boolean getExpandedState(TreePath value0) {
- return false; // TODO
- } // getExpandedState()
-
- /**
- * getBounds
- * @param value0 TODO
- * @param value1 TODO
- * @returns Rectangle
- */
- public Rectangle getBounds(TreePath value0, Rectangle value1) {
- return null; // TODO
- } // getBounds()
-
- /**
- * getPathForRow
- * @param value0 TODO
- * @returns TreePath
- */
- public TreePath getPathForRow(int value0) {
- return null; // TODO
- } // getPathForRow()
-
- /**
- * getRowForPath
- * @param value0 TODO
- * @returns int
- */
- public int getRowForPath(TreePath value0) {
- return 0; // TODO
- } // getRowForPath()
-
- /**
- * getRowCount
- * @returns int
- */
- public int getRowCount() {
- return 0; // TODO
- } // getRowCount()
-
- /**
- * invalidatePathBounds
- * @param value0 TODO
- */
- public void invalidatePathBounds(TreePath value0) {
- // TODO
- } // invalidatePathBounds()
-
- /**
- * getPreferredHeight
- * @returns int
- */
- public int getPreferredHeight() {
- return 0; // TODO
- } // getPreferredHeight()
-
- /**
- * getPreferredWidth
- * @param value0 TODO
- * @returns int
- */
- public int getPreferredWidth(Rectangle value0) {
- return 0; // TODO
- } // getPreferredWidth()
-
- /**
- * getPathClosestTo
- * @param value0 TODO
- * @param value1 TODO
- * @returns TreePath
- */
- public TreePath getPathClosestTo(int value0, int value1) {
- return null; // TODO
- } // getPathClosestTo()
-
- /**
- * getVisiblePathsFrom
- * @param value0 TODO
- * @returns Enumeration
- */
- public Enumeration getVisiblePathsFrom(TreePath value0) {
- return null; // TODO
- } // getVisiblePathsFrom()
-
- /**
- * getVisibleChildCount
- * @param value0 TODO
- * @returns int
- */
- public int getVisibleChildCount(TreePath value0) {
- return 0; // TODO
- } // getVisibleChildCount()
-
- /**
- * invalidateSizes
- */
- public void invalidateSizes() {
- // TODO
- } // invalidateSizes()
-
- /**
- * isExpanded
- * @param value0 TODO
- * @returns boolean
- */
- public boolean isExpanded(TreePath value0) {
- return false; // TODO
- } // isExpanded()
-
- /**
- * treeNodesChanged
- * @param value0 TODO
- */
- public void treeNodesChanged(TreeModelEvent value0) {
- // TODO
- } // treeNodesChanged()
-
- /**
- * treeNodesInserted
- * @param value0 TODO
- */
- public void treeNodesInserted(TreeModelEvent value0) {
- // TODO
- } // treeNodesInserted()
-
- /**
- * treeNodesRemoved
- * @param value0 TODO
- */
- public void treeNodesRemoved(TreeModelEvent value0) {
- // TODO
- } // treeNodesRemoved()
-
- /**
- * treeStructureChanged
- * @param value0 TODO
- */
- public void treeStructureChanged(TreeModelEvent value0) {
- // TODO
- } // treeStructureChanged()
-
-
-} // VariableHeightLayoutCache
+public class VariableHeightLayoutCache
+ extends AbstractLayoutCache
+{
+ /**
+ * The cached node record.
+ */
+ class NodeRecord
+ {
+ NodeRecord(int aRow, int aDepth, Object aNode, Object aParent)
+ {
+ row = aRow;
+ depth = aDepth;
+ parent = aParent;
+ node = aNode;
+
+ isExpanded = expanded.contains(aNode);
+ }
+
+ /**
+ * The row, where the tree node is displayed.
+ */
+ final int row;
+
+ /**
+ * The nesting depth
+ */
+ final int depth;
+
+ /**
+ * The parent of the given node, null for the root node.
+ */
+ final Object parent;
+
+ /**
+ * This node.
+ */
+ final Object node;
+
+ /**
+ * True for the expanded nodes. The value is calculated in constructor.
+ * Using this field saves one hashtable access operation.
+ */
+ final boolean isExpanded;
+
+ /**
+ * The cached bounds of the tree row.
+ */
+ Rectangle bounds;
+
+ /**
+ * The path from the tree top to the given node (computed under first
+ * demand)
+ */
+ private TreePath path;
+
+ /**
+ * Get the path for this node. The derived class is returned, making check
+ * for the last child of some parent easier.
+ */
+ TreePath getPath()
+ {
+ if (path == null)
+ {
+ boolean lastChild = false;
+ if (parent != null)
+ {
+ int nc = treeModel.getChildCount(parent);
+ if (nc > 0)
+ {
+ int n = treeModel.getIndexOfChild(parent, node);
+ if (n == nc - 1)
+ lastChild = true;
+ }
+ }
+
+ LinkedList lpath = new LinkedList();
+ NodeRecord rp = this;
+ while (rp != null)
+ {
+ lpath.addFirst(rp.node);
+ if (rp.parent != null)
+ {
+ Object parent = rp.parent;
+ rp = (NodeRecord) nodes.get(parent);
+ // Add the root node, even if it is not visible.
+ if (rp == null)
+ lpath.addFirst(parent);
+ }
+ else
+ rp = null;
+ }
+ path = new GnuPath(lpath.toArray(), lastChild);
+ }
+ return path;
+ }
+
+ /**
+ * Get the rectangle bounds (compute, if required).
+ */
+ Rectangle getBounds()
+ {
+ // This method may be called in the context when the tree rectangle is
+ // not known. To work around this, it is assumed near infinitely large.
+ if (bounds==null)
+ bounds = getNodeDimensions(node, row, depth, isExpanded,
+ new Rectangle());
+ return bounds;
+ }
+ }
+
+ /**
+ * The set of all expanded tree nodes.
+ */
+ Set expanded = new HashSet();
+
+ /**
+ * Maps nodes to the row numbers.
+ */
+ Hashtable nodes = new Hashtable();
+
+ /**
+ * Maps row numbers to nodes.
+ */
+ Hashtable row2node = new Hashtable();
+
+ /**
+ * If true, the row map must be recomputed before using.
+ */
+ boolean dirty;
+
+ /**
+ * The cumulative height of all rows.
+ */
+ int totalHeight;
+
+ /**
+ * The maximal width.
+ */
+ int maximalWidth;
+
+ /**
+ * Creates the unitialised instance. Before using the class, the row height
+ * must be set with the {@link #setRowHeight(int)} and the model must be set
+ * with {@link #setModel(TreeModel)}. The node dimensions may not be set.
+ */
+ public VariableHeightLayoutCache()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * Get the total number of rows in the tree. Every displayed node occupies the
+ * single row. The root node row is included if the root node is set as
+ * visible (false by default).
+ *
+ * @return int the number of the displayed rows.
+ */
+ public int getRowCount()
+ {
+ if (dirty) update();
+ return row2node.size();
+ }
+
+ /**
+ * Refresh the row map.
+ */
+ private final void update()
+ {
+ nodes.clear();
+ row2node.clear();
+
+ totalHeight = maximalWidth = 0;
+
+ Object root = treeModel.getRoot();
+
+ if (rootVisible)
+ {
+ countRows(root, null, 0);
+ }
+ else
+ {
+ int sc = treeModel.getChildCount(root);
+ for (int i = 0; i < sc; i++)
+ {
+ Object child = treeModel.getChild(root, i);
+ countRows(child, root, 0);
+ }
+ }
+ dirty = false;
+ }
+
+ /**
+ * Recursively counts all rows in the tree.
+ */
+ private final void countRows(Object node, Object parent, int depth)
+ {
+ Integer n = new Integer(row2node.size());
+ row2node.put(n, node);
+
+ NodeRecord nr = new NodeRecord(n.intValue(), depth, node, parent);
+ nodes.put(node, nr);
+
+ // For expanded nodes
+ if (expanded.contains(node))
+ {
+ int sc = treeModel.getChildCount(node);
+ int deeper = depth+1;
+ for (int i = 0; i < sc; i++)
+ {
+ Object child = treeModel.getChild(node, i);
+ countRows(child, node, deeper);
+ }
+ }
+ }
+
+ /**
+ * Discard the bound information for the given path.
+ *
+ * @param path the path, for that the bound information must be recomputed.
+ */
+ public void invalidatePathBounds(TreePath path)
+ {
+ NodeRecord r = (NodeRecord) nodes.get(path.getLastPathComponent());
+ if (r!=null)
+ r.bounds = null;
+ }
+
+ /**
+ * Mark all cached information as invalid.
+ */
+ public void invalidateSizes()
+ {
+ dirty = true;
+ }
+
+ /**
+ * Set the expanded state of the given path. The expansion states must be
+ * always updated when expanding and colapsing the tree nodes. Otherwise
+ * other methods will not work correctly after the nodes are collapsed or
+ * expanded.
+ *
+ * @param path the tree path, for that the state is being set.
+ * @param isExpanded the expanded state of the given path.
+ */
+ public void setExpandedState(TreePath path, boolean isExpanded)
+ {
+ if (isExpanded)
+ expanded.add(path.getLastPathComponent());
+ else
+ expanded.remove(path.getLastPathComponent());
+
+ dirty = true;
+ }
+
+ /**
+ * Get the expanded state for the given tree path.
+ *
+ * @return true if the given path is expanded, false otherwise.
+ */
+ public boolean isExpanded(TreePath path)
+ {
+ return expanded.contains(path.getLastPathComponent());
+ }
+
+ /**
+ * Get bounds for the given tree path.
+ *
+ * @param path the tree path
+ * @param rect the rectangle that will be reused to return the result.
+ * @return Rectangle the bounds of the last line, defined by the given path.
+ */
+ public Rectangle getBounds(TreePath path, Rectangle rect)
+ {
+ if (path == null)
+ return null;
+ if (dirty)
+ update();
+ Object last = path.getLastPathComponent();
+ NodeRecord r = (NodeRecord) nodes.get(last);
+ if (r == null)
+ // This node is not visible.
+ {
+ rect.x = rect.y = rect.width = rect.height = 0;
+ }
+ else
+ {
+ if (r.bounds == null)
+ {
+ Rectangle dim = getNodeDimensions(last, r.row, r.depth,
+ r.isExpanded, rect);
+ r.bounds = dim;
+ }
+
+ rect.setRect(r.bounds);
+ }
+ return rect;
+ }
+
+ /**
+ * Get the path, the last element of that is displayed in the given row.
+ *
+ * @param row the row
+ * @return TreePath the path
+ */
+ public TreePath getPathForRow(int row)
+ {
+ if (dirty)
+ update();
+ Object last = row2node.get(new Integer(row));
+ if (last == null)
+ return null;
+ else
+ {
+ NodeRecord r = (NodeRecord) nodes.get(last);
+ return r.getPath();
+ }
+ }
+
+ /**
+ * Get the row, displaying the last node of the given path.
+ *
+ * @param path the path
+ * @return int the row number or -1 if the end of the path is not visible.
+ */
+ public int getRowForPath(TreePath path)
+ {
+ if (path == null)
+ return -1;
+ if (dirty) update();
+
+ NodeRecord r = (NodeRecord) nodes.get(path.getLastPathComponent());
+ if (r == null)
+ return - 1;
+ else
+ return r.row;
+ }
+
+ /**
+ * Get the path, closest to the given point.
+ *
+ * @param x the point x coordinate
+ * @param y the point y coordinate
+ * @return the tree path, closest to the the given point
+ */
+ public TreePath getPathClosestTo(int x, int y)
+ {
+ if (dirty)
+ update();
+
+ // As the rows have arbitrary height, we need to iterate.
+ NodeRecord best = null;
+ NodeRecord r;
+ Enumeration en = nodes.elements();
+
+ int dist = Integer.MAX_VALUE;
+
+ while (en.hasMoreElements() && dist > 0)
+ {
+ r = (NodeRecord) en.nextElement();
+ if (best == null)
+ {
+ best = r;
+ dist = distance(r.getBounds(), x, y);
+ }
+ else
+ {
+ int rr = distance(r.getBounds(), x, y);
+ if (rr < dist)
+ {
+ best = r;
+ dist = rr;
+ }
+ }
+ }
+
+ if (best == null)
+ return null;
+ else
+ return best.getPath();
+ }
+
+ /**
+ * Get the closest distance from this point till the given rectangle. Only
+ * vertical distance is taken into consideration.
+ */
+ int distance(Rectangle r, int x, int y)
+ {
+ if (y < r.y)
+ return r.y - y;
+ else if (y > r.y + r.height)
+ return y - (r.y + r.height);
+ else
+ return 0;
+ }
+
+ /**
+ * Get the number of the visible childs for the given tree path. If the node
+ * is not expanded, 0 is returned. Otherwise, the number of children is
+ * obtained from the model as the number of children for the last path
+ * component.
+ *
+ * @param path the tree path
+ * @return int the number of the visible childs (for row).
+ */
+ public int getVisibleChildCount(TreePath path)
+ {
+ if (isExpanded(path))
+ return 0;
+ else
+ return treeModel.getChildCount(path.getLastPathComponent());
+ }
+
+ /**
+ * Get the enumeration over all visible pathes that start from the given
+ * parent path.
+ *
+ * @param parentPath the parent path
+ * @return the enumeration over pathes
+ */
+ public Enumeration getVisiblePathsFrom(TreePath parentPath)
+ {
+ if (dirty)
+ update();
+ Vector p = new Vector(parentPath.getPathCount());
+ Object node;
+ NodeRecord nr;
+
+ for (int i = 0; i < parentPath.getPathCount(); i++)
+ {
+ node = parentPath.getPathComponent(i);
+ nr = (NodeRecord) nodes.get(node);
+ if (nr.row >= 0)
+ p.add(node);
+ }
+ return p.elements();
+ }
+
+ /**
+ * Return the expansion state of the given tree path. The expansion state
+ * must be previously set with the
+ * {@link #setExpandedState(TreePath, boolean)}
+ *
+ * @param path the path being checked
+ * @return true if the last node of the path is expanded, false otherwise.
+ */
+ public boolean getExpandedState(TreePath path)
+ {
+ return expanded.contains(path.getLastPathComponent());
+ }
+
+ /**
+ * The listener method, called when the tree nodes are changed.
+ *
+ * @param event the change event
+ */
+ public void treeNodesChanged(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * The listener method, called when the tree nodes are inserted.
+ *
+ * @param event the change event
+ */
+ public void treeNodesInserted(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * The listener method, called when the tree nodes are removed.
+ *
+ * @param event the change event
+ */
+ public void treeNodesRemoved(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * Called when the tree structure has been changed.
+ *
+ * @param event the change event
+ */
+ public void treeStructureChanged(TreeModelEvent event)
+ {
+ dirty = true;
+ }
+
+ /**
+ * Set the tree model that will provide the data.
+ */
+ public void setModel(TreeModel newModel)
+ {
+ treeModel = newModel;
+ // The root node is expanded by default.
+ expanded.add(treeModel.getRoot());
+ dirty = true;
+ }
+
+ /**
+ * Inform the instance if the tree root node is visible. If this method
+ * is not called, it is assumed that the tree root node is not visible.
+ *
+ * @param visible true if the tree root node is visible, false
+ * otherwise.
+ */
+ public void setRootVisible(boolean visible)
+ {
+ rootVisible = visible;
+ dirty = true;
+ }
+
+ /**
+ * Get the sum of heights for all rows.
+ */
+ public int getPreferredHeight()
+ {
+ if (dirty)
+ update();
+ totalHeight = 0;
+ Enumeration en = nodes.elements();
+ while (en.hasMoreElements())
+ {
+ NodeRecord nr = (NodeRecord) en.nextElement();
+ Rectangle r = nr.getBounds();
+ totalHeight += r.height;
+ }
+ return totalHeight;
+ }
+
+ /**
+ * Get the maximal width.
+ */
+ public int getPreferredWidth(Rectangle value)
+ {
+ if (dirty)
+ update();
+
+ maximalWidth = 0;
+ Enumeration en = nodes.elements();
+ while (en.hasMoreElements())
+ {
+ NodeRecord nr = (NodeRecord) en.nextElement();
+ Rectangle r = nr.getBounds();
+ if (r.x + r.width > maximalWidth)
+ maximalWidth = r.x + r.width;
+ }
+ return maximalWidth;
+ }
+}
diff --git a/libjava/classpath/javax/swing/undo/StateEditable.java b/libjava/classpath/javax/swing/undo/StateEditable.java
index bec396e..459025b 100644
--- a/libjava/classpath/javax/swing/undo/StateEditable.java
+++ b/libjava/classpath/javax/swing/undo/StateEditable.java
@@ -1,5 +1,5 @@
/* StateEditable.java -- Interface for collaborating with StateEdit.
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -90,9 +90,9 @@ public interface StateEditable
* from the specified hash table.
*
* <p><b>Note to implementors of this interface:</b> To increase
- * efficiency, the <code>StateEdit</code> class {@linkplan
- * StateEdit#removeRedundantState() removes redundant state
- * information}. Therefore, implementations of this interface must be
+ * efficiency, the <code>StateEdit</code> class {@link
+ * StateEdit#removeRedundantState()} removes redundant state
+ * information. Therefore, implementations of this interface must be
* prepared for the case where certain keys were stored into the
* table by {@link #storeState}, but are not present anymore
* when the <code>restoreState</code> method gets called.
diff --git a/libjava/classpath/javax/swing/undo/UndoManager.java b/libjava/classpath/javax/swing/undo/UndoManager.java
index 565b5ca..b9e6de6 100644
--- a/libjava/classpath/javax/swing/undo/UndoManager.java
+++ b/libjava/classpath/javax/swing/undo/UndoManager.java
@@ -1,5 +1,5 @@
-/* AbstractTableModel.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+/* UndoManager.java --
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -265,7 +265,7 @@ public class UndoManager
* Determines which significant edit would be undone if {@link
* #undo()} was called.
*
- * @returns the significant edit that would be undone, or
+ * @return the significant edit that would be undone, or
* <code>null</code> if no significant edit would be affected by
* calling {@link #undo()}.
*/
@@ -288,7 +288,7 @@ public class UndoManager
* Determines which significant edit would be redone if {@link
* #redo()} was called.
*
- * @returns the significant edit that would be redone, or
+ * @return the significant edit that would be redone, or
* <code>null</code> if no significant edit would be affected by
* calling {@link #redo()}.
*/
diff --git a/libjava/classpath/javax/swing/undo/UndoableEdit.java b/libjava/classpath/javax/swing/undo/UndoableEdit.java
index 982d7f2..9938af7 100644
--- a/libjava/classpath/javax/swing/undo/UndoableEdit.java
+++ b/libjava/classpath/javax/swing/undo/UndoableEdit.java
@@ -1,5 +1,5 @@
-/* AbstractTableModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* UndoableEdit.java --
+ Copyright (C) 2002, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,77 +38,120 @@ exception statement from your version. */
package javax.swing.undo;
/**
- * UndoableEdit public interface
+ * An editing operation that supports undo/redoability.
+ *
* @author Andrew Selkirk
*/
-public interface UndoableEdit {
-
- /**
- * anEdit
- * @param anEdit TODO
- * @returns TODO
- */
- boolean addEdit(UndoableEdit anEdit);
-
- /**
- * canRedo
- * @returns TODO
- */
- boolean canRedo();
-
- /**
- * canRedo
- * @returns TODO
- */
- boolean canUndo();
-
- /**
- * die
- */
- void die();
-
- /**
- * getPresentationName
- * @returns TODO
- */
- String getPresentationName();
-
- /**
- * getRedoPresentationName
- * @returns TODO
- */
- String getRedoPresentationName();
-
- /**
- * getUndoPresentationName
- * @returns TODO
- */
- String getUndoPresentationName();
-
- /**
- * isSignificant
- * @returns TODO
- */
- boolean isSignificant();
-
- /**
- * redo
- * @throws CannotRedoException TODO
- */
- void redo() throws CannotRedoException;
-
- /**
- * replaceEdit
- * @param anEdit TODO
- * @returns TODO
- */
- boolean replaceEdit(UndoableEdit anEdit);
-
- /**
- * undo
- * @throws CannotUndoException TODO
- */
- void undo() throws CannotUndoException;
-
-
-} // UndoableEdit
+public interface UndoableEdit
+{
+
+ /**
+ * Incorporates another editing action into this one, thus forming a
+ * combined action.
+ *
+ * @param edit the editing action to be incorporated.
+ *
+ * @return <code>true</code> if the edit was combined successfully, and
+ * <code>false</code> if it could not be combined.
+ */
+ boolean addEdit(UndoableEdit edit);
+
+ /**
+ * Determines whether it would be possible to redo this editing
+ * action.
+ *
+ * @return <code>true</code> to indicate that this action can be
+ * redone, <code>false</code> otherwise.
+ *
+ * @see #redo()
+ * @see #canUndo()
+ */
+ boolean canRedo();
+
+ /**
+ * Determines whether it would be possible to undo this editing
+ * action.
+ *
+ * @return <code>true</code> to indicate that this action can be
+ * undone, <code>false</code> otherwise.
+ *
+ * @see #undo()
+ * @see #canRedo()
+ */
+ boolean canUndo();
+
+ /**
+ * Informs this edit action that it will no longer be used. Some
+ * actions might use this information to release resources, for
+ * example open files. Called by {@link UndoManager} before this
+ * action is removed from the edit queue.
+ */
+ void die();
+
+ /**
+ * Returns a human-readable, localized name that describes this
+ * editing action and can be displayed to the user.
+ *
+ * @return The presentation name.
+ */
+ String getPresentationName();
+
+ /**
+ * Returns the redo presentation name.
+ *
+ * @return The redo presentation name.
+ */
+ String getRedoPresentationName();
+
+ /**
+ * Returns the undo presentation name.
+ *
+ * @return The undo presentation name.
+ */
+ String getUndoPresentationName();
+
+ /**
+ * Determines whether this editing action is significant enough for
+ * being seperately undoable by the user. A typical significant
+ * action would be the resizing of an object. However, changing the
+ * selection in a text document would usually not be considered
+ * significant.
+ *
+ * @return <code>true</code> to indicate that the action is
+ * significant enough for being separately undoable, or
+ * <code>false</code> otherwise.
+ */
+ boolean isSignificant();
+
+ /**
+ * Redoes this editing action.
+ *
+ * @throws CannotRedoException if the edit cannot be undone.
+ *
+ * @see #canRedo()
+ * @see #undo()
+ */
+ void redo() throws CannotRedoException;
+
+ /**
+ * Incorporates another editing action into this one, thus forming a
+ * combined action that replaces the argument action.
+ *
+ * @param edit the editing action to be replaced.
+ *
+ * @return <code>true</code> if the edit is successfully replaced, and
+ * <code>false</code> otherwise.
+ */
+ boolean replaceEdit(UndoableEdit edit);
+
+ /**
+ * Undoes this editing action.
+ *
+ * @throws CannotUndoException if the edit cannot be undone.
+ *
+ * @see #canUndo()
+ * @see #redo()
+ */
+ void undo() throws CannotUndoException;
+
+}
diff --git a/libjava/classpath/javax/swing/undo/UndoableEditSupport.java b/libjava/classpath/javax/swing/undo/UndoableEditSupport.java
index 918e735..6d7bbea 100644
--- a/libjava/classpath/javax/swing/undo/UndoableEditSupport.java
+++ b/libjava/classpath/javax/swing/undo/UndoableEditSupport.java
@@ -1,5 +1,5 @@
/* UndoableEditSupport.java --
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -238,7 +238,7 @@ public class UndoableEditSupport
* on a specific {@link #compoundEdit}, it should override this
* method.
*
- * @returns a newly created instance of {@link CompoundEdit}.
+ * @return a newly created instance of {@link CompoundEdit}.
*/
protected CompoundEdit createCompoundEdit()
{
diff --git a/libjava/classpath/javax/xml/XMLConstants.java b/libjava/classpath/javax/xml/XMLConstants.java
index 7356207..0d4a65f 100644
--- a/libjava/classpath/javax/xml/XMLConstants.java
+++ b/libjava/classpath/javax/xml/XMLConstants.java
@@ -1,5 +1,5 @@
/* XMLConstants.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,10 +41,15 @@ package javax.xml;
* Repository for well-known XML constants.
*
* @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
- * @since 1.3
+ * @since 1.5
*/
public final class XMLConstants
{
+
+ private XMLConstants()
+ {
+ // to prevent instantiation
+ }
/**
* Dummy namespace URI indicating that there is no namespace.
diff --git a/libjava/classpath/javax/xml/datatype/DatatypeConstants.java b/libjava/classpath/javax/xml/datatype/DatatypeConstants.java
index 3919d03..6098e08 100644
--- a/libjava/classpath/javax/xml/datatype/DatatypeConstants.java
+++ b/libjava/classpath/javax/xml/datatype/DatatypeConstants.java
@@ -1,5 +1,5 @@
/* DatatypeConstants.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,11 +43,16 @@ import javax.xml.namespace.QName;
* Basic data type constants.
*
* @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
- * @since 1.3
+ * @since 1.5
*/
public final class DatatypeConstants
{
+ private DatatypeConstants()
+ {
+ // to prevent instantiation
+ }
+
/**
* Typesafe enumerated class representing the six fields of the
* <a href='Duration.html'>Duration</a> class.
diff --git a/libjava/classpath/javax/xml/datatype/DatatypeFactory.java b/libjava/classpath/javax/xml/datatype/DatatypeFactory.java
index 98a5690..14f5074 100644
--- a/libjava/classpath/javax/xml/datatype/DatatypeFactory.java
+++ b/libjava/classpath/javax/xml/datatype/DatatypeFactory.java
@@ -1,5 +1,5 @@
/* DatatypeFactory.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,16 +37,24 @@ exception statement from your version. */
package javax.xml.datatype;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.GregorianCalendar;
+import java.util.Iterator;
+import java.util.Properties;
+import gnu.classpath.ServiceFactory;
/**
* Factory class to create new datatype objects mapping XML to and from Java
* objects.
*
- * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
- * @since 1.3
+ * @author Chris Burdess
+ * @since 1.5
*/
public abstract class DatatypeFactory
{
@@ -59,7 +67,7 @@ public abstract class DatatypeFactory
/**
* JAXP 1.3 default implementation class name.
*/
- public static final java.lang.String DATATYPEFACTORY_IMPLEMENTATION_CLASS = "gnu.xml.datatype.JAXPDatatypeFactory";
+ public static final String DATATYPEFACTORY_IMPLEMENTATION_CLASS = "gnu.xml.datatype.JAXPDatatypeFactory";
protected DatatypeFactory()
{
@@ -73,12 +81,35 @@ public abstract class DatatypeFactory
{
try
{
+ // 1. system property
+ String className = System.getProperty(DATATYPEFACTORY_PROPERTY);
+ if (className != null)
+ return (DatatypeFactory) Class.forName(className).newInstance();
+ // 2. jaxp.properties property
+ File javaHome = new File(System.getProperty("java.home"));
+ File javaHomeLib = new File(javaHome, "lib");
+ File jaxpProperties = new File(javaHomeLib, "jaxp.properties");
+ if (jaxpProperties.exists())
+ {
+ FileInputStream in = new FileInputStream(jaxpProperties);
+ Properties p = new Properties();
+ p.load(in);
+ in.close();
+ className = p.getProperty(DATATYPEFACTORY_PROPERTY);
+ if (className != null)
+ return (DatatypeFactory) Class.forName(className).newInstance();
+ }
+ // 3. services
+ Iterator i = ServiceFactory.lookupProviders(DatatypeFactory.class);
+ if (i.hasNext())
+ return (DatatypeFactory) i.next();
+ // 4. fallback
Class t = Class.forName(DATATYPEFACTORY_IMPLEMENTATION_CLASS);
return (DatatypeFactory) t.newInstance();
}
catch (Exception e)
{
- throw new DatatypeConfigurationException (e);
+ throw new DatatypeConfigurationException(e);
}
}
@@ -172,7 +203,7 @@ public abstract class DatatypeFactory
BigInteger days,
BigInteger hours,
BigInteger minutes,
- BigDecimal seconds)
+ BigInteger seconds)
{
return newDuration(isPositive,
null,
@@ -180,7 +211,7 @@ public abstract class DatatypeFactory
days,
hours,
minutes,
- seconds);
+ new BigDecimal(seconds));
}
/**
diff --git a/libjava/classpath/javax/xml/datatype/Duration.java b/libjava/classpath/javax/xml/datatype/Duration.java
index fb1d655..96390fd 100644
--- a/libjava/classpath/javax/xml/datatype/Duration.java
+++ b/libjava/classpath/javax/xml/datatype/Duration.java
@@ -1,5 +1,5 @@
/* Duration.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import javax.xml.namespace.QName;
* An immutable time space as specified in XML Schema 1.0.
*
* @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
- * @since 1.3
+ * @since 1.5
*/
public abstract class Duration
{
@@ -240,11 +240,7 @@ public abstract class Duration
/**
* Returns the result of multiplying this duration by the given factor.
*/
- public Duration multiply(BigDecimal factor)
- {
- // TODO
- throw new UnsupportedOperationException();
- }
+ public abstract Duration multiply(BigDecimal factor);
/**
* Returns the unary negative of this duration.
diff --git a/libjava/classpath/javax/xml/validation/SchemaFactory.java b/libjava/classpath/javax/xml/validation/SchemaFactory.java
index f33c1c6..0042ea3 100644
--- a/libjava/classpath/javax/xml/validation/SchemaFactory.java
+++ b/libjava/classpath/javax/xml/validation/SchemaFactory.java
@@ -1,5 +1,5 @@
/* SchemaFactory.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,13 +52,10 @@ import org.xml.sax.SAXNotSupportedException;
* Factory for obtaining schemata.
*
* @author Chris Burdess (dog@gnu.org)
- * @since 1.3
+ * @since 1.5
*/
public abstract class SchemaFactory
{
-
- ErrorHandler errorHandler;
-
protected SchemaFactory()
{
}
@@ -109,15 +106,9 @@ public abstract class SchemaFactory
throw new SAXNotRecognizedException(name);
}
- public ErrorHandler getErrorHandler()
- {
- return errorHandler;
- }
+ public abstract ErrorHandler getErrorHandler();
- public void setErrorHandler(ErrorHandler errorHandler)
- {
- this.errorHandler = errorHandler;
- }
+ public abstract void setErrorHandler(ErrorHandler errorHandler);
public abstract LSResourceResolver getResourceResolver();
diff --git a/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java b/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java
new file mode 100644
index 0000000..dc80a33
--- /dev/null
+++ b/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java
@@ -0,0 +1,52 @@
+/* SchemaFactory.java --
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package javax.xml.validation;
+
+/**
+ * API compatibility class. Do not use.
+ */
+public abstract class SchemaFactoryLoader
+{
+
+ protected SchemaFactoryLoader()
+ {
+ }
+
+ public abstract SchemaFactory newFactory(String schemaLanguage);
+
+}
diff --git a/libjava/classpath/javax/xml/xpath/XPathConstants.java b/libjava/classpath/javax/xml/xpath/XPathConstants.java
index 3b2d5d2..fbfb999 100644
--- a/libjava/classpath/javax/xml/xpath/XPathConstants.java
+++ b/libjava/classpath/javax/xml/xpath/XPathConstants.java
@@ -1,5 +1,5 @@
/* XPathConstants.java --
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,10 +43,14 @@ import javax.xml.namespace.QName;
* XPath constants.
*
* @author (a href='mailto:dog@gnu.org'>Chris Burdess</a)
- * @since 1.3
+ * @since 1.5
*/
public class XPathConstants
{
+ private XPathConstants()
+ {
+ // to prevent instantiation
+ }
/**
* The XPath 1.0 number data type.
diff --git a/libjava/classpath/lib/Makefile.am b/libjava/classpath/lib/Makefile.am
index a075837..004a766 100644
--- a/libjava/classpath/lib/Makefile.am
+++ b/libjava/classpath/lib/Makefile.am
@@ -6,8 +6,8 @@ JAVA_DEPEND = java.dep
sinclude $(JAVA_DEPEND)
## GCJ LOCAL: prune .svn directories
-propertydirs := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java org META-INF -type d ! -name CVS -print | fgrep -v .svn)
-propertyfiles := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java org -name \*\.properties -print)
+propertydirs := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java javax org META-INF -type d ! -name CVS -print | fgrep -v .svn)
+propertyfiles := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java javax org -name \*\.properties -print)
metafiles := $(shell cd $(top_srcdir)/resource && $(FIND) META-INF -name CVS -prune -o -type f -print | fgrep -v .svn)
## END GCJ LOCAL
iconfiles := $(shell cd $(top_srcdir) && $(FIND) gnu/javax/swing/plaf/gtk/icons -name *.png -type f -print)
@@ -91,10 +91,19 @@ endif # INSTALL_CLASS_FILES
.PHONY: genclasses
+if USE_PREBUILT_GLIBJ_ZIP
+
+glibj.zip:
+ cp $(PATH_TO_GLIBJ_ZIP) .
+
+else
+
glibj.zip: classes compile-classes resources
if test "$(ZIP)" != ""; then $(ZIP) -r -D glibj.zip gnu java javax org META-INF > /dev/null; fi
if test "$(FASTJAR)" != ""; then $(FASTJAR) cf glibj.zip gnu java javax org META-INF; fi
+endif # USE_PREBUILT_GLIBJ_ZIP
+
resources: copy-vmresources.sh
if ! [ -e gnu ]; then mkdir gnu; fi
if ! [ -e gnu/java ]; then mkdir gnu/java; fi
@@ -117,11 +126,11 @@ resources: copy-vmresources.sh
classes: genclasses
-$(top_builddir)/java/util/LocaleData.java: $(top_srcdir)/scripts/generate-locale-list.sh
- mkdir -p $(top_builddir)/java/util
- $(top_srcdir)/scripts/generate-locale-list.sh > $(top_builddir)/java/util/LocaleData.java
+$(top_builddir)/gnu/java/locale/LocaleData.java: $(top_srcdir)/scripts/generate-locale-list.sh
+ mkdir -p $(top_builddir)/gnu/java/locale
+ $(top_srcdir)/scripts/generate-locale-list.sh > $(top_builddir)/gnu/java/locale/LocaleData.java
-genclasses: gen-classlist.sh standard.omit $(top_builddir)/java/util/LocaleData.java gen-xpath-parser
+genclasses: gen-classlist.sh standard.omit $(top_builddir)/gnu/java/locale/LocaleData.java gen-xpath-parser
top_builddir=$(top_builddir) top_srcdir=$(top_srcdir) $(SHELL) ./gen-classlist.sh standard
# Only rebuild parsers when explicitly asked to.
@@ -161,7 +170,7 @@ endif
EXTRA_DIST = standard.omit mkcollections.pl.in Makefile.gcj split-for-gcj.sh
CLEANFILES = compile-classes resources classes \
glibj.zip classes.1 classes.2 \
- $(top_builddir)/java/util/LocaleData.java \
+ $(top_builddir)/gnu/java/locale/LocaleData.java \
$(JAVA_DEPEND)
clean-local:
@@ -182,4 +191,4 @@ dist-hook:
$(FIND) $(distdir)/../gnu $(distdir)/../java $(distdir)/../javax $(distdir)/../org $(distdir)/../vm $(distdir)/../resource -name .cvsignore -print | xargs rm -f
$(FIND) $(distdir)/../gnu $(distdir)/../java $(distdir)/../javax $(distdir)/../org $(distdir)/../vm -name class-dependencies.conf -print | xargs rm -f
rm -f $(distdir)/../gnu/classpath/Configuration.java
- rm -f $(distdir)/../java/util/LocaleData.java
+ rm -f $(distdir)/../gnu/java/locale/LocaleData.java
diff --git a/libjava/classpath/lib/Makefile.in b/libjava/classpath/lib/Makefile.in
index 1fe90d3..f4867f6 100644
--- a/libjava/classpath/lib/Makefile.in
+++ b/libjava/classpath/lib/Makefile.in
@@ -42,11 +42,9 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/copy-vmresources.sh.in $(srcdir)/gen-classlist.sh.in \
$(srcdir)/mkcollections.pl.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
- $(top_srcdir)/../../config/lead-dot.m4 \
- $(top_srcdir)/../../config/no-executables.m4 \
- $(top_srcdir)/../../libtool.m4 $(top_srcdir)/m4/acattribute.m4 \
- $(top_srcdir)/m4/accross.m4 $(top_srcdir)/m4/acinclude.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
+ $(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
+ $(top_srcdir)/m4/acinclude.m4 \
$(top_srcdir)/m4/ax_create_stdint_h.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
@@ -76,6 +74,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -115,6 +114,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -135,6 +136,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -182,6 +184,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -200,8 +203,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -213,8 +219,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -231,7 +235,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -239,18 +246,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -261,8 +272,8 @@ target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
JAVA_DEPEND = java.dep
-propertydirs := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java org META-INF -type d ! -name CVS -print | fgrep -v .svn)
-propertyfiles := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java org -name \*\.properties -print)
+propertydirs := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java javax org META-INF -type d ! -name CVS -print | fgrep -v .svn)
+propertyfiles := $(shell cd $(top_srcdir)/resource && $(FIND) gnu java javax org -name \*\.properties -print)
metafiles := $(shell cd $(top_srcdir)/resource && $(FIND) META-INF -name CVS -prune -o -type f -print | fgrep -v .svn)
iconfiles := $(shell cd $(top_srcdir) && $(FIND) gnu/javax/swing/plaf/gtk/icons -name *.png -type f -print)
compile_classpath = $(vm_classes):$(top_srcdir):$(top_srcdir)/external/w3c_dom:$(top_srcdir)/external/sax:$(top_srcdir)/external/relaxngDatatype:.:$(USER_CLASSLIB)
@@ -279,7 +290,7 @@ JAVAH = $(USER_JAVAH) -jni -classpath .:$(USER_CLASSLIB)
EXTRA_DIST = standard.omit mkcollections.pl.in Makefile.gcj split-for-gcj.sh
CLEANFILES = compile-classes resources classes \
glibj.zip classes.1 classes.2 \
- $(top_builddir)/java/util/LocaleData.java \
+ $(top_builddir)/gnu/java/locale/LocaleData.java \
$(JAVA_DEPEND)
all: all-am
@@ -486,9 +497,12 @@ sinclude $(JAVA_DEPEND)
.PHONY: genclasses
-glibj.zip: classes compile-classes resources
- if test "$(ZIP)" != ""; then $(ZIP) -r -D glibj.zip gnu java javax org META-INF > /dev/null; fi
- if test "$(FASTJAR)" != ""; then $(FASTJAR) cf glibj.zip gnu java javax org META-INF; fi
+@USE_PREBUILT_GLIBJ_ZIP_TRUE@glibj.zip:
+@USE_PREBUILT_GLIBJ_ZIP_TRUE@ cp $(PATH_TO_GLIBJ_ZIP) .
+
+@USE_PREBUILT_GLIBJ_ZIP_FALSE@glibj.zip: classes compile-classes resources
+@USE_PREBUILT_GLIBJ_ZIP_FALSE@ if test "$(ZIP)" != ""; then $(ZIP) -r -D glibj.zip gnu java javax org META-INF > /dev/null; fi
+@USE_PREBUILT_GLIBJ_ZIP_FALSE@ if test "$(FASTJAR)" != ""; then $(FASTJAR) cf glibj.zip gnu java javax org META-INF; fi
resources: copy-vmresources.sh
if ! [ -e gnu ]; then mkdir gnu; fi
@@ -512,11 +526,11 @@ resources: copy-vmresources.sh
classes: genclasses
-$(top_builddir)/java/util/LocaleData.java: $(top_srcdir)/scripts/generate-locale-list.sh
- mkdir -p $(top_builddir)/java/util
- $(top_srcdir)/scripts/generate-locale-list.sh > $(top_builddir)/java/util/LocaleData.java
+$(top_builddir)/gnu/java/locale/LocaleData.java: $(top_srcdir)/scripts/generate-locale-list.sh
+ mkdir -p $(top_builddir)/gnu/java/locale
+ $(top_srcdir)/scripts/generate-locale-list.sh > $(top_builddir)/gnu/java/locale/LocaleData.java
-genclasses: gen-classlist.sh standard.omit $(top_builddir)/java/util/LocaleData.java gen-xpath-parser
+genclasses: gen-classlist.sh standard.omit $(top_builddir)/gnu/java/locale/LocaleData.java gen-xpath-parser
top_builddir=$(top_builddir) top_srcdir=$(top_srcdir) $(SHELL) ./gen-classlist.sh standard
# Only rebuild parsers when explicitly asked to.
@@ -560,7 +574,7 @@ dist-hook:
$(FIND) $(distdir)/../gnu $(distdir)/../java $(distdir)/../javax $(distdir)/../org $(distdir)/../vm $(distdir)/../resource -name .cvsignore -print | xargs rm -f
$(FIND) $(distdir)/../gnu $(distdir)/../java $(distdir)/../javax $(distdir)/../org $(distdir)/../vm -name class-dependencies.conf -print | xargs rm -f
rm -f $(distdir)/../gnu/classpath/Configuration.java
- rm -f $(distdir)/../java/util/LocaleData.java
+ rm -f $(distdir)/../gnu/java/locale/LocaleData.java
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libjava/classpath/lib/gen-classlist.sh.in b/libjava/classpath/lib/gen-classlist.sh.in
index 795d7be..aeba9bf 100755
--- a/libjava/classpath/lib/gen-classlist.sh.in
+++ b/libjava/classpath/lib/gen-classlist.sh.in
@@ -57,8 +57,8 @@ done
# Only include generated files once.
if test ! "${top_builddir}" -ef "@top_srcdir@"; then
echo "Adding generated files in builddir '${top_builddir}'."
- # Currently the only generated files are in gnu and java.
- (cd ${top_builddir}; @FIND@ gnu java -follow -name '*.java' -print) |
+ # Currently the only generated files are in gnu.*.
+ (cd ${top_builddir}; @FIND@ gnu -follow -name '*.java' -print) |
sort | sed -e 's,/\([^/]*\)$, \1,' |
while read pkg file; do
echo $pkg $top_builddir $pkg/$file
diff --git a/libjava/classpath/lib/jazzlib/index.html b/libjava/classpath/lib/jazzlib/index.html
deleted file mode 100644
index 72ac816..0000000
--- a/libjava/classpath/lib/jazzlib/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<head>
-<title>A pure java implementation of java.util.zip library</title>
-</head>
-<body>
-<h1>A pure java implementation of the java.util.zip library</h1>
-
-This project provides an implementation of the java.util.zip classes.
-<br><br>
-The code is pure java (no native code is used), and we aim to be compatible with existing java.util.zip implementations. Some code was borrowed from libgcj, almost all the rest was written by Jochen Hoenicke.
-<br><br>
-There is very similar project at <a href="http://www.jcraft.com/jzlib/index.html">http://www.jcraft.com/jzlib/index.html</a>.<br>
-Another project to implement bzip2 is at <a href="http://www.aftexsw.com/aftex/products/java/bzip/">http://www.aftexsw.com/aftex/products/java/bzip/</a>.
-<p>
-For the latest source, see the classpath CVS repository. On this page you'll find source and binary releases of the code in both the <strong>net.sf.jazzlib</strong> and <strong>java.util.zip</strong> namespaces.
-<p>
-The <strong>net.sf.jazzlib</strong> namespace is useful for situations where native code isn't allowed (such as in applets) and you need to use zip files. Builds in the <strong>java.util.zip</strong> namespace have a -juz suffix.
-<br>
-<h3>License</h3>
-This code is released under the GPL license with a special exception:
-<pre>
-As a special exception, if you link this library with other files to
-produce an executable, this library does not by itself cause the
-resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why the
-executable file might be covered by the GNU General Public License.
-</pre>
-<h3>Latest release is 0.07</h3>
-Download source or binary packages for all releases <a href="http://sourceforge.net/project/showfiles.php?group_id=16807">here</a>.
-<p>
-There is a md5sums file in each release that you can use to check the integrity of the files. The md5sums is also signed with my public key (finger jewel at debian.org), the signature is in md5sums.asc.
-<p>
-<h3>Contact information and bug notification</h3>
-You should post a message to the jazzlib-developers list (<a href="http://lists.sourceforge.net/mailman/listinfo/jazzlib-developers">subscribe</a>, <a href="http://sourceforge.net/mailarchive/forum.php?forum=jazzlib-developers">archives</a>) to report a bug or contact the developers.
-
-<br>
-The <a href="http://savannah.gnu.org/cvs/?group_id=85">CVS repository</a> for this project is part of the <a href="http://www.gnu.org/software/classpath/">classpath</a> project.
-<p>
-The files in the SourceForge CVS repository should be considered to be of historical interest only.
-<p>
-John Leuner (jewel at pixie.co.za) <br>
-13 May 2004
-
-<hr>
-<A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=16807" width="88" height="31" border="0" alt="SourceForge Logo"></A>
-</body>
-</html> \ No newline at end of file
diff --git a/libjava/classpath/lib/jazzlib/makeJazzlibDist.sh b/libjava/classpath/lib/jazzlib/makeJazzlibDist.sh
deleted file mode 100755
index 5c75960..0000000
--- a/libjava/classpath/lib/jazzlib/makeJazzlibDist.sh
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/bin/zsh
-
-echo "----- Run this from the classpath/java/util/zip directory -----"
-echo "----- -----"
-echo "----- Options: -----"
-echo "----- -----"
-echo "----- juz -- build .tar.gz and .zip archives in java.util.zip namespace"
-echo "----- jar -- build .jar file in java.util.zip and java.util.jar namespaces"
-echo "----- -- build .tar.gz. and .zip archive for net.sf.jazzlib namespace"
-echo "----- -----"
-echo "----- Edit this script to change the release number -----"
-echo "----- Do rm -rf dist when you're finished -----"
-echo "----- 30 May 2002 John Leuner <jewel@debian.org> -----"
-
-RELEASE_NUMBER=07
-
-# $1 is the archive command, eg "tar czvf" or "zip" or "jar cf"
-# $2 is the archive suffix, eg ".zip" or ".tar.gz"
-# $3 is the "-binary" flag, which may be empty
-# $4 is the "-juz" suffix, which may be empty
-# $5 is the set of files that need to be md5-summed
-# $6 is the set of files in addition to $5 that are to be archived
-
-function create_archive {
- md5sum ${=5} > md5sums
- gpg --clearsign md5sums
- ${=1} jazzlib${3}-0.$RELEASE_NUMBER${4}${2} ${=5} ${=6}
- rm -f md5sums
- rm -f md5sums.asc
-}
-
-# $1 is the package name, ie java.util.zip or net.sf.jazzlib
-
-function make_javadoc {
- rm -rf javadoc
- mkdir javadoc
- javadoc -sourcepath . -d javadoc/ $1
-}
-
-case "$1" in
- juz)
- mkdir -p dist/java/util/zip
-
- #make source archive
- cp *.java dist/java/util/zip
- pushd dist
-
- make_javadoc java.util.zip
-
- cp ../../../../COPYING .
-
- foo=(java/util/zip/*.java)
- create_archive "tar czvf" ".tar.gz" "" "-juz" "$foo" "javadoc md5sums md5sums.asc COPYING"
- create_archive "zip" ".zip" "" "-juz" "$foo" "javadoc md5sums md5sums.asc COPYING"
-
- popd
-
- #make binary distro second
- cp ../../../lib/java/util/zip/*.class dist/java/util/zip
- pushd dist
-
- foo=(java/util/zip/*.class)
- create_archive "tar czvf" ".tar.gz" "-binary" "-juz" "$foo" "javadoc md5sums md5sums.asc COPYING"
- create_archive "zip" ".zip" "-binary" "-juz" "$foo" "javadoc md5sums md5sums.asc COPYING"
-
- popd
- ;;
- jar)
- mkdir -p dist/java/util/zip
- mkdir -p dist/java/util/jar
-
- #make binary distro second
- cp ../../../lib/java/util/zip/*.class dist/java/util/zip
- cp ../../../lib/java/util/zip/../jar/*.class dist/java/util/jar
- pushd dist
-
- cp ../../../../COPYING .
- foo=(java/util/zip/*.class)
- foo=($foo java/util/jar/*.class)
-
- create_archive "fastjar cf" ".jar" "-binary" "-juz" "$foo" "md5sums md5sums.asc COPYING"
-
- popd
- ;;
- *)
- #copy files to dist directory and make net.sf.jazzlib the package name
-
- mkdir -p dist/net/sf/jazzlib
- cp *.java dist/net/sf/jazzlib
- for i in dist/net/sf/jazzlib/*.java ; do
- sed -e "s/java\.util\.zip/net.sf.jazzlib/" < $i > $i.tmp ;
- mv $i.tmp $i;
- done
-
- pushd dist
-
- make_javadoc "net.sf.jazzlib"
-
- cp ../../../../COPYING .
-
- foo=(net/sf/jazzlib/*.java)
- create_archive "tar czvf" ".tar.gz" "" "" "$foo" "javadoc md5sums md5sums.asc COPYING"
- create_archive "zip" ".zip" "" "" "$foo" "javadoc md5sums md5sums.asc COPYING"
-
- #compile the source
- javac net/sf/jazzlib/*.java
-
- foo=(net/sf/jazzlib/*.class)
- create_archive "tar czvf" ".tar.gz" "-binary" "" "$foo" "javadoc md5sums md5sums.asc COPYING"
- create_archive "zip" ".zip" "-binary" "" "$foo" "javadoc md5sums md5sums.asc COPYING"
-
- #back to dir
- popd
-
- ;;
-esac
-ls -la dist/{*.tar.gz,*.jar,*.zip}
-
-
-
-
diff --git a/libjava/classpath/lib/mkdep.pl.in b/libjava/classpath/lib/mkdep.pl.in
deleted file mode 100755
index b30fd7a..0000000
--- a/libjava/classpath/lib/mkdep.pl.in
+++ /dev/null
@@ -1,336 +0,0 @@
-#!@PERL@
-#
-# Create a dependency file for use with make that will
-# a) not have duplicate entries
-# b) not include the source of a file as a dependency to separate file,
-# just the class of the file
-# c) use jikes .u files
-# d) includes classes which need native compilation via simple parsing
-# to find native methods requiring use of javah
-
-use strict;
-
-my ( $dir, $dep ) = "";
-my @dirs = ( 'java', 'javax', 'gnu' );
-my ( $depout ) = "makefile.dep";
-my ( $classout ) = "classes.dep";
-my ( $headerout ) = "headers.dep";
-my ( $javaout ) = "java.dep";
-my @deps = ();
-my @natives = ();
-use vars qw ( $classout $headerout @dirs @deps @natives $dir $dep $depout );
-
-# main
-{
- if ($#ARGV == 0)
- {
- if ($ARGV[0] =~ /^-h/)
- {
- findNativeFiles();
- writeNativeFile();
- }
- elsif ($ARGV[0] =~ /^-d/)
- {
- foreach $dir (@dirs)
- {
- # find all .u files recursively and parse'm
- findDepFiles($dir);
- }
- writeDepFile();
- }
- elsif ($ARGV[0] =~ /^-c/)
- {
- findClassFiles();
- writeClassFile();
- }
- elsif ($ARGV[0] =~ /^-j/)
- {
- findJavaFiles();
- writeJavaFile();
- }
- }
- else
- {
- print "Usage:\n";
- print "mkdep.pl -h \tfor header files\n";
- print "mkdep.pl -c \tfor a list of classes\n";
- print "mkdep.pl -j \tfor a list of java files\n";
- print "mkdep.pl -d \tfor dependency generation from jikes .u files\n";
- }
-}
-
-sub writeNativeFile
-{
- my ($i, $j, $k, $l) = "";
- my $top_srcdir = "../";
- if (defined $ENV{'top_srcdir'}) {
- $top_srcdir = $ENV{'top_srcdir'};
- }
- my $top_srcdir_regex = $top_srcdir;
- if ($top_srcdir_regex !~ /.*\/$/) {
- $top_srcdir_regex .= '/';
- }
- $top_srcdir_regex =~ s/\./\\\./g; # replace . with \.
- $top_srcdir_regex =~ s/\//\\\//g; # replace / with \/
-# print "regex is $top_srcdir_regex\n";
- open(MAKEDEP, ">$headerout") || die "Could not open file ", $headerout;
-
- # the HEADERS = ... stuff
- if ($#natives > -1)
- {
- print MAKEDEP "CP_HEADERS = \\", "\n";
- foreach $i (0 .. $#natives-1)
- {
- $j = $natives[$i];
- $j =~ s/^$top_srcdir_regex//; # remove ../ or similar
- $j =~ s/^(\.\.\/)+//g; # remove all preceding ../
- $j =~ s/^vm\/reference\///; # remove vm/reference/
- $j =~ s/\//_/g; # replace / with _
- $j =~ s/\.java$/\.h/; # replace .java with .h
- print MAKEDEP " \$(top_builddir)/include/", $j, " \\", "\n";
- }
- $j = $natives[$#natives];
- $j =~ s/^$top_srcdir_regex//; # remove ../
- $j =~ s/^(\.\.\/)+//g; # remove all preceding ../
- $j =~ s/^vm\/reference\///; # remove vm/reference/
- $j =~ s/\//_/g; # replace / with _
- $j =~ s/\.java/\.h/; # replace .java with .h
- print MAKEDEP " \$(top_builddir)/include/", $j, "\n\n";
-
- # print rules to make .h files
- # y/x.h : z/x.class
- # y/x.h : ../z/x.java
- # javah -jni z.x
- # mv y_x.h $(top_srcdir)/include
-
- # j = y/x.h
- # k = z/x.class
- # k = ../z/x.java
- # l = z.x
- foreach $i (0 .. $#natives-1)
- {
- $j = $natives[$i];
- $j =~ s/^$top_srcdir_regex//; # remove ../
- $j =~ s/^(\.\.\/)+//g; # remove all preceding ../
- $j =~ s/^vm\/reference\///; # remove vm/reference/
-# $k = $l = $j;
- $l = $j;
- $j =~ s/\//_/g; # replace / with _
- $j =~ s/\.java$/\.h/; # replace .java with .h
-
- $k = $natives[$i]; # the original .java file
-# $k =~ s/\.java$/\.class/; # replace .java with .class
-
- $l =~ s/\.java$//; # remove .class
- $l =~ s/\//\./g; # replace / with .
-
- print MAKEDEP "\$(top_builddir)/include/", $j, " : ", $k, "\n";
- print MAKEDEP "\t\$(JAVAH) ", $l, "\n";
- print MAKEDEP "\tmv ", $j, " \$(top_builddir)/include\n\n";
- }
- $j = $natives[$#natives];
- $j =~ s/^$top_srcdir_regex//; # remove ../
- $j =~ s/^(\.\.\/)+//g; # remove all preceding ../
- $j =~ s/^vm\/reference\///; # remove vm/reference/
-# $k = $l = $j;
- $l = $j;
- $j =~ s/\//_/g; # replace / with _
- $j =~ s/\.java/\.h/; # replace .java with .h
-
- $k = $natives[$#natives]; # the original .java file
-# $k =~ s/\.java$/\.class/; # replace .java with .class
-
- $l =~ s/\.java$//; # remove .class
- $l =~ s/\//\./g; # replace / with .
-
- print MAKEDEP "\$(top_builddir)/include/", $j, " : ", $k, "\n";
- print MAKEDEP "\t\$(JAVAH) ", $l, "\n";
- print MAKEDEP "\tmv ", $j, " \$(top_builddir)/include\n\n";
- }
- close(MAKEDEP);
-}
-
-sub writeJavaFile
-{
- my ($i, $j, $class, $depend, $source, $depend_source) = "";
-
- open(MAKEDEP, ">$javaout") || die "Could not open file ", $classout;
-
- # the JAVA_SRCS = ... stuff
- if ($#natives > -1)
- {
- print MAKEDEP "JAVA_SRCS = \\", "\n";
- foreach $i (0 .. $#natives-1)
- {
- $j = $natives[$i];
- print MAKEDEP " ", $j, " \\", "\n";
- }
- $j = $natives[$#natives];
- print MAKEDEP " ", $j, "\n\n";
- }
- close(MAKEDEP);
-}
-
-sub writeClassFile
-{
- my ($i, $j, $class, $depend, $source, $depend_source) = "";
-
- open(MAKEDEP, ">$classout") || die "Could not open file ", $classout;
-
- # the CLASSES = ... stuff
- if ($#natives > -1)
- {
- print MAKEDEP "CLASSES = \\", "\n";
- foreach $i (0 .. $#natives-1)
- {
- $j = $natives[$i];
- $j =~ s/\.java$/\.class/;
- print MAKEDEP " ", $j, " \\", "\n";
- }
- $j = $natives[$#natives];
- $j =~ s/\.java$/\.class/;
- print MAKEDEP " ", $j, "\n\n";
- }
- close(MAKEDEP);
-}
-
-sub writeDepFile
-{
- my ($i, $j, $class, $depend, $source, $depend_source) = "";
-
- open(MAKEDEP, ">$depout") || die "Could not open file ", $depout;
-
- # the class dependencies
- foreach $i (@deps)
- {
- open(FILE, "<$i") || die "Could not open file ", $i, "\n";
- while(<FILE>)
- {
- chop;
- ($class, $depend) = /(.+) : (.+)$/;
- $source = $class;
- $source =~ s/\.class$/\.java/;
- if (($source eq $depend) || ($depend !~ /\.java$/))
- {
- if ($depend =~ /^\.\.\/.+\.class$/)
- {
- $depend =~ s/^\.\.\///;
- }
- if (($depend =~ /\.java$/) && ($depend !~ /^\.\.\//))
- {
- $depend = "../" . $depend;
- }
- print MAKEDEP $class, " : ", $depend, "\n";
- }
- }
- print MAKEDEP "\n";
- close(FILE);
- }
- close(MAKEDEP);
-}
-
-sub findJavaFiles
-{
- my ($file) = "";
- open(CLASSES, "<classes") || die "Could not open file classes\n";
- while(<CLASSES>)
- {
- chop;
- $file = $_;
- push @natives, $file;
- }
- close(CLASSES);
-}
-
-sub findClassFiles
-{
- my ($file) = "";
- open(CLASSES, "<classes") || die "Could not open file classes\n";
- while(<CLASSES>)
- {
- chop;
- $file = $_;
- $file =~ s/^\.\.\///;
- push @natives, $file;
- }
- close(CLASSES);
-}
-
-sub findNativeFiles
-{
- my ($file) = "";
- open(CLASSES, "<classes") || die "Could not open file classes\n";
- while(<CLASSES>)
- {
- chop;
- $file = $_;
- if (hasNativeMethod($file))
- {
- push @natives, $file;
- }
-
- }
- close(CLASSES);
-}
-
-sub hasNativeMethod
-{
- my ($file) = @_;
- my ($line, $one, $two) = "";
- open(FILE, "<$file") || die "Could not open file ", $file, "\n";
- while(<FILE>)
- {
- chop;
- $one = $two;
- $two = $_;
-
- $line = $one . " " . $two;
- if ( ($line =~ /^\s*public\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*public\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*protected\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*protected\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*private\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*private\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*abstract\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*final\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*synchronized\s.*native\s+\S+\s+\S+\s*\(/) ||
- ($line =~ /^\s*native\s.*/) )
- {
- close(FILE);
- return 1;
- }
- }
- close(FILE);
- return 0;
-}
-
-sub findDepFiles
-{
-
- my ($dir) = @_;
- my (@dirs) = ();
- my (@local_deps) = ();
- my (@entries) = ();
- my ($i, $local_dep) = "";
- if (opendir(DIR, $dir))
- {
- @entries = grep(-d "$dir/$_" && !/^\.\.?$/, readdir(DIR));
- foreach $i (@entries)
- {
- push @dirs, "$dir/$i";
- }
- rewinddir(DIR);
- @entries= grep(/\.u$/, readdir(DIR));
- closedir(DIR);
- foreach $i (@entries)
- {
- push @local_deps, "$dir/$i";
- }
- push @deps, @local_deps;
- foreach $i (@dirs)
- {
- findDepFiles($i);
- }
- }
-}
-
diff --git a/libjava/classpath/m4/acinclude.m4 b/libjava/classpath/m4/acinclude.m4
index 1c5f9c7..30ae333 100644
--- a/libjava/classpath/m4/acinclude.m4
+++ b/libjava/classpath/m4/acinclude.m4
@@ -24,9 +24,7 @@ AC_DEFUN([CLASSPATH_FIND_JAVAC],
AM_CONDITIONAL(FOUND_GCJX, test "x${user_specified_javac}" = xgcjx)
if test "x${GCJ}" = x && test "x${JIKES}" = x && test "x${user_specified_javac}" != xkjc && test "x${user_specified_javac}" != xgcjx && test "x${user_specified_javac}" != xecj; then
- # FIXME: use autoconf error function
- echo "configure: cannot find javac, try --with-gcj, --with-jikes, --with-kjc, --with-ecj, or --with-gcjx" 1>&2
- exit 1
+ AC_MSG_ERROR([cannot find javac, try --with-gcj, --with-jikes, --with-kjc, --with-ecj, or --with-gcjx])
fi
])
diff --git a/libjava/classpath/native/Makefile.in b/libjava/classpath/native/Makefile.in
index ac867c8..831e44c 100644
--- a/libjava/classpath/native/Makefile.in
+++ b/libjava/classpath/native/Makefile.in
@@ -77,6 +77,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -116,6 +117,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -136,6 +139,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -183,6 +187,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -201,8 +206,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -214,8 +222,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -232,7 +238,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -240,18 +249,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/fdlibm/Makefile.am b/libjava/classpath/native/fdlibm/Makefile.am
index 64b3b39..09d8681 100644
--- a/libjava/classpath/native/fdlibm/Makefile.am
+++ b/libjava/classpath/native/fdlibm/Makefile.am
@@ -58,7 +58,7 @@ libfdlibm_la_SOURCES = \
w_sqrt.c \
namespace.h
-AM_LDFLAGS = @CLASSPATH_MODULE@
+AM_LDFLAGS = @CLASSPATH_CONVENIENCE@
# We just want the standard flags for fdlibm since it is an upstream lib
# and our normal -pedantic -Wall -Werror breaks this lib. So no AM_CFLAGS.
diff --git a/libjava/classpath/native/fdlibm/Makefile.in b/libjava/classpath/native/fdlibm/Makefile.in
index 5ed4628..2aeb47b 100644
--- a/libjava/classpath/native/fdlibm/Makefile.in
+++ b/libjava/classpath/native/fdlibm/Makefile.in
@@ -98,6 +98,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -137,6 +138,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -157,6 +160,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -204,6 +208,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -222,8 +227,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -235,8 +243,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -253,7 +259,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -261,18 +270,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -341,7 +354,7 @@ libfdlibm_la_SOURCES = \
w_sqrt.c \
namespace.h
-AM_LDFLAGS = @CLASSPATH_MODULE@
+AM_LDFLAGS = @CLASSPATH_CONVENIENCE@
all: all-am
.SUFFIXES:
diff --git a/libjava/classpath/native/fdlibm/fdlibm.h b/libjava/classpath/native/fdlibm/fdlibm.h
index 5dbcdb5..bf9f569 100644
--- a/libjava/classpath/native/fdlibm/fdlibm.h
+++ b/libjava/classpath/native/fdlibm/fdlibm.h
@@ -158,7 +158,7 @@ extern double erfc __P((double));
extern double gamma __P((double));
extern double hypot __P((double, double));
-#if !defined(isnan) && !defined(HAVE_ISNAN)
+#if !defined(isnan)
#define isnan(x) ((x) != (x))
#endif
diff --git a/libjava/classpath/native/fdlibm/ieeefp.h b/libjava/classpath/native/fdlibm/ieeefp.h
index 1dda99b..1a9740f 100644
--- a/libjava/classpath/native/fdlibm/ieeefp.h
+++ b/libjava/classpath/native/fdlibm/ieeefp.h
@@ -123,7 +123,7 @@
#define __IEEE_LITTLE_ENDIAN
#endif
-#if defined (__PPC__) || defined (__ppc__) || defined (__powerpc__) || defined (__ppc64__)
+#if defined (__PPC__) || defined (__ppc__) || defined (__powerpc__) || defined (__ppc64__) || defined (_POWER) || defined (_IBMR2)
#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX) || defined (__BIG_ENDIAN__)|| defined (__APPLE__)
#define __IEEE_BIG_ENDIAN
#else
diff --git a/libjava/classpath/native/jawt/Makefile.in b/libjava/classpath/native/jawt/Makefile.in
index b028ae5..3a1943d 100644
--- a/libjava/classpath/native/jawt/Makefile.in
+++ b/libjava/classpath/native/jawt/Makefile.in
@@ -90,6 +90,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -129,6 +130,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -149,6 +152,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -196,6 +200,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -214,8 +219,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -227,8 +235,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -245,7 +251,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -253,18 +262,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/jni/Makefile.in b/libjava/classpath/native/jni/Makefile.in
index 7aa8fc2..d39cb21 100644
--- a/libjava/classpath/native/jni/Makefile.in
+++ b/libjava/classpath/native/jni/Makefile.in
@@ -77,6 +77,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -116,6 +117,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -136,6 +139,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -183,6 +187,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -201,8 +206,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -214,8 +222,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -232,7 +238,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -240,18 +249,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/jni/classpath/Makefile.am b/libjava/classpath/native/jni/classpath/Makefile.am
index a26ab83..d996df6 100644
--- a/libjava/classpath/native/jni/classpath/Makefile.am
+++ b/libjava/classpath/native/jni/classpath/Makefile.am
@@ -7,6 +7,6 @@ libclasspath_la_SOURCES = jcl.c jcl.h \
jnilink.c jnilink.h \
native_state.c native_state.h
-AM_LDFLAGS = @CLASSPATH_MODULE@
+AM_LDFLAGS = @CLASSPATH_CONVENIENCE@
AM_CPPFLAGS = @CLASSPATH_INCLUDES@
AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
diff --git a/libjava/classpath/native/jni/classpath/Makefile.in b/libjava/classpath/native/jni/classpath/Makefile.in
index 6f33b77..2f3c3c7 100644
--- a/libjava/classpath/native/jni/classpath/Makefile.in
+++ b/libjava/classpath/native/jni/classpath/Makefile.in
@@ -89,6 +89,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -128,6 +129,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -148,6 +151,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -195,6 +199,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -213,8 +218,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -226,8 +234,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -244,7 +250,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -252,18 +261,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -281,7 +294,7 @@ libclasspath_la_SOURCES = jcl.c jcl.h \
jnilink.c jnilink.h \
native_state.c native_state.h
-AM_LDFLAGS = @CLASSPATH_MODULE@
+AM_LDFLAGS = @CLASSPATH_CONVENIENCE@
AM_CPPFLAGS = @CLASSPATH_INCLUDES@
AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
all: all-am
diff --git a/libjava/classpath/native/jni/classpath/jcl.c b/libjava/classpath/native/jni/classpath/jcl.c
index dd6ca06..e28c663 100644
--- a/libjava/classpath/native/jni/classpath/jcl.c
+++ b/libjava/classpath/native/jni/classpath/jcl.c
@@ -68,9 +68,9 @@ JCL_ThrowException (JNIEnv * env, const char *className, const char *errMsg)
if (errExcClass == NULL)
{
fprintf (stderr, "JCL: Utterly failed to throw exeption ");
- fprintf (stderr, className);
+ fprintf (stderr, "%s", className);
fprintf (stderr, " with message ");
- fprintf (stderr, errMsg);
+ fprintf (stderr, "%s", errMsg);
return;
}
}
diff --git a/libjava/classpath/native/jni/classpath/jcl.h b/libjava/classpath/native/jni/classpath/jcl.h
index 25662c0..514b782 100644
--- a/libjava/classpath/native/jni/classpath/jcl.h
+++ b/libjava/classpath/native/jni/classpath/jcl.h
@@ -71,9 +71,20 @@ JNIEXPORT void * JNICALL JCL_GetRawData (JNIEnv * env, jobject rawdata);
/* Simple debug macro */
#ifdef DEBUG
-#define DBG(x) fprintf(stderr, (x));
+#define DBG(x) fprintf(stderr, "%s", (x));
#else
#define DBG(x)
#endif
+/* Some O/S's don't declare 'environ' */
+#if HAVE_CRT_EXTERNS_H
+/* Darwin does not have a variable named environ
+ but has a function which you can get the environ
+ variable with. */
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#else
+extern char **environ;
+#endif /* HAVE_CRT_EXTERNS_H */
+
#endif
diff --git a/libjava/classpath/native/jni/gtk-peer/Makefile.in b/libjava/classpath/native/jni/gtk-peer/Makefile.in
index 9f4f332..a90bf48 100644
--- a/libjava/classpath/native/jni/gtk-peer/Makefile.in
+++ b/libjava/classpath/native/jni/gtk-peer/Makefile.in
@@ -167,6 +167,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -206,6 +207,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -226,6 +229,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -273,6 +277,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -291,8 +296,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -304,8 +312,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -322,7 +328,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -330,18 +339,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
index 30f2d5e..0726fb5 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
@@ -217,10 +217,10 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
}
(*env)->ReleaseStringUTFChars (env, chars, str);
-
+
for (i = g_list_first (items); i != NULL; i = g_list_next (i))
- g_free (i->data);
-
+ pango_item_free(i->data);
+
g_list_free (items);
gdk_threads_leave ();
@@ -239,6 +239,17 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics
struct peerfont *pfont = NULL;
jdouble *native_metrics = NULL;
PangoFontMetrics *pango_metrics = NULL;
+ PangoLayout* layout = NULL;
+ PangoRectangle ink_rect;
+ PangoRectangle logical_rect;
+ PangoLayoutIter* iter = NULL;
+ int pango_ascent = 0;
+ int pango_descent = 0;
+ int pango_ink_ascent = 0;
+ int pango_ink_descent = 0;
+ int baseline = 0;
+ int java_ascent = 0;
+ int java_descent = 0;
gdk_threads_enter();
@@ -254,21 +265,52 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics
g_assert (native_metrics != NULL);
- native_metrics[FONT_METRICS_ASCENT]
- = PANGO_PIXELS (pango_font_metrics_get_ascent (pango_metrics));
+ pango_ascent = PANGO_PIXELS (pango_font_metrics_get_ascent (pango_metrics));
+ pango_descent = PANGO_PIXELS (pango_font_metrics_get_descent (pango_metrics));
+
+ layout = pango_layout_new (pfont->ctx);
+
+ /* Pango seems to produce ascent and descent values larger than
+ those that Sun produces for the same-sized font. It turns out
+ that an average of the "ink ascent" and "logical ascent" closely
+ approximates Sun's ascent values. Likewise for descent values.
+ This is expensive but we cache GdkFontMetrics so this should only
+ run once per Font instance. */
+ pango_layout_set_text (layout, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"
+ "MNOPQRSTUVWXYZ0123456789", -1);
+ pango_layout_set_font_description (layout, pfont->desc);
+
+ pango_layout_get_pixel_extents (layout, &ink_rect, &logical_rect);
- native_metrics[FONT_METRICS_MAX_ASCENT]
- = native_metrics[FONT_METRICS_ASCENT];
+ iter = pango_layout_get_iter (layout);
+
+ baseline = PANGO_PIXELS (pango_layout_iter_get_baseline (iter));
+
+ pango_ink_ascent = baseline - ink_rect.y;
+ pango_ink_descent = ink_rect.y + ink_rect.height - baseline;
+
+ java_ascent = (pango_ascent + pango_ink_ascent) >> 1;
+ java_descent = (pango_descent + pango_ink_descent) >> 1;
+
+ java_ascent = MAX(0, java_ascent);
+ java_descent = MAX(0, java_descent);
+
+ pango_ascent = MAX(0, pango_ascent);
+ pango_descent = MAX(0, pango_descent);
+
+ /* Pango monospaced fonts have smaller ascent metrics than Sun's so
+ we return the logical ascent for monospaced fonts. */
+ if (!strcmp (pango_font_description_get_family (pfont->desc),
+ "Courier"))
+ native_metrics[FONT_METRICS_ASCENT] = pango_ascent;
+ else
+ native_metrics[FONT_METRICS_ASCENT] = java_ascent;
- native_metrics[FONT_METRICS_DESCENT]
- = PANGO_PIXELS (pango_font_metrics_get_descent (pango_metrics));
+ native_metrics[FONT_METRICS_MAX_ASCENT] = pango_ascent;
- if (native_metrics[FONT_METRICS_DESCENT] < 0)
- native_metrics[FONT_METRICS_DESCENT]
- = - native_metrics[FONT_METRICS_DESCENT];
+ native_metrics[FONT_METRICS_DESCENT] = java_descent;
- native_metrics[FONT_METRICS_MAX_DESCENT]
- = native_metrics[FONT_METRICS_DESCENT];
+ native_metrics[FONT_METRICS_MAX_DESCENT] = pango_descent;
native_metrics[FONT_METRICS_MAX_ADVANCE]
= PANGO_PIXELS (pango_font_metrics_get_approximate_char_width
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
index f6e0e6b..29bc185 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
@@ -43,6 +43,46 @@ exception statement from your version. */
static jmethodID initComponentGraphicsUnlockedID;
+/*
+ * AWT applications may call Graphics methods from threads other than
+ * the GDK main thread, so we must call XFlush after each batch of
+ * drawing operations, otherwise animations flicker. Flushing after
+ * every graphics operation is excessive and negatively affects
+ * performance (PR 26486). We set the maximum frequency to 50 times
+ * per second, or a minimum period of 20 milliseconds between calls to
+ * XFlush. See gnu.classpath.examples.awt.AnimationApplet for an
+ * example applet that requires these XFlush calls.
+ */
+
+static short flush_scheduled = 0;
+
+static gboolean flush (gpointer data __attribute__((unused)))
+{
+ gdk_threads_enter ();
+
+ XFlush (GDK_DISPLAY ());
+ flush_scheduled = 0;
+
+ gdk_threads_leave ();
+
+ return FALSE;
+}
+
+/* The minimum time period between calls to XFlush, in
+ milliseconds. */
+#define MINIMUM_FLUSH_PERIOD 20
+
+/* schedule_flush must be called with the GDK lock held. */
+static void
+schedule_flush ()
+{
+ if (!flush_scheduled)
+ {
+ g_timeout_add (MINIMUM_FLUSH_PERIOD, flush, NULL);
+ flush_scheduled = 1;
+ }
+}
+
void
cp_gtk_graphics_init_jni (void)
{
@@ -120,7 +160,8 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeCopyState
else /* GDK_IS_WINDOW (g->drawable) */
g_object_ref (g->drawable);
- g_object_ref (g->cm);
+ if (g->cm != NULL)
+ g_object_ref (g->cm);
NSA_SET_G_PTR (env, obj, g);
@@ -141,7 +182,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II
g->drawable = (GdkDrawable *) gdk_pixmap_new (NULL, width, height,
gdk_rgb_get_visual ()->depth);
g->cm = gdk_rgb_get_colormap ();
- g_object_ref (g->cm);
+
+ if (g->cm != NULL)
+ g_object_ref (g->cm);
g->gc = gdk_gc_new (g->drawable);
NSA_SET_G_PTR (env, obj, g);
@@ -168,7 +211,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage
g->drawable = (GdkDrawable *)pixmap;
g->cm = gdk_drawable_get_colormap (g->drawable);
- g_object_ref (g->cm);
+
+ if (g->cm != NULL)
+ g_object_ref (g->cm);
g->gc = gdk_gc_new (g->drawable);
NSA_SET_G_PTR (env, obj, g);
@@ -195,7 +240,10 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked
g_object_ref (g->drawable);
g->cm = gtk_widget_get_colormap (widget);
- g_object_ref (g->cm);
+
+ if (g->cm != NULL)
+ g_object_ref (g->cm);
+
g->gc = gdk_gc_new (g->drawable);
gdk_gc_copy (g->gc, widget->style->fg_gc[GTK_STATE_NORMAL]);
color = widget->style->fg[GTK_STATE_NORMAL];
@@ -253,15 +301,17 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeDispose
}
XFlush (GDK_DISPLAY ());
-
- g_object_unref (g->gc);
+
+ if (g->gc != NULL)
+ g_object_unref (g->gc);
if (GDK_STABLE_IS_PIXMAP (g->drawable))
g_object_unref (g->drawable);
- else /* GDK_IS_WINDOW (g->drawable) */
+ else if (g->drawable != NULL)
g_object_unref (g->drawable);
- g_object_unref (g->cm);
+ if (g->cm != NULL)
+ g_object_unref (g->cm);
g_free (g);
@@ -343,7 +393,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString
pango_layout_iter_free (iter);
pango_layout_set_text (pfont->layout, "", -1);
- gdk_flush ();
+ schedule_flush ();
(*env)->ReleaseStringUTFChars (env, str, cstr);
@@ -363,7 +413,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine
gdk_draw_line (g->drawable, g->gc,
x + g->x_offset, y + g->y_offset,
x2 + g->x_offset, y2 + g->y_offset);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -380,7 +430,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect
gdk_draw_rectangle (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset, width, height);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -397,7 +447,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect
gdk_draw_rectangle (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset, width, height);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -419,7 +469,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea
x + g->x_offset, y + g->y_offset,
x + g->x_offset + dx, y + g->y_offset + dy,
width, height);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -455,13 +505,13 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect
else
{
gdk_gc_get_values (g->gc, &saved);
- gdk_gc_set_foreground (g->gc, &(saved.background));
+ gdk_gc_set_background (g->gc, &(saved.background));
gdk_draw_rectangle (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset, width, height);
gdk_gc_set_foreground (g->gc, &(saved.foreground));
}
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -496,10 +546,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor
color.blue = blue << 8;
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
-
- gdk_colormap_alloc_color (g->cm, &color, TRUE, TRUE);
+
+ if (g->cm != NULL)
+ gdk_colormap_alloc_color (g->cm, &color, TRUE, TRUE);
+
gdk_gc_set_foreground (g->gc, &color);
-
+
gdk_threads_leave ();
}
@@ -517,7 +569,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc
gdk_draw_arc (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset,
width, height, angle1 << 6, angle2 << 6);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -564,7 +616,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline
g->x_offset, g->y_offset);
gdk_draw_lines (g->drawable, g->gc, points, npoints);
- gdk_flush ();
+ schedule_flush ();
g_free (points);
@@ -591,7 +643,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon
points[npoints++] = points[0];
gdk_draw_lines (g->drawable, g->gc, points, npoints);
- gdk_flush ();
+ schedule_flush ();
g_free (points);
@@ -612,7 +664,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon
points = translate_points (env, xpoints, ypoints, npoints,
g->x_offset, g->y_offset);
gdk_draw_polygon (g->drawable, g->gc, TRUE, points, npoints);
- gdk_flush ();
+ schedule_flush ();
g_free (points);
@@ -633,7 +685,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc
gdk_draw_arc (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset,
width, height, angle1 << 6, angle2 << 6);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -651,7 +703,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval
gdk_draw_arc (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset,
width, height, 0, 23040);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
@@ -669,7 +721,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval
gdk_draw_arc (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset,
width, height, 0, 23040);
- gdk_flush ();
+ schedule_flush ();
gdk_threads_leave ();
}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
index c95ea61..b42f649 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
@@ -1992,6 +1992,10 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
+
+ if (gr->pattern == NULL)
+ return;
+
if (gr->debug) printf ("cairo_pattern_set_filter %d\n", filter);
switch ((enum java_awt_rendering_hints_filter) filter)
{
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
index 4d6169b..eba00fb 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
@@ -1,5 +1,5 @@
/* gdkpixbufdecoder.c
- Copyright (C) 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -191,8 +191,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState
GdkPixbufLoader *loader = NULL;
jobject *decoder = NULL;
- gdk_threads_enter ();
-
decoder = (jobject *) g_malloc (sizeof (jobject));
g_assert (decoder != NULL);
*decoder = (*env)->NewGlobalRef (env, obj);
@@ -204,8 +202,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState
g_signal_connect (loader, "closed", G_CALLBACK (closed_cb), decoder);
NSA_SET_PB_PTR (env, obj, loader);
-
- gdk_threads_leave ();
}
static void
@@ -317,8 +313,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish
{
GdkPixbufLoader *loader = NULL;
- gdk_threads_enter ();
-
loader = (GdkPixbufLoader *)NSA_DEL_PB_PTR (env, obj);
if (loader == NULL)
return;
@@ -326,8 +320,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish
if (needs_close)
gdk_pixbuf_loader_close (loader, NULL);
g_object_unref (loader);
-
- gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -337,8 +329,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone
GError *err = NULL;
GdkPixbufLoader *loader = NULL;
- gdk_threads_enter ();
-
loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj);
g_assert (loader != NULL);
@@ -349,8 +339,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone
JCL_ThrowException (env, "java/io/IOException", err->message);
g_error_free (err);
}
-
- gdk_threads_leave ();
}
struct stream_save_request
@@ -370,6 +358,9 @@ save_to_stream(const gchar *buf,
jbyteArray jbuf;
jbyte *cbuf;
+ /* FIXME. Don't call user code directly on this thread.
+ Store bytes and signal a "pump" thread to deliver to user code.
+ Then we don't have to drop/acquire any locks. */
gdk_threads_leave ();
jbuf = (*(ssr->env))->NewByteArray ((ssr->env), count);
@@ -400,8 +391,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage
int i;
struct stream_save_request ssr;
- gdk_threads_enter ();
-
ssr.stream = &stream;
ssr.env = env;
@@ -465,8 +454,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage
(*env)->ReleaseStringUTFChars (env, jenctype, enctype);
(*env)->ReleaseIntArrayElements (env, jarr, ints, 0);
-
- gdk_threads_leave ();
}
@@ -478,8 +465,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
jbyte *bytes = NULL;
GError *err = NULL;
- gdk_threads_enter ();
-
g_assert (len >= 1);
g_assert (jarr != NULL);
@@ -497,6 +482,4 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
JCL_ThrowException (env, "java/io/IOException", err->message);
g_error_free (err);
}
-
- gdk_threads_leave ();
}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
index ef9ac12..f443619 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
@@ -56,3 +56,17 @@ Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create
gdk_threads_leave ();
}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_realize (JNIEnv *env, jobject obj)
+{
+ void *ptr;
+
+ gdk_threads_enter ();
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gtk_widget_realize (GTK_WIDGET (ptr));
+
+ gdk_threads_leave ();
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
index 5ba300b..16ef43c 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c
@@ -39,6 +39,8 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.h"
+static GtkWidget *comboboxgroup_get_widget (GtkWidget *widget);
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_dispose
(JNIEnv *env, jobject obj)
@@ -59,7 +61,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, checkbox);
- button = GTK_RADIO_BUTTON (ptr);
+ button = GTK_RADIO_BUTTON (comboboxgroup_get_widget (GTK_WIDGET (ptr)));
/* Update the group to point to some other widget in the group. We
have to do this because Gtk doesn't have a separate object to
@@ -75,3 +77,11 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove
gdk_threads_leave ();
}
+
+static GtkWidget *
+comboboxgroup_get_widget (GtkWidget *widget)
+{
+ if (GTK_IS_EVENT_BOX (widget))
+ return gtk_bin_get_child (GTK_BIN(widget));
+ return widget;
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
index 297b4f8..191cdda 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
@@ -42,6 +42,7 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
static jmethodID postItemEventID;
+static GtkWidget *combobox_get_widget (GtkWidget *widget);
void
cp_gtk_checkbox_init_jni (void)
@@ -63,26 +64,35 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create
(JNIEnv *env, jobject obj, jobject group)
{
GtkWidget *button;
+ GtkWidget *eventbox;
gdk_threads_enter ();
NSA_SET_GLOBAL_REF (env, obj);
-
+ eventbox = gtk_event_box_new ();
+
if (group == NULL)
+ {
button = gtk_check_button_new_with_label ("");
+ gtk_container_add (GTK_CONTAINER (eventbox), button);
+ gtk_widget_show (button);
+ }
else
{
void *native_group = NSA_GET_PTR (env, group);
button = gtk_radio_button_new_with_label_from_widget (native_group, "");
+ gtk_container_add (GTK_CONTAINER (eventbox), button);
+ gtk_widget_show (button);
+
if (native_group == NULL)
- {
- /* Set the native group so we can use the correct value the
- next time around. FIXME: this doesn't work! */
- NSA_SET_PTR (env, group, button);
- }
+ {
+ /* Set the native group so we can use the correct value the
+ next time around. FIXME: this doesn't work! */
+ NSA_SET_PTR (env, group, button);
+ }
}
- NSA_SET_PTR (env, obj, button);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -93,18 +103,20 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals
{
void *ptr = NULL;
jobject *gref = NULL;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
/* Checkbox signals */
- g_signal_connect (G_OBJECT (ptr), "toggled",
+ g_signal_connect (G_OBJECT (bin), "toggled",
G_CALLBACK (item_toggled_cb), *gref);
/* Component signals */
- cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (bin), gref);
gdk_threads_leave ();
}
@@ -115,16 +127,18 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup
{
GtkRadioButton *button;
void *native_group, *ptr;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
+
/* FIXME: we can't yet switch between a checkbutton and a
radiobutton. However, AWT requires this. For now we just
crash. */
- button = GTK_RADIO_BUTTON (ptr);
+ button = GTK_RADIO_BUTTON (bin);
native_group = NSA_GET_PTR (env, group);
if (native_group == NULL)
@@ -152,12 +166,14 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkToggleButtonSetActive
(JNIEnv *env, jobject obj, jboolean is_active)
{
void *ptr;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr), is_active);
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bin), is_active);
gdk_threads_leave ();
}
@@ -176,7 +192,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
ptr = NSA_GET_PTR (env, obj);
- button = GTK_WIDGET (ptr);
+ button = combobox_get_widget (GTK_WIDGET (ptr));
label = gtk_bin_get_child (GTK_BIN(button));
if (!label)
@@ -217,7 +233,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel
c_label = (*env)->GetStringUTFChars (env, label, NULL);
- label_widget = gtk_bin_get_child (GTK_BIN (ptr));
+ label_widget = gtk_bin_get_child (GTK_BIN (combobox_get_widget (GTK_WIDGET (ptr))));
gtk_label_set_text (GTK_LABEL (label_widget), c_label);
(*env)->ReleaseStringUTFChars (env, label, c_label);
@@ -233,3 +249,15 @@ item_toggled_cb (GtkToggleButton *item, jobject peer)
peer,
item->active);
}
+
+static GtkWidget *
+combobox_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+
+ g_assert (GTK_IS_EVENT_BOX (widget));
+ wid = gtk_bin_get_child (GTK_BIN(widget));
+
+ return wid;
+}
+
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
index e9a0f69..46949d9 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
@@ -40,6 +40,7 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkChoicePeer.h"
static jmethodID postChoiceItemEventID;
+static GtkWidget *choice_get_widget (GtkWidget *widget);
void
cp_gtk_choice_init_jni (void)
@@ -61,16 +62,20 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create
(JNIEnv *env, jobject obj)
{
GtkWidget *combobox;
+ GtkWidget *eventbox;
jobject *gref;
gdk_threads_enter ();
NSA_SET_GLOBAL_REF (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
-
+
+ eventbox = gtk_event_box_new ();
combobox = gtk_combo_box_new_text ();
+ gtk_container_add (GTK_CONTAINER (eventbox), combobox);
+ gtk_widget_show (combobox);
- NSA_SET_PTR (env, obj, combobox);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -81,18 +86,21 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_connectSignals
{
void *ptr = NULL;
jobject *gref = NULL;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
/* Choice signals */
- g_signal_connect (G_OBJECT (ptr), "changed",
+ g_signal_connect (G_OBJECT (bin), "changed",
G_CALLBACK (selection_changed_cb), *gref);
/* Component signals */
- cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (bin), gref);
gdk_threads_leave ();
}
@@ -103,11 +111,13 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append
{
gpointer ptr;
jsize count, i;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
count = (*env)->GetArrayLength (env, items);
for (i = 0; i < count; i++)
@@ -118,7 +128,7 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append
item = (*env)->GetObjectArrayElement (env, items, i);
label = (*env)->GetStringUTFChars (env, item, NULL);
- gtk_combo_box_append_text (GTK_COMBO_BOX (ptr), label);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (bin), label);
(*env)->ReleaseStringUTFChars (env, item, label);
(*env)->DeleteLocalRef(env, item);
@@ -133,14 +143,16 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd
{
void *ptr;
const char *label;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
label = (*env)->GetStringUTFChars (env, item, 0);
- gtk_combo_box_insert_text (GTK_COMBO_BOX (ptr), index, label);
+ gtk_combo_box_insert_text (GTK_COMBO_BOX (bin), index, label);
(*env)->ReleaseStringUTFChars (env, item, label);
@@ -152,12 +164,14 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove
(JNIEnv *env, jobject obj, jint index)
{
void *ptr;
-
+ GtkWidget *bin;
+
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- gtk_combo_box_remove_text (GTK_COMBO_BOX (ptr), index);
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
+ gtk_combo_box_remove_text (GTK_COMBO_BOX (bin), index);
gdk_threads_leave ();
}
@@ -168,20 +182,22 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemoveAll
{
void *ptr;
GtkTreeModel *model;
+ GtkWidget *bin;
gint count, i;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (ptr));
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (bin));
count = gtk_tree_model_iter_n_children (model, NULL);
/* First, unselect everything, to avoid problems when removing items. */
- gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (bin), -1);
for (i = count - 1; i >= 0; i--) {
- gtk_combo_box_remove_text (GTK_COMBO_BOX (ptr), i);
+ gtk_combo_box_remove_text (GTK_COMBO_BOX (bin), i);
}
gdk_threads_leave ();
@@ -204,10 +220,12 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNativeUnlocked
(JNIEnv *env, jobject obj, jint index)
{
void *ptr;
-
+ GtkWidget *bin;
+
ptr = NSA_GET_PTR (env, obj);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), index);
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (bin), index);
}
JNIEXPORT jint JNICALL
@@ -216,12 +234,14 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeGetSelected
{
void *ptr;
int index;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- index = gtk_combo_box_get_active (GTK_COMBO_BOX (ptr));
+ bin = choice_get_widget (GTK_WIDGET (ptr));
+
+ index = gtk_combo_box_get_active (GTK_COMBO_BOX (bin));
gdk_threads_leave ();
@@ -252,3 +272,14 @@ selection_changed_cb (GtkComboBox *combobox, jobject peer)
(jint) AWT_ITEM_SELECTED);
}
}
+
+static GtkWidget *
+choice_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+
+ g_assert (GTK_IS_EVENT_BOX (widget));
+ wid = gtk_bin_get_child (GTK_BIN(widget));
+
+ return wid;
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
index 3b62dc3..cb2c872 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
@@ -1,5 +1,5 @@
/* gtkclipboard.c
- Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,23 +45,21 @@ exception statement from your version. */
#define IMAGE_TARGET 3
#define URI_TARGET 4
-/* The clipboard and standard (string targets) shared with GtkSelection. */
+/* The clipboard and selection plus corresponding GtkClipboard objects. */
GtkClipboard *cp_gtk_clipboard;
+GtkClipboard *cp_gtk_selection;
+jobject cp_gtk_clipboard_instance;
+jobject cp_gtk_selection_instance;
+
+/* Standard (string targets) shared with GtkSelection. */
jstring cp_gtk_stringTarget;
jstring cp_gtk_imageTarget;
jstring cp_gtk_filesTarget;
-/* Simple id to keep track of the selection we are currently managing. */
-static gint current_selection = 0;
-
-/* Whether we "own" the clipboard. And may clear it. */
-static int owner = 0;
-
static jclass gtk_clipboard_class;
-static jmethodID setSystemContentsID;
-static jobject gtk_clipboard_instance = NULL;
+static jmethodID setSystemContentsID;
static jmethodID provideContentID;
static jmethodID provideTextID;
static jmethodID provideImageID;
@@ -70,22 +68,26 @@ static jmethodID provideURIsID;
/* Called when clipboard owner changes. Used to update available targets. */
#if GTK_MINOR_VERSION > 4
static void
-clipboard_owner_change_cb (GtkClipboard *clipboard __attribute__((unused)),
+clipboard_owner_change_cb (GtkClipboard *clipboard,
GdkEvent *event __attribute__((unused)),
gpointer user_data __attribute__((unused)))
{
- /* These are only interesting when we are not the owner. Otherwise
- we will have the set and clear functions doing the updating. */
JNIEnv *env = cp_gtk_gdk_env ();
- if (!owner)
- (*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
- setSystemContentsID);
+ if (clipboard == cp_gtk_clipboard)
+ (*env)->CallVoidMethod (env, cp_gtk_clipboard_instance,
+ setSystemContentsID, JNI_FALSE);
+ else
+ (*env)->CallVoidMethod (env, cp_gtk_selection_instance,
+ setSystemContentsID, JNI_FALSE);
+
}
#endif
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
- jclass gtkclipboard,
+ jclass clz,
+ jobject gtkclipboard,
+ jobject gtkselection,
jstring string,
jstring image,
jstring files)
@@ -93,19 +95,47 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
GdkDisplay* display;
jboolean can_cache;
- gtk_clipboard_class = gtkclipboard;
- setSystemContentsID = (*env)->GetStaticMethodID (env, gtk_clipboard_class,
- "setSystemContents",
- "()V");
+ gtk_clipboard_class = clz;
+ setSystemContentsID = (*env)->GetMethodID (env, gtk_clipboard_class,
+ "setSystemContents",
+ "(Z)V");
if (setSystemContentsID == NULL)
return JNI_FALSE;
+ provideContentID = (*env)->GetMethodID (env, gtk_clipboard_class,
+ "provideContent",
+ "(Ljava/lang/String;)[B");
+ if (provideContentID == NULL)
+ return JNI_FALSE;
+
+ provideTextID = (*env)->GetMethodID (env, gtk_clipboard_class,
+ "provideText",
+ "()Ljava/lang/String;");
+ if (provideTextID == NULL)
+ return JNI_FALSE;
+
+ provideImageID = (*env)->GetMethodID (env, gtk_clipboard_class,
+ "provideImage",
+ "()Lgnu/java/awt/peer/gtk/GtkImage;");
+ if (provideImageID == NULL)
+ return JNI_FALSE;
+
+ provideURIsID = (*env)->GetMethodID (env, gtk_clipboard_class,
+ "provideURIs",
+ "()[Ljava/lang/String;");
+ if (provideURIsID == NULL)
+ return JNI_FALSE;
+
+ cp_gtk_clipboard_instance = (*env)->NewGlobalRef(env, gtkclipboard);
+ cp_gtk_selection_instance = (*env)->NewGlobalRef(env, gtkselection);
+
cp_gtk_stringTarget = (*env)->NewGlobalRef(env, string);
cp_gtk_imageTarget = (*env)->NewGlobalRef(env, image);
cp_gtk_filesTarget = (*env)->NewGlobalRef(env, files);
gdk_threads_enter ();
cp_gtk_clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ cp_gtk_selection = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
display = gtk_clipboard_get_display (cp_gtk_clipboard);
/* Check for support for clipboard owner changes. */
@@ -114,26 +144,37 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
{
g_signal_connect (cp_gtk_clipboard, "owner-change",
G_CALLBACK (clipboard_owner_change_cb), NULL);
+ g_signal_connect (cp_gtk_selection, "owner-change",
+ G_CALLBACK (clipboard_owner_change_cb), NULL);
gdk_display_request_selection_notification (display,
GDK_SELECTION_CLIPBOARD);
+ gdk_display_request_selection_notification (display,
+ GDK_SELECTION_PRIMARY);
can_cache = JNI_TRUE;
}
else
#endif
can_cache = JNI_FALSE;
+
gdk_threads_leave ();
return can_cache;
}
static void
-clipboard_get_func (GtkClipboard *clipboard __attribute__((unused)),
+clipboard_get_func (GtkClipboard *clipboard,
GtkSelectionData *selection,
guint info,
gpointer user_data __attribute__((unused)))
{
+ jobject gtk_clipboard_instance;
JNIEnv *env = cp_gtk_gdk_env ();
+ if (clipboard == cp_gtk_clipboard)
+ gtk_clipboard_instance = cp_gtk_clipboard_instance;
+ else
+ gtk_clipboard_instance = cp_gtk_selection_instance;
+
if (info == OBJECT_TARGET)
{
const gchar *target_name;
@@ -258,16 +299,17 @@ clipboard_get_func (GtkClipboard *clipboard __attribute__((unused)),
}
static void
-clipboard_clear_func (GtkClipboard *clipboard __attribute__((unused)),
- gpointer user_data)
+clipboard_clear_func (GtkClipboard *clipboard,
+ gpointer user_data __attribute__((unused)))
{
- if (owner && GPOINTER_TO_INT(user_data) == current_selection)
- {
- JNIEnv *env = cp_gtk_gdk_env();
- owner = 0;
- (*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
- setSystemContentsID);
- }
+ JNIEnv *env = cp_gtk_gdk_env();
+ if (clipboard == cp_gtk_clipboard)
+ (*env)->CallVoidMethod (env, cp_gtk_clipboard_instance,
+ setSystemContentsID, JNI_TRUE);
+ else
+ (*env)->CallVoidMethod (env, cp_gtk_selection_instance,
+ setSystemContentsID, JNI_TRUE);
+
}
JNIEXPORT void JNICALL
@@ -347,65 +389,35 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_advertiseContent
/* Set the targets plus callback functions and ask for the clipboard
to be stored when the application exists if supported. */
- current_selection++;
- if (gtk_clipboard_set_with_data (cp_gtk_clipboard, targets, n,
- clipboard_get_func,
- clipboard_clear_func,
- GINT_TO_POINTER(current_selection)))
+ if ((*env)->IsSameObject(env, instance, cp_gtk_clipboard_instance))
{
- owner = 1;
- if (gtk_clipboard_instance == NULL)
+ if (gtk_clipboard_set_with_data (cp_gtk_clipboard, targets, n,
+ clipboard_get_func,
+ clipboard_clear_func,
+ NULL))
{
- JNIEnv *env = cp_gtk_gdk_env ();
- gtk_clipboard_instance = (*env)->NewGlobalRef(env, instance);
-
- provideContentID
- = (*env)->GetMethodID (env, gtk_clipboard_class,
- "provideContent",
- "(Ljava/lang/String;)[B");
- if (provideContentID == NULL)
- return;
-
- provideTextID
- = (*env)->GetMethodID (env, gtk_clipboard_class,
- "provideText", "()Ljava/lang/String;");
- if (provideTextID == NULL)
- return;
-
- provideImageID
- = (*env)->GetMethodID (env, gtk_clipboard_class,
- "provideImage",
- "()Lgnu/java/awt/peer/gtk/GtkImage;");
- if (provideImageID == NULL)
- return;
-
- provideURIsID
- = (*env)->GetMethodID (env, gtk_clipboard_class,
- "provideURIs",
- "()[Ljava/lang/String;");
- if (provideURIsID == NULL)
- return;
- }
#if GTK_MINOR_VERSION > 4
- gtk_clipboard_set_can_store (cp_gtk_clipboard, NULL, 0);
+ gtk_clipboard_set_can_store (cp_gtk_clipboard, NULL, 0);
#endif
+ }
}
else
{
- owner = 0;
- (*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
- setSystemContentsID);
+ if (gtk_clipboard_set_with_data (cp_gtk_selection, targets, n,
+ clipboard_get_func,
+ clipboard_clear_func,
+ NULL))
+ {
+#if GTK_MINOR_VERSION > 4
+ gtk_clipboard_set_can_store (cp_gtk_selection, NULL, 0);
+#endif
+ }
}
for (i = 0; i < n; i++)
g_free (targets[i].target);
g_free (targets);
}
- else if (owner)
- {
- gtk_clipboard_clear (cp_gtk_clipboard);
- owner = 0;
- }
gtk_target_list_unref (target_list);
gdk_threads_leave ();
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
index 6de7b61..b0d4ab9 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
@@ -1,5 +1,5 @@
/* gtkcomponentpeer.c -- Native implementation of GtkComponentPeer
- Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -67,15 +67,19 @@ exception statement from your version. */
#define AWT_MOUSE_ENTERED 504
#define AWT_MOUSE_EXITED 505
#define AWT_MOUSE_DRAGGED 506
+#define AWT_MOUSE_WHEEL 507
+
+#define AWT_WHEEL_UNIT_SCROLL 0
#define AWT_FOCUS_GAINED 1004
#define AWT_FOCUS_LOST 1005
static GtkWidget *find_fg_color_widget (GtkWidget *widget);
static GtkWidget *find_bg_color_widget (GtkWidget *widget);
+static GtkWidget *get_widget (GtkWidget *widget);
static jmethodID postMouseEventID;
-static jmethodID setCursorID;
+static jmethodID postMouseWheelEventID;
static jmethodID postExposeEventID;
static jmethodID postFocusEventID;
@@ -90,8 +94,10 @@ cp_gtk_component_init_jni (void)
postMouseEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
"postMouseEvent", "(IJIIIIZ)V");
- setCursorID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
- "setCursor", "()V");
+ postMouseWheelEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkcomponentpeer,
+ "postMouseWheelEvent",
+ "(IJIIIIZIII)V");
postExposeEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
"postExposeEvent", "(IIII)V");
@@ -109,6 +115,9 @@ static gboolean component_button_release_cb (GtkWidget *widget,
static gboolean component_motion_notify_cb (GtkWidget *widget,
GdkEventMotion *event,
jobject peer);
+static gboolean component_scroll_cb (GtkWidget *widget,
+ GdkEventScroll *event,
+ jobject peer);
static gboolean component_enter_notify_cb (GtkWidget *widget,
GdkEventCrossing *event,
jobject peer);
@@ -179,19 +188,19 @@ state_to_awt_mods_with_button_states (guint state)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor
- (JNIEnv *env, jobject obj, jint type)
+ (JNIEnv *env, jobject obj, jint type, jobject image, jint x, jint y)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked
- (env, obj, type);
+ (env, obj, type, image, x, y);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked
- (JNIEnv *env, jobject obj, jint type)
+ (JNIEnv *env, jobject obj, jint type, jobject image, jint x, jint y)
{
void *ptr;
GtkWidget *widget;
@@ -245,11 +254,21 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked
gdk_cursor_type = GDK_LEFT_PTR;
}
- widget = GTK_WIDGET(ptr);
+ widget = get_widget(GTK_WIDGET(ptr));
+
+ if (image == NULL)
+ gdk_cursor = gdk_cursor_new (gdk_cursor_type);
+ else
+ gdk_cursor
+ = gdk_cursor_new_from_pixbuf (gdk_drawable_get_display (widget->window),
+ cp_gtk_image_get_pixbuf (env, image),
+ x, y);
- gdk_cursor = gdk_cursor_new (gdk_cursor_type);
gdk_window_set_cursor (widget->window, gdk_cursor);
gdk_cursor_unref (gdk_cursor);
+
+ /* Make sure the cursor is replaced on screen. */
+ gdk_flush();
}
JNIEXPORT void JNICALL
@@ -265,9 +284,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent
ptr = NSA_GET_PTR (env, obj);
parent_ptr = NSA_GET_PTR (env, parent);
-
+
widget = GTK_WIDGET (ptr);
- parent_widget = GTK_WIDGET (parent_ptr);
+ parent_widget = get_widget(GTK_WIDGET (parent_ptr));
if (widget->parent == NULL)
{
@@ -310,7 +329,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetSensitive
ptr = NSA_GET_PTR (env, obj);
- gtk_widget_set_sensitive (GTK_WIDGET (ptr), sensitive);
+ gtk_widget_set_sensitive (get_widget(GTK_WIDGET (ptr)), sensitive);
gdk_threads_leave ();
}
@@ -325,7 +344,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus
ptr = NSA_GET_PTR (env, obj);
- gtk_widget_grab_focus (GTK_WIDGET (ptr));
+ gtk_widget_grab_focus (get_widget(GTK_WIDGET (ptr)));
gdk_threads_leave ();
}
@@ -361,11 +380,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent
}
if (GTK_IS_BUTTON (ptr))
- event->key.window = GTK_BUTTON (ptr)->event_window;
- else if (GTK_IS_SCROLLED_WINDOW (ptr))
- event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child)->window;
+ event->key.window = GTK_BUTTON (get_widget(GTK_WIDGET (ptr)))->event_window;
+ else if (GTK_IS_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr))))
+ event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child)->window;
else
- event->key.window = GTK_WIDGET (ptr)->window;
+ event->key.window = get_widget(GTK_WIDGET (ptr))->window;
event->key.send_event = 0;
event->key.time = (guint32) when;
@@ -441,10 +460,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent
so we don't want to resend it. */
if (!GTK_IS_WINDOW (ptr))
{
- if (GTK_IS_SCROLLED_WINDOW (ptr))
- gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child), event);
+ if (GTK_IS_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr))))
+ gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child), event);
else
- gtk_widget_event (GTK_WIDGET (ptr), event);
+ gtk_widget_event (get_widget(GTK_WIDGET (ptr)), event);
}
gdk_threads_leave ();
@@ -465,7 +484,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen
ptr = NSA_GET_PTR (env, obj);
point = (*env)->GetIntArrayElements (env, jpoint, 0);
- gdk_window_get_root_origin (GTK_WIDGET (ptr)->window, point, point+1);
+ gdk_window_get_root_origin (get_widget(GTK_WIDGET (ptr))->window, point, point+1);
(*env)->ReleaseIntArrayElements(env, jpoint, point, 0);
@@ -488,7 +507,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen
ptr = NSA_GET_PTR (env, obj);
point = (*env)->GetIntArrayElements (env, jpoint, 0);
- widget = GTK_WIDGET(ptr);
+ widget = get_widget(GTK_WIDGET (ptr));
while(gtk_widget_get_parent(widget) != NULL)
widget = gtk_widget_get_parent(widget);
gdk_window_get_position (GTK_WIDGET(widget)->window, point, point+1);
@@ -519,7 +538,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions
dims = (*env)->GetIntArrayElements (env, jdims, 0);
dims[0] = dims[1] = 0;
- gtk_widget_size_request (GTK_WIDGET (ptr), &requisition);
+ gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &requisition);
dims[0] = requisition.width;
dims[1] = requisition.height;
@@ -551,10 +570,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions
/* Widgets that extend GtkWindow such as GtkFileChooserDialog may have
a default size. These values seem more useful then the natural
requisition values, particularly for GtkFileChooserDialog. */
- if (GTK_IS_WINDOW (ptr))
+ if (GTK_IS_WINDOW (get_widget(GTK_WIDGET (ptr))))
{
gint width, height;
- gtk_window_get_default_size (GTK_WINDOW (ptr), &width, &height);
+ gtk_window_get_default_size (GTK_WINDOW (get_widget(GTK_WIDGET (ptr))), &width, &height);
dims[0] = width;
dims[1] = height;
@@ -562,14 +581,14 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions
else
{
/* Save the widget's current size request. */
- gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
+ gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &current_req);
/* Get the widget's "natural" size request. */
- gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
- gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
+ gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)), -1, -1);
+ gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &natural_req);
/* Reset the widget's size request. */
- gtk_widget_set_size_request (GTK_WIDGET (ptr),
+ gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)),
current_req.width, current_req.height);
dims[0] = natural_req.width;
@@ -656,7 +675,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground
ptr = NSA_GET_PTR (env, obj);
- fg = GTK_WIDGET (ptr)->style->fg[GTK_STATE_NORMAL];
+ fg = get_widget(GTK_WIDGET (ptr))->style->fg[GTK_STATE_NORMAL];
array = (*env)->NewIntArray (env, 3);
@@ -766,7 +785,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled
ptr = NSA_GET_PTR (env, obj);
- ret_val = GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (ptr));
+ ret_val = GTK_WIDGET_IS_SENSITIVE (get_widget(GTK_WIDGET (ptr)));
gdk_threads_leave ();
@@ -790,7 +809,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isRealized
return FALSE;
}
- ret_val = GTK_WIDGET_REALIZED (GTK_WIDGET (ptr));
+ ret_val = GTK_WIDGET_REALIZED (get_widget(GTK_WIDGET (ptr)));
gdk_threads_leave ();
@@ -841,7 +860,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeEventMask
ptr = NSA_GET_PTR (env, obj);
- gtk_widget_add_events (GTK_WIDGET (ptr),
+ gtk_widget_add_events (get_widget(GTK_WIDGET (ptr)),
GDK_POINTER_MOTION_MASK
| GDK_BUTTON_MOTION_MASK
| GDK_BUTTON_PRESS_MASK
@@ -857,6 +876,19 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeEventMask
gdk_threads_leave ();
}
+static GtkWidget *
+get_widget (GtkWidget *widget)
+{
+ GtkWidget *w;
+
+ if (GTK_IS_EVENT_BOX (widget))
+ w = gtk_bin_get_child (GTK_BIN(widget));
+ else
+ w = widget;
+
+ return w;
+}
+
/* FIXME: these functions should be implemented by overridding the
appropriate GtkComponentPeer methods. */
static GtkWidget *
@@ -918,6 +950,9 @@ cp_gtk_component_connect_mouse_signals (GObject *ptr, jobject *gref)
g_signal_connect (G_OBJECT (ptr), "motion-notify-event",
G_CALLBACK (component_motion_notify_cb), *gref);
+
+ g_signal_connect (G_OBJECT (ptr), "scroll-event",
+ G_CALLBACK (component_scroll_cb), *gref);
}
void
@@ -930,11 +965,11 @@ cp_gtk_component_connect_signals (GObject *ptr, jobject *gref)
/* These variables are used to keep track of click counts. The AWT
allows more than a triple click to occur but GTK doesn't report
- more-than-triple clicks. */
+ more-than-triple clicks. Also used for keeping track of scroll events.*/
static jint click_count = 1;
static guint32 button_click_time = 0;
static GdkWindow *button_window = NULL;
-static guint button_number = -1;
+static guint button_number_direction = -1;
static int hasBeenDragged;
static gboolean
@@ -949,14 +984,14 @@ component_button_press_cb (GtkWidget *widget __attribute__((unused)),
if ((event->time < (button_click_time + MULTI_CLICK_TIME))
&& (event->window == button_window)
- && (event->button == button_number))
+ && (event->button == button_number_direction))
click_count++;
else
click_count = 1;
button_click_time = event->time;
button_window = event->window;
- button_number = event->button;
+ button_number_direction = event->button;
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
@@ -1055,6 +1090,45 @@ component_motion_notify_cb (GtkWidget *widget __attribute__((unused)),
}
static gboolean
+component_scroll_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventScroll *event,
+ jobject peer)
+{
+ int rotation;
+ /** Record click count for specific direction. */
+ if ((event->time < (button_click_time + MULTI_CLICK_TIME))
+ && (event->window == button_window)
+ && (event->direction == button_number_direction))
+ click_count++;
+ else
+ click_count = 1;
+
+ button_click_time = event->time;
+ button_window = event->window;
+ button_number_direction = event->direction;
+
+ if (event->direction == GDK_SCROLL_UP
+ || event->direction == GDK_SCROLL_LEFT)
+ rotation = -1;
+ else
+ rotation = 1;
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseWheelEventID,
+ AWT_MOUSE_WHEEL,
+ (jlong)event->time,
+ cp_gtk_state_to_awt_mods (event->state),
+ (jint)event->x,
+ (jint)event->y,
+ click_count,
+ JNI_FALSE,
+ AWT_WHEEL_UNIT_SCROLL,
+ 1 /* amount */,
+ rotation);
+ return FALSE;
+}
+
+static gboolean
component_enter_notify_cb (GtkWidget *widget __attribute__((unused)),
GdkEventCrossing *event,
jobject peer)
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
index ae06576..92bc09e 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
@@ -1,5 +1,5 @@
/* gtkimage.c
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -65,23 +65,17 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf
int width, height;
GdkPixbuf *pixbuf;
- gdk_threads_enter ();
-
/* Don't use the JCL convert function because it throws an exception
on failure */
filename = (*env)->GetStringUTFChars (env, name, 0);
if (filename == NULL)
- {
- gdk_threads_leave ();
- return JNI_FALSE;
- }
+ return JNI_FALSE;
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
if (pixbuf == NULL)
{
(*env)->ReleaseStringUTFChars (env, name, filename);
- gdk_threads_leave ();
return JNI_FALSE;
}
@@ -92,8 +86,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf
setWidthHeight(env, obj, width, height);
(*env)->ReleaseStringUTFChars (env, name, filename);
- gdk_threads_leave ();
-
return JNI_TRUE;
}
@@ -111,8 +103,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData
int width;
int height;
- gdk_threads_enter ();
-
src = (*env)->GetByteArrayElements (env, data, NULL);
len = (*env)->GetArrayLength (env, data);
@@ -128,9 +118,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData
if (pixbuf == NULL)
{
createRawData (env, obj, NULL);
-
- gdk_threads_leave ();
-
return JNI_FALSE;
}
@@ -140,8 +127,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData
createRawData (env, obj, pixbuf);
setWidthHeight(env, obj, width, height);
- gdk_threads_leave ();
-
return JNI_TRUE;
}
@@ -151,10 +136,8 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf
{
int width, heigth;
GdkPixbuf *pixbuf = (GdkPixbuf *) getData (env, obj);
- gdk_threads_enter ();
width = gdk_pixbuf_get_width (pixbuf);
heigth = gdk_pixbuf_get_height (pixbuf);
- gdk_threads_leave ();
setWidthHeight(env, obj, width, heigth);
}
@@ -171,8 +154,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_getPixels(JNIEnv *env, jobject obj)
jint *result_array_iter, *dst;
int i,j;
- gdk_threads_enter ();
-
pixbuf = cp_gtk_image_get_pixbuf (env, obj);
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
@@ -214,8 +195,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_getPixels(JNIEnv *env, jobject obj)
(*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0);
- gdk_threads_leave ();
-
return result_array;
}
@@ -233,8 +212,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_setPixels(JNIEnv *env, jobject obj,
jint *src_array_iter, *src;
int i;
- gdk_threads_enter ();
-
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
@@ -251,8 +228,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_setPixels(JNIEnv *env, jobject obj,
}
(*env)->ReleaseIntArrayElements (env, pixels, src_array_iter, 0);
-
- gdk_threads_leave ();
}
/**
@@ -265,8 +240,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap(JNIEnv *env, jobject obj)
jclass cls;
jfieldID field;
- gdk_threads_enter ();
-
cls = (*env)->GetObjectClass (env, obj);
field = (*env)->GetFieldID (env, cls, "width", "I");
g_assert (field != 0);
@@ -285,8 +258,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap(JNIEnv *env, jobject obj)
else
createRawData (env, obj, gdk_pixmap_new (NULL, width, height,
gdk_rgb_get_visual ()->depth));
-
- gdk_threads_leave ();
}
/**
@@ -295,13 +266,10 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap(JNIEnv *env, jobject obj)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_freePixmap(JNIEnv *env, jobject obj)
{
- gdk_threads_enter ();
if (offScreen (env, obj) == JNI_FALSE)
gdk_pixbuf_unref ((GdkPixbuf *)getData (env, obj));
else
g_object_unref ((GdkPixmap *)getData (env, obj));
-
- gdk_threads_leave ();
}
/**
@@ -321,8 +289,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env,
GdkPixbuf *pixbuf;
- gdk_threads_enter ();
-
cls = (*env)->GetObjectClass (env, destination);
field = (*env)->GetFieldID (env, cls, "width", "I");
g_assert (field != 0);
@@ -342,8 +308,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env,
gdk_pixbuf_unref (pixbuf);
createRawData (env, destination, (void *)dst);
-
- gdk_threads_leave ();
}
/**
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
index 6da42ce..54ef31a 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
@@ -39,6 +39,7 @@
#include "gnu_java_awt_peer_gtk_GtkListPeer.h"
static jmethodID postListItemEventID;
+static GtkWidget *list_get_widget (GtkWidget *widget);
void
cp_gtk_list_init_jni (void)
@@ -72,6 +73,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
{
GtkWidget *sw;
GtkWidget *list;
+ GtkWidget *eventbox;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkListStore *list_store;
@@ -102,11 +104,13 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
COLUMN_STRING,
NULL);
+ eventbox = gtk_event_box_new ();
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
-
+ gtk_container_add (GTK_CONTAINER (eventbox), sw);
+
gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
@@ -123,7 +127,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
gtk_widget_show (list);
gtk_widget_show (sw);
- NSA_SET_PTR (env, obj, sw);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -142,7 +146,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
gtk_tree_selection_set_select_function (selection, item_highlighted_cb,
@@ -166,7 +170,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
font_name = (*env)->GetStringUTFChars (env, name, NULL);
@@ -200,7 +204,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
gtk_widget_grab_focus (list);
gdk_threads_leave ();
@@ -223,7 +227,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_append
count = (*env)->GetArrayLength (env, items);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
for (i = 0; i < count; i++)
@@ -260,7 +264,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_add
ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, text, NULL);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
if (index == -1)
@@ -292,7 +296,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
/* Special case: remove all rows. */
@@ -325,7 +329,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_select
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
path = gtk_tree_path_new_from_indices (index, -1);
gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, NULL, FALSE);
@@ -345,7 +349,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_deselect
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
path = gtk_tree_path_new_from_indices (index, -1);
gtk_tree_selection_unselect_path (selection, path);
@@ -361,6 +365,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
jint *dims;
GtkRequisition current_req;
GtkRequisition natural_req;
+ GtkWidget* bin;
gdk_threads_enter ();
@@ -368,16 +373,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
dims[0] = dims[1] = 0;
ptr = NSA_GET_PTR (env, obj);
-
+ bin = list_get_widget (GTK_WIDGET (ptr));
+
/* Save the widget's current size request. */
- gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
+ gtk_widget_size_request (bin, &current_req);
/* Get the widget's "natural" size request. */
gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
- gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
+ gtk_widget_size_request (bin, &natural_req);
/* Reset the widget's size request. */
- gtk_widget_set_size_request (GTK_WIDGET (ptr),
+ gtk_widget_set_size_request (bin,
current_req.width, current_req.height);
dims[0] = natural_req.width;
@@ -417,7 +423,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
count = gtk_tree_selection_count_selected_rows (selection);
if (count > 0)
@@ -463,7 +469,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_makeVisible
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
path = gtk_tree_path_new_from_indices (index, -1);
gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (list), path,
NULL, FALSE, 0.0, 0.0);
@@ -483,7 +489,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode
ptr = NSA_GET_PTR (env, obj);
- list = gtk_bin_get_child (GTK_BIN (ptr));
+ list = list_get_widget (GTK_WIDGET (ptr));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
gtk_tree_selection_set_mode (selection,
mode ? GTK_SELECTION_MULTIPLE
@@ -526,3 +532,18 @@ item_highlighted_cb (GtkTreeSelection *selection __attribute__((unused)),
return TRUE;
}
+
+static GtkWidget *
+list_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+ g_assert (GTK_IS_EVENT_BOX (widget));
+
+ wid = gtk_bin_get_child (GTK_BIN (widget));
+ g_assert (GTK_IS_SCROLLED_WINDOW (wid));
+
+ wid = gtk_bin_get_child (GTK_BIN (wid));
+
+ return wid;
+}
+
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
index 1445cec..a4690de 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
@@ -43,22 +43,27 @@ exception statement from your version. */
#define AWT_SCROLLPANE_SCROLLBARS_ALWAYS 1
#define AWT_SCROLLPANE_SCROLLBARS_NEVER 2
+static GtkWidget *scrollpane_get_widget (GtkWidget *widget);
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create
(JNIEnv *env, jobject obj, int width, int height)
{
GtkWidget *sw;
-
+ GtkWidget *eventbox;
+
gdk_threads_enter ();
/* Create global reference and save it for future use */
NSA_SET_GLOBAL_REF (env, obj);
sw = gtk_scrolled_window_new (NULL, NULL);
-
gtk_widget_set_size_request (sw, width, height);
+ eventbox = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (eventbox), sw);
+ gtk_widget_show (sw);
- NSA_SET_PTR (env, obj, sw);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -75,7 +80,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setScrollPosition
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW (ptr);
+ sw = GTK_SCROLLED_WINDOW (scrollpane_get_widget (GTK_WIDGET (ptr)));
hadj = gtk_scrolled_window_get_hadjustment (sw);
vadj = gtk_scrolled_window_get_vadjustment (sw);
@@ -98,7 +103,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetHScrollIncremen
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW(ptr);
+ sw = GTK_SCROLLED_WINDOW (scrollpane_get_widget (GTK_WIDGET (ptr)));
hadj = gtk_scrolled_window_get_hadjustment (sw);
hadj->step_increment = u;
@@ -118,7 +123,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetVScrollIncremen
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW(ptr);
+ sw = GTK_SCROLLED_WINDOW (scrollpane_get_widget (GTK_WIDGET (ptr)));
vadj = gtk_scrolled_window_get_hadjustment (sw);
vadj->step_increment = u;
@@ -140,7 +145,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getHScrollbarHeight
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW (ptr);
+ sw = GTK_SCROLLED_WINDOW (scrollpane_get_widget (GTK_WIDGET (ptr)));
gtk_widget_size_request (sw->hscrollbar, &requisition);
gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
@@ -165,7 +170,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getVScrollbarWidth
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW (ptr);
+ sw = GTK_SCROLLED_WINDOW (scrollpane_get_widget (GTK_WIDGET (ptr)));
gtk_widget_size_request (sw->vscrollbar, &requisition);
gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
@@ -181,7 +186,8 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy
(JNIEnv *env, jobject obj, jint policy)
{
void *ptr;
-
+ GtkWidget *sw;
+
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
@@ -199,7 +205,18 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy
break;
}
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ptr), policy, policy);
+ sw = scrollpane_get_widget (GTK_WIDGET (ptr));
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), policy, policy);
gdk_threads_leave ();
}
+
+static GtkWidget *
+scrollpane_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+ g_assert (GTK_IS_EVENT_BOX (widget));
+ wid = gtk_bin_get_child (GTK_BIN(widget));
+
+ return wid;
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
index bec1e63..a905019 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
@@ -48,6 +48,7 @@ exception statement from your version. */
#define AWT_ADJUSTMENT_TRACK 5
static jmethodID postAdjustmentEventID;
+static GtkWidget *scrollbar_get_widget (GtkWidget *widget);
void
cp_gtk_scrollbar_init_jni (void)
@@ -79,6 +80,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
jint min, jint max, jint step_incr, jint page_incr, jint visible_amount)
{
GtkWidget *scrollbar;
+ GtkWidget *eventbox;
GtkObject *adj;
/* Create global reference and save it for future use */
@@ -104,7 +106,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
scrollbar = orientation
? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj))
: gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
-
+ eventbox = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (eventbox), scrollbar);
+ gtk_widget_show (scrollbar);
+
GTK_RANGE (scrollbar)->round_digits = 0;
/* These calls seem redundant but they are not. They clamp values
so that the slider's entirety is always between the two
@@ -114,7 +119,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
gdk_threads_leave ();
- NSA_SET_PTR (env, obj, scrollbar);
+ NSA_SET_PTR (env, obj, eventbox);
}
JNIEXPORT void JNICALL
@@ -122,6 +127,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
(JNIEnv *env, jobject obj)
{
void *ptr = NSA_GET_PTR (env, obj);
+ GtkWidget *wid = scrollbar_get_widget (GTK_WIDGET (ptr));
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
g_assert (gref);
@@ -129,15 +135,15 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
/* Scrollbar signals */
#if GTK_MINOR_VERSION > 4
- g_signal_connect (G_OBJECT (ptr), "change-value",
+ g_signal_connect (G_OBJECT (wid), "change-value",
G_CALLBACK (slider_moved_cb), *gref);
#else
- g_signal_connect (G_OBJECT (ptr), "value-changed",
+ g_signal_connect (G_OBJECT (wid), "value-changed",
G_CALLBACK (post_change_event_cb), *gref);
#endif
/* Component signals */
- cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (wid), gref);
gdk_threads_leave ();
}
@@ -148,12 +154,14 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement
{
void *ptr;
GtkAdjustment *adj;
+ GtkWidget *wid;
ptr = NSA_GET_PTR (env, obj);
-
+ wid = scrollbar_get_widget (GTK_WIDGET (ptr));
+
gdk_threads_enter ();
- adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj = gtk_range_get_adjustment (GTK_RANGE (wid));
adj->step_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
@@ -166,12 +174,14 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement
{
void *ptr;
GtkAdjustment *adj;
-
+ GtkWidget *wid;
+
ptr = NSA_GET_PTR (env, obj);
-
+ wid = scrollbar_get_widget (GTK_WIDGET (ptr));
+
gdk_threads_enter ();
- adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj = gtk_range_get_adjustment (GTK_RANGE (wid));
adj->page_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
@@ -184,9 +194,11 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setBarValues
{
void *ptr;
GtkAdjustment *adj;
-
+ GtkWidget *wid;
+
ptr = NSA_GET_PTR (env, obj);
-
+ wid = scrollbar_get_widget (GTK_WIDGET (ptr));
+
gdk_threads_enter ();
/* A little hack because gtk_range_set_range() doesn't allow min == max. */
@@ -197,11 +209,11 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setBarValues
max++;
}
- adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj = gtk_range_get_adjustment (GTK_RANGE (wid));
adj->page_size = (gdouble) visible;
- gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max);
- gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value);
+ gtk_range_set_range (GTK_RANGE (wid), (gdouble) min, (gdouble) max);
+ gtk_range_set_value (GTK_RANGE (wid), (gdouble) value);
gdk_threads_leave ();
}
@@ -214,7 +226,7 @@ slider_moved_cb (GtkRange *range,
jobject obj)
{
GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range));
-
+
value = CLAMP (value, adj->lower,
(adj->upper - adj->page_size));
@@ -272,3 +284,13 @@ post_change_event_cb (GtkRange *range, jobject peer)
AWT_ADJUSTMENT_TRACK, (jint) adj->value);
}
#endif
+
+static GtkWidget *
+scrollbar_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+ g_assert (GTK_IS_EVENT_BOX (widget));
+ wid = gtk_bin_get_child (GTK_BIN(widget));
+
+ return wid;
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
index 3244d23..be03c45 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkSelection.c
@@ -1,5 +1,5 @@
/* gtkselection.c -- Native C functions for GtkSelection class using gtk+.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -149,9 +149,10 @@ clipboard_targets_received (GtkClipboard *clipboard
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkSelection_requestMimeTypes
-(JNIEnv *env, jobject selection)
+(JNIEnv *env, jobject selection, jboolean clipboard)
{
jobject selection_obj;
+ GtkClipboard *gtk_clipboard;
selection_obj = (*env)->NewGlobalRef(env, selection);
if (selection_obj == NULL)
return;
@@ -167,13 +168,18 @@ Java_gnu_java_awt_peer_gtk_GtkSelection_requestMimeTypes
return;
}
+ if (clipboard)
+ gtk_clipboard = cp_gtk_clipboard;
+ else
+ gtk_clipboard = cp_gtk_selection;
+
/* We would have liked to call gtk_clipboard_request_targets ()
since that is more general. But the result of that, an array of
GdkAtoms, cannot be used with the
gtk_selection_data_targets_include_<x> functions (despite what
the name suggests). */
gdk_threads_enter ();
- gtk_clipboard_request_contents (cp_gtk_clipboard,
+ gtk_clipboard_request_contents (gtk_clipboard,
gdk_atom_intern ("TARGETS", FALSE),
clipboard_targets_received,
(gpointer) selection_obj);
@@ -210,9 +216,10 @@ clipboard_text_received (GtkClipboard *clipboard
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkSelection_requestText
-(JNIEnv *env, jobject selection)
+(JNIEnv *env, jobject selection, jboolean clipboard)
{
jobject selection_obj;
+ GtkClipboard *gtk_clipboard;
selection_obj = (*env)->NewGlobalRef(env, selection);
if (selection_obj == NULL)
return;
@@ -228,8 +235,13 @@ Java_gnu_java_awt_peer_gtk_GtkSelection_requestText
return;
}
+ if (clipboard)
+ gtk_clipboard = cp_gtk_clipboard;
+ else
+ gtk_clipboard = cp_gtk_selection;
+
gdk_threads_enter ();
- gtk_clipboard_request_text (cp_gtk_clipboard,
+ gtk_clipboard_request_text (gtk_clipboard,
clipboard_text_received,
(gpointer) selection_obj);
gdk_threads_leave ();
@@ -260,9 +272,12 @@ clipboard_image_received (GtkClipboard *clipboard
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env, jobject obj)
+Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env,
+ jobject obj,
+ jboolean clipboard)
{
jobject selection_obj;
+ GtkClipboard *gtk_clipboard;
selection_obj = (*env)->NewGlobalRef(env, obj);
if (selection_obj == NULL)
return;
@@ -278,14 +293,19 @@ Java_gnu_java_awt_peer_gtk_GtkSelection_requestImage (JNIEnv *env, jobject obj)
return;
}
+ if (clipboard)
+ gtk_clipboard = cp_gtk_clipboard;
+ else
+ gtk_clipboard = cp_gtk_selection;
+
#if GTK_MINOR_VERSION > 4
gdk_threads_enter ();
- gtk_clipboard_request_image (cp_gtk_clipboard,
+ gtk_clipboard_request_image (gtk_clipboard,
clipboard_image_received,
(gpointer) selection_obj);
gdk_threads_leave ();
#else
- clipboard_image_received (cp_gtk_clipboard, NULL, (gpointer) selection_obj);
+ clipboard_image_received (gtk_clipboard, NULL, (gpointer) selection_obj);
#endif
}
@@ -342,12 +362,15 @@ clipboard_uris_received (GtkClipboard *clipboard
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env, jobject obj)
+Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env,
+ jobject obj,
+ jboolean clipboard)
{
#if GTK_MINOR_VERSION > 4
GdkAtom uri_atom;
#endif
jobject selection_obj;
+ GtkClipboard *gtk_clipboard;
selection_obj = (*env)->NewGlobalRef(env, obj);
if (selection_obj == NULL)
return;
@@ -363,17 +386,22 @@ Java_gnu_java_awt_peer_gtk_GtkSelection_requestURIs (JNIEnv *env, jobject obj)
return;
}
+ if (clipboard)
+ gtk_clipboard = cp_gtk_clipboard;
+ else
+ gtk_clipboard = cp_gtk_selection;
+
#if GTK_MINOR_VERSION > 4
/* There is no real request_uris so we have to make one ourselves. */
gdk_threads_enter ();
uri_atom = gdk_atom_intern ("text/uri-list", FALSE);
- gtk_clipboard_request_contents (cp_gtk_clipboard,
+ gtk_clipboard_request_contents (gtk_clipboard,
uri_atom,
clipboard_uris_received,
(gpointer) selection_obj);
gdk_threads_leave ();
#else
- clipboard_uris_received (cp_gtk_clipboard, NULL, (gpointer) selection_obj);
+ clipboard_uris_received (gtk_clipboard, NULL, (gpointer) selection_obj);
#endif
}
@@ -406,12 +434,14 @@ clipboard_bytes_received (GtkClipboard *clipboard
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkSelection_requestBytes (JNIEnv *env,
jobject obj,
+ jboolean clipboard,
jstring target_string)
{
int len;
const gchar *target_text;
GdkAtom target_atom;
jobject selection_obj;
+ GtkClipboard *gtk_clipboard;
selection_obj = (*env)->NewGlobalRef(env, obj);
if (selection_obj == NULL)
return;
@@ -434,9 +464,14 @@ Java_gnu_java_awt_peer_gtk_GtkSelection_requestBytes (JNIEnv *env,
if (target_text == NULL)
return;
+ if (clipboard)
+ gtk_clipboard = cp_gtk_clipboard;
+ else
+ gtk_clipboard = cp_gtk_selection;
+
gdk_threads_enter ();
target_atom = gdk_atom_intern (target_text, FALSE);
- gtk_clipboard_request_contents (cp_gtk_clipboard,
+ gtk_clipboard_request_contents (gtk_clipboard,
target_atom,
clipboard_bytes_received,
(gpointer) selection_obj);
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
index 9af88a0..bd6e14d 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
@@ -43,12 +43,16 @@ exception statement from your version. */
#define AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY 1
#define AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY 2
+static GtkWidget *textarea_get_widget (GtkWidget *widget);
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
(JNIEnv *env, jobject obj,
jint textview_width, jint textview_height, jint scroll)
{
- GtkWidget *text, *sw;
+ GtkWidget *text;
+ GtkWidget *sw;
+ GtkWidget *eventbox;
gdk_threads_enter ();
@@ -61,9 +65,12 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
gtk_widget_show (text);
+ eventbox = gtk_event_box_new ();
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (sw), text);
-
+ gtk_container_add (GTK_CONTAINER (eventbox), sw);
+ gtk_widget_show (sw);
+
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
/* horizontal scrollbar */
(scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
@@ -79,7 +86,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
|| scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY)
? GTK_WRAP_NONE : GTK_WRAP_WORD);
- NSA_SET_PTR (env, obj, sw);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -99,7 +106,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals
gref = NSA_GET_GLOBAL_REF (env, obj);
/* Unwrap the text view from the scrolled window */
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
@@ -127,7 +134,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert
ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_iter_at_offset (buf, &iter, position);
@@ -155,8 +162,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange
ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL);
- text = gtk_bin_get_child (GTK_BIN (ptr));
-
+ text = textarea_get_widget (GTK_WIDGET (ptr));
+
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_iter_at_offset (buf, &startIter, mystart);
@@ -183,8 +190,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
gdk_threads_enter();
ptr = NSA_GET_PTR (env, obj);
-
- text = gtk_bin_get_child (GTK_BIN (ptr));
+
+ text = textarea_get_widget (GTK_WIDGET (ptr));
font_name = (*env)->GetStringUTFChars (env, name, NULL);
@@ -218,7 +225,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus
ptr = NSA_GET_PTR (env, obj);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
gtk_widget_grab_focus (text);
@@ -230,6 +237,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight
(JNIEnv *env, jobject obj)
{
void *ptr;
+ GtkWidget *bin;
GtkScrolledWindow *sw;
GtkRequisition requisition;
jint height = 0;
@@ -239,7 +247,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight
ptr = NSA_GET_PTR (env, obj);
- sw = GTK_SCROLLED_WINDOW (ptr);
+ bin = gtk_bin_get_child (GTK_BIN (ptr));
+ sw = GTK_SCROLLED_WINDOW (bin);
if (sw)
{
@@ -258,6 +267,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth
(JNIEnv *env, jobject obj)
{
void *ptr;
+ GtkWidget *bin;
GtkScrolledWindow *sw;
GtkRequisition requisition;
jint width = 0;
@@ -266,8 +276,9 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- sw = GTK_SCROLLED_WINDOW (ptr);
+
+ bin = gtk_bin_get_child (GTK_BIN (ptr));
+ sw = GTK_SCROLLED_WINDOW (bin);
if (sw)
{
@@ -295,8 +306,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getCaretPosition
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- text = gtk_bin_get_child (GTK_BIN (ptr));
+
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
mark = gtk_text_buffer_get_insert (buf);
@@ -323,8 +334,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setCaretPosition
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- text = gtk_bin_get_child (GTK_BIN (ptr));
+
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
@@ -366,7 +377,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionStart
ptr = NSA_GET_PTR (env, obj);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
@@ -403,7 +414,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionEnd
ptr = NSA_GET_PTR (env, obj);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
@@ -436,7 +447,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_select
ptr = NSA_GET_PTR (env, obj);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_iter_at_offset (buf, &iter, start);
@@ -460,7 +471,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setEditable
ptr = NSA_GET_PTR (env, obj);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
gtk_text_view_set_editable (GTK_TEXT_VIEW (text), state);
@@ -481,8 +492,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getText
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- text = gtk_bin_get_child (GTK_BIN (ptr));
+
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_start_iter (buf, &start);
@@ -505,13 +516,13 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText
const char *str;
GtkWidget *text = NULL;
GtkTextBuffer *buf;
-
+
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL);
- text = gtk_bin_get_child (GTK_BIN (ptr));
+ text = textarea_get_widget (GTK_WIDGET (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_set_text (buf, str, strlen (str));
@@ -520,3 +531,17 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText
gdk_threads_leave ();
}
+
+static GtkWidget *
+textarea_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+ g_assert (GTK_IS_EVENT_BOX (widget));
+
+ wid = gtk_bin_get_child (GTK_BIN (widget));
+ g_assert (GTK_IS_SCROLLED_WINDOW (wid));
+
+ wid = gtk_bin_get_child (GTK_BIN (wid));
+
+ return wid;
+}
diff --git a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
index a3cea8c..1c858fa 100644
--- a/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+++ b/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
@@ -1424,6 +1424,8 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
void *ptr;
+ gint current_width;
+ gint current_height;
ptr = NSA_GET_PTR (env, obj);
@@ -1447,12 +1449,19 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
if (GTK_WIDGET (ptr)->window != NULL)
gdk_window_move (GTK_WIDGET (ptr)->window, x, y);
- /* Need to change the widget's request size. */
- gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
- /* Also need to call gtk_window_resize. If the resize is requested
- by the program and the window's "resizable" property is true then
- the size request will not be honoured. */
- gtk_window_resize (GTK_WINDOW (ptr), width, height);
+ /* Only request resizing if the actual width or height change, otherwise
+ * we get unnecessary flickers because resizing causes GTK to clear the
+ * window content, even if the actual size doesn't change. */
+ gtk_window_get_size(GTK_WINDOW(ptr), &current_width, &current_height);
+ if (current_width != width || current_height != height)
+ {
+ /* Need to change the widget's request size. */
+ gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
+ /* Also need to call gtk_window_resize. If the resize is requested
+ by the program and the window's "resizable" property is true then
+ the size request will not be honoured. */
+ gtk_window_resize (GTK_WINDOW (ptr), width, height);
+ }
}
static void
diff --git a/libjava/classpath/native/jni/gtk-peer/gtkpeer.h b/libjava/classpath/native/jni/gtk-peer/gtkpeer.h
index f332b62..9a1590b 100644
--- a/libjava/classpath/native/jni/gtk-peer/gtkpeer.h
+++ b/libjava/classpath/native/jni/gtk-peer/gtkpeer.h
@@ -1,5 +1,5 @@
/* gtkpeer.h -- Some global variables and #defines
- Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -167,8 +167,12 @@ JNIEnv *cp_gtk_gdk_env(void);
extern double cp_gtk_dpi_conversion_factor;
extern GtkWindowGroup *cp_gtk_global_window_group;
-/* Shared global clipboard for GtkClipboard and GtkSelection. */
+/* Shared global clipboard and selection for GtkClipboard and GtkSelection. */
extern GtkClipboard *cp_gtk_clipboard;
+extern GtkClipboard *cp_gtk_selection;
+
+extern jobject cp_gtk_clipboard_instance;
+extern jobject cp_gtk_selection_instance;
/* Standard target (strings) for GtkClipboard and GtkSelection. */
extern jstring cp_gtk_stringTarget;
diff --git a/libjava/classpath/native/jni/java-io/Makefile.am b/libjava/classpath/native/jni/java-io/Makefile.am
index 35afaae..ac7cf28 100644
--- a/libjava/classpath/native/jni/java-io/Makefile.am
+++ b/libjava/classpath/native/jni/java-io/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libjavaio.la
+nativeexeclib_LTLIBRARIES = libjavaio.la
libjavaio_la_SOURCES = java_io_VMFile.c \
java_io_VMObjectInputStream.c \
diff --git a/libjava/classpath/native/jni/java-io/Makefile.in b/libjava/classpath/native/jni/java-io/Makefile.in
index 419eefd..48f9cef 100644
--- a/libjava/classpath/native/jni/java-io/Makefile.in
+++ b/libjava/classpath/native/jni/java-io/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libjavaio_la_DEPENDENCIES = \
$(top_builddir)/native/jni/classpath/jcl.lo
am_libjavaio_la_OBJECTS = java_io_VMFile.lo \
@@ -99,6 +99,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -138,6 +139,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -158,6 +161,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -205,6 +209,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -223,8 +228,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -236,8 +244,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -254,7 +260,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -262,18 +271,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -283,7 +296,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libjavaio.la
+nativeexeclib_LTLIBRARIES = libjavaio.la
libjavaio_la_SOURCES = java_io_VMFile.c \
java_io_VMObjectInputStream.c \
java_io_VMObjectStreamClass.c
@@ -325,35 +338,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libjavaio.la: $(libjavaio_la_OBJECTS) $(libjavaio_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavaio_la_LDFLAGS) $(libjavaio_la_OBJECTS) $(libjavaio_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavaio_la_LDFLAGS) $(libjavaio_la_OBJECTS) $(libjavaio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -475,7 +488,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -504,7 +517,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -523,9 +536,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -551,20 +564,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/java-lang/Makefile.am b/libjava/classpath/native/jni/java-lang/Makefile.am
index db8a3a6..06deb62 100644
--- a/libjava/classpath/native/jni/java-lang/Makefile.am
+++ b/libjava/classpath/native/jni/java-lang/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libjavalang.la libjavalangreflect.la
+nativeexeclib_LTLIBRARIES = libjavalang.la libjavalangreflect.la
libjavalang_la_SOURCES = java_lang_VMSystem.c \
java_lang_VMFloat.c \
@@ -9,7 +9,7 @@ libjavalang_la_SOURCES = java_lang_VMSystem.c \
libjavalang_la_LIBADD = $(wildcard $(top_builddir)/native/fdlibm/*.lo) \
$(top_builddir)/native/jni/classpath/jcl.lo
-libjavalangreflect_la_SOURCES = java_lang_reflect_Array.c
+libjavalangreflect_la_SOURCES = java_lang_reflect_VMArray.c
AM_LDFLAGS = @CLASSPATH_MODULE@
AM_CPPFLAGS = @CLASSPATH_INCLUDES@ -I$(top_srcdir)/native/fdlibm
diff --git a/libjava/classpath/native/jni/java-lang/Makefile.in b/libjava/classpath/native/jni/java-lang/Makefile.in
index bc26561..af83f9a 100644
--- a/libjava/classpath/native/jni/java-lang/Makefile.in
+++ b/libjava/classpath/native/jni/java-lang/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libjavalang_la_DEPENDENCIES = $(wildcard \
$(top_builddir)/native/fdlibm/*.lo) \
$(top_builddir)/native/jni/classpath/jcl.lo
@@ -71,7 +71,7 @@ am_libjavalang_la_OBJECTS = java_lang_VMSystem.lo java_lang_VMFloat.lo \
java_lang_VMProcess.lo
libjavalang_la_OBJECTS = $(am_libjavalang_la_OBJECTS)
libjavalangreflect_la_LIBADD =
-am_libjavalangreflect_la_OBJECTS = java_lang_reflect_Array.lo
+am_libjavalangreflect_la_OBJECTS = java_lang_reflect_VMArray.lo
libjavalangreflect_la_OBJECTS = $(am_libjavalangreflect_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -105,6 +105,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -144,6 +145,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -164,6 +167,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -211,6 +215,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -229,8 +234,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -242,8 +250,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -260,7 +266,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -268,18 +277,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -289,7 +302,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libjavalang.la libjavalangreflect.la
+nativeexeclib_LTLIBRARIES = libjavalang.la libjavalangreflect.la
libjavalang_la_SOURCES = java_lang_VMSystem.c \
java_lang_VMFloat.c \
java_lang_VMDouble.c \
@@ -299,7 +312,7 @@ libjavalang_la_SOURCES = java_lang_VMSystem.c \
libjavalang_la_LIBADD = $(wildcard $(top_builddir)/native/fdlibm/*.lo) \
$(top_builddir)/native/jni/classpath/jcl.lo
-libjavalangreflect_la_SOURCES = java_lang_reflect_Array.c
+libjavalangreflect_la_SOURCES = java_lang_reflect_VMArray.c
AM_LDFLAGS = @CLASSPATH_MODULE@
AM_CPPFLAGS = @CLASSPATH_INCLUDES@ -I$(top_srcdir)/native/fdlibm
AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
@@ -336,37 +349,37 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libjavalang.la: $(libjavalang_la_OBJECTS) $(libjavalang_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavalang_la_LDFLAGS) $(libjavalang_la_OBJECTS) $(libjavalang_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavalang_la_LDFLAGS) $(libjavalang_la_OBJECTS) $(libjavalang_la_LIBADD) $(LIBS)
libjavalangreflect.la: $(libjavalangreflect_la_OBJECTS) $(libjavalangreflect_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavalangreflect_la_LDFLAGS) $(libjavalangreflect_la_OBJECTS) $(libjavalangreflect_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavalangreflect_la_LDFLAGS) $(libjavalangreflect_la_OBJECTS) $(libjavalangreflect_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -379,7 +392,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_lang_VMMath.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_lang_VMProcess.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_lang_VMSystem.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_lang_reflect_Array.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_lang_reflect_VMArray.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@@ -491,7 +504,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -520,7 +533,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -539,9 +552,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -567,20 +580,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/java-lang/java_lang_VMProcess.c b/libjava/classpath/native/jni/java-lang/java_lang_VMProcess.c
index 169c785..f13a94f 100644
--- a/libjava/classpath/native/jni/java-lang/java_lang_VMProcess.c
+++ b/libjava/classpath/native/jni/java-lang/java_lang_VMProcess.c
@@ -38,6 +38,8 @@ exception statement from your version. */
#include <config.h>
#include "java_lang_VMProcess.h"
+#include "gnu_java_nio_channels_FileChannelImpl.h"
+
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -48,6 +50,8 @@ exception statement from your version. */
#include <fcntl.h>
#include <stdio.h>
+#include <jcl.h>
+
#include "target_native.h"
#include "target_native_misc.h"
@@ -55,17 +59,6 @@ exception statement from your version. */
static char *copy_string (JNIEnv * env, jobject string);
static char *copy_elem (JNIEnv * env, jobject stringArray, jint i);
-/* Some O/S's don't declare 'environ' */
-#if HAVE_CRT_EXTERNS_H
-/* Darwin does not have a variable named environ
- but has a function which you can get the environ
- variable with. */
-#include <crt_externs.h>
-#define environ (*_NSGetEnviron())
-#else
-extern char **environ;
-#endif /* HAVE_CRT_EXTERNS_H */
-
/*
* Internal helper function to copy a String in UTF-8 format.
*/
@@ -135,7 +128,8 @@ copy_elem (JNIEnv * env, jobject stringArray, jint i)
JNIEXPORT void JNICALL
Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
jobjectArray cmdArray,
- jobjectArray envArray, jobject dirFile)
+ jobjectArray envArray, jobject dirFile,
+ jboolean redirect)
{
int fds[3][2] = { {-1, -1}, {-1, -1}, {-1, -1} };
jobject streams[3] = { NULL, NULL, NULL };
@@ -151,6 +145,7 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
jmethodID method;
jclass clazz;
int i;
+ int pipe_count = redirect ? 2 : 3;
/* Check for null */
if (cmdArray == NULL)
@@ -218,7 +213,7 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
}
/* Create inter-process pipes */
- for (i = 0; i < 3; i++)
+ for (i = 0; i < pipe_count; i++)
{
if (pipe (fds[i]) == -1)
{
@@ -232,7 +227,8 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
/* Set close-on-exec flag for parent's ends of pipes */
(void) fcntl (fds[0][1], F_SETFD, 1);
(void) fcntl (fds[1][0], F_SETFD, 1);
- (void) fcntl (fds[2][0], F_SETFD, 1);
+ if (pipe_count == 3)
+ (void) fcntl (fds[2][0], F_SETFD, 1);
/* Fork into parent and child processes */
if ((pid = fork ()) == (pid_t) - 1)
@@ -267,7 +263,16 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
}
close (fds[1][1]);
}
- if (fds[2][1] != 2)
+ if (pipe_count == 2)
+ {
+ /* Duplicate stdout to stderr. */
+ if (dup2 (1, 2) == -1)
+ {
+ fprintf (stderr, "dup2: %s", strerror (errno));
+ exit (127);
+ }
+ }
+ else if (fds[2][1] != 2)
{
if (dup2 (fds[2][1], 2) == -1)
{
@@ -308,11 +313,13 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
method = (*env)->GetMethodID (env, clazz, "<init>", "(II)V");
if ((*env)->ExceptionOccurred (env))
goto done;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < pipe_count; i++)
{
/* Mode is WRITE (2) for in and READ (1) for out and err. */
const int fd = fds[i][i == 0];
- const int mode = (i == 0) ? 2 : 1;
+ const int mode = ((i == 0)
+ ? gnu_java_nio_channels_FileChannelImpl_WRITE
+ : gnu_java_nio_channels_FileChannelImpl_READ);
jclass sclazz;
jmethodID smethod;
@@ -320,7 +327,7 @@ Java_java_lang_VMProcess_nativeSpawn (JNIEnv * env, jobject this,
if ((*env)->ExceptionOccurred (env))
goto done;
- if (mode == 2)
+ if (mode == gnu_java_nio_channels_FileChannelImpl_WRITE)
sclazz = (*env)->FindClass (env, "java/io/FileOutputStream");
else
sclazz = (*env)->FindClass (env, "java/io/FileInputStream");
@@ -359,7 +366,7 @@ done:
*/
/* Close child's ends of pipes */
- for (i = 0; i < 3; i++)
+ for (i = 0; i < pipe_count; i++)
{
const int fd = fds[i][i != 0];
@@ -373,7 +380,7 @@ done:
* was created for a file descriptor, we don't close it because it
* will get closed when the Stream object is finalized.
*/
- for (i = 0; i < 3; i++)
+ for (i = 0; i < pipe_count; i++)
{
const int fd = fds[i][i == 0];
diff --git a/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c b/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
index 0edbb2e..05b0d96 100644
--- a/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
+++ b/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
@@ -154,3 +154,35 @@ Java_java_lang_VMSystem_getenv (JNIEnv * env,
JCL_free_cstring (env, jname, cname);
return (*env)->NewStringUTF (env, envname);
}
+
+JNIEXPORT jobject JNICALL
+Java_java_lang_VMSystem_environ (JNIEnv *env,
+ jclass klass __attribute__((__unused__)))
+{
+ char **env_pointer;
+ jobject variables;
+ jclass list_class;
+ jmethodID list_constructor;
+ jmethodID add;
+
+ list_class = (*env)->FindClass(env, "java/util/LinkedList");
+ if (list_class == NULL)
+ return NULL;
+ list_constructor = (*env)->GetMethodID(env, list_class, "<init>", "()V");
+ if (list_constructor == NULL)
+ return NULL;
+ variables = (*env)->NewObject(env, list_class, list_constructor);
+ if (variables == NULL)
+ return NULL;
+ add = (*env)->GetMethodID(env, list_class, "add", "(Ljava/lang/Object;)Z");
+ if (add == NULL)
+ return NULL;
+ env_pointer = environ;
+ while (*env_pointer != NULL)
+ {
+ jstring string = (*env)->NewStringUTF(env, *env_pointer);
+ (*env)->CallBooleanMethod(env, variables, add, string);
+ ++env_pointer;
+ }
+ return variables;
+}
diff --git a/libjava/classpath/native/jni/java-lang/java_lang_reflect_Array.c b/libjava/classpath/native/jni/java-lang/java_lang_reflect_VMArray.c
index 64ad202..2db68eb 100644
--- a/libjava/classpath/native/jni/java-lang/java_lang_reflect_Array.c
+++ b/libjava/classpath/native/jni/java-lang/java_lang_reflect_VMArray.c
@@ -45,7 +45,7 @@ exception statement from your version. */
#include <config.h>
#include <stddef.h>
-#include "java_lang_reflect_Array.h"
+#include "java_lang_reflect_VMArray.h"
/*
* Class: java_lang_reflect_Array
@@ -53,7 +53,7 @@ exception statement from your version. */
* Signature: (Ljava/lang/Class;I)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL
-Java_java_lang_reflect_Array_createObjectArray
+Java_java_lang_reflect_VMArray_createObjectArray
(JNIEnv * env,
jclass thisClass __attribute__ ((__unused__)),
jclass arrayType, jint arrayLength)
diff --git a/libjava/classpath/native/jni/java-net/Makefile.am b/libjava/classpath/native/jni/java-net/Makefile.am
index 4bca951..e48173a 100644
--- a/libjava/classpath/native/jni/java-net/Makefile.am
+++ b/libjava/classpath/native/jni/java-net/Makefile.am
@@ -1,11 +1,20 @@
-nativelib_LTLIBRARIES = libjavanet.la
+nativeexeclib_LTLIBRARIES = libjavanet.la
+
+if ENABLE_LOCAL_SOCKETS
+local_sources = gnu_java_net_local_LocalSocketImpl.c \
+ local.c \
+ local.h
+else
+local_sources = gnu_java_net_local_LocalSocketImpl.c
+endif
libjavanet_la_SOURCES = javanet.c \
javanet.h \
java_net_VMInetAddress.c \
java_net_VMNetworkInterface.c \
gnu_java_net_VMPlainDatagramSocketImpl.c \
- gnu_java_net_VMPlainSocketImpl.c
+ gnu_java_net_VMPlainSocketImpl.c \
+ $(local_sources)
libjavanet_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo
diff --git a/libjava/classpath/native/jni/java-net/Makefile.in b/libjava/classpath/native/jni/java-net/Makefile.in
index 77fec42..ee316bb 100644
--- a/libjava/classpath/native/jni/java-net/Makefile.in
+++ b/libjava/classpath/native/jni/java-net/Makefile.in
@@ -60,15 +60,23 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libjavanet_la_DEPENDENCIES = \
$(top_builddir)/native/jni/classpath/jcl.lo
+am__libjavanet_la_SOURCES_DIST = javanet.c javanet.h \
+ java_net_VMInetAddress.c java_net_VMNetworkInterface.c \
+ gnu_java_net_VMPlainDatagramSocketImpl.c \
+ gnu_java_net_VMPlainSocketImpl.c \
+ gnu_java_net_local_LocalSocketImpl.c local.c local.h
+@ENABLE_LOCAL_SOCKETS_FALSE@am__objects_1 = gnu_java_net_local_LocalSocketImpl.lo
+@ENABLE_LOCAL_SOCKETS_TRUE@am__objects_1 = gnu_java_net_local_LocalSocketImpl.lo \
+@ENABLE_LOCAL_SOCKETS_TRUE@ local.lo
am_libjavanet_la_OBJECTS = javanet.lo java_net_VMInetAddress.lo \
java_net_VMNetworkInterface.lo \
gnu_java_net_VMPlainDatagramSocketImpl.lo \
- gnu_java_net_VMPlainSocketImpl.lo
+ gnu_java_net_VMPlainSocketImpl.lo $(am__objects_1)
libjavanet_la_OBJECTS = $(am_libjavanet_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -82,7 +90,7 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libjavanet_la_SOURCES)
-DIST_SOURCES = $(libjavanet_la_SOURCES)
+DIST_SOURCES = $(am__libjavanet_la_SOURCES_DIST)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -101,6 +109,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -140,6 +149,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -160,6 +171,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -207,6 +219,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -225,8 +238,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -238,8 +254,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -256,7 +270,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -264,18 +281,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -285,13 +306,19 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libjavanet.la
+nativeexeclib_LTLIBRARIES = libjavanet.la
+@ENABLE_LOCAL_SOCKETS_FALSE@local_sources = gnu_java_net_local_LocalSocketImpl.c
+@ENABLE_LOCAL_SOCKETS_TRUE@local_sources = gnu_java_net_local_LocalSocketImpl.c \
+@ENABLE_LOCAL_SOCKETS_TRUE@ local.c \
+@ENABLE_LOCAL_SOCKETS_TRUE@ local.h
+
libjavanet_la_SOURCES = javanet.c \
javanet.h \
java_net_VMInetAddress.c \
java_net_VMNetworkInterface.c \
gnu_java_net_VMPlainDatagramSocketImpl.c \
- gnu_java_net_VMPlainSocketImpl.c
+ gnu_java_net_VMPlainSocketImpl.c \
+ $(local_sources)
libjavanet_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo
AM_LDFLAGS = @CLASSPATH_MODULE@
@@ -330,35 +357,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libjavanet.la: $(libjavanet_la_OBJECTS) $(libjavanet_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavanet_la_LDFLAGS) $(libjavanet_la_OBJECTS) $(libjavanet_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavanet_la_LDFLAGS) $(libjavanet_la_OBJECTS) $(libjavanet_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -368,9 +395,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_net_VMPlainDatagramSocketImpl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_net_VMPlainSocketImpl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_net_local_LocalSocketImpl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_net_VMInetAddress.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/java_net_VMNetworkInterface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/javanet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@@ -482,7 +511,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -511,7 +540,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -530,9 +559,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -558,20 +587,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c b/libjava/classpath/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c
new file mode 100644
index 0000000..3b29001
--- /dev/null
+++ b/libjava/classpath/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c
@@ -0,0 +1,538 @@
+/* gnu_java_net_local_LocalSocketImpl.c -- native local socket implementation.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+#define _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <gnu_java_net_local_LocalSocketImpl.h>
+
+#include <stddef.h>
+#include "local.h"
+
+#ifdef DEBUG
+#define TRACE(msg) fprintf (stderr, "%s(%s:%d) -- %s\n", __FUNCTION__, __FILE__, __LINE__, msg)
+#else
+#define TRACE(msg)
+#endif
+
+static void
+_throw (JNIEnv *env, const char *exception, const char *msg)
+{
+ jclass _theclass = (*env)->FindClass (env, exception);
+ TRACE("begin");
+ if (!_theclass)
+ {
+ (*env)->FatalError (env, "exception class not found");
+ }
+ (*env)->ThrowNew (env, _theclass, msg);
+ TRACE("end");
+}
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_create (JNIEnv *env, jobject this, jboolean stream)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd, created;
+ jclass clazz;
+ jint fd = (jint) local_create ((int) stream);
+
+ TRACE("begin");
+
+ if (fd < 0)
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ return;
+ }
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ created = (*env)->GetFieldID (env, clazz, "created", "Z");
+ if (!created)
+ {
+ return;
+ }
+ (*env)->SetIntField (env, this, socket_fd, fd);
+ (*env)->SetBooleanField (env, this, created, JNI_TRUE);
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) stream;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_listen (JNIEnv *env, jobject this, jint backlog)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ int fd;
+
+ TRACE("begin");
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ if (local_listen (fd, (int) backlog))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ return;
+ }
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) backlog;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_accept (JNIEnv *env, jobject this, jobject socket)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jmethodID addr_init;
+ jfieldID socket_fd, remote_addr, local_addr;
+ jclass clazz1, clazz2;
+ jobject remote, local;
+ jint fd;
+ char path[108];
+
+ TRACE("begin");
+
+ clazz1 = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz1, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (*env)->GetIntField (env, this, socket_fd);
+ fd = (jint) local_accept ((int) fd, path);
+ if (fd < 0)
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ return;
+ }
+
+ clazz2 = (*env)->FindClass (env, "gnu/java/net/local/LocalSocketAddress");
+ if (!clazz2)
+ {
+ return;
+ }
+ addr_init = (*env)->GetMethodID (env, clazz2, "<init>", "(Ljava/lang/String;)V");
+ if (!addr_init)
+ {
+ return;
+ }
+ remote = (*env)->NewObject (env, clazz2, addr_init, (*env)->NewStringUTF (env, path));
+
+ remote_addr = (*env)->GetFieldID (env, clazz1, "remote", "Lgnu/java/net/local/LocalSocketAddress;");
+ if (!remote_addr)
+ {
+ return;
+ }
+ local_addr = (*env)->GetFieldID (env, clazz1, "local", "Lgnu/java/net/local/LocalSocketAddress;");
+ if (!local_addr)
+ {
+ return;
+ }
+ local = (*env)->GetObjectField (env, this, local_addr);
+ (*env)->SetIntField (env, socket, socket_fd, fd);
+ (*env)->SetObjectField (env, socket, remote_addr, remote);
+ (*env)->SetObjectField (env, socket, local_addr, local);
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) socket;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+jint
+Java_gnu_java_net_local_LocalSocketImpl_available (JNIEnv *env, jobject this)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ jint avail;
+
+ TRACE("begin");
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return 0;
+ }
+ avail = (jint) local_available ((int) (*env)->GetIntField (env, this, socket_fd));
+ if (avail < 0)
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ return 0;
+ }
+
+ TRACE("end");
+
+ return avail;
+#else
+ (void) this;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+ return -1;
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_close (JNIEnv *env, jobject this)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ int fd;
+
+ TRACE("begin");
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ if (local_close (fd))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+
+ TRACE("end");
+#else
+ (void) this;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_unlink (JNIEnv *env, jobject this)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID local;
+ jmethodID get_path;
+ jclass clazz1, clazz2;
+ jobject local_ref, path;
+ char *addr_path;
+
+ TRACE("begin");
+
+ clazz1 = (*env)->GetObjectClass (env, this);
+ local = (*env)->GetFieldID (env, clazz1, "local", "Lgnu/java/net/local/LocalSocketAddress;");
+ if (!local)
+ {
+ return;
+ }
+ local_ref = (*env)->GetObjectField (env, this, local);
+ clazz2 = (*env)->GetObjectClass (env, local_ref);
+ get_path = (*env)->GetMethodID (env, clazz2, "getPath", "()Ljava/lang/String;");
+ if (!get_path)
+ {
+ return;
+ }
+ path = (*env)->CallObjectMethod (env, local_ref, get_path);
+ addr_path = (char *) (*env)->GetStringUTFChars (env, (jstring) path, NULL);
+ if (local_unlink (addr_path))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+ (*env)->ReleaseStringUTFChars (env, (jstring) path, addr_path);
+
+ TRACE("end");
+#else
+ (void) this;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_sendUrgentData (JNIEnv *env, jobject this __attribute__((unused)), jint data __attribute__((unused)))
+{
+ /* XXX I don't remember why I have this. Probably should just
+ remove. */
+ (*env)->FatalError (env, "Java_gnu_java_net_local_LocalSocketImpl_shutdownInput (JNIEnv *env, jobject) not implemented");
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_shutdownInput (JNIEnv *env, jobject this)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ int fd;
+
+ TRACE("begin");
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (*env)->GetIntField (env, this, socket_fd);
+ if (local_shutdown_input (fd))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+
+ TRACE("end");
+#else
+ (void) this;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_shutdownOutput (JNIEnv *env, jobject this)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ int fd;
+
+ TRACE("begin");
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (*env)->GetIntField (env, this, socket_fd);
+ if (local_shutdown_output (fd))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+
+ TRACE("end");
+#else
+ (void) this;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_localBind (JNIEnv *env, jobject this, jobject address)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jmethodID get_path;
+ jobject path;
+ jclass clazz1, clazz2;
+ const char *addr_path;
+ int fd;
+
+ TRACE("begin");
+
+ clazz1 = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz1, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ clazz2 = (*env)->GetObjectClass (env, address);
+ get_path = (*env)->GetMethodID (env, clazz2, "getPath", "()Ljava/lang/String;");
+ path = (*env)->CallObjectMethod (env, address, get_path);
+ addr_path = (*env)->GetStringUTFChars (env, (jstring) path, NULL);
+ if (local_bind (fd, addr_path))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+ (*env)->ReleaseStringUTFChars (env, (jstring) path, addr_path);
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) address;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_localConnect (JNIEnv *env, jobject this, jobject address)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jmethodID get_path;
+ jobject path;
+ jclass clazz1, clazz2;
+ char *addr_path;
+ int fd;
+
+ TRACE("begin");
+
+ clazz1 = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz1, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ clazz2 = (*env)->GetObjectClass (env, address);
+ get_path = (*env)->GetMethodID (env, clazz2, "getPath", "()Ljava/lang/String;");
+ path = (*env)->CallObjectMethod (env, address, get_path);
+ addr_path = (char *) (*env)->GetStringUTFChars (env, (jstring) path, NULL);
+ if (local_connect (fd, addr_path))
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+ (*env)->ReleaseStringUTFChars (env, (jstring) path, addr_path);
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) address;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+jint
+Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject this, jbyteArray buf, jint off, jint len)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ jbyte *buffer;
+ jint count;
+ int fd;
+
+ TRACE("begin");
+
+ if (off < 0 || len < 0 || off + len > (*env)->GetArrayLength (env, buf))
+ {
+ _throw (env, "java/lang/ArrayIndexOutOfBoundsException", "");
+ }
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return 0;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ buffer = (*env)->GetByteArrayElements (env, buf, NULL);
+ count = (jint) local_read (fd, (void *) (buffer + off), (int) len);
+ if (count < 0)
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+ (*env)->ReleaseByteArrayElements (env, buf, buffer, 0);
+
+ TRACE("end");
+
+ return count;
+#else
+ (void) this;
+ (void) buf;
+ (void) off;
+ (void) len;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+ return -1;
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
+
+
+void
+Java_gnu_java_net_local_LocalSocketImpl_write (JNIEnv *env, jobject this, jbyteArray buf, jint off, jint len)
+{
+#ifdef ENABLE_LOCAL_SOCKETS
+ jfieldID socket_fd;
+ jclass clazz;
+ jbyte *buffer;
+ int fd;
+
+ TRACE("begin");
+
+ if (off < 0 || len < 0 || off + len > (*env)->GetArrayLength (env, buf))
+ {
+ _throw (env, "java/lang/ArrayIndexOutOfBoundsException", "");
+ }
+
+ clazz = (*env)->GetObjectClass (env, this);
+ socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I");
+ if (!socket_fd)
+ {
+ return;
+ }
+ fd = (int) (*env)->GetIntField (env, this, socket_fd);
+ buffer = (*env)->GetByteArrayElements (env, buf, NULL);
+ if (local_write (fd, (void *) (buffer + off), (int) len) < 0)
+ {
+ _throw (env, "java/io/IOException", local_error ());
+ }
+ (*env)->ReleaseByteArrayElements (env, buf, buffer, JNI_ABORT);
+
+ TRACE("end");
+#else
+ (void) this;
+ (void) buf;
+ (void) off;
+ (void) len;
+ _throw (env, "java/lang/Error", "support for local sockets not available");
+#endif /* ENABLE_LOCAL_SOCKETS */
+}
diff --git a/libjava/classpath/native/jni/java-net/javanet.c b/libjava/classpath/native/jni/java-net/javanet.c
index 0a1b84a..e500c60 100644
--- a/libjava/classpath/native/jni/java-net/javanet.c
+++ b/libjava/classpath/native/jni/java-net/javanet.c
@@ -835,6 +835,9 @@ _javanet_accept (JNIEnv * env, jobject this, jobject impl)
}
while (result != TARGET_NATIVE_OK);
+ /* Reset the inherited timeout. */
+ TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT (newfd, 0, result);
+
/* Populate instance variables */
_javanet_set_int_field (env, impl, "gnu/java/net/PlainSocketImpl",
"native_fd", newfd);
diff --git a/libjava/classpath/native/jni/java-net/javanet.h b/libjava/classpath/native/jni/java-net/javanet.h
index 785b0b0..030d412 100644
--- a/libjava/classpath/native/jni/java-net/javanet.h
+++ b/libjava/classpath/native/jni/java-net/javanet.h
@@ -40,6 +40,7 @@ exception statement from your version. */
#define _JAVANET_LOADED
#include <jni.h>
+#include "jcl.h"
/*************************************************************************/
@@ -73,19 +74,6 @@ exception statement from your version. */
/*************************************************************************/
/*
- * Macros
- */
-
-/* Simple debug macro */
-#ifdef DEBUG
-#define DBG(x) fprintf(stderr, (x));
-#else
-#define DBG(x)
-#endif
-
-/*************************************************************************/
-
-/*
* Function Prototypes
*/
diff --git a/libjava/classpath/native/jni/java-net/local.c b/libjava/classpath/native/jni/java-net/local.c
new file mode 100644
index 0000000..cdddd89
--- /dev/null
+++ b/libjava/classpath/native/jni/java-net/local.c
@@ -0,0 +1,193 @@
+/* local.c -- implementation of unix-domain sockets.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#ifdef ENABLE_LOCAL_SOCKETS
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <stdio.h>
+
+#include "local.h"
+
+const char *
+local_error (void)
+{
+ return strerror (errno);
+}
+
+int
+local_create (int stream)
+{
+ return socket (PF_UNIX, stream ? SOCK_STREAM : SOCK_DGRAM, 0);
+}
+
+static int gcc_sucks = 0;
+
+int
+local_bind (int fd, const char *addr)
+{
+ struct sockaddr_un saddr;
+
+ /* For some reason, GCC 4.0.1 on Darwin/x86 MODIFIES the `addr'
+ pointer in the CALLER's STACK FRAME after calling this function,
+ but if we add this statement below, it doesn't! */
+ if (gcc_sucks)
+ fprintf (stderr, "bind %p\n", addr);
+
+ if (strlen (addr) > sizeof (saddr.sun_path))
+ {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+
+ strncpy (saddr.sun_path, addr, sizeof (saddr.sun_path));
+ saddr.sun_path[sizeof (saddr.sun_path)] = '\0';
+ saddr.sun_family = AF_LOCAL;
+
+ return bind (fd, (struct sockaddr *) &saddr, SUN_LEN (&saddr));
+}
+
+int
+local_listen (int fd, int backlog)
+{
+ return listen (fd, backlog);
+}
+
+int
+local_accept (int fd, char *path)
+{
+ int newfd;
+ struct sockaddr_un addr;
+ socklen_t sz = SUN_LEN(&addr);
+
+ newfd = accept (fd, (struct sockaddr *) &addr, &sz);
+ if (newfd >= 0)
+ {
+ /** sun_path is some crazy statically-sized buffer, and it's
+ size is different on different OSes. */
+ int n = sizeof (addr.sun_path);
+ strncpy (path, addr.sun_path, n);
+ path[n] = '\0';
+ }
+ return newfd;
+}
+
+int
+local_available (int fd)
+{
+ int val;
+ if (ioctl (fd, FIONREAD, &val))
+ {
+ return -1;
+ }
+ return val;
+}
+
+int
+local_close (int fd)
+{
+ return close (fd);
+}
+
+int
+local_unlink (char *path)
+{
+ return unlink (path);
+}
+
+int
+local_shutdown_input (int fd)
+{
+ return shutdown (fd, 0);
+}
+
+int
+local_shutdown_output (int fd)
+{
+ return shutdown (fd, 1);
+}
+
+int
+local_connect (int fd, char *path)
+{
+ struct sockaddr_un saddr;
+
+ strncpy (saddr.sun_path, path, sizeof (saddr.sun_path));
+ saddr.sun_path[sizeof (saddr.sun_path) - 1] = '\0';
+ saddr.sun_family = AF_UNIX;
+
+ return connect (fd, (struct sockaddr *) &saddr, SUN_LEN(&saddr));
+}
+
+int
+local_read (int fd, void *buf, int len)
+{
+ int count = -1;
+ do
+ {
+ count = read (fd, buf, len);
+ }
+ while (count == -1 && errno == EINTR);
+ return count;
+}
+
+int
+local_write (int fd, void *buf, int len)
+{
+ int count = -1;
+ do
+ {
+ count = write (fd, buf, len);
+ }
+ while (count == -1 && errno == EINTR);
+ return count;
+}
+
+#endif /* ENABLE_LOCAL_SOCKETS */
diff --git a/libjava/classpath/native/jni/java-net/local.h b/libjava/classpath/native/jni/java-net/local.h
new file mode 100644
index 0000000..035996a
--- /dev/null
+++ b/libjava/classpath/native/jni/java-net/local.h
@@ -0,0 +1,28 @@
+#ifndef __LOCAL_H__
+#define __LOCAL_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#define __EMACSEN__ }
+
+extern const char *local_error (void);
+extern int local_create (int);
+extern int local_bind (int, const char *);
+extern int local_listen (int, int);
+extern int local_accept (int, char *);
+extern int local_available (int);
+extern int local_close (int);
+extern int local_shutdown_input (int);
+extern int local_shutdown_output (int);
+extern int local_connect (int, char *);
+extern int local_unlink (char *);
+extern int local_read (int, void *, int);
+extern int local_write (int, void *, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LOCAL_H__ */
diff --git a/libjava/classpath/native/jni/java-nio/Makefile.am b/libjava/classpath/native/jni/java-nio/Makefile.am
index 8fd5ba3..af56437 100644
--- a/libjava/classpath/native/jni/java-nio/Makefile.am
+++ b/libjava/classpath/native/jni/java-nio/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libjavanio.la
+nativeexeclib_LTLIBRARIES = libjavanio.la
libjavanio_la_SOURCES = gnu_java_nio_VMPipe.c \
gnu_java_nio_VMSelector.c \
diff --git a/libjava/classpath/native/jni/java-nio/Makefile.in b/libjava/classpath/native/jni/java-nio/Makefile.in
index a99e66a..5476643 100644
--- a/libjava/classpath/native/jni/java-nio/Makefile.in
+++ b/libjava/classpath/native/jni/java-nio/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
am__DEPENDENCIES_1 =
libjavanio_la_DEPENDENCIES = \
$(top_builddir)/native/jni/classpath/jcl.lo \
@@ -106,6 +106,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -145,6 +146,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -165,6 +168,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -212,6 +216,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -230,8 +235,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -243,8 +251,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -261,7 +267,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -269,18 +278,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -290,7 +303,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libjavanio.la
+nativeexeclib_LTLIBRARIES = libjavanio.la
libjavanio_la_SOURCES = gnu_java_nio_VMPipe.c \
gnu_java_nio_VMSelector.c \
gnu_java_nio_channels_FileChannelImpl.c \
@@ -338,35 +351,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libjavanio.la: $(libjavanio_la_OBJECTS) $(libjavanio_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavanio_la_LDFLAGS) $(libjavanio_la_OBJECTS) $(libjavanio_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavanio_la_LDFLAGS) $(libjavanio_la_OBJECTS) $(libjavanio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -492,7 +505,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -521,7 +534,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -540,9 +553,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -568,20 +581,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/java-util/Makefile.am b/libjava/classpath/native/jni/java-util/Makefile.am
index 148e9cc..f06213f 100644
--- a/libjava/classpath/native/jni/java-util/Makefile.am
+++ b/libjava/classpath/native/jni/java-util/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libjavautil.la
+nativeexeclib_LTLIBRARIES = libjavautil.la
libjavautil_la_SOURCES = java_util_VMTimeZone.c
diff --git a/libjava/classpath/native/jni/java-util/Makefile.in b/libjava/classpath/native/jni/java-util/Makefile.in
index fead46e..51c22d2 100644
--- a/libjava/classpath/native/jni/java-util/Makefile.in
+++ b/libjava/classpath/native/jni/java-util/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libjavautil_la_LIBADD =
am_libjavautil_la_OBJECTS = java_util_VMTimeZone.lo
libjavautil_la_OBJECTS = $(am_libjavautil_la_OBJECTS)
@@ -97,6 +97,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -136,6 +137,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -156,6 +159,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -203,6 +207,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -221,8 +226,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -234,8 +242,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -252,7 +258,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -260,18 +269,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -281,7 +294,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libjavautil.la
+nativeexeclib_LTLIBRARIES = libjavautil.la
libjavautil_la_SOURCES = java_util_VMTimeZone.c
AM_LDFLAGS = @CLASSPATH_MODULE@
AM_CPPFLAGS = @CLASSPATH_INCLUDES@
@@ -319,35 +332,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libjavautil.la: $(libjavautil_la_OBJECTS) $(libjavautil_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libjavautil_la_LDFLAGS) $(libjavautil_la_OBJECTS) $(libjavautil_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libjavautil_la_LDFLAGS) $(libjavautil_la_OBJECTS) $(libjavautil_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -467,7 +480,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -496,7 +509,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -515,9 +528,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -543,20 +556,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/midi-alsa/.cvsignore b/libjava/classpath/native/jni/midi-alsa/.cvsignore
deleted file mode 100644
index 483b277..0000000
--- a/libjava/classpath/native/jni/midi-alsa/.cvsignore
+++ /dev/null
@@ -1,9 +0,0 @@
-*.o
-*.a
-*.lo
-*.la
-.libs
-.depsMakefile
-Makefile.in
-Makefile
-.deps
diff --git a/libjava/classpath/native/jni/midi-alsa/Makefile.am b/libjava/classpath/native/jni/midi-alsa/Makefile.am
index b6498df..e45cb43 100644
--- a/libjava/classpath/native/jni/midi-alsa/Makefile.am
+++ b/libjava/classpath/native/jni/midi-alsa/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libgjsmalsa.la
+nativeexeclib_LTLIBRARIES = libgjsmalsa.la
libgjsmalsa_la_SOURCES = gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.c \
gnu_javax_sound_midi_alsa_AlsaPortDevice.c \
diff --git a/libjava/classpath/native/jni/midi-alsa/Makefile.in b/libjava/classpath/native/jni/midi-alsa/Makefile.in
index 0eb68803..49bf6f9 100644
--- a/libjava/classpath/native/jni/midi-alsa/Makefile.in
+++ b/libjava/classpath/native/jni/midi-alsa/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libgjsmalsa_la_DEPENDENCIES =
am_libgjsmalsa_la_OBJECTS = \
gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.lo \
@@ -100,6 +100,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -139,6 +140,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -159,6 +162,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -206,6 +210,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -224,8 +229,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -237,8 +245,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -255,7 +261,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -263,18 +272,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -284,7 +297,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libgjsmalsa.la
+nativeexeclib_LTLIBRARIES = libgjsmalsa.la
libgjsmalsa_la_SOURCES = gnu_javax_sound_midi_alsa_AlsaMidiSequencerDevice.c \
gnu_javax_sound_midi_alsa_AlsaPortDevice.c \
gnu_javax_sound_midi_alsa_AlsaMidiDeviceProvider.c
@@ -326,35 +339,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libgjsmalsa.la: $(libgjsmalsa_la_OBJECTS) $(libgjsmalsa_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libgjsmalsa_la_LDFLAGS) $(libgjsmalsa_la_OBJECTS) $(libgjsmalsa_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libgjsmalsa_la_LDFLAGS) $(libgjsmalsa_la_OBJECTS) $(libgjsmalsa_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -476,7 +489,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -505,7 +518,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -524,9 +537,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -552,20 +565,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/midi-dssi/.cvsignore b/libjava/classpath/native/jni/midi-dssi/.cvsignore
deleted file mode 100644
index ac18ca2..0000000
--- a/libjava/classpath/native/jni/midi-dssi/.cvsignore
+++ /dev/null
@@ -1,9 +0,0 @@
-*.o
-*.a
-*.lo
-*.la
-.libs
-.depsMakefile
-Makefile.in
-.deps
-Makefile
diff --git a/libjava/classpath/native/jni/midi-dssi/Makefile.am b/libjava/classpath/native/jni/midi-dssi/Makefile.am
index 6b1ef04..8a466d6 100644
--- a/libjava/classpath/native/jni/midi-dssi/Makefile.am
+++ b/libjava/classpath/native/jni/midi-dssi/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libgjsmdssi.la
+nativeexeclib_LTLIBRARIES = libgjsmdssi.la
libgjsmdssi_la_SOURCES = gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.c \
gnu_javax_sound_midi_dssi_DSSISynthesizer.c \
diff --git a/libjava/classpath/native/jni/midi-dssi/Makefile.in b/libjava/classpath/native/jni/midi-dssi/Makefile.in
index 205ebee..5c16335 100644
--- a/libjava/classpath/native/jni/midi-dssi/Makefile.in
+++ b/libjava/classpath/native/jni/midi-dssi/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libgjsmdssi_la_DEPENDENCIES = \
$(top_builddir)/native/jni/classpath/jcl.lo
am_libgjsmdssi_la_OBJECTS = \
@@ -100,6 +100,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -139,6 +140,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -159,6 +162,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -206,6 +210,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -224,8 +229,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -237,8 +245,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -255,7 +261,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -263,18 +272,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -284,7 +297,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libgjsmdssi.la
+nativeexeclib_LTLIBRARIES = libgjsmdssi.la
libgjsmdssi_la_SOURCES = gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.c \
gnu_javax_sound_midi_dssi_DSSISynthesizer.c \
dssi_data.h
@@ -326,35 +339,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libgjsmdssi.la: $(libgjsmdssi_la_OBJECTS) $(libgjsmdssi_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libgjsmdssi_la_LDFLAGS) $(libgjsmdssi_la_OBJECTS) $(libgjsmdssi_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libgjsmdssi_la_LDFLAGS) $(libgjsmdssi_la_OBJECTS) $(libgjsmdssi_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -475,7 +488,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -504,7 +517,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -523,9 +536,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -551,20 +564,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/jni/qt-peer/Makefile.in b/libjava/classpath/native/jni/qt-peer/Makefile.in
index 330073f..321cadd 100644
--- a/libjava/classpath/native/jni/qt-peer/Makefile.in
+++ b/libjava/classpath/native/jni/qt-peer/Makefile.in
@@ -115,6 +115,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -154,6 +155,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -174,6 +177,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -221,6 +225,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -239,8 +244,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -252,8 +260,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -270,7 +276,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -278,18 +287,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/jni/xmlj/Makefile.am b/libjava/classpath/native/jni/xmlj/Makefile.am
index a210a59..3904dd5 100644
--- a/libjava/classpath/native/jni/xmlj/Makefile.am
+++ b/libjava/classpath/native/jni/xmlj/Makefile.am
@@ -1,4 +1,4 @@
-nativelib_LTLIBRARIES = libxmlj.la
+nativeexeclib_LTLIBRARIES = libxmlj.la
libxmlj_la_SOURCES = \
xmlj_dom.c \
diff --git a/libjava/classpath/native/jni/xmlj/Makefile.in b/libjava/classpath/native/jni/xmlj/Makefile.in
index 2e2bfe5..39e50ff 100644
--- a/libjava/classpath/native/jni/xmlj/Makefile.in
+++ b/libjava/classpath/native/jni/xmlj/Makefile.in
@@ -60,9 +60,9 @@ am__vpath_adj = case $$p in \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(nativelibdir)"
-nativelibLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(nativelib_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(nativeexeclibdir)"
+nativeexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(nativeexeclib_LTLIBRARIES)
libxmlj_la_DEPENDENCIES = $(top_builddir)/native/jni/classpath/jcl.lo
am_libxmlj_la_OBJECTS = xmlj_dom.lo xmlj_error.lo xmlj_io.lo \
xmlj_node.lo xmlj_sax.lo xmlj_transform.lo xmlj_util.lo \
@@ -99,6 +99,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -138,6 +139,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -158,6 +161,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -205,6 +209,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -223,8 +228,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -236,8 +244,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -254,7 +260,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -262,18 +271,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -283,7 +296,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-nativelib_LTLIBRARIES = libxmlj.la
+nativeexeclib_LTLIBRARIES = libxmlj.la
libxmlj_la_SOURCES = \
xmlj_dom.c \
xmlj_dom.h \
@@ -340,35 +353,35 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-nativelibLTLIBRARIES: $(nativelib_LTLIBRARIES)
+install-nativeexeclibLTLIBRARIES: $(nativeexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(nativelibdir)" || $(mkdir_p) "$(DESTDIR)$(nativelibdir)"
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ test -z "$(nativeexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(nativeexeclibdir)"
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativelibdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(nativelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativelibdir)/$$f"; \
+ echo " $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nativeexeclibdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(nativeexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nativeexeclibdir)/$$f"; \
else :; fi; \
done
-uninstall-nativelibLTLIBRARIES:
+uninstall-nativeexeclibLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+ @set -x; list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativelibdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativelibdir)/$$p"; \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nativeexeclibdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nativeexeclibdir)/$$p"; \
done
-clean-nativelibLTLIBRARIES:
- -test -z "$(nativelib_LTLIBRARIES)" || rm -f $(nativelib_LTLIBRARIES)
- @list='$(nativelib_LTLIBRARIES)'; for p in $$list; do \
+clean-nativeexeclibLTLIBRARIES:
+ -test -z "$(nativeexeclib_LTLIBRARIES)" || rm -f $(nativeexeclib_LTLIBRARIES)
+ @list='$(nativeexeclib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libxmlj.la: $(libxmlj_la_OBJECTS) $(libxmlj_la_DEPENDENCIES)
- $(LINK) -rpath $(nativelibdir) $(libxmlj_la_LDFLAGS) $(libxmlj_la_OBJECTS) $(libxmlj_la_LIBADD) $(LIBS)
+ $(LINK) -rpath $(nativeexeclibdir) $(libxmlj_la_LDFLAGS) $(libxmlj_la_OBJECTS) $(libxmlj_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -495,7 +508,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(nativelibdir)"; do \
+ for dir in "$(DESTDIR)$(nativeexeclibdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -524,7 +537,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-nativelibLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-nativeexeclibLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
@@ -543,9 +556,9 @@ info: info-am
info-am:
-install-data-am: install-nativelibLTLIBRARIES
+install-data-am:
-install-exec-am:
+install-exec-am: install-nativeexeclibLTLIBRARIES
install-info: install-info-am
@@ -571,20 +584,20 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-nativelibLTLIBRARIES
+uninstall-am: uninstall-info-am uninstall-nativeexeclibLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-nativelibLTLIBRARIES ctags distclean \
+ clean-libtool clean-nativeexeclibLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
- install-nativelibLTLIBRARIES install-strip installcheck \
+ install-nativeexeclibLTLIBRARIES install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
- uninstall-nativelibLTLIBRARIES
+ uninstall-nativeexeclibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libjava/classpath/native/target/Linux/Makefile.in b/libjava/classpath/native/target/Linux/Makefile.in
index 342a496..1342c42 100644
--- a/libjava/classpath/native/target/Linux/Makefile.in
+++ b/libjava/classpath/native/target/Linux/Makefile.in
@@ -69,6 +69,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -108,6 +109,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -128,6 +131,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -175,6 +179,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -193,8 +198,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -206,8 +214,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -224,7 +230,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -232,18 +241,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/target/Makefile.in b/libjava/classpath/native/target/Makefile.in
index 2f12b77..fbedbeb 100644
--- a/libjava/classpath/native/target/Makefile.in
+++ b/libjava/classpath/native/target/Makefile.in
@@ -78,6 +78,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -117,6 +118,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -137,6 +140,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -184,6 +188,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -202,8 +207,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -215,8 +223,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -233,7 +239,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -241,18 +250,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/target/generic/Makefile.in b/libjava/classpath/native/target/generic/Makefile.in
index 2f4ed8c..ee238ff 100644
--- a/libjava/classpath/native/target/generic/Makefile.in
+++ b/libjava/classpath/native/target/generic/Makefile.in
@@ -69,6 +69,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -108,6 +109,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -128,6 +131,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -175,6 +179,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -193,8 +198,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -206,8 +214,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -224,7 +230,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -232,18 +241,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/native/target/generic/target_generic.h b/libjava/classpath/native/target/generic/target_generic.h
index e4ddf5c..c226433 100644
--- a/libjava/classpath/native/target/generic/target_generic.h
+++ b/libjava/classpath/native/target/generic/target_generic.h
@@ -148,7 +148,7 @@ Systems : all
#include <errno.h>
#define TARGET_NATIVE_LAST_ERROR_STRING_FORMAT(buffer,bufferSize,format) \
do { \
- sprintf(buffer,format); \
+ sprintf(buffer, "%s", format); \
strcat(" (error: "); \
strcat(strerror(errno)); \
strcat(")"); \
diff --git a/libjava/classpath/native/target/generic/target_generic_misc.h b/libjava/classpath/native/target/generic/target_generic_misc.h
index 1174aa8..d51be15 100644
--- a/libjava/classpath/native/target/generic/target_generic_misc.h
+++ b/libjava/classpath/native/target/generic/target_generic_misc.h
@@ -90,7 +90,7 @@ Systems : all
#include <stdarg.h>
#define TARGET_NATIVE_MISC_FORMAT_STRING0(buffer,bufferSize,format) \
do { \
- snprintf(buffer,bufferSize,format); \
+ snprintf(buffer,bufferSize, "%s", format); \
} while (0)
#endif
#ifndef TARGET_NATIVE_MISC_FORMAT_STRING1
diff --git a/libjava/classpath/native/testsuite/Makefile.am b/libjava/classpath/native/testsuite/Makefile.am
deleted file mode 100644
index 26f2f82..0000000
--- a/libjava/classpath/native/testsuite/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-##bin_PROGRAMS = guile-jvm
-
diff --git a/libjava/classpath/native/testsuite/guile-jvm.c b/libjava/classpath/native/testsuite/guile-jvm.c
deleted file mode 100644
index c372f75..0000000
--- a/libjava/classpath/native/testsuite/guile-jvm.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Guile/JNI/JVM Testing Framework
- *
- * Copyright (c) 1998 Free Software Foundation, Inc.
- * Written by Paul Fisher (rao@gnu.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
- * (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <libguile.h>
-#include <guile/gh.h>
-#include <jni.h>
-
-static JNIEnv *env;
-static jclass test_class, result_class;
-static jmethodID test_mid, test_name_mid, result_name_mid, result_msg_mid;
-
-SCM
-abort_test (SCM name, char *exception)
-{
- (*env)->ExceptionClear (env);
- return gh_list (name,
- gh_symbol2scm ("ERROR"),
- gh_str02scm (exception),
- SCM_UNDEFINED);
-}
-
-SCM
-handle_test_exception (jobject test_name_obj)
-{
- jthrowable throwable;
- jclass object_class;
- jobject err_msg_obj;
- char *err_msg, *test_name;
- const char *utf;
- SCM result;
- jboolean is_copy;
- static jmethodID obj_toString_mid = NULL;
-
- throwable = (*env)->ExceptionOccurred (env);
- (*env)->ExceptionClear (env);
-
- if (obj_toString_mid == NULL)
- obj_toString_mid = (*env)->GetMethodID (env,
- (*env)->FindClass (env,
- "java/lang/Object"),
- "toString",
- "()Ljava/lang/String;");
-
- err_msg_obj = (*env)->CallObjectMethod (env, throwable, obj_toString_mid);
-
- utf = (*env)->GetStringUTFChars (env, err_msg_obj, &is_copy);
- err_msg = strdup (utf);
- (*env)->ReleaseStringUTFChars (env, err_msg_obj, utf);
-
- utf = (*env)->GetStringUTFChars (env, test_name_obj, &is_copy);
- test_name = strdup (utf);
- (*env)->ReleaseStringUTFChars (env, test_name_obj, utf);
-
- result = abort_test (gh_str02scm (test_name), err_msg);
-
- free (err_msg);
- free (test_name);
-
- return result;
-}
-
-SCM
-perform_test (SCM clazz_scm_name)
-{
- char *clazz_name, *test_name, *result_name, *msg;
- const char *utf;
- jclass clazz;
- jmethodID mid;
- jobject test_obj, result_obj, test_name_obj, result_name_obj, msg_obj;
- jboolean is_copy;
- SCM scm_test_name, scm_result_name, scm_result_msg;
-
- clazz_name = gh_scm2newstr (clazz_scm_name, NULL);
- clazz = (*env)->FindClass (env, clazz_name);
- if (clazz == NULL)
- {
- SCM clazz_err = gh_str02scm (clazz_name);
- free (clazz_name);
- return abort_test (clazz_err, "Unable to find class");
- }
-
- mid = (*env)->GetMethodID (env, clazz, "<init>", "()V");
- test_obj = (*env)->NewObject (env, clazz, mid);
-
- if ((*env)->IsInstanceOf (env, test_obj, test_class) == JNI_FALSE)
- {
- SCM clazz_err = gh_str02scm (clazz_name);
- free (clazz_name);
- return abort_test (clazz_err, "Not an instanceof gnu.test.Test");
- }
- free (clazz_name);
-
- /* Call all the Java testing methods */
- test_name_obj = (*env)->CallObjectMethod (env, test_obj, test_name_mid);
- result_obj = (*env)->CallObjectMethod (env, test_obj, test_mid);
-
- /* Handle an exception if one occurred */
- if ((*env)->ExceptionOccurred (env))
- return handle_test_exception (test_name_obj);
-
- result_name_obj = (*env)->CallObjectMethod (env, result_obj,
- result_name_mid);
- msg_obj = (*env)->CallObjectMethod (env, result_obj, result_msg_mid);
-
- /* Grab all the C result messages */
- utf = (*env)->GetStringUTFChars (env, test_name_obj, &is_copy);
- test_name = strdup (utf);
- (*env)->ReleaseStringUTFChars (env, test_name_obj, utf);
-
- utf = (*env)->GetStringUTFChars (env, result_name_obj, &is_copy);
- result_name = strdup (utf);
- (*env)->ReleaseStringUTFChars (env, result_name_obj, utf);
-
- utf = (*env)->GetStringUTFChars (env, msg_obj, &is_copy);
- msg = strdup (utf);
- (*env)->ReleaseStringUTFChars (env, msg_obj, utf);
-
- /* Convert the C result messages to Scheme */
- scm_test_name = gh_str02scm (test_name);
- scm_result_name = gh_symbol2scm (result_name);
- scm_result_msg = gh_str02scm (msg);
-
- /* Free up the C result messages */
- free (test_name);
- free (result_name);
- free (msg);
-
- return gh_list (scm_test_name,
- scm_result_name,
- scm_result_msg,
- SCM_UNDEFINED);
-}
-
-int
-init_testing_framework ()
-{
- JavaVM *jvm;
- JDK1_1InitArgs vm_args;
-
- vm_args.version = 0x00010001;
- JNI_GetDefaultJavaVMInitArgs (&vm_args);
- vm_args.classpath = getenv ("CLASSPATH");
- if (JNI_CreateJavaVM (&jvm, &env, &vm_args) < 0)
- return -1;
-
- test_class = (*env)->FindClass (env, "gnu/test/Test");
- if (test_class == NULL)
- {
- fprintf (stderr, "Unable to locate gnu.test.Test\n");
- return -1;
- }
- test_class = (*env)->NewGlobalRef (env, test_class);
-
- result_class = (*env)->FindClass (env, "gnu/test/Result");
- if (result_class == NULL)
- {
- fprintf (stderr, "Unable to locate gnu.test.Result\n");
- return -1;
- }
- result_class = (*env)->NewGlobalRef (env, result_class);
-
- test_mid = (*env)->GetMethodID (env, test_class, "test",
- "()Lgnu/test/Result;");
- test_name_mid = (*env)->GetMethodID (env, test_class, "getName",
- "()Ljava/lang/String;");
- if (test_mid == NULL || test_name_mid == NULL)
- {
- fprintf (stderr, "Malformed gnu.test.Test class\n");
- return -1;
- }
-
- result_name_mid = (*env)->GetMethodID (env, result_class, "getName",
- "()Ljava/lang/String;");
- result_msg_mid = (*env)->GetMethodID (env, result_class, "getMsg",
- "()Ljava/lang/String;");
- if (result_name_mid == NULL || result_msg_mid == NULL)
- {
- fprintf (stderr, "Malformed gnu.test.Result class\n");
- return -1;
- }
-
- gh_new_procedure1_0 ("test", perform_test);
- return 0;
-}
-
-static void
-inner_main (void *closure, int argc, char **argv)
-{
- if (init_testing_framework () < 0)
- {
- fprintf (stderr, "Unable to instantiate JVM.\n");
- exit (1);
- }
- scm_shell (argc, argv);
-}
-
-int
-main (int argc, char **argv)
-{
- scm_boot_guile (argc, argv, inner_main, 0);
- return 0;
-}
diff --git a/libjava/classpath/native/vmi/Makefile.am b/libjava/classpath/native/vmi/Makefile.am
deleted file mode 100644
index 11b462a..0000000
--- a/libjava/classpath/native/vmi/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-EXTRA_DIST = \
-TODO \
-vmi.c \
-vmi.h
diff --git a/libjava/classpath/native/vmi/TODO b/libjava/classpath/native/vmi/TODO
deleted file mode 100644
index 8107ad4..0000000
--- a/libjava/classpath/native/vmi/TODO
+++ /dev/null
@@ -1,28 +0,0 @@
-TODO for JCL VMI library:
-
-API:
-- More functions will almost certainly be required. I am
- adding them in only as needs arise to keep the job as
- easy as possible in the short term. The full JVMDI
- will presumably need to be mimicked.
-
-Japhar 1.1:
-- Using the JVMDI for many functions, since Japhar
- implements JVMDI. Several JVMDI functions are not
- implemented yet, though, so it becomes a question of
- waiting til they are or implementing them ourselves.
-- Specifically, the JVMDI functions not yet implemented in
- Japhar that the VMI calls are:
- - JVMDI_GetClassModifiers()
- - JVMDI_GetClassName()
- - JVMDI_GetClassMethods()
- - JVMDI_GetClassFields()
- - JVMDI_GetImplementedInterfaces()
- - JVMDI_IsInterface()
- - JVMDI_IsArray()
- - JVMDI_ClassLoader()
- - JVMDI_GetMethodModifiers()
- - JVMDI_GetThrownExceptions()
- - JVMDI_GetFieldName()
- - JVMDI_GetFieldDeclaringClass()
- - JVMDI_GetFieldModifiers()
diff --git a/libjava/classpath/native/vmi/vmi.c b/libjava/classpath/native/vmi/vmi.c
deleted file mode 100755
index 6022bed..0000000
--- a/libjava/classpath/native/vmi/vmi.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Japhar implementation of VMI.
- Copyright (C) 1998 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-#include <jcl.h>
-#include <vmi.h>
-#include <jvmdi.h>
-#include <interp.h>
-#include <native-threads.h>
-
-JNIEXPORT vmiError JNICALL
-VMI_GetFrameClass(JNIEnv *env,
- jframeID frame,
- jclass *clazz) {
-
- return VMI_ERROR_NONE;
-}
-
-JNIEXPORT vmiError JNICALL
-VMI_GetFrameObject(JNIEnv *env,
- jframeID frame,
- jobject *obj) {
- StackFrame *sframe = (StackFrame*)frame;
- if(env == NULL || obj == NULL)
- return VMI_ERROR_NULL_POINTER;
- if(frame == NULL)
- return VMI_ERROR_INVALID_FRAMEID;
-
- *obj = THISPTR(sframe);
- return VMI_ERROR_NONE;
-}
-
-JNIEXPORT vmiError JNICALL
-VMI_GetThisFrame(JNIEnv *env, jframeID *frame) {
- JThreadInfo *thread_info;
-
- if(env == NULL || frame == NULL)
- return VMI_ERROR_NULL_POINTER;
-
- thread_info = THREAD_getJavaInfo();
- *frame = (jframeID)TOPFRAME(thread_info);
- return VMI_ERROR_NONE;
-}
-
-JNIEXPORT vmiError JNICALL
-VMI_GetThisThreadObject(JNIEnv* env, jthread *thread) {
- JThreadInfo *thread_info;
- if(env == NULL || thread == NULL)
- return VMI_ERROR_NULL_POINTER;
- thread_info = THREAD_getJavaInfo();
- *thread = (jthread)thread_info->java_thread;
- return VMI_ERROR_NONE;
-}
-
-JNIEXPORT void JNICALL
-VMI_ThrowAppropriateException(JNIEnv *env, vmiError err) {
- switch(err) {
- case VMI_ERROR_NONE:
- JCL_ThrowException(env, "java/lang/InternalError", "ERROR_NONE passed to VMI exception thrower.");
- break;
- case VMI_ERROR_NULL_POINTER:
- JCL_ThrowException(env, "java/lang/NullPointerException", "null pointer in VMI detected.");
- break;
- case VMI_ERROR_OUT_OF_MEMORY:
- JCL_ThrowException(env, "java/lang/OutOfMemoryError", "Out of memory! (in VMI).");
- break;
- case VMI_ERROR_INVALID_METHODID:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: INVALID_METHODID");
- break;
- case VMI_ERROR_INVALID_CLASS:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: INVALID_CLASS");
- break;
- case VMI_ERROR_INVALID_BCI:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: INVALID_BCI");
- break;
- case VMI_ERROR_NO_SUCH_BREAKPOINT:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: NO_SUCH_BREAKPOINT");
- break;
- case VMI_ERROR_VM_DEAD:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: VM Dead! Kinda makes ya wonder how this exception got thrown, huh?");
- break;
- case VMI_ERROR_INVALID_FRAMEID:
- JCL_ThrowException(env, "java/lang/IllegalThreadStateException", "NULL Frame ID detected in VMI.");
- break;
- case VMI_ERROR_INVALID_SLOT:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: INVALID_SLOT");
- break;
- case VMI_ERROR_TYPE_MISMATCH:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: INVALID_SLOT");
- break;
- case VMI_ERROR_NATIVE_FRAME:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: NATIVE_FRAME");
- break;
- case VMI_ERROR_NO_MORE_FRAMES:
- JCL_ThrowException(env, "java/lang/InternalError", "VMI error: NO_MORE_FRAMES");
- break;
- case VMI_ERROR_INVALID_THREAD:
- JCL_ThrowException(env, "java/lang/IllegalThreadStateException", "Invalid thread in VMI.");
- break;
- case VMI_ERROR_THREAD_NOT_SUSPENDED:
- JCL_ThrowException(env, "java/lang/IllegalThreadStateException", "Attempt to introspect unsuspended thread in VMI.");
- break;
- default:
- JCL_ThrowException(env, "java/lang/UnknownError", "VMI returned erroneous error value ...");
- break;
- }
-}
-
-
diff --git a/libjava/classpath/native/vmi/vmi.h b/libjava/classpath/native/vmi/vmi.h
deleted file mode 100755
index 1a8e26a..0000000
--- a/libjava/classpath/native/vmi/vmi.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Japhar implementation of VMI.
- Copyright (C) 1998 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-#ifndef __VMI_H__
-#define __VMI_H__
-
-#include <jni.h>
-
-typedef void * jframeID;
-typedef void * jthread;
-
-typedef enum {
- VMI_ERROR_NONE,
- VMI_ERROR_NULL_POINTER,
- VMI_ERROR_OUT_OF_MEMORY,
- VMI_ERROR_INVALID_METHODID,
- VMI_ERROR_INVALID_CLASS,
- VMI_ERROR_INVALID_BCI,
- VMI_ERROR_NO_SUCH_BREAKPOINT,
- VMI_ERROR_VM_DEAD,
- VMI_ERROR_INVALID_FRAMEID,
- VMI_ERROR_INVALID_SLOT,
- VMI_ERROR_TYPE_MISMATCH,
- VMI_ERROR_NATIVE_FRAME,
- VMI_ERROR_NO_MORE_FRAMES,
- VMI_ERROR_INVALID_THREAD,
- VMI_ERROR_THREAD_NOT_SUSPENDED
-} vmiError;
-
-
-#define VMI_MOD_PUBLIC 0x0001
-#define VMI_MOD_PRIVATE 0x0002
-#define VMI_MOD_PROTECTED 0x0004
-#define VMI_MOD_STATIC 0x0008
-#define VMI_MOD_FINAL 0x0010
-#define VMI_MOD_SYNCHRONIZED 0x0020
-#define VMI_MOD_VOLATILE 0x0040
-#define VMI_MOD_TRANSIENT 0x0080
-#define VMI_MOD_NATIVE 0x0100
-#define VMI_MOD_INTERFACE 0x0200
-#define VMI_MOD_ABSTRACT 0x0400
-
-JNIEXPORT vmiError JNICALL
-VMI_GetFrameClass(JNIEnv *env, jframeID frame, jobject *obj);
-
-JNIEXPORT vmiError JNICALL
-VMI_GetFrameObject(JNIEnv *env, jframeID frame, jobject *obj);
-
-JNIEXPORT vmiError JNICALL
-VMI_GetThisFrame(JNIEnv *env, jframeID *frame);
-
-JNIEXPORT vmiError JNICALL
-VMI_GetThisThreadObject(JNIEnv *env, jthread *thread);
-
-JNIEXPORT void JNICALL
-VMI_ThrowAppropriateException(JNIEnv *env, vmiError err);
-
-#endif
diff --git a/libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java b/libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java
index ea234e6..5fb0353 100644
--- a/libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java
+++ b/libjava/classpath/org/omg/CORBA/ACTIVITY_COMPLETED.java
@@ -1,5 +1,5 @@
/* ACTIVITY_COMPLETED.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ACTIVITY_COMPLETED
+public final class ACTIVITY_COMPLETED
extends SystemException
implements Serializable
{
@@ -63,7 +63,7 @@ public class ACTIVITY_COMPLETED
/**
* Creates ACTIVITY_COMPLETED with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public ACTIVITY_COMPLETED(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java b/libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java
index c0c72b5..eeec382 100644
--- a/libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java
+++ b/libjava/classpath/org/omg/CORBA/ACTIVITY_REQUIRED.java
@@ -1,5 +1,5 @@
/* ACTIVITY_REQUIRED.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ACTIVITY_REQUIRED
+public final class ACTIVITY_REQUIRED
extends SystemException
implements Serializable
{
@@ -61,7 +61,7 @@ public class ACTIVITY_REQUIRED
/**
* Creates ACTIVITY_REQUIRED with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public ACTIVITY_REQUIRED(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_CONTEXT.java b/libjava/classpath/org/omg/CORBA/BAD_CONTEXT.java
index 139262d..398da9e 100644
--- a/libjava/classpath/org/omg/CORBA/BAD_CONTEXT.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_CONTEXT.java
@@ -1,5 +1,5 @@
/* BAD_CONTEXT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BAD_CONTEXT
+public final class BAD_CONTEXT
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class BAD_CONTEXT
/**
* Creates a BAD_CONTEXT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public BAD_CONTEXT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_INV_ORDER.java b/libjava/classpath/org/omg/CORBA/BAD_INV_ORDER.java
index 0f585cd..9390600 100644
--- a/libjava/classpath/org/omg/CORBA/BAD_INV_ORDER.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_INV_ORDER.java
@@ -1,5 +1,5 @@
/* BAD_INV_ORDER.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BAD_INV_ORDER
+public final class BAD_INV_ORDER
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class BAD_INV_ORDER
/**
* Creates a BAD_INV_ORDER with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public BAD_INV_ORDER(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_OPERATION.java b/libjava/classpath/org/omg/CORBA/BAD_OPERATION.java
index 2649f2a..b848907 100755
--- a/libjava/classpath/org/omg/CORBA/BAD_OPERATION.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_OPERATION.java
@@ -1,5 +1,5 @@
/* BAD_OPERATION.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -114,7 +114,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BAD_OPERATION
+public final class BAD_OPERATION
extends SystemException
implements Serializable
{
@@ -127,7 +127,7 @@ public class BAD_OPERATION
* Creates a BAD_OPERATION with the default minor code of 0, completion state
* COMPLETED_NO and the given explaining message.
*
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public BAD_OPERATION(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_PARAM.java b/libjava/classpath/org/omg/CORBA/BAD_PARAM.java
index 848f43b..2102193 100644
--- a/libjava/classpath/org/omg/CORBA/BAD_PARAM.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_PARAM.java
@@ -1,5 +1,5 @@
/* BAD_PARAM.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,14 +45,14 @@ import java.io.Serializable;
* illegal.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BAD_PARAM
+public final class BAD_PARAM
extends SystemException
implements Serializable
{
/**
* Creates BAD_PARAM with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public BAD_PARAM(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_QOS.java b/libjava/classpath/org/omg/CORBA/BAD_QOS.java
index ba8a0df..c7ceb69 100644
--- a/libjava/classpath/org/omg/CORBA/BAD_QOS.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_QOS.java
@@ -1,5 +1,5 @@
/* BAD_QOS.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class BAD_QOS
+public final class BAD_QOS
extends SystemException
implements Serializable
{
@@ -60,7 +60,7 @@ public class BAD_QOS
/**
* Creates BAD_QOS with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public BAD_QOS(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/BAD_TYPECODE.java b/libjava/classpath/org/omg/CORBA/BAD_TYPECODE.java
index 96ad21e..8aa5eb5 100644
--- a/libjava/classpath/org/omg/CORBA/BAD_TYPECODE.java
+++ b/libjava/classpath/org/omg/CORBA/BAD_TYPECODE.java
@@ -1,5 +1,5 @@
/* BAD_TYPECODE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BAD_TYPECODE
+public final class BAD_TYPECODE
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class BAD_TYPECODE
/**
* Creates a BAD_TYPECODE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public BAD_TYPECODE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java b/libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java
index 41ccaf4..fc285ba 100644
--- a/libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java
+++ b/libjava/classpath/org/omg/CORBA/CODESET_INCOMPATIBLE.java
@@ -1,5 +1,5 @@
/* CODESET_INCOMPATIBLE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,16 +43,16 @@ import java.io.Serializable;
/**
* Raised when client and server are unable to reach any consensus on which
* code set should be used to represent the characters. This happens when
- * neither server nor client cannot convert from the native code set of the
+ * neither server nor client can convert from the native code set of the
* corresponding side, there is no shared codeset from that both sides could
- * convert and additionally the client and server* native sets are too
- * different to communicate anyway without the massive data loss.
+ * convert and additionally the client and server native code sets are too
+ * different to communicate anyway without massive data loss.
*
* @since 1.5
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class CODESET_INCOMPATIBLE
+public final class CODESET_INCOMPATIBLE
extends SystemException
implements Serializable
{
@@ -64,7 +64,7 @@ public class CODESET_INCOMPATIBLE
/**
* Creates CODESET_INCOMPATIBLE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public CODESET_INCOMPATIBLE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/COMM_FAILURE.java b/libjava/classpath/org/omg/CORBA/COMM_FAILURE.java
index 3c50441..047d20e6 100644
--- a/libjava/classpath/org/omg/CORBA/COMM_FAILURE.java
+++ b/libjava/classpath/org/omg/CORBA/COMM_FAILURE.java
@@ -1,5 +1,5 @@
/* COMM_FAILURE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class COMM_FAILURE
+public final class COMM_FAILURE
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class COMM_FAILURE
/**
* Creates a COMM_FAILURE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public COMM_FAILURE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/CompletionStatus.java b/libjava/classpath/org/omg/CORBA/CompletionStatus.java
index 1ddcca2..52f6f07 100644
--- a/libjava/classpath/org/omg/CORBA/CompletionStatus.java
+++ b/libjava/classpath/org/omg/CORBA/CompletionStatus.java
@@ -1,5 +1,5 @@
/* CompletionStatus.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import org.omg.CORBA.portable.IDLEntity;
* when the exception has been thrown.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class CompletionStatus
+public final class CompletionStatus
implements Serializable, IDLEntity
{
/**
diff --git a/libjava/classpath/org/omg/CORBA/CurrentHolder.java b/libjava/classpath/org/omg/CORBA/CurrentHolder.java
index 83e5365..c7c1b32 100644
--- a/libjava/classpath/org/omg/CORBA/CurrentHolder.java
+++ b/libjava/classpath/org/omg/CORBA/CurrentHolder.java
@@ -1,5 +1,5 @@
/* CurrentHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class CurrentHolder
+public final class CurrentHolder
implements Streamable
{
/**
@@ -56,7 +56,7 @@ public class CurrentHolder
public Current value;
/**
- * Create the unitialised instance, leaving the value field
+ * Create the uninitialised instance, leaving the value field
* with default <code>null</code> value.
*/
public CurrentHolder()
@@ -74,7 +74,7 @@ public class CurrentHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/CORBA/DATA_CONVERSION.java b/libjava/classpath/org/omg/CORBA/DATA_CONVERSION.java
index 7261aae..7ca83f3 100644
--- a/libjava/classpath/org/omg/CORBA/DATA_CONVERSION.java
+++ b/libjava/classpath/org/omg/CORBA/DATA_CONVERSION.java
@@ -1,5 +1,5 @@
/* DATA_CONVERSION.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -66,7 +66,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class DATA_CONVERSION
+public final class DATA_CONVERSION
extends SystemException
implements Serializable
{
@@ -78,7 +78,7 @@ public class DATA_CONVERSION
/**
* Creates a DATA_CONVERSION with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public DATA_CONVERSION(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/DynAnyPackage/Invalid.java b/libjava/classpath/org/omg/CORBA/DynAnyPackage/Invalid.java
index dc66bea..cc232c4 100644
--- a/libjava/classpath/org/omg/CORBA/DynAnyPackage/Invalid.java
+++ b/libjava/classpath/org/omg/CORBA/DynAnyPackage/Invalid.java
@@ -1,5 +1,5 @@
/* Invalid.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class Invalid
+public final class Invalid
extends UserException
implements Serializable, IDLEntity
{
diff --git a/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java b/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java
index ef0179e..0904866 100644
--- a/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java
+++ b/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidSeq.java
@@ -1,5 +1,5 @@
/* InvalidSeq.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class InvalidSeq
+public final class InvalidSeq
extends UserException
implements Serializable, IDLEntity
{
diff --git a/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java b/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java
index 0c5ddf9..c2c4394 100644
--- a/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java
+++ b/libjava/classpath/org/omg/CORBA/DynAnyPackage/InvalidValue.java
@@ -1,5 +1,5 @@
/* InvalidValue.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class InvalidValue
+public final class InvalidValue
extends UserException
implements Serializable, IDLEntity
{
diff --git a/libjava/classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java b/libjava/classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java
index f4e9877..f1dfd5d 100644
--- a/libjava/classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java
+++ b/libjava/classpath/org/omg/CORBA/DynAnyPackage/TypeMismatch.java
@@ -1,5 +1,5 @@
/* TypeMismatch.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class TypeMismatch
+public final class TypeMismatch
extends UserException
implements Serializable, IDLEntity
{
diff --git a/libjava/classpath/org/omg/CORBA/FREE_MEM.java b/libjava/classpath/org/omg/CORBA/FREE_MEM.java
index 5de665c..ec1aa08 100644
--- a/libjava/classpath/org/omg/CORBA/FREE_MEM.java
+++ b/libjava/classpath/org/omg/CORBA/FREE_MEM.java
@@ -1,5 +1,5 @@
/* FREE_MEM.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,11 +41,11 @@ package org.omg.CORBA;
import java.io.Serializable;
/**
- * Means errors, related to freing the allocated memory.
+ * Means errors, related to freeing the allocated memory.
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class FREE_MEM
+public final class FREE_MEM
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class FREE_MEM
/**
* Creates a FREE_MEM with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public FREE_MEM(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/IMP_LIMIT.java b/libjava/classpath/org/omg/CORBA/IMP_LIMIT.java
index e61681c..b36d69e0 100644
--- a/libjava/classpath/org/omg/CORBA/IMP_LIMIT.java
+++ b/libjava/classpath/org/omg/CORBA/IMP_LIMIT.java
@@ -1,5 +1,5 @@
/* IMP_LIMIT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,12 +41,12 @@ package org.omg.CORBA;
import java.io.Serializable;
/**
- * Means that the server have reached some implementation limit
+ * Means that the server has reached some implementation limit
* (too many clients, too many references, too long parameters and so on).
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class IMP_LIMIT
+public final class IMP_LIMIT
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class IMP_LIMIT
/**
* Creates a IMP_LIMIT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public IMP_LIMIT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INITIALIZE.java b/libjava/classpath/org/omg/CORBA/INITIALIZE.java
index f697e58..b42739a 100644
--- a/libjava/classpath/org/omg/CORBA/INITIALIZE.java
+++ b/libjava/classpath/org/omg/CORBA/INITIALIZE.java
@@ -1,5 +1,5 @@
/* INITIALIZE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,11 +41,11 @@ package org.omg.CORBA;
import java.io.Serializable;
/**
- * Mans that the server cannot be initialized because of the some reason.
+ * Means that the server cannot be initialized because of the some reason.
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INITIALIZE
+public final class INITIALIZE
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INITIALIZE
/**
* Creates a INITIALIZE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INITIALIZE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INTERNAL.java b/libjava/classpath/org/omg/CORBA/INTERNAL.java
index a49041e..b8be638 100644
--- a/libjava/classpath/org/omg/CORBA/INTERNAL.java
+++ b/libjava/classpath/org/omg/CORBA/INTERNAL.java
@@ -1,5 +1,5 @@
/* INTERNAL.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,11 +41,11 @@ package org.omg.CORBA;
import java.io.Serializable;
/**
- * Means the internal failure in ORB.
+ * Means an internal failure in the ORB.
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INTERNAL
+public final class INTERNAL
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INTERNAL
/**
* Creates a INTERNAL with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INTERNAL(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INTF_REPOS.java b/libjava/classpath/org/omg/CORBA/INTF_REPOS.java
index e879c0b..b7b6fe3 100644
--- a/libjava/classpath/org/omg/CORBA/INTF_REPOS.java
+++ b/libjava/classpath/org/omg/CORBA/INTF_REPOS.java
@@ -1,5 +1,5 @@
/* INTF_REPOS.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INTF_REPOS
+public final class INTF_REPOS
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INTF_REPOS
/**
* Creates a INTF_REPOS with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INTF_REPOS(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java b/libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java
index ae1d92d..eb4f69a 100644
--- a/libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java
+++ b/libjava/classpath/org/omg/CORBA/INVALID_ACTIVITY.java
@@ -1,5 +1,5 @@
/* INVALID_ACTIVITY.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class INVALID_ACTIVITY
+public final class INVALID_ACTIVITY
extends SystemException
implements Serializable
{
@@ -61,7 +61,7 @@ public class INVALID_ACTIVITY
/**
* Creates INVALID_ACTIVITY with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public INVALID_ACTIVITY(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INVALID_TRANSACTION.java b/libjava/classpath/org/omg/CORBA/INVALID_TRANSACTION.java
index 98cef83..08082d1 100644
--- a/libjava/classpath/org/omg/CORBA/INVALID_TRANSACTION.java
+++ b/libjava/classpath/org/omg/CORBA/INVALID_TRANSACTION.java
@@ -1,5 +1,5 @@
/* INVALID_TRANSACTION.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INVALID_TRANSACTION
+public final class INVALID_TRANSACTION
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INVALID_TRANSACTION
/**
* Creates a INVALID_TRANSACTION with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INVALID_TRANSACTION(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INV_FLAG.java b/libjava/classpath/org/omg/CORBA/INV_FLAG.java
index 7766a3c..92b1cd1 100644
--- a/libjava/classpath/org/omg/CORBA/INV_FLAG.java
+++ b/libjava/classpath/org/omg/CORBA/INV_FLAG.java
@@ -1,5 +1,5 @@
/* INV_FLAG.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INV_FLAG
+public final class INV_FLAG
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INV_FLAG
/**
* Creates a INV_FLAG with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INV_FLAG(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INV_IDENT.java b/libjava/classpath/org/omg/CORBA/INV_IDENT.java
index ca61a0a..89a5944 100644
--- a/libjava/classpath/org/omg/CORBA/INV_IDENT.java
+++ b/libjava/classpath/org/omg/CORBA/INV_IDENT.java
@@ -1,5 +1,5 @@
/* INV_IDENT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INV_IDENT
+public final class INV_IDENT
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INV_IDENT
/**
* Creates a INV_IDENT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INV_IDENT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INV_OBJREF.java b/libjava/classpath/org/omg/CORBA/INV_OBJREF.java
index ca8e059..8b6368b 100644
--- a/libjava/classpath/org/omg/CORBA/INV_OBJREF.java
+++ b/libjava/classpath/org/omg/CORBA/INV_OBJREF.java
@@ -1,5 +1,5 @@
/* INV_OBJREF.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INV_OBJREF
+public final class INV_OBJREF
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class INV_OBJREF
/**
* Creates a INV_OBJREF with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INV_OBJREF(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/INV_POLICY.java b/libjava/classpath/org/omg/CORBA/INV_POLICY.java
index f4ff245..5b74e50 100644
--- a/libjava/classpath/org/omg/CORBA/INV_POLICY.java
+++ b/libjava/classpath/org/omg/CORBA/INV_POLICY.java
@@ -1,5 +1,5 @@
/* INV_POLICY.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class INV_POLICY
+public final class INV_POLICY
extends SystemException
implements Serializable
{
@@ -59,7 +59,7 @@ public class INV_POLICY
/**
* Creates a INV_POLICY with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public INV_POLICY(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/MARSHAL.java b/libjava/classpath/org/omg/CORBA/MARSHAL.java
index 2cd92f5..b031acf 100644
--- a/libjava/classpath/org/omg/CORBA/MARSHAL.java
+++ b/libjava/classpath/org/omg/CORBA/MARSHAL.java
@@ -1,5 +1,5 @@
/* MARSHAL.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -268,7 +268,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class MARSHAL
+public final class MARSHAL
extends SystemException
implements Serializable
{
@@ -281,7 +281,7 @@ public class MARSHAL
* Creates a MARSHAL with the default minor code of 0, completion state
* COMPLETED_NO and the given explaining message.
*
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public MARSHAL(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/NO_IMPLEMENT.java b/libjava/classpath/org/omg/CORBA/NO_IMPLEMENT.java
index 7ffbca4..1041f20 100644
--- a/libjava/classpath/org/omg/CORBA/NO_IMPLEMENT.java
+++ b/libjava/classpath/org/omg/CORBA/NO_IMPLEMENT.java
@@ -1,5 +1,5 @@
/* NO_IMPLEMENT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class NO_IMPLEMENT
+public final class NO_IMPLEMENT
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class NO_IMPLEMENT
/**
* Creates a NO_IMPLEMENT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public NO_IMPLEMENT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/NO_MEMORY.java b/libjava/classpath/org/omg/CORBA/NO_MEMORY.java
index e09b4f1..276cb54 100644
--- a/libjava/classpath/org/omg/CORBA/NO_MEMORY.java
+++ b/libjava/classpath/org/omg/CORBA/NO_MEMORY.java
@@ -1,5 +1,5 @@
/* NO_MEMORY.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class NO_MEMORY
+public final class NO_MEMORY
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class NO_MEMORY
/**
* Creates a NO_MEMORY with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public NO_MEMORY(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/NO_PERMISSION.java b/libjava/classpath/org/omg/CORBA/NO_PERMISSION.java
index dbeaa33..8e78184 100644
--- a/libjava/classpath/org/omg/CORBA/NO_PERMISSION.java
+++ b/libjava/classpath/org/omg/CORBA/NO_PERMISSION.java
@@ -1,5 +1,5 @@
/* NO_PERMISSION.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class NO_PERMISSION
+public final class NO_PERMISSION
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class NO_PERMISSION
/**
* Creates a NO_PERMISSION with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public NO_PERMISSION(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/NO_RESOURCES.java b/libjava/classpath/org/omg/CORBA/NO_RESOURCES.java
index 013bdb6..14981b3 100644
--- a/libjava/classpath/org/omg/CORBA/NO_RESOURCES.java
+++ b/libjava/classpath/org/omg/CORBA/NO_RESOURCES.java
@@ -1,5 +1,5 @@
/* NO_RESOURCES.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -76,7 +76,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class NO_RESOURCES
+public final class NO_RESOURCES
extends SystemException
implements Serializable
{
@@ -89,7 +89,7 @@ public class NO_RESOURCES
* Creates a NO_RESOURCES with the default minor code of 0, completion state
* COMPLETED_NO and the given explaining message.
*
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public NO_RESOURCES(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/NO_RESPONSE.java b/libjava/classpath/org/omg/CORBA/NO_RESPONSE.java
index 0c31cfb..afed988 100644
--- a/libjava/classpath/org/omg/CORBA/NO_RESPONSE.java
+++ b/libjava/classpath/org/omg/CORBA/NO_RESPONSE.java
@@ -1,5 +1,5 @@
/* NO_RESPONSE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class NO_RESPONSE
+public final class NO_RESPONSE
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class NO_RESPONSE
/**
* Creates a NO_RESPONSE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public NO_RESPONSE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java b/libjava/classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java
index aa8571d..549ac64 100644
--- a/libjava/classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java
+++ b/libjava/classpath/org/omg/CORBA/OBJECT_NOT_EXIST.java
@@ -1,5 +1,5 @@
/* OBJECT_NOT_EXIST.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,10 +41,10 @@ package org.omg.CORBA;
import java.io.Serializable;
/**
- * Means an attempt to perform some operation of the deleted object.
+ * Means an attempt to perform some operation on a deleted object.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class OBJECT_NOT_EXIST
+public final class OBJECT_NOT_EXIST
extends SystemException
implements Serializable
{
@@ -56,7 +56,7 @@ public class OBJECT_NOT_EXIST
/**
* Creates a OBJECT_NOT_EXIST with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public OBJECT_NOT_EXIST(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/OBJ_ADAPTER.java b/libjava/classpath/org/omg/CORBA/OBJ_ADAPTER.java
index 36c54b2..f1b25a4 100644
--- a/libjava/classpath/org/omg/CORBA/OBJ_ADAPTER.java
+++ b/libjava/classpath/org/omg/CORBA/OBJ_ADAPTER.java
@@ -1,5 +1,5 @@
/* OBJ_ADAPTER.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class OBJ_ADAPTER
+public final class OBJ_ADAPTER
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class OBJ_ADAPTER
/**
* Creates a OBJ_ADAPTER with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public OBJ_ADAPTER(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/ORB.java b/libjava/classpath/org/omg/CORBA/ORB.java
index 06259fa..af05488 100644
--- a/libjava/classpath/org/omg/CORBA/ORB.java
+++ b/libjava/classpath/org/omg/CORBA/ORB.java
@@ -673,17 +673,7 @@ public abstract class ORB
* @see #create_recursive_tc(String)
* @see #create_sequence_tc(int, TypeCode)
*/
- public TypeCode create_recursive_sequence_tc(int bound, int offset)
- {
- RecordTypeCode r = new RecordTypeCode(TCKind.tk_struct);
- for (int i = 0; i < offset; i++)
- r.add(new StructMember());
-
- TypeCode recurs = new PrimitiveTypeCode(TCKind.tk_sequence);
-
- r.add(new StructMember("", recurs, null));
- return r;
- }
+ public abstract TypeCode create_recursive_sequence_tc(int bound, int offset);
/**
* Create a typecode which serves as a placeholder for typcode, containing
@@ -789,10 +779,7 @@ public abstract class ORB
* @throws NO_IMPLEMENT for the Singleton ORB, returned by
* the parameterless {@link #init()}.
*/
- public Context get_default_context()
- {
- return new gnuContext("", null);
- }
+ public abstract Context get_default_context();
/**
* Return thg typecode, representing the given primitive object type.
diff --git a/libjava/classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java b/libjava/classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java
index e021a8a..7bb6a70 100644
--- a/libjava/classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java
+++ b/libjava/classpath/org/omg/CORBA/ORBPackage/InconsistentTypeCode.java
@@ -1,5 +1,5 @@
/* InconsistentTypeCode.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class InconsistentTypeCode
+public final class InconsistentTypeCode
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/ORBPackage/InvalidName.java b/libjava/classpath/org/omg/CORBA/ORBPackage/InvalidName.java
index f2b78f4..5594015 100644
--- a/libjava/classpath/org/omg/CORBA/ORBPackage/InvalidName.java
+++ b/libjava/classpath/org/omg/CORBA/ORBPackage/InvalidName.java
@@ -1,5 +1,5 @@
/* InvalidName.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import org.omg.CORBA.portable.IDLEntity;
* which there is no initial reference.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class InvalidName
+public final class InvalidName
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/PERSIST_STORE.java b/libjava/classpath/org/omg/CORBA/PERSIST_STORE.java
index df17cef..1fdddf1 100644
--- a/libjava/classpath/org/omg/CORBA/PERSIST_STORE.java
+++ b/libjava/classpath/org/omg/CORBA/PERSIST_STORE.java
@@ -1,5 +1,5 @@
/* PERSIST_STORE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class PERSIST_STORE
+public final class PERSIST_STORE
extends SystemException
implements Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/ParameterMode.java b/libjava/classpath/org/omg/CORBA/ParameterMode.java
index 73c6f57..931a2e9 100644
--- a/libjava/classpath/org/omg/CORBA/ParameterMode.java
+++ b/libjava/classpath/org/omg/CORBA/ParameterMode.java
@@ -1,5 +1,5 @@
/* ParameterMode.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -78,17 +78,17 @@ public class ParameterMode
/**
* This value means that the parameter is an IN parameter.
*/
- public static ParameterMode PARAM_IN = new ParameterMode(_PARAM_IN);
+ public static final ParameterMode PARAM_IN = new ParameterMode(_PARAM_IN);
/**
* This value means that the parameter is an OUT parameter.
*/
- public static ParameterMode PARAM_OUT = new ParameterMode(_PARAM_OUT);
+ public static final ParameterMode PARAM_OUT = new ParameterMode(_PARAM_OUT);
/**
* This value means that the parameter is an INOUT parameter.
*/
- public static ParameterMode PARAM_INOUT = new ParameterMode(_PARAM_INOUT);
+ public static final ParameterMode PARAM_INOUT = new ParameterMode(_PARAM_INOUT);
/**
* The value of this parameter mode instance.
diff --git a/libjava/classpath/org/omg/CORBA/ParameterModeHolder.java b/libjava/classpath/org/omg/CORBA/ParameterModeHolder.java
index 5c932b7..b6dc8fa 100644
--- a/libjava/classpath/org/omg/CORBA/ParameterModeHolder.java
+++ b/libjava/classpath/org/omg/CORBA/ParameterModeHolder.java
@@ -1,5 +1,5 @@
/* ParameterModeHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,7 +43,7 @@ package org.omg.CORBA;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class ParameterModeHolder
+public final class ParameterModeHolder
implements org.omg.CORBA.portable.Streamable
{
/**
@@ -52,7 +52,7 @@ public class ParameterModeHolder
public ParameterMode value;
/**
- * Create the unitialised instance.
+ * Create the uninitialised instance.
*/
public ParameterModeHolder()
{
@@ -68,7 +68,7 @@ public class ParameterModeHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*/
public void _read(org.omg.CORBA.portable.InputStream in)
{
diff --git a/libjava/classpath/org/omg/CORBA/PolicyError.java b/libjava/classpath/org/omg/CORBA/PolicyError.java
index 749868a..98d6079 100644
--- a/libjava/classpath/org/omg/CORBA/PolicyError.java
+++ b/libjava/classpath/org/omg/CORBA/PolicyError.java
@@ -1,5 +1,5 @@
/* PolicyError.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class PolicyError
+public final class PolicyError
extends UserException
implements IDLEntity, Serializable
{
@@ -69,7 +69,7 @@ public class PolicyError
private static final long serialVersionUID = -9196809779974700103L;
/**
- * Constructs an unitialised instance of the policy error.
+ * Constructs an uninitialised instance of the policy error.
*/
public PolicyError()
{
diff --git a/libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java b/libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java
index 8e2c9a8..cc3cf68 100644
--- a/libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java
+++ b/libjava/classpath/org/omg/CORBA/PolicyErrorHolder.java
@@ -1,5 +1,5 @@
/* PolicyErrorHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.Streamable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class PolicyErrorHolder implements Streamable
+public final class PolicyErrorHolder implements Streamable
{
/**
* The stored PolicyError value.
@@ -56,7 +56,7 @@ public class PolicyErrorHolder implements Streamable
public PolicyError value;
/**
- * Create the unitialised instance, leaving the value field
+ * Create the uninitialised instance, leaving the value field
* with default <code>null</code> value.
*/
public PolicyErrorHolder()
@@ -74,7 +74,7 @@ public class PolicyErrorHolder implements Streamable
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/CORBA/PolicyHolder.java b/libjava/classpath/org/omg/CORBA/PolicyHolder.java
index e398cc1..7dafbca 100644
--- a/libjava/classpath/org/omg/CORBA/PolicyHolder.java
+++ b/libjava/classpath/org/omg/CORBA/PolicyHolder.java
@@ -1,5 +1,5 @@
/* PolicyHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class PolicyHolder
+public final class PolicyHolder
implements Streamable
{
/**
@@ -56,7 +56,7 @@ public class PolicyHolder
public Policy value;
/**
- * Create the unitialised instance, leaving the value field
+ * Create the uninitialised instance, leaving the value field
* with default <code>null</code> value.
*/
public PolicyHolder()
@@ -74,7 +74,7 @@ public class PolicyHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
* Delegates work to {@link PolicyHelper}.
*
* @param input the org.omg.CORBA.portable stream to read.
diff --git a/libjava/classpath/org/omg/CORBA/PolicyListHolder.java b/libjava/classpath/org/omg/CORBA/PolicyListHolder.java
index 6c1b1cc..1b1d9da 100644
--- a/libjava/classpath/org/omg/CORBA/PolicyListHolder.java
+++ b/libjava/classpath/org/omg/CORBA/PolicyListHolder.java
@@ -1,5 +1,5 @@
/* PolicyListHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,11 +43,11 @@ import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.Streamable;
/**
-* A holder for the object {@link Policy[]}.
+* A holder for the object <code>Policy[]</code>.
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class PolicyListHolder
+public final class PolicyListHolder
implements Streamable
{
/**
@@ -56,7 +56,7 @@ public class PolicyListHolder
public Policy[] value;
/**
- * Create the unitialised instance, leaving the value field
+ * Create the uninitialised instance, leaving the value field
* with default <code>null</code> value.
*/
public PolicyListHolder()
@@ -74,7 +74,7 @@ public class PolicyListHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
* Uses {@link PolicyListHelper}.
*
* @param input the org.omg.CORBA.portable stream to read.
diff --git a/libjava/classpath/org/omg/CORBA/REBIND.java b/libjava/classpath/org/omg/CORBA/REBIND.java
index 9480906..48a3ea4 100644
--- a/libjava/classpath/org/omg/CORBA/REBIND.java
+++ b/libjava/classpath/org/omg/CORBA/REBIND.java
@@ -1,5 +1,5 @@
/* REBIND.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class REBIND
+public final class REBIND
extends SystemException
implements Serializable
{
@@ -60,7 +60,7 @@ public class REBIND
/**
* Creates REBIND with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public REBIND(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/SystemException.java b/libjava/classpath/org/omg/CORBA/SystemException.java
index dd19362..127b918 100644
--- a/libjava/classpath/org/omg/CORBA/SystemException.java
+++ b/libjava/classpath/org/omg/CORBA/SystemException.java
@@ -1,5 +1,5 @@
/* SystemException.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class SystemException
+public abstract class SystemException
extends RuntimeException
implements Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/TIMEOUT.java b/libjava/classpath/org/omg/CORBA/TIMEOUT.java
index 44ae8b3..bdeae7b 100644
--- a/libjava/classpath/org/omg/CORBA/TIMEOUT.java
+++ b/libjava/classpath/org/omg/CORBA/TIMEOUT.java
@@ -1,5 +1,5 @@
/* TIMEOUT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TIMEOUT
+public final class TIMEOUT
extends SystemException
implements Serializable
{
@@ -59,7 +59,7 @@ public class TIMEOUT
/**
* Creates TIMEOUT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public TIMEOUT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java b/libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java
index 5f1981b..fc72d3c 100644
--- a/libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java
+++ b/libjava/classpath/org/omg/CORBA/TRANSACTION_MODE.java
@@ -1,5 +1,5 @@
/* TRANSACTION_MODE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TRANSACTION_MODE
+public final class TRANSACTION_MODE
extends SystemException
implements Serializable
{
@@ -60,7 +60,7 @@ public class TRANSACTION_MODE
/**
* Creates TRANSACTION_MODE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public TRANSACTION_MODE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java b/libjava/classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java
index 66eedf4..3d6c55c 100644
--- a/libjava/classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java
+++ b/libjava/classpath/org/omg/CORBA/TRANSACTION_REQUIRED.java
@@ -1,5 +1,5 @@
/* TRANSACTION_REQUIRED.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,7 @@ import java.io.Serializable;
* active transaction is required.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class TRANSACTION_REQUIRED
+public final class TRANSACTION_REQUIRED
extends SystemException
implements Serializable
{
@@ -57,7 +57,7 @@ public class TRANSACTION_REQUIRED
/**
* Creates a TRANSACTION_REQUIRED with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public TRANSACTION_REQUIRED(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java b/libjava/classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java
index ce115c8..f7f4aab 100644
--- a/libjava/classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java
+++ b/libjava/classpath/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java
@@ -1,5 +1,5 @@
/* TRANSACTION_ROLLEDBACK.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class TRANSACTION_ROLLEDBACK
+public final class TRANSACTION_ROLLEDBACK
extends SystemException
implements Serializable
{
@@ -58,7 +58,7 @@ public class TRANSACTION_ROLLEDBACK
/**
* Creates a TRANSACTION_ROLLEDBACK with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public TRANSACTION_ROLLEDBACK(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java b/libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java
index dc808a2..13ce17e 100644
--- a/libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java
+++ b/libjava/classpath/org/omg/CORBA/TRANSACTION_UNAVAILABLE.java
@@ -1,5 +1,5 @@
/* TRANSACTION_UNAVAILABLE.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TRANSACTION_UNAVAILABLE
+public final class TRANSACTION_UNAVAILABLE
extends SystemException
implements Serializable
{
@@ -60,7 +60,7 @@ public class TRANSACTION_UNAVAILABLE
/**
* Creates TRANSACTION_UNAVAILABLE with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reason the explaining message.
+ * @param message the explaining message.
*/
public TRANSACTION_UNAVAILABLE(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TRANSIENT.java b/libjava/classpath/org/omg/CORBA/TRANSIENT.java
index c2aa5cb..1dad9a1 100644
--- a/libjava/classpath/org/omg/CORBA/TRANSIENT.java
+++ b/libjava/classpath/org/omg/CORBA/TRANSIENT.java
@@ -1,5 +1,5 @@
/* TRANSIENT.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,14 +46,14 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class TRANSIENT
+public final class TRANSIENT
extends SystemException
implements Serializable
{
/**
* Creates a TRANSIENT with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public TRANSIENT(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/TypeCodeHolder.java b/libjava/classpath/org/omg/CORBA/TypeCodeHolder.java
index bb29337..0a3c4e3 100644
--- a/libjava/classpath/org/omg/CORBA/TypeCodeHolder.java
+++ b/libjava/classpath/org/omg/CORBA/TypeCodeHolder.java
@@ -1,5 +1,5 @@
/* TypeCodeHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class TypeCodeHolder
+public final class TypeCodeHolder
implements Streamable
{
/**
@@ -87,7 +87,7 @@ public class TypeCodeHolder
}
/**
- * Fill in the {@link value } field by reading the required data
+ * Fill in the {@link #value} field by reading the required data
* from the given stream. For <code>TypeCode</code>, the functionality
* is delegated to
* {@link org.omg.CORBA.portable.InputStream#read_TypeCode}.
@@ -109,7 +109,7 @@ public class TypeCodeHolder
}
/**
- * Write the {@link value } field to the given stream.
+ * Write the {@link #value} field to the given stream.
* For <code>TypeCode</code>, the functionality
* is delegated to
* {@link org.omg.CORBA.portable.OutputStream#write_TypeCode(TypeCode) }.
diff --git a/libjava/classpath/org/omg/CORBA/TypeCodePackage/BadKind.java b/libjava/classpath/org/omg/CORBA/TypeCodePackage/BadKind.java
index 8ca659d..d7f0ce5 100644
--- a/libjava/classpath/org/omg/CORBA/TypeCodePackage/BadKind.java
+++ b/libjava/classpath/org/omg/CORBA/TypeCodePackage/BadKind.java
@@ -1,5 +1,5 @@
/* BadKind.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class BadKind
+public final class BadKind
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/TypeCodePackage/Bounds.java b/libjava/classpath/org/omg/CORBA/TypeCodePackage/Bounds.java
index 16954e0..364447c 100644
--- a/libjava/classpath/org/omg/CORBA/TypeCodePackage/Bounds.java
+++ b/libjava/classpath/org/omg/CORBA/TypeCodePackage/Bounds.java
@@ -1,5 +1,5 @@
/* Bounds.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,7 +52,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class Bounds
+public final class Bounds
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/UNKNOWN.java b/libjava/classpath/org/omg/CORBA/UNKNOWN.java
index 60d3fc0..37b627a 100644
--- a/libjava/classpath/org/omg/CORBA/UNKNOWN.java
+++ b/libjava/classpath/org/omg/CORBA/UNKNOWN.java
@@ -1,5 +1,5 @@
/* UNKNOWN.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,7 +44,7 @@ import java.io.Serializable;
* Means that the operation implementation has thrown a non-CORBA exception.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class UNKNOWN
+public final class UNKNOWN
extends SystemException
implements Serializable
{
@@ -56,7 +56,7 @@ public class UNKNOWN
/**
* Creates a UNKNOWN with the default minor code of 0,
* completion state COMPLETED_NO and the given explaining message.
- * @param reasom the explaining message.
+ * @param message the explaining message.
*/
public UNKNOWN(String message)
{
diff --git a/libjava/classpath/org/omg/CORBA/UnionMember.java b/libjava/classpath/org/omg/CORBA/UnionMember.java
index 41afeb7..69e424c 100644
--- a/libjava/classpath/org/omg/CORBA/UnionMember.java
+++ b/libjava/classpath/org/omg/CORBA/UnionMember.java
@@ -1,5 +1,5 @@
/* UnionMember.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.IDLEntity;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class UnionMember
+public final class UnionMember
implements IDLEntity, Serializable
{
/**
@@ -87,6 +87,7 @@ public class UnionMember
* Creates a union member.
*
* @param a_name member name.
+ * @param a_label member label.
* @param a_type member type code.
* @param a_type_def member IDL type definition.
*/
diff --git a/libjava/classpath/org/omg/CORBA/UnknownUserException.java b/libjava/classpath/org/omg/CORBA/UnknownUserException.java
index 19efc0e..3b33ffd 100644
--- a/libjava/classpath/org/omg/CORBA/UnknownUserException.java
+++ b/libjava/classpath/org/omg/CORBA/UnknownUserException.java
@@ -1,5 +1,5 @@
/* UnknownUserException.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,11 +47,11 @@ import java.io.Serializable;
* on remote side and returned by the server. The instance of this
* class is returned by {@link Request#env()}.
*
- * @see Environment#exception().
+ * @see Environment#exception()
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class UnknownUserException
+public final class UnknownUserException
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java b/libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java
index d7b1ca0..0fa9669 100644
--- a/libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java
+++ b/libjava/classpath/org/omg/CORBA/UnknownUserExceptionHolder.java
@@ -1,5 +1,5 @@
/* UnknownUserExceptionHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.Streamable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class UnknownUserExceptionHolder implements Streamable
+public final class UnknownUserExceptionHolder implements Streamable
{
/**
* The stored UnknownUserException value.
@@ -74,7 +74,7 @@ public class UnknownUserExceptionHolder implements Streamable
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/CORBA/UserException.java b/libjava/classpath/org/omg/CORBA/UserException.java
index ac9b9fb..edbd76e 100644
--- a/libjava/classpath/org/omg/CORBA/UserException.java
+++ b/libjava/classpath/org/omg/CORBA/UserException.java
@@ -1,5 +1,5 @@
/* UserException.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import org.omg.CORBA.portable.IDLEntity;
* The root class for CORBA IDL-defined user exceptions.
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class UserException
+public abstract class UserException
extends Exception
implements IDLEntity, Serializable
{
@@ -59,7 +59,7 @@ public class UserException
/**
* Constructs a the exception.
*/
- public UserException()
+ protected UserException()
{
}
@@ -67,7 +67,7 @@ public class UserException
* Constructs the exception, explaining the reason of throwing it.
* @param reason a string, explaining, why the exception has been thrown.
*/
- public UserException(String reason)
+ protected UserException(String reason)
{
super(reason);
}
diff --git a/libjava/classpath/org/omg/CORBA/ValueMember.java b/libjava/classpath/org/omg/CORBA/ValueMember.java
index f6bb70d..9323c86 100644
--- a/libjava/classpath/org/omg/CORBA/ValueMember.java
+++ b/libjava/classpath/org/omg/CORBA/ValueMember.java
@@ -1,5 +1,5 @@
/* ValueMember.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class ValueMember
+public final class ValueMember
implements Serializable, IDLEntity
{
/**
diff --git a/libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java b/libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java
index 103724f..1ea3e02 100644
--- a/libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java
+++ b/libjava/classpath/org/omg/CORBA/WrongTransactionHolder.java
@@ -1,5 +1,5 @@
/* WrongTransactionHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class WrongTransactionHolder implements Streamable
+public final class WrongTransactionHolder implements Streamable
{
/**
* The stored WrongTransaction value.
@@ -74,7 +74,7 @@ public class WrongTransactionHolder implements Streamable
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/CORBA/portable/RemarshalException.java b/libjava/classpath/org/omg/CORBA/portable/RemarshalException.java
index 7e6dbfe..14836ea 100644
--- a/libjava/classpath/org/omg/CORBA/portable/RemarshalException.java
+++ b/libjava/classpath/org/omg/CORBA/portable/RemarshalException.java
@@ -1,5 +1,5 @@
/* RemarshalException.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
*/
-public class RemarshalException
+public final class RemarshalException
extends Exception
implements Serializable
{
diff --git a/libjava/classpath/org/omg/CosNaming/NamingContextOperations.java b/libjava/classpath/org/omg/CosNaming/NamingContextOperations.java
index dc25daa..cc93cb7 100644
--- a/libjava/classpath/org/omg/CosNaming/NamingContextOperations.java
+++ b/libjava/classpath/org/omg/CosNaming/NamingContextOperations.java
@@ -1,5 +1,5 @@
/* NamingContext.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,7 +38,6 @@ exception statement from your version. */
package org.omg.CosNaming;
-import org.omg.CORBA.portable.IDLEntity;
import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.InvalidName;
@@ -55,7 +54,6 @@ import org.omg.CosNaming.NamingContextPackage.NotFound;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public interface NamingContextOperations
- extends IDLEntity
{
/**
* Gives the object a name, valid in this context.
diff --git a/libjava/classpath/org/omg/CosNaming/_BindingIteratorStub.java b/libjava/classpath/org/omg/CosNaming/_BindingIteratorStub.java
index 487b2ef..b5400c4 100644
--- a/libjava/classpath/org/omg/CosNaming/_BindingIteratorStub.java
+++ b/libjava/classpath/org/omg/CosNaming/_BindingIteratorStub.java
@@ -1,5 +1,5 @@
/* _BindingIteratorStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -77,7 +77,7 @@ public class _BindingIteratorStub
/**
* Create the stub that used the given delegate.
*/
- public _BindingIteratorStub(Delegate delegate)
+ _BindingIteratorStub(Delegate delegate)
{
super();
_set_delegate(delegate);
diff --git a/libjava/classpath/org/omg/CosNaming/_NamingContextExtStub.java b/libjava/classpath/org/omg/CosNaming/_NamingContextExtStub.java
index a0bc80a..067b3cf 100644
--- a/libjava/classpath/org/omg/CosNaming/_NamingContextExtStub.java
+++ b/libjava/classpath/org/omg/CosNaming/_NamingContextExtStub.java
@@ -1,5 +1,5 @@
/* _NamingContextExtStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -99,7 +99,7 @@ public class _NamingContextExtStub
/**
* Create the naming context stub with the given delegate.
*/
- public _NamingContextExtStub(Delegate delegate)
+ _NamingContextExtStub(Delegate delegate)
{
super(delegate);
}
diff --git a/libjava/classpath/org/omg/CosNaming/_NamingContextStub.java b/libjava/classpath/org/omg/CosNaming/_NamingContextStub.java
index d561aeb..2b21e71 100644
--- a/libjava/classpath/org/omg/CosNaming/_NamingContextStub.java
+++ b/libjava/classpath/org/omg/CosNaming/_NamingContextStub.java
@@ -1,5 +1,5 @@
/* _NamingContextStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,7 +39,6 @@ exception statement from your version. */
package org.omg.CosNaming;
import org.omg.CORBA.MARSHAL;
-import org.omg.CORBA.ORB;
import org.omg.CORBA.ObjectHelper;
import org.omg.CORBA.portable.ApplicationException;
import org.omg.CORBA.portable.Delegate;
@@ -85,7 +84,7 @@ public class _NamingContextStub
/**
* Create the naming context stub with the given delegate.
*/
- public _NamingContextStub(Delegate delegate)
+ _NamingContextStub(Delegate delegate)
{
super();
_set_delegate(delegate);
@@ -415,7 +414,7 @@ public class _NamingContextStub
* @throws NotFound if the id matches.
* @throws MARSHAL if the id does not match any of the previous 4 exceptions.
*/
- protected void throw4(InputStream in, String id)
+ void throw4(InputStream in, String id)
throws MARSHAL, InvalidName, CannotProceed, NotFound
{
if (id.equals(NotFoundHelper.id()))
@@ -443,7 +442,7 @@ public class _NamingContextStub
* @throws NotFound if the id matches.
* @throws MARSHAL if the id does not match any of the previous 4 exceptions.
*/
- protected void throw5(InputStream in, String id)
+ void throw5(InputStream in, String id)
throws MARSHAL, AlreadyBound, InvalidName, CannotProceed,
NotFound
{
diff --git a/libjava/classpath/org/omg/Dynamic/Parameter.java b/libjava/classpath/org/omg/Dynamic/Parameter.java
index dd42c2e..6e243a4 100644
--- a/libjava/classpath/org/omg/Dynamic/Parameter.java
+++ b/libjava/classpath/org/omg/Dynamic/Parameter.java
@@ -1,5 +1,5 @@
/* Parameter.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,11 +48,11 @@ import java.io.Serializable;
* When representing the information about a request,
* defines a one of the arguments for the operation being invoked.
*
- * @see org.omg.PortableInterceptor.RequestInfoOperation#arguments()
+ * @see org.omg.PortableInterceptor.RequestInfoOperations#arguments()
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class Parameter
+public final class Parameter
implements IDLEntity, Serializable
{
/**
@@ -73,7 +73,7 @@ public class Parameter
public ParameterMode mode;
/**
- * Create the unitialised instance.
+ * Create the uninitialised instance.
*/
public Parameter()
{
diff --git a/libjava/classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java b/libjava/classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java
index faf3d29..fced4f7 100644
--- a/libjava/classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java
+++ b/libjava/classpath/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java
@@ -1,5 +1,5 @@
/* InconsistentTypeCode.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,7 +54,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class InconsistentTypeCode
+public final class InconsistentTypeCode
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java b/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java
index 97f401d..c19eb76 100644
--- a/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java
+++ b/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java
@@ -1,5 +1,5 @@
/* InvalidValue.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class InvalidValue
+public final class InvalidValue
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java b/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java
index 5558bab..3934abd 100644
--- a/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java
+++ b/libjava/classpath/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java
@@ -1,5 +1,5 @@
/* TypeMismatch.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,7 +51,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TypeMismatch
+public final class TypeMismatch
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java b/libjava/classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java
index 15f7c81..d4b5690 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynAnyFactoryStub.java
@@ -1,5 +1,5 @@
/* _DynAnyFactoryStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,20 +40,19 @@ package org.omg.DynamicAny;
import gnu.CORBA.Minor;
+import java.io.Serializable;
+
import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TypeCode;
-import org.omg.CORBA.portable.Delegate;
import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on
* DynAnyFactory. As DynAny can never be remote at least till 1.5 inclusive,
* this class is not in use. DynAnyFactory should be obtained from the
- * {@link ORB#resolve_initial_references}.
+ * {@link org.omg.CORBA.ORB#resolve_initial_references}.
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
@@ -79,14 +78,6 @@ public class _DynAnyFactoryStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynAnyFactoryStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynAnyStub.java b/libjava/classpath/org/omg/DynamicAny/_DynAnyStub.java
index af8d4e5..0e3e390 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynAnyStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynAnyStub.java
@@ -1,5 +1,5 @@
/* _DynAnyStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,16 +38,15 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TypeCode;
-import org.omg.CORBA.portable.Delegate;
import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynAny. As
* DynAny can never be remote at least till 1.5 inclusive, this class is
@@ -77,14 +76,6 @@ public class _DynAnyStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynAnyStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynArrayStub.java b/libjava/classpath/org/omg/DynamicAny/_DynArrayStub.java
index 4484f16..869e269 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynArrayStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynArrayStub.java
@@ -1,5 +1,5 @@
/* _DynArrayStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,14 +38,15 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
-import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynArray. As
* DynArray can never be remote at least till 1.5 inclusive, this class is
@@ -54,7 +55,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynArrayStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynArray, Serializable
{
/**
@@ -75,14 +76,6 @@ public class _DynArrayStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynArrayStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -131,4 +124,543 @@ public class _DynArrayStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynEnumStub.java b/libjava/classpath/org/omg/DynamicAny/_DynEnumStub.java
index ea7879b..73e9fa7 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynEnumStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynEnumStub.java
@@ -1,5 +1,5 @@
/* _DynEnumStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,11 +38,14 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
+import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
-import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
-
-import java.io.Serializable;
+import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
/**
* Should provide support for remote invocation of methods on DynEnum. As
@@ -52,7 +55,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynEnumStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynEnum, Serializable
{
/**
@@ -73,14 +76,6 @@ public class _DynEnumStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynEnumStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -129,4 +124,543 @@ public class _DynEnumStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynFixedStub.java b/libjava/classpath/org/omg/DynamicAny/_DynFixedStub.java
index 8e2747e..97a3d94 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynFixedStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynFixedStub.java
@@ -1,5 +1,5 @@
/* _DynFixedStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,13 +38,15 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
+import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
-import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynFixed. As
* DynFixed can never be remote at least till 1.5 inclusive, this class is
@@ -53,7 +55,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynFixedStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynFixed, Serializable
{
/**
@@ -74,14 +76,6 @@ public class _DynFixedStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynFixedStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -109,4 +103,543 @@ public class _DynFixedStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynSequenceStub.java b/libjava/classpath/org/omg/DynamicAny/_DynSequenceStub.java
index 5f1f038..802ff23 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynSequenceStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynSequenceStub.java
@@ -1,5 +1,5 @@
/* _DynSequenceStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,14 +38,16 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
+import org.omg.CORBA.TypeCode;
import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynSequence. As
* DynSequence can never be remote at least till 1.5 inclusive, this class is
@@ -54,7 +56,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynSequenceStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynSequence, Serializable
{
/**
@@ -77,14 +79,6 @@ public class _DynSequenceStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynSequenceStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -154,4 +148,543 @@ public class _DynSequenceStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynStructStub.java b/libjava/classpath/org/omg/DynamicAny/_DynStructStub.java
index 0b8231b..a48f2a6 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynStructStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynStructStub.java
@@ -1,5 +1,5 @@
/* _DynStructStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,14 +38,17 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
+import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynStruct. As
* DynStruct can never be remote at least till 1.5 inclusive, this class is
@@ -54,7 +57,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynStructStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynStruct, Serializable
{
/**
@@ -77,14 +80,6 @@ public class _DynStructStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynStructStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -155,4 +150,543 @@ public class _DynStructStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynUnionStub.java b/libjava/classpath/org/omg/DynamicAny/_DynUnionStub.java
index 7f8eba7..b7ba74e 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynUnionStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynUnionStub.java
@@ -1,5 +1,5 @@
/* _DynUnionStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,14 +38,17 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import java.io.Serializable;
+
+import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
-import java.io.Serializable;
-
/**
* Should provide support for remote invocation of methods on DynUnion. As
* DynUnion can never be remote at least till 1.5 inclusive, this class is
@@ -54,7 +57,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynUnionStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynUnion, Serializable
{
/**
@@ -77,14 +80,6 @@ public class _DynUnionStub
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynUnionStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -187,4 +182,543 @@ public class _DynUnionStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/DynamicAny/_DynValueStub.java b/libjava/classpath/org/omg/DynamicAny/_DynValueStub.java
index 5319a7b..5c6b7a2 100644
--- a/libjava/classpath/org/omg/DynamicAny/_DynValueStub.java
+++ b/libjava/classpath/org/omg/DynamicAny/_DynValueStub.java
@@ -1,5 +1,5 @@
/* _DynValueStub.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,9 +38,12 @@ exception statement from your version. */
package org.omg.DynamicAny;
+import org.omg.CORBA.Any;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
import org.omg.CORBA.portable.Delegate;
+import org.omg.CORBA.portable.ObjectImpl;
import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
@@ -54,7 +57,7 @@ import java.io.Serializable;
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public class _DynValueStub
- extends _DynAnyStub
+ extends ObjectImpl
implements DynValue, Serializable
{
/**
@@ -70,21 +73,13 @@ public class _DynValueStub
/**
* Create the DynValue stub. To get the stub working,
* you must later set the delegate with
- * {@link ObjectImpl#_set_delegate(Delegate)}.
+ * {@link org.omg.CORBA.portable.ObjectImpl#_set_delegate(Delegate)}.
*/
public _DynValueStub()
{
}
/**
- * Create the naming context stub with the given delegate.
- */
- public _DynValueStub(Delegate delegate)
- {
- _set_delegate(delegate);
- }
-
- /**
* Return the array of repository ids for this object.
*/
public String[] _ids()
@@ -187,4 +182,543 @@ public class _DynValueStub
{
throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
}
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode type()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean next()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void destroy()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny copy()
+ {
+ return this;
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void rewind()
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void assign(DynAny _0)
+ throws TypeMismatch
+ {
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int component_count()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny current_component()
+ throws TypeMismatch
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean equal(DynAny _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void from_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any get_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean get_boolean()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_char()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public double get_double()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public DynAny get_dyn_any()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public float get_float()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_long()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_longlong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public byte get_octet()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public org.omg.CORBA.Object get_reference()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_short()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_string()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public TypeCode get_typecode()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public int get_ulong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public long get_ulonglong()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public short get_ushort()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Serializable get_val()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public char get_wchar()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public String get_wstring()
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_any(Any _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_boolean(boolean _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_char(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_double(double _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_dyn_any(DynAny _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_float(float _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_long(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_longlong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_octet(byte _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_reference(org.omg.CORBA.Object _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_short(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_string(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_typecode(TypeCode _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulong(int _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ulonglong(long _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_ushort(short _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_val(Serializable _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wchar(char _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public void insert_wstring(String _0)
+ throws TypeMismatch, InvalidValue
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public boolean seek(int _0)
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
+ /**
+ * The remote call of DynAny methods is not possible.
+ *
+ * @throws MARSHAL, always.
+ */
+ public Any to_any()
+ {
+ throw new MARSHAL(_DynAnyStub.NOT_APPLICABLE);
+ }
+
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java b/libjava/classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java
index 08f8ac4..c1988bf 100644
--- a/libjava/classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java
+++ b/libjava/classpath/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java
@@ -1,5 +1,5 @@
/* UnknownEncoding.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class UnknownEncoding
+public final class UnknownEncoding
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/IOP/CodecPackage/FormatMismatch.java b/libjava/classpath/org/omg/IOP/CodecPackage/FormatMismatch.java
index c82c489..b4cb136 100644
--- a/libjava/classpath/org/omg/IOP/CodecPackage/FormatMismatch.java
+++ b/libjava/classpath/org/omg/IOP/CodecPackage/FormatMismatch.java
@@ -1,5 +1,5 @@
/* FormatMismatch.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,7 +52,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class FormatMismatch
+public final class FormatMismatch
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java b/libjava/classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java
index 4099f58..5a23fdc 100644
--- a/libjava/classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java
+++ b/libjava/classpath/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java
@@ -1,5 +1,5 @@
/* InvalidTypeForEncoding.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,7 +53,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class InvalidTypeForEncoding
+public final class InvalidTypeForEncoding
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/IOP/CodecPackage/TypeMismatch.java b/libjava/classpath/org/omg/IOP/CodecPackage/TypeMismatch.java
index c4a53b6..7751c3e 100644
--- a/libjava/classpath/org/omg/IOP/CodecPackage/TypeMismatch.java
+++ b/libjava/classpath/org/omg/IOP/CodecPackage/TypeMismatch.java
@@ -1,5 +1,5 @@
/* TypeMismatch.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class TypeMismatch
+public final class TypeMismatch
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/IOP/Encoding.java b/libjava/classpath/org/omg/IOP/Encoding.java
index 5b36f64..cbf1e9e 100644
--- a/libjava/classpath/org/omg/IOP/Encoding.java
+++ b/libjava/classpath/org/omg/IOP/Encoding.java
@@ -1,5 +1,5 @@
/* Encoding.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class Encoding
+public final class Encoding
implements IDLEntity, Serializable
{
/**
diff --git a/libjava/classpath/org/omg/IOP/IOR.java b/libjava/classpath/org/omg/IOP/IOR.java
index 7ff6dc1..12c47a1 100644
--- a/libjava/classpath/org/omg/IOP/IOR.java
+++ b/libjava/classpath/org/omg/IOP/IOR.java
@@ -1,5 +1,5 @@
/* IOR.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,9 +51,10 @@ import java.io.Serializable;
* for the same object or indicate that the object is equal to null.
* </p><p>
* The IOR is a standard structure, transferred when sending an object with
- * {@link org.omg.CORBA.portable.OutputStream#write_Object} and receiving with
- * {@link org.omg.CORBA.portable.InputStream#read_Object}. The stringified
- * object references, managed by {@link org.omg.CORBA.ORB#string_to_object}
+ * {@link org.omg.CORBA.portable.OutputStream#write_Object(org.omg.CORBA.Object)}
+ * and receiving with {@link org.omg.CORBA.portable.InputStream#read_Object()}.
+ * The stringified object references, managed by
+ * {@link org.omg.CORBA.ORB#string_to_object}
* and {@link org.omg.CORBA.ORB#object_to_string} are also IORs, where the
* initially binary data are encoded as strings using hexadecimal notation.
* </p><p>
@@ -67,7 +68,7 @@ import java.io.Serializable;
* gnu.CORBA.IOR. The reason is that IORs are required from 1.2, but only
* in 1.4 the associated classes appear in the public API.
*/
-public class IOR
+public final class IOR
implements IDLEntity, Serializable
{
/**
diff --git a/libjava/classpath/org/omg/IOP/IORHolder.java b/libjava/classpath/org/omg/IOP/IORHolder.java
index cdf0d74..144c799 100644
--- a/libjava/classpath/org/omg/IOP/IORHolder.java
+++ b/libjava/classpath/org/omg/IOP/IORHolder.java
@@ -1,5 +1,5 @@
/* IORHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class IORHolder
+public final class IORHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class IORHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/IOP/MultipleComponentProfileHolder.java b/libjava/classpath/org/omg/IOP/MultipleComponentProfileHolder.java
index ee96522..2be0e71 100644
--- a/libjava/classpath/org/omg/IOP/MultipleComponentProfileHolder.java
+++ b/libjava/classpath/org/omg/IOP/MultipleComponentProfileHolder.java
@@ -1,5 +1,5 @@
/* MultipleComponentProfileHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,11 +45,11 @@ import org.omg.CORBA.portable.OutputStream;
/**
* A holder for the sequence of {@link TaggedComponent}
- * ({@link MultipleComponentProfile}).
+ * ({@link org.omg.IOP.MultipleComponentProfileHelper}).
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class MultipleComponentProfileHolder
+public final class MultipleComponentProfileHolder
implements Streamable
{
/**
@@ -76,7 +76,7 @@ public class MultipleComponentProfileHolder
}
/**
- * Read the {@link value} array from the CDR stream.
+ * Read the {@link #value} array from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/IOP/ServiceContextHolder.java b/libjava/classpath/org/omg/IOP/ServiceContextHolder.java
index 28dcb3e..1b9896d 100644
--- a/libjava/classpath/org/omg/IOP/ServiceContextHolder.java
+++ b/libjava/classpath/org/omg/IOP/ServiceContextHolder.java
@@ -1,5 +1,5 @@
/* ServiceContextHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ServiceContextHolder
+public final class ServiceContextHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class ServiceContextHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/IOP/ServiceContextListHolder.java b/libjava/classpath/org/omg/IOP/ServiceContextListHolder.java
index 2a18610..95fd091 100644
--- a/libjava/classpath/org/omg/IOP/ServiceContextListHolder.java
+++ b/libjava/classpath/org/omg/IOP/ServiceContextListHolder.java
@@ -1,5 +1,5 @@
/* ServiceContextListHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ServiceContextListHolder
+public final class ServiceContextListHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class ServiceContextListHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/IOP/TaggedComponent.java b/libjava/classpath/org/omg/IOP/TaggedComponent.java
index b8aa17f..66437e7 100644
--- a/libjava/classpath/org/omg/IOP/TaggedComponent.java
+++ b/libjava/classpath/org/omg/IOP/TaggedComponent.java
@@ -1,5 +1,5 @@
/* TaggedComponent.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,7 +56,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TaggedComponent
+public final class TaggedComponent
implements IDLEntity, Serializable
{
/**
diff --git a/libjava/classpath/org/omg/IOP/TaggedComponentHolder.java b/libjava/classpath/org/omg/IOP/TaggedComponentHolder.java
index 28df24f..b233591 100644
--- a/libjava/classpath/org/omg/IOP/TaggedComponentHolder.java
+++ b/libjava/classpath/org/omg/IOP/TaggedComponentHolder.java
@@ -1,5 +1,5 @@
/* TaggedComponentHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.OutputStream;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TaggedComponentHolder
+public final class TaggedComponentHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class TaggedComponentHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/IOP/TaggedProfile.java b/libjava/classpath/org/omg/IOP/TaggedProfile.java
index 66494fd..669b73a 100644
--- a/libjava/classpath/org/omg/IOP/TaggedProfile.java
+++ b/libjava/classpath/org/omg/IOP/TaggedProfile.java
@@ -1,5 +1,5 @@
/* TaggedProfile.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -72,7 +72,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TaggedProfile
+public final class TaggedProfile
implements IDLEntity, Serializable
{
/**
diff --git a/libjava/classpath/org/omg/IOP/TaggedProfileHolder.java b/libjava/classpath/org/omg/IOP/TaggedProfileHolder.java
index 7edb1d4..f739097 100644
--- a/libjava/classpath/org/omg/IOP/TaggedProfileHolder.java
+++ b/libjava/classpath/org/omg/IOP/TaggedProfileHolder.java
@@ -1,5 +1,5 @@
/* TaggedProfileHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class TaggedProfileHolder
+public final class TaggedProfileHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class TaggedProfileHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/Messaging/SyncScopeHelper.java b/libjava/classpath/org/omg/Messaging/SyncScopeHelper.java
index 1d482c5..f716edf 100644
--- a/libjava/classpath/org/omg/Messaging/SyncScopeHelper.java
+++ b/libjava/classpath/org/omg/Messaging/SyncScopeHelper.java
@@ -1,5 +1,5 @@
/* SyncScopeHelper.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -55,15 +55,11 @@ import org.omg.CORBA.portable.OutputStream;
*
* @see SYNC_WITH_TRANSPORT
*/
-public class SyncScopeHelper
+public abstract class SyncScopeHelper
{
- /**
- * A cached typecode value, computed only once.
- */
- private static TypeCode typecode;
/**
- * Delegates call to {@link Any.extract_short()}.
+ * Delegates call to {@link Any#extract_short()}.
*/
public static short extract(Any a)
{
@@ -81,7 +77,7 @@ public class SyncScopeHelper
}
/**
- * Delegates call to {@link Any.insert_short(short)}.
+ * Delegates call to {@link Any#insert_short(short)}.
*/
public static void insert(Any a, short that)
{
@@ -89,7 +85,7 @@ public class SyncScopeHelper
}
/**
- * Delegates call to {@link InputStream.read_short()}.
+ * Delegates call to {@link InputStream#read_short()}.
*/
public static short read(InputStream istream)
{
@@ -112,7 +108,7 @@ public class SyncScopeHelper
}
/**
- * Delegates call to {@link OutputStream.write_short()}.
+ * Delegates call to {@link OutputStream#write_short(short)}.
*/
public static void write(OutputStream ostream, short value)
{
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ForwardRequest.java b/libjava/classpath/org/omg/PortableInterceptor/ForwardRequest.java
index 7e7d7a3..7202f23 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ForwardRequest.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ForwardRequest.java
@@ -1,5 +1,5 @@
/* ForwardRequest.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ForwardRequest extends UserException implements IDLEntity,
+public final class ForwardRequest extends UserException implements IDLEntity,
Serializable
{
/**
diff --git a/libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java b/libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java
index dc7ecf2..f4830a2 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/IORInterceptor_3_0Holder.java
@@ -1,5 +1,5 @@
/* IORInterceptor_3_0Holder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class IORInterceptor_3_0Holder
+public final class IORInterceptor_3_0Holder
implements Streamable
{
/**
@@ -77,7 +77,7 @@ public class IORInterceptor_3_0Holder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/PortableInterceptor/InvalidSlot.java b/libjava/classpath/org/omg/PortableInterceptor/InvalidSlot.java
index 72805cf..30cb1a1 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/InvalidSlot.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/InvalidSlot.java
@@ -1,5 +1,5 @@
/* InvalidSlot.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class InvalidSlot extends UserException implements IDLEntity,
+public final class InvalidSlot extends UserException implements IDLEntity,
Serializable
{
/**
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java
index 1872737..610cec1 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.java
@@ -1,5 +1,5 @@
/* DuplicateName.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,7 +54,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class DuplicateName extends UserException implements IDLEntity,
+public final class DuplicateName extends UserException implements IDLEntity,
Serializable
{
/**
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java
index 17c6c6b..ff940da 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.java
@@ -1,5 +1,5 @@
/* InvalidName.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,7 +52,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class InvalidName extends UserException implements IDLEntity,
+public final class InvalidName extends UserException implements IDLEntity,
Serializable
{
/**
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java
index c22d14a..5d9812d 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.java
@@ -1,5 +1,5 @@
/* ObjectIdHelper.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,10 +53,10 @@ import org.omg.CORBA.portable.OutputStream;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectIdHelper
+public abstract class ObjectIdHelper
{
/**
- * Insert the Object Id into Any (uses {@link Any.insert_string}).
+ * Insert the Object Id into Any (uses {@link Any#insert_string(String)}).
*
* @param a the Any to insert into.
* @param that the string to insert.
@@ -67,7 +67,7 @@ public class ObjectIdHelper
}
/**
- * Extract the Object Id from Any ((uses {@link Any.extract_string}).
+ * Extract the Object Id from Any (uses {@link Any#extract_string()}).
*
* @param a the Any to extract from.
*/
@@ -105,7 +105,7 @@ public class ObjectIdHelper
}
/**
- * Calls {@link OutputStream#write_string()}.
+ * Calls {@link OutputStream#write_string(String)}.
*
* @param output the stream to write into.
* @param value the string (Object Id) value to write.
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java
index 55cde58..83f3da6 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java
@@ -1,5 +1,5 @@
/* ObjectReferenceFactory.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,20 +38,38 @@ exception statement from your version. */
package org.omg.PortableInterceptor;
+import org.omg.CORBA.Object;
import org.omg.CORBA.portable.IDLEntity;
+import org.omg.CORBA.portable.ValueBase;
/**
* Provides the possibility to create the CORBA object reference.
* The reference is created from repository id (defining the type of the
* object) and the object id (defining the identity of the object).
- * The operation for creating reference is defined separately in
- * {@link ObjectReferenceFactoryOperations}.
*
* @since 1.5
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
public interface ObjectReferenceFactory
- extends ObjectReferenceFactoryOperations, IDLEntity
+ extends ValueBase, IDLEntity
{
+ /**
+ * Create an object with the given repository and object ids. This interface
+ * does not specify where and how the returned object must be connected and
+ * activated. The derived {@link ObjectReferenceTemplate} interface assumes
+ * the object must be connected to the POA that is specific to that
+ * template (name can be obtained).
+ *
+ * If the object with this objectId already exists in the given context, it
+ * is found and returned; a new object is <i>not</i> created.
+ *
+ * @param repositoryId the repository id of the object being created, defines
+ * the type of the object.
+ *
+ * @param objectId the byte array, defining the identity of the object.
+ *
+ * @return The created corba object.
+ */
+ Object make_object(String repositoryId, byte[] objectId);
} \ No newline at end of file
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java
index fc68ec5..c662977 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java
@@ -1,5 +1,5 @@
/* ObjectReferenceFactoryHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectReferenceFactoryHolder
+public final class ObjectReferenceFactoryHolder
implements Streamable
{
/**
@@ -76,7 +76,7 @@ public class ObjectReferenceFactoryHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java
index 9658e1f..d76ef43 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java
@@ -1,5 +1,5 @@
/* ObjectReferenceTemplateHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.OutputStream;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectReferenceTemplateHolder
+public final class ObjectReferenceTemplateHolder
implements Streamable
{
/**
@@ -74,7 +74,7 @@ public class ObjectReferenceTemplateHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java
index d16f5ce..3fdc2bf 100644
--- a/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java
+++ b/libjava/classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.java
@@ -1,5 +1,5 @@
/* ObjectReferenceTemplateSeqHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,7 +47,7 @@ import org.omg.CORBA.portable.OutputStream;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectReferenceTemplateSeqHolder
+public final class ObjectReferenceTemplateSeqHolder
implements Streamable
{
/**
@@ -75,7 +75,7 @@ public class ObjectReferenceTemplateSeqHolder
}
/**
- * Fill in the {@link value} by data from the CDR stream.
+ * Fill in the {@link #value} by data from the CDR stream.
*
* @param input the org.omg.CORBA.portable stream to read.
*/
diff --git a/libjava/classpath/org/omg/PortableServer/CurrentPackage/NoContext.java b/libjava/classpath/org/omg/PortableServer/CurrentPackage/NoContext.java
index eaefee3..c2305ff 100644
--- a/libjava/classpath/org/omg/PortableServer/CurrentPackage/NoContext.java
+++ b/libjava/classpath/org/omg/PortableServer/CurrentPackage/NoContext.java
@@ -1,5 +1,5 @@
/* NoContext.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,7 +53,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithiania (AudriusA@Bioinformatics.org)
*/
-public class NoContext
+public final class NoContext
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/ForwardRequest.java b/libjava/classpath/org/omg/PortableServer/ForwardRequest.java
index f0588f4..3976de6 100644
--- a/libjava/classpath/org/omg/PortableServer/ForwardRequest.java
+++ b/libjava/classpath/org/omg/PortableServer/ForwardRequest.java
@@ -1,5 +1,5 @@
/* ForwardRequest.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -60,7 +60,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ForwardRequest
+public final class ForwardRequest
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java b/libjava/classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java
index 29720d7..55115c2 100644
--- a/libjava/classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java
+++ b/libjava/classpath/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java
@@ -1,5 +1,5 @@
/* AdapterInactive.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class AdapterInactive
+public final class AdapterInactive
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java b/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java
index ace2c84..c7e43f0 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java
@@ -1,5 +1,5 @@
/* AdapterAlreadyExists.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class AdapterAlreadyExists
+public final class AdapterAlreadyExists
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java b/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java
index 9d0a79f..a7ad618 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/AdapterNonExistent.java
@@ -1,5 +1,5 @@
/* AdapterNonExistent.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class AdapterNonExistent
+public final class AdapterNonExistent
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java b/libjava/classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java
index 459335a..51ef615 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/InvalidPolicy.java
@@ -1,5 +1,5 @@
/* InvalidPolicy.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,7 +52,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class InvalidPolicy
+public final class InvalidPolicy
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/NoServant.java b/libjava/classpath/org/omg/PortableServer/POAPackage/NoServant.java
index 3f63540..cc786a3 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/NoServant.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/NoServant.java
@@ -1,5 +1,5 @@
/* NoServant.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class NoServant
+public final class NoServant
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java b/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java
index 5a3b15e..f14e5c9 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java
@@ -1,5 +1,5 @@
/* ObjectAlreadyActive.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectAlreadyActive
+public final class ObjectAlreadyActive
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java b/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java
index 4d70af4..823c8ea 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/ObjectNotActive.java
@@ -1,5 +1,5 @@
/* ObjectNotActive.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ObjectNotActive
+public final class ObjectNotActive
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java b/libjava/classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java
index 71786ce..4f2b158 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java
@@ -1,5 +1,5 @@
/* ServantAlreadyActive.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -53,7 +53,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ServantAlreadyActive
+public final class ServantAlreadyActive
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java b/libjava/classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java
index fd223e3..2383b27 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/ServantNotActive.java
@@ -1,5 +1,5 @@
/* ServantNotActive.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ServantNotActive
+public final class ServantNotActive
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java b/libjava/classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java
index ea8d011..81b4ffb 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/WrongAdapter.java
@@ -1,5 +1,5 @@
/* WrongAdapter.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,7 +50,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class WrongAdapter
+public final class WrongAdapter
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java b/libjava/classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java
index 9f589d7..b2102dc 100644
--- a/libjava/classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java
+++ b/libjava/classpath/org/omg/PortableServer/POAPackage/WrongPolicy.java
@@ -1,5 +1,5 @@
/* WrongPolicy.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,7 +49,7 @@ import java.io.Serializable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class WrongPolicy
+public final class WrongPolicy
extends UserException
implements IDLEntity, Serializable
{
diff --git a/libjava/classpath/org/omg/PortableServer/ServantActivatorPOA.java b/libjava/classpath/org/omg/PortableServer/ServantActivatorPOA.java
index 5ea0be4..c94866a 100644
--- a/libjava/classpath/org/omg/PortableServer/ServantActivatorPOA.java
+++ b/libjava/classpath/org/omg/PortableServer/ServantActivatorPOA.java
@@ -1,5 +1,5 @@
/* ServantActivatorPOA.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -58,11 +58,11 @@ import org.omg.CORBA.portable.ResponseHandler;
* You do not need to derive your servant activator from this stub,
* it is enough to implement the {@link ServantActivator} interface.
* But you may choose to do this if you need the functional
- * {@link #_all_interfaces()} method or want to keep default behavior during
- * the incarnation or etherialization.
+ * {@link #_all_interfaces(POA, byte[])} method or want to keep default
+ * behavior during the incarnation or etherialization.
* </p>
*/
-public class ServantActivatorPOA
+public abstract class ServantActivatorPOA
extends Servant
implements InvokeHandler, ServantActivatorOperations
{
@@ -98,42 +98,6 @@ public class ServantActivatorPOA
}
/**
- * It is your responsibility to handle the incarnation event and
- * supply the servant.
- * The default method instructs POA that the servant cannot be
- * provided by activator. The OBJ_ADAPTER exception will be
- * thrown by POA, unless the servant is provided as one of the
- * parameters in the activation method, or the default servant is set.
- *
- * @see ServantActivatorOperations#incarnate
- *
- * @specnote in GNU Classpath, returning null means that the
- * activator does not supply the servant. The servant can still be supplied
- * as one of parameters in some POA activation methods or as a default
- * servant.
- *
- * @throws ForwardRequest
- */
- public Servant incarnate(byte[] Object_Id, POA poa)
- throws ForwardRequest
- {
- return null;
- }
-
- /**
- * It is your responsibility to handle the etherialization event.
- * Override this method if using the class. The default method
- * does nothing.
- *
- * @see ServantActivatorOperations#incarnate
- */
- public void etherealize(byte[] Object_Id, POA poa, Servant servant,
- boolean cleanup, boolean remains
- )
- {
- }
-
- /**
* Our implementation will not call this method. After setting your
* manager to POA, it will call incarnate and etherialize directly.
*/
diff --git a/libjava/classpath/org/omg/PortableServer/ServantLocatorPOA.java b/libjava/classpath/org/omg/PortableServer/ServantLocatorPOA.java
index 0a0f996..8e9c7ae 100644
--- a/libjava/classpath/org/omg/PortableServer/ServantLocatorPOA.java
+++ b/libjava/classpath/org/omg/PortableServer/ServantLocatorPOA.java
@@ -1,5 +1,5 @@
/* ServantLocatorPOA.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -59,12 +59,12 @@ import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
* You do not need to derive your servant locator from this stub,
* it is enough to implement the {@link ServantLocator} interface.
* But you may choose to do this if you need its functional
- * {@link #_ids()} method or want to keep default behavior during per-
- * or post- invokcations.
+ * {@link org.omg.PortableServer.ServantActivatorPOA.delegator#_ids()}
+ * method or want to keep default behaviour during pre- or post- invokcations.
* </p>
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class ServantLocatorPOA
+public abstract class ServantLocatorPOA
extends Servant
implements ServantLocatorOperations, InvokeHandler
{
@@ -74,40 +74,6 @@ public class ServantLocatorPOA
final ServantLocatorPOA THIS = this;
/**
- * It is your responsibility to take the preinvoke actions, if any,
- * and also supply an appropriate servant for the current invocation.
- *
- * The default method instructs POA that the servant cannot be
- * provided by locator. The OBJ_ADAPTER exception will be
- * thrown by POA, unless it uses the available default servant for all
- * invocations.
- *
- * @specnote in GNU Classpath, returning null means that the
- * locator does not supply the servant.
- *
- * @see ServantLocatorOperations#preinvoke
- */
- public Servant preinvoke(byte[] Object_Id, POA poa, String method,
- CookieHolder cookie_holder
- )
- throws org.omg.PortableServer.ForwardRequest
- {
- return null;
- }
-
- /**
- * It is your responsibility to take the postinvoke actions, if any,
- * by overriding this method. The default method does nothing.
- *
- * @see ServantLocatorOperations#postinvoke
- */
- public void postinvoke(byte[] Object_Id, POA poa, String method,
- java.lang.Object cookie, Servant servant
- )
- {
- }
-
- /**
* Our implementation will not call this method. After setting your
* manager to POA, it will call incarnate and etherialize directly.
*/
diff --git a/libjava/classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java b/libjava/classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java
index e62bde7..ebae51b 100644
--- a/libjava/classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java
+++ b/libjava/classpath/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java
@@ -1,5 +1,5 @@
/* CookieHolder.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,7 +56,7 @@ import org.omg.CORBA.portable.Streamable;
*
* @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
*/
-public class CookieHolder
+public final class CookieHolder
implements Streamable
{
/**
diff --git a/libjava/classpath/resource/Makefile.in b/libjava/classpath/resource/Makefile.in
index f3f4851..612d14a 100644
--- a/libjava/classpath/resource/Makefile.in
+++ b/libjava/classpath/resource/Makefile.in
@@ -80,6 +80,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -119,6 +120,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -139,6 +142,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -186,6 +190,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -204,8 +209,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -217,8 +225,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -235,7 +241,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -243,18 +252,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/resource/gnu/classpath/tools/jarsigner/MessageBundle.properties b/libjava/classpath/resource/gnu/classpath/tools/jarsigner/MessageBundle.properties
new file mode 100644
index 0000000..902166d
--- /dev/null
+++ b/libjava/classpath/resource/gnu/classpath/tools/jarsigner/MessageBundle.properties
@@ -0,0 +1,33 @@
+# default locale messages for gnu.classpath.tools.jarsigner package
+
+Main.7=jarsigner:
+Main.9=jarsigner error:
+Main.70=JAR file [{0}] is NOT a file object
+Main.72=JAR file [{0}] is NOT readable
+#Main.85=Option '-keystore' is not defined or is an empty string, and 'user.home' is unknown
+Main.85=Unable to locate a valid key store
+Main.92=Enter key store password:
+Main.6=Designated alias [{0}] MUST be known to the key store in use
+Main.95=Designated alias [{0}] MUST be an Alias of a Key Entry
+Main.97=Enter key password for <{0}>:
+Main.99=Key associated with [{0}] MUST be a private key
+
+JarSigner.1=\ \ signing:
+JarSigner.2=\ updating:
+JarSigner.8=\ \ \ adding:
+JarSigner.11=\ \ \ adding:
+JarSigner.14=jar signed.
+
+JarVerifier.2=jar is not signed.--no signature files found.
+JarVerifier.3=jar verification failed.
+JarVerifier.4=jar partially verified --{0,numer} of {1,number} signers.
+JarVerifier.7=jar verified --{0,number} signer(s).
+JarVerifier.13=Signature Block missing for {0}
+JarVerifier.14=At least one SignerInfo element MUST be present in a Signature Block (.DSA file)
+JarVerifier.16=Missing EncryptedDigest in Signature Block (.DSA file) first SignerInfo element
+
+SFHelper.1=Helper is NOT finished
+SFHelper.4=.SF file has NOT been generated
+SFHelper.6=Unknown or unsupported private key algorithm
+SFHelper.9=Helper is NOT ready
+SFHelper.10=Helper is NOT started
diff --git a/libjava/classpath/resource/gnu/classpath/tools/keytool/MessageBundle.properties b/libjava/classpath/resource/gnu/classpath/tools/keytool/MessageBundle.properties
new file mode 100644
index 0000000..2dd3ce2
--- /dev/null
+++ b/libjava/classpath/resource/gnu/classpath/tools/keytool/MessageBundle.properties
@@ -0,0 +1,95 @@
+# default locale messages for gnu.classpath.tools.keytool package
+
+Main.6=keytool:
+Main.8=keytool error:
+
+Command.19=Failed creating new file at {0}
+Command.20=Unable to find a suitable signature algorithm named {0}, although we found a key-pair generation algorithm named {1}
+Command.21=Enter key password for <{0}>:
+Command.23=A correct key password MUST be provided
+Command.24=Enter key store password:
+#Command.36=Option '-keystore' is undefined, or is an empty string, and 'user.home' is unknown
+Command.36=Unable to locate a valid key store
+Command.40=Provider fully qualified class name:
+Command.42=File object [{0}] exists but is NOT a file
+Command.44=File [{0}] exists but is NOT writable
+Command.46=File object [{0}] MUST be an existing readable file
+Command.48=Signature algorithm is missing and private key is of unknown or unsupported type
+Command.51=Validity period MUST be greater than zero
+Command.52=Unable to get signature algorithm name
+Command.60=Unknown or unsupported signature algorithm: {0}
+Command.63=Saving key store at {0}
+Command.66=Owner: {0}
+Command.67=Issuer: {0}
+Command.68=Serial number: {0,number}
+Command.69=Valid from: {0,date,full} - {0,time,full}
+Command.70=\ \ \ \ \ until: {0,date,full} - {0,time,full}
+Command.71=Certificate fingerprints
+Command.72=\ \ \ \ \ \ MD5: {0}
+Command.73=\ \ SHA-160: {0}
+Command.75=Alias [{0}] MUST be knwon to the key store
+Command.77=Alias [{0}] MUST be associated with a Key Entry
+
+CertReqCmd.27=Certification request stored in {0}
+CertReqCmd.28=Submit this to your CA
+
+DeleteCmd.19=Enter the Alias to delete:
+DeleteCmd.20=Alias MUST NOT be null or an empty string
+
+GenKeyCmd.0=\nYou are about to enter information that will be incorporated into\n\
+your certificate request. This information is what is called a\n\
+Distinguished Name or DN. There are quite a few fields but you\n\
+can use supplied default values, displayed between brackets, by just\n\
+hitting <Enter>, or blank the field by entering the <.> character\n\
+before hitting <Enter>.\n\n
+GenKeyCmd.6=The Sample Company
+GenKeyCmd.7=Sydney
+GenKeyCmd.8=NSW
+GenKeyCmd.9=AU
+GenKeyCmd.10=Common Name (hostname, IP, or your name):
+GenKeyCmd.11=Organization Name (company) [{0}]:
+GenKeyCmd.13=Organizational Unit Name (department, division):
+GenKeyCmd.14=Locality Name (city, district) [{0}]:
+GenKeyCmd.16=State or Province Name (full name) [{0}]:
+GenKeyCmd.18=Country Name (2 letter code) [{0}]:
+GenKeyCmd.54=Key size MUST be greater than zero
+
+StorePasswdCmd.19=Too many failed attempts
+StorePasswdCmd.20=Enter new key store password:
+StorePasswdCmd.21=Password MUST be at least 6 characters.
+StorePasswdCmd.22=New password MUST be different than the old one.
+StorePasswdCmd.23=Re-enter new key store password:
+StorePasswdCmd.24=Passwords MUST be the same in both attempts.
+
+KeyPasswdCmd.24=Enter new key password for <{0}>:
+KeyPasswdCmd.28=Re-enter new key password for <{0}>:
+
+KeyCloneCmd.23=Destination Alias MUST NOT exist in key store
+KeyCloneCmd.26=Enter destination alias:
+KeyCloneCmd.27=Destination alias MUST NOT be null nor empty
+KeyCloneCmd.28=Enter new key password for <{0}> [{1}]:
+
+ListCmd.21=Key store type: {0}
+ListCmd.22=Key store provider: {0}
+ListCmd.24=Key store contains {0,number} entry(ies)
+ListCmd.30=Alias name: {0}
+ListCmd.31=Creation timestamp: {0,date,full} - {0,time,full}
+ListCmd.32=Entry type: trusted-certificate
+ListCmd.33=Entry type: key-entry
+ListCmd.34=Alias [{0}] is unknown to the key store
+ListCmd.38=Certificate chain length: {0,number}
+ListCmd.39=Certificate[1]:
+ListCmd.40=Certificate[{0,number}]:
+ListCmd.42=*******************************************
+ListCmd.43=-----BEGIN CERTIFICATE-----
+ListCmd.44=-----END CERTIFICATE-----
+ListCmd.45=Certificate fingerprint (MD5): {0}
+
+ImportCmd.34=Failed to establish chain-of-trust from reply
+ImportCmd.37=Unable to find anchor certificate for {0}
+ImportCmd.38=Public keys, in key store and certificate, MUST be of the same type
+ImportCmd.32=Can this certificate be trusted?
+ImportCmd.40=Key entry associated with {0} has an unknown or unsupported public key type {1}
+ImportCmd.41=Public keys, in key store and certificate, MUST be the same
+ImportCmd.29=Certificate was added to the key store
+ImportCmd.28=Certificate was not added to the key store
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa.properties
index b60bfe0..ca40f9b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa.properties
@@ -5,8 +5,14 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.DJF=DJF
-currenciesDisplayName.ERN=ERN
+currenciesDisplayName.INR=Indian Rupee
+currenciesDisplayName.JPY=Japanese Yen
+currenciesDisplayName.RUB=Russian Ruble
+currenciesDisplayName.CNY=Chinese Yuan Renminbi
+currenciesDisplayName.GBP=British Pound Sterling
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.BRL=Brazilian Real
currenciesSymbol.DJF=FD
currenciesSymbol.ERN=$
currenciesSymbol.USD=US$
@@ -25,7 +31,28 @@ shortTimeFormat=h:mm a
mediumTimeFormat=h:mm:ss a
longTimeFormat=h:mm:ss a
fullTimeFormat=h:mm:ss a
-territories.ER=Eretria
+territories.FR=France
territories.DJ=Yabuuti
+territories.IN=India
+territories.CN=China
territories.ET=Otobbia
+territories.DE=Germany
+territories.GB=United Kingdom
+territories.ER=Eretria
+territories.BR=Brazil
+territories.RU=Russia
+territories.JP=Japan
+territories.US=United States
+territories.IT=Italy
+languages.zh=Chinese
languages.aa=Qafar
+languages.en=English
+languages.ru=Russian
+languages.hi=Hindi
+languages.ar=Arabic
+languages.it=Italian
+languages.fr=French
+languages.de=German
+languages.es=Spanish
+languages.ja=Japanese
+languages.pt=Portuguese
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa_ET.properties
index 1828947..e642c53 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa_ET.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_aa_ET.properties
@@ -6,6 +6,5 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ETB=ETB
currenciesSymbol.ETB=$
months=®Kudo®®Agda Baxis®®®®Liiqen®®®®®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_af.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_af.properties
index 3a57193..cae9284 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_af.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_af.properties
@@ -18,17 +18,17 @@ ampms=vm.®nm.®
territories.AU=Australi\u00eb
territories.TD=Tsjaad
territories.AT=Oostenryk
-territories.GW=Guinee-Bissau
territories.AR=Argentini\u00eb
+territories.GW=Guinee-Bissau
territories.MZ=Mosambiek
territories.MY=Maleisi\u00eb
territories.MX=Meksiko
-territories.GR=Griekeland
territories.AM=Armeni\u00eb
+territories.GR=Griekeland
territories.ZA=Suid-Afrika
territories.MV=Maldive
-territories.GQ=Ekwatoriaal-Guinee
territories.AL=Albani\u00eb
+territories.GQ=Ekwatoriaal-Guinee
territories.SY=Siri\u00eb
territories.GN=Guinee
territories.MR=Mouritani\u00eb
@@ -39,7 +39,6 @@ territories.AF=Afganistan
territories.ST=Sao Tome en Principe
territories.AE=Verenigde Arabiese Emirate
territories.MN=Mongoli\u00eb
-territories.YU=Serwi\u00eb
territories.MK=Macedoni\u00eb
territories.SO=Somali\u00eb
territories.GE=Georgi\u00eb
@@ -75,8 +74,8 @@ territories.KW=Koeweit
territories.KR=Suid-Korea
territories.KP=Noord-Korea
territories.KN=Saint Kitts en Nevis
-territories.KM=Comore
territories.EH=Wes-Sahara
+territories.KM=Comore
territories.EG=Egipte
territories.EE=Estland
territories.KH=Kambodja
@@ -86,8 +85,8 @@ territories.DZ=Algeri\u00eb
territories.QA=Katar
territories.DO=Dominikaanse Republiek
territories.DK=Denemarke
-territories.JO=Jordani\u00eb
territories.DJ=Djiboeti
+territories.JO=Jordani\u00eb
territories.JM=Jamaika
territories.DE=Duitsland
territories.PL=Pole
@@ -99,16 +98,17 @@ territories.CY=Ciprus
territories.CV=Kaap Verde
territories.CU=Kuba
territories.VC=Saint Vincent en die Grenadine
+territories.CS=Serwi\u00eb
territories.VA=Vatikaan
territories.IT=Itali\u00eb
-territories.IS=Ysland
territories.CN=Sjina
+territories.IS=Ysland
territories.CM=Kameroen
-territories.IQ=Irak
territories.CL=Chili
+territories.IQ=Irak
territories.UZ=Oesbekistan
-territories.IN=Indi\u00eb
territories.CI=Ivoorkus
+territories.IN=Indi\u00eb
territories.CH=Switserland
territories.CG=Kongo
territories.CF=Sentraal-Afrikaanse Republiek
@@ -122,8 +122,8 @@ territories.BR=Brasili\u00eb
territories.UA=Oekraine
territories.NZ=Nieu-Seeland
territories.HU=Hongarye
-territories.HT=Ha\u00efti
territories.BO=Bolivi\u00eb
+territories.HT=Ha\u00efti
territories.BN=Broenei
territories.HR=Kroasi\u00eb
territories.TZ=Tanzani\u00eb
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am.properties
index be1a63c..e0f5264 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am.properties
@@ -5,6 +5,19 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
shortMonths=\u1303\u1295\u12e9®\u134c\u1265\u1229®\u121b\u122d\u127d®\u12a4\u1355\u1228®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235®\u1234\u1355\u1274®\u12a6\u12ad\u1270®\u1296\u126c\u121d®\u12f2\u1234\u121d®®
months=\u1303\u1295\u12e9\u12c8\u122a®\u134c\u1265\u1229\u12c8\u122a®\u121b\u122d\u127d®\u12a4\u1355\u1228\u120d®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235\u1275®\u1234\u1355\u1274\u121d\u1260\u122d®\u12a6\u12ad\u1270\u12cd\u1260\u122d®\u1296\u126c\u121d\u1260\u122d®\u12f2\u1234\u121d\u1260\u122d®®
shortWeekdays=®\u12a5\u1211\u12f5®\u1230\u129e®\u121b\u12ad\u1230®\u1228\u1261\u12d5®\u1210\u1219\u1235®\u12d3\u122d\u1265®\u1245\u12f3\u121c®
@@ -33,10 +46,9 @@ territories.GN=\u130a\u1292
territories.GM=\u130b\u121d\u1262\u12eb
territories.GL=\u130d\u122a\u1295\u120b\u1295\u12f5
territories.SV=\u12a4\u120d \u1233\u120d\u126b\u12f6\u122d
-territories.062=South-central Asia
territories.ST=\u1233\u12a6 \u1276\u121c \u12a5\u1293 \u1355\u122a\u1295\u1232\u1354
-territories.GI=\u130a\u1265\u122b\u120d\u1273\u122d
territories.061=\u1356\u120a\u1294\u12e2\u12eb
+territories.GI=\u130a\u1265\u122b\u120d\u1273\u122d
territories.GH=\u130b\u1293
territories.SR=\u1231\u122a\u1293\u121d
territories.GF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1309\u12ca\u12a0\u1293
@@ -59,13 +71,11 @@ territories.SC=\u1232\u123c\u120d\u1235
territories.SB=\u1230\u120e\u121e\u1295 \u12f0\u1234\u1275
territories.SA=\u1233\u12cd\u12f5\u12a0\u1228\u1262\u12eb
territories.FR=\u1348\u1228\u1295\u1233\u12ed
-territories.FO=\u12e8\u134b\u122e\u12ed \u12f0\u1234\u1276\u127d
territories.057=\u121a\u12ad\u122e\u1294\u12e2\u12eb
+territories.FO=\u12e8\u134b\u122e\u12ed \u12f0\u1234\u1276\u127d
territories.FM=\u121a\u12ad\u122e\u1294\u12e2\u12eb
territories.RW=\u1229\u12cb\u1295\u12f3
-territories.054=Melanesia
territories.FK=\u12e8\u134e\u120d\u12ad\u120b\u1295\u12f5 \u12f0\u1234\u1276\u127d
-territories.053=Australia and New Zealand
territories.RU=\u122b\u123a\u12eb
territories.FJ=\u134a\u1302
territories.FI=\u134a\u1295\u120b\u1295\u12f5
@@ -75,10 +85,8 @@ territories.ET=\u12a2\u1275\u12ee\u1335\u12eb
territories.ES=\u1235\u1354\u1295
territories.ER=\u12a4\u122d\u1275\u122b
territories.EH=\u121d\u12d5\u122b\u1263\u12ca \u1233\u1205\u122b
-territories.833=Isle of Man
territories.EG=\u130d\u1265\u133d
territories.EE=\u12a4\u1235\u1276\u1292\u12eb
-territories.830=Channel Islands
territories.EC=\u12a2\u12b3\u12f6\u122d
territories.DZ=\u12a0\u120d\u1304\u122a\u12eb
territories.QA=\u12b3\u1273\u122d
@@ -86,13 +94,11 @@ territories.039=\u12f0\u1261\u1263\u12ca \u12a0\u12cd\u122e\u1353
territories.DO=\u12f6\u121a\u1292\u12ad \u122a\u1351\u1265\u120a\u12ad
territories.PY=\u1353\u122b\u1313\u12ed
territories.DM=\u12f6\u121a\u1292\u12ab
-territories.035=South-eastern Asia
territories.PW=\u1353\u120b\u12cd
territories.DK=\u12f4\u1295\u121b\u122d\u12ad
territories.DJ=\u1302\u1261\u1272
territories.PT=\u1356\u122d\u1271\u130b\u120d
territories.PS=\u12e8\u134d\u120d\u1235\u1324\u121d \u130d\u12db\u1275
-territories.030=Eastern Asia
territories.PR=\u1356\u122d\u1273 \u122a\u12ae
territories.DE=\u1300\u122d\u1218\u1295
territories.PN=\u1352\u1275\u12ab\u12a2\u122d\u1295
@@ -109,15 +115,15 @@ territories.CX=\u12e8\u1308\u1293 \u12f0\u1234\u1276\u127d
territories.CV=\u12ac\u1355 \u126c\u122d\u12f4
territories.PA=\u1353\u1293\u121b
territories.CU=\u12a9\u1263
+territories.CS=\u1230\u122d\u1262\u12eb
territories.CR=\u12ae\u1235\u1273 \u122a\u12ab
-territories.029=Caribbean
territories.CO=\u12ae\u120e\u121d\u1262\u12eb
territories.CN=\u127b\u12ed\u1293
territories.CM=\u12ab\u121c\u1229\u1295
territories.CL=\u127a\u120a
territories.CK=\u12a9\u12ad \u12f0\u1234\u1276\u127d
-territories.021=\u1230\u121c\u1293\u12ca \u12a0\u121c\u122a\u12ab
territories.CI=\u12ae\u1275 \u12f2\u126f\u122d
+territories.021=\u1230\u121c\u1293\u12ca \u12a0\u121c\u122a\u12ab
territories.CH=\u1235\u12ca\u12d8\u122d\u120b\u1295\u12f5
territories.CG=\u12ae\u1295\u1310
territories.CF=\u12e8\u1218\u12ab\u12a8\u1208\u129b\u12cd \u12a0\u134d\u122a\u12ab \u122a\u1350\u1265\u120a\u12ad
@@ -132,27 +138,24 @@ territories.BV=\u12e8\u1266\u12cd\u126c\u1275 \u12f0\u1234\u1275
territories.BT=\u1261\u1205\u1273\u1295
territories.BS=\u1263\u1203\u121b\u1235
territories.BR=\u1265\u122b\u12da\u120d
-territories.019=Americas
territories.018=\u12f0\u1261\u1263\u12ca \u12a0\u134d\u122a\u12ab
territories.NZ=\u1292\u12cd \u12da\u120b\u1295\u12f5
-territories.017=Middle \u12a0\u134d\u122a\u12ab
territories.BO=\u1266\u120a\u126a\u12eb
+territories.017=Middle \u12a0\u134d\u122a\u12ab
territories.BN=\u1265\u1229\u1292
-territories.015=\u1230\u121c\u1293\u12ca \u12a0\u134d\u122a\u12ab
territories.BM=\u1264\u122d\u1219\u12f3
+territories.015=\u1230\u121c\u1293\u12ca \u12a0\u134d\u122a\u12ab
territories.014=\u121d\u1235\u122b\u1243\u12ca \u12a0\u134d\u122a\u12ab
-territories.013=Central America
territories.NU=\u1292\u12a1\u12ed
territories.BJ=\u1264\u1292\u1295
-territories.011=\u121d\u12d5\u122b\u1263\u12ca \u12a0\u134d\u122a\u12ab
territories.BI=\u1265\u1229\u1295\u12f2
+territories.011=\u121d\u12d5\u122b\u1263\u12ca \u12a0\u134d\u122a\u12ab
territories.BH=\u1263\u1205\u122c\u1295
territories.NR=\u1293\u12a1\u1229
territories.BG=\u1261\u120d\u130c\u122a\u12eb
territories.BF=\u1261\u122d\u12aa\u1293 \u134b\u1236
territories.NP=\u1294\u1353\u120d
territories.BE=\u1264\u120d\u1304\u121d
-territories.ZZ=Outlying Oceania
territories.NO=\u1296\u122d\u12cc
territories.BD=\u1263\u1295\u130d\u120b\u12f2\u123d
territories.BB=\u1263\u122d\u1264\u12f6\u1235
@@ -164,7 +167,6 @@ territories.NG=\u1293\u12ed\u1304\u122a\u12eb
territories.NF=\u1296\u122d\u134e\u120d\u12ad \u12f0\u1234\u1275
territories.AZ=\u12a0\u12d8\u122d\u1263\u1303\u1295
territories.NE=\u1292\u1300\u122d
-territories.AX=Aland Islands
territories.NC=\u1292\u12cd \u12ab\u120c\u12f6\u1292\u12eb
territories.AW=\u12a0\u1229\u1263
territories.ZM=\u12db\u121d\u1262\u12eb
@@ -174,14 +176,13 @@ territories.AT=\u12a6\u1235\u1275\u122a\u12eb
territories.AS=\u12e8\u12a0\u121c\u122a\u12ab \u1233\u121e\u12a0
territories.AR=\u12a0\u122d\u1300\u1295\u1272\u1293
territories.AQ=\u12a0\u1295\u1273\u122d\u12ad\u1272\u12ab
-territories.009=Oceania
territories.MZ=\u121e\u12db\u121d\u1262\u12ad
territories.AO=\u12a0\u1295\u1310\u120b
territories.MY=\u121b\u120c\u12e2\u12eb
territories.AN=\u1294\u12d8\u122d\u120b\u1295\u12f5\u1235 \u12a0\u1295\u1272\u120d\u1235
territories.MX=\u121c\u12ad\u1232\u12ae
-territories.AM=\u12a0\u122d\u121c\u1292\u12eb
territories.005=\u12f0\u1261\u1263\u12ca \u12a0\u121c\u122a\u12ab
+territories.AM=\u12a0\u122d\u121c\u1292\u12eb
territories.MW=\u121b\u120b\u12ca
territories.AL=\u12a0\u120d\u1263\u1292\u12eb
territories.MV=\u121b\u120d\u12f2\u126d\u1235
@@ -189,8 +190,8 @@ territories.ZA=\u12f0\u1261\u1265 \u12a0\u134d\u122a\u12ab
territories.MU=\u121b\u1229\u1238\u1235
territories.002=\u12a0\u121c\u122a\u12ab
territories.MT=\u121b\u120d\u1273
-territories.AI=\u12a0\u1295\u1309\u12a2\u120b
territories.001=\u12d3\u1208\u121d
+territories.AI=\u12a0\u1295\u1309\u12a2\u120b
territories.MS=\u121e\u1295\u1275\u1234\u122b\u1275
territories.MR=\u121e\u122a\u1274\u1292\u12eb
territories.AG=\u12a0\u1295\u1272\u1313 \u12a5\u1293 \u1263\u1229\u12f3
@@ -204,7 +205,6 @@ territories.MN=\u121e\u1295\u130e\u120a\u12eb
territories.MM=\u121b\u12eb\u1295\u121b\u122d
territories.ML=\u121b\u120a
territories.MK=\u121b\u12a8\u12f6\u1292\u12eb
-territories.YU=\u12e9\u130e\u12dd\u120b\u126a\u12eb
territories.YT=\u121c\u12ed\u12a6\u1274
territories.MH=\u121b\u122d\u123b\u120d \u12a0\u12ed\u120b\u1295\u12f5
territories.MG=\u121b\u12f3\u130b\u1235\u12ab\u122d
@@ -219,8 +219,8 @@ territories.LU=\u1209\u12ad\u1230\u121d\u1260\u122d\u130d
territories.154=\u1230\u121c\u1293\u12ca \u12a0\u12cd\u122e\u1353
territories.LT=\u120a\u1271\u12cc\u1292\u12eb
territories.LS=\u120c\u1236\u1276
-territories.LR=\u120b\u12ed\u1264\u122a\u12eb
territories.151=\u121d\u1235\u122b\u1243\u12ca \u12a0\u12cd\u122e\u1353
+territories.LR=\u120b\u12ed\u1264\u122a\u12eb
territories.150=\u12a0\u12cd\u122e\u1353
territories.LK=\u1232\u122a\u120b\u1295\u12ab
territories.LI=\u120a\u127d\u1270\u1295\u1235\u1273\u12ed\u1295
@@ -230,8 +230,6 @@ territories.LA=\u120b\u12a6\u1235
territories.KZ=\u12ab\u12db\u12aa\u1235\u1273\u1295
territories.KY=\u12ab\u12ed\u121b\u1295 \u12f0\u1234\u1276\u127d
territories.KW=\u12ad\u12cc\u1275
-territories.145=Western Asia
-territories.142=Asia
territories.KR=\u1230\u121c\u1295 \u12ae\u122a\u12eb
territories.KP=\u12f0\u1261\u1265 \u12ae\u122a\u12eb
territories.KN=\u1245\u12f1\u1235 \u12aa\u1275\u1235 \u12a5\u1293 \u1294\u126a\u1235
@@ -284,8 +282,8 @@ territories.TM=\u1271\u122d\u12ad\u121c\u1292\u1235\u1273\u1295
languages.es=\u1235\u1353\u1292\u123d
languages.ku=\u12a9\u122d\u12f5\u123d\u129b
languages.eo=\u12a4\u1235\u1350\u122b\u1295\u1276
-languages.ks=\u12ab\u123d\u121a\u122d\u129b
languages.en=\u12a5\u1295\u130d\u120a\u12dd\u129b
+languages.ks=\u12ab\u123d\u121a\u122d\u129b
languages.el=\u130d\u122a\u12ad\u129b
languages.qu=\u12b5\u127f\u129b
languages.ko=\u12ae\u122a\u12eb\u129b
@@ -309,8 +307,8 @@ languages.cy=\u12c8\u120d\u123d
languages.pa=\u1353\u1295\u1303\u1262\u129b
languages.cs=\u127c\u12ad\u129b
languages.iu=\u12a5\u1291\u12ad\u1272\u1271\u1275\u129b
-languages.it=\u1323\u120a\u12eb\u1295\u129b
languages.co=\u12ae\u122d\u1232\u12ab\u129b
+languages.it=\u1323\u120a\u12eb\u1295\u129b
languages.is=\u12a0\u12ed\u1235\u120b\u1295\u12f5\u129b
languages.uz=\u12a1\u12dd\u1260\u12ad\u129b
languages.or=\u12a6\u122a\u12eb\u129b
@@ -367,8 +365,8 @@ languages.am=\u12a0\u121b\u122d\u129b
languages.za=\u12e1\u12cb\u1295\u130d\u129b
languages.mt=\u121b\u120d\u1272\u1235\u129b
languages.ms=\u121b\u120b\u12ed\u129b
-languages.byn=\u1265\u120a\u1295
languages.gn=\u1313\u122b\u1292\u129b
+languages.byn=\u1265\u120a\u1295
languages.sw=\u1235\u12cb\u1202\u120a\u129b
languages.mr=\u121b\u122b\u12da\u129b
languages.sv=\u1235\u12ca\u12f5\u1295\u129b
@@ -406,14 +404,14 @@ languages.sid=\u1232\u12f3\u121d\u129b
languages.sa=\u1233\u1295\u1235\u12ad\u122a\u1275\u129b
languages.fr=\u1348\u1228\u1295\u1233\u12ed\u129b
languages.lv=\u120b\u1275\u126a\u12eb\u1295
-languages.lt=\u120a\u1271\u12a0\u1292\u12eb\u1295
languages.fo=\u134b\u122e\u129b
+languages.lt=\u120a\u1271\u12a0\u1292\u12eb\u1295
languages.rw=\u12aa\u1295\u12eb\u122d\u12cb\u1295\u12f5\u129b
languages.ru=\u122b\u123d\u129b
-languages.lo=\u120b\u12cd\u1235\u129b
languages.fj=\u134a\u1302\u129b
-languages.ln=\u120a\u1295\u130b\u120b\u129b
+languages.lo=\u120b\u12cd\u1235\u129b
languages.fi=\u134a\u1292\u123d
+languages.ln=\u120a\u1295\u130b\u120b\u129b
languages.ro=\u122e\u121b\u1292\u12eb\u1295
languages.rn=\u1229\u1295\u12f2\u129b
languages.rm=\u122e\u121b\u1295\u1235
@@ -421,5 +419,5 @@ languages.fa=\u1350\u122d\u1232\u12eb\u129b
languages.la=\u120b\u1272\u1295\u129b
languages.xh=\u12de\u1233\u129b
languages.eu=\u1263\u1235\u12ad\u129b
-languages.ky=\u12aa\u122d\u130a\u12dd\u129b
languages.et=\u12a4\u1235\u1276\u1292\u12a0\u1295
+languages.ky=\u12aa\u122d\u130a\u12dd\u129b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am_ET.properties
index fc96872..5da859c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am_ET.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_am_ET.properties
@@ -6,8 +6,6 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ETB=ETB
-currenciesSymbol.ETB=$
currenciesSymbol.USD=US$
ampms=\u1321\u12cb\u1275®\u12a8\u1233\u12d3\u1275®
shortDateFormat=dd/MM/yy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar.properties
index 148fb4f..b929f64 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar.properties
@@ -11,40 +11,46 @@ decimalSeparator=\u066b
groupingSeparator=\u066c
currencyFormat=\u00a4 #,##0.00;\u00a4 #,##0.00-
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.LBP=LBP
-currenciesDisplayName.KWD=KWD
-currenciesDisplayName.TND=TND
-currenciesDisplayName.MAD=MAD
-currenciesDisplayName.AED=AED
-currenciesDisplayName.BHD=BHD
-currenciesDisplayName.QAR=QAR
-currenciesDisplayName.DZD=DZD
-currenciesDisplayName.LYD=LYD
-currenciesDisplayName.SYP=SYP
-currenciesDisplayName.JOD=JOD
-currenciesDisplayName.IQD=IQD
-currenciesDisplayName.YER=YER
-currenciesDisplayName.EGP=EGP
-currenciesDisplayName.OMR=OMR
-currenciesDisplayName.SAR=SAR
-currenciesDisplayName.SDP=SDP
-currenciesSymbol.LBP=\u0644.\u0644.\u200f
-currenciesSymbol.KWD=\u062f.\u0643.\u200f
-currenciesSymbol.TND=\u062f.\u062a.\u200f
+currenciesDisplayName.INR=\u0631\u0648\u0628\u064a\u0647 \u0647\u0646\u062f\u064a
+currenciesDisplayName.RUB=\u0631\u0648\u0628\u0644 \u0631\u0648\u0633\u064a
+currenciesDisplayName.JPY=\u064a\u0646 \u064a\u0627\u0628\u0627\u0646\u064a
+currenciesDisplayName.SDD=\u062f\u064a\u0646\u0627\u0631 \u0633\u0648\u062f\u0627\u0646\u064a
+currenciesDisplayName.XAF=\u0641\u0631\u0646\u0643 \u0627\u0641\u0631\u064a\u0642\u064a
+currenciesDisplayName.KMF=\u0641\u0631\u0646\u0643 \u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631
+currenciesDisplayName.BRL=\u0631\u064a\u0627\u0644 \u0628\u0631\u0627\u0632\u064a\u0644\u064a
+currenciesDisplayName.CNY=\u064a\u0648\u0627\u0646 \u0635\u064a\u0646\u064a
+currenciesDisplayName.USD=\u062f\u0648\u0644\u0627\u0631 \u0623\u0645\u0631\u064a\u0643\u064a
+currenciesDisplayName.XXX=\u0628\u062f\u0648\u0646 \u0639\u0645\u0644\u0629
+currenciesDisplayName.MRO=\u0623\u0648\u0642\u064a\u0629 \u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0629
+currenciesDisplayName.EUR=\u064a\u0648\u0631\u0648
+currenciesDisplayName.TRY=\u0644\u064a\u0631\u0629 \u062a\u0631\u0643\u064a\u0629 \u062c\u062f\u064a\u062f\u0629
+currenciesDisplayName.GBP=\u062c\u0646\u064a\u0647 \u0633\u062a\u0631\u0644\u064a\u0646\u064a
+currenciesSymbol.OMR=\u0631.\u0639.\u200f
+currenciesSymbol.QAR=\u0631.\u0642.\u200f
+currenciesSymbol.INR=.\u200f\u0631.\u0647
+currenciesSymbol.KMF=.\u200f\u0641.\u062c.\u0642
currenciesSymbol.MAD=\u062f.\u0645.\u200f
-currenciesSymbol.AED=\u062f.\u0625.\u200f
+currenciesSymbol.SAR=\u0631.\u0633.\u200f
+currenciesSymbol.XAF=.\u200f\u0641.\u0627
+currenciesSymbol.SDP=\u062c.\u0633.\u200f
+currenciesSymbol.JOD=\u062f.\u0623.\u200f
+currenciesSymbol.IQD=\u062f.\u0639.\u200f
+currenciesSymbol.SYP=\u0644.\u0633.\u200f
currenciesSymbol.BHD=\u062f.\u0628.\u200f
-currenciesSymbol.QAR=\u0631.\u0642.\u200f
+currenciesSymbol.TND=\u062f.\u062a.\u200f
+currenciesSymbol.SDD=.\u200f\u062f.\u0633
+currenciesSymbol.EGP=\u062c.\u0645.\u200f
+currenciesSymbol.KWD=\u062f.\u0643.\u200f
+currenciesSymbol.CNY=.\u200f\u064a.\u0635
+currenciesSymbol.XXX=XXX\u200f
+currenciesSymbol.LBP=\u0644.\u0644.\u200f
+currenciesSymbol.BRL=.\u200f\u0631.\u0628
currenciesSymbol.DZD=\u062f.\u062c.\u200f
+currenciesSymbol.MRO=.\u200f\u0623.\u0645
currenciesSymbol.LYD=\u062f.\u0644.\u200f
-currenciesSymbol.SYP=\u0644.\u0633.\u200f
-currenciesSymbol.JOD=\u062f.\u0623.\u200f
-currenciesSymbol.IQD=\u062f.\u0639.\u200f
+currenciesSymbol.RUB=\u0631.\u0631.\u200f
currenciesSymbol.YER=\u0631.\u064a.\u200f
-currenciesSymbol.EGP=\u062c.\u0645.\u200f
-currenciesSymbol.OMR=\u0631.\u0639.\u200f
-currenciesSymbol.SAR=\u0631.\u0633.\u200f
-currenciesSymbol.SDP=\u062c.\u0633.\u200f
+currenciesSymbol.AED=\u062f.\u0625.\u200f
shortMonths=\u064a\u0646\u0627\u064a\u0631®\u0641\u0628\u0631\u0627\u064a\u0631®\u0645\u0627\u0631\u0633®\u0623\u0628\u0631\u064a\u0644®\u0645\u0627\u064a\u0648®\u064a\u0648\u0646\u064a\u0648®\u064a\u0648\u0644\u064a\u0648®\u0623\u063a\u0633\u0637\u0633®\u0633\u0628\u062a\u0645\u0628\u0631®\u0623\u0643\u062a\u0648\u0628\u0631®\u0646\u0648\u0641\u0645\u0628\u0631®\u062f\u064a\u0633\u0645\u0628\u0631®®
months=\u064a\u0646\u0627\u064a\u0631®\u0641\u0628\u0631\u0627\u064a\u0631®\u0645\u0627\u0631\u0633®\u0623\u0628\u0631\u064a\u0644®\u0645\u0627\u064a\u0648®\u064a\u0648\u0646\u064a\u0648®\u064a\u0648\u0644\u064a\u0648®\u0623\u063a\u0633\u0637\u0633®\u0633\u0628\u062a\u0645\u0628\u0631®\u0623\u0643\u062a\u0648\u0628\u0631®\u0646\u0648\u0641\u0645\u0628\u0631®\u062f\u064a\u0633\u0645\u0628\u0631®®
shortWeekdays=®\u062d®\u0646®\u062b®\u0631®\u062e®\u062c®\u0633®
@@ -116,17 +122,18 @@ territories.PW=\u0628\u0627\u0644\u0627\u0648
territories.DK=\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643
territories.DJ=\u062c\u064a\u0628\u0648\u062a\u064a
territories.PT=\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644
+territories.PS=\u0641\u0644\u0633\u0637\u064a\u0646
territories.DE=\u0627\u0644\u0645\u0627\u0646\u064a\u0627
territories.PL=\u0628\u0648\u0644\u0646\u062f\u0627
territories.PK=\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646
territories.PH=\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646
territories.PG=\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629
territories.CZ=\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643
-territories.PE=\u0628\u064a\u0631\u0648
territories.CY=\u0642\u0628\u0631\u0635
+territories.PE=\u0628\u064a\u0631\u0648
territories.CV=\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631
-territories.PA=\u0628\u0646\u0645\u0627
territories.CU=\u0643\u0648\u0628\u0627
+territories.PA=\u0628\u0646\u0645\u0627
territories.CR=\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627
territories.CO=\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627
territories.CN=\u0627\u0644\u0635\u064a\u0646
@@ -143,45 +150,45 @@ territories.BW=\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627
territories.BT=\u0628\u0648\u062a\u0627\u0646
territories.BS=\u0627\u0644\u0628\u0647\u0627\u0645\u0627
territories.BR=\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644
-territories.NZ=\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629
territories.BO=\u0628\u0648\u0644\u064a\u0641\u064a\u0627
+territories.NZ=\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629
territories.BN=\u0628\u0631\u0648\u0646\u0627\u064a
territories.BJ=\u0628\u0646\u064a\u0646
territories.BI=\u0628\u0648\u0631\u0648\u0646\u062f\u064a
territories.BH=\u0627\u0644\u0628\u062d\u0631\u064a\u0646
-territories.NR=\u0646\u0627\u0648\u0631\u0648
territories.BG=\u0628\u0644\u063a\u0627\u0631\u064a\u0627
+territories.NR=\u0646\u0627\u0648\u0631\u0648
territories.BF=\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648
-territories.NP=\u0627\u0644\u0646\u064a\u0628\u0627\u0644
territories.BE=\u0628\u0644\u062c\u064a\u0643\u0627
-territories.NO=\u0627\u0644\u0646\u0631\u0648\u064a\u062c
+territories.NP=\u0627\u0644\u0646\u064a\u0628\u0627\u0644
territories.BD=\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634
+territories.NO=\u0627\u0644\u0646\u0631\u0648\u064a\u062c
territories.BB=\u0628\u0631\u0628\u0627\u062f\u0648\u0633
territories.ZW=\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a
-territories.NL=\u0647\u0648\u0644\u0646\u062f\u0627
territories.BA=\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643
+territories.NL=\u0647\u0648\u0644\u0646\u062f\u0627
territories.NI=\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627
territories.NG=\u0646\u064a\u062c\u064a\u0631\u064a\u0627
territories.AZ=\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646
territories.NE=\u0627\u0644\u0646\u064a\u062c\u0631
territories.ZM=\u0632\u0627\u0645\u0628\u064a\u0627
-territories.AU=\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627
territories.NA=\u0646\u0627\u0645\u064a\u0628\u064a\u0627
+territories.AU=\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627
territories.AT=\u0627\u0644\u0646\u0645\u0633\u0627
territories.AR=\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646
-territories.MZ=\u0645\u0648\u0632\u0645\u0628\u064a\u0642
territories.AO=\u0627\u0646\u063a\u0648\u0644\u0627
+territories.MZ=\u0645\u0648\u0632\u0645\u0628\u064a\u0642
territories.MY=\u0645\u0627\u0644\u064a\u0632\u064a\u0627
-territories.MX=\u0627\u0644\u0645\u0643\u0633\u064a\u0643
territories.AM=\u0627\u0631\u0645\u064a\u0646\u064a\u0627
+territories.MX=\u0627\u0644\u0645\u0643\u0633\u064a\u0643
territories.MW=\u0645\u0644\u0627\u0648\u064a
territories.MV=\u0645\u0627\u0644\u062f\u064a\u0641
territories.ZA=\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627
territories.MU=\u0645\u0648\u0631\u064a\u0634\u0648\u0633
-territories.MT=\u0645\u0627\u0644\u0637\u0629
territories.AI=\u0627\u0644\u0628\u0627\u0646\u064a\u0627
-territories.MR=\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627
+territories.MT=\u0645\u0627\u0644\u0637\u0629
territories.AG=\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627
+territories.MR=\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627
territories.AF=\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646
territories.AE=\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629
territories.AD=\u0627\u0646\u062f\u0648\u0631\u0627
@@ -253,22 +260,22 @@ territories.TM=\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646
languages.es=\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629
languages.ku=\u0627\u0644\u0643\u0631\u062f\u064a\u0629
languages.eo=\u0627\u0633\u0628\u0631\u0627\u0646\u062a\u0648
-languages.ks=\u0627\u0644\u0643\u0627\u0634\u0645\u064a\u0631\u064a\u0629
languages.en=\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629
+languages.ks=\u0627\u0644\u0643\u0627\u0634\u0645\u064a\u0631\u064a\u0629
languages.el=\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629
languages.ko=\u0627\u0644\u0643\u0648\u0631\u064a\u0629
languages.km=\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629
languages.dz=\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629
languages.smi=\u0627\u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0633\u0627\u0645\u064a\u0629
-languages.dv=\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629
languages.syr=\u0627\u0644\u0633\u0631\u064a\u0627\u0646\u064a\u0629
+languages.dv=\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629
languages.pt=\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629
languages.ps=\u0627\u0644\u0628\u0634\u062a\u0648\u0646\u064a\u0629
languages.de=\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629
languages.pl=\u0627\u0644\u0628\u0648\u0644\u0648\u0646\u064a\u0629
languages.da=\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629
-languages.cop=\u0642\u0628\u0637\u064a\u0629
languages.ja=\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629
+languages.cop=\u0642\u0628\u0637\u064a\u0629
languages.vi=\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629
languages.cy=\u0627\u0644\u0648\u0644\u0632\u064a\u0629
languages.pa=\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629
@@ -284,8 +291,8 @@ languages.egy=\u0645\u0635\u0631\u064a\u0629\u060c \u0642\u062f\u064a\u0645\u062
languages.hy=\u0627\u0644\u0627\u0631\u0645\u0646\u064a\u0629
languages.bs=\u0627\u0644\u0628\u0648\u0633\u0646\u064a\u0629
languages.hu=\u0627\u0644\u0647\u0646\u063a\u0627\u0631\u064a\u0629
-languages.ht=\u0627\u0644\u0647\u0627\u064a\u062a\u064a\u0629
languages.bo=\u0627\u0644\u062a\u0628\u062a\u064a\u0629
+languages.ht=\u0627\u0644\u0647\u0627\u064a\u062a\u064a\u0629
languages.bn=\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629
languages.hr=\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629
languages.bg=\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629
@@ -298,8 +305,8 @@ languages.nl=\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629
languages.he=\u0627\u0644\u0639\u0628\u0631\u064a\u0629
languages.tl=\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629
languages.bal=\u0627\u0644\u0628\u0644\u0648\u0634\u064a\u0629
-languages.ne=\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629
languages.az=\u0627\u0630\u0631\u064a\u0629
+languages.ne=\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629
languages.th=\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629
languages.zh=\u0627\u0644\u0635\u064a\u0646\u064a\u0629
languages.ar=\u0627\u0644\u0639\u0631\u0628\u064a\u0629
@@ -313,19 +320,19 @@ languages.sv=\u0627\u0644\u0633\u0648\u064a\u062f\u064a\u0629
languages.af=\u0627\u0644\u0627\u0641\u0631\u064a\u0642\u064a\u0629
languages.mn=\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629
languages.sr=\u0627\u0644\u0635\u0631\u0628\u064a\u0629
-languages.sq=\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629
languages.ab=\u0627\u0644\u0627\u0628\u062e\u0627\u0632\u064a\u0629
+languages.sq=\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629
languages.aa=\u0627\u0644\u0627\u0641\u0627\u0631\u064a\u0629
languages.fr=\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629
languages.lv=\u0627\u0644\u0644\u0627\u062a\u0641\u064a\u0629
languages.lt=\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629
languages.ru=\u0627\u0644\u0631\u0648\u0633\u064a\u0629
-languages.afa=\u0627\u0641\u0631\u0648-\u0627\u0633\u064a\u0648\u064a\u0629
languages.fj=\u0627\u0644\u0641\u064a\u062c\u064a\u0629
+languages.afa=\u0627\u0641\u0631\u0648-\u0627\u0633\u064a\u0648\u064a\u0629
languages.fi=\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629
languages.ro=\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629
-languages.ber=\u0627\u0644\u0628\u0631\u0628\u0631\u064a\u0629
languages.arc=\u0627\u0644\u0627\u0631\u0627\u0645\u064a\u0629
+languages.ber=\u0627\u0644\u0628\u0631\u0628\u0631\u064a\u0629
languages.fa=\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629
languages.la=\u0627\u0644\u0644\u0627\u062a\u064a\u0646\u064a\u0629
languages.et=\u0627\u0633\u062a\u0648\u0646\u064a\u0629
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_JO.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_JO.properties
index 0dae110..e16164c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_JO.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_JO.properties
@@ -5,7 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4 #,##0.000;\u00a4 #,##0.000-
shortMonths=\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0634\u0628\u0627\u0637®\u0622\u0630\u0627\u0631®\u0646\u064a\u0633\u0627\u0646®\u0623\u064a\u0627\u0631®\u062d\u0632\u064a\u0631\u0627\u0646®\u062a\u0645\u0648\u0632®\u0622\u0628®\u0623\u064a\u0644\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644®®
months=\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0634\u0628\u0627\u0637®\u0622\u0630\u0627\u0631®\u0646\u064a\u0633\u0627\u0646®\u0623\u064a\u0627\u0631®\u062d\u0632\u064a\u0631\u0627\u0646®\u062a\u0645\u0648\u0632®\u0622\u0628®\u0623\u064a\u0644\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644®®
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_QA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_QA.properties
index f004e11..30061aa 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_QA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_QA.properties
@@ -5,5 +5,5 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4###0.00;-\u00a4###0.00
+currencyFormat=\u00a4#0.00;-\u00a4#0.00
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SA.properties
index 56b7a61..ebb48f6 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SA.properties
@@ -5,5 +5,5 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4###0.00;-\u00a4###0.00
+currencyFormat=\u00a4#0.00;-\u00a4#0.00
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SY.properties
index f4b23d2..f096477 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SY.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_SY.properties
@@ -5,7 +5,7 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4###0.00;-\u00a4###0.00
+currencyFormat=\u00a4#0.00;-\u00a4#0.00
shortMonths=\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0634\u0628\u0627\u0637®\u0622\u0630\u0627\u0631®\u0646\u064a\u0633\u0627\u0646®\u0646\u0648\u0627\u0631®\u062d\u0632\u064a\u0631\u0627\u0646®\u062a\u0645\u0648\u0632®\u0622\u0628®\u0623\u064a\u0644\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644®®
months=\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0634\u0628\u0627\u0637®\u0622\u0630\u0627\u0631®\u0646\u064a\u0633\u0627\u0646®\u0646\u0648\u0627\u0631®\u062d\u0632\u064a\u0631\u0627\u0646®\u062a\u0645\u0648\u0632®\u0622\u0628®\u0623\u064a\u0644\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644®\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a®\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644®®
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_TN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_TN.properties
index 0fccecd..32a12df 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_TN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_TN.properties
@@ -6,5 +6,5 @@
# This file was automatically generated by gnu.localegen from CLDR.
zeroDigit=0
-currencyFormat=\u00a4###0.00;-\u00a4###0.00
+currencyFormat=\u00a4#0.00;-\u00a4#0.00
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_YE.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_YE.properties
index 6fb3a8d..1cebfe4 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_YE.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_YE.properties
@@ -5,5 +5,5 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4###0.00;-\u00a4###0.00
+currencyFormat=\u00a4#0.00;-\u00a4#0.00
shortWeekdays=®\u0627\u0644\u0623\u062d\u062f®\u0627\u0644\u0627\u062b\u0646\u064a\u0646®\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621®\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621®\u0627\u0644\u062e\u0645\u064a\u0633®\u0627\u0644\u062c\u0645\u0639\u0629®\u0627\u0644\u0633\u0628\u062a®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_as_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_as_IN.properties
index e7fad8d..254c6ad 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_as_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_as_IN.properties
@@ -5,8 +5,9 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
+firstDayOfWeek=mon
shortDateFormat=d-M-yyyy
mediumDateFormat=dd-MM-yyyy
longDateFormat=d MMMM, yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az.properties
new file mode 100644
index 0000000..addff83
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az.properties
@@ -0,0 +1,18 @@
+# LocaleInformation_az.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+decimalSeparator=,
+groupingSeparator=\u00a0
+currenciesDisplayName.AZM=Manat
+currenciesSymbol.AZM=man.
+shortMonths=yan®fev®mar®apr®may®iyn®iyl®avq®sen®okt®noy®dek®®
+months=Yanvar®Fevral®Mart®Aprel®May®\u0130yun®\u0130yul®Avqust®Sentyabr®Oktyabr®Noyabr®Dekabr®®
+shortWeekdays=®B.®B.e.®\u00c7.a.®\u00c7.®C.a.®C.®\u015e.®
+weekdays=®bazar®bazar ert\u0259si®\u00e7\u0259r\u015f\u0259nb\u0259 ax\u015fam®\u00e7\u0259r\u015f\u0259nb\u0259®c\u00fcm\u0259 ax\u015fam\u0131®c\u00fcm\u0259®\u015f\u0259nb\u0259®
+eras=e.\u0259.®b.e.®
+territories.AZ=Az\u0259rbaycan
+languages.az=az\u0259rbaycanca
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties
index 8472b7c..8e7e207 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_az_Cyrl.properties
@@ -5,9 +5,9 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=\u00a0
-currenciesDisplayName.AZM=AZM
+currenciesDisplayName.AZM=\u043c\u0430\u043d\u0430\u0442
currenciesSymbol.AZM=\u043c\u0430\u043d.
+months=\u0458\u0430\u043d\u0432\u0430\u0440®\u0444\u0435\u0432\u0440\u0430\u043b®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440\u0435\u043b®\u043c\u0430\u0439®\u0438\u0458\u0443\u043d®\u0438\u0458\u0443\u043b®\u0430\u0432\u0433\u0443\u0441\u0442®\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440®\u043e\u043a\u0442\u0458\u0430\u0431\u0440®\u043d\u043e\u0458\u0430\u0431\u0440®\u0434\u0435\u043a\u0430\u0431\u0440®®
+weekdays=®\u0431\u0430\u0437\u0430\u0440®\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438®\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b®\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9®\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b®\u04b9\u04af\u043c\u04d9®\u0448\u04d9\u043d\u0431\u04d9®
territories.AZ=\u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d
languages.az=\u0410\u0437\u04d9\u0440\u0431\u0430\u0458\u04b9\u0430\u043d
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be.properties
index ac885c1..feea4f3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be.properties
@@ -8,7 +8,15 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.BYB=BYB
+currenciesDisplayName.INR=\u0456\u043d\u0434\u044b\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0456\u044f
+currenciesDisplayName.RUB=\u0440\u0443\u0441\u043a\u0456 \u0440\u0443\u0431\u0435\u043b\u044c
+currenciesDisplayName.JPY=\u044f\u043f\u043e\u043d\u0441\u043a\u0430\u044f \u0456\u0435\u043d\u0430
+currenciesDisplayName.BRL=\u0431\u0440\u0430\u0437\u0456\u043b\u044c\u0441\u043a\u0456 \u0440\u044d\u0430\u043b
+currenciesDisplayName.CNY=\u043a\u0456\u0442\u0430\u0439\u0441\u043a\u0456 \u044e\u0430\u043d\u044c Renminbi
+currenciesDisplayName.USD=\u0434\u043e\u043b\u0430\u0440 \u0417\u0428\u0410
+currenciesDisplayName.BYR=\u0431\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0456 \u0440\u0443\u0431\u0435\u043b\u044c
+currenciesDisplayName.EUR=\u0435\u045e\u0440\u0430
+currenciesDisplayName.GBP=\u0430\u043d\u0433\u043b\u0456\u0439\u0441\u043a\u0456 \u0444\u0443\u043d\u0442
currenciesSymbol.BYB=\u0420\u0443\u0431
shortMonths=\u0441\u0442\u0443®\u043b\u044e\u0442®\u0441\u0430\u043a®\u043a\u0440\u0430®\u043c\u0430\u0439®\u0447\u044d\u0440®\u043b\u0456\u043f®\u0436\u043d\u0456®\u0432\u0435\u0440®\u043a\u0430\u0441®\u043b\u0456\u0441®\u0441\u043d\u0435®®
months=\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c®\u043b\u044e\u0442\u044b®\u0441\u0430\u043a\u0430\u0432\u0456\u043a®\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a®\u043c\u0430\u0439®\u0447\u044d\u0440\u0432\u0435\u043d\u044c®\u043b\u0456\u043f\u0435\u043d\u044c®\u0436\u043d\u0456\u0432\u0435\u043d\u044c®\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c®\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a®\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434®\u0441\u043d\u0435\u0436\u0430\u043d\u044c®®
@@ -24,5 +32,26 @@ shortTimeFormat=HH.mm
mediumTimeFormat=HH.mm.ss
longTimeFormat=HH.mm.ss z
fullTimeFormat=HH.mm.ss z
+territories.FR=\u0424\u0440\u0430\u043d\u0446\u044b\u044f
territories.BY=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c
+territories.IN=\u0406\u043d\u0434\u044b\u044f
+territories.CN=\u041a\u0456\u0442\u0430\u0439
+territories.DE=\u0413\u0435\u0440\u043c\u0430\u043d\u0456\u044f
+territories.GB=\u0412\u0435\u043b\u0456\u043a\u0430\u0431\u0440\u044b\u0442\u0430\u043d\u0456\u044f
+territories.BR=\u0411\u0440\u0430\u0437\u0456\u043b\u0456\u044f
+territories.RU=\u0420\u0430\u0441\u0456\u044f
+territories.JP=\u042f\u043f\u043e\u043d\u0456\u044f
+territories.US=\u0417\u043b\u0443\u0447\u0430\u043d\u044b\u044f \u0428\u0442\u0430\u0442\u044b
+territories.IT=\u0406\u0442\u0430\u043b\u0456\u044f
+languages.zh=\u043a\u0456\u0442\u0430\u0439\u0441\u043a\u0456
+languages.en=\u0430\u043d\u0433\u043b\u0456\u0439\u0441\u043a\u0456
+languages.ru=\u0440\u0443\u0441\u043a\u0456
+languages.hi=\u0445\u0456\u043d\u0434\u0437\u0456
+languages.ar=\u0430\u0440\u0430\u0431\u0441\u043a\u0456
+languages.it=\u0456\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0456
languages.be=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0456
+languages.fr=\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0456
+languages.de=\u043d\u044f\u043c\u0435\u0446\u043a\u0456
+languages.es=\u0456\u0441\u043f\u0430\u043d\u0441\u043a\u0456
+languages.ja=\u044f\u043f\u043e\u043d\u0441\u043a\u0456
+languages.pt=\u043f\u0430\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0456
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be_BY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be_BY.properties
index 435e369..2095cf1 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be_BY.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_be_BY.properties
@@ -5,4 +5,4 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4#,##0;-\u00a4#,##0
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bg.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bg.properties
index 0f4396a4..9ac9b72 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bg.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bg.properties
@@ -9,160 +9,126 @@ decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
currenciesDisplayName.YDD=\u0419\u0435\u043c\u0435\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.GRN=\u0413\u0440\u044a\u0446\u043a\u0430 \u043d\u043e\u0432\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
-currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.TWD=\u0422\u0430\u0439\u0432\u0430\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.LKR=\u0428\u0440\u0438\u043b\u0430\u043d\u043a\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
+currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.BYB=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u0431\u043b\u0430 (1994-1999)
-currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043c\u043e\u043d\u0438
+currenciesDisplayName.LKR=\u0428\u0440\u0438\u043b\u0430\u043d\u043a\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.RWF=\u0420\u0443\u0430\u043d\u0434\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ERN=\u0415\u0440\u0438\u0442\u0440\u0435\u0439\u0441\u043a\u0430 \u043d\u0430\u043a\u0444\u0430
-currenciesDisplayName.TJR=\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
+currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043c\u043e\u043d\u0438
currenciesDisplayName.SDP=\u0421\u0443\u0434\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.GRD=\u0413\u0440\u044a\u0446\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.TJR=\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
+currenciesDisplayName.ERN=\u0415\u0440\u0438\u0442\u0440\u0435\u0439\u0441\u043a\u0430 \u043d\u0430\u043a\u0444\u0430
currenciesDisplayName.AFN=\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0430\u0444\u0433\u0430\u043d
+currenciesDisplayName.GRD=\u0413\u0440\u044a\u0446\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
currenciesDisplayName.IEP=\u0418\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.ARS=\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
-currenciesDisplayName.MQF=\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a\u0430 - \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ARP=\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1983-1985)
currenciesDisplayName.SDD=\u0421\u0443\u0434\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.ARP=\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1983-1985)
currenciesDisplayName.GEL=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438 \u043b\u0430\u0440\u0438
currenciesDisplayName.AFA=\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0430\u0444\u0433\u0430\u043d (1927-2002)
currenciesDisplayName.CRC=\u041a\u043e\u0441\u0442\u0430\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u043a\u043e\u043b\u043e\u043d
currenciesDisplayName.FKP=\u0424\u043e\u043b\u043a\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.EEK=\u0415\u0441\u0442\u043e\u043d\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e \u043b\u0435\u0443
currenciesDisplayName.HKD=\u0425\u043e\u043d\u0433\u043a\u043e\u043d\u0433\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e \u043b\u0435\u0443
currenciesDisplayName.IQD=\u0418\u0440\u0430\u043a\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SCR=\u0421\u0435\u0439\u0448\u0435\u043b\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.VUV=\u0412\u0430\u043d\u0443\u0430\u0442\u0443 - \u0432\u0430\u0442\u0443
-currenciesDisplayName.KPW=\u0421\u0435\u0432\u0435\u0440\u043d\u043e\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438 \u0432\u043e\u043d
currenciesDisplayName.DKK=\u0414\u0430\u0442\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.KPW=\u0421\u0435\u0432\u0435\u0440\u043d\u043e\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438 \u0432\u043e\u043d
currenciesDisplayName.IDR=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.IDN=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.LVR=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
+currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.AED=\u041e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0430\u0440\u0430\u0431\u0441\u043a\u0438 \u0435\u043c\u0438\u0440\u0441\u0442\u0432\u0430-\u0434\u0438\u0440\u0445\u0430\u043c
-currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0438 \u043b\u0430\u0442
currenciesDisplayName.BWP=\u0411\u043e\u0442\u0441\u0443\u0430\u043d\u0441\u043a\u0430 \u043f\u0443\u043b\u0430
+currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0438 \u043b\u0430\u0442
currenciesDisplayName.RUR=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430 (1991-1998)
-currenciesDisplayName.FJP=\u0424\u0438\u0434\u0436\u0438 - \u043b\u0438\u0440\u0430
-currenciesDisplayName.NIG=\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430\u043d\u0441\u043a\u0430 \u0437\u043b\u0430\u0442\u043d\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
-currenciesDisplayName.MOP=\u041c\u0430\u043a\u0430\u043e - \u043f\u0430\u0442\u0430\u043a\u0430
-currenciesDisplayName.GPF=\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.FJD=\u0424\u0438\u0434\u0436\u0438 - \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.ADP=\u0410\u043d\u0434\u043e\u0440\u0441\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
+currenciesDisplayName.FJD=\u0424\u0438\u0434\u0436\u0438 - \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MOP=\u041c\u0430\u043a\u0430\u043e - \u043f\u0430\u0442\u0430\u043a\u0430
currenciesDisplayName.RUB=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
currenciesDisplayName.CDF=\u041a\u043e\u043d\u0433\u043e\u0430\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.NIC=\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430\u043d\u0441\u043a\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
currenciesDisplayName.DJF=\u0414\u0436\u0438\u0431\u0443\u0442\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.LIF=\u041b\u0438\u0445\u0442\u0435\u043d\u0449\u0430\u0439\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u0443\u043c
currenciesDisplayName.SBD=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 - \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ADD=\u0410\u043d\u0434\u043e\u0440\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.TTO=\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0442 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e - \u0441\u0442\u0430\u0440 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u0443\u043c
currenciesDisplayName.ECS=\u0415\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u043a\u043e \u0441\u0443\u043a\u0440\u0435
-currenciesDisplayName.THB=\u0422\u0430\u0439\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0431\u0430\u0442
currenciesDisplayName.PHP=\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
+currenciesDisplayName.THB=\u0422\u0430\u0439\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0431\u0430\u0442
currenciesDisplayName.LUF=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.FIN=\u0424\u0438\u043d\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430 (1860-1962)
currenciesDisplayName.FIM=\u0424\u0438\u043d\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.TTD=\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0442 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e - \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.SZL=\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434\u0441\u043a\u0438 \u043b\u0438\u043b\u0430\u043d\u0433\u0435\u043d\u0438
currenciesDisplayName.MNT=\u041c\u043e\u043d\u0433\u043e\u043b\u0441\u043a\u0438 \u0442\u0443\u0433\u0440\u0438\u043a
-currenciesDisplayName.UAK=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438 \u043a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446
currenciesDisplayName.SAR=\u0421\u0430\u0443\u0434\u0438\u0442\u0441\u043a\u043e\u0430\u0440\u0430\u0431\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
+currenciesDisplayName.UAK=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438 \u043a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446
currenciesDisplayName.UAH=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0430 \u0445\u0440\u0438\u0432\u043d\u044f
currenciesDisplayName.HUF=\u0423\u043d\u0433\u0430\u0440\u0441\u043a\u0438 \u0444\u043e\u0440\u0438\u043d\u0442
-currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.COP=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e
+currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.PTE=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.AOS=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.UYU=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.AOR=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u043a\u0432\u0430\u043d\u0446\u0430 (1995-1999)
+currenciesDisplayName.UYU=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.GBP=\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.BUR=\u0411\u0438\u0440\u043c\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.ZRZ=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u0437\u0430\u0439\u0440\u0435
-currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.BIF=\u0411\u0443\u0440\u0443\u043d\u0434\u0438\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.LTL=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438 \u043b\u0438\u0442\u0430\u0437
+currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
+currenciesDisplayName.ZRZ=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u0437\u0430\u0439\u0440\u0435
currenciesDisplayName.AON=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u043a\u0432\u0430\u043d\u0446\u0430 (1990-2000)
-currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1975-1993)
-currenciesDisplayName.SML=\u0421\u0430\u043d \u041c\u0430\u0440\u0438\u043d\u043e - \u043b\u0438\u0440\u0430
-currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a\u0441\u043a\u0438 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.LTL=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438 \u043b\u0438\u0442\u0430\u0437
currenciesDisplayName.KZT=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\u0441\u043a\u043e \u0442\u0435\u043d\u0433\u0435
-currenciesDisplayName.KZR=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
+currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a\u0441\u043a\u0438 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1975-1993)
currenciesDisplayName.AOK=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u043a\u0432\u0430\u043d\u0446\u0430 (1977-1990)
currenciesDisplayName.XFO=\u0424\u0440\u0435\u043d\u0441\u043a\u0438 \u0437\u043b\u0430\u0442\u0435\u043d \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.PGK=\u041f\u0430\u043f\u0443\u0430-\u043d\u043e\u0432\u043e\u0433\u0432\u0438\u043d\u0435\u0439\u0441\u043a\u0430 \u043a\u0438\u043d\u0430
currenciesDisplayName.SYP=\u0421\u0438\u0440\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
-currenciesDisplayName.NGP=\u041d\u0438\u0433\u0435\u0440\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.MZE=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.MMX=\u041c\u0438\u044f\u043d\u043c\u0430\u0440\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ZRN=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u043d\u043e\u0432\u043e \u0437\u0430\u0439\u0440\u0435
+currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.NGN=\u041d\u0438\u0433\u0435\u0440\u0438\u0439\u0441\u043a\u0430 \u043d\u0430\u0439\u0440\u0430
-currenciesDisplayName.PSP=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.CNY=\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438 \u0440\u0435\u043d\u043c\u0438\u043d\u0431\u0438 \u044e\u0430\u043d
+currenciesDisplayName.ZRN=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u043d\u043e\u0432\u043e \u0437\u0430\u0439\u0440\u0435
currenciesDisplayName.AOA=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u043a\u0432\u0430\u043d\u0446\u0430
-currenciesDisplayName.GNI=\u0413\u0432\u0438\u043d\u0435\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a (1960-1972)
+currenciesDisplayName.CNY=\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438 \u0440\u0435\u043d\u043c\u0438\u043d\u0431\u0438 \u044e\u0430\u043d
currenciesDisplayName.MAF=\u041c\u0430\u0440\u043e\u043a\u0430\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.GNF=\u0413\u0432\u0438\u043d\u0435\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u0440\u0445\u0430\u043c
currenciesDisplayName.HTG=\u0425\u0430\u0438\u0442\u0441\u043a\u0438 \u0433\u0443\u0440\u0434
+currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u0440\u0445\u0430\u043c
+currenciesDisplayName.TRY=\u041d\u043e\u0432\u0430 \u0442\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.MMK=\u041c\u0438\u044f\u043d\u043c\u0430\u0440\u0441\u043a\u0438 (\u0411\u0438\u0440\u043c\u0430) \u043a\u0438\u044f\u0442
currenciesDisplayName.MYR=\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u0439\u0441\u043a\u0438 \u0440\u0438\u043d\u0433\u0438\u0442
-currenciesDisplayName.BTR=\u0411\u0443\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.XEU=\u0415\u043a\u0443 \u043d\u0430 \u0415\u0418\u041e
currenciesDisplayName.LSL=\u041b\u0435\u0441\u043e\u0442\u0441\u043a\u043e \u043b\u043e\u0442\u0438
-currenciesDisplayName.SLL=\u0421\u0438\u0435\u0440\u0430\u043b\u0435\u043e\u043d\u0441\u043a\u043e \u043b\u0435\u043e\u043d\u0435
+currenciesDisplayName.XEU=\u0415\u043a\u0443 \u043d\u0430 \u0415\u0418\u041e
currenciesDisplayName.BHD=\u0411\u0430\u0445\u0440\u0435\u0439\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.SLL=\u0421\u0438\u0435\u0440\u0430\u043b\u0435\u043e\u043d\u0441\u043a\u043e \u043b\u0435\u043e\u043d\u0435
currenciesDisplayName.BTN=\u0411\u0443\u0442\u0430\u043d\u0441\u043a\u0438 \u043d\u0433\u0443\u043b\u0442\u0440\u0443\u043c
currenciesDisplayName.TRL=\u0422\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.KMF=\u041a\u043e\u043c\u043e\u0440\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.GAF=\u0413\u0430\u0431\u043e\u043d - CFA \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.CZK=\u0427\u0435\u0448\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.ANG=\u0410\u043d\u0442\u0438\u043b\u0441\u043a\u0438 \u0433\u0443\u043b\u0434\u0435\u043d
-currenciesDisplayName.GMP=\u0413\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.BGX=\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043b\u0435\u0432
+currenciesDisplayName.CZK=\u0427\u0435\u0448\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.AZM=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u043a\u0438 \u043c\u0430\u043d\u0430\u0442
currenciesDisplayName.KYD=\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 - \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.GMD=\u0413\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0438 \u0434\u0430\u043b\u0430\u0441\u0438
-currenciesDisplayName.BGO=\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u043b\u0435\u0432 (1879-1952)
-currenciesDisplayName.BGN=BGN
+currenciesDisplayName.BGN=\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u043b\u0435\u0432
currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.BGM=\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u0441\u043e\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0435\u0432
-currenciesDisplayName.BGL=BGL
currenciesDisplayName.VEB=\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u0441\u043a\u0438 \u0431\u043e\u043b\u0438\u0432\u0430\u0440
-currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u0441\u0440\u0435\u0431\u044a\u0440\u043d\u043e \u043f\u0435\u0441\u043e (1861-1992)
currenciesDisplayName.ILS=\u0418\u0437\u0440\u0430\u0435\u043b\u0441\u043a\u0438 \u043d\u043e\u0432 \u0448\u0435\u043a\u0435\u043b
+currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u0441\u0440\u0435\u0431\u044a\u0440\u043d\u043e \u043f\u0435\u0441\u043e (1861-1992)
currenciesDisplayName.PES=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043b
-currenciesDisplayName.BSP=\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u043d\u043e\u0432\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.GYD=\u0413\u0430\u044f\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u043d\u043e\u0432\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.ILP=\u0418\u0437\u0440\u0430\u0435\u043b\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.CYP=\u041a\u0438\u043f\u044a\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.SKK=\u0421\u043b\u043e\u0432\u0430\u0448\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.CYP=\u041a\u0438\u043f\u044a\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.PEN=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u043a\u0438 \u043d\u043e\u0432 \u0441\u043e\u043b
-currenciesDisplayName.ILL=\u0418\u0437\u0440\u0430\u0435\u043b\u0441\u043a\u0438 \u0448\u0435\u043a\u0435\u043b
currenciesDisplayName.LRD=\u041b\u0438\u0431\u0435\u0440\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.AMD=\u0410\u0440\u043c\u0435\u043d\u0441\u043a\u0438 \u0434\u0440\u0430\u043c
currenciesDisplayName.BSD=\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.GLK=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.HRK=\u0425\u044a\u0440\u0432\u0430\u0442\u0441\u043a\u0430 \u043a\u0443\u043d\u0430
-currenciesDisplayName.MKN=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0434\u0435\u043d\u0430\u0440 (1992-1993)
-currenciesDisplayName.ALX=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.CLP=\u0427\u0438\u043b\u0438\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.HRD=\u0425\u044a\u0440\u0432\u0430\u0442\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.ALV=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u0432\u0430\u043b\u0443\u0442\u0435\u043d \u043b\u0435\u043a
currenciesDisplayName.XPF=\u0424\u0440\u0435\u043d\u0441\u043a\u043e\u043f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.FRF=\u0424\u0440\u0435\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MWP=\u041c\u0430\u043b\u0430\u0432\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.MKD=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0434\u0435\u043d\u0430\u0440
-currenciesDisplayName.TPP=\u0422\u0438\u043c\u043e\u0440\u0441\u043a\u0430 \u043f\u0430\u0442\u0430\u043a\u0430
currenciesDisplayName.ALL=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u043b\u0435\u043a
-currenciesDisplayName.CLE=\u0427\u0438\u043b\u0438\u0439\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.ALK=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u043b\u0435\u043a (1946-1961)
currenciesDisplayName.MWK=\u041c\u0430\u043b\u0430\u0432\u0438\u0439\u0441\u043a\u0430 \u043a\u0432\u0430\u0447\u0430
currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b\u0441\u043a\u0438 \u0440\u0435\u0430\u043b
currenciesDisplayName.TPE=\u0422\u0438\u043c\u043e\u0440\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
@@ -179,30 +145,22 @@ currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438
currenciesDisplayName.JPY=\u042f\u043f\u043e\u043d\u0441\u043a\u0430 \u0439\u0435\u043d\u0430
currenciesDisplayName.XOF=\u0411\u0435\u043d\u0438\u043d - CFA \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.MVR=\u041c\u0430\u043b\u0434\u0438\u0432\u0441\u043a\u0430 \u0440\u0443\u0444\u0438\u044f
-currenciesDisplayName.MVP=\u041c\u0430\u043b\u0434\u0438\u0432\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f - \u041c\u0430\u043b\u0434\u0438\u0432\u0438
currenciesDisplayName.BEF=\u0411\u0435\u043b\u0433\u0438\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.TOP=\u0422\u043e\u043d\u0433\u0430 - \u043f\u0430 \u0430\u043d\u0433\u0430
currenciesDisplayName.BEC=\u0411\u0435\u043b\u0433\u0438\u0439\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c)
-currenciesDisplayName.CKD=\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0443\u043a-\u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.SUR=\u0421\u044a\u0432\u0435\u0442\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430
-currenciesDisplayName.RON=\u0420\u0443\u043c\u044a\u043d\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u043b\u0435\u044f
currenciesDisplayName.ROL=\u0420\u0443\u043c\u044a\u043d\u0441\u043a\u0430 \u043b\u0435\u044f
-currenciesDisplayName.SUN=\u0421\u044a\u0432\u0435\u0442\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u0431\u043b\u0430
currenciesDisplayName.BDT=\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448\u043a\u0430 \u0442\u0430\u043a\u0430
currenciesDisplayName.AWG=\u0410\u0440\u0443\u0431\u0441\u043a\u0438 \u0433\u0438\u043b\u0434\u0435\u0440 - \u043e. \u0410\u0440\u0443\u0431\u0430
-currenciesDisplayName.VNS=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0434\u043e\u043d\u0433
currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0436\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.VNN=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u043d\u043e\u0432 \u0434\u043e\u043d\u0433
currenciesDisplayName.MUR=\u041c\u0430\u0432\u0440\u0438\u0446\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.ZAR=\u042e\u0436\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0440\u0430\u043d\u0434
currenciesDisplayName.SHP=\u0421\u0432\u0435\u0442\u0430 \u0415\u043b\u0435\u043d\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.ZAP=\u042e\u0436\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.XAU=\u0417\u043b\u0430\u0442\u043e
currenciesDisplayName.ZAL=\u042e\u0436\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0440\u0430\u043d\u0434 (\u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432)
currenciesDisplayName.VND=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043d\u0433
currenciesDisplayName.TZS=\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.GIP=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.ZMP=\u0417\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.TND=\u0422\u0443\u043d\u0438\u0437\u0438\u0439\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.CVE=\u041a\u0430\u0431\u043e \u0412\u0435\u0440\u0434\u0435 \u0435\u0441\u043a\u0443\u0434\u043e
currenciesDisplayName.UGX=\u0423\u0433\u0430\u043d\u0434\u0438\u0439\u0441\u043a\u0438 \u043d\u043e\u0432 \u0448\u0438\u043b\u0438\u043d\u0433
@@ -210,71 +168,51 @@ currenciesDisplayName.ZMK=\u0417\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0430
currenciesDisplayName.JOD=\u0419\u043e\u0440\u0434\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.XAF=\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e - CFA - \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.LBP=\u041b\u0438\u0432\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.VAL=\u0412\u0430\u0442\u0438\u043a\u0430\u043d\u0430 - \u043b\u0438\u0440\u0430
currenciesDisplayName.UGS=\u0423\u0433\u0430\u043d\u0434\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433 (1966-1987)
-currenciesDisplayName.STE=\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438 - \u0435\u0441\u043a\u0443\u0434\u043e
currenciesDisplayName.STD=\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438 - \u0434\u043e\u0431\u0440\u0430
currenciesDisplayName.WST=\u0421\u0430\u043c\u043e\u0430 - \u0442\u0430\u043b\u0430
currenciesDisplayName.KHR=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430\u043d\u0441\u043a\u0438 \u0440\u0438\u0435\u043b
-currenciesDisplayName.DOP=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.EUR=\u0415\u0432\u0440\u043e
-currenciesDisplayName.LNR=\u0421\u0435\u0439\u043b\u043e\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.WSP=\u0421\u0430\u043c\u043e\u0430 - \u043b\u0438\u0440\u0430
-currenciesDisplayName.KHO=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430\u043d\u0441\u043a\u0438 \u0441\u0442\u0430\u0440 \u0440\u0438\u0435\u043b
-currenciesDisplayName.MHD=\u041c\u0430\u0440\u0448\u0430\u043b\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438-\u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.DOP=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.BOP=\u0411\u043e\u043b\u0438\u0432\u0438\u0439\u0441\u043a\u043e \u043f\u0435\u0441\u043e
-currenciesDisplayName.NZP=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.MTL=\u041c\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
+currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u043a\u043e \u043f\u0435\u0441\u043e
currenciesDisplayName.TMM=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u043c\u0430\u043d\u0430\u0442
-currenciesDisplayName.BOL=\u0411\u043e\u043b\u0438\u0432\u0438\u0439\u0441\u043a\u043e \u0431\u043e\u043b\u0438\u0432\u0438\u0430\u043d\u043e (1863-1962)
-currenciesDisplayName.GHP=\u0413\u0430\u043d\u0430\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.SSP=\u0428\u043e\u0442\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.AUP=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.GHO=\u0413\u0430\u043d\u0430\u0439\u0441\u043a\u0438 \u0441\u0442\u0430\u0440\u0438 \u0441\u0435\u0434\u0438
currenciesDisplayName.SGD=\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.NZD=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.USD=\u0421\u0410\u0429 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.BOB=\u0411\u043e\u043b\u0438\u0432\u0438\u0439\u0441\u043a\u043e \u0431\u043e\u043b\u0438\u0432\u0438\u0430\u043d\u043e
currenciesDisplayName.HNL=\u0425\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u043a\u0430 \u043b\u0435\u043c\u043f\u0438\u0440\u0430
-currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
+currenciesDisplayName.BOB=\u0411\u043e\u043b\u0438\u0432\u0438\u0439\u0441\u043a\u043e \u0431\u043e\u043b\u0438\u0432\u0438\u0430\u043d\u043e
currenciesDisplayName.PAB=\u041f\u0430\u043d\u0430\u043c\u0441\u043a\u0438 \u0431\u0430\u043b\u0431\u043e\u0430
+currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.GTQ=\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0441\u043a\u0438 \u043a\u0432\u0435\u0442\u0437\u0430\u043b
-currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.GHC=\u0413\u0430\u043d\u0430\u0439\u0441\u043a\u0438 \u0441\u0435\u0434\u0438
-currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f
currenciesDisplayName.NAD=\u041d\u0430\u043c\u0438\u0431\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f
+currenciesDisplayName.GHC=\u0413\u0430\u043d\u0430\u0439\u0441\u043a\u0438 \u0441\u0435\u0434\u0438
+currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.KGS=\u041a\u0438\u0440\u0433\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043c
currenciesDisplayName.MGF=\u041c\u0430\u043b\u0433\u0430\u0448\u043a\u0438 \u0444\u0440\u0430\u043d\u043a - \u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
-currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0435\u0439\u0434\u043e\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.CHF=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0435\u0439\u0434\u043e\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.PYG=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\u0441\u043a\u043e \u0433\u0443\u0430\u0440\u0430\u043d\u0438
-currenciesDisplayName.JMP=\u042f\u043c\u0430\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.PLZ=\u041f\u043e\u043b\u0441\u043a\u0430 \u0437\u043b\u043e\u0442\u0430 (1950-1995)
-currenciesDisplayName.PLX=\u041f\u043e\u043b\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.YER=\u0419\u0435\u043c\u0435\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.ATS=\u0410\u0432\u0441\u0442\u0440\u0438\u0439\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
-currenciesDisplayName.ETD=\u0415\u0442\u0438\u043e\u043f\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.LYP=\u041b\u0438\u0431\u0438\u0439\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.ETB=\u0415\u0442\u0438\u043e\u043f\u0441\u043a\u0438 \u0431\u0438\u0440
currenciesDisplayName.BND=\u0411\u0440\u0443\u043d\u0435\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.DZF=\u0410\u043b\u0436\u0438\u0440\u0441\u043a\u0438 \u043d\u043e\u0432 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.JMD=\u042f\u043c\u0430\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.PLN=\u041f\u043e\u043b\u0441\u043a\u0430 \u0437\u043b\u043e\u0442\u0430
currenciesDisplayName.DZD=\u0410\u043b\u0436\u0438\u0440\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.ISK=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.SRG=\u0421\u0443\u0440\u0438\u043d\u0430\u043c\u0441\u043a\u0438 \u0433\u0438\u043b\u0434\u0435\u0440
-currenciesDisplayName.BZH=\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0438 \u0445\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.LYD=\u041b\u0438\u0431\u0438\u0439\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.BAN=\u0411\u043e\u0441\u043d\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430-\u043d\u043e\u0432 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.BAM=\u0411\u043e\u0441\u043d\u0435\u043d\u0441\u043a\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.BZD=\u0411\u0435\u043b\u0438\u0437\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.BAM=\u0411\u043e\u0441\u043d\u0435\u043d\u0441\u043a\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.ESP=\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
-currenciesDisplayName.KRW=\u041a\u041d\u0414\u0420 \u0432\u043e\u043d
currenciesDisplayName.NLG=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0433\u0443\u043b\u0434\u0435\u043d
+currenciesDisplayName.KRW=\u041a\u041d\u0414\u0420 \u0432\u043e\u043d
currenciesDisplayName.MRO=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430 \u043e\u0433\u0438\u044f
-currenciesDisplayName.BMP=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.BAD=\u0411\u043e\u0441\u043d\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430-\u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.ZWD=\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0438\u0439\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
@@ -283,293 +221,121 @@ currenciesDisplayName.BYR=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430
currenciesDisplayName.IRR=\u0418\u0440\u0430\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.PKR=\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.BMD=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.BYL=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u043b\u0430 (1992-1994)
-currenciesDisplayName.CSC=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0448\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesSymbol.YDD=YDD
-currenciesSymbol.GRN=GRN
+currenciesSymbol.BGL=\u043b\u0432
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.TWD=NT$
currenciesSymbol.LKR=SL Re
-currenciesSymbol.BYB=BYB
-currenciesSymbol.TJS=TJS
-currenciesSymbol.RWF=RWF
-currenciesSymbol.ERN=ERN
-currenciesSymbol.TJR=TJR
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GRD=GRD
-currenciesSymbol.AFN=Af
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.MQF=MQF
-currenciesSymbol.ARP=ARP
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.AFA=AFA
-currenciesSymbol.CRC=C
-currenciesSymbol.FKP=FKP
-currenciesSymbol.EEK=EEK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.HKD=HK$
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.SCR=SR
-currenciesSymbol.VUV=VT
-currenciesSymbol.KPW=KPW
-currenciesSymbol.DKK=DKr
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
currenciesSymbol.IDR=Rp
-currenciesSymbol.IDN=IDN
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.LVR=LVR
-currenciesSymbol.AED=AED
-currenciesSymbol.LVL=LVL
-currenciesSymbol.BWP=BWP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.MOP=MOP
-currenciesSymbol.GPF=GPF
-currenciesSymbol.FJD=F$
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUB=RUB
-currenciesSymbol.CDF=CDF
-currenciesSymbol.NIC=NIC
-currenciesSymbol.DJF=DF
-currenciesSymbol.LIF=LIF
-currenciesSymbol.UZS=UZS
+currenciesSymbol.RUB=\u0420\u0443\u0431.
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.ADD=ADD
-currenciesSymbol.TTO=TTO
-currenciesSymbol.ECS=ECS
-currenciesSymbol.THB=THB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.LUF=LUF
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.MNT=Tug
-currenciesSymbol.UAK=UAK
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.UAH=UAH
-currenciesSymbol.HUF=Ft
-currenciesSymbol.QAR=QR
-currenciesSymbol.COP=Col$
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOS=AOS
+currenciesSymbol.FJD=F$
currenciesSymbol.UYU=Ur$
-currenciesSymbol.AOR=AOR
-currenciesSymbol.BUR=BUR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.INR=INR
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.LTL=LTL
-currenciesSymbol.AON=AON
-currenciesSymbol.UYP=UYP
-currenciesSymbol.SML=SML
-currenciesSymbol.MZM=Mt
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.AOK=AOK
-currenciesSymbol.XFO=XFO
-currenciesSymbol.PGK=PGK
-currenciesSymbol.SYP=LS
-currenciesSymbol.OMR=RO
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MZE=MZE
-currenciesSymbol.MMX=MMX
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.NGN=NGN
-currenciesSymbol.PSP=PSP
-currenciesSymbol.CNY=Y
-currenciesSymbol.AOA=AOA
-currenciesSymbol.GNI=GNI
-currenciesSymbol.MAF=MAF
-currenciesSymbol.GNF=GF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.HTG=HTG
-currenciesSymbol.MMK=MMK
-currenciesSymbol.MYR=RM
-currenciesSymbol.BTR=BTR
-currenciesSymbol.XEU=XEU
-currenciesSymbol.LSL=M
-currenciesSymbol.SLL=SLL
-currenciesSymbol.BHD=BD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.TRL=TL
-currenciesSymbol.KMF=CF
-currenciesSymbol.GAF=GAF
-currenciesSymbol.CZK=CZK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.GMP=GMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.AZM=AZM
-currenciesSymbol.KYD=KYD
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=\u043b\u0432.
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGM=BGM
-currenciesSymbol.BGL=\u043b\u0432
-currenciesSymbol.VEB=Be
-currenciesSymbol.MXP=MXP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.PES=PES
-currenciesSymbol.BSP=BSP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.GYD=G$
-currenciesSymbol.ILP=ILP
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.SKK=Sk
-currenciesSymbol.PEN=PEN
-currenciesSymbol.ILL=ILL
-currenciesSymbol.LRD=LRD
-currenciesSymbol.AMD=dram
-currenciesSymbol.BSD=BSD
-currenciesSymbol.GLK=GLK
-currenciesSymbol.HRK=HRK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.ALX=ALX
-currenciesSymbol.CLP=Ch$
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.FRF=FRF
-currenciesSymbol.MWP=MWP
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.ALL=lek
-currenciesSymbol.CLE=CLE
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MWK=MK
-currenciesSymbol.BRL=R$
-currenciesSymbol.TPE=TPE
-currenciesSymbol.DEM=DEM
-currenciesSymbol.KWD=KD
-currenciesSymbol.XCD=EC$
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.GWP=GWP
-currenciesSymbol.YUN=YUN
-currenciesSymbol.SVC=SVC
-currenciesSymbol.YUM=YUM
-currenciesSymbol.BEL=BEL
-currenciesSymbol.SIT=SIT
-currenciesSymbol.XOF=XOF
-currenciesSymbol.MVR=MVR
-currenciesSymbol.MVP=MVP
-currenciesSymbol.BEF=BF
-currenciesSymbol.TOP=T$
-currenciesSymbol.BEC=BEC
-currenciesSymbol.CKD=CKD
-currenciesSymbol.SUR=SUR
-currenciesSymbol.RON=RON
-currenciesSymbol.ROL=leu
-currenciesSymbol.SUN=SUN
currenciesSymbol.BDT=Tk
-currenciesSymbol.AWG=AWG
-currenciesSymbol.VNS=VNS
-currenciesSymbol.NOK=NKr
-currenciesSymbol.VNN=VNN
-currenciesSymbol.MUR=MUR
-currenciesSymbol.ZAR=R
-currenciesSymbol.SHP=SHP
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.XAU=XAU
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.GIP=GIP
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.TND=TND
-currenciesSymbol.CVE=CVEsc
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.JOD=JD
-currenciesSymbol.XAF=XAF
+currenciesSymbol.QAR=QR
currenciesSymbol.LBP=LL
-currenciesSymbol.VAL=VAL
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STE=STE
-currenciesSymbol.STD=Db
-currenciesSymbol.WST=WST
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
currenciesSymbol.KHR=CR
-currenciesSymbol.DOP=RD$
-currenciesSymbol.LNR=LNR
-currenciesSymbol.WSP=WSP
-currenciesSymbol.KHO=KHO
-currenciesSymbol.MHD=MHD
-currenciesSymbol.BOP=BOP
-currenciesSymbol.NZP=NZP
-currenciesSymbol.CUP=CUP
+currenciesSymbol.SYP=LS
currenciesSymbol.MTL=Lm
-currenciesSymbol.TMM=TMM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.GHP=GHP
-currenciesSymbol.SSP=SSP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.SGD=S$
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
+currenciesSymbol.CVE=CVEsc
+currenciesSymbol.HUF=Ft
currenciesSymbol.NZD=$NZ
-currenciesSymbol.USD=US$
-currenciesSymbol.BOB=Bs
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
+currenciesSymbol.DOP=RD$
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.PAB=PAB
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
+currenciesSymbol.BIF=Fbu
+currenciesSymbol.PLN=Zl
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
+currenciesSymbol.KMF=CF
+currenciesSymbol.SEK=SKr
currenciesSymbol.AUD=$A
-currenciesSymbol.GHC=GHC
-currenciesSymbol.LAK=LAK
-currenciesSymbol.NAD=N$
-currenciesSymbol.KGS=som
-currenciesSymbol.MGF=MGF
-currenciesSymbol.BBD=BDS$
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
currenciesSymbol.CHF=SwF
-currenciesSymbol.PYG=PYG
-currenciesSymbol.JMP=JMP
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.PLX=PLX
-currenciesSymbol.YER=YRl
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.LYP=LYP
currenciesSymbol.ETB=Br
-currenciesSymbol.BND=BND
-currenciesSymbol.DZF=DZF
-currenciesSymbol.EGP=EGP
-currenciesSymbol.JMD=J$
-currenciesSymbol.PLN=Zl
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
currenciesSymbol.DZD=DA
-currenciesSymbol.ISK=ISK
-currenciesSymbol.SRG=Sf
-currenciesSymbol.BZH=BZH
-currenciesSymbol.LYD=LD
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=KM
+currenciesSymbol.ANG=NA f.
currenciesSymbol.BZD=BZ$
-currenciesSymbol.ESP=ESP
-currenciesSymbol.KRW=KRW
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.BMP=BMP
-currenciesSymbol.BAD=BAD
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.SEK=SKr
-currenciesSymbol.CSK=CSK
-currenciesSymbol.BYR=Rbl
currenciesSymbol.IRR=RI
-currenciesSymbol.PKR=Pra
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-shortMonths=\u044f\u043d.®\u0444\u0435\u0432.®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440.®\u043c\u0430\u0439®\u044e\u043d\u0438®\u044e\u043b\u0438®\u0430\u0432\u0433.®\u0441\u0435\u043f.®\u043e\u043a\u0442.®\u043d\u043e\u0435\u043c.®\u0434\u0435\u043a.®®
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
+currenciesSymbol.BGN=\u043b\u0432.
+shortMonths=\u044f\u043d\u0443®\u0444\u0435\u0432®\u043c\u0430\u0440®\u0430\u043f\u0440®\u043c\u0430\u0439®\u044e\u043d\u0438®\u044e\u043b\u0438®\u0430\u0432\u0433®\u0441\u0435\u043f®\u043e\u043a\u0442®\u043d\u043e\u0435®\u0434\u0435\u043a®®
months=\u044f\u043d\u0443\u0430\u0440\u0438®\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440\u0438\u043b®\u043c\u0430\u0439®\u044e\u043d\u0438®\u044e\u043b\u0438®\u0430\u0432\u0433\u0443\u0441\u0442®\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438®\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438®\u043d\u043e\u0435\u043c\u0432\u0440\u0438®\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438®®
-shortWeekdays=®\u043d\u0435\u0434.®\u043f\u043e\u043d.®\u0432\u0442.®\u0441\u0440.®\u0447\u0435\u0442\u0432.®\u043f\u0435\u0442.®\u0441\u044a\u0431.®
+shortWeekdays=®\u043d\u0434®\u043f\u043d®\u0432\u0442®\u0441\u0440®\u0447\u0442®\u043f\u0442®\u0441\u0431®
weekdays=®\u043d\u0435\u0434\u0435\u043b\u044f®\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a®\u0432\u0442\u043e\u0440\u043d\u0438\u043a®\u0441\u0440\u044f\u0434\u0430®\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a®\u043f\u0435\u0442\u044a\u043a®\u0441\u044a\u0431\u043e\u0442\u0430®
firstDayOfWeek=mon
-eras=\u043f\u0440.\u043d.\u0435.®\u043d.\u0435.®
+eras=\u043f\u0440.\u0425\u0440.®\u0441\u043b.\u0425\u0440.®
+ampms=\u043f\u0440. \u043e\u0431.®\u0441\u043b. \u043e\u0431.®
shortDateFormat=dd.MM.yy
mediumDateFormat=dd.MM.yyyy
longDateFormat=dd MMMM yyyy
fullDateFormat=dd MMMM yyyy, EEEE
longTimeFormat=HH:mm:ss
-zoneStrings=America/Los_Angeles®PST®\u0422\u0438\u0445\u043e\u043e\u043a\u0435\u0430\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®PDT®\u0422\u0438\u0445\u043e\u043e\u043a\u0435\u0430\u043d\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Africa/Casablanca®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®©America/New_York®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Anchorage®AST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0410\u043b\u044f\u0441\u043a\u0430®ADT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0410\u043b\u044f\u0441\u043a\u0430®©Etc/GMT®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®©Asia/Shanghai®CTT®\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CDT®\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Halifax®AST®\u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®ADT®\u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Europe/Paris®CET®\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CEST®\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Denver®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®MDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Asia/Jerusalem®IST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0418\u0437\u0440\u0430\u0435\u043b®IDT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0418\u0437\u0440\u0430\u0435\u043b®©Pacific/Honolulu®HST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0425\u0430\u0432\u0430\u0439®HST®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0425\u0430\u0432\u0430\u0439®©America/St_Johns®CNT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u041d\u044e\u0444\u0430\u0443\u043d\u0434\u043b\u0435\u043d\u0434®CDT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u041d\u044e\u0444\u0430\u0443\u043d\u0434\u043b\u0435\u043d\u0434®©America/Indianapolis®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Chicago®CST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Europe/Bucharest®EET®\u0418\u0437\u0442\u043e\u0447\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EEST®\u0418\u0437\u0442\u043e\u0447\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Asia/Tokyo®JST®\u042f\u043f\u043e\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®JST®\u042f\u043f\u043e\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Phoenix®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©
+zoneStrings=America/Halifax®AST®\u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®ADT®\u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Indianapolis®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Europe/Paris®CET®\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CEST®\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Phoenix®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Los_Angeles®PST®\u0422\u0438\u0445\u043e\u043e\u043a\u0435\u0430\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®PDT®\u0422\u0438\u0445\u043e\u043e\u043a\u0435\u0430\u043d\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Pacific/Honolulu®HST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0425\u0430\u0432\u0430\u0439®HST®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0425\u0430\u0432\u0430\u0439®©America/Denver®MST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®MDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u043d\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Europe/Bucharest®EET®\u0418\u0437\u0442\u043e\u0447\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EEST®\u0418\u0437\u0442\u043e\u0447\u043d\u043e\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/New_York®EST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®EDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Asia/Tokyo®JST®\u042f\u043f\u043e\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®JST®\u042f\u043f\u043e\u043d\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Anchorage®AST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0410\u043b\u044f\u0441\u043a\u0430®ADT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0410\u043b\u044f\u0441\u043a\u0430®©Asia/Shanghai®CTT®\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CDT®\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©America/Chicago®CST®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®CDT®\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u043b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430®©Africa/Casablanca®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®GMT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0413\u0440\u0438\u043d\u0443\u0438\u0447®©America/St_Johns®CNT®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u041d\u044e\u0444\u0430\u0443\u043d\u0434\u043b\u0435\u043d\u0434®CDT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u041d\u044e\u0444\u0430\u0443\u043d\u0434\u043b\u0435\u043d\u0434®©Asia/Jerusalem®IST®\u0427\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0418\u0437\u0440\u0430\u0435\u043b®IDT®\u041b\u044f\u0442\u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u0430 \u0437\u043e\u043d\u0430 \u0418\u0437\u0440\u0430\u0435\u043b®©
territories.TL=\u0418\u0437\u0442\u043e\u0447\u0435\u043d \u0422\u0438\u043c\u043e\u0440
territories.TK=\u0422\u043e\u043a\u0435\u043b\u0430\u0443
territories.TJ=\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d
@@ -592,7 +358,9 @@ territories.GN=\u0413\u0432\u0438\u043d\u0435\u044f
territories.GM=\u0413\u0430\u043c\u0431\u0438\u044f
territories.GL=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f
territories.SV=\u0415\u043b \u0421\u0430\u043b\u0432\u0430\u0434\u043e\u0440
+territories.062=\u042e\u0436\u043d\u0430 \u0410\u0437\u0438\u044f
territories.ST=\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0435
+territories.061=\u041f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u044f
territories.GI=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440
territories.GH=\u0413\u0430\u043d\u0430
territories.SR=\u0421\u0443\u0440\u0438\u043d\u0430\u043c
@@ -616,9 +384,12 @@ territories.SC=\u0421\u0435\u0439\u0448\u0435\u043b\u0438
territories.SB=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0438 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.SA=\u0421\u0430\u0443\u0434\u0438\u0442\u0441\u043a\u0430 \u0410\u0440\u0430\u0431\u0438\u044f
territories.FR=\u0424\u0440\u0430\u043d\u0446\u0438\u044f
+territories.057=\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u044f
territories.FO=\u0424\u0430\u0440\u044c\u043e\u0440\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.FM=\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u044f, \u041e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0429\u0430\u0442\u0438
territories.RW=\u0420\u0443\u0430\u043d\u0434\u0430
+territories.054=\u041c\u0435\u043b\u0430\u043d\u0435\u0437\u0438\u044f
+territories.053=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f \u0438 \u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f
territories.FK=\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.RU=\u0420\u0443\u0441\u043a\u0430 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f
territories.FJ=\u0424\u0438\u0434\u0436\u0438
@@ -628,20 +399,26 @@ territories.RE=\u0420\u0435\u044e\u043d\u0438\u044a\u043d
territories.ET=\u0415\u0442\u0438\u043e\u043f\u0438\u044f
territories.ES=\u0418\u0441\u043f\u0430\u043d\u0438\u044f
territories.ER=\u0415\u0440\u0438\u0442\u0440\u0435\u044f
+territories.833=\u043e.\u041c\u0430\u043d
territories.EH=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430
territories.EG=\u0415\u0433\u0438\u043f\u0435\u0442
+territories.830=\u041d\u043e\u0440\u043c\u0430\u043d\u0434\u0441\u043a\u0438 \u043e-\u0432\u0438
territories.EE=\u0415\u0441\u0442\u043e\u043d\u0438\u044f
+territories.QO=\u041e\u043a\u0435\u0430\u043d\u0438\u044f
territories.EC=\u0415\u043a\u0432\u0430\u0434\u043e\u0440
territories.DZ=\u0410\u043b\u0436\u0438\u0440
territories.QA=\u041a\u0430\u0442\u0430\u0440
+territories.039=\u042e\u0436\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.DO=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0420\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430
territories.PY=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439
+territories.035=\u042e\u0433\u043e\u0438\u0437\u0442\u043e\u0447\u043d\u0430 \u0410\u0437\u0438\u044f
territories.DM=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430
territories.PW=\u041f\u0430\u043b\u0430\u0443
territories.DK=\u0414\u0430\u043d\u0438\u044f
territories.DJ=\u0414\u0436\u0438\u0431\u0443\u0442\u0438
territories.PT=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f
territories.PS=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0438\u0438
+territories.030=\u0418\u0437\u0442\u043e\u0447\u043d\u0430 \u0410\u0437\u0438\u044f
territories.PR=\u041f\u0443\u0435\u0440\u0442\u043e \u0420\u0438\u043a\u043e
territories.DE=\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f
territories.PN=\u041f\u0438\u0442\u043a\u0430\u0439\u0440\u043d
@@ -659,12 +436,14 @@ territories.CV=\u041a\u0430\u0431\u043e \u0412\u0435\u0440\u0434\u0435
territories.PA=\u041f\u0430\u043d\u0430\u043c\u0430
territories.CU=\u041a\u0443\u0431\u0430
territories.CR=\u041a\u043e\u0441\u0442\u0430 \u0420\u0438\u043a\u0430
+territories.029=\u041a\u0430\u0440\u0438\u0431\u0441\u043a\u0438 \u043e-\u0432\u0438
territories.CO=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f
territories.CN=\u041a\u0438\u0442\u0430\u0439
territories.CM=\u041a\u0430\u043c\u0435\u0440\u0443\u043d
territories.CL=\u0427\u0438\u043b\u0438
territories.CK=\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0443\u043a
territories.CI=\u041a\u043e\u0442 \u0434\u2019\u0418\u0432\u043e\u0430\u0440
+territories.021=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.CH=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f
territories.CG=\u041a\u043e\u043d\u0433\u043e
territories.CF=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0420\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430
@@ -679,13 +458,20 @@ territories.BV=\u041e\u0441\u0442\u0440\u043e\u0432 \u0411\u0443\u0432\u0435
territories.BT=\u0411\u0443\u0442\u0430\u043d
territories.BS=\u0411\u0430\u0445\u0430\u043c\u0438
territories.BR=\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f
+territories.019=\u0410\u043c\u0435\u0440\u0438\u043a\u0430
+territories.018=\u042e\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.NZ=\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f
territories.BO=\u0411\u043e\u043b\u0438\u0432\u0438\u044f
+territories.017=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.BN=\u0411\u0440\u0443\u043d\u0435\u0439 \u0414\u0430\u0440\u0443\u0441\u0430\u043b\u0430\u043c
territories.BM=\u0411\u0435\u0440\u043c\u0443\u0434\u0430
+territories.015=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.014=\u0418\u0437\u0442\u043e\u0447\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.013=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.NU=\u041d\u0438\u0443\u0435
territories.BJ=\u0411\u0435\u043d\u0438\u043d
territories.BI=\u0411\u0443\u0440\u0443\u043d\u0434\u0438
+territories.011=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0410\u0444\u0438\u0440\u043a\u0430
territories.BH=\u0411\u0430\u0445\u0440\u0435\u0439\u043d
territories.NR=\u041d\u0430\u0443\u0440\u0443
territories.BG=\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f
@@ -703,6 +489,7 @@ territories.NG=\u041d\u0438\u0433\u0435\u0440\u0438\u044f
territories.NF=\u041e\u0441\u0442\u0440\u043e\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a
territories.AZ=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d
territories.NE=\u041d\u0438\u0433\u0435\u0440
+territories.AX=\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u043e-\u0432\u0438
territories.NC=\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f
territories.AW=\u0410\u0440\u0443\u0431\u0430
territories.ZM=\u0417\u0430\u043c\u0431\u0438\u044f
@@ -711,19 +498,23 @@ territories.AU=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f
territories.AT=\u0410\u0432\u0441\u0442\u0440\u0438\u044f
territories.AS=\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u0421\u0430\u043c\u043e\u0430
territories.AR=\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0430
+territories.009=\u041e\u043a\u0435\u0430\u043d\u0438\u044f
territories.AQ=\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430
territories.MZ=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a
territories.AO=\u0410\u043d\u0433\u043e\u043b\u0430
territories.MY=\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f
territories.AN=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0410\u043d\u0442\u0438\u043b\u0438
territories.MX=\u041c\u0435\u043a\u0441\u0438\u043a\u043e
+territories.005=\u042e\u0436\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.AM=\u0410\u0440\u043c\u0435\u043d\u0438\u044f
territories.MW=\u041c\u0430\u043b\u0430\u0432\u0438
territories.AL=\u0410\u043b\u0431\u0430\u043d\u0438\u044f
territories.MV=\u041c\u0430\u043b\u0434\u0438\u0432\u0438
territories.ZA=\u042e\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.MU=\u041c\u0430\u0432\u0440\u0438\u0446\u0438\u0439
+territories.002=\u0410\u0444\u0440\u0438\u043a\u0430
territories.MT=\u041c\u0430\u043b\u0442\u0430
+territories.001=\u0417\u0435\u043c\u044f\u0442\u0430
territories.AI=\u0410\u043d\u0433\u0443\u0438\u043b\u0430
territories.MS=\u041c\u043e\u043d\u0441\u0435\u0440\u0430\u0442
territories.MR=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f
@@ -738,7 +529,6 @@ territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f
territories.MM=\u041c\u0438\u0430\u043d\u043c\u0430\u0440
territories.ML=\u041c\u0430\u043b\u0438
territories.MK=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f, \u0420\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430
-territories.YU=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0438\u044f
territories.YT=\u041c\u0435\u0439\u043e\u0442
territories.MH=\u041c\u0430\u0440\u0448\u0430\u043b\u043e\u0432\u0438 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.MG=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
@@ -748,10 +538,14 @@ territories.MA=\u041c\u0430\u0440\u043e\u043a\u043e
territories.YE=\u0419\u0435\u043c\u0435\u043d
territories.LY=\u041b\u0438\u0431\u0438\u0439\u0441\u043a\u0430 \u0410\u0440\u0430\u0431\u0441\u043a\u0430 \u0414\u0436\u0430\u043c\u0430\u0445\u0438\u0440\u0438\u044f
territories.LV=\u041b\u0430\u0442\u0432\u0438\u044f
+territories.155=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.LU=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433
+territories.154=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.LT=\u041b\u0438\u0442\u0432\u0430
territories.LS=\u041b\u0435\u0441\u043e\u0442\u043e
territories.LR=\u041b\u0438\u0431\u0435\u0440\u0438\u044f
+territories.151=\u0418\u0437\u0442\u043e\u0447\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
+territories.150=\u0415\u0432\u0440\u043e\u043f\u0430
territories.LK=\u0428\u0440\u0438 \u041b\u0430\u043d\u043a\u0430
territories.LI=\u041b\u0438\u0445\u0442\u0435\u043d\u0449\u0430\u0439\u043d
territories.LC=\u0421\u0435\u0439\u043d\u0442 \u041b\u0443\u0441\u0438\u044f
@@ -760,6 +554,8 @@ territories.LA=\u041d\u0430\u0440\u043e\u0434\u043d\u0430 \u0414\u0435\u043c\u04
territories.KZ=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d
territories.KY=\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.KW=\u041a\u0443\u0432\u0435\u0439\u0442
+territories.145=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0410\u0437\u0438\u044f
+territories.142=\u0410\u0437\u0438\u044f
territories.KR=\u041a\u043e\u0440\u0435\u044f, \u042e\u0436\u043d\u0430
territories.KP=\u041a\u043e\u0440\u0435\u044f, \u0421\u0435\u0432\u0435\u0440\u043d\u0430
territories.KN=\u0421\u0435\u0439\u043d\u0442 \u041a\u0438\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441
@@ -816,15 +612,15 @@ languages.ku=\u041a\u044e\u0440\u0434\u0441\u043a\u0438
languages.ks=\u041a\u0430\u0448\u043c\u0438\u0440\u0441\u043a\u0438
languages.ko=\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0438
languages.km=\u041a\u0445\u043c\u0435\u0440\u0441\u043a\u0438
-languages.kk=\u041a\u0430\u0437\u0430\u0445\u0441\u043a\u0438
languages.ira=\u0418\u0440\u0430\u043d\u0441\u043a\u0438
+languages.kk=\u041a\u0430\u0437\u0430\u0445\u0441\u043a\u0438
languages.ki=\u043a\u0438\u043a\u0443\u0439\u0443
languages.kg=\u041a\u043e\u043d\u0433\u043e\u0430\u043d\u0441\u043a\u0438
languages.grc=\u0414\u0440\u0435\u0432\u043d\u043e\u0433\u0440\u044a\u0446\u043a\u0438 (\u0434\u043e 1453)
languages.crp=\u041a\u0440\u0435\u043e\u043b\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.art=\u0418\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d (\u0434\u0440\u0443\u0433\u0438)
-languages.ka=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438
languages.afh=\u0410\u0444\u0440\u0438\u0445\u0438\u043b\u0438
+languages.ka=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438
languages.gem=\u0413\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.afa=\u0410\u0444\u0440\u043e-\u0430\u0437\u0438\u0430\u0442\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.jv=\u042f\u0432\u0430\u043d\u0441\u043a\u0438
@@ -841,18 +637,18 @@ languages.cpp=\u041a\u0440\u0435\u043e\u043b\u0441\u043a\u0438, \u043e\u0442 \u0
languages.id=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438
languages.hit=\u0425\u0438\u0442\u0441\u043a\u0438
languages.uk=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438
-languages.fiu=\u0423\u0433\u0440\u043e\u0444\u0438\u043d\u0441\u043a\u0430 (\u0434\u0440\u0443\u0433\u0438)
languages.cpf=\u041a\u0440\u0435\u043e\u043b\u0441\u043a\u0438, \u043e\u0442 \u0444\u0440\u0435\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
+languages.fiu=\u0423\u0433\u0440\u043e\u0444\u0438\u043d\u0441\u043a\u0430 (\u0434\u0440\u0443\u0433\u0438)
languages.und=\u041d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d
-languages.cpe=\u041a\u0440\u0435\u043e\u043b\u0441\u043a\u0438, \u043e\u0442 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.hy=\u0410\u0440\u043c\u0435\u043d\u0441\u043a\u0438
+languages.cpe=\u041a\u0440\u0435\u043e\u043b\u0441\u043a\u0438, \u043e\u0442 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.nub=\u041d\u0443\u0431\u0438\u0439\u0441\u043a\u0438 \u0435\u0437\u0438\u0446\u0438
-languages.phn=\u0424\u0438\u043d\u0438\u043a\u0438\u0439\u0441\u043a\u0438
languages.got=\u0413\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438
+languages.phn=\u0424\u0438\u043d\u0438\u043a\u0438\u0439\u0441\u043a\u0438
languages.hu=\u0423\u043d\u0433\u0430\u0440\u0441\u043a\u0438
languages.ht=\u0425\u0430\u0438\u0442\u044f\u043d\u0441\u043a\u0438
-languages.phi=\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.hr=\u0425\u044a\u0440\u0432\u0430\u0442\u0441\u043a\u0438
+languages.phi=\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.ty=\u0422\u0430\u0438\u0442\u044f\u043d\u0441\u043a\u0438
languages.apa=\u0415\u0437\u0438\u0446\u0438 \u043d\u0430 \u0430\u043f\u0430\u0445\u0438\u0442\u0435
languages.goh=\u041d\u0435\u043c\u0441\u043a\u0438 (750-1050)
@@ -890,18 +686,18 @@ languages.si=\u0421\u0438\u043d\u0445\u0430\u043b\u0441\u043a\u0438
languages.sh=\u0421\u044a\u0440\u0431\u043e\u0445\u044a\u0440\u0432\u0430\u0442\u0441\u043a\u0438
languages.sg=\u0421\u0430\u043d\u0433\u043e
languages.sc=\u0421\u0430\u0440\u0434\u0438\u043d\u0441\u043a\u0438
-languages.cau=\u041a\u0430\u0432\u043a\u0430\u0437\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.sa=\u0421\u0430\u043d\u043a\u0441\u043a\u0440\u0438\u0442\u0441\u043a\u0438
+languages.cau=\u041a\u0430\u0432\u043a\u0430\u0437\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.ang=\u0421\u0442\u0430\u0440\u043e\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 (ca.450-1100)
-languages.car=\u041a\u0430\u0440\u0438\u0431\u0441\u043a\u0438
languages.fr=\u0424\u0440\u0435\u043d\u0441\u043a\u0438
+languages.car=\u041a\u0430\u0440\u0438\u0431\u0441\u043a\u0438
languages.sla=\u0421\u043b\u0430\u0432\u044f\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.pro=\u041f\u0440\u043e\u0432\u0430\u043d\u0441\u0430\u043b\u0441\u043a\u0438 (to 1500)
languages.rw=\u041a\u0438\u043d\u044f\u0440\u0443\u0430\u043d\u0434\u0430
languages.gmh=\u041d\u0435\u043c\u0441\u043a\u0438 (1050-1500)
languages.ru=\u0420\u0443\u0441\u043a\u0438
-languages.cai=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0438\u043d\u0434\u0438\u0430\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.fi=\u0424\u0438\u043d\u0441\u043a\u0438
+languages.cai=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0438\u043d\u0434\u0438\u0430\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.ro=\u0420\u0443\u043c\u044a\u043d\u0441\u043a\u0438
languages.rn=\u0420\u0443\u043d\u0434\u0438
languages.rm=\u0420\u0435\u0442\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u043a\u0438
@@ -913,24 +709,24 @@ languages.es=\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438
languages.eo=\u0415\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e
languages.en=\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438
languages.el=\u0413\u0440\u044a\u0446\u043a\u0438
-languages.qu=\u041a\u0435\u0447\u0443\u0430
languages.jrb=\u0435\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u0430\u0440\u0430\u0431\u0441\u043a\u0438
+languages.qu=\u041a\u0435\u0447\u0443\u0430
languages.fro=\u0424\u0440\u0435\u043d\u0441\u043a\u0438 (842-1400)
languages.frm=\u0424\u0440\u0435\u043d\u0441\u043a\u0438 (1400-1600)
languages.dv=\u0414\u0438\u0432\u0435\u0445\u0438
languages.ale=\u0410\u043b\u0435\u0443\u0442\u0441\u043a\u0438
languages.den=\u0421\u043b\u0430\u0432\u044f\u043d\u0441\u043a\u0438
-languages.pt=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0438
languages.ber=\u0431\u0435\u0440\u0431\u0435\u0440\u0441\u043a\u0438
+languages.pt=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0438
languages.ps=\u041f\u0443\u0449\u0443
languages.de=\u041d\u0435\u043c\u0441\u043a\u0438
-languages.pl=\u041f\u043e\u043b\u0441\u043a\u0438
languages.da=\u0414\u0430\u0442\u0441\u043a\u0438
+languages.pl=\u041f\u043e\u043b\u0441\u043a\u0438
languages.sux=\u0428\u0443\u043c\u0435\u0440\u0441\u043a\u0438
languages.jpr=\u0435\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u043f\u0435\u0440\u0441\u0438\u0439\u0441\u043a\u0438
languages.cy=\u0423\u0435\u043b\u0441\u043a\u0438
-languages.pa=\u041f\u0435\u043d\u0434\u0436\u0430\u0431\u0441\u043a\u0438
languages.cu=\u0426\u044a\u0440\u043a\u043e\u0432\u043d\u043e \u0441\u043b\u0430\u0432\u044f\u043d\u0441\u043a\u0438
+languages.pa=\u041f\u0435\u043d\u0434\u0436\u0430\u0431\u0441\u043a\u0438
languages.cs=\u0427\u0435\u0448\u043a\u0438
languages.co=\u041a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438
languages.mis=\u0414\u0440\u0443\u0433\u0438 \u0435\u0437\u0438\u0446\u0438
@@ -941,29 +737,29 @@ languages.ca=\u041a\u0430\u0442\u0430\u043b\u043e\u043d\u0441\u043a\u0438
languages.bs=\u0411\u043e\u0441\u043d\u0435\u043d\u0441\u043a\u0438
languages.br=\u0411\u0440\u0435\u0442\u043e\u043d\u0441\u043a\u0438
languages.bo=\u0422\u0438\u0431\u0435\u0442\u0441\u043a\u0438
-languages.ny=\u0427\u0438\u043d\u044f\u043d\u0434\u0436\u0430
languages.bn=\u0411\u0435\u043d\u0433\u0430\u043b\u0441\u043a\u0438
+languages.ny=\u0427\u0438\u043d\u044f\u043d\u0434\u0436\u0430
languages.bg=\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438
languages.be=\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0438
-languages.oto=\u0421\u0442\u0430\u0440\u043e\u0442\u0443\u0440\u0441\u043a\u0438 \u0435\u0437\u0438\u0446\u0438
languages.no=\u041d\u043e\u0440\u0432\u0435\u0436\u043a\u0438
+languages.oto=\u0421\u0442\u0430\u0440\u043e\u0442\u0443\u0440\u0441\u043a\u0438 \u0435\u0437\u0438\u0446\u0438
languages.tai=\u0422\u0430\u0439\u043b\u0430\u043d\u0434\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
-languages.nl=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438
languages.ba=\u0411\u0430\u0448\u043a\u0438\u0440\u0441\u043a\u0438
+languages.nl=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438
languages.zu=\u0417\u0443\u043b\u0443\u0441\u043a\u0438
-languages.raj=\u0420\u0430\u0434\u0436\u0430\u0441\u0442\u0430\u043d\u0441\u043a\u0438
languages.az=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u043a\u0438
-languages.ne=\u041d\u0435\u043f\u0430\u043b\u0441\u043a\u0438
+languages.raj=\u0420\u0430\u0434\u0436\u0430\u0441\u0442\u0430\u043d\u0441\u043a\u0438
languages.ay=\u0410\u0439\u043c\u0430\u0440\u0430
+languages.ne=\u041d\u0435\u043f\u0430\u043b\u0441\u043a\u0438
languages.av=\u0410\u0432\u0430\u0440\u0441\u043a\u0438
-languages.ota=\u0422\u0443\u0440\u0441\u043a\u0438, \u043e\u0442\u043e\u043c\u0430\u043d\u0441\u043a\u0438 (1500-1928)
languages.aus=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438 \u0435\u0437\u0438\u0446\u0438
-languages.nap=\u041d\u0435\u0430\u043f\u043e\u043b\u0438\u0442\u0430\u043d\u0441\u043a\u0438
+languages.ota=\u0422\u0443\u0440\u0441\u043a\u0438, \u043e\u0442\u043e\u043c\u0430\u043d\u0441\u043a\u0438 (1500-1928)
languages.ar=\u0410\u0440\u0430\u0431\u0441\u043a\u0438
+languages.nap=\u041d\u0435\u0430\u043f\u043e\u043b\u0438\u0442\u0430\u043d\u0441\u043a\u0438
languages.zh=\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438
languages.sga=\u0421\u0442\u0430\u0440\u043e\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438 (\u0434\u043e 900)
-languages.chy=\u0447\u0435\u0439\u0435\u043d\u0441\u043a\u0438
languages.my=\u0411\u0438\u0440\u043c\u0430\u043d\u0441\u043a\u0438
+languages.chy=\u0447\u0435\u0439\u0435\u043d\u0441\u043a\u0438
languages.am=\u0410\u043c\u0445\u0430\u0440\u0441\u043a\u0438
languages.nai=\u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0438\u043d\u0434\u0438\u0430\u043d\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.paa=\u041f\u0430\u043f\u0443\u0430\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
@@ -971,19 +767,19 @@ languages.mt=\u041c\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0438
languages.ms=\u041c\u0430\u043b\u0430\u0439\u0441\u043a\u0438
languages.chr=\u0447\u0435\u0440\u043e\u043a\u0438
languages.af=\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441
-languages.haw=\u0425\u0430\u0432\u0430\u0439\u0441\u043a\u0438
languages.mo=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u0438
+languages.haw=\u0425\u0430\u0432\u0430\u0439\u0441\u043a\u0438
languages.mn=\u041c\u043e\u043d\u0433\u043e\u043b\u0441\u043a\u0438
languages.ab=\u0410\u0431\u043a\u0445\u0430\u0437\u0441\u043a\u0438
languages.ml=\u041c\u0430\u043b\u0430\u0439\u0441\u043a\u0438
-languages.bnt=\u0411\u0430\u043d\u0442\u0443
languages.mk=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438
+languages.bnt=\u0411\u0430\u043d\u0442\u0443
languages.mi=\u041c\u0430\u043e\u0440\u0441\u043a\u0438
languages.mg=\u041c\u0430\u043b\u0433\u0430\u0448\u043a\u0438
languages.mga=\u0418\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438 (900-1200)
languages.egy=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0438 (\u0434\u0440\u0435\u0432\u0435\u043d)
-languages.bat=\u041f\u0440\u0438\u0431\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.lv=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0438
+languages.bat=\u041f\u0440\u0438\u0431\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
languages.lt=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438
languages.lo=\u041b\u0430\u043e\u0441\u043a\u0438
languages.sem=\u0421\u0435\u043c\u0438\u0442\u0441\u043a\u0438 (\u0434\u0440\u0443\u0433\u0438)
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn.properties
index c27fc7b..9f0d5c3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn.properties
@@ -5,7 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.BDT=BDT
currenciesSymbol.INR=\u099f\u09be\u0995\u09be
currenciesSymbol.BDT=\u09f3
shortMonths=\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0®\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0®\u09ae\u09be\u09b0\u09cd\u099a®\u098f\u09aa\u09cd\u09b0\u09bf\u09b2®\u09ae\u09c7®\u099c\u09c1\u09a8®\u099c\u09c1\u09b2\u09be\u0987®\u0986\u0997\u09b8\u09cd\u099f®\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0®\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0®\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0®\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0®®
@@ -14,14 +13,14 @@ shortWeekdays=®\u09b0\u09ac\u09bf®\u09b8\u09cb\u09ae®\u09ae\u0999\u09cd\u0997\u0
weekdays=®\u09b0\u09ac\u09bf\u09ac\u09be\u09b0®\u09b8\u09cb\u09ae\u09ac\u09be\u09b0®\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0®\u09ac\u09c1\u09a7\u09ac\u09be\u09b0®\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0®\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0®\u09b6\u09a8\u09bf\u09ac\u09be\u09b0®
ampms=\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3®\u0985\u09aa\u09b0\u09be\u09b9\u09cd\u09a3®
territories.AU=\u0985\u09b8\u09cd\u099f\u09cd\u09b0\u09c7\u09b2\u09bf\u09df\u09be
-territories.GY=\u0997\u09bf\u09df\u09be\u09a8\u09be
territories.AT=\u0985\u09b8\u09cd\u099f\u09cd\u09b0\u09bf\u09df\u09be
+territories.GY=\u0997\u09bf\u09df\u09be\u09a8\u09be
territories.AR=\u0986\u09b0\u09cd\u099c\u09c7\u09a3\u09cd\u099f\u09be\u0987\u09a8\u09be
-territories.MY=\u09ae\u09be\u09b2\u09cd\u09af\u09be\u09b6\u09bf\u09df\u09be
territories.GT=\u0997\u09cb\u09df\u09be\u099f\u09bf\u09ae\u09be\u09b2\u09be
+territories.MY=\u09ae\u09be\u09b2\u09cd\u09af\u09be\u09b6\u09bf\u09df\u09be
territories.MX=\u09ae\u0995\u09cd\u09b8\u09bf\u0995\u09cb
-territories.GR=\u0997\u09cd\u09b0\u09c0\u09b8\u09cd
territories.AM=\u0986\u09b0\u09cd\u09ae\u09c7\u09a8\u09bf\u09df\u09be
+territories.GR=\u0997\u09cd\u09b0\u09c0\u09b8\u09cd
territories.ZA=\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u0986\u09ab\u09cd\u09b0\u09bf\u0995\u09be
territories.AL=\u0986\u09b2\u09ac\u09cd\u09af\u09be\u09a8\u09bf\u09df\u09be
territories.SY=\u09b8\u09bf\u09b0\u09bf\u09df\u09be
@@ -31,8 +30,8 @@ territories.MN=\u09ae\u0999\u09cd\u0997\u09cb\u09b2\u09bf\u09df\u09be
territories.GH=\u0997\u09be\u09a8\u09be
territories.SO=\u09b8\u09cb\u09ae\u09be\u09b2\u09bf
territories.GE=\u099c\u09b0\u09cd\u099c\u09bf\u09df\u09be
-territories.MG=\u09ae\u09be\u09a6\u09be\u0997\u09be\u09b8\u09cd\u0995\u09be\u09b0
territories.GB=\u0997\u09cd\u09b0\u09c7\u099f\u09ac\u09c3\u099f\u09c7\u09a8
+territories.MG=\u09ae\u09be\u09a6\u09be\u0997\u09be\u09b8\u09cd\u0995\u09be\u09b0
territories.SK=\u09b6\u09cd\u09b2\u09cb\u09ad\u09be\u0995\u09bf\u09df\u09be
territories.MD=\u09ae\u09cb\u09b2\u09cd\u09a6\u09be\u09ad\u09bf\u09df\u09be
territories.SG=\u09b8\u09bf\u0999\u09cd\u0997\u09be\u09aa\u09c1\u09b0
@@ -60,14 +59,14 @@ territories.KR=\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u0995\u09cb\u09b0\u09bf\u09
territories.EH=\u09aa\u09b6\u09cd\u099a\u09bf\u09ae\u09c0 \u09b8\u09be\u09b9\u09be\u09b0\u09be
territories.EG=\u09ae\u09bf\u09b6\u09b0
territories.EE=\u098f\u09b8\u09cd\u09a4\u09cb\u09a8\u09bf\u09df\u09be
-territories.KH=\u0995\u09be\u09ae\u09cd\u09ac\u09cb\u099c
territories.EC=\u0987\u0995\u09cb\u09df\u09be\u09a1\u09b0
+territories.KH=\u0995\u09be\u09ae\u09cd\u09ac\u09cb\u099c
territories.KG=\u0995\u09bf\u09b0\u09cd\u0997\u09bf\u099c\u09bf\u09df\u09be
territories.KE=\u0995\u09c7\u09a8\u09bf\u09df\u09be
territories.DZ=\u098f\u09b2\u099c\u09bf\u09b0\u09bf\u09df\u09be
territories.PY=\u09aa\u09cd\u09af\u09be\u09b0\u09be\u0997\u09cb\u09df\u09c7
-territories.JP=\u099c\u09be\u09aa\u09be\u09a8
territories.DK=\u09a1\u09c7\u09a8\u09cd\u09ae\u09be\u09b0\u09cd\u0995
+territories.JP=\u099c\u09be\u09aa\u09be\u09a8
territories.PT=\u09aa\u09b0\u09cd\u09a4\u09c1\u0997\u09be\u09b2
territories.JO=\u099c\u09b0\u09cd\u09a1\u09a8
territories.JM=\u099c\u09cd\u09af\u09be\u09ae\u09c7\u0995\u09be
@@ -82,19 +81,19 @@ territories.PA=\u09aa\u09be\u09a8\u09be\u09ae\u09be
territories.VE=\u09ad\u09c7\u09a8\u09c7\u099c\u09c1\u09df\u09c7\u09b2\u09be
territories.CU=\u0995\u09bf\u0989\u09ac\u09be
territories.CR=\u0995\u09cb\u09b8\u09cd\u099f\u09be\u09b0\u09bf\u0995\u09be
-territories.IT=\u0987\u09a4\u09be\u09b2\u09c0
territories.CO=\u0995\u09cb\u09b2\u09cb\u09ae\u09cd\u09ac\u09bf\u09df\u09be
-territories.IS=\u0986\u0987\u09b8\u09b2\u09a3\u09cd\u09a1
+territories.IT=\u0987\u09a4\u09be\u09b2\u09c0
territories.CN=\u099a\u09c0\u09a8
+territories.IS=\u0986\u0987\u09b8\u09b2\u09a3\u09cd\u09a1
territories.IR=\u0987\u09b0\u09be\u09a8
-territories.IQ=\u0987\u09b0\u09be\u0995
territories.CL=\u099a\u09bf\u09b2\u09bf
+territories.IQ=\u0987\u09b0\u09be\u0995
territories.UZ=\u0989\u099c\u09cd\u09ac\u09c7\u0995\u09bf\u09b8\u09cd\u09a5\u09be\u09a8
territories.UY=\u0989\u09b0\u09c1\u0997\u09cb\u09df\u09c7
territories.IN=\u09ad\u09be\u09b0\u09a4
territories.CH=\u09b8\u09c1\u0987\u099c\u09b0\u09cd\u09b2\u09a3\u09cd\u09a1
-territories.IL=\u0987\u09b8\u09cd\u09b0\u09be\u09df\u09c7\u09b2
territories.CG=\u0995\u0999\u09cd\u0997\u09cb
+territories.IL=\u0987\u09b8\u09cd\u09b0\u09be\u09df\u09c7\u09b2
territories.US=\u09ae\u09be\u09b0\u09cd\u0995\u09bf\u09a8 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0
territories.IE=\u0986\u09df\u09be\u09b0\u09cd\u09b2\u09a3\u09cd\u09a1
territories.ID=\u0987\u09a8\u09cd\u09a6\u09cb\u09a8\u09c7\u09b6\u09bf\u09df\u09be
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn_IN.properties
index ebc79e5..4b98a3c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bn_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bs.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bs.properties
new file mode 100644
index 0000000..678a363
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_bs.properties
@@ -0,0 +1,17 @@
+# LocaleInformation_bs.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+decimalSeparator=,
+groupingSeparator=.
+currenciesDisplayName.BAM=Konvertibilna marka
+currenciesSymbol.BAM=KM
+shortMonths=Jan®Feb®Mar®Apr®Maj®Jun®Jul®Avg®Sep®Okt®Nov®Dec®®
+months=Januar®Februar®Mart®April®Maj®Juni®Juli®Avgust®Septembar®Oktobar®Novembar®Decembar®®
+shortWeekdays=®Ned®Pon®Uto®Sri®\u010cet®Pet®Sub®
+weekdays=®Nedjelja®Ponedjeljak®Utorak®Srijeda®\u010cetvrtak®Petak®Subota®
+firstDayOfWeek=mon
+eras=BC®AD®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn.properties
new file mode 100644
index 0000000..f300c23
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn.properties
@@ -0,0 +1,300 @@
+# LocaleInformation_byn.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.ERN=$
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
+shortMonths=\u120d\u12f0\u1275®\u12ab\u1265\u12bd®\u12ad\u1265\u120b®\u134b\u1305\u12ba®\u12ad\u1262\u1245®\u121d/\u1275®\u12b0\u122d®\u121b\u122d\u12eb®\u12eb\u12b8\u1292®\u1218\u1270\u1209®\u121d/\u121d®\u1270\u1215\u1233®®
+months=\u120d\u12f0\u1275\u122a®\u12ab\u1265\u12bd\u1265\u1272®\u12ad\u1265\u120b®\u134b\u1305\u12ba\u122a®\u12ad\u1262\u1245\u122a®\u121d\u12aa\u12a4\u120d \u1275\u1313\u0305\u1292\u122a®\u12b0\u122d\u12a9®\u121b\u122d\u12eb\u121d \u1275\u122a®\u12eb\u12b8\u1292 \u1218\u1233\u1245\u1208\u122a®\u1218\u1270\u1209®\u121d\u12aa\u12a4\u120d \u1218\u123d\u12c8\u122a®\u1270\u1215\u1233\u1235\u122a®®
+shortWeekdays=®\u1230/\u1245®\u1230\u1291®\u1230\u120a\u131d®\u1208\u1313®\u12a3\u121d\u12f5®\u12a3\u122d\u1265®\u1230/\u123d®
+weekdays=®\u1230\u1295\u1260\u122d \u1245\u12f3\u12c5®\u1230\u1291®\u1230\u120a\u131d®\u1208\u1313 \u12c8\u122a \u1208\u1265\u12cb®\u12a3\u121d\u12f5®\u12a3\u122d\u1265®\u1230\u1295\u1260\u122d \u123d\u1313\u12c5®
+firstDayOfWeek=sat
+eras=\u12ed\u1305®\u12a3\u12f5®
+ampms=\u134b\u12f1\u1235 \u1303\u1265®\u134b\u12f1\u1235 \u12f0\u121d\u1262®
+territories.AU=\u12a0\u12cd\u1235\u1275\u122c\u120a\u12eb
+territories.TD=\u127b\u12f5
+territories.AT=\u12a6\u1235\u1275\u122a\u12eb
+territories.GY=\u1309\u12eb\u1293
+territories.AR=\u12a0\u122d\u1300\u1295\u1272\u1293
+territories.GW=\u1262\u1233\u12ce
+territories.MY=\u121b\u120c\u12e2\u12eb
+territories.MX=\u121c\u12ad\u1232\u12ae
+territories.AN=\u1294\u12d8\u122d\u120b\u1295\u12f5\u1235 \u12a0\u1295\u1272\u120d\u1235
+territories.AM=\u12a0\u122d\u121c\u1292\u12eb
+territories.GR=\u130d\u122a\u12ad
+territories.ZA=\u12f0\u1261\u1265 \u12a0\u134d\u122a\u12ab
+territories.AL=\u12a0\u120d\u1263\u1292\u12eb
+territories.GQ=\u12a2\u12b3\u1276\u122a\u12eb\u120d \u130a\u1292
+territories.MU=\u121b\u1229\u1238\u1235
+territories.SY=\u1232\u122a\u12eb
+territories.MT=\u121b\u120d\u1273
+territories.GN=\u130a\u1292
+territories.MR=\u121e\u122a\u1274\u1292\u12eb
+territories.GM=\u130b\u121d\u1262\u12eb
+territories.MO=\u121b\u12ab\u12ce
+territories.AE=\u12e8\u1270\u1263\u1260\u1229\u1275 \u12a0\u1228\u1265 \u12a4\u121d\u122c\u1275\u1235
+territories.MN=\u121e\u1295\u130e\u120a\u12eb
+territories.AD=\u12a0\u1295\u12f6\u122b
+territories.MK=\u121b\u12a8\u12f6\u1292\u12eb
+territories.GF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1309\u12ca\u12a0\u1293
+territories.SO=\u1231\u121b\u120c
+territories.GE=\u1306\u122d\u1302\u12eb
+territories.SN=\u1234\u1294\u130b\u120d
+territories.GB=\u12a5\u1295\u130d\u120a\u12dd
+territories.SK=\u1235\u120e\u126b\u12aa\u12eb
+territories.SI=\u1235\u120e\u126c\u1292\u12eb
+territories.MD=\u121e\u120d\u12f6\u126b
+territories.SG=\u1232\u1295\u130b\u1356\u122d
+territories.MA=\u121e\u122e\u12ae
+territories.SE=\u1235\u12ca\u12f5\u1295
+territories.SD=\u1231\u12f3\u1295
+territories.SA=\u1233\u12cd\u12f5\u12a0\u1228\u1262\u12eb
+territories.YE=\u12e8\u1218\u1295
+territories.LY=\u120a\u1262\u12eb
+territories.FR=\u1348\u1228\u1295\u1233\u12ed
+territories.LV=\u120b\u1275\u126a\u12eb
+territories.LT=\u120a\u1271\u12cc\u1292\u12eb
+territories.FM=\u121a\u12ad\u122e\u1294\u12e2\u12eb
+territories.RU=\u122b\u123a\u12eb
+territories.FJ=\u134a\u1302
+territories.FI=\u134a\u1295\u120b\u1295\u12f5
+territories.RO=\u122e\u121c\u1292\u12eb
+territories.LB=\u120a\u1263\u1296\u1235
+territories.ET=\u12a2\u1275\u12ee\u1335\u12eb
+territories.ES=\u1235\u1354\u1295
+territories.KW=\u12ad\u12cc\u1275
+territories.ER=\u12a4\u122d\u1275\u122b
+territories.KR=\u1230\u121c\u1295 \u12ae\u122a\u12eb
+territories.KP=\u12f0\u1261\u1265 \u12ae\u122a\u12eb
+territories.KM=\u12ae\u121e\u122e\u1235
+territories.EH=\u121d\u12d5\u122b\u1263\u12ca \u1233\u1205\u122b
+territories.EG=\u130d\u1265\u133d
+territories.EE=\u12a4\u1235\u1276\u1292\u12eb
+territories.EC=\u12a2\u12b3\u12f6\u122d
+territories.KH=\u12ab\u121d\u1266\u12f2\u12eb
+territories.DZ=\u12a0\u120d\u1304\u122a\u12eb
+territories.DO=\u12f6\u121a\u1292\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.DM=\u12f6\u121a\u1292\u12ab
+territories.DK=\u12f4\u1295\u121b\u122d\u12ad
+territories.JP=\u1303\u1353\u1295
+territories.JO=\u1306\u122d\u12f3\u1295
+territories.PR=\u1356\u122d\u1273 \u122a\u12ae
+territories.JM=\u1303\u121b\u12ed\u12ab
+territories.DE=\u1300\u122d\u1218\u1295
+territories.PL=\u1356\u120b\u1295\u12f5
+territories.PG=\u1353\u1351\u12cb \u1292\u12cd \u130a\u1292
+territories.PF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1356\u120a\u1294\u12e2\u12eb
+territories.PE=\u1354\u1229
+territories.CZ=\u127c\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.VI=\u12e8\u12a0\u121c\u122a\u12ab \u1268\u122d\u1302\u1295 \u12f0\u1234\u1276\u127d
+territories.CY=\u1233\u12ed\u1355\u1228\u1235
+territories.VG=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u12f5\u1295\u130d\u120d \u12f0\u1234\u1276\u127d
+territories.CV=\u12ac\u1355 \u126c\u122d\u12f4
+territories.VE=\u126c\u1295\u12d9\u12cc\u120b
+territories.CS=\u1230\u122d\u1262\u12eb
+territories.CO=\u12ae\u120e\u121d\u1262\u12eb
+territories.IT=\u1323\u120a\u12eb\u1295
+territories.CN=\u127b\u12ed\u1293
+territories.IS=\u12a0\u12ed\u1235\u120b\u1295\u12f5
+territories.CM=\u12ab\u121c\u1229\u1295
+territories.CL=\u127a\u120a
+territories.IQ=\u12a2\u122b\u1245
+territories.UZ=\u12e9\u12dd\u1260\u12aa\u1235\u1273\u1295
+territories.IN=\u1205\u1295\u12f5
+territories.CH=\u1235\u12ca\u12d8\u122d\u120b\u1295\u12f5
+territories.IL=\u12a5\u1235\u122b\u12a4\u120d
+territories.CF=\u12e8\u1218\u12ab\u12a8\u1208\u129b\u12cd \u12a0\u134d\u122a\u12ab \u122a\u1350\u1265\u120a\u12ad
+territories.US=\u12a0\u121c\u122a\u12ab
+territories.CD=\u12ae\u1295\u130e
+territories.IE=\u12a0\u12e8\u122d\u120b\u1295\u12f5
+territories.ID=\u12a2\u1295\u12f6\u1294\u12e2\u12eb
+territories.BZ=\u1264\u120a\u12d8
+territories.BY=\u1264\u120b\u1229\u1235
+territories.UG=\u12e9\u130b\u1295\u12f3
+territories.BT=\u1261\u1205\u1273\u1295
+territories.BR=\u1265\u122b\u12da\u120d
+territories.NZ=\u1292\u12cd \u12da\u120b\u1295\u12f5
+territories.HU=\u1200\u1295\u130b\u122a
+territories.BO=\u1266\u120a\u126a\u12eb
+territories.HT=\u1200\u12ed\u1272
+territories.BM=\u1264\u122d\u1219\u12f3
+territories.HR=\u12ad\u122e\u12a4\u123d\u12eb
+territories.TZ=\u1273\u1295\u12db\u1292\u12eb
+territories.BH=\u1263\u1205\u122c\u1295
+territories.BG=\u1261\u120d\u130c\u122a\u12eb
+territories.NP=\u1294\u1353\u120d
+territories.HK=\u1206\u1295\u130d \u12ae\u1295\u130d
+territories.TT=\u1275\u122a\u1292\u12f3\u12f5 \u12a5\u1293 \u1276\u1263\u130e
+territories.NO=\u1296\u122d\u12cc
+territories.BE=\u1264\u120d\u1304\u121d
+territories.TR=\u1271\u122d\u12ad
+territories.NL=\u1294\u12d8\u122d\u120b\u1295\u12f5
+territories.BB=\u1263\u122d\u1264\u12f6\u1235
+territories.BA=\u1266\u1235\u1292\u12eb \u12a5\u1293 \u1204\u122d\u12de\u130e\u126a\u1292\u12eb
+territories.TN=\u1271\u1292\u12da\u12eb
+territories.TL=\u121d\u1235\u122b\u1245 \u1272\u121e\u122d
+territories.NG=\u1293\u12ed\u1304\u122a\u12eb
+territories.TJ=\u1273\u1303\u12aa\u1235\u1273\u1295
+territories.AZ=\u12a0\u12d8\u122d\u1263\u1303\u1295
+territories.ZM=\u12db\u121d\u1262\u12eb
+territories.TH=\u1273\u12ed\u120b\u1295\u12f5
+territories.NC=\u1292\u12cd \u12ab\u120c\u12f6\u1292\u12eb
+territories.TF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u12f0\u1261\u1263\u12ca \u130d\u12db\u1276\u127d
+territories.NA=\u1293\u121a\u1262\u12eb
+languages.es=\u1235\u1353\u1292\u123d
+languages.ku=\u12a9\u122d\u12f5\u123d\u129b
+languages.eo=\u12a4\u1235\u1350\u122b\u1295\u1276
+languages.en=\u12a5\u1295\u130d\u120a\u12dd\u129b
+languages.ks=\u12ab\u123d\u121a\u122d\u129b
+languages.el=\u130d\u122a\u12ad\u129b
+languages.qu=\u12b5\u127f\u129b
+languages.ko=\u12ae\u122a\u12eb\u129b
+languages.kn=\u12ab\u1293\u12f3\u129b
+languages.km=\u12ad\u1218\u122d\u129b
+languages.kl=\u12ab\u120b\u120a\u1231\u1275\u129b
+languages.kk=\u12ab\u12db\u12ad\u129b
+languages.wo=\u12ce\u120e\u134d\u129b
+languages.ka=\u130a\u12ee\u122d\u130a\u12eb\u1295
+languages.dz=\u12f5\u12de\u1295\u130d\u12bb\u129b
+languages.jv=\u1303\u126b\u1295\u129b
+languages.pt=\u1356\u122d\u1271\u130b\u120a\u129b
+languages.ps=\u1351\u123d\u1276\u129b
+languages.de=\u1300\u122d\u1218\u1295
+languages.pl=\u1356\u120a\u123d
+languages.da=\u12f4\u1292\u123d
+languages.vo=\u126e\u120b\u1351\u12ad\u129b
+languages.ja=\u1303\u1353\u1295\u129b
+languages.vi=\u126a\u1275\u1293\u121d\u129b
+languages.cy=\u12c8\u120d\u123d
+languages.pa=\u1353\u1295\u1303\u1262\u129b
+languages.cs=\u127c\u12ad\u129b
+languages.iu=\u12a5\u1291\u12ad\u1272\u1271\u1275\u129b
+languages.co=\u12ae\u122d\u1232\u12ab\u129b
+languages.it=\u1323\u120a\u12eb\u1295\u129b
+languages.is=\u12a0\u12ed\u1235\u120b\u1295\u12f5\u129b
+languages.uz=\u12a1\u12dd\u1260\u12ad\u129b
+languages.or=\u12a6\u122a\u12eb\u129b
+languages.ik=\u12a5\u1291\u1352\u12eb\u1245\u129b
+languages.ur=\u12a1\u122d\u12f1\u129b
+languages.om=\u12a6\u122e\u121d\u129b
+languages.ca=\u12ab\u1273\u120b\u1295\u129b
+languages.ie=\u12a5\u1295\u1270\u122d\u120a\u1295\u130d\u12c8
+languages.id=\u12a5\u1295\u12f6\u1292\u1232\u129b
+languages.uk=\u12e9\u12ad\u1228\u1292\u129b
+languages.ia=\u12a2\u1295\u1274\u122d\u120a\u1295\u1313
+languages.oc=\u12a6\u12aa\u1273\u1295\u129b
+languages.ug=\u12a1\u12ca\u130d\u1201\u122d\u129b
+languages.hy=\u12a0\u122d\u1218\u1293\u12ca
+languages.br=\u1265\u122c\u1276\u1295\u129b
+languages.hu=\u1200\u1295\u130b\u122a\u129b
+languages.bo=\u1275\u1260\u1275\u1295\u129b
+languages.bn=\u1260\u1295\u130b\u120a\u129b
+languages.hr=\u12ad\u122e\u123d\u12eb\u1295\u129b
+languages.bi=\u1262\u1235\u120b\u121d\u129b
+languages.tw=\u1275\u12ca\u129b
+languages.bh=\u1262\u1203\u122a
+languages.bg=\u1261\u120d\u130b\u122a\u129b
+languages.tt=\u1273\u1273\u122d\u129b
+languages.no=\u1296\u122d\u12cc\u1302\u12eb\u1295
+languages.be=\u1264\u120b\u122b\u123b\u129b
+languages.ts=\u133e\u1295\u130b\u129b
+languages.hi=\u1210\u1295\u12f5\u129b
+languages.tr=\u1271\u122d\u12ad\u129b
+languages.nl=\u12f0\u127d
+languages.zu=\u12d9\u1209\u129b
+languages.ba=\u1263\u1235\u12aa\u122d\u129b
+languages.to=\u1276\u1295\u130b
+languages.he=\u12d5\u1265\u122b\u1235\u1325
+languages.tn=\u133d\u12cb\u1293\u12ca\u129b
+languages.tl=\u1273\u130b\u120e\u1308\u129b
+languages.tk=\u1271\u122d\u12ad\u1218\u1295\u129b
+languages.ha=\u1203\u12cd\u1233\u129b
+languages.ne=\u1294\u1353\u120a\u129b
+languages.az=\u12a0\u12dc\u122d\u1263\u12ed\u1303\u1295\u129b
+languages.ti=\u1275\u130d\u122d\u129b
+languages.ay=\u12a0\u12eb\u121b\u122d\u129b
+languages.th=\u1273\u12ed\u129b
+languages.tg=\u1273\u1302\u12aa\u129b
+languages.na=\u1293\u12a1\u1229
+languages.te=\u1270\u1209\u1309\u129b
+languages.zh=\u127b\u12ed\u1295\u129b
+languages.as=\u12a0\u1233\u121c\u12db\u12ca
+languages.ar=\u12d0\u122d\u1262\u129b
+languages.ta=\u1273\u121a\u120d\u129b
+languages.gu=\u1309\u1303\u122d\u1272\u129b
+languages.my=\u1261\u122d\u121b\u129b
+languages.am=\u12a0\u121b\u122d\u129b
+languages.za=\u12e1\u12cb\u1295\u130d\u129b
+languages.mt=\u121b\u120d\u1272\u1235\u129b
+languages.ms=\u121b\u120b\u12ed\u129b
+languages.gn=\u1313\u122b\u1292\u129b
+languages.byn=\u1265\u120a\u1295
+languages.sw=\u1235\u12cb\u1202\u120a\u129b
+languages.mr=\u121b\u122b\u12da\u129b
+languages.sv=\u1235\u12ca\u12f5\u1295\u129b
+languages.gl=\u130b\u1208\u130b\u129b
+languages.su=\u1231\u12f3\u1295\u129b
+languages.af=\u12a0\u134d\u122a\u1243\u1295\u1235\u129b
+languages.st=\u1236\u12de\u129b
+languages.mo=\u121e\u120d\u12f3\u126b\u12ca\u1293
+languages.ss=\u1235\u12cb\u1272\u129b
+languages.mn=\u121e\u1295\u130e\u120b\u12ca\u129b
+languages.gez=\u130d\u12d5\u12dd\u129b
+languages.sr=\u1230\u122d\u1262\u129b
+languages.sq=\u120d\u1264\u1292\u129b
+languages.ml=\u121b\u120b\u12eb\u120b\u121d\u129b
+languages.ab=\u12a0\u1265\u1210\u12da\u129b
+languages.mk=\u121b\u12a8\u12f6\u1292\u129b
+languages.aa=\u12a0\u134b\u122d\u129b
+languages.so=\u1231\u121b\u120d\u129b
+languages.sn=\u123e\u1293\u129b
+languages.mi=\u121b\u12ee\u122a\u129b
+languages.gd=\u12a5\u1235\u12ae\u1275\u1235 \u130c\u120d\u12ad\u129b
+languages.sm=\u1233\u121e\u12a0\u129b
+languages.sl=\u1235\u120e\u126a\u129b
+languages.mg=\u121b\u120b\u130b\u1235\u129b
+languages.tig=\u1275\u130d\u1228
+languages.sk=\u1235\u120e\u126b\u12ad\u129b
+languages.ga=\u12a0\u12ed\u122a\u123d
+languages.yo=\u12ee\u1229\u1263\u12ca\u129b
+languages.si=\u1235\u1295\u1203\u120d\u129b
+languages.sg=\u1233\u1295\u130e\u129b
+languages.yi=\u12ed\u12f2\u123b\u12ca\u129b
+languages.sd=\u1232\u1295\u12f5\u1202\u129b
+languages.fy=\u134d\u122a\u1235\u129b
+languages.sid=\u1232\u12f3\u121d\u129b
+languages.sa=\u1233\u1295\u1235\u12ad\u122a\u1275\u129b
+languages.fr=\u1348\u1228\u1295\u1233\u12ed\u129b
+languages.lv=\u120b\u1275\u126a\u12eb\u1295
+languages.fo=\u134b\u122e\u129b
+languages.lt=\u120a\u1271\u12a0\u1292\u12eb\u1295
+languages.rw=\u12aa\u1295\u12eb\u122d\u12cb\u1295\u12f5\u129b
+languages.ru=\u122b\u123d\u129b
+languages.fj=\u134a\u1302\u129b
+languages.lo=\u120b\u12cd\u1235\u129b
+languages.fi=\u134a\u1292\u123d
+languages.ln=\u120a\u1295\u130b\u120b\u129b
+languages.ro=\u122e\u121b\u1292\u12eb\u1295
+languages.rn=\u1229\u1295\u12f2\u129b
+languages.rm=\u122e\u121b\u1295\u1235
+languages.fa=\u1350\u122d\u1232\u12eb\u129b
+languages.la=\u120b\u1272\u1295\u129b
+languages.xh=\u12de\u1233\u129b
+languages.eu=\u1263\u1235\u12ad\u129b
+languages.et=\u12a4\u1235\u1276\u1292\u12a0\u1295
+languages.ky=\u12aa\u122d\u130a\u12dd\u129b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn_ER.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn_ER.properties
new file mode 100644
index 0000000..4971b7f
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_byn_ER.properties
@@ -0,0 +1,16 @@
+# LocaleInformation_byn_ER.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE\u1361 dd MMMM \u130d\u122d\u130b yyyy G
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ca.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ca.properties
index de4c5bf..8a598d9 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ca.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ca.properties
@@ -8,13 +8,21 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GuMtkHmsSEDFwWahKzUeygAZ
-currenciesDisplayName.ESP=ESP
+currenciesDisplayName.INR=Rupia \u00edndia
+currenciesDisplayName.JPY=Ien japon\u00e8s
+currenciesDisplayName.RUB=Ruble rus
+currenciesDisplayName.CNY=Iuan renmimbi xin\u00e8s
+currenciesDisplayName.GBP=Lliura esterlina brit\u00e0nica
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.USD=D\u00f2lar EUA
+currenciesDisplayName.BRL=Real brasiler
currenciesSymbol.ESP=\u20a7
shortMonths=gen.®febr.®mar\u00e7®abr.®maig®juny®jul.®ag.®set.®oct.®nov.®des.®®
months=gener®febrer®mar\u00e7®abril®maig®juny®juliol®agost®setembre®octubre®novembre®desembre®®
shortWeekdays=®dg.®dl.®dt.®dc.®dj.®dv.®ds.®
weekdays=®diumenge®dilluns®dimarts®dimecres®dijous®divendres®dissabte®
firstDayOfWeek=mon
+eras=aC®dC®
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
longDateFormat=d 'd\u2019'MMMM 'de' yyyy
@@ -85,13 +93,14 @@ territories.PL=Pol\u00f2nia
territories.PK=Pakistan
territories.PH=Filipines
territories.PG=Papua Nova Guinea
-territories.PF=Polin\u00e8sia Francesa
territories.CZ=Rep\u00fablica Txeca
-territories.PE=Per\u00fa
+territories.PF=Polin\u00e8sia Francesa
territories.CY=Xipre
+territories.PE=Per\u00fa
territories.CV=Cap Verd
-territories.PA=Panam\u00e0
territories.CU=Cuba
+territories.PA=Panam\u00e0
+territories.CS=S\u00e8rbia i Montenegro
territories.CR=Costa Rica
territories.CO=Col\u00f2mbia
territories.CN=Xina
@@ -109,57 +118,56 @@ territories.BW=Botswana
territories.BT=Bhutan
territories.BS=Bahames
territories.BR=Brasil
-territories.NZ=Nova Zelanda
territories.BO=Bol\u00edvia
+territories.NZ=Nova Zelanda
territories.BN=Brunei
territories.BM=Bermudes
-territories.NU=Niue
territories.BJ=Benin
+territories.NU=Niue
territories.BI=Burundi
territories.BH=Bahrain
territories.BG=Bulg\u00e0ria
territories.BF=Burkina Faso
-territories.NP=Nepal
territories.BE=B\u00e8lgica
-territories.NO=Noruega
+territories.NP=Nepal
territories.BD=Bangla Desh
+territories.NO=Noruega
territories.BB=Barbados
territories.ZW=Zimbabwe
-territories.NL=Pa\u00efsos Baixos
territories.BA=B\u00f2snia i Hercegovina
+territories.NL=Pa\u00efsos Baixos
territories.NI=Nicaragua
territories.NG=Nig\u00e8ria
territories.AZ=Azerbaidjan
territories.NE=N\u00edger
-territories.NC=Nova Caled\u00f2nia
territories.AW=Aruba
+territories.NC=Nova Caled\u00f2nia
territories.ZM=Z\u00e0mbia
-territories.AU=Austr\u00e0lia
territories.NA=Nam\u00edbia
-territories.AT=\u00c2ustria
+territories.AU=Austr\u00e0lia
+territories.AT=\u00c0ustria
territories.AR=Argentina
-territories.MZ=Mo\u00e7ambic
territories.AO=Angola
-territories.MY=Mal\u00e0isia
+territories.MZ=Mo\u00e7ambic
territories.AN=Antilles Holandeses
-territories.MX=M\u00e8xic
+territories.MY=Mal\u00e0isia
territories.AM=Arm\u00e8nia
+territories.MX=M\u00e8xic
territories.AL=Alb\u00e0nia
territories.ZA=Sud-\u00e0frica
territories.MU=Maurici
-territories.MT=Malta
territories.AI=Anguilla
+territories.MT=Malta
territories.MS=Montserrat
territories.MR=Maurit\u00e0nia
-territories.MQ=Martinica
territories.AF=Afganistan
+territories.MQ=Martinica
territories.AE=Uni\u00f3 dels Emirats \u00c0rabs
territories.AD=Andorra
territories.MN=Mong\u00f2lia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Maced\u00f2nia
-territories.YU=Iugosl\u00e0via
territories.YT=Mayotte
territories.MG=Madagascar
territories.MD=Mold\u00e0via
@@ -222,8 +230,8 @@ territories.TM=Turkmenistan
languages.es=espanyol
languages.ku=kurd
languages.eo=esperanto
-languages.ks=caixmiri
languages.en=angl\u00e8s
+languages.ks=caixmiri
languages.el=grec
languages.qu=qu\u00e8txua
languages.ko=core\u00e0
@@ -247,8 +255,8 @@ languages.cy=gal\u00b7l\u00e8s
languages.pa=panjabi
languages.cs=txec
languages.iu=inuktitut
-languages.it=itali\u00e0
languages.co=cors
+languages.it=itali\u00e0
languages.is=island\u00e8s
languages.uz=uzbek
languages.or=oriya
@@ -297,7 +305,7 @@ languages.na=nauru\u00e0
languages.te=telugu
languages.zh=xin\u00e9s
languages.as=assam\u00e8s
-languages.ar=\u00e2rab
+languages.ar=\u00e0rab
languages.ta=t\u00e0mil
languages.gu=gujarati
languages.my=birm\u00e0
@@ -324,8 +332,8 @@ languages.mk=macedoni
languages.aa=\u00e0far
languages.so=somali
languages.sn=shona
-languages.mi=maori
languages.gd=escoc\u00e8s
+languages.mi=maori
languages.sm=samo\u00e0
languages.sl=eslov\u00e8
languages.mg=malgaix
@@ -341,14 +349,14 @@ languages.fy=fris\u00f3
languages.sa=s\u00e0nscrit
languages.fr=franc\u00e8s
languages.lv=let\u00f3
-languages.lt=litu\u00e0
languages.fo=fero\u00e8s
+languages.lt=litu\u00e0
languages.rw=kinyarwanda
languages.ru=rus
-languages.lo=laosi\u00e0
languages.fj=fiji\u00e0
-languages.ln=lingala
+languages.lo=laosi\u00e0
languages.fi=fin\u00e8s
+languages.ln=lingala
languages.ro=roman\u00e8s
languages.rn=kirundi
languages.rm=retorom\u00e0nic
@@ -356,5 +364,5 @@ languages.fa=persa
languages.la=llat\u00ed
languages.xh=xosa
languages.eu=basc
-languages.ky=kirgu\u00eds
languages.et=estoni\u00e0
+languages.ky=kirgu\u00eds
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cs.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cs.properties
index 3456d49..d7dd185 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cs.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cs.properties
@@ -8,738 +8,364 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GuMtkHmsSEDFwWahKzUeygAZ
-currenciesDisplayName.JOD=Din\u00e1r jord\u00e1nsk\u00fd
-currenciesDisplayName.BOV=Mvdol
-currenciesDisplayName.XAU=Zlato
-currenciesDisplayName.FOK=Koruna Faersk\u00fdch ostrov\u016f
-currenciesDisplayName.LBP=Libra libanonsk\u00e1
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.TZS=\u0160ilink tanzansk\u00fd
-currenciesDisplayName.BOP=Peso
-currenciesDisplayName.KHR=Riel
-currenciesDisplayName.XAM=Asijsk\u00e1 pen\u011b\u017en\u00ed jednotka
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Riel star\u00fd
-currenciesDisplayName.ZMP=Libra zambijsk\u00e1
-currenciesDisplayName.AUP=Libra australsk\u00e1
-currenciesDisplayName.XAF=Frank BEAC/CFA
-currenciesDisplayName.MTP=Libra maltsk\u00e1
-currenciesDisplayName.GHR=Ghana Revalued Cedi
-currenciesDisplayName.ZMK=Kwacha
-currenciesDisplayName.GHP=Libra ghansk\u00e1
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghana Old Cedi
-currenciesDisplayName.MTL=Lira maltsk\u00e1
-currenciesDisplayName.AUD=Dolar australsk\u00fd
-currenciesDisplayName.USS=Dolar americk\u00fd (t\u00fd\u017e den)
-currenciesDisplayName.ITL=Lira italsk\u00e1
-currenciesDisplayName.USN=Dolar americk\u00fd (p\u0159\u00ed\u0161t\u00ed den)
-currenciesDisplayName.GHC=Cedi
-currenciesDisplayName.SGD=Dolar singapursk\u00fd
-currenciesDisplayName.PAB=Balboa
-currenciesDisplayName.LAK=Kip
-currenciesDisplayName.KGS=Som
-currenciesDisplayName.CHF=Frank \u0161v\u00fdcarsk\u00fd
-currenciesDisplayName.ATS=\u0160ilink
-currenciesDisplayName.USD=Dolar americk\u00fd
-currenciesDisplayName.ETD=Dolar etiopsk\u00fd
-currenciesDisplayName.BND=Dolar brunejsk\u00fd
-currenciesDisplayName.JMP=Libra jamajsk\u00e1
-currenciesDisplayName.ETB=Birr etiopsk\u00fd
-currenciesDisplayName.DZG=Frank al\u017e\u00edrsk\u00fd germinal
-currenciesDisplayName.DZF=Frank nov\u00fd al\u017e\u00edrsk\u00fd
-currenciesDisplayName.DZD=Din\u00e1r al\u017e\u00edrsk\u00fd
-currenciesDisplayName.PYG=Guarani
-currenciesDisplayName.LYP=Libra lybijsk\u00e1
-currenciesDisplayName.JMD=Dolar jamajsk\u00fd
-currenciesDisplayName.ISK=Koruna islandsk\u00e1
-currenciesDisplayName.ESP=Peseta \u0161pan\u011blsk\u00e1
-currenciesDisplayName.BMP=Libra bermudsk\u00e1
-currenciesDisplayName.LYD=Din\u00e1r lybijsk\u00fd
-currenciesDisplayName.BMD=Dolar bermudsk\u00fd
-currenciesDisplayName.NLG=Zlat\u00fd holandsk\u00fd
-currenciesDisplayName.MRO=Ouguiya
-currenciesDisplayName.IRR=Rij\u00e1l \u00edr\u00e1nsk\u00fd
-currenciesDisplayName.SEK=Koruna \u0161v\u00e9dsk\u00e1
-currenciesDisplayName.ERN=Nakfa
+currenciesDisplayName.YDD=Din\u00e1r jemensk\u00fd
+currenciesDisplayName.TWD=Dolar tchajvansk\u00fd nov\u00fd
currenciesDisplayName.KES=\u0160ilink ke\u0148sk\u00fd
-currenciesDisplayName.CFF=Frank St\u0159edoafrick\u00e9 republiky CFA
+currenciesDisplayName.BYB=Rubl nov\u00fd b\u011blorusk\u00fd (1994-1999)
+currenciesDisplayName.LKR=Rupie sr\u00edlansk\u00e1
+currenciesDisplayName.RWF=Frank rwandsk\u00fd
+currenciesDisplayName.TJS=Somoni
+currenciesDisplayName.SDP=Libra s\u00fad\u00e1nsk\u00e1
+currenciesDisplayName.TJR=Tajikistan Ruble
+currenciesDisplayName.ERN=Nakfa
+currenciesDisplayName.AFN=Afgh\u00e1n
+currenciesDisplayName.GRD=Drachma
+currenciesDisplayName.IEP=Libra irsk\u00e1
currenciesDisplayName.ARS=Peso argentinsk\u00e9
+currenciesDisplayName.SDD=Din\u00e1r s\u00fad\u00e1nsk\u00fd
currenciesDisplayName.ARP=Peso argentinsk\u00e9 (1983-1985)
-currenciesDisplayName.ARM=Peso argentinsk\u00e9 Moneda Nacional
-currenciesDisplayName.TWD=Dolar tchajvansk\u00fd nov\u00fd
-currenciesDisplayName.SDP=Libra s\u00fad\u00e1nsk\u00e1
currenciesDisplayName.GEL=Lari
+currenciesDisplayName.AFA=Afgh\u00e1n (1927-2002)
currenciesDisplayName.GEK=Georgian Kupon Larit
-currenciesDisplayName.MQF=Frank martiniksk\u00fd
+currenciesDisplayName.CRC=Col\u00f3n kostarick\u00fd
currenciesDisplayName.FKP=Libra falklandsk\u00e1
+currenciesDisplayName.EEK=Kroon
+currenciesDisplayName.HKD=Dolar hongkongsk\u00fd
+currenciesDisplayName.MDL=Leu moldavsk\u00fd
currenciesDisplayName.ARA=Austral
-currenciesDisplayName.SDD=Din\u00e1r s\u00fad\u00e1nsk\u00fd
currenciesDisplayName.IQD=Din\u00e1r ir\u00e1ck\u00fd
-currenciesDisplayName.TVD=Dolar tuvalsk\u00fd
currenciesDisplayName.SCR=Rupie seychelsk\u00e1
+currenciesDisplayName.VUV=Vatu
+currenciesDisplayName.DKK=Koruna d\u00e1nsk\u00e1
+currenciesDisplayName.KPW=Won severokorejsk\u00fd
+currenciesDisplayName.GQE=Equatorial Guinea Ekwele Guineana
+currenciesDisplayName.IDR=Rupie indon\u00e9zsk\u00e1
currenciesDisplayName.LVR=Rubl loty\u0161sk\u00fd
-currenciesDisplayName.FJP=Libra fid\u017eijsk\u00e1
+currenciesDisplayName.SOS=\u0160ilink som\u00e1lsk\u00fd
+currenciesDisplayName.AED=Dirham SAE
+currenciesDisplayName.BWP=Pula
currenciesDisplayName.LVL=Lat loty\u0161sk\u00fd
-currenciesDisplayName.CDL=Zaire kon\u017esk\u00fd
-currenciesDisplayName.CDG=Frank Kon\u017esk\u00e9 republiky
-currenciesDisplayName.CDF=Frank kon\u017esk\u00fd
-currenciesDisplayName.FJD=Dolar fid\u017eijsk\u00fd
+currenciesDisplayName.RUR=Rubl rusk\u00fd (1991-1998)
currenciesDisplayName.NIO=Cordoba oro
+currenciesDisplayName.ADP=Peseta andorrsk\u00e1
+currenciesDisplayName.FJD=Dolar fid\u017eijsk\u00fd
currenciesDisplayName.MOP=Pataca
-currenciesDisplayName.NIG=Cordoba zlat\u00e1
+currenciesDisplayName.RUB=Rubl rusk\u00fd
+currenciesDisplayName.CDF=Frank kon\u017esk\u00fd
currenciesDisplayName.NIC=Cordoba
-currenciesDisplayName.FIN=Markka (1860-1962)
-currenciesDisplayName.FIM=Markka
+currenciesDisplayName.DJF=Frank d\u017eibutsk\u00fd
+currenciesDisplayName.ECV=Ecuador Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Dolar \u0160alamounov\u00fdch ostrov\u016f
+currenciesDisplayName.UZS=Sum uzbeck\u00fd
+currenciesDisplayName.ECS=Sucre ekv\u00e1dorsk\u00fd
+currenciesDisplayName.PHP=Peso filip\u00ednsk\u00e9
+currenciesDisplayName.THB=Baht
currenciesDisplayName.LUF=Frank lucembursk\u00fd
-currenciesDisplayName.TTO=Dolar star\u00fd Trinidad a Tobago
-currenciesDisplayName.AOS=Escudo angolsk\u00e9
-currenciesDisplayName.AOR=Kwanza reajustado (1995-1999)
-currenciesDisplayName.MNT=Tugrik
-currenciesDisplayName.HUF=Forint
-currenciesDisplayName.BIF=Frank burundsk\u00fd
-currenciesDisplayName.AON=Kwanza nov\u00e1 (1990-2000)
-currenciesDisplayName.AOK=Kwanza (1977-1990)
+currenciesDisplayName.FIM=Markka
currenciesDisplayName.TTD=Dolar Trinidad a Tobago
currenciesDisplayName.SZL=Lilangeni
-currenciesDisplayName.NHF=Frank Nov\u00fdch Hebrid CFP
-currenciesDisplayName.GBP=Libra \u0161terlink\u016f
-currenciesDisplayName.SAS=Rij\u00e1l saudsk\u00fd sovereign
+currenciesDisplayName.MNT=Tugrik
currenciesDisplayName.SAR=Rij\u00e1l saudsk\u00fd
+currenciesDisplayName.UAK=Karbovanec
+currenciesDisplayName.UAH=H\u0159ivna
+currenciesDisplayName.HUF=Forint
+currenciesDisplayName.COP=Peso kolumbijsk\u00e9
+currenciesDisplayName.QAR=Rij\u00e1l katarsk\u00fd
currenciesDisplayName.LTT=Talon
-currenciesDisplayName.INR=Rupie indick\u00e1
currenciesDisplayName.PTE=Escudo portugalsk\u00e9
-currenciesDisplayName.AOA=Kwanza
-currenciesDisplayName.PTC=Conto portugalsk\u00e9
+currenciesDisplayName.AOR=Kwanza reajustado (1995-1999)
+currenciesDisplayName.UYU=Peso uruguaysk\u00e9
+currenciesDisplayName.GBP=Libra \u0161terlink\u016f
+currenciesDisplayName.BIF=Frank burundsk\u00fd
+currenciesDisplayName.INR=Rupie indick\u00e1
+currenciesDisplayName.ZRZ=Zaire
+currenciesDisplayName.AON=Kwanza nov\u00e1 (1990-2000)
currenciesDisplayName.LTL=Litus litevsk\u00fd
+currenciesDisplayName.XFU=Frank UIC
currenciesDisplayName.KZT=Tenge
-currenciesDisplayName.KZR=Rubl kaza\u0161sk\u00fd
-currenciesDisplayName.VGD=Dolar Britsk\u00fdch Panensk\u00fdch ostrov\u016f
-currenciesDisplayName.NGP=Libra nigerijsk\u00e1
+currenciesDisplayName.MZM=Metical
+currenciesDisplayName.UYP=Peso uruguaysk\u00e9 (1975-1993)
+currenciesDisplayName.AOK=Kwanza (1977-1990)
+currenciesDisplayName.BUK=Kyat barmsk\u00fd
+currenciesDisplayName.GNS=Guinea Syli
+currenciesDisplayName.XFO=Frank zlat\u00fd
+currenciesDisplayName.PGK=Kina
+currenciesDisplayName.SYP=Libra syrsk\u00e1
+currenciesDisplayName.MZE=Escudo Mosambiku
+currenciesDisplayName.OMR=Rij\u00e1l om\u00e1nsk\u00fd
currenciesDisplayName.NGN=Naira
+currenciesDisplayName.ZRN=Zaire nov\u00fd
+currenciesDisplayName.AOA=Kwanza
+currenciesDisplayName.CNY=Juan renminbi
+currenciesDisplayName.MAF=Frank marock\u00fd
+currenciesDisplayName.GNF=Frank guinejsk\u00fd
currenciesDisplayName.HTG=Gourde
-currenciesDisplayName.SYP=Libra syrsk\u00e1
-currenciesDisplayName.PSP=Libra palestinsk\u00e1
-currenciesDisplayName.BHD=Din\u00e1r bahrajnsk\u00fd
+currenciesDisplayName.MAD=Dirham marock\u00fd
+currenciesDisplayName.TRY=Lira nov\u00e1 tureck\u00e1
currenciesDisplayName.MMK=Kyat
+currenciesDisplayName.MYR=Ringgit malajskijsk\u00fd
+currenciesDisplayName.LSL=Loti
+currenciesDisplayName.XEU=Evropsk\u00e1 m\u011bnov\u00e1 jednotka
+currenciesDisplayName.BHD=Din\u00e1r bahrajnsk\u00fd
+currenciesDisplayName.BTN=Ngultrum
+currenciesDisplayName.TRL=Lira tureck\u00e1
+currenciesDisplayName.KMF=Frank komorsk\u00fd
currenciesDisplayName.ANG=Zlat\u00fd Nizozemsk\u00fdch Antil
currenciesDisplayName.CZK=Koruna \u010desk\u00e1
-currenciesDisplayName.IMP=Libra \u0161terlink\u016f Ostrov Man
-currenciesDisplayName.LSL=Loti
-currenciesDisplayName.GAF=Frank gabonsk\u00fd CFA
-currenciesDisplayName.BGO=Lev Bulharsk\u00fd (1879-1952)
+currenciesDisplayName.AZM=Manat \u00e1zerbajd\u017e\u00e1nsk\u00fd
+currenciesDisplayName.KYD=Dolar Kajmansk\u00fdch ostrov\u016f
+currenciesDisplayName.GMD=Dalasi
currenciesDisplayName.BGN=Lev Bulharsk\u00fd
-currenciesDisplayName.BGM=Lev Bulharsk\u00fd socialistick\u00fd
currenciesDisplayName.CAD=Dolar kanadsk\u00fd
+currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Lev
-currenciesDisplayName.TRL=Lira tureck\u00e1
-currenciesDisplayName.KYD=Dolar Kajmansk\u00fdch ostrov\u016f
-currenciesDisplayName.CYP=Libra kypersk\u00e1
+currenciesDisplayName.VEB=Bolivar
+currenciesDisplayName.MLF=Frank malijsk\u00fd
currenciesDisplayName.ILS=\u0160ekel nov\u00fd izraelsk\u00fd
+currenciesDisplayName.MXP=Peso st\u0159\u00edbrn\u00e9 mexick\u00e9 (1861-1992)
+currenciesDisplayName.PES=Sol
currenciesDisplayName.GYD=Dolar guyansk\u00fd
-currenciesDisplayName.AMD=Dram arm\u00e9nsk\u00fd
+currenciesDisplayName.MXN=Peso mexick\u00e9
currenciesDisplayName.ILP=Libra izraelsk\u00e1
-currenciesDisplayName.MLF=Frank malijsk\u00fd
-currenciesDisplayName.ILL=\u0160ekel izraelsk\u00fd
-currenciesDisplayName.VEB=Bolivar
+currenciesDisplayName.SKK=Koruna slovensk\u00e1
+currenciesDisplayName.CYP=Libra kypersk\u00e1
+currenciesDisplayName.XDR=SDR
+currenciesDisplayName.PEN=Nuevo sol
currenciesDisplayName.LRD=Dolar liberijsk\u00fd
-currenciesDisplayName.ALV=Albanian Lek Valute
+currenciesDisplayName.PEI=Inti
+currenciesDisplayName.AMD=Dram arm\u00e9nsk\u00fd
+currenciesDisplayName.BSD=Dolar bahamsk\u00fd
currenciesDisplayName.HRK=Kuna chorvatsk\u00e1
-currenciesDisplayName.REF=Frank Reunion
+currenciesDisplayName.CLP=Peso chilsk\u00e9
currenciesDisplayName.HRD=Dinar chorvatsk\u00fd
-currenciesDisplayName.ALL=Lek
-currenciesDisplayName.JEP=Libra \u0161terlink\u016f Jersey
-currenciesDisplayName.ALK=Lek (1946-1961)
-currenciesDisplayName.MKN=Den\u00e1r (1992-1993)
-currenciesDisplayName.MKD=Den\u00e1r
-currenciesDisplayName.TPP=Pataca timorsk\u00e1
currenciesDisplayName.XPF=Frank CFP
-currenciesDisplayName.BEL=Frank finan\u010dn\u00ed
-currenciesDisplayName.GWP=Peso Guinnea-Bissau
-currenciesDisplayName.KWD=Din\u00e1r kuvajtsk\u00fd
-currenciesDisplayName.GWM=Portuguese Guinea Mil Reis
-currenciesDisplayName.BEF=Frank belgick\u00fd
+currenciesDisplayName.FRF=Frank francouzsk\u00fd
+currenciesDisplayName.BRR=Cruzeiro real
+currenciesDisplayName.MKD=Den\u00e1r
+currenciesDisplayName.CLF=Unidades de fomento
+currenciesDisplayName.ALL=Lek
+currenciesDisplayName.BRN=Cruzado nov\u00e9
+currenciesDisplayName.MWK=Kwacha
+currenciesDisplayName.BRL=Real brazilsk\u00fd
currenciesDisplayName.TPE=Escudo timorsk\u00e9
-currenciesDisplayName.BEC=Frank konvertibiln\u00ed
-currenciesDisplayName.GWE=Escudo guinejsk\u00e9
+currenciesDisplayName.BRE=Cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Cruzado
+currenciesDisplayName.BRB=Cruzeiro (1967-1986)
+currenciesDisplayName.DEM=Marka n\u011bmeck\u00e1
+currenciesDisplayName.KWD=Din\u00e1r kuvajtsk\u00fd
+currenciesDisplayName.XCD=Dolar v\u00fdchodokaribsk\u00fd
+currenciesDisplayName.NPR=Rupie nep\u00e1lsk\u00e1
+currenciesDisplayName.GWP=Peso Guinnea-Bissau
+currenciesDisplayName.YUN=Din\u00e1r jugosl\u00e1vsk\u00fd
currenciesDisplayName.SVC=Colon salvadorsk\u00fd
-currenciesDisplayName.CWG=Zlat\u00fd Curacao
-currenciesDisplayName.BDT=Taka
-currenciesDisplayName.TOS=Libra \u0161terlink\u016f ton\u017esk\u00e1
+currenciesDisplayName.YUM=Din\u00e1r jugosl\u00e1vsk\u00fd
+currenciesDisplayName.BEL=Frank finan\u010dn\u00ed
+currenciesDisplayName.SIT=Tolar
+currenciesDisplayName.JPY=Jen
currenciesDisplayName.XOF=Frank BCEAO/CFA
+currenciesDisplayName.MVR=Rufiyaa
+currenciesDisplayName.GWE=Escudo guinejsk\u00e9
+currenciesDisplayName.BEF=Frank belgick\u00fd
+currenciesDisplayName.YUD=Din\u00e1r jugosl\u00e1vsk\u00fd nov\u00fd
+currenciesDisplayName.BEC=Frank konvertibiln\u00ed
currenciesDisplayName.SUR=Rubl
-currenciesDisplayName.SUN=Rubl nov\u00fd
-currenciesDisplayName.NCF=Frank Nov\u00e9 Kaledonie germinal
-currenciesDisplayName.CVE=Escudo kapverdsk\u00e9
-currenciesDisplayName.XNF=Frank Francouzsk\u00fdch Antil CFA
+currenciesDisplayName.ROL=Lei
+currenciesDisplayName.DDM=Marka NDR
+currenciesDisplayName.BDT=Taka
+currenciesDisplayName.XBD=Evropsk\u00e1 jednotka \u00fa\u010dtu 17 (XBD)
+currenciesDisplayName.AWG=Zlat\u00fd arubsk\u00fd
+currenciesDisplayName.XBC=Evropsk\u00e1 jednotka \u00fa\u010dtu 9 (XBC)
+currenciesDisplayName.XBB=Evropsk\u00e1 pen\u011b\u017en\u00ed jednotka
+currenciesDisplayName.XBA=Evropsk\u00e1 sm\u00ed\u0161en\u00e1 jednotka
+currenciesDisplayName.NOK=Koruna norsk\u00e1
+currenciesDisplayName.MUR=Rupie mauricijsk\u00e1
currenciesDisplayName.ZAR=Rand
-currenciesDisplayName.DOP=Peso dominik\u00e1nsk\u00e9
-currenciesDisplayName.ZAP=Libra jihoafrick\u00e1
+currenciesDisplayName.SHP=Libra Svat\u00e9 Heleny
+currenciesDisplayName.XAU=Zlato
currenciesDisplayName.ZAL=Rand finan\u010dn\u00ed
+currenciesDisplayName.TZS=\u0160ilink tanzansk\u00fd
+currenciesDisplayName.GIP=Libra gibraltarsk\u00e1
currenciesDisplayName.TND=Din\u00e1r tunisk\u00fd
-currenciesDisplayName.CUP=Peso kub\u00e1nsk\u00e9
-currenciesDisplayName.GUF=French Guyana Franc Guiana
+currenciesDisplayName.CVE=Escudo kapverdsk\u00e9
currenciesDisplayName.UGX=\u0160ilink ugandsk\u00fd
-currenciesDisplayName.LNR=Rupie cejlonsk\u00e1
-currenciesDisplayName.AIF=Affars and Issas Franc
-currenciesDisplayName.VAL=Lira Vatik\u00e1nu
-currenciesDisplayName.STE=Escudo Svat\u00e9ho Tom\u00e1\u0161e
+currenciesDisplayName.ZMK=Kwacha
+currenciesDisplayName.JOD=Din\u00e1r jord\u00e1nsk\u00fd
+currenciesDisplayName.XAF=Frank BEAC/CFA
+currenciesDisplayName.LBP=Libra libanonsk\u00e1
currenciesDisplayName.UGS=\u0160ilink ugandsk\u00fd (1966-1987)
currenciesDisplayName.STD=Dobra
-currenciesDisplayName.MHD=Dolar Marshallov\u00fdch ostrov\u016f
-currenciesDisplayName.NZP=Libra novoz\u00e9landsk\u00e1
currenciesDisplayName.WST=Tala
-currenciesDisplayName.WSP=Libra Z\u00e1padn\u00ed Samoa
-currenciesDisplayName.HNL=Lempira
+currenciesDisplayName.KHR=Riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Peso dominik\u00e1nsk\u00e9
+currenciesDisplayName.BOV=Mvdol
+currenciesDisplayName.MTP=Libra maltsk\u00e1
+currenciesDisplayName.USS=Dolar americk\u00fd (t\u00fd\u017e den)
+currenciesDisplayName.BOP=Peso
+currenciesDisplayName.MTL=Lira maltsk\u00e1
+currenciesDisplayName.CUP=Peso kub\u00e1nsk\u00e9
currenciesDisplayName.TMM=Manat
-currenciesDisplayName.GTQ=Quetzal
+currenciesDisplayName.USN=Dolar americk\u00fd (p\u0159\u00ed\u0161t\u00ed den)
+currenciesDisplayName.SGD=Dolar singapursk\u00fd
currenciesDisplayName.NZD=Dolar novoz\u00e9landsk\u00fd
-currenciesDisplayName.SSP=Libra skotsk\u00e1
-currenciesDisplayName.BBD=Dolar barbadosk\u00fd
+currenciesDisplayName.USD=Dolar americk\u00fd
+currenciesDisplayName.HNL=Lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Lira italsk\u00e1
+currenciesDisplayName.PAB=Balboa
+currenciesDisplayName.GTQ=Quetzal
+currenciesDisplayName.LAK=Kip
+currenciesDisplayName.GHC=Cedi
+currenciesDisplayName.AUD=Dolar australsk\u00fd
currenciesDisplayName.NAD=Dolar namibijsk\u00fd
+currenciesDisplayName.KGS=Som
currenciesDisplayName.MGF=Frank madagaskarsk\u00fd
+currenciesDisplayName.CHF=Frank \u0161v\u00fdcarsk\u00fd
+currenciesDisplayName.BBD=Dolar barbadosk\u00fd
currenciesDisplayName.MGA=Ariary madagaskarsk\u00fd
-currenciesDisplayName.EGP=Libra egyptsk\u00e1
-currenciesDisplayName.BZH=Dolar Britsk\u00e9ho Hondurasu
+currenciesDisplayName.PYG=Guarani
currenciesDisplayName.PLZ=Zlot\u00fd (1950-1995)
-currenciesDisplayName.BAN=Nov\u00fd Din\u00e1r Bosny a Hercegoviny
-currenciesDisplayName.BAM=Marka konvertibiln\u00ed
-currenciesDisplayName.BZD=Dolar belizsk\u00fd
-currenciesDisplayName.BAD=Din\u00e1r Bosny a Hercegoviny
-currenciesDisplayName.PLN=Zlot\u00fd
currenciesDisplayName.YER=Rij\u00e1l jemensk\u00fd
+currenciesDisplayName.ATS=\u0160ilink
+currenciesDisplayName.ETB=Birr etiopsk\u00fd
+currenciesDisplayName.BND=Dolar brunejsk\u00fd
+currenciesDisplayName.JMD=Dolar jamajsk\u00fd
+currenciesDisplayName.EGP=Libra egyptsk\u00e1
+currenciesDisplayName.PLN=Zlot\u00fd
+currenciesDisplayName.DZD=Din\u00e1r al\u017e\u00edrsk\u00fd
+currenciesDisplayName.ISK=Koruna islandsk\u00e1
currenciesDisplayName.SRG=Zlat\u00fd surinamsk\u00fd
-currenciesDisplayName.CSK=Koruna \u010deskoslovensk\u00e1
+currenciesDisplayName.LYD=Din\u00e1r lybijsk\u00fd
+currenciesDisplayName.BZD=Dolar belizsk\u00fd
+currenciesDisplayName.BAM=Marka konvertibiln\u00ed
+currenciesDisplayName.ESP=Peseta \u0161pan\u011blsk\u00e1
currenciesDisplayName.KRW=Won jihokorejsk\u00fd
+currenciesDisplayName.NLG=Zlat\u00fd holandsk\u00fd
+currenciesDisplayName.MRO=Ouguiya
+currenciesDisplayName.BAD=Din\u00e1r Bosny a Hercegoviny
+currenciesDisplayName.ZWD=Dolar zimbabwsk\u00fd
+currenciesDisplayName.SEK=Koruna \u0161v\u00e9dsk\u00e1
+currenciesDisplayName.CSK=Koruna \u010deskoslovensk\u00e1
currenciesDisplayName.BYR=Rubl b\u011blorusk\u00fd
-currenciesDisplayName.YEI=Rij\u00e1l jemensk\u00fd imadi
-currenciesDisplayName.BYL=Rubl b\u011blorusk\u00fd (1992-1994)
-currenciesDisplayName.CSC=Koruna \u010deskoslovensk\u00e1
-currenciesDisplayName.KRO=Won star\u00fd jihokorejsk\u00fd
-currenciesDisplayName.KRH=Hwan jihokorejsk\u00fd
-currenciesDisplayName.BYB=Rubl nov\u00fd b\u011blorusk\u00fd (1994-1999)
-currenciesDisplayName.SQS=Somaliland Shilling
-currenciesDisplayName.GRN=Drachma nov\u00e1 \u0159eck\u00e1
+currenciesDisplayName.IRR=Rij\u00e1l \u00edr\u00e1nsk\u00fd
currenciesDisplayName.PKR=Rupie p\u00e1kist\u00e1nsk\u00e1
-currenciesDisplayName.AFN=Afgh\u00e1n
-currenciesDisplayName.ZWD=Dolar zimbabwsk\u00fd
-currenciesDisplayName.LKR=Rupie sr\u00edlansk\u00e1
-currenciesDisplayName.GRD=Drachma
-currenciesDisplayName.IEP=Libra irsk\u00e1
-currenciesDisplayName.AFA=Afgh\u00e1n (1927-2002)
-currenciesDisplayName.YDD=Din\u00e1r jemensk\u00fd
-currenciesDisplayName.RWF=Frank rwandsk\u00fd
-currenciesDisplayName.CRC=Col\u00f3n kostarick\u00fd
-currenciesDisplayName.TJS=Somoni
-currenciesDisplayName.TJR=Tajikistan Ruble
-currenciesDisplayName.EEK=Kroon
-currenciesDisplayName.GQP=Equatorial Guinea Peseta Guineana
-currenciesDisplayName.MDR=Moldovan Ruble Cupon
-currenciesDisplayName.HKD=Dolar hongkongsk\u00fd
-currenciesDisplayName.DKK=Koruna d\u00e1nsk\u00e1
-currenciesDisplayName.MDL=Leu moldavsk\u00fd
-currenciesDisplayName.GQF=Equatorial Guinea Franco
-currenciesDisplayName.GQE=Equatorial Guinea Ekwele Guineana
-currenciesDisplayName.IDR=Rupie indon\u00e9zsk\u00e1
-currenciesDisplayName.AED=Dirham SAE
-currenciesDisplayName.KPW=Won severokorejsk\u00fd
-currenciesDisplayName.IDN=Indonesian New Rupiah
-currenciesDisplayName.BWP=Pula
-currenciesDisplayName.MDC=Moldovan Leu Cupon
-currenciesDisplayName.IDJ=Indonesian Java Rupiah
-currenciesDisplayName.IDG=Indonesian Nica Guilder
-currenciesDisplayName.VUV=Vatu
-currenciesDisplayName.XID=Din\u00e1r isl\u00e1msk\u00fd
-currenciesDisplayName.SOS=\u0160ilink som\u00e1lsk\u00fd
-currenciesDisplayName.ADP=Peseta andorrsk\u00e1
-currenciesDisplayName.RUR=Rubl rusk\u00fd (1991-1998)
-currenciesDisplayName.GPF=Frank guadeloupsk\u00fd
-currenciesDisplayName.DJF=Frank d\u017eibutsk\u00fd
-currenciesDisplayName.ADD=Diner andorrsk\u00fd
-currenciesDisplayName.MCG=Frank monack\u00fd germinal
-currenciesDisplayName.MCF=Frank nouveau monack\u00fd
-currenciesDisplayName.ECV=Ecuador Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Sucre ekv\u00e1dorsk\u00fd
-currenciesDisplayName.LIF=Frank lichten\u0161tejnsk\u00fd
-currenciesDisplayName.RUB=Rubl rusk\u00fd
-currenciesDisplayName.PHP=Peso filip\u00ednsk\u00e9
-currenciesDisplayName.UZS=Sum uzbeck\u00fd
-currenciesDisplayName.COP=Peso kolumbijsk\u00e9
-currenciesDisplayName.THB=Baht
-currenciesDisplayName.IBP=Libra severoirsk\u00e1
-currenciesDisplayName.BUR=Rupie barmsk\u00e1
-currenciesDisplayName.COF=Krank kon\u017esk\u00fd CFA
-currenciesDisplayName.BUK=Kyat barmsk\u00fd
-currenciesDisplayName.COB=Peso kolumbijsk\u00e9
-currenciesDisplayName.UZC=Uzbekistan Coupon Som
-currenciesDisplayName.UAK=Karbovanec
-currenciesDisplayName.QAR=Rij\u00e1l katarsk\u00fd
-currenciesDisplayName.UAH=H\u0159ivna
-currenciesDisplayName.GNS=Guinea Syli
-currenciesDisplayName.CNY=Juan renminbi
-currenciesDisplayName.MZM=Metical
-currenciesDisplayName.CNX=Dolar lidov\u00e9 banky
-currenciesDisplayName.UYU=Peso uruguaysk\u00e9
-currenciesDisplayName.GNI=Frank guinejsk\u00fd (1960-1972)
-currenciesDisplayName.SML=Lira San Marino
-currenciesDisplayName.MZE=Escudo Mosambiku
-currenciesDisplayName.CNP=Juan jen min piao
-currenciesDisplayName.PGK=Kina
-currenciesDisplayName.OMS=Rij\u00e1l om\u00e1nsk\u00fd saidi
-currenciesDisplayName.GNF=Frank guinejsk\u00fd
-currenciesDisplayName.UYP=Peso uruguaysk\u00e9 (1975-1993)
-currenciesDisplayName.OMR=Rij\u00e1l om\u00e1nsk\u00fd
-currenciesDisplayName.XFU=Frank UIC
-currenciesDisplayName.ZRZ=Zaire
-currenciesDisplayName.BTR=Rupie bh\u00fat\u00e1nsk\u00e1
-currenciesDisplayName.MAF=Frank marock\u00fd
-currenciesDisplayName.MAD=Dirham marock\u00fd
-currenciesDisplayName.BTN=Ngultrum
-currenciesDisplayName.XFO=Frank zlat\u00fd
-currenciesDisplayName.UYF=Peso uruguaysk\u00e9 fuerte
-currenciesDisplayName.MYR=Ringgit malajskijsk\u00fd
-currenciesDisplayName.ZRN=Zaire nov\u00fd
-currenciesDisplayName.AZM=Manat \u00e1zerbajd\u017e\u00e1nsk\u00fd
-currenciesDisplayName.GMP=Libra gambijsk\u00e1
-currenciesDisplayName.KMF=Frank komorsk\u00fd
-currenciesDisplayName.GMD=Dalasi
-currenciesDisplayName.XEU=Evropsk\u00e1 m\u011bnov\u00e1 jednotka
-currenciesDisplayName.BSP=Libra bahamsk\u00e1
-currenciesDisplayName.CMF=Frank kamerunsk\u00fd CFA
-currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=Frank BCEAEC/CFA
-currenciesDisplayName.BSD=Dolar bahamsk\u00fd
-currenciesDisplayName.MXP=Peso st\u0159\u00edbrn\u00e9 mexick\u00e9 (1861-1992)
-currenciesDisplayName.MXN=Peso mexick\u00e9
-currenciesDisplayName.PES=Sol
-currenciesDisplayName.GLK=Greenland Krone
-currenciesDisplayName.BRZ=Cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Nuevo sol
-currenciesDisplayName.CLP=Peso chilsk\u00e9
-currenciesDisplayName.SKK=Koruna slovensk\u00e1
-currenciesDisplayName.PEI=Inti
-currenciesDisplayName.BRR=Cruzeiro real
-currenciesDisplayName.XDR=SDR
-currenciesDisplayName.FRG=Frank francouzsk\u00fd germinal/Frank poincare
-currenciesDisplayName.FRF=Frank francouzsk\u00fd
-currenciesDisplayName.BRN=Cruzado nov\u00e9
-currenciesDisplayName.CLF=Unidades de fomento
-currenciesDisplayName.CLE=Escudo chilsk\u00e9
-currenciesDisplayName.BRL=Real brazilsk\u00fd
-currenciesDisplayName.CLC=Condor chilsk\u00fd
-currenciesDisplayName.BRE=Cruzeiro (1990-1993)
-currenciesDisplayName.DES=Sperrmark n\u011bmeck\u00e1
-currenciesDisplayName.MWP=Libra malawijsk\u00e1
-currenciesDisplayName.BRC=Cruzado
-currenciesDisplayName.BRB=Cruzeiro (1967-1986)
-currenciesDisplayName.MWK=Kwacha
-currenciesDisplayName.PDR=Transdniestria Ruble
-currenciesDisplayName.DEM=Marka n\u011bmeck\u00e1
-currenciesDisplayName.TDF=Frank \u010dadsk\u00fd CFA
-currenciesDisplayName.PDN=Transdniestria New Ruble
-currenciesDisplayName.PDK=Transdniestria Ruble Kupon
-currenciesDisplayName.NPR=Rupie nep\u00e1lsk\u00e1
-currenciesDisplayName.CKD=Dolar Cookov\u00fdch ostrov\u016f
-currenciesDisplayName.JPY=Jen
-currenciesDisplayName.MVR=Rufiyaa
-currenciesDisplayName.XCF=Frank Nouveau CFA
-currenciesDisplayName.MVP=Rupie maledivsk\u00e1
-currenciesDisplayName.XCD=Dolar v\u00fdchodokaribsk\u00fd
-currenciesDisplayName.SIT=Tolar
-currenciesDisplayName.YUR=Din\u00e1r jugosl\u00e1vsk\u00fd reformovan\u00fd
-currenciesDisplayName.AWG=Zlat\u00fd arubsk\u00fd
-currenciesDisplayName.DDM=Marka NDR
-currenciesDisplayName.YUN=Din\u00e1r jugosl\u00e1vsk\u00fd
-currenciesDisplayName.YUM=Din\u00e1r jugosl\u00e1vsk\u00fd
-currenciesDisplayName.TCC=Koruna Turks a Caicos
-currenciesDisplayName.YUG=Din\u00e1r jugosl\u00e1vsk\u00fd 1994
-currenciesDisplayName.YUF=Din\u00e1r jugosl\u00e1vsk\u00fd federativn\u00ed
-currenciesDisplayName.RON=Lei nov\u00fd
-currenciesDisplayName.YUD=Din\u00e1r jugosl\u00e1vsk\u00fd nov\u00fd
-currenciesDisplayName.ROL=Lei
-currenciesDisplayName.SIB=Slovenia Tolar Bons
-currenciesDisplayName.NOK=Koruna norsk\u00e1
-currenciesDisplayName.MUR=Rupie mauricijsk\u00e1
-currenciesDisplayName.XBD=Evropsk\u00e1 jednotka \u00fa\u010dtu 17 (XBD)
-currenciesDisplayName.GIP=Libra gibraltarsk\u00e1
-currenciesDisplayName.XBC=Evropsk\u00e1 jednotka \u00fa\u010dtu 9 (XBC)
-currenciesDisplayName.XBB=Evropsk\u00e1 pen\u011b\u017en\u00ed jednotka
-currenciesDisplayName.XBA=Evropsk\u00e1 sm\u00ed\u0161en\u00e1 jednotka
-currenciesDisplayName.KID=Dolar kiribatsk\u00fd
-currenciesDisplayName.SHP=Libra Svat\u00e9 Heleny
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Dolar bermudsk\u00fd
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=K\u010d
-currenciesSymbol.IMP=IMP
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
currenciesSymbol.DOP=RD$
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.XFO=XFO
-currenciesSymbol.BTN=Nu
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.XBC=XBC
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-shortMonths=1.®2.®3.®4.®5.®6.®7.®8.®9.®10.®11.®12.®®
-months=Leden®\u00danor®B\u0159ezen®Duben®Kv\u011bten®\u010cerven®\u010cervenec®Srpen®Z\u00e1\u0159\u00ed®\u0158\u00edjen®Listopad®Prosinec®®
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.CZK=K\u010d
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
+shortMonths=led®\u00fano®b\u0159e®dub®kv\u011b®\u010drn®\u010drc®srp®z\u00e1\u0159®\u0159\u00edj®lis®pro®®
+months=leden®\u00fanor®b\u0159ezen®duben®kv\u011bten®\u010derven®\u010dervenec®srpen®z\u00e1\u0159\u00ed®\u0159\u00edjen®listopad®prosinec®®
shortWeekdays=®ne®po®\u00fat®st®\u010dt®p\u00e1®so®
weekdays=®ned\u011ble®pond\u011bl\u00ed®\u00fater\u00fd®st\u0159eda®\u010dtvrtek®p\u00e1tek®sobota®
firstDayOfWeek=mon
eras=p\u0159.Kr.®po Kr.®
ampms=dop.®odp.®
-shortDateFormat=d.M.yy
-mediumDateFormat=d.M.yyyy
+shortDateFormat=yy-MM-dd
+mediumDateFormat=yyyy-MM-dd
longDateFormat=d. MMMM yyyy
fullDateFormat=EEEE, d. MMMM yyyy
shortTimeFormat=H:mm
mediumTimeFormat=H:mm:ss
-longTimeFormat=H:mm:ss z
-fullTimeFormat=H:mm:ss z
-zoneStrings=America/Indianapolis®EST®V\u00fdchodn\u00ed standardn\u00ed \u010das®EST®V\u00fdchodn\u00ed standardn\u00ed \u010das®©America/Halifax®AST®Atlantick\u00fd standardn\u00ed \u010das®ADT®Atlantick\u00fd letn\u00ed \u010das®©Pacific/Honolulu®HST®Havajsk\u00fd standardn\u00ed \u010das®HST®Havajsk\u00fd standardn\u00ed \u010das®©America/Denver®MST®Horsk\u00fd standardn\u00ed \u010das®MDT®Horsk\u00fd letn\u00ed \u010das®©America/Anchorage®AST®Alja\u0161sk\u00fd standardn\u00ed \u010das®ADT®Alja\u0161sk\u00fd letn\u00ed \u010das®©America/St_Johns®CNT®Newfoundlandsk\u00fd standardn\u00ed \u010das®CDT®Newfoundlandsk\u00fd letn\u00ed \u010das®©Africa/Casablanca®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®©America/Chicago®CST®Centr\u00e1ln\u00ed standardn\u00ed \u010das®CDT®Centr\u00e1ln\u00ed letn\u00ed \u010das®©Asia/Shanghai®CTT®\u010c\u00ednsk\u00fd standardn\u00ed \u010das®CDT®\u010c\u00ednsk\u00fd standardn\u00ed \u010das®©Asia/Tokyo®JST®Japonsk\u00fd standardn\u00ed \u010das®JST®Japonsk\u00fd standardn\u00ed \u010das®©America/New_York®EST®V\u00fdchodn\u00ed standardn\u00ed \u010das®EDT®V\u00fdchodn\u00ed letn\u00ed \u010das®©Europe/Bucharest®EET®V\u00fdchodoevropsk\u00fd standardn\u00ed \u010das®EEST®V\u00fdchodoevropsk\u00fd letn\u00ed \u010das®©America/Los_Angeles®PST®Pacifick\u00fd standardn\u00ed \u010das®PDT®Pacifick\u00fd letn\u00ed \u010das®©America/Phoenix®MST®Horsk\u00fd standardn\u00ed \u010das®MST®Horsk\u00fd standardn\u00ed \u010das®©Etc/GMT®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®©Asia/Jerusalem®IST®Izraelsk\u00fd standardn\u00ed \u010das®IDT®Izraelsk\u00fd letn\u00ed \u010das®©Europe/Paris®CET®St\u0159edoevropsk\u00fd standardn\u00ed \u010das®CEST®St\u0159edoevropsk\u00fd letn\u00ed \u010das®©
+longTimeFormat=H:mm:ssZZ
+fullTimeFormat=H:mm:ssZZ
+zoneStrings=Europe/Paris®CET®St\u0159edoevropsk\u00fd standardn\u00ed \u010das®CEST®St\u0159edoevropsk\u00fd letn\u00ed \u010das®©Pacific/Honolulu®HST®Havajsk\u00fd standardn\u00ed \u010das®HST®Havajsk\u00fd letn\u00ed \u010das®©America/Denver®MST®Horsk\u00fd standardn\u00ed \u010das®MDT®Horsk\u00fd letn\u00ed \u010das®©Asia/Jerusalem®IST®Izraelsk\u00fd standardn\u00ed \u010das®IDT®Izraelsk\u00fd letn\u00ed \u010das®©America/Anchorage®AST®Alja\u0161sk\u00fd standardn\u00ed \u010das®ADT®Alja\u0161sk\u00fd letn\u00ed \u010das®©Africa/Casablanca®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®GMT®Greenwichsk\u00fd st\u0159edn\u00ed \u010das®©America/Phoenix®MST®Horsk\u00fd standardn\u00ed \u010das®MST®Horsk\u00fd letn\u00ed \u010das®©America/Los_Angeles®PST®Pacifick\u00fd standardn\u00ed \u010das®PDT®Pacifick\u00fd letn\u00ed \u010das®©America/Chicago®CST®Centr\u00e1ln\u00ed standardn\u00ed \u010das®CDT®Centr\u00e1ln\u00ed letn\u00ed \u010das®©America/Halifax®AST®Atlantick\u00fd standardn\u00ed \u010das®ADT®Atlantick\u00fd letn\u00ed \u010das®©America/New_York®EST®V\u00fdchodn\u00ed standardn\u00ed \u010das®EDT®V\u00fdchodn\u00ed letn\u00ed \u010das®©Asia/Tokyo®JST®Japonsk\u00fd standardn\u00ed \u010das®JST®Japonsk\u00fd letn\u00ed \u010das®©Europe/Bucharest®EET®V\u00fdchodoevropsk\u00fd standardn\u00ed \u010das®EEST®V\u00fdchodoevropsk\u00fd letn\u00ed \u010das®©America/Indianapolis®EST®V\u00fdchodn\u00ed standardn\u00ed \u010das®EST®V\u00fdchodn\u00ed letn\u00ed \u010das®©
territories.TL=V\u00fdchodn\u00ed Timor
territories.TK=Tokelau
territories.TJ=T\u00e1d\u017eikist\u00e1n
@@ -762,7 +388,9 @@ territories.GN=Guinea
territories.GM=Gambie
territories.GL=Gr\u00f3nsko
territories.SV=El Salvador
+territories.062=Ji\u017en\u00ed a centr\u00e1ln\u00ed Asie
territories.ST=Svat\u00fd Tom\u00e1\u0161
+territories.061=Polyn\u00e9sie
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Surinam
@@ -786,9 +414,12 @@ territories.SC=Seychely
territories.SB=\u0160alamounovy ostrovy
territories.SA=Sa\u00fadsk\u00e1 Ar\u00e1bie
territories.FR=Francie
+territories.057=Mikron\u00e9sie
territories.FO=Faersk\u00e9 ostrovy
territories.FM=Mikron\u00e9sie, federativn\u00ed st\u00e1t
territories.RW=Rwanda
+territories.054=Melan\u00e9sie
+territories.053=Austr\u00e1lie a Nov\u00fd Z\u00e9land
territories.FK=Falklandsk\u00e9 ostrovy
territories.RU=Rusko
territories.FJ=Fid\u017ei
@@ -798,20 +429,26 @@ territories.RE=R\u00e9union
territories.ET=Etiopie
territories.ES=\u0160pan\u011blsko
territories.ER=Eritrea
+territories.833=Ostrov Man
territories.EH=Z\u00e1padn\u00ed Sahara
territories.EG=Egypt
+territories.830=Normansk\u00e9 ostrovy
territories.EE=Estonsko
+territories.QO=Vn\u011bj\u0161\u00ed Oce\u00e1nie
territories.EC=Ekv\u00e1dor
territories.DZ=Al\u017e\u00edrsko
territories.QA=Katar
+territories.039=Ji\u017en\u00ed Evropa
territories.DO=Dominik\u00e1nsk\u00e1 republika
territories.PY=Paraguay
+territories.035=Jihov\u00fdchodn\u00ed Asie
territories.DM=Dominika
territories.PW=Palau
territories.DK=D\u00e1nsko
territories.DJ=D\u017eibuti
territories.PT=Portugalsko
territories.PS=Palestinian Territory
+territories.030=V\u00fdchodn\u00ed Asie
territories.PR=Portoriko
territories.DE=N\u011bmecko
territories.PN=Pitcairn
@@ -828,13 +465,16 @@ territories.CX=V\u00e1no\u010dn\u00ed ostrovy
territories.CV=Kapverdy
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Srbsko a \u010cern\u00e1 Hora
territories.CR=Kostarika
+territories.029=Karibik
territories.CO=Kolumbie
territories.CN=\u010c\u00edna
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cookovy ostrovy
territories.CI=Pob\u0159e\u017e\u00ed slonoviny
+territories.021=Severn\u00ed Amerika
territories.CH=\u0160v\u00fdcarsko
territories.CG=Kongo
territories.CF=St\u0159edoafrick\u00e1 republika
@@ -849,13 +489,20 @@ territories.BV=Ostrov Bouvet
territories.BT=Bh\u00fat\u00e1n
territories.BS=Bahamy
territories.BR=Braz\u00edlie
+territories.019=Amerika
+territories.018=Ji\u017en\u00ed Afrika
territories.NZ=Nov\u00fd Z\u00e9land
territories.BO=Bol\u00edvie
+territories.017=St\u0159edn\u00ed Afrika
territories.BN=Brunej Darussalam
territories.BM=Bermudy
+territories.015=Severn\u00ed Afrika
+territories.014=V\u00fdchodn\u00ed Afrika
+territories.013=St\u0159edn\u00ed Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Z\u00e1padn\u00ed Afrika
territories.BH=Bahrajn
territories.NR=Nauru
territories.BG=Bulharsko
@@ -873,6 +520,7 @@ territories.NG=Nig\u00e9rie
territories.NF=Norfolk
territories.AZ=\u00c1zerb\u00e1jd\u017e\u00e1n
territories.NE=Niger
+territories.AX=Alandy
territories.NC=Nov\u00e1 Kaledonie
territories.AW=Aruba
territories.ZM=Zambie
@@ -881,19 +529,24 @@ territories.AU=Austr\u00e1lie
territories.AT=Rakousko
territories.AS=Americk\u00e1 Samoa
territories.AR=Argentina
+territories.009=Oce\u00e1nie
territories.AQ=Antarktida
territories.MZ=Mosambik
+territories.200=\u010ceskoslovensko
territories.AO=Angola
territories.MY=Malajsie
territories.AN=Nizozemsk\u00e9 Antily
territories.MX=Mexiko
+territories.005=Ji\u017en\u00ed Amerika
territories.AM=Arm\u00e9nie
territories.MW=Malawi
territories.AL=Alb\u00e1nie
territories.MV=Maladivy
territories.ZA=Ji\u017en\u00ed Afrika
territories.MU=Mauricius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Sv\u011bt
territories.AI=Anguila
territories.MS=Montserrat
territories.MR=Maurit\u00e1nie
@@ -908,7 +561,6 @@ territories.MN=Mongolsko
territories.MM=Myanmar (Burma)
territories.ML=Mali
territories.MK=Macedonia
-territories.YU=Jugosl\u00e1vie
territories.YT=Mayotte
territories.MH=Marshallovy ostrovy
territories.MG=Madagaskar
@@ -918,10 +570,14 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=Libye
territories.LV=Loty\u0161sko
+territories.155=Z\u00e1padn\u00ed Evropa
territories.LU=Lucembursko
+territories.154=Severn\u00ed Evropa
territories.LT=Litva
territories.LS=Lesotho
territories.LR=Lib\u00e9rie
+territories.151=V\u00fdchodn\u00ed Evropa
+territories.150=Evropa
territories.LK=Sr\u00ed Lanka
territories.LI=Lichten\u0161tejnsko
territories.LC=Svat\u00e1 Lucie
@@ -930,6 +586,8 @@ territories.LA=Lidov\u011b demokratick\u00e1 republika Laos
territories.KZ=Kazachst\u00e1n
territories.KY=Kajmansk\u00e9 ostrovy
territories.KW=Kuvajt
+territories.145=Z\u00e1padn\u00ed Asie
+territories.142=Asie
territories.KR=Ji\u017en\u00ed Korea
territories.KP=Severn\u00ed Korea
territories.KN=Svat\u00fd Kitts a Nevis
@@ -982,8 +640,8 @@ territories.TM=Turkmenist\u00e1n
languages.es=\u0160pan\u011bl\u0161tina
languages.ku=Kurd\u0161tina
languages.eo=Esperanto
-languages.ks=Ka\u0161m\u00edr\u0161tina
languages.en=Angli\u010dtina
+languages.ks=Ka\u0161m\u00edr\u0161tina
languages.el=\u0158e\u010dtina
languages.qu=Ke\u010du\u00e1n\u0161tina
languages.ko=Korej\u0161tina
@@ -1007,8 +665,8 @@ languages.cy=Vel\u0161tina
languages.pa=Pa\u0148d\u017e\u00e1b\u0161tina
languages.cs=\u010ce\u0161tina
languages.iu=Inuktitut\u0161tina
-languages.it=Ital\u0161tina
languages.co=Korsi\u010dtina
+languages.it=Ital\u0161tina
languages.is=Island\u0161tina
languages.uz=Uzbe\u010dtina
languages.or=Oriya
@@ -1084,8 +742,8 @@ languages.mk=Makedon\u0161tina
languages.aa=Afar\u0161tina
languages.so=Som\u00e1l\u0161tina
languages.sn=Shona
-languages.mi=Maor\u0161tina
languages.gd=Skotsk\u00e1 gal\u0161tina
+languages.mi=Maor\u0161tina
languages.sm=Samoy\u0161tina
languages.sl=Slovin\u0161tina
languages.mg=Malga\u0161tina
@@ -1101,14 +759,14 @@ languages.fy=Fr\u00ed\u0161tina
languages.sa=Sanskrt
languages.fr=Francouz\u0161tina
languages.lv=Loty\u0161tina
-languages.lt=Litev\u0161tina
languages.fo=Faer\u0161tina
+languages.lt=Litev\u0161tina
languages.rw=Kinyarwand\u0161tina
languages.ru=Ru\u0161tina
-languages.lo=Lao\u0161tina
languages.fj=Fid\u017ei
-languages.ln=Lingal\u0161tina
+languages.lo=Lao\u0161tina
languages.fi=Fin\u0161tina
+languages.ln=Lingal\u0161tina
languages.ro=Rumun\u0161tina
languages.rn=Kirundi
languages.rm=R\u00e9torom\u00e1n\u0161tina
@@ -1116,5 +774,5 @@ languages.fa=Per\u0161tina
languages.la=Latina
languages.xh=Xhosa
languages.eu=Baski\u010dtina
-languages.ky=Kirgiz\u0161tina
languages.et=Eston\u0161tina
+languages.ky=Kirgiz\u0161tina
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cy.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cy.properties
index bd94846..612de13 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cy.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_cy.properties
@@ -13,24 +13,286 @@ currenciesDisplayName.EUR=Ewro
currenciesDisplayName.GBP=Punt Sterling Prydain
currenciesDisplayName.BRL=Real Brasil
currenciesDisplayName.USD=Doler yr UDA
+currenciesSymbol.EUR=EUR
shortMonths=Ion®Chwef®Mawrth®Ebrill®Mai®Meh®Gorff®Awst®Medi®Hyd®Tach®Rhag®®
months=Ionawr®Chwefror®Mawrth®Ebrill®Mai®Mehefin®Gorffenaf®Awst®Medi®Hydref®Tachwedd®Rhagfyr®®
shortWeekdays=®Sul®Llun®Maw®Mer®Iau®Gwen®Sad®
weekdays=®Dydd Sul®Dydd Llun®Dydd Mawrth®Dydd Mercher®Dydd Iau®Dydd Gwener®Dydd Sadwrn®
+territories.TL=Timor-Leste
+territories.TK=Tokelau
+territories.TJ=Tajicistan
+territories.TH=Gwlad Thai
+territories.TG=Togo
+territories.TF=Tiriogaethau Ffrengig y De
+territories.GY=Guyana
+territories.TD=Chad
+territories.TC=Ynysoedd Turks a Caicos
+territories.GW=Guinea-Bissau
+territories.GU=Guam
+territories.GT=Guatemala
+territories.GS=Ynysoedd De Georgia a De Sandwich
+territories.GR=Gwlad Groeg
+territories.GQ=Gini Gyhydeddol
+territories.GP=Guadeloupe
+territories.SZ=Swaziland
+territories.SY=Syria
+territories.GN=Gini
+territories.GM=Gambia
+territories.GL=Yr Ynys Las
+territories.SV=El Salfador
+territories.062=De Canol Asia
+territories.ST=Sao Tome a Principe
+territories.061=Polynesia
+territories.GI=Gibraltar
+territories.GH=Ghana
+territories.SR=Swrinam
+territories.GF=Giana Ffrengig
+territories.GE=Georgia
+territories.SO=Somalia
+territories.GD=Grenada
+territories.SN=Senegal
+territories.SM=San Marino
+territories.GB=Prydain Fawr
+territories.SL=Sierra Leone
+territories.GA=Gabon
+territories.SK=Slofacia
+territories.SJ=Svalbard a Jan Mayen
+territories.SI=Slofenia
+territories.SH=Saint Helena
+territories.SG=Singapore
+territories.SE=Sweden
+territories.SD=Y Swdan
+territories.SC=Seychelles
+territories.SB=Ynysoedd Solomon
+territories.SA=Sawdi-Arabia
territories.FR=Ffrainc
-territories.IN=India
-territories.CN=Tseina
+territories.057=Micronesia
+territories.FO=Ynysoedd Ffar\u00f6e
+territories.FM=Micronesia
+territories.RW=Rwanda
+territories.054=Melanesia
+territories.053=Awstralia a Seland Newydd
+territories.FK=Ynysoedd y Falkland
+territories.RU=Rwsia
+territories.FJ=Fiji
+territories.FI=Y Ffindir
+territories.RO=Rwmania
+territories.RE=R\u00e9union
+territories.ET=Ethiopia
+territories.ES=Sbaen
+territories.ER=Eritrea
+territories.833=Ynys Manaw
+territories.EH=Gorllewin Sahara
+territories.EG=Yr Aifft
+territories.830=Ynysoedd y Sianel
+territories.EE=Estonia
+territories.QO=Ynysoedd Pellenig y De
+territories.EC=Ecwador
+territories.DZ=Algeria
+territories.QA=Qatar
+territories.039=De Ewrop
+territories.DO=Y Weriniaeth Ddominicaidd
+territories.PY=Paraguay
+territories.035=De ddwyrain Asia
+territories.DM=Dominica
+territories.PW=Palau
+territories.DK=Denmarc
+territories.DJ=Djibouti
+territories.PT=Portiwgal
+territories.PS=Tiriogaeth Palesteina
+territories.030=Dwyrain Asia
+territories.PR=Puerto Rico
territories.DE=Yr Almaen
-territories.GB=Prydain Fawr
+territories.PN=Pitcairn
+territories.PM=Saint Pierre a Miquelon
+territories.PL=Gwlad Pwyl
+territories.PK=Pacistan
+territories.PH=Philipinau
+territories.PG=Papua Gini Newydd
+territories.PF=Polynesia Ffrainc
+territories.CZ=Gweriniaeth Tsiec
+territories.PE=Perw
+territories.CY=Cyprus
+territories.CX=Ynys y Nadolig
+territories.CV=Cape Verde
+territories.PA=Panama
+territories.CU=Ciwba
+territories.CR=Costa Rica
+territories.029=Y Carib\u00ee
+territories.CO=Colombia
+territories.CN=Tseina
+territories.CM=Y Camer\u0175n
+territories.CL=Chile
+territories.CK=Ynysoedd Cook
+territories.CI=C\u00f4te d\u2019Ivoire
+territories.021=Gogledd America
+territories.CH=Y Swistir
+territories.CG=Congo
+territories.CF=Gweriniaeth Canol Affrica
+territories.CD=Gweriniaeth Ddemocrataidd y Congo
+territories.CC=Ynysoedd Cocos (Keeling)
+territories.OM=Oman
+territories.CA=Canada
+territories.BZ=Belize
+territories.BY=Belarws
+territories.BW=Botswana
+territories.BV=Ynys Bouvet
+territories.BT=Bhwtan
+territories.BS=Y Bahamas
territories.BR=Brasil
-territories.RU=Rwsia
+territories.019=Americas
+territories.018=De Affrica
+territories.NZ=Seland Newydd
+territories.BO=Bolifia
+territories.017=Canol Affrica
+territories.BN=Brunei
+territories.BM=Bermwda
+territories.015=Gogledd Affrica
+territories.014=Dwyrain Affrica
+territories.013=Canolbarth America
+territories.NU=Niue
+territories.BJ=Benin
+territories.BI=Burundi
+territories.011=Gorllewin Affrica
+territories.BH=Bahrain
+territories.NR=Nawrw
+territories.BG=Bwlgaria
+territories.BF=Burkina Faso
+territories.NP=Nepal
+territories.BE=Gwlad Belg
+territories.NO=Norwy
+territories.BD=Bangladesh
+territories.BB=Barbados
+territories.ZW=Simbabwe
+territories.NL=Yr Iseldiroedd
+territories.BA=Bosnia a Herzegovina
+territories.NI=Nicaragwa
+territories.NG=Nigeria
+territories.NF=Ynys Norfolk
+territories.AZ=Azerbaijan
+territories.NE=Niger
+territories.AX=Ynysoedd Aland
+territories.NC=Caledonia Newydd
+territories.AW=Aruba
+territories.ZM=Sambia
+territories.NA=Namibia
+territories.AU=Awstralia
+territories.AT=Awstria
+territories.AS=Samoa Americanaidd
+territories.AR=Yr Ariannin
+territories.009=Oceania
+territories.AQ=Antarctica
+territories.MZ=Mozambique
+territories.AO=Angola
+territories.MY=Malaysia
+territories.AN=Ynysoedd Carib\u00ee yr Iseldiroedd
+territories.MX=Mecsico
+territories.005=De America
+territories.AM=Armenia
+territories.MW=Malawi
+territories.AL=Albania
+territories.MV=Maldives
+territories.ZA=De Affrica
+territories.MU=Mawrisiws
+territories.002=Affrica
+territories.MT=Malta
+territories.001=Y Byd
+territories.AI=Anguilla
+territories.MS=Montserrat
+territories.MR=Mawritania
+territories.AG=Antigwa a Barbuda
+territories.MQ=Martinique
+territories.AF=Affganistan
+territories.MP=Ynysoedd Gogledd Mariana
+territories.AE=Emiraethau Arabaidd Unedig
+territories.MO=Macao S.A.R., Tseina
+territories.AD=Andorra
+territories.MN=Mongolia
+territories.MM=Myanmar
+territories.ML=Mali
+territories.MK=Macedonia
+territories.YT=Mayotte
+territories.MH=Ynysoedd Marshall
+territories.MG=Madagascar
+territories.MD=Moldofa
+territories.MC=Monaco
+territories.MA=Moroco
+territories.YE=Yemen
+territories.LY=Libia
+territories.LV=Latfia
+territories.155=Gorllewin Ewrop
+territories.LU=Lwcsembwrg
+territories.154=Gogledd Ewrop
+territories.LT=Lithwania
+territories.LS=Lesotho
+territories.LR=Liberia
+territories.151=Dwyrain Ewrop
+territories.150=Ewrop
+territories.LK=Sri Lanka
+territories.LI=Liechtenstein
+territories.LC=Saint Lucia
+territories.LB=Libanus
+territories.LA=Laos
+territories.KZ=Kazakhstan
+territories.KY=Ynysoedd Cayman
+territories.KW=Coweit
+territories.145=Gorllewin Asia
+territories.142=Asia
+territories.KR=De Corea
+territories.KP=Gogledd Corea
+territories.KN=Saint Kitts a Nevis
+territories.KM=Comoros
+territories.KI=Kiribati
+territories.WS=Samoa
+territories.KH=Cambodia
+territories.KG=Cirgistan
+territories.KE=Cenia
+territories.WF=Wallis a Futuna
territories.JP=Siapan
-territories.US=Yr Unol Daleithiau
+territories.JO=Yr Iorddonen
+territories.JM=Jamaica
+territories.VU=Vanuatu
+territories.VN=Fietnam
+territories.VI=Ynysoedd Americanaidd y Wyryf
+territories.VG=Ynysoedd Prydeinig y Wyryf
+territories.VE=Venezuela
+territories.VC=Saint Vincent a\u2019r Grenadines
+territories.VA=Y Fatican
territories.IT=Yr Eidal
+territories.IS=Gwlad yr I\u00e2
+territories.IR=Iran
+territories.IQ=Irac
+territories.UZ=Wsbecistan
+territories.IO=Tiriogaeth Cefnfor India Prydain
+territories.UY=Uruguay
+territories.IN=India
+territories.IL=Israel
+territories.US=Yr Unol Daleithiau
+territories.IE=Iwerddon
+territories.ID=Indonesia
+territories.UM=M\u00e2n Ynysoedd Pellenig yr Unol Daleithiau
+territories.UG=Uganda
+territories.UA=Wcr\u00e1in
+territories.HU=Hwngari
+territories.HT=Haiti
+territories.HR=Croatia
+territories.TZ=Tansan\u00efa
+territories.HN=Hondwras
+territories.HM=Ynys Heard ac Ynysoedd McDonald
+territories.TW=Taiwan
+territories.TV=Twfalw
+territories.HK=Hong Kong S.A.R., Tseina
+territories.TT=Trinidad a Thobago
+territories.TR=Twrci
+territories.TO=Tonga
+territories.TN=Tiwnisia
+territories.TM=Tyrcmenistan
languages.zh=Tseineeg
languages.en=Saesneg
languages.ru=Rwsieg
+languages.hi=Hindi
languages.cy=Cymraeg
+languages.ar=Arabeg
languages.it=Eidaleg
languages.fr=Ffrangeg
languages.de=Almaeneg
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_da.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_da.properties
index d4043c32..10efdde 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_da.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_da.properties
@@ -8,693 +8,334 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GuMtkHmsSEDFwWahKzUeygAZ
-currenciesDisplayName.JOD=Jordansk dinar
-currenciesDisplayName.BOV=Boliviansk mvdol
-currenciesDisplayName.XAU=Guld
-currenciesDisplayName.FOK=F\u00e6r\u00f8sk krone
-currenciesDisplayName.LBP=Libanesisk pund
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamesisk dong
-currenciesDisplayName.TZS=Tanzanisk shilling
-currenciesDisplayName.BOP=Boliviansk peso
-currenciesDisplayName.KHR=Cambodjansk riel
-currenciesDisplayName.KHO=Gammel cambodjansk riel
-currenciesDisplayName.ZMP=Zambisk pund
-currenciesDisplayName.AUP=Australsk pund
-currenciesDisplayName.XAF=Beninsk CFA-franc
-currenciesDisplayName.MTP=Maltesisk pund
-currenciesDisplayName.GHR=Ghanesisk revalueret cedi
-currenciesDisplayName.ZMK=Zambisk kwacha
-currenciesDisplayName.GHP=Ghanesisk pund
-currenciesDisplayName.GHO=Gammel ghanesisk cedi
-currenciesDisplayName.MTL=Maltesisk lira
-currenciesDisplayName.AUD=Australsk dollar
-currenciesDisplayName.USS=Amerikansk dollar (samme dag)
-currenciesDisplayName.ITL=Italiensk lira
-currenciesDisplayName.USN=Amerikansk dollar (n\u00e6ste dag)
-currenciesDisplayName.GHC=Ghanesisk cedi
-currenciesDisplayName.SGD=Singaporeansk dollar
-currenciesDisplayName.PAB=Panamansk balboa
-currenciesDisplayName.LAK=Laotisk kip
-currenciesDisplayName.KGS=Kirgisisk som
-currenciesDisplayName.CHF=Schweizisk franc
-currenciesDisplayName.ATS=\u00d8strigsk schilling
-currenciesDisplayName.USD=Amerikanske dollar
-currenciesDisplayName.ETD=Etiopisk dollar
-currenciesDisplayName.BND=Bruneisk dollar
-currenciesDisplayName.JMP=Jamaicansk pund
-currenciesDisplayName.ETB=Etiopisk birr
-currenciesDisplayName.DZG=Algerisk franc germinal
-currenciesDisplayName.DZF=Ny algerisk franc
-currenciesDisplayName.DZD=Algerisk dinar
-currenciesDisplayName.PYG=Paraguaysk guarani
-currenciesDisplayName.LYP=Libysk pund
-currenciesDisplayName.JMD=Jamaicansk dollar
-currenciesDisplayName.ISK=Islandsk krona
-currenciesDisplayName.ESP=Spansk peseta
-currenciesDisplayName.BMP=Bermudansk pund
-currenciesDisplayName.LYD=Libysk dinar
-currenciesDisplayName.BMD=Bermudansk dollar
-currenciesDisplayName.NLG=Hollandsk guilder
-currenciesDisplayName.MRO=Mauritansk ouguiya
-currenciesDisplayName.IRR=Iransk rial
-currenciesDisplayName.SEK=Svensk krona
-currenciesDisplayName.ERN=Eritreisk nakfa
+currenciesDisplayName.YDD=Yemenitisk dinar
+currenciesDisplayName.TWD=Ny taiwansk dollar
currenciesDisplayName.KES=Kenyansk shilling
-currenciesDisplayName.CFF=CFA-franc fra den Centralafrikanske republik
+currenciesDisplayName.BYB=Ny hviderussisk rubel (1994-1999)
+currenciesDisplayName.LKR=Srilankansk rupee
+currenciesDisplayName.RWF=Rwandisk franc
+currenciesDisplayName.TJS=Tadsjikisk somoni
+currenciesDisplayName.SDP=Sudansk pund
+currenciesDisplayName.TJR=Tadsjikisk rubel
+currenciesDisplayName.ERN=Eritreisk nakfa
+currenciesDisplayName.GRD=Gr\u00e6sk drachma
+currenciesDisplayName.IEP=Irsk pund
currenciesDisplayName.ARS=Argentinsk peso
+currenciesDisplayName.SDD=Sudansk dinar
currenciesDisplayName.ARP=Argentinsk peso (1983-1985)
-currenciesDisplayName.ARM=Argentinsk peso moneda nacional
-currenciesDisplayName.TWD=Ny taiwansk dollar
-currenciesDisplayName.SDP=Sudansk pund
currenciesDisplayName.GEL=Georgisk lari
currenciesDisplayName.GEK=Georgisk kupon larit
-currenciesDisplayName.MQF=Martiniquisk franc
+currenciesDisplayName.CRC=Costaricansk colon
currenciesDisplayName.FKP=Pund fra Falklands\u00f8erne
+currenciesDisplayName.EEK=Estisk kroon
+currenciesDisplayName.MDL=Moldovisk leu
currenciesDisplayName.ARA=Argentinsk austral
-currenciesDisplayName.SDD=Sudansk dinar
currenciesDisplayName.IQD=Irakisk dinar
-currenciesDisplayName.TVD=Tuvaluansk dollar
currenciesDisplayName.SCR=Seychellisk rupee
+currenciesDisplayName.VUV=Vanuaisk vatu
+currenciesDisplayName.DKK=Dansk krone
+currenciesDisplayName.KPW=Nordkoreansk won
+currenciesDisplayName.GQE=\u00c6kvatorialguineask ekwele guineana
+currenciesDisplayName.IDR=Indonesisk pupiah
currenciesDisplayName.LVR=Lettisk rubel
-currenciesDisplayName.FJP=Fijiansk pund
+currenciesDisplayName.SOS=Somalisk shilling
+currenciesDisplayName.AED=Dirham fra de Forenede Arabiske Emirater
+currenciesDisplayName.BWP=Botswansk pula
currenciesDisplayName.LVL=Lettisk lats
-currenciesDisplayName.CDL=Congolesisk Zaire
-currenciesDisplayName.CDG=Congolesisk franc
-currenciesDisplayName.CDF=Congolesisk franc congolais
-currenciesDisplayName.FJD=Fijiansk dollar
+currenciesDisplayName.RUR=Russisk rubel (1991-1998)
currenciesDisplayName.NIO=Nicaraguansk cordoba oro
+currenciesDisplayName.ADP=Andorransk peseta
+currenciesDisplayName.FJD=Fijiansk dollar
currenciesDisplayName.MOP=Macaosk pataca
-currenciesDisplayName.NIG=Nicaraguansk gold cordoba
+currenciesDisplayName.RUB=Russisk rubel
+currenciesDisplayName.CDF=Congolesisk franc congolais
currenciesDisplayName.NIC=Nicaraguansk cordoba
-currenciesDisplayName.FIN=Finsk mark (1860-1962)
-currenciesDisplayName.FIM=Finsk mark
+currenciesDisplayName.DJF=Djiboutisk franc
currenciesDisplayName.SBD=Salomonsk dollar
+currenciesDisplayName.UZS=Usbekisk sum
+currenciesDisplayName.ECS=Ecuadoriansk sucre
+currenciesDisplayName.PHP=Filippinsk peso
+currenciesDisplayName.THB=Thailandsk baht
currenciesDisplayName.LUF=Luxembourgsk franc
-currenciesDisplayName.TTO=Gammel dollar fra Trinidad og Tobago
-currenciesDisplayName.AOS=Angolansk escudo
-currenciesDisplayName.AOR=Angolansk kwanza reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongolsk tugrik
-currenciesDisplayName.HUF=Ungarsk forint
-currenciesDisplayName.BIF=Burundisk franc
-currenciesDisplayName.AON=Ny angolansk kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolansk kwanza (1977-1990)
+currenciesDisplayName.FIM=Finsk mark
currenciesDisplayName.TTD=Dollar fra Trinidad og Tobago
currenciesDisplayName.SZL=Swazilandsk lilangeni
-currenciesDisplayName.NHF=CFP-franc fra Ny-Hebriderne
-currenciesDisplayName.GBP=Britisk pund
-currenciesDisplayName.SAS=Saudisk sovereign riyal
+currenciesDisplayName.MNT=Mongolsk tugrik
currenciesDisplayName.SAR=Saudisk riyal
+currenciesDisplayName.UAK=Ukrainsk karbovanetz
+currenciesDisplayName.UAH=Ukrainsk grynia
+currenciesDisplayName.HUF=Ungarsk forint
+currenciesDisplayName.COP=Colombiansk peso
+currenciesDisplayName.QAR=Qatarsk rial
currenciesDisplayName.LTT=Litauisk talonas
-currenciesDisplayName.INR=Indisk rupee
currenciesDisplayName.PTE=Portugisisk escudo
-currenciesDisplayName.AOA=Angolansk kwanza
-currenciesDisplayName.PTC=Portugisisk conto
+currenciesDisplayName.AOR=Angolansk kwanza reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguaysk peso uruguayo
+currenciesDisplayName.GBP=Britisk pund
+currenciesDisplayName.BIF=Burundisk franc
+currenciesDisplayName.INR=Indisk rupee
+currenciesDisplayName.ZRZ=Zairisk naire
+currenciesDisplayName.AON=Ny angolansk kwanza (1990-2000)
currenciesDisplayName.LTL=Litauisk lita
+currenciesDisplayName.XFU=Fransk UIC-franc
currenciesDisplayName.KZT=Kasakhisk tenge
-currenciesDisplayName.KZR=Kasakhisk rubel
-currenciesDisplayName.VGD=Dollar fra De Britiske Jomfru\u00f8er
-currenciesDisplayName.NGP=Nigeriansk pund
+currenciesDisplayName.MZM=Mozambiquisk metical
+currenciesDisplayName.UYP=Uruguaysk peso (1975-1993)
+currenciesDisplayName.AOK=Angolansk kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmesisk kyat
+currenciesDisplayName.GNS=Guineansk syli
+currenciesDisplayName.XFO=Fransk guldfranc
+currenciesDisplayName.PGK=Papuansk kina
+currenciesDisplayName.SYP=Syrisk pund
+currenciesDisplayName.MZE=Mozambiquisk escudo
+currenciesDisplayName.OMR=Omansk rial
currenciesDisplayName.NGN=Nigeriansk naira
+currenciesDisplayName.ZRN=Ny zairisk zaire
+currenciesDisplayName.AOA=Angolansk kwanza
+currenciesDisplayName.CNY=Kinesisk yuan renminbi
+currenciesDisplayName.MAF=Marokkansk franc
+currenciesDisplayName.GNF=Guineansk franc
currenciesDisplayName.HTG=Haitisk gourde
-currenciesDisplayName.SYP=Syrisk pund
-currenciesDisplayName.PSP=Pal\u00e6stinensisk pund
-currenciesDisplayName.BHD=Bahrainsk dinar
+currenciesDisplayName.MAD=Marokkansk dirham
+currenciesDisplayName.TRY=Ny tyrkisk lira
currenciesDisplayName.MMK=Myanmarsk kyat
+currenciesDisplayName.MYR=Malaysisk ringgit
+currenciesDisplayName.LSL=Lesothisk loti
+currenciesDisplayName.BHD=Bahrainsk dinar
+currenciesDisplayName.SLL=Sierraleonsk leone
+currenciesDisplayName.BTN=Bhutansk ngultrum
+currenciesDisplayName.TRL=Tyrkisk lira
+currenciesDisplayName.KMF=Comorisk franc
currenciesDisplayName.ANG=Gylden fra De Nederlandske Antiller
currenciesDisplayName.CZK=Tjekkisk koruna
-currenciesDisplayName.LSL=Lesothisk loti
-currenciesDisplayName.GAF=Gabonesisk CFA-franc
-currenciesDisplayName.BGO=Bulgarsk lev (1879-1952)
+currenciesDisplayName.AZM=Aserbajdsjansk manat
+currenciesDisplayName.KYD=Dollar fra Cayman\u00f8erne
+currenciesDisplayName.GMD=Gambisk dalasi
currenciesDisplayName.BGN=Ny Bulgarsk lev
-currenciesDisplayName.BGM=Bulgarsk socialist lev
currenciesDisplayName.CAD=Canadisk dollar
currenciesDisplayName.BGL=Bulgarsk hard lev
-currenciesDisplayName.TRL=Tyrkisk lira
-currenciesDisplayName.KYD=Dollar fra Cayman\u00f8erne
-currenciesDisplayName.CYP=Cypriotisk pund
+currenciesDisplayName.VEB=Venezuelansk bolivar
+currenciesDisplayName.MLF=Malisk franc
currenciesDisplayName.ILS=Ny israelsk shekel
+currenciesDisplayName.MXP=Mexicansk silver peso (1861-1992)
+currenciesDisplayName.PES=Peruviansk sol
currenciesDisplayName.GYD=Guyansk dollar
-currenciesDisplayName.AMD=Armensk dram
+currenciesDisplayName.MXN=Mexicansk peso
currenciesDisplayName.ILP=Israelsk pund
-currenciesDisplayName.MLF=Malisk franc
-currenciesDisplayName.ILL=Israelsk shekel
-currenciesDisplayName.VEB=Venezuelansk bolivar
+currenciesDisplayName.SKK=Slovakisk koruna
+currenciesDisplayName.CYP=Cypriotisk pund
+currenciesDisplayName.PEN=Peruviansk sol nuevo
currenciesDisplayName.LRD=Liberisk dollar
-currenciesDisplayName.ALV=Albansk lek
+currenciesDisplayName.PEI=Peruviansk inti
+currenciesDisplayName.AMD=Armensk dram
+currenciesDisplayName.BSD=Bahamansk dollar
currenciesDisplayName.HRK=Kroatisk kuna
+currenciesDisplayName.CLP=Chilensk peso
currenciesDisplayName.HRD=Kroatisk dinar
-currenciesDisplayName.ALL=Albansk lek
-currenciesDisplayName.JEP=Pund fra Jersey
-currenciesDisplayName.ALK=Albansk lek (1946-1961)
-currenciesDisplayName.MKN=Makedonsk denar (1992-1993)
-currenciesDisplayName.VDP=Nordvietnamesisk viet minh piastre dong viet
-currenciesDisplayName.VDN=Ny nordvietnamesisk dong
-currenciesDisplayName.MKD=Makedonsk denar
-currenciesDisplayName.VDD=Nordvietnamesisk piastre dong viet
-currenciesDisplayName.TPP=Pataca fra Timor
currenciesDisplayName.XPF=CFP-franc
-currenciesDisplayName.BEL=Belgisk franc (financial)
-currenciesDisplayName.GWP=Guineansk peso
-currenciesDisplayName.KWD=Kuwaitisk dinar
-currenciesDisplayName.GWM=Portugisisk guinea mil reis
-currenciesDisplayName.BEF=Belgisk franc
+currenciesDisplayName.FRF=Fransk franc
+currenciesDisplayName.BRR=Brasiliansk cruzeiro
+currenciesDisplayName.MKD=Makedonsk denar
+currenciesDisplayName.CLF=Chilensk unidades de fomento
+currenciesDisplayName.ALL=Albansk lek
+currenciesDisplayName.BRN=Brasiliansk cruzado novo
+currenciesDisplayName.MWK=Malawisk kwacha
+currenciesDisplayName.BRL=Brasiliansk real
currenciesDisplayName.TPE=Escudo fra Timor
-currenciesDisplayName.BEC=Belgisk franc (konvertibel)
-currenciesDisplayName.GWE=Portugisisk guinea escudo
+currenciesDisplayName.BRE=Brasiliansk cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brasiliansk cruzado
+currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
+currenciesDisplayName.DEM=Tysk mark
+currenciesDisplayName.KWD=Kuwaitisk dinar
+currenciesDisplayName.XCD=\u00d8st-karaibisk dollar
+currenciesDisplayName.NPR=Nepalesisk rupee
+currenciesDisplayName.GWP=Guineansk peso
+currenciesDisplayName.YUN=Jugoslavisk convertible dinar
currenciesDisplayName.SVC=Salvadoransk colon
-currenciesDisplayName.CWG=Curacaosk gylden
-currenciesDisplayName.BDT=Bangladeshisk taka
-currenciesDisplayName.TOS=Tongask pund
+currenciesDisplayName.YUM=Jugoslavisk noviy dinar
+currenciesDisplayName.BEL=Belgisk franc (financial)
+currenciesDisplayName.SIT=Slovensk tolar
+currenciesDisplayName.JPY=Japansk yen
+currenciesDisplayName.MVR=Maldivisk rufiyaa
+currenciesDisplayName.GWE=Portugisisk guinea escudo
+currenciesDisplayName.BEF=Belgisk franc
currenciesDisplayName.TOP=Tongask pa\u02bbanga
+currenciesDisplayName.YUD=Jugoslavisk hard dinar
+currenciesDisplayName.BEC=Belgisk franc (konvertibel)
currenciesDisplayName.SUR=Sovjetisk rubel
-currenciesDisplayName.SUN=Ny sovjetisk rubel
-currenciesDisplayName.NCF=Nykaledonsk franc germinal
-currenciesDisplayName.CVE=Kapverdisk escudo
+currenciesDisplayName.ROL=Rum\u00e6nsk leu
+currenciesDisplayName.DDM=\u00d8sttysk mark
+currenciesDisplayName.BDT=Bangladeshisk taka
+currenciesDisplayName.AWG=Arubansk gylden
+currenciesDisplayName.NOK=Norsk krone
+currenciesDisplayName.MUR=Mauritisk rupee
currenciesDisplayName.ZAR=Sydafrikansk rand
-currenciesDisplayName.DOP=Dominikansk peso
-currenciesDisplayName.ZAP=Sydafrikansk pund
+currenciesDisplayName.SHP=Pund fra Saint Helena
+currenciesDisplayName.XAU=Guld
currenciesDisplayName.ZAL=Sydafrikansk rand (financial)
+currenciesDisplayName.VND=Vietnamesisk dong
+currenciesDisplayName.TZS=Tanzanisk shilling
+currenciesDisplayName.GIP=Gibraltarisk pund
currenciesDisplayName.TND=Tunesisk dinar
-currenciesDisplayName.CUP=Cubansk peso
-currenciesDisplayName.GUF=Fransk-guyansk franc guiana
+currenciesDisplayName.CVE=Kapverdisk escudo
currenciesDisplayName.UGX=Ugandisk shilling
-currenciesDisplayName.LNR=Ceylonesisk rupee
-currenciesDisplayName.AIF=Affars og Issas franc
-currenciesDisplayName.VAL=Vatikansk lira
-currenciesDisplayName.STE=Escudo fra Sao Tome og Principe
+currenciesDisplayName.ZMK=Zambisk kwacha
+currenciesDisplayName.JOD=Jordansk dinar
+currenciesDisplayName.XAF=Beninsk CFA-franc
+currenciesDisplayName.LBP=Libanesisk pund
currenciesDisplayName.UGS=Ugandisk shilling (1966-1987)
currenciesDisplayName.STD=Dobra fra Sao Tome og Principe
-currenciesDisplayName.MHD=Dollar fra Marshall\u00f8erne
-currenciesDisplayName.NZP=New Zealandsk pund
currenciesDisplayName.WST=Samoansk tala
-currenciesDisplayName.WSP=Samoansk pund
-currenciesDisplayName.HNL=Honduransk lempira
+currenciesDisplayName.KHR=Cambodjansk riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominikansk peso
+currenciesDisplayName.BOV=Boliviansk mvdol
+currenciesDisplayName.MTP=Maltesisk pund
+currenciesDisplayName.USS=Amerikansk dollar (samme dag)
+currenciesDisplayName.BOP=Boliviansk peso
+currenciesDisplayName.MTL=Maltesisk lira
+currenciesDisplayName.CUP=Cubansk peso
currenciesDisplayName.TMM=Turkmensk manat
-currenciesDisplayName.GTQ=Guatemalansk quetzal
+currenciesDisplayName.USN=Amerikansk dollar (n\u00e6ste dag)
+currenciesDisplayName.SGD=Singaporeansk dollar
currenciesDisplayName.NZD=New Zealandsk dollar
-currenciesDisplayName.SSP=Skotsk pund
-currenciesDisplayName.BBD=Barbadisk dollar
+currenciesDisplayName.USD=Amerikanske dollar
+currenciesDisplayName.HNL=Honduransk lempira
+currenciesDisplayName.ITL=Italiensk lira
+currenciesDisplayName.PAB=Panamansk balboa
+currenciesDisplayName.GTQ=Guatemalansk quetzal
+currenciesDisplayName.LAK=Laotisk kip
+currenciesDisplayName.GHC=Ghanesisk cedi
+currenciesDisplayName.AUD=Australsk dollar
currenciesDisplayName.NAD=Namibisk dollar
+currenciesDisplayName.KGS=Kirgisisk som
currenciesDisplayName.MGF=Madagaskisk franc
+currenciesDisplayName.CHF=Schweizisk franc
+currenciesDisplayName.BBD=Barbadisk dollar
currenciesDisplayName.MGA=Madagaskisk ariary
-currenciesDisplayName.EGP=Egyptisk pund
-currenciesDisplayName.BZH=Britisk Honduras dollar
+currenciesDisplayName.PYG=Paraguaysk guarani
currenciesDisplayName.PLZ=Polsk zloty (1950-1995)
-currenciesDisplayName.BAN=Ny bosnien-hercegovinsk dinar
-currenciesDisplayName.BAM=Bosnien-Hercegovinsk konvertibel mark
-currenciesDisplayName.BZD=Belizisk dollar
-currenciesDisplayName.BAD=Bosnien-Hercegovinsk dinar
-currenciesDisplayName.PLN=Polsk zloty
currenciesDisplayName.YER=Yemenitisk rial
+currenciesDisplayName.ATS=\u00d8strigsk schilling
+currenciesDisplayName.ETB=Etiopisk birr
+currenciesDisplayName.BND=Bruneisk dollar
+currenciesDisplayName.JMD=Jamaicansk dollar
+currenciesDisplayName.EGP=Egyptisk pund
+currenciesDisplayName.PLN=Polsk zloty
+currenciesDisplayName.DZD=Algerisk dinar
+currenciesDisplayName.ISK=Islandsk krona
currenciesDisplayName.SRG=Surinamsk guilder
-currenciesDisplayName.CSK=Tjekkoslovakisk hard koruna
+currenciesDisplayName.LYD=Libysk dinar
+currenciesDisplayName.BZD=Belizisk dollar
+currenciesDisplayName.BAM=Bosnien-Hercegovinsk konvertibel mark
+currenciesDisplayName.ESP=Spansk peseta
currenciesDisplayName.KRW=Sydkoreansk won
+currenciesDisplayName.NLG=Hollandsk guilder
+currenciesDisplayName.MRO=Mauritansk ouguiya
+currenciesDisplayName.BAD=Bosnien-Hercegovinsk dinar
+currenciesDisplayName.ZWD=Zimbabwisk dollar
+currenciesDisplayName.SEK=Svensk krona
+currenciesDisplayName.CSK=Tjekkoslovakisk hard koruna
currenciesDisplayName.BYR=Hviderussisk rubel
-currenciesDisplayName.YEI=Yemenitisk imadi riyal
-currenciesDisplayName.BYL=Hviderussisk rubel (1992-1994)
-currenciesDisplayName.CSC=Tjekkoslovakisk koruna
-currenciesDisplayName.KRO=Gammel sydkoreansk won
-currenciesDisplayName.KRH=Sydkoreansk hwan
-currenciesDisplayName.BYB=Ny hviderussisk rubel (1994-1999)
-currenciesDisplayName.SQS=Somalilands shilling
-currenciesDisplayName.GRN=Ny gr\u00e6sk drachma
+currenciesDisplayName.IRR=Iransk rial
currenciesDisplayName.PKR=Pakistansk rupee
-currenciesDisplayName.ZWD=Zimbabwisk dollar
-currenciesDisplayName.LKR=Srilankansk rupee
-currenciesDisplayName.GRD=Gr\u00e6sk drachma
-currenciesDisplayName.IEP=Irsk pund
-currenciesDisplayName.YDD=Yemenitisk dinar
-currenciesDisplayName.RWF=Rwandisk franc
-currenciesDisplayName.CRC=Costaricansk colon
-currenciesDisplayName.TJS=Tadsjikisk somoni
-currenciesDisplayName.TJR=Tadsjikisk rubel
-currenciesDisplayName.EEK=Estisk kroon
-currenciesDisplayName.GQP=\u00c6kvatorialguineask peseta guineana
-currenciesDisplayName.MDR=Moldovisk ruble cupon
-currenciesDisplayName.DKK=Dansk krone
-currenciesDisplayName.MDL=Moldovisk leu
-currenciesDisplayName.GQF=\u00c6kvatorialguineask franco
-currenciesDisplayName.GQE=\u00c6kvatorialguineask ekwele guineana
-currenciesDisplayName.IDR=Indonesisk pupiah
-currenciesDisplayName.AED=Dirham fra de Forenede Arabiske Emirater
-currenciesDisplayName.KPW=Nordkoreansk won
-currenciesDisplayName.IDN=Ny indonesisk rupiah
-currenciesDisplayName.BWP=Botswansk pula
-currenciesDisplayName.MDC=Moldovisk leu cupon
-currenciesDisplayName.IDJ=Indonesisk java rupiah
-currenciesDisplayName.IDG=Indonesisk nica guilder
-currenciesDisplayName.VUV=Vanuaisk vatu
-currenciesDisplayName.XID=Islamisk dinar
-currenciesDisplayName.SOS=Somalisk shilling
-currenciesDisplayName.ADP=Andorransk peseta
-currenciesDisplayName.RUR=Russisk rubel (1991-1998)
-currenciesDisplayName.GPF=Guadeloupsk franc
-currenciesDisplayName.DJF=Djiboutisk franc
-currenciesDisplayName.ADD=Andorransk diner
-currenciesDisplayName.MCG=Monegaskisk franc germinal
-currenciesDisplayName.MCF=Ny monegaskisk franc
-currenciesDisplayName.ECS=Ecuadoriansk sucre
-currenciesDisplayName.LIF=Liechtensteinsk franc
-currenciesDisplayName.RUB=Russisk rubel
-currenciesDisplayName.PHP=Filippinsk peso
-currenciesDisplayName.UZS=Usbekisk sum
-currenciesDisplayName.COP=Colombiansk peso
-currenciesDisplayName.THB=Thailandsk baht
-currenciesDisplayName.IBP=Nordirsk pund
-currenciesDisplayName.BUR=Burmesisk rupee
-currenciesDisplayName.COF=Congolesisk CFA-franc
-currenciesDisplayName.BUK=Burmesisk kyat
-currenciesDisplayName.COB=Colombiansk papirpeso
-currenciesDisplayName.UZC=Usbekisk coupon som
-currenciesDisplayName.UAK=Ukrainsk karbovanetz
-currenciesDisplayName.QAR=Qatarsk rial
-currenciesDisplayName.UAH=Ukrainsk grynia
-currenciesDisplayName.GNS=Guineansk syli
-currenciesDisplayName.CNY=Kinesisk yuan renminbi
-currenciesDisplayName.MZM=Mozambiquisk metical
-currenciesDisplayName.UYU=Uruguaysk peso uruguayo
-currenciesDisplayName.GNI=Guineansk franc (1960-1972)
-currenciesDisplayName.SML=Lira fra San Marino
-currenciesDisplayName.MZE=Mozambiquisk escudo
-currenciesDisplayName.CNP=Kinesisk jen min piao yuan
-currenciesDisplayName.PGK=Papuansk kina
-currenciesDisplayName.OMS=Omansk rial saidi
-currenciesDisplayName.GNF=Guineansk franc
-currenciesDisplayName.UYP=Uruguaysk peso (1975-1993)
-currenciesDisplayName.OMR=Omansk rial
-currenciesDisplayName.XFU=Fransk UIC-franc
-currenciesDisplayName.ZRZ=Zairisk naire
-currenciesDisplayName.BTR=Bhutansk rupee
-currenciesDisplayName.MAF=Marokkansk franc
-currenciesDisplayName.MAD=Marokkansk dirham
-currenciesDisplayName.XFO=Fransk guldfranc
-currenciesDisplayName.BTN=Bhutansk ngultrum
-currenciesDisplayName.UYF=Uruguaysk peso fuerte
-currenciesDisplayName.ZRN=Ny zairisk zaire
-currenciesDisplayName.MYR=Malaysisk ringgit
-currenciesDisplayName.AZM=Aserbajdsjansk manat
-currenciesDisplayName.GMP=Gambisk pund
-currenciesDisplayName.KMF=Comorisk franc
-currenciesDisplayName.SLL=Sierraleonsk leone
-currenciesDisplayName.GMD=Gambisk dalasi
-currenciesDisplayName.BSP=Bahamansk pund
-currenciesDisplayName.CMF=Camerounsk CFA-franc
-currenciesDisplayName.BSD=Bahamansk dollar
-currenciesDisplayName.MXP=Mexicansk silver peso (1861-1992)
-currenciesDisplayName.MXN=Mexicansk peso
-currenciesDisplayName.PES=Peruviansk sol
-currenciesDisplayName.GLK=Gr\u00f8nlandsk krone
-currenciesDisplayName.BRZ=Brasiliansk cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruviansk sol nuevo
-currenciesDisplayName.CLP=Chilensk peso
-currenciesDisplayName.SKK=Slovakisk koruna
-currenciesDisplayName.PEI=Peruviansk inti
-currenciesDisplayName.BRR=Brasiliansk cruzeiro
-currenciesDisplayName.FRF=Fransk franc
-currenciesDisplayName.BRN=Brasiliansk cruzado novo
-currenciesDisplayName.CLF=Chilensk unidades de fomento
-currenciesDisplayName.CLE=Chilensk escudo
-currenciesDisplayName.BRL=Brasiliansk real
-currenciesDisplayName.CLC=Chilensk condor
-currenciesDisplayName.BRE=Brasiliansk cruzeiro (1990-1993)
-currenciesDisplayName.DES=Tysk sperrmark
-currenciesDisplayName.MWP=Malawisk pund
-currenciesDisplayName.BRC=Brasiliansk cruzado
-currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
-currenciesDisplayName.MWK=Malawisk kwacha
-currenciesDisplayName.PDR=Transdniestrisk rubel
-currenciesDisplayName.DEM=Tysk mark
-currenciesDisplayName.TDF=Tchadisk CFA-franc
-currenciesDisplayName.PDN=Ny transdniestrisk rubel
-currenciesDisplayName.PDK=Transdniestrisk rubelkupon
-currenciesDisplayName.NPR=Nepalesisk rupee
-currenciesDisplayName.CKD=Dollar fra Cook\u00f8erne
-currenciesDisplayName.JPY=Japansk yen
-currenciesDisplayName.MVR=Maldivisk rufiyaa
-currenciesDisplayName.MVP=Maldivisk rupee
-currenciesDisplayName.XCD=\u00d8st-karaibisk dollar
-currenciesDisplayName.SIT=Slovensk tolar
-currenciesDisplayName.YUR=Jugoslavisk reformed dinar
-currenciesDisplayName.AWG=Arubansk gylden
-currenciesDisplayName.YUO=Jugoslavisk october dinar
-currenciesDisplayName.DDM=\u00d8sttysk mark
-currenciesDisplayName.YUN=Jugoslavisk convertible dinar
-currenciesDisplayName.YUM=Jugoslavisk noviy dinar
-currenciesDisplayName.YUG=Jugoslavisk 1994 dinar
-currenciesDisplayName.YUF=Jugoslavisk federation dinar
-currenciesDisplayName.RON=Ny rum\u00e6nsk leu
-currenciesDisplayName.YUD=Jugoslavisk hard dinar
-currenciesDisplayName.ROL=Rum\u00e6nsk leu
-currenciesDisplayName.SIB=Slovensk tolar bons
-currenciesDisplayName.NOK=Norsk krone
-currenciesDisplayName.MUR=Mauritisk rupee
-currenciesDisplayName.GIP=Gibraltarisk pund
-currenciesDisplayName.VNS=Vietnamesisk national dong
-currenciesDisplayName.VNR=Vietnamesisk republikansk dong
-currenciesDisplayName.SHP=Pund fra Saint Helena
-currenciesDisplayName.VNN=Ny vietnamesisk dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudansk dollar
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=kr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.DKK=kr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.XFO=XFO
-currenciesSymbol.BTN=Nu
-currenciesSymbol.UYF=UYF
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.MYR=RM
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=jan®feb®mar®apr®maj®jun®jul®aug®sep®okt®nov®dec®®
months=januar®februar®marts®april®maj®juni®juli®august®september®oktober®november®december®®
shortWeekdays=®s\u00f8n®man®tir®ons®tor®fre®l\u00f8r®
@@ -702,11 +343,15 @@ weekdays=®s\u00f8ndag®mandag®tirsdag®onsdag®torsdag®fredag®l\u00f8rdag®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
eras=f.Kr.®e.Kr.®
-shortDateFormat=dd-MM-yy
-mediumDateFormat=dd-MM-yyyy
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd/MM/yyyy
longDateFormat=d. MMM yyyy
-fullDateFormat=EEEE dd MMMM yyyy
-zoneStrings=America/Indianapolis®EST®Eastern-normaltid®EST®Eastern-normaltid®©America/Halifax®AST®Atlantic-normaltid®ADT®Atlantic-sommertid®©Pacific/Honolulu®HST®Hawaii-normaltid®HST®Hawaii-normaltid®©America/Denver®MST®Mountain-normaltid®MDT®Mountain-sommertid®©America/Anchorage®AST®Alaska-normaltid®ADT®Alaska-sommertid®©America/St_Johns®CNT®Newfoundland-normaltid®CDT®Newfoundland-sommertid®©Africa/Casablanca®GMT®Verdenstid®GMT®Verdenstid®©America/Chicago®CST®Central-normaltid®CDT®Central-sommertid®©Asia/Shanghai®CTT®Kinesisk normaltid®CDT®Kinesisk normaltid®©Asia/Tokyo®JST®Japansk normaltid®JST®Japansk normaltid®©America/New_York®EST®Eastern-normaltid®EDT®Eastern-sommertid®©Europe/Bucharest®EET®\u00d8steurop\u00e6isk normaltid®EEST®\u00d8steurop\u00e6isk sommertid®©America/Los_Angeles®PST®Pacific-normaltid®PDT®Pacific-sommertid®©America/Phoenix®MST®Mountain-normaltid®MST®Mountain-normaltid®©Etc/GMT®GMT®Verdenstid®GMT®Verdenstid®©Asia/Jerusalem®IST®Israelsk normaltid®IDT®Israelsk sommertid®©Europe/Paris®CET®Mellemeurop\u00e6isk normaltid®CEST®Mellemeurop\u00e6isk sommertid®©
+fullDateFormat=EEEE 'den' dd. MMM yyyy
+shortTimeFormat=H.mm
+mediumTimeFormat=H.mm.ss
+longTimeFormat=H.mm.ss z
+fullTimeFormat=H.mm.ss z
+zoneStrings=Europe/Paris®CET®Mellemeurop\u00e6isk normaltid®CEST®Mellemeurop\u00e6isk sommertid®©Pacific/Honolulu®HST®Hawaii-normaltid®HST®Hawaii-normaltid®©America/Denver®MST®Mountain-normaltid®MDT®Mountain-sommertid®©Asia/Jerusalem®IST®Israelsk normaltid®IDT®Israelsk sommertid®©America/Anchorage®AST®Alaska-normaltid®ADT®Alaska-sommertid®©Africa/Casablanca®GMT®Verdenstid®GMT®Verdenstid®©America/Phoenix®MST®Mountain-normaltid®MST®Mountain-normaltid®©America/Los_Angeles®PST®Pacific-normaltid®PDT®Pacific-sommertid®©America/Chicago®CST®Central-normaltid®CDT®Central-sommertid®©America/Halifax®AST®Atlantic-normaltid®ADT®Atlantic-sommertid®©America/St_Johns®CNT®Newfoundland-normaltid®CDT®Newfoundland-sommertid®©America/New_York®EST®Eastern-normaltid®EDT®Eastern-sommertid®©Asia/Shanghai®CTT®Kinesisk normaltid®CDT®Kinesisk normaltid®©Asia/Tokyo®JST®Japansk normaltid®JST®Japansk normaltid®©Europe/Bucharest®EET®\u00d8steurop\u00e6isk normaltid®EEST®\u00d8steurop\u00e6isk sommertid®©America/Indianapolis®EST®Eastern-normaltid®EST®Eastern-normaltid®©
territories.TL=Timor-Leste
territories.TK=Tokelau
territories.TJ=Tadsjikistan
@@ -795,6 +440,7 @@ territories.CX=Jule\u00f8en
territories.CV=Kap Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbien og Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=Kina
@@ -865,17 +511,16 @@ territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauretanien
territories.AG=Antigua og Barbuda
-territories.MQ=Martinique
territories.AF=Afghanistan
-territories.MP=Nordmarianerne
+territories.MQ=Martinique
territories.AE=Forenede Arabiske Emirater
-territories.MO=SAR Macao
+territories.MP=Nordmarianerne
territories.AD=Andorra
+territories.MO=SAR Macao
territories.MN=Mongoliet
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Republikken Makedonien
-territories.YU=Jugoslavien
territories.YT=Mayotte
territories.MH=Marshall\u00f8erne
territories.MG=Madagaskar
@@ -946,8 +591,8 @@ territories.TR=Tyrkiet
territories.TO=Tonga
territories.TN=Tunesien
territories.TM=Turkmenistan
-languages.gwi=Gwich\u02bbin
languages.akk=Akkadisk
+languages.gwi=Gwich\u02bcin
languages.eka=Ekajuk
languages.ijo=Ijo
languages.xh=Xhosa
@@ -965,8 +610,8 @@ languages.mic=Micmac
languages.wa=Vallonsk
languages.zap=Zapotec
languages.cus=Kusjitiske sprog (\u00f8vrige)
-languages.jbo=Lojban
languages.doi=Dogri
+languages.jbo=Lojban
languages.vo=Volap\u00fck
languages.oto=Otomi sprog
languages.vi=Vietnamesisk
@@ -990,8 +635,8 @@ languages.egy=Egyptisk (oldtid)
languages.ug=Uigurisk
languages.fan=Fang
languages.ssa=Afrikanske sprog syd for Sahara (\u00f8vrige)
-languages.mga=Irsk, Middel- (900-1200)
languages.bat=Baltiske sprog (\u00f8vrige)
+languages.mga=Irsk, Middel- (900-1200)
languages.nyo=Nyoro sprog
languages.bas=Basa
languages.nyn=Nyankole
@@ -1018,8 +663,8 @@ languages.kru=Kurukh
languages.tg=Tajik
languages.byn=Blin
languages.te=Telugu
-languages.kro=Kru
languages.csb=Kashubian
+languages.kro=Kru
languages.ta=Tamilsk
languages.tkl=Tokelau
languages.efi=Efik
@@ -1043,8 +688,8 @@ languages.sk=Slovakisk
languages.grb=Grebo
languages.si=Singalesisk
languages.sh=Serbokroatisk
-languages.crh=Krim-tyrkisk; Krim-tatarisk
languages.afa=Afro-asiatisk (\u00f8vrige)
+languages.crh=Krim-tyrkisk; Krim-tatarisk
languages.sg=Sango
languages.se=Nordsamisk
languages.sd=Sindhi
@@ -1068,14 +713,14 @@ languages.son=Songhai
languages.cpp=Kreolsk og pidgin, baseret p\u00e5 portugisisk (\u00f8vrige)
languages.sog=Sogdiansk
languages.ada=Adangme
-languages.kos=Kosraean
-languages.hit=Hittitisk
languages.cpf=Kreolsk og pidgin, baseret p\u00e5 fransk (\u00f8vrige)
+languages.hit=Hittitisk
+languages.kos=Kosraean
languages.cpe=Kreolsk og pidgin, baseret p\u00e5 engelsk (\u00f8vrige)
languages.him=Himachali
-languages.kok=Konkani
-languages.hil=Hiligaynon
languages.got=Gotisk
+languages.hil=Hiligaynon
+languages.kok=Konkani
languages.gor=Gorontalo
languages.gon=Gondi
languages.din=Dinka
@@ -1146,21 +791,21 @@ languages.ms=Malay
languages.mr=Marathisk
languages.fro=Fransk, Old- (842-ca.1400)
languages.mo=Moldovisk
-languages.frm=Fransk, Middel- (ca.1400-1600)
languages.mn=Mongolsk
-languages.jrb=J\u00f8disk-arabisk
+languages.frm=Fransk, Middel- (ca.1400-1600)
languages.ml=Malayalam
+languages.jrb=J\u00f8disk-arabisk
languages.mk=Makedonsk
languages.mi=Maori
languages.mh=Marshallese
languages.mg=Malagasy
languages.mwr=Marwari
languages.bra=Braj
-languages.den=Slave (Athapascan)
languages.lv=Lettisk
+languages.den=Slave (Athapascan)
languages.lu=Luba-Katanga
-languages.del=Delaware
languages.lt=Litauisk
+languages.del=Delaware
languages.lo=Lao
languages.ln=Lingala
languages.li=Limburgsk
@@ -1211,38 +856,38 @@ languages.iu=Inuktitut
languages.pap=Papiamento
languages.it=Italiensk
languages.sgn=Tegnsprog
-languages.is=Islandsk
languages.kha=Khasi
+languages.is=Islandsk
languages.chr=Cherokee
languages.pam=Pampanga
languages.pal=Pahlavi
languages.chp=Chipewyan
-languages.io=Ido
languages.cho=Choctaw
+languages.io=Ido
languages.chn=Chinook
languages.chm=Mari
languages.tyv=Tuvinian
languages.bnt=Bantu
languages.pag=Pangasinan
-languages.ik=Inupiaq
languages.chk=Chuukese
-languages.ii=Sichuan Yi
+languages.ik=Inupiaq
languages.haw=Hawaiiansk
+languages.ii=Sichuan Yi
languages.lam=Lamba
-languages.ig=Igbo
languages.chg=Chagatai
+languages.ig=Igbo
languages.sga=Irsk, Old- (indtil 900)
languages.paa=Papua-australske sprog (\u00f8vrige)
languages.ie=Interlingue
languages.id=Indonesisk
languages.lah=Lahnda
-languages.day=Dayak
languages.chb=Chibcha
+languages.day=Dayak
languages.ia=Interlingua
languages.lad=Ladino
-languages.hz=Herero
-languages.hai=Haida
languages.dar=Dargwa
+languages.hai=Haida
+languages.hz=Herero
languages.hy=Armensk
languages.hu=Ungarsk
languages.ht=Haitisk
@@ -1263,9 +908,9 @@ languages.iro=Irokesiske sprog
languages.gn=Guarani
languages.gl=Galicisk
languages.arw=Arawak
-languages.gez=Geez
-languages.art=Kunstsprog (\u00f8vrige)
languages.gd=G\u00e6lisk (skotsk)
+languages.art=Kunstsprog (\u00f8vrige)
+languages.gez=Geez
languages.ira=Iranske sprog (\u00f8vrige)
languages.ga=Irsk
languages.arp=Arapaho
@@ -1273,8 +918,8 @@ languages.arn=Araukansk
languages.fy=Frisisk
languages.bla=Siksika
languages.gem=Germanske sprog (\u00f8vrige)
-languages.arc=Aram\u00e6isk
languages.fr=Fransk
+languages.arc=Aram\u00e6isk
languages.fo=F\u00e6r\u00f8sk
languages.cel=Keltiske sprog (\u00f8vrige)
languages.fj=Fijian
@@ -1297,9 +942,9 @@ languages.tum=Tumbuka
languages.mos=Mossi
languages.dz=Dzongkha
languages.nic=Niger-Congo sprog (\u00f8vrige)
-languages.lus=Lushai
-languages.fiu=Finsk-ugriske sprog (\u00f8vrige)
languages.dv=Divehi
+languages.fiu=Finsk-ugriske sprog (\u00f8vrige)
+languages.lus=Lushai
languages.nia=Nias
languages.moh=Mohawk
languages.luo=Luo
@@ -1320,8 +965,8 @@ languages.wal=Walamo
languages.sat=Santali
languages.cy=Walisisk
languages.sas=Sasak
-languages.kbd=Kabardian
languages.cv=Chuvash
+languages.kbd=Kabardian
languages.cu=Kirkeslavisk
languages.mni=Manipuri
languages.cs=Tjekkisk
@@ -1332,17 +977,17 @@ languages.co=Korsikansk
languages.sai=Sydamerikanske indianske sprog (\u00f8vrige)
languages.mnc=Manchu
languages.sah=Yakut
-languages.kaw=Kawi
-languages.inh=Ingush
languages.gba=Gbaya
+languages.inh=Ingush
+languages.kaw=Kawi
languages.sad=Sandawe
languages.ch=Chamorro
-languages.ine=Indoeurop\u00e6iske sprog (\u00f8vrige)
languages.bho=Bhojpuri
+languages.ine=Indoeurop\u00e6iske sprog (\u00f8vrige)
languages.enm=Engelsk, Middel- (1100-1500)
-languages.kar=Karen
-languages.inc=Indiske sprog (\u00f8vrige)
languages.ce=Tjetjensk
+languages.inc=Indiske sprog (\u00f8vrige)
+languages.kar=Karen
languages.gay=Gayo
languages.ca=Katalansk
languages.umb=Umbundu
@@ -1350,19 +995,19 @@ languages.syr=Syrisk
languages.kam=Kamba
languages.tsi=Tsimshisk
languages.ang=Angelsaksisk (ca.450-1100)
-languages.kac=Kachin
languages.cau=Kaukasiske sprog (\u00f8vrige)
+languages.kac=Kachin
languages.kab=Kabyle
-languages.kaa=Karakalpakisk
languages.bs=Bosnisk
-languages.car=Caribisk
+languages.kaa=Karakalpakisk
languages.br=Bretonsk
+languages.car=Caribisk
languages.bo=Tibetansk
languages.bn=Bengalsk
languages.bm=Bambara
languages.gaa=Ga
-languages.cai=Mellemamerikanske indianske sprog (\u00f8vrige)
languages.bi=Bislama
+languages.cai=Mellemamerikanske indianske sprog (\u00f8vrige)
languages.bh=Bihari
languages.bg=Bulgarsk
languages.be=Hviderussisk
@@ -1376,10 +1021,10 @@ languages.az=Aserbajdsjan
languages.ay=Aymara
languages.av=Avarisk
languages.as=Assamesisk
-languages.dsb=Nedre sorbisk
languages.ar=Arabisk
-languages.ilo=Iloko
+languages.dsb=Nedre sorbisk
languages.elx=Elamitisk
+languages.ilo=Iloko
languages.zh=Kinesisk
languages.an=Aragonesisk
languages.am=Amharisk
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de.properties
index 1c66009..fda1943 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de.properties
@@ -8,682 +8,248 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GjMtkHmsSEDFwWahKzJeugAZ
-currenciesDisplayName.JOD=Jordanischer Dinar
-currenciesDisplayName.BOV=Mvdol
-currenciesDisplayName.XAU=Gold
-currenciesDisplayName.FOK=F\u00e4r\u00f6er Inseln Krone
-currenciesDisplayName.LBP=Libanesisches Pfund
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Dong
-currenciesDisplayName.TZS=Tansania Schilling
-currenciesDisplayName.BOP=Bolivianischer Peso
-currenciesDisplayName.KHR=Riel
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Riel (alt)
-currenciesDisplayName.ZMP=Sambisches Pfund
-currenciesDisplayName.AUP=Australisches Pfund
-currenciesDisplayName.XAF=CFA Franc (\u00c4quatorial)
-currenciesDisplayName.MTP=Maltesisches Pfund
-currenciesDisplayName.ZMK=Kwacha
-currenciesDisplayName.GHP=Ghana Pfund
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghana Cedi (alt)
-currenciesDisplayName.MTL=Maltesische Lira
-currenciesDisplayName.AUD=Australischer Dollar
-currenciesDisplayName.USS=US Dollar (Gleicher Tag)
-currenciesDisplayName.ITL=Italienische Lire
-currenciesDisplayName.USN=US Dollar (N\u00e4chster Tag)
-currenciesDisplayName.GHC=Cedi
-currenciesDisplayName.SGD=Singapur Dollar
-currenciesDisplayName.PAB=Balboa
-currenciesDisplayName.LAK=Kip
-currenciesDisplayName.KGS=Som
-currenciesDisplayName.CHF=Schweizer Franken
-currenciesDisplayName.ATS=\u00d6sterreichischer Schilling
-currenciesDisplayName.USD=US Dollar
-currenciesDisplayName.ETD=\u00c4thiopischer Dollar
-currenciesDisplayName.BND=Brunei-Dollar
-currenciesDisplayName.JMP=Jamaika Pfund
-currenciesDisplayName.ETB=Birr
-currenciesDisplayName.DZG=Algerischer Franc Germinal
-currenciesDisplayName.DZF=Algerischer Neuer Franc
-currenciesDisplayName.DZD=Algerischer Dinar
-currenciesDisplayName.PYG=Guarani
-currenciesDisplayName.LYP=Libysches Pfund
-currenciesDisplayName.JMD=Jamaika Dollar
-currenciesDisplayName.ISK=Isl\u00e4ndische Krone
-currenciesDisplayName.ESP=Spanische Pesete
-currenciesDisplayName.BMP=Bermuda-Pfund
-currenciesDisplayName.LYD=Libyscher Dinar
-currenciesDisplayName.BMD=Bermuda-Dollar
-currenciesDisplayName.NLG=Holl\u00e4ndischer Gulden
-currenciesDisplayName.MRO=Ouguiya
-currenciesDisplayName.IRR=Rial
-currenciesDisplayName.SEK=Schwedische Krone
-currenciesDisplayName.ERN=Nakfa
+currenciesDisplayName.YDD=Jemen Dinar
+currenciesDisplayName.TWD=Neuer Taiwan Dollar
currenciesDisplayName.KES=Kenia Schilling
-currenciesDisplayName.CFF=Zentralafrikanische Republik CFA Franc
+currenciesDisplayName.BYB=Belarus Rubel (alt)
+currenciesDisplayName.LKR=Sri Lanka Rupie
+currenciesDisplayName.RWF=Ruanda Franc
+currenciesDisplayName.TJS=Tadschikistan Somoni
+currenciesDisplayName.SDP=Sudanesisches Pfund
+currenciesDisplayName.TJR=Tadschikistan Rubel
+currenciesDisplayName.ERN=Nakfa
+currenciesDisplayName.AFN=Afghani
+currenciesDisplayName.GRD=Griechische Drachme
+currenciesDisplayName.IEP=Irisches Pfund
currenciesDisplayName.ARS=Argentinischer Peso
+currenciesDisplayName.SDD=Sudanesischer Dinar
currenciesDisplayName.ARP=Argentinischer Peso (1983-1985)
-currenciesDisplayName.ARM=Argentinischer Peso Moneda Nacional
-currenciesDisplayName.TWD=Neuer Taiwan Dollar
-currenciesDisplayName.SDP=Sudanesisches Pfund
currenciesDisplayName.GEL=Georgischer Lari
+currenciesDisplayName.AFA=Afghani
currenciesDisplayName.GEK=Georgischer Kupon Larit
+currenciesDisplayName.CRC=Costa Rica Colon
currenciesDisplayName.FKP=Falkland Pfund
+currenciesDisplayName.EEK=Estnische Krone
+currenciesDisplayName.HKD=Hongkong Dollar
+currenciesDisplayName.MDL=Moldau Leu
currenciesDisplayName.ARA=Argentinischer Austral
-currenciesDisplayName.SDD=Sudanesischer Dinar
currenciesDisplayName.IQD=Irak Dinar
-currenciesDisplayName.TVD=Tuvalu Dollar
currenciesDisplayName.SCR=Seychellen Rupie
+currenciesDisplayName.VUV=Vatu
+currenciesDisplayName.DKK=D\u00e4nische Krone
+currenciesDisplayName.KPW=Nordkoreanischer Won
+currenciesDisplayName.GQE=\u00c4quatorialguinea Ekwele Guineana
+currenciesDisplayName.IDR=Rupiah
currenciesDisplayName.LVR=Lettischer Rubel
-currenciesDisplayName.FJP=Fidschi Pfund
+currenciesDisplayName.SOS=Somalia Schilling
+currenciesDisplayName.AED=UAE Dirham
+currenciesDisplayName.BWP=Pula
currenciesDisplayName.LVL=Lettischer Lats
-currenciesDisplayName.CDL=Kongolesische Zaire
-currenciesDisplayName.CDG=Republik Kongo Franc
-currenciesDisplayName.CDF=Franc congolais
-currenciesDisplayName.FJD=Fidschi Dollar
+currenciesDisplayName.RUR=Russischer Rubel (alt)
currenciesDisplayName.NIO=Gold-Cordoba
+currenciesDisplayName.ADP=Andorranische Pesete
+currenciesDisplayName.FJD=Fidschi Dollar
currenciesDisplayName.MOP=Pataca
-currenciesDisplayName.NIG=Gold-Cordoba
+currenciesDisplayName.RUB=Russischer Rubel (neu)
+currenciesDisplayName.CDF=Franc congolais
currenciesDisplayName.NIC=Cordoba
-currenciesDisplayName.XTR=COMECON Transferabler Rubel
-currenciesDisplayName.FIN=Finnische Mark (1860-1962)
-currenciesDisplayName.FIM=Finnische Mark
+currenciesDisplayName.DJF=Dschibuti-Franc
+currenciesDisplayName.ECV=Verrechnungseinheit f\u00fcr EC
currenciesDisplayName.SBD=Salomonen Dollar
+currenciesDisplayName.UZS=Usbekistan Sum
+currenciesDisplayName.ECS=Ecuadorianischer Sucre
+currenciesDisplayName.PHP=Philippinischer Peso
+currenciesDisplayName.THB=Baht
currenciesDisplayName.LUF=Luxemburgischer Franc
-currenciesDisplayName.TTO=Trinidad und Tobago Dollar (alt)
-currenciesDisplayName.AOS=Angolanischer Escudo
-currenciesDisplayName.AOR=Kwanza Reajustado
-currenciesDisplayName.MNT=Tugrik
-currenciesDisplayName.HUF=Forint
-currenciesDisplayName.BIF=Burundi-Franc
-currenciesDisplayName.AON=Neuer Kwanza
-currenciesDisplayName.AOK=Angolanischer Kwanza (1977-1990)
+currenciesDisplayName.FIM=Finnische Mark
currenciesDisplayName.TTD=Trinidad und Tobago Dollar
currenciesDisplayName.SZL=Lilangeni
-currenciesDisplayName.NHF=Neue Hebriden CFP Franc
-currenciesDisplayName.GBP=Pfund Sterling
+currenciesDisplayName.MNT=Tugrik
currenciesDisplayName.SAR=Saudi Riyal
+currenciesDisplayName.UAK=Ukrainischer Karbovanetz
+currenciesDisplayName.UAH=Hryvnia
+currenciesDisplayName.HUF=Forint
+currenciesDisplayName.COP=Kolumbianischer Peso
+currenciesDisplayName.QAR=Katar Riyal
currenciesDisplayName.LTT=Litauischer Talonas
-currenciesDisplayName.INR=Indische Rupie
currenciesDisplayName.PTE=Portugiesischer Escudo
-currenciesDisplayName.AOA=Kwanza
-currenciesDisplayName.PTC=Portugiesischer Conto
+currenciesDisplayName.AOR=Kwanza Reajustado
+currenciesDisplayName.UYU=Uruguayischer Peso
+currenciesDisplayName.GBP=Pfund Sterling
+currenciesDisplayName.BIF=Burundi-Franc
+currenciesDisplayName.INR=Indische Rupie
+currenciesDisplayName.ZRZ=Zaire
+currenciesDisplayName.AON=Neuer Kwanza
currenciesDisplayName.LTL=Litauischer Litas
+currenciesDisplayName.XFU=Franz\u00f6sischer UIC-Franc
currenciesDisplayName.KZT=Tenge
-currenciesDisplayName.KZR=Kasachstan Rubel
-currenciesDisplayName.VGD=Britische Jungferninseln Dollar
-currenciesDisplayName.NGP=Nigerianisches Pfund
+currenciesDisplayName.MZM=Metical
+currenciesDisplayName.AOK=Angolanischer Kwanza (1977-1990)
+currenciesDisplayName.BUK=Birmanischer Kyat
+currenciesDisplayName.XFO=Franz\u00f6sischer Gold-Franc
+currenciesDisplayName.PGK=Kina
+currenciesDisplayName.SYP=Syrisches Pfund
+currenciesDisplayName.OMR=Rial Omani
currenciesDisplayName.NGN=Naira
+currenciesDisplayName.ZRN=Neuer Zaire
+currenciesDisplayName.AOA=Kwanza
+currenciesDisplayName.CNY=Renminbi Yuan
+currenciesDisplayName.MAF=Marokkanischer Franc
+currenciesDisplayName.GNF=Guinea Franc
currenciesDisplayName.HTG=Gourde
-currenciesDisplayName.SYP=Syrisches Pfund
-currenciesDisplayName.PSP=Pal\u00e4stina Pfund
-currenciesDisplayName.BHD=Bahrain-Dinar
+currenciesDisplayName.MAD=Marokkanischer Dirham
+currenciesDisplayName.TRY=Neue T\u00fcrkische Lira
currenciesDisplayName.MMK=Kyat
+currenciesDisplayName.MYR=Malaysischer Ringgit
+currenciesDisplayName.LSL=Loti
+currenciesDisplayName.BHD=Bahrain-Dinar
+currenciesDisplayName.SLL=Leone
+currenciesDisplayName.BTN=Ngultrum
+currenciesDisplayName.TRL=T\u00fcrkische Lira
+currenciesDisplayName.KMF=Komoren Franc
currenciesDisplayName.ANG=Niederl. Antillen Gulden
currenciesDisplayName.CZK=Tschechische Krone
-currenciesDisplayName.LSL=Loti
-currenciesDisplayName.BGO=Lew (1879-1952)
+currenciesDisplayName.AZM=Aserbeidschan Manat
+currenciesDisplayName.KYD=Kaiman-Dollar
+currenciesDisplayName.GMD=Dalasi
currenciesDisplayName.BGN=Lew
currenciesDisplayName.CAD=Kanadischer Dollar
+currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Lew
-currenciesDisplayName.TRL=T\u00fcrkische Lira
-currenciesDisplayName.KYD=Kaiman-Dollar
-currenciesDisplayName.CYP=Zypern Pfund
+currenciesDisplayName.VEB=Bolivar
currenciesDisplayName.ILS=Schekel
+currenciesDisplayName.MXP=Mexikanischer Silber-Peso (1861-1992)
+currenciesDisplayName.PES=Sol
currenciesDisplayName.GYD=Guyana Dollar
-currenciesDisplayName.AMD=Dram
+currenciesDisplayName.MXN=Mexikanischer Peso
currenciesDisplayName.ILP=Israelisches Pfund
-currenciesDisplayName.ILL=Schekel
-currenciesDisplayName.VEB=Bolivar
+currenciesDisplayName.SKK=Slowakische Krone
+currenciesDisplayName.CYP=Zypern Pfund
+currenciesDisplayName.XDR=Sonderziehungsrechte
+currenciesDisplayName.PEN=Neuer Sol
currenciesDisplayName.LRD=Liberianischer Dollar
-currenciesDisplayName.ALV=Albanischer Lek Valute
+currenciesDisplayName.PEI=Peruanischer Inti
+currenciesDisplayName.AMD=Dram
+currenciesDisplayName.BSD=Bahama-Dollar
currenciesDisplayName.HRK=Kuna
+currenciesDisplayName.CLP=Chilenischer Peso
currenciesDisplayName.HRD=Kroatischer Dinar
-currenciesDisplayName.ALL=Lek
-currenciesDisplayName.JEP=Jersey Pfund Sterling
-currenciesDisplayName.ALK=Albanischer Lek (1946-1961)
-currenciesDisplayName.VDP=Nordvietnam Viet Minh Piastre Dong Viet
-currenciesDisplayName.VDN=Nordvietnam Neuer Dong
-currenciesDisplayName.MKD=Denar
-currenciesDisplayName.VDD=Nordvietnam Piastre Dong Viet
-currenciesDisplayName.TPP=Timor Pataca
currenciesDisplayName.XPF=CFP Franc
-currenciesDisplayName.GWP=Guinea Bissau Peso
-currenciesDisplayName.KWD=Kuwait Dinar
-currenciesDisplayName.GWM=Portugiesisch Guinea Mil Reis
-currenciesDisplayName.BEF=Belgischer Franc
+currenciesDisplayName.FRF=Franz\u00f6sischer Franc
+currenciesDisplayName.BRR=Brasilianischer Cruzeiro
+currenciesDisplayName.MKD=Denar
+currenciesDisplayName.CLF=Unidades de Fomento
+currenciesDisplayName.ALL=Lek
+currenciesDisplayName.BRN=Brasilianischer Cruzado Novo
+currenciesDisplayName.MWK=Malawi Kwacha
+currenciesDisplayName.BRL=Real
currenciesDisplayName.TPE=Timor Escudo
-currenciesDisplayName.BEC=Belgischer Franc (konvertibel)
-currenciesDisplayName.GWE=Portugiesisch Guinea Escudo
+currenciesDisplayName.BRE=Brasilianischer Cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brasilianischer Cruzado
+currenciesDisplayName.BRB=Brasilianischer Cruzeiro Novo (1967-1986)
+currenciesDisplayName.DEM=Deutsche Mark
+currenciesDisplayName.KWD=Kuwait Dinar
+currenciesDisplayName.XCD=Ostkaribischer Dollar
+currenciesDisplayName.NPR=Nepalesische Rupie
+currenciesDisplayName.GWP=Guinea Bissau Peso
+currenciesDisplayName.YUN=Jugoslawischer Dinar (konvertibel)
currenciesDisplayName.SVC=El Salvador Colon
-currenciesDisplayName.BDT=Taka
-currenciesDisplayName.TOS=Tonga Pfund Sterling
-currenciesDisplayName.TOP=Pa\u02bbanga
+currenciesDisplayName.YUM=Neuer Dinar
+currenciesDisplayName.SIT=Tolar
+currenciesDisplayName.JPY=Yen
currenciesDisplayName.XOF=CFA Franc (West)
+currenciesDisplayName.MVR=Rufiyaa
+currenciesDisplayName.GWE=Portugiesisch Guinea Escudo
+currenciesDisplayName.BEF=Belgischer Franc
+currenciesDisplayName.TOP=Pa\u02bbanga
+currenciesDisplayName.YUD=Jugoslawischer Dinar (1966-1990)
+currenciesDisplayName.BEC=Belgischer Franc (konvertibel)
currenciesDisplayName.SUR=Sowjetischer Rubel
-currenciesDisplayName.SUN=Sowjetischer Neuer Rubel
-currenciesDisplayName.NCF=Neukaledonien Franc Germinal
-currenciesDisplayName.CVE=Kap Verde Escudo
-currenciesDisplayName.XNF=Franz\u00f6sischer Antillen CFA Franc
+currenciesDisplayName.ROL=Leu
+currenciesDisplayName.BDT=Taka
+currenciesDisplayName.XBD=Europ\u00e4ische Rechnungseinheit (XBD)
+currenciesDisplayName.AWG=Aruba Florin
+currenciesDisplayName.XBC=Europ\u00e4ische Rechnungseinheit (XBC)
+currenciesDisplayName.XBA=Europ\u00e4ische Rechnungseinheit
+currenciesDisplayName.NOK=Norwegische Krone
+currenciesDisplayName.MUR=Mauritius Rupie
currenciesDisplayName.ZAR=Rand
-currenciesDisplayName.DOP=Dominikanischer Peso
-currenciesDisplayName.ZAP=S\u00fcdafrikanisches Pfund
+currenciesDisplayName.SHP=St. Helena Pfund
+currenciesDisplayName.XAU=Gold
+currenciesDisplayName.VND=Dong
+currenciesDisplayName.TZS=Tansania Schilling
+currenciesDisplayName.GIP=Gibraltar Pfund
currenciesDisplayName.TND=Tunesischer Dinar
-currenciesDisplayName.CUP=Kubanischer Peso
-currenciesDisplayName.GUF=Franz\u00f6sisch Guayana Franc Guiana
+currenciesDisplayName.CVE=Kap Verde Escudo
currenciesDisplayName.UGX=Uganda Schilling
-currenciesDisplayName.LNR=Ceylon Rupie
-currenciesDisplayName.AIF=Afar und Issa Franc
-currenciesDisplayName.VAL=Vatikanstadt Lire
-currenciesDisplayName.STE=Sao Tome und Principe Escudo
+currenciesDisplayName.ZMK=Kwacha
+currenciesDisplayName.JOD=Jordanischer Dinar
+currenciesDisplayName.XAF=CFA Franc (\u00c4quatorial)
+currenciesDisplayName.LBP=Libanesisches Pfund
currenciesDisplayName.UGS=Uganda Schilling (1966-1987)
currenciesDisplayName.STD=Dobra
-currenciesDisplayName.MHD=Marshall Inseln Dollar
-currenciesDisplayName.NZP=Neuseeland Pfund
currenciesDisplayName.WST=Tala
-currenciesDisplayName.WSP=West-Samoa Pfund
-currenciesDisplayName.HNL=Lempira
+currenciesDisplayName.KHR=Riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominikanischer Peso
+currenciesDisplayName.BOV=Mvdol
+currenciesDisplayName.MTP=Maltesisches Pfund
+currenciesDisplayName.USS=US Dollar (Gleicher Tag)
+currenciesDisplayName.BOP=Bolivianischer Peso
+currenciesDisplayName.MTL=Maltesische Lira
+currenciesDisplayName.CUP=Kubanischer Peso
currenciesDisplayName.TMM=Turkmenistan-Manat
-currenciesDisplayName.GTQ=Quetzal
+currenciesDisplayName.USN=US Dollar (N\u00e4chster Tag)
+currenciesDisplayName.SGD=Singapur Dollar
currenciesDisplayName.NZD=Neuseeland Dollar
-currenciesDisplayName.SSP=Schottisches Pfund
-currenciesDisplayName.BBD=Barbados-Dollar
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.HNL=Lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Italienische Lire
+currenciesDisplayName.PAB=Balboa
+currenciesDisplayName.GTQ=Quetzal
+currenciesDisplayName.LAK=Kip
+currenciesDisplayName.GHC=Cedi
+currenciesDisplayName.AUD=Australischer Dollar
currenciesDisplayName.NAD=Namibia Dollar
+currenciesDisplayName.KGS=Som
currenciesDisplayName.MGF=Madagaskar Franc
+currenciesDisplayName.CHF=Schweizer Franken
+currenciesDisplayName.BBD=Barbados-Dollar
currenciesDisplayName.MGA=Madagaskar Ariary
-currenciesDisplayName.EGP=\u00c4gyptisches Pfund
+currenciesDisplayName.PYG=Guarani
currenciesDisplayName.PLZ=Zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnien und Herzegowina Neuer Dinar
-currenciesDisplayName.BAM=Konvertierbare Mark
-currenciesDisplayName.BZD=Belize-Dollar
-currenciesDisplayName.BAD=Bosnien und Herzegowina Dinar
-currenciesDisplayName.PLN=Zloty
currenciesDisplayName.YER=Jemen Rial
+currenciesDisplayName.ATS=\u00d6sterreichischer Schilling
+currenciesDisplayName.ETB=Birr
+currenciesDisplayName.BND=Brunei-Dollar
+currenciesDisplayName.JMD=Jamaika Dollar
+currenciesDisplayName.EGP=\u00c4gyptisches Pfund
+currenciesDisplayName.PLN=Zloty
+currenciesDisplayName.DZD=Algerischer Dinar
+currenciesDisplayName.ISK=Isl\u00e4ndische Krone
currenciesDisplayName.SRG=Suriname Gulden
+currenciesDisplayName.LYD=Libyscher Dinar
+currenciesDisplayName.BZD=Belize-Dollar
+currenciesDisplayName.BAM=Konvertierbare Mark
+currenciesDisplayName.ESP=Spanische Pesete
currenciesDisplayName.KRW=S\u00fcdkoreanischer Won
+currenciesDisplayName.NLG=Holl\u00e4ndischer Gulden
+currenciesDisplayName.MRO=Ouguiya
+currenciesDisplayName.BAD=Bosnien und Herzegowina Dinar
+currenciesDisplayName.ZWD=Simbabwe Dollar
+currenciesDisplayName.SEK=Schwedische Krone
currenciesDisplayName.BYR=Belarus Rubel (neu)
-currenciesDisplayName.YEI=Jemen Imadi Riyal
-currenciesDisplayName.BYL=Belarus Rubel (1992-1994)
-currenciesDisplayName.CSC=Tschechoslowakische Krone
-currenciesDisplayName.KRO=S\u00fcdkoreanischer Won (alt)
-currenciesDisplayName.KRH=S\u00fcdkoreanischer Hwan
-currenciesDisplayName.BYB=Belarus Rubel (alt)
-currenciesDisplayName.SQS=Somaliland Schilling
-currenciesDisplayName.GRN=Neue Griechische Drachme
+currenciesDisplayName.IRR=Rial
currenciesDisplayName.PKR=Pakistanische Rupie
-currenciesDisplayName.AFN=Afghani
-currenciesDisplayName.ZWD=Simbabwe Dollar
-currenciesDisplayName.LKR=Sri Lanka Rupie
-currenciesDisplayName.GRD=Griechische Drachme
-currenciesDisplayName.IEP=Irisches Pfund
-currenciesDisplayName.AFA=Afghani
-currenciesDisplayName.YDD=Jemen Dinar
-currenciesDisplayName.RWF=Ruanda Franc
-currenciesDisplayName.CRC=Costa Rica Colon
-currenciesDisplayName.TJS=Tadschikistan Somoni
-currenciesDisplayName.TJR=Tadschikistan Rubel
-currenciesDisplayName.EEK=Estnische Krone
-currenciesDisplayName.GQP=\u00c4quatorialguinea Peseta Guineana
-currenciesDisplayName.MDR=Moldau Rubel Cupon
-currenciesDisplayName.HKD=Hongkong Dollar
-currenciesDisplayName.DKK=D\u00e4nische Krone
-currenciesDisplayName.MDL=Moldau Leu
-currenciesDisplayName.GQF=\u00c4quatorialguinea Franco
-currenciesDisplayName.GQE=\u00c4quatorialguinea Ekwele Guineana
-currenciesDisplayName.IDR=Rupiah
-currenciesDisplayName.AED=UAE Dirham
-currenciesDisplayName.KPW=Nordkoreanischer Won
-currenciesDisplayName.IDN=Indonesische Neue Rupiah
-currenciesDisplayName.BWP=Pula
-currenciesDisplayName.MDC=Moldau Leu Cupon
-currenciesDisplayName.IDJ=Indonesische Java Rupiah
-currenciesDisplayName.KPP=Nordkoreanischer Won (alt)
-currenciesDisplayName.IDG=Indonesischer Nica Guilder
-currenciesDisplayName.VUV=Vatu
-currenciesDisplayName.XID=Islamischer Dinar
-currenciesDisplayName.SOS=Somalia Schilling
-currenciesDisplayName.ADP=Andorranische Pesete
-currenciesDisplayName.RUR=Russischer Rubel (alt)
-currenciesDisplayName.DJF=Dschibuti-Franc
-currenciesDisplayName.ADD=Andorranischer Diner
-currenciesDisplayName.MCG=Monaco Franc Germinal
-currenciesDisplayName.MCF=Monaco Franc Nouveau
-currenciesDisplayName.ECV=Verrechnungseinheit f\u00fcr EC
-currenciesDisplayName.ECS=Ecuadorianischer Sucre
-currenciesDisplayName.LIF=Liechtenstein Franken
-currenciesDisplayName.RUB=Russischer Rubel (neu)
-currenciesDisplayName.PHP=Philippinischer Peso
-currenciesDisplayName.UZS=Usbekistan Sum
-currenciesDisplayName.COP=Kolumbianischer Peso
-currenciesDisplayName.THB=Baht
-currenciesDisplayName.IBP=Nordirisches Pfund
-currenciesDisplayName.BUR=Birmanische Rupie
-currenciesDisplayName.COF=Kongo CFA Franc
-currenciesDisplayName.BUK=Birmanischer Kyat
-currenciesDisplayName.COB=Kolumbianischer Papier-Peso
-currenciesDisplayName.UAK=Ukrainischer Karbovanetz
-currenciesDisplayName.QAR=Katar Riyal
-currenciesDisplayName.UAH=Hryvnia
-currenciesDisplayName.CNY=Renminbi Yuan
-currenciesDisplayName.MZM=Metical
-currenciesDisplayName.UYU=Uruguayischer Peso
-currenciesDisplayName.SML=San Marino Lire
-currenciesDisplayName.CNP=Chinesischer Jen Min Piao Yuan
-currenciesDisplayName.PGK=Kina
-currenciesDisplayName.GNF=Guinea Franc
-currenciesDisplayName.OMR=Rial Omani
-currenciesDisplayName.XFU=Franz\u00f6sischer UIC-Franc
-currenciesDisplayName.ZRZ=Zaire
-currenciesDisplayName.BTR=Bhutan Rupie
-currenciesDisplayName.MAF=Marokkanischer Franc
-currenciesDisplayName.MAD=Marokkanischer Dirham
-currenciesDisplayName.XFO=Franz\u00f6sischer Gold-Franc
-currenciesDisplayName.BTN=Ngultrum
-currenciesDisplayName.ZRN=Neuer Zaire
-currenciesDisplayName.MYR=Malaysischer Ringgit
-currenciesDisplayName.AZM=Aserbeidschan Manat
-currenciesDisplayName.GMP=Gambia Pfund
-currenciesDisplayName.KMF=Komoren Franc
-currenciesDisplayName.SLL=Leone
-currenciesDisplayName.GMD=Dalasi
-currenciesDisplayName.BSP=Bahama-Pfund
-currenciesDisplayName.CMF=Kamerun CFA Franc
-currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
-currenciesDisplayName.MXP=Mexikanischer Silber-Peso (1861-1992)
-currenciesDisplayName.BSD=Bahama-Dollar
-currenciesDisplayName.MXN=Mexikanischer Peso
-currenciesDisplayName.PES=Sol
-currenciesDisplayName.GLK=Gr\u00f6nland Krone
-currenciesDisplayName.BRZ=Brasilianischer Cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Neuer Sol
-currenciesDisplayName.CLP=Chilenischer Peso
-currenciesDisplayName.SKK=Slowakische Krone
-currenciesDisplayName.PEI=Peruanischer Inti
-currenciesDisplayName.BRR=Brasilianischer Cruzeiro
-currenciesDisplayName.XDR=Sonderziehungsrechte
-currenciesDisplayName.FRG=Franz\u00f6sischer Franc Germinal/Franc Poincare
-currenciesDisplayName.FRF=Franz\u00f6sischer Franc
-currenciesDisplayName.BRN=Brasilianischer Cruzado Novo
-currenciesDisplayName.CLF=Unidades de Fomento
-currenciesDisplayName.CLE=Chilenischer Escudo
-currenciesDisplayName.BRL=Real
-currenciesDisplayName.CLC=Chilenischer Condor
-currenciesDisplayName.BRE=Brasilianischer Cruzeiro (1990-1993)
-currenciesDisplayName.DES=Sperrmark
-currenciesDisplayName.MWP=Malawi Pfund
-currenciesDisplayName.BRC=Brasilianischer Cruzado
-currenciesDisplayName.BRB=Brasilianischer Cruzeiro Novo (1967-1986)
-currenciesDisplayName.MWK=Malawi Kwacha
-currenciesDisplayName.PDR=Dnjestr-Republik Rubel
-currenciesDisplayName.DEM=Deutsche Mark
-currenciesDisplayName.TDF=Tschad CFA Franc
-currenciesDisplayName.PDN=Dnjestr-Republik Rubel (neu)
-currenciesDisplayName.PDK=Dnjestr-Republik Rubel Kupon
-currenciesDisplayName.NPR=Nepalesische Rupie
-currenciesDisplayName.JPY=Yen
-currenciesDisplayName.MVR=Rufiyaa
-currenciesDisplayName.MVP=Malediven Rupie
-currenciesDisplayName.XCD=Ostkaribischer Dollar
-currenciesDisplayName.SIT=Tolar
-currenciesDisplayName.YUR=Jugoslawischer Reformierter Dinar
-currenciesDisplayName.AWG=Aruba Florin
-currenciesDisplayName.YUO=Jugoslawischer Oktober-Dinar
-currenciesDisplayName.YUN=Jugoslawischer Dinar (konvertibel)
-currenciesDisplayName.YUM=Neuer Dinar
-currenciesDisplayName.TCC=Turks und Caicos Krone
-currenciesDisplayName.YUG=Jugoslawischer 1994-Dinar
-currenciesDisplayName.YUF=Jugoslawische F\u00f6deration Dinar
-currenciesDisplayName.RON=Neuer Leu
-currenciesDisplayName.YUD=Jugoslawischer Dinar (1966-1990)
-currenciesDisplayName.ROL=Leu
-currenciesDisplayName.SIB=Tolar Bons
-currenciesDisplayName.NOK=Norwegische Krone
-currenciesDisplayName.MUR=Mauritius Rupie
-currenciesDisplayName.XBD=Europ\u00e4ische Rechnungseinheit (XBD)
-currenciesDisplayName.GIP=Gibraltar Pfund
-currenciesDisplayName.VNS=Vietnamesischer Dong
-currenciesDisplayName.XBC=Europ\u00e4ische Rechnungseinheit (XBC)
-currenciesDisplayName.VNR=Republik Vietnam Dong
-currenciesDisplayName.XBA=Europ\u00e4ische Rechnungseinheit
-currenciesDisplayName.SHP=St. Helena Pfund
-currenciesDisplayName.VNN=Vietnamesischer Neuer Dong
-currenciesSymbol.JOD=JOD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=MTL
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SFr.
+currenciesDisplayName.BMD=Bermuda-Dollar
currenciesSymbol.ATS=\u00f6S
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LYD
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=MRO
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=TWD
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=GEL
-currenciesSymbol.GEK=GEK
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=KZT
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.LSL=LSL
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=GYD
-currenciesSymbol.AMD=AMD
-currenciesSymbol.ILP=ILP
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=ALL
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MKD
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=XPF
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=TOP
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=UGX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=NAD
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=BAM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=PLN
-currenciesSymbol.YER=YER
-currenciesSymbol.SRG=SRG
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=BYR
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=ZWD
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IEP
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.DJF=DJF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=MZM
-currenciesSymbol.UYU=UYU
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.GNF=GNF
-currenciesSymbol.OMR=OMR
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.XFO=XFO
-currenciesSymbol.BTN=BTN
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.MYR=MYR
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.MXP=MXP
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXN=MXN
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.PEN=PEN
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.SKK=SKK
-currenciesSymbol.CLP=CLP
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
+currenciesSymbol.KGS=som
currenciesSymbol.FRF=FF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=BRL
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MWK
-currenciesSymbol.PDR=PDR
+currenciesSymbol.CHF=SFr.
currenciesSymbol.DEM=DM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=NPR
-currenciesSymbol.MVR=MVR
-currenciesSymbol.MVP=MVP
currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBA=XBA
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.AFN=Af
shortMonths=Jan®Feb®Mrz®Apr®Mai®Jun®Jul®Aug®Sep®Okt®Nov®Dez®®
months=Januar®Februar®M\u00e4rz®April®Mai®Juni®Juli®August®September®Oktober®November®Dezember®®
shortWeekdays=®So®Mo®Di®Mi®Do®Fr®Sa®
@@ -722,8 +288,8 @@ territories.GL=Gr\u00f6nland
territories.SV=El Salvador
territories.062=S\u00fcd-Zentralasien
territories.ST=S\u00e3o Tom\u00e9 und Pr\u00edncipe
-territories.GI=Gibraltar
territories.061=Polynesien
+territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Suriname
territories.GF=Franz\u00f6sisch-Guayana
@@ -746,13 +312,13 @@ territories.SC=Seychellen
territories.SB=Salomonen
territories.SA=Saudi-Arabien
territories.FR=Frankreich
-territories.FO=F\u00e4r\u00f6er
territories.057=Mikronesien
+territories.FO=F\u00e4r\u00f6er
territories.FM=Mikronesien
territories.RW=Ruanda
territories.054=Melanesien
-territories.FK=Falklandinseln
territories.053=Australien und Neuseeland
+territories.FK=Falklandinseln
territories.RU=Russische F\u00f6deration
territories.FJ=Fidschi
territories.FI=Finnland
@@ -761,19 +327,20 @@ territories.RE=R\u00e9union
territories.ET=\u00c4thiopien
territories.ES=Spanien
territories.ER=Eritrea
-territories.EH=Westsahara
territories.833=Insel Man
+territories.EH=Westsahara
territories.EG=\u00c4gypten
+territories.830=Kanalinseln
territories.EE=Estland
-territories.830=\u00c4rmelkanalinseln
+territories.QO=\u00c4u\u00dferes Ozeanien
territories.EC=Ecuador
territories.DZ=Algerien
territories.QA=Katar
territories.039=S\u00fcdeuropa
territories.DO=Dominikanische Republik
territories.PY=Paraguay
-territories.DM=Dominica
territories.035=S\u00fcdostasien
+territories.DM=Dominica
territories.PW=Palau
territories.DK=D\u00e4nemark
territories.DJ=Dschibuti
@@ -796,6 +363,7 @@ territories.CX=Weihnachtsinsel
territories.CV=Kap Verde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbien und Montenegro
territories.CR=Costa Rica
territories.029=Karibik
territories.CO=Kolumbien
@@ -803,8 +371,8 @@ territories.CN=China
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cookinseln
-territories.021=Nordamerika
territories.CI=C\u00f4te d\u2019Ivoire
+territories.021=Nordamerika
territories.CH=Schweiz
territories.CG=Kongo
territories.CF=Zentralafrikanische Republik
@@ -819,27 +387,26 @@ territories.BV=Bouvetinsel
territories.BT=Bhutan
territories.BS=Bahamas
territories.BR=Brasilien
-territories.019=Nord- und S\u00fcdamerika
+territories.019=Nord-, Mittel- und S\u00fcdamerika
territories.018=S\u00fcdafrika
territories.NZ=Neuseeland
-territories.017=Zentralafrika
territories.BO=Bolivien
+territories.017=Zentralafrika
territories.BN=Brunei Darussalam
-territories.015=Nordafrika
territories.BM=Bermuda
+territories.015=Nordafrika
territories.014=Ostafrika
territories.013=Mittelamerika
territories.NU=Niue
territories.BJ=Benin
-territories.011=Westafrika
territories.BI=Burundi
+territories.011=Westafrika
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulgarien
territories.BF=Burkina Faso
territories.NP=Nepal
territories.BE=Belgien
-territories.ZZ=\u00c4u\u00dferes Ozeanien
territories.NO=Norwegen
territories.BD=Bangladesch
territories.BB=Barbados
@@ -851,7 +418,7 @@ territories.NG=Nigeria
territories.NF=Norfolkinsel
territories.AZ=Aserbaidschan
territories.NE=Niger
-territories.AX=Aland Inseln
+territories.AX=Alandinseln
territories.NC=Neukaledonien
territories.AW=Aruba
territories.ZM=Sambia
@@ -860,15 +427,15 @@ territories.AU=Australien
territories.AT=\u00d6sterreich
territories.AS=Amerikanisch-Samoa
territories.AR=Argentinien
-territories.AQ=Antarktis
territories.009=Ozeanien
+territories.AQ=Antarktis
territories.MZ=Mosambik
territories.AO=Angola
territories.MY=Malaysia
territories.AN=Niederl\u00e4ndische Antillen
territories.MX=Mexiko
-territories.AM=Armenien
territories.005=S\u00fcdamerika
+territories.AM=Armenien
territories.MW=Malawi
territories.AL=Albanien
territories.MV=Malediven
@@ -876,8 +443,8 @@ territories.ZA=S\u00fcdafrika
territories.MU=Mauritius
territories.002=Afrika
territories.MT=Malta
-territories.AI=Anguilla
territories.001=Welt
+territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauretanien
territories.AG=Antigua und Barbuda
@@ -891,7 +458,6 @@ territories.MN=Mongolei
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Mazedonien
-territories.YU=Jugoslawien
territories.YT=Mayotte
territories.MH=Marshallinseln
territories.MG=Madagaskar
@@ -917,7 +483,7 @@ territories.LA=Laos
territories.KZ=Kasachstan
territories.KY=Kaimaninseln
territories.KW=Kuwait
-territories.145=West-Asien
+territories.145=Westasien
territories.142=Asien
territories.KR=Republik Korea
territories.KP=Demokratische Volksrepublik Korea
@@ -968,36 +534,36 @@ territories.TR=T\u00fcrkei
territories.TO=Tonga
territories.TN=Tunesien
territories.TM=Turkmenistan
-languages.gwi=Gwich\u02bbin
languages.akk=Akkadisch
+languages.gwi=Kutchin-Sprache
languages.eka=Ekajuk
-languages.ijo=Ijo
+languages.ijo=Ijo-Sprache
languages.xh=Xhosa
languages.sux=Sumerisch
languages.sus=Susu
languages.mis=Verschiedene Sprachen
-languages.loz=Lozi
+languages.loz=Rotse-Sprache
languages.tog=Tonga (Nyasa)
languages.pon=Ponapeanisch
-languages.min=Minangkabau
-languages.suk=Sukuma
+languages.min=Minangkabau-Sprache
+languages.suk=Sukuma-Sprache
languages.wo=Wolof
+languages.kut=Kutenai-Sprache
languages.lol=Mongo
-languages.kut=Kutenai
-languages.mic=Micmac
+languages.mic=Micmac-Sprache
languages.wa=Wallonisch
languages.kum=Kum\u00fckisch
languages.zap=Zapotekisch
languages.cus=Kuschitische Sprachen (Andere)
-languages.jbo=Lojban
languages.doi=Dogri
+languages.jbo=Lojban
languages.vo=Volap\u00fck
languages.oto=Otomangue-Sprachen
languages.vi=Vietnamesisch
-languages.vai=Vai
-languages.rar=Rarotongan
+languages.vai=Vai-Sprache
+languages.rar=Rarotonganisch
languages.ve=Venda-Sprache
-languages.rap=Rapanui
+languages.rap=Osterinsel-Sprache
languages.raj=Rajasthani
languages.ota=Osmanisch
languages.nzi=Nzima
@@ -1008,30 +574,30 @@ languages.tmh=Tamaseq
languages.nai=Indianersprachen, Nordamerika (Andere)
languages.nah=Nahuatl
languages.ur=Urdu
-languages.fat=Fanti
+languages.fat=Fanti-Sprache
languages.uk=Ukrainisch
languages.egy=\u00c4gyptisch
languages.ug=Uigurisch
-languages.fan=Fang
-languages.ssa=Nilosaharanische Sprachen
-languages.mga=Mittelirisch
+languages.fan=Pangwe-Sprache
+languages.ssa=Nilosaharanische Sprachen (Andere)
languages.bat=Baltische Sprachen (Andere)
+languages.mga=Mittelirisch
languages.nyo=Nyoro
languages.bas=Basaa-Sprache
languages.nyn=Nyankole
-languages.nym=Nyamwezi
+languages.nym=Nyamwezi-Sprache
languages.hmn=Miao-Sprachen
languages.ban=Balinesisch
-languages.osa=Osage
+languages.osa=Osage-Sprache
languages.bal=Belutschisch
languages.ty=Tahitisch
-languages.bai=Bamileke-Sprachen
+languages.bai=Bamileke-Sprache
languages.tw=Twi
-languages.srr=Serer
-languages.tli=Tlingit
+languages.srr=Serer-Sprache
+languages.tli=Tlingit-Sprache
languages.tt=Tatarisch
languages.ts=Tsonga
-languages.bad=Banda
+languages.bad=Banda-Sprache
languages.tr=T\u00fcrkisch
languages.to=Tongaisch
languages.tn=Tswana-Sprache
@@ -1039,12 +605,12 @@ languages.tl=Tagalog
languages.tk=Turkmenisch
languages.ti=Tigrinja
languages.th=Thai
-languages.kru=Kurukh
+languages.kru=Oraon-Sprache
languages.tg=Tadschikisch
languages.byn=Blin
languages.te=Telugu
-languages.kro=Kru
languages.csb=Kaschubisch
+languages.kro=Kru-Sprachen
languages.ta=Tamilisch
languages.tkl=Tokelauanisch
languages.efi=Efik
@@ -1056,7 +622,7 @@ languages.st=S\u00fcd-Sotho-Sprache
languages.ss=Swazi
languages.sr=Serbisch
languages.sq=Albanisch
-languages.men=Mende
+languages.men=Mende-Sprache
languages.crp=Kreolische Sprachen
languages.so=Somali
languages.afh=Afrihili
@@ -1065,11 +631,11 @@ languages.sm=Samoanisch
languages.sl=Slowenisch
languages.grc=Griechisch (bis 1453)
languages.sk=Slowakisch
-languages.grb=Gerbo
+languages.grb=Grebo-Sprache
languages.si=Singhalesisch
languages.sh=Serbo-Kroatisch
-languages.crh=Krimtatarisch
languages.afa=Afro-Asiatische Sprachen (Andere)
+languages.crh=Krimtatarisch
languages.sg=Sango
languages.se=Nord-Samisch
languages.sd=Sindhi
@@ -1083,71 +649,71 @@ languages.ro=Rum\u00e4nisch
languages.rn=Rundi-Sprache
languages.rm=R\u00e4toromanisch
languages.mdf=Moksha
-languages.tiv=Tiv
+languages.tiv=Tiv-Sprache
languages.ady=Adygai
-languages.zun=Zuni
-languages.kpe=Kpelle
+languages.zun=Zuni-Sprache
+languages.kpe=Kpelle-Sprache
languages.qu=Quechua
languages.tig=Tigre
-languages.son=Songhai
+languages.son=Songhai-Sprache
languages.cpp=Kreolisch-Portugiesisch (Andere)
-languages.sog=Sogdien
+languages.sog=Sogdisch
languages.ada=Adangme
-languages.kos=Kosraeanisch
-languages.hit=Hethitisch
languages.cpf=Kreolisch-Franz\u00f6sisch (Andere)
-languages.cpe=Krio
+languages.hit=Hethitisch
+languages.kos=Kosraeanisch
+languages.cpe=Kreolisch-Englisch (Andere)
languages.him=Himachali
-languages.kok=Konkani
-languages.hil=Hiligaynon
languages.got=Gotisch
-languages.gor=Gorontalo
-languages.gon=Gondi
-languages.din=Dinka
+languages.hil=Hiligaynon-Sprache
+languages.kok=Konkani
+languages.gor=Mongondou
+languages.gon=Gondi-Sprache
+languages.din=Dinka-Sprache
languages.nub=Nubische Sprachen
languages.pt=Portugiesisch
languages.ps=Afghanisch (Paschtu)
languages.fur=Friulisch
languages.phn=Ph\u00f6nikisch
languages.goh=Althochdeutsch
-languages.snk=Soninke
+languages.snk=Soninke-Sprache
languages.cop=Koptisch
-languages.yap=Yap
-languages.ach=Acoli
-languages.yao=Yao
+languages.yap=Yapesisch
+languages.ach=Acholi-Sprache
+languages.yao=Yao-Sprache
languages.phi=Philippinen-Austronesisch (Andere)
languages.pl=Polnisch
-languages.ace=Achinesisch
+languages.ace=Aceh-Sprache
languages.pi=Pali
languages.pa=Pandschabisch
languages.bug=Buginesisch
languages.iba=Iban
languages.sms=Skolt-Lappisch
languages.bua=Burjatisch
-languages.mas=Masai
+languages.mas=Massai-Sprache
languages.smn=Inari-Lappisch
languages.os=Ossetisch
-languages.map=Austronesisch
+languages.map=Austronesische Sprachen (Andere)
languages.or=Orija
-languages.man=Mandingo
+languages.man=Manding-Sprache
languages.smj=Lule-Lappisch
languages.smi=Lappisch
languages.mak=Makassarisch
languages.om=Oromo
languages.mai=Maithili
languages.oj=Ojibwa-Sprache
-languages.mag=Magahi
+languages.mag=Khotta
languages.mad=Maduresisch
languages.sma=S\u00fcd-Samisch
languages.oc=Okzitanisch
-languages.nso=Sotho (Nord)
-languages.btk=Batak
+languages.nso=Sotho-Sprache (Nord)
+languages.btk=Batak (Indonesien)
languages.myv=Erzya
languages.dgr=Dogrib
languages.ny=Chewa-Sprache
languages.myn=Maya-Sprachen
languages.nv=Navajo-Sprache
-languages.kmb=Kimbundu
+languages.kmb=Kimbundu-Sprache
languages.nr=Ndebele-Sprache (S\u00fcd)
languages.gmh=Mittelhochdeutsch
languages.no=Norwegisch
@@ -1158,10 +724,10 @@ languages.sla=Slawische Sprachen (Andere)
languages.ne=Nepalesisch
languages.nd=Ndebele-Sprache (Nord)
languages.cmc=Cham-Sprachen
-languages.tet=Tetum
+languages.tet=Tetum-Sprache
languages.nb=Norwegisch Bokm\u00e5l
languages.na=Nauruisch
-languages.ter=Tereno
+languages.ter=Tereno-Sprache
languages.tem=Temne
languages.my=Birmanisch
languages.lez=Lesgisch
@@ -1171,21 +737,21 @@ languages.ms=Malaiisch
languages.mr=Marathi
languages.fro=Altfranz\u00f6sisch
languages.mo=Moldauisch
-languages.frm=Mittelfranz\u00f6sisch
languages.mn=Mongolisch
-languages.jrb=J\u00fcdisch-Arabisch
+languages.frm=Mittelfranz\u00f6sisch
languages.ml=Malayalam
+languages.jrb=J\u00fcdisch-Arabisch
languages.mk=Mazedonisch
languages.mi=Maori
languages.mh=Marschallesisch
languages.mg=Madagassisch
languages.mwr=Marwari
-languages.bra=Braj
-languages.den=Slave
+languages.bra=Braj-Bhakha
languages.lv=Lettisch
+languages.den=Slave (Athapaskische Sprachen)
languages.lu=Luba
-languages.del=Delaware
languages.lt=Litauisch
+languages.del=Delaware-Sprache
languages.lo=Laotisch
languages.ln=Lingala
languages.li=Limburgisch
@@ -1209,23 +775,23 @@ languages.kn=Kannada
languages.km=Kambodschanisch
languages.kl=Gr\u00f6nl\u00e4ndisch
languages.kk=Kasachisch
-languages.rom=Romany
+languages.rom=Zigeunersprache
languages.kj=Kwanyama
languages.sid=Sidamo
languages.ki=Kikuyu-Sprache
languages.kg=Kongo
languages.non=Altnordisch
languages.ka=Georgisch
-languages.mus=Creek
-languages.roa=Romance (Other)
+languages.mus=Muskogee-Sprachen
+languages.roa=Romanische Sprachen (Andere)
languages.nog=Nogai
languages.mun=Munda-Sprachen
languages.mul=Polyglott
languages.jv=Javanisch
languages.gil=Gilbertesisch
-languages.znd=Zande
+languages.znd=Zande-Sprache
languages.shn=Schan-Sprache
-languages.fon=Fon
+languages.fon=Fon-Sprache
languages.xal=Kalm\u00fcckisch
languages.aus=Australische Sprachen
languages.kho=Sakisch
@@ -1238,47 +804,47 @@ languages.iu=Inukitut
languages.pap=Papiamento
languages.it=Italienisch
languages.sgn=Geb\u00e4rdensprache
+languages.kha=Khasi-Sprache
languages.is=Isl\u00e4ndisch
-languages.kha=Khasi
languages.chr=Cherokee
-languages.pam=Pampanga
+languages.pam=Pampanggan-Sprache
languages.pal=Mittelpersisch
languages.chp=Chipewyan
-languages.io=Ido
languages.cho=Choctaw
+languages.io=Ido-Sprache
languages.chn=Chinook
languages.chm=Tscheremissisch
languages.tyv=Tuwinisch
-languages.bnt=Bantu
-languages.pag=Pangasinan
-languages.ik=Inupiak
+languages.bnt=Bantusprachen (Andere)
+languages.pag=Pangasinan-Sprache
languages.chk=Trukesisch
-languages.ii=Sichuan Yi
+languages.ik=Inupiak
languages.haw=Hawaiianisch
-languages.lam=Banjari
-languages.ig=Igbo-Sprache
+languages.ii=Sichuan Yi
+languages.lam=Lamba-Sprache
languages.chg=Tschagataisch
+languages.ig=Igbo-Sprache
languages.sga=Altirisch
languages.paa=Papuasprachen (Andere)
languages.ie=Interlingue
languages.id=Indonesisch
languages.lah=Lahnda
+languages.chb=Chibcha-Sprachen
languages.day=Dajak
-languages.chb=Chibcha
languages.ia=Interlingua
-languages.lad=Ladino
-languages.hz=Herero-Sprache
-languages.hai=Haida
+languages.lad=Judenspanisch
languages.dar=Darginisch
+languages.hai=Haida-Sprache
+languages.hz=Herero-Sprache
languages.hy=Armenisch
languages.ath=Athapaskische Sprachen
languages.hu=Ungarisch
languages.ht=Kreolisch
-languages.dak=Dakota
+languages.dak=Dakota-Sprache
languages.hr=Kroatisch
languages.ho=Hiri-Motu
languages.hi=Hindi
-languages.dyu=Dyula
+languages.dyu=Dyula-Sprache
languages.he=Hebr\u00e4isch
languages.ast=Asturianisch
languages.ha=Hausa
@@ -1290,20 +856,20 @@ languages.sel=Selkupisch
languages.iro=Irokesische Sprachen
languages.gn=Guarani
languages.gl=Galizisch
-languages.arw=Arawak
-languages.gez=Geez
-languages.art=Kunstsprachen (Andere)
+languages.arw=Arawak-Sprachen
languages.gd=Schottisch-G\u00e4lisch
-languages.ira=Iranisch
+languages.art=Kunstsprachen (Andere)
+languages.gez=Geez
+languages.ira=Iranische Sprachen (Andere)
languages.ga=Irisch
languages.arp=Arapaho-Sprache
languages.arn=Araukanisch
languages.fy=Friesisch
-languages.bla=Siksika
+languages.bla=Blackfoot-Sprache
languages.gem=Germanische Sprachen (Andere)
-languages.ypk=Yupik-Sprachen
-languages.arc=Aram\u00e4isch
+languages.ypk=Yupik-Sprache
languages.fr=Franz\u00f6sisch
+languages.arc=Aram\u00e4isch
languages.fo=F\u00e4r\u00f6isch
languages.cel=Keltische Sprachen (Andere)
languages.fj=Fidschianisch
@@ -1320,82 +886,82 @@ languages.eo=Esperanto
languages.en=Englisch
languages.el=Griechisch
languages.tut=Altaische Sprachen (Andere)
-languages.niu=Niue
+languages.niu=Niue-Sprache
languages.tup=Tupi-Sprachen
languages.ee=Ewe-Sprache
-languages.tum=Tumbuka
-languages.mos=Mossi
+languages.tum=Tumbuka-Sprache
+languages.mos=Mossi-Sprache
languages.dz=Bhutanisch
-languages.nic=Nigerkordofanische Sprachen
-languages.lus=Lushai
-languages.fiu=Finnougrische Sprachen (Andere)
+languages.nic=Nigerkordofanische Sprachen (Andere)
languages.dv=Maledivisch
-languages.nia=Nias
-languages.moh=Mohawk
-languages.luo=Luo
-languages.lun=Lunda
-languages.apa=Apachen-Sprachen
-languages.lui=Luiseno
+languages.fiu=Finnougrische Sprachen (Andere)
+languages.lus=Lushai-Sprache
+languages.nia=Nias-Sprache
+languages.moh=Mohawk-Sprache
+languages.luo=Luo-Sprache
+languages.lun=Lunda-Sprache
+languages.apa=Apachen-Sprache
+languages.lui=Luiseno-Sprache
languages.hup=Hupa
-languages.bin=Bini
+languages.bin=Bini-Sprache
languages.de=Deutsch
languages.lua=Luba-Lulua
-languages.bik=Bikol
-languages.was=Washo
+languages.bik=Bikol-Sprache
+languages.was=Washo-Sprache
languages.und=Sprache nicht ermittelt
languages.war=Waray
languages.da=D\u00e4nisch
languages.dum=Mittelniederl\u00e4ndisch
-languages.wal=Walamo
-languages.mno=Manobo-Sprachen
-languages.wak=Wakash-Sprachen
+languages.wal=Walamo-Sprache
+languages.mno=Manobo-Sprache
+languages.wak=Wakashanisch
languages.sat=Santali
languages.cy=Kymrisch
-languages.sas=Sassak
-languages.kbd=Kabardinisch
+languages.sas=Sasak
languages.cv=Tschuwaschisch
+languages.kbd=Kabardinisch
languages.cu=Kirchenslawisch
-languages.mni=Manipuri
+languages.mni=Meithei-Sprache
languages.cs=Tschechisch
languages.sam=Samaritanisch
languages.cr=Cree
-languages.sal=Salish-Sprachen
+languages.sal=Salish-Sprache
languages.dua=Duala
languages.co=Korsisch
languages.sai=Indianersprachen, S\u00fcdamerika (Andere)
languages.mnc=Mandschurisch
languages.sah=Jakutisch
-languages.kaw=Altjavanisch
+languages.gba=Gbaya-Sprache
languages.inh=Ingush
-languages.gba=Gbaya
-languages.sad=Sandawe
+languages.kaw=Kawi
+languages.sad=Sandawe-Sprache
languages.ch=Chamorro-Sprache
-languages.ine=Indogermanische Sprachen (Andere)
languages.bho=Bhodschpuri
+languages.ine=Indogermanische Sprachen (Andere)
languages.enm=Mittelenglisch
-languages.kar=Karenisch
-languages.inc=Indoarische Sprachen
languages.ce=Tschetschenisch
+languages.inc=Indoarische Sprachen (Andere)
+languages.kar=Karenisch
languages.gay=Gayo
languages.ca=Katalanisch
-languages.umb=Umbundu
+languages.umb=Mbundu-Sprache
languages.syr=Syrisch
languages.kam=Kamba
-languages.tsi=Tsimshian
+languages.tsi=Tsimshian-Sprache
languages.ang=Altenglisch
-languages.kac=Kachin
languages.cau=Kaukasische Sprachen (Andere)
+languages.kac=Kachin-Sprache
languages.kab=Kabylisch
-languages.kaa=Karakalpakisch
languages.bs=Bosnisch
-languages.car=Karibische Sprachen
+languages.kaa=Karakalpakisch
languages.br=Bretonisch
+languages.car=Karibische Sprachen
languages.bo=Tibetisch
languages.bn=Bengalisch
languages.bm=Bambara-Sprache
-languages.gaa=Ga
-languages.cai=Indianersprachen, Zentralamerika (Andere)
+languages.gaa=Ga-Sprache
languages.bi=Bislama
+languages.cai=Indianersprachen, Zentralamerika (Andere)
languages.bh=Biharisch
languages.bg=Bulgarisch
languages.be=Wei\u00dfrussisch
@@ -1409,10 +975,10 @@ languages.az=Aserbaidschanisch
languages.ay=Aymar\u00e1-Sprache
languages.av=Awarisch
languages.as=Assamesisch
-languages.dsb=Niedersorbisch
languages.ar=Arabisch
-languages.ilo=Iloko
+languages.dsb=Niedersorbisch
languages.elx=Elamisch
+languages.ilo=Ilokano-Sprache
languages.zh=Chinesisch
languages.an=Aragonesisch
languages.pra=Prakrit
@@ -1427,12 +993,12 @@ languages.aa=Afar
languages.yo=Joruba
languages.alg=Algonkin-Sprachen
languages.ale=Aleutisch
-languages.mkh=Mon-Khmer-Sprachen
+languages.mkh=Mon-Khmer-Sprachen (Andere)
languages.yi=Jiddisch
languages.dra=Drawidische Sprachen (Andere)
-languages.ber=Berbersprachen
+languages.ber=Berbersprachen (Andere)
languages.nds=Niederdeutsch
-languages.bem=Bemba
+languages.bem=Bemba-Sprache
languages.bej=Bedauye
languages.tpi=Neumelanesisch
variants.POSIX=Posix
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de_CH.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de_CH.properties
index 9d4aa99..9f3722b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de_CH.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_de_CH.properties
@@ -8,8 +8,8 @@
decimalSeparator=.
groupingSeparator='
currencyFormat=\u00a4 #,##0.00;\u00a4-#,##0.00
-territories.MH=Marshall-Inseln
territories.BD=Bangladesh
+territories.MH=Marshall-Inseln
territories.DJ=Djibouti
territories.SB=Salomon-Inseln
territories.BW=Botswana
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dv.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dv.properties
index bbe3351..25153e2 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dv.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dv.properties
@@ -8,7 +8,6 @@
zeroDigit=\u0660
percentFormat=#,##,##0%
currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
-currenciesDisplayName.MVR=MVR
currenciesSymbol.MVR=\u0783.
territories.MV=\u078b\u07a8\u0788\u07ac\u0780\u07a8 \u0783\u07a7\u0787\u07b0\u0796\u07ac
languages.dv=\u078b\u07a8\u0788\u07ac\u0780\u07a8\u0784\u07a6\u0790\u07b0
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dz.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dz.properties
index f9633a3..ba202d8 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dz.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_dz.properties
@@ -39,21 +39,21 @@ territories.CZ=\u0f45\u0f7a\u0f40\u0f0b\u0f62\u0f72\u0f0b\u0f54\u0f56\u0f0b\u0f6
territories.PA=\u0f54\u0f0b\u0f53\u0f0b\u0f58\u0f71
territories.SA=\u0f66\u0f60\u0f74\u0f0b\u0f51\u0f72\u0f0b\u0f68\u0f7a\u0f0b\u0f62\u0f0b\u0f66 \u0fa6\u0f72\u0f0b\u0f61
territories.CU=\u0f40\u0f72\u0f60\u0f74\u0f0b\u0f66\u0fa6
-territories.IT=\u0f68\u0f80\u0f4a\u0f0b\u0f63\u0f72
territories.FR=\u0f55\u0f62\u0f71\u0f53\u0f66\u0f72
+territories.IT=\u0f68\u0f80\u0f4a\u0f0b\u0f63\u0f72
territories.IS=\u0f68\u0f60\u0f72\u0f66\u0f72\u0f0b\u0f63\u0f7a\u0f53\u0f4c
territories.UZ=\u0f68\u0f74\u0f5b\u0f0b\u0f56\u0f7a\u0f0b\u0f40\u0f72\u0f66\u0f72\u0f0b\u0f4f\u0f71\u0f53
-territories.IR=\u0f68\u0f72\u0f0b\u0f62\u0f71\u0f53
territories.CN=\u0f62\u0f92\u0fb1\u0f0b\u0f58\u0f72
+territories.IR=\u0f68\u0f72\u0f0b\u0f62\u0f71\u0f53
territories.IQ=\u0f68\u0f72\u0f0b\u0f62\u0f40
territories.IN=\u0f62\u0f92\u0fb1\u0f0b\u0f42\u0f62
-territories.IL=\u0f68\u0f72\u0f5b\u0f0b\u0f62\u0f71\u0f7a\u0f63
territories.CH=\u0f66\u0f74\u0f60\u0f72\u0f4a\u0f0b\u0f5b\u0f62\u0f0b\u0f63\u0f7a\u0f53
+territories.IL=\u0f68\u0f72\u0f5b\u0f0b\u0f62\u0f71\u0f7a\u0f63
territories.US=\u0f61\u0f74\u0f0b\u0f53\u0f60\u0f72\u0f4a\u0f7a\u0f4a\u0f0b\u0f66\u0f72\u0f0b\u0f4a\u0f7a\u0f66\u0f72
territories.FI=\u0f55\u0f72\u0f53\u0f0b\u0f63\u0f7a\u0f53\u0f4c
territories.LK=\u0f64\u0fb2\u0f71\u0f80\u0f0b\u0f63\u0f44\u0f40
-territories.IE=\u0f68\u0f60\u0f72\u0f62\u0f72\u0f0b\u0f63\u0f7a\u0f53\u0f4c
territories.CA=\u0f40\u0f7a\u0f0b\u0f53\u0f0b\u0f4c
+territories.IE=\u0f68\u0f60\u0f72\u0f62\u0f72\u0f0b\u0f63\u0f7a\u0f53\u0f4c
territories.LB=\u0f63\u0f7a\u0f0b\u0f56\u0f71\u0f0b\u0f53\u0f71\u0f7c\u0f53
territories.LA=\u0f63\u0f0b\u0f60\u0f7c\u0f66\u0f74
territories.BT=\u0f60\u0f56\u0fb2\u0f74\u0f42
@@ -69,8 +69,8 @@ territories.BH=\u0f56\u0f67\u0f0b\u0f62\u0f7a\u0f53
territories.ZW=\u0f5b\u0f72\u0f58\u0f0b\u0f56\u0f56\u0f0b\u0f5d\u0f7a
territories.NO=\u0f53\u0f7c\u0f0b\u0f5d\u0f7a
territories.HK=\u0f67\u0f7c\u0f44\u0f0b\u0f40\u0f7c\u0f44
-territories.EG=\u0f68\u0f72\u0f0b\u0f47\u0f72\u0f54\u0f4a
territories.BE=\u0f56\u0f7a\u0f63\u0f0b\u0f47\u0f72\u0f61\u0f58
+territories.EG=\u0f68\u0f72\u0f0b\u0f47\u0f72\u0f54\u0f4a
territories.NL=\u0f53\u0f7a\u0f0b\u0f51\u0f62\u0f0b\u0f63\u0f7a\u0f53\u0f4c\u0f66\u0f72
territories.BD=\u0f56\u0f44\u0f92\u0f0b\u0f63\u0f0b\u0f51\u0f7a\u0f64
territories.KH=\u0f40\u0f58\u0f0b\u0f56\u0f7c\u0f0b\u0f4c\u0f72\u0f0b\u0f61
@@ -106,8 +106,8 @@ languages.mn=\u0f66\u0f7c\u0f42\u0f0b\u0f54\u0f7c\u0f60\u0f72\u0f0b\u0f41
languages.ml=\u0f58\u0f0b\u0f63\u0f0b\u0f61\u0f0b\u0f63\u0f58
languages.de=\u0f47\u0f71\u0f62\u0f0b\u0f58\u0f71\u0f53
languages.pi=\u0f54\u0f0b\u0f63\u0f72
-languages.da=\u0f4c\u0f7a\u0f0b\u0f53\u0f72\u0f64
languages.art=\u0f56\u0f5f\u0f7c\u0f0b\u0f56\u0f5f\u0f7c\u0f5d (\u0f42\u0f5e\u0f53)
+languages.da=\u0f4c\u0f7a\u0f0b\u0f53\u0f72\u0f64
languages.si=\u0f66\u0f72\u0f53\u0f0b\u0f67\u0f0b\u0f63\u0f72\u0f66\u0f72
languages.ga=\u0f68\u0f60\u0f72\u0f0b\u0f62\u0f72\u0f64
languages.mni=\u0f58\u0f0b\u0f53\u0f72\u0f0b\u0f54\u0f74\u0f0b\u0f62\u0f72
@@ -116,25 +116,25 @@ languages.pa=\u0f54\u0f71\u0f53\u0f0b\u0f47\u0f0b\u0f56\u0f72
languages.mnc=\u0f58\u0f71\u0f53\u0f0b\u0f45\u0f74
languages.sa=\u0f66\u0f7e\u0f66\u0f90\u0fb2\u0f80\u0f4f
languages.cs=\u0f45\u0f7a\u0f40
-languages.it=\u0f68\u0f72\u0f0b\u0f4a\u0f0b\u0f63\u0f72\u0f0b\u0f62\u0f53
languages.fr=\u0f55\u0f7a\u0f0b\u0f62\u0f7a\u0f53\u0f46\u0f7a
+languages.it=\u0f68\u0f72\u0f0b\u0f4a\u0f0b\u0f63\u0f72\u0f0b\u0f62\u0f53
languages.him=\u0f67\u0f72\u0f0b\u0f58\u0f0b\u0f45\u0f0b\u0f63\u0f72
languages.ru=\u0f62\u0f0b\u0f64\u0f72\u0f0b\u0f61\u0f53
languages.or=\u0f68\u0f7c\u0f0b\u0f62\u0f72\u0f0b\u0f61
languages.lo=\u0f63\u0f60\u0f7c
languages.ur=\u0f68\u0f74\u0f62\u0f0b\u0f51\u0f74
languages.fa=\u0f54\u0f62\u0f0b\u0f64\u0f72\u0f0b\u0f61\u0f53
-languages.grc=\u0f42\u0f72\u0f62\u0f72\u0f40, \u0f66\u0f94\u0f0b\u0f51\u0f74\u0f66\u0f0b\u0f40\u0fb1\u0f72 (\u0f21\u0f24\u0f25\u0f23)
languages.es=\u0f66\u0f72\u0f54\u0f7a\u0f0b\u0f53\u0f72\u0f64
+languages.grc=\u0f42\u0f72\u0f62\u0f72\u0f40, \u0f66\u0f94\u0f0b\u0f51\u0f74\u0f66\u0f0b\u0f40\u0fb1\u0f72 (\u0f21\u0f24\u0f25\u0f23)
languages.bo=\u0f56\u0f7c\u0f51\u0f0b\u0f41
languages.bn=\u0f56\u0f7a\u0f44\u0f92\u0f0b\u0f63\u0f72
languages.ks=\u0f40\u0f7a\u0f64\u0f0b\u0f58\u0f72\u0f0b\u0f62\u0f72
languages.en=\u0f68\u0f72\u0f44\u0f0b\u0f63\u0f72\u0f64
-languages.el=\u0f42\u0f72\u0f62\u0f72\u0f40
languages.inc=\u0f68\u0f72\u0f53\u0f0b\u0f4c\u0f72\u0f40 (\u0f42\u0f5e\u0f53)
+languages.el=\u0f42\u0f72\u0f62\u0f72\u0f40
languages.ko=\u0f40\u0f7c\u0f0b\u0f62\u0f72\u0f61\u0f53
-languages.kn=\u0f40\u0f0b\u0f53\u0f0b\u0f4c
languages.bh=\u0f56\u0f72\u0f0b\u0f67\u0f0b\u0f63\u0f72
+languages.kn=\u0f40\u0f0b\u0f53\u0f0b\u0f4c
languages.no=\u0f53\u0f7c\u0f62\u0f0b\u0f5d\u0f72\u0f0b\u0f47\u0f72\u0f0b\u0f61\u0f53
languages.km=\u0f41\u0f7a\u0f0b\u0f58\u0f62
languages.hi=\u0f67\u0f72\u0f53\u0f0b\u0f51\u0f72
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el.properties
index 80dfca1..f8b841a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el.properties
@@ -5,1057 +5,251 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
-localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0399\u03bf\u03c1\u03b4\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.BOV=Mvdol \u0392\u03bf\u03bb\u03b9\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.XAU=\u03a7\u03c1\u03c5\u03c3\u03cc\u03c2
-currenciesDisplayName.FOK=Kronur \u039d\u03ae\u03c3\u03c9\u03bd Faeroe
-currenciesDisplayName.LBP=\u039b\u03af\u03c1\u03b1 \u039b\u03b9\u03b2\u03ac\u03bd\u03bf\u03c5
-currenciesDisplayName.EUR=\u0395\u03c5\u03c1\u03ce
-currenciesDisplayName.VND=Dong \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.TZS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u03a4\u03b1\u03bd\u03b6\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.BOP=\u03a0\u03ad\u03c3\u03bf \u0392\u03bf\u03bb\u03b9\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.KHR=Riel \u039a\u03b1\u03bc\u03c0\u03cc\u03c4\u03b6\u03b7\u03c2
-currenciesDisplayName.XAM=\u0391\u03c3\u03b9\u03b1\u03c4\u03b9\u03ba\u03ae \u039d\u03bf\u03bc\u03b9\u03c3\u03bc\u03b1\u03c4\u03b9\u03ba\u03ae \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
-currenciesDisplayName.KHO=\u03a0\u03b1\u03bb\u03b1\u03b9\u03cc Riel \u039a\u03b1\u03bc\u03c0\u03cc\u03c4\u03b6\u03b7\u03c2
-currenciesDisplayName.ZMP=\u039b\u03af\u03c1\u03b1 \u0396\u03ac\u03bc\u03c0\u03b9\u03b1\u03c2
-currenciesDisplayName.AUP=\u039b\u03af\u03c1\u03b1 \u0391\u03c5\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.XAF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf BEAC CFA
-currenciesDisplayName.MTP=\u039b\u03af\u03c1\u03b1 \u039c\u03ac\u03bb\u03c4\u03b1\u03c2
-currenciesDisplayName.GHR=\u0391\u03bd\u03b1\u03c4\u03b9\u03bc\u03b7\u03bc\u03ad\u03bd\u03bf Cedi \u0393\u03ba\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.ZMK=Kwacha \u0396\u03ac\u03bc\u03c0\u03b9\u03b1\u03c2
-currenciesDisplayName.XAD=\u039c\u03bf\u03bd\u03ac\u03b4\u03b1 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u0391\u03c3\u03b9\u03b1\u03c4\u03b9\u03ba\u03bf\u03cd \u0394\u03b7\u03bd\u03b1\u03c1\u03af\u03bf\u03c5
-currenciesDisplayName.GHP=\u039b\u03af\u03c1\u03b1 \u0393\u03ba\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.GHO=\u03a0\u03b1\u03bb\u03b1\u03b9\u03cc Cedi \u0393\u03ba\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.MTL=\u039b\u03b9\u03c1\u03ad\u03c4\u03b1 \u039c\u03ac\u03bb\u03c4\u03b1\u03c2
-currenciesDisplayName.AUD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0391\u03c5\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.USS=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0397\u03a0\u0391 (\u038a\u03b4\u03b9\u03b1 \u0397\u03bc\u03ad\u03c1\u03b1)
-currenciesDisplayName.ITL=\u039b\u03b9\u03c1\u03ad\u03c4\u03b1 \u0399\u03c4\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.USN=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0397\u03a0\u0391 (\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03b7 \u0397\u03bc\u03ad\u03c1\u03b1)
-currenciesDisplayName.GHC=Cedi \u0393\u03ba\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.SGD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a3\u03b9\u03b3\u03ba\u03b1\u03c0\u03bf\u03cd\u03c1\u03b7\u03c2
-currenciesDisplayName.PAB=\u039c\u03c0\u03b1\u03bb\u03bc\u03c0\u03cc\u03b1 \u03a0\u03b1\u03bd\u03b1\u03bc\u03ac
-currenciesDisplayName.LAK=Kip \u039b\u03ac\u03bf\u03c2
-currenciesDisplayName.CHF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0395\u03bb\u03b2\u03b5\u03c4\u03af\u03b1\u03c2
-currenciesDisplayName.ATS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u0391\u03c5\u03c3\u03c4\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.USD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0397\u03a0\u0391
-currenciesDisplayName.ETD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0391\u03b9\u03b8\u03b9\u03bf\u03c0\u03af\u03b1\u03c2
-currenciesDisplayName.BND=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf Brunei
-currenciesDisplayName.JMP=\u039b\u03af\u03c1\u03b1 \u03a4\u03b6\u03b1\u03bc\u03ac\u03b9\u03ba\u03b1\u03c2
-currenciesDisplayName.ETB=Birr \u0391\u03b9\u03b8\u03b9\u03bf\u03c0\u03af\u03b1\u03c2
-currenciesDisplayName.DZG=Germinal \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0391\u03bb\u03b3\u03b5\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.DZF=\u039d\u03ad\u03bf \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0391\u03bb\u03b3\u03b5\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.DZD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0391\u03bb\u03b3\u03b5\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.PYG=\u0393\u03ba\u03bf\u03c5\u03b1\u03c1\u03b1\u03bd\u03af \u03a0\u03b1\u03c1\u03b1\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2
-currenciesDisplayName.LYP=\u039b\u03af\u03c1\u03b1 \u039b\u03b9\u03b2\u03cd\u03b7\u03c2
-currenciesDisplayName.JMD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a4\u03b6\u03b1\u03bc\u03ac\u03b9\u03ba\u03b1\u03c2
-currenciesDisplayName.ISK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u0399\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.ESP=\u03a0\u03b5\u03c3\u03ad\u03c4\u03b1 \u0399\u03c3\u03c0\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.BMP=\u039b\u03af\u03c1\u03b1 \u0392\u03b5\u03c1\u03bc\u03bf\u03cd\u03b4\u03c9\u03bd
-currenciesDisplayName.LYD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u039b\u03b9\u03b2\u03cd\u03b7\u03c2
-currenciesDisplayName.LYB=\u039b\u03af\u03c1\u03b1 \u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ae\u03c2 \u03a3\u03c4\u03c1\u03b1\u03c4\u03b9\u03c9\u03c4\u03b9\u03ba\u03ae\u03c2 \u0395\u03be\u03bf\u03c5\u03c3\u03af\u03b1\u03c2 \u039b\u03b9\u03b2\u03cd\u03b7\u03c2
-currenciesDisplayName.BMD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0392\u03b5\u03c1\u03bc\u03bf\u03cd\u03b4\u03c9\u03bd
-currenciesDisplayName.NLG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.MRO=Ouguiya \u039c\u03b1\u03c5\u03c1\u03b9\u03c4\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.IRR=Rial \u0399\u03c1\u03ac\u03ba
-currenciesDisplayName.SEK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a3\u03bf\u03c5\u03b7\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.ERN=Eritrean Nakfa
-currenciesDisplayName.KES=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u039a\u03ad\u03bd\u03c5\u03b1\u03c2
-currenciesDisplayName.CFF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03ae\u03c2 \u0391\u03c6\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ae\u03c2 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1\u03c2 CFA
-currenciesDisplayName.ARS=\u03a0\u03ad\u03c3\u03bf \u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae\u03c2
-currenciesDisplayName.ARP=\u03a0\u03ad\u03c3\u03bf \u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae\u03c2 (1983-1985)
-currenciesDisplayName.ARM=\u0395\u03b8\u03bd\u03b9\u03ba\u03cc \u039d\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1 \u03a0\u03ad\u03c3\u03bf \u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae\u03c2
-currenciesDisplayName.TWD=\u039d\u03ad\u03bf \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a4\u03b1\u03ca\u03b2\u03ac\u03bd
-currenciesDisplayName.SDP=\u039b\u03af\u03c1\u03b1 \u03a3\u03bf\u03c5\u03b4\u03ac\u03bd
-currenciesDisplayName.GEL=Lari \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1\u03c2
-currenciesDisplayName.GEK=Kupon Larit \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1\u03c2
-currenciesDisplayName.MQF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039c\u03b1\u03c1\u03c4\u03b9\u03bd\u03af\u03ba\u03b1\u03c2
-currenciesDisplayName.FKP=\u039b\u03af\u03c1\u03b1 \u039d\u03b7\u03c3\u03b9\u03ce\u03bd \u03a6\u03ce\u03bb\u03ba\u03bb\u03b1\u03bd\u03c4
-currenciesDisplayName.ARA=Austral \u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae\u03c2
-currenciesDisplayName.SDD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u03a3\u03bf\u03c5\u03b4\u03ac\u03bd
-currenciesDisplayName.IQD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0399\u03c1\u03ac\u03ba
-currenciesDisplayName.TVD=Tuvalu \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf
-currenciesDisplayName.SCR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u03a3\u03b5\u03cb\u03c7\u03ad\u03bb\u03b5\u03c2
-currenciesDisplayName.LVR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u039b\u03b5\u03c4\u03bf\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.FJP=\u039b\u03af\u03c1\u03b1 \u03a6\u03af\u03c4\u03b6\u03b9
-currenciesDisplayName.LVL=Lats \u039b\u03b5\u03c4\u03bf\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.CDL=Congolese \u0396\u03b1\u0390\u03c1
-currenciesDisplayName.CDG=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1\u03c2 \u039a\u03bf\u03bd\u03b3\u03ba\u03cc
-currenciesDisplayName.CDF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Congolais \u039a\u03bf\u03bd\u03b3\u03ba\u03cc
-currenciesDisplayName.FJD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a6\u03af\u03c4\u03b6\u03b9
-currenciesDisplayName.NIO=\u03a7\u03c1\u03c5\u03c3\u03ae \u039a\u03cc\u03c1\u03b4\u03bf\u03b2\u03b1 \u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1\u03c2
-currenciesDisplayName.MOP=Pataca \u039c\u03b1\u03ba\u03ac\u03bf
-currenciesDisplayName.NIG=\u03a7\u03c1\u03c5\u03c3\u03ae \u039a\u03cc\u03c1\u03b4\u03bf\u03b2\u03b1 \u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1\u03c2
-currenciesDisplayName.NIC=\u039a\u03cc\u03c1\u03b4\u03bf\u03b2\u03b1 \u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1\u03c2
-currenciesDisplayName.XTR=\u039c\u03b5\u03c4\u03b1\u03b2\u03b9\u03b2\u03ac\u03c3\u03b9\u03bc\u03bf \u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 COMECON
-currenciesDisplayName.FIN=\u039c\u03ac\u03c1\u03ba\u03bf \u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2 (1860-1962)
-currenciesDisplayName.FIM=\u039c\u03ac\u03c1\u03ba\u03bf \u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.SBD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ae\u03c3\u03c9\u03bd \u03a3\u03bf\u03bb\u03bf\u03bc\u03ce\u03bd\u03c4\u03bf\u03c2
-currenciesDisplayName.LUF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039b\u03bf\u03c5\u03be\u03b5\u03bc\u03b2\u03bf\u03cd\u03c1\u03b3\u03bf\u03c5
-currenciesDisplayName.TTO=\u03a0\u03b1\u03bb\u03b1\u03b9\u03cc \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a4\u03c1\u03b9\u03bd\u03b9\u03b4\u03ac\u03b4 \u03ba\u03b1\u03b9 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf
-currenciesDisplayName.AOS=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2
-currenciesDisplayName.AOR=Kwanza Reajustado \u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1995-1999)
-currenciesDisplayName.MNT=Tugrik \u039c\u03bf\u03b3\u03b3\u03bf\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.HUF=\u03a6\u03b9\u03bf\u03c1\u03af\u03bd\u03b9 \u039f\u03c5\u03b3\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.BIF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Burundi
-currenciesDisplayName.AON=\u039d\u03ad\u03b1 Kwanza \u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1990-2000)
-currenciesDisplayName.AOK=Kwanza \u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1977-1990)
-currenciesDisplayName.TTD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a4\u03c1\u03b9\u03bd\u03b9\u03b4\u03ac\u03b4 \u03ba\u03b1\u03b9 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf
-currenciesDisplayName.SZL=Lilangeni \u0396\u03bf\u03c5\u03b1\u03b6\u03b9\u03bb\u03ac\u03bd\u03b4\u03b7
-currenciesDisplayName.NHF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039d\u03ad\u03c9\u03bd \u0395\u03b2\u03c1\u03af\u03b4\u03c9\u03bd CFP
-currenciesDisplayName.GBP=\u039b\u03af\u03c1\u03b1 \u03a3\u03c4\u03b5\u03c1\u03bb\u03af\u03bd\u03b1 \u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.LTT=Talonas \u039b\u03b9\u03b8\u03bf\u03c5\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.INR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u0399\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.PTE=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.AOA=Kwanza \u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2
-currenciesDisplayName.PTC=Conto \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.LTL=Lita \u039b\u03b9\u03b8\u03bf\u03c5\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.KZT=Tenge \u039a\u03b1\u03b6\u03b1\u03ba\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.KZR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u039a\u03b1\u03b6\u03b1\u03ba\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.VGD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ce\u03bd \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03c9\u03bd \u039d\u03ae\u03c3\u03c9\u03bd
-currenciesDisplayName.NGP=\u039b\u03af\u03c1\u03b1 \u039d\u03b9\u03b3\u03b7\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.MMX=\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03b5 \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03b1, \u039c\u03b9\u03b1\u03bd\u03bc\u03ac\u03c1
-currenciesDisplayName.NGN=Naira \u039d\u03b9\u03b3\u03b7\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.HTG=Gourde \u0391\u03ca\u03c4\u03ae\u03c2
-currenciesDisplayName.SYP=\u039b\u03af\u03c1\u03b1 \u03a3\u03c5\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.PSP=\u039b\u03af\u03c1\u03b1 \u03a0\u03b1\u03bb\u03b1\u03b9\u03c3\u03c4\u03af\u03bd\u03b7\u03c2
-currenciesDisplayName.BHD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf Bahraini
-currenciesDisplayName.MMK=Kyat \u039c\u03b9\u03b1\u03bd\u03bc\u03ac\u03c1
-currenciesDisplayName.ANG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ce\u03bd \u0391\u03bd\u03c4\u03b9\u03bb\u03bb\u03ce\u03bd
-currenciesDisplayName.CZK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a4\u03c3\u03ad\u03c7\u03b9\u03ba\u03b7\u03c2 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1\u03c2
-currenciesDisplayName.IMP=\u039b\u03af\u03c1\u03b1 \u03a3\u03c4\u03b5\u03c1\u03bb\u03af\u03bd\u03b1 \u039d\u03ae\u03c3\u03bf\u03c5 Man
-currenciesDisplayName.BGX=\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03b5 \u039b\u03b5\u03b2
-currenciesDisplayName.GAF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03ba\u03b1\u03bc\u03c0\u03cc\u03bd CFA
-currenciesDisplayName.BGO=\u039b\u03b5\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2 (1879-1952)
-currenciesDisplayName.BGN=\u039d\u03ad\u03bf \u039b\u03b5\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.BGM=\u03a3\u03bf\u03c3\u03b9\u03b1\u03bb\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u039b\u03b5\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.CAD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039a\u03b1\u03bd\u03b1\u03b4\u03ac
-currenciesDisplayName.BGL=\u039c\u03b5\u03c4\u03b1\u03bb\u03bb\u03b9\u03ba\u03cc \u039b\u03b5\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.TRL=\u039b\u03af\u03c1\u03b1 \u03a4\u03bf\u03c5\u03c1\u03ba\u03af\u03b1\u03c2
-currenciesDisplayName.KYD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ae\u03c3\u03c9\u03bd \u039a\u03ac\u03b9\u03bc\u03b1\u03bd
-currenciesDisplayName.CYP=\u039b\u03af\u03c1\u03b1 \u039a\u03cd\u03c0\u03c1\u03bf\u03c5
-currenciesDisplayName.ILS=\u039d\u03ad\u03bf Sheqel \u0399\u03c3\u03c1\u03b1\u03ae\u03bb
-currenciesDisplayName.GYD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.AMD=Dram \u0391\u03c1\u03bc\u03b5\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.ILP=\u039b\u03af\u03c1\u03b1 \u0399\u03c3\u03c1\u03b1\u03ae\u03bb
-currenciesDisplayName.MLF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039c\u03b1\u03bb\u03af
-currenciesDisplayName.ILL=Sheqel \u0399\u03c3\u03c1\u03b1\u03ae\u03bb
-currenciesDisplayName.VEB=\u039c\u03c0\u03bf\u03bb\u03b9\u03b2\u03ac\u03bb \u0392\u03b5\u03bd\u03b5\u03b6\u03bf\u03c5\u03ad\u03bb\u03b1\u03c2
-currenciesDisplayName.ALX=\u0391\u03bb\u03b2\u03b1\u03bd\u03b9\u03ba\u03ac \u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03b5 \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03b1
-currenciesDisplayName.LRD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039b\u03b9\u03b2\u03b5\u03c1\u03af\u03b1\u03c2
-currenciesDisplayName.ALV=\u039b\u03b5\u03ba Valute \u0391\u03bb\u03b2\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.HRK=Kuna \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf
-currenciesDisplayName.REF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Reunion
-currenciesDisplayName.HRD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u039a\u03c1\u03bf\u03b1\u03c4\u03af\u03b1\u03c2
-currenciesDisplayName.ALL=\u039b\u03b5\u03ba \u0391\u03bb\u03b2\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.JEP=\u039b\u03af\u03c1\u03b1 \u03a3\u03c4\u03b5\u03c1\u03bb\u03af\u03bd\u03b1 \u03a5\u03b5\u03c1\u03c3\u03ad\u03b7\u03c2
-currenciesDisplayName.ALK=\u039b\u03b5\u03ba \u0391\u03bb\u03b2\u03b1\u03bd\u03af\u03b1\u03c2 (1946-1961)
-currenciesDisplayName.MKN=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u03a0.\u0393.\u0394.\u039c. (1992-1993)
-currenciesDisplayName.VDP=Viet Minh Piastre Dong Viet \u0392\u03bf\u03c1\u03b5\u03af\u03bf\u03c5 \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.VDN=\u039d\u03ad\u03bf Dong \u0392\u03bf\u03c1\u03b5\u03af\u03bf\u03c5 \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.MKD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u03a0.\u0393.\u0394.\u039c.
-currenciesDisplayName.VDD=Piastre Dong Viet \u0392\u03bf\u03c1\u03b5\u03af\u03bf\u03c5 \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.TPP=Pataca \u03a4\u03b9\u03bc\u03cc\u03c1
-currenciesDisplayName.XPF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf CFP
-currenciesDisplayName.BEL=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0392\u03b5\u03bb\u03b3\u03af\u03bf\u03c5 (\u03bf\u03b9\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03cc)
-currenciesDisplayName.GWP=\u03a0\u03ad\u03c3\u03bf Guinea-Bissau
-currenciesDisplayName.KWD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u039a\u03bf\u03c5\u03b2\u03ad\u03b9\u03c4
-currenciesDisplayName.GWM=\u0393\u03ba\u03b9\u03bd\u03ad\u03b1 Mil Reis \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.BEF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0392\u03b5\u03bb\u03b3\u03af\u03bf\u03c5
-currenciesDisplayName.TPE=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a4\u03b9\u03bc\u03cc\u03c1
-currenciesDisplayName.BEC=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0392\u03b5\u03bb\u03b3\u03af\u03bf\u03c5 (\u03bc\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c8\u03b9\u03bc\u03bf)
-currenciesDisplayName.GWE=\u0393\u03ba\u03b9\u03bd\u03ad\u03b1 \u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.SVC=Colon \u0395\u03bb \u03a3\u03b1\u03bb\u03b2\u03b1\u03b4\u03cc\u03c1
-currenciesDisplayName.CWG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 Curacao
-currenciesDisplayName.BDT=\u03a4\u03ac\u03ba\u03b1 \u039c\u03c0\u03b1\u03b3\u03ba\u03bb\u03b1\u03bd\u03c4\u03ad\u03c2
-currenciesDisplayName.TOS=\u039b\u03af\u03c1\u03b1 \u03a3\u03c4\u03b5\u03c1\u03bb\u03af\u03bd\u03b1 \u03a4\u03cc\u03bd\u03b3\u03ba\u03b1
-currenciesDisplayName.XOF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf BCEAO CFA
-currenciesDisplayName.SUR=\u03a3\u03bf\u03b2\u03b9\u03b5\u03c4\u03b9\u03ba\u03cc \u03a1\u03bf\u03cd\u03b2\u03bb\u03b9
-currenciesDisplayName.SUN=\u039d\u03ad\u03bf \u03a3\u03bf\u03b2\u03b9\u03b5\u03c4\u03b9\u03ba\u03cc \u03a1\u03bf\u03cd\u03b2\u03bb\u03b9
-currenciesDisplayName.NCF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Germinal \u039d\u03ad\u03b1\u03c2 \u039a\u03b1\u03bb\u03b7\u03b4\u03bf\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.CVE=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf\u03c5 \u0391\u03ba\u03c1\u03c9\u03c4\u03b7\u03c1\u03af\u03bf\u03c5
-currenciesDisplayName.XNF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ce\u03bd \u0391\u03bd\u03c4\u03b9\u03bb\u03bb\u03ce\u03bd CFA
-currenciesDisplayName.ZAR=\u03a1\u03b1\u03bd\u03c4 \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae\u03c2
-currenciesDisplayName.DOP=\u03a0\u03ad\u03c3\u03bf \u0394\u03bf\u03bc\u03af\u03bd\u03b9\u03ba\u03bf\u03c5
-currenciesDisplayName.CUX=\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u039a\u03bf\u03cd\u03b2\u03b1\u03c2
-currenciesDisplayName.ZAP=\u039b\u03af\u03c1\u03b1 \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae\u03c2
-currenciesDisplayName.ZAL=\u03a1\u03b1\u03bd\u03c4 \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae\u03c2 (\u03bf\u03b9\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03cc)
-currenciesDisplayName.TND=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u03a4\u03c5\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.CUP=\u03a0\u03ad\u03c3\u03bf \u039a\u03bf\u03cd\u03b2\u03b1\u03c2
-currenciesDisplayName.GUF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Guiana \u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ae\u03c2 \u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1\u03c2
-currenciesDisplayName.UGX=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u039f\u03c5\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1\u03c2
-currenciesDisplayName.LNR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 Ceylon
-currenciesDisplayName.AIF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Affars \u03ba\u03b1\u03b9 Issas
-currenciesDisplayName.VAL=\u039b\u03b9\u03c1\u03ad\u03c4\u03b1 \u0392\u03b1\u03c4\u03b9\u03ba\u03b1\u03bd\u03bf\u03cd
-currenciesDisplayName.UGS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u039f\u03c5\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1\u03c2 (1966-1987)
-currenciesDisplayName.MHD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ae\u03c3\u03c9\u03bd Marshall
-currenciesDisplayName.NZP=\u039b\u03af\u03c1\u03b1 \u039d\u03ad\u03b1\u03c2 \u0396\u03b7\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.WST=Tala \u0394\u03c5\u03c4\u03b9\u03ba\u03ae\u03c2 \u03a3\u03b1\u03bc\u03cc\u03b1
-currenciesDisplayName.WSP=\u039b\u03af\u03c1\u03b1 \u0394\u03c5\u03c4\u03b9\u03ba\u03ae\u03c2 \u03a3\u03b1\u03bc\u03cc\u03b1
-currenciesDisplayName.XMF=\u039d\u03ad\u03bf \u039c\u03b7\u03c4\u03c1\u03bf\u03c0\u03bf\u03bb\u03b9\u03c4\u03b9\u03ba\u03cc \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.TMM=\u039c\u03b1\u03bd\u03ac\u03c4 \u03a4\u03bf\u03c5\u03c1\u03ba\u03bc\u03b5\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.GTQ=Quetzal \u0393\u03bf\u03c5\u03b1\u03c4\u03b5\u03bc\u03ac\u03bb\u03b1
-currenciesDisplayName.NZD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ad\u03b1\u03c2 \u0396\u03b7\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.SSP=\u039b\u03af\u03c1\u03b1 \u03a3\u03ba\u03c9\u03c4\u03af\u03b1\u03c2
-currenciesDisplayName.BBD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03ac\u03bd\u03c4\u03bf\u03c2
-currenciesDisplayName.NAD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03b1\u03bc\u03af\u03bc\u03c0\u03b9\u03b1
-currenciesDisplayName.MGF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039c\u03b1\u03b4\u03b1\u03b3\u03b1\u03c3\u03ba\u03ac\u03c1\u03b7\u03c2
-currenciesDisplayName.MGA=Ariary \u039c\u03b1\u03b4\u03b1\u03b3\u03b1\u03c3\u03ba\u03ac\u03c1\u03b7\u03c2
-currenciesDisplayName.EGP=\u039b\u03af\u03c1\u03b1 \u0391\u03b9\u03b3\u03cd\u03c0\u03c4\u03bf\u03c5
-currenciesDisplayName.BZH=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ae\u03c2 \u039f\u03bd\u03b4\u03bf\u03cd\u03c1\u03b1\u03c2
-currenciesDisplayName.PLZ=\u0396\u03bb\u03cc\u03c4\u03c5 \u03a0\u03bf\u03bb\u03c9\u03bd\u03af\u03b1\u03c2 (1950-1995)
-currenciesDisplayName.BAN=\u039d\u03ad\u03bf \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0392\u03bf\u03c3\u03bd\u03af\u03b1\u03c2-\u0395\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7\u03c2
-currenciesDisplayName.PLX=\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03b5 \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03b1, \u03a0\u03bf\u03bb\u03c9\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.BAM=\u039c\u03ac\u03c1\u03ba\u03bf \u0392\u03bf\u03c3\u03bd\u03af\u03b1\u03c2-\u0395\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7\u03c2
-currenciesDisplayName.BZD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf Belize
-currenciesDisplayName.BAD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0392\u03bf\u03c3\u03bd\u03af\u03b1\u03c2-\u0395\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7\u03c2
-currenciesDisplayName.PLN=\u0396\u03bb\u03cc\u03c4\u03c5 \u03a0\u03bf\u03bb\u03c9\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.YER=Rial \u03a5\u03b5\u03bc\u03ad\u03bd\u03b7\u03c2
-currenciesDisplayName.SRG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u03a3\u03bf\u03c5\u03c1\u03b9\u03bd\u03ac\u03bc
-currenciesDisplayName.CSK=\u03a3\u03ba\u03bb\u03b7\u03c1\u03ae \u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a4\u03c3\u03b5\u03c7\u03bf\u03c3\u03bb\u03bf\u03b2\u03b1\u03ba\u03af\u03b1\u03c2
-currenciesDisplayName.KRW=Won \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u039a\u03bf\u03c1\u03ad\u03b1\u03c2
-currenciesDisplayName.BYR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.YEI=Imadi Riyal \u03a5\u03b5\u03bc\u03ad\u03bd\u03b7\u03c2
-currenciesDisplayName.BYL=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03af\u03b1\u03c2 (1992-1994)
-currenciesDisplayName.CSC=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a4\u03c3\u03b5\u03c7\u03bf\u03c3\u03bb\u03bf\u03b2\u03b1\u03ba\u03af\u03b1\u03c2
-currenciesDisplayName.KRO=\u03a0\u03b1\u03bb\u03b1\u03b9\u03cc Won \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u039a\u03bf\u03c1\u03ad\u03b1\u03c2
-currenciesDisplayName.KRH=Hwan \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u039a\u03bf\u03c1\u03ad\u03b1\u03c2
-currenciesDisplayName.BYB=\u039d\u03ad\u03bf \u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03af\u03b1\u03c2 (1994-1999)
-currenciesDisplayName.SQS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u03a3\u03bf\u03bc\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.GRN=\u039d\u03ad\u03b1 \u0394\u03c1\u03b1\u03c7\u03bc\u03ae \u0395\u03bb\u03bb\u03ac\u03b4\u03b1\u03c2
-currenciesDisplayName.PKR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u03a0\u03b1\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.ZWD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0396\u03b9\u03bc\u03c0\u03ac\u03bc\u03c0\u03bf\u03c5\u03b5
-currenciesDisplayName.LKR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u03a3\u03c1\u03b9 \u039b\u03ac\u03bd\u03ba\u03b1
-currenciesDisplayName.GRD=\u0394\u03c1\u03b1\u03c7\u03bc\u03ae \u0395\u03bb\u03bb\u03ac\u03b4\u03b1\u03c2
-currenciesDisplayName.IEP=\u039b\u03af\u03c1\u03b1 \u0399\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.YDD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u03a5\u03b5\u03bc\u03ad\u03bd\u03b7\u03c2
-currenciesDisplayName.RWF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u03a1\u03bf\u03c5\u03ac\u03bd\u03c4\u03b1\u03c2
-currenciesDisplayName.CRC=Colon \u039a\u03cc\u03c3\u03c4\u03b1 \u03a1\u03af\u03ba\u03b1
-currenciesDisplayName.TJS=Somoni \u03a4\u03b1\u03c4\u03b6\u03b9\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.TJR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u03a4\u03b1\u03c4\u03b6\u03b9\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.EEK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u0395\u03c3\u03b8\u03bf\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.GQP=\u03a0\u03b5\u03c3\u03ad\u03c4\u03b1 Guineana \u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03ae\u03c2 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
-currenciesDisplayName.MDR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 Cupon \u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.HKD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a7\u03bf\u03bd\u03b3\u03ba \u039a\u03bf\u03bd\u03b3\u03ba
-currenciesDisplayName.DKK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u0394\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.MDL=\u039b\u03ad\u03b9 \u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.GQF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03ae\u03c2 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
-currenciesDisplayName.GQE=Ekwele Guineana \u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03ae\u03c2 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
-currenciesDisplayName.IDR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.AED=\u039d\u03c4\u03b9\u03c1\u03ac\u03bc \u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd \u0391\u03c1\u03b1\u03b2\u03b9\u03ba\u03ce\u03bd \u0395\u03bc\u03b9\u03c1\u03ac\u03c4\u03c9\u03bd
-currenciesDisplayName.KPW=Won \u0392\u03cc\u03c1\u03b5\u03b9\u03b1\u03c2 \u039a\u03bf\u03c1\u03ad\u03b1\u03c2
-currenciesDisplayName.IDN=\u039d\u03ad\u03b1 \u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.BWP=Pula \u039c\u03c0\u03bf\u03c4\u03c3\u03bf\u03c5\u03ac\u03bd\u03b1
-currenciesDisplayName.MDC=\u039b\u03ad\u03b9 Cupon \u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.IDJ=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u0399\u03ac\u03b2\u03b1\u03c2 \u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.KPP=Won \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1\u03c2 \u0392\u03cc\u03c1\u03b5\u03b9\u03b1\u03c2 \u039a\u03bf\u03c1\u03ad\u03b1\u03c2
-currenciesDisplayName.IDG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 Nica \u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.XID=\u0399\u03c3\u03bb\u03b1\u03bc\u03b9\u03ba\u03cc \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf
-currenciesDisplayName.SOS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u03a3\u03bf\u03bc\u03b1\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.ADP=\u03a0\u03b5\u03c3\u03ad\u03c4\u03b1 \u0391\u03bd\u03b4\u03cc\u03c1\u03b1\u03c2
-currenciesDisplayName.RUR=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u03a1\u03c9\u03c3\u03af\u03b1\u03c2 (1991-1998)
-currenciesDisplayName.GPF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03bf\u03c5\u03b1\u03b4\u03b5\u03bb\u03bf\u03cd\u03c0\u03b7\u03c2
-currenciesDisplayName.DJF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u03a4\u03b6\u03b9\u03bc\u03c0\u03bf\u03c5\u03c4\u03af
-currenciesDisplayName.ADD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0391\u03bd\u03b4\u03cc\u03c1\u03b1\u03c2
-currenciesDisplayName.MCG=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Germinal \u039c\u03bf\u03bd\u03b1\u03ba\u03cc
-currenciesDisplayName.MCF=\u039d\u03ad\u03bf \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039c\u03bf\u03bd\u03b1\u03ba\u03cc
-currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) \u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03bf\u03cd
-currenciesDisplayName.ECS=Sucre \u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03bf\u03cd
-currenciesDisplayName.LIF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039b\u03b9\u03c7\u03c4\u03b5\u03bd\u03c3\u03c4\u03ac\u03b9\u03bd
-currenciesDisplayName.RUB=\u03a1\u03bf\u03cd\u03b2\u03bb\u03b9 \u03a1\u03c9\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.PHP=\u03a0\u03ad\u03c3\u03bf \u03a6\u03b9\u03bb\u03b9\u03c0\u03c0\u03af\u03bd\u03c9\u03bd
-currenciesDisplayName.UZS=Sum \u039f\u03c5\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.COP=\u03a0\u03ad\u03c3\u03bf \u039a\u03bf\u03bb\u03bf\u03bc\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.THB=\u039c\u03c0\u03b1\u03c4 \u03a4\u03b1\u03ca\u03bb\u03ac\u03bd\u03b4\u03b7\u03c2
-currenciesDisplayName.IBP=\u039b\u03af\u03c1\u03b1 \u0392\u03cc\u03c1\u03b5\u03b9\u03b1\u03c2 \u0399\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.BUR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u0392\u03b9\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.COF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039a\u03bf\u03bd\u03b3\u03ba\u03cc CFA
-currenciesDisplayName.BUK=Kyat \u0392\u03b9\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.COB=\u03a7\u03ac\u03c1\u03c4\u03b9\u03bd\u03bf \u03a0\u03ad\u03c3\u03bf \u039a\u03bf\u03bb\u03bf\u03bc\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.UZC=Coupon Som \u039f\u03c5\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-currenciesDisplayName.UAK=Karbovanetz \u039f\u03c5\u03ba\u03c1\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.QAR=Rial \u039a\u03b1\u03c4\u03ac\u03c1
-currenciesDisplayName.UAH=Hryvnia \u039f\u03c5\u03ba\u03c1\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.GNS=Syli \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
-currenciesDisplayName.CNY=Yuan Renminbi \u039a\u03af\u03bd\u03b1\u03c2
-currenciesDisplayName.MZM=Metical \u039c\u03bf\u03b6\u03b1\u03bc\u03b2\u03af\u03ba\u03b7\u03c2
-currenciesDisplayName.CNX=\u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03ac \u039e\u03ad\u03bd\u03bf\u03c5 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03ac\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c3\u03b5 \u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03b1 \u0397\u03a0\u0391, \u039a\u03af\u03bd\u03b1\u03c2
-currenciesDisplayName.UYU=\u03a0\u03ad\u03c3\u03bf Uruguayo \u039f\u03c5\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2
-currenciesDisplayName.GNI=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2 (1960-1972)
-currenciesDisplayName.SML=\u039b\u03b9\u03c1\u03ad\u03c4\u03b1 \u0391\u03b3\u03af\u03bf\u03c5 \u039c\u03b1\u03c1\u03af\u03bd\u03bf\u03c5
-currenciesDisplayName.MZE=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u039c\u03bf\u03b6\u03b1\u03bc\u03b2\u03af\u03ba\u03b7\u03c2
-currenciesDisplayName.CNP=Jen Min Piao Yuan \u039a\u03af\u03bd\u03b1\u03c2
-currenciesDisplayName.PGK=Kina \u03a0\u03b1\u03c0\u03bf\u03cd\u03b1 \u039d\u03ad\u03b1 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1
-currenciesDisplayName.OMS=Rial Saidi \u039f\u03bc\u03ac\u03bd
-currenciesDisplayName.GNF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
-currenciesDisplayName.UYP=\u03a0\u03ad\u03c3\u03bf \u039f\u03c5\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2 (1975-1993)
-currenciesDisplayName.OMR=Rial \u039f\u03bc\u03ac\u03bd
-currenciesDisplayName.XFU=UIC-\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.ZRZ=Zaire \u0396\u03b1\u0390\u03c1
-currenciesDisplayName.BTR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u039c\u03c0\u03bf\u03c5\u03c4\u03ac\u03bd
-currenciesDisplayName.MAF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039c\u03b1\u03c1\u03cc\u03ba\u03bf\u03c5
-currenciesDisplayName.MAD=\u039d\u03c4\u03b9\u03c1\u03ac\u03bc \u039c\u03b1\u03c1\u03cc\u03ba\u03bf\u03c5
-currenciesDisplayName.BTN=Ngultrum \u039c\u03c0\u03bf\u03c5\u03c4\u03ac\u03bd
-currenciesDisplayName.XFO=\u03a7\u03c1\u03c5\u03c3\u03cc \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.UYF=\u039c\u03b5\u03c4\u03b1\u03bb\u03bb\u03b9\u03ba\u03cc \u03a0\u03ad\u03c3\u03bf \u039f\u03c5\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2
-currenciesDisplayName.MYR=Ringgit \u039c\u03b1\u03bb\u03b1\u03b9\u03c3\u03af\u03b1\u03c2
-currenciesDisplayName.ZRN=\u039d\u03ad\u03bf Zaire \u0396\u03b1\u0390\u03c1
-currenciesDisplayName.AZM=\u039c\u03b1\u03bd\u03ac\u03c4 \u0391\u03b6\u03b5\u03c1\u03bc\u03c0\u03b1\u03ca\u03c4\u03b6\u03ac\u03bd
-currenciesDisplayName.GMP=\u039b\u03af\u03c1\u03b1 \u0393\u03ba\u03ac\u03bc\u03c0\u03b9\u03b1
-currenciesDisplayName.KMF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Comoro
-currenciesDisplayName.SLL=Leone \u03a3\u03b9\u03ad\u03c1\u03b1 \u039b\u03b5\u03cc\u03bd\u03b5
-currenciesDisplayName.GMD=Dalasi \u0393\u03ba\u03ac\u03bc\u03c0\u03b9\u03b1
-currenciesDisplayName.XEU=\u0395\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ae \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03bc\u03b1\u03c4\u03b9\u03ba\u03ae \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
-currenciesDisplayName.BSP=\u039b\u03af\u03c1\u03b1 \u039c\u03c0\u03b1\u03c7\u03ac\u03bc\u03b5\u03c2
-currenciesDisplayName.CMF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u039a\u03b1\u03bc\u03b5\u03c1\u03bf\u03cd\u03bd CFA
-currenciesDisplayName.MXV=Unidad de Inversion (UDI) \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u03cd
-currenciesDisplayName.XEF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf BCEAEC CFA
-currenciesDisplayName.BSD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039c\u03c0\u03b1\u03c7\u03ac\u03bc\u03b5\u03c2
-currenciesDisplayName.MXP=\u0391\u03c3\u03b7\u03bc\u03ad\u03bd\u03b9\u03bf \u03a0\u03ad\u03c3\u03bf \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u03cd (1861-1992)
-currenciesDisplayName.MXN=\u03a0\u03ad\u03c3\u03bf \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u03cd
-currenciesDisplayName.PES=Sol \u03a0\u03b5\u03c1\u03bf\u03cd
-currenciesDisplayName.GLK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u0393\u03c1\u03bf\u03b9\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.BRZ=Cruzeiro \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2 (1942-1967)
-currenciesDisplayName.PEN=Sol Nuevo \u03a0\u03b5\u03c1\u03bf\u03cd
-currenciesDisplayName.CLP=\u03a0\u03ad\u03c3\u03bf \u03a7\u03b9\u03bb\u03ae\u03c2
-currenciesDisplayName.SKK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.PEI=Inti \u03a0\u03b5\u03c1\u03bf\u03cd
-currenciesDisplayName.BRR=Cruzeiro \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.XDR=\u0395\u03b9\u03b4\u03b9\u03ba\u03ac \u0394\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u0391\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
-currenciesDisplayName.FRG=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Germinal/\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf Poincare \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.FRF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.BRN=\u039d\u03ad\u03bf Cruzado \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.CLF=Unidades de Fomento \u03a7\u03b9\u03bb\u03ae\u03c2
-currenciesDisplayName.CLE=\u0395\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a7\u03b9\u03bb\u03ae\u03c2
-currenciesDisplayName.BRL=Real \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.CLC=Condor \u03a7\u03b9\u03bb\u03ae\u03c2
-currenciesDisplayName.BRE=Cruzeiro \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2 (1990-1993)
-currenciesDisplayName.DES=Sperrmark \u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.MWP=\u039b\u03af\u03c1\u03b1 \u039c\u03b1\u03bb\u03ac\u03bf\u03c5\u03b9
-currenciesDisplayName.BRC=Cruzado \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2
-currenciesDisplayName.BRB=\u039d\u03ad\u03bf Cruzeiro \u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1\u03c2 (1967-1986)
-currenciesDisplayName.MWK=Kwacha \u039c\u03b1\u03bb\u03ac\u03bf\u03c5\u03b9
-currenciesDisplayName.DEM=\u039c\u03ac\u03c1\u03ba\u03bf \u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.TDF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u03a4\u03c3\u03b1\u03bd\u03c4 CFA
-currenciesDisplayName.NPR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u039d\u03b5\u03c0\u03ac\u03bb
-currenciesDisplayName.CKD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ae\u03c3\u03c9\u03bd \u039a\u03bf\u03c5\u03ba
-currenciesDisplayName.JPY=\u0393\u03b9\u03b5\u03bd \u0399\u03b1\u03c0\u03c9\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.MVR=Rufiyaa \u039d\u03ae\u03c3\u03c9\u03bd \u039c\u03b1\u03bb\u03b4\u03af\u03b2\u03c9\u03bd
-currenciesDisplayName.XCF=\u039d\u03ad\u03bf \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf CFA
-currenciesDisplayName.MVP=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u039d\u03ae\u03c3\u03c9\u03bd \u039c\u03b1\u03bb\u03b4\u03af\u03b2\u03c9\u03bd
-currenciesDisplayName.XCD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0391\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u03ae\u03c2 \u039a\u03b1\u03c1\u03b1\u03ca\u03b2\u03b9\u03ba\u03ae\u03c2
-currenciesDisplayName.SIT=Tolar \u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.YUR=\u0391\u03bd\u03b1\u03bd\u03b5\u03c9\u03bc\u03ad\u03bd\u03bf \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.AWG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u0391\u03c1\u03bf\u03cd\u03bc\u03c0\u03b1
-currenciesDisplayName.YUO=\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03b9\u03b1\u03bd\u03cc \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.DDM=Ostmark \u0391\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u03ae\u03c2 \u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.YUN=\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03ad\u03c8\u03b9\u03bc\u03bf \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.YUM=\u039d\u03ad\u03bf \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.TCC=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u039d\u03ae\u03c3\u03c9\u03bd \u03a4\u03b5\u03c1\u03ba\u03c2 \u03ba\u03b1\u03b9 \u039a\u03ac\u03b9\u03ba\u03bf\u03c2
-currenciesDisplayName.YUG=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.YUF=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03b9\u03ba\u03ae\u03c2 \u039f\u03bc\u03bf\u03c3\u03c0\u03bf\u03bd\u03b4\u03af\u03b1\u03c2
-currenciesDisplayName.RON=\u039d\u03ad\u03bf \u039b\u03ad\u03b9 \u03a1\u03bf\u03c5\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.YUD=\u039c\u03b5\u03c4\u03b1\u03bb\u03bb\u03b9\u03ba\u03cc \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
-currenciesDisplayName.ROL=\u039b\u03ad\u03b9 \u03a1\u03bf\u03c5\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.SIB=Tolar Bons \u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03af\u03b1\u03c2
-currenciesDisplayName.NOK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u039d\u03bf\u03c1\u03b2\u03b7\u03b3\u03af\u03b1\u03c2
-currenciesDisplayName.MUR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u039c\u03b1\u03c5\u03c1\u03b9\u03ba\u03af\u03bf\u03c5
-currenciesDisplayName.XBD=\u0395\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ae \u039c\u03bf\u03bd\u03ac\u03b4\u03b1 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd (XBD)
-currenciesDisplayName.GIP=\u039b\u03af\u03c1\u03b1 \u0393\u03b9\u03b2\u03c1\u03b1\u03bb\u03c4\u03ac\u03c1
-currenciesDisplayName.VNS=\u0395\u03b8\u03bd\u03b9\u03ba\u03cc Dong \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.XBC=\u0395\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ae \u039c\u03bf\u03bd\u03ac\u03b4\u03b1 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd (XBC)
-currenciesDisplayName.VNR=Dong \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1\u03c2 \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesDisplayName.XBB=\u0395\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ae \u039d\u03bf\u03bc\u03b9\u03c3\u03bc\u03b1\u03c4\u03b9\u03ba\u03ae \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
-currenciesDisplayName.XBA=\u0395\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ae \u03a3\u03cd\u03bd\u03b8\u03b5\u03c4\u03b7 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
-currenciesDisplayName.KID=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf Kiribati
-currenciesDisplayName.SHP=\u039b\u03af\u03c1\u03b1 \u0391\u03b3\u03af\u03b1\u03c2 \u0395\u03bb\u03ad\u03bd\u03b7\u03c2
-currenciesDisplayName.VNN=\u039d\u03ad\u03bf Dong \u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.EUR=\u20ac
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TT$
-currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.GBP=\u00a3
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
-currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.UGS=UGS
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
-currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
-currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.JPY=\u00a5
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
-shortMonths=\u0399\u03b1\u03bd®\u03a6\u03b5\u03b2®\u039c\u03b1\u03c1®\u0391\u03c0\u03c1®\u039c\u03b1\u03ca®\u0399\u03bf\u03c5\u03bd®\u0399\u03bf\u03c5\u03bb®\u0391\u03c5\u03b3®\u03a3\u03b5\u03c0®\u039f\u03ba\u03c4®\u039d\u03bf\u03b5®\u0394\u03b5\u03ba®®
-months=\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2®\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2®\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2®\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2®\u039c\u03ac\u03b9\u03bf\u03c2®\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2®\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2®\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2®\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2®\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2®\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2®\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2®®
-shortWeekdays=®\u039a\u03c5\u03c1®\u0394\u03b5\u03c5®\u03a4\u03c1\u03b9®\u03a4\u03b5\u03c4®\u03a0\u03b5\u03bc®\u03a0\u03b1\u03c1®\u03a3\u03b1\u03b2®
-weekdays=®\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae®\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1®\u03a4\u03c1\u03af\u03c4\u03b7®\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7®\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7®\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae®\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf®
-firstDayOfWeek=mon
-eras=\u03c0.\u03a7.®\u03bc.\u03a7.®
-ampms=\u03a0\u039c®\u039c\u039c®
-shortDateFormat=dd/MM/yyyy
-mediumDateFormat=dd MMM yyyy
-longDateFormat=dd MMMM yyyy
-fullDateFormat=EEEE, dd MMMM yyyy
-shortTimeFormat=h:mm a
-mediumTimeFormat=h:mm:ss a
-longTimeFormat=h:mm:ss a z
-fullTimeFormat=h:mm:ss a z
-territories.TL=\u0391\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u03cc \u03a4\u03b9\u03bc\u03cc\u03c1
-territories.TK=\u03a4\u03bf\u03ba\u03b5\u03bb\u03ac\u03bf\u03c5
-territories.TJ=\u03a4\u03b1\u03c4\u03b6\u03b9\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-territories.TH=\u03a4\u03b1\u03ca\u03bb\u03ac\u03bd\u03b4\u03b7
-territories.TG=\u03a4\u03cc\u03b3\u03ba\u03bf
-territories.TF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ac \u039d\u03cc\u03c4\u03b9\u03b1 \u0395\u03b4\u03ac\u03c6\u03b7
-territories.GY=\u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1
-territories.TD=\u03a4\u03c3\u03b1\u03bd\u03c4
-territories.TC=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a4\u03b5\u03c1\u03ba\u03c2 \u03ba\u03b1\u03b9 \u039a\u03ac\u03b9\u03ba\u03bf\u03c2
-territories.GW=\u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1-\u039c\u03c0\u03b9\u03c3\u03ac\u03bf\u03c5
-territories.GU=\u0393\u03ba\u03bf\u03c5\u03ac\u03bc
-territories.GT=\u0393\u03bf\u03c5\u03b1\u03c4\u03b5\u03bc\u03ac\u03bb\u03b1
-territories.GS=\u039d\u03cc\u03c4\u03b9\u03b1 \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1 \u03ba\u03b1\u03b9 \u039d\u03ae\u03c3\u03bf\u03b9 \u039d\u03cc\u03c4\u03b9\u03b5\u03c2 \u03a3\u03ac\u03bd\u03c4\u03bf\u03c5\u03b9\u03c4\u03c2
-territories.GR=\u0395\u03bb\u03bb\u03ac\u03b4\u03b1
-territories.GQ=\u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03ae \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1
-territories.GP=\u0393\u03bf\u03c5\u03b1\u03b4\u03b5\u03bb\u03bf\u03cd\u03c0\u03b7
-territories.SZ=\u03a3\u03bf\u03c5\u03b1\u03b6\u03b9\u03bb\u03ac\u03bd\u03b4\u03b7
-territories.SY=\u03a3\u03c5\u03c1\u03af\u03b1, \u0391\u03c1\u03b1\u03b2\u03b9\u03ba\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03b7\u03c2
-territories.GN=\u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1
-territories.GM=\u0393\u03ba\u03ac\u03bc\u03c0\u03b9\u03b1
-territories.GL=\u0393\u03c1\u03bf\u03b9\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.SV=\u0395\u03bb \u03a3\u03b1\u03bb\u03b2\u03b1\u03b4\u03cc\u03c1
-territories.ST=\u03a3\u03ac\u03bf \u03a4\u03bf\u03bc\u03ad \u03ba\u03b1\u03b9 \u03a0\u03c1\u03af\u03bd\u03c3\u03b9\u03c0\u03b5
-territories.GI=\u0393\u03b9\u03b2\u03c1\u03b1\u03bb\u03c4\u03ac\u03c1
-territories.GH=\u0393\u03ba\u03ac\u03bd\u03b1
-territories.SR=\u03a3\u03bf\u03c5\u03c1\u03b9\u03bd\u03ac\u03bc
-territories.GF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ae \u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1
-territories.GE=\u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1
-territories.SO=\u03a3\u03bf\u03bc\u03b1\u03bb\u03af\u03b1
-territories.GD=\u0393\u03c1\u03b5\u03bd\u03ac\u03b4\u03b1
-territories.SN=\u03a3\u03b5\u03bd\u03b5\u03b3\u03ac\u03bb\u03b7
-territories.SM=\u0386\u03b3\u03b9\u03bf\u03c2 \u039c\u03b1\u03c1\u03af\u03bd\u03bf\u03c2
-territories.GB=\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03bf \u0392\u03b1\u03c3\u03af\u03bb\u03b5\u03b9\u03bf
-territories.SL=\u03a3\u03b9\u03ad\u03c1\u03b1 \u039b\u03b5\u03cc\u03bd\u03b5
-territories.GA=\u0393\u03ba\u03b1\u03bc\u03c0\u03cc\u03bd
-territories.SK=\u03a3\u03bb\u03bf\u03b2\u03b1\u03ba\u03af\u03b1
-territories.SJ=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a3\u03b2\u03ac\u03bb\u03bc\u03c0\u03b1\u03c1 \u03ba\u03b1\u03b9 \u0393\u03b9\u03b1\u03bd \u039c\u03b1\u03b3\u03b9\u03ad\u03bd
-territories.SI=\u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03af\u03b1
-territories.SH=\u0391\u03b3\u03af\u03b1 \u0395\u03bb\u03ad\u03bd\u03b7
-territories.SG=\u03a3\u03b9\u03b3\u03ba\u03b1\u03c0\u03bf\u03cd\u03c1\u03b7
-territories.SE=\u03a3\u03bf\u03c5\u03b7\u03b4\u03af\u03b1
-territories.SD=\u03a3\u03bf\u03c5\u03b4\u03ac\u03bd
-territories.SC=\u03a3\u03b5\u03cb\u03c7\u03ad\u03bb\u03bb\u03b5\u03c2
-territories.SB=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a3\u03bf\u03bb\u03bf\u03bc\u03ce\u03bd\u03c4\u03bf\u03c2
-territories.SA=\u03a3\u03b1\u03bf\u03c5\u03b4\u03b9\u03ba\u03ae \u0391\u03c1\u03b1\u03b2\u03af\u03b1
-territories.FR=\u0393\u03b1\u03bb\u03bb\u03af\u03b1
-territories.FO=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a6\u03b5\u03c1\u03cc\u03b5\u03c2
-territories.FM=\u039c\u03b9\u03ba\u03c1\u03bf\u03bd\u03b7\u03c3\u03af\u03b1, \u039f\u03bc\u03cc\u03c3\u03c0\u03bf\u03bd\u03b4\u03b5\u03c2 \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u03af\u03b5\u03c2 \u03c4\u03b7\u03c2
-territories.RW=\u03a1\u03bf\u03c5\u03ac\u03bd\u03c4\u03b1
-territories.FK=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a6\u03ce\u03ba\u03bb\u03b1\u03bd\u03c4
-territories.RU=\u03a1\u03c9\u03c3\u03af\u03b1
-territories.FJ=\u03a6\u03af\u03c4\u03b6\u03b9
-territories.FI=\u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.RO=\u03a1\u03bf\u03c5\u03bc\u03b1\u03bd\u03af\u03b1
-territories.RE=\u03a1\u03b5\u03cb\u03bd\u03b9\u03cc\u03bd
-territories.ET=\u0391\u03b9\u03b8\u03b9\u03bf\u03c0\u03af\u03b1
-territories.ES=\u0399\u03c3\u03c0\u03b1\u03bd\u03af\u03b1
-territories.ER=\u0395\u03c1\u03c5\u03b8\u03c1\u03b1\u03af\u03b1
-territories.EH=\u0394\u03c5\u03c4\u03b9\u03ba\u03ae \u03a3\u03b1\u03c7\u03ac\u03c1\u03b1
-territories.EG=\u0391\u03af\u03b3\u03c5\u03c0\u03c4\u03bf\u03c2
-territories.EE=\u0395\u03c3\u03b8\u03bf\u03bd\u03af\u03b1
-territories.EC=\u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03cc\u03c2
-territories.DZ=\u0391\u03bb\u03b3\u03b5\u03c1\u03af\u03b1
-territories.QA=\u039a\u03b1\u03c4\u03ac\u03c1
-territories.DO=\u0394\u03bf\u03bc\u03b9\u03bd\u03b9\u03ba\u03b1\u03bd\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1
-territories.PY=\u03a0\u03b1\u03c1\u03b1\u03b3\u03bf\u03c5\u03ac\u03b7
-territories.DM=\u039d\u03c4\u03bf\u03bc\u03af\u03bd\u03b9\u03ba\u03b1
-territories.PW=\u03a0\u03b1\u03bb\u03ac\u03bf\u03c5
-territories.DK=\u0394\u03b1\u03bd\u03af\u03b1
-territories.DJ=\u03a4\u03b6\u03b9\u03bc\u03c0\u03bf\u03c5\u03c4\u03af
-territories.PT=\u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1
-territories.PS=\u03a0\u03b1\u03bb\u03b1\u03b9\u03c3\u03c4\u03b9\u03bd\u03b9\u03b1\u03ba\u03ac \u0395\u03b4\u03ac\u03c6\u03b7
-territories.PR=\u03a0\u03bf\u03c5\u03ad\u03c1\u03c4\u03bf \u03a1\u03af\u03ba\u03bf
-territories.DE=\u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1
-territories.PN=\u03a0\u03af\u03c4\u03ba\u03b5\u03c1\u03bd
-territories.PM=\u03a3\u03b1\u03b9\u03bd\u03c4 \u03a0\u03b9\u03ad\u03c1 \u03ba\u03b1\u03b9 \u039c\u03b9\u03ba\u03b5\u03bb\u03cc\u03bd
-territories.PL=\u03a0\u03bf\u03bb\u03c9\u03bd\u03af\u03b1
-territories.PK=\u03a0\u03b1\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-territories.PH=\u03a6\u03b9\u03bb\u03b9\u03c0\u03c0\u03af\u03bd\u03b5\u03c2
-territories.PG=\u03a0\u03b1\u03c0\u03bf\u03cd\u03b1 - \u039d\u03ad\u03b1 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1
-territories.PF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ae \u03a0\u03bf\u03bb\u03c5\u03bd\u03b7\u03c3\u03af\u03b1
-territories.CZ=\u03a4\u03c3\u03b5\u03c7\u03af\u03b1
-territories.PE=\u03a0\u03b5\u03c1\u03bf\u03cd
-territories.CY=\u039a\u03cd\u03c0\u03c1\u03bf\u03c2
-territories.CX=\u039d\u03ae\u03c3\u03bf\u03c2 \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03c5\u03b3\u03ad\u03bd\u03bd\u03c9\u03bd
-territories.CV=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf\u03c5 \u0391\u03ba\u03c1\u03c9\u03c4\u03b7\u03c1\u03af\u03bf\u03c5
-territories.PA=\u03a0\u03b1\u03bd\u03b1\u03bc\u03ac\u03c2
-territories.CU=\u039a\u03bf\u03cd\u03b2\u03b1
-territories.CR=\u039a\u03cc\u03c3\u03c4\u03b1 \u03a1\u03af\u03ba\u03b1
-territories.CO=\u039a\u03bf\u03bb\u03bf\u03bc\u03b2\u03af\u03b1
-territories.CN=\u039a\u03af\u03bd\u03b1
-territories.CM=\u039a\u03b1\u03bc\u03b5\u03c1\u03bf\u03cd\u03bd
-territories.CL=\u03a7\u03b9\u03bb\u03ae
-territories.CK=\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03bf\u03c5\u03ba
-territories.CI=\u0391\u03ba\u03c4\u03ae \u0395\u03bb\u03b5\u03c6\u03b1\u03bd\u03c4\u03cc\u03b4\u03bf\u03bd\u03c4\u03bf\u03c2
-territories.CH=\u0395\u03bb\u03b2\u03b5\u03c4\u03af\u03b1
-territories.CG=\u039a\u03bf\u03bd\u03b3\u03ba\u03cc
-territories.CF=\u039a\u03b5\u03bd\u03c4\u03c1\u03bf\u03b1\u03c6\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1
-territories.CD=\u039a\u03bf\u03bd\u03b3\u03ba\u03cc, \u039b\u03b1\u03ca\u03ba\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03bf\u03c5
-territories.CC=\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03cc\u03ba\u03bf\u03c2 (\u039a\u03ae\u03bb\u03b9\u03bd\u03b3\u03ba)
-territories.OM=\u039f\u03bc\u03ac\u03bd
-territories.CA=\u039a\u03b1\u03bd\u03b1\u03b4\u03ac\u03c2
-territories.BZ=\u039c\u03c0\u03b5\u03bb\u03af\u03b6
-territories.BY=\u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03af\u03b1
-territories.BW=\u039c\u03c0\u03bf\u03c4\u03c3\u03bf\u03c5\u03ac\u03bd\u03b1
-territories.BV=\u039d\u03ae\u03c3\u03bf\u03c2 \u039c\u03c0\u03bf\u03c5\u03b2\u03ad
-territories.BT=\u039c\u03c0\u03bf\u03c5\u03c4\u03ac\u03bd
-territories.BS=\u039c\u03c0\u03b1\u03c7\u03ac\u03bc\u03b5\u03c2
-territories.BR=\u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1
-territories.NZ=\u039d\u03ad\u03b1 \u0396\u03b7\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.BO=\u0392\u03bf\u03bb\u03b9\u03b2\u03af\u03b1
-territories.BN=\u039c\u03c0\u03c1\u03bf\u03c5\u03bd\u03ad\u03b9 \u039d\u03c4\u03b1\u03c1\u03bf\u03c5\u03c3\u03b1\u03bb\u03ac\u03bc
-territories.BM=\u0392\u03b5\u03c1\u03bc\u03bf\u03cd\u03b4\u03b5\u03c2
-territories.NU=\u039d\u03b9\u03bf\u03cd\u03b5
-territories.BJ=\u039c\u03c0\u03ad\u03bd\u03b9\u03bd
-territories.BI=\u039c\u03c0\u03bf\u03c5\u03c1\u03bf\u03cd\u03bd\u03c4\u03b9
-territories.BH=\u039c\u03c0\u03b1\u03c7\u03c1\u03ad\u03b9\u03bd
-territories.NR=\u039d\u03b1\u03bf\u03cd\u03c1\u03bf\u03c5
-territories.BG=\u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1
-territories.BF=\u039c\u03c0\u03bf\u03c5\u03c1\u03ba\u03af\u03bd\u03b1 \u03a6\u03ac\u03c3\u03bf
-territories.NP=\u039d\u03b5\u03c0\u03ac\u03bb
-territories.BE=\u0392\u03ad\u03bb\u03b3\u03b9\u03bf
-territories.NO=\u039d\u03bf\u03c1\u03b2\u03b7\u03b3\u03af\u03b1
-territories.BD=\u039c\u03c0\u03b1\u03bd\u03b3\u03ba\u03bb\u03b1\u03bd\u03c4\u03ad\u03c2
-territories.BB=\u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03ac\u03bd\u03c4\u03bf\u03c2
-territories.ZW=\u0396\u03b9\u03bc\u03c0\u03ac\u03bc\u03c0\u03bf\u03c5\u03b5
-territories.NL=\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.BA=\u0392\u03bf\u03c3\u03bd\u03af\u03b1 - \u0395\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7
-territories.NI=\u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1
-territories.NG=\u039d\u03b9\u03b3\u03b7\u03c1\u03af\u03b1
-territories.NF=\u039d\u03ae\u03c3\u03bf\u03c2 \u039d\u03cc\u03c1\u03c6\u03bf\u03bb\u03ba
-territories.AZ=\u0391\u03b6\u03b5\u03c1\u03bc\u03c0\u03b1\u03ca\u03c4\u03b6\u03ac\u03bd
-territories.NE=\u039d\u03af\u03b3\u03b7\u03c1
-territories.NC=\u039d\u03ad\u03b1 \u039a\u03b1\u03bb\u03b7\u03b4\u03bf\u03bd\u03af\u03b1
-territories.AW=\u0391\u03c1\u03bf\u03cd\u03bc\u03c0\u03b1
-territories.ZM=\u0396\u03ac\u03bc\u03c0\u03b9\u03b1
-territories.NA=\u039d\u03b1\u03bc\u03af\u03bc\u03c0\u03b9\u03b1
-territories.AU=\u0391\u03c5\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1
-territories.AT=\u0391\u03c5\u03c3\u03c4\u03c1\u03af\u03b1
-territories.AS=\u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ae \u03a3\u03b1\u03bc\u03cc\u03b1
-territories.AR=\u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae
-territories.AQ=\u0391\u03bd\u03c4\u03b1\u03c1\u03ba\u03c4\u03b9\u03ba\u03ae
-territories.MZ=\u039c\u03bf\u03b6\u03b1\u03bc\u03b2\u03af\u03ba\u03b7
-territories.AO=\u0391\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1
-territories.MY=\u039c\u03b1\u03bb\u03b1\u03b9\u03c3\u03af\u03b1
-territories.AN=\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ad\u03c2 \u0391\u03bd\u03c4\u03af\u03bb\u03bb\u03b5\u03c2
-territories.MX=\u039c\u03b5\u03be\u03b9\u03ba\u03cc
-territories.AM=\u0391\u03c1\u03bc\u03b5\u03bd\u03af\u03b1
-territories.MW=\u039c\u03b1\u03bb\u03ac\u03bf\u03c5\u03b9
-territories.AL=\u0391\u03bb\u03b2\u03b1\u03bd\u03af\u03b1
-territories.MV=\u039c\u03b1\u03bb\u03b4\u03af\u03b2\u03b5\u03c2
-territories.ZA=\u039d\u03cc\u03c4\u03b9\u03b1 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae
-territories.MU=\u039c\u03b1\u03c5\u03c1\u03af\u03ba\u03b9\u03bf\u03c2
-territories.MT=\u039c\u03ac\u03bb\u03c4\u03b1
-territories.AI=\u0391\u03bd\u03b3\u03ba\u03bf\u03c5\u03af\u03bb\u03b1
-territories.MS=\u039c\u03bf\u03bd\u03c3\u03b5\u03c1\u03ac\u03c4
-territories.MR=\u039c\u03b1\u03c5\u03c1\u03b9\u03c4\u03b1\u03bd\u03af\u03b1
-territories.AG=\u0391\u03bd\u03c4\u03af\u03b3\u03ba\u03bf\u03c5\u03b1 \u03ba\u03b1\u03b9 \u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03bf\u03cd\u03bd\u03c4\u03b1
-territories.MQ=\u039c\u03b1\u03c1\u03c4\u03b9\u03bd\u03af\u03ba\u03b1
-territories.AF=\u0391\u03c6\u03b3\u03b1\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd
-territories.MP=\u039d\u03ae\u03c3\u03bf\u03b9 \u0392\u03cc\u03c1\u03b5\u03b9\u03b5\u03c2 \u039c\u03b1\u03c1\u03b9\u03ac\u03bd\u03b5\u03c2
-territories.AE=\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03b1 \u0391\u03c1\u03b1\u03b2\u03b9\u03ba\u03ac \u0395\u03bc\u03b9\u03c1\u03ac\u03c4\u03b1
-territories.MO=\u039c\u03b1\u03ba\u03ac\u03bf, \u0395\u03b9\u03b4\u03b9\u03ba\u03ae \u0394\u03b9\u03bf\u03b9\u03ba\u03b7\u03c4\u03b9\u03ba\u03ae \u03a0\u03b5\u03c1\u03b9\u03c6\u03ad\u03c1\u03b5\u03b9\u03b1 \u03c4\u03b7\u03c2 \u039a\u03af\u03bd\u03b1\u03c2
-territories.AD=\u0391\u03bd\u03b4\u03cc\u03c1\u03b1
-territories.MN=\u039c\u03bf\u03b3\u03b3\u03bf\u03bb\u03af\u03b1
-territories.MM=\u039c\u03b9\u03b1\u03bd\u03bc\u03ac\u03c1
-territories.ML=\u039c\u03ac\u03bb\u03b9
-territories.MK=\u03a0\u0393\u0394 \u039c\u03b1\u03ba\u03b5\u03b4\u03bf\u03bd\u03af\u03b1\u03c2
-territories.YU=\u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1
-territories.YT=\u039c\u03b1\u03b3\u03b9\u03cc\u03c4
-territories.MH=\u039d\u03ae\u03c3\u03bf\u03b9 \u039c\u03ac\u03c1\u03c3\u03b1\u03bb
-territories.MG=\u039c\u03b1\u03b4\u03b1\u03b3\u03b1\u03c3\u03ba\u03ac\u03c1\u03b7
-territories.MD=\u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1, \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03b7\u03c2
-territories.MC=\u039c\u03bf\u03bd\u03b1\u03ba\u03cc
-territories.MA=\u039c\u03b1\u03c1\u03cc\u03ba\u03bf
-territories.YE=\u03a5\u03b5\u03bc\u03ad\u03bd\u03b7
-territories.LV=\u039b\u03b5\u03c4\u03bf\u03bd\u03af\u03b1
-territories.LU=\u039b\u03bf\u03c5\u03be\u03b5\u03bc\u03b2\u03bf\u03cd\u03c1\u03b3\u03bf
-territories.LT=\u039b\u03b9\u03b8\u03bf\u03c5\u03b1\u03bd\u03af\u03b1
-territories.LS=\u039b\u03b5\u03c3\u03cc\u03c4\u03bf
-territories.LR=\u039b\u03b9\u03b2\u03b5\u03c1\u03af\u03b1
-territories.LK=\u03a3\u03c1\u03b9 \u039b\u03ac\u03bd\u03ba\u03b1
-territories.LI=\u039b\u03b9\u03c7\u03c4\u03b5\u03bd\u03c3\u03c4\u03ac\u03b9\u03bd
-territories.LC=\u0391\u03b3\u03af\u03b1 \u039b\u03bf\u03c5\u03ba\u03af\u03b1
-territories.LB=\u039b\u03af\u03b2\u03b1\u03bd\u03bf\u03c2
-territories.LA=\u039b\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ae \u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03ae
-territories.KZ=\u039a\u03b1\u03b6\u03b1\u03ba\u03c3\u03c4\u03ac\u03bd
-territories.KY=\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03ad\u03b9\u03bc\u03b1\u03bd
-territories.KW=\u039a\u03bf\u03c5\u03b2\u03ad\u03b9\u03c4
-territories.KR=\u039a\u03bf\u03c1\u03ad\u03b1, \u039d\u03cc\u03c4\u03b9\u03b1
-territories.KP=\u039a\u03bf\u03c1\u03ad\u03b1, \u0392\u03cc\u03c1\u03b5\u03b9\u03b1
-territories.KN=\u03a3\u03b1\u03b9\u03bd\u03c4 \u039a\u03b9\u03c4\u03c2 \u03ba\u03b1\u03b9 \u039d\u03ad\u03b2\u03b9\u03c2
-territories.KM=\u039a\u03bf\u03bc\u03cc\u03c1\u03b5\u03c2
-territories.KI=\u039a\u03b9\u03c1\u03b9\u03bc\u03c0\u03ac\u03c4\u03b9
-territories.WS=\u03a3\u03b1\u03bc\u03cc\u03b1
-territories.KH=\u039a\u03b1\u03bc\u03c0\u03cc\u03c4\u03b6\u03b7
-territories.KG=\u039a\u03b9\u03c1\u03b3\u03b9\u03b6\u03af\u03b1
-territories.KE=\u039a\u03ad\u03bd\u03c5\u03b1
-territories.WF=\u039d\u03ae\u03c3\u03bf\u03b9 \u039f\u03c5\u03b1\u03bb\u03bb\u03af\u03c2 \u03ba\u03b1\u03b9 \u03a6\u03bf\u03c5\u03c4\u03bf\u03c5\u03bd\u03ac
-territories.JP=\u0399\u03b1\u03c0\u03c9\u03bd\u03af\u03b1
-territories.JO=\u0399\u03bf\u03c1\u03b4\u03b1\u03bd\u03af\u03b1
-territories.JM=\u03a4\u03b6\u03b1\u03bc\u03ac\u03b9\u03ba\u03b1
-territories.VU=\u0392\u03b1\u03bd\u03bf\u03c5\u03ac\u03c4\u03bf\u03c5
-territories.VN=\u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc
-territories.VI=\u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03bf\u03b9 \u039d\u03ae\u03c3\u03bf\u03b9
-territories.VG=\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03bf\u03b9 \u039d\u03ae\u03c3\u03bf\u03b9
-territories.VE=\u0392\u03b5\u03bd\u03b5\u03b6\u03bf\u03c5\u03ad\u03bb\u03b1
-territories.VC=\u0386\u03b3\u03b9\u03bf\u03c2 \u0392\u03b9\u03ba\u03ad\u03bd\u03c4\u03b9\u03bf\u03c2 \u03ba\u03b1\u03b9 \u0393\u03c1\u03b5\u03bd\u03b1\u03b4\u03af\u03bd\u03b5\u03c2
-territories.VA=\u0391\u03b3\u03af\u03b1 \u0388\u03b4\u03c1\u03b1 (\u0392\u03b1\u03c4\u03b9\u03ba\u03b1\u03bd\u03cc)
-territories.IT=\u0399\u03c4\u03b1\u03bb\u03af\u03b1
-territories.IS=\u0399\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.IR=\u0399\u03c1\u03ac\u03bd, \u0399\u03c3\u03bb\u03b1\u03bc\u03b9\u03ba\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03bf\u03c5
-territories.IQ=\u0399\u03c1\u03ac\u03ba
-territories.UZ=\u039f\u03c5\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
-territories.IO=\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ac \u0388\u03b4\u03ac\u03c6\u03b7 \u0399\u03bd\u03b4\u03b9\u03ba\u03bf\u03cd \u03a9\u03ba\u03b5\u03b1\u03bd\u03bf\u03cd
-territories.UY=\u039f\u03c5\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7
-territories.IN=\u0399\u03bd\u03b4\u03af\u03b1
-territories.IL=\u0399\u03c3\u03c1\u03b1\u03ae\u03bb
-territories.US=\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03b5\u03c2 \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u03af\u03b5\u03c2
-territories.IE=\u0399\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
-territories.ID=\u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1
-territories.UM=\u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03b5\u03c2 \u039d\u03b7\u03c3\u03af\u03b4\u03b5\u03c2 \u03c4\u03c9\u03bd \u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u03b9\u03ce\u03bd
-territories.UG=\u039f\u03c5\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1
-territories.UA=\u039f\u03c5\u03ba\u03c1\u03b1\u03bd\u03af\u03b1
-territories.HU=\u039f\u03c5\u03b3\u03b3\u03b1\u03c1\u03af\u03b1
-territories.HT=\u0391\u03ca\u03c4\u03ae
-territories.HR=\u039a\u03c1\u03bf\u03b1\u03c4\u03af\u03b1
-territories.TZ=\u03a4\u03b1\u03bd\u03b6\u03b1\u03bd\u03af\u03b1
-territories.HN=\u039f\u03bd\u03b4\u03bf\u03cd\u03c1\u03b1
-territories.HM=\u039d\u03ae\u03c3\u03bf\u03b9 \u03a7\u03b5\u03c1\u03bd\u03c4 \u03ba\u03b1\u03b9 \u039c\u03b1\u03ba\u03bd\u03c4\u03cc\u03bd\u03b1\u03bb\u03bd\u03c4
-territories.TW=\u03a4\u03b1\u03ca\u03b2\u03ac\u03bd
-territories.TV=\u03a4\u03bf\u03c5\u03b2\u03b1\u03bb\u03bf\u03cd
-territories.HK=\u03a7\u03bf\u03bd\u03b3\u03ba \u039a\u03bf\u03bd\u03b3\u03ba, \u0395\u03b9\u03b4\u03b9\u03ba\u03ae \u0394\u03b9\u03bf\u03b9\u03ba\u03b7\u03c4\u03b9\u03ba\u03ae \u03a0\u03b5\u03c1\u03b9\u03c6\u03ad\u03c1\u03b5\u03b9\u03b1 \u03c4\u03b7\u03c2 \u039a\u03af\u03bd\u03b1\u03c2
-territories.TT=\u03a4\u03c1\u03b9\u03bd\u03b9\u03b4\u03ac\u03b4 \u03ba\u03b1\u03b9 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf
-territories.TR=\u03a4\u03bf\u03c5\u03c1\u03ba\u03af\u03b1
-territories.TO=\u03a4\u03cc\u03bd\u03b3\u03ba\u03b1
-territories.TN=\u03a4\u03c5\u03bd\u03b7\u03c3\u03af\u03b1
-territories.TM=\u03a4\u03bf\u03c5\u03c1\u03ba\u03bc\u03b5\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd
-languages.haw=\u03a7\u03b1\u03b2\u03b1\u03bd\u03b5\u03b6\u03b9\u03ba\u03ac
-languages.mul=\u03a0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ad\u03c2 \u0393\u03bb\u03ce\u03c3\u03c3\u03b5\u03c2
-languages.ka=\u0393\u03b5\u03c9\u03c1\u03b3\u03b9\u03b1\u03bd\u03ac
-languages.zh=\u039a\u03b9\u03bd\u03b5\u03b6\u03b9\u03ba\u03ac
-languages.cop=\u039a\u03bf\u03c0\u03c4\u03b9\u03ba\u03ac
-languages.ar=\u0391\u03c1\u03b1\u03b2\u03b9\u03ba\u03ac
-languages.mt=\u039c\u03b1\u03bb\u03c4\u03b5\u03b6\u03b9\u03ba\u03ac
-languages.sv=\u03a3\u03bf\u03c5\u03b7\u03b4\u03b9\u03ba\u03ac
-languages.pt=\u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03b9\u03ba\u03ac
-languages.mo=\u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03b9\u03ba\u03ac
-languages.sr=\u03a3\u03b5\u03c1\u03b2\u03b9\u03ba\u03ac
-languages.ota=\u03a4\u03bf\u03c5\u03c1\u03ba\u03b9\u03ba\u03ac, \u039f\u03b8\u03c9\u03bc\u03b1\u03bd\u03b9\u03ba\u03ac (1500-1928)
-languages.mn=\u039c\u03bf\u03b3\u03b3\u03bf\u03bb\u03b9\u03ba\u03ac
-languages.sq=\u0391\u03bb\u03b2\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.mk=\u03a3\u03bb\u03b1\u03b2\u03bf\u03bc\u03b1\u03ba\u03b5\u03b4\u03bf\u03bd\u03b9\u03ba\u03ac
-languages.de=\u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.pl=\u03a0\u03bf\u03bb\u03c9\u03bd\u03b9\u03ba\u03ac
-languages.sl=\u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03b9\u03ba\u03ac
-languages.gd=\u03a3\u03ba\u03c9\u03c4\u03b9\u03ba\u03ac \u039a\u03b5\u03bb\u03c4\u03b9\u03ba\u03ac
-languages.sk=\u03a3\u03bb\u03bf\u03b2\u03b1\u03ba\u03b9\u03ba\u03ac
-languages.da=\u0394\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.ga=\u0399\u03c1\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
-languages.sh=\u03a3\u03b5\u03c1\u03b2\u03bf\u03ba\u03c1\u03bf\u03b1\u03c4\u03b9\u03ba\u03ac
-languages.vi=\u0392\u03b9\u03b5\u03c4\u03bd\u03b1\u03bc\u03b5\u03b6\u03b9\u03ba\u03ac
-languages.ja=\u0399\u03b1\u03c0\u03c9\u03bd\u03b9\u03ba\u03ac
-languages.yi=\u0399\u03bf\u03c5\u03b4\u03b1\u03ca\u03ba\u03ac
-languages.sla=\u03a3\u03bb\u03b1\u03b2\u03b9\u03ba\u03ac (\u0386\u03bb\u03bb\u03b1)
-languages.cy=\u039f\u03c5\u03b1\u03bb\u03b9\u03ba\u03ac
-languages.egy=\u0391\u03b9\u03b3\u03c5\u03c0\u03c4\u03b9\u03b1\u03ba\u03ac (\u0391\u03c1\u03c7\u03b1\u03af\u03b1)
-languages.rom=\u03a1\u03c9\u03bc\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.cs=\u03a4\u03c3\u03b5\u03c7\u03b9\u03ba\u03ac
-languages.nai=\u0399\u03bd\u03b4\u03b9\u03b1\u03bd\u03b9\u03ba\u03ac \u0392\u03cc\u03c1\u03b5\u03b9\u03b1\u03c2 \u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03ae\u03c2 (\u0386\u03bb\u03bb\u03b1)
-languages.lv=\u039b\u03b5\u03c4\u03bf\u03bd\u03b9\u03ba\u03ac
-languages.it=\u0399\u03c4\u03b1\u03bb\u03b9\u03ba\u03ac
-languages.fr=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ac
-languages.is=\u0399\u03c3\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
-languages.co=\u039a\u03bf\u03c1\u03c3\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.arc=\u0391\u03c1\u03b1\u03bc\u03b1\u03ca\u03ba\u03ac
-languages.lt=\u039b\u03b9\u03b8\u03bf\u03c5\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.ru=\u03a1\u03c9\u03c3\u03b9\u03ba\u03ac
-languages.sem=\u03a3\u03b7\u03bc\u03b9\u03c4\u03b9\u03ba\u03ac (\u0386\u03bb\u03bb\u03b1)
-languages.fi=\u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
-languages.ira=\u0399\u03c1\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.ro=\u03a1\u03bf\u03c5\u03bc\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.ca=\u039a\u03b1\u03c4\u03b1\u03bb\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.id=\u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03b9\u03b1\u03ba\u03ac
-languages.uk=\u039f\u03c5\u03ba\u03c1\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.fa=\u03a0\u03b5\u03c1\u03c3\u03b9\u03ba\u03ac
-languages.la=\u039b\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac
-languages.hy=\u0391\u03c1\u03bc\u03b5\u03bd\u03b9\u03ba\u03ac
-languages.eu=\u0392\u03b1\u03c3\u03ba\u03b9\u03ba\u03ac
-languages.bs=\u0392\u03bf\u03c3\u03bd\u03b9\u03b1\u03ba\u03ac
-languages.et=\u0395\u03c3\u03b8\u03bf\u03bd\u03b9\u03ba\u03ac
-languages.grc=\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac, \u0391\u03c1\u03c7\u03b1\u03af\u03b1 (\u03ad\u03c9\u03c2 1453)
-languages.hu=\u039f\u03c5\u03b3\u03b3\u03c1\u03b9\u03ba\u03ac
-languages.es=\u0399\u03c3\u03c0\u03b1\u03bd\u03b9\u03ba\u03ac
-languages.bo=\u0398\u03b9\u03b2\u03b5\u03c4\u03b9\u03b1\u03bd\u03ac
-languages.hr=\u039a\u03c1\u03bf\u03b1\u03c4\u03b9\u03ba\u03ac
-languages.en=\u0391\u03b3\u03b3\u03bb\u03b9\u03ba\u03ac
-languages.ine=\u0399\u03bd\u03b4\u03bf\u03b5\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u03ac (\u00a8\u0391\u03bb\u03bb\u03b7)
-languages.peo=\u0391\u03c1\u03c7\u03b1\u03af\u03b1 \u03a0\u03b5\u03c1\u03c3\u03b9\u03ba\u03ac (600-400 \u03c0.\u03a7.)
-languages.el=\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
-languages.ko=\u039a\u03bf\u03c1\u03b5\u03b1\u03c4\u03b9\u03ba\u03ac
-languages.phn=\u03a6\u03bf\u03b9\u03bd\u03b9\u03ba\u03b9\u03ba\u03ac
-languages.no=\u039d\u03bf\u03c1\u03b2\u03b7\u03b3\u03b9\u03ba\u03ac
-languages.bg=\u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03b9\u03ba\u03ac
-languages.tr=\u03a4\u03bf\u03c5\u03c1\u03ba\u03b9\u03ba\u03ac
-languages.be=\u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03b9\u03ba\u03ac
-languages.nl=\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
-languages.phi=\u03a6\u03b9\u03bb\u03b9\u03c0\u03c0\u03b9\u03bd\u03ad\u03b6\u03b9\u03ba\u03b1 (\u0386\u03bb\u03bb\u03b1)
-languages.he=\u0395\u03b2\u03c1\u03b1\u03ca\u03ba\u03ac
+currenciesDisplayName.BGL=\u039c\u03b5\u03c4\u03b1\u03bb\u03bb\u03b9\u03ba\u1f78 \u039b\u1f72\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
+currenciesDisplayName.XCD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u1f08\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u1fc6\u03c2 \u039a\u03b1\u03c1\u03b1\u03ca\u03b2\u03b9\u03ba\u1fc6\u03c2
+currenciesDisplayName.LKR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u03a3\u03c1\u1f76 \u039b\u03ac\u03bd\u03ba\u03b1\u03c2
+currenciesDisplayName.TPE=\u1f18\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a4\u03b9\u03bc\u03cc\u03c1
+currenciesDisplayName.BAD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0392\u03bf\u03c3\u03bd\u03af\u03b1\u03c2-\u1f19\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7\u03c2
+currenciesDisplayName.CSK=\u03a3\u03ba\u03bb\u03b7\u03c1\u1f74 \u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u03a4\u03c3\u03b5\u03c7\u03bf\u03c3\u03bb\u03bf\u03b2\u03b1\u03ba\u03af\u03b1\u03c2
+currenciesDisplayName.YUD=\u039c\u03b5\u03c4\u03b1\u03bb\u03bb\u03b9\u03ba\u1f78 \u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u0393\u03b9\u03bf\u03c5\u03b3\u03ba\u03bf\u03c3\u03bb\u03b1\u03b2\u03af\u03b1\u03c2
+currenciesDisplayName.SVC=Colon \u1f1a\u03bb \u03a3\u03b1\u03bb\u03b2\u03b1\u03b4\u03cc\u03c1
+currenciesDisplayName.SCR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u03a3\u03b5\u03cb\u03c7\u03b5\u03bb\u1ff6\u03bd
+currenciesDisplayName.IEP=\u039b\u03af\u03c1\u03b1 \u1f38\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
+currenciesDisplayName.AMD=Dram \u1f08\u03c1\u03bc\u03b5\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.GRD=\u0394\u03c1\u03b1\u03c7\u03bc\u1f74 \u1f19\u03bb\u03bb\u03ac\u03b4\u03b1\u03c2
+currenciesDisplayName.ERN=Nakfa \u1f18\u03c1\u03c5\u03b8\u03c1\u03b1\u03af\u03b1\u03c2
+currenciesDisplayName.CLP=\u03a0\u03ad\u03c3\u03bf \u03a7\u03b9\u03bb\u1fc6\u03c2
+currenciesDisplayName.SUR=\u03a3\u03bf\u03b2\u03b9\u03b5\u03c4\u03b9\u03ba\u1f78 \u03a1\u03bf\u03cd\u03b2\u03bb\u03b9
+currenciesDisplayName.XBD=\u0395\u1f50\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f74 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u1fe6 (XBD)
+currenciesDisplayName.XBC=\u0395\u1f50\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f74 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u1fe6 (XBC)
+currenciesDisplayName.XBB=\u0395\u1f50\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f74 \u039d\u03bf\u03bc\u03b9\u03c3\u03bc\u03b1\u03c4\u03b9\u03ba\u1f74 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
+currenciesDisplayName.XBA=\u0395\u1f50\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f74 \u03a3\u03cd\u03bd\u03b8\u03b5\u03c4\u03b7 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
+currenciesDisplayName.CLF=Unidades de Fomento \u03a7\u03b9\u03bb\u1fc6\u03c2
+currenciesDisplayName.ZAR=\u03a1\u1f70\u03bd\u03c4 \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u1f08\u03c6\u03c1\u03b9\u03ba\u1fc6\u03c2
+currenciesDisplayName.IQD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u1f38\u03c1\u03ac\u03ba
+currenciesDisplayName.FKP=\u039b\u03af\u03c1\u03b1 \u039d\u03ae\u03c3\u03c9\u03bd \u03a6\u03ce\u03bb\u03ba\u03bb\u03b1\u03bd\u03c4
+currenciesDisplayName.HKD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a7\u1f78\u03bd\u03b3\u03ba \u039a\u03cc\u03bd\u03b3\u03ba
+currenciesDisplayName.ARS=\u03a0\u03ad\u03c3\u03bf \u1f08\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u1fc6\u03c2
+currenciesDisplayName.ALL=\u039b\u1f72\u03ba \u1f08\u03bb\u03b2\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.ZAL=\u03a1\u03b1\u03bd\u03c4 \u039d\u03cc\u03c4\u03b9\u03b1\u03c2 \u1f08\u03c6\u03c1\u03b9\u03ba\u1fc6\u03c2 (\u03bf\u1f30\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03cc)
+currenciesDisplayName.JPY=\u0393\u03b9\u1f72\u03bd \u1f38\u03b1\u03c0\u03c9\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.ARP=\u03a0\u03ad\u03c3\u03bf \u1f08\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u1fc6\u03c2 (1983-1985)
+currenciesDisplayName.EEK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u1f18\u03c3\u03c4\u03bf\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.IDR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u1f38\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1\u03c2
+currenciesDisplayName.GQE=Ekwele Guineana \u1f38\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u1fc6\u03c2 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
+currenciesDisplayName.UZS=Sum \u039f\u1f50\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
+currenciesDisplayName.GWE=\u0393\u03ba\u03b9\u03bd\u03ad\u03b1 \u1f18\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
+currenciesDisplayName.NIO=\u03a7\u03c1\u03c5\u03c3\u1f74 \u039a\u03cc\u03c1\u03b4\u03bf\u03b2\u03b1 \u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1\u03c2
+currenciesDisplayName.SHP=\u039b\u03af\u03c1\u03b1 \u1f08\u03b3\u03af\u03b1\u03c2 \u1f19\u03bb\u03ad\u03bd\u03b7\u03c2
+currenciesDisplayName.ARA=Austral \u1f08\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u1fc6\u03c2
+currenciesDisplayName.SBD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03ae\u03c3\u03c9\u03bd \u03a3\u03bf\u03bb\u03bf\u03bc\u1ff6\u03bd\u03c4\u03bf\u03c2
+currenciesDisplayName.THB=\u039c\u03c0\u1f70\u03c4 \u03a4\u03b1\u03ca\u03bb\u03ac\u03bd\u03b4\u03b7\u03c2
+currenciesDisplayName.BEL=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0392\u03b5\u03bb\u03b3\u03af\u03bf\u03c5 (\u03bf\u1f30\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03cc)
+currenciesDisplayName.MOP=Pataca \u039c\u03b1\u03ba\u03ac\u03bf\u03c5
+currenciesDisplayName.UGX=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u039f\u1f50\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1\u03c2
+currenciesDisplayName.WST=Tala \u0394\u03c5\u03c4\u03b9\u03ba\u1fc6\u03c2 \u03a3\u03b1\u03bc\u03cc\u03b1\u03c2
+currenciesDisplayName.TTD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u03a4\u03c1\u03b9\u03bd\u03b9\u03b4\u1f70\u03b4 \u03ba\u03b1\u1f76 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf
+currenciesDisplayName.UGS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u039f\u1f50\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1\u03c2 (1966-1987)
+currenciesDisplayName.SZL=Lilangeni \u0396\u03bf\u03c5\u03b1\u03b6\u03b9\u03bb\u03ac\u03bd\u03b4\u03b7\u03c2
+currenciesDisplayName.UAK=Karbovanetz \u039f\u1f50\u03ba\u03c1\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.AED=\u039d\u03c4\u03b9\u03c1\u1f70\u03bc \u1f29\u03bd\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd \u1f08\u03c1\u03b1\u03b2\u03b9\u03ba\u1ff6\u03bd \u1f18\u03bc\u03b9\u03c1\u03ac\u03c4\u03c9\u03bd
+currenciesDisplayName.UAH=Hryvnia \u039f\u1f50\u03ba\u03c1\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.USS=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0397\u03a0\u0391 (\u1f3c\u03b4\u03b9\u03b1 \u1f21\u03bc\u03ad\u03c1\u03b1)
+currenciesDisplayName.DDM=Ostmark \u1f08\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u1fc6\u03c2 \u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.UYU=\u03a0\u03ad\u03c3\u03bf Uruguayo \u039f\u1f50\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2
+currenciesDisplayName.USN=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0397\u03a0\u0391 (\u1f19\u03c0\u03cc\u03bc\u03b5\u03bd\u03b7 \u1f21\u03bc\u03ad\u03c1\u03b1)
+currenciesDisplayName.TMM=\u039c\u03b1\u03bd\u1f70\u03c4 \u03a4\u03bf\u03c5\u03c1\u03ba\u03bc\u03b5\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd
+currenciesDisplayName.XFO=\u03a7\u03c1\u03c5\u03c3\u1f78 \u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u0393\u03b1\u03bb\u03bb\u03af\u03b1\u03c2
+currenciesDisplayName.AWG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u1f08\u03c1\u03bf\u03cd\u03bc\u03c0\u03b1
+currenciesDisplayName.UYP=\u03a0\u03ad\u03c3\u03bf \u039f\u1f50\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2 (1975-1993)
+currenciesDisplayName.PTE=\u1f18\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1\u03c2
+currenciesDisplayName.JOD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u1f38\u03bf\u03c1\u03b4\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.ADP=\u03a0\u03b5\u03c3\u03ad\u03c4\u03b1 \u1f08\u03bd\u03b4\u03cc\u03c1\u03b1\u03c2
+currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) \u1f38\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03bf\u1fe6
+currenciesDisplayName.ECS=Sucre \u1f38\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03bf\u1fe6
+currenciesDisplayName.PGK=Kina \u03a0\u03b1\u03c0\u03bf\u03cd\u03b1 \u039d\u03ad\u03b1 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1\u03c2
+currenciesDisplayName.CVE=\u1f18\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf\u03c5 \u1f08\u03ba\u03c1\u03c9\u03c4\u03b7\u03c1\u03af\u03bf\u03c5
+currenciesDisplayName.YER=Rial \u1f59\u03b5\u03bc\u03ad\u03bd\u03b7\u03c2
+currenciesDisplayName.HUF=\u03a6\u03b9\u03bf\u03c1\u03af\u03bd\u03b9 \u039f\u1f51\u03b3\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
+currenciesDisplayName.PAB=\u039c\u03c0\u03b1\u03bb\u03bc\u03c0\u03cc\u03b1 \u03a0\u03b1\u03bd\u03b1\u03bc\u1fb6
+currenciesDisplayName.XEU=\u0395\u1f50\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f74 \u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03bc\u03b1\u03c4\u03b9\u03ba\u1f74 \u039c\u03bf\u03bd\u03ac\u03b4\u03b1
+currenciesDisplayName.EUR=\u0395\u1f50\u03c1\u03ce
+currenciesDisplayName.MZE=\u1f18\u03c3\u03ba\u03bf\u03cd\u03b4\u03bf \u039c\u03bf\u03b6\u03b1\u03bc\u03b2\u03af\u03ba\u03b7\u03c2
+currenciesDisplayName.INR=\u03a1\u03bf\u03cd\u03c0\u03b9\u03b1 \u1f38\u03bd\u03b4\u03af\u03b1\u03c2
+currenciesDisplayName.NAD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039d\u03b1\u03bc\u03af\u03bc\u03c0\u03b9\u03b1\u03c2
+currenciesDisplayName.PYG=\u0393\u03ba\u03bf\u03c5\u03b1\u03c1\u03b1\u03bd\u1f76 \u03a0\u03b1\u03c1\u03b1\u03b3\u03bf\u03c5\u03ac\u03b7\u03c2
+currenciesDisplayName.ITL=\u039b\u03b9\u03c1\u03ad\u03c4\u03b1 \u1f38\u03c4\u03b1\u03bb\u03af\u03b1\u03c2
+currenciesDisplayName.AOR=Kwanza Reajustado \u1f08\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1995-1999)
+currenciesDisplayName.GTQ=Quetzal \u0393\u03bf\u03c5\u03b1\u03c4\u03b5\u03bc\u03ac\u03bb\u03b1\u03c2
+currenciesDisplayName.AON=\u039d\u03ad\u03b1 Kwanza \u1f08\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1990-2000)
+currenciesDisplayName.HTG=Gourde \u1f09\u03ca\u03c4\u1fc6\u03c2
+currenciesDisplayName.AOK=Kwanza \u1f08\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2 (1977-1990)
+currenciesDisplayName.VEB=\u039c\u03c0\u03bf\u03bb\u03b9\u03b2\u1f70\u03bb \u0392\u03b5\u03bd\u03b5\u03b6\u03bf\u03c5\u03ad\u03bb\u03b1\u03c2
+currenciesDisplayName.XDR=\u0395\u1f30\u03b4\u03b9\u03ba\u1f70 \u0394\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u1f08\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+currenciesDisplayName.AOA=Kwanza \u1f08\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1\u03c2
+currenciesDisplayName.AUD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u0391\u1f50\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1\u03c2
+currenciesDisplayName.YDD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u1f59\u03b5\u03bc\u03ad\u03bd\u03b7\u03c2
+currenciesDisplayName.CHF=\u03a6\u03c1\u03ac\u03b3\u03ba\u03bf \u1f19\u03bb\u03b2\u03b5\u03c4\u03af\u03b1\u03c2
+currenciesDisplayName.NLG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u1f49\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
+currenciesDisplayName.ISK=\u039a\u03bf\u03c1\u03cc\u03bd\u03b1 \u1f38\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1\u03c2
+currenciesDisplayName.MXV=Unidad de Inversion (UDI) \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u1fe6
+currenciesDisplayName.ETB=Birr \u0391\u1f30\u03b8\u03b9\u03bf\u03c0\u03af\u03b1\u03c2
+currenciesDisplayName.MXP=\u1f08\u03c3\u03b7\u03bc\u03ad\u03bd\u03b9\u03bf \u03a0\u03ad\u03c3\u03bf \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u1fe6 (1861-1992)
+currenciesDisplayName.ATS=\u03a3\u03b5\u03bb\u03af\u03bd\u03b9 \u0391\u1f50\u03c3\u03c4\u03c1\u03af\u03b1\u03c2
+currenciesDisplayName.MXN=\u03a0\u03ad\u03c3\u03bf \u039c\u03b5\u03be\u03b9\u03ba\u03bf\u1fe6
+currenciesDisplayName.EGP=\u039b\u03af\u03c1\u03b1 \u0391\u1f30\u03b3\u03cd\u03c0\u03c4\u03bf\u03c5
+currenciesDisplayName.DZD=\u0394\u03b7\u03bd\u03ac\u03c1\u03b9\u03bf \u1f08\u03bb\u03b3\u03b5\u03c1\u03af\u03b1\u03c2
+currenciesDisplayName.GMD=Dalasi \u0393\u03ba\u03ac\u03bc\u03c0\u03b9\u03b1\u03c2
+currenciesDisplayName.ANG=\u0393\u03ba\u03af\u03bb\u03bd\u03c4\u03b1 \u1f49\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u1ff6\u03bd \u1f08\u03bd\u03c4\u03b9\u03bb\u03bb\u1ff6\u03bd
+currenciesDisplayName.ILS=\u039d\u03ad\u03bf Sheqel \u1f38\u03c3\u03c1\u03b1\u03ae\u03bb
+currenciesDisplayName.ESP=\u03a0\u03b5\u03c3\u03ad\u03c4\u03b1 \u1f39\u03c3\u03c0\u03b1\u03bd\u03af\u03b1\u03c2
+currenciesDisplayName.AZM=\u039c\u03b1\u03bd\u1f70\u03c4 \u1f08\u03b6\u03b5\u03c1\u03bc\u03c0\u03b1\u03ca\u03c4\u03b6\u03ac\u03bd
+currenciesDisplayName.ILP=\u039b\u03af\u03c1\u03b1 \u1f38\u03c3\u03c1\u03b1\u03ae\u03bb
+currenciesDisplayName.IRR=Rial \u1f38\u03c1\u03ac\u03ba
+currenciesDisplayName.BAM=\u039c\u03ac\u03c1\u03ba\u03bf \u0392\u03bf\u03c3\u03bd\u03af\u03b1\u03c2-\u1f19\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7\u03c2
+currenciesDisplayName.CAD=\u0394\u03bf\u03bb\u03ac\u03c1\u03b9\u03bf \u039a\u03b1\u03bd\u03b1\u03b4\u1fb6
+currenciesDisplayName.BGN=\u039d\u03ad\u03bf \u039b\u1f72\u03b2 \u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1\u03c2
+currenciesSymbol.CYP= \u00a3
+currenciesSymbol.CRC= C
+currenciesSymbol.KZT= T
+currenciesSymbol.ZAR= R
+currenciesSymbol.SZL= E
+currenciesSymbol.CNY= Y
+currenciesSymbol.GTQ= Q
+currenciesSymbol.EUR= \u20ac
+currenciesSymbol.GBP= \u00a3
+shortMonths=\u1f38\u03b1\u03bd®®®\u1f08\u03c0\u03c1®®\u1f38\u03bf\u03c5\u03bd®\u1f38\u03bf\u03c5\u03bb®\u0391\u1f50\u03b3®®\u1f48\u03ba\u03c4®®®®
+months=\u1f38\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2®®®\u1f08\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2®®\u1f38\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2®\u1f38\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2®\u0391\u1f54\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2®®\u1f48\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2®®®®
+territories.AU=\u0391\u1f50\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1
+territories.TD=\u03a4\u03c3\u03ac\u03bd\u03c4
+territories.AT=\u0391\u1f50\u03c3\u03c4\u03c1\u03af\u03b1
+territories.TC=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a4\u1f72\u03c1\u03ba\u03c2 \u03ba\u03b1\u1f76 \u039a\u03ac\u03b9\u03ba\u03bf\u03c2
+territories.AS=\u1f08\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u1f74 \u03a3\u03b1\u03bc\u03cc\u03b1
+territories.AR=\u1f08\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae
+territories.AQ=\u1f08\u03bd\u03c4\u03b1\u03c1\u03ba\u03c4\u03b9\u03ba\u03ae
+territories.AO=\u1f08\u03bd\u03b3\u03ba\u03cc\u03bb\u03b1
+territories.AN=\u1f49\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u1f72\u03c2 \u1f08\u03bd\u03c4\u03af\u03bb\u03bb\u03b5\u03c2
+territories.GS=\u039d\u03cc\u03c4\u03b9\u03b1 \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1 \u03ba\u03b1\u1f76 \u039d\u03ae\u03c3\u03bf\u03b9 \u039d\u03cc\u03c4\u03b9\u03b5\u03c2 \u03a3\u03ac\u03bd\u03c4\u03bf\u03c5\u03b9\u03c4\u03c2
+territories.AM=\u1f08\u03c1\u03bc\u03b5\u03bd\u03af\u03b1
+territories.GR=\u1f19\u03bb\u03bb\u03ac\u03b4\u03b1
+territories.ZA=\u039d\u03cc\u03c4\u03b9\u03b1 \u1f08\u03c6\u03c1\u03b9\u03ba\u03ae
+territories.AL=\u1f08\u03bb\u03b2\u03b1\u03bd\u03af\u03b1
+territories.GQ=\u1f38\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u1f74 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1
+territories.SY=\u03a3\u03c5\u03c1\u03af\u03b1, \u1f08\u03c1\u03b1\u03b2\u03b9\u03ba\u1f74 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u1fc6\u03c2
+territories.AI=\u1f08\u03bd\u03b3\u03ba\u03bf\u03c5\u03af\u03bb\u03b1
+territories.SV=\u1f1a\u03bb \u03a3\u03b1\u03bb\u03b2\u03b1\u03b4\u03cc\u03c1
+territories.AG=\u1f08\u03bd\u03c4\u03af\u03b3\u03ba\u03bf\u03c5\u03b1 \u03ba\u03b1\u1f76 \u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03bf\u03cd\u03bd\u03c4\u03b1
+territories.AF=\u1f08\u03c6\u03b3\u03b1\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd
+territories.MP=\u039d\u1fc6\u03c3\u03bf\u03b9 \u0392\u03cc\u03c1\u03b5\u03b9\u03b5\u03c2 \u039c\u03b1\u03c1\u03b9\u03ac\u03bd\u03b5\u03c2
+territories.ST=\u03a3\u03ac\u03bf \u03a4\u03bf\u03bc\u1f72 \u03ba\u03b1\u1f76 \u03a0\u03c1\u03af\u03bd\u03c3\u03b9\u03c0\u03b5
+territories.AE=\u1f28\u03bd\u03c9\u03bc\u03ad\u03bd\u03b1 \u1f08\u03c1\u03b1\u03b2\u03b9\u03ba\u1f70 \u1f18\u03bc\u03b9\u03c1\u03ac\u03c4\u03b1
+territories.MO=\u039c\u03b1\u03ba\u03ac\u03bf, \u0395\u1f30\u03b4\u03b9\u03ba\u1f74 \u0394\u03b9\u03bf\u03b9\u03ba\u03b7\u03c4\u03b9\u03ba\u1f74 \u03a0\u03b5\u03c1\u03b9\u03c6\u03ad\u03c1\u03b5\u03b9\u03b1 \u03c4\u1fc6\u03c2 \u039a\u03af\u03bd\u03b1\u03c2
+territories.AD=\u1f08\u03bd\u03b4\u03cc\u03c1\u03b1
+territories.ML=\u039c\u03b1\u03bb\u03af
+territories.GF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u1f74 \u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1
+territories.SM=\u1f0d\u03b3\u03b9\u03bf\u03c2 \u039c\u03b1\u03c1\u03af\u03bd\u03bf\u03c2
+territories.MH=\u039d\u1fc6\u03c3\u03bf\u03b9 \u039c\u03ac\u03c1\u03c3\u03b1\u03bb
+territories.GB=\u1f29\u03bd\u03c9\u03bc\u03ad\u03bd\u03bf \u0392\u03b1\u03c3\u03af\u03bb\u03b5\u03b9\u03bf
+territories.SJ=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a3\u03b2\u03ac\u03bb\u03bc\u03c0\u03b1\u03c1 \u03ba\u03b1\u1f76 \u0393\u03b9\u1f70\u03bd \u039c\u03b1\u03b3\u03b9\u03ad\u03bd
+territories.MD=\u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1, \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u1fc6\u03c2
+territories.SH=\u1f09\u03b3\u03af\u03b1 \u1f19\u03bb\u03ad\u03bd\u03b7
+territories.SB=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a3\u03bf\u03bb\u03bf\u03bc\u1ff6\u03bd\u03c4\u03bf\u03c2
+territories.SA=\u03a3\u03b1\u03bf\u03c5\u03b4\u03b9\u03ba\u1f74 \u1f08\u03c1\u03b1\u03b2\u03af\u03b1
+territories.YE=\u1f59\u03b5\u03bc\u03ad\u03bd\u03b7
+territories.LU=\u039b\u03bf\u03c5\u03be\u03b5\u03bc\u03b2\u03bf\u1fe6\u03c1\u03b3\u03bf
+territories.FO=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a6\u03b5\u03c1\u03cc\u03b5\u03c2
+territories.FM=\u039c\u03b9\u03ba\u03c1\u03bf\u03bd\u03b7\u03c3\u03af\u03b1, \u1f49\u03bc\u03cc\u03c3\u03c0\u03bf\u03bd\u03b4\u03b5\u03c2 \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u1fd6\u03b5\u03c2 \u03c4\u1fc6\u03c2
+territories.LK=\u03a3\u03c1\u1f76 \u039b\u03ac\u03bd\u03ba\u03b1
+territories.LC=\u1f09\u03b3\u03af\u03b1 \u039b\u03bf\u03c5\u03ba\u03af\u03b1
+territories.LA=\u039b\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u1f74 \u1f08\u03bc\u03b5\u03c1\u03b9\u03ba\u03ae
+territories.ET=\u0391\u1f30\u03b8\u03b9\u03bf\u03c0\u03af\u03b1
+territories.KY=\u039d\u1fc6\u03c3\u03bf\u03b9 \u039a\u03ad\u03b9\u03bc\u03b1\u03bd
+territories.ES=\u1f39\u03c3\u03c0\u03b1\u03bd\u03af\u03b1
+territories.ER=\u1f18\u03c1\u03c5\u03b8\u03c1\u03b1\u03af\u03b1
+territories.KN=\u03a3\u03b1\u1f76\u03bd\u03c4 \u039a\u1f76\u03c4\u03c2 \u03ba\u03b1\u1f76 \u039d\u03ad\u03b2\u03b9\u03c2
+territories.EH=\u0394\u03c5\u03c4\u03b9\u03ba\u1f74 \u03a3\u03b1\u03c7\u03ac\u03c1\u03b1
+territories.EG=\u0391\u1f34\u03b3\u03c5\u03c0\u03c4\u03bf\u03c2
+territories.EE=\u1f18\u03c3\u03b8\u03bf\u03bd\u03af\u03b1
+territories.EC=\u1f38\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03cc\u03c2
+territories.DZ=\u1f08\u03bb\u03b3\u03b5\u03c1\u03af\u03b1
+territories.WF=\u039d\u1fc6\u03c3\u03bf\u03b9 \u039f\u1f50\u03ac\u03bb\u03bb\u03b9\u03c2 \u03ba\u03b1\u1f76 \u03a6\u03bf\u03c5\u03c4\u03bf\u03c5\u03bd\u03ac
+territories.DO=\u0394\u03bf\u03bc\u03b9\u03bd\u03b9\u03ba\u03b1\u03bd\u1f74 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1
+territories.JP=\u1f38\u03b1\u03c0\u03c9\u03bd\u03af\u03b1
+territories.JO=\u1f38\u03bf\u03c1\u03b4\u03b1\u03bd\u03af\u03b1
+territories.PS=\u03a0\u03b1\u03bb\u03b1\u03b9\u03c3\u03c4\u03b9\u03bd\u03b9\u03b1\u03ba\u1f70 \u1f18\u03b4\u03ac\u03c6\u03b7
+territories.PM=\u03a3\u03b1\u1f76\u03bd\u03c4 \u03a0\u03b9\u1f72\u03c1 \u03ba\u03b1\u1f76 \u039c\u03b9\u03ba\u03b5\u03bb\u03cc\u03bd
+territories.PF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u1f74 \u03a0\u03bf\u03bb\u03c5\u03bd\u03b7\u03c3\u03af\u03b1
+territories.VI=\u1f08\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u1f72\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03bf\u03b9 \u039d\u1fc6\u03c3\u03bf\u03b9
+territories.CX=\u039d\u1fc6\u03c3\u03bf\u03c2 \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03c5\u03b3\u03ad\u03bd\u03bd\u03c9\u03bd
+territories.VG=\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u1f72\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03bf\u03b9 \u039d\u1fc6\u03c3\u03bf\u03b9
+territories.CV=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf\u03c5 \u1f08\u03ba\u03c1\u03c9\u03c4\u03b7\u03c1\u03af\u03bf\u03c5
+territories.VC=\u1f0d\u03b3\u03b9\u03bf\u03c2 \u0392\u03b9\u03ba\u03ad\u03bd\u03c4\u03b9\u03bf\u03c2 \u03ba\u03b1\u1f76 \u0393\u03c1\u03b5\u03bd\u03b1\u03b4\u03af\u03bd\u03b5\u03c2
+territories.VA=\u1f09\u03b3\u03af\u03b1 \u1f1d\u03b4\u03c1\u03b1 (\u0392\u03b1\u03c4\u03b9\u03ba\u03b1\u03bd\u03cc)
+territories.IT=\u1f38\u03c4\u03b1\u03bb\u03af\u03b1
+territories.IS=\u1f38\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
+territories.IR=\u1f38\u03c1\u03ac\u03bd, \u1f38\u03c3\u03bb\u03b1\u03bc\u03b9\u03ba\u1f74 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03bf\u1fe6
+territories.IQ=\u1f38\u03c1\u03ac\u03ba
+territories.UZ=\u039f\u1f50\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd
+territories.CK=\u039d\u1fc6\u03c3\u03bf\u03b9 \u039a\u03bf\u03cd\u03ba
+territories.UY=\u039f\u1f50\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7
+territories.IO=\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u1f70 \u1f18\u03b4\u03ac\u03c6\u03b7 \u1f38\u03bd\u03b4\u03b9\u03ba\u03bf\u1fe6 \u1f68\u03ba\u03b5\u03b1\u03bd\u03bf\u1fe6
+territories.CI=\u1f08\u03ba\u03c4\u1f74 \u1f18\u03bb\u03b5\u03c6\u03b1\u03bd\u03c4\u03cc\u03b4\u03bf\u03bd\u03c4\u03bf\u03c2
+territories.IN=\u1f38\u03bd\u03b4\u03af\u03b1
+territories.CH=\u1f19\u03bb\u03b2\u03b5\u03c4\u03af\u03b1
+territories.IL=\u1f38\u03c3\u03c1\u03b1\u03ae\u03bb
+territories.CF=\u039a\u03b5\u03bd\u03c4\u03c1\u03bf\u03b1\u03c6\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u1f74 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1
+territories.US=\u1f29\u03bd\u03c9\u03bc\u03ad\u03bd\u03b5\u03c2 \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u1fd6\u03b5\u03c2
+territories.CD=\u039a\u03bf\u03bd\u03b3\u03ba\u03cc, \u039b\u03b1\u03ca\u03ba\u1f74 \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1 \u03c4\u03bf\u1fe6
+territories.OM=\u1f48\u03bc\u03ac\u03bd
+territories.CC=\u039d\u1fc6\u03c3\u03bf\u03b9 \u039a\u03cc\u03ba\u03bf\u03c2 (\u039a\u03ae\u03bb\u03b9\u03bd\u03b3\u03ba)
+territories.IE=\u1f38\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
+territories.ID=\u1f38\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1
+territories.UM=\u1f08\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03b5\u03c2 \u039d\u03b7\u03c3\u03af\u03b4\u03b5\u03c2 \u03c4\u1ff6\u03bd \u1f29\u03bd\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u03b9\u1ff6\u03bd
+territories.UG=\u039f\u1f50\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1
+territories.BV=\u039d\u1fc6\u03c3\u03bf\u03c2 \u039c\u03c0\u03bf\u03c5\u03b2\u03ad
+territories.UA=\u039f\u1f50\u03ba\u03c1\u03b1\u03bd\u03af\u03b1
+territories.HU=\u039f\u1f51\u03b3\u03b3\u03b1\u03c1\u03af\u03b1
+territories.HT=\u1f09\u03ca\u03c4\u03ae
+territories.BM=\u0392\u03b5\u03c1\u03bc\u03bf\u1fe6\u03b4\u03b5\u03c2
+territories.HN=\u1f49\u03bd\u03b4\u03bf\u03cd\u03c1\u03b1
+territories.HM=\u039d\u1fc6\u03c3\u03bf\u03b9 \u03a7\u1f72\u03c1\u03bd\u03c4 \u03ba\u03b1\u1f76 \u039c\u03b1\u03ba\u03bd\u03c4\u03cc\u03bd\u03b1\u03bb\u03bd\u03c4
+territories.HK=\u03a7\u1f78\u03bd\u03b3\u03ba \u039a\u03cc\u03bd\u03b3\u03ba, \u0395\u1f30\u03b4\u03b9\u03ba\u1f74 \u0394\u03b9\u03bf\u03b9\u03ba\u03b7\u03c4\u03b9\u03ba\u1f74 \u03a0\u03b5\u03c1\u03b9\u03c6\u03ad\u03c1\u03b5\u03b9\u03b1 \u03c4\u1fc6\u03c2 \u039a\u03af\u03bd\u03b1\u03c2
+territories.TT=\u03a4\u03c1\u03b9\u03bd\u03b9\u03b4\u1f70\u03b4 \u03ba\u03b1\u1f76 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf
+territories.NL=\u1f49\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1
+territories.BA=\u0392\u03bf\u03c3\u03bd\u03af\u03b1 - \u1f18\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7
+territories.TL=\u1f08\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03ba\u1f78 \u03a4\u03b9\u03bc\u03cc\u03c1
+territories.NF=\u039d\u1fc6\u03c3\u03bf\u03c2 \u039d\u03cc\u03c1\u03c6\u03bf\u03bb\u03ba
+territories.AZ=\u1f08\u03b6\u03b5\u03c1\u03bc\u03c0\u03b1\u03ca\u03c4\u03b6\u03ac\u03bd
+territories.AW=\u1f08\u03c1\u03bf\u03cd\u03bc\u03c0\u03b1
+territories.TF=\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u1f70 \u039d\u03cc\u03c4\u03b9\u03b1 \u1f18\u03b4\u03ac\u03c6\u03b7
+languages.ja=\u1f38\u03b1\u03c0\u03c9\u03bd\u03b9\u03ba\u03ac
+languages.en=\u1f08\u03b3\u03b3\u03bb\u03b9\u03ba\u03ac
+languages.el=\u1f19\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
+languages.phi=\u03a6\u03b9\u03bb\u03b9\u03c0\u03c0\u03b9\u03bd\u03ad\u03b6\u03b9\u03ba\u03b1 (\u1f04\u03bb\u03bb\u03b1)
+languages.cy=\u039f\u1f50\u03b1\u03bb\u03b9\u03ba\u03ac
+languages.nl=\u1f49\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
+languages.he=\u1f19\u03b2\u03c1\u03b1\u03ca\u03ba\u03ac
+languages.it=\u1f38\u03c4\u03b1\u03bb\u03b9\u03ba\u03ac
+languages.is=\u1f38\u03c3\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
+languages.sla=\u03a3\u03bb\u03b1\u03b2\u03b9\u03ba\u1f70 (\u1f04\u03bb\u03bb\u03b1)
+languages.egy=\u0391\u1f30\u03b3\u03c5\u03c0\u03c4\u03b9\u03b1\u03ba\u1f70 (\u1f00\u03c1\u03c7\u03b1\u1fd6\u03b1)
+languages.arc=\u1f08\u03c1\u03b1\u03bc\u03b1\u03ca\u03ba\u03ac
+languages.ine=\u1f38\u03bd\u03b4\u03bf\u03b5\u03c5\u03c1\u03c9\u03c0\u03b1\u03ca\u03ba\u1f70 (\u1f04\u03bb\u03bb\u03b1)
+languages.uk=\u039f\u1f50\u03ba\u03c1\u03b1\u03bd\u03b9\u03ba\u03ac
+languages.ar=\u1f08\u03c1\u03b1\u03b2\u03b9\u03ba\u03ac
+languages.id=\u1f38\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03b9\u03b1\u03ba\u03ac
+languages.nai=\u1f38\u03bd\u03b4\u03b9\u03b1\u03bd\u03b9\u03ba\u1f70 \u03b2\u03cc\u03c1\u03b5\u03b9\u03b1\u03c2 \u1f08\u03bc\u03b5\u03c1\u03b9\u03ba\u1fc6\u03c2 (\u1f04\u03bb\u03bb\u03b1)
+languages.sem=\u03a3\u03b7\u03bc\u03b9\u03c4\u03b9\u03ba\u1f70 (\u1f04\u03bb\u03bb\u03b1)
+languages.grc=\u1f19\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac, \u1f00\u03c1\u03c7\u03b1\u1fd6\u03b1 \u03baa\u1f76 \u03bc\u03b5\u03c3\u03b1\u03b9\u03c9\u03bd\u03b9\u03ba\u1f70 (\u1f15\u03c9\u03c2 \u03c4\u1f78 1453)
+languages.sq=\u1f08\u03bb\u03b2\u03b1\u03bd\u03b9\u03ba\u03ac
+languages.ota=\u03a4\u03bf\u03c5\u03c1\u03ba\u03b9\u03ba\u03ac, \u1f40\u03b8\u03c9\u03bc\u03b1\u03bd\u03b9\u03ba\u1f70 (1500-1928)
+languages.mul=\u03a0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ad\u03c2 \u03b3\u03bb\u1ff6\u03c3\u03c3\u03b5\u03c2
+languages.ira=\u1f38\u03c1\u03b1\u03bd\u03b9\u03ba\u03ac
+languages.hy=\u1f08\u03c1\u03bc\u03b5\u03bd\u03b9\u03ba\u03ac
+languages.et=\u1f18\u03c3\u03b8\u03bf\u03bd\u03b9\u03ba\u03ac
+languages.hu=\u039f\u1f51\u03b3\u03b3\u03c1\u03b9\u03ba\u03ac
+languages.es=\u1f39\u03c3\u03c0\u03b1\u03bd\u03b9\u03ba\u03ac
+languages.gd=\u03a3\u03ba\u03c9\u03c4\u03b9\u03ba\u1f70 \u03ba\u03b5\u03bb\u03c4\u03b9\u03ba\u03ac
+languages.yi=\u1f38\u03bf\u03c5\u03b4\u03b1\u03ca\u03ba\u03ac
+languages.peo=\u1f08\u03c1\u03c7\u03b1\u1fd6\u03b1 \u03c0\u03b5\u03c1\u03c3\u03b9\u03ba\u1f70 (600-400 \u03c0.\u03a7.)
+languages.ga=\u1f38\u03c1\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03ac
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_KW.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el_CY.properties
index 31178f8..609c5af 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_KW.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_el_CY.properties
@@ -1,8 +1,8 @@
-# LocaleInformation_ar_KW.properties --
+# LocaleInformation_el_CY.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4 #,##0.000;\u00a4 #,##0.000-
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en.properties
index 1dc56b8..6195ff4 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en.properties
@@ -6,783 +6,369 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.JOD=Jordanian Dinar
-currenciesDisplayName.BOV=Bolivian Mvdol
-currenciesDisplayName.XAU=Gold
-currenciesDisplayName.FOK=Faeroe Islands Kronur
-currenciesDisplayName.LBP=Lebanese Pound
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamese Dong
-currenciesDisplayName.TZS=Tanzanian Shilling
-currenciesDisplayName.BOP=Bolivian Peso
-currenciesDisplayName.KHR=Cambodian Riel
-currenciesDisplayName.XAM=Asian Monetary Unit
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Cambodian Old Riel
-currenciesDisplayName.ZMP=Zambian Pound
-currenciesDisplayName.AUP=Australian Pound
-currenciesDisplayName.XAG=Silver
-currenciesDisplayName.XAF=CFA Franc BEAC
-currenciesDisplayName.MTP=Maltese Pound
-currenciesDisplayName.GHR=Ghana Revalued Cedi
-currenciesDisplayName.ZMK=Zambian Kwacha
-currenciesDisplayName.XAD=Asian Dinar Unit of Account
-currenciesDisplayName.GHP=Ghana Pound
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghana Old Cedi
-currenciesDisplayName.MTL=Maltese Lira
-currenciesDisplayName.AUD=Australian Dollar
-currenciesDisplayName.USS=US Dollar (Same day)
-currenciesDisplayName.ITL=Italian Lira
-currenciesDisplayName.USN=US Dollar (Next day)
-currenciesDisplayName.GHC=Ghana Cedi
-currenciesDisplayName.SGD=Singapore Dollar
-currenciesDisplayName.PAB=Panamanian Balboa
-currenciesDisplayName.LAK=Laotian Kip
-currenciesDisplayName.KGS=Kyrgystan Som
-currenciesDisplayName.CHF=Swiss Franc
-currenciesDisplayName.CHE=WIR Euro
-currenciesDisplayName.CHC=WIR Franc
-currenciesDisplayName.ATS=Austrian Schilling
-currenciesDisplayName.USD=US Dollar
-currenciesDisplayName.ETD=Ethiopian Dollar
-currenciesDisplayName.BND=Brunei Dollar
-currenciesDisplayName.JMP=Jamaican Pound
-currenciesDisplayName.ETB=Ethiopian Birr
-currenciesDisplayName.XXX=No Currency
-currenciesDisplayName.DZG=Algerian Franc Germinal
-currenciesDisplayName.DZF=Algerian New Franc
-currenciesDisplayName.DZD=Algerian Dinar
-currenciesDisplayName.PYG=Paraguay Guarani
-currenciesDisplayName.LYP=Libyan Pound
-currenciesDisplayName.JMD=Jamaican Dollar
-currenciesDisplayName.ISK=Icelandic Krona
-currenciesDisplayName.ESP=Spanish Peseta
-currenciesDisplayName.BMP=Bermudan Pound
-currenciesDisplayName.LYD=Libyan Dinar
-currenciesDisplayName.LYB=Libyan British Military Authority Lira
-currenciesDisplayName.BMD=Bermudan Dollar
-currenciesDisplayName.NLG=Netherlands Guilder
-currenciesDisplayName.MRO=Mauritania Ouguiya
-currenciesDisplayName.ESB=Spanish Peseta (convertible account)
-currenciesDisplayName.ESA=Spanish Peseta (A account)
-currenciesDisplayName.IRR=Iranian Rial
-currenciesDisplayName.CFP=CFP Franc
-currenciesDisplayName.SEK=Swedish Krona
-currenciesDisplayName.ERN=Eritrean Nakfa
+currenciesDisplayName.YDD=Yemeni Dinar
+currenciesDisplayName.TWD=Taiwan New Dollar
currenciesDisplayName.KES=Kenyan Shilling
-currenciesDisplayName.CFF=Central African Republic CFA Franc
+currenciesDisplayName.BYB=Belarussian New Ruble (1994-1999)
+currenciesDisplayName.LKR=Sri Lanka Rupee
+currenciesDisplayName.RWF=Rwandan Franc
+currenciesDisplayName.TJS=Tajikistan Somoni
+currenciesDisplayName.SDP=Sudanese Pound
+currenciesDisplayName.TJR=Tajikistan Ruble
+currenciesDisplayName.ERN=Eritrean Nakfa
+currenciesDisplayName.AFN=Afghani
+currenciesDisplayName.GRD=Greek Drachma
+currenciesDisplayName.IEP=Irish Pound
currenciesDisplayName.ARS=Argentine Peso
+currenciesDisplayName.SDD=Sudanese Dinar
currenciesDisplayName.ARP=Argentine Peso (1983-1985)
-currenciesDisplayName.ARM=Argentine Peso Moneda Nacional
-currenciesDisplayName.TWD=Taiwan New Dollar
-currenciesDisplayName.SDR=IMF SDR
-currenciesDisplayName.SDP=Sudanese Pound
currenciesDisplayName.GEL=Georgian Lari
+currenciesDisplayName.AFA=Afghani (1927-2002)
currenciesDisplayName.GEK=Georgian Kupon Larit
-currenciesDisplayName.MQF=Martinique Franc
+currenciesDisplayName.CRC=Costa Rican Colon
currenciesDisplayName.FKP=Falkland Islands Pound
+currenciesDisplayName.EEK=Estonian Kroon
+currenciesDisplayName.HKD=Hong Kong Dollar
+currenciesDisplayName.MDL=Moldovan Leu
currenciesDisplayName.ARA=Argentine Austral
-currenciesDisplayName.SDD=Sudanese Dinar
currenciesDisplayName.IQD=Iraqi Dinar
-currenciesDisplayName.EQE=Ekwele
-currenciesDisplayName.TVD=Tuvalu Dollar
currenciesDisplayName.SCR=Seychelles Rupee
+currenciesDisplayName.VUV=Vanuatu Vatu
+currenciesDisplayName.DKK=Danish Krone
+currenciesDisplayName.KPW=North Korean Won
+currenciesDisplayName.GQE=Equatorial Guinea Ekwele Guineana
+currenciesDisplayName.IDR=Indonesian Rupiah
currenciesDisplayName.LVR=Latvian Ruble
-currenciesDisplayName.FJP=Fiji Pound
+currenciesDisplayName.SOS=Somali Shilling
+currenciesDisplayName.EQE=Ekwele
+currenciesDisplayName.AED=United Arab Emirates Dirham
+currenciesDisplayName.BWP=Botswanan Pula
currenciesDisplayName.LVL=Latvian Lats
-currenciesDisplayName.CDL=Congolese Zaire
-currenciesDisplayName.CDG=Congolese Republic Franc
-currenciesDisplayName.CDF=Congolese Franc Congolais
-currenciesDisplayName.FJD=Fiji Dollar
+currenciesDisplayName.RUR=Russian Ruble (1991-1998)
currenciesDisplayName.NIO=Nicaraguan Cordoba Oro
+currenciesDisplayName.XTS=Testing Currency Code
+currenciesDisplayName.ADP=Andorran Peseta
+currenciesDisplayName.FJD=Fiji Dollar
currenciesDisplayName.MOP=Macao Pataca
-currenciesDisplayName.NIG=Nicaraguan Gold Cordoba
+currenciesDisplayName.RUB=Russian Ruble
+currenciesDisplayName.CDF=Congolese Franc Congolais
currenciesDisplayName.NIC=Nicaraguan Cordoba
-currenciesDisplayName.XTS=Testing Currency Code
-currenciesDisplayName.XTR=COMECON Transferable Ruble
-currenciesDisplayName.LUL=Luxembourg Financial Franc
-currenciesDisplayName.FIN=Finnish Markka (1860-1962)
-currenciesDisplayName.FIM=Finnish Markka
+currenciesDisplayName.DJF=Djibouti Franc
+currenciesDisplayName.ECV=Ecuador Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Solomon Islands Dollar
+currenciesDisplayName.UZS=Uzbekistan Sum
+currenciesDisplayName.LUL=Luxembourg Financial Franc
+currenciesDisplayName.ECS=Ecuador Sucre
+currenciesDisplayName.PHP=Philippine Peso
+currenciesDisplayName.THB=Thai Baht
currenciesDisplayName.LUF=Luxembourg Franc
-currenciesDisplayName.LUC=Luxembourg Convertible Franc
-currenciesDisplayName.TTO=Trinidad and Tobago Old Dollar
-currenciesDisplayName.AOS=Angolan Escudo
-currenciesDisplayName.AOR=Angolan Kwanza Reajustado (1995-1999)
currenciesDisplayName.RHD=Rhodesian Dollar
-currenciesDisplayName.MNT=Mongolian Tugrik
-currenciesDisplayName.HUF=Hungarian Forint
-currenciesDisplayName.BIF=Burundi Franc
-currenciesDisplayName.AON=Angolan New Kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolan Kwanza (1977-1990)
+currenciesDisplayName.FIM=Finnish Markka
+currenciesDisplayName.LUC=Luxembourg Convertible Franc
currenciesDisplayName.TTD=Trinidad and Tobago Dollar
currenciesDisplayName.SZL=Swaziland Lilangeni
-currenciesDisplayName.NHF=New Hebrides CFP Franc
-currenciesDisplayName.GBP=British Pound Sterling
-currenciesDisplayName.SAS=Saudi Sovereign Riyal
+currenciesDisplayName.MNT=Mongolian Tugrik
currenciesDisplayName.SAR=Saudi Riyal
+currenciesDisplayName.UAK=Ukrainian Karbovanetz
+currenciesDisplayName.COU=Unidad de Valor Real
+currenciesDisplayName.UAH=Ukrainian Hryvnia
+currenciesDisplayName.HUF=Hungarian Forint
+currenciesDisplayName.COP=Colombian Peso
+currenciesDisplayName.QAR=Qatari Rial
currenciesDisplayName.LTT=Lithuanian Talonas
-currenciesDisplayName.INR=Indian Rupee
currenciesDisplayName.PTE=Portuguese Escudo
-currenciesDisplayName.AOA=Angolan Kwanza
-currenciesDisplayName.PTC=Portuguese Conto
+currenciesDisplayName.AOR=Angolan Kwanza Reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguay Peso Uruguayo
+currenciesDisplayName.GBP=British Pound Sterling
+currenciesDisplayName.BIF=Burundi Franc
+currenciesDisplayName.INR=Indian Rupee
+currenciesDisplayName.ZRZ=Zairean Zaire
+currenciesDisplayName.AON=Angolan New Kwanza (1990-2000)
currenciesDisplayName.LTL=Lithuanian Lita
+currenciesDisplayName.XFU=French UIC-Franc
currenciesDisplayName.KZT=Kazakhstan Tenge
-currenciesDisplayName.KZR=Kazakhstan Ruble
-currenciesDisplayName.VGD=British Virgin Islands Dollar
-currenciesDisplayName.NGP=Nigerian Pound
-currenciesDisplayName.MMX=Myanmar Dollar Foreign Exchange Certificates
+currenciesDisplayName.MZM=Mozambique Metical
+currenciesDisplayName.UYP=Uruguay Peso (1975-1993)
+currenciesDisplayName.AOK=Angolan Kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmese Kyat
+currenciesDisplayName.GNS=Guinea Syli
+currenciesDisplayName.XFO=French Gold Franc
+currenciesDisplayName.PGK=Papua New Guinea Kina
+currenciesDisplayName.SYP=Syrian Pound
+currenciesDisplayName.MZE=Mozambique Escudo
+currenciesDisplayName.OMR=Oman Rial
currenciesDisplayName.NGN=Nigerian Naira
+currenciesDisplayName.ZRN=Zairean New Zaire
+currenciesDisplayName.AOA=Angolan Kwanza
+currenciesDisplayName.CNY=Chinese Yuan Renminbi
+currenciesDisplayName.MAF=Moroccan Franc
+currenciesDisplayName.GNF=Guinea Franc
currenciesDisplayName.HTG=Haitian Gourde
-currenciesDisplayName.SYP=Syrian Pound
-currenciesDisplayName.PSP=Palestine Pound
-currenciesDisplayName.BHD=Bahraini Dinar
+currenciesDisplayName.MAD=Moroccan Dirham
+currenciesDisplayName.TRY=New Turkish Lira
currenciesDisplayName.MMK=Myanmar Kyat
-currenciesDisplayName.ANG=Netherlands Antillan Guilder
-currenciesDisplayName.CZK=Czech Republic Koruna
-currenciesDisplayName.IMP=Isle of Man Pound Sterling
+currenciesDisplayName.MYR=Malaysian Ringgit
+currenciesDisplayName.XRE=RINET Funds
currenciesDisplayName.LSM=Maloti
-currenciesDisplayName.BGX=Bulgarian Lev Foreign Exchange Certificates
-currenciesDisplayName.TRY=New Turkish Lira
currenciesDisplayName.LSL=Lesotho Loti
-currenciesDisplayName.GAF=Gabon CFA Franc
-currenciesDisplayName.BGO=Bulgarian Lev (1879-1952)
+currenciesDisplayName.XEU=European Currency Unit
+currenciesDisplayName.BHD=Bahraini Dinar
+currenciesDisplayName.SLL=Sierra Leone Leone
+currenciesDisplayName.BTN=Bhutan Ngultrum
+currenciesDisplayName.TRL=Turkish Lira
+currenciesDisplayName.KMF=Comoro Franc
+currenciesDisplayName.ANG=Netherlands Antillan Guilder
+currenciesDisplayName.CZK=Czech Republic Koruna
+currenciesDisplayName.AZM=Azerbaijanian Manat
+currenciesDisplayName.KYD=Cayman Islands Dollar
+currenciesDisplayName.GMD=Gambia Dalasi
currenciesDisplayName.BGN=Bulgarian New Lev
-currenciesDisplayName.BGM=Bulgarian Socialist Lev
-currenciesDisplayName.XRE=RINET Funds
currenciesDisplayName.CAD=Canadian Dollar
+currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bulgarian Hard Lev
-currenciesDisplayName.TRL=Turkish Lira
-currenciesDisplayName.KYD=Cayman Islands Dollar
-currenciesDisplayName.CYP=Cyprus Pound
+currenciesDisplayName.VEB=Venezuelan Bolivar
+currenciesDisplayName.MLF=Mali Franc
currenciesDisplayName.ILS=Israeli New Sheqel
+currenciesDisplayName.MXP=Mexican Silver Peso (1861-1992)
+currenciesDisplayName.PES=Peruvian Sol
currenciesDisplayName.GYD=Guyana Dollar
-currenciesDisplayName.AMD=Armenian Dram
+currenciesDisplayName.MXN=Mexican Peso
currenciesDisplayName.ILP=Israeli Pound
-currenciesDisplayName.MLF=Mali Franc
-currenciesDisplayName.ILL=Israeli Sheqel
-currenciesDisplayName.VEB=Venezuelan Bolivar
-currenciesDisplayName.ALX=Albanian Dollar Foreign Exchange Certificates
+currenciesDisplayName.SKK=Slovak Koruna
+currenciesDisplayName.CYP=Cyprus Pound
+currenciesDisplayName.XDR=Special Drawing Rights
+currenciesDisplayName.PEN=Peruvian Sol Nuevo
currenciesDisplayName.LRD=Liberian Dollar
-currenciesDisplayName.ALV=Albanian Lek Valute
+currenciesDisplayName.PEI=Peruvian Inti
+currenciesDisplayName.AMD=Armenian Dram
+currenciesDisplayName.XPT=Platinum
+currenciesDisplayName.BSD=Bahamian Dollar
currenciesDisplayName.HRK=Croatian Kuna
-currenciesDisplayName.REF=Reunion Franc
+currenciesDisplayName.CLP=Chilean Peso
currenciesDisplayName.HRD=Croatian Dinar
-currenciesDisplayName.ALL=Albanian Lek
-currenciesDisplayName.JEP=Jersey Pound Sterling
-currenciesDisplayName.ALK=Albanian Lek (1946-1961)
-currenciesDisplayName.MKN=Macedonian Denar (1992-1993)
-currenciesDisplayName.VDP=North Vietnam Viet Minh Piastre Dong Viet
-currenciesDisplayName.VDN=North Vietnam New Dong
-currenciesDisplayName.XPT=Platinum
-currenciesDisplayName.MKD=Macedonian Denar
-currenciesDisplayName.VDD=North Vietnam Piastre Dong Viet
-currenciesDisplayName.TPP=Timor Pataca
currenciesDisplayName.XPF=CFP Franc
-currenciesDisplayName.BEL=Belgian Franc (financial)
+currenciesDisplayName.FRF=French Franc
currenciesDisplayName.XPD=Palladium
-currenciesDisplayName.GWP=Guinea-Bissau Peso
-currenciesDisplayName.KWD=Kuwaiti Dinar
-currenciesDisplayName.GWM=Portuguese Guinea Mil Reis
-currenciesDisplayName.BEF=Belgian Franc
+currenciesDisplayName.BRR=Brazilian Cruzeiro
+currenciesDisplayName.MKD=Macedonian Denar
+currenciesDisplayName.CLF=Chilean Unidades de Fomento
+currenciesDisplayName.BRN=Brazilian Cruzado Novo
+currenciesDisplayName.ALL=Albanian Lek
+currenciesDisplayName.MWK=Malawi Kwacha
+currenciesDisplayName.BRL=Brazilian Real
currenciesDisplayName.TPE=Timor Escudo
-currenciesDisplayName.BEC=Belgian Franc (convertible)
-currenciesDisplayName.GWE=Portuguese Guinea Escudo
+currenciesDisplayName.BRE=Brazilian Cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brazilian Cruzado
+currenciesDisplayName.BRB=Brazilian Cruzeiro Novo (1967-1986)
+currenciesDisplayName.DEM=Deutsche Mark
+currenciesDisplayName.KWD=Kuwaiti Dinar
+currenciesDisplayName.XCD=East Caribbean Dollar
+currenciesDisplayName.NPR=Nepalese Rupee
+currenciesDisplayName.GWP=Guinea-Bissau Peso
+currenciesDisplayName.YUN=Yugoslavian Convertible Dinar
currenciesDisplayName.SVC=El Salvador Colon
-currenciesDisplayName.CWG=Curacao Guilder
-currenciesDisplayName.BDT=Bangladesh Taka
-currenciesDisplayName.TOS=Tonga Pound Sterling
-currenciesDisplayName.TOP=Tonga Pa\u02bbanga
+currenciesDisplayName.YUM=Yugoslavian Noviy Dinar
+currenciesDisplayName.BEL=Belgian Franc (financial)
+currenciesDisplayName.SIT=Slovenia Tolar
+currenciesDisplayName.JPY=Japanese Yen
currenciesDisplayName.XOF=CFA Franc BCEAO
+currenciesDisplayName.MVR=Maldive Islands Rufiyaa
+currenciesDisplayName.GWE=Portuguese Guinea Escudo
+currenciesDisplayName.BEF=Belgian Franc
+currenciesDisplayName.TOP=Tonga Pa\u02bbanga
+currenciesDisplayName.YUD=Yugoslavian Hard Dinar
+currenciesDisplayName.BEC=Belgian Franc (convertible)
currenciesDisplayName.SUR=Soviet Rouble
-currenciesDisplayName.SUN=Soviet New Ruble
-currenciesDisplayName.NCF=New Caledonia Franc Germinal
-currenciesDisplayName.CVE=Cape Verde Escudo
-currenciesDisplayName.XNF=French Antilles CFA Franc
+currenciesDisplayName.ROL=Romanian Lei
+currenciesDisplayName.DDM=East German Ostmark
+currenciesDisplayName.BDT=Bangladesh Taka
+currenciesDisplayName.XBD=European Unit of Account (XBD)
+currenciesDisplayName.AWG=Aruban Guilder
+currenciesDisplayName.XBC=European Unit of Account (XBC)
+currenciesDisplayName.XBB=European Monetary Unit
+currenciesDisplayName.XBA=European Composite Unit
+currenciesDisplayName.NOK=Norwegian Krone
+currenciesDisplayName.MUR=Mauritius Rupee
currenciesDisplayName.ZAR=South African Rand
-currenciesDisplayName.DOP=Dominican Peso
-currenciesDisplayName.CUX=Cuban Foreign Exchange Certificates
-currenciesDisplayName.ZAP=South African Pound
+currenciesDisplayName.SHP=Saint Helena Pound
+currenciesDisplayName.XAU=Gold
currenciesDisplayName.ZAL=South African Rand (financial)
+currenciesDisplayName.VND=Vietnamese Dong
+currenciesDisplayName.TZS=Tanzanian Shilling
+currenciesDisplayName.GIP=Gibraltar Pound
currenciesDisplayName.TND=Tunisian Dinar
-currenciesDisplayName.CUP=Cuban Peso
-currenciesDisplayName.GUF=French Guyana Franc Guiana
+currenciesDisplayName.CVE=Cape Verde Escudo
currenciesDisplayName.UGX=Ugandan Shilling
-currenciesDisplayName.LNR=Ceylon Rupee
-currenciesDisplayName.AIF=Affars and Issas Franc
-currenciesDisplayName.VAL=Vatican City Lira
-currenciesDisplayName.STE=Sao Tome and Principe Escudo
+currenciesDisplayName.XAG=Silver
+currenciesDisplayName.ZMK=Zambian Kwacha
+currenciesDisplayName.JOD=Jordanian Dinar
+currenciesDisplayName.XAF=CFA Franc BEAC
+currenciesDisplayName.LBP=Lebanese Pound
currenciesDisplayName.UGS=Ugandan Shilling (1966-1987)
currenciesDisplayName.STD=Sao Tome and Principe Dobra
-currenciesDisplayName.MHD=Marshall Islands Dollar
-currenciesDisplayName.NZP=New Zealand Pound
currenciesDisplayName.WST=Western Samoa Tala
-currenciesDisplayName.WSP=Western Samoa Pound
-currenciesDisplayName.HNL=Hoduras Lempira
-currenciesDisplayName.XMF=French Metropolitan Nouveau Franc
+currenciesDisplayName.KHR=Cambodian Riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominican Peso
+currenciesDisplayName.BOV=Bolivian Mvdol
+currenciesDisplayName.MTP=Maltese Pound
+currenciesDisplayName.USS=US Dollar (Same day)
+currenciesDisplayName.BOP=Bolivian Peso
+currenciesDisplayName.CUP=Cuban Peso
+currenciesDisplayName.MTL=Maltese Lira
currenciesDisplayName.TMM=Turkmenistan Manat
-currenciesDisplayName.GTQ=Guatemala Quetzal
+currenciesDisplayName.USN=US Dollar (Next day)
+currenciesDisplayName.SGD=Singapore Dollar
currenciesDisplayName.NZD=New Zealand Dollar
-currenciesDisplayName.SSP=Scotland Pound
-currenciesDisplayName.BBD=Barbados Dollar
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.HNL=Hoduras Lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.CHW=WIR Franc
+currenciesDisplayName.ITL=Italian Lira
+currenciesDisplayName.PAB=Panamanian Balboa
+currenciesDisplayName.GTQ=Guatemala Quetzal
+currenciesDisplayName.XXX=No Currency
+currenciesDisplayName.LAK=Laotian Kip
+currenciesDisplayName.GHC=Ghana Cedi
+currenciesDisplayName.AUD=Australian Dollar
currenciesDisplayName.NAD=Namibia Dollar
+currenciesDisplayName.KGS=Kyrgystan Som
currenciesDisplayName.MGF=Madagascar Franc
+currenciesDisplayName.CHF=Swiss Franc
+currenciesDisplayName.BBD=Barbados Dollar
+currenciesDisplayName.CHE=WIR Euro
currenciesDisplayName.MGA=Madagascar Ariary
-currenciesDisplayName.EGP=Egyptian Pound
-currenciesDisplayName.BZH=British Honduras Dollar
+currenciesDisplayName.PYG=Paraguay Guarani
currenciesDisplayName.PLZ=Polish Zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnia-Herzegovina New Dinar
-currenciesDisplayName.PLX=Polish US Dollar Foreign Exchange Certificates
-currenciesDisplayName.BAM=Bosnia-Herzegovina Convertible Mark
-currenciesDisplayName.BZD=Belize Dollar
-currenciesDisplayName.BAD=Bosnia-Herzegovina Dinar
-currenciesDisplayName.PLN=Polish Zloty
currenciesDisplayName.YER=Yemeni Rial
+currenciesDisplayName.ATS=Austrian Schilling
+currenciesDisplayName.ETB=Ethiopian Birr
+currenciesDisplayName.BND=Brunei Dollar
+currenciesDisplayName.JMD=Jamaican Dollar
+currenciesDisplayName.EGP=Egyptian Pound
+currenciesDisplayName.PLN=Polish Zloty
+currenciesDisplayName.DZD=Algerian Dinar
+currenciesDisplayName.ISK=Icelandic Krona
currenciesDisplayName.SRG=Suriname Guilder
-currenciesDisplayName.CSK=Czechoslovak Hard Koruna
+currenciesDisplayName.LYD=Libyan Dinar
+currenciesDisplayName.SRD=Surinam Dollar
+currenciesDisplayName.BZD=Belize Dollar
+currenciesDisplayName.BAM=Bosnia-Herzegovina Convertible Mark
+currenciesDisplayName.ESP=Spanish Peseta
currenciesDisplayName.KRW=South Korean Won
+currenciesDisplayName.NLG=Netherlands Guilder
+currenciesDisplayName.MRO=Mauritania Ouguiya
+currenciesDisplayName.BAD=Bosnia-Herzegovina Dinar
+currenciesDisplayName.ZWD=Zimbabwe Dollar
+currenciesDisplayName.SEK=Swedish Krona
+currenciesDisplayName.CSK=Czechoslovak Hard Koruna
+currenciesDisplayName.ESB=Spanish Peseta (convertible account)
currenciesDisplayName.BYR=Belarussian Ruble
-currenciesDisplayName.SRD=Surinam Dollar
-currenciesDisplayName.YEI=Yemeni Imadi Riyal
-currenciesDisplayName.CSD=Serbian Dinar
-currenciesDisplayName.BYL=Belarussian Ruble (1992-1994)
-currenciesDisplayName.CSC=Czechoslovak Koruna
-currenciesDisplayName.KRO=South Korean Old Won
-currenciesDisplayName.KRH=South Korean Hwan
-currenciesDisplayName.BYB=Belarussian New Ruble (1994-1999)
-currenciesDisplayName.SQS=Somaliland Shilling
-currenciesDisplayName.GRN=Greek New Drachma
+currenciesDisplayName.ESA=Spanish Peseta (A account)
+currenciesDisplayName.IRR=Iranian Rial
currenciesDisplayName.PKR=Pakistan Rupee
-currenciesDisplayName.AFN=Afghani
-currenciesDisplayName.ZWD=Zimbabwe Dollar
-currenciesDisplayName.LKR=Sri Lanka Rupee
-currenciesDisplayName.GRD=Greek Drachma
-currenciesDisplayName.IEP=Irish Pound
-currenciesDisplayName.AFA=Afghani (1927-2002)
-currenciesDisplayName.YDD=Yemeni Dinar
-currenciesDisplayName.RWF=Rwandan Franc
-currenciesDisplayName.CRC=Costa Rican Colon
-currenciesDisplayName.TJS=Tajikistan Somoni
-currenciesDisplayName.TJR=Tajikistan Ruble
-currenciesDisplayName.EEK=Estonian Kroon
-currenciesDisplayName.GQP=Equatorial Guinea Peseta Guineana
-currenciesDisplayName.MDR=Moldovan Ruble Cupon
-currenciesDisplayName.HKD=Hong Kong Dollar
-currenciesDisplayName.DKK=Danish Krone
-currenciesDisplayName.MDL=Moldovan Leu
-currenciesDisplayName.GQF=Equatorial Guinea Franco
-currenciesDisplayName.GQE=Equatorial Guinea Ekwele Guineana
-currenciesDisplayName.IDR=Indonesian Rupiah
-currenciesDisplayName.AED=United Arab Emirates Dirham
-currenciesDisplayName.KPW=North Korean Won
-currenciesDisplayName.IDN=Indonesian New Rupiah
-currenciesDisplayName.BWP=Botswanan Pula
-currenciesDisplayName.MDC=Moldovan Leu Cupon
-currenciesDisplayName.IDJ=Indonesian Java Rupiah
-currenciesDisplayName.KPP=North Korean People\u2019s Won
-currenciesDisplayName.IDG=Indonesian Nica Guilder
-currenciesDisplayName.VUV=Vanuatu Vatu
-currenciesDisplayName.XID=Islamic Dinar
-currenciesDisplayName.SOS=Somali Shilling
-currenciesDisplayName.ADP=Andorran Peseta
-currenciesDisplayName.RUR=Russian Ruble (1991-1998)
-currenciesDisplayName.GPF=Guadeloupe Franc
-currenciesDisplayName.DJF=Djibouti Franc
-currenciesDisplayName.ADD=Andorran Diner
-currenciesDisplayName.MCG=Monaco Franc Germinal
-currenciesDisplayName.MCF=Monaco Franc Nouveau
-currenciesDisplayName.ECV=Ecuador Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ecuador Sucre
-currenciesDisplayName.LIF=Liechtenstein Franc
-currenciesDisplayName.RUB=Russian Ruble
-currenciesDisplayName.COU=Unidad de Valor Real
-currenciesDisplayName.PHP=Philippine Peso
-currenciesDisplayName.UZS=Uzbekistan Sum
-currenciesDisplayName.COP=Colombian Peso
-currenciesDisplayName.THB=Thai Baht
-currenciesDisplayName.BUR=Burmese Rupee
-currenciesDisplayName.IBP=Northern Irish Pound
-currenciesDisplayName.COF=Congo CFA Franc
-currenciesDisplayName.BUK=Burmese Kyat
-currenciesDisplayName.COB=Colombian Paper Peso
-currenciesDisplayName.UAK=Ukrainian Karbovanetz
-currenciesDisplayName.UZC=Uzbekistan Coupon Som
-currenciesDisplayName.QAR=Qatari Rial
-currenciesDisplayName.UAH=Ukrainian Hryvnia
-currenciesDisplayName.GNS=Guinea Syli
-currenciesDisplayName.CNY=Chinese Yuan Renminbi
-currenciesDisplayName.CNX=Chinese US Dollar Foreign Exchange Certificates
-currenciesDisplayName.MZM=Mozambique Metical
-currenciesDisplayName.UYU=Uruguay Peso Uruguayo
-currenciesDisplayName.GNI=Guinea Franc (1960-1972)
-currenciesDisplayName.SML=San Marino Lira
-currenciesDisplayName.CNP=Chinese Jen Min Piao Yuan
-currenciesDisplayName.MZE=Mozambique Escudo
-currenciesDisplayName.GNF=Guinea Franc
-currenciesDisplayName.OMS=Oman Rial Saidi
-currenciesDisplayName.PGK=Papua New Guinea Kina
-currenciesDisplayName.OMR=Oman Rial
-currenciesDisplayName.UYP=Uruguay Peso (1975-1993)
-currenciesDisplayName.XFU=French UIC-Franc
-currenciesDisplayName.BTR=Bhutan Rupee
-currenciesDisplayName.ZRZ=Zairean Zaire
-currenciesDisplayName.MAF=Moroccan Franc
-currenciesDisplayName.MAD=Moroccan Dirham
-currenciesDisplayName.BTN=Bhutan Ngultrum
-currenciesDisplayName.XFO=French Gold Franc
-currenciesDisplayName.UYF=Uruguay Peso Fuerte
-currenciesDisplayName.MYR=Malaysian Ringgit
-currenciesDisplayName.ZRN=Zairean New Zaire
-currenciesDisplayName.AZM=Azerbaijanian Manat
-currenciesDisplayName.GMP=Gambia Pound
-currenciesDisplayName.KMF=Comoro Franc
-currenciesDisplayName.SLL=Sierra Leone Leone
-currenciesDisplayName.GMD=Gambia Dalasi
-currenciesDisplayName.XEU=European Currency Unit
-currenciesDisplayName.BSP=Bahamian Pound
-currenciesDisplayName.CMF=Cameroon CFA Franc
-currenciesDisplayName.MXV=Mexican Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA Franc BCEAEC
-currenciesDisplayName.BSD=Bahamian Dollar
-currenciesDisplayName.MXP=Mexican Silver Peso (1861-1992)
-currenciesDisplayName.MXN=Mexican Peso
-currenciesDisplayName.PES=Peruvian Sol
-currenciesDisplayName.GLK=Greenland Krone
-currenciesDisplayName.BRZ=Brazilian Cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruvian Sol Nuevo
-currenciesDisplayName.CLP=Chilean Peso
-currenciesDisplayName.SKK=Slovak Koruna
-currenciesDisplayName.PEI=Peruvian Inti
-currenciesDisplayName.BRR=Brazilian Cruzeiro
-currenciesDisplayName.XDR=Special Drawing Rights
-currenciesDisplayName.FRG=French Franc Germinal/Franc Poincare
-currenciesDisplayName.FRF=French Franc
-currenciesDisplayName.BRN=Brazilian Cruzado Novo
-currenciesDisplayName.CLF=Chilean Unidades de Fomento
-currenciesDisplayName.CLE=Chilean Escudo
-currenciesDisplayName.BRL=Brazilian Real
-currenciesDisplayName.CLC=Chilean Condor
-currenciesDisplayName.BRE=Brazilian Cruzeiro (1990-1993)
-currenciesDisplayName.DES=German Sperrmark
-currenciesDisplayName.MWP=Malawi Pound
-currenciesDisplayName.BRC=Brazilian Cruzado
-currenciesDisplayName.BRB=Brazilian Cruzeiro Novo (1967-1986)
-currenciesDisplayName.MWK=Malawi Kwacha
-currenciesDisplayName.PDR=Transdniestria Ruble
-currenciesDisplayName.DEM=Deutsche Mark
-currenciesDisplayName.TDF=Chad CFA Franc
-currenciesDisplayName.PDN=Transdniestria New Ruble
-currenciesDisplayName.PDK=Transdniestria Ruble Kupon
-currenciesDisplayName.NPR=Nepalese Rupee
-currenciesDisplayName.CKD=Cook Islands Dollar
-currenciesDisplayName.JPY=Japanese Yen
-currenciesDisplayName.MVR=Maldive Islands Rufiyaa
-currenciesDisplayName.XCF=CFA Nouveau Franc
-currenciesDisplayName.MVP=Maldive Islands Rupee
-currenciesDisplayName.DDR=East German Mark
-currenciesDisplayName.XCD=East Caribbean Dollar
-currenciesDisplayName.SIT=Slovenia Tolar
-currenciesDisplayName.YUR=Yugoslavian Reformed Dinar
-currenciesDisplayName.AWG=Aruban Guilder
-currenciesDisplayName.YUO=Yugoslavian October Dinar
-currenciesDisplayName.DDM=East German Ostmark
-currenciesDisplayName.YUN=Yugoslavian Convertible Dinar
-currenciesDisplayName.YUM=Yugoslavian Noviy Dinar
-currenciesDisplayName.TCC=Turks and Caicos Crown
-currenciesDisplayName.YUG=Yugoslavian 1994 Dinar
-currenciesDisplayName.YUF=Yugoslavian Federation Dinar
-currenciesDisplayName.RON=Romanian New Leu
-currenciesDisplayName.YUD=Yugoslavian Hard Dinar
-currenciesDisplayName.ROL=Romanian Leu
-currenciesDisplayName.SIB=Slovenia Tolar Bons
-currenciesDisplayName.NOK=Norwegian Krone
-currenciesDisplayName.MUR=Mauritius Rupee
-currenciesDisplayName.XBD=European Unit of Account (XBD)
-currenciesDisplayName.GIP=Gibraltar Pound
-currenciesDisplayName.VNS=Vietnamese National Dong
-currenciesDisplayName.XBC=European Unit of Account (XBC)
-currenciesDisplayName.VNR=Vietnamese Republic Dong
-currenciesDisplayName.XBB=European Monetary Unit
-currenciesDisplayName.XBA=European Composite Unit
-currenciesDisplayName.KID=Kiribati Dollar
-currenciesDisplayName.SHP=Saint Helena Pound
-currenciesDisplayName.VNN=Vietnamese New Dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=\u20a7
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudan Dollar
+currenciesDisplayName.CSD=Serbian Dinar
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.ESP=\u20a7
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=Jan®Feb®Mar®Apr®May®Jun®Jul®Aug®Sep®Oct®Nov®Dec®®
months=January®February®March®April®May®June®July®August®September®October®November®December®®
shortWeekdays=®Sun®Mon®Tue®Wed®Thu®Fri®Sat®
@@ -796,7 +382,7 @@ shortTimeFormat=h:mm a
mediumTimeFormat=h:mm:ss a
longTimeFormat=h:mm:ss a z
fullTimeFormat=h:mm:ss a z
-zoneStrings=America/Los_Angeles®PST®Pacific Standard Time®PDT®Pacific Daylight Time®©Pacific/Honolulu®HST®Hawaii Standard Time®HDT®Hawaii Daylight Time®©Etc/GMT®GMT®Greenwich Mean Time®GMT®Greenwich Mean Time®©Europe/London®BST®British Standard Time®BDT®British Daylight Time®©America/Phoenix®MST®Mountain Standard Time®MDT®Mountain Daylight Time®©America/Denver®MST®Mountain Standard Time®MDT®Mountain Daylight Time®©Asia/Jerusalem®IST®Israel Standard Time®IDT®Israel Daylight Time®©America/Edmonton®MST (CA)®Mountain Standard Time (CA)®MDT (CA)®Mountain Daylight Time (CA)®©America/Anchorage®AKST®Alaska Standard Time®AKDT®Alaska Daylight Time®©Europe/Paris®CEST®Central European Standard Time®CEDT®Central European Daylight Time®©America/Indianapolis®EST®Eastern Standard Time®EDT®Eastern Daylight Time®©Europe/Bucharest®EET®Eastern European Standard Time®EEST®Eastern European Daylight Time®©Asia/Tokyo®JST®Japan Standard Time®JDT®Japan Daylight Time®©America/Winnipeg®CST (CA)®Central Standard Time (CA)®CDT (CA)®Central Daylight Time (CA)®©Asia/Shanghai®CST®China Standard Time®CDT®China Daylight Time®©America/Vancouver®PST (CA)®Pacific Standard Time (CA)®PDT (CA)®Pacific Daylight Time (CA)®©America/New_York®EST®Eastern Standard Time®EDT®Eastern Daylight Time®©America/Montreal®EST (CA)®Eastern Standard Time (CA)®EDT (CA)®Eastern Daylight Time (CA)®©America/Halifax®AST®Atlantic Standard Time®ADT®Atlantic Daylight Time®©America/St_Johns®NST®Newfoundland Standard Time®NDT®Newfoundland Daylight Time®©America/Chicago®CST®Central Standard Time®CDT®Central Daylight Time®©
+zoneStrings=Europe/Paris®CEST®Central European Standard Time®CEDT®Central European Daylight Time®©Pacific/Honolulu®HST®Hawaii Standard Time®HDT®Hawaii Daylight Time®©Europe/London®BST®British Standard Time®BDT®British Daylight Time®©America/Edmonton®MST (CA)®Mountain Standard Time (CA)®MDT (CA)®Mountain Daylight Time (CA)®©America/Denver®MST®Mountain Standard Time®MDT®Mountain Daylight Time®©Asia/Jerusalem®IST®Israel Standard Time®IDT®Israel Daylight Time®©America/Anchorage®AKST®Alaska Standard Time®AKDT®Alaska Daylight Time®©America/Phoenix®MST®Mountain Standard Time®MDT®Mountain Daylight Time®©America/Los_Angeles®PST®Pacific Standard Time®PDT®Pacific Daylight Time®©America/Chicago®CST®Central Standard Time®CDT®Central Daylight Time®©America/Halifax®AST®Atlantic Standard Time®ADT®Atlantic Daylight Time®©America/St_Johns®NST®Newfoundland Standard Time®NDT®Newfoundland Daylight Time®©America/Winnipeg®CST (CA)®Central Standard Time (CA)®CDT (CA)®Central Daylight Time (CA)®©America/Vancouver®PST (CA)®Pacific Standard Time (CA)®PDT (CA)®Pacific Daylight Time (CA)®©America/New_York®EST®Eastern Standard Time®EDT®Eastern Daylight Time®©America/Montreal®EST (CA)®Eastern Standard Time (CA)®EDT (CA)®Eastern Daylight Time (CA)®©Asia/Shanghai®CST®China Standard Time®CDT®China Daylight Time®©Asia/Tokyo®JST®Japan Standard Time®JDT®Japan Daylight Time®©Europe/Bucharest®EET®Eastern European Standard Time®EEST®Eastern European Daylight Time®©America/Indianapolis®EST®Eastern Standard Time®EDT®Eastern Daylight Time®©
territories.GY=Guyana
territories.GW=Guinea-Bissau
territories.GU=Guam
@@ -819,7 +405,7 @@ territories.FX=Metropolitan France
territories.FR=France
territories.FQ=French Southern and Antarctic Territories
territories.FO=Faroe Islands
-territories.FM=Federated States of Micronesia
+territories.FM=Micronesia
territories.FK=Falkland Islands
territories.FJ=Fiji
territories.FI=Finland
@@ -831,7 +417,6 @@ territories.EG=Egypt
territories.EE=Estonia
territories.EC=Ecuador
territories.DZ=Algeria
-territories.DY=Benin
territories.DO=Dominican Republic
territories.DM=Dominica
territories.DK=Denmark
@@ -844,25 +429,24 @@ territories.CX=Christmas Island
territories.CV=Cape Verde
territories.CU=Cuba
territories.CT=Canton and Enderbury Islands
-territories.CS=Czechoslovakia
+territories.CS=Serbia And Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=China
territories.CM=Cameroon
territories.CL=Chile
territories.CK=Cook Islands
-territories.CI=C\u00f4te d\u2019Ivoire
+territories.CI=Ivory Coast
territories.CH=Switzerland
-territories.CG=Congo
+territories.CG=Congo (Brazzaville)
territories.CF=Central African Republic
-territories.CD=Congo (Brazzaville)
+territories.CD=Congo (Kinshasa)
territories.CC=Cocos (Keeling) Islands
territories.CA=Canada
territories.BZ=Belize
territories.BY=Belarus
territories.BW=Botswana
territories.BV=Bouvet Island
-territories.BU=Myanmar
territories.BT=Bhutan
territories.BS=Bahamas
territories.BR=Brazil
@@ -877,11 +461,9 @@ territories.BG=Bulgaria
territories.BF=Burkina Faso
territories.BE=Belgium
territories.BD=Bangladesh
-territories.ZZ=Outlying Oceania
territories.BB=Barbados
territories.BA=Bosnia and Herzegovina
territories.ZW=Zimbabwe
-territories.ZR=Congo, The Democratic Republic of the
territories.AZ=Azerbaijan
territories.AX=Aland Islands
territories.AW=Aruba
@@ -901,11 +483,11 @@ territories.AG=Antigua and Barbuda
territories.AF=Afghanistan
territories.AE=United Arab Emirates
territories.AD=Andorra
-territories.YU=Serbia and Montenegro
territories.YT=Mayotte
territories.YE=Yemen
territories.YD=People's Democratic Republic of Yemen
territories.172=Commonwealth of Independent States
+territories.200=Czechoslovakia
territories.WS=Samoa
territories.WK=Wake Island
territories.WF=Wallis and Futuna
@@ -918,27 +500,26 @@ territories.VN=Vietnam
territories.VI=U.S. Virgin Islands
territories.VG=British Virgin Islands
territories.VE=Venezuela
-territories.145=Western Asia
territories.VD=North Vietnam
+territories.145=Western Asia
territories.VC=Saint Vincent and the Grenadines
-territories.142=Asia
territories.VA=Vatican
+territories.142=Asia
territories.UZ=Uzbekistan
territories.UY=Uruguay
territories.US=United States
territories.UM=United States Minor Outlying Islands
territories.UG=Uganda
territories.UA=Ukraine
-territories.TZ=United Republic of Tanzania
-territories.TW=Taiwan, Provience of China
+territories.TZ=Tanzania
+territories.TW=Taiwan
territories.TV=Tuvalu
territories.TT=Trinidad and Tobago
territories.TR=Turkey
-territories.TP=Timor-Leste
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
-territories.TL=Timor-Leste
+territories.TL=East Timor
territories.TK=Tokelau
territories.TJ=Tajikistan
territories.TH=Thailand
@@ -969,16 +550,16 @@ territories.SA=Saudi Arabia
territories.RW=Rwanda
territories.RU=Russia
territories.RO=Romania
-territories.RH=Zimbabwe
-territories.RE=R\u00e9union
+territories.RE=Reunion
territories.062=South-central Asia
territories.061=Polynesia
+territories.QO=Outlying Oceania
territories.QA=Qatar
-territories.057=Micronesia
-territories.054=Melanesia
+territories.057=Micronesian Region
territories.PZ=Panama Canal Zone
-territories.053=Australia and New Zealand
+territories.054=Melanesia
territories.PY=Paraguay
+territories.053=Australia and New Zealand
territories.PW=Palau
territories.PU=U.S. Miscellaneous Pacific Islands
territories.PT=Portugal
@@ -1009,7 +590,6 @@ territories.NP=Nepal
territories.NO=Norway
territories.NL=Netherlands
territories.NI=Nicaragua
-territories.NH=Vanuatu
territories.NG=Nigeria
territories.NF=Norfolk Island
territories.NE=Niger
@@ -1019,8 +599,8 @@ territories.029=Caribbean
territories.MZ=Mozambique
territories.MY=Malaysia
territories.MX=Mexico
-territories.021=Northern America
territories.MW=Malawi
+territories.021=Northern America
territories.MV=Maldives
territories.MU=Mauritius
territories.MT=Malta
@@ -1033,8 +613,8 @@ territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedonia
-territories.419=Latin America and the Caribbean
territories.MI=Midway Islands
+territories.419=Latin America and the Caribbean
territories.MH=Marshall Islands
territories.MG=Madagascar
territories.MD=Moldova
@@ -1045,8 +625,8 @@ territories.018=Southern Africa
territories.017=Middle Africa
territories.015=Northern Africa
territories.014=Eastern Africa
-territories.013=Central America
territories.LY=Libya
+territories.013=Central America
territories.011=Western Africa
territories.LV=Latvia
territories.LU=Luxembourg
@@ -1061,13 +641,13 @@ territories.LA=Laos
territories.009=Oceania
territories.005=South America
territories.KZ=Kazakhstan
-territories.003=North America
territories.KY=Cayman Islands
+territories.003=North America
territories.002=Africa
-territories.001=World
territories.KW=Kuwait
-territories.KR=Republic of Korea
-territories.KP=Democratic People's Republic of Korea
+territories.001=World
+territories.KR=South Korea
+territories.KP=North Korea
territories.KN=Saint Kitts and Nevis
territories.KM=Comoros
territories.KI=Kiribati
@@ -1080,22 +660,21 @@ territories.JO=Jordan
territories.JM=Jamaica
territories.IT=Italy
territories.IS=Iceland
-territories.IR=Islamic Republic of Iran
+territories.IR=Iran
territories.IQ=Iraq
territories.IO=British Indian Ocean Territory
territories.IN=India
territories.IL=Israel
territories.IE=Ireland
territories.ID=Indonesia
-territories.HV=Burkina Faso
territories.HU=Hungary
territories.HT=Haiti
territories.HR=Croatia
territories.HN=Honduras
territories.HM=Heard Island and McDonald Islands
territories.HK=Hong Kong S.A.R., China
-languages.gwi=Gwich\u02bbin
languages.akk=Akkadian
+languages.gwi=Gwich\u02bcin
languages.eka=Ekajuk
languages.ijo=Ijo
languages.xh=Xhosa
@@ -1108,15 +687,15 @@ languages.pon=Pohnpeian
languages.min=Minangkabau
languages.suk=Sukuma
languages.wo=Wolof
-languages.lol=Mongo
languages.kut=Kutenai
+languages.lol=Mongo
languages.mic=Micmac
languages.wa=Walloon
languages.kum=Kumyk
languages.zap=Zapotec
languages.cus=Cushitic (Other)
-languages.jbo=Lojban
languages.doi=Dogri
+languages.jbo=Lojban
languages.vo=Volap\u00fck
languages.oto=Otomian Languages
languages.vi=Vietnamese
@@ -1139,9 +718,9 @@ languages.uk=Ukrainian
languages.egy=Egyptian (Ancient)
languages.ug=Uighur
languages.fan=Fang
-languages.ssa=Nilo-Saharam (Other)
-languages.mga=Middle Irish
+languages.ssa=Nilo-Saharan (Other)
languages.bat=Baltic (Other)
+languages.mga=Middle Irish
languages.nyo=Nyoro
languages.bas=Basa
languages.nyn=Nyankole
@@ -1158,6 +737,7 @@ languages.tli=Tlingit
languages.tlh=Klingon
languages.tt=Tatar
languages.ts=Tsonga
+languages.srn=Sranan Tongo
languages.bad=Banda
languages.tr=Turkish
languages.to=Tonga (Tonga Islands)
@@ -1170,8 +750,8 @@ languages.kru=Kurukh
languages.tg=Tajik
languages.byn=Blin
languages.te=Telugu
-languages.kro=Kru
languages.csb=Kashubian
+languages.kro=Kru
languages.ta=Tamil
languages.tkl=Tokelau
languages.efi=Efik
@@ -1192,11 +772,11 @@ languages.sm=Samoan
languages.sl=Slovenian
languages.grc=Ancient Greek
languages.sk=Slovak
-languages.grb=Gerbo
+languages.grb=Grebo
languages.si=Sinhalese
languages.sh=Serbo-Croatian
-languages.crh=Crimean Turkish; Crimean Tatar
languages.afa=Afro-Asiatic (Other)
+languages.crh=Crimean Turkish; Crimean Tatar
languages.sg=Sango
languages.se=Northern Sami
languages.sd=Sindhi
@@ -1218,17 +798,17 @@ languages.kpe=Kpelle
languages.qu=Quechua
languages.tig=Tigre
languages.son=Songhai
-languages.cpp=Portuguese-based Creoles and Pidgins
+languages.cpp=Other Portuguese-based Creoles and Pidgins
languages.sog=Sogdien
languages.ada=Adangme
-languages.kos=Kosraean
+languages.cpf=Other French-based Creoles and Pidgins
languages.hit=Hittite
-languages.cpf=French-based Creoles and Pidgins
-languages.cpe=English-based Creoles and Pidgins
+languages.kos=Kosraean
+languages.cpe=Other English-based Creoles and Pidgins
languages.him=Himachali
-languages.kok=Konkani
-languages.hil=Hiligaynon
languages.got=Gothic
+languages.hil=Hiligaynon
+languages.kok=Konkani
languages.gor=Gorontalo
languages.gon=Gondi
languages.din=Dinka
@@ -1300,10 +880,10 @@ languages.ms=Malay
languages.mr=Marathi
languages.fro=Old French
languages.mo=Moldavian
-languages.frm=Middle French
languages.mn=Mongolian
-languages.jrb=Judeo-Arabic
+languages.frm=Middle French
languages.ml=Malayalam
+languages.jrb=Judeo-Arabic
languages.mk=Macedonian
languages.mi=Maori
languages.mh=Marshallese
@@ -1311,11 +891,11 @@ languages.mg=Malagasy
languages.mwr=Marwari
languages.bra=Braj
languages.mwl=Mirandese
-languages.den=Slave
languages.lv=Latvian
+languages.den=Slave
languages.lu=Luba-Katanga
-languages.del=Delaware
languages.lt=Lithuanian
+languages.del=Delaware
languages.lo=Lao
languages.ln=Lingala
languages.li=Limburgish
@@ -1356,7 +936,6 @@ languages.gil=Gilbertese
languages.znd=Zande
languages.shn=Shan
languages.fon=Fon
-languages.ji=Yiddish
languages.xal=Kalmyk
languages.aus=Australian Languages
languages.kho=Khotanese
@@ -1364,45 +943,43 @@ languages.ja=Japanese
languages.khi=Khoisan (Other)
languages.pau=Palauan
languages.chy=Cheyenne
-languages.iw=Hebrew
languages.tai=Tai (Other)
languages.iu=Inuktitut
languages.pap=Papiamento
languages.it=Italian
languages.sgn=Sign Languages
-languages.is=Icelandic
languages.kha=Khasi
+languages.is=Icelandic
languages.chr=Cherokee
languages.pam=Pampanga
languages.pal=Pahlavi
languages.chp=Chipewyan
-languages.io=Ido
languages.cho=Choctaw
-languages.in=Indonesian
+languages.io=Ido
languages.chn=Chinook Jargon
languages.chm=Mari
languages.tyv=Tuvinian
languages.bnt=Bantu
languages.pag=Pangasinan
-languages.ik=Inupiaq
languages.chk=Chuukese
-languages.ii=Sichuan Yi
+languages.ik=Inupiaq
languages.haw=Hawaiian
+languages.ii=Sichuan Yi
languages.lam=Lamba
-languages.ig=Igbo
languages.chg=Chagatai
+languages.ig=Igbo
languages.sga=Old Irish
languages.paa=Papuan (Other)
languages.ie=Interlingue
languages.id=Indonesian
languages.lah=Lahnda
-languages.day=Dayak
languages.chb=Chibcha
+languages.day=Dayak
languages.ia=Interlingua
languages.lad=Ladino
-languages.hz=Herero
-languages.hai=Haida
languages.dar=Dargwa
+languages.hai=Haida
+languages.hz=Herero
languages.hy=Armenian
languages.ath=Athapascan Languages
languages.hu=Hungarian
@@ -1424,9 +1001,9 @@ languages.iro=Iroquoian languages
languages.gn=Guarani
languages.gl=Gallegan
languages.arw=Arawak
-languages.gez=Geez
-languages.art=Artificial (Other)
languages.gd=Scottish Gaelic
+languages.art=Artificial (Other)
+languages.gez=Geez
languages.ira=Iranian
languages.ga=Irish
languages.arp=Arapaho
@@ -1435,8 +1012,8 @@ languages.fy=Frisian
languages.bla=Siksika
languages.gem=Germanic (Other)
languages.ypk=Yupik Languages
-languages.arc=Aramaic
languages.fr=French
+languages.arc=Aramaic
languages.fo=Faroese
languages.cel=Celtic (Other)
languages.fj=Fijian
@@ -1461,9 +1038,9 @@ languages.tum=Tumbuka
languages.mos=Mossi
languages.dz=Dzongkha
languages.nic=Niger - Kordofanian (Other)
-languages.lus=Lushai
-languages.fiu=Finno - Ugrian (Other)
languages.dv=Divehi
+languages.fiu=Finno - Ugrian (Other)
+languages.lus=Lushai
languages.nia=Nias
languages.moh=Mohawk
languages.luo=Luo
@@ -1487,8 +1064,8 @@ languages.wak=Wakashan Languages
languages.sat=Santali
languages.cy=Welsh
languages.sas=Sasak
-languages.kbd=Kabardian
languages.cv=Chuvash
+languages.kbd=Kabardian
languages.cu=Church Slavic
languages.mni=Manipuri
languages.cs=Czech
@@ -1500,17 +1077,17 @@ languages.co=Corsican
languages.sai=South American Indian (Other)
languages.mnc=Manchu
languages.sah=Yakut
-languages.kaw=Kawi
-languages.inh=Ingush
languages.gba=Gbaya
+languages.inh=Ingush
+languages.kaw=Kawi
languages.sad=Sandawe
languages.ch=Chamorro
-languages.ine=Indo-European (Other)
languages.bho=Bhojpuri
+languages.ine=Indo-European (Other)
languages.enm=Middle English
-languages.kar=Karen
-languages.inc=Indic (Other)
languages.ce=Chechen
+languages.inc=Indic (Other)
+languages.kar=Karen
languages.gay=Gayo
languages.ca=Catalan
languages.umb=Umbundu
@@ -1518,19 +1095,19 @@ languages.syr=Syriac
languages.kam=Kamba
languages.tsi=Tsimshian
languages.ang=Old English (ca.450-1100)
-languages.kac=Kachin
languages.cau=Caucasian (Other)
+languages.kac=Kachin
languages.kab=Kabyle
-languages.kaa=Kara-Kalpak
languages.bs=Bosnian
-languages.car=Carib
+languages.kaa=Kara-Kalpak
languages.br=Breton
+languages.car=Carib
languages.bo=Tibetan
languages.bn=Bengali
languages.bm=Bambara
languages.gaa=Ga
-languages.cai=Central American Indian (Other)
languages.bi=Bislama
+languages.cai=Central American Indian (Other)
languages.bh=Bihari
languages.bg=Bulgarian
languages.be=Belarusian
@@ -1544,10 +1121,10 @@ languages.az=Azerbaijani
languages.ay=Aymara
languages.av=Avaric
languages.as=Assamese
-languages.dsb=Lower Sorbian
languages.ar=Arabic
-languages.ilo=Iloko
+languages.dsb=Lower Sorbian
languages.elx=Elamite
+languages.ilo=Iloko
languages.zh=Chinese
languages.an=Aragonese
languages.pra=Prakrit Languages
@@ -1571,16 +1148,16 @@ languages.nds=Low German; Low Saxon
languages.bem=Bemba
languages.bej=Beja
languages.tpi=Tok Pisin
+variants.BOONT=Boontling
variants.REVISED=Revised Orthography
-variants.lojban=Lojban
+variants.GAULISH=Gaulish
+variants.HAKKA=Hakka
+variants.GUOYU=Mandarin or Standard Chinese
+variants.XIANG=Xiang or Hunanese
variants.POSIX=Computer
-variants.gaulish=Gaulish
-variants.rozaj=Resian
-variants.nedis=Natisone dialect
-variants.boont=Boontling
variants.1996=German orthography of 1996
-variants.guoyu=Mandarin or Standard Chinese
-variants.hakka=Hakka
-variants.xiang=Xiang or Hunanese
+variants.LOJBAN=Lojban
+variants.SCOUSE=Scouse
variants.1901=Traditional German orthography
-variants.scouse=Scouse
+variants.ROZAJ=Resian
+variants.NEDIS=Natisone dialect
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_GB.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_GB.properties
index fb8ccd1..c35145c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_GB.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_GB.properties
@@ -14,4 +14,4 @@ shortTimeFormat=HH:mm
mediumTimeFormat=HH:mm:ss
longTimeFormat=HH:mm:ss z
fullTimeFormat=HH:mm:ss z
-zoneStrings=Europe/London®GMT®Greenwich Mean Time®©
+zoneStrings=Europe/London®GMT®Greenwich Mean Time®BST®British Summer Time®©
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_IN.properties
index 70b7bb4..a624a8b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=dd/MM/yy
mediumDateFormat=dd-MMM-yy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_PK.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_PK.properties
index b7957d3..658494d 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_PK.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_PK.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
shortDateFormat=dd/MM/yy
mediumDateFormat=dd-MMM-yy
longDateFormat=d MMMM yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_SG.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_SG.properties
index e255bbe..fe90755 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_SG.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_SG.properties
@@ -15,4 +15,4 @@ shortTimeFormat=h:mm a
mediumTimeFormat=h:mm:ss a
longTimeFormat=h:mm:ss a z
fullTimeFormat=h:mm:ss a z
-zoneStrings=Pacific/Guadalcanal®SST®Singapore Standard Time®SST®Singapore Standard Time®©
+zoneStrings=Asia/Singapore®SST®Singapore Standard Time®SST®Singapore Standard Time®©
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties
index 1435d0c..6625bd8 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_en_US_POSIX.properties
@@ -8,5 +8,5 @@
perMill=0/00
infinity=INF
NaN=NaN
-percentFormat=0%
-currencyFormat=\u00a4 0.00;-\u00a4 0.00
+percentFormat=#0%
+currencyFormat=\u00a4 #0.00;-\u00a4 #0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eo.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eo.properties
index 9cd17ea..c5490af 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eo.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eo.properties
@@ -102,6 +102,7 @@ territories.CY=Kipro
territories.CV=Kabo-Verdo
territories.PA=Panamo
territories.CU=Kubo
+territories.CS=Serbujo
territories.CR=Kostariko
territories.CO=Kolombio
territories.CN=\u0108inujo
@@ -147,36 +148,35 @@ territories.NE=Ni\u011dero
territories.NC=Nov-Kaledonio
territories.AW=Arubo
territories.ZM=Zambio
-territories.AU=A\u016dstralio
territories.NA=Namibio
+territories.AU=A\u016dstralio
territories.AT=A\u016dstrujo
territories.AR=Argentino
territories.AQ=Antarkto
-territories.MZ=Mozambiko
territories.AO=Angolo
-territories.MY=Malajzio
+territories.MZ=Mozambiko
territories.AN=Nederlandaj Antiloj
-territories.MX=Meksiko
+territories.MY=Malajzio
territories.AM=Armenujo
-territories.MW=Malavio
+territories.MX=Meksiko
territories.AL=Albanujo
+territories.MW=Malavio
territories.MV=Maldivoj
territories.ZA=Sud-Afriko
territories.MU=Ma\u016dricio
-territories.MT=Malto
territories.AI=Angvilo
-territories.MR=Ma\u016dritanujo
+territories.MT=Malto
territories.AG=Antigvo-Barbudo
-territories.MQ=Martiniko
+territories.MR=Ma\u016dritanujo
territories.AF=Afganujo
-territories.MP=Nord-Marianoj
+territories.MQ=Martiniko
territories.AE=Unui\u011dintaj Arabaj Emirlandos
+territories.MP=Nord-Marianoj
territories.AD=Andoro
territories.MN=Mongolujo
territories.MM=Mjanmao
territories.ML=Malio
territories.MK=Makedonujo
-territories.YU=Serbujo
territories.YT=Majoto
territories.MH=Mar\u015daloj
territories.MG=Madagaskaro
@@ -249,8 +249,8 @@ territories.TM=Turkmenujo
languages.es=hispana
languages.ku=kurda
languages.eo=esperanto
-languages.ks=ka\u015dmira
languages.en=angla
+languages.ks=ka\u015dmira
languages.el=greka
languages.qu=ke\u0109ua
languages.ko=korea
@@ -274,8 +274,8 @@ languages.cy=kimra
languages.pa=pan\u011daba
languages.cs=\u0109e\u0125a
languages.iu=inuita
-languages.it=itala
languages.co=korsika
+languages.it=itala
languages.is=islanda
languages.uz=uzbeka
languages.or=orijo
@@ -350,8 +350,8 @@ languages.mk=makedona
languages.aa=afara
languages.so=somala
languages.sn=\u015dona
-languages.mi=maoria
languages.gd=gaela
+languages.mi=maoria
languages.sm=samoa
languages.sl=slovena
languages.mg=malagasa
@@ -367,14 +367,14 @@ languages.fy=frisa
languages.sa=sanskrito
languages.fr=franca
languages.lv=latva
-languages.lt=litova
languages.fo=feroa
+languages.lt=litova
languages.rw=ruanda
languages.ru=rusa
-languages.lo=la\u016da
languages.fj=fi\u011dia
-languages.ln=lingala
+languages.lo=la\u016da
languages.fi=finna
+languages.ln=lingala
languages.ro=rumana
languages.rn=burunda
languages.rm=roman\u0109a
@@ -382,5 +382,5 @@ languages.fa=persa
languages.la=latino
languages.xh=ksosa
languages.eu=e\u016dska
-languages.ky=kirgiza
languages.et=estona
+languages.ky=kirgiza
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es.properties
index 5284cd3..b109f14 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es.properties
@@ -5,763 +5,356 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=,
+groupingSeparator=.
currencyFormat=\u00a4#,##0.00;(\u00a4#,##0.00)
localPatternChars=GuMtkHmsSEDFwWahKzUeygAZ
-currenciesDisplayName.JOD=dinar jordano
-currenciesDisplayName.BOV=MVDOL boliviano
-currenciesDisplayName.XAU=oro
-currenciesDisplayName.FOK=corona de las Islas Feroe
-currenciesDisplayName.LBP=libra libanesa
-currenciesDisplayName.EUR=euro
-currenciesDisplayName.VND=dong vietnamita
-currenciesDisplayName.TZS=chel\u00edn tanzano
-currenciesDisplayName.BOP=peso boliviano
-currenciesDisplayName.KHR=riel camboyano
-currenciesDisplayName.XAM=unidad monetaria asi\u00e1tica
-currenciesDisplayName.BOL=boliviano (1863-1962)
-currenciesDisplayName.KHO=antiguo riel camboyano
-currenciesDisplayName.ZMP=libra zambiana
-currenciesDisplayName.AUP=libra australiana
-currenciesDisplayName.XAF=franco CFA BEAC
-currenciesDisplayName.MTP=libra maltesa
-currenciesDisplayName.GHR=cedi revaluado ghan\u00e9s
-currenciesDisplayName.ZMK=kwacha zambiano
-currenciesDisplayName.XAD=unidad de cuenta asi\u00e1tica en dinares
-currenciesDisplayName.GHP=libra ghanesa
-currenciesDisplayName.BOB=boliviano
-currenciesDisplayName.GHO=antiguo cedi ghan\u00e9s
-currenciesDisplayName.MTL=lira maltesa
-currenciesDisplayName.AUD=d\u00f3lar australiano
-currenciesDisplayName.USS=d\u00f3lar estadounidense (mismo d\u00eda)
-currenciesDisplayName.ITL=lira italiana
-currenciesDisplayName.USN=d\u00f3lar estadounidense (d\u00eda siguiente)
-currenciesDisplayName.GHC=cedi ghan\u00e9s
-currenciesDisplayName.SGD=d\u00f3lar singapurense
-currenciesDisplayName.PAB=balboa paname\u00f1o
-currenciesDisplayName.LAK=kip laosiano
-currenciesDisplayName.KGS=som kirgu\u00eds
-currenciesDisplayName.CHF=franco suizo
-currenciesDisplayName.ATS=chel\u00edn austriaco
-currenciesDisplayName.USD=d\u00f3lar estadounidense
-currenciesDisplayName.ETD=d\u00f3lar et\u00edope
-currenciesDisplayName.BND=d\u00f3lar de Brun\u00e9i
-currenciesDisplayName.JMP=libra jamaicana
-currenciesDisplayName.ETB=birr et\u00edope
-currenciesDisplayName.DZG=franco germinal argelino
-currenciesDisplayName.DZF=nuevo franco argelino
-currenciesDisplayName.DZD=dinar argelino
-currenciesDisplayName.PYG=guaran\u00ed paraguayo
-currenciesDisplayName.LYP=libra libia
-currenciesDisplayName.JMD=d\u00f3lar de Jamaica
-currenciesDisplayName.ISK=corona islandesa
-currenciesDisplayName.ESP=peseta espa\u00f1ola
-currenciesDisplayName.BMP=libra de Bermudas
-currenciesDisplayName.LYD=dinar libio
-currenciesDisplayName.LYB=lira libia de la Autoridad Militar Brit\u00e1nica
-currenciesDisplayName.BMD=d\u00f3lar de Bermudas
-currenciesDisplayName.NLG=flor\u00edn neerland\u00e9s
-currenciesDisplayName.MRO=ouguiya mauritano
-currenciesDisplayName.IRR=rial iran\u00ed
-currenciesDisplayName.SEK=corona sueca
-currenciesDisplayName.ERN=nakfa eritreo
+currenciesDisplayName.YDD=dinar yemen\u00ed
+currenciesDisplayName.TWD=nuevo d\u00f3lar taiwan\u00e9s
currenciesDisplayName.KES=chel\u00edn keniata
-currenciesDisplayName.CFF=franco CFA de la Rep\u00fablica Centroafricana
+currenciesDisplayName.BYB=nuevo rublo bielorruso (1994-1999)
+currenciesDisplayName.LKR=rupia de Sri Lanka
+currenciesDisplayName.RWF=franco ruand\u00e9s
+currenciesDisplayName.TJS=somoni tayiko
+currenciesDisplayName.SDP=libra sudanesa
+currenciesDisplayName.TJR=rublo tayiko
+currenciesDisplayName.ERN=nakfa eritreo
+currenciesDisplayName.AFN=afgani
+currenciesDisplayName.GRD=dracma griego
+currenciesDisplayName.IEP=libra irlandesa
currenciesDisplayName.ARS=peso argentino
+currenciesDisplayName.SDD=dinar sudan\u00e9s
currenciesDisplayName.ARP=peso argentino (1983-1985)
-currenciesDisplayName.ARM=peso moneda nacional argentino
-currenciesDisplayName.TWD=nuevo d\u00f3lar taiwan\u00e9s
-currenciesDisplayName.SDP=libra sudanesa
currenciesDisplayName.GEL=lari georgiano
+currenciesDisplayName.AFA=afgani (1927-2002)
currenciesDisplayName.GEK=kupon larit georgiano
-currenciesDisplayName.MQF=franco de Martinica
+currenciesDisplayName.CRC=col\u00f3n costarricense
currenciesDisplayName.FKP=libra de las Islas Malvinas
+currenciesDisplayName.EEK=corona estonia
+currenciesDisplayName.HKD=d\u00f3lar de Hong Kong
+currenciesDisplayName.MDL=leu moldavo
currenciesDisplayName.ARA=austral argentino
-currenciesDisplayName.SDD=dinar sudan\u00e9s
currenciesDisplayName.IQD=dinar iraqu\u00ed
-currenciesDisplayName.TVD=d\u00f3lar de Tuvalu
currenciesDisplayName.SCR=rupia de Seychelles
+currenciesDisplayName.VUV=vatu vanuatuense
+currenciesDisplayName.DKK=corona danesa
+currenciesDisplayName.KPW=won norcoreano
+currenciesDisplayName.GQE=ekuele de Guinea Ecuatorial
+currenciesDisplayName.IDR=rupia indonesia
currenciesDisplayName.LVR=rublo let\u00f3n
-currenciesDisplayName.FJP=libra de las Islas Fiyi
+currenciesDisplayName.SOS=chel\u00edn somal\u00ed
+currenciesDisplayName.AED=dirham de los Emiratos \u00c1rabes Unidos
+currenciesDisplayName.BWP=pula botsuano
currenciesDisplayName.LVL=lats let\u00f3n
-currenciesDisplayName.CDL=zaire congole\u00f1o
-currenciesDisplayName.CDG=franco de la Rep\u00fablica del Congo
-currenciesDisplayName.CDF=franco congole\u00f1o
-currenciesDisplayName.FJD=d\u00f3lar de las Islas Fiyi
+currenciesDisplayName.RUR=rublo ruso (1991-1998)
currenciesDisplayName.NIO=c\u00f3rdoba oro nicarag\u00fcense
+currenciesDisplayName.ADP=peseta andorrana
+currenciesDisplayName.FJD=d\u00f3lar de las Islas Fiyi
currenciesDisplayName.MOP=pataca de Macao
-currenciesDisplayName.NIG=c\u00f3rdoba oro nicarag\u00fcense
+currenciesDisplayName.RUB=rublo ruso
+currenciesDisplayName.CDF=franco congole\u00f1o
currenciesDisplayName.NIC=c\u00f3rdoba nicarag\u00fcense
-currenciesDisplayName.XTR=rublo transferible del COMECON
-currenciesDisplayName.FIN=marco finland\u00e9s (1860-1962)
-currenciesDisplayName.FIM=marco finland\u00e9s
+currenciesDisplayName.DJF=franco de Yibuti
+currenciesDisplayName.ECV=unidad de valor constante (UVC) ecuatoriana
currenciesDisplayName.SBD=d\u00f3lar de las Islas Salom\u00f3n
+currenciesDisplayName.UZS=sum uzbeko
+currenciesDisplayName.ECS=sucre ecuatoriano
+currenciesDisplayName.PHP=peso filipino
+currenciesDisplayName.THB=baht tailand\u00e9s
currenciesDisplayName.LUF=franco luxemburgu\u00e9s
-currenciesDisplayName.TTO=antiguo d\u00f3lar de Trinidad y Tobago
-currenciesDisplayName.AOS=escudo angole\u00f1o
-currenciesDisplayName.AOR=kwanza reajustado angole\u00f1o (1995-1999)
-currenciesDisplayName.MNT=tugrik mongol
-currenciesDisplayName.HUF=forinto h\u00fangaro
-currenciesDisplayName.BIF=franco de Burundi
-currenciesDisplayName.AON=nuevo kwanza angole\u00f1o (1990-2000)
-currenciesDisplayName.AOK=kwanza angole\u00f1o (1977-1990)
+currenciesDisplayName.FIM=marco finland\u00e9s
currenciesDisplayName.TTD=d\u00f3lar de Trinidad y Tobago
currenciesDisplayName.SZL=lilangeni suazi
-currenciesDisplayName.NHF=franco CFP de las Nuevas H\u00e9bridas
-currenciesDisplayName.GBP=libra esterlina brit\u00e1nica
-currenciesDisplayName.SAS=riyal soberano saud\u00ed
+currenciesDisplayName.MNT=tugrik mongol
currenciesDisplayName.SAR=riyal saud\u00ed
+currenciesDisplayName.UAK=karbovanet ucraniano
+currenciesDisplayName.UAH=grivna ucraniana
+currenciesDisplayName.HUF=forinto h\u00fangaro
+currenciesDisplayName.COP=peso colombiano
+currenciesDisplayName.QAR=riyal de Qatar
currenciesDisplayName.LTT=talonas lituano
-currenciesDisplayName.INR=rupia india
currenciesDisplayName.PTE=escudo portugu\u00e9s
-currenciesDisplayName.AOA=kwanza angole\u00f1o
-currenciesDisplayName.PTC=conto portugu\u00e9s
+currenciesDisplayName.AOR=kwanza reajustado angole\u00f1o (1995-1999)
+currenciesDisplayName.UYU=peso uruguayo
+currenciesDisplayName.GBP=libra esterlina brit\u00e1nica
+currenciesDisplayName.BIF=franco de Burundi
+currenciesDisplayName.INR=rupia india
+currenciesDisplayName.ZRZ=zaire zaire\u00f1o
+currenciesDisplayName.AON=nuevo kwanza angole\u00f1o (1990-2000)
currenciesDisplayName.LTL=litas lituano
+currenciesDisplayName.XFU=franco UIC franc\u00e9s
currenciesDisplayName.KZT=tenge kazako
-currenciesDisplayName.KZR=rublo kazako
-currenciesDisplayName.VGD=d\u00f3lar de las Islas V\u00edrgenes Brit\u00e1nicas
-currenciesDisplayName.NGP=libra nigeriana
-currenciesDisplayName.MMX=certificados de cambio birmanos en d\u00f3lares
+currenciesDisplayName.MZM=metical mozambique\u00f1o
+currenciesDisplayName.UYP=peso uruguayo (1975-1993)
+currenciesDisplayName.AOK=kwanza angole\u00f1o (1977-1990)
+currenciesDisplayName.BUK=kyat birmano
+currenciesDisplayName.GNS=syli guineano
+currenciesDisplayName.XFO=franco oro franc\u00e9s
+currenciesDisplayName.PGK=kina de Pap\u00faa Nueva Guinea
+currenciesDisplayName.SYP=libra siria
+currenciesDisplayName.MZE=escudo mozambique\u00f1o
+currenciesDisplayName.OMR=rial oman\u00ed
currenciesDisplayName.NGN=naira nigeriano
+currenciesDisplayName.ZRN=nuevo zaire zaire\u00f1o
+currenciesDisplayName.AOA=kwanza angole\u00f1o
+currenciesDisplayName.CNY=yuan renminbi chino
+currenciesDisplayName.MAF=franco marroqu\u00ed
+currenciesDisplayName.GNF=franco guineo
currenciesDisplayName.HTG=gourde haitiano
-currenciesDisplayName.SYP=libra siria
-currenciesDisplayName.PSP=libra palestina
-currenciesDisplayName.BHD=dinar bahrein\u00ed
+currenciesDisplayName.MAD=dirham marroqu\u00ed
currenciesDisplayName.MMK=kyat de Myanmar
+currenciesDisplayName.MYR=ringgit malasio
+currenciesDisplayName.LSL=loti lesothense
+currenciesDisplayName.XEU=unidad de moneda europea
+currenciesDisplayName.BHD=dinar bahrein\u00ed
+currenciesDisplayName.SLL=leone de Sierra Leona
+currenciesDisplayName.BTN=ngultrum butan\u00e9s
+currenciesDisplayName.TRL=lira turca
+currenciesDisplayName.KMF=franco comorense
currenciesDisplayName.ANG=flor\u00edn de las Antillas Neerlandesas
currenciesDisplayName.CZK=corona checa
-currenciesDisplayName.IMP=libra esterlina de la Isla de Man
-currenciesDisplayName.BGX=certificados de cambio b\u00falgaros en leva
-currenciesDisplayName.LSL=loti lesothense
-currenciesDisplayName.GAF=franco CFA de Gab\u00f3n
-currenciesDisplayName.BGO=lev b\u00falgaro (1879-1952)
+currenciesDisplayName.AZM=manat azer\u00ed
+currenciesDisplayName.KYD=d\u00f3lar de las Islas Caim\u00e1n
+currenciesDisplayName.GMD=dalasi gambiano
currenciesDisplayName.BGN=nuevo lev b\u00falgaro
-currenciesDisplayName.BGM=lev socialista b\u00falgaro
currenciesDisplayName.CAD=d\u00f3lar canadiense
+currenciesDisplayName.MXV=unidad de inversi\u00f3n (UDI) mexicana
currenciesDisplayName.BGL=lev fuerte b\u00falgaro
-currenciesDisplayName.TRL=lira turca
-currenciesDisplayName.KYD=d\u00f3lar de las Islas Caim\u00e1n
-currenciesDisplayName.CYP=libra chipriota
+currenciesDisplayName.VEB=bol\u00edvar venezolano
+currenciesDisplayName.MLF=franco mal\u00ed
currenciesDisplayName.ILS=nuevo sheqel israel\u00ed
+currenciesDisplayName.MXP=peso de plata mexicano (1861-1992)
+currenciesDisplayName.PES=sol peruano
currenciesDisplayName.GYD=d\u00f3lar guyan\u00e9s
-currenciesDisplayName.AMD=dram armenio
+currenciesDisplayName.MXN=peso mexicano
currenciesDisplayName.ILP=libra israel\u00ed
-currenciesDisplayName.MLF=franco mal\u00ed
-currenciesDisplayName.ILL=sheqel israel\u00ed
-currenciesDisplayName.VEB=bol\u00edvar venezolano
-currenciesDisplayName.ALX=certificados de cambio albaneses en d\u00f3lares
+currenciesDisplayName.SKK=corona eslovaca
+currenciesDisplayName.CYP=libra chipriota
+currenciesDisplayName.XDR=derechos especiales de giro
+currenciesDisplayName.PEN=nuevo sol peruano
currenciesDisplayName.LRD=d\u00f3lar liberiano
-currenciesDisplayName.ALV=lek valute alban\u00e9s
+currenciesDisplayName.PEI=inti peruano
+currenciesDisplayName.AMD=dram armenio
+currenciesDisplayName.BSD=d\u00f3lar de las Bahamas
currenciesDisplayName.HRK=kuna croata
-currenciesDisplayName.REF=franco de Reuni\u00f3n
+currenciesDisplayName.CLP=peso chileno
currenciesDisplayName.HRD=dinar croata
-currenciesDisplayName.ALL=lek alban\u00e9s
-currenciesDisplayName.JEP=libra esterlina de Jersey
-currenciesDisplayName.ALK=lek alban\u00e9s (1946-1961)
-currenciesDisplayName.MKN=dinar macedonio (1992-1993)
-currenciesDisplayName.VDP=viet minh piastre dong viet de Vietnam del Norte
-currenciesDisplayName.VDN=nuevo dong de Vietnam del Norte
-currenciesDisplayName.MKD=dinar macedonio
-currenciesDisplayName.VDD=piastre dong viet de Vietnam del Norte
-currenciesDisplayName.TPP=pataca timorense
currenciesDisplayName.XPF=franco CFP
-currenciesDisplayName.BEL=franco belga (financiero)
-currenciesDisplayName.GWP=peso de Guinea-Biss\u00e1u
-currenciesDisplayName.KWD=dinar kuwait\u00ed
-currenciesDisplayName.GWM=mil reis de Guinea Portuguesa
-currenciesDisplayName.BEF=franco belga
+currenciesDisplayName.FRF=franco franc\u00e9s
+currenciesDisplayName.BRR=cruceiro brasile\u00f1o
+currenciesDisplayName.MKD=dinar macedonio
+currenciesDisplayName.CLF=unidad de fomento chilena
+currenciesDisplayName.ALL=lek alban\u00e9s
+currenciesDisplayName.BRN=nuevo cruzado brasile\u00f1o
+currenciesDisplayName.MWK=kwacha de Malawi
+currenciesDisplayName.BRL=real brasile\u00f1o
currenciesDisplayName.TPE=escudo timorense
-currenciesDisplayName.BEC=franco belga (convertible)
-currenciesDisplayName.GWE=escudo de Guinea Portuguesa
+currenciesDisplayName.BRE=cruceiro brasile\u00f1o (1990-1993)
+currenciesDisplayName.BRC=cruzado brasile\u00f1o
+currenciesDisplayName.BRB=nuevo cruceiro brasile\u00f1o (1967-1986)
+currenciesDisplayName.DEM=marco alem\u00e1n
+currenciesDisplayName.KWD=dinar kuwait\u00ed
+currenciesDisplayName.XCD=d\u00f3lar del Caribe Oriental
+currenciesDisplayName.NPR=rupia nepalesa
+currenciesDisplayName.GWP=peso de Guinea-Biss\u00e1u
+currenciesDisplayName.YUN=dinar convertible yugoslavo
currenciesDisplayName.SVC=col\u00f3n salvadore\u00f1o
-currenciesDisplayName.CWG=flor\u00edn de Curazao
-currenciesDisplayName.BDT=taka de Bangladesh
-currenciesDisplayName.TOS=libra esterlina tongana
-currenciesDisplayName.TOP=pa\u02bbanga tongano
+currenciesDisplayName.YUM=super dinar yugoslavo
+currenciesDisplayName.BEL=franco belga (financiero)
+currenciesDisplayName.SIT=t\u00f3lar esloveno
+currenciesDisplayName.JPY=yen japon\u00e9s
currenciesDisplayName.XOF=franco CFA BCEAO
+currenciesDisplayName.MVR=rufiyaa de Maldivas
+currenciesDisplayName.GWE=escudo de Guinea Portuguesa
+currenciesDisplayName.BEF=franco belga
+currenciesDisplayName.TOP=pa\u02bbanga tongano
+currenciesDisplayName.YUD=dinar fuerte yugoslavo
+currenciesDisplayName.BEC=franco belga (convertible)
currenciesDisplayName.SUR=rublo sovi\u00e9tico
-currenciesDisplayName.SUN=nuevo rublo sovi\u00e9tico
-currenciesDisplayName.NCF=franco germinal de Nueva Caledonia
-currenciesDisplayName.CVE=escudo de Cabo Verde
-currenciesDisplayName.XNF=franco CFA de las Antillas Francesas
+currenciesDisplayName.ROL=leu rumano
+currenciesDisplayName.DDM=ostmark de Alemania del Este
+currenciesDisplayName.BDT=taka de Bangladesh
+currenciesDisplayName.XBD=unidad de cuenta europea (XBD)
+currenciesDisplayName.AWG=flor\u00edn de Aruba
+currenciesDisplayName.XBC=unidad de cuenta europea (XBC)
+currenciesDisplayName.XBB=unidad monetaria europea
+currenciesDisplayName.XBA=unidad compuesta europea
+currenciesDisplayName.NOK=corona noruega
+currenciesDisplayName.MUR=rupia mauriciana
currenciesDisplayName.ZAR=rand sudafricano
-currenciesDisplayName.DOP=peso dominicano
-currenciesDisplayName.CUX=certificados de cambio cubanos
-currenciesDisplayName.ZAP=libra sudafricana
+currenciesDisplayName.SHP=libra de Santa Elena
+currenciesDisplayName.XAU=oro
currenciesDisplayName.ZAL=rand sudafricano (financiero)
+currenciesDisplayName.VND=dong vietnamita
+currenciesDisplayName.TZS=chel\u00edn tanzano
+currenciesDisplayName.GIP=libra de Gibraltar
currenciesDisplayName.TND=dinar tunecino
-currenciesDisplayName.CUP=peso cubano
-currenciesDisplayName.GUF=franco guayan\u00e9s de la Guayana Francesa
+currenciesDisplayName.CVE=escudo de Cabo Verde
currenciesDisplayName.UGX=chel\u00edn ugand\u00e9s
-currenciesDisplayName.LNR=rupia cingalesa
-currenciesDisplayName.AIF=franco de Affars e Issas
-currenciesDisplayName.VAL=lira de la Ciudad del Vaticano
-currenciesDisplayName.STE=escudo de Santo Tom\u00e9 y Pr\u00edncipe
+currenciesDisplayName.ZMK=kwacha zambiano
+currenciesDisplayName.JOD=dinar jordano
+currenciesDisplayName.XAF=franco CFA BEAC
+currenciesDisplayName.LBP=libra libanesa
currenciesDisplayName.UGS=chel\u00edn ugand\u00e9s (1966-1987)
currenciesDisplayName.STD=dobra de Santo Tom\u00e9 y Pr\u00edncipe
-currenciesDisplayName.MHD=d\u00f3lar de las Islas Marshall
-currenciesDisplayName.NZP=libra neozelandesa
currenciesDisplayName.WST=tala samoano
-currenciesDisplayName.WSP=libra samoana
-currenciesDisplayName.HNL=lempira hondure\u00f1o
-currenciesDisplayName.XMF=nuevo franco metropolitano franc\u00e9s
+currenciesDisplayName.KHR=riel camboyano
+currenciesDisplayName.EUR=euro
+currenciesDisplayName.DOP=peso dominicano
+currenciesDisplayName.BOV=MVDOL boliviano
+currenciesDisplayName.MTP=libra maltesa
+currenciesDisplayName.USS=d\u00f3lar estadounidense (mismo d\u00eda)
+currenciesDisplayName.BOP=peso boliviano
+currenciesDisplayName.MTL=lira maltesa
+currenciesDisplayName.CUP=peso cubano
currenciesDisplayName.TMM=manat turcomano
-currenciesDisplayName.GTQ=quetzal guatemalteco
+currenciesDisplayName.USN=d\u00f3lar estadounidense (d\u00eda siguiente)
+currenciesDisplayName.SGD=d\u00f3lar singapurense
currenciesDisplayName.NZD=d\u00f3lar neozeland\u00e9s
-currenciesDisplayName.SSP=libra escocesa
-currenciesDisplayName.BBD=d\u00f3lar de Barbados
+currenciesDisplayName.USD=d\u00f3lar estadounidense
+currenciesDisplayName.HNL=lempira hondure\u00f1o
+currenciesDisplayName.BOB=boliviano
+currenciesDisplayName.ITL=lira italiana
+currenciesDisplayName.PAB=balboa paname\u00f1o
+currenciesDisplayName.GTQ=quetzal guatemalteco
+currenciesDisplayName.LAK=kip laosiano
+currenciesDisplayName.GHC=cedi ghan\u00e9s
+currenciesDisplayName.AUD=d\u00f3lar australiano
currenciesDisplayName.NAD=d\u00f3lar de Namibia
+currenciesDisplayName.KGS=som kirgu\u00eds
currenciesDisplayName.MGF=franco malgache
+currenciesDisplayName.CHF=franco suizo
+currenciesDisplayName.BBD=d\u00f3lar de Barbados
currenciesDisplayName.MGA=ariary malgache
-currenciesDisplayName.EGP=libra egipcia
-currenciesDisplayName.BZH=d\u00f3lar de Honduras Brit\u00e1nica
+currenciesDisplayName.PYG=guaran\u00ed paraguayo
currenciesDisplayName.PLZ=zloty polaco (1950-1995)
-currenciesDisplayName.BAN=nuevo dinar bosnio
-currenciesDisplayName.PLX=certificados de cambio polacos en d\u00f3lares estadounidenses
-currenciesDisplayName.BAM=marco bosnio convertible
-currenciesDisplayName.BZD=d\u00f3lar de Belice
-currenciesDisplayName.BAD=dinar bosnio
-currenciesDisplayName.PLN=zloty polaco
currenciesDisplayName.YER=rial yemen\u00ed
+currenciesDisplayName.ATS=chel\u00edn austriaco
+currenciesDisplayName.ETB=birr et\u00edope
+currenciesDisplayName.BND=d\u00f3lar de Brun\u00e9i
+currenciesDisplayName.JMD=d\u00f3lar de Jamaica
+currenciesDisplayName.EGP=libra egipcia
+currenciesDisplayName.PLN=zloty polaco
+currenciesDisplayName.DZD=dinar argelino
+currenciesDisplayName.ISK=corona islandesa
currenciesDisplayName.SRG=flor\u00edn surinam\u00e9s
-currenciesDisplayName.CSK=corona fuerte checoslovaca
+currenciesDisplayName.LYD=dinar libio
+currenciesDisplayName.BZD=d\u00f3lar de Belice
+currenciesDisplayName.BAM=marco bosnio convertible
+currenciesDisplayName.ESP=peseta espa\u00f1ola
currenciesDisplayName.KRW=won surcoreano
+currenciesDisplayName.NLG=flor\u00edn neerland\u00e9s
+currenciesDisplayName.MRO=ouguiya mauritano
+currenciesDisplayName.BAD=dinar bosnio
+currenciesDisplayName.ZWD=d\u00f3lar de Zimbabue
+currenciesDisplayName.SEK=corona sueca
+currenciesDisplayName.CSK=corona fuerte checoslovaca
currenciesDisplayName.BYR=rublo bielorruso
-currenciesDisplayName.YEI=riyal Imadi yemen\u00ed
-currenciesDisplayName.BYL=rublo bielorruso (1992-1994)
-currenciesDisplayName.CSC=corona checoslovaca
-currenciesDisplayName.KRO=antiguo won surcoreano
-currenciesDisplayName.KRH=hwan surcoreano
-currenciesDisplayName.BYB=nuevo rublo bielorruso (1994-1999)
-currenciesDisplayName.SQS=chel\u00edn de Somalilandia
-currenciesDisplayName.GRN=nuevo dracma griego
+currenciesDisplayName.IRR=rial iran\u00ed
currenciesDisplayName.PKR=rupia pakistan\u00ed
-currenciesDisplayName.AFN=afgani
-currenciesDisplayName.ZWD=d\u00f3lar de Zimbabue
-currenciesDisplayName.LKR=rupia de Sri Lanka
-currenciesDisplayName.GRD=dracma griego
-currenciesDisplayName.IEP=libra irlandesa
-currenciesDisplayName.AFA=afgani (1927-2002)
-currenciesDisplayName.YDD=dinar yemen\u00ed
-currenciesDisplayName.RWF=franco ruand\u00e9s
-currenciesDisplayName.CRC=col\u00f3n costarricense
-currenciesDisplayName.TJS=somoni tayiko
-currenciesDisplayName.TJR=rublo tayiko
-currenciesDisplayName.EEK=corona estonia
-currenciesDisplayName.GQP=peseta guineana de Guinea Ecuatorial
-currenciesDisplayName.MDR=cup\u00f3n rublo moldavo
-currenciesDisplayName.HKD=d\u00f3lar de Hong Kong
-currenciesDisplayName.DKK=corona danesa
-currenciesDisplayName.MDL=leu moldavo
-currenciesDisplayName.GQF=franco de Guinea Ecuatorial
-currenciesDisplayName.GQE=ekuele de Guinea Ecuatorial
-currenciesDisplayName.IDR=rupia indonesia
-currenciesDisplayName.AED=dirham de los Emiratos \u00c1rabes Unidos
-currenciesDisplayName.KPW=won norcoreano
-currenciesDisplayName.IDN=nueva rupia indonesia
-currenciesDisplayName.BWP=pula botsuano
-currenciesDisplayName.MDC=cup\u00f3n leu moldavo
-currenciesDisplayName.IDJ=rupia Java indonesia
-currenciesDisplayName.KPP=won del pueblo norcoreano
-currenciesDisplayName.IDG=flor\u00edn Nica indonesio
-currenciesDisplayName.VUV=vatu vanuatuense
-currenciesDisplayName.XID=dinar isl\u00e1mico
-currenciesDisplayName.SOS=chel\u00edn somal\u00ed
-currenciesDisplayName.ADP=peseta andorrana
-currenciesDisplayName.RUR=rublo ruso (1991-1998)
-currenciesDisplayName.GPF=franco de Guadalupe
-currenciesDisplayName.DJF=franco de Yibuti
-currenciesDisplayName.ADD=diner andorrano
-currenciesDisplayName.MCG=franco germinal monegasco
-currenciesDisplayName.MCF=nuevo franco monegasco
-currenciesDisplayName.ECV=unidad de valor constante (UVC) ecuatoriana
-currenciesDisplayName.ECS=sucre ecuatoriano
-currenciesDisplayName.LIF=franco de Liechtenstein
-currenciesDisplayName.RUB=rublo ruso
-currenciesDisplayName.PHP=peso filipino
-currenciesDisplayName.UZS=sum uzbeko
-currenciesDisplayName.COP=peso colombiano
-currenciesDisplayName.THB=baht tailand\u00e9s
-currenciesDisplayName.IBP=libra de Irlanda del Norte
-currenciesDisplayName.BUR=rupia birmana
-currenciesDisplayName.COF=franco CFA del Congo
-currenciesDisplayName.BUK=kyat birmano
-currenciesDisplayName.COB=peso de papel colombiano
-currenciesDisplayName.UZC=cup\u00f3n som uzbeko
-currenciesDisplayName.UAK=karbovanet ucraniano
-currenciesDisplayName.QAR=riyal de Qatar
-currenciesDisplayName.UAH=grivna ucraniana
-currenciesDisplayName.GNS=syli guineano
-currenciesDisplayName.CNY=yuan renminbi chino
-currenciesDisplayName.MZM=metical mozambique\u00f1o
-currenciesDisplayName.CNX=certificados de cambio chinos en d\u00f3lares estadounidenses
-currenciesDisplayName.UYU=peso uruguayo
-currenciesDisplayName.GNI=franco guineo (1960-1972)
-currenciesDisplayName.SML=lira de San Marino
-currenciesDisplayName.CNP=jen min piao yuan chino
-currenciesDisplayName.MZE=escudo mozambique\u00f1o
-currenciesDisplayName.GNF=franco guineo
-currenciesDisplayName.OMS=rial saidi oman\u00ed
-currenciesDisplayName.PGK=kina de Pap\u00faa Nueva Guinea
-currenciesDisplayName.OMR=rial oman\u00ed
-currenciesDisplayName.UYP=peso uruguayo (1975-1993)
-currenciesDisplayName.XFU=franco UIC franc\u00e9s
-currenciesDisplayName.BTR=rupia butanesa
-currenciesDisplayName.ZRZ=zaire zaire\u00f1o
-currenciesDisplayName.MAF=franco marroqu\u00ed
-currenciesDisplayName.MAD=dirham marroqu\u00ed
-currenciesDisplayName.BTN=ngultrum butan\u00e9s
-currenciesDisplayName.XFO=franco oro franc\u00e9s
-currenciesDisplayName.UYF=peso fuerte uruguayo
-currenciesDisplayName.MYR=ringgit malasio
-currenciesDisplayName.ZRN=nuevo zaire zaire\u00f1o
-currenciesDisplayName.AZM=manat azer\u00ed
-currenciesDisplayName.GMP=libra gambiana
-currenciesDisplayName.KMF=franco comorense
-currenciesDisplayName.SLL=leone de Sierra Leona
-currenciesDisplayName.GMD=dalasi gambiano
-currenciesDisplayName.XEU=unidad de moneda europea
-currenciesDisplayName.BSP=libra de las Bahamas
-currenciesDisplayName.CMF=franco CFA de Camer\u00fan
-currenciesDisplayName.MXV=unidad de inversi\u00f3n (UDI) mexicana
-currenciesDisplayName.XEF=franco CFA BCEAEC
-currenciesDisplayName.BSD=d\u00f3lar de las Bahamas
-currenciesDisplayName.MXP=peso de plata mexicano (1861-1992)
-currenciesDisplayName.MXN=peso mexicano
-currenciesDisplayName.PES=sol peruano
-currenciesDisplayName.GLK=corona de Groenlandia
-currenciesDisplayName.BRZ=cruceiro brasile\u00f1o (1942-1967)
-currenciesDisplayName.PEN=nuevo sol peruano
-currenciesDisplayName.CLP=peso chileno
-currenciesDisplayName.SKK=corona eslovaca
-currenciesDisplayName.PEI=inti peruano
-currenciesDisplayName.BRR=cruceiro brasile\u00f1o
-currenciesDisplayName.XDR=derechos especiales de giro
-currenciesDisplayName.FRG=franco germinal/franco Poincar\u00e9 franc\u00e9s
-currenciesDisplayName.FRF=franco franc\u00e9s
-currenciesDisplayName.BRN=nuevo cruzado brasile\u00f1o
-currenciesDisplayName.CLF=unidad de fomento chilena
-currenciesDisplayName.CLE=escudo chileno
-currenciesDisplayName.BRL=real brasile\u00f1o
-currenciesDisplayName.CLC=c\u00f3ndor chileno
-currenciesDisplayName.BRE=cruceiro brasile\u00f1o (1990-1993)
-currenciesDisplayName.DES=sperrmark alem\u00e1n
-currenciesDisplayName.MWP=libra de Malawi
-currenciesDisplayName.BRC=cruzado brasile\u00f1o
-currenciesDisplayName.BRB=nuevo cruceiro brasile\u00f1o (1967-1986)
-currenciesDisplayName.MWK=kwacha de Malawi
-currenciesDisplayName.PDR=rublo de Transdniestria
-currenciesDisplayName.DEM=marco alem\u00e1n
-currenciesDisplayName.TDF=franco CFA del Chad
-currenciesDisplayName.PDN=nuevo rublo de Transdniestria
-currenciesDisplayName.PDK=cup\u00f3n rublo de Transdniestria
-currenciesDisplayName.NPR=rupia nepalesa
-currenciesDisplayName.CKD=d\u00f3lar de las Islas Cook
-currenciesDisplayName.JPY=yen japon\u00e9s
-currenciesDisplayName.MVR=rufiyaa de Maldivas
-currenciesDisplayName.XCF=nuevo franco CFA
-currenciesDisplayName.MVP=rupia de Maldivas
-currenciesDisplayName.XCD=d\u00f3lar del Caribe Oriental
-currenciesDisplayName.SIT=t\u00f3lar esloveno
-currenciesDisplayName.YUR=dinar reformado yugoslavo
-currenciesDisplayName.AWG=flor\u00edn de Aruba
-currenciesDisplayName.YUO=dinar de octubre yugoslavo
-currenciesDisplayName.DDM=ostmark de Alemania del Este
-currenciesDisplayName.YUN=dinar convertible yugoslavo
-currenciesDisplayName.YUM=super dinar yugoslavo
-currenciesDisplayName.TCC=corona de las Islas Turcas y Caicos
-currenciesDisplayName.YUG=dinar 1994 yugoslavo
-currenciesDisplayName.YUF=dinar de la Federaci\u00f3n Yugoslava
-currenciesDisplayName.RON=nuevo leu rumano
-currenciesDisplayName.YUD=dinar fuerte yugoslavo
-currenciesDisplayName.ROL=leu rumano
-currenciesDisplayName.SIB=t\u00f3lar bons esloveno
-currenciesDisplayName.NOK=corona noruega
-currenciesDisplayName.MUR=rupia mauriciana
-currenciesDisplayName.XBD=unidad de cuenta europea (XBD)
-currenciesDisplayName.GIP=libra de Gibraltar
-currenciesDisplayName.VNS=dong nacional vietnamita
-currenciesDisplayName.XBC=unidad de cuenta europea (XBC)
-currenciesDisplayName.VNR=dong de la Rep\u00fablica del vietnamita
-currenciesDisplayName.XBB=unidad monetaria europea
-currenciesDisplayName.XBA=unidad compuesta europea
-currenciesDisplayName.KID=d\u00f3lar de Kiribati
-currenciesDisplayName.SHP=libra de Santa Elena
-currenciesDisplayName.VNN=nuevo dong vietnamita
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=\u20a7
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=d\u00f3lar de Bermudas
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.NIO=C$
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.ECS=S/
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.ESP=\u20a7
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=ene®feb®mar®abr®may®jun®jul®ago®sep®oct®nov®dic®®
months=enero®febrero®marzo®abril®mayo®junio®julio®agosto®septiembre®octubre®noviembre®diciembre®®
shortWeekdays=®dom®lun®mar®mi\u00e9®jue®vie®s\u00e1b®
@@ -773,7 +366,7 @@ mediumDateFormat=dd-MMM-yy
longDateFormat=d' de 'MMMM' de 'yyyy
fullDateFormat=EEEE d' de 'MMMM' de 'yyyy
fullTimeFormat=HH'H'mm''ss\" z
-zoneStrings=America/Indianapolis®EST®Hora est\u00e1ndar oriental®EST®Hora est\u00e1ndar oriental®©America/Halifax®AST®Hora est\u00e1ndar del Atl\u00e1ntico®ADT®Hora de verano del Atl\u00e1ntico®©Pacific/Honolulu®HST®Hora est\u00e1ndar de Hawai®HST®Hora est\u00e1ndar de Hawai®©America/Denver®MST®Hora est\u00e1ndar de Monta\u00f1a®MDT®Hora de verano de Monta\u00f1a®©America/Anchorage®AST®Hora est\u00e1ndar de Alaska®ADT®Hora de verano de Alaska®©America/St_Johns®CNT®Hora est\u00e1ndar de Newfoundland®CDT®Hora de verano de Newfoundland®©Africa/Casablanca®GMT®Hora media de Greenwich®GMT®Hora media de Greenwich®©America/Chicago®CST®Hora est\u00e1ndar central®CDT®Hora de verano central®©Asia/Shanghai®CTT®Hora est\u00e1ndar de China®CDT®Hora est\u00e1ndar de China®©Asia/Tokyo®JST®Hora est\u00e1ndar de Jap\u00f3n®JST®Hora est\u00e1ndar de Jap\u00f3n®©America/New_York®EST®Hora est\u00e1ndar oriental®EDT®Hora de verano oriental®©Europe/Bucharest®EET®Hora est\u00e1ndar de Europa del Este®EEST®Hora de verano de Europa del Este®©America/Los_Angeles®PST®Hora est\u00e1ndar del Pac\u00edfico®PDT®Hora de verano del Pac\u00edfico®©America/Phoenix®MST®Hora est\u00e1ndar de Monta\u00f1a®MST®Hora est\u00e1ndar de Monta\u00f1a®©Etc/GMT®GMT®Hora media de Greenwich®GMT®Hora media de Greenwich®©Asia/Jerusalem®IST®Hora est\u00e1ndar de Israel®IDT®Hora de verano de Israel®©Europe/Paris®CET®Hora est\u00e1ndar de Europa Central®CEST®Hora de verano de Europa Central®©
+zoneStrings=Europe/Paris®CET®Hora est\u00e1ndar de Europa Central®CEST®Hora de verano de Europa Central®©Pacific/Honolulu®HST®Hora est\u00e1ndar de Hawai®HST®Hora est\u00e1ndar de Hawai®©America/Denver®MST®Hora est\u00e1ndar de Monta\u00f1a®MDT®Hora de verano de Monta\u00f1a®©Asia/Jerusalem®IST®Hora est\u00e1ndar de Israel®IDT®Hora de verano de Israel®©America/Anchorage®AST®Hora est\u00e1ndar de Alaska®ADT®Hora de verano de Alaska®©Africa/Casablanca®GMT®Hora media de Greenwich®GMT®Hora media de Greenwich®©America/Phoenix®MST®Hora est\u00e1ndar de Monta\u00f1a®MST®Hora est\u00e1ndar de Monta\u00f1a®©America/Los_Angeles®PST®Hora est\u00e1ndar del Pac\u00edfico®PDT®Hora de verano del Pac\u00edfico®©America/Chicago®CST®Hora est\u00e1ndar central®CDT®Hora de verano central®©America/Halifax®AST®Hora est\u00e1ndar del Atl\u00e1ntico®ADT®Hora de verano del Atl\u00e1ntico®©America/St_Johns®CNT®Hora est\u00e1ndar de Newfoundland®CDT®Hora de verano de Newfoundland®©America/New_York®EST®Hora est\u00e1ndar oriental®EDT®Hora de verano oriental®©Asia/Shanghai®CTT®Hora est\u00e1ndar de China®CDT®Hora est\u00e1ndar de China®©Asia/Tokyo®JST®Hora est\u00e1ndar de Jap\u00f3n®JST®Hora est\u00e1ndar de Jap\u00f3n®©Europe/Bucharest®EET®Hora est\u00e1ndar de Europa del Este®EEST®Hora de verano de Europa del Este®©America/Indianapolis®EST®Hora est\u00e1ndar oriental®EST®Hora est\u00e1ndar oriental®©
territories.TL=Timor Oriental
territories.TK=Islas Tokelau
territories.TJ=Tayikist\u00e1n
@@ -862,6 +455,7 @@ territories.CX=Isla Navidad
territories.CV=Cabo Verde
territories.PA=Panam\u00e1
territories.CU=Cuba
+territories.CS=Serbia y Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=China
@@ -932,17 +526,16 @@ territories.AI=Anguila
territories.MS=Montserrat
territories.MR=Mauritania
territories.AG=Antigua y Barbuda
-territories.MQ=Martinica
territories.AF=Afganist\u00e1n
-territories.MP=Islas Marianas del Norte
+territories.MQ=Martinica
territories.AE=Emiratos \u00c1rabes Unidos
-territories.MO=Macao, Regi\u00f3n administrativa especial de China
+territories.MP=Islas Marianas del Norte
territories.AD=Andorra
+territories.MO=Macao, Regi\u00f3n administrativa especial de China
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mal\u00ed
territories.MK=Macedonia
-territories.YU=Yugoslavia
territories.YT=Mayotte
territories.MH=Islas Marshall
territories.MG=Madagascar
@@ -1013,10 +606,9 @@ territories.TR=Turqu\u00eda
territories.TO=Tonga
territories.TN=T\u00fanez
territories.TM=Turkmenist\u00e1n
-languages.gwi=kutchin
languages.akk=acadio
+languages.gwi=kutchin
languages.eka=ekajuk
-languages.ijo=ijo
languages.xh=xhosa
languages.sux=sumerio
languages.sus=susu
@@ -1027,19 +619,18 @@ languages.pon=pohnpeiano
languages.min=minangkabau
languages.suk=sukuma
languages.wo=uolof
-languages.lol=mongo
languages.kut=kutenai
+languages.lol=mongo
languages.mic=micmac
languages.wa=val\u00f3n
languages.kum=kumyk
languages.zap=zapoteco
languages.cus=cusitas (otras)
-languages.jbo=lojban
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volapuk
languages.oto=lenguas otomanas
languages.vi=vietnamita
-languages.vai=vai
languages.rar=rarotongano
languages.ve=venda
languages.rap=rapanui
@@ -1059,8 +650,8 @@ languages.egy=egipcio (antiguo)
languages.ug=uigur
languages.fan=fang
languages.ssa=nilosaharianas (otras)
-languages.mga=irland\u00e9s medieval (900-1200)
languages.bat=b\u00e1lticas (otras)
+languages.mga=irland\u00e9s medieval (900-1200)
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1088,8 +679,8 @@ languages.kru=kurukh
languages.tg=tayiko
languages.byn=blin
languages.te=telugu
-languages.kro=kru
languages.csb=casubio
+languages.kro=kru
languages.ta=tamil
languages.tkl=tokelauano
languages.efi=efik
@@ -1110,11 +701,11 @@ languages.sm=samoano
languages.sl=esloveno
languages.grc=griego antiguo (hasta el 1453)
languages.sk=eslovaco
-languages.grb=gerbo
+languages.grb=grebo
languages.si=singal\u00e9s
languages.sh=serbo-croata
-languages.crh=turco de Crimea; t\u00e1rtaro de Crimea
-languages.afa=afroasi\u00e1tica (otra)
+languages.afa=afroasi\u00e1ticas (otras)
+languages.crh=t\u00e1rtaro de Crimea
languages.sg=sango
languages.se=sami septentrional
languages.sd=sindhi
@@ -1128,7 +719,6 @@ languages.ro=rumano
languages.rn=kiroundi
languages.rm=reto-romance
languages.mdf=moksha
-languages.tiv=tiv
languages.ady=adigeo
languages.zun=zuni
languages.kpe=kpelle
@@ -1138,13 +728,13 @@ languages.son=songhai
languages.cpp=criollas y pidgins, basadas en el portugu\u00e9s (otras)
languages.sog=sogdiano
languages.ada=adangme
-languages.kos=kosraeano
languages.hit=hitita
+languages.kos=kosraeano
languages.cpe=criollas y pidgins, basadas en el ingl\u00e9s (otras)
languages.him=himachali
-languages.kok=konkani
-languages.hil=hiligaynon
languages.got=g\u00f3tico
+languages.hil=hiligaynon
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
@@ -1158,7 +748,6 @@ languages.snk=sonink\u00e9
languages.cop=copto
languages.yap=yap\u00e9s
languages.ach=acoli
-languages.yao=yao
languages.phi=filipinas (otras)
languages.pl=polaco
languages.ace=acehn\u00e9s
@@ -1171,7 +760,7 @@ languages.bua=buriat
languages.mas=masai
languages.smn=sami inari
languages.os=os\u00e9tico
-languages.map=austronesio
+languages.map=austronesias (otras)
languages.or=oriya
languages.man=mandingo
languages.smj=sami lule
@@ -1184,8 +773,8 @@ languages.mag=magahi
languages.mad=madur\u00e9s
languages.sma=sami meridional
languages.oc=occitano (despu\u00e9s del 1500)
-languages.nso=sesotho septentrional
-languages.btk=batak
+languages.nso=sotho septentrional
+languages.btk=batak (Indonesia)
languages.myv=erzya
languages.dgr=dogrib
languages.ny=nyanja
@@ -1216,21 +805,21 @@ languages.ms=malayo
languages.mr=marathi
languages.fro=franc\u00e9s antiguo (842-1400 aprox.)
languages.mo=moldavo
-languages.frm=franc\u00e9s medieval (1400-1600 aprox.)
languages.mn=mongol
-languages.jrb=judeo-\u00e1rabe
+languages.frm=franc\u00e9s medieval (1400-1600 aprox.)
languages.ml=malayalam
+languages.jrb=judeo-\u00e1rabe
languages.mk=macedonio
languages.mi=maor\u00ed
languages.mh=marshal\u00e9s
languages.mg=malgache
languages.mwr=marwari
languages.bra=braj
-languages.den=slave
languages.lv=let\u00f3n
+languages.den=slave (atabasca)
languages.lu=luba-katanga
-languages.del=delaware
languages.lt=lituano
+languages.del=delaware
languages.lo=laosiano
languages.ln=lingala
languages.li=limburgu\u00e9s
@@ -1245,7 +834,7 @@ languages.ky=kirghiz
languages.kw=c\u00f3rnico
languages.kv=komi
languages.ku=kurdo
-languages.sio=lenguas siouan
+languages.sio=lenguas sioux
languages.ks=cachemiro
languages.kr=kanuri
languages.awa=avadhi
@@ -1259,7 +848,7 @@ languages.kj=kuanyama
languages.sid=sidamo
languages.ki=kikuyu
languages.kg=kongo
-languages.non=norse antiguo
+languages.non=n\u00f3rdico antiguo
languages.ka=georgiano
languages.mus=creek
languages.roa=rom\u00e1nicas (otras)
@@ -1270,7 +859,6 @@ languages.jv=javan\u00e9s
languages.gil=gilbert\u00e9s
languages.znd=zande
languages.shn=shan
-languages.fon=fon
languages.xal=kalmyk
languages.aus=lenguas australianas
languages.kho=kotan\u00e9s
@@ -1283,38 +871,38 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italiano
languages.sgn=lenguajes de signos
-languages.is=island\u00e9s
languages.kha=khasi
+languages.is=island\u00e9s
languages.chr=cherokee
languages.pam=pampanga
languages.pal=pahlavi
languages.chp=chipewyan
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=jerga chinuk
languages.chm=mar\u00ed
languages.tyv=tuviniano
-languages.bnt=bant\u00fa
+languages.bnt=bant\u00faes (otras)
languages.pag=pangasin\u00e1n
-languages.ik=inupiak
languages.chk=truk\u00e9s
-languages.ii=sichuan yi
+languages.ik=inupiak
languages.haw=hawaiano
+languages.ii=sichuan yi
languages.lam=lamba
-languages.ig=igbo
languages.chg=chagat\u00e1i
-languages.sga=irland\u00e9s antiguo (hasta 900)
+languages.ig=igbo
+languages.sga=irland\u00e9s antiguo (hasta el 900)
languages.paa=pap\u00faes (otras)
languages.ie=interlingue
languages.id=indonesio
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
languages.lad=ladino
-languages.hz=herero
-languages.hai=haida
languages.dar=dargva
+languages.hai=haida
+languages.hz=herero
languages.hy=armenio
languages.ath=lenguas atabascas
languages.hu=h\u00fangaro
@@ -1336,10 +924,10 @@ languages.iro=lenguas iroquesas
languages.gn=guaran\u00ed
languages.gl=gallego
languages.arw=arahuaco
-languages.gez=geez
-languages.art=artificiales (otras)
languages.gd=ga\u00e9lico escoc\u00e9s
-languages.ira=iranio
+languages.art=artificiales (otras)
+languages.gez=geez
+languages.ira=iranias (otras)
languages.ga=irland\u00e9s
languages.arp=arapaho
languages.arn=araucano
@@ -1347,8 +935,8 @@ languages.fy=fris\u00f3n
languages.bla=siksika
languages.gem=germ\u00e1nicas (otras)
languages.ypk=lenguas yupik
-languages.arc=arameo
languages.fr=franc\u00e9s
+languages.arc=arameo
languages.fo=fero\u00e9s
languages.cel=celtas (otras)
languages.fj=fidji
@@ -1372,12 +960,11 @@ languages.tum=tumbuka
languages.mos=mossi
languages.dz=bhutan\u00ed
languages.nic=n\u00edger-kordofanianas (otras)
-languages.lus=lushai
-languages.fiu=finougrias (otras)
languages.dv=divehi
+languages.fiu=finougrias (otras)
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
-languages.luo=luo
languages.lun=lunda
languages.apa=lenguas apache
languages.lui=luise\u00f1o
@@ -1390,37 +977,37 @@ languages.was=washo
languages.und=indeterminada
languages.war=waray
languages.da=dan\u00e9s
-languages.dum=neerland\u00e9s medio (1050-1350 aprox.)
+languages.dum=neerland\u00e9s medieval (1050-1350 aprox.)
languages.wal=walamo
languages.mno=lenguas manobo
languages.wak=lenguas wakasha
languages.sat=santali
languages.cy=gal\u00e9s
languages.sas=sasak
-languages.kbd=kabardiana
languages.cv=chuvash
+languages.kbd=kabardiano
languages.cu=eslavo eclesi\u00e1stico
languages.mni=manipuri
languages.cs=checo
languages.sam=arameo samaritano
languages.cr=cree
-languages.sal=lenguas salishan
+languages.sal=lenguas salish
languages.dua=duala
languages.co=corso
languages.sai=indias sudamericanas (otras)
languages.mnc=manch\u00fa
languages.sah=yakut
-languages.kaw=kawi
-languages.inh=ingush
languages.gba=gbaya
+languages.inh=ingush
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=indoeuropeas (otras)
languages.bho=bhojpuri
+languages.ine=indoeuropeas (otras)
languages.enm=ingl\u00e9s medieval (1100-1500)
-languages.kar=karen
-languages.inc=\u00edndicas (otras)
languages.ce=checheno
+languages.inc=\u00edndicas (otras)
+languages.kar=karen
languages.gay=gayo
languages.ca=catal\u00e1n
languages.umb=umbundu
@@ -1428,19 +1015,19 @@ languages.syr=siriaco
languages.kam=kamba
languages.tsi=tsimshiano
languages.ang=ingl\u00e9s antiguo (450-1100 aprox.)
-languages.kac=kachin
languages.cau=cauc\u00e1sicas (otras)
+languages.kac=kachin
languages.kab=cabila
-languages.kaa=karakalpako
languages.bs=bosnio
-languages.car=caribe
+languages.kaa=karakalpako
languages.br=bret\u00f3n
+languages.car=caribe
languages.bo=tibetano
languages.bn=bengal\u00ed
languages.bm=bambara
languages.gaa=ga
-languages.cai=indias centroamericanas (otras)
languages.bi=bislama
+languages.cai=indias centroamericanas (otras)
languages.bh=bihari
languages.bg=b\u00falgaro
languages.be=bielorruso
@@ -1454,10 +1041,10 @@ languages.az=azer\u00ed
languages.ay=aymara
languages.av=avar
languages.as=asam\u00e9s
-languages.dsb=sorbio inferior
languages.ar=\u00e1rabe
-languages.ilo=ilocano
+languages.dsb=sorbio inferior
languages.elx=elamita
+languages.ilo=ilocano
languages.zh=chino
languages.an=aragon\u00e9s
languages.pra=lenguas prakrit
@@ -1475,8 +1062,8 @@ languages.ale=aleutiano
languages.mkh=mon-jemer (otras)
languages.yi=yidish
languages.dra=drav\u00eddicas (otras)
-languages.ber=bereber
-languages.nds=bajo alem\u00e1n; bajo saj\u00f3n
+languages.ber=bereberes (otras)
+languages.nds=bajo alem\u00e1n
languages.bem=bemba
languages.bej=beja
languages.tpi=tok pisin
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_AR.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_AR.properties
index 97b24d4..9ab78a9 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_AR.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_AR.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currenciesDisplayName.ARS=Peso Argentino
currenciesDisplayName.USD=D\u00f3lar Americano
currenciesSymbol.ARS=$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_BO.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_BO.properties
index ab383ea..723d13a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_BO.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_BO.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CL.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CL.properties
index 60957a1..0498645 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CL.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CL.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currencyFormat=\u00a4#,##0.00;\u00a4-#,##0.00
currenciesDisplayName.CLP=Peso Chileno
currenciesDisplayName.USD=D\u00f3lar Americano
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CO.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CO.properties
index 2adadca..1178909 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CO.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CO.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currenciesDisplayName.COP=Peso de Colombia
currenciesDisplayName.USD=D\u00f3lar Americano
currenciesSymbol.COP=$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CR.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CR.properties
index 8eb8453..04eb63d 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CR.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_CR.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_DO.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_DO.properties
index 89ee64c..0214a02 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_DO.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_DO.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_EC.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_EC.properties
index 7ece89d..df3b509 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_EC.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_EC.properties
@@ -5,9 +5,10 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
+decimalSeparator=.
+groupingSeparator=,
currencyFormat=\u00a4#,##0.00;\u00a4-#,##0.00
+currenciesSymbol.USD=$
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=H:mm
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_ES.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_ES.properties
index deccfab..52dd801 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_ES.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_ES.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_GT.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_GT.properties
index 9c0575d..68a375d 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_GT.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_GT.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
mediumDateFormat=d/MM/yyyy
shortTimeFormat=hh:mm a
mediumTimeFormat=hh:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_HN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_HN.properties
index f4b45c9..c2dd489 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_HN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_HN.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
longDateFormat=dd' de 'MMMM' de 'yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_MX.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_MX.properties
index b181310..50f4220 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_MX.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_MX.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
currenciesDisplayName.MXN=MXN
currenciesDisplayName.USD=D\u00f3lar Americano
currenciesSymbol.MXN=$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_NI.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_NI.properties
index 2d7a9e6..5bba6ad 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_NI.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_NI.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PA.properties
index 178724a..89e2982 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PA.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
shortDateFormat=MM/dd/yy
mediumDateFormat=MM/dd/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PE.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PE.properties
index a30e6c6..1cfe9b7 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PE.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PE.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
currencyFormat=\u00a4#,##0.00;\u00a4-#,##0.00
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PR.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PR.properties
index 7937a8a..ece3beb 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PR.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PR.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
currenciesDisplayName.USD=D\u00f3lar Americano
currenciesSymbol.USD=$
shortDateFormat=MM/dd/yy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PY.properties
index ed77a3c..40bc997 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PY.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_PY.properties
@@ -5,9 +5,7 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
-currencyFormat=\u00a4 #,##0;\u00a4 -#,##0
+currencyFormat=\u00a4 #,##0.00;\u00a4 -#,##0.00
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_SV.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_SV.properties
index c6f0ab3..1155039 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_SV.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_SV.properties
@@ -5,6 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=.
+groupingSeparator=,
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_US.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_US.properties
index 99d8681..b45673f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_US.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_US.properties
@@ -5,7 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-minNumberOfDaysInFirstWeek=1
+decimalSeparator=.
+groupingSeparator=,
firstDayOfWeek=sun
shortDateFormat=M/d/yy
mediumDateFormat=MMM d, yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_UY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_UY.properties
index c174d2b..5356fcf 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_UY.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_UY.properties
@@ -5,9 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currencyFormat=\u00a4 #,##0.00;(\u00a4#,##0.00)
+currenciesSymbol.UYU=$
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
shortTimeFormat=hh:mm a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_VE.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_VE.properties
index 9925e16..288794f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_VE.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_es_VE.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=.
currencyFormat=\u00a4#,##0.00;\u00a4 -#,##0.00
shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_et.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_et.properties
index f73b78a..3f01ee6 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_et.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_et.properties
@@ -8,7 +8,7 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.EEK=EEK
+currenciesDisplayName.EEK=kroon
currenciesSymbol.EEK=kr
shortMonths=jaan®veebr®m\u00e4rts®apr®mai®juuni®juuli®aug®sept®okt®nov®dets®®
months=jaanuar®veebruar®m\u00e4rts®aprill®mai®juuni®juuli®august®september®oktoober®november®detsember®®
@@ -26,12 +26,12 @@ longTimeFormat=H:mm:ss z
fullTimeFormat=H:mm:ss z
territories.TL=Ida-Timor
territories.TK=Tokelau
-territories.TJ=Tad\u012aikistan
+territories.TJ=Tad\u017eikistan
territories.TH=Tai
territories.TG=Togo
territories.TF=Prantsuse L\u00f5unaalad
territories.GY=Guyana
-territories.TD=Tiaad
+territories.TD=T\u0161aad
territories.TC=Turks ja Caicos
territories.GW=Guinea-Bissau
territories.GU=Guam
@@ -66,7 +66,7 @@ territories.SH=Saint Helena
territories.SG=Singapur
territories.SE=Rootsi
territories.SD=Sudaan
-territories.SC=Seiiellid
+territories.SC=Sei\u0161ellid
territories.SB=Saalomoni Saared
territories.SA=Saudi Araabia
territories.FR=Prantsusmaa
@@ -75,7 +75,7 @@ territories.FM=Mikroneesia Liiduriigid
territories.RW=Rwanda
territories.FK=Falklandi saared
territories.RU=Venemaa
-territories.FJ=Fid\u012ai
+territories.FJ=Fid\u017ei
territories.FI=Soome
territories.RO=Rumeenia
territories.RE=R\u00e9union
@@ -86,7 +86,7 @@ territories.EH=L\u00e4\u00e4ne-Sahara
territories.EG=Egiptus
territories.EE=Eesti
territories.EC=Ecuador
-territories.DZ=Al\u012aeeria
+territories.DZ=Al\u017eeeria
territories.QA=Katar
territories.DO=Dominikaani Vabariik
territories.PY=Paraguay
@@ -105,21 +105,22 @@ territories.PK=Pakistan
territories.PH=Filipiinid
territories.PG=Paapua Uus-Guinea
territories.PF=Prantsuse Pol\u00fcneesia
-territories.CZ=Tiehhi Vabariik
+territories.CZ=T\u0161ehhi Vabariik
territories.PE=Peruu
territories.CY=K\u00fcpros
territories.CX=J\u00f5ulusaar
territories.CV=Cabo Verde
territories.PA=Panama
territories.CU=Kuuba
+territories.CS=Serbia ja Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=Hiina
territories.CM=Kamerun
-territories.CL=Tiiili
+territories.CL=T\u0161iili
territories.CK=Cooki saared
territories.CI=Cote d\u2019Ivoire
-territories.CH=\u0128veits
+territories.CH=\u0160veits
territories.CG=Kongo
territories.CF=Kesk-Aafrika Vabariik
territories.CD=Kongo DV
@@ -155,7 +156,7 @@ territories.BA=Bosnia ja Hertsegoviina
territories.NI=Nicaragua
territories.NG=Nigeeria
territories.NF=Norfolk
-territories.AZ=Aserbaid\u012aaan
+territories.AZ=Aserbaid\u017eaan
territories.NE=Niger
territories.NC=Uus-Kaledoonia
territories.AW=Aruba
@@ -182,17 +183,16 @@ territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritaania
territories.AG=Antigua ja Barbuda
-territories.MQ=Martinique
territories.AF=Afganistan
-territories.MP=P\u00f5hja-Mariaanid
+territories.MQ=Martinique
territories.AE=Araabia \u00dchendemiraadid
-territories.MO=Aomeni Hiina erihalduspiirkond
+territories.MP=P\u00f5hja-Mariaanid
territories.AD=Andorra
+territories.MO=Aomeni Hiina erihalduspiirkond
territories.MN=Mongoolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedoonia Vabariik
-territories.YU=Jugoslaavia
territories.YT=Mayotte
territories.MH=Marshalli Saared
territories.MG=Madagaskar
@@ -220,7 +220,7 @@ territories.KN=Saint Kitts ja Nevis
territories.KM=Komoorid
territories.KI=Kiribati
territories.WS=Samoa
-territories.KH=Kambod\u012aa
+territories.KH=Kambod\u017ea
territories.KG=K\u00f5rg\u00f5zstan
territories.KE=Kenya
territories.WF=Wallis ja Futuna
@@ -272,8 +272,8 @@ languages.el=Kreeka
languages.nl=Hollandi
languages.bg=Bulgaaria
languages.lv=L\u00e4ti
+languages.cs=T\u0161ehhi
languages.he=Heebrea
-languages.cs=Tiehhi
languages.it=Itaalia
languages.lt=Leedu
languages.fr=Prantsuse
@@ -288,8 +288,8 @@ languages.pl=Poola
languages.sl=Sloveeni
languages.sk=Slovaki
languages.de=Saksa
-languages.hu=Ungari
languages.et=Eesti
+languages.hu=Ungari
languages.es=Hispaania
-languages.hr=Horvaadi
languages.da=Taani
+languages.hr=Horvaadi
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eu.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eu.properties
index 3d8b8e7..c606f78 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eu.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_eu.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.ESP=ESP
currenciesSymbol.ESP=\u20a7
shortMonths=urt®ots®mar®api®mai®eka®uzt®abu®ira®urr®aza®abe®®
months=urtarrila®otsaila®martxoa®apirila®maiatza®ekaina®uztaila®abuztua®iraila®urria®azaroa®abendua®®
@@ -32,7 +31,6 @@ territories.AF=Afganistan
territories.ST=Sao Tom\u00e9 eta Principe
territories.AE=Arabiar Emirrerri Batuak
territories.SR=Surinam
-territories.YU=Serbia eta Montenegro
territories.MK=Mazedonia
territories.MH=Marshall uharteak
territories.SL=Sierra Leona
@@ -63,11 +61,11 @@ territories.ES=Espainia
territories.KR=Hego Korea
territories.KP=Ipar Korea
territories.KN=Saint Kitts eta Nevis
-territories.KM=Komoreak
territories.EH=Mendebaldeko Sahara
+territories.KM=Komoreak
territories.EG=Egipto
-territories.KH=Kanbodia
territories.EC=Ekuador
+territories.KH=Kanbodia
territories.KG=Kirgizistan
territories.KE=Kenia
territories.DZ=Aljeria
@@ -75,10 +73,10 @@ territories.QA=Katar
territories.PY=Paraguai
territories.DO=Dominikar Errepublika
territories.DM=Dominika
-territories.JP=Japonia
territories.DK=Danimarka
-territories.JO=Jordania
+territories.JP=Japonia
territories.DJ=Djibuti
+territories.JO=Jordania
territories.JM=Jamaika
territories.DE=Alemania
territories.PL=Polonia
@@ -89,14 +87,15 @@ territories.CY=Zipre
territories.CV=Cabo Verde
territories.CU=Kuba
territories.VC=Saint Vincent eta Grenadinak
+territories.CS=Serbia eta Montenegro
territories.VA=Vatikano
-territories.IT=Italia
territories.CO=Kolonbia
-territories.IS=Islandia
+territories.IT=Italia
territories.CN=Txina
+territories.IS=Islandia
territories.CM=Kamerun
-territories.IQ=Irak
territories.CL=Txile
+territories.IQ=Irak
territories.UY=Uruguai
territories.CI=Boli Kosta
territories.CH=Suitza
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa.properties
index caae448..a8a5e36 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa.properties
@@ -5,23 +5,77 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.AFA=\u0627\u0641\u063a\u0627\u0646\u06cc
-currenciesDisplayName.IRR=IRR
+percent=\u066a
+exponential=\u00d7\u06f1\u06f0^
+minusSign=\u2212
+zeroDigit=\u06f0
+decimalSeparator=\u066b
+groupingSeparator=\u066c
+percentFormat='\u202a'%#,##0'\u202c'
+currencyFormat=#,##0.00 \u00a4;'\u202a'-#,##0.00'\u202c' \u00a4
+currenciesDisplayName.CHF=\u0641\u0631\u0627\u0646\u06a9 \u0633\u0648\u0626\u06cc\u0633
+currenciesDisplayName.AUD=\u062f\u0644\u0627\u0631 \u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627
+currenciesDisplayName.RUB=\u0631\u0648\u0628\u0644 \u0631\u0648\u0633\u06cc\u0647
+currenciesDisplayName.SEK=\u06a9\u0631\u0648\u0646 \u0633\u0648\u0626\u062f
+currenciesDisplayName.TND=\u062f\u06cc\u0646\u0627\u0631 \u062a\u0648\u0646\u0633
+currenciesDisplayName.BHD=\u062f\u06cc\u0646\u0627\u0631 \u0628\u062d\u0631\u06cc\u0646
+currenciesDisplayName.ATS=\u0634\u06cc\u0644\u06cc\u0646\u06af \u0627\u062a\u0631\u06cc\u0634
+currenciesDisplayName.BND=\u062f\u0644\u0627\u0631 \u0628\u0631\u0648\u0646\u0626\u06cc
+currenciesDisplayName.HUF=\u0641\u0648\u0631\u06cc\u0646\u062a \u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646
+currenciesDisplayName.KWD=\u062f\u06cc\u0646\u0627\u0631 \u06a9\u0648\u06cc\u062a
+currenciesDisplayName.INR=\u0631\u0648\u067e\u06cc\u0647\u0654 \u0647\u0646\u062f
+currenciesDisplayName.AED=\u062f\u0631\u0647\u0645 \u0627\u0645\u0627\u0631\u0627\u062a
+currenciesDisplayName.TJS=\u0633\u0627\u0645\u0627\u0646\u06cc \u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646
+currenciesDisplayName.TJR=\u0631\u0648\u0628\u0644 \u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646
+currenciesDisplayName.AZM=\u0645\u0646\u0627\u062a \u062c\u0645\u0647\u0648\u0631\u06cc \u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646
+currenciesDisplayName.YER=\u0631\u06cc\u0627\u0644 \u06cc\u0645\u0646
+currenciesDisplayName.CAD=\u062f\u0644\u0627\u0631 \u06a9\u0627\u0646\u0627\u062f\u0627
+currenciesDisplayName.SAR=\u0631\u06cc\u0627\u0644 \u0633\u0639\u0648\u062f\u06cc
+currenciesDisplayName.USD=\u062f\u0644\u0627\u0631 \u0627\u0645\u0631\u06cc\u06a9\u0627
+currenciesDisplayName.JPY=\u06cc\u0646 \u0698\u0627\u067e\u0646
+currenciesDisplayName.IQD=\u062f\u06cc\u0646\u0627\u0631 \u0639\u0631\u0627\u0642
+currenciesDisplayName.NOK=\u06a9\u0631\u0648\u0646 \u0646\u0631\u0648\u0698
+currenciesDisplayName.FRF=\u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647
+currenciesDisplayName.GBP=\u067e\u0648\u0646\u062f \u0627\u0633\u062a\u0631\u0644\u06cc\u0646\u06af \u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627
+currenciesDisplayName.PKR=\u0631\u0648\u067e\u06cc\u0647\u0654 \u067e\u0627\u06a9\u0633\u062a\u0627\u0646
+currenciesDisplayName.EUR=\u06cc\u0648\u0631\u0648
+currenciesDisplayName.NLG=\u06af\u06cc\u0644\u062f\u0631 \u0647\u0644\u0646\u062f
+currenciesDisplayName.BYR=\u0631\u0648\u0628\u0644 \u0628\u06cc\u0644\u0648\u0631\u0648\u0633\u06cc
+currenciesDisplayName.SGD=\u062f\u0644\u0627\u0631 \u0633\u0646\u06af\u0627\u067e\u0648\u0631
+currenciesDisplayName.MXN=\u067e\u0632\u0648\u06cc \u0645\u06a9\u0632\u06cc\u06a9
+currenciesDisplayName.QAR=\u0631\u06cc\u0627\u0644 \u0642\u0637\u0631
+currenciesDisplayName.TRY=\u0644\u06cc\u0631\u0647\u0654 \u062c\u062f\u06cc\u062f \u062a\u0631\u06a9\u06cc\u0647
+currenciesDisplayName.XAU=\u0637\u0644\u0627
+currenciesDisplayName.TRL=\u0644\u06cc\u0631\u0647\u0654 \u062a\u0631\u06a9\u06cc\u0647
+currenciesDisplayName.DEM=\u0645\u0627\u0631\u06a9 \u0622\u0644\u0645\u0627\u0646
+currenciesDisplayName.BIF=\u0641\u0631\u0627\u0646\u06a9 \u0628\u0648\u0631\u0648\u0646\u062f\u06cc
+currenciesDisplayName.AFN=\u0627\u0641\u063a\u0627\u0646\u06cc
+currenciesDisplayName.XPT=\u067e\u0644\u0627\u062a\u06cc\u0646
+currenciesDisplayName.XAG=\u0646\u0642\u0631\u0647
+currenciesDisplayName.OMR=\u0631\u06cc\u0627\u0644 \u0639\u0645\u0627\u0646
+currenciesDisplayName.DKK=\u06a9\u0631\u0648\u0646 \u062f\u0627\u0646\u0645\u0627\u0631\u06a9
+currenciesDisplayName.IRR=\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646
+currenciesDisplayName.JOD=\u062f\u06cc\u0646\u0627\u0631 \u0627\u0631\u062f\u0646
+currenciesDisplayName.AFA=\u0627\u0641\u063a\u0627\u0646\u06cc \u0642\u062f\u06cc\u0645
+currenciesDisplayName.XPD=\u067e\u0627\u0644\u0627\u062f\u06cc\u0645
currenciesSymbol.AFA=\u0627\u0641\u063a\u0627\u0646\u06cc
currenciesSymbol.IRR=\ufdfc
-shortMonths=\u0698\u0627\u0646®\u0641\u0648\u0631®\u0645\u0627\u0631®\u0622\u0648\u0631®\u0645\u0640\u0647®\u0698\u0648\u0646®\u0698\u0648\u06cc®\u0627\u0648\u062a®\u0633\u067e\u062a®\u0627\u06a9\u062a®\u0646\u0648\u0627®\u062f\u0633\u0627®®
+currenciesSymbol.AFN=\u0627\u0641\u063a\u0627\u0646\u06cc
+shortMonths=®®®®®®®®®®®®®
months=\u0698\u0627\u0646\u0648\u06cc\u0647®\u0641\u0648\u0631\u06cc\u0647®\u0645\u0627\u0631\u0633®\u0622\u0648\u0631\u06cc\u0644®\u0645\u0647®\u0698\u0648\u0626\u0646®\u0698\u0648\u0626\u06cc\u0647®\u0627\u0648\u062a®\u0633\u067e\u062a\u0627\u0645\u0628\u0631®\u0627\u06a9\u062a\u0628\u0631®\u0646\u0648\u0627\u0645\u0628\u0631®\u062f\u0633\u0627\u0645\u0628\u0631®®
-shortWeekdays=®\u06cc.®\u062f.®\u0633.®\u0686.®\u067e.®\u062c.®\u0634.®
-weekdays=®\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647®\u062f\u0648\u0634\u0646\u0628\u0647®\u0633\u0647\u200c\u0634\u0646\u0628\u0647®\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647®\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647®\u062c\u0645\u0639\u0647®\u0634\u0646\u0628\u0647®
+shortWeekdays=®®®®®®®®
+weekdays=®\u06cc\u06a9\u0634\u0646\u0628\u0647®\u062f\u0648\u0634\u0646\u0628\u0647®\u0633\u0647\u200c\u0634\u0646\u0628\u0647®\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647®\u067e\u0646\u062c\u0634\u0646\u0628\u0647®\u062c\u0645\u0639\u0647®\u0634\u0646\u0628\u0647®
eras=\u0642.\u0645.®\u0645.®
-ampms=\u0642.\u0638.®\u0628.\u0638.®
-shortDateFormat=yyyy/MM/d
-mediumDateFormat=yyyy/MM/d
+ampms=\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631®\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631®
+shortDateFormat=yy/M/d G
+mediumDateFormat=yyyy/M/d
longDateFormat=d MMMM yyyy
-fullDateFormat=EEEE\u060c d MMMM yyyy
-longTimeFormat=HH:mm:ss (z)
-fullTimeFormat=HH:mm:ss (z)
-zoneStrings=Asia/Tehran®IRST®\u0648\u0642\u062a \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u062a\u0647\u0631\u0627\u0646®IRDT®\u0648\u0642\u062a \u062a\u0627\u0628\u0633\u062a\u0627\u0646\u06cc \u062a\u0647\u0631\u0627\u0646®©
+fullDateFormat=EEEE d MMMM yyyy G
+shortTimeFormat=H:mm
+mediumTimeFormat=H:mm:ss
+longTimeFormat=H:mm:ss (zz)
+fullTimeFormat=H:mm:ss (zzzz)
+zoneStrings=Asia/Tehran®IRST®\u0648\u0642\u062a \u0639\u0627\u062f\u06cc \u0627\u06cc\u0631\u0627\u0646®IRDT®\u0648\u0642\u062a \u062a\u0627\u0628\u0633\u062a\u0627\u0646\u06cc \u0627\u06cc\u0631\u0627\u0646®©
territories.TL=\u062a\u06cc\u0645\u0648\u0631 \u0634\u0631\u0642\u06cc
territories.TK=\u062a\u0648\u06a9\u0644\u0627\u0626\u0648
territories.TJ=\u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646
@@ -31,12 +85,12 @@ territories.TF=\u0645\u0633\u062a\u0639\u0645\u0631\u0647\u200c\u0647\u0627\u06c
territories.GY=\u06af\u0648\u06cc\u0627\u0646
territories.TD=\u0686\u0627\u062f
territories.TC=\u062c\u0632\u0627\u06cc\u0631 \u062a\u0631\u06a9 \u0648 \u06a9\u0627\u06cc\u06a9\u0648\u0633
-territories.GW=\u06af\u06cc\u0646\u0647\u200c\u06cc \u0628\u06cc\u0633\u0627\u0626\u0648
+territories.GW=\u06af\u06cc\u0646\u0647\u0654 \u0628\u06cc\u0633\u0627\u0626\u0648
territories.GU=\u06af\u0648\u0627\u0645
territories.GT=\u06af\u0648\u0627\u062a\u0645\u0627\u0644\u0627
territories.GS=\u062c\u0648\u0631\u062c\u06cc\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc \u0648 \u062c\u0632\u0627\u06cc\u0631 \u0633\u0627\u0646\u062f\u0648\u06cc\u0686 \u062c\u0646\u0648\u0628\u06cc
territories.GR=\u06cc\u0648\u0646\u0627\u0646
-territories.GQ=\u06af\u06cc\u0646\u0647\u200c\u06cc \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc
+territories.GQ=\u06af\u06cc\u0646\u0647\u0654 \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc
territories.GP=\u06af\u0648\u0627\u062f\u0644\u0648\u067e
territories.SZ=\u0633\u0648\u0627\u0632\u06cc\u0644\u0646\u062f
territories.SY=\u0633\u0648\u0631\u06cc\u0647
@@ -44,6 +98,7 @@ territories.GN=\u06af\u06cc\u0646\u0647
territories.GM=\u06af\u0627\u0645\u0628\u06cc\u0627
territories.GL=\u06af\u0631\u0648\u0626\u0646\u0644\u0646\u062f
territories.SV=\u0627\u0644\u0633\u0627\u0644\u0648\u0627\u062f\u0648\u0631
+territories.SU=\u0627\u062a\u062d\u0627\u062f \u062c\u0645\u0627\u0647\u06cc\u0631 \u0633\u0648\u0633\u06cc\u0627\u0644\u06cc\u0633\u062a\u06cc \u0634\u0648\u0631\u0648\u06cc
territories.ST=\u0633\u0627\u0626\u0648 \u062a\u0648\u0645\u0647 \u0648 \u067e\u0631\u06cc\u0646\u0633\u06cc\u067e\u0647
territories.GI=\u06af\u06cc\u0628\u0631\u0627\u0644\u062a\u0627\u0631
territories.GH=\u063a\u0646\u0627
@@ -54,7 +109,7 @@ territories.SO=\u0633\u0648\u0645\u0627\u0644\u06cc
territories.GD=\u06af\u0631\u0627\u0646\u0627\u062f\u0627
territories.SN=\u0633\u0646\u06af\u0627\u0644
territories.SM=\u0633\u0627\u0646 \u0645\u0627\u0631\u06cc\u0646\u0648
-territories.GB=\u0627\u0646\u06af\u0644\u0633\u062a\u0627\u0646
+territories.GB=\u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627
territories.SL=\u0633\u06cc\u0631\u0627\u0644\u0626\u0648\u0646
territories.GA=\u06af\u0627\u0628\u0648\u0646
territories.SK=\u0627\u0633\u0644\u0648\u0627\u06a9\u06cc
@@ -71,6 +126,7 @@ territories.FR=\u0641\u0631\u0627\u0646\u0633\u0647
territories.FO=\u062c\u0632\u0627\u06cc\u0631 \u0641\u0627\u0631\u0648
territories.FM=\u0645\u06cc\u06a9\u0631\u0648\u0646\u0632\u06cc
territories.RW=\u0631\u0648\u0627\u0646\u062f\u0627
+territories.053=\u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627 \u0648 \u0632\u0644\u0627\u0646\u062f \u0646\u0648
territories.FK=\u062c\u0632\u0627\u06cc\u0631 \u0641\u0627\u0644\u06a9\u0644\u0646\u062f
territories.RU=\u0631\u0648\u0633\u06cc\u0647
territories.FJ=\u0641\u06cc\u062c\u06cc
@@ -86,13 +142,16 @@ territories.EE=\u0627\u0633\u062a\u0648\u0646\u06cc
territories.EC=\u0627\u06a9\u0648\u0627\u062f\u0631
territories.DZ=\u0627\u0644\u062c\u0632\u0627\u06cc\u0631
territories.QA=\u0642\u0637\u0631
+territories.039=\u062c\u0646\u0648\u0628 \u0627\u0631\u0648\u067e\u0627
territories.DO=\u062c\u0645\u0647\u0648\u0631\u06cc \u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0646
territories.PY=\u067e\u0627\u0631\u0627\u06af\u0648\u0626\u0647
+territories.035=\u062c\u0646\u0648\u0628 \u0634\u0631\u0642\u06cc \u0622\u0633\u06cc\u0627
territories.DM=\u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0627
territories.PW=\u067e\u0627\u0644\u0627\u0626\u0648
territories.DK=\u062f\u0627\u0646\u0645\u0627\u0631\u06a9
territories.DJ=\u062c\u06cc\u0628\u0648\u062a\u06cc
territories.PT=\u067e\u0631\u062a\u063a\u0627\u0644
+territories.030=\u0634\u0631\u0642 \u0622\u0633\u06cc\u0627
territories.PR=\u067e\u0648\u0631\u062a\u0648 \u0631\u06cc\u06a9\u0648
territories.DE=\u0622\u0644\u0645\u0627\u0646
territories.PN=\u067e\u06cc\u062a\u06a9\u0627\u06cc\u0631\u0646
@@ -100,22 +159,25 @@ territories.PM=\u0633\u0646\u062a \u067e\u06cc\u0631 \u0648 \u0645\u06cc\u06a9\u
territories.PL=\u0644\u0647\u0633\u062a\u0627\u0646
territories.PK=\u067e\u0627\u06a9\u0633\u062a\u0627\u0646
territories.PH=\u0641\u06cc\u0644\u06cc\u067e\u06cc\u0646
-territories.PG=\u067e\u0627\u067e\u0648\u0627 \u06af\u06cc\u0646\u0647\u200c\u06cc \u0646\u0648
+territories.PG=\u067e\u0627\u067e\u0648\u0627 \u06af\u06cc\u0646\u0647\u0654 \u0646\u0648
territories.PF=\u067e\u0644\u06cc\u200c\u0646\u0632\u06cc \u0641\u0631\u0627\u0646\u0633\u0647
territories.CZ=\u062c\u0645\u0647\u0648\u0631\u06cc \u0686\u06a9
territories.PE=\u067e\u0631\u0648
territories.CY=\u0642\u0628\u0631\u0633
-territories.CX=\u062c\u0632\u06cc\u0631\u0647\u200c\u06cc \u06a9\u0631\u06cc\u0633\u0645\u0633
+territories.CX=\u062c\u0632\u06cc\u0631\u0647\u0654 \u06a9\u0631\u06cc\u0633\u0645\u0633
territories.CV=\u06a9\u06cc\u067e \u0648\u0631\u062f
territories.PA=\u067e\u0627\u0646\u0627\u0645\u0627
territories.CU=\u06a9\u0648\u0628\u0627
+territories.CS=\u0635\u0631\u0628\u0633\u062a\u0627\u0646
territories.CR=\u06a9\u0627\u0633\u062a\u0627\u0631\u06cc\u06a9\u0627
+territories.029=\u06a9\u0627\u0631\u0627\u0626\u06cc\u0628
territories.CO=\u06a9\u0644\u0645\u0628\u06cc\u0627
territories.CN=\u0686\u06cc\u0646
territories.CM=\u06a9\u0627\u0645\u0631\u0648\u0646
territories.CL=\u0634\u06cc\u0644\u06cc
territories.CK=\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u06a9
territories.CI=\u0633\u0627\u062d\u0644 \u0639\u0627\u062c
+territories.021=\u0634\u0645\u0627\u0644 \u0627\u0645\u0631\u06cc\u06a9\u0627
territories.CH=\u0633\u0648\u0626\u06cc\u0633
territories.CG=\u06a9\u0648\u0646\u06af\u0648
territories.CF=\u062c\u0645\u0647\u0648\u0631\u06cc \u0627\u0641\u0631\u06cc\u0642\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc
@@ -123,20 +185,28 @@ territories.CD=\u062c\u0645\u0647\u0648\u0631\u06cc \u062f\u0645\u0648\u06a9\u06
territories.CC=\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u06a9\u0648\u0633
territories.OM=\u0639\u0645\u0627\u0646
territories.CA=\u06a9\u0627\u0646\u0627\u062f\u0627
+territories.419=\u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0644\u0627\u062a\u06cc\u0646 \u0648 \u06a9\u0627\u0631\u0627\u0626\u06cc\u0628
territories.BZ=\u0628\u0644\u06cc\u0632
territories.BY=\u0628\u06cc\u0644\u0648\u0631\u0648\u0633\u06cc
territories.BW=\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627
-territories.BV=\u062c\u0632\u06cc\u0631\u0647\u200c\u06cc \u0628\u0648\u0648\u062a
+territories.BV=\u062c\u0632\u06cc\u0631\u0647\u0654 \u0628\u0648\u0648\u062a
territories.BT=\u0628\u0648\u062a\u0627\u0646
territories.BS=\u0628\u0627\u0647\u0627\u0645\u0627
territories.BR=\u0628\u0631\u0632\u06cc\u0644
+territories.019=\u0627\u0645\u0631\u06cc\u06a9\u0627
+territories.018=\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u06cc\u0642\u0627
territories.NZ=\u0632\u0644\u0627\u0646\u062f \u0646\u0648
territories.BO=\u0628\u0648\u0644\u06cc\u0648\u06cc
+territories.017=\u0645\u0631\u06a9\u0632 \u0627\u0641\u0631\u06cc\u0642\u0627
territories.BN=\u0628\u0631\u0648\u0646\u0626\u06cc
territories.BM=\u0628\u0631\u0645\u0648\u062f\u0627
+territories.015=\u0634\u0645\u0627\u0644 \u0627\u0641\u0631\u06cc\u0642\u0627
+territories.014=\u0634\u0631\u0642 \u0627\u0641\u0631\u06cc\u0642\u0627
+territories.013=\u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc
territories.NU=\u0646\u06cc\u0648\u0626\u0647
territories.BJ=\u0628\u0646\u06cc\u0646
territories.BI=\u0628\u0648\u0631\u0648\u0646\u062f\u06cc
+territories.011=\u063a\u0631\u0628 \u0627\u0641\u0631\u06cc\u0642\u0627
territories.BH=\u0628\u062d\u0631\u06cc\u0646
territories.NR=\u0646\u0627\u0626\u0648\u0631\u0648
territories.BG=\u0628\u0644\u063a\u0627\u0631\u0633\u062a\u0627\u0646
@@ -151,8 +221,8 @@ territories.NL=\u0647\u0644\u0646\u062f
territories.BA=\u0628\u0648\u0633\u0646\u06cc \u0648 \u0647\u0631\u0632\u06af\u0648\u06cc\u0646
territories.NI=\u0646\u06cc\u06a9\u0627\u0631\u0627\u06af\u0648\u0626\u0647
territories.NG=\u0646\u06cc\u062c\u0631\u06cc\u0647
-territories.NF=\u062c\u0632\u06cc\u0631\u0647\u200c\u06cc \u0646\u0648\u0631\u0641\u0648\u0644\u06a9
-territories.AZ=\u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646
+territories.NF=\u062c\u0632\u06cc\u0631\u0647\u0654 \u0646\u0648\u0631\u0641\u0648\u0644\u06a9
+territories.AZ=\u062c\u0645\u0647\u0648\u0631\u06cc \u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646
territories.NE=\u0646\u06cc\u062c\u0631
territories.NC=\u06a9\u0627\u0644\u062f\u0648\u0646\u06cc\u0627\u06cc \u062c\u062f\u06cc\u062f
territories.AW=\u0622\u0631\u0648\u0628\u0627
@@ -162,19 +232,24 @@ territories.AU=\u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627
territories.AT=\u0627\u062a\u0631\u06cc\u0634
territories.AS=\u0633\u0627\u0645\u0648\u0627\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627
territories.AR=\u0622\u0631\u0698\u0627\u0646\u062a\u06cc\u0646
+territories.009=\u0627\u0642\u06cc\u0627\u0646\u0648\u0633\u06cc\u0647
territories.AQ=\u062c\u0646\u0648\u0628\u06af\u0627\u0646
territories.MZ=\u0645\u0648\u0632\u0627\u0645\u0628\u06cc\u06a9
territories.AO=\u0622\u0646\u06af\u0648\u0644\u0627
territories.MY=\u0645\u0627\u0644\u0632\u06cc
territories.AN=\u0622\u0646\u062a\u06cc\u0644 \u0647\u0644\u0646\u062f
territories.MX=\u0645\u06a9\u0632\u06cc\u06a9
+territories.005=\u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc
territories.AM=\u0627\u0631\u0645\u0646\u0633\u062a\u0627\u0646
territories.MW=\u0645\u0627\u0644\u0627\u0648\u06cc
territories.AL=\u0622\u0644\u0628\u0627\u0646\u06cc
territories.MV=\u0645\u0627\u0644\u062f\u06cc\u0648
+territories.003=\u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc
territories.ZA=\u0627\u0641\u0631\u06cc\u0642\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc
territories.MU=\u0645\u0648\u0631\u06cc\u062a\u06cc\u0648\u0633
+territories.002=\u0627\u0641\u0631\u06cc\u0642\u0627
territories.MT=\u0645\u0627\u0644\u062a
+territories.001=\u062c\u0647\u0627\u0646
territories.AI=\u0622\u0646\u06af\u06cc\u0644
territories.MS=\u0645\u0648\u0646\u062a\u200c\u0633\u0631\u0627\u062a
territories.MR=\u0645\u0648\u0631\u06cc\u062a\u0627\u0646\u06cc
@@ -182,14 +257,13 @@ territories.AG=\u0622\u0646\u062a\u06cc\u06af\u0648\u0627 \u0648 \u0628\u0627\u0
territories.MQ=\u0645\u0627\u0631\u062a\u06cc\u0646\u06cc\u06a9
territories.AF=\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646
territories.MP=\u062c\u0632\u0627\u06cc\u0631 \u0645\u0627\u0631\u06cc\u0627\u0646\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc
-territories.AE=\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u200c\u06cc \u0639\u0631\u0628\u06cc
-territories.MO=\u0645\u0627\u06a9\u0627\u0626\u0648
+territories.AE=\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u0654 \u0639\u0631\u0628\u06cc
+territories.MO=\u0645\u0627\u06a9\u0627\u0626\u0648\u060c \u0646\u0627\u062d\u06cc\u0647\u0654 \u0648\u06cc\u0698\u0647\u0654 \u062d\u06a9\u0648\u0645\u062a\u06cc \u0686\u06cc\u0646
territories.AD=\u0622\u0646\u062f\u0648\u0631\u0627
territories.MN=\u0645\u063a\u0648\u0644\u0633\u062a\u0627\u0646
territories.MM=\u0645\u06cc\u0627\u0646\u0645\u0627\u0631
territories.ML=\u0645\u0627\u0644\u06cc
territories.MK=\u0645\u0642\u062f\u0648\u0646\u06cc\u0647
-territories.YU=\u06cc\u0648\u06af\u0633\u0644\u0627\u0648\u06cc
territories.YT=\u0645\u0627\u06cc\u0648\u062a
territories.MH=\u062c\u0632\u0627\u06cc\u0631 \u0645\u0627\u0631\u0634\u0627\u0644
territories.MG=\u0645\u0627\u062f\u0627\u06af\u0627\u0633\u06a9\u0627\u0631
@@ -199,10 +273,14 @@ territories.MA=\u0645\u0631\u0627\u06a9\u0634
territories.YE=\u06cc\u0645\u0646
territories.LY=\u0644\u06cc\u0628\u06cc
territories.LV=\u0644\u062a\u0648\u0646\u06cc
+territories.155=\u063a\u0631\u0628 \u0627\u0631\u0648\u067e\u0627
territories.LU=\u0644\u0648\u06a9\u0632\u0627\u0645\u0628\u0648\u0631\u06af
+territories.154=\u0634\u0645\u0627\u0644 \u0627\u0631\u0648\u067e\u0627
territories.LT=\u0644\u06cc\u062a\u0648\u0627\u0646\u06cc
territories.LS=\u0644\u0633\u0648\u062a\u0648
territories.LR=\u0644\u06cc\u0628\u0631\u06cc\u0627
+territories.151=\u0634\u0631\u0642 \u0627\u0631\u0648\u067e\u0627
+territories.150=\u0627\u0631\u0648\u067e\u0627
territories.LK=\u0633\u0631\u06cc\u200c\u0644\u0627\u0646\u06a9\u0627
territories.LI=\u0644\u06cc\u062e\u062a\u0646\u200c\u0627\u0634\u062a\u0627\u06cc\u0646
territories.LC=\u0633\u0646\u062a \u0644\u0648\u0633\u06cc\u0627
@@ -211,8 +289,10 @@ territories.LA=\u0644\u0627\u0626\u0648\u0633
territories.KZ=\u0642\u0632\u0627\u0642\u0633\u062a\u0627\u0646
territories.KY=\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0650\u06cc\u0645\u0646
territories.KW=\u06a9\u0648\u06cc\u062a
-territories.KR=\u06a9\u0631\u0647\u200c\u06cc \u062c\u0646\u0648\u0628\u06cc
-territories.KP=\u06a9\u0631\u0647\u200c\u06cc \u0634\u0645\u0627\u0644\u06cc
+territories.145=\u063a\u0631\u0628 \u0622\u0633\u06cc\u0627
+territories.142=\u0622\u0633\u06cc\u0627
+territories.KR=\u06a9\u0631\u0647\u0654 \u062c\u0646\u0648\u0628\u06cc
+territories.KP=\u06a9\u0631\u0647\u0654 \u0634\u0645\u0627\u0644\u06cc
territories.KN=\u0633\u0646\u062a \u06a9\u06cc\u062a\u0633 \u0648 \u0646\u0648\u06cc\u0633
territories.KM=\u06a9\u0648\u0645\u0648\u0631\u0648
territories.KI=\u06a9\u06cc\u0631\u06cc\u0628\u0627\u062a\u06cc
@@ -240,10 +320,10 @@ territories.IO=\u0645\u0633\u062a\u0639\u0645\u0631\u0647\u200c\u0647\u0627\u06c
territories.UY=\u0627\u0648\u0631\u0648\u06af\u0648\u0626\u0647
territories.IN=\u0647\u0646\u062f
territories.IL=\u0627\u0633\u0631\u0627\u0626\u06cc\u0644
-territories.US=\u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u200c\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627
+territories.US=\u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u0654 \u0627\u0645\u0631\u06cc\u06a9\u0627
territories.IE=\u0627\u06cc\u0631\u0644\u0646\u062f
territories.ID=\u0627\u0646\u062f\u0648\u0646\u0632\u06cc
-territories.UM=\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u0686\u06a9 \u062f\u0648\u0631\u0627\u0641\u062a\u0627\u062f\u0647\u200c\u06cc \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647
+territories.UM=\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u0686\u06a9 \u062f\u0648\u0631\u0627\u0641\u062a\u0627\u062f\u0647\u0654 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647
territories.UG=\u0627\u0648\u06af\u0627\u0646\u062f\u0627
territories.UA=\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646
territories.HU=\u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646
@@ -251,216 +331,411 @@ territories.HT=\u0647\u0627\u06cc\u06cc\u062a\u06cc
territories.HR=\u06a9\u0631\u0648\u0627\u0633\u06cc
territories.TZ=\u062a\u0627\u0646\u0632\u0627\u0646\u06cc\u0627
territories.HN=\u0647\u0646\u062f\u0648\u0631\u0627\u0633
-territories.HM=\u062c\u0632\u06cc\u0631\u0647\u200c\u06cc \u0647\u0631\u062f \u0648 \u062c\u0632\u0627\u06cc\u0631 \u0645\u06a9\u200c\u062f\u0648\u0646\u0627\u0644\u062f
+territories.HM=\u062c\u0632\u06cc\u0631\u0647\u0654 \u0647\u0631\u062f \u0648 \u062c\u0632\u0627\u06cc\u0631 \u0645\u06a9\u200c\u062f\u0648\u0646\u0627\u0644\u062f
territories.TW=\u062a\u0627\u06cc\u0648\u0627\u0646
territories.TV=\u062a\u0648\u0648\u0627\u0644\u0648
-territories.HK=\u0647\u0646\u06af\u200c\u06a9\u0646\u06af
+territories.HK=\u0647\u0646\u06af\u200c\u06a9\u0646\u06af\u060c \u0646\u0627\u062d\u06cc\u0647\u0654 \u0648\u06cc\u0698\u0647\u0654 \u062d\u06a9\u0648\u0645\u062a\u06cc \u0686\u06cc\u0646
territories.TT=\u062a\u0631\u06cc\u0646\u06cc\u062f\u0627\u062f \u0648 \u062a\u0648\u0628\u0627\u06af\u0648
territories.TR=\u062a\u0631\u06a9\u06cc\u0647
territories.TO=\u062a\u0648\u0646\u06af\u0627
territories.TN=\u062a\u0648\u0646\u0633
territories.TM=\u062a\u0631\u06a9\u0645\u0646\u0633\u062a\u0627\u0646
-languages.lb=\u0644\u062a\u0633\u0647\u200c\u0628\u0648\u0631\u06af\u06cc\u0634
-languages.la=\u0644\u0627\u062a\u06cc\u0646\u06cc
+languages.akk=\u0622\u06a9\u062f\u06cc
+languages.ijo=\u0627\u06cc\u062c\u0648\u06cc\u06cc
languages.xh=\u062e\u0648\u0633\u0627\u06cc\u06cc
-languages.ky=\u0642\u0631\u0642\u06cc\u0632\u06cc
-languages.kw=\u06a9\u0631\u0646\u0648\u0627\u0644\u06cc
-languages.kv=\u06a9\u0648\u0645\u06cc\u0627\u06cc\u06cc
-languages.ku=\u06a9\u0631\u062f\u06cc
-languages.ks=\u06a9\u0634\u0645\u06cc\u0631\u06cc
-languages.ko=\u06a9\u0631\u0647\u200c\u0627\u06cc
-languages.kn=\u06a9\u0627\u0646\u0627\u062f\u0647\u200c\u0627\u06cc
-languages.km=\u062e\u0645\u0631\u06cc
-languages.kk=\u0642\u0632\u0627\u0642\u06cc
-languages.ira=\u0627\u06cc\u0631\u0627\u0646\u06cc
-languages.grc=\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0647\u0646 (\u062a\u0627 \u06f1\u06f4\u06f5\u06f3 \u0645.)
+languages.sux=\u0633\u0648\u0645\u0631\u06cc
+languages.sus=\u0633\u0648\u0633\u0648\u06cc\u06cc
+languages.mis=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0631\u0642\u0647
+languages.loz=\u0644\u0648\u0632\u06cc\u0627\u06cc\u06cc
+languages.tog=\u062a\u0648\u0646\u06af\u0627\u06cc\u06cc (\u0646\u06cc\u0627\u0633\u0627)
+languages.min=\u0645\u06cc\u0646\u0627\u0646\u06af\u200c\u06a9\u0627\u0628\u0648\u06cc\u06cc
+languages.suk=\u0633\u0648\u06a9\u0648\u0645\u0627\u06cc\u06cc
languages.wo=\u0648\u0644\u0648\u0641\u06cc
-languages.art=\u0633\u0627\u062e\u062a\u0647\u200c\u06af\u06cc (\u063a\u06cc\u0631\u0647)
-languages.ka=\u06af\u0631\u062c\u06cc
-languages.gem=\u0698\u0631\u0645\u0646\u06cc (\u063a\u06cc\u0631\u0647)
-languages.afa=\u0627\u0641\u0631\u06cc\u0642\u0627 \u0648 \u0622\u0633\u06cc\u0627\u06cc\u06cc (\u063a\u06cc\u0631\u0647)
-languages.jv=\u062c\u0627\u0648\u0647\u200c\u0627\u06cc
-languages.arc=\u0622\u0631\u0627\u0645\u06cc
-languages.cel=\u0633\u0644\u062a\u06cc (\u063a\u06cc\u0631\u0647)
-languages.sco=\u0627\u0633\u06a9\u0627\u062a\u0644\u0646\u062f\u06cc
+languages.lol=\u0645\u0648\u0646\u06af\u0648\u06cc\u06cc
+languages.mic=\u0645\u06cc\u06a9\u0645\u0627\u06a9\u06cc
+languages.wa=\u0648\u0627\u0644\u0648\u0646\u06cc
+languages.kum=\u06a9\u0648\u0645\u06cc\u06a9\u06cc
+languages.zap=\u0632\u0627\u067e\u0648\u062a\u06a9\u06cc
+languages.cus=\u06a9\u0648\u0634\u06cc (\u062f\u06cc\u06af\u0631)
languages.vo=\u0648\u0644\u0627\u067e\u0648\u06a9
-languages.ja=\u0698\u0627\u067e\u0646\u06cc
+languages.oto=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0627\u062a\u0648\u0645\u06cc\u0627\u06cc\u06cc
languages.vi=\u0648\u06cc\u062a\u0646\u0627\u0645\u06cc
-languages.iu=\u0627\u06cc\u0646\u0648\u06a9\u06cc\u062a\u0648\u062a
-languages.it=\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\u06cc\u06cc
-languages.is=\u0627\u06cc\u0633\u0644\u0646\u062f\u06cc
+languages.vai=\u0648\u06cc\u0627\u06cc\u06cc
+languages.rar=\u0631\u0627\u0631\u0648\u062a\u0648\u0646\u06af\u0627\u06cc\u06cc
+languages.ve=\u0648\u0646\u062f\u0627\u06cc\u06cc
+languages.raj=\u0631\u0627\u062c\u0633\u062a\u0627\u0646\u06cc
+languages.ota=\u062a\u0631\u06a9\u06cc \u0639\u062b\u0645\u0627\u0646\u06cc
+languages.nap=\u0646\u0627\u067e\u0644\u06cc
languages.uz=\u0627\u0632\u0628\u06a9\u06cc
-languages.ik=\u0627\u06cc\u0646\u0648\u067e\u06cc\u06a9
+languages.tmh=\u062a\u0627\u0645\u0627\u0634\u0642\u06cc
+languages.nai=\u0633\u0631\u062e\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc (\u062f\u06cc\u06af\u0631)
+languages.nah=\u0646\u0627\u0648\u0627\u062a\u0644\u06cc
languages.ur=\u0627\u0631\u062f\u0648
-languages.id=\u0627\u0646\u062f\u0648\u0646\u0632\u06cc\u0627\u06cc\u06cc
-languages.moh=\u0645\u0648\u0647\u0627\u06a9\u06cc
-languages.hit=\u0647\u06cc\u062a\u06cc
-languages.ia=\u0645\u06cc\u0627\u0646\u200c\u0632\u0628\u0627\u0646
+languages.fat=\u0641\u0627\u0646\u062a\u06cc\u0627\u06cc\u06cc
languages.uk=\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646\u06cc
-languages.kok=\u06a9\u0646\u06a9\u0627\u0646\u06cc
+languages.egy=\u0645\u0635\u0631\u06cc (\u06a9\u0647\u0646)
languages.ug=\u0627\u0648\u06cc\u063a\u0648\u0631\u06cc
-languages.hz=\u0647\u0631\u06cc\u0631\u0648\u06cc\u06cc
-languages.und=\u0646\u0627\u0645\u0634\u062e\u0635
-languages.hy=\u0627\u0631\u0645\u0646\u06cc
-languages.phn=\u0641\u0646\u06cc\u0642\u06cc
-languages.got=\u06af\u0648\u062a\u06cc\u06a9
-languages.hu=\u0645\u062c\u0627\u0631\u06cc
-languages.phi=\u0641\u06cc\u0627\u06cc\u067e\u06cc\u0646\u06cc (\u063a\u06cc\u0631\u0647)
-languages.hr=\u06a9\u0631\u0648\u0627\u062a\u06cc
+languages.fan=\u0641\u0627\u0646\u06a9\u06cc
+languages.ssa=\u0646\u06cc\u0644\u06cc \u0648 \u0635\u062d\u0631\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.bat=\u0628\u0627\u0644\u062a\u06cc\u06a9\u06cc (\u062f\u06cc\u06af\u0631)
+languages.mga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc \u0645\u06cc\u0627\u0646\u0647
+languages.bas=\u0628\u0627\u0633\u0627\u06cc\u06cc
+languages.nyo=\u0646\u06cc\u0648\u0631\u0648\u06cc\u06cc
+languages.nyn=\u0646\u06cc\u0627\u0646\u06a9\u0648\u0644\u0647\u200c\u0627\u06cc
+languages.ban=\u0628\u0627\u0644\u06cc\u0627\u06cc\u06cc
+languages.osa=\u0627\u0648\u0633\u06cc\u062c\u06cc
+languages.bal=\u0628\u0644\u0648\u0686\u06cc
languages.ty=\u062a\u0627\u0647\u06cc\u062a\u06cc\u0627\u06cc\u06cc
-languages.apa=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0622\u067e\u0627\u0686\u06cc\u0627\u06cc\u06cc
languages.tw=\u062a\u0648\u06cc\u200c\u06cc\u0627\u06cc\u06cc
-languages.goh=\u0622\u0644\u0645\u0627\u0646\u06cc \u0639\u0644\u06cc\u0627\u06cc \u0628\u0627\u0633\u062a\u0627\u0646 (\u062d\u062f\u0648\u062f \u06f7\u06f5\u06f0-\u06f1\u06f0\u06f5\u06f0)
+languages.srr=\u0633\u0631\u06cc\u0631\u06cc
+languages.tli=\u062a\u0644\u06cc\u0646\u200c\u06af\u06cc\u062a\u06cc
+languages.tlh=\u06a9\u0644\u06cc\u0646\u06af\u0648\u0646
languages.tt=\u062a\u0627\u062a\u0627\u0631\u06cc
-languages.hi=\u0647\u0646\u062f\u06cc
languages.ts=\u062a\u0633\u0648\u0646\u06af\u0627\u06cc\u06cc
-languages.tr=\u062a\u0631\u06a9\u06cc
-languages.cop=\u0642\u0628\u0637\u06cc
-languages.he=\u0639\u0628\u0631\u06cc
+languages.bad=\u0628\u0627\u0646\u062f\u0627\u06cc\u06cc
+languages.tr=\u062a\u0631\u06a9\u06cc \u0627\u0633\u062a\u0627\u0646\u0628\u0648\u0644\u06cc
languages.to=\u062a\u0648\u0646\u06af\u0627\u06cc\u06cc (\u062c\u0632\u0627\u06cc\u0631 \u062a\u0648\u0646\u06af\u0627)
languages.tn=\u062a\u0633\u0648\u0627\u0646\u0627\u06cc\u06cc
-languages.sai=\u0633\u0631\u062e\u200c\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc (\u063a\u06cc\u0631\u0647)
languages.tl=\u062a\u0627\u06af\u0627\u0644\u0648\u06af\u06cc
-languages.ha=\u0647\u0648\u0633\u06cc\u0627\u06cc\u06cc
-languages.tk=\u062a\u0631\u06a9\u0645\u062a\u06cc
-languages.dum=\u0647\u0644\u0646\u062f\u06cc \u0645\u06cc\u0627\u0646\u0647 (\u062d\u062f\u0648\u062f \u06f1\u06f0\u06f5\u06f0-\u06f1\u06f3\u06f5\u06f0 \u0645.)
+languages.tk=\u062a\u0631\u06a9\u0645\u0646\u06cc
languages.ti=\u062a\u06cc\u06af\u0631\u06cc\u0646\u06cc\u0627\u06cc\u06cc
languages.th=\u062a\u0627\u06cc\u0644\u0646\u062f\u06cc
+languages.kru=\u06a9\u0648\u0631\u0648\u062e\u06cc
languages.tg=\u062a\u0627\u062c\u06cc\u06a9\u06cc
languages.te=\u062a\u0644\u0648\u06af\u0648\u06cc\u06cc
-languages.gv=\u0645\u0627\u0646\u06cc
+languages.csb=\u06a9\u0627\u0634\u0648\u0628\u06cc
+languages.kro=\u06a9\u0631\u0648\u06cc\u06cc
languages.ta=\u062a\u0627\u0645\u06cc\u0644\u06cc
-languages.syr=\u0633\u0631\u06cc\u0627\u0646\u06cc
-languages.gu=\u06af\u062c\u0631\u0627\u062a\u06cc
-languages.map=\u0622\u0633\u062a\u0631\u0648\u0646\u06cc\u0632\u06cc\u0627\u06cc\u06cc
-languages.ine=\u0647\u0646\u062f\u0648\u0627\u0631\u0648\u062f\u067e\u0627\u06cc\u06cc
-languages.gn=\u06af\u0648\u0627\u0631\u0627\u0646\u06cc
-languages.inc=\u0647\u0646\u062f\u06cc\u06a9 (\u063a\u06cc\u0631\u0647)
+languages.efi=\u0627\u0641\u06cc\u06a9\u06cc
languages.sw=\u0633\u0648\u0627\u062d\u0644\u06cc
languages.sv=\u0633\u0648\u0626\u062f\u06cc
languages.su=\u0633\u0648\u0646\u062f\u0627\u06cc\u06cc
+languages.krc=\u0642\u0631\u0647\u200c\u0686\u0627\u06cc\u06cc\u2010\u0628\u0627\u0644\u06a9\u0627\u0631\u06cc
languages.st=\u0633\u0648\u062a\u0648\u06cc\u06cc \u062c\u0646\u0648\u0628\u06cc
-languages.enm=\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0645\u06cc\u0627\u0646\u0647 (\u06f1\u06f1\u06f0\u06f0 -\u06f1\u06f5\u06f0\u06f0 \u0645.)
languages.sr=\u0635\u0631\u0628\u06cc
languages.sq=\u0622\u0644\u0628\u0627\u0646\u06cc\u0627\u06cc\u06cc
-languages.bho=\u0628\u0648\u062c\u067e\u0648\u0631\u06cc
+languages.men=\u0645\u0646\u062f\u0647\u200c\u0627\u06cc
+languages.crp=\u06a9\u0631\u06cc\u0648\u0644\u200c\u0647\u0627 \u0648 \u067e\u06cc\u062c\u06cc\u0646\u200c\u0647\u0627 (\u062f\u06cc\u06af\u0631)
languages.so=\u0633\u0648\u0645\u0627\u0644\u06cc\u0627\u06cc\u06cc
languages.sn=\u0634\u0648\u0646\u0627\u06cc\u06cc
languages.sm=\u0633\u0627\u0645\u0648\u0622\u06cc\u06cc
languages.sl=\u0627\u0633\u0644\u0648\u0648\u06cc\u0646\u06cc\u0627\u06cc\u06cc
-languages.ga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc
+languages.grc=\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0647\u0646
languages.sk=\u0627\u0633\u0644\u0648\u0627\u06a9\u06cc
+languages.grb=\u06af\u0631\u06cc\u0628\u0648\u06cc\u06cc
languages.si=\u0633\u06cc\u0646\u0647\u0627\u0644\u06cc
languages.sh=\u0635\u0631\u0628 \u0648 \u06a9\u0631\u0648\u0627\u062a\u06cc
+languages.afa=\u0627\u0641\u0631\u06cc\u0642\u0627 \u0648 \u0622\u0633\u06cc\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.crh=\u062a\u0631\u06a9\u06cc \u06a9\u0631\u06cc\u0645\u0647\u061b \u062a\u0627\u062a\u0627\u0631\u06cc \u06a9\u0631\u06cc\u0645\u0647
languages.sg=\u0633\u0627\u0646\u06af\u0648\u06cc\u06cc
-languages.myn=\u0645\u0627\u06cc\u0627\u06cc\u06cc\u06a9
languages.sd=\u0633\u0646\u062f\u06cc
+languages.udm=\u0627\u0648\u062f\u0645\u0648\u0631\u062a\u06cc
languages.sc=\u0633\u0627\u0631\u062f\u06cc\u0646\u06cc\u0627\u06cc\u06cc
languages.sa=\u0633\u0646\u0633\u06a9\u0631\u06cc\u062a
-languages.ang=\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0628\u0627\u0633\u062a\u0627\u0646 (\u062d\u062f\u0648\u062f \u06f4\u06f5\u06f0-\u06f1\u06f1\u06f0\u06f0 \u0645.)
-languages.fr=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc
-languages.gaa=\u06af\u0627
-languages.fo=\u0641\u0627\u0631\u0648\u06cc\u06cc
languages.rw=\u06a9\u06cc\u0646\u06cc\u0627\u0631\u0648\u0627\u0646\u062f\u0627\u06cc\u06cc
-languages.gmh=\u0622\u0644\u0645\u0627\u0646\u06cc \u0639\u0644\u06cc\u0627\u06cc \u0645\u06cc\u0627\u0646\u0647 (\u062d\u062f\u0648\u062f \u06f1\u06f0\u06f5\u06f0-\u06f1\u06f5\u06f0\u06f0)
+languages.nwc=\u0646\u0648\u0627\u0631\u06cc\u0627\u06cc\u06cc \u06a9\u0644\u0627\u0633\u06cc\u06a9
languages.ru=\u0631\u0648\u0633\u06cc
+languages.ro=\u0631\u0648\u0645\u0627\u0646\u06cc\u0627\u06cc\u06cc
+languages.rn=\u0631\u0648\u0646\u062f\u06cc\u0627\u06cc\u06cc
+languages.rm=\u0631\u062a\u0648\u2010\u0631\u0648\u0645\u06cc\u0627\u06cc\u06cc
+languages.mdf=\u0645\u06a9\u0634\u0627\u06cc\u06cc
+languages.tiv=\u062a\u06cc\u0648\u06cc
+languages.ady=\u0622\u062f\u06cc\u062c\u06cc\u0627\u06cc\u06cc
+languages.zun=\u0632\u0648\u0646\u06cc\u0627\u06cc\u06cc
+languages.kpe=\u06a9\u067e\u0644\u0647\u200c\u0627\u06cc
+languages.qu=\u06a9\u0686\u0648\u0627\u06cc\u06cc
+languages.tig=\u062a\u06cc\u06af\u0631\u0647\u200c\u0627\u06cc
+languages.son=\u0633\u0648\u0646\u063a\u0627\u06cc\u06cc
+languages.cpp=\u06a9\u0631\u06cc\u0648\u0644\u200c\u0647\u0627 \u0648 \u067e\u06cc\u062c\u06cc\u0646\u200c\u0647\u0627\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u067e\u0631\u062a\u063a\u0627\u0644\u06cc (\u062f\u06cc\u06af\u0631)
+languages.sog=\u0633\u063a\u062f\u06cc
+languages.ada=\u0622\u062f\u0627\u0646\u06af\u0645\u0647\u200c\u0627\u06cc
+languages.cpf=\u06a9\u0631\u06cc\u0648\u0644\u200c\u0647\u0627 \u0648 \u067e\u06cc\u062c\u06cc\u0646\u200c\u0647\u0627\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0641\u0631\u0627\u0646\u0633\u0648\u06cc (\u062f\u06cc\u06af\u0631)
+languages.hit=\u0647\u06cc\u062a\u06cc
+languages.cpe=\u06a9\u0631\u06cc\u0648\u0644\u200c\u0647\u0627 \u0648 \u067e\u06cc\u062c\u06cc\u0646\u200c\u0647\u0627\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc (\u062f\u06cc\u06af\u0631)
+languages.got=\u06af\u0648\u062a\u06cc\u06a9
+languages.hil=\u0647\u06cc\u0644\u06cc\u200c\u06af\u0627\u06cc\u0646\u0648\u0646\u06cc
+languages.kok=\u06a9\u0646\u06a9\u0627\u0646\u06cc
+languages.gon=\u06af\u0648\u0646\u062f\u06cc
+languages.din=\u062f\u06cc\u0646\u06a9\u0627\u06cc\u06cc
+languages.nub=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0646\u0648\u0628\u06cc\u0627\u06cc\u06cc
+languages.pt=\u067e\u0631\u062a\u063a\u0627\u0644\u06cc
+languages.ps=\u067e\u0634\u062a\u0648
+languages.fur=\u0641\u0631\u06cc\u0648\u0644\u06cc\u0627\u06cc\u06cc
+languages.phn=\u0641\u0646\u06cc\u0642\u06cc
+languages.goh=\u0622\u0644\u0645\u0627\u0646\u06cc \u0639\u0644\u06cc\u0627\u06cc \u0628\u0627\u0633\u062a\u0627\u0646
+languages.snk=\u0633\u0648\u0646\u06cc\u0646\u06a9\u0647\u200c\u0627\u06cc
+languages.cop=\u0642\u0628\u0637\u06cc
+languages.yap=\u06cc\u0627\u067e\u06cc
+languages.ach=\u0622\u0686\u0648\u0644\u06cc\u0627\u06cc\u06cc
+languages.yao=\u06cc\u0627\u0626\u0648\u06cc\u06cc
+languages.phi=\u0641\u06cc\u0644\u06cc\u067e\u06cc\u0646\u06cc (\u062f\u06cc\u06af\u0631)
+languages.pl=\u0644\u0647\u0633\u062a\u0627\u0646\u06cc
+languages.ace=\u0622\u0686\u0626\u06cc
+languages.pi=\u067e\u0627\u0644\u06cc
+languages.pa=\u067e\u0646\u062c\u0627\u0628\u06cc
+languages.bug=\u0628\u0648\u06af\u06cc\u0627\u06cc\u06cc
+languages.bua=\u0628\u0648\u0631\u06cc\u0627\u062a\u06cc
+languages.mas=\u0645\u0627\u0633\u0627\u06cc\u06cc
+languages.os=\u0622\u0633\u06cc
+languages.map=\u0622\u0633\u062a\u0631\u0648\u0646\u06cc\u0632\u06cc\u0627\u06cc\u06cc\u200c (\u062f\u06cc\u06af\u0631)
+languages.or=\u0627\u0648\u0631\u06cc\u0647\u200c\u0627\u06cc
+languages.man=\u0645\u0627\u0646\u062f\u06cc\u0646\u06af\u0648\u06cc\u06cc
+languages.mai=\u0645\u0627\u06cc\u062f\u06cc\u0644\u06cc
+languages.oj=\u0627\u0648\u062c\u06cc\u0628\u0648\u0627\u06cc\u06cc
+languages.mag=\u0645\u0627\u06af\u0627\u0647\u06cc\u0627\u06cc\u06cc
+languages.mad=\u0645\u0627\u062f\u0648\u0631\u0627\u06cc\u06cc
+languages.btk=\u0628\u0627\u062a\u0627\u06a9\u06cc
+languages.nso=\u0633\u0648\u062a\u0648\u06cc\u06cc \u0634\u0645\u0627\u0644\u06cc
+languages.myv=\u0627\u0631\u0632\u06cc\u0627\u06cc\u06cc
+languages.ny=\u0646\u06cc\u0627\u0646\u062c\u0627\u06cc\u06cc\u061b \u0686\u0648\u0627\u06cc\u06cc
+languages.myn=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0627\u06cc\u0627\u06cc\u06cc\u06a9
+languages.nv=\u0646\u0627\u0648\u0627\u0647\u0648\u06cc\u06cc
+languages.kmb=\u06a9\u06cc\u0645\u0628\u0648\u0646\u062f\u0648\u06cc\u06cc
+languages.nr=\u0627\u0646\u062f\u0647\u200c\u0628\u0644\u0647\u200c\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc
+languages.gmh=\u0622\u0644\u0645\u0627\u0646\u06cc \u0639\u0644\u06cc\u0627\u06cc \u0645\u06cc\u0627\u0646\u0647
+languages.no=\u0646\u0631\u0648\u0698\u06cc
+languages.nn=\u0646\u0631\u0633 \u062c\u062f\u06cc\u062f \u0646\u0631\u0648\u0698\u06cc
+languages.nl=\u0647\u0644\u0646\u062f\u06cc
+languages.root=\u0631\u06cc\u0634\u0647
+languages.ng=\u0646\u062f\u0648\u0646\u06af\u0627\u06cc\u06cc
+languages.sla=\u0627\u0633\u0644\u0627\u0648\u06cc (\u062f\u06cc\u06af\u0631)
+languages.ne=\u0646\u067e\u0627\u0644\u06cc
+languages.nd=\u0627\u0646\u062f\u0647\u200c\u0628\u0644\u0647\u200c\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc
+languages.nb=\u0628\u0648\u06a9\u0633\u0645\u0627\u0644 \u0646\u0631\u0648\u0698\u06cc
+languages.na=\u0646\u0627\u0626\u0648\u0631\u0648\u06cc\u06cc
+languages.tem=\u062a\u06cc\u0645\u0646\u0647\u200c\u0627\u06cc
+languages.my=\u0628\u0631\u0645\u0647\u200c\u0627\u06cc
+languages.lez=\u0644\u0632\u06af\u06cc
+languages.mt=\u0645\u0627\u0644\u062a\u06cc
+languages.ms=\u0645\u0627\u0644\u0632\u06cc\u0627\u06cc\u06cc
+languages.peo=\u0641\u0627\u0631\u0633\u06cc \u0628\u0627\u0633\u062a\u0627\u0646
+languages.mr=\u0645\u0631\u0627\u062a\u06cc
+languages.fro=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc \u0628\u0627\u0633\u062a\u0627\u0646
+languages.mo=\u0645\u0648\u0644\u062f\u0627\u0648\u06cc\u0627\u06cc\u06cc
+languages.mn=\u0645\u063a\u0648\u0644\u06cc
+languages.frm=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc \u0645\u06cc\u0627\u0646\u0647
+languages.ml=\u0645\u0627\u0644\u0627\u06cc\u0627\u0644\u0627\u0645\u06cc
+languages.jrb=\u0639\u0631\u0628\u06cc \u06cc\u0647\u0648\u062f\u06cc
+languages.mk=\u0645\u0642\u062f\u0648\u0646\u06cc
+languages.mi=\u0645\u0627\u0626\u0648\u0631\u06cc\u0627\u06cc\u06cc
+languages.mh=\u0645\u0627\u0631\u0634\u0627\u0644\u06cc
+languages.mg=\u0645\u0627\u0644\u0627\u06af\u0627\u0633\u06cc\u0627\u06cc\u06cc
+languages.lv=\u0644\u062a\u0648\u0646\u06cc\u0627\u06cc\u06cc
+languages.lu=\u0644\u0648\u0628\u0627\u06cc\u06cc\u2010\u06a9\u0627\u062a\u0627\u0646\u06af\u0627
+languages.lt=\u0644\u06cc\u062a\u0648\u0627\u0646\u06cc\u0627\u06cc\u06cc
+languages.del=\u062f\u0644\u0627\u0648\u0627\u0631\u06cc
+languages.lo=\u0644\u0627\u0626\u0648\u0633\u06cc
+languages.ln=\u0644\u06cc\u0646\u06af\u0627\u0644\u0627
+languages.li=\u0644\u06cc\u0645\u0628\u0648\u0631\u06af\u06cc
+languages.lg=\u06af\u0627\u0646\u062f\u0627\u06cc\u06cc
+languages.lb=\u0644\u0648\u06af\u0632\u0627\u0645\u0628\u0648\u0631\u06af\u06cc
+languages.la=\u0644\u0627\u062a\u06cc\u0646\u06cc
+languages.jpr=\u0641\u0627\u0631\u0633\u06cc \u06cc\u0647\u0648\u062f\u06cc
+languages.sit=\u0686\u06cc\u0646 \u0648 \u062a\u0628\u062a\u06cc (\u062f\u06cc\u06af\u0631)
+languages.ky=\u0642\u0631\u0642\u06cc\u0632\u06cc
+languages.kw=\u06a9\u0631\u0646\u0648\u0627\u0644\u06cc
+languages.kv=\u06a9\u0648\u0645\u06cc\u0627\u06cc\u06cc
+languages.ku=\u06a9\u0631\u062f\u06cc
+languages.sio=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0633\u0648\u06cc\u06cc
+languages.ks=\u06a9\u0634\u0645\u06cc\u0631\u06cc
+languages.kr=\u06a9\u0627\u0646\u0648\u0631\u06cc\u0627\u06cc\u06cc
+languages.ko=\u06a9\u0631\u0647\u200c\u0627\u06cc
+languages.kn=\u06a9\u0627\u0646\u0627\u062f\u0647\u200c\u0627\u06cc
+languages.km=\u062e\u0645\u0631\u06cc
+languages.kl=\u06af\u0631\u06cc\u0646\u0644\u0646\u062f\u06cc
+languages.kk=\u0642\u0632\u0627\u0642\u06cc
+languages.rom=\u0631\u0648\u0645\u0627\u0646\u0648\u06cc\u06cc
+languages.sid=\u0633\u06cc\u062f\u0627\u0645\u0648\u06cc\u06cc
+languages.ki=\u06a9\u06cc\u06a9\u0648\u06cc\u0648\u06cc\u06cc
+languages.kg=\u06a9\u0646\u06af\u0648\u06cc\u06cc
+languages.non=\u0646\u0631\u0633 \u0628\u0627\u0633\u062a\u0627\u0646
+languages.ka=\u06af\u0631\u062c\u06cc
+languages.mus=\u06a9\u0631\u06cc\u06a9\u06cc
+languages.roa=\u0631\u0648\u0645\u06cc\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.nog=\u0646\u063a\u0627\u06cc\u06cc
+languages.mun=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0645\u0648\u0646\u062f\u0627\u06cc\u06cc
+languages.mul=\u0686\u0646\u062f\u06cc\u0646 \u0632\u0628\u0627\u0646
+languages.jv=\u062c\u0627\u0648\u0647\u200c\u0627\u06cc
+languages.gil=\u06af\u06cc\u0644\u0628\u0631\u062a\u06cc
+languages.znd=\u0632\u0627\u0646\u062f\u0647\u200c\u0627\u06cc
+languages.shn=\u0634\u0627\u0646\u06cc
+languages.fon=\u0641\u0648\u0646\u06cc
+languages.xal=\u0642\u0644\u0645\u0648\u0642\u06cc
+languages.aus=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627\u06cc\u06cc
+languages.kho=\u062e\u062a\u0646\u06cc
+languages.ja=\u0698\u0627\u067e\u0646\u06cc
+languages.khi=\u062e\u0648\u0627\u0633\u06cc (\u062f\u06cc\u06af\u0631)
+languages.chy=\u0634\u0627\u06cc\u0627\u0646\u06cc
+languages.pau=\u067e\u0627\u0644\u0627\u0626\u0648\u06cc\u06cc
+languages.tai=\u062a\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.iu=\u0627\u06cc\u0646\u0648\u06a9\u062a\u06cc\u062a\u0648\u062a
+languages.pap=\u067e\u0627\u067e\u06cc\u0627\u0645\u0646\u062a\u0648
+languages.it=\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627\u06cc\u06cc
+languages.sgn=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0646\u0634\u0627\u0646\u0647\u200c\u0627\u06cc
+languages.kha=\u062e\u0627\u0632\u06cc\u0627\u06cc\u06cc
+languages.is=\u0627\u06cc\u0633\u0644\u0646\u062f\u06cc
+languages.chr=\u0686\u0631\u0648\u06a9\u06cc\u0627\u06cc\u06cc
+languages.pam=\u067e\u0627\u0645\u067e\u0627\u0646\u06af\u0627\u06cc\u06cc
+languages.chp=\u0686\u06cc\u067e\u0647\u200c\u0648\u06cc\u0647\u200c\u0627\u06cc
+languages.pal=\u067e\u0647\u0644\u0648\u06cc
+languages.cho=\u0686\u0648\u06a9\u062a\u0648\u06cc\u06cc
+languages.chm=\u0645\u0627\u0631\u06cc\u0627\u06cc\u06cc
+languages.tyv=\u062a\u0648\u0648\u0627\u06cc\u06cc
+languages.bnt=\u0628\u0627\u0646\u062a\u0648\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.pag=\u067e\u0627\u0646\u06af\u0627\u0633\u06cc\u0646\u0627\u0646\u06cc
+languages.ik=\u0627\u06cc\u0646\u0648\u067e\u06cc\u06a9
+languages.haw=\u0647\u0627\u0648\u0627\u0626\u06cc\u0627\u06cc\u06cc
+languages.ii=\u06cc\u06cc \u0633\u06cc\u0686\u0648\u0627\u0646
+languages.ig=\u0627\u06cc\u06af\u0628\u0648\u06cc\u06cc
+languages.sga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc \u0628\u0627\u0633\u062a\u0627\u0646
+languages.paa=\u067e\u0627\u067e\u0648\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.id=\u0627\u0646\u062f\u0648\u0646\u0632\u06cc\u0627\u06cc\u06cc
+languages.lah=\u0644\u0627\u0647\u0646\u062f\u0627
+languages.ia=\u0645\u06cc\u0627\u0646\u200c\u0632\u0628\u0627\u0646
+languages.lad=\u0644\u0627\u062f\u06cc\u0646\u0648
+languages.hai=\u0647\u0627\u06cc\u062f\u0627\u06cc\u06cc
+languages.hz=\u0647\u0631\u06cc\u0631\u0648\u06cc\u06cc
+languages.hy=\u0627\u0631\u0645\u0646\u06cc
+languages.ath=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0622\u062a\u0627\u067e\u0627\u0633\u06a9\u0627\u06cc\u06cc
+languages.hu=\u0645\u062c\u0627\u0631\u06cc
+languages.ht=\u0647\u0627\u0626\u06cc\u062a\u06cc\u0627\u06cc\u06cc
+languages.dak=\u062f\u0627\u06a9\u0648\u062a\u0627\u06cc\u06cc
+languages.hr=\u06a9\u0631\u0648\u0627\u062a\u06cc
+languages.hi=\u0647\u0646\u062f\u06cc
+languages.dyu=\u062f\u0627\u06cc\u0648\u0644\u0627\u06cc\u06cc
+languages.he=\u0639\u0628\u0631\u06cc
+languages.ha=\u0647\u0648\u0633\u06cc\u0627\u06cc\u06cc
+languages.wen=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0635\u064f\u0631\u0628\u06cc
+languages.gv=\u0645\u0627\u0646\u06cc
+languages.gu=\u06af\u062c\u0631\u0627\u062a\u06cc
+languages.sem=\u0633\u0627\u0645\u06cc (\u062f\u06cc\u06af\u0631)
+languages.sel=\u0633\u0644\u06a9\u0648\u067e\u06cc
+languages.iro=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0627\u06cc\u0631\u0648\u06a9\u0648\u0627\u06cc\u06cc
+languages.gn=\u06af\u0648\u0627\u0631\u0627\u0646\u06cc
+languages.gl=\u06af\u0627\u0644\u06cc\u0633\u06cc\u0627\u06cc\u06cc
+languages.arw=\u0622\u0631\u0627\u0648\u0627\u06a9\u06cc
+languages.gd=\u06af\u06cc\u0644\u06cc \u0627\u0633\u06a9\u0627\u062a\u0644\u0646\u062f\u06cc
+languages.art=\u0633\u0627\u062e\u062a\u06af\u06cc (\u062f\u06cc\u06af\u0631)
+languages.gez=\u06af\u06cc\u200c\u0626\u0632\u06cc
+languages.ira=\u0627\u06cc\u0631\u0627\u0646\u06cc (\u062f\u06cc\u06af\u0631)
+languages.ga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc
+languages.arp=\u0622\u0631\u0627\u067e\u0627\u0647\u0648\u06cc\u06cc
+languages.arn=\u0622\u0631\u0648\u06a9\u0627\u0646\u06cc\u0627\u06cc\u06cc
+languages.fy=\u0641\u0631\u06cc\u0632\u06cc
+languages.gem=\u0698\u0631\u0645\u0646\u06cc (\u062f\u06cc\u06af\u0631)
+languages.ypk=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u06cc\u0648\u067e\u06cc\u06a9\u06cc
+languages.fr=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc
+languages.arc=\u0622\u0631\u0627\u0645\u06cc
+languages.fo=\u0641\u0627\u0631\u0648\u06cc\u06cc
+languages.cel=\u0633\u0644\u062a\u06cc (\u062f\u06cc\u06af\u0631)
languages.fj=\u0641\u06cc\u062c\u06cc\u0627\u06cc\u06cc
-languages.cai=\u0633\u0631\u062e\u200c\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc (\u063a\u06cc\u0631\u0647)
languages.fi=\u0641\u0646\u0644\u0627\u0646\u062f\u06cc
-languages.ro=\u0631\u0648\u0645\u0627\u0646\u06cc\u0627\u06cc\u06cc
+languages.ff=\u0641\u0648\u0644\u0627\u06cc\u06cc
+languages.ceb=\u0633\u0628\u0648\u06cc\u06cc
languages.fa=\u0641\u0627\u0631\u0633\u06cc
-languages.peo=\u0641\u0627\u0631\u0633\u06cc \u0642\u062f\u06cc\u0645 (\u062d\u062f\u0648\u062f \u06f6\u06f0\u06f0-\u06f4\u06f0\u06f0 \u0642.\u0645.)
languages.eu=\u0628\u0627\u0633\u06a9\u06cc
+languages.sco=\u0627\u0633\u06a9\u0627\u062a\u0644\u0646\u062f\u06cc
languages.et=\u0627\u0633\u062a\u0648\u0646\u06cc\u0627\u06cc\u06cc
languages.es=\u0627\u0633\u067e\u0627\u0646\u06cc\u0627\u06cc\u06cc
languages.eo=\u0627\u0633\u067e\u0631\u0627\u0646\u062a\u0648
languages.en=\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc
languages.el=\u06cc\u0648\u0646\u0627\u0646\u06cc
-languages.qu=\u06a9\u0686\u0648\u0627\u06cc\u06cc
-languages.jrb=\u0639\u0631\u0628\u06cc \u06cc\u0647\u0648\u062f\u06cc
-languages.fro=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc \u0642\u062f\u06cc\u0645 (\u06f8\u06f4\u06f2-\u062d\u062f\u0648\u062f \u06f1\u06f4\u06f0\u06f0 \u0645.)
-languages.frm=\u0641\u0631\u0627\u0646\u0633\u0648\u06cc \u0645\u06cc\u0627\u0646\u0647 (\u062d\u062f\u0648\u062f \u06f1\u06f4\u06f0\u06f0-\u06f1\u06f6\u06f0\u06f0 \u0645.)
-languages.dz=\u0628\u0648\u062a\u0627\u0646\u06cc
-languages.nds=\u0622\u0644\u0645\u0627\u0646\u06cc \u0633\u0641\u0644\u06cc\u061b \u0633\u0627\u06a9\u0633\u0648\u0646 \u0633\u0641\u0644\u0628
-languages.dra=\u062f\u0631\u0627\u0648\u06cc\u062f\u06cc (\u063a\u06cc\u0631\u0647)
-languages.pt=\u067e\u0631\u062a\u063a\u0627\u0644\u06cc
-languages.ps=\u067e\u0634\u062a\u0648
+languages.tut=\u0622\u0644\u062a\u0627\u06cc\u06cc\u06a9 (\u062f\u06cc\u06af\u0631)
+languages.niu=\u0646\u06cc\u0648\u06cc\u06cc
+languages.tup=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u062a\u0648\u067e\u06cc\u0627\u06cc\u06cc
+languages.ee=\u0627\u0648\u0647\u200c\u0627\u06cc
+languages.tum=\u062a\u0648\u0645\u0628\u0648\u06a9\u0627\u06cc\u06cc
+languages.mos=\u0645\u0627\u0633\u06cc\u0627\u06cc\u06cc
+languages.dz=\u062c\u0648\u0646\u062e\u0627\u06cc\u06cc
+languages.fiu=\u0641\u06cc\u0646 \u0648 \u0627\u0648\u06af\u0631\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.lus=\u0644\u0648\u0634\u0647\u200c\u0627\u06cc
+languages.moh=\u0645\u0648\u0647\u0627\u06a9\u06cc
+languages.luo=\u0644\u0648\u0626\u0648\u06cc\u06cc
+languages.lun=\u0644\u0648\u0646\u062f\u0627\u06cc\u06cc
+languages.apa=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0622\u067e\u0627\u0686\u06cc\u0627\u06cc\u06cc
languages.de=\u0622\u0644\u0645\u0627\u0646\u06cc
-languages.sit=\u0686\u06cc\u0646 \u0648 \u062a\u0628\u062a\u06cc (\u063a\u06cc\u0631\u0647)
-languages.pl=\u0644\u0647\u0633\u062a\u0627\u0646\u06cc
+languages.lua=\u0644\u0648\u0628\u0627\u06cc\u06cc\u2010\u0644\u0648\u0644\u0648\u0627
+languages.bik=\u0628\u06cc\u06a9\u0648\u0644\u06cc
+languages.und=\u0646\u0627\u0645\u0634\u062e\u0635
languages.da=\u062f\u0627\u0646\u0645\u0627\u0631\u06a9\u06cc
-languages.pi=\u067e\u0627\u0644\u06cc
-languages.sux=\u0633\u0648\u0645\u0631\u06cc
-languages.jpr=\u0641\u0627\u0631\u0633\u06cc \u06cc\u0647\u0648\u062f\u06cc
+languages.dum=\u0647\u0644\u0646\u062f\u06cc \u0645\u06cc\u0627\u0646\u0647
+languages.wak=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0648\u0627\u06a9\u0627\u0634\u06cc
+languages.sat=\u0633\u0627\u0646\u062a\u0627\u0644\u06cc
languages.cy=\u0648\u06cc\u0644\u0632\u06cc
languages.cv=\u0686\u0648\u0648\u0627\u0634\u06cc
-languages.pa=\u067e\u0646\u062c\u0627\u0628\u06cc
+languages.kbd=\u06a9\u0627\u0628\u0627\u0631\u062f\u06cc\u0646\u06cc
languages.cu=\u0627\u0633\u0644\u0627\u0648\u06cc \u06a9\u0644\u06cc\u0633\u0627\u06cc\u06cc
languages.cs=\u0686\u06a9\u06cc
-languages.mis=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0631\u0642\u0647
+languages.cr=\u06a9\u0631\u06cc\u0627\u06cc\u06cc
+languages.sal=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0633\u0627\u0644\u06cc\u0634\u06cc
+languages.dua=\u062f\u0648\u0622\u0644\u0627\u06cc\u06cc
+languages.sai=\u0633\u0631\u062e\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc (\u062f\u06cc\u06af\u0631)
+languages.mnc=\u0645\u0627\u0646\u0686\u0648\u06cc\u06cc
+languages.sah=\u06cc\u0627\u0642\u0648\u062a\u06cc
+languages.gba=\u06af\u0628\u0627\u06cc\u0627\u06cc\u06cc
+languages.inh=\u0627\u06cc\u0646\u06af\u0648\u0634\u06cc
+languages.sad=\u0633\u0627\u0646\u062f\u0627\u0648\u0647\u200c\u0627\u06cc
languages.ch=\u0686\u0627\u0645\u0648\u0631\u0648\u06cc\u06cc
-languages.or=\u0627\u0648\u0631\u06cc\u0647\u200c\u0627\u06cc
+languages.bho=\u0628\u0648\u062c\u067e\u0648\u0631\u06cc
+languages.ine=\u0647\u0646\u062f \u0648 \u0627\u0631\u0648\u067e\u0627\u06cc\u06cc (\u062f\u06cc\u06af\u0631)
+languages.enm=\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0645\u06cc\u0627\u0646\u0647
languages.ce=\u0686\u0686\u0646\u06cc
+languages.inc=\u0647\u0646\u062f\u06cc\u06a9 (\u062f\u06cc\u06af\u0631)
+languages.kar=\u06a9\u0627\u0631\u0646\u06cc
languages.ca=\u06a9\u0627\u062a\u0627\u0644\u0648\u0646\u06cc\u0627\u06cc\u06cc
-languages.mul=\u0686\u0646\u062f\u06cc\u0646 \u0632\u0628\u0627\u0646
+languages.umb=\u0627\u0645\u0628\u0646\u062f\u0648\u06cc\u06cc
+languages.syr=\u0633\u0631\u06cc\u0627\u0646\u06cc
+languages.kam=\u06a9\u0627\u0645\u0628\u0627\u06cc\u06cc
+languages.tsi=\u062a\u0633\u06cc\u0645\u200c\u0634\u06cc\u0627\u0646\u06cc
+languages.ang=\u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0628\u0627\u0633\u062a\u0627\u0646
+languages.cau=\u0642\u0641\u0642\u0627\u0632\u06cc (\u062f\u06cc\u06af\u0631)
+languages.kac=\u06a9\u0627\u0686\u06cc\u0646\u06cc
+languages.kab=\u0642\u0628\u0627\u06cc\u0644\u06cc
languages.bs=\u0628\u0648\u0633\u0646\u06cc\u0627\u06cc\u06cc
+languages.kaa=\u0642\u0631\u0647\u200c\u0642\u0627\u0644\u067e\u0627\u0642\u06cc
+languages.br=\u0628\u0631\u062a\u0627\u0646\u06cc\u0627\u06cc\u06cc
+languages.car=\u06a9\u0627\u0631\u06cc\u0628\u06cc
languages.bo=\u062a\u0628\u062a\u06cc
languages.bn=\u0628\u0646\u06af\u0627\u0644\u06cc
-languages.nv=\u0646\u0627\u0648\u0627\u0647\u0648\u06cc\u06cc
+languages.bm=\u0628\u0627\u0645\u0628\u0627\u0631\u0627\u06cc\u06cc
+languages.gaa=\u06af\u0627\u06cc\u06cc
languages.bi=\u0628\u06cc\u0633\u0644\u0627\u0645\u0627
+languages.cai=\u0633\u0631\u062e\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc (\u062f\u06cc\u06af\u0631)
languages.bh=\u0628\u06cc\u0647\u0627\u0631\u06cc
-languages.nr=\u0627\u0646\u062f\u0647\u200c\u0628\u0644\u0647\u200c\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc
languages.bg=\u0628\u0644\u063a\u0627\u0631\u06cc
languages.be=\u0628\u0644\u0648\u0631\u0648\u0633\u06cc
-languages.no=\u0646\u0631\u0648\u0698\u06cc
-languages.nn=\u0646\u06cc\u0646\u0648\u0631\u0633\u06a9 \u0646\u0631\u0648\u0698\u06cc
-languages.nl=\u0647\u0644\u0646\u062f\u06cc
-languages.ba=\u0628\u0627\u0634\u06a9\u06cc\u0631
+languages.cad=\u06a9\u0627\u062f\u0648\u06cc\u06cc
+languages.ba=\u0628\u0627\u0634\u063a\u06cc\u0631\u06cc
languages.zu=\u0632\u0648\u0644\u0648\u06cc\u06cc
-languages.sgn=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0646\u0634\u0627\u0646\u0647\u200c\u0627\u06cc
-languages.az=\u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646\u06cc
-languages.ne=\u0646\u067e\u0627\u0644\u06cc
+languages.hsb=\u0635\u064f\u0631\u0628\u06cc \u0639\u0644\u06cc\u0627
+languages.az=\u062a\u0631\u06a9\u06cc \u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646\u06cc
languages.ay=\u0622\u06cc\u0645\u0627\u0631\u0627\u06cc\u06cc
-languages.nd=\u0627\u0646\u062f\u0647\u200c\u0628\u0644\u0647\u200c\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc
-languages.nb=\u0628\u0648\u06a9\u0633\u0645\u0627\u0644 \u0646\u0631\u0648\u0698\u06cc
-languages.pal=\u067e\u0647\u0644\u0648\u06cc
-languages.ota=\u062a\u0631\u06a9\u06cc (\u0627\u0645\u067e\u0631\u0627\u062a\u0648\u0631\u06cc \u0639\u062b\u0645\u0627\u0646\u06cc)
-languages.aus=\u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627\u06cc\u06cc
-languages.na=\u0646\u0627\u0626\u0648\u0631\u0648\u06cc\u06cc
+languages.av=\u0622\u0648\u0627\u0631\u06cc
languages.as=\u0622\u0633\u0627\u0645\u06cc
languages.ar=\u0639\u0631\u0628\u06cc
+languages.dsb=\u0635\u064f\u0631\u0628\u06cc \u0633\u0641\u0644\u06cc
+languages.elx=\u0639\u06cc\u0644\u0627\u0645\u06cc
+languages.ilo=\u0627\u06cc\u0644\u0648\u06a9\u0648\u06cc\u06cc
languages.zh=\u0686\u06cc\u0646\u06cc
-languages.sga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc \u0628\u0627\u0633\u062a\u0627\u0646 (\u062a\u0627 \u06f9\u06f0\u06f0 \u0645.)
-languages.my=\u0628\u0631\u0645\u0647\u200c\u0627\u06cc
languages.am=\u0627\u0645\u0647\u0631\u06cc
-languages.nai=\u0633\u0631\u062e\u200c\u067e\u0648\u0633\u062a\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627\u06cc \u0634\u0645\u0627\u0644\u06cc (\u063a\u06cc\u0631\u0647)
-languages.paa=\u067e\u0627\u067e\u0648\u0627\u06cc\u06cc (\u063a\u06cc\u0631\u0647)
-languages.mt=\u0645\u0627\u0644\u062a\u06cc
-languages.ms=\u0645\u0627\u0644\u0632\u06cc\u0627\u06cc\u06cc
-languages.chr=\u0686\u0631\u0648\u06a9\u06cc
-languages.mr=\u0645\u0631\u0627\u062a\u06cc
+languages.pra=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u067e\u0631\u0627\u06a9\u0631\u06cc\u062a\u06cc
+languages.new=\u0646\u0648\u0627\u0631\u06cc\u0627\u06cc\u06cc
+languages.za=\u0686\u0648\u0627\u0646\u06af\u06cc
languages.af=\u0622\u0641\u0631\u06cc\u06a9\u0627\u0646\u0633
languages.ae=\u0627\u0648\u0633\u062a\u0627\u06cc\u06cc
-languages.haw=\u0647\u0627\u0648\u0627\u0626\u06cc\u0627\u06cc\u06cc
-languages.mo=\u0645\u0648\u0644\u062f\u0627\u0648\u06cc\u0627\u06cc\u06cc
-languages.mn=\u0645\u063a\u0648\u0644\u06cc
languages.ab=\u0622\u0628\u062e\u0627\u0632\u06cc
-languages.ml=\u0645\u0627\u0644\u0627\u06cc\u0627\u0644\u0627\u0645\u06cc
languages.aa=\u0622\u0641\u0627\u0631\u06cc
-languages.mk=\u0645\u0642\u062f\u0648\u0646\u06cc
-languages.root=\u0631\u06cc\u0634\u0647
-languages.mi=\u0645\u0627\u0626\u0648\u0631\u06cc\u0627\u06cc\u06cc
-languages.mh=\u0645\u0627\u0631\u0634\u0627\u0644\u06cc
-languages.mg=\u0645\u0627\u0644\u0627\u06af\u0627\u0633\u06cc\u0627\u06cc\u06cc
-languages.mga=\u0627\u06cc\u0631\u0644\u0646\u062f\u06cc \u0645\u06cc\u0627\u0646\u0647 (\u06f9\u06f0\u06f0-\u06f1\u06f2\u06f0\u06f0 \u0645.)
languages.yo=\u06cc\u0648\u0631\u0648\u0628\u0627\u06cc\u06cc
-languages.egy=\u0645\u0635\u0631\u06cc (\u0628\u0627\u0633\u062a\u0627\u0646\u06cc)
+languages.alg=\u0632\u0628\u0627\u0646\u0647\u0627\u06cc \u0622\u0644\u06af\u0648\u0646\u06a9\u06cc\u0646\u06cc
+languages.ale=\u0622\u0644\u0626\u0648\u062a\u06cc
+languages.mkh=\u0645\u0648\u0646\u200c\u062e\u0645\u0631\u06cc (\u062f\u06cc\u06af\u0631)
languages.yi=\u06cc\u062f\u06cc
-languages.bat=\u0628\u0627\u0644\u062a\u06cc\u06a9\u06cc (\u063a\u06cc\u0631\u0647)
-languages.lv=\u0644\u062a\u0648\u0646\u06cc\u0627\u06cc\u06cc
-languages.dak=\u062f\u0627\u06a9\u0648\u062a\u0627\u06cc\u06cc
-languages.lt=\u0644\u06cc\u062a\u0648\u0627\u0646\u06cc\u0627\u06cc\u06cc
-languages.lo=\u0644\u0627\u0626\u0648\u0633\u06cc
-languages.bal=\u0628\u0644\u0648\u0686\u06cc
-languages.ln=\u0644\u06cc\u0646\u06af\u0627\u0644\u0627
-languages.sem=\u0633\u0627\u0645\u06cc
+languages.dra=\u062f\u0631\u0627\u0648\u06cc\u062f\u06cc (\u062f\u06cc\u06af\u0631)
+languages.ber=\u0628\u0631\u0628\u0631\u06cc (\u062f\u06cc\u06af\u0631)
+languages.nds=\u0622\u0644\u0645\u0627\u0646\u06cc \u0633\u0641\u0644\u06cc
+languages.bem=\u0628\u0645\u0628\u0627\u06cc\u06cc
+languages.bej=\u0628\u062c\u0627\u06cc\u06cc
+variants.1901=\u0631\u0633\u0645\u200c\u0627\u0644\u062e\u0637 \u0633\u0646\u062a\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc
+variants.GUOYU=\u0645\u0627\u0646\u062f\u0627\u0631\u06cc\u0646 \u06cc\u0627 \u0686\u06cc\u0646\u06cc \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f
+variants.1996=\u0631\u0633\u0645\u200c\u0627\u0644\u062e\u0637 \u0622\u0644\u0645\u0627\u0646\u06cc \u06f1\u06f9\u06f9\u06f6 \u0645\u06cc\u0644\u0627\u062f\u06cc
+variants.REVISED=\u0631\u0633\u0645\u200c\u0627\u0644\u062e\u0637 \u062a\u062c\u062f\u06cc\u062f\u0646\u0638\u0631\u0634\u062f\u0647
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_AF.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_AF.properties
index 9bbb2fb..cd85688 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_AF.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_AF.properties
@@ -6,27 +6,41 @@
# This file was automatically generated by gnu.localegen from CLDR.
percent=\u066a
-exponential=\u00d7\u06f1\u06f0^
minusSign=\u2212
zeroDigit=\u06f0
decimalSeparator=\u066b
groupingSeparator=\u066c
-currencyFormat=#,##0 \u00a4;-#,##0 \u00a4
-shortMonths=\u062c\u0646\u0648®\u0641\u0628\u0631®®\u0627\u067e\u0631®\u0645\u0640\u06cc®\u062c\u0648\u0646®\u062c\u0648\u0644®\u0627\u06af\u0633®®®\u0646\u0648\u0645®\u062f\u0633\u0645®®
+percentFormat='\u202a'#,##0%'\u202c'
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
+currenciesDisplayName.NOK=\u06a9\u0631\u0648\u0646 \u0646\u0627\u0631\u0648\u06cc
+currenciesDisplayName.BND=\u062f\u0627\u0644\u0631 \u0628\u0631\u0648\u0646\u06cc
+currenciesDisplayName.SGD=\u062f\u0627\u0644\u0631 \u0633\u06cc\u0646\u06af\u0627\u067e\u0648\u0631
+currenciesDisplayName.JPY=\u06cc\u0646 \u062c\u0627\u067e\u0627\u0646
+currenciesDisplayName.NLG=\u06af\u06cc\u0644\u062f\u0631 \u0647\u0627\u0644\u0646\u062f
+currenciesDisplayName.DKK=\u06a9\u0631\u0648\u0646 \u062f\u0646\u0645\u0627\u0631\u06a9
+currenciesDisplayName.CHF=\u0641\u0631\u0627\u0646\u06a9 \u0633\u0648\u06cc\u0633
+currenciesDisplayName.AUD=\u062f\u0627\u0644\u0631 \u0622\u0633\u062a\u0631\u0627\u0644\u06cc\u0627
+currenciesDisplayName.USD=\u062f\u0627\u0644\u0631 \u0627\u0645\u0631\u06cc\u06a9\u0627
+currenciesDisplayName.MXN=\u067e\u0632\u0648\u06cc \u0645\u06a9\u0633\u06cc\u06a9\u0648
+currenciesDisplayName.SEK=\u06a9\u0631\u0648\u0646 \u0633\u0648\u06cc\u062f\u0646
+currenciesDisplayName.BYR=\u0631\u0648\u0628\u0644 \u0631\u0648\u0633\u06cc\u0647\u0654 \u0633\u0641\u06cc\u062f
+currenciesDisplayName.TJS=\u0633\u0627\u0645\u0627\u0646\u06cc \u062a\u0627\u062c\u06a9\u0633\u062a\u0627\u0646
+currenciesDisplayName.CAD=\u062f\u0627\u0644\u0631 \u06a9\u0627\u0646\u0627\u062f\u0627
+shortMonths=®®®®®®®®®®®®®
months=\u062c\u0646\u0648\u0631\u06cc®\u0641\u0628\u0631\u0648\u0631\u06cc®\u0645\u0627\u0631\u0686®\u0627\u067e\u0631\u06cc\u0644®\u0645\u06cc®\u062c\u0648\u0646®\u062c\u0648\u0644\u0627\u06cc®\u0627\u06af\u0633\u062a®\u0633\u067e\u062a\u0645\u0628\u0631®\u0627\u06a9\u062a\u0648\u0628\u0631®\u0646\u0648\u0645\u0628\u0631®\u062f\u0633\u0645\u0628\u0631®®
firstDayOfWeek=sat
zoneStrings=Asia/Kabul®AFT®\u0648\u0642\u062a \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646®AFT®\u0648\u0642\u062a \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646®©
territories.AU=\u0622\u0633\u062a\u0631\u0627\u0644\u06cc\u0627
territories.GY=\u06af\u06cc\u0627\u0646\u0627
-territories.GW=\u06af\u06cc\u0646\u06cc\u0627 \u0628\u06cc\u0633\u0627\u0626\u0648
territories.AR=\u0627\u0631\u062c\u0646\u062a\u0627\u06cc\u0646
+territories.GW=\u06af\u06cc\u0646\u06cc\u0627 \u0628\u06cc\u0633\u0627\u0626\u0648
territories.MZ=\u0645\u0648\u0632\u0645\u0628\u06cc\u0642
-territories.MY=\u0645\u0627\u0644\u06cc\u0632\u06cc\u0627
-territories.GT=\u06af\u0648\u0627\u062a\u06cc\u0645\u0627\u0644\u0627
territories.AO=\u0627\u0646\u06af\u0648\u0644\u0627
+territories.GT=\u06af\u0648\u0627\u062a\u06cc\u0645\u0627\u0644\u0627
+territories.MY=\u0645\u0627\u0644\u06cc\u0632\u06cc\u0627
territories.MX=\u0645\u06a9\u0633\u06cc\u06a9\u0648
-territories.GQ=\u06af\u06cc\u0646\u06cc\u0627 \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc
territories.AL=\u0627\u0644\u0628\u0627\u0646\u06cc\u0627
+territories.GQ=\u06af\u06cc\u0646\u06cc\u0627 \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc
territories.MT=\u0645\u0627\u0644\u062a\u0627
territories.GN=\u06af\u06cc\u0646\u06cc\u0627
territories.MR=\u0645\u0648\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627
@@ -34,9 +48,8 @@ territories.SV=\u0627\u0644\u0633\u0644\u0648\u0627\u062f\u0648\u0631
territories.AG=\u0627\u0646\u062a\u06cc\u06af\u0648\u0627 \u0648 \u0628\u0627\u0631\u0628\u0648\u062f\u0627
territories.ST=\u0633\u0627\u0626\u0648 \u062a\u0648\u0645\u0647 \u0648 \u067e\u0631\u06cc\u0646\u0633\u06cc\u067e
territories.AE=\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u0654 \u0639\u0631\u0628\u06cc
-territories.MN=\u0645\u0646\u06af\u0648\u0644\u06cc\u0627
territories.AD=\u0627\u0646\u062f\u0648\u0631\u0627
-territories.YU=\u06cc\u0648\u06af\u0648\u0633\u0644\u0627\u0648\u06cc\u0627
+territories.MN=\u0645\u0646\u06af\u0648\u0644\u06cc\u0627
territories.SO=\u0633\u0648\u0645\u0627\u0644\u06cc\u0647
territories.SN=\u0633\u06cc\u0646\u06cc\u06af\u0627\u0644
territories.GD=\u06af\u0631\u06cc\u0646\u0627\u062f\u0627
@@ -65,13 +78,13 @@ territories.KN=\u0633\u0646\u062a \u06a9\u06cc\u062a\u0633 \u0648 \u0646\u06cc\u
territories.KM=\u06a9\u0648\u0645\u0648\u0631
territories.EE=\u0627\u0633\u062a\u0648\u0646\u06cc\u0627
territories.WS=\u0633\u0627\u0645\u0648\u0622\u06cc \u063a\u0631\u0628\u06cc
-territories.KH=\u06a9\u0645\u067e\u0648\u0686\u06cc\u0627
territories.EC=\u0627\u06a9\u0648\u0627\u062f\u0648\u0631
+territories.KH=\u06a9\u0645\u067e\u0648\u0686\u06cc\u0627
territories.KG=\u0642\u0631\u063a\u0632\u0633\u062a\u0627\u0646
territories.KE=\u06a9\u06cc\u0646\u06cc\u0627
territories.PY=\u067e\u0627\u0631\u0627\u06af\u0648\u0627\u06cc
-territories.JP=\u062c\u0627\u067e\u0627\u0646
territories.DK=\u062f\u0646\u0645\u0627\u0631\u06a9
+territories.JP=\u062c\u0627\u067e\u0627\u0646
territories.PT=\u067e\u0631\u062a\u06af\u0627\u0644
territories.PL=\u067e\u0648\u0644\u0646\u062f
territories.PG=\u067e\u0627\u067e\u0648\u0627 \u0646\u06cc\u0648 \u06af\u06cc\u0646\u06cc\u0627
@@ -97,15 +110,15 @@ territories.BS=\u0628\u0647\u0627\u0645\u0627\u0633
territories.BR=\u0628\u0631\u0627\u0632\u06cc\u0644
territories.UA=\u0627\u06a9\u0631\u0627\u06cc\u0646
territories.NZ=\u0632\u06cc\u0644\u0627\u0646\u062f \u062c\u062f\u06cc\u062f
-territories.HT=\u0647\u0627\u06cc\u062a\u06cc
territories.BO=\u0628\u0648\u0644\u06cc\u0648\u06cc\u0627
+territories.HT=\u0647\u0627\u06cc\u062a\u06cc
territories.BN=\u0628\u0631\u0648\u0646\u06cc
territories.HR=\u06a9\u0631\u0648\u0634\u06cc\u0627
territories.HN=\u0647\u0627\u0646\u062f\u0648\u0631\u0627\u0633
territories.BG=\u0628\u0644\u063a\u0627\u0631\u06cc\u0627
territories.NP=\u0646\u06cc\u067e\u0627\u0644
-territories.NO=\u0646\u0627\u0631\u0648\u06cc
territories.BE=\u0628\u0644\u062c\u06cc\u0645
+territories.NO=\u0646\u0627\u0631\u0648\u06cc
territories.BD=\u0628\u0646\u06af\u0644\u0647\u200c\u062f\u06cc\u0634
territories.ZW=\u0632\u06cc\u0645\u0628\u0627\u0628\u0648\u06cc
territories.NL=\u0647\u0627\u0644\u0646\u062f
@@ -119,13 +132,13 @@ languages.no=\u0646\u0627\u0631\u0648\u06cc\u0698\u06cc
languages.nl=\u0647\u0627\u0644\u0646\u062f\u06cc
languages.it=\u0627\u06cc\u062a\u0627\u0644\u0648\u06cc
languages.tg=\u062a\u0627\u062c\u06a9\u06cc
-languages.ne=\u0646\u06cc\u067e\u0627\u0644\u06cc
languages.is=\u0622\u06cc\u0633\u0644\u0646\u062f\u06cc
+languages.ne=\u0646\u06cc\u067e\u0627\u0644\u06cc
languages.fi=\u0641\u0646\u0644\u0646\u062f\u06cc
languages.id=\u0627\u0646\u062f\u0648\u0646\u06cc\u0632\u06cc\u0627\u06cc\u06cc
languages.sv=\u0633\u0648\u06cc\u062f\u0646\u06cc
-languages.fa=\u062f\u0631\u06cc
languages.pt=\u067e\u0631\u062a\u06af\u0627\u0644\u06cc
+languages.fa=\u062f\u0631\u06cc
languages.mn=\u0645\u063a\u0644\u06cc
languages.pl=\u067e\u0648\u0644\u0646\u062f\u06cc
languages.ky=\u0642\u0631\u063a\u0632\u06cc
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_IR.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_IR.properties
index 10d9d2a..c962035 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_IR.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fa_IR.properties
@@ -6,10 +6,9 @@
# This file was automatically generated by gnu.localegen from CLDR.
percent=\u066a
-exponential=\u00d7\u06f1\u06f0^
zeroDigit=\u06f0
decimalSeparator=\u066b
groupingSeparator=\u066c
percentFormat=%#,##0
-currencyFormat=#,##0 \u00a4;\u2212#,##0 \u00a4
+currencyFormat=#,##0.00 \u00a4;\u2212#,##0.00 \u00a4
firstDayOfWeek=sat
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fi.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fi.properties
index 2fb990e..8e6a340 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fi.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fi.properties
@@ -6,786 +6,376 @@
# This file was automatically generated by gnu.localegen from CLDR.
decimalSeparator=,
-groupingSeparator=\u00a0
+groupingSeparator=
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=Jordanian dinaari
-currenciesDisplayName.BOV=Bolivian mvdol
-currenciesDisplayName.XAU=Kulta
-currenciesDisplayName.FOK=F\u00e4rsaarten kruunu
-currenciesDisplayName.LBP=Libanonin punta
-currenciesDisplayName.EUR=euro
-currenciesDisplayName.VND=Vietnamin dong
-currenciesDisplayName.TZS=Tansanian shillinki
-currenciesDisplayName.BOP=Bolivian peso
-currenciesDisplayName.KHR=Kambod\u017ean riel
-currenciesDisplayName.XAM=Aasian rahayksikk\u00f6 (AMU)
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Kambod\u017ean vanha riel
-currenciesDisplayName.ZMP=Zambian punta
-currenciesDisplayName.AUP=Australian punta
-currenciesDisplayName.XAF=CFA-frangi BEAC
-currenciesDisplayName.MTP=Maltan punta
-currenciesDisplayName.GHR=Ghanan revalvoitu cedi
-currenciesDisplayName.ZMK=Zambian kwacha
-currenciesDisplayName.XAD=Aasian dinaarin UA
-currenciesDisplayName.GHP=Ghanan punta
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghanan vanha cedi
-currenciesDisplayName.MTL=Maltan liira
-currenciesDisplayName.AUD=Australian dollari
-currenciesDisplayName.USS=Yhdysvaltain dollari (Sama p\u00e4iv\u00e4)
-currenciesDisplayName.ITL=Italian liira
-currenciesDisplayName.USN=Yhdysvaltain dollari (Seuraava p\u00e4iv\u00e4)
-currenciesDisplayName.GHC=Ghanan cedi
-currenciesDisplayName.SGD=Singaporen dollari
-currenciesDisplayName.PAB=Panaman balboa
-currenciesDisplayName.LAK=Laosin kip
-currenciesDisplayName.KGS=Kirgistanin som
-currenciesDisplayName.CHF=Sveitsin frangi
-currenciesDisplayName.ATS=It\u00e4vallan shillinki
-currenciesDisplayName.USD=Yhdysvaltain dollari
-currenciesDisplayName.ETD=Etiopian dollari
-currenciesDisplayName.BND=Brunein dollari
-currenciesDisplayName.JMP=Jamaikan punta
-currenciesDisplayName.ETB=Etiopian birr
-currenciesDisplayName.DZG=Algerian franc germinal
-currenciesDisplayName.DZF=Algerian uusi frangi
-currenciesDisplayName.DZD=Algerian dinaari
-currenciesDisplayName.PYG=Paraguayn guarani
-currenciesDisplayName.LYP=Libyan punta
-currenciesDisplayName.JMD=Jamaikan dollari
-currenciesDisplayName.ISK=Islannin kruunu
-currenciesDisplayName.ESP=Espanjan peseta
-currenciesDisplayName.BMP=Bermudan punta
-currenciesDisplayName.LYD=Libyan dinaari
-currenciesDisplayName.LYB=Libyan sotilasvallan liira
-currenciesDisplayName.BMD=Bermudan dollari
-currenciesDisplayName.NLG=Alankomaiden guldeni
-currenciesDisplayName.MRO=Mauritanian ouguiya
-currenciesDisplayName.IRR=Iranin rial
-currenciesDisplayName.SEK=Ruotsin kruunu
-currenciesDisplayName.ERN=Eritrean nakfa
+currenciesDisplayName.YDD=Jemenin dinaari
+currenciesDisplayName.TWD=Taiwanin uusi dollari
currenciesDisplayName.KES=Kenian shillinki
-currenciesDisplayName.CFF=Keski-Afrikan tasavallan CFA-frangi
+currenciesDisplayName.BYB=Valko-Ven\u00e4j\u00e4n uusi rupla (1994-1999)
+currenciesDisplayName.LKR=Sri Lankan rupia
+currenciesDisplayName.RWF=Ruandan frangi
+currenciesDisplayName.TJS=Tad\u017eikistanin somoni
+currenciesDisplayName.SDP=Sudanin punta
+currenciesDisplayName.TJR=Tad\u017eikistanin rupla
+currenciesDisplayName.ERN=Eritrean nakfa
+currenciesDisplayName.AFN=Afgaani
+currenciesDisplayName.GRD=Kreikan drakhma
+currenciesDisplayName.IEP=Irlannin punta
currenciesDisplayName.ARS=Argentiinan peso
+currenciesDisplayName.SDD=Sudanin dinaari
currenciesDisplayName.ARP=Argentiinan peso (1983-1985)
-currenciesDisplayName.ARM=Argentiinan peso moneda nacional
-currenciesDisplayName.TWD=Taiwanin uusi dollari
-currenciesDisplayName.SDP=Sudanin punta
currenciesDisplayName.GEL=Georgian lari
+currenciesDisplayName.AFA=Afgaani (1927-2002)
currenciesDisplayName.GEK=Georgian kuponkilari
-currenciesDisplayName.MQF=Martiniquen frangi
+currenciesDisplayName.CRC=Costa Rican colon
currenciesDisplayName.FKP=Falklandinsaarten punta
+currenciesDisplayName.EEK=Viron kruunu
+currenciesDisplayName.HKD=Hongkongin dollari
+currenciesDisplayName.MDL=Moldovan leu
currenciesDisplayName.ARA=Argentiinan austral
-currenciesDisplayName.SDD=Sudanin dinaari
currenciesDisplayName.IQD=Irakin dinaari
-currenciesDisplayName.TVD=Tuvalun dollari
currenciesDisplayName.SCR=Seychellien rupia
+currenciesDisplayName.VUV=Vanuatun vatu
+currenciesDisplayName.DKK=Tanskan kruunu
+currenciesDisplayName.KPW=Pohjois-Korean won
+currenciesDisplayName.GQE=P\u00e4iv\u00e4ntasaajan Guinean ekwele guineana
+currenciesDisplayName.IDR=Indonesian rupia
currenciesDisplayName.LVR=Latvian rupla
-currenciesDisplayName.FJP=Fid\u017ein punta
+currenciesDisplayName.SOS=Somalian shillinki
+currenciesDisplayName.AED=Arabiemiirikuntien dirhami
+currenciesDisplayName.BWP=Botswanan pula
currenciesDisplayName.LVL=Latvian lati
-currenciesDisplayName.CDL=Kongon zaire
-currenciesDisplayName.CDG=Kongon tasavallan frangi
-currenciesDisplayName.CDF=Kongon kongolainen frangi
-currenciesDisplayName.FJD=Fid\u017ein dollari
+currenciesDisplayName.RUR=Ven\u00e4j\u00e4n rupla (1991-1998)
currenciesDisplayName.NIO=Nicaraguan cordoba oro
+currenciesDisplayName.ADP=Andorran peseta
+currenciesDisplayName.FJD=Fid\u017ein dollari
currenciesDisplayName.MOP=Macaon pataca
-currenciesDisplayName.NIG=Nicaraguan kultacordoba
+currenciesDisplayName.RUB=Ven\u00e4j\u00e4n rupla
+currenciesDisplayName.CDF=Kongon kongolainen frangi
currenciesDisplayName.NIC=Nicaraguan cordoba
-currenciesDisplayName.XTR=COMECONin siirrett\u00e4v\u00e4 rupla
-currenciesDisplayName.FIN=Suomen markka (1860-1962)
-currenciesDisplayName.FIM=Suomen markka
+currenciesDisplayName.DJF=Djiboutin frangi
+currenciesDisplayName.ECV=Ecuadorin UVC
currenciesDisplayName.SBD=Salomonsaarten dollari
+currenciesDisplayName.UZS=Uzbekistanin som
+currenciesDisplayName.ECS=Ecuadorin sucre
+currenciesDisplayName.PHP=Filippiinien peso
+currenciesDisplayName.THB=Thaimaan baht
currenciesDisplayName.LUF=Luxemburgin frangi
-currenciesDisplayName.TTO=Trinidadin ja Tobagon vanha dollari
-currenciesDisplayName.AOS=Angolan escudo
-currenciesDisplayName.AOR=Angolan kwanza reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongolian tugrik
-currenciesDisplayName.HUF=Unkarin forintti
-currenciesDisplayName.BIF=Burundin frangi
-currenciesDisplayName.AON=Angolan uusi kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolan kwanza (1977-1990)
+currenciesDisplayName.FIM=Suomen markka
currenciesDisplayName.TTD=Trinidadin ja Tobagon dollari
currenciesDisplayName.SZL=Swazimaan lilangeni
-currenciesDisplayName.NHF=Uusien-Hebridien CFP-frangi
-currenciesDisplayName.GBP=Iso-Britannian sterling-punta
-currenciesDisplayName.SAS=Saudi-Arabian itsen\u00e4inen rial
+currenciesDisplayName.MNT=Mongolian tugrik
currenciesDisplayName.SAR=Saudi-Arabian rial
+currenciesDisplayName.UAK=Ukrainan karbovanetz
+currenciesDisplayName.UAH=Ukrainan hryvnia
+currenciesDisplayName.HUF=Unkarin forintti
+currenciesDisplayName.COP=Kolumbian peso
+currenciesDisplayName.QAR=Qatarin rial
currenciesDisplayName.LTT=Liettuan talonas
-currenciesDisplayName.INR=Intian rupia
currenciesDisplayName.PTE=Portugalin escudo
-currenciesDisplayName.AOA=Angolan kwanza
-currenciesDisplayName.PTC=Portugalin conto
+currenciesDisplayName.AOR=Angolan kwanza reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguayn peso uruguayo
+currenciesDisplayName.GBP=Iso-Britannian sterling-punta
+currenciesDisplayName.BIF=Burundin frangi
+currenciesDisplayName.INR=Intian rupia
+currenciesDisplayName.ZRZ=Zairen zaire
+currenciesDisplayName.AON=Angolan uusi kwanza (1990-2000)
currenciesDisplayName.LTL=Liettuan liti
-currenciesDisplayName.KZT=Kazakhstanin tenge
-currenciesDisplayName.KZR=Kazakhstanin rupla
-currenciesDisplayName.VGD=Brittil\u00e4isten Neitsytsaarten dollari
-currenciesDisplayName.NGP=Nigerian punta
-currenciesDisplayName.MMX=Myanmarin dollarin FEC
+currenciesDisplayName.XFU=Ranskan UIC-frangi
+currenciesDisplayName.KZT=Kazakstanin tenge
+currenciesDisplayName.MZM=Mosambikin metical
+currenciesDisplayName.UYP=Uruguayn peso (1975-1993)
+currenciesDisplayName.AOK=Angolan kwanza (1977-1990)
+currenciesDisplayName.BUK=Burman kyat
+currenciesDisplayName.GNS=Guinean syli
+currenciesDisplayName.XFO=Ranskan kulta frangi
+currenciesDisplayName.PGK=Papua-Uuden-Guinean kina
+currenciesDisplayName.SYP=Syyrian punta
+currenciesDisplayName.MZE=Mosambikin escudo
+currenciesDisplayName.OMR=Omanin rial
currenciesDisplayName.NGN=Nigerian naira
+currenciesDisplayName.ZRN=Zairen uusi zaire
+currenciesDisplayName.AOA=Angolan kwanza
+currenciesDisplayName.CNY=Kiinan yuan renminbi
+currenciesDisplayName.MAF=Marokon frangi
+currenciesDisplayName.GNF=Guinean frangi
currenciesDisplayName.HTG=Haitin gourde
-currenciesDisplayName.SYP=Syyrian punta
-currenciesDisplayName.PSP=Palestiinan punta
-currenciesDisplayName.BHD=Bahrainin dinaari
+currenciesDisplayName.MAD=Marokon dirhami
+currenciesDisplayName.TRY=Turkin uusi liira
currenciesDisplayName.MMK=Myanmarin kyat
+currenciesDisplayName.MYR=Malesian ringgit
+currenciesDisplayName.LSL=Lesothon loti
+currenciesDisplayName.XEU=Euroopan valuuttayksikk\u00f6
+currenciesDisplayName.BHD=Bahrainin dinaari
+currenciesDisplayName.SLL=Sierra Leonen leone
+currenciesDisplayName.BTN=Bhutanin ngultrum
+currenciesDisplayName.TRL=Turkin liira
+currenciesDisplayName.KMF=Komorien frangi
currenciesDisplayName.ANG=Alankomaiden Antillien guldeni
currenciesDisplayName.CZK=T\u0161ekin koruna
-currenciesDisplayName.IMP=Mansaaren sterling-punta
-currenciesDisplayName.BGX=Bulgarian lev FEC
-currenciesDisplayName.LSL=Lesothon loti
-currenciesDisplayName.GAF=Gabonin CFA-frangi
-currenciesDisplayName.BGO=Bulgarian lev (1879-1952)
+currenciesDisplayName.AZM=Azerbaid\u017eanin manat
+currenciesDisplayName.KYD=Caymansaarten dollari
+currenciesDisplayName.GMD=Gambian dalasi
currenciesDisplayName.BGN=Bulgarian uusi lev
-currenciesDisplayName.BGM=Bulgarian sosialistinen lev
currenciesDisplayName.CAD=Kanadan dollari
+currenciesDisplayName.MXV=Meksikon UDI
currenciesDisplayName.BGL=Bulgarian kova leva
-currenciesDisplayName.TRL=Turkin liira
-currenciesDisplayName.KYD=Caymansaarten dollari
-currenciesDisplayName.CYP=Kyproksen punta
+currenciesDisplayName.VEB=Venezuelan bolivar
+currenciesDisplayName.MLF=Malin frangi
currenciesDisplayName.ILS=Israelin uusi sekeli
+currenciesDisplayName.MXP=Meksikon hopeapeso (1861-1992)
+currenciesDisplayName.PES=Perun sol
currenciesDisplayName.GYD=Guyanan dollari
-currenciesDisplayName.AMD=Armenian dram
+currenciesDisplayName.MXN=Meksikon peso
currenciesDisplayName.ILP=Israelin punta
-currenciesDisplayName.MLF=Malin frangi
-currenciesDisplayName.ILL=Israelin sekeli
-currenciesDisplayName.VEB=Venezuelan bolivar
-currenciesDisplayName.ALX=Albanian dollarin FEC
+currenciesDisplayName.SKK=Slovakin koruna
+currenciesDisplayName.CYP=Kyproksen punta
+currenciesDisplayName.XDR=erityisnosto-oikeus
+currenciesDisplayName.PEN=Perun uusi sol
currenciesDisplayName.LRD=Liberian dollari
-currenciesDisplayName.ALV=Albanian lek valute
+currenciesDisplayName.PEI=Perun inti
+currenciesDisplayName.AMD=Armenian dram
+currenciesDisplayName.BSD=Bahaman dollari
currenciesDisplayName.HRK=Kroatian kuna
-currenciesDisplayName.REF=Reunionin frangi
+currenciesDisplayName.CLP=Chilen peso
currenciesDisplayName.HRD=Kroatian dinaari
-currenciesDisplayName.ALL=Albanian lek
-currenciesDisplayName.JEP=Jerseyn sterling-punta
-currenciesDisplayName.ALK=Albanian lek (1946-1961)
-currenciesDisplayName.MKN=Makedonian dinaari (1992-1993)
-currenciesDisplayName.VDP=Pohjois-Vietnamin viet minh piastre dong viet
-currenciesDisplayName.VDN=Pohjois-Vietnamin uusi dong
-currenciesDisplayName.MKD=Makedonian dinaari
-currenciesDisplayName.VDD=Pohjois-Vietnamin piastre dong viet
-currenciesDisplayName.TPP=Timorin pataca
currenciesDisplayName.XPF=CFP-frangi
-currenciesDisplayName.BEL=Belgian frangi (rahoitus)
-currenciesDisplayName.GWP=Guinea-Bissaun peso
-currenciesDisplayName.KWD=Kuwaitin dinaari
-currenciesDisplayName.GWM=Portugalin Guinean mil reis
-currenciesDisplayName.BEF=Belgian frangi
+currenciesDisplayName.FRF=Ranskan frangi
+currenciesDisplayName.BRR=Brasilian cruzeiro
+currenciesDisplayName.MKD=Makedonian dinaari
+currenciesDisplayName.CLF=Chilen unidades de fomento
+currenciesDisplayName.ALL=Albanian lek
+currenciesDisplayName.BRN=Brasilian uusi cruzado
+currenciesDisplayName.MWK=Malawin kwacha
+currenciesDisplayName.BRL=Brasilian real
currenciesDisplayName.TPE=Timorin escudo
-currenciesDisplayName.BEC=Belgian frangi (vaihdettava)
-currenciesDisplayName.GWE=Portugalin Guinean escudo
+currenciesDisplayName.BRE=Brasilian cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brasilian cruzado
+currenciesDisplayName.BRB=Brasilian uusi cruzeiro (1967-1986)
+currenciesDisplayName.DEM=Saksan markka
+currenciesDisplayName.KWD=Kuwaitin dinaari
+currenciesDisplayName.XCD=It\u00e4-Karibian dollari
+currenciesDisplayName.NPR=Nepalin rupia
+currenciesDisplayName.GWP=Guinea-Bissaun peso
+currenciesDisplayName.YUN=Jugoslavian vaihdettava dinaari
currenciesDisplayName.SVC=El Salvadorin colon
-currenciesDisplayName.CWG=Curacaon guldeni
-currenciesDisplayName.BDT=Bangladeshin taka
-currenciesDisplayName.TOS=Tongan sterling-punta
-currenciesDisplayName.TOP=Tongan pa\u02bbanga
+currenciesDisplayName.YUM=Jugoslavian uusi dinaari
+currenciesDisplayName.BEL=Belgian frangi (rahoitus)
+currenciesDisplayName.SIT=Slovenian tolar
+currenciesDisplayName.JPY=Japanin jeni
currenciesDisplayName.XOF=CFA-frangi BCEAO
+currenciesDisplayName.MVR=Malediivien rufiyaa
+currenciesDisplayName.GWE=Portugalin Guinean escudo
+currenciesDisplayName.BEF=Belgian frangi
+currenciesDisplayName.TOP=Tongan pa\u02bbanga
+currenciesDisplayName.YUD=Jugoslavian kova dinaari
+currenciesDisplayName.BEC=Belgian frangi (vaihdettava)
currenciesDisplayName.SUR=Neuvostoliiton rupla
-currenciesDisplayName.SUN=Neuvostoliiton uusi rupla
-currenciesDisplayName.NCF=Uuden-Kaledonian franc germinal
-currenciesDisplayName.CVE=Kap Verden escudo
-currenciesDisplayName.XNF=Ranskan Antillien CFA-frangi
+currenciesDisplayName.ROL=Romanian lei
+currenciesDisplayName.DDM=It\u00e4-Saksan ostmark
+currenciesDisplayName.BDT=Bangladeshin taka
+currenciesDisplayName.XBD=EUA (XBD)
+currenciesDisplayName.AWG=Aruban guldeni
+currenciesDisplayName.XBC=EUA (XBC)
+currenciesDisplayName.XBB=Euroopan rahayksikk\u00f6 (EMU)
+currenciesDisplayName.XBA=EURCO
+currenciesDisplayName.NOK=Norjan kruunu
+currenciesDisplayName.MUR=Mauritiuksen rupia
currenciesDisplayName.ZAR=Etel\u00e4-Afrikan randi
-currenciesDisplayName.DOP=Dominikaanisen tasavallan peso
-currenciesDisplayName.CUX=Kuuban FEC
-currenciesDisplayName.ZAP=Etel\u00e4-Afrikan punta
+currenciesDisplayName.SHP=Saint Helenan punta
+currenciesDisplayName.XAU=kulta
currenciesDisplayName.ZAL=Etel\u00e4-Afrikan randi (rahoitus)
+currenciesDisplayName.VND=Vietnamin dong
+currenciesDisplayName.TZS=Tansanian shillinki
+currenciesDisplayName.GIP=Gibraltarin punta
currenciesDisplayName.TND=Tunisian dinaari
-currenciesDisplayName.CUP=Kuuban peso
-currenciesDisplayName.GUF=Ranskan Guyanan franc guiana
+currenciesDisplayName.CVE=Kap Verden escudo
currenciesDisplayName.UGX=Ugandan shillinki
-currenciesDisplayName.LNR=Ceylonin rupia
-currenciesDisplayName.AIF=Affarsin ja Issasin frangi
-currenciesDisplayName.VAL=Vatikaanin kaupungin liira
-currenciesDisplayName.STE=S\u00e3o Tom\u00e9n ja Princip\u00e9n escudo
+currenciesDisplayName.ZMK=Sambian kwacha
+currenciesDisplayName.JOD=Jordanian dinaari
+currenciesDisplayName.XAF=CFA-frangi BEAC
+currenciesDisplayName.LBP=Libanonin punta
currenciesDisplayName.UGS=Ugandan shillinki (1966-1987)
currenciesDisplayName.STD=S\u00e3o Tom\u00e9n ja Princip\u00e9n dobra
-currenciesDisplayName.MHD=Marshallinsaarten dollari
-currenciesDisplayName.NZP=Uuden-Seelannin punta
currenciesDisplayName.WST=L\u00e4nsi-Samoan tala
-currenciesDisplayName.WSP=L\u00e4nsi-Samoan punta
-currenciesDisplayName.HNL=Hondurasin lempira
-currenciesDisplayName.XMF=Ranskan em\u00e4maan uusi frangi
+currenciesDisplayName.KHR=Kambod\u017ean riel
+currenciesDisplayName.EUR=euro
+currenciesDisplayName.DOP=Dominikaanisen tasavallan peso
+currenciesDisplayName.BOV=Bolivian mvdol
+currenciesDisplayName.MTP=Maltan punta
+currenciesDisplayName.USS=Yhdysvaltain dollari (sama p\u00e4iv\u00e4)
+currenciesDisplayName.BOP=Bolivian peso
+currenciesDisplayName.MTL=Maltan liira
+currenciesDisplayName.CUP=Kuuban peso
currenciesDisplayName.TMM=Turkmenistanin manat
-currenciesDisplayName.GTQ=Guatemalan quetzal
+currenciesDisplayName.USN=Yhdysvaltain dollari (seuraava p\u00e4iv\u00e4)
+currenciesDisplayName.SGD=Singaporen dollari
currenciesDisplayName.NZD=Uuden-Seelannin dollari
-currenciesDisplayName.SSP=Skotlannin punta
-currenciesDisplayName.BBD=Barbadosin dollari
+currenciesDisplayName.USD=Yhdysvaltain dollari
+currenciesDisplayName.HNL=Hondurasin lempira
+currenciesDisplayName.BOB=boliviano
+currenciesDisplayName.ITL=Italian liira
+currenciesDisplayName.PAB=Panaman balboa
+currenciesDisplayName.GTQ=Guatemalan quetzal
+currenciesDisplayName.LAK=Laosin kip
+currenciesDisplayName.GHC=Ghanan cedi
+currenciesDisplayName.AUD=Australian dollari
currenciesDisplayName.NAD=Namibian dollari
+currenciesDisplayName.KGS=Kirgistanin som
currenciesDisplayName.MGF=Madagaskarin frangi
+currenciesDisplayName.CHF=Sveitsin frangi
+currenciesDisplayName.BBD=Barbadosin dollari
currenciesDisplayName.MGA=Madagaskarin ariary
-currenciesDisplayName.EGP=Egyptin punta
-currenciesDisplayName.BZH=Brittil\u00e4isen Hondurasin dollari
+currenciesDisplayName.PYG=Paraguayn guarani
currenciesDisplayName.PLZ=Puolan zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnia-Hertsegovinan uusi dinaari
-currenciesDisplayName.PLX=Puolan US-dollarin FEC
-currenciesDisplayName.BAM=Bosnia-Hertsegovinan vaihdettava markka
-currenciesDisplayName.BZD=Belizen dollari
-currenciesDisplayName.BAD=Bosnia-Hertsegovinan dinaari
-currenciesDisplayName.PLN=Puolan zloty
currenciesDisplayName.YER=Jemenin rial
+currenciesDisplayName.ATS=It\u00e4vallan shillinki
+currenciesDisplayName.ETB=Etiopian birr
+currenciesDisplayName.BND=Brunein dollari
+currenciesDisplayName.JMD=Jamaikan dollari
+currenciesDisplayName.EGP=Egyptin punta
+currenciesDisplayName.PLN=Puolan zloty
+currenciesDisplayName.DZD=Algerian dinaari
+currenciesDisplayName.ISK=Islannin kruunu
currenciesDisplayName.SRG=Surinamin guldeni
-currenciesDisplayName.CSK=T\u0161ekkoslovakian kova koruna
+currenciesDisplayName.LYD=Libyan dinaari
+currenciesDisplayName.BZD=Belizen dollari
+currenciesDisplayName.BAM=Bosnia-Hertsegovinan vaihdettava markka
+currenciesDisplayName.ESP=Espanjan peseta
currenciesDisplayName.KRW=Etel\u00e4-Korean won
+currenciesDisplayName.NLG=Alankomaiden guldeni
+currenciesDisplayName.MRO=Mauritanian ouguiya
+currenciesDisplayName.BAD=Bosnia-Hertsegovinan dinaari
+currenciesDisplayName.ZWD=Zimbabwen dollari
+currenciesDisplayName.SEK=Ruotsin kruunu
+currenciesDisplayName.CSK=T\u0161ekkoslovakian kova koruna
currenciesDisplayName.BYR=Valko-Ven\u00e4j\u00e4n rupla
-currenciesDisplayName.YEI=Jemenin imadi rial
-currenciesDisplayName.BYL=Valko-Ven\u00e4j\u00e4n rupla (1992-1994)
-currenciesDisplayName.CSC=T\u0161ekkoslovakian koruna
-currenciesDisplayName.KRO=Etel\u00e4-Korean vanha won
-currenciesDisplayName.KRH=Etel\u00e4-Korean hwan
-currenciesDisplayName.BYB=Valko-Ven\u00e4j\u00e4n uusi rupla (1994-1999)
-currenciesDisplayName.SQS=Somalimaan shillinki
-currenciesDisplayName.GRN=Kreikan uusi drakhma
+currenciesDisplayName.IRR=Iranin rial
currenciesDisplayName.PKR=Pakistanin rupia
-currenciesDisplayName.AFN=Afgaani
-currenciesDisplayName.ZWD=Zimbabwen dollari
-currenciesDisplayName.LKR=Sri Lankan rupia
-currenciesDisplayName.GRD=Kreikan drakhma
-currenciesDisplayName.IEP=Irlannin punta
-currenciesDisplayName.AFA=Afgaani (1927-2002)
-currenciesDisplayName.YDD=Jemenin dinaari
-currenciesDisplayName.RWF=Ruandan frangi
-currenciesDisplayName.CRC=Costa Rican colon
-currenciesDisplayName.TJS=Tad\u017eikistanin somoni
-currenciesDisplayName.TJR=Tad\u017eikistanin rupla
-currenciesDisplayName.EEK=Viron kruunu
-currenciesDisplayName.GQP=P\u00e4iv\u00e4ntasaajan Guinean peseta guineana
-currenciesDisplayName.MDR=Moldovan kuponkirupla
-currenciesDisplayName.HKD=Hong Kongin dollari
-currenciesDisplayName.DKK=Tanskan kruunu
-currenciesDisplayName.MDL=Moldovan leu
-currenciesDisplayName.GQF=P\u00e4iv\u00e4ntasaajan Guinean frangi
-currenciesDisplayName.GQE=P\u00e4iv\u00e4ntasaajan Guinean ekwele guineana
-currenciesDisplayName.IDR=Indonesian rupia
-currenciesDisplayName.AED=Arabiemiirikuntien dirhami
-currenciesDisplayName.KPW=Pohjois-Korean won
-currenciesDisplayName.IDN=Indonesian uusi rupia
-currenciesDisplayName.BWP=Botswanan pula
-currenciesDisplayName.MDC=Moldovan kuponkileu
-currenciesDisplayName.IDJ=Indonesian java rupia
-currenciesDisplayName.KPP=Pohjois-Korean kansan won
-currenciesDisplayName.IDG=Indonesian nica guldeni
-currenciesDisplayName.VUV=Vanuatun vatu
-currenciesDisplayName.XID=Islamin dinaari
-currenciesDisplayName.SOS=Somalin shillinki
-currenciesDisplayName.ADP=Andorran peseta
-currenciesDisplayName.RUR=Ven\u00e4j\u00e4n rupla (1991-1998)
-currenciesDisplayName.GPF=Guadeloupen frangi
-currenciesDisplayName.DJF=Djiboutin frangi
-currenciesDisplayName.ADD=Andorran dinaari
-currenciesDisplayName.MCG=Monacon franc germinal
-currenciesDisplayName.MCF=Monacon uusi frangi
-currenciesDisplayName.ECV=Ecuadorin UVC
-currenciesDisplayName.ECS=Ecuadorin sucre
-currenciesDisplayName.LIF=Liechtensteinin frangi
-currenciesDisplayName.RUB=Ven\u00e4j\u00e4n rupla
-currenciesDisplayName.PHP=Filippiinien peso
-currenciesDisplayName.UZS=Uzbekistanin som
-currenciesDisplayName.COP=Kolumbian peso
-currenciesDisplayName.THB=Thaimaan baht
-currenciesDisplayName.IBP=Pohjois-Irlannin punta
-currenciesDisplayName.BUR=Burman rupia
-currenciesDisplayName.COF=Kongon CFA-frangi
-currenciesDisplayName.BUK=Burman kyat
-currenciesDisplayName.COB=Kolumbian paperipeso
-currenciesDisplayName.UZC=Uzbekistanin kuponkisom
-currenciesDisplayName.UAK=Ukrainan karbovanetz
-currenciesDisplayName.QAR=Qatarin rial
-currenciesDisplayName.UAH=Ukrainan hryvnia
-currenciesDisplayName.GNS=Guinean syli
-currenciesDisplayName.CNY=Kiinan yuan renminbi
-currenciesDisplayName.MZM=Mosambikin metical
-currenciesDisplayName.CNX=Kiinan US-dollarin FEC
-currenciesDisplayName.UYU=Uruguayn peso uruguayo
-currenciesDisplayName.GNI=Guinean frangi (1960-1972)
-currenciesDisplayName.SML=San Marinon liira
-currenciesDisplayName.CNP=Kiinan jen min piao yuan
-currenciesDisplayName.MZE=Mosambikin escudo
-currenciesDisplayName.GNF=Guinean frangi
-currenciesDisplayName.OMS=Omanin rial saidi
-currenciesDisplayName.PGK=Papua-Uuden-Guinean kina
-currenciesDisplayName.OMR=Omanin rial
-currenciesDisplayName.UYP=Uruguayn peso (1975-1993)
-currenciesDisplayName.XFU=Ranskan UIC-frangi
-currenciesDisplayName.BTR=Bhutanin rupia
-currenciesDisplayName.ZRZ=Zairen zaire
-currenciesDisplayName.MAF=Marokon frangi
-currenciesDisplayName.MAD=Marokon dirhami
-currenciesDisplayName.BTN=Bhutanin ngultrum
-currenciesDisplayName.XFO=Ranskan kulta frangi
-currenciesDisplayName.UYF=Uruguayn peso fuerte
-currenciesDisplayName.MYR=Malesian ringgit
-currenciesDisplayName.ZRN=Zairen uusi zaire
-currenciesDisplayName.AZM=Azerbaid\u017eanin manat
-currenciesDisplayName.GMP=Gambian punta
-currenciesDisplayName.KMF=Komorien frangi
-currenciesDisplayName.SLL=Sierra Leonen leone
-currenciesDisplayName.GMD=Gambian dalasi
-currenciesDisplayName.XEU=Euroopan valuuttayksikk\u00f6
-currenciesDisplayName.BSP=Bahaman punta
-currenciesDisplayName.CMF=Kamerunin CFA-frangi
-currenciesDisplayName.MXV=Meksikon UDI
-currenciesDisplayName.XEF=CFA-frangi BCEAEC
-currenciesDisplayName.BSD=Bahaman dollari
-currenciesDisplayName.MXP=Meksikon hopeapeso (1861-1992)
-currenciesDisplayName.MXN=Meksikon peso
-currenciesDisplayName.PES=Perun sol
-currenciesDisplayName.GLK=Gr\u00f6nlannin kruunu
-currenciesDisplayName.BRZ=Brazilian cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Perun uusi sol
-currenciesDisplayName.CLP=Chilen peso
-currenciesDisplayName.SKK=Slovakin koruna
-currenciesDisplayName.PEI=Perun inti
-currenciesDisplayName.BRR=Brasilian cruzeiro
-currenciesDisplayName.XDR=Erityiset nosto-oikeudet
-currenciesDisplayName.FRG=Ranskan franc germinal/franc poincare
-currenciesDisplayName.FRF=Ranskan frangi
-currenciesDisplayName.BRN=Brasilian uusi cruzado
-currenciesDisplayName.CLF=Chilen unidades de fomento
-currenciesDisplayName.CLE=Chilen escudo
-currenciesDisplayName.BRL=Brasilian real
-currenciesDisplayName.CLC=Chilen condor
-currenciesDisplayName.BRE=Brasilian cruzeiro (1990-1993)
-currenciesDisplayName.DES=Saksan sperrmark
-currenciesDisplayName.MWP=Malawin punta
-currenciesDisplayName.BRC=Brasilian cruzado
-currenciesDisplayName.BRB=Brasilian uusi cruzeiro (1967-1986)
-currenciesDisplayName.MWK=Malawin kwacha
-currenciesDisplayName.PDR=Transdniestrian rupla
-currenciesDisplayName.DEM=Saksan markka
-currenciesDisplayName.TDF=T\u0161adin CFA-frangi
-currenciesDisplayName.PDN=Transdniestrian uusi rupla
-currenciesDisplayName.PDK=Transdniestrian kuponkirupla
-currenciesDisplayName.NPR=Nepalin rupia
-currenciesDisplayName.CKD=Cookinsaarten dollari
-currenciesDisplayName.JPY=Japanin jeni
-currenciesDisplayName.MVR=Malediivien rufiyaa
-currenciesDisplayName.XCF=CFA uusi frangi
-currenciesDisplayName.MVP=Malediivien rupia
-currenciesDisplayName.XCD=It\u00e4-Karibian dollari
-currenciesDisplayName.SIT=Slovenian tolar
-currenciesDisplayName.YUR=Jugoslavian uudistettu dinaari
-currenciesDisplayName.AWG=Aruban guldeni
-currenciesDisplayName.YUO=Jugoslavian lokakuun dinaari
-currenciesDisplayName.DDM=It\u00e4-Saksan ostmark
-currenciesDisplayName.YUN=Jugoslavian vaihdettava dinaari
-currenciesDisplayName.YUM=Jugoslavian uusi dinaari
-currenciesDisplayName.TCC=Turks- ja Caicossaarten crown
-currenciesDisplayName.YUG=Jugoslavian 1994 dinaari
-currenciesDisplayName.YUF=Jugoslavian liittovaltion dinaari
-currenciesDisplayName.RON=Romanian uusi lei
-currenciesDisplayName.YUD=Jugoslavian kova dinaari
-currenciesDisplayName.ROL=Romanian lei
-currenciesDisplayName.SIB=Slovenian tolar bons
-currenciesDisplayName.NOK=Norjan kruunu
-currenciesDisplayName.MUR=Mauritiuksen rupia
-currenciesDisplayName.XBD=EUA (XBD)
-currenciesDisplayName.GIP=Gibraltarin punta
-currenciesDisplayName.VNS=Vietnamin kansallinen dong
-currenciesDisplayName.XBC=EUA (XBC)
-currenciesDisplayName.VNR=Vietnamin tasavallan dong
-currenciesDisplayName.XBB=Euroopan rahayksikk\u00f6 (EMU)
-currenciesDisplayName.XBA=EURCO
-currenciesDisplayName.KID=Kiribatin dollari
-currenciesDisplayName.SHP=Saint Helenan punta
-currenciesDisplayName.VNN=Vietnamin uusi dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudan dollari
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=mk
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.FIM=mk
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=tammi®helmi®maalis®huhti®touko®kes\u00e4®hein\u00e4®elo®syys®loka®marras®joulu®®
months=tammikuu®helmikuu®maaliskuu®huhtikuu®toukokuu®kes\u00e4kuu®hein\u00e4kuu®elokuu®syyskuu®lokakuu®marraskuu®joulukuu®®
shortWeekdays=®su®ma®ti®ke®to®pe®la®
weekdays=®sunnuntai®maanantai®tiistai®keskiviikko®torstai®perjantai®lauantai®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
-eras=eaa.®jaa.®
-ampms=ap.®ip.®
+eras=eKr.®jKr.®
+ampms=epp.®jpp.®
shortDateFormat=d.M.yyyy
mediumDateFormat=d.M.yyyy
longDateFormat=d. MMMM'ta 'yyyy
-fullDateFormat=d. MMMM'ta 'yyyy
+fullDateFormat=EEEE'na 'd. MMMM'ta 'yyyy
shortTimeFormat=H.mm
mediumTimeFormat=H.mm.ss
-longTimeFormat=H.mm.ss z
+longTimeFormat='klo 'H.mm.ss
fullTimeFormat=H.mm.ss z
-zoneStrings=America/Indianapolis®EST®It\u00e4inen normaaliaika®EST®It\u00e4inen normaaliaika®©America/Halifax®AST®Atlantin normaaliaika®ADT®Atlantin kes\u00e4aika®©Pacific/Honolulu®HST®Havaijin normaaliaika®HST®Havaijin normaaliaika®©America/Denver®MST®Kalliovuorten normaaliaika®MDT®Kalliovuorten kes\u00e4aika®©America/Anchorage®AST®Alaskan normaaliaika®ADT®Alaskan kes\u00e4aika®©America/St_Johns®CNT®Newfoundlandin normaaliaika®CDT®Newfoundlandin kes\u00e4aika®©Africa/Casablanca®GMT®Greenwichin aika®GMT®Greenwichin aika®©America/Chicago®CST®Keskinen normaaliaika®CDT®Keskinen kes\u00e4aika®©Asia/Shanghai®CTT®Kiinan normaaliaika®CDT®Kiinan normaaliaika®©Asia/Tokyo®JST®Japanin normaaliaika®JST®Japanin normaaliaika®©America/New_York®EST®It\u00e4inen normaaliaika®EDT®It\u00e4inen kes\u00e4aika®©Europe/Bucharest®EET®It\u00e4-Euroopan normaaliaika®EEST®It\u00e4-Euroopan kes\u00e4aika®©America/Los_Angeles®PST®Tyynenmeren normaaliaika®PDT®Tyynenmeren kes\u00e4aika®©America/Phoenix®MST®Kalliovuorten normaaliaika®MST®Kalliovuorten normaaliaika®©Etc/GMT®GMT®Greenwichin aika®GMT®Greenwichin aika®©Asia/Jerusalem®IST®Israelin normaaliaika®IDT®Israelin kes\u00e4aika®©Europe/Paris®CET®Keski-Euroopan normaaliaika®CEST®Keski-Euroopan kes\u00e4aika®©
-territories.TL=Timor-Leste
+zoneStrings=Pacific/Honolulu®HST®Havaijin normaaliaika®HST®Havaijin normaaliaika®©Europe/Bucharest®EET®It\u00e4-Euroopan normaaliaika®EEST®It\u00e4-Euroopan kes\u00e4aika®©America/Los_Angeles®PST®Yhdysvaltain Tyynenmeren normaaliaika®PDT®Yhdysvaltain Tyynenmeren kes\u00e4aika®©America/Denver®MST®Kalliovuorten normaaliaika®MDT®Kalliovuorten kes\u00e4aika®©Asia/Jerusalem®IST®Israelin normaaliaika®IDT®Israelin kes\u00e4aika®©America/Phoenix®MST®Kalliovuorten normaaliaika®MST®Kalliovuorten normaaliaika®©America/Chicago®CST®Yhdysvaltain keskinen normaaliaika>®CDT®Yhdysvaltain keskinen kes\u00e4aika®©America/Indianapolis®EST®Yhdysvaltain it\u00e4inen normaaliaika®EST®Yhdysvaltain it\u00e4inen normaaliaika®©America/St_Johns®CNT®Newfoundlandin normaaliaika®CDT®Newfoundlandin kes\u00e4aika®©America/Anchorage®AST®Alaskan normaaliaika®ADT®Alaskan kes\u00e4aika®©Asia/Shanghai®CTT®Kiinan normaaliaika®CTT®Kiinan normaaliaika®©Asia/Tokyo®JST®Japanin normaaliaika®JST®Japanin normaaliaika®©Europe/Paris®CET®Keski-Euroopan normaaliaika®CEST®Keski-Euroopan kes\u00e4aika®©America/New_York®EST®Yhdysvaltain it\u00e4inen normaaliaika®EDT®Yhdysvaltain it\u00e4inen kes\u00e4aika®©America/Halifax®AST®Kanadan Atlantin normaaliaika®ADT®Kanadan Atlantin kes\u00e4aika®©Africa/Casablanca®GMT®Greenwichin aika®GMT®Greenwichin aika®©
+territories.TL=It\u00e4-Timor
territories.TK=Tokelau
territories.TJ=Tad\u017eikistan
territories.TH=Thaimaa
territories.TG=Togo
-territories.TF=Ranskan etel\u00e4iset alueet
+territories.TF=Ranskan ulkopuoliset etel\u00e4iset alueet
territories.GY=Guyana
territories.TD=T\u0161ad
territories.TC=Turks- ja Caicossaaret
@@ -802,10 +392,12 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Gr\u00f6nlanti
territories.SV=El Salvador
+territories.062=etel\u00e4inen Keski-Aasia
territories.ST=S\u00e3o Tom\u00e9 ja Pr\u00edncipe
+territories.061=Polynesia
territories.GI=Gibraltar
territories.GH=Ghana
-territories.SR=Suriname
+territories.SR=Surinam
territories.GF=Ranskan Guayana
territories.GE=Georgia
territories.SO=Somalia
@@ -826,9 +418,12 @@ territories.SC=Seychellit
territories.SB=Salomonsaaret
territories.SA=Saudi-Arabia
territories.FR=Ranska
+territories.057=Mikronesia
territories.FO=F\u00e4rsaaret
territories.FM=Mikronesia
territories.RW=Ruanda
+territories.054=Melanesia
+territories.053=Australia ja Uusi-Seelanti
territories.FK=Falklandinsaaret
territories.RU=Ven\u00e4j\u00e4
territories.FJ=Fid\u017ei
@@ -838,20 +433,26 @@ territories.RE=R\u00e9union
territories.ET=Etiopia
territories.ES=Espanja
territories.ER=Eritrea
+territories.833=Mansaari
territories.EH=L\u00e4nsi-Sahara
territories.EG=Egypti
+territories.830=Kanaalisaaret
territories.EE=Viro
+territories.QO=tuntematon
territories.EC=Ecuador
territories.DZ=Algeria
territories.QA=Qatar
+territories.039=Etel\u00e4-Eurooppa
territories.DO=Dominikaaninen tasavalta
territories.PY=Paraguay
+territories.035=Kaakkois-Aasia
territories.DM=Dominica
territories.PW=Palau
territories.DK=Tanska
territories.DJ=Djibouti
territories.PT=Portugali
territories.PS=Palestiina
+territories.030=It\u00e4-Aasia
territories.PR=Puerto Rico
territories.DE=Saksa
territories.PN=Pitcairn
@@ -868,17 +469,20 @@ territories.CX=Joulusaari
territories.CV=Kap Verde
territories.PA=Panama
territories.CU=Kuuba
+territories.CS=Serbia ja Montenegro
territories.CR=Costa Rica
+territories.029=Karibia
territories.CO=Kolumbia
territories.CN=Kiina
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cookinsaaret
territories.CI=Norsunluurannikko
+territories.021=Pohjois-Amerikka
territories.CH=Sveitsi
-territories.CG=Kongo
+territories.CG=Kongo (Brazzaville)
territories.CF=Keski-Afrikan tasavalta
-territories.CD=Kongon demokraattinen tasavalta
+territories.CD=Kongo (Kinshasa)
territories.CC=Kookossaaret
territories.OM=Oman
territories.CA=Kanada
@@ -889,13 +493,20 @@ territories.BV=Bouvet\u2019nsaari
territories.BT=Bhutan
territories.BS=Bahama
territories.BR=Brasilia
+territories.019=Amerikka
+territories.018=etel\u00e4inen Afrikka
territories.NZ=Uusi-Seelanti
territories.BO=Bolivia
+territories.017=Keski-Afrikka
territories.BN=Brunei
territories.BM=Bermuda
+territories.015=Pohjois-Afrikka
+territories.014=It\u00e4-Afrikka
+territories.013=V\u00e4li-Amerikka
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=L\u00e4nsi-Afrikka
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulgaria
@@ -913,6 +524,7 @@ territories.NG=Nigeria
territories.NF=Norfolkinsaari
territories.AZ=Azerbaid\u017ean
territories.NE=Niger
+territories.AX=Ahvenanmaa
territories.NC=Uusi-Kaledonia
territories.AW=Aruba
territories.ZM=Sambia
@@ -921,19 +533,23 @@ territories.AU=Australia
territories.AT=It\u00e4valta
territories.AS=Amerikan Samoa
territories.AR=Argentiina
+territories.009=Oseania
territories.AQ=Antarktis
territories.MZ=Mosambik
territories.AO=Angola
territories.MY=Malesia
territories.AN=Alankomaiden Antillit
territories.MX=Meksiko
+territories.005=Etel\u00e4-Amerikka
territories.AM=Armenia
territories.MW=Malawi
territories.AL=Albania
territories.MV=Malediivit
territories.ZA=Etel\u00e4-Afrikka
territories.MU=Mauritius
+territories.002=Afrikka
territories.MT=Malta
+territories.001=maailma
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
@@ -942,13 +558,12 @@ territories.MQ=Martinique
territories.AF=Afganistan
territories.MP=Pohjois-Mariaanit
territories.AE=Arabiemiirikunnat
-territories.MO=Macaon erityishallintoalue
+territories.MO=Macao, Kiinan erityishallintoalue
territories.AD=Andorra
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedonia
-territories.YU=Jugoslavia
territories.YT=Mayotte
territories.MH=Marshallinsaaret
territories.MG=Madagaskar
@@ -958,10 +573,14 @@ territories.MA=Marokko
territories.YE=Jemen
territories.LY=Libya
territories.LV=Latvia
+territories.155=L\u00e4nsi-Eurooppa
territories.LU=Luxemburg
+territories.154=Pohjois-Eurooppa
territories.LT=Liettua
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=It\u00e4-Eurooppa
+territories.150=Eurooppa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -970,6 +589,8 @@ territories.LA=Laos
territories.KZ=Kazakstan
territories.KY=Caymansaaret
territories.KW=Kuwait
+territories.145=L\u00e4nsi-Aasia
+territories.142=Aasia
territories.KR=Korean tasavalta
territories.KP=Pohjois-Korea
territories.KN=Saint Kitts ja Nevis
@@ -989,7 +610,7 @@ territories.VI=Yhdysvaltain Neitsytsaaret
territories.VG=Brittil\u00e4iset Neitsytsaaret
territories.VE=Venezuela
territories.VC=Saint Vincent ja Grenadiinit
-territories.VA=Vatikaani
+territories.VA=Vatikaanivaltio
territories.IT=Italia
territories.IS=Islanti
territories.IR=Iran
@@ -1010,39 +631,39 @@ territories.HT=Haiti
territories.HR=Kroatia
territories.TZ=Tansania
territories.HN=Honduras
-territories.HM=Heard ja McDonaldinsaaret
+territories.HM=Heard- ja McDonaldinsaaret
territories.TW=Taiwan
territories.TV=Tuvalu
-territories.HK=Hongkongin erityishallintoalue
+territories.HK=Hongkong, Kiinan erityishallintoalue
territories.TT=Trinidad ja Tobago
territories.TR=Turkki
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
-languages.gwi=gwit\u015fin
languages.akk=akkadi
+languages.gwi=gwich\u2019in
languages.eka=ekajuk
-languages.xh=kafferi
+languages.xh=xhosa
languages.sux=sumeri
languages.sus=susu
-languages.mis=sekalaiset kielet
+languages.mis=luokittelemattomat kielet
languages.loz=lozi
-languages.tog=tonga
+languages.tog=tonga (Malawi)
languages.pon=pohnpei
languages.min=minangkabau
languages.suk=sukuma
languages.wo=wolof
-languages.lol=mongo
languages.kut=kutenai
+languages.lol=mongo
languages.mic=micmac
languages.wa=valloni
-languages.kum=kumukki
-languages.zap=zapoteekki
-languages.cus=muut kuusilaiset kielet
-languages.jbo=lojba
+languages.kum=kumykki
+languages.zap=sapoteekki
+languages.cus=muut kuu\u0161ilaiset kielet
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volap\u00fck
-languages.oto=otomangelaiset kielet
+languages.oto=otomi-kielet
languages.vi=vietnam
languages.rar=rarotonga
languages.ve=venda
@@ -1050,11 +671,11 @@ languages.rap=rapanui
languages.raj=rajasthani
languages.ota=osmani
languages.nzi=nzima
-languages.nap=napolin italia
+languages.nap=napoli
languages.uz=uzbekki
languages.uga=ugarit
-languages.tmh=tama\u0161ek
-languages.nai=muut Pohjois-Amerikan intiaanikielet
+languages.tmh=tamashek
+languages.nai=Pohjois-Amerikan intiaanikielet
languages.nah=nahuatl
languages.ur=urdu
languages.fat=fanti
@@ -1062,9 +683,9 @@ languages.uk=ukraina
languages.egy=muinaisegypti
languages.ug=uiguuri
languages.fan=fang
-languages.ssa=muut nilosaharalaiset kielet
-languages.mga=keski-iiri
+languages.ssa=muut niilil\u00e4is-saharalaiset kielet
languages.bat=muut balttilaiset kielet
+languages.mga=keski-iiri
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1072,36 +693,37 @@ languages.nym=nyamwezi
languages.hmn=hmong
languages.ban=bali
languages.osa=osage
-languages.bal=balut\u0161i
+languages.bal=belut\u0161i
languages.ty=tahiti
-languages.bai=bamileke
+languages.bai=bamileke-kielet
languages.tw=twi
languages.srr=serer
languages.tli=tlingit
+languages.tlh=klingon
languages.tt=tataari
languages.ts=tsonga
languages.bad=banda
languages.tr=turkki
-languages.to=Tonga-saarten tonga
+languages.to=tonga (Tonga)
languages.tn=tswana
languages.tl=tagalog
languages.tk=turkmeeni
-languages.ti=tigrinja
+languages.ti=tigrinya
languages.th=thai
languages.kru=kurukh
languages.tg=tad\u017eikki
languages.byn=blin
languages.te=telugu
+languages.csb=ka\u0161ubi
languages.kro=kru-kielet
-languages.csb=kashubi
-languages.ta=tamili
+languages.ta=tamil
languages.tkl=tokelau
languages.efi=efik
-languages.sw=suahili
+languages.sw=swahili
languages.sv=ruotsi
languages.su=sunda
-languages.krc=karachay-balkar
-languages.st=etel\u00e4sotho
+languages.krc=karat\u0161ai-balkaari
+languages.st=sotho, etel\u00e4-
languages.ss=swazi
languages.sr=serbia
languages.sq=albania
@@ -1115,44 +737,45 @@ languages.sl=sloveeni
languages.grc=muinaiskreikka
languages.sk=slovakki
languages.grb=grebo
-languages.si=singaleesi
+languages.si=sinhali
languages.sh=serbokroatia
-languages.crh=krimin turkki; krimin tataari
languages.afa=muut afroaasialaiset kielet
+languages.crh=krimintataari; kriminturkki
languages.sg=sango
-languages.se=pohjoissaame
+languages.se=saame, pohjois-
languages.sd=sindhi
languages.udm=udmurtti
languages.sc=sardi
-languages.sa=sanskriitti
+languages.sa=sanskrit
languages.rw=ruanda
+languages.nwc=klassinen newari
languages.ru=ven\u00e4j\u00e4
languages.mdr=mandar
languages.ro=romania
languages.rn=rundi
languages.rm=retoromaani
languages.mdf=mok\u0161a
-languages.ady=adyghe
+languages.ady=adyge
languages.zun=zuni
languages.kpe=kpelle
-languages.qu=ket\u0161ua
+languages.qu=quechua
languages.tig=tigre
languages.son=songhai
languages.cpp=muut portugaliin perustuvat kreolit ja pidginit
languages.sog=sogdi
languages.ada=adangme
-languages.kos=kosrae
-languages.hit=heetti
languages.cpf=muut ranskaan perustuvat kreolit ja pidginit
-languages.cpe=pidginenglanti
+languages.hit=heetti
+languages.kos=kosrae
+languages.cpe=muut englantiin perustuvat kreolit ja pidginit
languages.him=himachali
-languages.kok=konkani
-languages.hil=ilongo
languages.got=gootti
+languages.hil=hiligaynon
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
-languages.nub=nuubialaiset kielet
+languages.nub=nubialaiset kielet
languages.pt=portugali
languages.ps=pa\u0161to
languages.fur=friuli
@@ -1160,24 +783,23 @@ languages.phn=foinikia
languages.goh=muinaisyl\u00e4saksa
languages.snk=soninke
languages.cop=kopti
-languages.yap=jap
-languages.yao=jao
-languages.phi=muut filippiinil\u00e4iskielet
+languages.ach=acholi
+languages.phi=muut filippiinil\u00e4iset kielet
languages.pl=puola
languages.ace=aceh
-languages.pi=pali
-languages.pa=punjabi
+languages.pi=paali
+languages.pa=panjabi
languages.bug=bugi
languages.iba=iban
-languages.sms=koltansaame
+languages.sms=saame, koltan-
languages.bua=burjaatti
languages.mas=maasai
-languages.smn=inarinsaame
+languages.smn=saame, inarin-
languages.os=osseetti
-languages.map=austronesia
-languages.or=orija
+languages.map=muut austronesialaiset kielet
+languages.or=oriya
languages.man=mandingo
-languages.smj=luulajan saame
+languages.smj=saame, luulajan-
languages.smi=muut saamen kielet
languages.mak=makassar
languages.om=oromo
@@ -1185,28 +807,28 @@ languages.mai=maithili
languages.oj=ojibwa
languages.mag=magahi
languages.mad=madura
-languages.sma=etel\u00e4saame
-languages.oc=oksitaani, provensaali
-languages.nso=pedi
-languages.btk=batakki
+languages.sma=saame, etel\u00e4-
+languages.oc=oksitaani
+languages.nso=sotho, pohjois-
+languages.btk=batak
languages.myv=ers\u00e4
languages.dgr=dogrib
-languages.ny=njand\u017ea, t\u0161ewa
-languages.myn=maya
-languages.nv=navaho
+languages.ny=nyanja
+languages.myn=maya-kielet
+languages.nv=navajo
languages.kmb=kimbundu
-languages.nr=etel\u00e4ndebele
+languages.nr=ndebele, etel\u00e4-
languages.gmh=keskiyl\u00e4saksa
languages.no=norja
-languages.nn=uusnorja
+languages.nn=norja (nynorsk)
languages.nl=hollanti
languages.ng=ndonga
languages.sla=muut slaavilaiset kielet
languages.ne=nepali
-languages.nd=pohjoisndebele
-languages.cmc=t\u0161am
+languages.nd=ndebele, pohjois-
+languages.cmc=cham-kielet
languages.tet=tetum
-languages.nb=kirjanorja
+languages.nb=norja (bokm\u00e5l)
languages.na=nauru
languages.ter=tereno
languages.tem=temne
@@ -1217,25 +839,25 @@ languages.peo=muinaispersia
languages.ms=malaiji
languages.mr=marathi
languages.fro=muinaisranska
-languages.mo=moldova
-languages.frm=keskiranska
+languages.mo=moldavia
languages.mn=mongoli
+languages.frm=keskiranska
+languages.ml=malayalam
languages.jrb=juutalaisarabia
-languages.ml=malajalam
languages.mk=makedonia
languages.mi=maori
-languages.mh=marshalli
-languages.mg=malagasi
+languages.mh=marshall
+languages.mg=malagassi
languages.mwr=marwari
-languages.bra=brad\u017e
-languages.den=slaavi
+languages.bra=braj
languages.lv=latvia
-languages.lu=katangan luba
-languages.del=delaware
+languages.den=slave
+languages.lu=luba (Katanga)
languages.lt=liettua
+languages.del=delaware
languages.lo=lao
languages.ln=lingala
-languages.li=limburgi
+languages.li=limburg
languages.ewo=ewondo
languages.lg=ganda
languages.lb=luxemburg
@@ -1247,181 +869,180 @@ languages.ky=kirgiisi
languages.kw=korni
languages.kv=komi
languages.ku=kurdi
-languages.sio=siouxilaiset kielet
-languages.ks=ka\u0161miri
+languages.sio=sioux-kielet
+languages.ks=kashmiri
languages.kr=kanuri
languages.awa=awadhi
languages.ko=korea
languages.kn=kannada
languages.km=khmer
-languages.kl=gr\u00f6nlanti
+languages.kl=kalaallisut; gr\u00f6nlanti
languages.kk=kazakki
languages.rom=romani
-languages.kj=kuanjama
+languages.kj=kwanyama
languages.sid=sidamo
languages.ki=kikuju
languages.kg=kongo
-languages.non=muinaisskandinaavi
+languages.non=muinaisnorja
languages.ka=georgia
-languages.mus=muskogi
+languages.mus=creek
languages.roa=muut romaaniset kielet
languages.nog=nogai
languages.mun=mundakielet
-languages.mul=monikielinen
+languages.mul=monia kieli\u00e4
languages.jv=jaava
languages.gil=kiribati
languages.znd=zande
-languages.shn=\u0161an
-languages.fon=fong
+languages.shn=shan
languages.xal=kalmukki
languages.aus=australialaiset kielet
languages.kho=khotani
languages.ja=japani
-languages.khi=muut khoisankielet
+languages.khi=muut khoisan-kielet
languages.pau=palau
languages.chy=cheyenne
languages.tai=muut thaikielet
-languages.iu=eskimo
+languages.iu=inuktitut
languages.pap=papiamentu
languages.it=italia
languages.sgn=viittomakielet
-languages.is=islanti
languages.kha=khasi
+languages.is=islanti
languages.chr=cherokee
languages.pam=pampanga
languages.pal=pahlavi
-languages.chp=chipewya
-languages.io=ido
+languages.chp=chipewyan
languages.cho=choctaw
-languages.chn=chinook
+languages.io=ido
+languages.chn=chinook-jargon
languages.chm=mari
-languages.tyv=tuviini
-languages.bnt=bantu
+languages.tyv=tuva
+languages.bnt=muut bantukielet
languages.pag=pangasinan
-languages.ik=inupiak
-languages.chk=truk
-languages.ii=pohjois-ji
+languages.chk=chuuk
+languages.ik=i\u00f1upiak
languages.haw=havaiji
+languages.ii=sichuanin-yi
languages.lam=lamba
-languages.ig=igbo
languages.chg=t\u0161agatai
+languages.ig=igbo
languages.sga=muinaisiiri
languages.paa=muut papualaiskielet
languages.ie=interlingue
languages.id=indonesia
languages.lah=lahnda
-languages.day=dajakki
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
-languages.lad=juutalaisespanja
-languages.hz=herero
-languages.hai=haida
+languages.lad=ladino; juutalaisespanja
languages.dar=dargva
+languages.hai=haida
+languages.hz=herero
languages.hy=armenia
languages.ath=athabasca-kielet
languages.hu=unkari
languages.ht=haiti
-languages.dak=sioux
+languages.dak=dakota
languages.hr=kroatia
languages.ho=hiri-motu
languages.hi=hindi
-languages.dyu=djula
+languages.dyu=dyula
languages.he=heprea
-languages.ast=astuuri
+languages.ast=asturia
languages.ha=hausa
-languages.wen=sorbi
+languages.wen=sorbin kielet
languages.gv=manx
languages.gu=gud\u017earati
languages.sem=muut seemil\u00e4iset kielet
languages.sel=selkuppi
-languages.iro=irokeesi
+languages.iro=irokeesikielet
languages.gn=guarani
languages.gl=galicia
languages.arw=arawak
-languages.gez=etiopia
-languages.art=muut tekokielet
languages.gd=gaeli
-languages.ira=iran
+languages.art=muut keinotekoiset kielet
+languages.gez=ge\u2019ez
+languages.ira=muut iranilaiset kielet
languages.ga=iiri
languages.arp=arapaho
languages.arn=araukaani
languages.fy=friisi
languages.bla=mustajalka
languages.gem=muut germaaniset kielet
-languages.ypk=juppik-kielet
-languages.arc=aramea
+languages.ypk=jupikkikielet
languages.fr=ranska
+languages.arc=aramea
languages.fo=f\u00e4\u00e4ri
languages.cel=muut kelttil\u00e4iset kielet
languages.fj=fid\u017ei
languages.fi=suomi
languages.ff=fulani
languages.tvl=tuvalu
-languages.ceb=sebuano
-languages.fa=persia
+languages.ceb=cebuano
+languages.fa=farsi; persia
languages.eu=baski
languages.sco=skotti
-languages.et=eesti
+languages.et=viro
languages.es=espanja
languages.eo=esperanto
languages.en=englanti
languages.el=kreikka
languages.tut=muut altailaiset kielet
languages.niu=niue
-languages.tup=tupilaiset kielet
+languages.tup=tupi-kielet
languages.ee=ewe
languages.tum=tumbuka
-languages.mos=mosi
-languages.dz=bhutani
+languages.mos=mossi
+languages.dz=dzongkha
languages.nic=muut nigeril\u00e4is-kongolaiset kielet
-languages.lus=lushai
+languages.dv=divehi
languages.fiu=muut suomalais-ugrilaiset kielet
-languages.dv=malediivi
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
languages.lun=lunda
-languages.apa=apassi
-languages.lui=luiseno
+languages.apa=apa\u0161\u0161ikielet
+languages.lui=luise\u00f1o
languages.hup=hupa
languages.bin=bini
languages.de=saksa
-languages.lua=luba
-languages.bik=bicol
+languages.lua=luba (Lulua)
+languages.bik=bikol
languages.was=washo
-languages.und=m\u00e4\u00e4rittelem\u00e4t\u00f6n
+languages.und=m\u00e4\u00e4ritt\u00e4m\u00e4t\u00f6n
languages.war=waray
languages.da=tanska
languages.dum=keskihollanti
languages.wal=walamo
languages.mno=manobo-kielet
-languages.wak=wakasilaiset kielet
+languages.wak=wakash-kielet
languages.sat=santali
languages.cy=kymri
languages.sas=sasak
-languages.kbd=kabardi
languages.cv=t\u0161uvassi
+languages.kbd=kabardi
languages.cu=kirkkoslaavi
languages.mni=manipuri
-languages.cs=tsekki
-languages.sam=l\u00e4nsiaramea
+languages.cs=t\u0161ekki
+languages.sam=samarianaramea
languages.cr=cree
-languages.sal=sali\u0161
+languages.sal=sali\u0161ilaiset kielet
languages.dua=duala
languages.co=korsika
languages.sai=muut Etel\u00e4-Amerikan intiaanikielet
languages.mnc=mant\u0161u
languages.sah=jakuutti
-languages.kaw=kavi
+languages.gba=gbaya
languages.inh=inguu\u0161i
-languages.gba=gbaja
+languages.kaw=kavi
languages.sad=sandawe
languages.ch=chamorro
+languages.bho=bhojpuri
languages.ine=muut indoeurooppalaiset kielet
-languages.bho=bhod\u017epuri
languages.enm=keskienglanti
-languages.kar=karen
-languages.inc=muut intialaiset kielet
languages.ce=t\u0161et\u0161eeni
+languages.inc=muut indoarjalaiset kielet
+languages.kar=karen
languages.gay=gayo
languages.ca=katalaani
languages.umb=umbundu
@@ -1429,19 +1050,19 @@ languages.syr=syyria
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=muinaisenglanti
-languages.kac=d\u017eingpho
languages.cau=muut kaukasialaiset kielet
+languages.kac=kachin
languages.kab=kabyyli
-languages.kaa=karakalpakki
languages.bs=bosnia
-languages.car=karib
+languages.kaa=karakalpakki
languages.br=bretoni
+languages.car=karibi
languages.bo=tiibet
languages.bn=bengali
languages.bm=bambara
-languages.gaa=ga
-languages.cai=muut Keski-Amerikan intiaanikielet
+languages.gaa=g\u00e3
languages.bi=bislama
+languages.cai=muut Keski-Amerikan intiaanikielet
languages.bh=bihari
languages.bg=bulgaria
languages.be=valkoven\u00e4j\u00e4
@@ -1450,18 +1071,18 @@ languages.ba=baski
languages.zu=zulu
languages.zen=zenaga
languages.pro=muinaisprovensaali
-languages.hsb=yl\u00e4-sorbi
+languages.hsb=yl\u00e4sorbi
languages.az=azeri
-languages.ay=aimara
+languages.ay=aymara
languages.av=avaari
languages.as=assami
-languages.dsb=ala-sorbi
languages.ar=arabia
-languages.ilo=iloko
+languages.dsb=alasorbi
languages.elx=elami
+languages.ilo=iloko
languages.zh=kiina
languages.an=aragonia
-languages.pra=prakriitit
+languages.pra=prakrit-kielet
languages.am=amhara
languages.new=newari
languages.ak=akan
@@ -1474,10 +1095,10 @@ languages.yo=joruba
languages.alg=algonkin-kielet
languages.ale=aleutti
languages.mkh=muut mon-khmer-kielet
-languages.yi=jiddi
+languages.yi=jiddi\u0161
languages.dra=muut dravidakielet
-languages.ber=berberi
+languages.ber=muut berberikielet
languages.nds=alasaksa
languages.bem=bemba
-languages.bej=bedauje
+languages.bej=beja
languages.tpi=tok-pisin
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fo.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fo.properties
index 7d90113..6818933 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fo.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fo.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.DKK=DKK
currenciesSymbol.DKK=kr
shortMonths=jan®feb®mar®apr®mai®jun®jul®aug®sep®okt®nov®des®®
months=januar®februar®mars®apr\u00edl®mai®juni®juli®august®september®oktober®november®desember®®
@@ -19,8 +18,8 @@ longDateFormat=d. MMM yyyy
fullDateFormat=EEEE dd MMMM yyyy
territories.AU=Avstralia
territories.TD=Kjad
-territories.GY=Gujana
territories.AT=Eysturr\u00edki
+territories.GY=Gujana
territories.GW=Guinea Bissau
territories.AQ=Antarktis
territories.MZ=Mosambik
@@ -53,8 +52,8 @@ territories.YE=Jemen
territories.FR=Frakland
territories.LV=Lettland
territories.LU=Luksemborg
-territories.LT=Litava
territories.FO=F\u00f8royar
+territories.LT=Litava
territories.LS=Lesoto
territories.RW=Ruanda
territories.FM=Mikronesia
@@ -75,8 +74,8 @@ territories.KM=Komorooyggjarnar
territories.EG=Egyptaland
territories.EE=Estland
territories.WS=S\u00e1moa
-territories.KH=Kambodja
territories.EC=Ekvador
+territories.KH=Kambodja
territories.KG=Kirgisia
territories.KE=Kenja
territories.QA=Katar
@@ -98,19 +97,19 @@ territories.CU=Kuba
territories.VC=Saint Vinsent og Grenadinoyggjar
territories.CR=Kosta Rika
territories.VA=Vatikan
-territories.IT=Italia
territories.CO=Kolombia
-territories.IS=\u00cdsland
+territories.IT=Italia
territories.CN=Kina
+territories.IS=\u00cdsland
territories.CM=Kamerun
-territories.IQ=Irak
territories.CL=Kili
+territories.IQ=Irak
territories.UZ=Usbekistan
territories.UY=Uruguei
territories.CI=F\u00edlabeinsstrondin
territories.CH=Sveis
-territories.IL=\u00cdsrael
territories.CG=Kongo
+territories.IL=\u00cdsrael
territories.CF=Mi\u00f0afrikal\u00fd\u00f0veldi\u00f0
territories.US=Sambandsr\u00edki Amerika
territories.CA=Kanada
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr.properties
index 67e8ba9..d89b6fe 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr.properties
@@ -9,765 +9,287 @@ decimalSeparator=,
groupingSeparator=\u00a0
currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
localPatternChars=GaMjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=dinar jordanien
-currenciesDisplayName.BOV=Bolivian Mvdol
-currenciesDisplayName.XAU=Or
-currenciesDisplayName.FOK=Faeroe Islands Kronur
-currenciesDisplayName.LBP=livre libanaise
-currenciesDisplayName.EUR=euro
-currenciesDisplayName.VND=dong
-currenciesDisplayName.TZS=shilling de Tanzanie
-currenciesDisplayName.BOP=peso bolivien
-currenciesDisplayName.KHR=riel
-currenciesDisplayName.XAM=unit\u00e9 mon\u00e9taire asiatique
-currenciesDisplayName.BOL=boliviano (1863-1962)
-currenciesDisplayName.KHO=vieux riel
-currenciesDisplayName.ZMP=livre zambienne
-currenciesDisplayName.AUP=livre australienne
-currenciesDisplayName.XAF=franc CFA (BEAC)
-currenciesDisplayName.MTP=livre maltaise
-currenciesDisplayName.GHR=cedi revaloris\u00e9
-currenciesDisplayName.ZMK=kwacha
-currenciesDisplayName.XAD=dinar asiatique (unit\u00e9 de compte)
-currenciesDisplayName.GHP=livre ghan\u00e9enne
-currenciesDisplayName.BOB=boliviano
-currenciesDisplayName.GHO=ancien cedi
-currenciesDisplayName.MTL=lire maltaise
-currenciesDisplayName.AUD=dollar australien
-currenciesDisplayName.USS=dollar des Etats-Unis (jour m\u00eame)
-currenciesDisplayName.ITL=lire italienne
-currenciesDisplayName.USN=dollar des Etats-Unis (jour suivant)
-currenciesDisplayName.GHC=c\u00e9di
-currenciesDisplayName.SGD=dollar de Singapour
-currenciesDisplayName.PAB=balboa
-currenciesDisplayName.LAK=kip
-currenciesDisplayName.KGS=som du Kyrgystan
-currenciesDisplayName.CHF=franc suisse
-currenciesDisplayName.ATS=schilling autrichien
-currenciesDisplayName.USD=dollar des \u00c9tats-Unis
-currenciesDisplayName.ETD=dollar \u00e9thiopien
-currenciesDisplayName.BND=dollar de Brunei
-currenciesDisplayName.JMP=livre jama\u00efcaine
-currenciesDisplayName.ETB=birr
-currenciesDisplayName.DZG=franc germinal alg\u00e9rien
-currenciesDisplayName.DZF=nouveau franc alg\u00e9rien
-currenciesDisplayName.DZD=dinar alg\u00e9rien
-currenciesDisplayName.PYG=guarani
-currenciesDisplayName.LYP=livre libyenne
-currenciesDisplayName.JMD=dollar jama\u00efcain
-currenciesDisplayName.ISK=couronne islandaise
-currenciesDisplayName.ESP=peseta espagnole
-currenciesDisplayName.BMP=livre des Bermudes
-currenciesDisplayName.LYD=dinar Iibyen
-currenciesDisplayName.LYB=lire de l\u2019autori\u00e9 militaire britannique de Libye
-currenciesDisplayName.BMD=dollar des Bermudes
-currenciesDisplayName.NLG=florin n\u00e9erlandais
-currenciesDisplayName.MRO=ouguija
-currenciesDisplayName.IRR=rial iranien
-currenciesDisplayName.SEK=couronne su\u00e9doise
-currenciesDisplayName.ERN=Eritrean Nakfa
+currenciesDisplayName.YDD=dinar du Y\u00e9men
+currenciesDisplayName.TWD=dollar ta\u00efwanais
currenciesDisplayName.KES=shilling du Kenya
-currenciesDisplayName.CFF=franc CFA de la R\u00e9publique du Centre Afrique
+currenciesDisplayName.BYB=nouveau rouble bi\u00e9lorusse (1994-1999)
+currenciesDisplayName.LKR=roupie de Sri Lanka
+currenciesDisplayName.RWF=franc du Rwanda
+currenciesDisplayName.TJS=somoni du Tadjikistan
+currenciesDisplayName.SDP=livre soudanaise
+currenciesDisplayName.TJR=rouble du Tadjikistan
+currenciesDisplayName.ERN=Eritrean Nakfa
+currenciesDisplayName.AFN=afghani
+currenciesDisplayName.GRD=drachme
+currenciesDisplayName.IEP=livre irlandaise
currenciesDisplayName.ARS=peso argentin
+currenciesDisplayName.SDD=dinar soudanais
currenciesDisplayName.ARP=peso argentin (1983-1985)
-currenciesDisplayName.ARM=Argentine Peso Moneda Nacional
-currenciesDisplayName.TWD=dollar ta\u00efwanais
-currenciesDisplayName.SDP=livre soudanaise
currenciesDisplayName.GEL=lari
+currenciesDisplayName.AFA=afghani
currenciesDisplayName.GEK=Georgian Kupon Larit
-currenciesDisplayName.MQF=franc martiniquais
+currenciesDisplayName.CRC=colon
currenciesDisplayName.FKP=livre des Falkland (Malvinas)
+currenciesDisplayName.EEK=couronne estonienne
+currenciesDisplayName.HKD=dollar de Hong Kong
+currenciesDisplayName.MDL=leu moldave
currenciesDisplayName.ARA=austral
-currenciesDisplayName.SDD=dinar soudanais
currenciesDisplayName.IQD=dinar irakien
-currenciesDisplayName.TVD=dollar du Tuvalu
currenciesDisplayName.SCR=roupie des Seychelles
+currenciesDisplayName.VUV=vatu
+currenciesDisplayName.DKK=couronne danoise
+currenciesDisplayName.KPW=won nord-cor\u00e9en
+currenciesDisplayName.GQE=ekw\u00e9l\u00e9
+currenciesDisplayName.IDR=rupiah
currenciesDisplayName.LVR=rouble letton
-currenciesDisplayName.FJP=livre de Fiji
+currenciesDisplayName.SOS=shilling de Somalie
+currenciesDisplayName.AED=dirham des \u00c9mirats arabes unis
+currenciesDisplayName.BWP=pula
currenciesDisplayName.LVL=lats letton
-currenciesDisplayName.CDL=Congolese Zaire
-currenciesDisplayName.CDG=franc de la R\u00e9publique Congolaise
-currenciesDisplayName.CDF=franc congolais
-currenciesDisplayName.FJD=dollar de Fidji
+currenciesDisplayName.RUR=rouble de Russie (1991-1998)
currenciesDisplayName.NIO=cordoba d\u2019or
+currenciesDisplayName.ADP=peseta andorrane
+currenciesDisplayName.FJD=dollar de Fidji
currenciesDisplayName.MOP=pataca
-currenciesDisplayName.NIG=cordoba d\u2019or
+currenciesDisplayName.RUB=rouble
+currenciesDisplayName.CDF=franc congolais
currenciesDisplayName.NIC=cordoba
-currenciesDisplayName.XTR=rouble transf\u00e9rable du COMECON
-currenciesDisplayName.FIN=mark finlandais (1860-1962)
-currenciesDisplayName.FIM=mark finlandais
+currenciesDisplayName.DJF=franc de Djibouti
+currenciesDisplayName.ECV=unit\u00e9 de valeur constante \u00e9quatoriale (UVC)
currenciesDisplayName.SBD=dollar de Salomon
+currenciesDisplayName.UZS=sum
+currenciesDisplayName.ECS=sucre
+currenciesDisplayName.PHP=peso philippin
+currenciesDisplayName.THB=baht
currenciesDisplayName.LUF=franc luxembourgeois
-currenciesDisplayName.TTO=vieux dollar de la Trinit\u00e9
-currenciesDisplayName.AOS=escudo angolais
-currenciesDisplayName.AOR=kwanza angolais r\u00e9ajust\u00e9 (1995-1999)
-currenciesDisplayName.MNT=tugrik
-currenciesDisplayName.HUF=forint
-currenciesDisplayName.BIF=franc du Burundi
-currenciesDisplayName.AON=nouveau kwanza angolais (1990-2000)
-currenciesDisplayName.AOK=kwanza angolais (1977-1990)
+currenciesDisplayName.FIM=mark finlandais
currenciesDisplayName.TTD=dollar de la Trinit\u00e9
currenciesDisplayName.SZL=lilangeni
-currenciesDisplayName.NHF=franc CFP des Nouvelles H\u00e9brides
-currenciesDisplayName.GBP=livre sterling
-currenciesDisplayName.SAS=riyal saoudien
+currenciesDisplayName.MNT=tugrik
currenciesDisplayName.SAR=riyal s\u00e9oudien
+currenciesDisplayName.UAK=karbovanetz
+currenciesDisplayName.UAH=hryvnia
+currenciesDisplayName.HUF=forint
+currenciesDisplayName.COP=peso colombien
+currenciesDisplayName.QAR=rial du Qatar
currenciesDisplayName.LTT=Talonas de Lithuanie
-currenciesDisplayName.INR=roupie indienne
currenciesDisplayName.PTE=escudo portugais
-currenciesDisplayName.AOA=kwanza angolais
-currenciesDisplayName.PTC=conto portugais
+currenciesDisplayName.AOR=kwanza angolais r\u00e9ajust\u00e9 (1995-1999)
+currenciesDisplayName.UYU=peso uruguayen
+currenciesDisplayName.GBP=livre sterling
+currenciesDisplayName.BIF=franc du Burundi
+currenciesDisplayName.INR=roupie indienne
+currenciesDisplayName.ZRZ=za\u00efre
+currenciesDisplayName.AON=nouveau kwanza angolais (1990-2000)
currenciesDisplayName.LTL=Lita de Lithuanian
+currenciesDisplayName.XFU=franc UIC
currenciesDisplayName.KZT=tenge du Kazakhstan
-currenciesDisplayName.KZR=rouble du Kazakhstan
-currenciesDisplayName.VGD=dollar des \u00eeles Vierges britanniques
-currenciesDisplayName.NGP=livre nig\u00e9riane
-currenciesDisplayName.MMX=dollar de Myanmar (certificat de devises \u00e9trang\u00e8res)
+currenciesDisplayName.MZM=m\u00e9tical
+currenciesDisplayName.UYP=peso uruguayen (1975-1993)
+currenciesDisplayName.AOK=kwanza angolais (1977-1990)
+currenciesDisplayName.BUK=kyat
+currenciesDisplayName.GNS=syli
+currenciesDisplayName.XFO=franc or
+currenciesDisplayName.PGK=kina
+currenciesDisplayName.SYP=livre syrienne
+currenciesDisplayName.MZE=escudo du Mozambique
+currenciesDisplayName.OMR=rial omani
currenciesDisplayName.NGN=naira
+currenciesDisplayName.ZRN=nouveau za\u00efre
+currenciesDisplayName.AOA=kwanza angolais
+currenciesDisplayName.CNY=Yuan Ren-min-bi
+currenciesDisplayName.MAF=franc marocain
+currenciesDisplayName.GNF=franc guin\u00e9en
currenciesDisplayName.HTG=gourde
-currenciesDisplayName.SYP=livre syrienne
-currenciesDisplayName.PSP=livre palestinienne
-currenciesDisplayName.BHD=dinar de Bahrein
+currenciesDisplayName.MAD=dirham marocain
currenciesDisplayName.MMK=Myanmar Kyat
+currenciesDisplayName.MYR=ringgit
+currenciesDisplayName.LSL=Lesotho Loti
+currenciesDisplayName.XEU=unit\u00e9 de compte europ\u00e9enne (ECU)
+currenciesDisplayName.BHD=dinar de Bahrein
+currenciesDisplayName.SLL=l\u00e9one
+currenciesDisplayName.BTN=ngultrum
+currenciesDisplayName.TRL=livre turque
+currenciesDisplayName.KMF=franc des Comores
currenciesDisplayName.ANG=florin des Antilles n\u00e9erl.
currenciesDisplayName.CZK=couronne tch\u00e8que
-currenciesDisplayName.IMP=livre sterling de l\u2019Ile de Man
-currenciesDisplayName.BGX=lev (certificat de devises \u00e9trang\u00e8res)
-currenciesDisplayName.LSL=Lesotho Loti
-currenciesDisplayName.GAF=franc CFA gabonnais
-currenciesDisplayName.BGO=lev (1879-1952)
+currenciesDisplayName.AZM=Azerbaijanian Manat
+currenciesDisplayName.KYD=dollar des \u00eeles Ca\u00efmans
+currenciesDisplayName.GMD=dalasie
currenciesDisplayName.BGN=nouveau lef
-currenciesDisplayName.BGM=lev de Bulgarie socialiste
currenciesDisplayName.CAD=dollar canadien
+currenciesDisplayName.MXV=unit\u00e9 de conversion mexicaine (UDI)
currenciesDisplayName.BGL=lev
-currenciesDisplayName.TRL=livre turque
-currenciesDisplayName.KYD=dollar des \u00eeles Ca\u00efmans
-currenciesDisplayName.CYP=livre cypriote
+currenciesDisplayName.VEB=bolivar
+currenciesDisplayName.MLF=franc malien
currenciesDisplayName.ILS=sh\u00e9kel
+currenciesDisplayName.MXP=peso d\u2019argent mexicain (1861-1992)
+currenciesDisplayName.PES=sol p\u00e9ruvien
currenciesDisplayName.GYD=dollar de Guyane
-currenciesDisplayName.AMD=dram arm\u00e9nien
currenciesDisplayName.ILP=livre isra\u00e9lienne
-currenciesDisplayName.MLF=franc malien
-currenciesDisplayName.ILL=sh\u00e9kel
-currenciesDisplayName.VEB=bolivar
-currenciesDisplayName.ALX=dollar albanais (certificat de devises \u00e9trang\u00e8res)
+currenciesDisplayName.SKK=couronne slovaque
+currenciesDisplayName.CYP=livre cypriote
+currenciesDisplayName.PEN=nouveau sol p\u00e9ruvien
currenciesDisplayName.LRD=dollar lib\u00e9rien
-currenciesDisplayName.ALV=Albanian Lek Valute
+currenciesDisplayName.PEI=Inti p\u00e9ruvien
+currenciesDisplayName.AMD=dram arm\u00e9nien
+currenciesDisplayName.BSD=dollar des Bahamas
currenciesDisplayName.HRK=kuna
-currenciesDisplayName.REF=franc de la R\u00e9union
+currenciesDisplayName.CLP=peso chilien
currenciesDisplayName.HRD=dinar croate
-currenciesDisplayName.ALL=lek albanais
-currenciesDisplayName.JEP=livre sterling de Jersey
-currenciesDisplayName.ALK=lek albanais (1946-1961)
-currenciesDisplayName.MKN=dinar mac\u00e9donien (1992-1993)
-currenciesDisplayName.VDP=North Vietnam Viet Minh Piastre Dong Viet
-currenciesDisplayName.VDN=nouveau dong nord-vietnamien
-currenciesDisplayName.MKD=dinar mac\u00e9donien
-currenciesDisplayName.VDD=North Vietnam Piastre Dong Viet
-currenciesDisplayName.TPP=pataca de Timor
currenciesDisplayName.XPF=franc CFP
-currenciesDisplayName.BEL=franc belge (financier)
-currenciesDisplayName.GWP=peso de Guin\u00e9e-Bissau
-currenciesDisplayName.KWD=dinar koweitien
-currenciesDisplayName.GWM=Portuguese Guinea Mil Reis
-currenciesDisplayName.BEF=franc belge
+currenciesDisplayName.FRF=franc fran\u00e7ais
+currenciesDisplayName.BRR=cruzeiro
+currenciesDisplayName.MKD=dinar mac\u00e9donien
+currenciesDisplayName.CLF=Chilean Unidades de Fomento
+currenciesDisplayName.ALL=lek albanais
+currenciesDisplayName.BRN=nouveau cruzado
+currenciesDisplayName.MWK=kwacha
+currenciesDisplayName.BRL=r\u00e9al
currenciesDisplayName.TPE=escudo de Timor
-currenciesDisplayName.BEC=franc belge (convertible)
-currenciesDisplayName.GWE=Escudo de Guin\u00e9e Portugaise
+currenciesDisplayName.BRE=cruzeiro (1990-1993)
+currenciesDisplayName.BRC=cruzeiro
+currenciesDisplayName.BRB=nouveau cruzeiro (1967-1986)
+currenciesDisplayName.DEM=deutsche mark
+currenciesDisplayName.KWD=dinar koweitien
+currenciesDisplayName.XCD=dollar des Cara\u00efbes
+currenciesDisplayName.NPR=roupie du N\u00e9pal
+currenciesDisplayName.GWP=peso de Guin\u00e9e-Bissau
+currenciesDisplayName.YUN=dinar yougoslave convertible
currenciesDisplayName.SVC=colon
-currenciesDisplayName.CWG=florin de Curacao
-currenciesDisplayName.BDT=taka
-currenciesDisplayName.TOS=livre sterling du Tonga
-currenciesDisplayName.TOP=pa\u02bbanga
+currenciesDisplayName.YUM=dinar yougoslave Noviy
+currenciesDisplayName.BEL=franc belge (financier)
+currenciesDisplayName.SIT=tolar slov\u00e8ne
+currenciesDisplayName.JPY=yen
currenciesDisplayName.XOF=franc CFA (BCEAO)
+currenciesDisplayName.MVR=roupie des Maldives
+currenciesDisplayName.GWE=Escudo de Guin\u00e9e Portugaise
+currenciesDisplayName.BEF=franc belge
+currenciesDisplayName.TOP=pa\u02bbanga
+currenciesDisplayName.YUD=nouveau dinar yougoslave
+currenciesDisplayName.BEC=franc belge (convertible)
currenciesDisplayName.SUR=rouble de C.E.I.
-currenciesDisplayName.SUN=nouveau rouble sovi\u00e9tique
-currenciesDisplayName.NCF=franc Germinal de Nouvelle Cal\u00e9donie
-currenciesDisplayName.CVE=escudo du Cap-Vert
-currenciesDisplayName.XNF=franc CFA antillais
+currenciesDisplayName.ROL=leu
+currenciesDisplayName.DDM=mark est-allemand
+currenciesDisplayName.BDT=taka
+currenciesDisplayName.XBD=unit\u00e9 de compte europ\u00e9enne (XBD)
+currenciesDisplayName.AWG=florin d\u2019Aruba
+currenciesDisplayName.XBC=unit\u00e9 de compte europ\u00e9enne (XBC)
+currenciesDisplayName.XBB=unit\u00e9 mon\u00e9taire europ\u00e9enne
+currenciesDisplayName.XBA=unit\u00e9 composite europ\u00e9enne
+currenciesDisplayName.NOK=couronne norv\u00e9gienne
+currenciesDisplayName.MUR=roupie de l\u2019\u00eele Maurice
currenciesDisplayName.ZAR=rand
-currenciesDisplayName.DOP=peso dominicain
-currenciesDisplayName.CUX=certificat de devises \u00e9trang\u00e8res de Cuba
-currenciesDisplayName.ZAP=livre sud-africaine
+currenciesDisplayName.SHP=livre de Sainte-H\u00e9l\u00e8ne
+currenciesDisplayName.XAU=Or
currenciesDisplayName.ZAL=rand sud-africain (financier)
+currenciesDisplayName.VND=dong
+currenciesDisplayName.TZS=shilling de Tanzanie
+currenciesDisplayName.GIP=livre de Gibraltar
currenciesDisplayName.TND=dinar tunisien
-currenciesDisplayName.CUP=peso cubain
-currenciesDisplayName.GUF=franc guyanais
+currenciesDisplayName.CVE=escudo du Cap-Vert
currenciesDisplayName.UGX=shilling ougandais
-currenciesDisplayName.LNR=roupie de Ceylan
-currenciesDisplayName.AIF=franc Affars et Issas
-currenciesDisplayName.VAL=lire du Vatican
-currenciesDisplayName.STE=escudo de Sao Tom\u00e9 et Principe
+currenciesDisplayName.ZMK=kwacha
+currenciesDisplayName.JOD=dinar jordanien
+currenciesDisplayName.XAF=franc CFA (BEAC)
+currenciesDisplayName.LBP=livre libanaise
currenciesDisplayName.UGS=shilling ougandais (1966-1987)
currenciesDisplayName.STD=dobra
-currenciesDisplayName.MHD=dollar des \u00eeles Marshall
-currenciesDisplayName.NZP=livre n\u00e9o-z\u00e9landaise
currenciesDisplayName.WST=tala
-currenciesDisplayName.WSP=livre du Samoa
-currenciesDisplayName.HNL=lempira
-currenciesDisplayName.XMF=nouveau franc m\u00e9tropolitain
+currenciesDisplayName.KHR=riel
+currenciesDisplayName.EUR=euro
+currenciesDisplayName.DOP=peso dominicain
+currenciesDisplayName.BOV=Bolivian Mvdol
+currenciesDisplayName.MTP=livre maltaise
+currenciesDisplayName.USS=dollar des Etats-Unis (jour m\u00eame)
+currenciesDisplayName.BOP=peso bolivien
+currenciesDisplayName.MTL=lire maltaise
+currenciesDisplayName.CUP=peso cubain
currenciesDisplayName.TMM=Turkmenistan Manat
-currenciesDisplayName.GTQ=quetzal
+currenciesDisplayName.USN=dollar des Etats-Unis (jour suivant)
+currenciesDisplayName.SGD=dollar de Singapour
currenciesDisplayName.NZD=dollar n\u00e9o-z\u00e9landais
-currenciesDisplayName.SSP=livre \u00e9cossaise
-currenciesDisplayName.BBD=dollar de Barbade
+currenciesDisplayName.USD=dollar des \u00c9tats-Unis
+currenciesDisplayName.HNL=lempira
+currenciesDisplayName.BOB=boliviano
+currenciesDisplayName.ITL=lire italienne
+currenciesDisplayName.PAB=balboa
+currenciesDisplayName.GTQ=quetzal
+currenciesDisplayName.LAK=kip
+currenciesDisplayName.GHC=c\u00e9di
+currenciesDisplayName.AUD=dollar australien
currenciesDisplayName.NAD=dollar de Namibie
+currenciesDisplayName.KGS=som du Kyrgystan
currenciesDisplayName.MGF=franc malgache
+currenciesDisplayName.CHF=franc suisse
+currenciesDisplayName.BBD=dollar de Barbade
currenciesDisplayName.MGA=ariary malgache
-currenciesDisplayName.EGP=livre \u00e9gyptienne
-currenciesDisplayName.BZH=dollar du Honduras britannique
+currenciesDisplayName.PYG=guarani
currenciesDisplayName.PLZ=zloty (1950-1995)
-currenciesDisplayName.BAN=nouveau dinar de Bosnie-Herzegovine
-currenciesDisplayName.PLX=dollar US polonais (certificat de devises \u00e9trang\u00e8res)
-currenciesDisplayName.BAM=mark convertible de Bosnie-Herzegovine
-currenciesDisplayName.BZD=dollar de B\u00e9lize
-currenciesDisplayName.BAD=dinar de Bosnie-Herzegovine
currenciesDisplayName.YER=riyal du Y\u00e9men
+currenciesDisplayName.ATS=schilling autrichien
+currenciesDisplayName.ETB=birr
+currenciesDisplayName.BND=dollar de Brunei
+currenciesDisplayName.JMD=dollar jama\u00efcain
+currenciesDisplayName.EGP=livre \u00e9gyptienne
+currenciesDisplayName.DZD=dinar alg\u00e9rien
+currenciesDisplayName.ISK=couronne islandaise
currenciesDisplayName.SRG=florin du Surinam
-currenciesDisplayName.CSK=couronne tch\u00e8que
+currenciesDisplayName.LYD=dinar Iibyen
+currenciesDisplayName.BZD=dollar de B\u00e9lize
+currenciesDisplayName.BAM=mark convertible de Bosnie-Herzegovine
+currenciesDisplayName.ESP=peseta espagnole
currenciesDisplayName.KRW=won sud-cor\u00e9en
+currenciesDisplayName.NLG=florin n\u00e9erlandais
+currenciesDisplayName.MRO=ouguija
+currenciesDisplayName.BAD=dinar de Bosnie-Herzegovine
+currenciesDisplayName.ZWD=dollar du Zimbabwe
+currenciesDisplayName.SEK=couronne su\u00e9doise
+currenciesDisplayName.CSK=couronne tch\u00e8que
currenciesDisplayName.BYR=rouble bi\u00e9lorusse
-currenciesDisplayName.YEI=riyal du Y\u00e9men
-currenciesDisplayName.BYL=rouble bi\u00e9lorusse (1992-1994)
-currenciesDisplayName.CSC=couronne tch\u00e8que
-currenciesDisplayName.KRO=vieux won
-currenciesDisplayName.KRH=hwan
-currenciesDisplayName.BYB=nouveau rouble bi\u00e9lorusse (1994-1999)
-currenciesDisplayName.SQS=shilling de Somalie
-currenciesDisplayName.GRN=nouveau drachme
+currenciesDisplayName.IRR=rial iranien
currenciesDisplayName.PKR=roupie du Pakistan
-currenciesDisplayName.AFN=afghani
-currenciesDisplayName.ZWD=dollar du Zimbabwe
-currenciesDisplayName.LKR=roupie de Sri Lanka
-currenciesDisplayName.GRD=drachme
-currenciesDisplayName.IEP=livre irlandaise
-currenciesDisplayName.AFA=afghani
-currenciesDisplayName.YDD=dinar du Y\u00e9men
-currenciesDisplayName.RWF=franc du Rwanda
-currenciesDisplayName.CRC=colon
-currenciesDisplayName.TJS=somoni du Tadjikistan
-currenciesDisplayName.TJR=rouble du Tadjikistan
-currenciesDisplayName.EEK=couronne estonienne
-currenciesDisplayName.GQP=peseta de Guin\u00e9e Equatoriale
-currenciesDisplayName.MDR=rouble moldave
-currenciesDisplayName.HKD=dollar de Hong Kong
-currenciesDisplayName.DKK=couronne danoise
-currenciesDisplayName.MDL=leu moldave
-currenciesDisplayName.GQF=franco de Guin\u00e9e Equatoriale
-currenciesDisplayName.GQE=ekw\u00e9l\u00e9
-currenciesDisplayName.IDR=rupiah
-currenciesDisplayName.AED=dirham des \u00c9mirats arabes unis
-currenciesDisplayName.KPW=won nord-cor\u00e9en
-currenciesDisplayName.IDN=nouvelle roupie indon\u00e9sienne
-currenciesDisplayName.BWP=pula
-currenciesDisplayName.MDC=Moldovan Leu Cupon
-currenciesDisplayName.IDJ=roupie de Java
-currenciesDisplayName.KPP=won du peuple nord-cor\u00e9en
-currenciesDisplayName.IDG=florin de Nica
-currenciesDisplayName.VUV=vatu
-currenciesDisplayName.XID=dinar musulman
-currenciesDisplayName.SOS=shilling de Somalie
-currenciesDisplayName.ADP=peseta andorrane
-currenciesDisplayName.RUR=rouble de Russie (1991-1998)
-currenciesDisplayName.GPF=franc guadeloup\u00e9en
-currenciesDisplayName.DJF=franc de Djibouti
-currenciesDisplayName.ADD=diner andorran
-currenciesDisplayName.MCG=franc Germinal mon\u00e9gasque
-currenciesDisplayName.MCF=nouveau franc marocain
-currenciesDisplayName.ECV=unit\u00e9 de valeur constante \u00e9quatoriale (UVC)
-currenciesDisplayName.ECS=sucre
-currenciesDisplayName.LIF=franc du Liechtenstein
-currenciesDisplayName.PHP=peso philippin
-currenciesDisplayName.UZS=sum
-currenciesDisplayName.COP=peso colombien
-currenciesDisplayName.THB=baht
-currenciesDisplayName.IBP=livre d\u2019Irlande du Nord
-currenciesDisplayName.BUR=roupie de Birmanie
-currenciesDisplayName.COF=franc CFA congolais
-currenciesDisplayName.BUK=kyat
-currenciesDisplayName.COB=Colombian Paper Peso
-currenciesDisplayName.UZC=Uzbekistan Coupon Som
-currenciesDisplayName.UAK=karbovanetz
-currenciesDisplayName.QAR=rial du Qatar
-currenciesDisplayName.UAH=hryvnia
-currenciesDisplayName.GNS=syli
-currenciesDisplayName.CNY=Yuan Ren-min-bi
-currenciesDisplayName.MZM=m\u00e9tical
-currenciesDisplayName.CNX=dollar US chinois (certificat de devises \u00e9trang\u00e8res)
-currenciesDisplayName.UYU=peso uruguayen
-currenciesDisplayName.GNI=franc guin\u00e9en (1960-1972)
-currenciesDisplayName.SML=lire de Saint-Marin
-currenciesDisplayName.CNP=Chinese Jen Min Piao Yuan
-currenciesDisplayName.MZE=escudo du Mozambique
-currenciesDisplayName.GNF=franc guin\u00e9en
-currenciesDisplayName.OMS=Oman Rial Saidi
-currenciesDisplayName.PGK=kina
-currenciesDisplayName.OMR=rial omani
-currenciesDisplayName.UYP=peso uruguayen (1975-1993)
-currenciesDisplayName.XFU=franc UIC
-currenciesDisplayName.BTR=roupie de Bhoutan
-currenciesDisplayName.ZRZ=za\u00efre
-currenciesDisplayName.MAF=franc marocain
-currenciesDisplayName.MAD=dirham marocain
-currenciesDisplayName.BTN=ngultrum
-currenciesDisplayName.XFO=franc or
-currenciesDisplayName.UYF=peso fort uruguayen
-currenciesDisplayName.MYR=ringgit
-currenciesDisplayName.ZRN=nouveau za\u00efre
-currenciesDisplayName.AZM=Azerbaijanian Manat
-currenciesDisplayName.GMP=livre de Gambie
-currenciesDisplayName.KMF=franc des Comores
-currenciesDisplayName.SLL=l\u00e9one
-currenciesDisplayName.GMD=dalasie
-currenciesDisplayName.XEU=unit\u00e9 de compte europ\u00e9enne (ECU)
-currenciesDisplayName.BSP=livre des Bahamas
-currenciesDisplayName.CMF=franc CFA camerounais
-currenciesDisplayName.MXV=unit\u00e9 de conversion mexicaine (UDI)
-currenciesDisplayName.XEF=franc CFA (BCEAEC)
-currenciesDisplayName.BSD=dollar des Bahamas
-currenciesDisplayName.MXP=peso d\u2019argent mexicain (1861-1992)
-currenciesDisplayName.PES=sol p\u00e9ruvien
-currenciesDisplayName.GLK=couronne du Groenland
-currenciesDisplayName.BRZ=cruzeiro (1942-1967)
-currenciesDisplayName.PEN=nouveau sol p\u00e9ruvien
-currenciesDisplayName.CLP=peso chilien
-currenciesDisplayName.SKK=couronne slovaque
-currenciesDisplayName.PEI=Inti p\u00e9ruvien
-currenciesDisplayName.BRR=cruzeiro
-currenciesDisplayName.FRG=franc germinal/franc Poincar\u00e9
-currenciesDisplayName.FRF=franc fran\u00e7ais
-currenciesDisplayName.BRN=nouveau cruzado
-currenciesDisplayName.CLF=Chilean Unidades de Fomento
-currenciesDisplayName.CLE=escudo chilien
-currenciesDisplayName.BRL=r\u00e9al
-currenciesDisplayName.CLC=condor chilien
-currenciesDisplayName.BRE=cruzeiro (1990-1993)
-currenciesDisplayName.DES=sperrmark allemand
-currenciesDisplayName.MWP=livre de Malawi
-currenciesDisplayName.BRC=cruzeiro
-currenciesDisplayName.BRB=nouveau cruzeiro (1967-1986)
-currenciesDisplayName.MWK=kwacha
-currenciesDisplayName.PDR=rouble moldave
-currenciesDisplayName.DEM=deutsche mark
-currenciesDisplayName.TDF=franc CFA du Tchad
-currenciesDisplayName.PDN=nouveau rouble moldave
-currenciesDisplayName.PDK=Transdniestria Ruble Kupon
-currenciesDisplayName.NPR=roupie du N\u00e9pal
-currenciesDisplayName.CKD=dollar des \u00eeles Cook
-currenciesDisplayName.JPY=yen
-currenciesDisplayName.MVR=roupie des Maldives
-currenciesDisplayName.XCF=nouveau franc CFA
-currenciesDisplayName.MVP=roupie des Maldives
-currenciesDisplayName.XCD=dollar des Cara\u00efbes
-currenciesDisplayName.SIT=tolar slov\u00e8ne
-currenciesDisplayName.YUR=dinar yougoslave r\u00e9form\u00e9
-currenciesDisplayName.AWG=florin d\u2019Aruba
-currenciesDisplayName.YUO=dinar yougoslave d\u2019Octobre
-currenciesDisplayName.DDM=mark est-allemand
-currenciesDisplayName.YUN=dinar yougoslave convertible
-currenciesDisplayName.YUM=dinar yougoslave Noviy
-currenciesDisplayName.TCC=couronne des \u00eeles Turks et Ca\u00efques
-currenciesDisplayName.YUG=dinar yougoslave 1994
-currenciesDisplayName.YUF=dinar de la F\u00e9d\u00e9ration Yougoslave
-currenciesDisplayName.RON=nouveau leu
-currenciesDisplayName.YUD=nouveau dinar yougoslave
-currenciesDisplayName.ROL=leu
-currenciesDisplayName.SIB=bons de tolar slov\u00e8ne
-currenciesDisplayName.NOK=couronne norv\u00e9gienne
-currenciesDisplayName.MUR=roupie de l\u2019\u00eele Maurice
-currenciesDisplayName.XBD=unit\u00e9 de compte europ\u00e9enne (XBD)
-currenciesDisplayName.GIP=livre de Gibraltar
-currenciesDisplayName.VNS=dong national du Vietnam
-currenciesDisplayName.XBC=unit\u00e9 de compte europ\u00e9enne (XBC)
-currenciesDisplayName.VNR=dong de la R\u00e9publique Vietnamienne
-currenciesDisplayName.XBB=unit\u00e9 mon\u00e9taire europ\u00e9enne
-currenciesDisplayName.XBA=unit\u00e9 composite europ\u00e9enne
-currenciesDisplayName.KID=dollar de Kiribati
-currenciesDisplayName.SHP=livre de Sainte-H\u00e9l\u00e8ne
-currenciesDisplayName.VNN=nouveau dong vietnamien
-currenciesSymbol.JOD=JOD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
+currenciesDisplayName.BMD=dollar des Bermudes
+currenciesSymbol.BYR=Rbl
currenciesSymbol.CHF=sFr.
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=MRO
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.CFF=CFF
currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=TWD
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
+currenciesSymbol.AFN=Af
+currenciesSymbol.FRF=F
+currenciesSymbol.GEL=lari
currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=XPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=FB
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=TOP
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.YER=YER
-currenciesSymbol.SRG=SRG
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IEP
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=MZM
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
+currenciesSymbol.KZT=T
currenciesSymbol.GNF=GF
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
-currenciesSymbol.OMR=OMR
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=MYR
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=SKK
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=F
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
+currenciesSymbol.UYU=Ur$
+currenciesSymbol.BEF=FB
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MKD=MDen
+currenciesSymbol.LSL=M
+currenciesSymbol.AMD=dram
+currenciesSymbol.TRL=TL
currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MWK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=NPR
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=XCD
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.NAD=N$
+currenciesSymbol.LYD=LD
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.BAM=KM
+currenciesSymbol.BOB=Bs
shortMonths=janv.®f\u00e9vr.®mars®avr.®mai®juin®juil.®ao\u00fbt®sept.®oct.®nov.®d\u00e9c.®®
months=janvier®f\u00e9vrier®mars®avril®mai®juin®juillet®ao\u00fbt®septembre®octobre®novembre®d\u00e9cembre®®
shortWeekdays=®dim.®lun.®mar.®mer.®jeu.®ven.®sam.®
weekdays=®dimanche®lundi®mardi®mercredi®jeudi®vendredi®samedi®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
-eras=av. J.-C.®ap. J.-C.®
+eras=av. J.-C.®apr. J.-C.®
shortDateFormat=dd/MM/yy
mediumDateFormat=d MMM yy
longDateFormat=d MMMM yyyy
fullDateFormat=EEEE d MMMM yyyy
fullTimeFormat=HH' h 'mm z
-zoneStrings=America/Indianapolis®HNE (\u00c9UA)®Heure normale de l\u2019Est (\u00c9UA)®HAE (\u00c9UA)®Heure avanc\u00e9e de l\u2019Est (\u00c9UA)®©America/Halifax®HNA®Heure normale de l\u2019Atlantique®HAA®Heure avanc\u00e9e de l\u2019Atlantique®©Pacific/Honolulu®HST®Heure normale d\u2019Hawa\u00ef®HDT®Heure avanc\u00e9e d\u2019Hawa\u00ef®©America/Denver®HNR (\u00c9UA)®Heure normale des Rocheuses (\u00c9UA)®HAR (\u00c9UA)®Heure avanc\u00e9e des Rocheuses (\u00c9UA)®©America/Winnipeg®HNC®Heure normale du Centre®HAC®Heure avanc\u00e9e du Centre®©America/Anchorage®HNAK®Heure normale de l\u2019Alaska®HAAK®Heure avanc\u00e9e de l\u2019Alaska®©America/Montreal®HNE®Heure normale de l\u2019Est®HAE®Heure avanc\u00e9e de l\u2019Est®©America/St_Johns®HNT®Heure normale de Terre-Neuve®HAT®Heure avanc\u00e9e de Terre-Neuve®©America/Edmonton®HNR®Heure normale des Rocheuses®HAR®Heure avanc\u00e9e des Rocheuses®©America/Chicago®HNC (\u00c9UA)®Heure normale du Centre (\u00c9UA)®HAC (\u00c9UA)®Heure avanc\u00e9e du Centre (\u00c9UA)®©Asia/Shanghai®HNC®Heure normale de Chine®HAC®Heure avanc\u00e9e de Chine®©America/Vancouver®HNP®Heure normale du Pacifique®HAP®Heure avanc\u00e9e du Pacifique®©Asia/Tokyo®HNJ®Heure normale du Japon®HAJ®Heure avanc\u00e9e du Japon®©America/New_York®HNE (\u00c9UA)®Heure normale de l\u2019Est (\u00c9UA)®HAE (\u00c9UA)®Heure avanc\u00e9e de l\u2019Est (\u00c9UA)®©Europe/Bucharest®HEE®Heure normale de l\u2019Europe de l\u2019Est®HAEE®Heure avanc\u00e9e de l\u2019Europe de l\u2019Est®©America/Los_Angeles®HNP (\u00c9UA)®Heure normale du Pacifique (\u00c9UA)®HAP (\u00c9UA)®Heure avanc\u00e9e du Pacifique (\u00c9UA)®©America/Phoenix®HNR (\u00c9UA)®Heure normale des Rocheuses (\u00c9UA)®HAR (\u00c9UA)®Heure avanc\u00e9e des Rocheuses (\u00c9UA)®©Etc/GMT®GMT®Temps Moyen de Greenwich®GMT®Temps Moyen de Greenwich®©Asia/Jerusalem®HNI®Heure normale d\u2019Isra\u00ebl®HAI®Heure avanc\u00e9e d\u2019Isra\u00ebl®©Europe/Paris®HNEC®Heure normale de l\u2019Europe centrale®HAEC®Heure avanc\u00e9e de l\u2019Europe centrale®©
+zoneStrings=Pacific/Honolulu®HST®Heure normale d\u2019Hawa\u00ef®HDT®Heure avanc\u00e9e d\u2019Hawa\u00ef®©Europe/Bucharest®HEE®Heure normale de l\u2019Europe de l\u2019Est®HAEE®Heure avanc\u00e9e de l\u2019Europe de l\u2019Est®©America/Montreal®HNE®Heure normale de l\u2019Est®HAE®Heure avanc\u00e9e de l\u2019Est®©America/Los_Angeles®HNP (\u00c9UA)®Heure normale du Pacifique (\u00c9UA)®HAP (\u00c9UA)®Heure avanc\u00e9e du Pacifique (\u00c9UA)®©America/Vancouver®HNP®Heure normale du Pacifique®HAP®Heure avanc\u00e9e du Pacifique®©America/Denver®HNR (\u00c9UA)®Heure normale des Rocheuses (\u00c9UA)®HAR (\u00c9UA)®Heure avanc\u00e9e des Rocheuses (\u00c9UA)®©America/Winnipeg®HNC®Heure normale du Centre®HAC®Heure avanc\u00e9e du Centre®©America/Edmonton®HNR®Heure normale des Rocheuses®HAR®Heure avanc\u00e9e des Rocheuses®©Asia/Jerusalem®HNI®Heure normale d\u2019Isra\u00ebl®HAI®Heure avanc\u00e9e d\u2019Isra\u00ebl®©America/Phoenix®HNR (\u00c9UA)®Heure normale des Rocheuses (\u00c9UA)®HAR (\u00c9UA)®Heure avanc\u00e9e des Rocheuses (\u00c9UA)®©America/Chicago®HNC (\u00c9UA)®Heure normale du Centre (\u00c9UA)®HAC (\u00c9UA)®Heure avanc\u00e9e du Centre (\u00c9UA)®©America/Indianapolis®HNE (\u00c9UA)®Heure normale de l\u2019Est (\u00c9UA)®HAE (\u00c9UA)®Heure avanc\u00e9e de l\u2019Est (\u00c9UA)®©America/St_Johns®HNT®Heure normale de Terre-Neuve®HAT®Heure avanc\u00e9e de Terre-Neuve®©America/Anchorage®HNAK®Heure normale de l\u2019Alaska®HAAK®Heure avanc\u00e9e de l\u2019Alaska®©Asia/Shanghai®HNC®Heure normale de Chine®HAC®Heure avanc\u00e9e de Chine®©Asia/Tokyo®HNJ®Heure normale du Japon®HAJ®Heure avanc\u00e9e du Japon®©Europe/Paris®HNEC®Heure normale de l\u2019Europe centrale®HAEC®Heure avanc\u00e9e de l\u2019Europe centrale®©America/New_York®HNE (\u00c9UA)®Heure normale de l\u2019Est (\u00c9UA)®HAE (\u00c9UA)®Heure avanc\u00e9e de l\u2019Est (\u00c9UA)®©America/Halifax®HNA®Heure normale de l\u2019Atlantique®HAA®Heure avanc\u00e9e de l\u2019Atlantique®©
territories.TL=Timor-Leste
territories.TK=Tokelau
territories.TJ=Tadjikistan
@@ -792,8 +314,8 @@ territories.GL=Groenland
territories.SV=El Salvador
territories.062=Asie centrale et du Sud
territories.ST=Sao Tom\u00e9-et-Principe
-territories.GI=Gibraltar
territories.061=Polyn\u00e9sie
+territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Suriname
territories.GF=Guyane fran\u00e7aise
@@ -816,13 +338,13 @@ territories.SC=Seychelles
territories.SB=\u00celes Salomon
territories.SA=Arabie saoudite
territories.FR=France
-territories.FO=\u00celes F\u00e9ro\u00e9
territories.057=Micron\u00e9sie
+territories.FO=\u00celes F\u00e9ro\u00e9
territories.FM=Micron\u00e9sie
territories.RW=Rwanda
territories.054=M\u00e9lan\u00e9sie
-territories.FK=\u00celes Falkland (Malvinas)
territories.053=Australie et Nouvelle-Z\u00e9lande
+territories.FK=\u00celes Falkland (Malvinas)
territories.RU=Russie
territories.FJ=Fidji
territories.FI=Finlande
@@ -831,19 +353,20 @@ territories.RE=R\u00e9union
territories.ET=\u00c9thiopie
territories.ES=Espagne
territories.ER=\u00c9rythr\u00e9e
-territories.EH=Sahara occidental
territories.833=\u00cele de Man
+territories.EH=Sahara occidental
territories.EG=\u00c9gypte
-territories.EE=Estonie
territories.830=\u00celes Anglo-Normandes
+territories.EE=Estonie
+territories.QO=Autre Oc\u00e9anie
territories.EC=\u00c9quateur
territories.DZ=Alg\u00e9rie
territories.QA=Qatar
territories.039=Europe m\u00e9ridionale
territories.DO=R\u00e9publique dominicaine
territories.PY=Paraguay
-territories.DM=Dominique
territories.035=Asie du Sud-Est
+territories.DM=Dominique
territories.PW=Palaos
territories.DK=Danemark
territories.DJ=Djibouti
@@ -866,6 +389,7 @@ territories.CX=\u00cele Christmas
territories.CV=Cap Vert
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbie-et-Mont\u00e9n\u00e9gro
territories.CR=Costa Rica
territories.029=Cara\u00efbes
territories.CO=Colombie
@@ -873,8 +397,8 @@ territories.CN=Chine
territories.CM=Cameroun
territories.CL=Chili
territories.CK=\u00celes Cook
-territories.021=Am\u00e9rique du Nord
territories.CI=C\u00f4te d\u2019Ivoire
+territories.021=Am\u00e9rique du Nord
territories.CH=Suisse
territories.CG=Congo
territories.CF=R\u00e9publique centrafricaine
@@ -893,25 +417,24 @@ territories.BR=Br\u00e9sil
territories.019=Am\u00e9riques
territories.018=Afrique australe
territories.NZ=Nouvelle-Z\u00e9lande
-territories.017=Afrique centrale
territories.BO=Bolivie
+territories.017=Afrique centrale
territories.BN=Brunei
-territories.015=Afrique septentrionale
territories.BM=Bermudes
+territories.015=Afrique septentrionale
territories.014=Afrique orientale
territories.013=Am\u00e9rique centrale
territories.NU=Niu\u00e9
territories.BJ=Benin
-territories.011=Afrique occidentale
territories.BI=Burundi
-territories.172=Commonwealth of Independent States
+territories.011=Afrique occidentale
territories.BH=Bahre\u00efn
+territories.172=Commonwealth of Independent States
territories.NR=Nauru
territories.BG=Bulgarie
territories.BF=Burkina Faso
territories.NP=N\u00e9pal
territories.BE=Belgique
-territories.ZZ=Autre Oc\u00e9anie
territories.NO=Norv\u00e8ge
territories.BD=Bangladesh
territories.BB=Barbade
@@ -932,15 +455,15 @@ territories.AU=Australie
territories.AT=Autriche
territories.AS=Samoa am\u00e9ricaines
territories.AR=Argentine
-territories.AQ=Antarctique
territories.009=Oc\u00e9anie
+territories.AQ=Antarctique
territories.MZ=Mozambique
territories.AO=Angola
territories.MY=Malaisie
territories.AN=Antilles n\u00e9erlandaises
territories.MX=Mexique
-territories.AM=Arm\u00e9nie
territories.005=Am\u00e9rique du Sud
+territories.AM=Arm\u00e9nie
territories.MW=Malawi
territories.AL=Albanie
territories.MV=Maldives
@@ -949,8 +472,8 @@ territories.ZA=Afrique du Sud
territories.MU=Maurice
territories.002=Afrique
territories.MT=Malte
-territories.AI=Anguilla
territories.001=Monde
+territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritanie
territories.AG=Antigua-et-Barbuda
@@ -964,7 +487,6 @@ territories.MN=Mongolie
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Mac\u00e9doine
-territories.YU=Yougoslavie
territories.YT=Mayotte
territories.MH=\u00celes Marshall
territories.MG=Madagascar
@@ -1041,10 +563,9 @@ territories.TR=Turquie
territories.TO=Tonga
territories.TN=Tunisie
territories.TM=Turkmenistan
-languages.gwi=gwich\u02bbin
languages.akk=akkadien
+languages.gwi=gwich\u02bcin
languages.eka=ekajuk
-languages.ijo=ijo
languages.xh=xhosa
languages.sux=sum\u00e9rien
languages.sus=soussou
@@ -1055,20 +576,20 @@ languages.pon=pohnpei
languages.min=minangkabau
languages.suk=sukuma
languages.wo=wolof
-languages.lol=mongo
languages.kut=kutenai
+languages.lol=mongo
languages.mic=micmac
languages.wa=wallon
languages.kum=koumyk
languages.zap=zapot\u00e8que
languages.cus=couchitiques (autre)
-languages.jbo=lojban
languages.doi=dogra
+languages.jbo=lojban
languages.vo=volap\u00fck
languages.oto=langues otomangues
languages.vi=vietnamien
languages.vai=va\u00ef
-languages.rar=rarotongan
+languages.rar=Rarotonga
languages.ve=venda
languages.rap=rapanui
languages.raj=rajasthani
@@ -1087,8 +608,8 @@ languages.egy=\u00e9gyptien (ancien)
languages.ug=ou\u00efgour
languages.fan=fang
languages.ssa=nilo-sahariennes (autre)
-languages.mga=irlandais moyen (900-1200)
languages.bat=baltique (autre)
+languages.mga=irlandais moyen (900-1200)
languages.nyo=nyoro
languages.bas=bassa
languages.nyn=nyankol\u00e9
@@ -1116,8 +637,8 @@ languages.kru=kurukh
languages.tg=tadjik
languages.byn=blin
languages.te=t\u00e9lougou
-languages.kro=kru
languages.csb=cashubian
+languages.kro=kru
languages.ta=tamoul
languages.tkl=tokelau
languages.efi=efik
@@ -1141,8 +662,8 @@ languages.sk=slovaque
languages.grb=grebo
languages.si=singhalais
languages.sh=serbo-croate
-languages.crh=turc de Crim\u00e9e; tatar de Crim\u00e9e
languages.afa=afro-asiatique (autre)
+languages.crh=turc de Crim\u00e9e; tatar de Crim\u00e9e
languages.sg=sango
languages.se=sami du Nord
languages.sd=sindhi
@@ -1156,7 +677,6 @@ languages.ro=roumain
languages.rn=roundi
languages.rm=rh\u00e9to-roman
languages.mdf=moksa
-languages.tiv=tiv
languages.ady=adygu\u00e9
languages.zun=zuni
languages.kpe=kpell\u00e9
@@ -1166,14 +686,14 @@ languages.son=songhai
languages.cpp=pidgin portugais (autre)
languages.sog=sogdien
languages.ada=adangme
-languages.kos=kusaien
-languages.hit=hittite
languages.cpf=pidgin fran\u00e7ais (autre)
+languages.hit=hittite
+languages.kos=kusaien
languages.cpe=pidgin anglais (autre)
languages.him=himachali
-languages.kok=konkani
-languages.hil=hiligaynon
languages.got=gotique
+languages.hil=hiligaynon
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
@@ -1187,7 +707,6 @@ languages.snk=sonink\u00e9
languages.cop=copte
languages.yap=yapois
languages.ach=acoli
-languages.yao=yao
languages.phi=philippines (autre)
languages.pl=polonais
languages.ace=aceh
@@ -1218,7 +737,7 @@ languages.btk=batak
languages.myv=erzya
languages.dgr=dogrib
languages.ny=nyanja
-languages.myn=langue maya
+languages.myn=langues maya
languages.nv=navaho
languages.kmb=kiMboundou
languages.nr=nd\u00e9b\u00e9l\u00e9 du Sud
@@ -1231,7 +750,7 @@ languages.ng=ndonga
languages.sla=slaves (autre)
languages.ne=n\u00e9palais
languages.nd=nd\u00e9b\u00e9l\u00e9 du Nord
-languages.cmc=chames, langues
+languages.cmc=langues chames
languages.tet=tetum
languages.nb=bokm\u00e5l norv\u00e9gien
languages.na=nauruan
@@ -1240,26 +759,26 @@ languages.tem=temne
languages.my=birman
languages.lez=lezghien
languages.mt=maltais
-languages.peo=perse, vieux (ca. 600-400 av. J.-C.)
+languages.peo=vieux perser (ca. 600-400 av. J.-C.)
languages.ms=malais
languages.mr=marathe
languages.fro=vieux fran\u00e7ais (842-ca.1400)
languages.mo=moldave
-languages.frm=fran\u00e7ais moyen (ca.1400-1600)
languages.mn=mongol
-languages.jrb=jud\u00e9o-arabe
+languages.frm=fran\u00e7ais moyen (ca.1400-1600)
languages.ml=malayalam
+languages.jrb=jud\u00e9o-arabe
languages.mk=mac\u00e9donien
languages.mi=maori
languages.mh=marshall
languages.mg=malgache
languages.mwr=marwari
languages.bra=braj
-languages.den=slave
languages.lv=letton
+languages.den=slave (athapascan)
languages.lu=luba-katanga
-languages.del=delaware
languages.lt=lituanien
+languages.del=delaware
languages.lo=lao
languages.ln=lingala
languages.li=limbourgeois
@@ -1274,7 +793,7 @@ languages.ky=kirghize
languages.kw=cornique
languages.kv=komi
languages.ku=kurde
-languages.sio=sioux, langues
+languages.sio=langues sioux
languages.ks=kashmiri
languages.kr=kanouri
languages.awa=awadhi
@@ -1283,23 +802,22 @@ languages.kn=kannada
languages.km=khmer
languages.kl=groenlandais
languages.kk=kazakh
-languages.rom=tsigane
+languages.rom=tzigane
languages.kj=kuanyama
languages.sid=sidamo
languages.ki=kikuyu
languages.kg=kongo
-languages.non=norrois, vieux
+languages.non=vieux norrois
languages.ka=g\u00e9orgien
languages.mus=creek
languages.roa=romanes (autre)
languages.nog=noga\u00ef, nogay
-languages.mun=mounda, langues
+languages.mun=langues mounda
languages.mul=langues multiples
languages.jv=javanais
languages.gil=gilbertais
languages.znd=zande
languages.shn=chan
-languages.fon=fon
languages.xal=kalmouk
languages.aus=langues australiennes
languages.kho=khotanais
@@ -1312,38 +830,38 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italien
languages.sgn=langues des signes
-languages.is=islandais
languages.kha=khasi
+languages.is=islandais
languages.chr=cherokee
languages.pam=pampanga
languages.pal=pahlavi
languages.chp=chippewyan
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=jargon chinook
languages.chm=mari
languages.tyv=touva
languages.bnt=bantou
languages.pag=pangasinan
-languages.ik=inupiaq
languages.chk=chuuk
-languages.ii=yi de Sichuan
+languages.ik=inupiaq
languages.haw=hawa\u00efen
+languages.ii=yi de Sichuan
languages.lam=lamba
-languages.ig=igbo
languages.chg=jagataic
+languages.ig=igbo
languages.sga=irlandais ancien (jusqu\u2019\u00e0 900)
languages.paa=papoues (autre)
languages.ie=interlingue
languages.id=indon\u00e9sien
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
languages.lad=ladino
-languages.hz=h\u00e9r\u00e9ro
-languages.hai=haida
languages.dar=dargwa
+languages.hai=haida
+languages.hz=h\u00e9r\u00e9ro
languages.hy=arm\u00e9nien
languages.ath=langues athapascanes
languages.hu=hongrois
@@ -1356,7 +874,7 @@ languages.dyu=dyula
languages.he=h\u00e9breu
languages.ast=asturien
languages.ha=haoussa
-languages.wen=sorabes, langues
+languages.wen=langues sorabes
languages.gv=manx
languages.gu=goudjrati
languages.sem=s\u00e9mitiques (autre)
@@ -1365,9 +883,9 @@ languages.iro=langues iroquoiennes
languages.gn=guarani
languages.gl=galicien
languages.arw=arawak
-languages.gez=gu\u00e8ze
-languages.art=artificielle (autre)
languages.gd=ga\u00e9lique \u00e9cossais
+languages.art=artificielle (autre)
+languages.gez=gu\u00e8ze
languages.ira=iranien
languages.ga=irlandais
languages.arp=arapaho
@@ -1375,9 +893,9 @@ languages.arn=araukan
languages.fy=frison
languages.bla=pieds-noirs
languages.gem=germanique (autre)
-languages.ypk=yupik, langues
-languages.arc=aram\u00e9en
+languages.ypk=langues yupik
languages.fr=fran\u00e7ais
+languages.arc=aram\u00e9en
languages.fo=f\u00e9ro\u00efen
languages.cel=langue celtique (autre)
languages.fj=fidjien
@@ -1395,18 +913,17 @@ languages.en=anglais
languages.el=grec
languages.tut=alta\u00efques (autre)
languages.niu=niu\u00e9
-languages.tup=tupi, langues
+languages.tup=langues tupi
languages.ee=\u00e9w\u00e9
languages.tum=tumbuka
languages.mos=mossi
languages.dz=dzongkha
languages.nic=nig\u00e9ro-congolaise (autre)
-languages.lus=lushai
-languages.fiu=langue finno-ougrienne (autre)
languages.dv=maldivien
+languages.fiu=langue finno-ougrienne (autre)
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
-languages.luo=luo
languages.lun=lunda
languages.apa=langues apaches
languages.lui=luiseno
@@ -1421,35 +938,35 @@ languages.war=waray
languages.da=danois
languages.dum=n\u00e9erlandais moyen (ca. 1050-1350)
languages.wal=walamo
-languages.mno=manobo, langues
-languages.wak=wakashennes, langues
+languages.mno=langues manobo
+languages.wak=langues wakashennes
languages.sat=santal
languages.cy=gallois
languages.sas=sasak
-languages.kbd=kabardine
languages.cv=tchouvache
+languages.kbd=kabardine
languages.cu=slavon d\u2019\u00e9glise
languages.mni=manipuri
languages.cs=tch\u00e8que
languages.sam=samaritain
languages.cr=cree
-languages.sal=salisha, langues
+languages.sal=langues salisha
languages.dua=douala
languages.co=corse
languages.sai=indiennes d\u2019Am\u00e9rique du Sud (autre)
languages.mnc=mandchou
languages.sah=iakoute
-languages.kaw=kawi
-languages.inh=ingouche
languages.gba=gbaya
+languages.inh=ingouche
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=langue indo-europ\u00e9enne (autre)
languages.bho=bhojpuri
+languages.ine=langue indo-europ\u00e9enne (autre)
languages.enm=anglais moyen (1100-1500)
-languages.kar=karen
-languages.inc=langue indo-aryenne (autre)
languages.ce=tch\u00e9tch\u00e8ne
+languages.inc=langue indo-aryenne (autre)
+languages.kar=karen
languages.gay=gayo
languages.ca=catalan
languages.umb=umbundu
@@ -1457,19 +974,19 @@ languages.syr=syriaque
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=vieil anglais (ca.450-1100)
-languages.kac=kachin
languages.cau=langue caucasienne (autre)
+languages.kac=kachin
languages.kab=kabyle
-languages.kaa=kara-kalpak
languages.bs=bosniaque
-languages.car=caribe
+languages.kaa=kara-kalpak
languages.br=breton
+languages.car=caribe
languages.bo=tib\u00e9tain
languages.bn=bengali
languages.bm=bambara
languages.gaa=ga
-languages.cai=indien d\u2019Am\u00e9rique Centrale (autre)
languages.bi=bichlamar
+languages.cai=indien d\u2019Am\u00e9rique Centrale (autre)
languages.bh=bihari
languages.bg=bulgare
languages.be=bi\u00e9lorusse
@@ -1477,19 +994,19 @@ languages.cad=caddo
languages.ba=bachkir
languages.zu=zoulou
languages.zen=zenaga
-languages.pro=proven\u00e7al ancien (jusqu\u2019\u00e0 1500)
+languages.pro=vieux proven\u00e7al (jusqu\u2019\u00e0 1500)
languages.hsb=haut-sorabe
languages.az=az\u00e9ri
languages.ay=aymara
languages.av=avar
languages.as=assamais
-languages.dsb=bas-sorabe
languages.ar=arabe
-languages.ilo=iloko
+languages.dsb=bas-sorabe
languages.elx=\u00e9lamite
+languages.ilo=iloko
languages.zh=chinois
languages.an=aragonais
-languages.pra=pr\u00e2krit
+languages.pra=langues pr\u00e2krit
languages.am=amharique
languages.new=newari
languages.ak=akan
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr_CA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr_CA.properties
index 4f614e7..9b0bb02 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr_CA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_fr_CA.properties
@@ -8,7 +8,6 @@
currencyFormat=#,##0.00 \u00a4;(#,##0.00\u00a4)
currenciesSymbol.CAD=$
currenciesSymbol.USD=$ US
-minNumberOfDaysInFirstWeek=4
firstDayOfWeek=sun
shortDateFormat=yy-MM-dd
mediumDateFormat=yy-MM-dd
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ga.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ga.properties
index d7e3e12..675a84d 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ga.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ga.properties
@@ -6,759 +6,353 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=RbMLkUnsSElFtTauKcBeyrAC
-currenciesDisplayName.JOD=D\u00ednear Iord\u00e1nach
-currenciesDisplayName.BOV=Mvdol Bolavach
-currenciesDisplayName.XAU=\u00d3r
-currenciesDisplayName.FOK=Kronur Oile\u00e1in Fhar\u00f3
-currenciesDisplayName.LBP=Punt na Liob\u00e1ine
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Dong V\u00edtneamach
-currenciesDisplayName.TZS=Scilling na Tans\u00e1ine
-currenciesDisplayName.BOP=Peso na Bolaive
-currenciesDisplayName.KHR=Riel na Camb\u00f3ide
-currenciesDisplayName.XAM=Aonad Airgeada\u00edochta na h\u00c1ise
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Sean-Riel na Camb\u00f3ide
-currenciesDisplayName.ZMP=Punt Saimbiach
-currenciesDisplayName.AUP=Punt Astr\u00e1lach
-currenciesDisplayName.XAF=CFA Franc BEAC
-currenciesDisplayName.MTP=Punt Maltach
-currenciesDisplayName.GHR=Cedi Athluachtha Gh\u00e1na
-currenciesDisplayName.ZMK=Kwacha Saimbiach
-currenciesDisplayName.XAD=D\u00ednear \u00c1iseach Unit of Account
-currenciesDisplayName.GHP=Punt Gh\u00e1na
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Sean-Cedi Gh\u00e1na
-currenciesDisplayName.MTL=Lira Maltach
-currenciesDisplayName.AUD=Dollar Astr\u00e1lach
-currenciesDisplayName.USS=Dollar S.A.M. (an la c\u00e9anna)
-currenciesDisplayName.ITL=Lira Iod\u00e1lach
-currenciesDisplayName.USN=Dollar S.A.M. (an ch\u00e9ad l\u00e1 eile)
-currenciesDisplayName.GHC=Cedi Gh\u00e1na
-currenciesDisplayName.SGD=Dollar Singeap\u00f3ir
-currenciesDisplayName.PAB=Balboa Panamach
-currenciesDisplayName.LAK=Kip Laosach
-currenciesDisplayName.KGS=Som na Cirgeast\u00e1ine
-currenciesDisplayName.CHF=Franc na hEilv\u00e9ise
-currenciesDisplayName.ATS=Scilling Ostarach
-currenciesDisplayName.USD=Dollar S.A.M.
-currenciesDisplayName.ETD=Dollar na hAet\u00f3ipe
-currenciesDisplayName.BND=Dollar Bhr\u00fain\u00e9
-currenciesDisplayName.JMP=Punt Iam\u00e1cach
-currenciesDisplayName.ETB=Birr na hAet\u00f3ipe
-currenciesDisplayName.DZG=Franc Germinal Ailg\u00e9rach
-currenciesDisplayName.DZF=Franc Nua Ailg\u00e9rach
-currenciesDisplayName.DZD=D\u00ednear na hAilg\u00e9ire
-currenciesDisplayName.PYG=Guarani Pharagua
-currenciesDisplayName.LYP=Punt Libia
-currenciesDisplayName.JMD=Dollar Iam\u00e1cach
-currenciesDisplayName.ISK=Krona \u00cdoslannach
-currenciesDisplayName.ESP=Peseta Sp\u00e1inneach
-currenciesDisplayName.BMP=Punt Bheirmi\u00fada
-currenciesDisplayName.LYD=D\u00ednear Libia
-currenciesDisplayName.LYB=Lira \u00dadar\u00e1s M\u00edleata Briotanach Libia
-currenciesDisplayName.BMD=Dollar Bheirmi\u00fada
-currenciesDisplayName.NLG=Guilder \u00cdsilt\u00edreach
-currenciesDisplayName.MRO=Ouguiya na Marat\u00e1ine
-currenciesDisplayName.IRR=Rial Iar\u00e1nach
-currenciesDisplayName.SEK=Krona Sualannach
+currenciesDisplayName.YDD=D\u00ednear \u00c9imin
+currenciesDisplayName.TWD=Dollar Nua na T\u00e9av\u00e1ine
currenciesDisplayName.KES=Scilling C\u00e9iniach
-currenciesDisplayName.CFF=CFA Franc Phoblacht na hAfraice L\u00e1ir
+currenciesDisplayName.BYB=R\u00fabal Nua B\u00e9alar\u00faiseach (1994-1999)
+currenciesDisplayName.LKR=R\u00faip\u00ed Sr\u00ed Lanca
+currenciesDisplayName.RWF=Franc Ruanda
+currenciesDisplayName.TJS=Somoni na T\u00e1ids\u00edceast\u00e1ine
+currenciesDisplayName.SDP=Punt na S\u00fad\u00e1ine
+currenciesDisplayName.TJR=R\u00fabal na T\u00e1ids\u00edceast\u00e1ine
+currenciesDisplayName.AFN=Afgain\u00ed
+currenciesDisplayName.GRD=Drachma Gr\u00e9agach
+currenciesDisplayName.IEP=Punt \u00c9ireannach
currenciesDisplayName.ARS=Peso na Airgint\u00edne
+currenciesDisplayName.SDD=D\u00ednear na S\u00fad\u00e1ine
currenciesDisplayName.ARP=Peso na Airgint\u00edne (1983-1985)
-currenciesDisplayName.ARM=Peso Moneda Nacional Airgint\u00edneach
-currenciesDisplayName.TWD=Dollar Nua na T\u00e9av\u00e1ine
-currenciesDisplayName.SDP=Punt na S\u00fad\u00e1ine
currenciesDisplayName.GEL=Lari na Gr\u00faise
+currenciesDisplayName.AFA=Afgain\u00ed (1927-2002)
currenciesDisplayName.GEK=Kupon Larit na Gr\u00faise
-currenciesDisplayName.MQF=Franc Martinique
+currenciesDisplayName.CRC=Colon Ch\u00f3sta R\u00edce
currenciesDisplayName.FKP=Punt Oile\u00e1in Fh\u00e1clainne
+currenciesDisplayName.EEK=Kroon na hEast\u00f3ine
+currenciesDisplayName.HKD=Dollar Hong Cong
+currenciesDisplayName.MDL=Leu Mold\u00f3vach
currenciesDisplayName.ARA=Austral Airgint\u00edneach
-currenciesDisplayName.SDD=D\u00ednear na S\u00fad\u00e1ine
currenciesDisplayName.IQD=D\u00ednear Ir\u00e1cach
-currenciesDisplayName.TVD=Dollar Tuvalu
currenciesDisplayName.SCR=R\u00faip\u00ed na S\u00e9is\u00e9il
+currenciesDisplayName.VUV=Vatu Vanuat\u00fa
+currenciesDisplayName.DKK=Krone Danmhargach
+currenciesDisplayName.KPW=Won na C\u00f3ir\u00e9 Thuaidh
+currenciesDisplayName.GQE=Ekwele Guineana na Guine Me\u00e1nchriosa\u00ed
+currenciesDisplayName.IDR=Rupiah Indin\u00e9iseach
currenciesDisplayName.LVR=R\u00fabal Laitviach
-currenciesDisplayName.FJP=Punt Fhids\u00ed
+currenciesDisplayName.SOS=Scilling na S\u00f3m\u00e1ile
+currenciesDisplayName.AED=Dirham Aontas na n\u00c9im\u00edr\u00edochta\u00ed Arabacha
+currenciesDisplayName.BWP=Pula Botsu\u00e1nach
currenciesDisplayName.LVL=Lats Laitviach
-currenciesDisplayName.CDL=Zaire an Chong\u00f3
-currenciesDisplayName.CDG=Franc Phoblacht an Chong\u00f3
-currenciesDisplayName.CDF=Franc Congolais an Chong\u00f3
-currenciesDisplayName.FJD=Dollar Fhids\u00ed
+currenciesDisplayName.RUR=R\u00fabal R\u00faiseach (1991-1998)
currenciesDisplayName.NIO=Cordoba Oro Nicearagua
+currenciesDisplayName.ADP=Peseta And\u00f3ra
+currenciesDisplayName.FJD=Dollar Fhids\u00ed
currenciesDisplayName.MOP=Pataca Macao
-currenciesDisplayName.NIG=Cordoba \u00d3r Nicearagua
+currenciesDisplayName.RUB=R\u00fabal R\u00faiseach
+currenciesDisplayName.CDF=Franc Congolais an Chong\u00f3
currenciesDisplayName.NIC=Cordoba Nicearagua
-currenciesDisplayName.XTR=R\u00fabal Inaistrithe COMECON
-currenciesDisplayName.FIN=Markka Fionnlannach (1860-1962)
-currenciesDisplayName.FIM=Markka Fionnlannach
+currenciesDisplayName.DJF=Franc Djibouti
+currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) Eacuad\u00f3ir
currenciesDisplayName.SBD=Dollar Oile\u00e1in Solomon
+currenciesDisplayName.UZS=Sum na h\u00daisb\u00e9iceast\u00e1ine
+currenciesDisplayName.ECS=Sucre Eacuad\u00f3ir
+currenciesDisplayName.PHP=Peso Filip\u00edneach
+currenciesDisplayName.THB=Baht na T\u00e9alainne
currenciesDisplayName.LUF=Franc Lucsamburg
-currenciesDisplayName.TTO=Sean-Dollar Oile\u00e1in na Tr\u00edon\u00f3ide agus Tob\u00e1ga
-currenciesDisplayName.AOS=Escudo Ang\u00f3lach
-currenciesDisplayName.AOR=Kwanza Reajustado Ang\u00f3lach (1995-1999)
-currenciesDisplayName.MNT=Tugrik Mong\u00f3lach
-currenciesDisplayName.HUF=Forint Ung\u00e1rach
-currenciesDisplayName.BIF=Franc na Bur\u00faine
-currenciesDisplayName.AON=Kwanza Nua Ang\u00f3lach (1990-2000)
-currenciesDisplayName.AOK=Kwanza Ang\u00f3lach (1977-1990)
+currenciesDisplayName.FIM=Markka Fionnlannach
currenciesDisplayName.TTD=Dollar Oile\u00e1in na Tr\u00edon\u00f3ide agus Tob\u00e1ga
currenciesDisplayName.SZL=Lilangeni na Suasalainne
-currenciesDisplayName.NHF=CFP Franc Nua-Inse Ghall
-currenciesDisplayName.GBP=Punt Steirling
+currenciesDisplayName.MNT=Tugrik Mong\u00f3lach
currenciesDisplayName.SAR=Riyal S\u00e1dach
+currenciesDisplayName.UAK=Karbovanetz \u00dacr\u00e1nach
+currenciesDisplayName.UAH=Hryvnia \u00dacr\u00e1nach
+currenciesDisplayName.HUF=Forint Ung\u00e1rach
+currenciesDisplayName.COP=Peso na Col\u00f3ime
+currenciesDisplayName.QAR=Rial Catarach
currenciesDisplayName.LTT=Talonas Liotu\u00e1nach
-currenciesDisplayName.INR=R\u00faip\u00ed India
currenciesDisplayName.PTE=Escudo Portaing\u00e9lach
-currenciesDisplayName.AOA=Kwanza Ang\u00f3lach
-currenciesDisplayName.PTC=Conto Portaing\u00e9alach
+currenciesDisplayName.AOR=Kwanza Reajustado Ang\u00f3lach (1995-1999)
+currenciesDisplayName.UYU=Peso Uruguayo Uragua
+currenciesDisplayName.GBP=Punt Steirling
+currenciesDisplayName.BIF=Franc na Bur\u00faine
+currenciesDisplayName.INR=R\u00faip\u00ed India
+currenciesDisplayName.ZRZ=Zaire S\u00e1\u00edreach
+currenciesDisplayName.AON=Kwanza Nua Ang\u00f3lach (1990-2000)
currenciesDisplayName.LTL=Lita Liotu\u00e1nach
+currenciesDisplayName.XFU=UIC-Franc Francach
currenciesDisplayName.KZT=Tenge Casacst\u00e1nach
-currenciesDisplayName.KZR=R\u00fabal Casacst\u00e1nach
-currenciesDisplayName.VGD=Dollar Oile\u00e1in Bhriotanacha na Maighdean
-currenciesDisplayName.NGP=Punt N\u00edg\u00e9arach
-currenciesDisplayName.MMX=Teastais Airgeadra Dollar Mhaenmar
+currenciesDisplayName.MZM=Metical M\u00f3saimb\u00edce
+currenciesDisplayName.UYP=Peso Uragua (1975-1993)
+currenciesDisplayName.AOK=Kwanza Ang\u00f3lach (1977-1990)
+currenciesDisplayName.BUK=Kyat Burmach
+currenciesDisplayName.GNS=Syli Guine
+currenciesDisplayName.XFO=Franc \u00d3r Francach
+currenciesDisplayName.PGK=Kina Nua-Ghuine Phapua
+currenciesDisplayName.SYP=Punt Siria
+currenciesDisplayName.MZE=Escudo M\u00f3saimb\u00edce
+currenciesDisplayName.OMR=Rial Omain
currenciesDisplayName.NGN=Naira N\u00edg\u00e9arach
+currenciesDisplayName.ZRN=Zaire Nua S\u00e1\u00edreach
+currenciesDisplayName.AOA=Kwanza Ang\u00f3lach
+currenciesDisplayName.CNY=Yuan Renminbi S\u00edneach
+currenciesDisplayName.MAF=Franc Mharac\u00f3
+currenciesDisplayName.GNF=Franc Guine
currenciesDisplayName.HTG=Gourde H\u00e1it\u00ed
-currenciesDisplayName.SYP=Punt Siria
-currenciesDisplayName.PSP=Punt Pailist\u00edneach
-currenciesDisplayName.BHD=D\u00ednear na Bair\u00e9ine
+currenciesDisplayName.MAD=Dirham Mharac\u00f3
currenciesDisplayName.MMK=Kyat Mhaenmar
+currenciesDisplayName.MYR=Ringgit Malaeisia
+currenciesDisplayName.LSL=Loti Leos\u00f3ta
+currenciesDisplayName.XEU=Aonad Airgeadra Eorpach
+currenciesDisplayName.BHD=D\u00ednear na Bair\u00e9ine
+currenciesDisplayName.SLL=Leone Shiarra Leon
+currenciesDisplayName.BTN=Ngultrum B\u00fat\u00e1nach
+currenciesDisplayName.TRL=Lira Turcach
+currenciesDisplayName.KMF=Franc Chom\u00f3ra
currenciesDisplayName.ANG=Guilder na nAntill\u00ed \u00cdsilt\u00edreach
currenciesDisplayName.CZK=Koruna Phoblacht na Seice
-currenciesDisplayName.IMP=Punt Steirling Oile\u00e1n Mhanann
-currenciesDisplayName.BGX=Teastais Airgeadra\u00ed Lev Bulg\u00e1rach
-currenciesDisplayName.LSL=Loti Leos\u00f3ta
-currenciesDisplayName.GAF=CFA Franc na Gab\u00faine
-currenciesDisplayName.BGO=Lev Bulg\u00e1rach (1879-1952)
+currenciesDisplayName.AZM=Manat Asarbaise\u00e1nach
+currenciesDisplayName.KYD=Dollar Oile\u00e1in Cayman
+currenciesDisplayName.GMD=Dalasi Gaimbia
currenciesDisplayName.BGN=Lev Nua Bulg\u00e1rach
-currenciesDisplayName.BGM=Lev Bulg\u00e1rach S\u00f3isiala\u00edoch
currenciesDisplayName.CAD=Dollar Ceanada
+currenciesDisplayName.MXV=Unidad de Inversion (UDI) Meicsiceo
currenciesDisplayName.BGL=Lev Bulg\u00e1rach Crua
-currenciesDisplayName.TRL=Lira Turcach
-currenciesDisplayName.KYD=Dollar Oile\u00e1in Cayman
-currenciesDisplayName.CYP=Punt na Cipire
+currenciesDisplayName.VEB=Bolivar Veinis\u00e9ala
+currenciesDisplayName.MLF=Franc Mhail\u00ed
currenciesDisplayName.ILS=Sheqel Nua Iosraelach
+currenciesDisplayName.MXP=Peso Airgid Meicsiceo (1861-1992)
+currenciesDisplayName.PES=Sol Pheiri\u00fa
currenciesDisplayName.GYD=Dollar na Gu\u00e1ine
-currenciesDisplayName.AMD=Dram Airm\u00e9anach
+currenciesDisplayName.MXN=Peso Meicsiceo
currenciesDisplayName.ILP=Punt Iosraelach
-currenciesDisplayName.MLF=Franc Mhail\u00ed
-currenciesDisplayName.ILL=Sheqel Iosraelach
-currenciesDisplayName.VEB=Bolivar Veinis\u00e9ala
-currenciesDisplayName.ALX=Teastais Airgeadra\u00ed Dollar na hAlb\u00e1ine
+currenciesDisplayName.SKK=Koruna na Sl\u00f3vaice
+currenciesDisplayName.CYP=Punt na Cipire
+currenciesDisplayName.XDR=Cearta Speisialta Tarraingthe
+currenciesDisplayName.PEN=Sol Nuevo Pheiri\u00fa
currenciesDisplayName.LRD=Dollar na Lib\u00e9ire
-currenciesDisplayName.ALV=Lek Valute Alb\u00e1nach
+currenciesDisplayName.PEI=Inti Pheiri\u00fa
+currenciesDisplayName.AMD=Dram Airm\u00e9anach
+currenciesDisplayName.BSD=Dollar na mBah\u00e1ma\u00ed
currenciesDisplayName.HRK=Kuna Cr\u00f3tach
-currenciesDisplayName.REF=Franc R\u00e9union
+currenciesDisplayName.CLP=Peso na Sile
currenciesDisplayName.HRD=D\u00ednear na Cr\u00f3ite
-currenciesDisplayName.ALL=Lek Alb\u00e1nach
-currenciesDisplayName.JEP=Punt Steirling Gheirs\u00ed
-currenciesDisplayName.ALK=Lek Alb\u00e1nach (1946-1961)
-currenciesDisplayName.MKN=Denar na Macad\u00f3ine (1992-1993)
-currenciesDisplayName.VDP=Viet Minh Piastre Dong Viet V\u00edtneam Thuaidh
-currenciesDisplayName.VDN=Dong Nua V\u00edtneam Thuaidh
-currenciesDisplayName.MKD=Denar na Macad\u00f3ine
-currenciesDisplayName.VDD=Piastre Dong Viet V\u00edtneam Thuaidh
-currenciesDisplayName.TPP=Pataca T\u00edom\u00f3ir
currenciesDisplayName.XPF=CFP Franc
-currenciesDisplayName.BEL=Franc Beilgeach (airgead\u00fail)
-currenciesDisplayName.GWP=Peso Guine-Bhissau
-currenciesDisplayName.KWD=D\u00ednear Cu\u00e1tach
-currenciesDisplayName.GWM=Mil Reis na Guine Portaing\u00e9ala\u00ed
-currenciesDisplayName.BEF=Franc Beilgeach
+currenciesDisplayName.FRF=Franc Francach
+currenciesDisplayName.BRR=Cruzeiro Brasa\u00edleach
+currenciesDisplayName.MKD=Denar na Macad\u00f3ine
+currenciesDisplayName.CLF=Unidades de Fomento na Sile
+currenciesDisplayName.ALL=Lek Alb\u00e1nach
+currenciesDisplayName.BRN=Cruzado Novo Brasa\u00edleach
+currenciesDisplayName.MWK=Kwacha na Mal\u00e1ive
+currenciesDisplayName.BRL=Real Brasa\u00edleach
currenciesDisplayName.TPE=Escudo T\u00edom\u00f3ir
-currenciesDisplayName.BEC=Franc Beilgeach (inathraithe)
-currenciesDisplayName.GWE=Escudo na Guine Portaing\u00e9ala\u00ed
+currenciesDisplayName.BRE=Cruzeiro Brasa\u00edleach (1990-1993)
+currenciesDisplayName.BRC=Cruzado Brasa\u00edleach
+currenciesDisplayName.BRB=Cruzeiro Novo Brasa\u00edleach (1967-1986)
+currenciesDisplayName.DEM=Deutsche Mark
+currenciesDisplayName.KWD=D\u00ednear Cu\u00e1tach
+currenciesDisplayName.XCD=Dollar Oirthear na Cairibe
+currenciesDisplayName.NPR=R\u00faip\u00ed Neipe\u00e1il
+currenciesDisplayName.GWP=Peso Guine-Bhissau
+currenciesDisplayName.YUN=D\u00ednear Inathraithe I\u00fagslavach
currenciesDisplayName.SVC=Colon na Salvad\u00f3ire
-currenciesDisplayName.CWG=Guilder Curacao
-currenciesDisplayName.BDT=Taka Bhanglaid\u00e9iseach
-currenciesDisplayName.TOS=Punt Steirling Tonga
-currenciesDisplayName.TOP=Pa\u02bbanga Tonga
+currenciesDisplayName.YUM=Noviy Dinar I\u00fagslavach
+currenciesDisplayName.BEL=Franc Beilgeach (airgead\u00fail)
+currenciesDisplayName.SIT=Tolar Sl\u00f3v\u00e9nach
+currenciesDisplayName.JPY=Yen Seap\u00e1nach
currenciesDisplayName.XOF=CFA Franc BCEAO
+currenciesDisplayName.MVR=Maldive Islands Rufiyaa
+currenciesDisplayName.GWE=Escudo na Guine Portaing\u00e9ala\u00ed
+currenciesDisplayName.BEF=Franc Beilgeach
+currenciesDisplayName.TOP=Pa\u02bbanga Tonga
+currenciesDisplayName.YUD=D\u00ednear Crua I\u00fagslavach
+currenciesDisplayName.BEC=Franc Beilgeach (inathraithe)
currenciesDisplayName.SUR=R\u00fabal S\u00f3v\u00e9adach
-currenciesDisplayName.SUN=R\u00fabal Nua S\u00f3v\u00e9adach
-currenciesDisplayName.NCF=Franc Germinal na Nua-Chalad\u00f3ine
-currenciesDisplayName.CVE=Escudo na Rinne Verde
-currenciesDisplayName.XNF=CFA Franc na nAntill\u00ed Francach
+currenciesDisplayName.ROL=Leu R\u00f3m\u00e1nach
+currenciesDisplayName.DDM=Ostmark na hOirGhearm\u00e1ine
+currenciesDisplayName.BDT=Taka Bhanglaid\u00e9iseach
+currenciesDisplayName.XBD=Aonad Cuntais Eorpach (XBD)
+currenciesDisplayName.AWG=Guilder Aruba
+currenciesDisplayName.XBC=Aonad Cuntais Eorpach (XBC)
+currenciesDisplayName.XBB=Aonad Airgeada\u00edochta Eorpach
+currenciesDisplayName.XBA=Aonad Ilchodach Eorpach
+currenciesDisplayName.NOK=Krone Ioruach
+currenciesDisplayName.MUR=R\u00faip\u00ed Oile\u00e1n Mhuir\u00eds
currenciesDisplayName.ZAR=Rand na hAfraice Theas
-currenciesDisplayName.DOP=Peso Doimineacach
-currenciesDisplayName.CUX=Teastais Airgeadra\u00ed Ch\u00faba
-currenciesDisplayName.ZAP=Punt na hAfraice Theas
+currenciesDisplayName.SHP=Punt San H\u00e9ilin
+currenciesDisplayName.XAU=\u00d3r
currenciesDisplayName.ZAL=Rand na hAfraice Theas (airgead\u00fail)
+currenciesDisplayName.VND=Dong V\u00edtneamach
+currenciesDisplayName.TZS=Scilling na Tans\u00e1ine
+currenciesDisplayName.GIP=Punt Ghiobr\u00e1ltair
currenciesDisplayName.TND=D\u00ednear na T\u00fain\u00e9ise
-currenciesDisplayName.CUP=Peso C\u00faba
-currenciesDisplayName.GUF=Franc Guiana na Gu\u00e1ine Franca\u00ed
+currenciesDisplayName.CVE=Escudo na Rinne Verde
currenciesDisplayName.UGX=Scilling Uganda
-currenciesDisplayName.LNR=R\u00faip\u00ed na Sioli\u00f3ne
-currenciesDisplayName.AIF=Franc Affars agus Issas
-currenciesDisplayName.VAL=Lira na Vatac\u00e1ine
-currenciesDisplayName.STE=Escudo Sao Tome agus Principe
+currenciesDisplayName.ZMK=Kwacha Saimbiach
+currenciesDisplayName.JOD=D\u00ednear Iord\u00e1nach
+currenciesDisplayName.XAF=CFA Franc BEAC
+currenciesDisplayName.LBP=Punt na Liob\u00e1ine
currenciesDisplayName.UGS=Scilling Uganda (1966-1987)
currenciesDisplayName.STD=Dobra Sao Tome agus Principe
-currenciesDisplayName.MHD=Dollar Oile\u00e1in Marshall
-currenciesDisplayName.NZP=Punt na Nua-Sh\u00e9alainne
currenciesDisplayName.WST=Tala Sam\u00f3 Thiar
-currenciesDisplayName.WSP=Punt Sam\u00f3 Thiar
-currenciesDisplayName.HNL=Lempira Hond\u00farais
-currenciesDisplayName.XMF=Nouveau Franc Ceannchathartha Francach
+currenciesDisplayName.KHR=Riel na Camb\u00f3ide
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Peso Doimineacach
+currenciesDisplayName.BOV=Mvdol Bolavach
+currenciesDisplayName.MTP=Punt Maltach
+currenciesDisplayName.USS=Dollar S.A.M. (an la c\u00e9anna)
+currenciesDisplayName.BOP=Peso na Bolaive
+currenciesDisplayName.MTL=Lira Maltach
+currenciesDisplayName.CUP=Peso C\u00faba
currenciesDisplayName.TMM=Manat na An Tuircm\u00e9anast\u00e1ine
-currenciesDisplayName.GTQ=Quetzal Guatamala
+currenciesDisplayName.USN=Dollar S.A.M. (an ch\u00e9ad l\u00e1 eile)
+currenciesDisplayName.SGD=Dollar Singeap\u00f3ir
currenciesDisplayName.NZD=Dollar na Nua-Sh\u00e9alainne
-currenciesDisplayName.SSP=Punt Albanach
-currenciesDisplayName.BBD=Dollar Bharbad\u00f3is
+currenciesDisplayName.USD=Dollar S.A.M.
+currenciesDisplayName.HNL=Lempira Hond\u00farais
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Lira Iod\u00e1lach
+currenciesDisplayName.PAB=Balboa Panamach
+currenciesDisplayName.GTQ=Quetzal Guatamala
+currenciesDisplayName.LAK=Kip Laosach
+currenciesDisplayName.GHC=Cedi Gh\u00e1na
+currenciesDisplayName.AUD=Dollar Astr\u00e1lach
currenciesDisplayName.NAD=Dollar na Namaibe
+currenciesDisplayName.KGS=Som na Cirgeast\u00e1ine
currenciesDisplayName.MGF=Franc Madagascar
+currenciesDisplayName.CHF=Franc na hEilv\u00e9ise
+currenciesDisplayName.BBD=Dollar Bharbad\u00f3is
currenciesDisplayName.MGA=Ariary Madagascar
-currenciesDisplayName.EGP=Punt na h\u00c9igipte
-currenciesDisplayName.BZH=Dollar Hond\u00farais Bhriotanaigh
+currenciesDisplayName.PYG=Guarani Pharagua
currenciesDisplayName.PLZ=Zloty Polannach (1950-1995)
-currenciesDisplayName.BAN=D\u00ednear Nua Bhoisnia-Heirseagaiv\u00e9in
-currenciesDisplayName.PLX=Teastais Airgeadra Dollar SAM Polannach
-currenciesDisplayName.BAM=Marc Inathraithe Bhoisnia-Heirseagaiv\u00e9in
-currenciesDisplayName.BZD=Dollar na Beil\u00edse
-currenciesDisplayName.BAD=D\u00ednear Bhoisnia-Heirseagaiv\u00e9in
-currenciesDisplayName.PLN=Zloty Polannach
currenciesDisplayName.YER=Rial \u00c9imin
+currenciesDisplayName.ATS=Scilling Ostarach
+currenciesDisplayName.ETB=Birr na hAet\u00f3ipe
+currenciesDisplayName.BND=Dollar Bhr\u00fain\u00e9
+currenciesDisplayName.JMD=Dollar Iam\u00e1cach
+currenciesDisplayName.EGP=Punt na h\u00c9igipte
+currenciesDisplayName.PLN=Zloty Polannach
+currenciesDisplayName.DZD=D\u00ednear na hAilg\u00e9ire
+currenciesDisplayName.ISK=Krona \u00cdoslannach
currenciesDisplayName.SRG=Guilder Shuranaim
-currenciesDisplayName.CSK=Koruna Crua na Seicsl\u00f3vaice
+currenciesDisplayName.LYD=D\u00ednear Libia
+currenciesDisplayName.BZD=Dollar na Beil\u00edse
+currenciesDisplayName.BAM=Marc Inathraithe Bhoisnia-Heirseagaiv\u00e9in
+currenciesDisplayName.ESP=Peseta Sp\u00e1inneach
currenciesDisplayName.KRW=Won na C\u00f3ir\u00e9 Theas
+currenciesDisplayName.NLG=Guilder \u00cdsilt\u00edreach
+currenciesDisplayName.MRO=Ouguiya na Marat\u00e1ine
+currenciesDisplayName.BAD=D\u00ednear Bhoisnia-Heirseagaiv\u00e9in
+currenciesDisplayName.ZWD=Dollar Siomb\u00e1bach
+currenciesDisplayName.SEK=Krona Sualannach
+currenciesDisplayName.CSK=Koruna Crua na Seicsl\u00f3vaice
currenciesDisplayName.BYR=R\u00fabal B\u00e9alar\u00faiseach
-currenciesDisplayName.YEI=Imadi Riyal \u00c9imin
-currenciesDisplayName.BYL=R\u00fabal B\u00e9alar\u00faiseach (1992-1994)
-currenciesDisplayName.CSC=Koruna na Seicsl\u00f3vaice
-currenciesDisplayName.KRO=Sean-Won na C\u00f3ir\u00e9 Theas
-currenciesDisplayName.KRH=Hwan na C\u00f3ir\u00e9 Theas
-currenciesDisplayName.BYB=R\u00fabal Nua B\u00e9alar\u00faiseach (1994-1999)
-currenciesDisplayName.GRN=Drachma Nua Gr\u00e9agach
+currenciesDisplayName.IRR=Rial Iar\u00e1nach
currenciesDisplayName.PKR=R\u00faip\u00ed na Pacast\u00e1ine
-currenciesDisplayName.AFN=Afgain\u00ed
-currenciesDisplayName.ZWD=Dollar Siomb\u00e1bach
-currenciesDisplayName.LKR=R\u00faip\u00ed Sr\u00ed Lanca
-currenciesDisplayName.GRD=Drachma Gr\u00e9agach
-currenciesDisplayName.IEP=Punt \u00c9ireannach
-currenciesDisplayName.AFA=Afgain\u00ed (1927-2002)
-currenciesDisplayName.YDD=D\u00ednear \u00c9imin
-currenciesDisplayName.RWF=Franc Ruanda
-currenciesDisplayName.CRC=Colon Ch\u00f3sta R\u00edce
-currenciesDisplayName.TJS=Somoni na T\u00e1ids\u00edceast\u00e1ine
-currenciesDisplayName.TJR=R\u00fabal na T\u00e1ids\u00edceast\u00e1ine
-currenciesDisplayName.EEK=Kroon na hEast\u00f3ine
-currenciesDisplayName.GQP=Peseta Guineana na Guine Me\u00e1nchriosa\u00ed
-currenciesDisplayName.MDR=R\u00fabal C\u00fap\u00f3in Mold\u00f3vach
-currenciesDisplayName.HKD=Dollar Hong Cong
-currenciesDisplayName.DKK=Krone Danmhargach
-currenciesDisplayName.MDL=Leu Mold\u00f3vach
-currenciesDisplayName.GQF=Franco na Guine Me\u00e1nchriosa\u00ed
-currenciesDisplayName.GQE=Ekwele Guineana na Guine Me\u00e1nchriosa\u00ed
-currenciesDisplayName.IDR=Rupiah Indin\u00e9iseach
-currenciesDisplayName.AED=Dirham Aontas na n\u00c9im\u00edr\u00edochta\u00ed Arabacha
-currenciesDisplayName.KPW=Won na C\u00f3ir\u00e9 Thuaidh
-currenciesDisplayName.IDN=Rupiah Nua Indin\u00e9iseach
-currenciesDisplayName.BWP=Pula Botsu\u00e1nach
-currenciesDisplayName.MDC=Leu C\u00fap\u00f3in Mold\u00f3vach
-currenciesDisplayName.IDJ=Java Rupiah Indin\u00e9iseach
-currenciesDisplayName.KPP=Won Na nDaoine na C\u00f3ir\u00e9 Thuaidh
-currenciesDisplayName.IDG=Nica Guilder Indin\u00e9iseach
-currenciesDisplayName.VUV=Vatu Vanuat\u00fa
-currenciesDisplayName.XID=D\u00ednear Ioslamach
-currenciesDisplayName.SOS=Scilling na S\u00f3m\u00e1ile
-currenciesDisplayName.ADP=Peseta And\u00f3ra
-currenciesDisplayName.RUR=R\u00fabal R\u00faiseach (1991-1998)
-currenciesDisplayName.GPF=Franc Guadeloupe
-currenciesDisplayName.DJF=Franc Djibouti
-currenciesDisplayName.ADD=D\u00ednear And\u00f3ra
-currenciesDisplayName.MCG=Franc Germinal Mhonac\u00f3
-currenciesDisplayName.MCF=Franc Nouveau Mhonac\u00f3
-currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) Eacuad\u00f3ir
-currenciesDisplayName.ECS=Sucre Eacuad\u00f3ir
-currenciesDisplayName.LIF=Franc Lichtinst\u00e9in
-currenciesDisplayName.RUB=R\u00fabal R\u00faiseach
-currenciesDisplayName.PHP=Peso Filip\u00edneach
-currenciesDisplayName.UZS=Sum na h\u00daisb\u00e9iceast\u00e1ine
-currenciesDisplayName.COP=Peso na Col\u00f3ime
-currenciesDisplayName.THB=Baht na T\u00e9alainne
-currenciesDisplayName.IBP=Punt Thuaisceart \u00c9ireann
-currenciesDisplayName.BUR=R\u00faip\u00ed Bhurma
-currenciesDisplayName.COF=CFA Franc Chong\u00f3
-currenciesDisplayName.BUK=Kyat Burmach
-currenciesDisplayName.COB=Peso P\u00e1ip\u00e9ir na Col\u00f3ime
-currenciesDisplayName.UZC=Som C\u00fap\u00f3in na h\u00daisb\u00e9iceast\u00e1ine
-currenciesDisplayName.UAK=Karbovanetz \u00dacr\u00e1nach
-currenciesDisplayName.QAR=Rial Catarach
-currenciesDisplayName.UAH=Hryvnia \u00dacr\u00e1nach
-currenciesDisplayName.GNS=Syli Guine
-currenciesDisplayName.CNY=Yuan Renminbi S\u00edneach
-currenciesDisplayName.MZM=Metical M\u00f3saimb\u00edce
-currenciesDisplayName.CNX=Teastais Airgeadra\u00ed Dollar SAM S\u00edneach
-currenciesDisplayName.UYU=Peso Uruguayo Uragua
-currenciesDisplayName.GNI=Franc Guine (1960-1972)
-currenciesDisplayName.SML=Lira San Marino
-currenciesDisplayName.CNP=Jen Min Piao Yuan S\u00edneach
-currenciesDisplayName.MZE=Escudo M\u00f3saimb\u00edce
-currenciesDisplayName.GNF=Franc Guine
-currenciesDisplayName.OMS=Rial Saidi Omain
-currenciesDisplayName.PGK=Kina Nua-Ghuine Phapua
-currenciesDisplayName.OMR=Rial Omain
-currenciesDisplayName.UYP=Peso Uragua (1975-1993)
-currenciesDisplayName.XFU=UIC-Franc Francach
-currenciesDisplayName.BTR=R\u00faip\u00ed na B\u00fat\u00e1ine
-currenciesDisplayName.ZRZ=Zaire S\u00e1\u00edreach
-currenciesDisplayName.MAF=Franc Mharac\u00f3
-currenciesDisplayName.MAD=Dirham Mharac\u00f3
-currenciesDisplayName.BTN=Ngultrum B\u00fat\u00e1nach
-currenciesDisplayName.XFO=Franc \u00d3r Francach
-currenciesDisplayName.UYF=Peso Fuerte Uragua
-currenciesDisplayName.MYR=Ringgit Malaeisia
-currenciesDisplayName.ZRN=Zaire Nua S\u00e1\u00edreach
-currenciesDisplayName.AZM=Manat Asarbaise\u00e1nach
-currenciesDisplayName.GMP=Punt Gaimbia
-currenciesDisplayName.KMF=Franc Chom\u00f3ra
-currenciesDisplayName.SLL=Leone Shiarra Leon
-currenciesDisplayName.GMD=Dalasi Gaimbia
-currenciesDisplayName.XEU=Aonad Airgeadra Eorpach
-currenciesDisplayName.BSP=Punt na mBah\u00e1ma\u00ed
-currenciesDisplayName.CMF=CFA Franc Chamar\u00fain
-currenciesDisplayName.MXV=Unidad de Inversion (UDI) Meicsiceo
-currenciesDisplayName.XEF=CFA Franc BCEAEC
-currenciesDisplayName.BSD=Dollar na mBah\u00e1ma\u00ed
-currenciesDisplayName.MXP=Peso Airgid Meicsiceo (1861-1992)
-currenciesDisplayName.MXN=Peso Meicsiceo
-currenciesDisplayName.PES=Sol Pheiri\u00fa
-currenciesDisplayName.GLK=Krone na Graonlainne
-currenciesDisplayName.BRZ=Cruzeiro Brasa\u00edleach (1942-1967)
-currenciesDisplayName.PEN=Sol Nuevo Pheiri\u00fa
-currenciesDisplayName.CLP=Peso na Sile
-currenciesDisplayName.SKK=Koruna na Sl\u00f3vaice
-currenciesDisplayName.PEI=Inti Pheiri\u00fa
-currenciesDisplayName.BRR=Cruzeiro Brasa\u00edleach
-currenciesDisplayName.XDR=Cearta Speisialta Tarraingthe
-currenciesDisplayName.FRG=Franc Germinal Francach/Franc Poincare
-currenciesDisplayName.FRF=Franc Francach
-currenciesDisplayName.BRN=Cruzado Novo Brasa\u00edleach
-currenciesDisplayName.CLF=Unidades de Fomento na Sile
-currenciesDisplayName.CLE=Escudo na Sile
-currenciesDisplayName.BRL=Real Brasa\u00edleach
-currenciesDisplayName.CLC=Condor na Sile
-currenciesDisplayName.BRE=Cruzeiro Brasa\u00edleach (1990-1993)
-currenciesDisplayName.DES=Sperrmark Gearm\u00e1nach
-currenciesDisplayName.MWP=Punt na Mal\u00e1ive
-currenciesDisplayName.BRC=Cruzado Brasa\u00edleach
-currenciesDisplayName.BRB=Cruzeiro Novo Brasa\u00edleach (1967-1986)
-currenciesDisplayName.MWK=Kwacha na Mal\u00e1ive
-currenciesDisplayName.PDR=Transdniestria R\u00fabal
-currenciesDisplayName.DEM=Deutsche Mark
-currenciesDisplayName.TDF=CFA Franc Sead
-currenciesDisplayName.PDN=R\u00fabal Nua Transdniestria
-currenciesDisplayName.PDK=R\u00fabal Cup\u00f3in Transdniestria
-currenciesDisplayName.NPR=R\u00faip\u00ed Neipe\u00e1il
-currenciesDisplayName.CKD=Dollar Oile\u00e1in Cook
-currenciesDisplayName.JPY=Yen Seap\u00e1nach
-currenciesDisplayName.MVR=Maldive Islands Rufiyaa
-currenciesDisplayName.XCF=CFA Nouveau Franc
-currenciesDisplayName.MVP=Maldive Islands R\u00faip\u00ed
-currenciesDisplayName.XCD=Dollar Oirthear na Cairibe
-currenciesDisplayName.SIT=Tolar Sl\u00f3v\u00e9nach
-currenciesDisplayName.YUR=D\u00ednear Leasaithe I\u00fagslavach
-currenciesDisplayName.AWG=Guilder Aruba
-currenciesDisplayName.YUO=D\u00ednear Dheireadh F\u00f3mhar I\u00fagslavach
-currenciesDisplayName.DDM=Ostmark na hOirGhearm\u00e1ine
-currenciesDisplayName.YUN=D\u00ednear Inathraithe I\u00fagslavach
-currenciesDisplayName.YUM=Noviy Dinar I\u00fagslavach
-currenciesDisplayName.YUG=D\u00ednear 1994 I\u00fagslavach
-currenciesDisplayName.YUF=D\u00ednear Ch\u00f3naidhm na hI\u00fagslaive
-currenciesDisplayName.RON=Leu Nua R\u00f3m\u00e1nach
-currenciesDisplayName.YUD=D\u00ednear Crua I\u00fagslavach
-currenciesDisplayName.ROL=Leu R\u00f3m\u00e1nach
-currenciesDisplayName.SIB=Tolar Bons Sl\u00f3v\u00e9anach
-currenciesDisplayName.NOK=Krone Ioruach
-currenciesDisplayName.MUR=R\u00faip\u00ed Oile\u00e1n Mhuir\u00eds
-currenciesDisplayName.XBD=Aonad Cuntais Eorpach (XBD)
-currenciesDisplayName.GIP=Punt Ghiobr\u00e1ltair
-currenciesDisplayName.VNS=Dong N\u00e1isi\u00fanta V\u00edtneamach
-currenciesDisplayName.XBC=Aonad Cuntais Eorpach (XBC)
-currenciesDisplayName.VNR=Dong Phoblacht V\u00edtneaim
-currenciesDisplayName.XBB=Aonad Airgeada\u00edochta Eorpach
-currenciesDisplayName.XBA=Aonad Ilchodach Eorpach
-currenciesDisplayName.KID=Dollar Chireabait\u00ed
-currenciesDisplayName.SHP=Punt San H\u00e9ilin
-currenciesDisplayName.VNN=Dong Nua V\u00edtneamach
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=A$
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=CHF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
+currenciesDisplayName.BMD=Dollar Bheirmi\u00fada
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=A\u00cd f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=A$
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=A\u00cd f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=Ean®Feabh®M\u00e1rta®Aib®Beal®Meith®I\u00fail®L\u00fan®MF\u00f3mh®DF\u00f3mh®Samh®Noll®®
months=Ean\u00e1ir®Feabhra®M\u00e1rta®Aibre\u00e1n®Bealtaine®Meitheamh®I\u00fail®L\u00fanasa®Me\u00e1n F\u00f3mhair®Deireadh F\u00f3mhair®Samhain®Nollaig®®
shortWeekdays=®Domh®Luan®M\u00e1irt®C\u00e9ad®D\u00e9ar®Aoine®Sath®
weekdays=®D\u00e9 Domhnaigh®D\u00e9 Luain®D\u00e9 M\u00e1irt®D\u00e9 C\u00e9adaoin®D\u00e9ardaoin®D\u00e9 hAoine®D\u00e9 Sathairn®
eras=RC®AD®
ampms=a.m.®p.m.®
-zoneStrings=Etc/GMT®MAG®Me\u00e1n-Am Greenwich®MAG®Me\u00e1n-Am Greenwich®©Europe/Dublin®MAG®Me\u00e1n-Am Greenwich®AS\u00c9®Am Samhraidh na h\u00c9ireann®©Europe/Belfast®MAG®Me\u00e1n-Am Greenwich®ASB®Am Samhraidh na Breataine®©Europe/London®MAG®Me\u00e1n-Am Greenwich®ASB®Am Samhraidh na Breataine®©
+zoneStrings=Europe/Dublin®MAG®Me\u00e1n-Am Greenwich®AS\u00c9®Am Samhraidh na h\u00c9ireann®©Europe/Belfast®MAG®Me\u00e1n-Am Greenwich®ASB®Am Samhraidh na Breataine®©Europe/London®MAG®Me\u00e1n-Am Greenwich®ASB®Am Samhraidh na Breataine®©
territories.TL=T\u00edom\u00f3r-Leste
territories.TK=T\u00f3cal\u00e1
territories.TJ=An T\u00e1ids\u00edceast\u00e1in
@@ -847,6 +441,7 @@ territories.CX=Oile\u00e1n na Nollag
territories.CV=Rinn Verde
territories.PA=Panama
territories.CU=C\u00faba
+territories.CS=An tSeirbia
territories.CR=C\u00f3sta R\u00edce
territories.CO=An Chol\u00f3im
territories.CN=An tS\u00edn
@@ -917,17 +512,16 @@ territories.AI=Anguilla
territories.MS=Montsarat
territories.MR=An Mharat\u00e1in
territories.AG=Antigua agus Barbuda
-territories.MQ=Martinique
territories.AF=An Afganast\u00e1in
-territories.MP=Oile\u00e1in Mariana Thuaidh
+territories.MQ=Martinique
territories.AE=Aontas na n\u00c9im\u00edr\u00edochta\u00ed Arabacha
-territories.MO=Mac\u00e1\u00f3 (R.R.S. na S\u00edne)
+territories.MP=Oile\u00e1in Mariana Thuaidh
territories.AD=And\u00f3ra
+territories.MO=Mac\u00e1\u00f3 (R.R.S. na S\u00edne)
territories.MN=An Mhong\u00f3il
territories.MM=Maenmar
territories.ML=Mail\u00ed
territories.MK=An Mhacad\u00f3in
-territories.YU=An I\u00fagslaiv
territories.YT=Mayotte
territories.MH=Oile\u00e1in Marshall
territories.MG=Madagascar
@@ -1001,8 +595,8 @@ territories.TM=An Tuircm\u00e9anast\u00e1in
languages.es=Sp\u00e1innis
languages.kw=Cornais
languages.eo=Esperanto
-languages.ks=Caism\u00edris
languages.en=B\u00e9arla
+languages.ks=Caism\u00edris
languages.el=Gr\u00e9igis
languages.qu=Ceatsuais
languages.ko=C\u00f3ir\u00e9is
@@ -1025,8 +619,8 @@ languages.cu=Slavais na hEaglaise
languages.cs=Seicis
languages.cr=Cra\u00edais
languages.iu=Ion\u00faitis
-languages.it=Iod\u00e1ilis
languages.co=Corsaicis
+languages.it=Iod\u00e1ilis
languages.is=\u00cdoslainnais
languages.haw=Hav\u00e1\u00edais
languages.uz=\u00daisb\u00e9icis
@@ -1086,11 +680,11 @@ languages.sr=Seirbis
languages.sq=Alb\u00e1inis
languages.ml=Mail\u00e9alaimis
languages.ab=Abc\u00e1isis
-languages.mk=Macad\u00f3inis
languages.aa=Afar
+languages.mk=Macad\u00f3inis
languages.so=Som\u00e1lais
-languages.mi=Maorais
languages.gd=Gaeilge na hAlban
+languages.mi=Maorais
languages.sm=Sam\u00f3is
languages.sl=Sl\u00f3v\u00e9inis
languages.mg=Malag\u00e1sais
@@ -1105,16 +699,16 @@ languages.sc=Saird\u00ednis
languages.sa=Sanscrait
languages.fr=Fraincis
languages.lv=Laitvis
-languages.lt=Liotu\u00e1inis
languages.fo=Far\u00f3is
+languages.lt=Liotu\u00e1inis
languages.ru=R\u00faisis
-languages.lo=Laosais
languages.fj=Fidsis
+languages.lo=Laosais
languages.fi=Fionnlainnis
languages.ro=Rom\u00e1inis
languages.fa=Peirsis
languages.lb=Leitseabuirgis
languages.la=Laidin
languages.eu=Bascais
-languages.ky=Cirgeasais
languages.et=East\u00f3inis
+languages.ky=Cirgeasais
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez.properties
new file mode 100644
index 0000000..8e841da
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez.properties
@@ -0,0 +1,298 @@
+# LocaleInformation_gez.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
+shortMonths=\u1320\u1210\u1228®\u12a8\u1270\u1270®\u1218\u1308\u1260®\u12a0\u1280\u12d8®\u130d\u1295\u1263®\u1220\u1295\u12e8®\u1210\u1218\u1208®\u1290\u1210\u1230®\u12a8\u1228\u1218®\u1320\u1240\u1218®\u1280\u12f0\u1228®\u1280\u1220\u1220®®
+months=\u1320\u1210\u1228®\u12a8\u1270\u1270®\u1218\u1308\u1260®\u12a0\u1280\u12d8®\u130d\u1295\u1263\u1275®\u1220\u1295\u12e8®\u1210\u1218\u1208®\u1290\u1210\u1230®\u12a8\u1228\u1218®\u1320\u1240\u1218®\u1280\u12f0\u1228®\u1280\u1220\u1220®®
+shortWeekdays=®\u12a5\u1281\u12f5®\u1230\u1291\u12ed®\u1220\u1209\u1235®\u122b\u1265\u12d5®\u1210\u1219\u1235®\u12d3\u122d\u1260®\u1240\u12f3\u121a®
+weekdays=®\u12a5\u1281\u12f5®\u1230\u1291\u12ed®\u1220\u1209\u1235®\u122b\u1265\u12d5®\u1210\u1219\u1235®\u12d3\u122d\u1260®\u1240\u12f3\u121a\u1275®
+firstDayOfWeek=sat
+eras=\u12d3/\u12d3®\u12d3/\u121d®
+ampms=\u133d\u1263\u1215®\u121d\u1234\u1275®
+territories.AU=\u12a0\u12cd\u1235\u1275\u122c\u120a\u12eb
+territories.TD=\u127b\u12f5
+territories.AT=\u12a6\u1235\u1275\u122a\u12eb
+territories.GY=\u1309\u12eb\u1293
+territories.AR=\u12a0\u122d\u1300\u1295\u1272\u1293
+territories.GW=\u1262\u1233\u12ce
+territories.MY=\u121b\u120c\u12e2\u12eb
+territories.MX=\u121c\u12ad\u1232\u12ae
+territories.AN=\u1294\u12d8\u122d\u120b\u1295\u12f5\u1235\u1361\u12a0\u1295\u1272\u120d\u1235
+territories.AM=\u12a0\u122d\u121c\u1292\u12eb
+territories.GR=\u130d\u122a\u12ad
+territories.ZA=\u12f0\u1261\u1265\u1361\u12a0\u134d\u122a\u12ab
+territories.AL=\u12a0\u120d\u1263\u1292\u12eb
+territories.GQ=\u12a2\u12b3\u1276\u122a\u12eb\u120d\u1361\u130a\u1292
+territories.MU=\u121b\u1229\u1238\u1235
+territories.SY=\u1232\u122a\u12eb
+territories.MT=\u121b\u120d\u1273
+territories.GN=\u130a\u1292
+territories.MR=\u121e\u122a\u1274\u1292\u12eb
+territories.GM=\u130b\u121d\u1262\u12eb
+territories.MO=\u121b\u12ab\u12ce
+territories.AE=\u12e8\u1270\u1263\u1260\u1229\u1275\u1361\u12a0\u1228\u1265\u1361\u12a4\u121d\u122c\u1275\u1235
+territories.MN=\u121e\u1295\u130e\u120a\u12eb
+territories.AD=\u12a0\u1295\u12f6\u122b
+territories.MK=\u121b\u12a8\u12f6\u1292\u12eb
+territories.GF=\u12e8\u1348\u1228\u1295\u1233\u12ed\u1361\u1309\u12ca\u12a0\u1293
+territories.SO=\u1231\u121b\u120c
+territories.GE=\u1306\u122d\u1302\u12eb
+territories.SN=\u1234\u1294\u130b\u120d
+territories.GB=\u12a5\u1295\u130d\u120a\u12dd
+territories.SK=\u1235\u120e\u126b\u12aa\u12eb
+territories.SI=\u1235\u120e\u126c\u1292\u12eb
+territories.MD=\u121e\u120d\u12f6\u126b
+territories.SG=\u1232\u1295\u130b\u1356\u122d
+territories.MA=\u121e\u122e\u12ae
+territories.SE=\u1235\u12ca\u12f5\u1295
+territories.SD=\u1231\u12f3\u1295
+territories.SA=\u1233\u12cd\u12f5\u12a0\u1228\u1262\u12eb
+territories.YE=\u12e8\u1218\u1295
+territories.LY=\u120a\u1262\u12eb
+territories.FR=\u1348\u1228\u1295\u1233\u12ed
+territories.LV=\u120b\u1275\u126a\u12eb
+territories.LT=\u120a\u1271\u12cc\u1292\u12eb
+territories.FM=\u121a\u12ad\u122e\u1294\u12e2\u12eb
+territories.RU=\u122b\u123a\u12eb
+territories.FJ=\u134a\u1302
+territories.FI=\u134a\u1295\u120b\u1295\u12f5
+territories.RO=\u122e\u121c\u1292\u12eb
+territories.LB=\u120a\u1263\u1296\u1235
+territories.ET=\u12a2\u1275\u12ee\u1335\u12eb
+territories.ES=\u1235\u1354\u1295
+territories.KW=\u12ad\u12cc\u1275
+territories.ER=\u12a4\u122d\u1275\u122b
+territories.KR=\u1230\u121c\u1295\u1361\u12ae\u122a\u12eb
+territories.KP=\u12f0\u1261\u1265\u1361\u12ae\u122a\u12eb
+territories.EH=\u121d\u12d5\u122b\u1263\u12ca\u1361\u1233\u1205\u122b
+territories.KM=\u12ae\u121e\u122e\u1235
+territories.EG=\u130d\u1265\u133d
+territories.EE=\u12a4\u1235\u1276\u1292\u12eb
+territories.EC=\u12a2\u12b3\u12f6\u122d
+territories.KH=\u12ab\u121d\u1266\u12f2\u12eb
+territories.DZ=\u12a0\u120d\u1304\u122a\u12eb
+territories.DO=\u12f6\u121a\u1292\u12ad\u1361\u122a\u1351\u1265\u120a\u12ad
+territories.DM=\u12f6\u121a\u1292\u12ab
+territories.DK=\u12f4\u1295\u121b\u122d\u12ad
+territories.JP=\u1303\u1353\u1295
+territories.JO=\u1306\u122d\u12f3\u1295
+territories.PR=\u1356\u122d\u1273\u1361\u122a\u12ae
+territories.JM=\u1303\u121b\u12ed\u12ab
+territories.DE=\u1300\u122d\u1218\u1295
+territories.PL=\u1356\u120b\u1295\u12f5
+territories.PG=\u1353\u1351\u12cb\u1361\u1292\u12cd\u1361\u130a\u1292
+territories.PF=\u12e8\u1348\u1228\u1295\u1233\u12ed\u1361\u1356\u120a\u1294\u12e2\u12eb
+territories.PE=\u1354\u1229
+territories.CZ=\u127c\u12ad\u1361\u122a\u1351\u1265\u120a\u12ad
+territories.VI=\u12e8\u12a0\u121c\u122a\u12ab\u1361\u1268\u122d\u1302\u1295\u1361\u12f0\u1234\u1276\u127d
+territories.CY=\u1233\u12ed\u1355\u1228\u1235
+territories.VG=\u12e8\u12a5\u1295\u130d\u120a\u12dd\u1361\u12f5\u1295\u130d\u120d\u1361\u12f0\u1234\u1276\u127d
+territories.CV=\u12ac\u1355\u1361\u126c\u122d\u12f4
+territories.VE=\u126c\u1295\u12d9\u12cc\u120b
+territories.CS=\u1230\u122d\u1262\u12eb
+territories.CO=\u12ae\u120e\u121d\u1262\u12eb
+territories.IT=\u1323\u120a\u12eb\u1295
+territories.CN=\u127b\u12ed\u1293
+territories.IS=\u12a0\u12ed\u1235\u120b\u1295\u12f5
+territories.CM=\u12ab\u121c\u1229\u1295
+territories.CL=\u127a\u120a
+territories.IQ=\u12a2\u122b\u1245
+territories.UZ=\u12e9\u12dd\u1260\u12aa\u1235\u1273\u1295
+territories.IN=\u1205\u1295\u12f5
+territories.CH=\u1235\u12ca\u12d8\u122d\u120b\u1295\u12f5
+territories.IL=\u12a5\u1235\u122b\u12a4\u120d
+territories.CF=\u12e8\u1218\u12ab\u12a8\u1208\u129b\u12cd\u1361\u12a0\u134d\u122a\u12ab\u1361\u122a\u1350\u1265\u120a\u12ad
+territories.US=\u12a0\u121c\u122a\u12ab
+territories.IE=\u12a0\u12e8\u122d\u120b\u1295\u12f5
+territories.ID=\u12a2\u1295\u12f6\u1294\u12e2\u12eb
+territories.BZ=\u1264\u120a\u12d8
+territories.BY=\u1264\u120b\u1229\u1235
+territories.UG=\u12e9\u130b\u1295\u12f3
+territories.BT=\u1261\u1205\u1273\u1295
+territories.BR=\u1265\u122b\u12da\u120d
+territories.NZ=\u1292\u12cd\u1361\u12da\u120b\u1295\u12f5
+territories.HU=\u1200\u1295\u130b\u122a
+territories.BO=\u1266\u120a\u126a\u12eb
+territories.HT=\u1200\u12ed\u1272
+territories.BM=\u1264\u122d\u1219\u12f3
+territories.HR=\u12ad\u122e\u12a4\u123d\u12eb
+territories.TZ=\u1273\u1295\u12db\u1292\u12eb
+territories.BH=\u1263\u1205\u122c\u1295
+territories.BG=\u1261\u120d\u130c\u122a\u12eb
+territories.NP=\u1294\u1353\u120d
+territories.HK=\u1206\u1295\u130d\u1361\u12ae\u1295\u130d
+territories.TT=\u1275\u122a\u1292\u12f3\u12f5\u1361\u12a5\u1293\u1361\u1276\u1263\u130e
+territories.NO=\u1296\u122d\u12cc
+territories.BE=\u1264\u120d\u1304\u121d
+territories.TR=\u1271\u122d\u12ad
+territories.NL=\u1294\u12d8\u122d\u120b\u1295\u12f5
+territories.BB=\u1263\u122d\u1264\u12f6\u1235
+territories.BA=\u1266\u1235\u1292\u12eb\u1361\u12a5\u1293\u1361\u1204\u122d\u12de\u130e\u126a\u1292\u12eb
+territories.TN=\u1271\u1292\u12da\u12eb
+territories.TL=\u121d\u1235\u122b\u1245\u1361\u1272\u121e\u122d
+territories.NG=\u1293\u12ed\u1304\u122a\u12eb
+territories.TJ=\u1273\u1303\u12aa\u1235\u1273\u1295
+territories.AZ=\u12a0\u12d8\u122d\u1263\u1303\u1295
+territories.ZM=\u12db\u121d\u1262\u12eb
+territories.TH=\u1273\u12ed\u120b\u1295\u12f5
+territories.NC=\u1292\u12cd\u1361\u12ab\u120c\u12f6\u1292\u12eb
+territories.TF=\u12e8\u1348\u1228\u1295\u1233\u12ed\u1361\u12f0\u1261\u1263\u12ca\u1361\u130d\u12db\u1276\u127d
+territories.NA=\u1293\u121a\u1262\u12eb
+languages.es=\u1235\u1353\u1292\u123d
+languages.ku=\u12a9\u122d\u12f5\u123d\u129b
+languages.eo=\u12a4\u1235\u1350\u122b\u1295\u1276
+languages.en=\u12a5\u1295\u130d\u120a\u12dd\u129b
+languages.ks=\u12ab\u123d\u121a\u122d\u129b
+languages.el=\u130d\u122a\u12ad\u129b
+languages.qu=\u12b5\u127f\u129b
+languages.ko=\u12ae\u122a\u12eb\u129b
+languages.kn=\u12ab\u1293\u12f3\u129b
+languages.km=\u12ad\u1218\u122d\u129b
+languages.kl=\u12ab\u120b\u120a\u1231\u1275\u129b
+languages.kk=\u12ab\u12db\u12ad\u129b
+languages.wo=\u12ce\u120e\u134d\u129b
+languages.ka=\u130a\u12ee\u122d\u130a\u12eb\u1295
+languages.dz=\u12f5\u12de\u1295\u130d\u12bb\u129b
+languages.jv=\u1303\u126b\u1295\u129b
+languages.pt=\u1356\u122d\u1271\u130b\u120a\u129b
+languages.ps=\u1351\u123d\u1276\u129b
+languages.de=\u1300\u122d\u1218\u1295
+languages.pl=\u1356\u120a\u123d
+languages.da=\u12f4\u1292\u123d
+languages.vo=\u126e\u120b\u1351\u12ad\u129b
+languages.ja=\u1303\u1353\u1295\u129b
+languages.vi=\u126a\u1275\u1293\u121d\u129b
+languages.cy=\u12c8\u120d\u123d
+languages.pa=\u1353\u1295\u1303\u1262\u129b
+languages.cs=\u127c\u12ad\u129b
+languages.iu=\u12a5\u1291\u12ad\u1272\u1271\u1275\u129b
+languages.co=\u12ae\u122d\u1232\u12ab\u129b
+languages.it=\u1323\u120a\u12eb\u1295\u129b
+languages.is=\u12a0\u12ed\u1235\u120b\u1295\u12f5\u129b
+languages.uz=\u12a1\u12dd\u1260\u12ad\u129b
+languages.or=\u12a6\u122a\u12eb\u129b
+languages.ik=\u12a5\u1291\u1352\u12eb\u1245\u129b
+languages.ur=\u12a1\u122d\u12f1\u129b
+languages.om=\u12a6\u122e\u121d\u129b
+languages.ca=\u12ab\u1273\u120b\u1295\u129b
+languages.ie=\u12a5\u1295\u1270\u122d\u120a\u1295\u130d\u12c8
+languages.id=\u12a5\u1295\u12f6\u1292\u1232\u129b
+languages.uk=\u12e9\u12ad\u1228\u1292\u129b
+languages.ia=\u12a2\u1295\u1274\u122d\u120a\u1295\u1313
+languages.oc=\u12a6\u12aa\u1273\u1295\u129b
+languages.ug=\u12a1\u12ca\u130d\u1201\u122d\u129b
+languages.hy=\u12a0\u122d\u1218\u1293\u12ca
+languages.br=\u1265\u122c\u1276\u1295\u129b
+languages.hu=\u1200\u1295\u130b\u122a\u129b
+languages.bo=\u1275\u1260\u1275\u1295\u129b
+languages.bn=\u1260\u1295\u130b\u120a\u129b
+languages.hr=\u12ad\u122e\u123d\u12eb\u1295\u129b
+languages.bi=\u1262\u1235\u120b\u121d\u129b
+languages.tw=\u1275\u12ca\u129b
+languages.bh=\u1262\u1203\u122a
+languages.bg=\u1261\u120d\u130b\u122a\u129b
+languages.tt=\u1273\u1273\u122d\u129b
+languages.no=\u1296\u122d\u12cc\u1302\u12eb\u1295
+languages.be=\u1264\u120b\u122b\u123b\u129b
+languages.ts=\u133e\u1295\u130b\u129b
+languages.hi=\u1210\u1295\u12f5\u129b
+languages.tr=\u1271\u122d\u12ad\u129b
+languages.nl=\u12f0\u127d
+languages.zu=\u12d9\u1209\u129b
+languages.ba=\u1263\u1235\u12aa\u122d\u129b
+languages.to=\u1276\u1295\u130b
+languages.he=\u12d5\u1265\u122b\u1235\u1325
+languages.tn=\u133d\u12cb\u1293\u12ca\u129b
+languages.tl=\u1273\u130b\u120e\u1308\u129b
+languages.tk=\u1271\u122d\u12ad\u1218\u1295\u129b
+languages.ha=\u1203\u12cd\u1233\u129b
+languages.ne=\u1294\u1353\u120a\u129b
+languages.az=\u12a0\u12dc\u122d\u1263\u12ed\u1303\u1295\u129b
+languages.ti=\u1275\u130d\u122d\u129b
+languages.ay=\u12a0\u12eb\u121b\u122d\u129b
+languages.th=\u1273\u12ed\u129b
+languages.tg=\u1273\u1302\u12aa\u129b
+languages.na=\u1293\u12a1\u1229
+languages.te=\u1270\u1209\u1309\u129b
+languages.zh=\u127b\u12ed\u1295\u129b
+languages.as=\u12a0\u1233\u121c\u12db\u12ca
+languages.ar=\u12d0\u122d\u1262\u129b
+languages.ta=\u1273\u121a\u120d\u129b
+languages.gu=\u1309\u1303\u122d\u1272\u129b
+languages.my=\u1261\u122d\u121b\u129b
+languages.am=\u12a0\u121d\u1210\u1228\u129b
+languages.za=\u12e1\u12cb\u1295\u130d\u129b
+languages.mt=\u121b\u120d\u1272\u1235\u129b
+languages.ms=\u121b\u120b\u12ed\u129b
+languages.gn=\u1313\u122b\u1292\u129b
+languages.byn=\u1265\u120a\u1295
+languages.sw=\u1235\u12cb\u1202\u120a\u129b
+languages.mr=\u121b\u122b\u12da\u129b
+languages.sv=\u1235\u12ca\u12f5\u1295\u129b
+languages.gl=\u130b\u1208\u130b\u129b
+languages.su=\u1231\u12f3\u1295\u129b
+languages.af=\u12a0\u134d\u122a\u1243\u1295\u1235\u129b
+languages.st=\u1236\u12de\u129b
+languages.mo=\u121e\u120d\u12f3\u126b\u12ca\u1293
+languages.ss=\u1235\u12cb\u1272\u129b
+languages.mn=\u121e\u1295\u130e\u120b\u12ca\u129b
+languages.gez=\u130d\u12d5\u12dd\u129b
+languages.sr=\u1230\u122d\u1262\u129b
+languages.sq=\u120d\u1264\u1292\u129b
+languages.ml=\u121b\u120b\u12eb\u120b\u121d\u129b
+languages.ab=\u12a0\u1265\u1210\u12da\u129b
+languages.mk=\u121b\u12a8\u12f6\u1292\u129b
+languages.aa=\u12a0\u134b\u122d\u129b
+languages.so=\u1231\u121b\u120d\u129b
+languages.sn=\u123e\u1293\u129b
+languages.mi=\u121b\u12ee\u122a\u129b
+languages.gd=\u12a5\u1235\u12ae\u1275\u1235\u1361\u130c\u120d\u12ad\u129b
+languages.sm=\u1233\u121e\u12a0\u129b
+languages.sl=\u1235\u120e\u126a\u129b
+languages.mg=\u121b\u120b\u130b\u1235\u129b
+languages.tig=\u1275\u130d\u1228
+languages.sk=\u1235\u120e\u126b\u12ad\u129b
+languages.ga=\u12a0\u12ed\u122a\u123d
+languages.yo=\u12ee\u1229\u1263\u12ca\u129b
+languages.si=\u1235\u1295\u1203\u120d\u129b
+languages.sg=\u1233\u1295\u130e\u129b
+languages.yi=\u12ed\u12f2\u123b\u12ca\u129b
+languages.sd=\u1232\u1295\u12f5\u1202\u129b
+languages.fy=\u134d\u122a\u1235\u129b
+languages.sid=\u1232\u12f3\u121d\u129b
+languages.sa=\u1233\u1295\u1235\u12ad\u122a\u1275\u129b
+languages.fr=\u1348\u1228\u1295\u1233\u12ed\u129b
+languages.lv=\u120b\u1275\u126a\u12eb\u1295
+languages.fo=\u134b\u122e\u129b
+languages.lt=\u120a\u1271\u12a0\u1292\u12eb\u1295
+languages.rw=\u12aa\u1295\u12eb\u122d\u12cb\u1295\u12f5\u129b
+languages.ru=\u122b\u123d\u129b
+languages.fj=\u134a\u1302\u129b
+languages.lo=\u120b\u12cd\u1235\u129b
+languages.fi=\u134a\u1292\u123d
+languages.ln=\u120a\u1295\u130b\u120b\u129b
+languages.ro=\u122e\u121b\u1292\u12eb\u1295
+languages.rn=\u1229\u1295\u12f2\u129b
+languages.rm=\u122e\u121b\u1295\u1235
+languages.fa=\u1350\u122d\u1232\u12eb\u129b
+languages.la=\u120b\u1272\u1295\u129b
+languages.xh=\u12de\u1233\u129b
+languages.eu=\u1263\u1235\u12ad\u129b
+languages.et=\u12a4\u1235\u1276\u1292\u12a0\u1295
+languages.ky=\u12aa\u122d\u130a\u12dd\u129b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ER.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ER.properties
new file mode 100644
index 0000000..b522e0b
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ER.properties
@@ -0,0 +1,19 @@
+# LocaleInformation_gez_ER.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+groupingSeparator=\u12c8
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
+currenciesSymbol.ERN=$
+currenciesSymbol.USD=US$
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE\u1365 dd MMMM \u1218\u12d3\u120d\u1275 yyyy G
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ET.properties
new file mode 100644
index 0000000..dbcace9
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gez_ET.properties
@@ -0,0 +1,18 @@
+# LocaleInformation_gez_ET.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+groupingSeparator=\u12c8
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
+currenciesSymbol.USD=US$
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE\u1365 dd MMMM \u1218\u12d3\u120d\u1275 yyyy G
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gl.properties
index 3fff31d..a0b7006 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gl.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.ESP=ESP
currenciesSymbol.ESP=\u20a7
shortMonths=Xan®Feb®Mar®Abr®Mai®Xu\u00f1®Xul®Ago®Set®Out®Nov®Dec®®
months=Xaneiro®Febreiro®Marzo®Abril®Maio®Xu\u00f1o®Xullo®Agosto®Setembro®Outubro®Novembro®Decembro®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu.properties
index b8c09a3..8627e5c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu.properties
@@ -14,12 +14,12 @@ weekdays=®\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0®\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0
ampms=\u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u00a0\u0aae\u0aa7\u0acd\u0aaf\u0abe\u0ab9\u0acd\u0aa8®\u0a89\u0aa4\u0acd\u0aa4\u0ab0\u00a0\u0aae\u0aa7\u0acd\u0aaf\u0abe\u0ab9\u0acd\u0aa8®
territories.TR=\u0aa4\u0ac1\u0ab0\u0acd\u0a95\u0ab8\u0acd\u0aa4\u0abe\u0aa8
territories.IN=\u0aad\u0abe\u0ab0\u0aa4
-territories.CN=\u0a9a\u0ac0\u0aa8
territories.GE=\u0a9c\u0acd\u0aaf\u0acb\u0ab0\u0acd\u0a9c\u0ac0\u0aaf\u0abe
+territories.CN=\u0a9a\u0ac0\u0aa8
territories.DE=\u0a9c\u0aae\u0abf\u0aa8\u0ac0
territories.NP=\u0aa8\u0ac7\u0aaa\u0abe\u0ab3
territories.TM=\u0aa4\u0ac1\u0ab0\u0acd\u0a95\u0acd\u0aae\u0aa8\u0abf\u0ab8\u0acd\u0aa4\u0abe\u0aa8
territories.US=\u0ab8\u0a82\u0aaf\u0ac1\u0a95\u0aa4 \u0ab0\u0abe\u0a9c\u0acd\u0aaf \u0a85\u0aae\u0ac7\u0ab0\u0abf\u0a95\u0abe
-territories.EG=\u0aae\u0abf\u0ab8\u0ab0
territories.PK=\u0a95\u0ab0\u0abe\u0a82\u0a9a\u0ac0
+territories.EG=\u0aae\u0abf\u0ab8\u0ab0
languages.gu=\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu_IN.properties
index d5e24e6..7d93216 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_gu_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-MM-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw.properties
new file mode 100644
index 0000000..ab0beb6
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw.properties
@@ -0,0 +1,32 @@
+# LocaleInformation_haw.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+shortMonths=Ian.®Pep.®Mal.®\u02bbAp.®Mei®Iun.®Iul.®\u02bbAu.®Kep.®\u02bbOk.®Now.®Kek.®®
+months=Ianuali®Pepeluali®Malaki®\u02bbApelila®Mei®Iune®Iulai®\u02bbAukake®Kepakemapa®\u02bbOkakopa®Nowemapa®Kekemapa®®
+shortWeekdays=®LP®P1®P2®P3®P4®P5®P6®
+weekdays=®L\u0101pule®Po\u02bbakahi®Po\u02bbalua®Po\u02bbakolu®Po\u02bbah\u0101®Po\u02bbalima®Po\u02bbaono®
+territories.IT=\u02bb\u012ak\u0101lia
+territories.FR=Palani
+territories.RU=L\u016bkia
+territories.CN=Kina
+territories.US=\u02bbAmelika Hui P\u016b \u02bbIa
+territories.IN=\u02bb\u012ania
+territories.IL=\u02bbIsera\u02bbela
+territories.AU=N\u016bh\u014dlani
+territories.MX=Mekiko
+territories.IE=\u02bbIlelani
+territories.CA=Kanak\u0101
+territories.GR=Helene
+territories.JP=I\u0101pana
+territories.DK=Kenemaka
+territories.NZ=Aotearoa
+territories.DE=Kelem\u0101nia
+territories.PH=\u02bb\u0100ina Pilipino
+territories.ES=Kepania
+territories.GB=Aupuni M\u014d\u02bb\u012b Hui P\u016b \u02bbIa
+territories.NL=H\u014dlani
+languages.haw=\u02bb\u014dlelo Hawai\u02bbi
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw_US.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw_US.properties
new file mode 100644
index 0000000..c3299cf
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_haw_US.properties
@@ -0,0 +1,16 @@
+# LocaleInformation_haw_US.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=\u00a4#,##0.00;(\u00a4#,##0.00)
+shortDateFormat=d/M/yy
+mediumDateFormat=d MMM yyyy
+longDateFormat=d MMMM yyyy
+fullDateFormat=EEEE, d MMMM yyyy
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a z
+fullTimeFormat=h:mm:ss a z
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_he.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_he.properties
index afdc955..4195ce2 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_he.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_he.properties
@@ -6,7 +6,16 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
+currenciesDisplayName.INR=\u05e8\u05d5\u05e4\u05d9 \u05d4\u05d5\u05d3\u05d9\u05ea
+currenciesDisplayName.RUB=\u05e8\u05d5\u05d1\u05dc
+currenciesDisplayName.JPY=\u05d9\u05df
+currenciesDisplayName.BRL=\u05e8\u05d9\u05d0\u05dc \u05d1\u05e8\u05d6\u05d9\u05dc\u05d0\u05d9
+currenciesDisplayName.CNY=\u05d9\u05d5\u05d0\u05df
+currenciesDisplayName.USD=\u05d3\u05d5\u05dc\u05e8 \u05d0\u05de\u05e8\u05d9\u05e7\u05d0\u05d9
currenciesDisplayName.ILS=\u05e9\"\u05d7
+currenciesDisplayName.EUR=\u05d9\u05d5\u05e8\u05d5
+currenciesDisplayName.TRY=\u05dc\u05d9\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e7\u05d9\u05ea \u05d7\u05d3\u05e9\u05d4
+currenciesDisplayName.GBP=\u05dc\u05d9\u05e8\u05d4 \u05e9\u05d8\u05e8\u05dc\u05d9\u05e0\u05d2
currenciesSymbol.ILS=\u20aa
shortMonths=\u05d9\u05e0\u05d5®\u05e4\u05d1\u05e8®\u05de\u05e8\u05e5®\u05d0\u05e4\u05e8®\u05de\u05d0\u05d9®\u05d9\u05d5\u05e0®\u05d9\u05d5\u05dc®\u05d0\u05d5\u05d2®\u05e1\u05e4\u05d8®\u05d0\u05d5\u05e7®\u05e0\u05d5\u05d1®\u05d3\u05e6\u05de®®
months=\u05d9\u05e0\u05d5\u05d0\u05e8®\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8®\u05de\u05e8\u05e5®\u05d0\u05e4\u05e8\u05d9\u05dc®\u05de\u05d0\u05d9®\u05d9\u05d5\u05e0\u05d9®\u05d9\u05d5\u05dc\u05d9®\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8®\u05e1\u05e4\u05d8\u05de\u05d1\u05e8®\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8®\u05e0\u05d5\u05d1\u05de\u05d1\u05e8®\u05d3\u05e6\u05de\u05d1\u05e8®®
@@ -17,229 +26,258 @@ shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MM/yyyy
longDateFormat=d MMMM yyyy
fullDateFormat=EEEE d MMMM yyyy
-territories.TL=\u05de\u05d6\u05e8\u05d7 \u05d8\u05d9\u05de\u05d5\u05e8
+territories.TL=\u05d8\u05d9\u05de\u05d5\u05e8 \u05d4\u05de\u05d6\u05e8\u05d7\u05d9\u05ea
territories.TK=\u05d8\u05d5\u05e7\u05dc\u05d0\u05d5
-territories.TJ=\u05d8\u05d2\u05f3\u05d9\u05e7\u05d9\u05e1\u05d8\u05df
-territories.TH=\u05ea\u05d0\u05d9\u05dc\u05e0\u05d3
+territories.TJ=\u05d8\u05d2\u05f3\u05d9\u05e7\u05d9\u05e1\u05d8\u05d0\u05df
+territories.TH=\u05ea\u05d0\u05d9\u05d9\u05dc\u05e0\u05d3
territories.TG=\u05d8\u05d5\u05d2\u05d5
territories.TF=\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d5\u05ea \u05d3\u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e9\u05dc \u05e6\u05e8\u05e4\u05ea
territories.GY=\u05d2\u05d9\u05d0\u05e0\u05d4
territories.TD=\u05e6\u05f3\u05d0\u05d3
-territories.TC=\u05d0\u05d9\u05d9 \u05d8\u05d5\u05e8\u05e7\u05e1 \u05d5\u05e7\u05d0\u05d9\u05e7\u05d5\u05e1
+territories.TC=\u05d8\u05e8\u05e7\u05e1 \u05d5\u05e7\u05d9\u05d9\u05e7\u05d5\u05e1, \u05d0\u05d9\u05d9
territories.GW=\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4-\u05d1\u05d9\u05e1\u05d0\u05d5
territories.GU=\u05d2\u05d5\u05d0\u05dd
-territories.GT=\u05d2\u05d5\u05d5\u05d8\u05de\u05d0\u05dc\u05d4
-territories.GS=\u05d4\u05d0\u05d9 \u05d2\u05f3\u05d5\u05e8\u05d2\u05f3\u05d9\u05d4 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05ea \u05d5\u05d0\u05d9\u05d9 \u05e1\u05e0\u05d3\u05d5\u05d5\u05d9\u05e5\u05f3 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05d9\u05dd
+territories.GT=\u05d2\u05d5\u05d5\u05d0\u05d8\u05de\u05d0\u05dc\u05d4
+territories.GS=\u05d2\u05f3\u05d5\u05e8\u05d2\u05f3\u05d9\u05d4 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05ea \u05d5\u05d0\u05d9\u05d9 \u05e1\u05e0\u05d3\u05d5\u05d5\u05d9\u05e5\u05f3 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05d9\u05dd
territories.GR=\u05d9\u05d5\u05d5\u05df
territories.GQ=\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05de\u05e9\u05d5\u05d5\u05e0\u05d9\u05ea
territories.GP=\u05d2\u05d5\u05d5\u05d0\u05d3\u05dc\u05d5\u05e4
-territories.SZ=\u05e1\u05d5\u05d5\u05d6\u05d9\u05dc\u05e0\u05d3
-territories.SY=\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e2\u05e8\u05d1\u05d9\u05ea \u05d4\u05e1\u05d5\u05e8\u05d9\u05ea
+territories.SZ=\u05e1\u05d5\u05d5\u05d0\u05d6\u05d9\u05dc\u05e0\u05d3
+territories.SY=\u05e1\u05d5\u05e8\u05d9\u05d4
territories.GN=\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4
territories.GM=\u05d2\u05de\u05d1\u05d9\u05d4
-territories.GL=\u05d2\u05e8\u05d9\u05e0\u05dc\u05e0\u05d3
-territories.SV=\u05d0\u05dc \u05e1\u05dc\u05d1\u05d0\u05d3\u05d5\u05e8
-territories.ST=\u05e1\u05df \u05ea\u05d5\u05de\u05d4 \u05d5\u05e4\u05e8\u05d9\u05e0\u05e1\u05d9\u05e4\u05d4
+territories.GL=\u05d2\u05e8\u05e0\u05dc\u05e0\u05d3
+territories.SV=\u05d0\u05dc \u05e1\u05dc\u05d5\u05d5\u05d0\u05d3\u05d5\u05e8
+territories.062=\u05d3\u05e8\u05d5\u05dd-\u05de\u05e8\u05db\u05d6 \u05d0\u05e1\u05d9\u05d4
+territories.ST=\u05e1\u05d0\u05d5 \u05d8\u05d5\u05de\u05d4 \u05d5\u05e4\u05e8\u05d9\u05e0\u05e1\u05d9\u05e4\u05d4
+territories.061=\u05e4\u05d5\u05dc\u05d9\u05e0\u05d6\u05d9\u05d4
territories.GI=\u05d2\u05d9\u05d1\u05e8\u05dc\u05d8\u05e8
territories.GH=\u05d2\u05d0\u05e0\u05d4
territories.SR=\u05e1\u05d5\u05e8\u05d9\u05e0\u05d0\u05dd
territories.GF=\u05d2\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea
territories.GE=\u05d2\u05e8\u05d5\u05d6\u05d9\u05d4
-territories.SO=\u05e1\u05d5\u05de\u05dc\u05d9\u05d4
-territories.GD=\u05d2\u05e8\u05e0\u05d3\u05d4
-territories.SN=\u05e1\u05e0\u05d2\u05dc
-territories.SM=\u05e1\u05df \u05de\u05e8\u05d9\u05e0\u05d5
+territories.SO=\u05e1\u05d5\u05de\u05d0\u05dc\u05d9\u05d4
+territories.GD=\u05d2\u05e8\u05e0\u05d0\u05d3\u05d4
+territories.SN=\u05e1\u05e0\u05d2\u05d0\u05dc
+territories.SM=\u05e1\u05d0\u05df \u05de\u05d0\u05e8\u05d9\u05e0\u05d5
territories.GB=\u05d1\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4
territories.SL=\u05e1\u05d9\u05d9\u05e8\u05d4 \u05dc\u05d0\u05d5\u05e0\u05d4
-territories.GA=\u05d2\u05d1\u05d5\u05df
+territories.GA=\u05d2\u05d0\u05d1\u05d5\u05df
territories.SK=\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05d4
-territories.SJ=\u05e1\u05d5\u05d5\u05dc\u05d1\u05d0\u05e8\u05d3 \u05d5\u05d6\u05f3\u05d0\u05df \u05de\u05d0\u05d9\u05d9\u05df
+territories.SJ=\u05e1\u05d5\u05d5\u05d0\u05dc\u05d1\u05e8\u05d3 \u05d5\u05d9\u05d0\u05df \u05de\u05d0\u05d9\u05d9\u05df
territories.SI=\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05d4
-territories.SH=\u05e1\u05d9\u05d9\u05e0\u05d8 \u05d4\u05dc\u05e0\u05d4
+territories.SH=\u05e1\u05e0\u05d8 \u05d4\u05dc\u05e0\u05d4
territories.SG=\u05e1\u05d9\u05e0\u05d2\u05e4\u05d5\u05e8
territories.SE=\u05e9\u05d5\u05d5\u05d3\u05d9\u05d4
-territories.SD=\u05e1\u05d5\u05d3\u05df
-territories.SC=\u05d0\u05d9\u05d9 \u05e1\u05d9\u05d9\u05e9\u05dc
-territories.SB=\u05d0\u05d9\u05d9 \u05e9\u05dc\u05de\u05d4
+territories.SD=\u05e1\u05d5\u05d3\u05d0\u05df
+territories.SC=\u05e1\u05d9\u05d9\u05e9\u05dc
+territories.SB=\u05e9\u05dc\u05de\u05d4, \u05d0\u05d9\u05d9
territories.SA=\u05e2\u05e8\u05d1 \u05d4\u05e1\u05e2\u05d5\u05d3\u05d9\u05ea
territories.FR=\u05e6\u05e8\u05e4\u05ea
-territories.FO=\u05d0\u05d9\u05d9 \u05e4\u05d0\u05e8\u05d5
-territories.FM=\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1, \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05de\u05d0\u05d5\u05d2\u05d3\u05d5\u05ea \u05e9\u05dc
+territories.057=\u05de\u05e7\u05e8\u05d5\u05e0\u05d6\u05d9\u05d4
+territories.FO=\u05e4\u05e8\u05d5\u05d0\u05e8, \u05d0\u05d9\u05d9
+territories.FM=\u05de\u05d9\u05e7\u05e8\u05d5\u05e0\u05d6\u05d9\u05d4
territories.RW=\u05e8\u05d5\u05d0\u05e0\u05d3\u05d4
-territories.FK=\u05d0\u05d9\u05d9 \u05e4\u05d5\u05e7\u05dc\u05e0\u05d3
-territories.RU=\u05d7\u05d1\u05e8 \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05e8\u05d5\u05e1\u05d9\u05d5\u05ea
+territories.054=\u05de\u05dc\u05e0\u05e1\u05d9\u05d4
+territories.053=\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4 \u05d5\u05e0\u05d9\u05d5-\u05d6\u05d9\u05dc\u05e0\u05d3
+territories.FK=\u05e4\u05d5\u05e7\u05dc\u05e0\u05d3, \u05d0\u05d9\u05d9
+territories.RU=\u05e8\u05d5\u05e1\u05d9\u05d4, \u05d4\u05e4\u05d3\u05e8\u05e6\u05d9\u05d4 \u05e9\u05dc
territories.FJ=\u05e4\u05d9\u05d2\u05f3\u05d9
territories.FI=\u05e4\u05d9\u05e0\u05dc\u05e0\u05d3
territories.RO=\u05e8\u05d5\u05de\u05e0\u05d9\u05d4
territories.RE=\u05e8\u05d0\u05d5\u05e0\u05d9\u05d5\u05df
territories.ET=\u05d0\u05ea\u05d9\u05d5\u05e4\u05d9\u05d4
territories.ES=\u05e1\u05e4\u05e8\u05d3
-territories.ER=\u05d0\u05e8\u05d9\u05ea\u05e8\u05d9\u05d0\u05d4
+territories.ER=\u05d0\u05e8\u05d9\u05d8\u05e8\u05d0\u05d4
territories.EH=\u05e1\u05d4\u05e8\u05d4 \u05d4\u05de\u05e2\u05e8\u05d1\u05d9\u05ea
territories.EG=\u05de\u05e6\u05e8\u05d9\u05dd
+territories.830=\u05d0\u05d9\u05d9 \u05e7\u05e0\u05dc
territories.EE=\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05d4
territories.EC=\u05d0\u05e7\u05d5\u05d5\u05d0\u05d3\u05d5\u05e8
territories.DZ=\u05d0\u05dc\u05d2\u05f3\u05d9\u05e8\u05d9\u05d4
-territories.QA=\u05e7\u05d8\u05e8
+territories.QA=\u05e7\u05d0\u05d8\u05d0\u05e8
+territories.039=\u05d3\u05e8\u05d5\u05dd \u05d0\u05d9\u05e8\u05d5\u05e4\u05d4
territories.DO=\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05e0\u05d9\u05ea
-territories.PY=\u05e4\u05e8\u05d0\u05d2\u05d5\u05d5\u05d0\u05d9
+territories.PY=\u05e4\u05e8\u05d2\u05d5\u05d5\u05d0\u05d9
+territories.035=\u05d3\u05e8\u05d5\u05dd-\u05de\u05d6\u05e8\u05d7 \u05d0\u05e1\u05d9\u05d4
territories.DM=\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05d4
-territories.PW=\u05e4\u05dc\u05d0\u05d5
+territories.PW=\u05e4\u05d0\u05dc\u05d0\u05d5
territories.DK=\u05d3\u05e0\u05de\u05e8\u05e7
territories.DJ=\u05d2\u05f3\u05d9\u05d1\u05d5\u05d8\u05d9
territories.PT=\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05dc
territories.PS=\u05d4\u05e8\u05e9\u05d5\u05ea \u05d4\u05e4\u05dc\u05e9\u05ea\u05d9\u05e0\u05d9\u05ea
-territories.PR=\u05e4\u05d5\u05e8\u05d8\u05d5 \u05e8\u05d9\u05e7\u05d5
+territories.030=\u05de\u05d6\u05e8\u05d7 \u05d0\u05e1\u05d9\u05d4
+territories.PR=\u05e4\u05d5\u05d0\u05e8\u05d8\u05d5 \u05e8\u05d9\u05e7\u05d5
territories.DE=\u05d2\u05e8\u05de\u05e0\u05d9\u05d4
-territories.PN=\u05e4\u05d9\u05d8\u05e7\u05d9\u05d9\u05e8\u05df
+territories.PN=\u05e4\u05d9\u05d8\u05e7\u05e8\u05df
territories.PM=\u05e1\u05e0\u05d8 \u05e4\u05d9\u05d9\u05e8 \u05d5\u05de\u05d9\u05e7\u05dc\u05d5\u05df
territories.PL=\u05e4\u05d5\u05dc\u05d9\u05df
-territories.PK=\u05e4\u05e7\u05d9\u05e1\u05d8\u05df
+territories.PK=\u05e4\u05e7\u05d9\u05e1\u05d8\u05d0\u05df
territories.PH=\u05e4\u05d9\u05dc\u05d9\u05e4\u05d9\u05e0\u05d9\u05dd
-territories.PG=\u05e4\u05e4\u05d5\u05d0\u05d4 \u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4
+territories.PG=\u05e4\u05d0\u05e4\u05d5\u05d0\u05d4 \u05e0\u05d9\u05d5-\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4
territories.PF=\u05e4\u05d5\u05dc\u05d9\u05e0\u05d6\u05d9\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea
-territories.CZ=\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e6\u05f3\u05db\u05d9\u05ea
+territories.CZ=\u05e6\u05f3\u05db\u05d9\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc
territories.PE=\u05e4\u05e8\u05d5
territories.CY=\u05e7\u05e4\u05e8\u05d9\u05e1\u05d9\u05df
-territories.CX=\u05d0\u05d9\u05d9 \u05db\u05e8\u05d9\u05e1\u05d8\u05de\u05e1
-territories.CV=\u05e7\u05d9\u05d9\u05e4 \u05d5\u05e8\u05d3\u05d4
+territories.CX=\u05e7\u05e8\u05d9\u05e1\u05de\u05e1, \u05d0\u05d9
+territories.CV=\u05e7\u05d0\u05e4 \u05d5\u05e8\u05d3\u05d4
territories.PA=\u05e4\u05e0\u05de\u05d4
territories.CU=\u05e7\u05d5\u05d1\u05d4
+territories.CS=\u05e1\u05e8\u05d1\u05d9\u05d4 \u05d5\u05de\u05d5\u05e0\u05d8\u05e0\u05d2\u05e8\u05d5
territories.CR=\u05e7\u05d5\u05e1\u05d8\u05d4 \u05e8\u05d9\u05e7\u05d4
+territories.029=\u05e7\u05e8\u05d9\u05d1\u05d9\u05d9\u05dd
territories.CO=\u05e7\u05d5\u05dc\u05d5\u05de\u05d1\u05d9\u05d4
territories.CN=\u05e1\u05d9\u05df
-territories.CM=\u05e7\u05de\u05e8\u05d5\u05df
+territories.CM=\u05e7\u05d0\u05de\u05e8\u05d5\u05df
territories.CL=\u05e6\u05f3\u05d9\u05dc\u05d4
-territories.CK=\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7
+territories.CK=\u05e7\u05d5\u05e7, \u05d0\u05d9\u05d9
territories.CI=\u05d7\u05d5\u05e3 \u05d4\u05e9\u05e0\u05d4\u05d1
+territories.021=\u05e6\u05e4\u05d5\u05df \u05d0\u05de\u05e8\u05d9\u05e7\u05d4
territories.CH=\u05e9\u05d5\u05d5\u05d9\u05d9\u05e5
territories.CG=\u05e7\u05d5\u05e0\u05d2\u05d5
territories.CF=\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc \u05de\u05e8\u05db\u05d6 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
territories.CD=\u05e7\u05d5\u05e0\u05d2\u05d5, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05d5\u05e7\u05e8\u05d8\u05d9\u05ea \u05e9\u05dc
-territories.CC=\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7\u05d5\u05e1 (\u05e7\u05d9\u05dc\u05d9\u05e0\u05d2)
-territories.OM=\u05e2\u05d5\u05de\u05df
+territories.CC=\u05e7\u05d5\u05e7\u05d5\u05e1, \u05d0\u05d9\u05d9
+territories.OM=\u05e2\u05d5\u05de\u05d0\u05df
territories.CA=\u05e7\u05e0\u05d3\u05d4
territories.BZ=\u05d1\u05dc\u05d9\u05d6
-territories.BY=\u05d1\u05dc\u05e8\u05d5\u05e1
-territories.BW=\u05d1\u05d5\u05d8\u05e1\u05d5\u05d5\u05d0\u05e0\u05d4
-territories.BV=\u05d4\u05d0\u05d9 \u05d1\u05d5\u05d1\u05d4
-territories.BT=\u05d1\u05d5\u05d8\u05d0\u05df
-territories.BS=\u05d1\u05d4\u05d0\u05de\u05d4
+territories.BY=\u05d1\u05dc\u05d0\u05e8\u05d5\u05e1
+territories.BW=\u05d1\u05d5\u05e6\u05d5\u05d5\u05d0\u05e0\u05d4
+territories.BV=\u05d1\u05d5\u05d1\u05d4, \u05d0\u05d9
+territories.BT=\u05d1\u05d4\u05d5\u05d8\u05d0\u05df
+territories.BS=\u05d1\u05d0\u05d4\u05d0\u05de\u05d4, \u05d0\u05d9\u05d9
territories.BR=\u05d1\u05e8\u05d6\u05d9\u05dc
+territories.019=\u05d0\u05de\u05e8\u05d9\u05e7\u05d5\u05ea
+territories.018=\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
territories.NZ=\u05e0\u05d9\u05d5 \u05d6\u05d9\u05dc\u05e0\u05d3
territories.BO=\u05d1\u05d5\u05dc\u05d9\u05d1\u05d9\u05d4
-territories.BN=\u05d1\u05e8\u05d5\u05e0\u05d9\u05d9 \u05d3\u05d0\u05e8\u05e1\u05dc\u05d0\u05dd
+territories.017=\u05de\u05e8\u05db\u05d6 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
+territories.BN=\u05d1\u05e8\u05d5\u05e0\u05d9\u05d9 \u05d3\u05d0\u05e8\u05d5\u05e1\u05d0\u05dc\u05d0\u05dd
territories.BM=\u05d1\u05e8\u05de\u05d5\u05d3\u05d4
-territories.NU=\u05e0\u05d9\u05d5\u05d5\u05d4
+territories.015=\u05e6\u05e4\u05d5\u05df \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
+territories.014=\u05de\u05d6\u05e8\u05d7 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
+territories.013=\u05de\u05e8\u05db\u05d6 \u05d0\u05de\u05e8\u05d9\u05e7\u05d4
+territories.NU=\u05e0\u05d9\u05d0\u05d5
territories.BJ=\u05d1\u05e0\u05d9\u05df
territories.BI=\u05d1\u05d5\u05e8\u05d5\u05e0\u05d3\u05d9
-territories.BH=\u05d1\u05d7\u05e8\u05d9\u05d9\u05df
+territories.011=\u05de\u05e2\u05e8\u05d1 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
+territories.BH=\u05d1\u05d7\u05e8\u05d9\u05df
territories.NR=\u05e0\u05d0\u05d5\u05e8\u05d5
territories.BG=\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05d4
territories.BF=\u05d1\u05d5\u05e8\u05e7\u05d9\u05e0\u05d4 \u05e4\u05d0\u05e1\u05d5
territories.NP=\u05e0\u05e4\u05d0\u05dc
territories.BE=\u05d1\u05dc\u05d2\u05d9\u05d4
territories.NO=\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05d4
-territories.BD=\u05d1\u05e0\u05d2\u05dc\u05d3\u05e9
+territories.BD=\u05d1\u05e0\u05d2\u05dc\u05d0\u05d3\u05e9
territories.BB=\u05d1\u05e8\u05d1\u05d3\u05d5\u05e1
-territories.ZW=\u05d6\u05d9\u05de\u05d1\u05d1\u05d5\u05d5\u05d4
+territories.ZW=\u05d6\u05d9\u05de\u05d1\u05d0\u05d1\u05d5\u05d5\u05d4
territories.NL=\u05d4\u05d5\u05dc\u05e0\u05d3
-territories.BA=\u05d1\u05d5\u05e1\u05e0\u05d9\u05d4 \u05d4\u05e8\u05e6\u05d2\u05d5\u05d1\u05d9\u05e0\u05d4
-territories.NI=\u05e0\u05d9\u05e7\u05e8\u05d0\u05d2\u05d5\u05d5\u05d4
+territories.BA=\u05d1\u05d5\u05e1\u05e0\u05d9\u05d4 \u05d5\u05d4\u05e8\u05e6\u05d2\u05d5\u05d1\u05d9\u05e0\u05d4
+territories.NI=\u05e0\u05d9\u05e7\u05d0\u05e8\u05d0\u05d2\u05d5\u05d0\u05d4
territories.NG=\u05e0\u05d9\u05d2\u05e8\u05d9\u05d4
-territories.NF=\u05d0\u05d9\u05d9 \u05e0\u05d5\u05e8\u05e4\u05e7
-territories.AZ=\u05d0\u05d6\u05e8\u05d1\u05d9\u05d9\u05d2\u05f3\u05df
+territories.NF=\u05e0\u05d5\u05e8\u05e4\u05d5\u05e7, \u05d0\u05d9\u05d9
+territories.AZ=\u05d0\u05d6\u05e8\u05d1\u05d9\u05d9\u05d2\u05f3\u05d0\u05df
territories.NE=\u05e0\u05d9\u05d6\u05f3\u05e8
+territories.AX=\u05d0\u05d9\u05d9 \u05d0\u05dc\u05e0\u05d3
territories.NC=\u05e7\u05dc\u05d3\u05d5\u05e0\u05d9\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4
territories.AW=\u05d0\u05e8\u05d5\u05d1\u05d4
territories.ZM=\u05d6\u05de\u05d1\u05d9\u05d4
-territories.NA=\u05e0\u05de\u05d9\u05d1\u05d9\u05d4
+territories.NA=\u05e0\u05d0\u05de\u05d9\u05d1\u05d9\u05d4
territories.AU=\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4
territories.AT=\u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4
territories.AS=\u05e1\u05de\u05d5\u05d0\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05ea
territories.AR=\u05d0\u05e8\u05d2\u05e0\u05d8\u05d9\u05e0\u05d4
+territories.009=\u05d0\u05d5\u05e7\u05d9\u05e0\u05d9\u05d4
territories.AQ=\u05d0\u05e0\u05d8\u05d0\u05e8\u05e7\u05d8\u05d9\u05e7\u05d4
territories.MZ=\u05de\u05d5\u05d6\u05de\u05d1\u05d9\u05e7
territories.AO=\u05d0\u05e0\u05d2\u05d5\u05dc\u05d4
territories.MY=\u05de\u05dc\u05d6\u05d9\u05d4
-territories.AN=\u05d4\u05d0\u05d9\u05e0\u05d8\u05d9\u05dc\u05d9\u05dd \u05d4\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05d9\u05dd
-territories.MX=\u05de\u05db\u05e1\u05d9\u05e7\u05d5
+territories.AN=\u05d0\u05e0\u05d8\u05d9\u05dc\u05d9\u05dd \u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05d9\u05dd
+territories.MX=\u05de\u05e7\u05e1\u05d9\u05e7\u05d5
+territories.005=\u05d3\u05e8\u05d5\u05dd \u05d0\u05de\u05e8\u05d9\u05e7\u05d4
territories.AM=\u05d0\u05e8\u05de\u05e0\u05d9\u05d4
territories.MW=\u05de\u05dc\u05d0\u05d5\u05d5\u05d9
territories.AL=\u05d0\u05dc\u05d1\u05e0\u05d9\u05d4
-territories.MV=\u05de\u05dc\u05d3\u05d9\u05d1\u05d0\u05e1
+territories.MV=\u05de\u05dc\u05d3\u05d9\u05d1\u05d9\u05dd
territories.ZA=\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
territories.MU=\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1
+territories.002=\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4
territories.MT=\u05de\u05dc\u05d8\u05d4
-territories.AI=\u05d0\u05e0\u05d2\u05d9\u05dc\u05d4
-territories.MS=\u05de\u05d5\u05e0\u05d8\u05e1\u05e8\u05d0\u05d8
+territories.001=\u05e2\u05d5\u05dc\u05dd
+territories.AI=\u05d0\u05e0\u05d2\u05d5\u05d5\u05d9\u05dc\u05d4
+territories.MS=\u05de\u05d5\u05e0\u05e1\u05e8\u05d0\u05d8
territories.MR=\u05de\u05d0\u05d5\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4
territories.AG=\u05d0\u05e0\u05d8\u05d9\u05d2\u05d5\u05d0\u05d4 \u05d5\u05d1\u05e8\u05d1\u05d5\u05d3\u05d4
territories.MQ=\u05de\u05e8\u05d8\u05d9\u05e0\u05d9\u05e7
-territories.AF=\u05d0\u05e4\u05d2\u05e0\u05d9\u05e1\u05d8\u05df
-territories.MP=\u05d0\u05d9\u05d9 \u05de\u05e8\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd
-territories.AE=\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e2\u05e8\u05d1\u05d9\u05d5\u05ea
-territories.MO=\u05de\u05e7\u05d0\u05d5 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df
+territories.AF=\u05d0\u05e4\u05d2\u05e0\u05d9\u05e1\u05d8\u05d0\u05df
+territories.MP=\u05de\u05e8\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd, \u05d0\u05d9\u05d9
+territories.AE=\u05d1\u05e8\u05d9\u05ea \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e2\u05e8\u05d1\u05d9\u05d5\u05ea
+territories.MO=\u05de\u05e7\u05d0\u05d5 S.A.R.\u200e \u05e9\u05dc \u05e1\u05d9\u05df
territories.AD=\u05d0\u05e0\u05d3\u05d5\u05e8\u05d4
territories.MN=\u05de\u05d5\u05e0\u05d2\u05d5\u05dc\u05d9\u05d4
-territories.MM=\u05de\u05d9\u05e0\u05de\u05d0\u05e8
+territories.MM=\u05de\u05d9\u05d9\u05d0\u05e0\u05de\u05d0\u05e8
territories.ML=\u05de\u05d0\u05dc\u05d9
-territories.MK=\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc
-territories.YU=\u05d9\u05d5\u05d2\u05d5\u05e1\u05dc\u05d1\u05d9\u05d4
-territories.YT=\u05de\u05d9\u05d5\u05d8\u05d4
-territories.MH=\u05d0\u05d9\u05d9 \u05de\u05e8\u05e9\u05dc
+territories.MK=\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05d4
+territories.YT=\u05de\u05d0\u05d9\u05d5\u05d8
+territories.MH=\u05de\u05e8\u05e9\u05dc, \u05d0\u05d9\u05d9
territories.MG=\u05de\u05d3\u05d2\u05e1\u05e7\u05e8
-territories.MD=\u05de\u05d5\u05dc\u05d3\u05d5\u05d1\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4
-territories.MC=\u05de\u05d5\u05e0\u05e7\u05d5
+territories.MD=\u05de\u05d5\u05dc\u05d3\u05d5\u05d1\u05d4
+territories.MC=\u05de\u05d5\u05e0\u05d0\u05e7\u05d5
territories.MA=\u05de\u05e8\u05d5\u05e7\u05d5
territories.YE=\u05ea\u05d9\u05de\u05df
territories.LY=\u05dc\u05d5\u05d1
territories.LV=\u05dc\u05d8\u05d1\u05d9\u05d4
+territories.155=\u05de\u05e2\u05e8\u05d1 \u05d0\u05d9\u05e8\u05d5\u05e4\u05d4
territories.LU=\u05dc\u05d5\u05e7\u05e1\u05de\u05d1\u05d5\u05e8\u05d2
+territories.154=\u05e6\u05e4\u05d5\u05df \u05d0\u05d9\u05e8\u05d5\u05e4\u05d4
territories.LT=\u05dc\u05d9\u05d8\u05d0
-territories.LS=\u05dc\u05e1\u05d5\u05d8\u05d5
+territories.LS=\u05dc\u05e1\u05d5\u05ea\u05d5
territories.LR=\u05dc\u05d9\u05d1\u05e8\u05d9\u05d4
+territories.151=\u05de\u05d6\u05e8\u05d7 \u05d0\u05d9\u05e8\u05d5\u05e4\u05d4
+territories.150=\u05d0\u05d9\u05e8\u05d5\u05e4\u05d4
territories.LK=\u05e1\u05e8\u05d9 \u05dc\u05e0\u05e7\u05d4
territories.LI=\u05dc\u05d9\u05db\u05d8\u05e0\u05e9\u05d8\u05d9\u05d9\u05df
-territories.LC=\u05e1\u05e0\u05d8 \u05dc\u05d5\u05e9\u05d9\u05d4
+territories.LC=\u05e1\u05e0\u05d8 \u05dc\u05d5\u05e1\u05d9\u05d4
territories.LB=\u05dc\u05d1\u05e0\u05d5\u05df
-territories.LA=\u05dc\u05d0\u05d5\u05e1, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05e7\u05d5\u05e8\u05d8\u05d9\u05ea \u05d4\u05e2\u05de\u05de\u05d9\u05ea
-territories.KZ=\u05e7\u05d6\u05d7\u05e1\u05d8\u05df
-territories.KY=\u05d0\u05d9\u05d9 \u05e7\u05d9\u05d9\u05de\u05d0\u05df
-territories.KW=\u05db\u05d5\u05d5\u05d9\u05ea
-territories.KR=\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05d3\u05e8\u05d5\u05dd
-territories.KP=\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05e6\u05e4\u05d5\u05df
-territories.KN=\u05e1\u05e0\u05d8 \u05e7\u05d9\u05d8\u05e1 \u05d5\u05e0\u05d9\u05d1\u05e1
+territories.LA=\u05dc\u05d0\u05d5\u05e1
+territories.KZ=\u05e7\u05d6\u05d0\u05d7\u05e1\u05d8\u05d0\u05df
+territories.KY=\u05e7\u05d9\u05d9\u05de\u05d0\u05df, \u05d0\u05d9\u05d9
+territories.KW=\u05db\u05d5\u05d5\u05d9\u05d9\u05ea
+territories.145=\u05de\u05d6\u05e8\u05d7 \u05d0\u05e1\u05d9\u05d4
+territories.142=\u05d0\u05e1\u05d9\u05d4
+territories.KR=\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05ea
+territories.KP=\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4 \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05ea
+territories.KN=\u05e1\u05e0\u05d8 \u05e7\u05d9\u05d8\u05e1 \u05d5\u05e0\u05d5\u05d5\u05d9\u05e1
territories.KM=\u05e7\u05d5\u05de\u05d5\u05e8\u05d5\u05e1
territories.KI=\u05e7\u05d9\u05e8\u05d9\u05d1\u05d0\u05d8\u05d9
territories.WS=\u05e1\u05de\u05d5\u05d0\u05d4
territories.KH=\u05e7\u05de\u05d1\u05d5\u05d3\u05d9\u05d4
-territories.KG=\u05e7\u05d9\u05e8\u05d2\u05d9\u05d6\u05e1\u05d8\u05df
+territories.KG=\u05e7\u05d9\u05e8\u05d2\u05d9\u05d6\u05e1\u05d8\u05d0\u05df
territories.KE=\u05e7\u05e0\u05d9\u05d4
-territories.WF=\u05d5\u05d0\u05dc\u05d9\u05e1 \u05d5\u05e4\u05d5\u05d8\u05d5\u05e0\u05d4
+territories.WF=\u05d5\u05d5\u05dc\u05d9\u05e1 \u05d5\u05e4\u05d5\u05d8\u05d5\u05e0\u05d4
territories.JP=\u05d9\u05e4\u05df
territories.JO=\u05d9\u05e8\u05d3\u05df
-territories.JM=\u05d2\u05f3\u05de\u05d9\u05d9\u05e7\u05d4
+territories.JM=\u05d2\u05f3\u05d0\u05de\u05d9\u05d9\u05e7\u05d4
territories.VU=\u05d5\u05d0\u05e0\u05d5\u05d0\u05d8\u05d5
territories.VN=\u05d5\u05d9\u05d9\u05d8\u05e0\u05d0\u05dd
-territories.VI=\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05d9\u05dd
-territories.VG=\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05d9\u05dd
+territories.VI=\u05d1\u05ea\u05d5\u05dc\u05d4, \u05d0\u05d9\u05d9 (\u05d0\u05e8\u05d4\"\u05d1)
+territories.VG=\u05d1\u05ea\u05d5\u05dc\u05d4, \u05d0\u05d9\u05d9 (\u05d1\u05e8\u05d9\u05d8\u05d9\u05d9\u05dd)
territories.VE=\u05d5\u05e0\u05e6\u05d5\u05d0\u05dc\u05d4
-territories.VC=\u05e1\u05e0\u05d8 \u05d5\u05d9\u05e0\u05e1\u05e0\u05d8 \u05d5\u05d4\u05d2\u05e8\u05e0\u05d3\u05d9\u05e0\u05d9\u05dd
-territories.VA=\u05d4\u05d5\u05d5\u05ea\u05d9\u05e7\u05df
+territories.VC=\u05e1\u05e0\u05d8 \u05d5\u05d9\u05e0\u05e1\u05e0\u05d8 \u05d5\u05d0\u05d9\u05d9 \u05d2\u05e8\u05e0\u05d0\u05d3\u05d9\u05df
+territories.VA=\u05d5\u05d8\u05d9\u05e7\u05d0\u05df
territories.IT=\u05d0\u05d9\u05d8\u05dc\u05d9\u05d4
territories.IS=\u05d0\u05d9\u05e1\u05dc\u05e0\u05d3
-territories.IR=\u05d0\u05d9\u05e8\u05d0\u05df, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d0\u05d9\u05e1\u05dc\u05de\u05d9\u05ea
+territories.IR=\u05d0\u05d9\u05e8\u05d0\u05df
territories.IQ=\u05e2\u05d9\u05e8\u05e7
-territories.UZ=\u05d0\u05d5\u05d6\u05d1\u05e7\u05d9\u05e1\u05d8\u05df
-territories.IO=\u05d4\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05ea \u05d1\u05d0\u05d5\u05e7\u05d9\u05e0\u05d5\u05e1 \u05d4\u05d4\u05d5\u05d3\u05d9
+territories.UZ=\u05d0\u05d5\u05d6\u05d1\u05e7\u05d9\u05e1\u05d8\u05d0\u05df
+territories.IO=\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d1\u05e8\u05d9\u05d8\u05d9\u05ea \u05d1\u05d0\u05d5\u05e7\u05d9\u05d0\u05e0\u05d5\u05e1 \u05d4\u05d4\u05d5\u05d3\u05d9
territories.UY=\u05d0\u05d5\u05e8\u05d5\u05d2\u05d5\u05d5\u05d0\u05d9
territories.IN=\u05d4\u05d5\u05d3\u05d5
territories.IL=\u05d9\u05e9\u05e8\u05d0\u05dc
territories.US=\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea
territories.IE=\u05d0\u05d9\u05e8\u05dc\u05e0\u05d3
territories.ID=\u05d0\u05d9\u05e0\u05d3\u05d5\u05e0\u05d6\u05d9\u05d4
-territories.UM=\u05d0\u05d9\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05e9\u05dc\u05d7\u05d5\u05e3 \u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea
+territories.UM=\u05d0\u05d9\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea \u05d1\u05d0\u05d5\u05e7\u05d9\u05d0\u05e0\u05d5\u05e1 \u05d4\u05e9\u05e7\u05d8
territories.UG=\u05d0\u05d5\u05d2\u05e0\u05d3\u05d4
territories.UA=\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d4
territories.HU=\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05d4
@@ -247,15 +285,15 @@ territories.HT=\u05d4\u05d0\u05d9\u05d8\u05d9
territories.HR=\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05d4
territories.TZ=\u05d8\u05e0\u05d6\u05e0\u05d9\u05d4
territories.HN=\u05d4\u05d5\u05e0\u05d3\u05d5\u05e8\u05e1
-territories.HM=\u05d0\u05d9\u05d9 \u05d4\u05e8\u05d3 \u05d5\u05d0\u05d9\u05d9 \u05de\u05e7\u05d3\u05d5\u05e0\u05dc\u05e0\u05d3
-territories.TW=\u05d8\u05d9\u05d5\u05d5\u05d0\u05df
+territories.HM=\u05d4\u05e8\u05d3 \u05d5\u05de\u05e7\u05d3\u05d5\u05e0\u05dc\u05e0\u05d3, \u05d0\u05d9\u05d9
+territories.TW=\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df
territories.TV=\u05d8\u05d5\u05d1\u05d0\u05dc\u05d5
-territories.HK=\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df
-territories.TT=\u05d8\u05e8\u05d9\u05e0\u05d9\u05d3\u05d3 \u05d5\u05d8\u05d5\u05d1\u05d2\u05d5
+territories.HK=\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 S.A.R.\u200e \u05e9\u05dc \u05e1\u05d9\u05df
+territories.TT=\u05d8\u05e8\u05d9\u05e0\u05d9\u05d3\u05d0\u05d3 \u05d5\u05d8\u05d5\u05d1\u05d2\u05d5
territories.TR=\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4
territories.TO=\u05d8\u05d5\u05e0\u05d2\u05d4
territories.TN=\u05d8\u05d5\u05e0\u05d9\u05e1\u05d9\u05d4
-territories.TM=\u05d8\u05d5\u05e8\u05e7\u05de\u05e0\u05d9\u05e1\u05d8\u05df
+territories.TM=\u05d8\u05d5\u05e8\u05e7\u05de\u05e0\u05d9\u05e1\u05d8\u05d0\u05df
languages.es=\u05e1\u05e4\u05e8\u05d3\u05d9\u05ea
languages.mul=\u05de\u05e1\u05e4\u05e8 \u05e9\u05e4\u05d5\u05ea
languages.eo=\u05d0\u05e1\u05e4\u05e8\u05e0\u05d8\u05d5
@@ -264,8 +302,8 @@ languages.el=\u05d9\u05d5\u05d5\u05e0\u05d9\u05ea
languages.ko=\u05e7\u05d5\u05e8\u05d9\u05d0\u05e0\u05d9\u05ea
languages.sgn=\u05e9\u05e4\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05dd
languages.ka=\u05d2\u05e8\u05d5\u05d6\u05d9\u05e0\u05d9\u05ea
-languages.pt=\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea
languages.nap=\u05e0\u05e4\u05d5\u05dc\u05d9\u05d8\u05e0\u05d9\u05ea
+languages.pt=\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea
languages.mas=\u05de\u05d0\u05e1\u05d0\u05d9\u05ea
languages.de=\u05d2\u05e8\u05de\u05e0\u05d9\u05ea
languages.pl=\u05e4\u05d5\u05dc\u05e0\u05d9\u05ea
@@ -276,8 +314,8 @@ languages.cs=\u05e6\u05f3\u05db\u05d9\u05ea
languages.lad=\u05dc\u05d3\u05d9\u05e0\u05d5
languages.it=\u05d0\u05d9\u05d8\u05dc\u05e7\u05d9\u05ea
languages.is=\u05d0\u05d9\u05e1\u05dc\u05e0\u05d3\u05d9\u05ea
-languages.aus=\u05e9\u05e4\u05d5\u05ea \u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d5\u05ea
languages.myn=\u05de\u05d0\u05d9\u05d4
+languages.aus=\u05e9\u05e4\u05d5\u05ea \u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d5\u05ea
languages.ca=\u05e7\u05d8\u05dc\u05d5\u05e0\u05d9\u05ea
languages.id=\u05d0\u05d9\u05e0\u05d3\u05d5\u05e0\u05d6\u05d9\u05ea
languages.uk=\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d9\u05ea
@@ -309,13 +347,13 @@ languages.af=\u05d0\u05e4\u05e8\u05d9\u05e7\u05e0\u05d9\u05ea
languages.mo=\u05de\u05d5\u05dc\u05d3\u05d1\u05d9\u05ea
languages.mn=\u05de\u05d5\u05e0\u05d2\u05d5\u05dc\u05d9\u05ea
languages.sr=\u05e1\u05e8\u05d1\u05d9\u05ea
-languages.mk=\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05ea
languages.aa=\u05d0\u05ea\u05d9\u05d5\u05e4\u05d9\u05ea
-languages.mi=\u05de\u05d0\u05d5\u05e8\u05d9\u05ea
+languages.mk=\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05ea
languages.gd=\u05e1\u05e7\u05d5\u05d8\u05d9\u05ea \u05d2\u05d0\u05dc\u05d9\u05ea
+languages.mi=\u05de\u05d0\u05d5\u05e8\u05d9\u05ea
languages.sl=\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05ea
-languages.sk=\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05ea
languages.ga=\u05d0\u05d9\u05e8\u05d9\u05ea
+languages.sk=\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05ea
languages.sh=\u05e1\u05e8\u05d1\u05d5-\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05ea
languages.yi=\u05d9\u05d9\u05d3\u05d9\u05e9
languages.sa=\u05e1\u05e0\u05e1\u05e7\u05e8\u05d9\u05ea
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi.properties
index 1ccc2a8..5add447 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi.properties
@@ -39,8 +39,8 @@ territories.SD=\u0938\u0942\u0921\u093e\u0928
territories.SA=\u0938\u090a\u0926\u0940 \u0905\u0930\u092c
territories.FR=\u092b\u094d\u0930\u093e\u0902\u0938
territories.RW=\u0930\u0942\u0906\u0923\u094d\u0921\u093e
-territories.RU=\u0930\u0942\u0938
territories.FJ=\u092b\u093f\u091c\u0940
+territories.RU=\u0930\u0942\u0938
territories.FI=\u092b\u093f\u0928\u0932\u0948\u0902\u0921
territories.RO=\u0930\u094b\u092e\u093e\u0928\u093f\u092f\u093e
territories.ET=\u0907\u0925\u093f\u092f\u094b\u092a\u093f\u092f\u093e
@@ -64,11 +64,11 @@ territories.PK=\u092a\u093e\u0915\u093f\u0938\u094d\u0924\u093e\u0928
territories.PH=\u092b\u093f\u0932\u0940\u092a\u093f\u0902\u0938
territories.PG=\u092a\u093e\u092a\u0941\u0906 \u0928\u094d\u092f\u0942 \u0917\u093f\u0928\u0940
territories.CZ=\u091a\u0947\u0915 \u0917\u0923\u0930\u093e\u091c\u094d\u092f
-territories.PE=\u092a\u0947\u0930\u0942
territories.CY=\u0938\u093e\u0907\u092a\u094d\u0930\u0938
+territories.PE=\u092a\u0947\u0930\u0942
territories.CV=\u0915\u0948\u092a \u0935\u0930\u094d\u0924
-territories.PA=\u092a\u0928\u093e\u092e\u093e
territories.CU=\u0915\u094d\u092f\u0942\u092c\u093e
+territories.PA=\u092a\u0928\u093e\u092e\u093e
territories.CR=\u0915\u094b\u0938\u094d\u091f\u093e\u0930\u0940\u0915\u093e
territories.CO=\u0915\u094b\u0932\u092e\u094d\u092c\u093f\u092f\u093e
territories.CN=\u091a\u0940\u0928
@@ -103,19 +103,19 @@ territories.ZM=\u091c\u093e\u092e\u094d\u092c\u093f\u092f\u093e
territories.AU=\u0911\u0938\u094d\u091f\u094d\u0930\u0947\u0932\u093f\u092f\u093e
territories.AT=\u0911\u0938\u094d\u091f\u094d\u0930\u093f\u092f\u093e
territories.AR=\u0905\u0930\u094d\u091c\u0947\u0928\u094d\u091f\u0940\u0928\u093e
-territories.MZ=\u092e\u094b\u091c\u093e\u092e\u094d\u092c\u093f\u0915
territories.AO=\u0905\u0902\u0917\u094b\u0932\u093e
+territories.MZ=\u092e\u094b\u091c\u093e\u092e\u094d\u092c\u093f\u0915
territories.MY=\u092e\u0932\u0947\u0936\u093f\u092f\u093e
-territories.MX=\u092e\u0947\u0915\u094d\u0938\u093f\u0915\u094b
territories.AM=\u0906\u0930\u094d\u092e\u0947\u0928\u093f\u092f\u093e
-territories.MW=\u092e\u0932\u093e\u0935\u0940
+territories.MX=\u092e\u0947\u0915\u094d\u0938\u093f\u0915\u094b
territories.AL=\u0905\u0932\u094d\u092c\u093e\u0928\u093f\u092f\u093e
+territories.MW=\u092e\u0932\u093e\u0935\u0940
territories.MV=\u092e\u093e\u0932\u0926\u0940\u0935
territories.ZA=\u0926\u0915\u094d\u0937\u093f\u0923 \u0905\u092b\u094d\u0930\u0940\u0915\u093e
territories.MU=\u092e\u094c\u0930\u093f\u0938
territories.MT=\u092e\u093e\u0932\u094d\u091f\u093e
-territories.MR=\u092e\u0949\u0930\u093f\u091f\u093e\u0928\u093f\u092f\u093e
territories.AG=\u090f\u0928\u094d\u091f\u093f\u0917\u0941\u0935\u093e \u0914\u0930 \u092c\u093e\u0930\u092c\u0942\u0921\u093e
+territories.MR=\u092e\u0949\u0930\u093f\u091f\u093e\u0928\u093f\u092f\u093e
territories.AF=\u0905\u092b\u0917\u093e\u0928\u093f\u0938\u094d\u0924\u093e\u0928
territories.AE=\u0938\u0902\u092f\u0941\u0915\u094d\u0924 \u0905\u0930\u092c \u0905\u092e\u0940\u0930\u093e\u0924
territories.AD=\u0905\u0928\u094d\u0921\u094b\u0930\u093e
@@ -185,14 +185,14 @@ territories.TM=\u0924\u0941\u0930\u094d\u0915\u092e\u0947\u0928\u093f\u0938\u094
languages.es=\u0938\u094d\u092a\u0947\u0928\u093f\u0936
languages.ku=\u0915\u0941\u0930\u0926\u0940\u0936
languages.eo=\u090f\u0938\u094d\u092a\u0947\u0930\u093e\u0928\u094d\u0924\u094b
-languages.ks=\u0915\u093e\u0936\u094d\u092e\u093f\u0930\u0940
languages.en=\u0905\u0902\u0917\u094d\u0930\u0947\u091c\u0940
+languages.ks=\u0915\u093e\u0936\u094d\u092e\u093f\u0930\u0940
languages.el=\u0917\u094d\u0930\u0940\u0915
languages.qu=\u0915\u094d\u0935\u0947\u0936\u0941\u0906
languages.ko=\u0915\u094b\u0930\u0940\u092f\u0928\u094d
languages.kn=\u0915\u0928\u094d\u0928\u0921\u093c
-languages.kok=\u0915\u094b\u0902\u0915\u0923\u0940
languages.km=\u0915\u0948\u092e\u094d\u092c\u094b\u0921\u093f\u092f\u0928\u094d
+languages.kok=\u0915\u094b\u0902\u0915\u0923\u0940
languages.kl=\u0917\u094d\u0930\u0940\u0928\u0932\u0948\u0902\u0921\u093f\u0915
languages.kk=\u0915\u095b\u093e\u0916
languages.wo=\u0935\u094b\u0932\u094b\u092b
@@ -212,8 +212,8 @@ languages.cy=\u0935\u0947\u0932\u094d\u0936
languages.pa=\u092a\u0902\u091c\u093e\u092c\u0940
languages.cs=\u091a\u0947\u0915
languages.iu=\u0907\u0928\u0942\u0915\u0940\u091f\u0942\u0924\u094d
-languages.it=\u0908\u091f\u093e\u0932\u093f\u092f\u0928\u094d
languages.co=\u0915\u094b\u0930\u094d\u0938\u0940\u0915\u0928
+languages.it=\u0908\u091f\u093e\u0932\u093f\u092f\u0928\u094d
languages.is=\u0906\u0908\u0938\u094d\u0932\u0948\u0902\u0921\u093f\u0915\u094d
languages.uz=\u0909\u095b\u092c\u0947\u0915\u094d
languages.or=\u0909\u0921\u093c\u093f\u092f\u093e
@@ -306,15 +306,15 @@ languages.fy=\u092b\u094d\u0930\u0940\u091c\u093c\u0928\u094d
languages.sa=\u0938\u0902\u0938\u094d\u0915\u0943\u0924
languages.fr=\u092b\u094d\u0930\u0947\u0902\u091a
languages.lv=\u0932\u093e\u091f\u0935\u093f\u092f\u0928\u094d (\u0932\u0947\u091f\u094d\u091f\u0940\u0936)
-languages.lt=\u0932\u093f\u0925\u0941\u0928\u093f\u092f\u0928\u094d
languages.fo=\u092b\u093f\u0930\u094b\u095b\u0940
+languages.lt=\u0932\u093f\u0925\u0941\u0928\u093f\u092f\u0928\u094d
languages.rw=\u0915\u093f\u0928\u094d\u092f\u093e\u0930\u0935\u093e\u0923\u094d\u0921\u093e
languages.root=\u0936\u093f\u0916\u0930
languages.ru=\u0930\u0941\u0938\u0940
-languages.lo=\u0932\u093e\u0913\u0925\u0940\u092f\u0928\u094d
languages.fj=\u095e\u0940\u091c\u0940
-languages.ln=\u0932\u093f\u0902\u0917\u093e\u0932\u093e
+languages.lo=\u0932\u093e\u0913\u0925\u0940\u092f\u0928\u094d
languages.fi=\u092b\u093f\u0928\u093f\u0936
+languages.ln=\u0932\u093f\u0902\u0917\u093e\u0932\u093e
languages.ro=\u0930\u0942\u092e\u093e\u0928\u0940\u092f\u0928\u094d
languages.rn=\u0915\u093f\u0930\u0942\u0928\u094d\u0926\u0940
languages.rm=\u0930\u0939\u0947\u092f\u094d\u091f\u094b-\u0930\u094b\u092e\u093e\u0928\u094d\u0938
@@ -322,5 +322,5 @@ languages.fa=\u092a\u0930\u094d\u0936\u093f\u092f\u0928\u094d
languages.la=\u0932\u0948\u091f\u0940\u0928
languages.xh=\u0937\u094b\u0938\u093e
languages.eu=\u092c\u093e\u0938\u094d\u0915\u094d
-languages.ky=\u0915\u093f\u0930\u0918\u093f\u095b
languages.et=\u0910\u0938\u094d\u0924\u094b\u0928\u093f\u092f\u0928\u094d
+languages.ky=\u0915\u093f\u0930\u0918\u093f\u095b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi_IN.properties
index c5e3fda..7afb589 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hi_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hr.properties
index 9108900..5ea7f5a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hr.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hr.properties
@@ -9,54 +9,42 @@ decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
currenciesDisplayName.YDD=jemenski dinar
-currenciesDisplayName.KES=Kenijski \u0161iling
currenciesDisplayName.TWD=Novotajvanski dolar
+currenciesDisplayName.KES=Kenijski \u0161iling
currenciesDisplayName.LKR=Sri Lanka Rupee
currenciesDisplayName.TJS=Tad\u017eikistanski somoni
-currenciesDisplayName.ERN=Eritrean Nakfa
currenciesDisplayName.SDP=Sudanska funta
+currenciesDisplayName.ERN=Eritrean Nakfa
currenciesDisplayName.GRD=Gr\u010dka drahma
currenciesDisplayName.IEP=Irska funta
currenciesDisplayName.ARS=Argentinski pezo
-currenciesDisplayName.MQF=Martinique Franc
-currenciesDisplayName.ARP=Argentinski pezo (1983-1985)
currenciesDisplayName.SDD=Sudanski dinar
+currenciesDisplayName.ARP=Argentinski pezo (1983-1985)
currenciesDisplayName.GEL=Gruzijski lari
currenciesDisplayName.GEK=Georgian Kupon Larit
currenciesDisplayName.CRC=Kostarikanski kolon
-currenciesDisplayName.MDR=Moldovan Ruble Cupon
currenciesDisplayName.FKP=Falklandska funta
-currenciesDisplayName.GQP=Equatorial Guinea Peseta Guineana
currenciesDisplayName.EEK=Estonian Kroon
-currenciesDisplayName.MDL=Moldovski lej
currenciesDisplayName.HKD=Honkon\u0161ki dolar
+currenciesDisplayName.MDL=Moldovski lej
currenciesDisplayName.IQD=Ira\u010dki dinar
currenciesDisplayName.SCR=Sej\u0161elska rupija
-currenciesDisplayName.GQF=Equatorial Guinea Franco
currenciesDisplayName.DKK=Danska kruna
-currenciesDisplayName.IDR=Indonezijska rupija
currenciesDisplayName.GQE=Equatorial Guinea Ekwele Guineana
-currenciesDisplayName.MDC=Moldovan Leu Cupon
-currenciesDisplayName.SOS=Somalijski \u0161iling
+currenciesDisplayName.IDR=Indonezijska rupija
currenciesDisplayName.LVR=Latvian Ruble
+currenciesDisplayName.SOS=Somalijski \u0161iling
currenciesDisplayName.LVL=Latvian Lats
currenciesDisplayName.RUR=Ruska rublja (1991-1998)
-currenciesDisplayName.FJP=Fid\u017eijska funta
-currenciesDisplayName.MCG=Monaco Franc Germinal
-currenciesDisplayName.MCF=Monaco Franc Nouveau
-currenciesDisplayName.MOP=Macao Pataca
-currenciesDisplayName.GPF=Guadeloupe Franc
currenciesDisplayName.FJD=Fid\u017eijski dolar
+currenciesDisplayName.MOP=Macao Pataca
currenciesDisplayName.RUB=Ruska rublja
currenciesDisplayName.DJF=Djibouti Franc
-currenciesDisplayName.LIF=Lihten\u0161tajnski franak
-currenciesDisplayName.SBD=Solomonskooto\u010dni dolar
currenciesDisplayName.ECV=Ecuador Unidad de Valor Constante (UVC)
-currenciesDisplayName.TTO=Trinidadtoba\u0161ki stari dolar
+currenciesDisplayName.SBD=Solomonskooto\u010dni dolar
currenciesDisplayName.ECS=Ecuador Sucre
currenciesDisplayName.PHP=Filipinski pezo
currenciesDisplayName.LUF=Luksembur\u0161ki franak
-currenciesDisplayName.FIN=Finska marka (1860-1962)
currenciesDisplayName.FIM=Finska marka
currenciesDisplayName.TTD=Trinidadtoba\u0161ki dolar
currenciesDisplayName.SZL=Lilangeni
@@ -66,96 +54,73 @@ currenciesDisplayName.HUF=Ma\u0111arska forinta
currenciesDisplayName.COP=Kolumbijski pezo
currenciesDisplayName.LTT=Lithuanian Talonas
currenciesDisplayName.PTE=Portugalski eskudo
-currenciesDisplayName.PTC=Portugalski konto
currenciesDisplayName.GBP=Britanska funta
-currenciesDisplayName.ZRZ=Zairski zair
currenciesDisplayName.INR=Indijska rupija
+currenciesDisplayName.ZRZ=Zairski zair
currenciesDisplayName.LTL=Lithuanian Lita
-currenciesDisplayName.UYP=Urugvajski pezo (1975-1993)
-currenciesDisplayName.MZM=Mozambique Metical
currenciesDisplayName.KZT=Kazakhstan Tenge
-currenciesDisplayName.KZR=Kazakhstan Ruble
+currenciesDisplayName.MZM=Mozambique Metical
+currenciesDisplayName.UYP=Urugvajski pezo (1975-1993)
currenciesDisplayName.AOK=Angolska kvanza (1977-1990)
currenciesDisplayName.GNS=Guinea Syli
currenciesDisplayName.SYP=Sirijska funta
-currenciesDisplayName.OMR=Omanski rijal
-currenciesDisplayName.NGP=Nigerijska funta
currenciesDisplayName.MZE=Mozambique Escudo
-currenciesDisplayName.ZRN=Zairski novi zair
+currenciesDisplayName.OMR=Omanski rijal
currenciesDisplayName.NGN=Nigerijska naira
-currenciesDisplayName.PSP=Palestinska funta
+currenciesDisplayName.ZRN=Zairski novi zair
currenciesDisplayName.AOA=Angolska kvanza
-currenciesDisplayName.GNI=Gvinejski franak (1960-1972)
+currenciesDisplayName.CNY=Kineski Yuan Renminbi
currenciesDisplayName.MAF=Morokanski franak
currenciesDisplayName.GNF=Gvinejski franak
-currenciesDisplayName.MAD=Morokanski dirham
currenciesDisplayName.HTG=Haitian Gourde
-currenciesDisplayName.CNP=Chinese Jen Min Piao Yuan
+currenciesDisplayName.MAD=Morokanski dirham
+currenciesDisplayName.TRY=Nova Turska Lira
currenciesDisplayName.MMK=Myanmar Kyat
currenciesDisplayName.MYR=Malaysian Ringgit
currenciesDisplayName.LSL=Lesotho Loti
currenciesDisplayName.TRL=Turska lira
currenciesDisplayName.KMF=Comoro Franc
currenciesDisplayName.CZK=\u010ce\u0161ka kruna
-currenciesDisplayName.GMP=Gambijska funta
currenciesDisplayName.AZM=Azerbejd\u017eanski manat
currenciesDisplayName.KYD=Kajmanski dolar
currenciesDisplayName.GMD=Gambia Dalasi
currenciesDisplayName.CAD=Kanadski dolar
currenciesDisplayName.VEB=Venezuelski bolivar
currenciesDisplayName.MLF=Mali Franc
-currenciesDisplayName.MXP=Meksi\u010dki srebrni pezo (1861-1992)
currenciesDisplayName.ILS=Novi izraelski \u0161ekel
+currenciesDisplayName.MXP=Meksi\u010dki srebrni pezo (1861-1992)
currenciesDisplayName.PES=Peruanski sol
-currenciesDisplayName.MXN=Meksi\u010dki pezo
currenciesDisplayName.GYD=Guyana Dollar
+currenciesDisplayName.MXN=Meksi\u010dki pezo
currenciesDisplayName.ILP=Israelska funta
-currenciesDisplayName.CYP=Ciparska funta
currenciesDisplayName.SKK=Slova\u010dka kruna
+currenciesDisplayName.CYP=Ciparska funta
currenciesDisplayName.PEN=Peruanski novi sol
-currenciesDisplayName.ILL=Israelski \u0161ekel
currenciesDisplayName.LRD=Liberijski dolar
currenciesDisplayName.PEI=Peruanski inti
currenciesDisplayName.AMD=Armenian Dram
-currenciesDisplayName.GLK=Grenlandska kruna
currenciesDisplayName.HRK=Kuna
-currenciesDisplayName.MKN=Makedonski denar (1992-1993)
-currenciesDisplayName.HRD=Hrvatski dinar
currenciesDisplayName.CLP=\u010cileanski pezo
-currenciesDisplayName.ALV=Albanian Lek Valute
-currenciesDisplayName.FRG=French Franc Germinal/Franc Poincare
+currenciesDisplayName.HRD=Hrvatski dinar
currenciesDisplayName.FRF=Francuski franak
-currenciesDisplayName.MWP=Malawi Pound
currenciesDisplayName.MKD=Makedonski denar
-currenciesDisplayName.TPP=Timor Pataca
-currenciesDisplayName.PDR=Transdniestria Ruble
currenciesDisplayName.CLF=Chilean Unidades de Fomento
currenciesDisplayName.ALL=Albanski lek
currenciesDisplayName.MWK=Malawi Kwacha
-currenciesDisplayName.ALK=Albanski lek (1946-1961)
-currenciesDisplayName.PDK=Transdniestria Ruble Kupon
+currenciesDisplayName.BRL=Brazilski Real
currenciesDisplayName.TPE=Timorski eskudo
-currenciesDisplayName.DES=German Sperrmark
currenciesDisplayName.DEM=Njema\u010dka marka
-currenciesDisplayName.YUR=Jugoslavenski reformirani dinar
currenciesDisplayName.KWD=Kuvajtski dinar
currenciesDisplayName.NPR=Nepalska rupija
currenciesDisplayName.GWP=Gvinejskobisauski pezo
-currenciesDisplayName.YUO=Jugoslavenski oktobarski dinar
currenciesDisplayName.YUN=Jugoslavenski konvertibilni dinar
currenciesDisplayName.YUM=Jugoslavenski novi dinar
-currenciesDisplayName.GWM=Portuguese Guinea Mil Reis
currenciesDisplayName.SIT=Slovenski tolar
currenciesDisplayName.JPY=Japanski jen
-currenciesDisplayName.YUG=Jugoslavenski dinar 1994
-currenciesDisplayName.YUF=Jugoslavenski federalni dinar
currenciesDisplayName.BEF=Belgijski franak
-currenciesDisplayName.YUD=Jugoslavenski \u010dvrsti dinar
currenciesDisplayName.GWE=Portuguese Guinea Escudo
-currenciesDisplayName.RON=Rumunjski novi lej
+currenciesDisplayName.YUD=Jugoslavenski \u010dvrsti dinar
currenciesDisplayName.ROL=Rumunjski lej
-currenciesDisplayName.CWG=Curacao Guilder
-currenciesDisplayName.SIB=Slovenia Tolar Bons
currenciesDisplayName.BDT=Taka
currenciesDisplayName.DDM=East German Ostmark
currenciesDisplayName.XBB=Europska monetarna jedinica
@@ -163,305 +128,142 @@ currenciesDisplayName.XBA=Europska slo\u017eena jedinica
currenciesDisplayName.NOK=Norve\u0161ka kruna
currenciesDisplayName.MUR=Mauricijska rupija
currenciesDisplayName.ZAR=Ju\u017enoafri\u010dki rand
-currenciesDisplayName.ZAP=Ju\u017enoafri\u010dka funta
currenciesDisplayName.XAU=Zlato
currenciesDisplayName.ZAL=Ju\u017enoafri\u010dki rand (financijski)
currenciesDisplayName.VND=Viejetnamski dong
-currenciesDisplayName.KID=Kiribati Dollar
currenciesDisplayName.TZS=Tanzanijski \u0161iling
currenciesDisplayName.GIP=Gibraltarska funta
-currenciesDisplayName.ZMP=Zambijska funta
currenciesDisplayName.TND=Tuniski dinar
currenciesDisplayName.CVE=Zelenortski eskudo
currenciesDisplayName.UGX=Ugandski \u0161iling
currenciesDisplayName.ZMK=Zambijska kva\u010da
currenciesDisplayName.JOD=Jordanski dinar
currenciesDisplayName.UGS=Ugandski \u0161iling (1966-1987)
-currenciesDisplayName.FOK=Faeroe Islands Kronur
currenciesDisplayName.KHR=Cambodian Riel
currenciesDisplayName.DOP=Dominikanski pezo
currenciesDisplayName.EUR=Euro
-currenciesDisplayName.LNR=Ceylon Rupee
-currenciesDisplayName.KHO=Cambodian Old Riel
-currenciesDisplayName.GUF=French Guyana Franc Guiana
currenciesDisplayName.MTP=Malte\u0161ka funta
currenciesDisplayName.USS=Ameri\u010dki dolar (isti dan)
-currenciesDisplayName.MHD=Marshall Islands Dollar
-currenciesDisplayName.NZP=Novozelandska funta
currenciesDisplayName.CUP=Kubanski pezo
currenciesDisplayName.MTL=Malte\u0161ka lira
currenciesDisplayName.TMM=Turkmenistanski manat
currenciesDisplayName.USN=Ameri\u010dki dolar (sljede\u0107i dan)
-currenciesDisplayName.SSP=\u0160kotska funta
currenciesDisplayName.SGD=Singapurski dolar
currenciesDisplayName.NZD=Novozelandski dolar
currenciesDisplayName.USD=Ameri\u010dki dolar
currenciesDisplayName.HNL=Hodura\u0161ka lempira
-currenciesDisplayName.ITL=Talijanska lira
currenciesDisplayName.PAB=Panamska balboa
+currenciesDisplayName.ITL=Talijanska lira
currenciesDisplayName.GTQ=Kvecal
-currenciesDisplayName.AUD=Australski dolar
-currenciesDisplayName.LAK=Laotian Kip
currenciesDisplayName.NAD=Namibijski dolar
+currenciesDisplayName.LAK=Laotian Kip
+currenciesDisplayName.AUD=Australski dolar
currenciesDisplayName.KGS=Kyrgystan Som
-currenciesDisplayName.BBD=Barbadoski dolar
currenciesDisplayName.CHF=\u0160vicarski franak
+currenciesDisplayName.BBD=Barbadoski dolar
currenciesDisplayName.PYG=Paragvajski gvarani
-currenciesDisplayName.JMP=Jamai\u010danska funta
currenciesDisplayName.PLZ=Poljska zlota (1950-1995)
currenciesDisplayName.YER=Jemenski rial
currenciesDisplayName.ATS=Austrijski \u0161iling
-currenciesDisplayName.ETD=Etiopski dolar
-currenciesDisplayName.LYP=Libijska funta
currenciesDisplayName.ETB=Etiopski bir
currenciesDisplayName.BND=Brunejski dolar
-currenciesDisplayName.DZG=Algerian Franc Germinal
-currenciesDisplayName.DZF=Algerian New Franc
-currenciesDisplayName.YEI=Yemeni Imadi Riyal
-currenciesDisplayName.EGP=Egipatska funta
-currenciesDisplayName.JMD=Jamai\u010danski dolar
currenciesDisplayName.PLN=Poljska zlota
+currenciesDisplayName.JMD=Jamai\u010danski dolar
+currenciesDisplayName.EGP=Egipatska funta
currenciesDisplayName.DZD=Al\u017eirski dinar
-currenciesDisplayName.ISK=Islandska kruna
currenciesDisplayName.SRG=Surinamski gulden
+currenciesDisplayName.ISK=Islandska kruna
currenciesDisplayName.LYD=Libijski dinar
currenciesDisplayName.BAM=Konvertibilna marka
currenciesDisplayName.ESP=\u0160panjolska pezeta
currenciesDisplayName.NLG=Nizozemski gulden
currenciesDisplayName.MRO=Mauritanska ouguja
-currenciesDisplayName.BMP=Bermudska funta
currenciesDisplayName.ZWD=Zimbabveanski dolar
currenciesDisplayName.SEK=\u0160vedska kruna
currenciesDisplayName.CSK=Czechoslovak Hard Koruna
currenciesDisplayName.IRR=Iranski rijal
currenciesDisplayName.PKR=Pakistanska rupija
currenciesDisplayName.BMD=Bermudski dolar
-currenciesDisplayName.CSC=\u010ce\u0161ka kruna
-currenciesSymbol.YDD=YDD
currenciesSymbol.KES=K Sh
-currenciesSymbol.TWD=NT$
currenciesSymbol.LKR=SL Re
-currenciesSymbol.TJS=TJS
-currenciesSymbol.ERN=ERN
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GRD=GRD
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.MKD=MDen
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.MQF=MQF
-currenciesSymbol.ARP=ARP
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AMD=dram
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.CRC=C
-currenciesSymbol.MDR=MDR
-currenciesSymbol.FKP=FKP
-currenciesSymbol.GQP=GQP
-currenciesSymbol.EEK=EEK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.HKD=HK$
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.SCR=SR
-currenciesSymbol.GQF=GQF
-currenciesSymbol.DKK=DKr
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
currenciesSymbol.IDR=Rp
-currenciesSymbol.GQE=GQE
-currenciesSymbol.MDC=MDC
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.LVR=LVR
-currenciesSymbol.LVL=LVL
-currenciesSymbol.RUR=RUR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.MOP=MOP
-currenciesSymbol.GPF=GPF
-currenciesSymbol.FJD=F$
-currenciesSymbol.RUB=RUB
-currenciesSymbol.DJF=DF
-currenciesSymbol.LIF=LIF
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.ECV=ECV
-currenciesSymbol.TTO=TTO
-currenciesSymbol.ECS=ECS
-currenciesSymbol.PHP=PHP
-currenciesSymbol.LUF=LUF
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.MNT=Tug
-currenciesSymbol.UAH=UAH
-currenciesSymbol.HUF=Ft
-currenciesSymbol.COP=Col$
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.PTC=PTC
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.INR=INR
-currenciesSymbol.LTL=LTL
-currenciesSymbol.UYP=UYP
-currenciesSymbol.MZM=Mt
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.AOK=AOK
-currenciesSymbol.GNS=GNS
-currenciesSymbol.SYP=LS
-currenciesSymbol.OMR=RO
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MZE=MZE
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.NGN=NGN
-currenciesSymbol.PSP=PSP
-currenciesSymbol.AOA=AOA
-currenciesSymbol.GNI=GNI
-currenciesSymbol.MAF=MAF
-currenciesSymbol.GNF=GF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.HTG=HTG
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MMK=MMK
-currenciesSymbol.MYR=RM
-currenciesSymbol.LSL=M
-currenciesSymbol.TRL=TL
-currenciesSymbol.KMF=CF
-currenciesSymbol.CZK=CZK
-currenciesSymbol.GMP=GMP
-currenciesSymbol.AZM=AZM
-currenciesSymbol.KYD=KYD
-currenciesSymbol.GMD=GMD
-currenciesSymbol.CAD=Can$
-currenciesSymbol.VEB=Be
-currenciesSymbol.MLF=MLF
-currenciesSymbol.MXP=MXP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.PES=PES
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.GYD=G$
-currenciesSymbol.ILP=ILP
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.SKK=Sk
-currenciesSymbol.PEN=PEN
-currenciesSymbol.ILL=ILL
-currenciesSymbol.LRD=LRD
-currenciesSymbol.PEI=PEI
-currenciesSymbol.AMD=dram
-currenciesSymbol.GLK=GLK
-currenciesSymbol.HRK=HRK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.HRD=HRD
-currenciesSymbol.CLP=Ch$
-currenciesSymbol.ALV=ALV
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.MWP=MWP
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.PDR=PDR
-currenciesSymbol.CLF=CLF
-currenciesSymbol.ALL=lek
-currenciesSymbol.MWK=MK
-currenciesSymbol.ALK=ALK
-currenciesSymbol.PDK=PDK
-currenciesSymbol.TPE=TPE
-currenciesSymbol.DES=DES
-currenciesSymbol.DEM=DEM
-currenciesSymbol.YUR=YUR
-currenciesSymbol.KWD=KD
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.GWP=GWP
-currenciesSymbol.YUO=YUO
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.GWM=GWM
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.YUD=YUD
-currenciesSymbol.GWE=GWE
-currenciesSymbol.BEF=BF
-currenciesSymbol.RON=RON
-currenciesSymbol.ROL=leu
-currenciesSymbol.CWG=CWG
-currenciesSymbol.SIB=SIB
+currenciesSymbol.FJD=F$
currenciesSymbol.BDT=Tk
-currenciesSymbol.DDM=DDM
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.ZAR=R
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.XAU=XAU
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.VND=VND
-currenciesSymbol.KID=KID
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.GIP=GIP
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.TND=TND
-currenciesSymbol.CVE=CVEsc
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.ZMK=ZMK
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
currenciesSymbol.JOD=JD
-currenciesSymbol.UGS=UGS
-currenciesSymbol.FOK=FOK
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
currenciesSymbol.KHR=CR
-currenciesSymbol.DOP=RD$
-currenciesSymbol.LNR=LNR
-currenciesSymbol.KHO=KHO
-currenciesSymbol.GUF=GUF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.USS=USS
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.CUP=CUP
+currenciesSymbol.SYP=LS
currenciesSymbol.MTL=Lm
-currenciesSymbol.TMM=TMM
-currenciesSymbol.USN=USN
-currenciesSymbol.SSP=SSP
-currenciesSymbol.SGD=S$
+currenciesSymbol.MZM=Mt
+currenciesSymbol.CVE=CVEsc
+currenciesSymbol.YER=YRl
+currenciesSymbol.HUF=Ft
currenciesSymbol.NZD=$NZ
-currenciesSymbol.USD=US$
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
+currenciesSymbol.DOP=RD$
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.PAB=PAB
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
+currenciesSymbol.PLN=Zl
+currenciesSymbol.VEB=Be
+currenciesSymbol.KMF=CF
+currenciesSymbol.SEK=SKr
currenciesSymbol.AUD=$A
-currenciesSymbol.LAK=LAK
-currenciesSymbol.NAD=N$
-currenciesSymbol.KGS=som
-currenciesSymbol.BBD=BDS$
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
currenciesSymbol.CHF=SwF
-currenciesSymbol.PYG=PYG
-currenciesSymbol.JMP=JMP
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.YER=YRl
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.LYP=LYP
currenciesSymbol.ETB=Br
-currenciesSymbol.BND=BND
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.YEI=YEI
-currenciesSymbol.EGP=EGP
-currenciesSymbol.JMD=J$
-currenciesSymbol.PLN=Zl
-currenciesSymbol.DZD=DA
-currenciesSymbol.ISK=ISK
-currenciesSymbol.SRG=Sf
-currenciesSymbol.LYD=LD
-currenciesSymbol.BAM=KM
-currenciesSymbol.ESP=ESP
-currenciesSymbol.NLG=NLG
currenciesSymbol.MRO=UM
-currenciesSymbol.BMP=BMP
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.SEK=SKr
-currenciesSymbol.CSK=CSK
-currenciesSymbol.IRR=RI
+currenciesSymbol.BBD=BDS$
currenciesSymbol.PKR=Pra
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.CSC=CSC
+currenciesSymbol.TWD=NT$
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=sij®vel®o\u017eu®tra®svi®lip®srp®kol®ruj®lis®stu®pro®®
months=sije\u010danj®velja\u010da®o\u017eujak®travanj®svibanj®lipanj®srpanj®kolovoz®rujan®listopad®studeni®prosinac®®
shortWeekdays=®ned®pon®uto®sri®\u010det®pet®sub®
@@ -493,7 +295,9 @@ territories.GN=Gvineja
territories.GM=Gambija
territories.GL=Greenland
territories.SV=El Salvador
+territories.062=Ju\u017eno-centralna Azija
territories.ST=Sveti Toma i Prinsipe
+territories.061=Polinezija
territories.GI=Gibraltar
territories.GH=Gana
territories.SR=Surinam
@@ -517,9 +321,12 @@ territories.SC=Sej\u0161eli
territories.SB=Salamunovi Otoci
territories.SA=Saudijska Arabija
territories.FR=Francuska
+territories.057=Micronezija
territories.FO=Farski Otoci
territories.FM=Mikronezija, Federalne Dr\u017eave
territories.RW=Ruanda
+territories.054=Melanezija
+territories.053=Australija i Novi Zeland
territories.FK=Falklandski Otoci
territories.RU=Ruska Federacija
territories.FJ=Fid\u017ei
@@ -529,20 +336,26 @@ territories.RE=Reunion
territories.ET=Etiopija
territories.ES=\u0160panjolska
territories.ER=Eritreja
+territories.833=Otok Man
territories.EH=Zapadna Sahara
territories.EG=Egipat
+territories.830=Kanalski otoci
territories.EE=Estonija
+territories.QO=Ostala oceanija
territories.EC=Ekvador
territories.DZ=Al\u017eir
territories.QA=Katar
+territories.039=Ju\u017ena Europa
territories.DO=Dominikanska Republika
territories.PY=Paragvaj
+territories.035=Jugoisto\u010dna Azija
territories.DM=Dominika
territories.PW=Palau
territories.DK=Danska
territories.DJ=D\u017eibuti
territories.PT=Portugal
territories.PS=Palestinska Teritoija
+territories.030=Isto\u010dna Azija
territories.PR=Portoriko
territories.DE=Njema\u010dka
territories.PN=Pitcairn
@@ -559,13 +372,16 @@ territories.CX=Bo\u017ei\u0107ni Otoci
territories.CV=Zeleni Rt
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Srbija i Crna Gora
territories.CR=Kostarika
+territories.029=Karibi
territories.CO=Kolumbija
territories.CN=Kina
territories.CM=Kamerun
territories.CL=\u010cile
territories.CK=Kukovi Otoci
territories.CI=Obala Bjelokosti
+territories.021=Sjeverna Amerika
territories.CH=\u0160vicarska
territories.CG=Kongo
territories.CF=Srednjoafri\u010dka Republika
@@ -580,13 +396,20 @@ territories.BV=Otok Bouvet
territories.BT=Butan
territories.BS=Bahami
territories.BR=Brazil
+territories.019=Amerike
+territories.018=Ju\u017ena Afrika
territories.NZ=Novi Zeland
territories.BO=Bolivija
+territories.017=Sredi\u0161nja Afrika
territories.BN=Brunei Darussalam
territories.BM=Bermuda
+territories.015=Sjeverna Afrika
+territories.014=Isto\u010dna Afrika
+territories.013=Centralna Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Zapadna Afrika
territories.BH=Bahrein
territories.NR=Nauru
territories.BG=Bugarska
@@ -604,6 +427,7 @@ territories.NG=Nigerija
territories.NF=Norfol\u0161ki Otoci
territories.AZ=Azerbajd\u017ean
territories.NE=Niger
+territories.AX=Alandski otoci
territories.NC=Nova Kaledonija
territories.AW=Aruba
territories.ZM=Zambija
@@ -612,19 +436,23 @@ territories.AU=Australija
territories.AT=Austrija
territories.AS=Ameri\u010dka Samoa
territories.AR=Argentina
+territories.009=Oceanija
territories.AQ=Antarktik
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malezija
territories.AN=Nizozemski Antili
territories.MX=Meksiko
+territories.005=Ju\u017ena Amerika
territories.AM=Armenija
territories.MW=Malavi
territories.AL=Albanija
territories.MV=Maldivi
territories.ZA=Ju\u017ena Afrika
territories.MU=Mauricijus
+territories.002=Afrika
territories.MT=Malta
+territories.001=Svijet
territories.AI=Anguila
territories.MS=Montserat
territories.MR=Mauritanija
@@ -639,7 +467,6 @@ territories.MN=Mongolija
territories.MM=Mijanma
territories.ML=Mali
territories.MK=Makedonija, Republika
-territories.YU=Jugoslavija
territories.YT=Majote
territories.MH=Mar\u0161alovi Otoci
territories.MG=Madagaskar
@@ -649,10 +476,14 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=Libijska Arapska D\u017eamahirija
territories.LV=Latvija
+territories.155=Zapadna Europa
territories.LU=Luksemburg
+territories.154=Sjeverna Europa
territories.LT=Litva
territories.LS=Lesoto
territories.LR=Liberija
+territories.151=Isto\u010dna Europa
+territories.150=Europa
territories.LK=\u0160ri Lanka
territories.LI=Lihten\u0161tajn
territories.LC=Sveta Lucija
@@ -661,6 +492,8 @@ territories.LA=Laoska Narodna Demokratska Republika
territories.KZ=Kazakstan
territories.KY=Kajmanski Otoci
territories.KW=Kuvajt
+territories.145=Zapadna Azija
+territories.142=Azija
territories.KR=Koreja, Ju\u017ena
territories.KP=Koreja, Sjeverna
territories.KN=Sveti Kristofor i Nevis
@@ -729,17 +562,17 @@ languages.de=njema\u010dki
languages.pl=poljski
languages.sl=slovenski
languages.sk=slova\u010dki
-languages.da=danski
languages.art=umjetni (ostali)
+languages.da=danski
languages.ga=irski
languages.vi=vijetnamski
languages.ja=japanski
languages.gmh=njema\u010dki, srednji visoki (ca.1050-1500)
languages.sla=slavenski (drugi)
-languages.cy=vel\u0161ki
languages.egy=egipatski (anti\u010dki)
-languages.fy=frizijski
+languages.cy=vel\u0161ki
languages.cel=keltski (ostali)
+languages.fy=frizijski
languages.cu=crkvenoslavenski
languages.cs=\u010de\u0161ki
languages.lv=latvijski
@@ -760,11 +593,11 @@ languages.goh=njema\u010dki, stari visoki (ca.750-1050)
languages.bat=balti\u010dki (ostali)
languages.hy=armenski
languages.ang=engleski, stari (ca.450-1100)
-languages.fro=francuski, stari (842-ca.1400)
languages.et=estonijski
+languages.fro=francuski, stari (842-ca.1400)
languages.hu=ma\u0111arski
-languages.grc=gr\u010dki, anti\u010dki (do 1453)
languages.es=\u0161panjolski
+languages.grc=gr\u010dki, anti\u010dki (do 1453)
languages.frm=francuski, srednji (ca.1400-1600)
languages.hr=hrvatski
languages.eo=esperanto
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hu.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hu.properties
index 6abe64d..ded78ef 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hu.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hu.properties
@@ -8,764 +8,354 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=Jord\u00e1niai d\u00edn\u00e1r
-currenciesDisplayName.BOV=Bol\u00edviai mvdol
-currenciesDisplayName.XAU=Arany
-currenciesDisplayName.FOK=Fer\u00f6er-szigeteki korona
-currenciesDisplayName.LBP=Libanoni font
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietn\u00e1mi dong
-currenciesDisplayName.TZS=Tanz\u00e1niai shilling
-currenciesDisplayName.BOP=Bol\u00edviai peso
-currenciesDisplayName.KHR=Kambodzsai riel
-currenciesDisplayName.XAM=Asian Monetary Unit
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Kambodzsai r\u00e9gi riel
-currenciesDisplayName.ZMP=Zambiai font
-currenciesDisplayName.AUP=Ausztr\u00e1l font
-currenciesDisplayName.XAF=CFA frank BEAC
-currenciesDisplayName.MTP=M\u00e1ltai font
-currenciesDisplayName.GHR=Gh\u00e1nai \u00fajra\u00e9rt\u00e9kelt cedi
-currenciesDisplayName.ZMK=Zambiai kwacha
-currenciesDisplayName.XAD=Asian Dinar Unit of Account
-currenciesDisplayName.GHP=Gh\u00e1nai font
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Gh\u00e1nai r\u00e9gi cedi
-currenciesDisplayName.MTL=M\u00e1ltai l\u00edra
-currenciesDisplayName.AUD=Ausztr\u00e1l doll\u00e1r
-currenciesDisplayName.USS=USA doll\u00e1r (aznapi)
-currenciesDisplayName.ITL=Olasz l\u00edra
-currenciesDisplayName.USN=USA doll\u00e1r (k\u00f6vetkez\u0151 napi)
-currenciesDisplayName.GHC=Gh\u00e1nai cedi
-currenciesDisplayName.SGD=Szingap\u00fari doll\u00e1r
-currenciesDisplayName.PAB=Panamai balboa
-currenciesDisplayName.LAK=Laoszi kip
-currenciesDisplayName.KGS=Kirgiziszt\u00e1ni szom
-currenciesDisplayName.CHF=Sv\u00e1jci frank
-currenciesDisplayName.ATS=Osztr\u00e1k schilling
-currenciesDisplayName.USD=USA doll\u00e1r
-currenciesDisplayName.ETD=Eti\u00f3piai doll\u00e1r
-currenciesDisplayName.BND=Brunei doll\u00e1r
-currenciesDisplayName.JMP=Jamaikai font
-currenciesDisplayName.ETB=Eti\u00f3piai birr
-currenciesDisplayName.DZG=Alg\u00e9riai kezdeti frank
-currenciesDisplayName.DZF=Alg\u00e9riai \u00faj frank
-currenciesDisplayName.DZD=Alg\u00e9riai d\u00edn\u00e1r
-currenciesDisplayName.PYG=Paraguayi guarani
-currenciesDisplayName.LYP=L\u00edbiai font
-currenciesDisplayName.JMD=Jamaikai doll\u00e1r
-currenciesDisplayName.ISK=Izlandi korona
-currenciesDisplayName.ESP=Spanyol peseta
-currenciesDisplayName.BMP=Bermudai font
-currenciesDisplayName.LYD=L\u00edbiai d\u00edn\u00e1r
-currenciesDisplayName.LYB=L\u00edbiai brit katonai fennhat\u00f3s\u00e1gi l\u00edra
-currenciesDisplayName.BMD=Bermudai doll\u00e1r
-currenciesDisplayName.NLG=Holland forint
-currenciesDisplayName.MRO=Maurit\u00e1niai ouguiya
-currenciesDisplayName.IRR=Ir\u00e1ni rial
-currenciesDisplayName.SEK=Sv\u00e9d korona
-currenciesDisplayName.ERN=Eritreai nakfa
+currenciesDisplayName.YDD=Jemeni d\u00edn\u00e1r
+currenciesDisplayName.TWD=Tajvani \u00faj doll\u00e1r
currenciesDisplayName.KES=Kenyai shilling
-currenciesDisplayName.CFF=K\u00f6z\u00e9p-afrikai CFA frank
+currenciesDisplayName.BYB=Feh\u00e9rorosz \u00faj rubel (1994-1999)
+currenciesDisplayName.LKR=Sri Lankai r\u00fapia
+currenciesDisplayName.RWF=Ruandai frank
+currenciesDisplayName.TJS=T\u00e1dzsikiszt\u00e1ni somoni
+currenciesDisplayName.SDP=Szud\u00e1ni font
+currenciesDisplayName.TJR=T\u00e1dzsikiszt\u00e1ni rubel
+currenciesDisplayName.ERN=Eritreai nakfa
+currenciesDisplayName.AFN=Afghani
+currenciesDisplayName.GRD=G\u00f6r\u00f6g drachma
+currenciesDisplayName.IEP=\u00cdr font
currenciesDisplayName.ARS=Peso
+currenciesDisplayName.SDD=Szud\u00e1ni d\u00edn\u00e1r
currenciesDisplayName.ARP=Argent\u00edn peso (1983-1985)
-currenciesDisplayName.ARM=Argent\u00edn peso moneda nacional
-currenciesDisplayName.TWD=Tajvani \u00faj doll\u00e1r
-currenciesDisplayName.SDP=Szud\u00e1ni font
currenciesDisplayName.GEL=Gr\u00faz lari
+currenciesDisplayName.AFA=Afghani (1927-2002)
currenciesDisplayName.GEK=Gr\u00faz kupon larit
-currenciesDisplayName.MQF=Martiniquei frank
+currenciesDisplayName.CRC=Costa Ricai colon
currenciesDisplayName.FKP=Falkland-szigeteki font
+currenciesDisplayName.EEK=\u00c9szt korona
+currenciesDisplayName.HKD=Hongkongi doll\u00e1r
+currenciesDisplayName.MDL=Moldov\u00e1n lei
currenciesDisplayName.ARA=Argent\u00edn austral
-currenciesDisplayName.SDD=Szud\u00e1ni d\u00edn\u00e1r
currenciesDisplayName.IQD=Iraki d\u00edn\u00e1r
-currenciesDisplayName.TVD=Tuvalui doll\u00e1r
currenciesDisplayName.SCR=Seychelle-szigeteki r\u00fapia
+currenciesDisplayName.VUV=Vanuatui vatu
+currenciesDisplayName.DKK=D\u00e1n korona
+currenciesDisplayName.KPW=\u00c9szak-koreai won
+currenciesDisplayName.GQE=Egyenl\u00edt\u0151i-guineai ekwele guineana
+currenciesDisplayName.IDR=Indon\u00e9z r\u00fapia
currenciesDisplayName.LVR=Lett rubel
-currenciesDisplayName.FJP=Fidzsi font
+currenciesDisplayName.SOS=Szom\u00e1li shilling
+currenciesDisplayName.AED=EAE dirham
+currenciesDisplayName.BWP=Botswanai pula
currenciesDisplayName.LVL=Lett lats
-currenciesDisplayName.CDL=Kong\u00f3i zaire
-currenciesDisplayName.CDG=Kong\u00f3i k\u00f6zt\u00e1rsas\u00e1gi frank
-currenciesDisplayName.CDF=Kong\u00f3i frank
-currenciesDisplayName.FJD=Fidzsi doll\u00e1r
+currenciesDisplayName.RUR=Orosz rubel (1991-1998)
currenciesDisplayName.NIO=Nikaraguai cordoba oro
+currenciesDisplayName.ADP=Andorrai peseta
+currenciesDisplayName.FJD=Fidzsi doll\u00e1r
currenciesDisplayName.MOP=Macaoi pataca
-currenciesDisplayName.NIG=Nikaraguai arany cordoba
+currenciesDisplayName.RUB=Orosz rubel
+currenciesDisplayName.CDF=Kong\u00f3i frank
currenciesDisplayName.NIC=Nikaraguai cordoba
-currenciesDisplayName.XTR=COMECON Transferable Ruble
-currenciesDisplayName.FIN=Finn markka (1860-1962)
-currenciesDisplayName.FIM=Finn markka
+currenciesDisplayName.DJF=Dzsibuti frank
+currenciesDisplayName.ECV=Ecuadori Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Salamon-szigeteki doll\u00e1r
+currenciesDisplayName.UZS=\u00dczbegiszt\u00e1ni szum
+currenciesDisplayName.ECS=Ecuadori sucre
+currenciesDisplayName.PHP=F\u00fcl\u00f6p-szigeteki peso
+currenciesDisplayName.THB=Thai baht
currenciesDisplayName.LUF=Luxemburgi frank
-currenciesDisplayName.TTO=Trinidad \u00e9s tobagoi r\u00e9gi doll\u00e1r
-currenciesDisplayName.AOS=Angolai escudo
-currenciesDisplayName.AOR=Angolai kwanza reajustado (1995-1999)
-currenciesDisplayName.MNT=Mong\u00f3liai tugrik
-currenciesDisplayName.HUF=Magyar forint
-currenciesDisplayName.BIF=Burundi frank
-currenciesDisplayName.AON=Angolai \u00faj kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolai kwanza (1977-1990)
+currenciesDisplayName.FIM=Finn markka
currenciesDisplayName.TTD=Trinidad \u00e9s tobagoi doll\u00e1r
currenciesDisplayName.SZL=Szv\u00e1zif\u00f6ldi lilangeni
-currenciesDisplayName.NHF=\u00daj-hebrid\u00e1ki CFP frank
-currenciesDisplayName.GBP=Brit font sterling
-currenciesDisplayName.SAS=Sza\u00fadi szuver\u00e9n riyal
+currenciesDisplayName.MNT=Mong\u00f3liai tugrik
currenciesDisplayName.SAR=Sza\u00fadi riyal
+currenciesDisplayName.UAK=Ukr\u00e1n karbovanec
+currenciesDisplayName.UAH=Ukr\u00e1n hrivnya
+currenciesDisplayName.HUF=Magyar forint
+currenciesDisplayName.COP=Kolumbiai peso
+currenciesDisplayName.QAR=Katari rial
currenciesDisplayName.LTT=Litv\u00e1niai talonas
currenciesDisplayName.PTE=Portug\u00e1l escudo
-currenciesDisplayName.AOA=Angolai kwanza
-currenciesDisplayName.PTC=Portug\u00e1l conto
+currenciesDisplayName.AOR=Angolai kwanza reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguay-i peso uruguayo
+currenciesDisplayName.GBP=Brit font sterling
+currenciesDisplayName.BIF=Burundi frank
+currenciesDisplayName.INR=Indiai r\u00fapia
+currenciesDisplayName.ZRZ=Zairei zaire
+currenciesDisplayName.AON=Angolai \u00faj kwanza (1990-2000)
currenciesDisplayName.LTL=Litv\u00e1niai litas
+currenciesDisplayName.XFU=Francia UIC-frank
currenciesDisplayName.KZT=Kazahszt\u00e1ni tenge
-currenciesDisplayName.KZR=Kazahszt\u00e1ni rubel
-currenciesDisplayName.VGD=Brit virgin-szigeteki doll\u00e1r
-currenciesDisplayName.NGP=Nig\u00e9riai font
-currenciesDisplayName.MMX=Mianmari doll\u00e1r konvertibilis valuta
+currenciesDisplayName.MZM=Mozambik metical
+currenciesDisplayName.UYP=Uruguay-i peso (1975-1993)
+currenciesDisplayName.AOK=Angolai kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmai kyat
+currenciesDisplayName.GNS=Guineai syli
+currenciesDisplayName.XFO=Francia arany frank
+currenciesDisplayName.PGK=P\u00e1pua \u00faj-guineai kina
+currenciesDisplayName.SYP=Sz\u00edriai font
+currenciesDisplayName.MZE=Mozambik escudo
+currenciesDisplayName.OMR=Om\u00e1ni rial
currenciesDisplayName.NGN=Nig\u00e9riai naira
+currenciesDisplayName.ZRN=Zairei \u00faj zaire
+currenciesDisplayName.AOA=Angolai kwanza
+currenciesDisplayName.CNY=K\u00ednai j\u00fcan renminbi
+currenciesDisplayName.MAF=Marokk\u00f3i frank
+currenciesDisplayName.GNF=Guineai frank
currenciesDisplayName.HTG=Haiti gourde
-currenciesDisplayName.SYP=Sz\u00edriai font
-currenciesDisplayName.PSP=Palesztin font
-currenciesDisplayName.BHD=Bahreini din\u00e1r
+currenciesDisplayName.MAD=Marokk\u00f3i dirham
+currenciesDisplayName.TRY=\u00daj t\u00f6r\u00f6k l\u00edra
currenciesDisplayName.MMK=Mianmari kyat
+currenciesDisplayName.MYR=Malajziai ringgit
+currenciesDisplayName.LSL=Lesothoi loti
+currenciesDisplayName.XEU=European Currency Unit
+currenciesDisplayName.BHD=Bahreini din\u00e1r
+currenciesDisplayName.SLL=Sierra Leonei leone
+currenciesDisplayName.BTN=Bhut\u00e1ni ngultrum
+currenciesDisplayName.TRL=T\u00f6r\u00f6k l\u00edra
+currenciesDisplayName.KMF=Comorei frank
currenciesDisplayName.ANG=Holland-antilla forint
currenciesDisplayName.CZK=Cseh korona
-currenciesDisplayName.IMP=Man-szigeti font sterling
-currenciesDisplayName.BGX=Bolg\u00e1r leva konvertibilis valuta
-currenciesDisplayName.LSL=Lesothoi loti
-currenciesDisplayName.GAF=Gaboni CFA frank
-currenciesDisplayName.BGO=Bolg\u00e1r leva (1879-1952)
+currenciesDisplayName.AZM=Azerbajdzs\u00e1ni manat
+currenciesDisplayName.KYD=Kajm\u00e1n-szigeteki doll\u00e1r
+currenciesDisplayName.GMD=Gambiai dalasi
currenciesDisplayName.BGN=Bolg\u00e1r \u00faj leva
-currenciesDisplayName.BGM=Bolg\u00e1r szocialista leva
currenciesDisplayName.CAD=Kanadai doll\u00e1r
+currenciesDisplayName.MXV=Mexik\u00f3i Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bolg\u00e1r kem\u00e9ny leva
-currenciesDisplayName.TRL=T\u00f6r\u00f6k l\u00edra
-currenciesDisplayName.KYD=Kajm\u00e1n-szigeteki doll\u00e1r
-currenciesDisplayName.CYP=Ciprusi font
+currenciesDisplayName.VEB=Venezuelai bol\u00edvar
+currenciesDisplayName.MLF=Mali frank
currenciesDisplayName.ILS=Izraeli \u00faj s\u00e9kel
+currenciesDisplayName.MXP=Mexik\u00f3i ez\u00fcst peso (1861-1992)
+currenciesDisplayName.PES=Perui sol
currenciesDisplayName.GYD=Guyanai doll\u00e1r
-currenciesDisplayName.AMD=Dram
+currenciesDisplayName.MXN=Mexik\u00f3i peso
currenciesDisplayName.ILP=Izraeli font
-currenciesDisplayName.MLF=Mali frank
-currenciesDisplayName.ILL=Izraeli s\u00e9kel
-currenciesDisplayName.VEB=Venezuelai bol\u00edvar
-currenciesDisplayName.ALX=Alb\u00e1n doll\u00e1r konvertibilis valuta
+currenciesDisplayName.SKK=Szlov\u00e1k korona
+currenciesDisplayName.CYP=Ciprusi font
+currenciesDisplayName.XDR=Special Drawing Rights
+currenciesDisplayName.PEN=Perui sol nuevo
currenciesDisplayName.LRD=Lib\u00e9riai doll\u00e1r
-currenciesDisplayName.ALV=Alb\u00e1n lek valuta
+currenciesDisplayName.PEI=Perui inti
+currenciesDisplayName.AMD=Dram
+currenciesDisplayName.BSD=Bahamai doll\u00e1r
currenciesDisplayName.HRK=Horv\u00e1t kuna
-currenciesDisplayName.REF=R\u00e9unioni frank
+currenciesDisplayName.CLP=Chilei peso
currenciesDisplayName.HRD=Horv\u00e1t d\u00edn\u00e1r
-currenciesDisplayName.ALL=Alb\u00e1n lek
-currenciesDisplayName.JEP=Jersey font sterling
-currenciesDisplayName.ALK=Alb\u00e1n lek (1946-1961)
-currenciesDisplayName.MKN=Macedon d\u00edn\u00e1r (1992-1993)
-currenciesDisplayName.VDP=\u00c9szak-vietn\u00e1mi viet minh piastre dong viet
-currenciesDisplayName.VDN=\u00c9szak-vietn\u00e1mi \u00faj dong
-currenciesDisplayName.MKD=Macedon d\u00edn\u00e1r
-currenciesDisplayName.VDD=\u00c9szak-vietn\u00e1mi piastre dong viet
-currenciesDisplayName.TPP=Timori pataca
currenciesDisplayName.XPF=CFP frank
-currenciesDisplayName.BEL=Belga frank (p\u00e9nz\u00fcgyi)
-currenciesDisplayName.GWP=Guinea-Bissaui peso
-currenciesDisplayName.KWD=Kuvaiti d\u00edn\u00e1r
-currenciesDisplayName.GWM=Portug\u00e1l guinea mil reis
-currenciesDisplayName.BEF=Belga frank
+currenciesDisplayName.FRF=Francia frank
+currenciesDisplayName.BRR=Brazil cruzeiro
+currenciesDisplayName.MKD=Macedon d\u00edn\u00e1r
+currenciesDisplayName.CLF=Chilei unidades de fomento
+currenciesDisplayName.ALL=Alb\u00e1n lek
+currenciesDisplayName.BRN=Brazil cruzado novo
+currenciesDisplayName.MWK=Malawi kwacha
+currenciesDisplayName.BRL=Brazil real
currenciesDisplayName.TPE=Timori escudo
-currenciesDisplayName.BEC=Belga frank (konvertibilis)
-currenciesDisplayName.GWE=Portug\u00e1l guinea escudo
+currenciesDisplayName.BRE=Brazil cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brazi cruzado
+currenciesDisplayName.BRB=Brazi cruzeiro novo (1967-1986)
+currenciesDisplayName.DEM=N\u00e9met m\u00e1rka
+currenciesDisplayName.KWD=Kuvaiti d\u00edn\u00e1r
+currenciesDisplayName.XCD=Kelet-karibi doll\u00e1r
+currenciesDisplayName.NPR=Nep\u00e1li r\u00fapia
+currenciesDisplayName.GWP=Guinea-Bissaui peso
+currenciesDisplayName.YUN=Jugoszl\u00e1v konvertibilis d\u00edn\u00e1r
currenciesDisplayName.SVC=Salvadori col\u00f3n
-currenciesDisplayName.CWG=Curacaoi forint
-currenciesDisplayName.BDT=Bangladesi taka
-currenciesDisplayName.TOS=Tongai font sterling
+currenciesDisplayName.YUM=Jugoszl\u00e1v \u00faj d\u00edn\u00e1r
+currenciesDisplayName.BEL=Belga frank (p\u00e9nz\u00fcgyi)
+currenciesDisplayName.SIT=Szlov\u00e9n tolar
+currenciesDisplayName.JPY=Jap\u00e1n jen
currenciesDisplayName.XOF=CFA frank BCEAO
+currenciesDisplayName.MVR=Mald\u00edv-szigeteki rufiyaa
+currenciesDisplayName.GWE=Portug\u00e1l guinea escudo
+currenciesDisplayName.BEF=Belga frank
+currenciesDisplayName.YUD=Jugoszl\u00e1v kem\u00e9ny d\u00edn\u00e1r
+currenciesDisplayName.BEC=Belga frank (konvertibilis)
currenciesDisplayName.SUR=Szovjet rubel
-currenciesDisplayName.SUN=Szovjet \u00faj rubel
-currenciesDisplayName.NCF=\u00daj-kaled\u00f3niai frank kezdeti
-currenciesDisplayName.CVE=Cape Verdei escudo
-currenciesDisplayName.XNF=French Antilles CFA Franc
+currenciesDisplayName.ROL=Rom\u00e1n lej
+currenciesDisplayName.DDM=Kelet-N\u00e9met m\u00e1rka
+currenciesDisplayName.BDT=Bangladesi taka
+currenciesDisplayName.XBD=European Unit of Account (XBD)
+currenciesDisplayName.AWG=Arubai forint
+currenciesDisplayName.XBC=European Unit of Account (XBC)
+currenciesDisplayName.XBB=European Monetary Unit
+currenciesDisplayName.XBA=European Composite Unit
+currenciesDisplayName.NOK=Norv\u00e9g korona
+currenciesDisplayName.MUR=Mauritiusi r\u00fapia
currenciesDisplayName.ZAR=D\u00e9l-afrikai rand
-currenciesDisplayName.DOP=Dominikai peso
-currenciesDisplayName.CUX=Kubai konvertibilis valuta
-currenciesDisplayName.ZAP=D\u00e9l-afrikai font
+currenciesDisplayName.SHP=Saint Helena font
+currenciesDisplayName.XAU=Arany
currenciesDisplayName.ZAL=D\u00e9l-afrikai rand (p\u00e9nz\u00fcgyi)
+currenciesDisplayName.VND=Vietn\u00e1mi dong
+currenciesDisplayName.TZS=Tanz\u00e1niai shilling
+currenciesDisplayName.GIP=Gibralt\u00e1ri font
currenciesDisplayName.TND=Tun\u00e9ziai d\u00edn\u00e1r
-currenciesDisplayName.CUP=Kubai peso
-currenciesDisplayName.GUF=Francia Guyanai frank guiana
+currenciesDisplayName.CVE=Cape Verdei escudo
currenciesDisplayName.UGX=Ugandai shilling
-currenciesDisplayName.LNR=Ceyloni r\u00fapia
-currenciesDisplayName.AIF=Affars and Issas Franc
-currenciesDisplayName.VAL=Vatik\u00e1ni l\u00edra
-currenciesDisplayName.STE=Sao tome-i \u00e9s principe-i escudo
+currenciesDisplayName.ZMK=Zambiai kwacha
+currenciesDisplayName.JOD=Jord\u00e1niai d\u00edn\u00e1r
+currenciesDisplayName.XAF=CFA frank BEAC
+currenciesDisplayName.LBP=Libanoni font
currenciesDisplayName.UGS=Ugandai shilling (1966-1987)
currenciesDisplayName.STD=Sao tome-i \u00e9s principe-i dobra
-currenciesDisplayName.MHD=Marshall-szigeteki doll\u00e1r
-currenciesDisplayName.NZP=\u00daj-z\u00e9landi font
currenciesDisplayName.WST=Nyugat-szamoai tala
-currenciesDisplayName.WSP=Nyugat-szamoai font
-currenciesDisplayName.HNL=Hodurasi lempira
-currenciesDisplayName.XMF=French Metropolitan Nouveau Franc
+currenciesDisplayName.KHR=Kambodzsai riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominikai peso
+currenciesDisplayName.BOV=Bol\u00edviai mvdol
+currenciesDisplayName.MTP=M\u00e1ltai font
+currenciesDisplayName.USS=USA doll\u00e1r (aznapi)
+currenciesDisplayName.BOP=Bol\u00edviai peso
+currenciesDisplayName.MTL=M\u00e1ltai l\u00edra
+currenciesDisplayName.CUP=Kubai peso
currenciesDisplayName.TMM=T\u00fcrkmeniszt\u00e1ni manat
-currenciesDisplayName.GTQ=Guatemalai quetzal
+currenciesDisplayName.USN=USA doll\u00e1r (k\u00f6vetkez\u0151 napi)
+currenciesDisplayName.SGD=Szingap\u00fari doll\u00e1r
currenciesDisplayName.NZD=\u00daj-z\u00e9landi doll\u00e1r
-currenciesDisplayName.SSP=Sk\u00f3t font
-currenciesDisplayName.BBD=Barbadosi doll\u00e1r
+currenciesDisplayName.USD=USA doll\u00e1r
+currenciesDisplayName.HNL=Hodurasi lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Olasz l\u00edra
+currenciesDisplayName.PAB=Panamai balboa
+currenciesDisplayName.GTQ=Guatemalai quetzal
+currenciesDisplayName.LAK=Laoszi kip
+currenciesDisplayName.GHC=Gh\u00e1nai cedi
+currenciesDisplayName.AUD=Ausztr\u00e1l doll\u00e1r
currenciesDisplayName.NAD=Nam\u00edbiai doll\u00e1r
+currenciesDisplayName.KGS=Kirgiziszt\u00e1ni szom
currenciesDisplayName.MGF=Madagaszk\u00e1ri frank
+currenciesDisplayName.CHF=Sv\u00e1jci frank
+currenciesDisplayName.BBD=Barbadosi doll\u00e1r
currenciesDisplayName.MGA=Madagaszk\u00e1ri ariary
-currenciesDisplayName.EGP=Egyiptomi font
-currenciesDisplayName.BZH=Brit-hondurasi doll\u00e1r
+currenciesDisplayName.PYG=Paraguayi guarani
currenciesDisplayName.PLZ=Lengyel zloty (1950-1995)
-currenciesDisplayName.BAN=Bosznia-hercegovinai \u00faj d\u00edn\u00e1r
-currenciesDisplayName.PLX=Lengyel USA doll\u00e1r konvertibilis valuta
-currenciesDisplayName.BAM=Bozsnia-hercegovinai konvertibilis m\u00e1rka
-currenciesDisplayName.BZD=Belizei doll\u00e1r
-currenciesDisplayName.BAD=Bosznia-hercegovinai d\u00edn\u00e1r
-currenciesDisplayName.PLN=Lengyel zloty
currenciesDisplayName.YER=Jemeni rial
+currenciesDisplayName.ATS=Osztr\u00e1k schilling
+currenciesDisplayName.ETB=Eti\u00f3piai birr
+currenciesDisplayName.BND=Brunei doll\u00e1r
+currenciesDisplayName.JMD=Jamaikai doll\u00e1r
+currenciesDisplayName.EGP=Egyiptomi font
+currenciesDisplayName.PLN=Lengyel zloty
+currenciesDisplayName.DZD=Alg\u00e9riai d\u00edn\u00e1r
+currenciesDisplayName.ISK=Izlandi korona
currenciesDisplayName.SRG=Suriname-i gulden
-currenciesDisplayName.CSK=Csehszlov\u00e1k kem\u00e9ny korona
+currenciesDisplayName.LYD=L\u00edbiai d\u00edn\u00e1r
+currenciesDisplayName.BZD=Belizei doll\u00e1r
+currenciesDisplayName.BAM=Bozsnia-hercegovinai konvertibilis m\u00e1rka
+currenciesDisplayName.ESP=Spanyol peseta
currenciesDisplayName.KRW=D\u00e9l-koreai won
+currenciesDisplayName.NLG=Holland forint
+currenciesDisplayName.MRO=Maurit\u00e1niai ouguiya
+currenciesDisplayName.BAD=Bosznia-hercegovinai d\u00edn\u00e1r
+currenciesDisplayName.ZWD=Zimbabwei doll\u00e1r
+currenciesDisplayName.SEK=Sv\u00e9d korona
+currenciesDisplayName.CSK=Csehszlov\u00e1k kem\u00e9ny korona
currenciesDisplayName.BYR=Feh\u00e9rorosz rubel
-currenciesDisplayName.YEI=Jemeni imadi riyal
-currenciesDisplayName.BYL=Feh\u00e9rorosz rubel (1992-1994)
-currenciesDisplayName.CSC=Csehszlov\u00e1k korona
-currenciesDisplayName.KRO=D\u00e9l-koreai r\u00e9gi won
-currenciesDisplayName.KRH=D\u00e9l-koreai hwan
-currenciesDisplayName.BYB=Feh\u00e9rorosz \u00faj rubel (1994-1999)
-currenciesDisplayName.SQS=Szom\u00e1lf\u00f6ldi shilling
-currenciesDisplayName.GRN=G\u00f6r\u00f6g \u00faj drachma
+currenciesDisplayName.IRR=Ir\u00e1ni rial
currenciesDisplayName.PKR=Pakiszt\u00e1ni r\u00fapia
-currenciesDisplayName.AFN=Afghani
-currenciesDisplayName.ZWD=Zimbabwei doll\u00e1r
-currenciesDisplayName.LKR=Sri Lankai r\u00fapia
-currenciesDisplayName.GRD=G\u00f6r\u00f6g drachma
-currenciesDisplayName.IEP=\u00cdr font
-currenciesDisplayName.AFA=Afghani (1927-2002)
-currenciesDisplayName.YDD=Jemeni d\u00edn\u00e1r
-currenciesDisplayName.RWF=Ruandai frank
-currenciesDisplayName.CRC=Costa Ricai colon
-currenciesDisplayName.TJS=T\u00e1dzsikiszt\u00e1ni somoni
-currenciesDisplayName.TJR=T\u00e1dzsikiszt\u00e1ni rubel
-currenciesDisplayName.EEK=\u00c9szt korona
-currenciesDisplayName.GQP=Egyenl\u00edt\u0151i-guineai peseta guineana
-currenciesDisplayName.MDR=Moldov\u00e1n rubel kupon
-currenciesDisplayName.HKD=Hongkongi doll\u00e1r
-currenciesDisplayName.DKK=D\u00e1n korona
-currenciesDisplayName.MDL=Moldov\u00e1n lei
-currenciesDisplayName.GQF=Egyenl\u00edt\u0151i-guineai franco
-currenciesDisplayName.GQE=Egyenl\u00edt\u0151i-guineai ekwele guineana
-currenciesDisplayName.IDR=Indon\u00e9z r\u00fapia
-currenciesDisplayName.AED=EAE dirham
-currenciesDisplayName.KPW=\u00c9szak-koreai won
-currenciesDisplayName.IDN=Indon\u00e9z \u00faj r\u00fapia
-currenciesDisplayName.BWP=Botswanai pula
-currenciesDisplayName.MDC=Moldov\u00e1n lei kupon
-currenciesDisplayName.IDJ=Indon\u00e9z j\u00e1va r\u00fapia
-currenciesDisplayName.KPP=\u00c9szak-koreai n\u00e9pi won
-currenciesDisplayName.IDG=Indon\u00e9z nica guilder
-currenciesDisplayName.VUV=Vanuatui vatu
-currenciesDisplayName.XID=Iszl\u00e1m d\u00edn\u00e1r
-currenciesDisplayName.SOS=Szom\u00e1li shilling
-currenciesDisplayName.ADP=Andorrai peseta
-currenciesDisplayName.RUR=Orosz rubel (1991-1998)
-currenciesDisplayName.GPF=Guadeloupei frank
-currenciesDisplayName.DJF=Dzsibuti frank
-currenciesDisplayName.ADD=Andorrai d\u00edn\u00e1r
-currenciesDisplayName.MCG=Monacoi frank kezdeti
-currenciesDisplayName.MCF=Monacoi frank \u00faj
-currenciesDisplayName.ECV=Ecuadori Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ecuadori sucre
-currenciesDisplayName.LIF=Liechtensteini frank
-currenciesDisplayName.RUB=Orosz rubel
-currenciesDisplayName.PHP=F\u00fcl\u00f6p-szigeteki peso
-currenciesDisplayName.UZS=\u00dczbegiszt\u00e1ni szum
-currenciesDisplayName.COP=Kolumbiai peso
-currenciesDisplayName.THB=Thai baht
-currenciesDisplayName.IBP=\u00c9szak\u00edr font
-currenciesDisplayName.BUR=Burmai r\u00fapia
-currenciesDisplayName.COF=Kong\u00f3i CFA frank
-currenciesDisplayName.BUK=Burmai kyat
-currenciesDisplayName.COB=Kolumbiai pap\u00edr peso
-currenciesDisplayName.UZC=\u00dczbegiszt\u00e1ni kupon som
-currenciesDisplayName.UAK=Ukr\u00e1n karbovanec
-currenciesDisplayName.QAR=Katari rial
-currenciesDisplayName.UAH=Ukr\u00e1n hrivnya
-currenciesDisplayName.GNS=Guineai syli
-currenciesDisplayName.CNY=K\u00ednai j\u00fcan renminbi
-currenciesDisplayName.MZM=Mozambik metical
-currenciesDisplayName.CNX=K\u00ednai USA doll\u00e1r konvertibilis valuta
-currenciesDisplayName.UYU=Uruguay-i peso uruguayo
-currenciesDisplayName.GNI=Guineai frank (1960-1972)
-currenciesDisplayName.SML=San Marinoi l\u00edra
-currenciesDisplayName.CNP=K\u00ednai jen min piao j\u00fcan
-currenciesDisplayName.MZE=Mozambik escudo
-currenciesDisplayName.GNF=Guineai frank
-currenciesDisplayName.OMS=Om\u00e1ni rial saidi
-currenciesDisplayName.PGK=P\u00e1pua \u00faj-guineai kina
-currenciesDisplayName.OMR=Om\u00e1ni rial
-currenciesDisplayName.UYP=Uruguay-i peso (1975-1993)
-currenciesDisplayName.XFU=Francia UIC-frank
-currenciesDisplayName.BTR=Bhut\u00e1ni r\u00fapia
-currenciesDisplayName.ZRZ=Zairei zaire
-currenciesDisplayName.MAF=Marokk\u00f3i frank
-currenciesDisplayName.MAD=Marokk\u00f3i dirham
-currenciesDisplayName.BTN=Bhut\u00e1ni ngultrum
-currenciesDisplayName.XFO=Francia arany frank
-currenciesDisplayName.UYF=Uruguay-i peso fuerte
-currenciesDisplayName.MYR=Malajziai ringgit
-currenciesDisplayName.ZRN=Zairei \u00faj zaire
-currenciesDisplayName.AZM=Azerbajdzs\u00e1ni manat
-currenciesDisplayName.GMP=Gambiai font
-currenciesDisplayName.KMF=Comorei frank
-currenciesDisplayName.SLL=Sierra Leonei leone
-currenciesDisplayName.GMD=Gambiai dalasi
-currenciesDisplayName.XEU=European Currency Unit
-currenciesDisplayName.BSP=Bahamai font
-currenciesDisplayName.CMF=Cameruni CFA frank
-currenciesDisplayName.MXV=Mexik\u00f3i Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA frank BCEAEC
-currenciesDisplayName.BSD=Bahamai doll\u00e1r
-currenciesDisplayName.MXP=Mexik\u00f3i ez\u00fcst peso (1861-1992)
-currenciesDisplayName.MXN=Mexik\u00f3i peso
-currenciesDisplayName.PES=Perui sol
-currenciesDisplayName.GLK=Gr\u00f6nlandi korona
-currenciesDisplayName.BRZ=Brazil cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Perui sol nuevo
-currenciesDisplayName.CLP=Chilei peso
-currenciesDisplayName.SKK=Szlov\u00e1k korona
-currenciesDisplayName.PEI=Perui inti
-currenciesDisplayName.BRR=Brazil cruzeiro
-currenciesDisplayName.XDR=Special Drawing Rights
-currenciesDisplayName.FRG=Francia frank kezdeti/Frank poincare
-currenciesDisplayName.FRF=Francia frank
-currenciesDisplayName.BRN=Brazil cruzado novo
-currenciesDisplayName.CLF=Chilei unidades de fomento
-currenciesDisplayName.CLE=Chilei escudo
-currenciesDisplayName.BRL=Brazil real
-currenciesDisplayName.CLC=Chilei condor
-currenciesDisplayName.BRE=Brazil cruzeiro (1990-1993)
-currenciesDisplayName.DES=German Sperrmark
-currenciesDisplayName.MWP=Malawi font
-currenciesDisplayName.BRC=Brazi cruzado
-currenciesDisplayName.BRB=Brazi cruzeiro novo (1967-1986)
-currenciesDisplayName.MWK=Malawi kwacha
-currenciesDisplayName.PDR=Transzdnyeszteri rubel
-currenciesDisplayName.DEM=N\u00e9met m\u00e1rka
-currenciesDisplayName.TDF=Cs\u00e1di CFA frank
-currenciesDisplayName.PDN=Transzdnyeszteri \u00faj rubel
-currenciesDisplayName.PDK=Transzdnyeszteri rubel kupon
-currenciesDisplayName.NPR=Nep\u00e1li r\u00fapia
-currenciesDisplayName.CKD=Cook-szigeteki doll\u00e1r
-currenciesDisplayName.JPY=Jap\u00e1n jen
-currenciesDisplayName.MVR=Mald\u00edv-szigeteki rufiyaa
-currenciesDisplayName.XCF=CFA \u00faj frank
-currenciesDisplayName.MVP=Mald\u00edv-szigeteki r\u00fapia
-currenciesDisplayName.XCD=Kelet-karibi doll\u00e1r
-currenciesDisplayName.SIT=Szlov\u00e9n tolar
-currenciesDisplayName.YUR=Jugoszl\u00e1v reform d\u00edn\u00e1r
-currenciesDisplayName.AWG=Arubai forint
-currenciesDisplayName.YUO=Jugoszl\u00e1v okt\u00f3beri d\u00edn\u00e1r
-currenciesDisplayName.DDM=Kelet-N\u00e9met m\u00e1rka
-currenciesDisplayName.YUN=Jugoszl\u00e1v konvertibilis d\u00edn\u00e1r
-currenciesDisplayName.YUM=Jugoszl\u00e1v \u00faj d\u00edn\u00e1r
-currenciesDisplayName.TCC=Turks \u00e9s caicosi korona
-currenciesDisplayName.YUG=Jugoszl\u00e1v 1994-es d\u00edn\u00e1r
-currenciesDisplayName.YUF=Jugoszl\u00e1v sz\u00f6vets\u00e9gi d\u00edn\u00e1r
-currenciesDisplayName.RON=Rom\u00e1n \u00faj lej
-currenciesDisplayName.YUD=Jugoszl\u00e1v kem\u00e9ny d\u00edn\u00e1r
-currenciesDisplayName.ROL=Rom\u00e1n lej
-currenciesDisplayName.SIB=Szlov\u00e9n tolar bons
-currenciesDisplayName.NOK=Norv\u00e9g korona
-currenciesDisplayName.MUR=Mauritiusi r\u00fapia
-currenciesDisplayName.XBD=European Unit of Account (XBD)
-currenciesDisplayName.GIP=Gibralt\u00e1ri font
-currenciesDisplayName.VNS=Vietn\u00e1mi nemzeti dong
-currenciesDisplayName.XBC=European Unit of Account (XBC)
-currenciesDisplayName.VNR=Vietn\u00e1mi k\u00f6zt\u00e1rsas\u00e1gi dong
-currenciesDisplayName.XBB=European Monetary Unit
-currenciesDisplayName.XBA=European Composite Unit
-currenciesDisplayName.KID=Kiribati doll\u00e1r
-currenciesDisplayName.SHP=Saint Helena font
-currenciesDisplayName.VNN=Vietn\u00e1mi \u00faj dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudai doll\u00e1r
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=jan.®febr.®m\u00e1rc.®\u00e1pr.®m\u00e1j.®j\u00fan.®j\u00fal.®aug.®szept.®okt.®nov.®dec.®®
months=janu\u00e1r®febru\u00e1r®m\u00e1rcius®\u00e1prilis®m\u00e1jus®j\u00fanius®j\u00falius®augusztus®szeptember®okt\u00f3ber®november®december®®
shortWeekdays=®V®H®K®Sze®Cs®P®Szo®
weekdays=®vas\u00e1rnap®h\u00e9tf\u0151®kedd®szerda®cs\u00fct\u00f6rt\u00f6k®p\u00e9ntek®szombat®
firstDayOfWeek=mon
-eras=i.e.®i.u.®
+eras=i. e.®i. sz.®
ampms=DE®DU®
shortDateFormat=yyyy.MM.dd.
mediumDateFormat=yyyy.MM.dd.
@@ -775,6 +365,7 @@ shortTimeFormat=H:mm
mediumTimeFormat=H:mm:ss
longTimeFormat=H:mm:ss z
fullTimeFormat=H:mm:ss z
+zoneStrings=Europe/Paris®k\u00f6z\u00e9p-eur\u00f3pai id\u0151®k\u00f6z\u00e9p-eur\u00f3pai ny\u00e1ri id\u0151®©
territories.TL=Kelet-Timor
territories.TK=Tokelau
territories.TJ=Tadzsikiszt\u00e1n
@@ -797,7 +388,9 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Gr\u00f6nland
territories.SV=El Salvador
+territories.062=D\u00e9lk\u00f6z\u00e9p-\u00c1zsia
territories.ST=Saint Tome \u00e9s Principe
+territories.061=Polin\u00e9zia
territories.GI=Gibralt\u00e1r
territories.GH=Ghana
territories.SR=Suriname
@@ -821,9 +414,12 @@ territories.SC=Seychelles
territories.SB=Salamon-szigetek
territories.SA=Szaud-Ar\u00e1bia
territories.FR=Franciaorsz\u00e1g
+territories.057=Mikron\u00e9zia
territories.FO=Fer\u00f6er-szigetek
territories.FM=Mikron\u00e9zia, Sz\u00f6vets\u00e9gi \u00c1llamok
territories.RW=Ruanda
+territories.054=Melan\u00e9zia
+territories.053=Ausztr\u00e1lia \u00e9s \u00daj-Z\u00e9land
territories.FK=Falkland-szigetek
territories.RU=Orosz K\u00f6zt\u00e1rsas\u00e1g
territories.FJ=Fidzsi
@@ -833,20 +429,26 @@ territories.RE=Reunion (francia)
territories.ET=Eti\u00f3pia
territories.ES=Spanyolorsz\u00e1g
territories.ER=Eritrea
+territories.833=Man-sziget
territories.EH=Nyugat Szahara
territories.EG=Egyiptom
+territories.830=Csatorna-szigetek
territories.EE=\u00c9sztorsz\u00e1g
+territories.QO=K\u00fcls\u0151-\u00d3ce\u00e1nia
territories.EC=Ecuador
territories.DZ=Alg\u00e9ria
territories.QA=Katar
+territories.039=D\u00e9l-Eur\u00f3pa
territories.DO=Dominikai K\u00f6zt\u00e1rsas\u00e1g
territories.PY=Paraguay
+territories.035=D\u00e9lkelet-\u00c1zsia
territories.DM=Dominika
territories.PW=Palau
territories.DK=D\u00e1nia
territories.DJ=Dzsibuti
territories.PT=Portug\u00e1lia
territories.PS=Paleszt\u00edn Ter\u00fclet
+territories.030=Kelet-\u00c1zsia
territories.PR=Puerto Rico
territories.DE=N\u00e9metorsz\u00e1g
territories.PN=Pitcairn-sziget
@@ -863,13 +465,16 @@ territories.CX=Kar\u00e1csony-szigetek
territories.CV=Z\u00f6ld-foki K\u00f6zt\u00e1rsas\u00e1g
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbia \u00e9s Montenegro
territories.CR=Costa Rica
+territories.029=Karib-tenger
territories.CO=Kolumbia
territories.CN=K\u00edna
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cook-szigetek
territories.CI=Elef\u00e1ntcsontpart
+territories.021=\u00c9szak-Amerika
territories.CH=Sv\u00e1jc
territories.CG=Kong\u00f3
territories.CF=K\u00f6z\u00e9p-afrikai K\u00f6zt\u00e1rsas\u00e1g
@@ -884,13 +489,20 @@ territories.BV=Bouvet-sziget
territories.BT=Bhut\u00e1n
territories.BS=Baham\u00e1k
territories.BR=Braz\u00edlia
+territories.019=Amerika
+territories.018=D\u00e9l-Afrika
territories.NZ=\u00daj-Z\u00e9land
territories.BO=Bol\u00edvia
+territories.017=K\u00f6z\u00e9p-Afrika
territories.BN=Brunei Darussalam
territories.BM=Bermuda
+territories.015=\u00c9szak-Afrika
+territories.014=Kelet-Afrika
+territories.013=K\u00f6z\u00e9p-Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Nyugat-Afrika
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulg\u00e1ria
@@ -908,6 +520,7 @@ territories.NG=Nig\u00e9ria
territories.NF=Norfolk-sziget
territories.AZ=Azerbajdzs\u00e1n
territories.NE=Niger
+territories.AX=Aland-szigetek
territories.NC=\u00daj Kaled\u00f3nia (francia)
territories.AW=Aruba
territories.ZM=Zambia
@@ -916,19 +529,23 @@ territories.AU=Ausztr\u00e1lia
territories.AT=Ausztria
territories.AS=Amerikai Szamoa
territories.AR=Argent\u00edna
+territories.009=\u00d3ce\u00e1nia
territories.AQ=Antarktisz
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malajzia
territories.AN=Holland Antill\u00e1k
territories.MX=Mexik\u00f3
+territories.005=D\u00e9l-Amerika
territories.AM=\u00d6rm\u00e9nyorsz\u00e1g
territories.MW=Malawi
territories.AL=Alb\u00e1nia
territories.MV=Mald\u00edv-szigetek
territories.ZA=D\u00e9l-Afrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=M\u00e1lta
+territories.001=Vil\u00e1g
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Maurit\u00e1nia
@@ -943,7 +560,6 @@ territories.MN=Mong\u00f3lia
territories.MM=Mianmar
territories.ML=Mali
territories.MK=Maced\u00f3nia, K\u00f6zt\u00e1rsas\u00e1g
-territories.YU=Jugoszl\u00e1via
territories.YT=Mayotte
territories.MH=Marshall-szigetek
territories.MG=Madagaszk\u00e1r
@@ -953,10 +569,14 @@ territories.MA=Marokk\u00f3
territories.YE=Jemen
territories.LY=L\u00edbiai Arab Jamahiriya
territories.LV=Lettorsz\u00e1g
+territories.155=Nyugat-Eur\u00f3pa
territories.LU=Luxemburg
+territories.154=\u00c9szak-Eur\u00f3pa
territories.LT=Litv\u00e1nia
territories.LS=Lesotho
territories.LR=Lib\u00e9ria
+territories.151=Kelet-Eur\u00f3pa
+territories.150=Eur\u00f3pa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -965,6 +585,8 @@ territories.LA=Laoszi N\u00e9pi Demokratikus K\u00f6zt\u00e1rsas\u00e1g
territories.KZ=Kazahszt\u00e1n
territories.KY=Kajm\u00e1n-szigetek
territories.KW=Kuwait
+territories.145=Nyugat-\u00c1zsia
+territories.142=\u00c1zsia
territories.KR=Korea, D\u00e9l
territories.KP=Korea, \u00c9szak
territories.KN=Saint Kitts \u00e9s Nevis
@@ -1017,8 +639,8 @@ territories.TM=T\u00fcrkmeniszt\u00e1n
languages.es=spanyol
languages.ku=kurd
languages.eo=eszperant\u00f3
-languages.ks=kasm\u00edri
languages.en=angol
+languages.ks=kasm\u00edri
languages.el=g\u00f6r\u00f6g
languages.qu=kecsua
languages.ko=koreai
@@ -1042,8 +664,8 @@ languages.cy=walesi
languages.pa=pandzs\u00e1bi
languages.cs=cseh
languages.iu=inuktitut
-languages.it=olasz
languages.co=korzikai
+languages.it=olasz
languages.is=izlandi
languages.uz=\u00fczb\u00e9g
languages.or=orija
@@ -1119,8 +741,8 @@ languages.mk=maced\u00f3n
languages.aa=afar
languages.so=szom\u00e1li
languages.sn=sona
-languages.mi=maori
languages.gd=sk\u00f3t (gael)
+languages.mi=maori
languages.sm=szamoai
languages.sl=szlov\u00e9n
languages.mg=madagaszk\u00e1ri
@@ -1136,14 +758,14 @@ languages.fy=fr\u00edz
languages.sa=szanszkrit
languages.fr=francia
languages.lv=lett
-languages.lt=litv\u00e1n
languages.fo=fer\u00f6eri
+languages.lt=litv\u00e1n
languages.rw=kiruanda
languages.ru=orosz
-languages.lo=laoszi
languages.fj=fidzsi
-languages.ln=lingala
+languages.lo=laoszi
languages.fi=finn
+languages.ln=lingala
languages.ro=rom\u00e1n
languages.rn=kirundi
languages.rm=r\u00e9torom\u00e1n
@@ -1151,5 +773,5 @@ languages.fa=perzsa
languages.la=latin
languages.xh=hosza
languages.eu=baszk
-languages.ky=kirgiz
languages.et=\u00e9szt
+languages.ky=kirgiz
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hy.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hy.properties
index 72f1576..6d6a3cc 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hy.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_hy.properties
@@ -82,11 +82,12 @@ territories.PK=\u054a\u0561\u056f\u056b\u057d\u057f\u0561\u0576
territories.PH=\u0556\u056b\u056c\u056b\u057a\u056b\u0576\u0576\u0565\u0580
territories.PG=\u054a\u0561\u057a\u0578\u0582\u0561 \u0546\u0578\u0580 \u0533\u057e\u056b\u0576\u0565\u0561
territories.CZ=\u0549\u0565\u056d\u056b\u0561\u0575\u056b \u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u0575\u0578\u0582\u0576
-territories.PE=\u054a\u0565\u0580\u0578\u0582
territories.CY=\u053f\u056b\u057a\u0580\u0578\u057d
+territories.PE=\u054a\u0565\u0580\u0578\u0582
territories.CV=\u053f\u0561\u0562\u0578-\u054e\u0565\u0580\u0564\u0565
-territories.PA=\u054a\u0561\u0576\u0561\u0574\u0561
territories.CU=\u053f\u0578\u0582\u0562\u0561
+territories.PA=\u054a\u0561\u0576\u0561\u0574\u0561
+territories.CS=\u054d\u0565\u0580\u0562\u056b\u0561
territories.CR=\u053f\u0578\u057d\u057f\u0561-\u054c\u056b\u056f\u0561
territories.CO=\u053f\u0578\u056c\u0578\u0582\u0574\u0562\u056b\u0561
territories.CN=\u0549\u056b\u0576\u0561\u057d\u057f\u0561\u0576
@@ -104,45 +105,45 @@ territories.BW=\u0532\u0578\u057f\u057d\u057e\u0561\u0576\u0561
territories.BT=\u0532\u0578\u0582\u057f\u0561\u0576
territories.BS=\u0532\u0561\u0570\u0561\u0574\u0576\u0565\u0580
territories.BR=\u0532\u0580\u0561\u0566\u056b\u056c\u056b\u0561
-territories.NZ=\u0546\u0578\u0580 \u0536\u0565\u056c\u0561\u0576\u0564\u056b\u0561
territories.BO=\u0532\u0578\u056c\u056b\u057e\u056b\u0561
+territories.NZ=\u0546\u0578\u0580 \u0536\u0565\u056c\u0561\u0576\u0564\u056b\u0561
territories.BN=\u0532\u0580\u0578\u0582\u0576\u0565\u0575
territories.BJ=\u0532\u0565\u0576\u056b\u0576
territories.BI=\u0532\u0578\u0582\u0580\u0578\u0582\u0576\u0564\u056b
territories.BH=\u0532\u0561\u0570\u0580\u0565\u0575\u0576
-territories.NR=\u0546\u0561\u0578\u0582\u0580\u0578\u0582
territories.BG=\u0532\u0578\u0582\u056c\u0572\u0561\u0580\u056b\u0561
+territories.NR=\u0546\u0561\u0578\u0582\u0580\u0578\u0582
territories.BF=\u0532\u0578\u0582\u0580\u056f\u056b\u0576\u0561 \u0556\u0561\u057d\u0578
-territories.NP=\u0546\u0565\u057a\u0561\u056c
territories.BE=\u0532\u0565\u056c\u0563\u056b\u0561
-territories.NO=\u0546\u0578\u0580\u057e\u0565\u0563\u056b\u0561
+territories.NP=\u0546\u0565\u057a\u0561\u056c
territories.BD=\u0532\u0561\u0576\u0563\u056c\u0561\u0564\u0565\u0577
+territories.NO=\u0546\u0578\u0580\u057e\u0565\u0563\u056b\u0561
territories.BB=\u0532\u0561\u0580\u0562\u0561\u0564\u0578\u057d
territories.ZW=\u0536\u056b\u0574\u0562\u0561\u0562\u057e\u0565
-territories.NL=\u0546\u056b\u0564\u0565\u0580\u056c\u0561\u0576\u0564\u0565\u0580
territories.BA=\u0532\u0578\u057d\u0576\u056b\u0561-\u0540\u0565\u0580\u0581\u0565\u0563\u0578\u057e\u056b\u0576\u0561
+territories.NL=\u0546\u056b\u0564\u0565\u0580\u056c\u0561\u0576\u0564\u0565\u0580
territories.NI=\u0546\u056b\u056f\u0561\u0580\u0561\u0563\u0578\u0582\u0561
territories.NG=\u0546\u056b\u0563\u0565\u0580\u056b\u0561
territories.AZ=\u0531\u0564\u0580\u0562\u0565\u057b\u0561\u0576
territories.NE=\u0546\u056b\u0563\u0565\u0580
territories.ZM=\u0536\u0561\u0574\u0562\u056b\u0561
-territories.AU=\u0531\u057e\u057d\u057f\u0580\u0561\u056c\u056b\u0561
territories.NA=\u0546\u0561\u0574\u056b\u0562\u056b\u0561
+territories.AU=\u0531\u057e\u057d\u057f\u0580\u0561\u056c\u056b\u0561
territories.AT=\u0531\u057e\u057d\u057f\u0580\u056b\u0561
territories.AR=\u0531\u0580\u0563\u0565\u0576\u057f\u056b\u0576\u0561
-territories.MZ=\u0544\u0578\u0566\u0561\u0574\u0562\u056b\u056f
territories.AO=\u0531\u0576\u0563\u0578\u056c\u0561
+territories.MZ=\u0544\u0578\u0566\u0561\u0574\u0562\u056b\u056f
territories.MY=\u0544\u0561\u056c\u0561\u0575\u0566\u056b\u0561
-territories.MX=\u0544\u0565\u0584\u057d\u056b\u056f\u0561
territories.AM=\u0540\u0561\u0575\u0561\u057d\u057f\u0561\u0576\u056b \u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u056b\u0582\u0576
-territories.MW=\u0544\u0561\u056c\u0561\u057e\u056b
+territories.MX=\u0544\u0565\u0584\u057d\u056b\u056f\u0561
territories.AL=\u0531\u056c\u0562\u0561\u0576\u056b\u0561
+territories.MW=\u0544\u0561\u056c\u0561\u057e\u056b
territories.MV=\u0544\u0561\u056c\u0564\u056b\u057e\u0576\u0565\u0580
territories.ZA=\u0540\u0561\u0580\u0561\u057e\u0561\u0575\u056b\u0576 \u0531\u0586\u0580\u056b\u056f\u0561
territories.MU=\u0544\u0561\u057e\u0580\u056b\u057f\u0578\u057d
territories.MT=\u0544\u0561\u056c\u0569\u0561
-territories.MR=\u0544\u0561\u057e\u0580\u056b\u057f\u0561\u0576\u056b\u0561
territories.AG=\u0531\u0576\u057f\u056b\u0563\u0578\u0582\u0561-\u0532\u0561\u0580\u0562\u0578\u0582\u0564\u0561
+territories.MR=\u0544\u0561\u057e\u0580\u056b\u057f\u0561\u0576\u056b\u0561
territories.AF=\u0531\u0586\u0572\u0561\u0576\u057d\u057f\u0561\u0576
territories.AE=\u0544\u056b\u0561\u0581\u0575\u0561\u056c \u0531\u0580\u0561\u0562\u0561\u056f\u0561\u0576 \u0537\u0574\u056b\u0580\u0561\u0569\u0576\u0565\u0580
territories.AD=\u0531\u0576\u0564\u0578\u0580\u0561
@@ -150,7 +151,6 @@ territories.MN=\u0544\u0578\u0576\u0572\u0578\u056c\u056b\u0561
territories.MM=\u0544\u0575\u0561\u0576\u0574\u0561
territories.ML=\u0544\u0561\u056c\u056b
territories.MK=\u0544\u0561\u056f\u0565\u0564\u0578\u0576\u056b\u0561
-territories.YU=\u054d\u0565\u0580\u0562\u056b\u0561
territories.MH=\u0544\u0561\u0580\u0577\u0561\u056c\u0575\u0561\u0576 \u056f\u0572\u0566\u056b\u0576\u0565\u0580
territories.MG=\u0544\u0561\u0564\u0561\u0563\u0561\u057d\u056f\u0561\u0580
territories.MD=\u0544\u0578\u056c\u0564\u0578\u057e\u0561
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_id.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_id.properties
index 473705e..bd01721 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_id.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_id.properties
@@ -8,7 +8,6 @@
decimalSeparator=,
groupingSeparator=.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.IDR=IDR
currenciesSymbol.IDR=Rp
shortMonths=Jan®Feb®Mar®Apr®Mei®Jun®Jul®Agu®Sep®Okt®Nov®Des®®
months=Januari®Februari®Maret®April®Mei®Juni®Juli®Agustus®September®Oktober®November®Desember®®
@@ -100,6 +99,7 @@ territories.CX=Pulau Christmas
territories.CV=Tanjung Verde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbia
territories.CR=Kosta Rika
territories.CO=Kolombia
territories.CN=Cina
@@ -168,19 +168,18 @@ territories.MU=Mauritius
territories.MT=Malta
territories.AI=Anguilla
territories.MS=Montserrat
-territories.MR=Mauritania
territories.AG=Antigua dan Barbuda
-territories.MQ=Martinique
+territories.MR=Mauritania
territories.AF=Afghanistan
-territories.MP=Kepualuan Mariana Utara
+territories.MQ=Martinique
territories.AE=Uni Emirat Arab
-territories.MO=Makao S.A.R. Cina
+territories.MP=Kepualuan Mariana Utara
territories.AD=Andora
+territories.MO=Makao S.A.R. Cina
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedonia
-territories.YU=Yugoslavia
territories.YT=Mayotte
territories.MH=Kepulauan Marshall
territories.MG=Madagaskar
@@ -249,8 +248,8 @@ territories.TR=Turkey
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
-languages.ast=Astur
languages.lb=Luxembourg
+languages.ast=Astur
languages.la=Latin
languages.xh=Xhosa
languages.ky=Kirghiz
@@ -271,8 +270,8 @@ languages.grc=Yunani Kuno (sd 1453)
languages.wo=Wolof
languages.art=Buatan (Lainnya)
languages.ka=Georgian
-languages.gem=Jermanik (Lainnya)
languages.arn=Araucan
+languages.gem=Jermanik (Lainnya)
languages.afa=Afro-Asiatik (Lainnya)
languages.jv=Jawa
languages.wa=Walloon
@@ -290,8 +289,8 @@ languages.ik=Inupiaq
languages.ii=Sichuan Yi
languages.ur=Urdu
languages.ig=Igbo
-languages.kos=Kosrae
languages.ie=Interlingue
+languages.kos=Kosrae
languages.id=Bahasa Indonesia
languages.ia=Interlingua
languages.uk=Ukrainian
@@ -313,8 +312,8 @@ languages.tt=Tatar
languages.hi=Hindi
languages.ts=Tsonga
languages.tr=Turkish
-languages.cop=Koptik
languages.he=Ibrani
+languages.cop=Koptik
languages.tn=Tswana
languages.tl=Tagalog
languages.ha=Hausa
@@ -358,23 +357,23 @@ languages.sc=Sardinian
languages.sa=Sanskrit
languages.cau=Kaukasia (Lainnya)
languages.ang=Inggris Kuno (kl.450-1100)
-languages.car=Karib
languages.fr=Perancis
+languages.car=Karib
languages.fo=Faro
languages.rw=Kinyarwanda
languages.gmh=Jerman, Abad Pertengahan (kl.1050-1500)
languages.ru=Russian
languages.fj=Fiji
-languages.cai=India Amerika Tengah (Lainnnya)
languages.fi=Finlandia
+languages.cai=India Amerika Tengah (Lainnnya)
languages.ff=Fulah
languages.ro=Romanian
languages.rn=Rundi
languages.rm=Rhaeto-Romance
languages.fa=Persia
languages.peo=Persia Kuno (kl.600-400 SM.)
-languages.lez=Lezghia
languages.eu=Basque
+languages.lez=Lezghia
languages.et=Estonian
languages.es=Spanyol
languages.eo=Esperanto
@@ -414,8 +413,8 @@ languages.ca=Catalan
languages.oj=Ojibwa
languages.bs=Bosnia
languages.br=Breton
-languages.gil=Gilbert
languages.bo=Tibet
+languages.gil=Gilbert
languages.ny=Nyanja; Chichewa; Chewa
languages.bn=Bengal
languages.bm=Bambara
@@ -465,10 +464,10 @@ languages.mga=Irlandia Abad Pertengahan (900-1200)
languages.yo=Yoruba
languages.egy=Mesir Kuno
languages.yi=Yiddish
-languages.bat=Baltik (Lainnya)
languages.lv=Latvian
-languages.ath=Bahasa-bahasa Athapaska
+languages.bat=Baltik (Lainnya)
languages.lu=Luba-Katanga
+languages.ath=Bahasa-bahasa Athapaska
languages.lt=Lithuania
languages.ban=Balin
languages.lo=Lao
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_is.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_is.properties
index 1d950b9..c3ca54f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_is.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_is.properties
@@ -8,191 +8,133 @@
decimalSeparator=,
groupingSeparator=.
currenciesDisplayName.YDD=Jemenskur denari
-currenciesDisplayName.GRN=Drakma, N\u00fd
currenciesDisplayName.TWD=Ta\u00edvanskur dalur
currenciesDisplayName.LKR=Sr\u00edl\u00f6nsk r\u00fap\u00eda
-currenciesDisplayName.TJS=Tajikistan Somoni
currenciesDisplayName.RWF=Rwandan Franc
-currenciesDisplayName.TJR=Tadsjiksk r\u00fabla
+currenciesDisplayName.TJS=Tajikistan Somoni
currenciesDisplayName.SDP=S\u00fadanskt pund
+currenciesDisplayName.TJR=Tadsjiksk r\u00fabla
currenciesDisplayName.GRD=Drakma
currenciesDisplayName.IEP=\u00cdrskt pund
-currenciesDisplayName.CFF=Mi\u00f0afr\u00edskur franki
currenciesDisplayName.ARS=Argent\u00edskur pesi
-currenciesDisplayName.ARP=Argent\u00edskur pesi (1983-1985)
currenciesDisplayName.SDD=S\u00fadanskur denari
-currenciesDisplayName.ARM=Argent\u00edskur pesi (1899-1970)
+currenciesDisplayName.ARP=Argent\u00edskur pesi (1983-1985)
currenciesDisplayName.FKP=Falklenskt pund
currenciesDisplayName.EEK=Eistnesk kr\u00f3na
-currenciesDisplayName.TVD=T\u00faval\u00faskur dalur
currenciesDisplayName.HKD=Hong Kong-dalur
-currenciesDisplayName.IQD=\u00cdrakskur denari
currenciesDisplayName.ARA=Argentine Austral
+currenciesDisplayName.IQD=\u00cdrakskur denari
currenciesDisplayName.SCR=Seychelles r\u00fap\u00eda
-currenciesDisplayName.XID=\u00cdslamskur denari
currenciesDisplayName.VUV=Vanuatu Vatu
-currenciesDisplayName.KPW=Nor\u00f0urk\u00f3reskt vonn
currenciesDisplayName.DKK=D\u00f6nsk kr\u00f3na
+currenciesDisplayName.KPW=Nor\u00f0urk\u00f3reskt vonn
currenciesDisplayName.IDR=Ind\u00f3nes\u00edsk r\u00fap\u00eda
currenciesDisplayName.LVR=Lettnesk r\u00fabla
-currenciesDisplayName.KPP=Nor\u00f0urk\u00f3reskt vonn (1947-1959)
currenciesDisplayName.AED=Arab\u00edskt d\u00edrham
currenciesDisplayName.LVL=Lat
currenciesDisplayName.RUR=R\u00fassnesk r\u00fabla
-currenciesDisplayName.FJP=F\u00eddjeyskt pund
-currenciesDisplayName.MOP=Macao Pataca
-currenciesDisplayName.FJD=F\u00eddjeyskur dalur
currenciesDisplayName.ADP=Andorrskur peseti
+currenciesDisplayName.FJD=F\u00eddjeyskur dalur
+currenciesDisplayName.MOP=Macao Pataca
+currenciesDisplayName.RUB=R\u00fassnesk r\u00fabla
currenciesDisplayName.DJF=Djibouti Franc
currenciesDisplayName.SBD=Sal\u00f3monseyskur dalur
-currenciesDisplayName.ADD=Andorrskur denari
-currenciesDisplayName.TTO=Tr\u00ednidad og T\u00f3bag\u00f3-dalur, eldri
currenciesDisplayName.ECS=Ecuador Sucre
currenciesDisplayName.THB=Bat
currenciesDisplayName.LUF=L\u00faxemborgarfranki
currenciesDisplayName.FIM=Finnskt mark
currenciesDisplayName.TTD=Tr\u00ednidad og T\u00f3bag\u00f3-dalur
currenciesDisplayName.MNT=T\u00far\u00edkur
-currenciesDisplayName.UAK=Ukrainian Karbovanetz
currenciesDisplayName.SAR=S\u00e1diarab\u00edskt r\u00edal
+currenciesDisplayName.UAK=Ukrainian Karbovanetz
currenciesDisplayName.UAH=Hrinja
currenciesDisplayName.HUF=F\u00f3rinta
-currenciesDisplayName.IBP=Nor\u00f0ur\u00edrskt pund
currenciesDisplayName.COP=K\u00f3lumb\u00edskur pesi
currenciesDisplayName.LTT=Lithuanian Talonas
-currenciesDisplayName.VGD=J\u00f3mfr\u00faaeyjadalur
currenciesDisplayName.PTE=Port\u00fagalskur sk\u00fati
-currenciesDisplayName.AOS=Ang\u00f3lskur sk\u00fati
currenciesDisplayName.GBP=Sterlingspund
currenciesDisplayName.INR=Indversk r\u00fap\u00eda
-currenciesDisplayName.XFU=Franskur franki, UIC
currenciesDisplayName.LTL=L\u00edt
+currenciesDisplayName.XFU=Franskur franki, UIC
currenciesDisplayName.KZT=Kazakhstan Tenge
-currenciesDisplayName.COF=Mi\u00f0afr\u00edskur franki, Kong\u00f3
-currenciesDisplayName.KZR=Kazakhstan Ruble
-currenciesDisplayName.COB=K\u00f3lumb\u00edskur papp\u00edrspesi
currenciesDisplayName.BUK=B\u00farmverskt kjat
currenciesDisplayName.XFO=Franskur gullfranki
currenciesDisplayName.SYP=S\u00fdrlenskt pund
-currenciesDisplayName.OMR=\u00d3manskt r\u00edal
-currenciesDisplayName.NGP=N\u00edger\u00edskt pund
currenciesDisplayName.MZE=M\u00f3samb\u00edskur sk\u00fati
-currenciesDisplayName.MMX=Mjanmarskt gjaldeyrissk\u00edrteini \u00ed Bandar\u00edkjad\u00f6lum
+currenciesDisplayName.OMR=\u00d3manskt r\u00edal
currenciesDisplayName.NGN=Nigerian Naira
-currenciesDisplayName.PSP=Palest\u00ednskt pund
currenciesDisplayName.CNY=J\u00faan
-currenciesDisplayName.CNX=K\u00ednverskt gjaldeyrissk\u00edrteini \u00ed Bandar\u00edkjad\u00f6lum
-currenciesDisplayName.GNI=G\u00edneufranki (1960-1972)
currenciesDisplayName.MAF=Marokk\u00f3skur franki
currenciesDisplayName.GNF=G\u00edneufranki
currenciesDisplayName.MAD=Marokk\u00f3skt d\u00edrham
+currenciesDisplayName.TRY=N\u00fd, tyrknesk l\u00edra
currenciesDisplayName.MMK=Mjanmarskt kjat
currenciesDisplayName.MYR=Malaysian Ringgit
currenciesDisplayName.LSL=Lesotho Loti
currenciesDisplayName.TRL=Tyrknesk l\u00edra
currenciesDisplayName.KMF=K\u00f3moreyskur franki
-currenciesDisplayName.GAF=Mi\u00f0afr\u00edskur franki, Gabon
-currenciesDisplayName.CZK=T\u00e9kknesk kr\u00f3na
currenciesDisplayName.ANG=Hollenskt Antillugyllini
-currenciesDisplayName.GMP=Gamb\u00edskt pund
-currenciesDisplayName.BGX=B\u00falgarskt gjaldeyrissk\u00edrteini \u00ed lef
-currenciesDisplayName.XEF=Mi\u00f0afr\u00edskur franki, BCEAEC
+currenciesDisplayName.CZK=T\u00e9kknesk kr\u00f3na
currenciesDisplayName.KYD=Caymaneyskur dalur
-currenciesDisplayName.BGO=Lef (1879-1952)
currenciesDisplayName.BGN=Lef, n\u00fdtt
-currenciesDisplayName.MXV=Mex\u00edk\u00f3skur pesi, UDI
currenciesDisplayName.CAD=Kanad\u00edskur dalur
-currenciesDisplayName.BGM=Lef (1952-1962)
+currenciesDisplayName.MXV=Mex\u00edk\u00f3skur pesi, UDI
currenciesDisplayName.BGL=Lef
currenciesDisplayName.VEB=Venezuelan Bolivar
currenciesDisplayName.MLF=Mal\u00edskur franki
-currenciesDisplayName.MXP=Mex\u00edk\u00f3skur silfurpesi (1861-1992)
currenciesDisplayName.ILS=Sikill
-currenciesDisplayName.BSP=Bahameyskt pund
-currenciesDisplayName.MXN=Mex\u00edk\u00f3skur pesi
+currenciesDisplayName.MXP=Mex\u00edk\u00f3skur silfurpesi (1861-1992)
currenciesDisplayName.GYD=Gv\u00e6janskur dalur
-currenciesDisplayName.CMF=Mi\u00f0afr\u00edskur franki, Kamer\u00fan
+currenciesDisplayName.MXN=Mex\u00edk\u00f3skur pesi
currenciesDisplayName.ILP=\u00cdsraelskt pund
-currenciesDisplayName.CYP=K\u00fdpverskt pund
currenciesDisplayName.SKK=Sl\u00f3vak\u00edsk kr\u00f3na
+currenciesDisplayName.CYP=K\u00fdpverskt pund
currenciesDisplayName.XDR=S\u00e9rst\u00f6k dr\u00e1ttarr\u00e9ttindi
-currenciesDisplayName.ILL=Israeli Sheqel
currenciesDisplayName.LRD=L\u00edber\u00edskur dalur
currenciesDisplayName.AMD=Dramm
currenciesDisplayName.BSD=Bahameyskur dalur
-currenciesDisplayName.GLK=Gr\u00e6nlensk kr\u00f3na
currenciesDisplayName.HRK=K\u00fana
-currenciesDisplayName.MKN=Maked\u00f3nskur denari (1992-1993)
-currenciesDisplayName.ALX=Albanskt gjaldeyrissk\u00edrteini \u00ed Bandar\u00edkjad\u00f6lum
currenciesDisplayName.CLP=Chileskur pesi
-currenciesDisplayName.JEP=Jerseyskt pund
-currenciesDisplayName.ALV=Lek Valute (1992-1993)
currenciesDisplayName.XPF=P\u00f3lines\u00edskur franki
currenciesDisplayName.FRF=Franskur franki
-currenciesDisplayName.MWP=Malav\u00edskt pund
-currenciesDisplayName.TDF=Mi\u00f0afr\u00edskur franki, Tsjad
currenciesDisplayName.MKD=Maked\u00f3nskur denari
-currenciesDisplayName.TPP=Timor Pataca
currenciesDisplayName.CLF=Chilean Unidades de Fomento
-currenciesDisplayName.CLE=Chileskur sk\u00fati
currenciesDisplayName.ALL=Lek
-currenciesDisplayName.ALK=Lek (1946-1961)
currenciesDisplayName.BRL=Brasil\u00edskt r\u00edal
currenciesDisplayName.TPE=T\u00edmorskur sk\u00fati
-currenciesDisplayName.DES=German Sperrmark
-currenciesDisplayName.XCF=Mi\u00f0afr\u00edskur franki, n\u00fdr
currenciesDisplayName.DEM=\u00de\u00fdskt mark
-currenciesDisplayName.XCD=Austur-Kar\u00edbahafsdalur
currenciesDisplayName.KWD=K\u00faveiskur denari
-currenciesDisplayName.YUM=J\u00fag\u00f3slavneskur denari
+currenciesDisplayName.XCD=Austur-Kar\u00edbahafsdalur
currenciesDisplayName.SVC=El Salvador Colon
-currenciesDisplayName.GWM=Portuguese Guinea Mil Reis
+currenciesDisplayName.YUM=J\u00fag\u00f3slavneskur denari
currenciesDisplayName.SIT=Sl\u00f3venskur dalur
currenciesDisplayName.JPY=Jen
currenciesDisplayName.XOF=Mi\u00f0afr\u00edskur franki, BCEAO
-currenciesDisplayName.TOS=Tongverskt sterlingspund
currenciesDisplayName.BEF=Belg\u00edskur franki
currenciesDisplayName.GWE=Port\u00fagalskur, g\u00edneskur sk\u00fati
-currenciesDisplayName.TCC=Turk- og Caicoseysk kr\u00f3na
-currenciesDisplayName.CKD=Cookseyskur dalur
currenciesDisplayName.SUR=Soviet Rouble
currenciesDisplayName.ROL=R\u00famenskt lei
currenciesDisplayName.DDM=Austur\u00fe\u00fdskt mark
currenciesDisplayName.NOK=Norsk kr\u00f3na
-currenciesDisplayName.XNF=Mi\u00f0afr\u00edskur franki, Antillur
currenciesDisplayName.SHP=Helenskt pund
-currenciesDisplayName.ZAP=Su\u00f0urafr\u00edskt pund
currenciesDisplayName.ZAL=Rand (vi\u00f0skipta)
-currenciesDisplayName.KID=K\u00edribat\u00edskur dalur
currenciesDisplayName.TZS=Tanzanian Shilling
currenciesDisplayName.GIP=G\u00edbraltarspund
-currenciesDisplayName.ZMP=Samb\u00edskt pund
currenciesDisplayName.CVE=Gr\u00e6nh\u00f6f\u00f0eyskur sk\u00fati
currenciesDisplayName.ZMK=Zambian Kwacha
currenciesDisplayName.XAF=Mi\u00f0afr\u00edskur franki, BEAC
currenciesDisplayName.LBP=L\u00edbanskt pund
-currenciesDisplayName.STE=Sa\u00f3 T\u00f3me og Prins\u00edpe sk\u00fati
currenciesDisplayName.STD=Sao Tome and Principe Dobra
-currenciesDisplayName.FOK=F\u00e6reysk kr\u00f3na
currenciesDisplayName.DOP=D\u00f3min\u00edskur pesi
currenciesDisplayName.EUR=Euro
currenciesDisplayName.BOV=Bolivian Mvdol
-currenciesDisplayName.CUX=K\u00fabverskt gjaldeyrissk\u00edrteini
-currenciesDisplayName.LNR=Ceylon Rupee
-currenciesDisplayName.WSP=Sam\u00f3skt pund
-currenciesDisplayName.XMF=K\u00f3moreyskur franki, CFA
currenciesDisplayName.MTP=Maltneskt pund
currenciesDisplayName.USS=Bandar\u00edkjadalur (sama dag)
-currenciesDisplayName.MHD=Marshalleyskur dalur
currenciesDisplayName.BOP=B\u00f3liv\u00edskur pesi
-currenciesDisplayName.NZP=N\u00fdsj\u00e1lenskt pund
currenciesDisplayName.CUP=K\u00fabverskur pesi
currenciesDisplayName.MTL=Meltnesk l\u00edra
currenciesDisplayName.TMM=T\u00farkmenskt manat
currenciesDisplayName.USN=Bandar\u00edkjadalur (n\u00e6sta dag)
-currenciesDisplayName.GHP=Ganverskt pund
-currenciesDisplayName.SSP=Skoskt pund
-currenciesDisplayName.AUP=\u00c1stralskt pund
currenciesDisplayName.SGD=Singap\u00farskur dalur
currenciesDisplayName.NZD=N\u00fdsj\u00e1lenskur dalur
currenciesDisplayName.USD=Bandar\u00edkjadalur
@@ -206,261 +148,100 @@ currenciesDisplayName.MGF=Madagaskur franki
currenciesDisplayName.BBD=Barbadoskur dalur
currenciesDisplayName.CHF=Svissneskur franki
currenciesDisplayName.MGA=Madagascar Ariary
-currenciesDisplayName.JMP=Jama\u00edskt pund
currenciesDisplayName.PLZ=Slot
-currenciesDisplayName.PLX=P\u00f3lskt gjaldeyrissk\u00edrteini \u00ed Bandar\u00edkjad\u00f6lum
currenciesDisplayName.YER=Jemenskt r\u00edal
currenciesDisplayName.ATS=Austurr\u00edskur skildingur
-currenciesDisplayName.ETD=E\u00fe\u00ed\u00f3p\u00edskur dalur
-currenciesDisplayName.LYP=L\u00edb\u00edskt pund
currenciesDisplayName.BND=Br\u00faneiskur dalur
-currenciesDisplayName.YEI=Jemenskt r\u00edal (1904-1964)
-currenciesDisplayName.EGP=Egypskt pund
currenciesDisplayName.JMD=Jama\u00edskur dalur
-currenciesDisplayName.ISK=\u00cdslensk kr\u00f3na
+currenciesDisplayName.EGP=Egypskt pund
currenciesDisplayName.SRG=Suriname Guilder
-currenciesDisplayName.BZH=Hond\u00farskur dalur
+currenciesDisplayName.ISK=\u00cdslensk kr\u00f3na
currenciesDisplayName.LYD=L\u00edb\u00edskur denari
currenciesDisplayName.BZD=Bel\u00edskur dalur
currenciesDisplayName.ESP=Sp\u00e6nskur peseti
-currenciesDisplayName.KRW=Su\u00f0urk\u00f3reskt vonn
currenciesDisplayName.NLG=Hollenskt gyllini
+currenciesDisplayName.KRW=Su\u00f0urk\u00f3reskt vonn
currenciesDisplayName.MRO=Mauritania Ouguiya
-currenciesDisplayName.BMP=Berm\u00fadeyskt pund
currenciesDisplayName.ZWD=Simbabveskur dalur
currenciesDisplayName.SEK=S\u00e6nsk kr\u00f3na
-currenciesDisplayName.KRO=Su\u00f0urk\u00f3reskt vonn (1947-1953)
currenciesDisplayName.CSK=T\u00e9kknesk kr\u00f3na, eldri
currenciesDisplayName.IRR=\u00cdranskt r\u00edal
currenciesDisplayName.PKR=Pakist\u00f6nsk r\u00fap\u00eda
currenciesDisplayName.BMD=Berm\u00fadeyskur dalur
-currenciesDisplayName.KRH=South Korean Hwan
-currenciesDisplayName.CSC=T\u00e9kknesk kr\u00f3na (1945-1953)
-currenciesSymbol.YDD=YDD
-currenciesSymbol.GRN=GRN
-currenciesSymbol.TWD=NT$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.TJS=TJS
-currenciesSymbol.RWF=RWF
-currenciesSymbol.TJR=TJR
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.SDD=SDD
-currenciesSymbol.ARM=ARM
-currenciesSymbol.FKP=FKP
-currenciesSymbol.EEK=EEK
-currenciesSymbol.TVD=TVD
-currenciesSymbol.HKD=HK$
-currenciesSymbol.IQD=ID
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SCR=SR
-currenciesSymbol.XID=XID
-currenciesSymbol.VUV=VT
-currenciesSymbol.KPW=KPW
-currenciesSymbol.DKK=DKr
-currenciesSymbol.IDR=Rp
-currenciesSymbol.LVR=LVR
-currenciesSymbol.KPP=KPP
-currenciesSymbol.AED=AED
-currenciesSymbol.LVL=LVL
-currenciesSymbol.RUR=RUR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.MOP=MOP
-currenciesSymbol.FJD=F$
-currenciesSymbol.ADP=ADP
-currenciesSymbol.DJF=DF
-currenciesSymbol.SBD=SI$
-currenciesSymbol.ADD=ADD
-currenciesSymbol.TTO=TTO
-currenciesSymbol.ECS=ECS
-currenciesSymbol.THB=THB
-currenciesSymbol.LUF=LUF
-currenciesSymbol.FIM=FIM
-currenciesSymbol.TTD=TT$
-currenciesSymbol.MNT=Tug
-currenciesSymbol.UAK=UAK
-currenciesSymbol.SAR=SRl
-currenciesSymbol.UAH=UAH
-currenciesSymbol.HUF=Ft
-currenciesSymbol.IBP=IBP
-currenciesSymbol.COP=Col$
-currenciesSymbol.LTT=LTT
-currenciesSymbol.VGD=VGD
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOS=AOS
-currenciesSymbol.INR=INR
-currenciesSymbol.XFU=XFU
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.COF=COF
-currenciesSymbol.KZR=KZR
-currenciesSymbol.COB=COB
-currenciesSymbol.BUK=BUK
-currenciesSymbol.XFO=XFO
-currenciesSymbol.SYP=LS
-currenciesSymbol.OMR=RO
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MZE=MZE
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.PSP=PSP
-currenciesSymbol.CNY=Y
-currenciesSymbol.CNX=CNX
-currenciesSymbol.GNI=GNI
-currenciesSymbol.MAF=MAF
-currenciesSymbol.GNF=GF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.MYR=RM
-currenciesSymbol.LSL=M
-currenciesSymbol.TRL=TL
-currenciesSymbol.KMF=CF
-currenciesSymbol.GAF=GAF
-currenciesSymbol.CZK=CZK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.GMP=GMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.XEF=XEF
-currenciesSymbol.KYD=KYD
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.MXV=MXV
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGM=BGM
currenciesSymbol.BGL=lev
-currenciesSymbol.VEB=Be
-currenciesSymbol.MLF=MLF
-currenciesSymbol.MXP=MXP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.BSP=BSP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.GYD=G$
-currenciesSymbol.CMF=CMF
-currenciesSymbol.ILP=ILP
+currenciesSymbol.XCD=EC$
+currenciesSymbol.LKR=SL Re
currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.SKK=Sk
-currenciesSymbol.XDR=XDR
-currenciesSymbol.ILL=ILL
-currenciesSymbol.LRD=LRD
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
currenciesSymbol.AMD=dram
-currenciesSymbol.BSD=BSD
-currenciesSymbol.GLK=GLK
-currenciesSymbol.HRK=HRK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.ALX=ALX
currenciesSymbol.CLP=Ch$
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALV=ALV
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.FRF=FRF
-currenciesSymbol.MWP=MWP
-currenciesSymbol.TDF=TDF
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.ALL=lek
-currenciesSymbol.ALK=ALK
-currenciesSymbol.BRL=R$
-currenciesSymbol.TPE=TPE
-currenciesSymbol.DES=DES
-currenciesSymbol.XCF=XCF
-currenciesSymbol.DEM=DEM
-currenciesSymbol.XCD=EC$
currenciesSymbol.KWD=KD
-currenciesSymbol.YUM=YUM
-currenciesSymbol.SVC=SVC
-currenciesSymbol.GWM=GWM
-currenciesSymbol.SIT=SIT
-currenciesSymbol.XOF=XOF
-currenciesSymbol.TOS=TOS
-currenciesSymbol.BEF=BF
-currenciesSymbol.GWE=GWE
-currenciesSymbol.TCC=TCC
-currenciesSymbol.CKD=CKD
-currenciesSymbol.SUR=SUR
currenciesSymbol.ROL=leu
-currenciesSymbol.DDM=DDM
-currenciesSymbol.NOK=NKr
-currenciesSymbol.XNF=XNF
-currenciesSymbol.SHP=SHP
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.KID=KID
+currenciesSymbol.IQD=ID
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
currenciesSymbol.TZS=T Sh
-currenciesSymbol.GIP=GIP
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.CVE=CVEsc
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAF=XAF
-currenciesSymbol.LBP=LL
-currenciesSymbol.STE=STE
+currenciesSymbol.SBD=SI$
+currenciesSymbol.NOK=NKr
+currenciesSymbol.BEF=BF
+currenciesSymbol.TTD=TT$
currenciesSymbol.STD=Db
-currenciesSymbol.FOK=FOK
-currenciesSymbol.DOP=RD$
-currenciesSymbol.BOV=BOV
-currenciesSymbol.CUX=CUX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.WSP=WSP
-currenciesSymbol.XMF=XMF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.USS=USS
-currenciesSymbol.MHD=MHD
-currenciesSymbol.BOP=BOP
-currenciesSymbol.NZP=NZP
-currenciesSymbol.CUP=CUP
-currenciesSymbol.MTL=Lm
-currenciesSymbol.TMM=TMM
-currenciesSymbol.USN=USN
-currenciesSymbol.GHP=GHP
-currenciesSymbol.SSP=SSP
-currenciesSymbol.AUP=AUP
+currenciesSymbol.SAR=SRl
+currenciesSymbol.FJD=F$
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.USD=US$
currenciesSymbol.SGD=S$
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.CVE=CVEsc
+currenciesSymbol.YER=YRl
+currenciesSymbol.HUF=Ft
currenciesSymbol.NZD=$NZ
-currenciesSymbol.USD=US$
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
+currenciesSymbol.DOP=RD$
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.PAB=PAB
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.CNY=Y
+currenciesSymbol.KMF=CF
+currenciesSymbol.SEK=SKr
currenciesSymbol.AUD=$A
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.CHF=SwF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.JMP=JMP
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.PLX=PLX
-currenciesSymbol.YER=YRl
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.LYP=LYP
-currenciesSymbol.BND=BND
-currenciesSymbol.YEI=YEI
-currenciesSymbol.EGP=EGP
+currenciesSymbol.LYD=LD
currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
currenciesSymbol.ISK=kr.
-currenciesSymbol.SRG=Sf
-currenciesSymbol.BZH=BZH
-currenciesSymbol.LYD=LD
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.ESP=ESP
-currenciesSymbol.KRW=KRW
-currenciesSymbol.NLG=NLG
+currenciesSymbol.CHF=SwF
currenciesSymbol.MRO=UM
-currenciesSymbol.BMP=BMP
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.SEK=SKr
-currenciesSymbol.KRO=KRO
-currenciesSymbol.CSK=CSK
-currenciesSymbol.IRR=RI
+currenciesSymbol.BBD=BDS$
currenciesSymbol.PKR=Pra
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.KRH=KRH
-currenciesSymbol.CSC=CSC
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.CAD=Can$
shortMonths=jan®feb®mar®apr®ma\u00ed®j\u00fan®j\u00fal®\u00e1g\u00fa®sep®okt®n\u00f3v®des®®
months=jan\u00faar®febr\u00faar®mars®apr\u00edl®ma\u00ed®j\u00fan\u00ed®j\u00fal\u00ed®\u00e1g\u00fast®september®okt\u00f3ber®n\u00f3vember®desember®®
shortWeekdays=®sun®m\u00e1n®\u00feri®mi\u00f0®fim®f\u00f6s®lau®
@@ -491,7 +272,9 @@ territories.GN=G\u00ednea
territories.GM=Gamb\u00eda
territories.GL=Gr\u00e6nland
territories.SV=El Salvador
+territories.062=Sy\u00f0ri mi\u00f0-As\u00eda
territories.ST=Sa\u00f3 T\u00f3me og Prins\u00edpe
+territories.061=P\u00f3l\u00fdnes\u00eda
territories.GI=G\u00edbraltar
territories.GH=Gana
territories.SR=S\u00far\u00ednam
@@ -515,9 +298,12 @@ territories.SC=Seychelleseyjar
territories.SB=Sal\u00f3monseyjar
territories.SA=S\u00e1di-Arab\u00eda
territories.FR=Frakkland
+territories.057=M\u00edkr\u00f3nes\u00eda
territories.FO=F\u00e6reyjar
territories.FM=Mikr\u00f3nes\u00eda
territories.RW=R\u00faanda
+territories.054=Melanes\u00eda
+territories.053=\u00c1stral\u00eda og N\u00fdja-Sj\u00e1land
territories.FK=Falklandseyjar
territories.RU=R\u00fassland
territories.FJ=F\u00eddjieyjar
@@ -527,20 +313,26 @@ territories.RE=R\u00e9union
territories.ET=E\u00fe\u00ed\u00f3p\u00eda
territories.ES=Sp\u00e1nn
territories.ER=Er\u00edtrea
+territories.833=M\u00f6n
territories.EH=Vestur-Sahara
territories.EG=Egyptaland
+territories.830=Ermasundseyjar
territories.EE=Eistland
+territories.QO=Ytri Eyja\u00e1lfa
territories.EC=Ekvador
territories.DZ=Als\u00edr
territories.QA=Katar
+territories.039=Su\u00f0ur-Evr\u00f3pa
territories.DO=D\u00f3min\u00edska l\u00fd\u00f0veldi\u00f0
territories.PY=Paragv\u00e6
+territories.035=Su\u00f0austur-As\u00eda
territories.DM=D\u00f3min\u00edka
territories.PW=Pal\u00e1
territories.DK=Danm\u00f6rk
territories.DJ=Dj\u00edb\u00fat\u00ed
territories.PT=Port\u00fagal
territories.PS=Palest\u00edna
+territories.030=Austur-As\u00eda
territories.PR=P\u00faert\u00f3 R\u00edk\u00f3
territories.DE=\u00de\u00fdskaland
territories.PN=Pitcairn
@@ -555,13 +347,18 @@ territories.PE=Per\u00fa
territories.CY=K\u00fdpur
territories.CX=J\u00f3laey
territories.CV=Gr\u00e6nh\u00f6f\u00f0aeyjar
+territories.PA=Panama
territories.CU=K\u00faba
+territories.CS=Serb\u00eda
territories.CR=Kostar\u00edka
+territories.029=Kar\u00edbahaf
territories.CO=K\u00f3lumb\u00eda
territories.CN=K\u00edna
territories.CM=Kamer\u00fan
+territories.CL=Chile
territories.CK=Cookseyjar
territories.CI=F\u00edlabeinsstr\u00f6ndin
+territories.021=Nor\u00f0ur-Amer\u00edka
territories.CH=Sviss
territories.CG=Vestur-Kong\u00f3
territories.CF=Mi\u00f0-Afr\u00edkul\u00fd\u00f0veldi\u00f0
@@ -576,13 +373,20 @@ territories.BV=Bouveteyja
territories.BT=B\u00fatan
territories.BS=Bahamaeyjar
territories.BR=Brasil\u00eda
+territories.019=Amer\u00edka
+territories.018=Su\u00f0ur-Afr\u00edka
territories.NZ=N\u00fdja-Sj\u00e1land
territories.BO=B\u00f3liv\u00eda
+territories.017=Mi\u00f0-Afr\u00edka
territories.BN=Br\u00fanei
territories.BM=Berm\u00fadaeyjar
+territories.015=Nor\u00f0ur-Afr\u00edka
+territories.014=Austur-Afr\u00edka
+territories.013=Mi\u00f0-Amer\u00edka
territories.NU=Niue
territories.BJ=Ben\u00edn
territories.BI=B\u00far\u00fand\u00ed
+territories.011=Vestur-Afr\u00edka
territories.BH=Barein
territories.NR=N\u00e1r\u00fa
territories.BG=B\u00falgar\u00eda
@@ -592,6 +396,7 @@ territories.BE=Belg\u00eda
territories.NO=Noregur
territories.BD=Bangladess
territories.BB=Barbados
+territories.ZW=Simbabve
territories.NL=Ni\u00f0url\u00f6nd
territories.BA=Bosn\u00eda og Herseg\u00f3v\u00edna
territories.NI=N\u00edkaragva
@@ -599,6 +404,7 @@ territories.NG=N\u00edger\u00eda
territories.NF=Norfolkeyja
territories.AZ=Aserba\u00eddsjan
territories.NE=N\u00edger
+territories.AX=\u00c1landseyjar
territories.NC=N\u00fdja-Kaled\u00f3n\u00eda
territories.AW=Ar\u00faba
territories.ZM=Samb\u00eda
@@ -607,19 +413,23 @@ territories.AU=\u00c1stral\u00eda
territories.AT=Austurr\u00edki
territories.AS=Bandar\u00edska Sam\u00f3a
territories.AR=Argent\u00edna
+territories.009=Eyja\u00e1lfa
territories.AQ=Su\u00f0urskautslandi\u00f0
territories.MZ=M\u00f3samb\u00edk
territories.AO=Ang\u00f3la
territories.MY=Malas\u00eda
territories.AN=Hollensku Antillur
territories.MX=Mex\u00edk\u00f3
+territories.005=Su\u00f0ur-Amer\u00edka
territories.AM=Armen\u00eda
territories.MW=Malav\u00ed
territories.AL=Alban\u00eda
territories.MV=Mald\u00edveyjar
territories.ZA=Su\u00f0ur-Afr\u00edka
territories.MU=M\u00e1rit\u00edus
+territories.002=Afr\u00edka
territories.MT=Malta
+territories.001=Heimur
territories.AI=Angvilla
territories.MS=Montserrat
territories.MR=M\u00e1ritan\u00eda
@@ -634,7 +444,6 @@ territories.MN=Mong\u00f3l\u00eda
territories.MM=Mjanmar
territories.ML=Mal\u00ed
territories.MK=Maked\u00f3n\u00eda
-territories.YU=J\u00fag\u00f3slav\u00eda
territories.YT=Mayotte
territories.MH=Marshalleyjar
territories.MG=Madagaskar
@@ -644,10 +453,14 @@ territories.MA=Marokk\u00f3
territories.YE=Jemen
territories.LY=L\u00edb\u00eda
territories.LV=Lettland
+territories.155=Vestur-Evr\u00f3pa
territories.LU=L\u00faxemborg
+territories.154=Nor\u00f0ur-Evr\u00f3pa
territories.LT=Lith\u00e1en
territories.LS=Les\u00f3t\u00f3
territories.LR=L\u00edber\u00eda
+territories.151=Austur-Evr\u00f3pa
+territories.150=Evr\u00f3pa
territories.LK=Sr\u00ed Lanka
territories.LI=Liechtenstein
territories.LC=Sankti L\u00fas\u00eda
@@ -656,6 +469,8 @@ territories.LA=Laos
territories.KZ=Kasakstan
territories.KY=Caymaneyjar
territories.KW=K\u00faveit
+territories.145=Vestur-As\u00eda
+territories.142=As\u00eda
territories.KR=Su\u00f0ur-K\u00f3rea
territories.KP=Nor\u00f0ur-K\u00f3rea
territories.KN=Sankti Krist\u00f3fer og Nevis
@@ -705,8 +520,8 @@ territories.TR=Tyrkland
territories.TO=Tonga
territories.TN=T\u00fanis
territories.TM=T\u00farkmenistan
-languages.gwi=Gv\u00eds\u00edn
languages.akk=Akkad\u00edska
+languages.gwi=Gv\u00eds\u00edn
languages.eka=Ekaj\u00fak
languages.ijo=\u00cdj\u00f3
languages.xh=S\u00f3sa
@@ -719,15 +534,15 @@ languages.pon=Ponpeiska
languages.min=M\u00ednangkab\u00e1
languages.suk=S\u00fak\u00fama
languages.wo=Volof
-languages.lol=Mong\u00f3
languages.kut=K\u00fatena\u00ed
+languages.lol=Mong\u00f3
languages.mic=Mikmak
languages.wa=Vall\u00f3nska
languages.kum=K\u00fam\u00edk
languages.zap=Sap\u00f3tek
languages.cus=K\u00fasit\u00edsk m\u00e1l (\u00f6nnur)
-languages.jbo=Lojban
languages.doi=Dogr\u00ed
+languages.jbo=Lojban
languages.vo=Volap\u00fck
languages.oto=\u00d3tomm\u00e1l
languages.vi=V\u00edetnamska
@@ -751,8 +566,8 @@ languages.egy=Fornegypska
languages.ug=\u00da\u00edg\u00far
languages.fan=Fang
languages.ssa=N\u00edl\u00f3saharam\u00e1l (\u00f6nnur)
-languages.mga=Mi\u00f0\u00edrska (900-1200)
languages.bat=Baltnesk m\u00e1l (\u00f6nnur)
+languages.mga=Mi\u00f0\u00edrska (900-1200)
languages.nyo=Nj\u00f3r\u00f3
languages.bas=Basa
languages.nyn=Njank\u00f3le
@@ -780,8 +595,8 @@ languages.kru=K\u00far\u00fak
languages.tg=Tadsjikska
languages.byn=Bl\u00edn
languages.te=Tel\u00fag\u00fa
-languages.kro=Kr\u00fa
languages.csb=Kas\u00fab\u00edska
+languages.kro=Kr\u00fa
languages.ta=Tam\u00edlska
languages.tkl=T\u00f3kel\u00e1ska
languages.efi=Ef\u00edk
@@ -805,8 +620,8 @@ languages.sk=Sl\u00f3vak\u00edska
languages.grb=Gerb\u00f3
languages.si=Singales\u00edska
languages.sh=Serb\u00f3kr\u00f3at\u00edska
-languages.crh=Kr\u00edmtyrkneska
languages.afa=Afr\u00f3as\u00edsk m\u00e1l (\u00f6nnur)
+languages.crh=Kr\u00edmtyrkneska
languages.sg=Sang\u00f3
languages.se=Nor\u00f0ursam\u00edska
languages.sd=Sind\u00ed
@@ -830,14 +645,14 @@ languages.son=Songha\u00ed
languages.cpp=Kre\u00f3l- og pidginm\u00e1l \u00e1 port\u00fag\u00f6lskum grunni
languages.sog=Sogd\u00eden
languages.ada=Adangme
-languages.kos=Kosraska
-languages.hit=Hettit\u00edska
languages.cpf=Kre\u00f3l- og pidginm\u00e1l \u00e1 fr\u00f6nskum grunni
+languages.hit=Hettit\u00edska
+languages.kos=Kosraska
languages.cpe=Kre\u00f3l- og pidginm\u00e1l \u00e1 enskum grunni
languages.him=H\u00edmasjal\u00ed
-languages.kok=Konkan\u00ed
-languages.hil=H\u00edliga\u00ednon
languages.got=Gotneska
+languages.hil=H\u00edliga\u00ednon
+languages.kok=Konkan\u00ed
languages.gor=Gorontal\u00f3
languages.gon=Gond\u00ed
languages.din=Dinka
@@ -908,21 +723,21 @@ languages.ms=Mala\u00edska
languages.mr=Marat\u00ed
languages.fro=Fornfranska (842 - um 1400)
languages.mo=Mold\u00f3vska
-languages.frm=Mi\u00f0franska (um 1400-1600)
languages.mn=Mong\u00f3lska
-languages.jrb=Gy\u00f0ingaarab\u00edska
+languages.frm=Mi\u00f0franska (um 1400-1600)
languages.ml=Malajalam
+languages.jrb=Gy\u00f0ingaarab\u00edska
languages.mk=Maked\u00f3nska
languages.mi=Ma\u00f3r\u00ed
languages.mh=Marshallska
languages.mg=Malagas\u00edska
languages.mwr=Marvar\u00ed
languages.bra=Bra\u00ed
-languages.den=Slav
languages.lv=Lettneska
+languages.den=Slav
languages.lu=L\u00fabakatanga
-languages.del=Delaver
languages.lt=Lith\u00e1\u00edska
+languages.del=Delaver
languages.lo=La\u00f3
languages.ln=Lingala
languages.li=Limb\u00farg\u00edska
@@ -975,38 +790,38 @@ languages.iu=In\u00faktit\u00fat
languages.pap=Pap\u00edament\u00f3
languages.it=\u00cdtalska
languages.sgn=T\u00e1knm\u00e1l
-languages.is=\u00cdslenska
languages.kha=Kas\u00ed
+languages.is=\u00cdslenska
languages.chr=Sjer\u00f3k\u00ed
languages.pam=Pampanga
languages.pal=Palav\u00ed
languages.chp=S\u00edpev\u00edska
-languages.io=\u00cdd\u00f3
languages.cho=Sjokt\u00e1
+languages.io=\u00cdd\u00f3
languages.chn=S\u00edn\u00fak
languages.chm=Mar\u00ed
languages.tyv=T\u00fav\u00ednska
languages.bnt=Bant\u00fam\u00e1l
languages.pag=Pangas\u00ednm\u00e1l
-languages.ik=\u00cdn\u00fap\u00edak
languages.chk=Sj\u00fak\u00edska
-languages.ii=S\u00eds\u00faanj\u00ed
+languages.ik=\u00cdn\u00fap\u00edak
languages.haw=Hava\u00edska
+languages.ii=S\u00eds\u00faanj\u00ed
languages.lam=Lamba
-languages.ig=\u00cdgb\u00f3
languages.chg=Sjagata\u00ed
+languages.ig=\u00cdgb\u00f3
languages.sga=Forn\u00edrska (til 900)
languages.paa=Pap\u00fask m\u00e1l (\u00f6nnur)
languages.ie=Interlingva
languages.id=Ind\u00f3nes\u00edska
languages.lah=Landa
-languages.day=Dajak
languages.chb=S\u00edbsja
+languages.day=Dajak
languages.ia=Interlingva
languages.lad=Lad\u00ednska
-languages.hz=Herer\u00f3
-languages.hai=Ha\u00edda
languages.dar=Dargva
+languages.hai=Ha\u00edda
+languages.hz=Herer\u00f3
languages.hy=Armenska
languages.ath=Atapask\u00edsk m\u00e1l
languages.hu=Ungverska
@@ -1028,9 +843,9 @@ languages.iro=\u00cdr\u00f3kesk m\u00e1l
languages.gn=Gvaran\u00ed
languages.gl=Gallegska
languages.arw=Aravakska
-languages.gez=G\u00eds
-languages.art=Al\u00fej\u00f3\u00f0am\u00e1l (\u00f6nnur)
languages.gd=Skosk gel\u00edska
+languages.art=Al\u00fej\u00f3\u00f0am\u00e1l (\u00f6nnur)
+languages.gez=G\u00eds
languages.ira=\u00cdranska
languages.ga=\u00cdrska
languages.arp=Arapah\u00f3
@@ -1039,8 +854,8 @@ languages.fy=Fr\u00edsneska
languages.bla=Siksika
languages.gem=Germ\u00f6nsk m\u00e1l (\u00f6nnur)
languages.ypk=J\u00fap\u00edsk m\u00e1l
-languages.arc=Arame\u00edska
languages.fr=Franska
+languages.arc=Arame\u00edska
languages.fo=F\u00e6reyska
languages.cel=Keltnesk (\u00f6nnur)
languages.fj=F\u00eddjeyska
@@ -1064,9 +879,9 @@ languages.tum=T\u00famb\u00faka
languages.mos=Moss\u00ed
languages.dz=Dsongka
languages.nic=N\u00edgerkord\u00f3fanm\u00e1l (\u00f6nnur)
-languages.lus=L\u00fasa\u00ed
-languages.fiu=Finnsk\u00fagr\u00edsk m\u00e1l (\u00f6nnur)
languages.dv=D\u00edveh\u00ed
+languages.fiu=Finnsk\u00fagr\u00edsk m\u00e1l (\u00f6nnur)
+languages.lus=L\u00fasa\u00ed
languages.nia=N\u00edas
languages.moh=M\u00f3h\u00edska
languages.luo=L\u00fa\u00f3
@@ -1089,8 +904,8 @@ languages.wak=Vakasm\u00e1l
languages.sat=Santal\u00ed
languages.cy=Velska
languages.sas=Sasak
-languages.kbd=Kabard\u00edska
languages.cv=Sj\u00favas
+languages.kbd=Kabard\u00edska
languages.cu=Kirkjuslavneska
languages.mni=Man\u00edp\u00far\u00ed
languages.cs=T\u00e9kkneska
@@ -1102,17 +917,17 @@ languages.co=Kors\u00edska
languages.sai=Ind\u00ed\u00e1nam\u00e1l Su\u00f0ur-Amer\u00edku (\u00f6nnur)
languages.mnc=Mansj\u00fa
languages.sah=Jak\u00fat
-languages.kaw=Kav\u00ed
-languages.inh=Ing\u00fas
languages.gba=Gbaja
+languages.inh=Ing\u00fas
+languages.kaw=Kav\u00ed
languages.sad=Sandave
languages.ch=Kamorr\u00f3
-languages.ine=Ind\u00f3evr\u00f3psk m\u00e1l (\u00f6nnur)
languages.bho=Bojp\u00far\u00ed
+languages.ine=Ind\u00f3evr\u00f3psk m\u00e1l (\u00f6nnur)
languages.enm=Mi\u00f0enska (1100-1500)
-languages.kar=Karen
-languages.inc=Indversk m\u00e1l (\u00f6nnur)
languages.ce=Tsjetsjenska
+languages.inc=Indversk m\u00e1l (\u00f6nnur)
+languages.kar=Karen
languages.gay=Gaj\u00f3
languages.ca=Katal\u00f3nska
languages.umb=\u00damb\u00fand\u00fa
@@ -1120,19 +935,19 @@ languages.syr=S\u00fdrlenska
languages.kam=Kamba
languages.tsi=Tsims\u00edska
languages.ang=Fornenska (um 450-1100)
-languages.kac=Kas\u00edn
languages.cau=K\u00e1kasusm\u00e1l (\u00f6nnur)
+languages.kac=Kas\u00edn
languages.kab=Kab\u00edle
-languages.kaa=Karakalpak
languages.bs=Bosn\u00edska
-languages.car=Kar\u00edbam\u00e1l
+languages.kaa=Karakalpak
languages.br=Bret\u00f3nska
+languages.car=Kar\u00edbam\u00e1l
languages.bo=T\u00edbeska
languages.bn=Bengalska
languages.bm=Bambara
languages.gaa=Ga
-languages.cai=Ind\u00ed\u00e1nam\u00e1l Mi\u00f0-Amer\u00edku (\u00f6nnur)
languages.bi=B\u00edslama
+languages.cai=Ind\u00ed\u00e1nam\u00e1l Mi\u00f0-Amer\u00edku (\u00f6nnur)
languages.bh=B\u00edhar\u00ed
languages.bg=B\u00falgarska
languages.be=Hv\u00edtr\u00fassneska
@@ -1146,10 +961,10 @@ languages.az=Aserska
languages.ay=A\u00edmara
languages.av=Avar\u00edska
languages.as=Assamska
-languages.dsb=L\u00e1gsorbneska
languages.ar=Arab\u00edska
-languages.ilo=\u00cdlok\u00f3
+languages.dsb=L\u00e1gsorbneska
languages.elx=Elam\u00edt
+languages.ilo=\u00cdlok\u00f3
languages.zh=K\u00ednverska
languages.an=Aragonska
languages.pra=Prakr\u00edtm\u00e1l
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_it.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_it.properties
index 75adf3d..f2662fa 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_it.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_it.properties
@@ -7,760 +7,328 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.JOD=Dinaro Giordano
-currenciesDisplayName.BOV=Mvdol Boliviano
-currenciesDisplayName.XAU=Oro
-currenciesDisplayName.FOK=Kronur delle Isole Faeroe
-currenciesDisplayName.LBP=Sterlina Libanese
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Dong Vietnamita
-currenciesDisplayName.TZS=Scellino della Tanzania
-currenciesDisplayName.BOP=Peso Boliviano
-currenciesDisplayName.KHR=Riel Cambogiano
-currenciesDisplayName.XAM=Unit\u00e0 Monetaria Asiatica
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Vecchio riel cambogiano
-currenciesDisplayName.ZMP=Sterlina dello Zambia
-currenciesDisplayName.AUP=Sterlina Australiana
-currenciesDisplayName.XAF=Franco CFA BEAC
-currenciesDisplayName.MTP=Sterlina Maltese
-currenciesDisplayName.GHR=Cedi rivalutato del Ghana
-currenciesDisplayName.ZMK=Kwacha dello Zambia
-currenciesDisplayName.XAD=Unit\u00e0 di conto in dinari asiatica
-currenciesDisplayName.GHP=Sterlina del Ghana
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Vecchi cedi del Ghana
-currenciesDisplayName.MTL=Lira Maltese
-currenciesDisplayName.AUD=Dollaro Australiano
-currenciesDisplayName.USS=Dollaro Statunitense (Same day)
-currenciesDisplayName.ITL=Lira Italiana
-currenciesDisplayName.USN=Dollaro Statunitense (Next day)
-currenciesDisplayName.GHC=Cedi del Ghana
-currenciesDisplayName.SGD=Dollaro di Singapore
-currenciesDisplayName.PAB=Balboa di Panama
-currenciesDisplayName.LAK=Kip Laotiano
-currenciesDisplayName.KGS=Som Kirghiso
-currenciesDisplayName.CHF=Franco Svizzero
-currenciesDisplayName.ATS=Scellino Austriaco
-currenciesDisplayName.USD=Dollaro Statunitense
-currenciesDisplayName.ETD=Dollaro Etiopico
-currenciesDisplayName.BND=Dollaro del Brunei
-currenciesDisplayName.JMP=Sterlina Giamaicana
-currenciesDisplayName.ETB=Birr Etiopico
-currenciesDisplayName.DZG=Franco germinale algerino
-currenciesDisplayName.DZF=Nuovo franco algerino
-currenciesDisplayName.DZD=Dinaro Algerino
-currenciesDisplayName.PYG=Guarani del Paraguay
-currenciesDisplayName.LYP=Sterlina Libica
-currenciesDisplayName.JMD=Dollaro Giamaicano
-currenciesDisplayName.ISK=Corona Islandese
-currenciesDisplayName.ESP=Peseta Spagnola
-currenciesDisplayName.BMP=Sterlina delle Bermuda
-currenciesDisplayName.LYD=Dinaro Libico
-currenciesDisplayName.LYB=Lira libica della British Military Authority
-currenciesDisplayName.BMD=Dollaro delle Bermuda
-currenciesDisplayName.NLG=Fiorino Olandese
-currenciesDisplayName.MRO=Ouguiya della Mauritania
-currenciesDisplayName.IRR=Rial Iraniano
-currenciesDisplayName.SEK=Corona Svedese
-currenciesDisplayName.ERN=Nakfa Eritreo
+currenciesDisplayName.YDD=Dinaro dello Yemen
+currenciesDisplayName.TWD=Nuovo dollaro taiwanese
currenciesDisplayName.KES=Scellino Keniota
-currenciesDisplayName.CFF=Franco CFA della Repubblica dell\u2019Africa Centrale
+currenciesDisplayName.BYB=Nuovo Rublo Bielorussia (1994-1999)
+currenciesDisplayName.LKR=Rupia di Sri Lanka
+currenciesDisplayName.RWF=Franco Ruandese
+currenciesDisplayName.TJS=Somoni del Tajikistan
+currenciesDisplayName.SDP=Sterlina Sudanese
+currenciesDisplayName.TJR=Rublo del Tajikistan
+currenciesDisplayName.ERN=Nakfa Eritreo
+currenciesDisplayName.AFN=Afgani
+currenciesDisplayName.GRD=Dracma Greca
+currenciesDisplayName.IEP=Lira Irlandese
currenciesDisplayName.ARS=Peso Argentino
+currenciesDisplayName.SDD=Dinaro Sudanese
currenciesDisplayName.ARP=Peso Argentino (vecchio Cod.)
-currenciesDisplayName.ARM=Peso Moneda Nacional argentino
-currenciesDisplayName.TWD=Nuovo dollaro taiwanese
-currenciesDisplayName.SDP=Sterlina Sudanese
currenciesDisplayName.GEL=Lari Georgiano
+currenciesDisplayName.AFA=Afgani (1927-2002)
currenciesDisplayName.GEK=Kupon Larit Georgiano
-currenciesDisplayName.MQF=Franco della Martinica
+currenciesDisplayName.CRC=Col\u00f3n Costaricano
currenciesDisplayName.FKP=Sterlina delle Falkland
+currenciesDisplayName.EEK=Corona dell\u2019Estonia
+currenciesDisplayName.HKD=Dollaro di Hong Kong
+currenciesDisplayName.MDL=Leu Moldavo
currenciesDisplayName.ARA=Austral Argentino
-currenciesDisplayName.SDD=Dinaro Sudanese
currenciesDisplayName.IQD=Dinaro Iracheno
-currenciesDisplayName.TVD=Dollaro di Tuvalu
currenciesDisplayName.SCR=Rupia delle Seychelles
+currenciesDisplayName.VUV=Vatu di Vanuatu
+currenciesDisplayName.DKK=Corona Danese
+currenciesDisplayName.KPW=Won Nordcoreano
+currenciesDisplayName.GQE=Ekwele della Guinea Equatoriale
+currenciesDisplayName.IDR=Rupia Indiana
currenciesDisplayName.LVR=Rublo Lettone
-currenciesDisplayName.FJP=Sterlina delle Figi
+currenciesDisplayName.SOS=Scellino Somalo
+currenciesDisplayName.AED=Dirham degli Emirati Arabi Uniti
+currenciesDisplayName.BWP=Pula del Botswana
currenciesDisplayName.LVL=Lat Lettone
-currenciesDisplayName.CDL=Zaire Congolese
-currenciesDisplayName.CDG=Franco della Repubblica Congolese
-currenciesDisplayName.CDF=Franco Congolese
-currenciesDisplayName.FJD=Dollaro delle Figi
+currenciesDisplayName.RUR=Rublo della CSI
currenciesDisplayName.NIO=C\u00f3rdoba oro nicaraguense
+currenciesDisplayName.ADP=Peseta Andorrana
+currenciesDisplayName.FJD=Dollaro delle Figi
currenciesDisplayName.MOP=Pataca di Macao
-currenciesDisplayName.NIG=C\u00f3rdoba d\u2019oro nicaraguense
+currenciesDisplayName.RUB=Rublo Russo
+currenciesDisplayName.CDF=Franco Congolese
currenciesDisplayName.NIC=Cordoba Nicaraguense
-currenciesDisplayName.XTR=Rublo Trasferibile COMECON
-currenciesDisplayName.FIN=Markka Finlandese (1860-1962)
-currenciesDisplayName.FIM=Markka Finlandese
+currenciesDisplayName.DJF=Franco Gibutiano
+currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) dell\u2019Ecuador
currenciesDisplayName.SBD=Dollaro delle Isole Solomon
+currenciesDisplayName.UZS=Sum dell\u2019Uzbekistan
+currenciesDisplayName.ECS=Sucre dell\u2019Ecuador
+currenciesDisplayName.PHP=Peso delle Filippine
+currenciesDisplayName.THB=Baht Tailandese
currenciesDisplayName.LUF=Franco del Lussemburgo
-currenciesDisplayName.TTO=Vecchio dollaro di Trinidad e Tobago
-currenciesDisplayName.AOS=Escudo Angolano
-currenciesDisplayName.AOR=Kwanza Reajustado Angolano (1995-1999)
-currenciesDisplayName.MNT=Tugrik Mongolo
-currenciesDisplayName.HUF=Fiorino Ungherese
-currenciesDisplayName.BIF=Franco del Burundi
-currenciesDisplayName.AON=Nuovo Kwanza Angolano (1990-2000)
-currenciesDisplayName.AOK=Kwanza Angolano (1977-1990)
+currenciesDisplayName.FIM=Markka Finlandese
currenciesDisplayName.TTD=Dollaro di Trinidad e Tobago
currenciesDisplayName.SZL=Lilangeni dello Swaziland
-currenciesDisplayName.NHF=Franco CFP delle Nuove Ebridi
-currenciesDisplayName.GBP=Sterlina Inglese
-currenciesDisplayName.SAS=Riyal sovrano saudita
+currenciesDisplayName.MNT=Tugrik Mongolo
currenciesDisplayName.SAR=Ryal Saudita
+currenciesDisplayName.UAK=Karbovanetz Ucraino
+currenciesDisplayName.UAH=Hrivna Ucraina
+currenciesDisplayName.HUF=Fiorino Ungherese
+currenciesDisplayName.COP=Peso Colombiano
+currenciesDisplayName.QAR=Rial del Qatar
currenciesDisplayName.LTT=Talonas Lituani
-currenciesDisplayName.INR=Rupia Indiana
currenciesDisplayName.PTE=Escudo Portoghese
-currenciesDisplayName.AOA=Kwanza Angolano
-currenciesDisplayName.PTC=Conto Portoghese
+currenciesDisplayName.AOR=Kwanza Reajustado Angolano (1995-1999)
+currenciesDisplayName.UYU=Peso Uruguayo uruguaiano
+currenciesDisplayName.GBP=Sterlina Inglese
+currenciesDisplayName.BIF=Franco del Burundi
+currenciesDisplayName.INR=Rupia Indiana
+currenciesDisplayName.ZRZ=Zaire dello Zaire
+currenciesDisplayName.AON=Nuovo Kwanza Angolano (1990-2000)
currenciesDisplayName.LTL=Lita Lituana
+currenciesDisplayName.XFU=Franco UIC Francese
currenciesDisplayName.KZT=Tenge Kazaco
-currenciesDisplayName.KZR=Rublo Kazaco
-currenciesDisplayName.VGD=Dollaro delle Isole Vergini britanniche
-currenciesDisplayName.NGP=Sterlina Nigeriana
-currenciesDisplayName.MMX=Certificati di cambio esteri in dollari Myanmar
+currenciesDisplayName.MZM=Metical del Mozambico
+currenciesDisplayName.UYP=Peso Uruguaiano (1975-1993)
+currenciesDisplayName.AOK=Kwanza Angolano (1977-1990)
+currenciesDisplayName.BUK=Kyat Birmano
+currenciesDisplayName.GNS=Syli della Guinea
+currenciesDisplayName.XFO=Franco Oro Francese
+currenciesDisplayName.PGK=Kina della Papua Nuova Guinea
+currenciesDisplayName.SYP=Sterlina Siriana
+currenciesDisplayName.MZE=Escudo del Mozambico
+currenciesDisplayName.OMR=Rial Omanita
currenciesDisplayName.NGN=Naira Nigeriana
+currenciesDisplayName.ZRN=Nuovo Zaire dello Zaire
+currenciesDisplayName.AOA=Kwanza Angolano
+currenciesDisplayName.CNY=Renmimbi Cinese
+currenciesDisplayName.MAF=Franco Marocchino
+currenciesDisplayName.GNF=Franco della Guinea
currenciesDisplayName.HTG=Gourde Haitiano
-currenciesDisplayName.SYP=Sterlina Siriana
-currenciesDisplayName.PSP=Sterlina della Palestina
-currenciesDisplayName.BHD=Dinaro del Bahraini
+currenciesDisplayName.MAD=Dirham Marocchino
currenciesDisplayName.MMK=Kyat di Myanmar
+currenciesDisplayName.MYR=Ringgit della Malesia
+currenciesDisplayName.LSL=Loti del Lesotho
+currenciesDisplayName.XEU=Unit\u00e0 Monetaria Europea
+currenciesDisplayName.BHD=Dinaro del Bahraini
+currenciesDisplayName.SLL=Leone della Sierra Leone
+currenciesDisplayName.BTN=Ngultrum Butanese
+currenciesDisplayName.TRL=Lira Turca
+currenciesDisplayName.KMF=Franco Comoriano
currenciesDisplayName.ANG=Fiorino delle Antille Olandesi
currenciesDisplayName.CZK=Corona Ceca
-currenciesDisplayName.IMP=Lira Sterlina dell\u2019Isola di Man
-currenciesDisplayName.BGX=Certificati di cambio esteri in Lev bulgari
-currenciesDisplayName.LSL=Loti del Lesotho
-currenciesDisplayName.GAF=Franco CFA Gabon
-currenciesDisplayName.BGO=Lev Bulgaro (1879-1952)
+currenciesDisplayName.AZM=Manat Azero
+currenciesDisplayName.KYD=Dollaro delle Isole Cayman
+currenciesDisplayName.GMD=Dalasi del Gambia
currenciesDisplayName.BGN=Nuovo Lev Bulgaro
-currenciesDisplayName.BGM=Lev Bulgaro Socialista
currenciesDisplayName.CAD=Dollaro Canadese
+currenciesDisplayName.MXV=Unidad de Inversion (UDI) Messicana
currenciesDisplayName.BGL=Lev Bulgaro
-currenciesDisplayName.TRL=Lira Turca
-currenciesDisplayName.KYD=Dollaro delle Isole Cayman
-currenciesDisplayName.CYP=Sterlina Cipriota
+currenciesDisplayName.VEB=Bolivar Venezuelano
+currenciesDisplayName.MLF=Franco di Mali
currenciesDisplayName.ILS=Nuovo sheqel israeliano
+currenciesDisplayName.MXP=Peso messicano d\u2019argento (1861-1992)
+currenciesDisplayName.PES=Sol Peruviano
currenciesDisplayName.GYD=Dollaro della Guyana
-currenciesDisplayName.AMD=Dram Armeno
+currenciesDisplayName.MXN=Peso Messicano
currenciesDisplayName.ILP=Sterlina Israeliana
-currenciesDisplayName.MLF=Franco di Mali
-currenciesDisplayName.ILL=Sheqel Israeliano
-currenciesDisplayName.VEB=Bolivar Venezuelano
-currenciesDisplayName.ALX=Certificati di cambio esteri albanesi in dollari
+currenciesDisplayName.SKK=Corona Slovacca
+currenciesDisplayName.CYP=Sterlina Cipriota
+currenciesDisplayName.XDR=Diritti Speciali di Incasso
+currenciesDisplayName.PEN=Sol Nuevo Peruviano
currenciesDisplayName.LRD=Dollaro Liberiano
-currenciesDisplayName.ALV=Lek Valute Albanese
+currenciesDisplayName.PEI=Inti Peruviano
+currenciesDisplayName.AMD=Dram Armeno
+currenciesDisplayName.BSD=Dollaro delle Bahamas
currenciesDisplayName.HRK=Kuna Croata
-currenciesDisplayName.REF=Franco di Reunion
+currenciesDisplayName.CLP=Peso Cileno
currenciesDisplayName.HRD=Dinaro Croato
-currenciesDisplayName.ALL=Lek Albanese
-currenciesDisplayName.JEP=Lira Sterlina di Jersey
-currenciesDisplayName.ALK=Lek Albanese (1946-1961)
-currenciesDisplayName.MKN=Dinaro Macedone (1992-1993)
-currenciesDisplayName.VDP=Viet Minh Piastre Dong Viet nordvietnamita
-currenciesDisplayName.VDN=Nuovo Dong nordvietnamita
-currenciesDisplayName.MKD=Dinaro Macedone
-currenciesDisplayName.VDD=Piastre Dong Viet nordvietnamita
-currenciesDisplayName.TPP=Pataca di Timor
currenciesDisplayName.XPF=Franco CFP
-currenciesDisplayName.BEL=Franco Belga (finanziario)
-currenciesDisplayName.GWP=Peso della Guinea-Bissau
-currenciesDisplayName.KWD=Dinaro Kuwaitiano
-currenciesDisplayName.GWM=Mil Reis della Guinea portoghese
-currenciesDisplayName.BEF=Franco Belga
+currenciesDisplayName.FRF=Franco Francese
+currenciesDisplayName.BRR=Cruzeiro Brasiliano
+currenciesDisplayName.MKD=Dinaro Macedone
+currenciesDisplayName.CLF=Unidades de Fomento Chilene
+currenciesDisplayName.ALL=Lek Albanese
+currenciesDisplayName.BRN=Cruzado Novo Brasiliano
+currenciesDisplayName.MWK=Kwacha Malawiano
+currenciesDisplayName.BRL=Real Brasiliano
currenciesDisplayName.TPE=Escudo di Timor
-currenciesDisplayName.BEC=Franco Belga (convertibile)
-currenciesDisplayName.GWE=Escudo della Guinea portoghese
+currenciesDisplayName.BRE=Cruzeiro Brasiliano (1990-1993)
+currenciesDisplayName.BRC=Cruzado Brasiliano
+currenciesDisplayName.BRB=Cruzeiro Novo Brasiliano (1967-1986)
+currenciesDisplayName.DEM=Marco Tedesco
+currenciesDisplayName.KWD=Dinaro Kuwaitiano
+currenciesDisplayName.XCD=Dollaro dei Caraibi Orientali
+currenciesDisplayName.NPR=Rupia Nepalese
+currenciesDisplayName.GWP=Peso della Guinea-Bissau
+currenciesDisplayName.YUN=Dinaro Convertibile Yugoslavo
currenciesDisplayName.SVC=Col\u00f3n Salvadoregno
-currenciesDisplayName.CWG=Guilder del Curacao
-currenciesDisplayName.BDT=Taka Bangladese
-currenciesDisplayName.TOS=Lira sterlina di Tonga
-currenciesDisplayName.TOP=Pa\u02bbanga di Tonga
+currenciesDisplayName.YUM=Dinaro Noviy Yugoslavo
+currenciesDisplayName.BEL=Franco Belga (finanziario)
+currenciesDisplayName.SIT=Tallero Sloveno
+currenciesDisplayName.JPY=Yen Giapponese
currenciesDisplayName.XOF=Franco CFA BCEAO
+currenciesDisplayName.MVR=Rufiyaa delle Maldive
+currenciesDisplayName.GWE=Escudo della Guinea portoghese
+currenciesDisplayName.BEF=Franco Belga
+currenciesDisplayName.TOP=Pa\u02bbanga di Tonga
+currenciesDisplayName.YUD=Dinaro Forte Yugoslavo
+currenciesDisplayName.BEC=Franco Belga (convertibile)
currenciesDisplayName.SUR=Rublo Sovietico
-currenciesDisplayName.SUN=Nuovo rublo sovietico
-currenciesDisplayName.NCF=Franco germinale della Nuova Caledonia
-currenciesDisplayName.CVE=Escudo del Capo Verde
-currenciesDisplayName.XNF=Franco CFA delle Antille Francesi
+currenciesDisplayName.ROL=Leu della Romania
+currenciesDisplayName.DDM=Ostmark della Germania Orientale
+currenciesDisplayName.BDT=Taka Bangladese
+currenciesDisplayName.XBD=Unit\u00e0 di acconto europea (XBD)
+currenciesDisplayName.AWG=Fiorino di Aruba
+currenciesDisplayName.XBC=Unit\u00e0 di acconto europea (XBC)
+currenciesDisplayName.XBB=Unit\u00e0 monetaria europea
+currenciesDisplayName.XBA=Unit\u00e0 composita europea
+currenciesDisplayName.NOK=Corona Norvegese
+currenciesDisplayName.MUR=Rupia Mauriziana
currenciesDisplayName.ZAR=Rand Sudafricano
-currenciesDisplayName.DOP=Peso Dominicano
-currenciesDisplayName.CUX=Certificati di cambio esteri cubani
-currenciesDisplayName.ZAP=Sterlina Sudafricana
+currenciesDisplayName.SHP=Sterlina di Sant\u2019Elena
+currenciesDisplayName.XAU=Oro
currenciesDisplayName.ZAL=Rand Sudafricano (finanziario)
+currenciesDisplayName.VND=Dong Vietnamita
+currenciesDisplayName.TZS=Scellino della Tanzania
+currenciesDisplayName.GIP=Sterlina di Gibilterra
currenciesDisplayName.TND=Dinaro Tunisino
-currenciesDisplayName.CUP=Peso Cubano
-currenciesDisplayName.GUF=Franco Guiana della Guyana francese
+currenciesDisplayName.CVE=Escudo del Capo Verde
currenciesDisplayName.UGX=Scellino Ugandese
-currenciesDisplayName.LNR=Rupia di Ceylon
-currenciesDisplayName.AIF=Franco di Affars e Issas
-currenciesDisplayName.VAL=Lira della Citt\u00e0 del Vaticano
-currenciesDisplayName.STE=Escudo di S\u00e3o Tom\u00e9 e Principe
+currenciesDisplayName.ZMK=Kwacha dello Zambia
+currenciesDisplayName.JOD=Dinaro Giordano
+currenciesDisplayName.XAF=Franco CFA BEAC
+currenciesDisplayName.LBP=Sterlina Libanese
currenciesDisplayName.UGS=Scellino Ugandese (1966-1987)
currenciesDisplayName.STD=Dobra di S\u00e3o Tom\u00e9 e Principe
-currenciesDisplayName.MHD=Dollaro delle Isole Marshall
-currenciesDisplayName.NZP=Sterlina Neozelandese
currenciesDisplayName.WST=Tala della Samoa Occidentale
-currenciesDisplayName.WSP=Sterlina della Samoa Occidentale
-currenciesDisplayName.HNL=Lempira Hoduregno
-currenciesDisplayName.XMF=Nouveau Franc francese metropolitano
+currenciesDisplayName.KHR=Riel Cambogiano
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Peso Dominicano
+currenciesDisplayName.BOV=Mvdol Boliviano
+currenciesDisplayName.MTP=Sterlina Maltese
+currenciesDisplayName.USS=Dollaro Statunitense (Same day)
+currenciesDisplayName.BOP=Peso Boliviano
+currenciesDisplayName.MTL=Lira Maltese
+currenciesDisplayName.CUP=Peso Cubano
currenciesDisplayName.TMM=Manat Turkmeno
-currenciesDisplayName.GTQ=Quetzal Guatemalteco
+currenciesDisplayName.USN=Dollaro Statunitense (Next day)
+currenciesDisplayName.SGD=Dollaro di Singapore
currenciesDisplayName.NZD=Dollaro Neozelandese
-currenciesDisplayName.SSP=Sterlina Scozzese
-currenciesDisplayName.BBD=Dollaro di Barbados
+currenciesDisplayName.USD=Dollaro Statunitense
+currenciesDisplayName.HNL=Lempira Hoduregno
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Lira Italiana
+currenciesDisplayName.PAB=Balboa di Panama
+currenciesDisplayName.GTQ=Quetzal Guatemalteco
+currenciesDisplayName.LAK=Kip Laotiano
+currenciesDisplayName.GHC=Cedi del Ghana
+currenciesDisplayName.AUD=Dollaro Australiano
currenciesDisplayName.NAD=Dollaro Namibiano
+currenciesDisplayName.KGS=Som Kirghiso
currenciesDisplayName.MGF=Franco Malgascio
+currenciesDisplayName.CHF=Franco Svizzero
+currenciesDisplayName.BBD=Dollaro di Barbados
currenciesDisplayName.MGA=Ariary Malgascio
-currenciesDisplayName.EGP=Sterlina Egiziana
-currenciesDisplayName.BZH=Dollaro Honduras Britannico
+currenciesDisplayName.PYG=Guarani del Paraguay
currenciesDisplayName.PLZ=Zloty Polacco (1950-1995)
-currenciesDisplayName.BAN=Nuovo Dinar Bosnia-Herzegovina
-currenciesDisplayName.PLX=Certificati di cambio esteri polacchi in dollari statunitensi
-currenciesDisplayName.BAM=Marco Conv. Bosnia-Erzegovina
-currenciesDisplayName.BZD=Dollaro Belize
-currenciesDisplayName.BAD=Dinar Bosnia-Herzegovina
-currenciesDisplayName.PLN=Zloty Polacco
currenciesDisplayName.YER=Rial dello Yemen
+currenciesDisplayName.ATS=Scellino Austriaco
+currenciesDisplayName.ETB=Birr Etiopico
+currenciesDisplayName.BND=Dollaro del Brunei
+currenciesDisplayName.JMD=Dollaro Giamaicano
+currenciesDisplayName.EGP=Sterlina Egiziana
+currenciesDisplayName.PLN=Zloty Polacco
+currenciesDisplayName.DZD=Dinaro Algerino
+currenciesDisplayName.ISK=Corona Islandese
currenciesDisplayName.SRG=Fiorino del Suriname
-currenciesDisplayName.CSK=Corona forte cecoslovacca
+currenciesDisplayName.LYD=Dinaro Libico
+currenciesDisplayName.BZD=Dollaro Belize
+currenciesDisplayName.BAM=Marco Conv. Bosnia-Erzegovina
+currenciesDisplayName.ESP=Peseta Spagnola
currenciesDisplayName.KRW=Won Sudcoreano
+currenciesDisplayName.NLG=Fiorino Olandese
+currenciesDisplayName.MRO=Ouguiya della Mauritania
+currenciesDisplayName.BAD=Dinar Bosnia-Herzegovina
+currenciesDisplayName.ZWD=Dollaro dello Zimbabwe
+currenciesDisplayName.SEK=Corona Svedese
+currenciesDisplayName.CSK=Corona forte cecoslovacca
currenciesDisplayName.BYR=Rublo Bielorussia
-currenciesDisplayName.YEI=Riyal Imadi dello Yemen
-currenciesDisplayName.BYL=Rublo Bielorussia (1992-1994)
-currenciesDisplayName.CSC=Corona Cecoslovacca
-currenciesDisplayName.KRO=Vecchi won sudcoreano
-currenciesDisplayName.KRH=Hwan sudcoreano
-currenciesDisplayName.BYB=Nuovo Rublo Bielorussia (1994-1999)
-currenciesDisplayName.SQS=Scellino del Somaliland
-currenciesDisplayName.GRN=Nuova dracma greca
+currenciesDisplayName.IRR=Rial Iraniano
currenciesDisplayName.PKR=Rupia del Pakistan
-currenciesDisplayName.AFN=Afgani
-currenciesDisplayName.ZWD=Dollaro dello Zimbabwe
-currenciesDisplayName.LKR=Rupia di Sri Lanka
-currenciesDisplayName.GRD=Dracma Greca
-currenciesDisplayName.IEP=Lira Irlandese
-currenciesDisplayName.AFA=Afgani (1927-2002)
-currenciesDisplayName.YDD=Dinaro dello Yemen
-currenciesDisplayName.RWF=Franco Ruandese
-currenciesDisplayName.CRC=Col\u00f3n Costaricano
-currenciesDisplayName.TJS=Somoni del Tajikistan
-currenciesDisplayName.TJR=Rublo del Tajikistan
-currenciesDisplayName.EEK=Corona dell\u2019Estonia
-currenciesDisplayName.GQP=Peseta Guineana della Guinea Equatoriale
-currenciesDisplayName.MDR=Coupon Rublo della Moldavia
-currenciesDisplayName.HKD=Dollaro di Hong Kong
-currenciesDisplayName.DKK=Corona Danese
-currenciesDisplayName.MDL=Leu Moldavo
-currenciesDisplayName.GQF=Franco della Guinea Equatoriale
-currenciesDisplayName.GQE=Ekwele della Guinea Equatoriale
-currenciesDisplayName.IDR=Rupia Indiana
-currenciesDisplayName.AED=Dirham degli Emirati Arabi Uniti
-currenciesDisplayName.KPW=Won Nordcoreano
-currenciesDisplayName.IDN=Nuova rupia indonesiana
-currenciesDisplayName.BWP=Pula del Botswana
-currenciesDisplayName.MDC=Coupon Leu della Moldavia
-currenciesDisplayName.IDJ=Rupia indonesiana di Java
-currenciesDisplayName.KPP=Won della Repubblica popolare democratica nordcoreana
-currenciesDisplayName.IDG=Fiorino Nica indonesiano
-currenciesDisplayName.VUV=Vatu di Vanuatu
-currenciesDisplayName.XID=Dinaro Islamico
-currenciesDisplayName.SOS=Scellino Somalo
-currenciesDisplayName.ADP=Peseta Andorrana
-currenciesDisplayName.RUR=Rublo della CSI
-currenciesDisplayName.GPF=Franco della Guadalupa
-currenciesDisplayName.DJF=Franco Gibutiano
-currenciesDisplayName.ADD=Diner Andorrano
-currenciesDisplayName.MCG=Franco germinale di Monaco
-currenciesDisplayName.MCF=Franc Nouveau di Monaco
-currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) dell\u2019Ecuador
-currenciesDisplayName.ECS=Sucre dell\u2019Ecuador
-currenciesDisplayName.LIF=Franco del Liechtenstein
-currenciesDisplayName.RUB=Rublo Russo
-currenciesDisplayName.PHP=Peso delle Filippine
-currenciesDisplayName.UZS=Sum dell\u2019Uzbekistan
-currenciesDisplayName.COP=Peso Colombiano
-currenciesDisplayName.THB=Baht Tailandese
-currenciesDisplayName.IBP=Sterlina dell\u2019Irlanda del Nord
-currenciesDisplayName.BUR=Rupia Birmana
-currenciesDisplayName.COF=Franco CFA del Congo
-currenciesDisplayName.BUK=Kyat Birmano
-currenciesDisplayName.COB=Peso in banconote colombiano
-currenciesDisplayName.UZC=Som Coupon dell\u2019Uzbekistan
-currenciesDisplayName.UAK=Karbovanetz Ucraino
-currenciesDisplayName.QAR=Rial del Qatar
-currenciesDisplayName.UAH=Hrivna Ucraina
-currenciesDisplayName.GNS=Syli della Guinea
-currenciesDisplayName.CNY=Renmimbi Cinese
-currenciesDisplayName.MZM=Metical del Mozambico
-currenciesDisplayName.CNX=Certificati di cambio esteri cinesi in dollari statunitensi
-currenciesDisplayName.UYU=Peso Uruguayo uruguaiano
-currenciesDisplayName.GNI=Franco della Guinea (1960-1972)
-currenciesDisplayName.SML=Lira di San Marino
-currenciesDisplayName.CNP=Jen Min Piao Yuan Cinese
-currenciesDisplayName.MZE=Escudo del Mozambico
-currenciesDisplayName.GNF=Franco della Guinea
-currenciesDisplayName.OMS=Rial Saidi dell\u2019Oman
-currenciesDisplayName.PGK=Kina della Papua Nuova Guinea
-currenciesDisplayName.OMR=Rial Omanita
-currenciesDisplayName.UYP=Peso Uruguaiano (1975-1993)
-currenciesDisplayName.XFU=Franco UIC Francese
-currenciesDisplayName.BTR=Rupia Butanese
-currenciesDisplayName.ZRZ=Zaire dello Zaire
-currenciesDisplayName.MAF=Franco Marocchino
-currenciesDisplayName.MAD=Dirham Marocchino
-currenciesDisplayName.BTN=Ngultrum Butanese
-currenciesDisplayName.XFO=Franco Oro Francese
-currenciesDisplayName.UYF=Peso Fuerte dell\u2019Uruguaiano
-currenciesDisplayName.MYR=Ringgit della Malesia
-currenciesDisplayName.ZRN=Nuovo Zaire dello Zaire
-currenciesDisplayName.AZM=Manat Azero
-currenciesDisplayName.GMP=Sterlina del Gambia
-currenciesDisplayName.KMF=Franco Comoriano
-currenciesDisplayName.SLL=Leone della Sierra Leone
-currenciesDisplayName.GMD=Dalasi del Gambia
-currenciesDisplayName.XEU=Unit\u00e0 Monetaria Europea
-currenciesDisplayName.BSP=Libra delle Bahamas
-currenciesDisplayName.CMF=Franco CFA del Camerun
-currenciesDisplayName.MXV=Unidad de Inversion (UDI) Messicana
-currenciesDisplayName.XEF=Franco CFA BCEAEC
-currenciesDisplayName.BSD=Dollaro delle Bahamas
-currenciesDisplayName.MXP=Peso messicano d\u2019argento (1861-1992)
-currenciesDisplayName.MXN=Peso Messicano
-currenciesDisplayName.PES=Sol Peruviano
-currenciesDisplayName.GLK=Corona della Groenlandia
-currenciesDisplayName.BRZ=Cruzeiro Brasiliano (1942-1967)
-currenciesDisplayName.PEN=Sol Nuevo Peruviano
-currenciesDisplayName.CLP=Peso Cileno
-currenciesDisplayName.SKK=Corona Slovacca
-currenciesDisplayName.PEI=Inti Peruviano
-currenciesDisplayName.BRR=Cruzeiro Brasiliano
-currenciesDisplayName.XDR=Diritti Speciali di Incasso
-currenciesDisplayName.FRG=Franco germinale/franco Poincare francese
-currenciesDisplayName.FRF=Franco Francese
-currenciesDisplayName.BRN=Cruzado Novo Brasiliano
-currenciesDisplayName.CLF=Unidades de Fomento Chilene
-currenciesDisplayName.CLE=Escudo Cileno
-currenciesDisplayName.BRL=Real Brasiliano
-currenciesDisplayName.CLC=Condor Cileno
-currenciesDisplayName.BRE=Cruzeiro Brasiliano (1990-1993)
-currenciesDisplayName.DES=Sperrmark Tedesco
-currenciesDisplayName.MWP=Sterlina Malawiana
-currenciesDisplayName.BRC=Cruzado Brasiliano
-currenciesDisplayName.BRB=Cruzeiro Novo Brasiliano (1967-1986)
-currenciesDisplayName.MWK=Kwacha Malawiano
-currenciesDisplayName.PDR=Rublo della Transdniestria
-currenciesDisplayName.DEM=Marco Tedesco
-currenciesDisplayName.TDF=Franco CFA del Chad
-currenciesDisplayName.PDN=Nuovo rublo della Transdniestria
-currenciesDisplayName.PDK=Coupon in rubli della Transdniestria
-currenciesDisplayName.NPR=Rupia Nepalese
-currenciesDisplayName.CKD=Dollaro delle Isole Cook
-currenciesDisplayName.JPY=Yen Giapponese
-currenciesDisplayName.MVR=Rufiyaa delle Maldive
-currenciesDisplayName.XCF=Nuovo Franco CFA
-currenciesDisplayName.MVP=Rupia delle Maldive
-currenciesDisplayName.XCD=Dollaro dei Caraibi Orientali
-currenciesDisplayName.SIT=Tallero Sloveno
-currenciesDisplayName.YUR=Dinaro Riformato Yugoslavo
-currenciesDisplayName.AWG=Fiorino di Aruba
-currenciesDisplayName.YUO=Dinaro di Ottobre Yugoslavo
-currenciesDisplayName.DDM=Ostmark della Germania Orientale
-currenciesDisplayName.YUN=Dinaro Convertibile Yugoslavo
-currenciesDisplayName.YUM=Dinaro Noviy Yugoslavo
-currenciesDisplayName.TCC=Corona di Turks e Caicos
-currenciesDisplayName.YUG=Dinaro 1994 Yugoslavo
-currenciesDisplayName.YUF=Dinaro della Federazione Yugoslava
-currenciesDisplayName.RON=Nuovo Leu della Romania
-currenciesDisplayName.YUD=Dinaro Forte Yugoslavo
-currenciesDisplayName.ROL=Leu della Romania
-currenciesDisplayName.SIB=Tallero Bons Sloveno
-currenciesDisplayName.NOK=Corona Norvegese
-currenciesDisplayName.MUR=Rupia Mauriziana
-currenciesDisplayName.XBD=Unit\u00e0 di acconto europea (XBD)
-currenciesDisplayName.GIP=Sterlina di Gibilterra
-currenciesDisplayName.VNS=Dong Nazionale Vietnamita
-currenciesDisplayName.XBC=Unit\u00e0 di acconto europea (XBC)
-currenciesDisplayName.VNR=Dong della Repubblica Vietnamita
-currenciesDisplayName.XBB=Unit\u00e0 monetaria europea
-currenciesDisplayName.XBA=Unit\u00e0 composita europea
-currenciesDisplayName.KID=Dollaro di Kiribati
-currenciesDisplayName.SHP=Sterlina di Sant\u2019Elena
-currenciesDisplayName.VNN=Nuovo dong vietnamita
-currenciesSymbol.JOD=JOD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SFr.
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Dollaro delle Bermuda
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.UGX=U Sh
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=lev
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.STD=Db
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
+currenciesSymbol.YER=YRl
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
+currenciesSymbol.BIF=Fbu
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
+currenciesSymbol.VEB=Be
+currenciesSymbol.KMF=CF
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
+currenciesSymbol.CHF=SFr.
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=BRL
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.BGN=lev
shortMonths=gen®feb®mar®apr®mag®giu®lug®ago®set®ott®nov®dic®®
months=gennaio®febbraio®marzo®aprile®maggio®giugno®luglio®agosto®settembre®ottobre®novembre®dicembre®®
shortWeekdays=®dom®lun®mar®mer®gio®ven®sab®
@@ -773,7 +341,7 @@ shortDateFormat=dd/MM/yy
mediumDateFormat=dd/MMM/yy
longDateFormat=dd MMMM yyyy
fullDateFormat=EEEE d MMMM yyyy
-zoneStrings=America/Indianapolis®EST®Ora Standard Orientale®EST®Ora Standard Orientale®©America/Halifax®AST®Ora Standard Atlantico®ADT®Ora Legale Atlantico®©Pacific/Honolulu®HST®Ora Standard Hawaii®HST®Ora Standard Hawaii®©America/Denver®MST®Ora Standard Mountain®MDT®Ora Legale Mountain®©America/Anchorage®AST®Ora Standard Alaska®ADT®Ora Legale Alaska®©America/St_Johns®CNT®Ora Standard Newfoundland®CDT®Ora Legale Newfoundland®©Africa/Casablanca®GMT®Ora Meridiano Greenwich®GMT®Ora Meridiano Greenwich®©America/Chicago®CST®Ora Standard Centrale®CDT®Ora Legale Centrale®©Asia/Shanghai®CTT®Ora Standard Cina®CDT®Ora Standard Cina®©Asia/Tokyo®JST®Ora Standard Giappone®JST®Ora Standard Giappone®©America/New_York®EST®Ora Standard Orientale®EDT®Ora Legale Orientale®©Europe/Bucharest®EET®Ora Standard Europa Orientale®EEST®Ora Legale Europa Orientale®©America/Los_Angeles®PST®Ora Standard Pacifico®PDT®Ora Legale Pacifico®©America/Phoenix®MST®Ora Standard Mountain®MST®Ora Standard Mountain®©Etc/GMT®GMT®Ora Meridiano Greenwich®GMT®Ora Meridiano Greenwich®©Asia/Jerusalem®IST®Ora Standard Israele®IDT®Ora Legale Israele®©Europe/Paris®CET®Ora Standard Centrale Europeo®CEST®Ora Legale Centrale Europeo®©
+zoneStrings=Europe/Paris®CET®Ora Standard Centrale Europeo®CEST®Ora Legale Centrale Europeo®©Pacific/Honolulu®HST®Ora Standard Hawaii®HST®Ora Standard Hawaii®©America/Denver®MST®Ora Standard Mountain®MDT®Ora Legale Mountain®©Asia/Jerusalem®IST®Ora Standard Israele®IDT®Ora Legale Israele®©America/Anchorage®AST®Ora Standard Alaska®ADT®Ora Legale Alaska®©Africa/Casablanca®GMT®Ora Meridiano Greenwich®GMT®Ora Meridiano Greenwich®©America/Phoenix®MST®Ora Standard Mountain®MST®Ora Standard Mountain®©America/Los_Angeles®PST®Ora Standard Pacifico®PDT®Ora Legale Pacifico®©America/Chicago®CST®Ora Standard Centrale®CDT®Ora Legale Centrale®©America/Halifax®AST®Ora Standard Atlantico®ADT®Ora Legale Atlantico®©America/St_Johns®CNT®Ora Standard Newfoundland®CDT®Ora Legale Newfoundland®©America/New_York®EST®Ora Standard Orientale®EDT®Ora Legale Orientale®©Asia/Shanghai®CTT®Ora Standard Cina®CDT®Ora Standard Cina®©Asia/Tokyo®JST®Ora Standard Giappone®JST®Ora Standard Giappone®©Europe/Bucharest®EET®Ora Standard Europa Orientale®EEST®Ora Legale Europa Orientale®©America/Indianapolis®EST®Ora Standard Orientale®EST®Ora Standard Orientale®©
territories.TL=Timor Est
territories.TK=Tokelau
territories.TJ=Tagikistan
@@ -825,7 +393,7 @@ territories.FM=Micronesia
territories.RW=Ruanda
territories.FK=Isole Falkland
territories.RU=Federazione Russa
-territories.FJ=Fiji
+territories.FJ=Figi
territories.FI=Finlandia
territories.RO=Romania
territories.RE=R\u00e9union
@@ -858,10 +426,11 @@ territories.PF=Polinesia Francese
territories.CZ=Repubblica Ceca
territories.PE=Per\u00f9
territories.CY=Cipro
-territories.CX=Isola Christmas
+territories.CX=Isola di Christmas
territories.CV=Capo Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbia e Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=Cina
@@ -918,31 +487,30 @@ territories.AR=Argentina
territories.AQ=Antartide
territories.MZ=Mozambico
territories.AO=Angola
-territories.MY=Malesia
+territories.MY=Malaysia
territories.AN=Antille Olandesi
territories.MX=Messico
territories.AM=Armenia
territories.MW=Malawi
territories.AL=Albania
territories.MV=Maldive
-territories.ZA=Sud Africa
-territories.MU=Mauritius
+territories.ZA=Sudafrica
+territories.MU=Maurizio
territories.MT=Malta
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
territories.AG=Antigua e Barbuda
-territories.MQ=Martinica
territories.AF=Afghanistan
-territories.MP=Isole Marianne Settentrionali
+territories.MQ=Martinica
territories.AE=Emirati Arabi Uniti
-territories.MO=Regione Amministrativa Speciale di Macao, Cina
+territories.MP=Isole Marianne Settentrionali
territories.AD=Andorra
+territories.MO=Regione Amministrativa Speciale di Macao, Cina
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedonia, Repubblica
-territories.YU=Yugoslavia
territories.YT=Mayotte
territories.MH=Isole Marshall
territories.MG=Madagascar
@@ -1013,8 +581,8 @@ territories.TR=Turchia
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
-languages.gwi=gwich\u02bbin
languages.akk=accado
+languages.gwi=gwich\u02bcin
languages.eka=ekajuka
languages.xh=xosa
languages.sux=sumero
@@ -1026,15 +594,15 @@ languages.pon=ponape
languages.min=menangkabau
languages.suk=sukuma
languages.wo=volof
-languages.lol=lolo (bantu)
languages.kut=kutenai
+languages.lol=lolo (bantu)
languages.mic=micmac
-languages.wa=walloon
+languages.wa=vallone
languages.kum=kumyk
languages.zap=zapotec
languages.cus=cuscitica (altra lingua)
-languages.jbo=lojban
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volap\u00fck
languages.oto=lingue otomi
languages.vi=vietnamita
@@ -1056,8 +624,8 @@ languages.uk=ucraino
languages.egy=egiziano (antico)
languages.ug=uigurico
languages.ssa=nilo-sahariana (altra lingua)
-languages.mga=irlandese medio (900-1200)
languages.bat=baltica (altra lingua)
+languages.mga=irlandese medio (900-1200)
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1085,8 +653,8 @@ languages.kru=kurukh
languages.tg=tagicco
languages.byn=blin
languages.te=telugu
-languages.kro=kru
languages.csb=kashubian
+languages.kro=kru
languages.ta=tamil
languages.tkl=tokelau
languages.efi=efik
@@ -1110,8 +678,8 @@ languages.sk=slovacco
languages.grb=gerbo
languages.si=singalese
languages.sh=serbo-croato
-languages.crh=turco crimeo; tatar crimeo
languages.afa=afro-asiatica (altra lingua)
+languages.crh=turco crimeo; tatar crimeo
languages.sg=sango
languages.se=sami del nord
languages.sd=sindhi
@@ -1121,7 +689,7 @@ languages.sa=sanscrito
languages.rw=kinyarwanda
languages.ru=russo
languages.mdr=mandar
-languages.ro=romeno
+languages.ro=rumeno
languages.rn=rundi
languages.rm=lingua rhaeto-romance
languages.mdf=moksha
@@ -1134,14 +702,14 @@ languages.son=songhai
languages.cpp=creolo e pidgins, basato sul portoghese (altra lingua)
languages.sog=sogdiano
languages.ada=adangme
-languages.kos=Kosraean
-languages.hit=hittite
languages.cpf=creolo e pidgins, basato sul francese (altra lingua)
+languages.hit=hittite
+languages.kos=Kosraean
languages.cpe=creolo e pidgins, basato sull\u2019inglese (altra lingua)
languages.him=himachali
-languages.kok=konkani
-languages.hil=hiligayna
languages.got=gotico
+languages.hil=hiligayna
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinca
@@ -1196,7 +764,7 @@ languages.nn=norvegese nynorsk
languages.nl=olandese
languages.ng=ndonga
languages.sla=slavo (altra lingua)
-languages.ne=nepali
+languages.ne=nepalese
languages.nd=ndebele del nord
languages.cmc=lingue chamic
languages.tet=tetum
@@ -1204,32 +772,32 @@ languages.nb=norvegese bokm\u00e5l
languages.na=nauru
languages.ter=tereno
languages.tem=temne
-languages.my=burmese
+languages.my=birmano
languages.lez=lezghian
languages.mt=maltese
languages.peo=antico persiano (600-400 A.C.)
-languages.ms=malay
+languages.ms=malese
languages.mr=marathi
languages.fro=francese, antico (842-ca.1400)
languages.mo=moldavo
-languages.frm=francese, medio (ca.1400-1600)
languages.mn=mongolo
-languages.jrb=giudeo arabo
+languages.frm=francese, medio (ca.1400-1600)
languages.ml=malayalam
+languages.jrb=giudeo arabo
languages.mk=macedone
languages.mi=maori
languages.mh=marshallese
-languages.mg=malagasy
+languages.mg=malgascio
languages.mwr=marwari
languages.bra=braj
-languages.den=slave
languages.lv=lettone
+languages.den=slave
languages.lu=luba-katanga
-languages.del=delaware
languages.lt=lituano
+languages.del=delaware
languages.lo=lao
languages.ln=lingala
-languages.li=limburgish
+languages.li=limburgese
languages.ewo=ewondo
languages.lg=ganda
languages.lb=lussemburghese
@@ -1278,42 +846,42 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italiano
languages.sgn=lingue sign
-languages.is=islandese
languages.kha=khasi
+languages.is=islandese
languages.chr=cherokee
languages.pam=pampanga
languages.pal=pahlavi
languages.chp=chipewyan
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=gergo chinook
languages.chm=mari
languages.tyv=tuvinian
languages.bnt=bantu
languages.pag=pangasinan
-languages.ik=inupiak
languages.chk=chuukese
-languages.ii=sichuan yi
+languages.ik=inupiak
languages.haw=hawaiano
+languages.ii=sichuan yi
languages.lam=lamba
-languages.ig=igbo
languages.chg=ciagataico
+languages.ig=igbo
languages.sga=irlandese, antico (fino al \u2019900)
languages.paa=papuano-australiano (altra lingua)
languages.ie=interlingue
languages.id=indonesiano
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
languages.lad=ladino
-languages.hz=herero
-languages.hai=haida
languages.dar=dargwa
+languages.hai=haida
+languages.hz=herero
languages.hy=armeno
languages.ath=lingue athabaska
languages.hu=ungherese
-languages.ht=haitian
+languages.ht=haitiano
languages.dak=dakota
languages.hr=croato
languages.ho=hiri motu
@@ -1331,9 +899,9 @@ languages.iro=lingue irochesi
languages.gn=guarana
languages.gl=galiziano
languages.arw=aruaco
-languages.gez=geez
-languages.art=artificiale (altra lingua)
languages.gd=gaelico scozzese
+languages.art=artificiale (altra lingua)
+languages.gez=geez
languages.ira=iraniana
languages.ga=irlandese
languages.arp=arapaho
@@ -1342,8 +910,8 @@ languages.fy=frisone
languages.bla=siksika
languages.gem=germanica (altra lingua)
languages.ypk=lingue yupik
-languages.arc=aramaico
languages.fr=francese
+languages.arc=aramaico
languages.fo=faroese
languages.cel=celtica altra lingua
languages.fj=figiano
@@ -1367,9 +935,9 @@ languages.tum=tumbuka
languages.mos=mossi
languages.dz=dzongkha
languages.nic=niger - cordofan (altra lingua)
-languages.lus=lushai
-languages.fiu=ugrofinnica (altra lingua)
languages.dv=divehi
+languages.fiu=ugrofinnica (altra lingua)
+languages.lus=lushai
languages.moh=mohawk
languages.luo=luo (Kenia e Tanzania)
languages.lun=lunda
@@ -1391,8 +959,8 @@ languages.wak=lingue wakash
languages.sat=santali
languages.cy=gallese
languages.sas=sasak
-languages.kbd=kabardia
languages.cv=chuvash
+languages.kbd=kabardia
languages.cu=slavo della Chiesa
languages.mni=manipuri
languages.cs=ceco
@@ -1404,17 +972,17 @@ languages.co=corso
languages.sai=indiano del Sud America (altra lingua)
languages.mnc=manchu
languages.sah=yakut
-languages.kaw=kawi
-languages.inh=ingush
languages.gba=gbaya
+languages.inh=ingush
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=indoeuropea (altra lingua)
languages.bho=bhojpuri
+languages.ine=indoeuropea (altra lingua)
languages.enm=inglese, medio (1100-1500)
-languages.kar=karen
-languages.inc=indiana (altra lingua)
languages.ce=ceceno
+languages.inc=indiana (altra lingua)
+languages.kar=karen
languages.gay=gayo
languages.ca=catalano
languages.umb=mbundu
@@ -1422,19 +990,19 @@ languages.syr=siriaco
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=inglese, antico (ca.450-1100)
-languages.kac=kachin
languages.cau=caucasica (altra lingua)
+languages.kac=kachin
languages.kab=kabyle
-languages.kaa=kara-kalpak
languages.bs=bosniaco
-languages.car=caribico
+languages.kaa=kara-kalpak
languages.br=bretone
+languages.car=caribico
languages.bo=tibetano
languages.bn=bengalese
languages.bm=bambara
languages.gaa=ga
-languages.cai=indiana dell\u2019America Centrale (altra lingua)
languages.bi=bislama
+languages.cai=indiana dell\u2019America Centrale (altra lingua)
languages.bh=bihari
languages.bg=bulgaro
languages.be=bielorusso
@@ -1448,10 +1016,10 @@ languages.az=azerbaigiano
languages.ay=aymara
languages.av=avaro
languages.as=assamese
-languages.dsb=basso sorabo
languages.ar=arabo
-languages.ilo=ilocano
+languages.dsb=basso sorabo
languages.elx=elamitico
+languages.ilo=ilocano
languages.zh=cinese
languages.an=aragonese
languages.pra=pracrito
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja.properties
index a015966..3dfc726 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja.properties
@@ -6,755 +6,258 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\u30e8\u30eb\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.BOV=\u30dc\u30ea\u30d3\u30a2 Mvdol
-currenciesDisplayName.XAU=\u91d1
-currenciesDisplayName.FOK=\u30d5\u30a7\u30ed\u30fc\u8af8\u5cf6 \u30af\u30ed\u30fc\u30ca
-currenciesDisplayName.LBP=\u30ec\u30d0\u30ce\u30f3 \u30dd\u30f3\u30c9
-currenciesDisplayName.EUR=\u30e6\u30fc\u30ed
-currenciesDisplayName.VND=\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3
-currenciesDisplayName.TZS=\u30bf\u30f3\u30b6\u30cb\u30a2 \u30b7\u30ea\u30f3\u30b0
-currenciesDisplayName.BOP=\u30dc\u30ea\u30d3\u30a2 \u30da\u30bd
-currenciesDisplayName.KHR=\u30ab\u30f3\u30dc\u30b8\u30a2 \u30ea\u30a8\u30eb
-currenciesDisplayName.XAM=\u30a2\u30b8\u30a2\u901a\u8ca8\u5358\u4f4d (AMU)
-currenciesDisplayName.BOL=\u30dc\u30ea\u30d3\u30a2 \u30dc\u30ea\u30d3\u30a2\u30ce (1863-1962)
-currenciesDisplayName.KHO=\u30ab\u30f3\u30dc\u30b8\u30a2 \u65e7\u30ea\u30a8\u30eb
-currenciesDisplayName.ZMP=\u30b6\u30f3\u30d3\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.AUP=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.XAF=CFA \u30d5\u30e9\u30f3 BEAC
-currenciesDisplayName.MTP=\u30de\u30eb\u30bf \u30dd\u30f3\u30c9
-currenciesDisplayName.GHR=\u30ac\u30fc\u30ca \u65b0\u30bb\u30c7\u30a3
-currenciesDisplayName.XAD=\u30a2\u30b8\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb\u52d8\u5b9a\u5358\u4f4d
-currenciesDisplayName.GHP=\u30ac\u30fc\u30ca \u30dd\u30f3\u30c9
-currenciesDisplayName.BOB=\u30dc\u30ea\u30d3\u30a2\u30ce
-currenciesDisplayName.GHO=\u30ac\u30fc\u30ca \u65e7\u30bb\u30c7\u30a3
-currenciesDisplayName.MTL=\u30de\u30eb\u30bf \u30ea\u30e9
-currenciesDisplayName.AUD=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30c9\u30eb
-currenciesDisplayName.USS=\u7c73\u30c9\u30eb (\u5f53\u65e5)
-currenciesDisplayName.ITL=\u30a4\u30bf\u30ea\u30a2 \u30ea\u30e9
-currenciesDisplayName.USN=\u7c73\u30c9\u30eb (\u7fcc\u65e5)
-currenciesDisplayName.GHC=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3
-currenciesDisplayName.SGD=\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb \u30c9\u30eb
-currenciesDisplayName.PAB=\u30d1\u30ca\u30de \u30d0\u30eb\u30dc\u30a2
-currenciesDisplayName.LAK=\u30e9\u30aa\u30b9 \u30ad\u30fc\u30d7
-currenciesDisplayName.KGS=\u30ad\u30eb\u30ae\u30b9\u30bf\u30f3 \u30bd\u30e0
-currenciesDisplayName.CHF=\u30b9\u30a4\u30b9 \u30d5\u30e9\u30f3
-currenciesDisplayName.USD=\u7c73\u30c9\u30eb
-currenciesDisplayName.ETD=\u30a8\u30c1\u30aa\u30d4\u30a2 \u30c9\u30eb
-currenciesDisplayName.BND=\u30d6\u30eb\u30cd\u30a4 \u30c9\u30eb
-currenciesDisplayName.JMP=\u30b8\u30e3\u30de\u30a4\u30ab \u30dd\u30f3\u30c9
-currenciesDisplayName.ETB=\u30a8\u30c1\u30aa\u30d4\u30a2 \u30d6\u30eb
-currenciesDisplayName.DZG=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2 \u30d5\u30e9\u30f3 (DZG)
-currenciesDisplayName.DZF=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2 \u65b0\u30d5\u30e9\u30f3
-currenciesDisplayName.DZD=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.PYG=\u30d1\u30e9\u30b0\u30a2\u30a4 \u30b0\u30a2\u30e9\u30cb
-currenciesDisplayName.LYP=\u30ea\u30d4\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.JMD=\u30b8\u30e3\u30de\u30a4\u30ab \u30c9\u30eb
-currenciesDisplayName.ISK=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9 \u30af\u30ed\u30fc\u30ca
-currenciesDisplayName.ESP=\u30b9\u30da\u30a4\u30f3 \u30da\u30bb\u30bf
-currenciesDisplayName.BMP=\u30d0\u30df\u30e5\u30fc\u30c0 \u30dd\u30f3\u30c9
-currenciesDisplayName.LYD=\u30ea\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.LYB=\u30ea\u30d3\u30a2 \u30ea\u30e9 (British Military Authority)
-currenciesDisplayName.BMD=\u30d0\u30df\u30e5\u30fc\u30c0 \u30c9\u30eb
-currenciesDisplayName.NLG=\u30aa\u30e9\u30f3\u30c0 \u30ae\u30eb\u30c0\u30fc
-currenciesDisplayName.MRO=\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2 \u30a6\u30ae\u30a2
-currenciesDisplayName.IRR=\u30a4\u30e9\u30f3 \u30ea\u30a2\u30eb
-currenciesDisplayName.SEK=\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3 \u30af\u30ed\u30fc\u30ca
-currenciesDisplayName.ERN=\u30a8\u30ea\u30c8\u30ea\u30a2 \u30ca\u30af\u30d5\u30a1
+currenciesDisplayName.YDD=\u30a4\u30a8\u30e1\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.TWD=\u65b0\u53f0\u6e7e\u30c9\u30eb
currenciesDisplayName.KES=\u30b1\u30cb\u30a2 \u30b7\u30ea\u30f3\u30b0
-currenciesDisplayName.CFF=\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd CFA \u30d5\u30e9\u30f3
+currenciesDisplayName.BYB=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb (BYB\u30011994-1999)
+currenciesDisplayName.LKR=\u30b9\u30ea\u30e9\u30f3\u30ab \u30eb\u30d4\u30fc
+currenciesDisplayName.RWF=\u30eb\u30ef\u30f3\u30c0 \u30d5\u30e9\u30f3
+currenciesDisplayName.TJS=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30bd\u30e2\u30cb
+currenciesDisplayName.SDP=\u30b9\u30fc\u30c0\u30f3 \u30dd\u30f3\u30c9
+currenciesDisplayName.TJR=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30eb\u30fc\u30d6\u30eb
+currenciesDisplayName.ERN=\u30a8\u30ea\u30c8\u30ea\u30a2 \u30ca\u30af\u30d5\u30a1
+currenciesDisplayName.AFN=\u30a2\u30d5\u30ac\u30cb\u30fc
+currenciesDisplayName.GRD=\u30ae\u30ea\u30b7\u30e3 \u30c9\u30e9\u30af\u30de
+currenciesDisplayName.IEP=\u30a2\u30a4\u30ea\u30c3\u30b7\u30e5 \u30dd\u30f3\u30c9
currenciesDisplayName.ARS=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3 \u30da\u30bd
+currenciesDisplayName.SDD=\u30b9\u30fc\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
currenciesDisplayName.ARP=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3 \u30da\u30bd (1983-1985)
-currenciesDisplayName.ARM=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3 \u30da\u30bd (MN)
-currenciesDisplayName.TWD=\u65b0\u53f0\u6e7e\u30c9\u30eb
-currenciesDisplayName.SDP=\u30b9\u30fc\u30c0\u30f3 \u30dd\u30f3\u30c9
currenciesDisplayName.GEL=\u30b0\u30eb\u30b8\u30a2 \u30e9\u30ea
+currenciesDisplayName.AFA=\u30a2\u30d5\u30ac\u30cb\u30fc (1927-2002)
currenciesDisplayName.GEK=\u30b0\u30eb\u30b8\u30a2 \u30af\u30fc\u30dd\u30f3 \u30e9\u30ea
-currenciesDisplayName.MQF=\u30de\u30eb\u30c6\u30a3\u30cb\u30fc\u30af\u5cf6 \u30d5\u30e9\u30f3
+currenciesDisplayName.CRC=\u30b3\u30b9\u30bf\u30ea\u30ab \u30b3\u30ed\u30f3
currenciesDisplayName.FKP=\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\uff08\u30de\u30eb\u30d3\u30ca\u30b9\uff09\u8af8\u5cf6 \u30dd\u30f3\u30c9
+currenciesDisplayName.EEK=\u30a8\u30b9\u30c8\u30cb\u30a2 \u30af\u30eb\u30fc\u30f3
+currenciesDisplayName.HKD=\u9999\u6e2f\u30c9\u30eb
+currenciesDisplayName.MDL=\u30e2\u30eb\u30c9\u30d0 \u30ec\u30a4
currenciesDisplayName.ARA=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3 \u30a2\u30a5\u30b9\u30c8\u30e9\u30fc\u30eb
-currenciesDisplayName.SDD=\u30b9\u30fc\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
currenciesDisplayName.IQD=\u30a4\u30e9\u30af \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.TVD=\u30c4\u30d0\u30eb \u30c9\u30eb
currenciesDisplayName.SCR=\u30bb\u30a4\u30b7\u30a7\u30eb \u30eb\u30d4\u30fc
+currenciesDisplayName.VUV=\u30d0\u30cc\u30a2\u30c4 \u30d0\u30c4
+currenciesDisplayName.DKK=\u30c7\u30f3\u30de\u30fc\u30af \u30af\u30ed\u30fc\u30cd
+currenciesDisplayName.KPW=\u5317\u671d\u9bae \u30a6\u30a9\u30f3
+currenciesDisplayName.GQE=\u8d64\u9053\u30ae\u30cb\u30a2 \u30ae\u30cb\u30fc
+currenciesDisplayName.IDR=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30eb\u30d4\u30a2
currenciesDisplayName.LVR=\u30e9\u30c8\u30d3\u30a2 \u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.FJP=\u30d5\u30a3\u30b8\u30fc\u8af8\u5cf6 \u30dd\u30f3\u30c9
+currenciesDisplayName.SOS=\u30bd\u30de\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0
+currenciesDisplayName.AED=UAE \u30c7\u30a3\u30eb\u30cf\u30e0
+currenciesDisplayName.BWP=\u30dc\u30c4\u30ef\u30ca \u30d7\u30e9
currenciesDisplayName.LVL=\u30e9\u30c8\u30d3\u30a2 \u30e9\u30c3\u30c4
-currenciesDisplayName.CDL=\u30b3\u30f3\u30b4 \u30b6\u30a4\u30fc\u30eb
-currenciesDisplayName.CDG=\u30b3\u30f3\u30b4\u5171\u548c\u56fd \u30d5\u30e9\u30f3
-currenciesDisplayName.CDF=\u30b3\u30f3\u30b4 \u30d5\u30e9\u30f3
-currenciesDisplayName.FJD=\u30d5\u30a3\u30b8\u30fc\u8af8\u5cf6 \u30c9\u30eb
+currenciesDisplayName.RUR=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb (1991-1998)
currenciesDisplayName.NIO=\u30cb\u30ab\u30e9\u30b0\u30a2 \u30b3\u30eb\u30c9\u30d0 \u30aa\u30ed
+currenciesDisplayName.ADP=\u30a2\u30f3\u30c9\u30e9 \u30da\u30bb\u30bf
+currenciesDisplayName.FJD=\u30d5\u30a3\u30b8\u30fc\u8af8\u5cf6 \u30c9\u30eb
currenciesDisplayName.MOP=\u30de\u30ab\u30aa \u30d1\u30bf\u30ab
-currenciesDisplayName.NIG=\u30cb\u30ab\u30e9\u30b0\u30a2 \u30b3\u30eb\u30c9\u30d0 (NIG)
+currenciesDisplayName.RUB=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb
+currenciesDisplayName.CDF=\u30b3\u30f3\u30b4 \u30d5\u30e9\u30f3
currenciesDisplayName.NIC=\u30cb\u30ab\u30e9\u30b0\u30a2 \u30b3\u30eb\u30c9\u30d0
-currenciesDisplayName.XTR=\u30b3\u30e1\u30b3\u30f3\u632f\u66ff\u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.FIN=\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9 \u30de\u30eb\u30ab (1860-1962)
-currenciesDisplayName.FIM=\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9 \u30de\u30eb\u30ab
+currenciesDisplayName.DJF=\u30b8\u30d6\u30c1 \u30d5\u30e9\u30f3
+currenciesDisplayName.ECV=\u30a8\u30af\u30a2\u30c9\u30eb UVC
currenciesDisplayName.SBD=\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6 \u30c9\u30eb
+currenciesDisplayName.UZS=\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3 \u30b9\u30e0
+currenciesDisplayName.ECS=\u30a8\u30af\u30a2\u30c9\u30eb \u30b9\u30af\u30ec
+currenciesDisplayName.PHP=\u30d5\u30a3\u30ea\u30d4\u30f3 \u30da\u30bd
+currenciesDisplayName.THB=\u30bf\u30a4 \u30d0\u30fc\u30c4
currenciesDisplayName.LUF=\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30b0 \u30d5\u30e9\u30f3
-currenciesDisplayName.TTO=\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30c8\u30d0\u30b4 \u65e7\u30c9\u30eb
-currenciesDisplayName.AOS=\u30a2\u30f3\u30b4\u30e9 \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.AOR=\u30a2\u30f3\u30b4\u30e9 \u65e7\u30af\u30ef\u30f3\u30b6 (1995-1999)
-currenciesDisplayName.MNT=\u30e2\u30f3\u30b4\u30eb \u30c8\u30b0\u30ed\u30b0
-currenciesDisplayName.HUF=\u30cf\u30f3\u30ac\u30ea\u30fc \u30d5\u30a9\u30ea\u30f3\u30c8
-currenciesDisplayName.BIF=\u30d6\u30eb\u30f3\u30b8 \u30d5\u30e9\u30f3
-currenciesDisplayName.AON=\u30a2\u30f3\u30b4\u30e9 \u65b0\u30af\u30ef\u30f3\u30b6 (1990-2000)
-currenciesDisplayName.AOK=\u30af\u30ef\u30f3\u30b6 (1977-1990)
+currenciesDisplayName.FIM=\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9 \u30de\u30eb\u30ab
currenciesDisplayName.TTD=\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30c8\u30d0\u30b4 \u30c9\u30eb
currenciesDisplayName.SZL=\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9 \u30ea\u30e9\u30f3\u30b2\u30cb
-currenciesDisplayName.NHF=\u30cb\u30e5\u30fc\u30d8\u30d6\u30ea\u30c7\u30a3\u30fc\u30ba\u8af8\u5cf6 CFP \u30d5\u30e9\u30f3
-currenciesDisplayName.GBP=\u82f1\u56fd\u30dd\u30f3\u30c9
-currenciesDisplayName.SAS=\u30b5\u30a6\u30b8 \u30ea\u30e4\u30eb (SAS)
+currenciesDisplayName.MNT=\u30e2\u30f3\u30b4\u30eb \u30c8\u30b0\u30ed\u30b0
currenciesDisplayName.SAR=\u30b5\u30a6\u30b8 \u30ea\u30e4\u30eb
+currenciesDisplayName.UAK=\u30a6\u30af\u30e9\u30a4\u30ca \u30ab\u30eb\u30dc\u30d0\u30cd\u30c4
+currenciesDisplayName.UAH=\u30a6\u30af\u30e9\u30a4\u30ca \u30b0\u30ea\u30d6\u30ca
+currenciesDisplayName.HUF=\u30cf\u30f3\u30ac\u30ea\u30fc \u30d5\u30a9\u30ea\u30f3\u30c8
+currenciesDisplayName.COP=\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd
+currenciesDisplayName.QAR=\u30ab\u30bf\u30fc\u30eb \u30ea\u30a2\u30eb
currenciesDisplayName.LTT=\u30ea\u30c8\u30a2\u30cb\u30a2 \u30bf\u30ed\u30ca
-currenciesDisplayName.INR=\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc
currenciesDisplayName.PTE=\u30dd\u30eb\u30c8\u30ac\u30eb \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.AOA=\u30af\u30ef\u30f3\u30b6 (AOA)
-currenciesDisplayName.PTC=\u30dd\u30eb\u30c8\u30ac\u30eb \u30b3\u30f3\u30c8
+currenciesDisplayName.AOR=\u30a2\u30f3\u30b4\u30e9 \u65e7\u30af\u30ef\u30f3\u30b6 (1995-1999)
+currenciesDisplayName.UYU=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd
+currenciesDisplayName.GBP=\u82f1\u56fd\u30dd\u30f3\u30c9
+currenciesDisplayName.BIF=\u30d6\u30eb\u30f3\u30b8 \u30d5\u30e9\u30f3
+currenciesDisplayName.INR=\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc
+currenciesDisplayName.ZRZ=\u30b6\u30a4\u30fc\u30eb \u30b6\u30a4\u30fc\u30eb
+currenciesDisplayName.AON=\u30a2\u30f3\u30b4\u30e9 \u65b0\u30af\u30ef\u30f3\u30b6 (1990-2000)
currenciesDisplayName.LTL=\u30ea\u30c8\u30a2\u30cb\u30a2 \u30ea\u30bf\u30b9
+currenciesDisplayName.XFU=\u30d5\u30e9\u30f3\u30b9 UIC \u30d5\u30e9\u30f3
currenciesDisplayName.KZT=\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3 \u30c6\u30f3\u30b2
-currenciesDisplayName.KZR=\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3 \u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.VGD=\u82f1\u9818\u30d0\u30fc\u30b8\u30f3\u8af8\u5cf6 \u30c9\u30eb
-currenciesDisplayName.NGP=\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.MMX=\u30df\u30e3\u30f3\u30de\u30fc \u30c9\u30eb (FEC)
+currenciesDisplayName.MZM=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb
+currenciesDisplayName.UYP=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd (1975-1993)
+currenciesDisplayName.AOK=\u30af\u30ef\u30f3\u30b6 (1977-1990)
+currenciesDisplayName.BUK=\u30d3\u30eb\u30de \u30c1\u30e3\u30c3\u30c8
+currenciesDisplayName.GNS=\u30ae\u30cb\u30a2 \u30b7\u30ea\u30fc
+currenciesDisplayName.XFO=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3 (XFO)
+currenciesDisplayName.PGK=\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2 \u30ad\u30ca
+currenciesDisplayName.SYP=\u30b7\u30ea\u30a2 \u30dd\u30f3\u30c9
+currenciesDisplayName.MZE=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30a8\u30b9\u30af\u30fc\u30c9
+currenciesDisplayName.OMR=\u30aa\u30de\u30fc\u30f3 \u30ea\u30a2\u30eb
currenciesDisplayName.NGN=\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2 \u30ca\u30a4\u30e9
+currenciesDisplayName.ZRN=\u30b6\u30a4\u30fc\u30eb \u65b0\u30b6\u30a4\u30fc\u30eb
+currenciesDisplayName.AOA=\u30af\u30ef\u30f3\u30b6 (AOA)
+currenciesDisplayName.CNY=\u4e2d\u56fd\u4eba\u6c11\u5143
+currenciesDisplayName.MAF=\u30e2\u30ed\u30c3\u30b3 \u30d5\u30e9\u30f3
+currenciesDisplayName.GNF=\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3
currenciesDisplayName.HTG=\u30cf\u30a4\u30c1 \u30b0\u30fc\u30eb\u30c9
-currenciesDisplayName.SYP=\u30b7\u30ea\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.PSP=\u30d1\u30ec\u30b9\u30c1\u30ca \u30dd\u30f3\u30c9
-currenciesDisplayName.BHD=\u30d0\u30fc\u30ec\u30fc\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.MAD=\u30e2\u30ed\u30c3\u30b3 \u30c7\u30a3\u30eb\u30cf\u30e0
+currenciesDisplayName.TRY=\u65b0\u30c8\u30eb\u30b3\u30ea\u30e9
currenciesDisplayName.MMK=\u30df\u30e3\u30f3\u30de\u30fc \u30c1\u30e3\u30c3\u30c8
+currenciesDisplayName.MYR=\u30de\u30ec\u30fc\u30b7\u30a2 \u30ea\u30f3\u30ae\u30c3\u30c8
+currenciesDisplayName.LSL=\u30ec\u30bd\u30c8 \u30ed\u30c6\u30a3
+currenciesDisplayName.XEU=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d
+currenciesDisplayName.BHD=\u30d0\u30fc\u30ec\u30fc\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.SLL=\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd \u30ec\u30aa\u30f3
+currenciesDisplayName.BTN=\u30d6\u30fc\u30bf\u30f3 \u30cb\u30e5\u30eb\u30bf\u30e0
+currenciesDisplayName.TRL=\u30c8\u30eb\u30b3 \u30ea\u30e9
+currenciesDisplayName.KMF=\u30b3\u30e2\u30ed \u30d5\u30e9\u30f3
currenciesDisplayName.ANG=\u30aa\u30e9\u30f3\u30c0\u9818\u30a2\u30f3\u30c6\u30a3\u30eb \u30ae\u30eb\u30c0\u30fc
currenciesDisplayName.CZK=\u30c1\u30a7\u30b3 \u30b3\u30eb\u30ca
-currenciesDisplayName.IMP=\u30de\u30f3\u5cf6 \u30dd\u30f3\u30c9
-currenciesDisplayName.BGX=\u30d6\u30eb\u30ac\u30ea\u30a2 \u30ec\u30d5 (FEC)
-currenciesDisplayName.LSL=\u30ec\u30bd\u30c8 \u30ed\u30c6\u30a3
-currenciesDisplayName.GAF=\u30ac\u30dc\u30f3 CFA \u30d5\u30e9\u30f3
-currenciesDisplayName.BGO=\u30d6\u30eb\u30ac\u30ea\u30a2 \u30ec\u30d5 (1879-1952)
+currenciesDisplayName.AZM=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8
+currenciesDisplayName.KYD=\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6 \u30c9\u30eb
+currenciesDisplayName.GMD=\u30ac\u30f3\u30d3\u30a2 \u30c0\u30e9\u30b7
currenciesDisplayName.BGN=\u30d6\u30eb\u30ac\u30ea\u30a2 \u65b0\u30ec\u30d5
-currenciesDisplayName.BGM=\u30d6\u30eb\u30ac\u30ea\u30a2 \u30ec\u30d5 (BGM)
currenciesDisplayName.CAD=\u30ab\u30ca\u30c0 \u30c9\u30eb
+currenciesDisplayName.MXV=\u30e1\u30ad\u30b7\u30b3 UDI
currenciesDisplayName.BGL=\u30d6\u30eb\u30ac\u30ea\u30a2 \u30ec\u30d5 (BGL)
-currenciesDisplayName.TRL=\u30c8\u30eb\u30b3 \u30ea\u30e9
-currenciesDisplayName.KYD=\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6 \u30c9\u30eb
-currenciesDisplayName.CYP=\u30ad\u30d7\u30ed\u30b9 \u30dd\u30f3\u30c9
+currenciesDisplayName.VEB=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb
+currenciesDisplayName.MLF=\u30de\u30ea \u30d5\u30e9\u30f3
currenciesDisplayName.ILS=\u30a4\u30b9\u30e9\u30a8\u30eb\u65b0\u30b7\u30a7\u30b1\u30eb
+currenciesDisplayName.MXP=\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd (MXP\u30011861-1992)
+currenciesDisplayName.PES=\u30da\u30eb\u30fc \u30bd\u30eb
currenciesDisplayName.GYD=\u30ac\u30a4\u30a2\u30ca \u30c9\u30eb
-currenciesDisplayName.AMD=\u30a2\u30eb\u30e1\u30cb\u30a2 \u30c9\u30e9\u30e0
+currenciesDisplayName.MXN=\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd
currenciesDisplayName.ILP=\u30a4\u30b9\u30e9\u30a8\u30eb \u30dd\u30f3\u30c9
-currenciesDisplayName.MLF=\u30de\u30ea \u30d5\u30e9\u30f3
-currenciesDisplayName.ILL=\u30a4\u30b9\u30e9\u30a8\u30eb \u30b7\u30a7\u30b1\u30eb
-currenciesDisplayName.VEB=\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb
-currenciesDisplayName.ALX=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af (f)
+currenciesDisplayName.SKK=\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca
+currenciesDisplayName.CYP=\u30ad\u30d7\u30ed\u30b9 \u30dd\u30f3\u30c9
+currenciesDisplayName.XDR=\u7279\u5225\u5f15\u304d\u51fa\u3057\u6a29 (Special Drawing Rights)
+currenciesDisplayName.PEN=\u30da\u30eb\u30fc \u65b0\u30bd\u30eb
currenciesDisplayName.LRD=\u30ea\u30d9\u30ea\u30a2 \u30c9\u30eb
-currenciesDisplayName.ALV=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af (Valute)
+currenciesDisplayName.PEI=\u30da\u30eb\u30fc \u30a4\u30f3\u30c6\u30a3
+currenciesDisplayName.AMD=\u30a2\u30eb\u30e1\u30cb\u30a2 \u30c9\u30e9\u30e0
+currenciesDisplayName.BSD=\u30d0\u30cf\u30de \u30c9\u30eb
currenciesDisplayName.HRK=\u30af\u30ed\u30a2\u30c1\u30a2 \u30af\u30fc\u30ca
-currenciesDisplayName.REF=\u30ec\u30e6\u30cb\u30aa\u30f3\u5cf6 \u30d5\u30e9\u30f3
+currenciesDisplayName.CLP=\u30c1\u30ea \u30da\u30bd
currenciesDisplayName.HRD=\u30af\u30ed\u30a2\u30c1\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.ALL=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af
-currenciesDisplayName.JEP=\u30b8\u30e3\u30fc\u30b8\u30fc\u5cf6 \u30dd\u30f3\u30c9
-currenciesDisplayName.ALK=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af (1946-1961)
-currenciesDisplayName.MKN=\u30de\u30b1\u30c9\u30cb\u30a2 \u30c7\u30ca\u30eb (1992-1993)
-currenciesDisplayName.VDP=\u5317\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3 (VDP)
-currenciesDisplayName.VDN=\u5317\u30d9\u30c8\u30ca\u30e0 \u65b0\u30c9\u30f3
-currenciesDisplayName.MKD=\u30de\u30b1\u30c9\u30cb\u30a2 \u30c7\u30ca\u30eb
-currenciesDisplayName.VDD=\u5317\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3 (VDD)
-currenciesDisplayName.TPP=\u30c6\u30a3\u30e2\u30fc\u30eb \u30d1\u30bf\u30ab
currenciesDisplayName.XPF=CFP \u30d5\u30e9\u30f3
-currenciesDisplayName.BEL=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3 (BEL)
-currenciesDisplayName.GWP=\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6 \u30da\u30bd
-currenciesDisplayName.KWD=\u30af\u30a6\u30a7\u30fc\u30c8 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.GWM=\u30dd\u30eb\u30c8\u30ac\u30eb\u9818\u30ae\u30cb\u30a2 \u30df\u30eb\u30ec\u30a4\u30b9
-currenciesDisplayName.BEF=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3
+currenciesDisplayName.FRF=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3
+currenciesDisplayName.BRR=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed \u30ec\u30a2\u30eb
+currenciesDisplayName.MKD=\u30de\u30b1\u30c9\u30cb\u30a2 \u30c7\u30ca\u30eb
+currenciesDisplayName.CLF=\u30c1\u30ea \u30a6\u30cb\u30c0 \u30c7 \u30d5\u30a9\u30e1\u30f3\u30c8
+currenciesDisplayName.ALL=\u30a2\u30eb\u30d0\u30cb\u30a2 \u30ec\u30af
+currenciesDisplayName.BRN=\u30d6\u30e9\u30b8\u30eb \u65b0\u30af\u30eb\u30bc\u30a4\u30ed (BRN)
+currenciesDisplayName.MWK=\u30de\u30e9\u30a6\u30a3 \u30af\u30ef\u30c1\u30e3
+currenciesDisplayName.BRL=\u30d6\u30e9\u30b8\u30eb \u30ec\u30a2\u30eb
currenciesDisplayName.TPE=\u30c6\u30a3\u30e2\u30fc\u30eb \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.BEC=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3 (BEC)
-currenciesDisplayName.GWE=\u30dd\u30eb\u30c8\u30ac\u30eb\u9818\u30ae\u30cb\u30a2 \u30a8\u30b9\u30af\u30fc\u30c9
+currenciesDisplayName.BRE=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed (BRE\u30011990-1993)
+currenciesDisplayName.BRC=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed (BRC)
+currenciesDisplayName.BRB=\u30d6\u30e9\u30b8\u30eb \u65b0\u30af\u30eb\u30bc\u30a4\u30ed (BRB\u30011967-1986)
+currenciesDisplayName.DEM=\u30c9\u30a4\u30c4 \u30de\u30eb\u30af
+currenciesDisplayName.KWD=\u30af\u30a6\u30a7\u30fc\u30c8 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.XCD=\u6771\u30ab\u30ea\u30d6 \u30c9\u30eb
+currenciesDisplayName.NPR=\u30cd\u30d1\u30fc\u30eb \u30eb\u30d4\u30fc
+currenciesDisplayName.GWP=\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6 \u30da\u30bd
+currenciesDisplayName.YUN=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u65b0\u30c7\u30a3\u30ca\u30fc\u30eb (YUN)
currenciesDisplayName.SVC=\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb \u30b3\u30ed\u30f3
-currenciesDisplayName.CWG=\u30ad\u30e5\u30e9\u30bd\u30fc\u5cf6 \u30ae\u30eb\u30c0\u30fc
-currenciesDisplayName.BDT=\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5 \u30bf\u30ab
-currenciesDisplayName.TOS=\u30c8\u30f3\u30ac \u30dd\u30f3\u30c9
-currenciesDisplayName.TOP=\u30c8\u30f3\u30ac \u30d1\u30fb\u30a2\u30f3\u30ac
+currenciesDisplayName.YUM=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30b9\u30fc\u30d1\u30fc \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.BEL=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3 (BEL)
+currenciesDisplayName.SIT=\u30b9\u30ed\u30d9\u30cb\u30a2 \u30c8\u30e9\u30fc\u30eb
+currenciesDisplayName.JPY=\u5186
currenciesDisplayName.XOF=CFA \u30d5\u30e9\u30f3 BCEAO
+currenciesDisplayName.MVR=\u30e2\u30eb\u30c7\u30a3\u30d6\u8af8\u5cf6 \u30eb\u30d5\u30a3\u30a2
+currenciesDisplayName.GWE=\u30dd\u30eb\u30c8\u30ac\u30eb\u9818\u30ae\u30cb\u30a2 \u30a8\u30b9\u30af\u30fc\u30c9
+currenciesDisplayName.BEF=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3
+currenciesDisplayName.TOP=\u30c8\u30f3\u30ac \u30d1\u30fb\u30a2\u30f3\u30ac
+currenciesDisplayName.YUD=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUD)
+currenciesDisplayName.BEC=\u30d9\u30eb\u30ae\u30fc \u30d5\u30e9\u30f3 (BEC)
currenciesDisplayName.SUR=\u30bd\u9023 \u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.SUN=\u30bd\u9023 \u65b0\u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.NCF=\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2 CFP \u30d5\u30e9\u30f3
-currenciesDisplayName.CVE=\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7 \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.XNF=\u4ecf\u9818\u30a2\u30f3\u30c6\u30a3\u30eb\u8af8\u5cf6 CFA \u30d5\u30e9\u30f3
+currenciesDisplayName.ROL=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4
+currenciesDisplayName.DDM=\u6771\u30c9\u30a4\u30c4 \u30de\u30eb\u30af
+currenciesDisplayName.BDT=\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5 \u30bf\u30ab
+currenciesDisplayName.XBD=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-17)
+currenciesDisplayName.AWG=\u30a2\u30eb\u30d0 \u30ae\u30eb\u30c0\u30fc
+currenciesDisplayName.XBC=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-9)
+currenciesDisplayName.XBB=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d (EMU-6)
+currenciesDisplayName.XBA=\u30e8\u30fc\u30ed\u30c3\u30d1\u6df7\u5408\u5358\u4f4d (EURCO)
+currenciesDisplayName.NOK=\u30ce\u30eb\u30a6\u30a7\u30fc \u30af\u30ed\u30fc\u30cd
+currenciesDisplayName.MUR=\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9 \u30eb\u30d4\u30fc
currenciesDisplayName.ZAR=\u5357\u30a2\u30d5\u30ea\u30ab \u30e9\u30f3\u30c9
-currenciesDisplayName.DOP=\u30c9\u30df\u30cb\u30ab \u30da\u30bd
-currenciesDisplayName.CUX=\u30ad\u30e5\u30fc\u30d0 (FEC)
-currenciesDisplayName.ZAP=\u5357\u30a2\u30d5\u30ea\u30ab \u30dd\u30f3\u30c9
+currenciesDisplayName.SHP=\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca\u5cf6 \u30dd\u30f3\u30c9
+currenciesDisplayName.XAU=\u91d1
currenciesDisplayName.ZAL=\u5357\u30a2\u30d5\u30ea\u30ab \u30e9\u30f3\u30c9 (ZAL)
+currenciesDisplayName.VND=\u30d9\u30c8\u30ca\u30e0 \u30c9\u30f3
+currenciesDisplayName.TZS=\u30bf\u30f3\u30b6\u30cb\u30a2 \u30b7\u30ea\u30f3\u30b0
+currenciesDisplayName.GIP=\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb \u30dd\u30f3\u30c9
currenciesDisplayName.TND=\u30c1\u30e5\u30cb\u30b8\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.CUP=\u30ad\u30e5\u30fc\u30d0 \u30da\u30bd
-currenciesDisplayName.GUF=\u4ecf\u9818\u30ae\u30a2\u30ca \u30d5\u30e9\u30f3
+currenciesDisplayName.CVE=\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7 \u30a8\u30b9\u30af\u30fc\u30c9
currenciesDisplayName.UGX=\u30a6\u30ac\u30f3\u30c0 \u30b7\u30ea\u30f3\u30b0
-currenciesDisplayName.LNR=\u30bb\u30a4\u30ed\u30f3 \u30eb\u30d4\u30fc
-currenciesDisplayName.AIF=\u30a2\u30d5\u30a1\u30fc\u30eb\u304a\u3088\u3073\u30a4\u30b5\u30b9 \u30d5\u30e9\u30f3
-currenciesDisplayName.VAL=\u30d0\u30c1\u30ab\u30f3 \u30ea\u30e9
-currenciesDisplayName.STE=\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da \u30a8\u30b9\u30af\u30fc\u30c9
+currenciesDisplayName.JOD=\u30e8\u30eb\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.XAF=CFA \u30d5\u30e9\u30f3 BEAC
+currenciesDisplayName.LBP=\u30ec\u30d0\u30ce\u30f3 \u30dd\u30f3\u30c9
currenciesDisplayName.UGS=\u30a6\u30ac\u30f3\u30c0 \u30b7\u30ea\u30f3\u30b0 (1966-1987)
currenciesDisplayName.STD=\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da \u30c9\u30d6\u30e9
-currenciesDisplayName.MHD=\u30de\u30fc\u30b7\u30e3\u30eb\u8af8\u5cf6 \u30c9\u30eb
-currenciesDisplayName.NZP=\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9 \u30dd\u30f3\u30c9
currenciesDisplayName.WST=\u897f\u30b5\u30e2\u30a2 \u30bf\u30e9
-currenciesDisplayName.WSP=\u897f\u30b5\u30e2\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.HNL=\u30db\u30f3\u30b8\u30e5\u30e9\u30b9 \u30ec\u30f3\u30d4\u30e9
-currenciesDisplayName.XMF=\u30d5\u30e9\u30f3\u30b9 \u65b0\u30d5\u30e9\u30f3 (XMF)
+currenciesDisplayName.KHR=\u30ab\u30f3\u30dc\u30b8\u30a2 \u30ea\u30a8\u30eb
+currenciesDisplayName.EUR=\u30e6\u30fc\u30ed
+currenciesDisplayName.DOP=\u30c9\u30df\u30cb\u30ab \u30da\u30bd
+currenciesDisplayName.BOV=\u30dc\u30ea\u30d3\u30a2 Mvdol
+currenciesDisplayName.MTP=\u30de\u30eb\u30bf \u30dd\u30f3\u30c9
+currenciesDisplayName.USS=\u7c73\u30c9\u30eb (\u5f53\u65e5)
+currenciesDisplayName.BOP=\u30dc\u30ea\u30d3\u30a2 \u30da\u30bd
+currenciesDisplayName.MTL=\u30de\u30eb\u30bf \u30ea\u30e9
+currenciesDisplayName.CUP=\u30ad\u30e5\u30fc\u30d0 \u30da\u30bd
currenciesDisplayName.TMM=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3 \u30de\u30ca\u30c8
-currenciesDisplayName.GTQ=\u30b0\u30a2\u30c6\u30de\u30e9 \u30b1\u30c4\u30a1\u30eb
+currenciesDisplayName.USN=\u7c73\u30c9\u30eb (\u7fcc\u65e5)
+currenciesDisplayName.SGD=\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb \u30c9\u30eb
currenciesDisplayName.NZD=\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9 \u30c9\u30eb
-currenciesDisplayName.SSP=\u30b9\u30b3\u30c3\u30c8\u30e9\u30f3\u30c9 \u30dd\u30f3\u30c9
-currenciesDisplayName.BBD=\u30d0\u30eb\u30d0\u30c9\u30b9 \u30c9\u30eb
+currenciesDisplayName.USD=\u7c73\u30c9\u30eb
+currenciesDisplayName.HNL=\u30db\u30f3\u30b8\u30e5\u30e9\u30b9 \u30ec\u30f3\u30d4\u30e9
+currenciesDisplayName.BOB=\u30dc\u30ea\u30d3\u30a2\u30ce
+currenciesDisplayName.ITL=\u30a4\u30bf\u30ea\u30a2 \u30ea\u30e9
+currenciesDisplayName.PAB=\u30d1\u30ca\u30de \u30d0\u30eb\u30dc\u30a2
+currenciesDisplayName.GTQ=\u30b0\u30a2\u30c6\u30de\u30e9 \u30b1\u30c4\u30a1\u30eb
+currenciesDisplayName.LAK=\u30e9\u30aa\u30b9 \u30ad\u30fc\u30d7
+currenciesDisplayName.GHC=\u30ac\u30fc\u30ca \u30bb\u30c7\u30a3
+currenciesDisplayName.AUD=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30c9\u30eb
currenciesDisplayName.NAD=\u30ca\u30df\u30d3\u30a2 \u30c9\u30eb
+currenciesDisplayName.KGS=\u30ad\u30eb\u30ae\u30b9\u30bf\u30f3 \u30bd\u30e0
currenciesDisplayName.MGF=\u30de\u30c0\u30ac\u30b9\u30ab\u30eb \u30d5\u30e9\u30f3
+currenciesDisplayName.CHF=\u30b9\u30a4\u30b9 \u30d5\u30e9\u30f3
+currenciesDisplayName.BBD=\u30d0\u30eb\u30d0\u30c9\u30b9 \u30c9\u30eb
currenciesDisplayName.MGA=\u30de\u30c0\u30ac\u30b9\u30ab\u30eb \u30a2\u30ea\u30a2\u30ea
-currenciesDisplayName.EGP=\u30a8\u30b8\u30d7\u30c8 \u30dd\u30f3\u30c9
-currenciesDisplayName.BZH=\u82f1\u9818\u30db\u30f3\u30b8\u30e5\u30e9\u30b9 \u30c9\u30eb
+currenciesDisplayName.PYG=\u30d1\u30e9\u30b0\u30a2\u30a4 \u30b0\u30a2\u30e9\u30cb
currenciesDisplayName.PLZ=\u30dd\u30fc\u30e9\u30f3\u30c9 \u30ba\u30a6\u30a9\u30c6\u30a3 (1950-1995)
-currenciesDisplayName.BAN=\u30dc\u30b9\u30cb\u30a2 \u65b0\u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.PLX=\u30dd\u30fc\u30e9\u30f3\u30c9 \u7c73\u30c9\u30eb (FEC)
-currenciesDisplayName.BAM=\u30dc\u30b9\u30cb\u30a2 \u30de\u30eb\u30af (BAM)
-currenciesDisplayName.BZD=\u30d9\u30ea\u30fc\u30ba \u30c9\u30eb
-currenciesDisplayName.BAD=\u30dc\u30b9\u30cb\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.PLN=\u30dd\u30fc\u30e9\u30f3\u30c9 \u30ba\u30a6\u30a9\u30c6\u30a3
currenciesDisplayName.YER=\u30a4\u30a8\u30e1\u30f3 \u30ea\u30a2\u30eb
+currenciesDisplayName.ETB=\u30a8\u30c1\u30aa\u30d4\u30a2 \u30d6\u30eb
+currenciesDisplayName.BND=\u30d6\u30eb\u30cd\u30a4 \u30c9\u30eb
+currenciesDisplayName.JMD=\u30b8\u30e3\u30de\u30a4\u30ab \u30c9\u30eb
+currenciesDisplayName.EGP=\u30a8\u30b8\u30d7\u30c8 \u30dd\u30f3\u30c9
+currenciesDisplayName.PLN=\u30dd\u30fc\u30e9\u30f3\u30c9 \u30ba\u30a6\u30a9\u30c6\u30a3
+currenciesDisplayName.DZD=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.ISK=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9 \u30af\u30ed\u30fc\u30ca
currenciesDisplayName.SRG=\u30b9\u30ea\u30ca\u30e0 \u30ae\u30eb\u30c0\u30fc
-currenciesDisplayName.CSK=\u30c1\u30a7\u30b3\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca (CSK)
+currenciesDisplayName.LYD=\u30ea\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.BZD=\u30d9\u30ea\u30fc\u30ba \u30c9\u30eb
+currenciesDisplayName.BAM=\u30dc\u30b9\u30cb\u30a2 \u30de\u30eb\u30af (BAM)
+currenciesDisplayName.ESP=\u30b9\u30da\u30a4\u30f3 \u30da\u30bb\u30bf
currenciesDisplayName.KRW=\u97d3\u56fd \u30a6\u30a9\u30f3
+currenciesDisplayName.NLG=\u30aa\u30e9\u30f3\u30c0 \u30ae\u30eb\u30c0\u30fc
+currenciesDisplayName.MRO=\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2 \u30a6\u30ae\u30a2
+currenciesDisplayName.BAD=\u30dc\u30b9\u30cb\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb
+currenciesDisplayName.ZWD=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb
+currenciesDisplayName.SEK=\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3 \u30af\u30ed\u30fc\u30ca
+currenciesDisplayName.CSK=\u30c1\u30a7\u30b3\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca (CSK)
currenciesDisplayName.BYR=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.YEI=\u30a4\u30a8\u30e1\u30f3 \u30ea\u30a2\u30eb (YEI)
-currenciesDisplayName.BYL=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb (BYL\u30011992-1994)
-currenciesDisplayName.CSC=\u30c1\u30a7\u30b3\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca (CSC)
-currenciesDisplayName.KRO=\u97d3\u56fd \u65e7\u30a6\u30a9\u30f3
-currenciesDisplayName.KRH=\u97d3\u56fd \u30db\u30a2\u30f3
-currenciesDisplayName.BYB=\u30d9\u30e9\u30eb\u30fc\u30b7 \u30eb\u30fc\u30d6\u30eb (BYB\u30011994-1999)
-currenciesDisplayName.SQS=\u30bd\u30de\u30ea\u30e9\u30f3\u30c9 \u30b7\u30ea\u30f3\u30b0
-currenciesDisplayName.GRN=\u30ae\u30ea\u30b7\u30e3 \u65b0\u30c9\u30e9\u30af\u30de
+currenciesDisplayName.IRR=\u30a4\u30e9\u30f3 \u30ea\u30a2\u30eb
currenciesDisplayName.PKR=\u30d1\u30ad\u30b9\u30bf\u30f3 \u30eb\u30d4\u30fc
-currenciesDisplayName.AFN=\u30a2\u30d5\u30ac\u30cb\u30fc
-currenciesDisplayName.ZWD=\u30b8\u30f3\u30d0\u30d6\u30a8 \u30c9\u30eb
-currenciesDisplayName.LKR=\u30b9\u30ea\u30e9\u30f3\u30ab \u30eb\u30d4\u30fc
-currenciesDisplayName.GRD=\u30ae\u30ea\u30b7\u30e3 \u30c9\u30e9\u30af\u30de
-currenciesDisplayName.IEP=\u30a2\u30a4\u30ea\u30c3\u30b7\u30e5 \u30dd\u30f3\u30c9
-currenciesDisplayName.AFA=\u30a2\u30d5\u30ac\u30cb\u30fc (1927-2002)
-currenciesDisplayName.YDD=\u30a4\u30a8\u30e1\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.RWF=\u30eb\u30ef\u30f3\u30c0 \u30d5\u30e9\u30f3
-currenciesDisplayName.CRC=\u30b3\u30b9\u30bf\u30ea\u30ab \u30b3\u30ed\u30f3
-currenciesDisplayName.TJS=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30bd\u30e2\u30cb
-currenciesDisplayName.TJR=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3 \u30eb\u30fc\u30d6\u30eb
-currenciesDisplayName.EEK=\u30a8\u30b9\u30c8\u30cb\u30a2 \u30af\u30eb\u30fc\u30f3
-currenciesDisplayName.GQP=\u8d64\u9053\u30ae\u30cb\u30a2 \u30da\u30bb\u30bf
-currenciesDisplayName.MDR=\u30e2\u30eb\u30c9\u30d0 \u30ec\u30a4 \u30af\u30fc\u30dd\u30f3
-currenciesDisplayName.HKD=\u9999\u6e2f\u30c9\u30eb
-currenciesDisplayName.DKK=\u30c7\u30f3\u30de\u30fc\u30af \u30af\u30ed\u30fc\u30cd
-currenciesDisplayName.MDL=\u30e2\u30eb\u30c9\u30d0 \u30ec\u30a4
-currenciesDisplayName.GQF=\u8d64\u9053\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3
-currenciesDisplayName.GQE=\u8d64\u9053\u30ae\u30cb\u30a2 \u30ae\u30cb\u30fc
-currenciesDisplayName.IDR=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30eb\u30d4\u30a2
-currenciesDisplayName.AED=UAE \u30c7\u30a3\u30eb\u30cf\u30e0
-currenciesDisplayName.KPW=\u5317\u671d\u9bae \u30a6\u30a9\u30f3
-currenciesDisplayName.IDN=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u65b0\u30eb\u30d4\u30a2
-currenciesDisplayName.BWP=\u30dc\u30c4\u30ef\u30ca \u30d7\u30e9
-currenciesDisplayName.MDC=\u30e2\u30eb\u30c9\u30d0 \u30ec\u30a4 \u30af\u30fc\u30dd\u30f3
-currenciesDisplayName.IDJ=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30b8\u30e3\u30ef \u30eb\u30d4\u30a2
-currenciesDisplayName.KPP=\u5317\u671d\u9bae \u4eba\u6c11\u30a6\u30a9\u30f3
-currenciesDisplayName.IDG=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30cb\u30ab\u30ae\u30eb\u30c0\u30fc
-currenciesDisplayName.VUV=\u30d0\u30cc\u30a2\u30c4 \u30d0\u30c4
-currenciesDisplayName.XID=\u30a4\u30b9\u30e9\u30e0 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.SOS=\u30bd\u30de\u30ea\u30a2 \u30b7\u30ea\u30f3\u30b0
-currenciesDisplayName.ADP=\u30a2\u30f3\u30c9\u30e9 \u30da\u30bb\u30bf
-currenciesDisplayName.RUR=\u30ed\u30b7\u30a2 \u30eb\u30fc\u30d6\u30eb (1991-1998)
-currenciesDisplayName.GPF=\u30b0\u30a2\u30c9\u30eb\u30fc\u30d7 \u30d5\u30e9\u30f3
-currenciesDisplayName.DJF=\u30b8\u30d6\u30c1 \u30d5\u30e9\u30f3
-currenciesDisplayName.ADD=\u30a2\u30f3\u30c9\u30e9 \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.MCG=\u30e2\u30ca\u30b3 \u30d5\u30e9\u30f3 (MCG)
-currenciesDisplayName.MCF=\u30e2\u30ca\u30b3 \u30d5\u30e9\u30f3
-currenciesDisplayName.ECV=\u30a8\u30af\u30a2\u30c9\u30eb UVC
-currenciesDisplayName.ECS=\u30a8\u30af\u30a2\u30c9\u30eb \u30b9\u30af\u30ec
-currenciesDisplayName.LIF=\u30ea\u30d2\u30c6\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3 \u30d5\u30e9\u30f3
-currenciesDisplayName.PHP=\u30d5\u30a3\u30ea\u30d4\u30f3 \u30da\u30bd
-currenciesDisplayName.UZS=\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3 \u30b9\u30e0
-currenciesDisplayName.COP=\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd
-currenciesDisplayName.THB=\u30bf\u30a4 \u30d0\u30fc\u30c4
-currenciesDisplayName.IBP=\u5317\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9 \u30dd\u30f3\u30c9
-currenciesDisplayName.BUR=\u30d3\u30eb\u30de \u30eb\u30d4\u30fc
-currenciesDisplayName.COF=\u30b3\u30f3\u30b4 CFA \u30d5\u30e9\u30f3
-currenciesDisplayName.BUK=\u30d3\u30eb\u30de \u30c1\u30e3\u30c3\u30c8
-currenciesDisplayName.COB=\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd (COB)
-currenciesDisplayName.UZC=\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3 \u30b9\u30e0 (UZC)
-currenciesDisplayName.UAK=\u30a6\u30af\u30e9\u30a4\u30ca \u30ab\u30eb\u30dc\u30d0\u30cd\u30c4
-currenciesDisplayName.QAR=\u30ab\u30bf\u30fc\u30eb \u30ea\u30a2\u30eb
-currenciesDisplayName.UAH=\u30a6\u30af\u30e9\u30a4\u30ca \u30b0\u30ea\u30d6\u30ca
-currenciesDisplayName.GNS=\u30ae\u30cb\u30a2 \u30b7\u30ea\u30fc
-currenciesDisplayName.CNY=\u4e2d\u56fd\u4eba\u6c11\u5143
-currenciesDisplayName.MZM=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30e1\u30c6\u30a3\u30ab\u30eb
-currenciesDisplayName.CNX=\u4e2d\u56fd \u7c73\u30c9\u30eb (FEC)
-currenciesDisplayName.UYU=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd
-currenciesDisplayName.GNI=\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3 (1960-1972)
-currenciesDisplayName.SML=\u30b5\u30f3\u30de\u30ea\u30ce \u30ea\u30e9
-currenciesDisplayName.CNP=\u4e2d\u56fd\u4eba\u6c11\u5143
-currenciesDisplayName.MZE=\u30e2\u30b6\u30f3\u30d4\u30fc\u30af \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.GNF=\u30ae\u30cb\u30a2 \u30d5\u30e9\u30f3
-currenciesDisplayName.OMS=\u30aa\u30de\u30fc\u30f3 \u30ea\u30a2\u30eb (OMS)
-currenciesDisplayName.PGK=\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2 \u30ad\u30ca
-currenciesDisplayName.OMR=\u30aa\u30de\u30fc\u30f3 \u30ea\u30a2\u30eb
-currenciesDisplayName.UYP=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd (1975-1993)
-currenciesDisplayName.XFU=\u30d5\u30e9\u30f3\u30b9 UIC \u30d5\u30e9\u30f3
-currenciesDisplayName.BTR=\u30d6\u30fc\u30bf\u30f3 \u30eb\u30d4\u30fc
-currenciesDisplayName.ZRZ=\u30b6\u30a4\u30fc\u30eb \u30b6\u30a4\u30fc\u30eb
-currenciesDisplayName.MAF=\u30e2\u30ed\u30c3\u30b3 \u30d5\u30e9\u30f3
-currenciesDisplayName.MAD=\u30e2\u30ed\u30c3\u30b3 \u30c7\u30a3\u30eb\u30cf\u30e0
-currenciesDisplayName.BTN=\u30d6\u30fc\u30bf\u30f3 \u30cb\u30e5\u30eb\u30bf\u30e0
-currenciesDisplayName.XFO=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3 (XFO)
-currenciesDisplayName.UYF=\u30a6\u30eb\u30b0\u30a2\u30a4 \u30da\u30bd (UYF)
-currenciesDisplayName.MYR=\u30de\u30ec\u30fc\u30b7\u30a2 \u30ea\u30f3\u30ae\u30c3\u30c8
-currenciesDisplayName.ZRN=\u30b6\u30a4\u30fc\u30eb \u65b0\u30b6\u30a4\u30fc\u30eb
-currenciesDisplayName.AZM=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3 \u30de\u30ca\u30c8
-currenciesDisplayName.GMP=\u30ac\u30f3\u30d3\u30a2 \u30dd\u30f3\u30c9
-currenciesDisplayName.KMF=\u30b3\u30e2\u30ed \u30d5\u30e9\u30f3
-currenciesDisplayName.SLL=\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd \u30ec\u30aa\u30f3
-currenciesDisplayName.GMD=\u30ac\u30f3\u30d3\u30a2 \u30c0\u30e9\u30b7
-currenciesDisplayName.XEU=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d
-currenciesDisplayName.BSP=\u30d0\u30cf\u30de \u30dd\u30f3\u30c9
-currenciesDisplayName.CMF=\u30ab\u30e1\u30eb\u30fc\u30f3 CFA \u30d5\u30e9\u30f3
-currenciesDisplayName.MXV=\u30e1\u30ad\u30b7\u30b3 UDI
-currenciesDisplayName.XEF=CFA \u30d5\u30e9\u30f3 (BCEAEC)
-currenciesDisplayName.BSD=\u30d0\u30cf\u30de \u30c9\u30eb
-currenciesDisplayName.MXP=\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd (MXP\u30011861-1992)
-currenciesDisplayName.MXN=\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd
-currenciesDisplayName.PES=\u30da\u30eb\u30fc \u30bd\u30eb
-currenciesDisplayName.GLK=\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9 \u30af\u30ed\u30fc\u30cd
-currenciesDisplayName.BRZ=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed (BRZ\u30011942-1967)
-currenciesDisplayName.PEN=\u30da\u30eb\u30fc \u65b0\u30bd\u30eb
-currenciesDisplayName.CLP=\u30c1\u30ea \u30da\u30bd
-currenciesDisplayName.SKK=\u30b9\u30ed\u30d0\u30ad\u30a2 \u30b3\u30eb\u30ca
-currenciesDisplayName.PEI=\u30da\u30eb\u30fc \u30a4\u30f3\u30c6\u30a3
-currenciesDisplayName.BRR=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed \u30ec\u30a2\u30eb
-currenciesDisplayName.XDR=\u7279\u5225\u5f15\u304d\u51fa\u3057\u6a29 (Special Drawing Rights)
-currenciesDisplayName.FRG=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3 (Franc Germinal/Franc Poincare)
-currenciesDisplayName.FRF=\u30d5\u30e9\u30f3\u30b9 \u30d5\u30e9\u30f3
-currenciesDisplayName.BRN=\u30d6\u30e9\u30b8\u30eb \u65b0\u30af\u30eb\u30bc\u30a4\u30ed (BRN)
-currenciesDisplayName.CLF=\u30c1\u30ea \u30a6\u30cb\u30c0 \u30c7 \u30d5\u30a9\u30e1\u30f3\u30c8
-currenciesDisplayName.CLE=\u30c1\u30ea \u30a8\u30b9\u30af\u30fc\u30c9
-currenciesDisplayName.BRL=\u30d6\u30e9\u30b8\u30eb \u30ec\u30a2\u30eb
-currenciesDisplayName.CLC=\u30c1\u30ea \u30da\u30bd (CLC)
-currenciesDisplayName.BRE=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed (BRE\u30011990-1993)
-currenciesDisplayName.DES=\u30c9\u30a4\u30c4 \u30de\u30eb\u30af (Sperrmark)
-currenciesDisplayName.MWP=\u30de\u30e9\u30a6\u30a3 \u30dd\u30f3\u30c9
-currenciesDisplayName.BRC=\u30d6\u30e9\u30b8\u30eb \u30af\u30eb\u30bc\u30a4\u30ed (BRC)
-currenciesDisplayName.BRB=\u30d6\u30e9\u30b8\u30eb \u65b0\u30af\u30eb\u30bc\u30a4\u30ed (BRB\u30011967-1986)
-currenciesDisplayName.MWK=\u30de\u30e9\u30a6\u30a3 \u30af\u30ef\u30c1\u30e3
-currenciesDisplayName.PDR=\u6cbf\u30c9\u30cb\u30a8\u30b9\u30c8\u30eb \u30eb\u30fc\u30d6\u30eb (PDR)
-currenciesDisplayName.DEM=\u30c9\u30a4\u30c4 \u30de\u30eb\u30af
-currenciesDisplayName.TDF=\u30c1\u30e3\u30c9 CFA \u30d5\u30e9\u30f3
-currenciesDisplayName.PDN=\u6cbf\u30c9\u30cb\u30a8\u30b9\u30c8\u30eb \u65b0\u30eb\u30fc\u30d6\u30eb (PDN)
-currenciesDisplayName.PDK=\u6cbf\u30c9\u30cb\u30a8\u30b9\u30c8\u30eb \u30eb\u30fc\u30d6\u30eb (PDK)
-currenciesDisplayName.NPR=\u30cd\u30d1\u30fc\u30eb \u30eb\u30d4\u30fc
-currenciesDisplayName.CKD=\u30af\u30c3\u30af\u8af8\u5cf6 \u30c9\u30eb
-currenciesDisplayName.JPY=\u5186
-currenciesDisplayName.MVR=\u30e2\u30eb\u30c7\u30a3\u30d6\u8af8\u5cf6 \u30eb\u30d5\u30a3\u30a2
-currenciesDisplayName.XCF=CFA \u65b0\u30d5\u30e9\u30f3
-currenciesDisplayName.MVP=\u30e2\u30eb\u30c7\u30a3\u30d6\u8af8\u5cf6 \u30eb\u30d4\u30fc
-currenciesDisplayName.XCD=\u6771\u30ab\u30ea\u30d6 \u30c9\u30eb
-currenciesDisplayName.SIT=\u30b9\u30ed\u30d9\u30cb\u30a2 \u30c8\u30e9\u30fc\u30eb
-currenciesDisplayName.YUR=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUR)
-currenciesDisplayName.AWG=\u30a2\u30eb\u30d0 \u30ae\u30eb\u30c0\u30fc
-currenciesDisplayName.YUO=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUO)
-currenciesDisplayName.DDM=\u6771\u30c9\u30a4\u30c4 \u30de\u30eb\u30af
-currenciesDisplayName.YUN=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u65b0\u30c7\u30a3\u30ca\u30fc\u30eb (YUN)
-currenciesDisplayName.YUM=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30b9\u30fc\u30d1\u30fc \u30c7\u30a3\u30ca\u30fc\u30eb
-currenciesDisplayName.TCC=\u30bf\u30fc\u30af\u30b9\u30fb\u30ab\u30a4\u30b3\u30b9\u8af8\u5cf6 \u30af\u30ed\u30fc\u30f3
-currenciesDisplayName.YUG=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUG)
-currenciesDisplayName.YUF=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUF)
-currenciesDisplayName.RON=\u30eb\u30fc\u30de\u30cb\u30a2 \u65b0\u30ec\u30a4
-currenciesDisplayName.YUD=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2 \u30c7\u30a3\u30ca\u30fc\u30eb (YUD)
-currenciesDisplayName.ROL=\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a4
-currenciesDisplayName.SIB=\u30b9\u30ed\u30d9\u30cb\u30a2 \u30c8\u30e9\u30fc\u30eb (SIB)
-currenciesDisplayName.NOK=\u30ce\u30eb\u30a6\u30a7\u30fc \u30af\u30ed\u30fc\u30cd
-currenciesDisplayName.MUR=\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9 \u30eb\u30d4\u30fc
-currenciesDisplayName.XBD=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-17)
-currenciesDisplayName.GIP=\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb \u30dd\u30f3\u30c9
-currenciesDisplayName.VNS=\u30d9\u30c8\u30ca\u30e0\u81ea\u6cbb\u533a \u30c9\u30f3
-currenciesDisplayName.XBC=\u30e8\u30fc\u30ed\u30c3\u30d1\u52d8\u5b9a\u5358\u4f4d (EUA-9)
-currenciesDisplayName.VNR=\u30d9\u30c8\u30ca\u30e0\u5171\u548c\u56fd \u30c9\u30f3
-currenciesDisplayName.XBB=\u30e8\u30fc\u30ed\u30c3\u30d1\u901a\u8ca8\u5358\u4f4d (EMU-6)
-currenciesDisplayName.XBA=\u30e8\u30fc\u30ed\u30c3\u30d1\u6df7\u5408\u5358\u4f4d (EURCO)
-currenciesDisplayName.KID=\u30ad\u30ea\u30d0\u30b9 \u30c9\u30eb
-currenciesDisplayName.SHP=\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca\u5cf6 \u30dd\u30f3\u30c9
-currenciesDisplayName.VNN=\u30d9\u30c8\u30ca\u30e0 \u65b0\u30c9\u30f3
-currenciesSymbol.JOD=JOD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=\u0111
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=MTL
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=KGS
-currenciesSymbol.CHF=CHF
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LYD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=MRO
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=TWD
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=GEL
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=KZT
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=LSL
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=GYD
-currenciesSymbol.AMD=AMD
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=ALL
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MKD
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=XPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=TOP
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=UGX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=NAD
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=BAM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=PLN
-currenciesSymbol.YER=YER
-currenciesSymbol.SRG=SRG
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=\uffe6
-currenciesSymbol.BYR=BYR
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=ZWD
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IEP
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DJF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=MZM
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=UYU
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
-currenciesSymbol.GNF=GNF
-currenciesSymbol.OMR=OMR
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=BTN
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=MYR
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MXN
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=SKK
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=BRL
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=NPR
-currenciesSymbol.CKD=CKD
+currenciesDisplayName.BMD=\u30d0\u30df\u30e5\u30fc\u30c0 \u30c9\u30eb
+currenciesSymbol.INR=\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc
currenciesSymbol.JPY=\uffe5
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
+currenciesSymbol.KRW=\uffe6
+currenciesSymbol.VND=\u0111
+currenciesSymbol.CNY=\u4e2d\u56fd \u5143
currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.MWK=MK
+currenciesSymbol.AFN=Af
+shortMonths=1 \u6708®2 \u6708®3 \u6708®4 \u6708®5 \u6708®6 \u6708®7 \u6708®8 \u6708®9 \u6708®10 \u6708®11 \u6708®12 \u6708®®
months=1\u6708®2\u6708®3\u6708®4\u6708®5\u6708®6\u6708®7\u6708®8\u6708®9\u6708®10\u6708®11\u6708®12\u6708®®
shortWeekdays=®\u65e5®\u6708®\u706b®\u6c34®\u6728®\u91d1®\u571f®
weekdays=®\u65e5\u66dc\u65e5®\u6708\u66dc\u65e5®\u706b\u66dc\u65e5®\u6c34\u66dc\u65e5®\u6728\u66dc\u65e5®\u91d1\u66dc\u65e5®\u571f\u66dc\u65e5®
@@ -767,7 +270,7 @@ shortTimeFormat=H:mm
mediumTimeFormat=H:mm:ss
longTimeFormat=H:mm:ss:z
fullTimeFormat=H'\u6642'mm'\u5206'ss'\u79d2'z
-zoneStrings=America/Indianapolis®EST®\u6771\u90e8\u6a19\u6e96\u6642®EST®\u6771\u90e8\u6a19\u6e96\u6642®©America/Halifax®AST®\u5927\u897f\u6d0b\u6a19\u6e96\u6642®ADT®\u5927\u897f\u6d0b\u590f\u6642\u9593®©Pacific/Honolulu®HST®\u30cf\u30ef\u30a4\u6a19\u6e96\u6642®HST®\u30cf\u30ef\u30a4\u6a19\u6e96\u6642®©America/Denver®MST®\u5c71\u5730\u6a19\u6e96\u6642®MDT®\u5c71\u5730\u590f\u6642\u9593®©America/Anchorage®AST®\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642®ADT®\u30a2\u30e9\u30b9\u30ab\u590f\u6642\u9593®©America/St_Johns®CNT®\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u5cf6\u6a19\u6e96\u6642®CDT®\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u5cf6\u590f\u6642\u9593®©Africa/Casablanca®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®©America/Chicago®CST®\u4e2d\u90e8\u6a19\u6e96\u6642®CDT®\u4e2d\u90e8\u590f\u6642\u9593®©Asia/Shanghai®CTT®\u4e2d\u56fd\u6a19\u6e96\u6642®CDT®\u4e2d\u56fd\u6a19\u6e96\u6642®©Asia/Tokyo®JST®\u65e5\u672c\u6a19\u6e96\u6642®JST®\u65e5\u672c\u6a19\u6e96\u6642®©America/New_York®EST®\u6771\u90e8\u6a19\u6e96\u6642®EDT®\u6771\u90e8\u590f\u6642\u9593®©Europe/Bucharest®EET®\u6771\u6b27\u6a19\u6e96\u6642®EEST®\u6771\u6b27\u590f\u6642\u9593®©America/Los_Angeles®PST®\u592a\u5e73\u6d0b\u6a19\u6e96\u6642®PDT®\u592a\u5e73\u6d0b\u590f\u6642\u9593®©America/Phoenix®MST®\u5c71\u5730\u6a19\u6e96\u6642®MST®\u5c71\u5730\u6a19\u6e96\u6642®©Etc/GMT®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®©Asia/Jerusalem®IST®\u30a4\u30b9\u30e9\u30a8\u30eb\u6a19\u6e96\u6642®IDT®\u30a4\u30b9\u30e9\u30a8\u30eb\u590f\u6642\u9593®©Europe/Paris®CET®\u4e2d\u6b27\u6a19\u6e96\u6642®CEST®\u4e2d\u6b27\u590f\u6642\u9593®©
+zoneStrings=America/Halifax®AST®\u5927\u897f\u6d0b\u6a19\u6e96\u6642®ADT®\u5927\u897f\u6d0b\u590f\u6642\u9593®©America/Indianapolis®EST®\u6771\u90e8\u6a19\u6e96\u6642®EST®\u6771\u90e8\u6a19\u6e96\u6642®©Europe/Paris®CET®\u4e2d\u6b27\u6a19\u6e96\u6642®CEST®\u4e2d\u6b27\u590f\u6642\u9593®©America/Phoenix®MST®\u5c71\u5730\u6a19\u6e96\u6642®MST®\u5c71\u5730\u6a19\u6e96\u6642®©America/Los_Angeles®PST®\u592a\u5e73\u6d0b\u6a19\u6e96\u6642®PDT®\u592a\u5e73\u6d0b\u590f\u6642\u9593®©Pacific/Honolulu®HST®\u30cf\u30ef\u30a4\u6a19\u6e96\u6642®HST®\u30cf\u30ef\u30a4\u6a19\u6e96\u6642®©America/Denver®MST®\u5c71\u5730\u6a19\u6e96\u6642®MDT®\u5c71\u5730\u590f\u6642\u9593®©Europe/Bucharest®EET®\u6771\u6b27\u6a19\u6e96\u6642®EEST®\u6771\u6b27\u590f\u6642\u9593®©America/New_York®EST®\u6771\u90e8\u6a19\u6e96\u6642®EDT®\u6771\u90e8\u590f\u6642\u9593®©Asia/Tokyo®JST®\u65e5\u672c\u6a19\u6e96\u6642®JST®\u65e5\u672c\u6a19\u6e96\u6642®©America/Anchorage®AST®\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642®ADT®\u30a2\u30e9\u30b9\u30ab\u590f\u6642\u9593®©Asia/Shanghai®CTT®\u4e2d\u56fd\u6a19\u6e96\u6642®CDT®\u4e2d\u56fd\u6a19\u6e96\u6642®©America/Chicago®CST®\u4e2d\u90e8\u6a19\u6e96\u6642®CDT®\u4e2d\u90e8\u590f\u6642\u9593®©Africa/Casablanca®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®GMT®\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642®©America/St_Johns®CNT®\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u5cf6\u6a19\u6e96\u6642®CDT®\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u5cf6\u590f\u6642\u9593®©Asia/Jerusalem®IST®\u30a4\u30b9\u30e9\u30a8\u30eb\u6a19\u6e96\u6642®IDT®\u30a4\u30b9\u30e9\u30a8\u30eb\u590f\u6642\u9593®©
territories.TL=\u6771\u30c6\u30a3\u30e2\u30fc\u30eb
territories.TK=\u30c8\u30b1\u30e9\u30a6\u8af8\u5cf6
territories.TJ=\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3
@@ -781,7 +284,7 @@ territories.GW=\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6
territories.GU=\u30b0\u30a2\u30e0\u5cf6
territories.GT=\u30b0\u30a2\u30c6\u30de\u30e9
territories.GS=\u5357\u30b8\u30e7\u30fc\u30b8\u30a2\u5cf6\u30fb\u5357\u30b5\u30f3\u30c9\u30a4\u30c3\u30c1\u8af8\u5cf6
-territories.GR=\u30ae\u30ea\u30b7\u30a2
+territories.GR=\u30ae\u30ea\u30b7\u30e3
territories.GQ=\u8d64\u9053\u30ae\u30cb\u30a2
territories.GP=\u30b0\u30a2\u30c9\u30eb\u30fc\u30d7
territories.SZ=\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9
@@ -790,7 +293,9 @@ territories.GN=\u30ae\u30cb\u30a2
territories.GM=\u30ac\u30f3\u30d3\u30a2
territories.GL=\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9
territories.SV=\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb
+territories.062=\u5357\u4e2d\u592e\u30a2\u30b8\u30a2
territories.ST=\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da
+territories.061=\u30dd\u30ea\u30cd\u30b7\u30a2
territories.GI=\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb
territories.GH=\u30ac\u30fc\u30ca
territories.SR=\u30b9\u30ea\u30ca\u30e0
@@ -814,9 +319,12 @@ territories.SC=\u30bb\u30a4\u30b7\u30a7\u30eb
territories.SB=\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6
territories.SA=\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2
territories.FR=\u30d5\u30e9\u30f3\u30b9
+territories.057=\u30df\u30af\u30ed\u30cd\u30b7\u30a2
territories.FO=\u30d5\u30a7\u30ed\u30fc\u8af8\u5cf6
territories.FM=\u30df\u30af\u30ed\u30cd\u30b7\u30a2
territories.RW=\u30eb\u30ef\u30f3\u30c0
+territories.054=\u30e1\u30e9\u30cd\u30b7\u30a2
+territories.053=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2\u304a\u3088\u3073\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9
territories.FK=\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6
territories.RU=\u30ed\u30b7\u30a2
territories.FJ=\u30d5\u30a3\u30b8\u30fc
@@ -826,20 +334,26 @@ territories.RE=\u30ec\u30e6\u30cb\u30aa\u30f3\u5cf6
territories.ET=\u30a8\u30c1\u30aa\u30d4\u30a2
territories.ES=\u30b9\u30da\u30a4\u30f3
territories.ER=\u30a8\u30ea\u30c8\u30ea\u30a2
+territories.833=\u30de\u30f3\u5cf6
territories.EH=\u897f\u30b5\u30cf\u30e9
territories.EG=\u30a8\u30b8\u30d7\u30c8
+territories.830=\u30c1\u30e3\u30cd\u30eb\u8af8\u5cf6
territories.EE=\u30a8\u30b9\u30c8\u30cb\u30a2
+territories.QO=\u305d\u306e\u4ed6\u306e\u30aa\u30bb\u30a2\u30cb\u30a2
territories.EC=\u30a8\u30af\u30a2\u30c9\u30eb
territories.DZ=\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2
territories.QA=\u30ab\u30bf\u30fc\u30eb
+territories.039=\u5357\u30e8\u30fc\u30ed\u30c3\u30d1
territories.DO=\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd
territories.PY=\u30d1\u30e9\u30b0\u30a2\u30a4
+territories.035=\u6771\u5357\u30a2\u30b8\u30a2
territories.DM=\u30c9\u30df\u30cb\u30ab\u56fd
territories.PW=\u30d1\u30e9\u30aa
territories.DK=\u30c7\u30f3\u30de\u30fc\u30af
territories.DJ=\u30b8\u30d6\u30c1
territories.PT=\u30dd\u30eb\u30c8\u30ac\u30eb
territories.PS=\u30d1\u30ec\u30b9\u30c1\u30ca
+territories.030=\u6771\u30a2\u30b8\u30a2
territories.PR=\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3
territories.DE=\u30c9\u30a4\u30c4
territories.PN=\u30d4\u30c8\u30b1\u30a2\u30f3\u5cf6
@@ -856,13 +370,16 @@ territories.CX=\u30af\u30ea\u30b9\u30de\u30b9\u5cf6
territories.CV=\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7
territories.PA=\u30d1\u30ca\u30de
territories.CU=\u30ad\u30e5\u30fc\u30d0
+territories.CS=\u30bb\u30eb\u30d3\u30a2\u30fb\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed
territories.CR=\u30b3\u30b9\u30bf\u30ea\u30ab
+territories.029=\u30ab\u30ea\u30d6\u6d77
territories.CO=\u30b3\u30ed\u30f3\u30d3\u30a2
territories.CN=\u4e2d\u56fd
territories.CM=\u30ab\u30e1\u30eb\u30fc\u30f3
territories.CL=\u30c1\u30ea
territories.CK=\u30af\u30c3\u30af\u8af8\u5cf6
territories.CI=\u30b3\u30fc\u30c8\u30b8\u30dc\u30a2\u30fc\u30eb
+territories.021=\u5317\u30a2\u30e1\u30ea\u30ab
territories.CH=\u30b9\u30a4\u30b9
territories.CG=\u30b3\u30f3\u30b4
territories.CF=\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd
@@ -877,13 +394,20 @@ territories.BV=\u30d6\u30fc\u30d9\u5cf6
territories.BT=\u30d6\u30fc\u30bf\u30f3
territories.BS=\u30d0\u30cf\u30de
territories.BR=\u30d6\u30e9\u30b8\u30eb
+territories.019=\u30a2\u30e1\u30ea\u30ab\u5927\u9678
+territories.018=\u5357\u30a2\u30d5\u30ea\u30ab
territories.NZ=\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9
territories.BO=\u30dc\u30ea\u30d3\u30a2
+territories.017=\u4e2d\u90e8\u30a2\u30d5\u30ea\u30ab
territories.BN=\u30d6\u30eb\u30cd\u30a4
territories.BM=\u30d0\u30fc\u30df\u30e5\u30fc\u30c0
+territories.015=\u5317\u30a2\u30d5\u30ea\u30ab
+territories.014=\u6771\u30a2\u30d5\u30ea\u30ab
+territories.013=\u4e2d\u592e\u30a2\u30e1\u30ea\u30ab
territories.NU=\u30cb\u30a6\u30a8\u5cf6
territories.BJ=\u30d9\u30cb\u30f3
territories.BI=\u30d6\u30eb\u30f3\u30b8
+territories.011=\u897f\u30a2\u30d5\u30ea\u30ab
territories.BH=\u30d0\u30fc\u30ec\u30fc\u30f3
territories.NR=\u30ca\u30a6\u30eb
territories.BG=\u30d6\u30eb\u30ac\u30ea\u30a2
@@ -901,6 +425,7 @@ territories.NG=\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2
territories.NF=\u30ce\u30fc\u30d5\u30a9\u30fc\u30af\u5cf6
territories.AZ=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3
territories.NE=\u30cb\u30b8\u30a7\u30fc\u30eb
+territories.AX=\u30aa\u30fc\u30e9\u30f3\u30c9\u8af8\u5cf6
territories.NC=\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2
territories.AW=\u30a2\u30eb\u30d0\u5cf6
territories.ZM=\u30b6\u30f3\u30d3\u30a2
@@ -909,19 +434,23 @@ territories.AU=\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2
territories.AT=\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2
territories.AS=\u7c73\u9818\u30b5\u30e2\u30a2
territories.AR=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3
+territories.009=\u30aa\u30bb\u30a2\u30cb\u30a2
territories.AQ=\u5357\u6975\u5927\u9678
territories.MZ=\u30e2\u30b6\u30f3\u30d3\u30fc\u30af
territories.AO=\u30a2\u30f3\u30b4\u30e9
territories.MY=\u30de\u30ec\u30fc\u30b7\u30a2
territories.AN=\u30aa\u30e9\u30f3\u30c0\u9818\u30a2\u30f3\u30c6\u30a3\u30eb\u8af8\u5cf6
territories.MX=\u30e1\u30ad\u30b7\u30b3
+territories.005=\u5357\u30a2\u30e1\u30ea\u30ab
territories.AM=\u30a2\u30eb\u30e1\u30cb\u30a2
territories.MW=\u30de\u30e9\u30a6\u30a3
territories.AL=\u30a2\u30eb\u30d0\u30cb\u30a2
territories.MV=\u30e2\u30eb\u30b8\u30d6
territories.ZA=\u5357\u30a2\u30d5\u30ea\u30ab
territories.MU=\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9
+territories.002=\u30a2\u30d5\u30ea\u30ab
territories.MT=\u30de\u30eb\u30bf
+territories.001=\u4e16\u754c
territories.AI=\u30a2\u30f3\u30ae\u30e9
territories.MS=\u30e2\u30f3\u30c8\u30bb\u30e9\u30c8\u5cf6
territories.MR=\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2
@@ -936,7 +465,6 @@ territories.MN=\u30e2\u30f3\u30b4\u30eb
territories.MM=\u30df\u30e3\u30f3\u30de\u30fc
territories.ML=\u30de\u30ea
territories.MK=\u30de\u30b1\u30c9\u30cb\u30a2
-territories.YU=\u30e6\u30fc\u30b4\u30b9\u30e9\u30d3\u30a2
territories.YT=\u30de\u30e8\u30c3\u30c8\u5cf6
territories.MH=\u30de\u30fc\u30b7\u30e3\u30eb\u8af8\u5cf6\u5171\u548c\u56fd
territories.MG=\u30de\u30c0\u30ac\u30b9\u30ab\u30eb
@@ -946,10 +474,14 @@ territories.MA=\u30e2\u30ed\u30c3\u30b3
territories.YE=\u30a4\u30a8\u30e1\u30f3
territories.LY=\u30ea\u30d3\u30a2
territories.LV=\u30e9\u30c8\u30d3\u30a2
+territories.155=\u897f\u30e8\u30fc\u30ed\u30c3\u30d1
territories.LU=\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30b0
+territories.154=\u5317\u30e8\u30fc\u30ed\u30c3\u30d1
territories.LT=\u30ea\u30c8\u30a2\u30cb\u30a2
territories.LS=\u30ec\u30bd\u30c8
territories.LR=\u30ea\u30d9\u30ea\u30a2
+territories.151=\u6771\u30e8\u30fc\u30ed\u30c3\u30d1
+territories.150=\u30e8\u30fc\u30ed\u30c3\u30d1
territories.LK=\u30b9\u30ea\u30e9\u30f3\u30ab
territories.LI=\u30ea\u30d2\u30c6\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3
territories.LC=\u30bb\u30f3\u30c8\u30eb\u30b7\u30a2
@@ -958,6 +490,8 @@ territories.LA=\u30e9\u30aa\u30b9
territories.KZ=\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3
territories.KY=\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6
territories.KW=\u30af\u30a6\u30a7\u30fc\u30c8
+territories.145=\u897f\u30a2\u30b8\u30a2
+territories.142=\u30a2\u30b8\u30a2
territories.KR=\u5927\u97d3\u6c11\u56fd
territories.KP=\u671d\u9bae\u6c11\u4e3b\u4e3b\u7fa9\u4eba\u6c11\u5171\u548c\u56fd
territories.KN=\u30bb\u30f3\u30c8\u30af\u30ea\u30b9\u30c8\u30d5\u30a1\u30fc\u30fb\u30cd\u30a4\u30d3\u30b9
@@ -1007,8 +541,8 @@ territories.TR=\u30c8\u30eb\u30b3
territories.TO=\u30c8\u30f3\u30ac
territories.TN=\u30c1\u30e5\u30cb\u30b8\u30a2
territories.TM=\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3
-languages.gwi=\u30af\u30c1\u30f3\u8a9e
languages.akk=\u30a2\u30c3\u30ab\u30c9\u8a9e
+languages.gwi=\u30af\u30c1\u30f3\u8a9e
languages.eka=\u30a8\u30ab\u30b8\u30e5\u30af\u8a9e
languages.ijo=\u30a4\u30b8\u30e7\u30fc\u8a9e
languages.xh=\u30b3\u30b5\u8a9e
@@ -1021,15 +555,15 @@ languages.pon=\u30dd\u30f3\u30da\u30a4\u8a9e
languages.min=\u30df\u30ca\u30f3\u30ab\u30d0\u30a6\u8a9e
languages.suk=\u30b9\u30af\u30de\u8a9e
languages.wo=\u30a6\u30a9\u30ed\u30d5\u8a9e
-languages.lol=\u30e2\u30f3\u30b4\u8a9e
languages.kut=\u30af\u30c6\u30ca\u30a4\u8a9e
+languages.lol=\u30e2\u30f3\u30b4\u8a9e
languages.mic=\u30df\u30af\u30de\u30af\u8a9e
languages.wa=\u30ef\u30ed\u30f3\u8a9e
languages.kum=\u30af\u30e0\u30af\u8a9e
languages.zap=\u30b6\u30dd\u30c6\u30c3\u30af\u8a9e
languages.cus=\u30af\u30b7\u30e5\u8af8\u8a9e
-languages.jbo=Lojban\u8a9e
languages.doi=\u30c9\u30b0\u30ea\u8a9e
+languages.jbo=Lojban\u8a9e
languages.vo=\u30dc\u30e9\u30d4\u30e5\u30af\u8a9e
languages.oto=\u30aa\u30c8\u30df\u8a9e\u65cf
languages.vi=\u30d9\u30c8\u30ca\u30e0\u8a9e
@@ -1053,8 +587,8 @@ languages.egy=\u53e4\u4ee3\u30a8\u30b8\u30d7\u30c8\u8a9e
languages.ug=\u30a6\u30a4\u30b0\u30eb\u8a9e
languages.fan=\u30d5\u30a1\u30f3\u30b0\u8a9e
languages.ssa=\u30ca\u30a4\u30eb\u30fb\u30b5\u30cf\u30e9\u8af8\u8a9e
-languages.mga=\u4e2d\u671f\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u8a9e (900-1200)
languages.bat=\u30d0\u30eb\u30c8\u8af8\u8a9e
+languages.mga=\u4e2d\u671f\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u8a9e (900-1200)
languages.nyo=\u30cb\u30e7\u30ed\u8a9e
languages.bas=\u30d0\u30b5\u8a9e
languages.nyn=\u30cb\u30e3\u30f3\u30b3\u30ec\u8a9e
@@ -1082,8 +616,8 @@ languages.kru=\u30af\u30eb\u30af\u8a9e
languages.tg=\u30bf\u30b8\u30af\u8a9e
languages.byn=\u30d3\u30ea\u30f3\u8a9e
languages.te=\u30c6\u30eb\u30b0\u8a9e
-languages.kro=\u30af\u30eb\u30fc\u8a9e
languages.csb=\u30ab\u30b7\u30e5\u30fc\u30d6\u8a9e
+languages.kro=\u30af\u30eb\u30fc\u8a9e
languages.ta=\u30bf\u30df\u30fc\u30eb\u8a9e
languages.tkl=\u30c8\u30b1\u30e9\u30a6\u8a9e
languages.efi=\u30a8\u30d5\u30a3\u30c3\u30af\u8a9e
@@ -1098,7 +632,7 @@ languages.sq=\u30a2\u30eb\u30d0\u30cb\u30a2\u8a9e
languages.men=\u30e1\u30f3\u30c7\u8a9e
languages.crp=\u305d\u306e\u4ed6\u306e\u6df7\u6210\u8a9e\u30fb\u6df7\u5408\u8a9e
languages.so=\u30bd\u30de\u30ea\u8a9e
-languages.afh=Afrihili\u8a9e
+languages.afh=\u30a2\u30d5\u30ea\u30d2\u30ea\u8a9e
languages.sn=\u30b7\u30e7\u30ca\u8a9e
languages.sm=\u30b5\u30e2\u30a2\u8a9e
languages.sl=\u30b9\u30ed\u30d9\u30cb\u30a2\u8a9e
@@ -1106,9 +640,9 @@ languages.grc=\u53e4\u4ee3\u30ae\u30ea\u30b7\u30e3\u8a9e (1453\u307e\u3067)
languages.sk=\u30b9\u30ed\u30d0\u30ad\u30a2\u8a9e
languages.grb=\u30b0\u30ec\u30dc\u8a9e
languages.si=\u30b7\u30f3\u30cf\u30e9\u8a9e
-languages.sh=\u30bb\u30eb\u30dc\uff1d\u30af\u30ed\u30a2\u30c1\u30a2\u8a9e
-languages.crh=\u30af\u30ea\u30df\u30a2\u30fb\u30c8\u30eb\u30b3\u8a9e\u3001\u30af\u30ea\u30df\u30a2\u30fb\u30bf\u30bf\u30fc\u30eb\u8a9e
-languages.afa=\u30a2\u30d5\u30ed\u30fb\u30a2\u30d5\u30ea\u30ab\u8af8\u8a9e
+languages.sh=\u30bb\u30eb\u30dc\u30fb\u30af\u30ed\u30a2\u30c1\u30a2\u8a9e
+languages.afa=\u30bb\u30e0\u30fb\u30cf\u30e0\u8af8\u8a9e
+languages.crh=\u30af\u30ea\u30df\u30a2\u30fb\u30bf\u30bf\u30fc\u30eb\u8a9e
languages.sg=\u30b5\u30f3\u30b4\u8a9e
languages.se=\u5317\u30b5\u30fc\u30df\u8a9e
languages.sd=\u30b7\u30f3\u30c9\u8a9e
@@ -1120,7 +654,7 @@ languages.ru=\u30ed\u30b7\u30a2\u8a9e
languages.mdr=\u30de\u30f3\u30c0\u30eb\u8a9e
languages.ro=\u30eb\u30fc\u30de\u30cb\u30a2\u8a9e
languages.rn=\u30eb\u30f3\u30b8\u8a9e
-languages.rm=\u30ec\u30c8\uff1d\u30ed\u30de\u30f3\u8a9e
+languages.rm=\u30ec\u30c8\u30fb\u30ed\u30de\u30f3\u8a9e
languages.mdf=\u30e2\u30af\u30b7\u30e3\u8a9e
languages.tiv=\u30c6\u30a3\u30d6\u8a9e
languages.ady=\u30a2\u30c7\u30a3\u30b2\u8a9e
@@ -1132,14 +666,14 @@ languages.son=\u30bd\u30f3\u30ac\u30a4\u8a9e
languages.cpp=\u30dd\u30eb\u30c8\u30ac\u30eb\u8a9e\u304c\u57fa\u76e4\u306e\u6df7\u6210\u8a9e\u30fb\u6df7\u5408\u8a9e
languages.sog=\u30bd\u30b0\u30c9\u8a9e
languages.ada=\u30a2\u30c0\u30f3\u30b0\u30e1\u8a9e
-languages.kos=\u30b3\u30b7\u30e3\u30a8\u8a9e
-languages.hit=\u30d2\u30c3\u30bf\u30a4\u30c8\u8a9e
languages.cpf=\u30d5\u30e9\u30f3\u30b9\u8a9e\u304c\u57fa\u76e4\u306e\u6df7\u6210\u8a9e\u30fb\u6df7\u5408\u8a9e
+languages.hit=\u30d2\u30c3\u30bf\u30a4\u30c8\u8a9e
+languages.kos=\u30b3\u30b7\u30e3\u30a8\u8a9e
languages.cpe=\u82f1\u8a9e\u304c\u57fa\u76e4\u306e\u6df7\u6210\u8a9e\u30fb\u6df7\u5408\u8a9e
languages.him=\u30d2\u30de\u30c1\u30e3\u30eb\u8a9e
-languages.kok=\u30b3\u30f3\u30ab\u30cb\u8a9e
-languages.hil=\u30d2\u30ea\u30ac\u30a4\u30ce\u30f3\u8a9e
languages.got=\u30b4\u30fc\u30c8\u8a9e
+languages.hil=\u30d2\u30ea\u30ac\u30a4\u30ce\u30f3\u8a9e
+languages.kok=\u30b3\u30f3\u30ab\u30cb\u8a9e
languages.gor=\u30b4\u30ed\u30f3\u30bf\u30ed\u8a9e
languages.gon=\u30b4\u30fc\u30f3\u30c7\u30a3\u30fc\u8a9e
languages.din=\u30c7\u30a3\u30f3\u30ab\u8a9e
@@ -1156,17 +690,17 @@ languages.ach=\u30a2\u30c1\u30e7\u30ea\u8a9e
languages.yao=\u30e4\u30aa\u8a9e
languages.phi=\u30d5\u30a3\u30ea\u30d4\u30f3\u8af8\u8a9e
languages.pl=\u30dd\u30fc\u30e9\u30f3\u30c9\u8a9e
-languages.ace=\u30a2\u30c1\u30a7\u8a9e
+languages.ace=\u30a2\u30c1\u30a7\u30fc\u8a9e
languages.pi=\u30d1\u30fc\u30ea\u8a9e
languages.pa=\u30d1\u30f3\u30b8\u30e3\u30d6\u8a9e
-languages.bug=\u30d6\u30ae\u30b9\u8a9e
+languages.bug=\u30d6\u30ae\u8a9e
languages.iba=\u30a4\u30d0\u30f3\u8a9e
languages.sms=\u30b9\u30b3\u30eb\u30c8\u30fb\u30b5\u30fc\u30df\u8a9e
languages.bua=\u30d6\u30ea\u30e4\u30fc\u30c8\u8a9e
languages.mas=\u30de\u30b5\u30a4\u8a9e
languages.smn=\u30a4\u30ca\u30ea\u30fb\u30b5\u30fc\u30df\u8a9e
languages.os=\u30aa\u30bb\u30c8\u8a9e
-languages.map=\u30aa\u30fc\u30b9\u30c8\u30ed\u30cd\u30b7\u30a2\u8a9e
+languages.map=\u30aa\u30fc\u30b9\u30c8\u30ed\u30cd\u30b7\u30a2\u8af8\u8a9e
languages.or=\u30aa\u30ea\u30e4\u30fc\u8a9e
languages.man=\u30de\u30f3\u30c7\u30a3\u30f3\u30b4\u8a9e
languages.smj=\u30eb\u30ec\u30fb\u30b5\u30fc\u30df\u8a9e
@@ -1206,25 +740,25 @@ languages.my=\u30d3\u30eb\u30de\u8a9e
languages.lez=\u30ec\u30ba\u30ae\u8a9e
languages.mt=\u30de\u30eb\u30bf\u8a9e
languages.peo=\u53e4\u4ee3\u30da\u30eb\u30b7\u30a2\u8a9e (\u7d04600-400 B.C.)
-languages.ms=\u30de\u30e9\u30a4\u8a9e
+languages.ms=\u30de\u30ec\u30fc\u8a9e
languages.mr=\u30de\u30e9\u30fc\u30c6\u30a3\u30fc\u8a9e
languages.fro=\u53e4\u30d5\u30e9\u30f3\u30b9\u8a9e (842-\u7d041400)
languages.mo=\u30e2\u30eb\u30c0\u30d3\u30a2\u8a9e
-languages.frm=\u4e2d\u4e16\u30d5\u30e9\u30f3\u30b9\u8a9e (\u7d041400-1600)
languages.mn=\u30e2\u30f3\u30b4\u30eb\u8a9e
+languages.frm=\u4e2d\u4e16\u30d5\u30e9\u30f3\u30b9\u8a9e (\u7d041400-1600)
+languages.ml=\u30de\u30e9\u30e4\u30fc\u30e9\u30e0\u8a9e
languages.jrb=\u30e6\u30c0\u30e4\u30fb\u30a2\u30e9\u30d3\u30a2\u8a9e
-languages.ml=\u30de\u30e9\u30e4\u2015\u30e9\u30e0\u8a9e
languages.mk=\u30de\u30b1\u30c9\u30cb\u30a2\u8a9e
languages.mi=\u30de\u30aa\u30ea\u8a9e
languages.mh=\u30de\u30fc\u30b7\u30e3\u30eb\u8a9e
languages.mg=\u30de\u30e9\u30ac\u30b7\u30fc\u8a9e
languages.mwr=\u30de\u30fc\u30eb\u30ef\u30fc\u30ea\u30fc\u8a9e
languages.bra=\u30d6\u30e9\u30b8\u8a9e
-languages.den=\u30b9\u30ec\u30a4\u30d3\u30fc\u8a9e
languages.lv=\u30e9\u30c8\u30d3\u30a2\u8a9e
+languages.den=\u30b9\u30ec\u30a4\u30d3\u30fc\u8a9e
languages.lu=\u30eb\u30d0\u30fb\u30ab\u30bf\u30f3\u30ac\u8a9e
-languages.del=\u30c7\u30e9\u30a6\u30a7\u30a2\u8a9e
languages.lt=\u30ea\u30c8\u30a2\u30cb\u30a2\u8a9e
+languages.del=\u30c7\u30e9\u30a6\u30a7\u30a2\u8a9e
languages.lo=\u30e9\u30aa\u8a9e
languages.ln=\u30ea\u30f3\u30ac\u30e9\u8a9e
languages.li=\u30ea\u30f3\u30d6\u30eb\u30d5\u8a9e
@@ -1277,38 +811,38 @@ languages.iu=\u30a4\u30cc\u30af\u30a6\u30c6\u30a3\u30c8\u30c3\u30c8\u8a9e
languages.pap=\u30d1\u30d4\u30a2\u30e1\u30f3\u30c8\u8a9e
languages.it=\u30a4\u30bf\u30ea\u30a2\u8a9e
languages.sgn=\u624b\u307e\u306d\u8a00\u8a9e
-languages.is=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9\u8a9e
languages.kha=\u30ab\u30b7\u8a9e
+languages.is=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9\u8a9e
languages.chr=\u30c1\u30a7\u30ed\u30ad\u30fc\u8a9e
languages.pam=\u30d1\u30f3\u30d1\u30f3\u30ac\u8a9e
languages.pal=\u30d1\u30d5\u30e9\u30f4\u30a3\u8a9e
languages.chp=\u30c1\u30da\u30ef\u30a4\u30a2\u30f3\u8a9e
-languages.io=\u30a4\u30c9\u8a9e
languages.cho=\u30c1\u30e7\u30af\u30c8\u30fc\u8a9e
-languages.chn=\u30c1\u30cc\u30fc\u30af\u30fb\u30b8\u30e3\u30fc\u30b4\u30f3
+languages.io=\u30a4\u30c9\u8a9e
+languages.chn=\u30d3\u30fc\u30c1\u30fb\u30e9\u30fb\u30de\u30fc \u7b49
languages.chm=\u30de\u30ea\u8a9e
languages.tyv=\u30c8\u30a5\u30f4\u30a1\u8a9e
-languages.bnt=\u30d0\u30f3\u30c8\u30a5\u8a9e
+languages.bnt=\u30d0\u30f3\u30c8\u30a5\u8af8\u8a9e
languages.pag=\u30d1\u30f3\u30ac\u30b7\u30ca\u30f3\u8a9e
-languages.ik=\u30a4\u30cc\u30d4\u30a2\u30c3\u30af\u8a9e
languages.chk=\u30c1\u30e5\u30fc\u30af\u8a9e
-languages.ii=\u56db\u5ddd\u30a4\u8a9e
+languages.ik=\u30a4\u30cc\u30d4\u30a2\u30c3\u30af\u8a9e
languages.haw=\u30cf\u30ef\u30a4\u8a9e
+languages.ii=\u56db\u5ddd\u30a4\u8a9e
languages.lam=\u30e9\u30f3\u30d0\u8a9e
-languages.ig=\u30a4\u30dc\u8a9e
languages.chg=\u30c1\u30e3\u30ac\u30bf\u30a4\u8a9e
+languages.ig=\u30a4\u30dc\u8a9e
languages.sga=\u53e4\u671f\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u8a9e (900\u307e\u3067)
languages.paa=\u30d1\u30d7\u30a2\u8af8\u8a9e
languages.ie=\u56fd\u969b\u8a9e
languages.id=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u8a9e
languages.lah=\u30e9\u30d5\u30f3\u30c0\u30fc\u8a9e
-languages.day=\u30c0\u30e4\u30af\u8a9e
languages.chb=\u30c1\u30d6\u30c1\u30e3\u8a9e
+languages.day=\u30c0\u30e4\u30af\u8a9e
languages.ia=\u56fd\u969b\u8a9e
languages.lad=\u30e9\u30b8\u30ce\u8a9e
-languages.hz=\u30d8\u30ec\u30ed\u8a9e
-languages.hai=\u30cf\u30a4\u30c0\u8a9e
languages.dar=\u30c0\u30eb\u30ac\u30f3\u8a9e
+languages.hai=\u30cf\u30a4\u30c0\u8a9e
+languages.hz=\u30d8\u30ec\u30ed\u8a9e
languages.hy=\u30a2\u30eb\u30e1\u30cb\u30a2\u8a9e
languages.ath=\u30a2\u30b5\u30d1\u30b9\u30ab\u30f3\u8a9e\u65cf
languages.hu=\u30cf\u30f3\u30ac\u30ea\u30fc\u8a9e
@@ -1317,7 +851,7 @@ languages.dak=\u30c0\u30b3\u30bf\u8a9e
languages.hr=\u30af\u30ed\u30a2\u30c1\u30a2\u8a9e
languages.ho=\u30d2\u30ea\u30e2\u30c8\u30a5\u8a9e
languages.hi=\u30d2\u30f3\u30c7\u30a3\u30fc\u8a9e
-languages.dyu=\u30b8\u30e5\u30e9\u8a9e
+languages.dyu=\u30c7\u30a5\u30a6\u30e9\u8a9e
languages.he=\u30d8\u30d6\u30e9\u30a4\u8a9e
languages.ast=\u30a2\u30b9\u30c8\u30a5\u30ea\u30a2\u30b9\u8a9e
languages.ha=\u30cf\u30a6\u30b5\u8a9e
@@ -1330,9 +864,9 @@ languages.iro=\u30a4\u30ed\u30b3\u30a4\u8a9e\u65cf
languages.gn=\u30b0\u30ef\u30e9\u30cb\u8a9e
languages.gl=\u30ac\u30ea\u30b7\u30a2\u8a9e
languages.arw=\u30a2\u30e9\u30ef\u30af\u8a9e
-languages.gez=\u30b2\u30a8\u30ba\u8a9e
-languages.art=\u4eba\u5de5\u8af8\u8a9e
languages.gd=\u30b9\u30b3\u30c3\u30c8\u30e9\u30f3\u30c9\u30fb\u30b2\u30fc\u30eb\u8a9e
+languages.art=\u4eba\u5de5\u8af8\u8a9e
+languages.gez=\u30b2\u30a8\u30ba\u8a9e
languages.ira=\u30a4\u30e9\u30f3\u8a9e
languages.ga=\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u8a9e
languages.arp=\u30a2\u30e9\u30d1\u30db\u30fc\u8a9e
@@ -1341,8 +875,8 @@ languages.fy=\u30d5\u30ea\u30b8\u30a2\u8a9e
languages.bla=\u30b7\u30af\u30b7\u30ab\u8a9e
languages.gem=\u30b2\u30eb\u30de\u30f3\u8af8\u8a9e
languages.ypk=\u30e6\u30d4\u30c3\u30af\u8a9e\u65cf
-languages.arc=\u30a2\u30e9\u30e0\u8a9e
languages.fr=\u30d5\u30e9\u30f3\u30b9\u8a9e
+languages.arc=\u30a2\u30e9\u30e0\u8a9e
languages.fo=\u30d5\u30a7\u30ed\u30fc\u8a9e
languages.cel=\u30b1\u30eb\u30c8\u8af8\u8a9e
languages.fj=\u30d5\u30a3\u30b8\u30fc\u8a9e
@@ -1366,9 +900,9 @@ languages.tum=\u30c8\u30a5\u30f3\u30d6\u30ab\u8a9e
languages.mos=\u30e2\u30b7\u8a9e
languages.dz=\u30d6\u30fc\u30bf\u30f3\u8a9e
languages.nic=\u30cb\u30b8\u30a7\u30fc\u30eb\u30fb\u30b3\u30eb\u30c9\u30d5\u30a1\u30f3\u8af8\u8a9e
-languages.lus=\u30eb\u30b7\u30e3\u30a4\u8a9e
-languages.fiu=\u30d5\u30a3\u30f3\u30fb\u30a6\u30b4\u30eb\u8af8\u8a9e
languages.dv=\u30c7\u30a3\u30f4\u30a7\u30d2\u8a9e
+languages.fiu=\u30d5\u30a3\u30f3\u30fb\u30a6\u30b4\u30eb\u8af8\u8a9e
+languages.lus=\u30eb\u30b7\u30e3\u30a4\u8a9e
languages.nia=\u30cb\u30a2\u30b9\u8a9e
languages.moh=\u30e2\u30fc\u30db\u30fc\u30af\u8a9e
languages.luo=\u30eb\u30aa\u8a9e
@@ -1384,15 +918,15 @@ languages.was=\u30ef\u30b7\u30e7\u8a9e
languages.und=\u975e\u78ba\u5b9a
languages.war=\u30ef\u30e9\u30a4\u8a9e
languages.da=\u30c7\u30f3\u30de\u30fc\u30af\u8a9e
-languages.dum=\u4e2d\u4e16\u30aa\u30e9\u30f3\u30c0\u8a9e (\u7d041050-1350)
+languages.dum=\u4e2d\u4e16\u30aa\u30e9\u30f3\u30c0\u8a9e
languages.wal=\u30ef\u30c3\u30e9\u30e2\u8a9e
languages.mno=\u30de\u30ce\u30dc\u8a9e\u65cf
languages.wak=\u30ef\u30ab\u30b7\u8a9e\u65cf
languages.sat=\u30b5\u30f3\u30bf\u30fc\u30ea\u30fc\u8a9e
languages.cy=\u30a6\u30a7\u30fc\u30eb\u30ba\u8a9e
languages.sas=\u30b5\u30b5\u30af\u8a9e
-languages.kbd=\u30ab\u30d0\u30eb\u30c9\u8a9e
languages.cv=\u30c1\u30e5\u30f4\u30a1\u30b7\u30e5\u8a9e
+languages.kbd=\u30ab\u30d0\u30eb\u30c9\u8a9e
languages.cu=\u6559\u4f1a\u30b9\u30e9\u30d6\u8a9e
languages.mni=\u30de\u30cb\u30d7\u30eb\u8a9e
languages.cs=\u30c1\u30a7\u30b3\u8a9e
@@ -1404,41 +938,41 @@ languages.co=\u30b3\u30eb\u30b7\u30ab\u8a9e
languages.sai=\u5357\u7c73\u30a4\u30f3\u30c7\u30a3\u30a2\u30f3\u8af8\u8a9e
languages.mnc=\u6e80\u5dde\u8a9e
languages.sah=\u30e4\u30af\u30fc\u30c8\u8a9e
-languages.kaw=\u30ab\u30a6\u30a3\u8a9e
-languages.inh=\u30a4\u30f3\u30b0\u30b7\u8a9e
languages.gba=\u30d0\u30e4\u8a9e
+languages.inh=\u30a4\u30f3\u30b0\u30b7\u8a9e
+languages.kaw=\u30ab\u30a6\u30a3\u8a9e
languages.sad=\u30b5\u30f3\u30c0\u30a6\u30a7\u8a9e
languages.ch=\u30c1\u30e3\u30e2\u30ed\u8a9e
+languages.bho=\u30dc\u30fc\u30b8\u30d7\u30ea\u30fc\u8a9e
languages.ine=\u5370\u6b27\u8af8\u8a9e
-languages.bho=\u30dc\u30fc\u30b8\u30e5\u30d7\u30ea\u30fc\u8a9e
-languages.enm=\u4e2d\u4e16\u82f1\u8a9e (1100-1500)
-languages.kar=\u30ab\u30ec\u30f3\u8a9e
-languages.inc=\u30a4\u30f3\u30c9\u8af8\u8a9e
+languages.enm=\u4e2d\u4e16\u82f1\u8a9e
languages.ce=\u30c1\u30a7\u30c1\u30a7\u30f3\u8a9e
+languages.inc=\u30a4\u30f3\u30c9\u8af8\u8a9e
+languages.kar=\u30ab\u30ec\u30f3\u8a9e
languages.gay=\u30ac\u30e8\u8a9e
languages.ca=\u30ab\u30bf\u30ed\u30cb\u30a2\u8a9e
languages.umb=\u30a6\u30f3\u30d6\u30f3\u30c9\u30a5\u8a9e
languages.syr=\u30b7\u30ea\u30a2\u8a9e
languages.kam=\u30ab\u30f3\u30d0\u8a9e
languages.tsi=\u30c1\u30e0\u30b7\u30e5\u8a9e
-languages.ang=\u53e4\u671f\u82f1\u8a9e (\u7d04450-1100)
-languages.kac=\u30ab\u30c1\u30f3\u8a9e
+languages.ang=\u53e4\u671f\u82f1\u8a9e
languages.cau=\u30b3\u30fc\u30ab\u30b5\u30b9\u8af8\u8a9e
+languages.kac=\u30ab\u30c1\u30f3\u8a9e
languages.kab=\u30ab\u30d3\u30eb\u8a9e
-languages.kaa=\u30ab\u30e9\u30fb\u30ab\u30eb\u30d1\u30af\u8a9e
languages.bs=\u30dc\u30b9\u30cb\u30a2\u8a9e
-languages.car=\u30ab\u30ea\u30d6\u8a9e
+languages.kaa=\u30ab\u30e9\u30fb\u30ab\u30eb\u30d1\u30af\u8a9e
languages.br=\u30d6\u30eb\u30c8\u30f3\u8a9e
+languages.car=\u30ab\u30ea\u30d6\u8a9e
languages.bo=\u30c1\u30d9\u30c3\u30c8\u8a9e
languages.bn=\u30d9\u30f3\u30ac\u30eb\u8a9e
languages.bm=\u30d0\u30f3\u30d0\u30e9\u8a9e
languages.gaa=\u30ac\u8a9e
-languages.cai=\u4e2d\u7c73\u30a4\u30f3\u30c7\u30a3\u30a2\u30f3\u8af8\u8a9e
languages.bi=\u30d3\u30b9\u30e9\u30de\u8a9e
-languages.bh=\u30d3\u30cf\u2015\u30eb\u8a9e
+languages.cai=\u4e2d\u7c73\u30a4\u30f3\u30c7\u30a3\u30a2\u30f3\u8af8\u8a9e
+languages.bh=\u30d3\u30cf\u30fc\u30eb\u8a9e
languages.bg=\u30d6\u30eb\u30ac\u30ea\u30a2\u8a9e
languages.be=\u30d9\u30e9\u30eb\u30fc\u30b7\u8a9e
-languages.cad=\u30ab\u30c9\u8a9e
+languages.cad=\u30ab\u30c9\u30fc\u8a9e
languages.ba=\u30d0\u30b7\u30ad\u30fc\u30eb\u8a9e
languages.zu=\u30ba\u30fc\u30eb\u30fc\u8a9e
languages.zen=\u30bc\u30ca\u30ac\u8a9e
@@ -1448,10 +982,10 @@ languages.az=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3\u8a9e
languages.ay=\u30a2\u30a4\u30de\u30e9\u8a9e
languages.av=\u30a2\u30f4\u30a1\u30eb\u8a9e
languages.as=\u30a2\u30c3\u30b5\u30e0\u8a9e
-languages.dsb=\u4f4e\u30bd\u30eb\u30d3\u30a2\u8a9e
languages.ar=\u30a2\u30e9\u30d3\u30a2\u8a9e
-languages.ilo=\u30a4\u30ed\u30ab\u30ce\u8a9e
+languages.dsb=\u4f4e\u30bd\u30eb\u30d3\u30a2\u8a9e
languages.elx=\u30a8\u30e9\u30e0\u8a9e
+languages.ilo=\u30a4\u30ed\u30ab\u30ce\u8a9e
languages.zh=\u4e2d\u56fd\u8a9e
languages.an=\u30a2\u30e9\u30b4\u30f3\u8a9e
languages.pra=\u30d7\u30e9\u30fc\u30af\u30ea\u30c3\u30c8\u8a9e\u65cf
@@ -1464,15 +998,15 @@ languages.ae=\u30a2\u30f4\u30a7\u30b9\u30bf\u8a9e
languages.ab=\u30a2\u30d6\u30cf\u30ba\u8a9e
languages.aa=\u30a2\u30d5\u30a1\u30fc\u30eb\u8a9e
languages.yo=\u30e8\u30eb\u30d0\u8a9e
-languages.alg=\u30a2\u30eb\u30b4\u30f3\u30ad\u30f3\u8a9e\u65cf
-languages.ale=\u30a2\u30ea\u30e5\u30fc\u30c8\u8a9e
+languages.alg=\u30a2\u30eb\u30b4\u30f3\u30ad\u30a2\u30f3\u8a9e\u65cf
+languages.ale=\u30a2\u30ec\u30a6\u30c8\u8a9e
languages.mkh=\u30e2\u30f3\u30fb\u30af\u30e1\u30fc\u30eb\u8af8\u8a9e
languages.yi=\u30a4\u30c7\u30a3\u30c3\u30b7\u30e5\u8a9e
languages.dra=\u30c9\u30e9\u30f4\u30a3\u30c0\u8af8\u8a9e
-languages.ber=\u30d9\u30eb\u30d9\u30eb\u8a9e
+languages.ber=\u30d9\u30eb\u30d9\u30eb\u8af8\u8a9e
languages.nds=\u4f4e\u5730\u30c9\u30a4\u30c4\u8a9e\u3001\u4f4e\u5730\u30b5\u30af\u30bd\u30f3\u8a9e
languages.bem=\u30d9\u30f3\u30d0\u8a9e
languages.bej=\u30d9\u30b8\u30e3\u8a9e
languages.tpi=\u30c8\u30af\u30fb\u30d4\u30b7\u30f3\u8a9e
-variants.POSIX=\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc
+variants.POSIX=\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf
variants.REVISED=\u6539\u8a02\u7248
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja_JP.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja_JP.properties
index d4ca5fa..2244e89 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja_JP.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ja_JP.properties
@@ -5,4 +5,4 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4#,##0;-\u00a4#,##0
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ka.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ka.properties
index 67e66fb..c0562be 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ka.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ka.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.GEL=GEL
currenciesSymbol.GEL=Lari
territories.TJ=\u10e2\u10d0\u10ef\u10d8\u10d9\u10d4\u10d7\u10d8
territories.TH=\u10e2\u10d0\u10d8\u10da\u10d0\u10dc\u10d3\u10d8
@@ -70,11 +69,12 @@ territories.PK=\u10de\u10d0\u10d9\u10d8\u10e1\u10e2\u10d0\u10dc\u10d8
territories.PH=\u10e4\u10d8\u10da\u10d8\u10de\u10d8\u10dc\u10d4\u10d1\u10d8
territories.PG=\u10de\u10d0\u10de\u10e3\u10d0-\u10d0\u10ee\u10d0\u10da\u10d8 \u10d2\u10d5\u10d8\u10dc\u10d4\u10d0
territories.CZ=\u10e9\u10d4\u10ee\u10d4\u10d7\u10d8\u10e1 \u10e0\u10d4\u10e1\u10de\u10e3\u10d1\u10da\u10d8\u10d9\u10d0
-territories.PE=\u10de\u10d4\u10e0\u10e3
territories.CY=\u10d9\u10d5\u10d8\u10de\u10e0\u10dd\u10e1\u10d8
+territories.PE=\u10de\u10d4\u10e0\u10e3
territories.CV=\u10d9\u10d0\u10d1\u10dd-\u10d5\u10d4\u10e0\u10d3\u10d4
-territories.PA=\u10de\u10d0\u10dc\u10d0\u10db\u10d0
territories.CU=\u10d9\u10e3\u10d1\u10d0
+territories.PA=\u10de\u10d0\u10dc\u10d0\u10db\u10d0
+territories.CS=\u10e1\u10d4\u10e0\u10d1\u10d8\u10d0
territories.CR=\u10d9\u10dd\u10e1\u10e2\u10d0-\u10e0\u10d8\u10d9\u10d0
territories.CO=\u10d9\u10dd\u10da\u10e3\u10db\u10d1\u10d8\u10d0
territories.CN=\u10e9\u10d8\u10dc\u10d4\u10d7\u10d8
@@ -92,45 +92,45 @@ territories.BW=\u10d1\u10dd\u10e2\u10e1\u10d5\u10d0\u10dc\u10d0
territories.BT=\u10d1\u10e3\u10e2\u10d0\u10dc\u10d8
territories.BS=\u10d1\u10d0\u10f0\u10d0\u10db\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8
territories.BR=\u10d1\u10e0\u10d0\u10d6\u10d8\u10da\u10d8\u10d0
-territories.NZ=\u10d0\u10ee\u10d0\u10da\u10d8 \u10d6\u10d4\u10da\u10d0\u10dc\u10d3\u10d8\u10d0
territories.BO=\u10d1\u10dd\u10da\u10d8\u10d5\u10d8\u10d0
+territories.NZ=\u10d0\u10ee\u10d0\u10da\u10d8 \u10d6\u10d4\u10da\u10d0\u10dc\u10d3\u10d8\u10d0
territories.BN=\u10d1\u10e0\u10e3\u10dc\u10d4\u10d8
territories.BJ=\u10d1\u10d4\u10dc\u10d8\u10dc\u10d8
territories.BI=\u10d1\u10e3\u10e0\u10e3\u10dc\u10d3\u10d8
territories.BH=\u10d1\u10d0\u10f0\u10e0\u10d4\u10d8\u10dc\u10d8
-territories.NR=\u10dc\u10d0\u10e3\u10e0\u10e3
territories.BG=\u10d1\u10e3\u10da\u10d2\u10d0\u10e0\u10d4\u10d7\u10d8
+territories.NR=\u10dc\u10d0\u10e3\u10e0\u10e3
territories.BF=\u10d1\u10e3\u10e0\u10d9\u10d8\u10dc\u10d0-\u10e4\u10d0\u10e1\u10dd
-territories.NP=\u10dc\u10d4\u10de\u10d0\u10da\u10d8
territories.BE=\u10d1\u10d4\u10da\u10d2\u10d8\u10d0
-territories.NO=\u10dc\u10dd\u10e0\u10d5\u10d4\u10d2\u10d8\u10d0
+territories.NP=\u10dc\u10d4\u10de\u10d0\u10da\u10d8
territories.BD=\u10d1\u10d0\u10dc\u10d2\u10da\u10d0\u10d3\u10d4\u10e8\u10d8
+territories.NO=\u10dc\u10dd\u10e0\u10d5\u10d4\u10d2\u10d8\u10d0
territories.BB=\u10d1\u10d0\u10e0\u10d1\u10d0\u10d3\u10dd\u10e1\u10d8
territories.ZW=\u10d6\u10d8\u10db\u10d1\u10d0\u10d1\u10d5\u10d4
-territories.NL=\u10dc\u10d8\u10d3\u10d4\u10e0\u10da\u10d0\u10dc\u10d3\u10d4\u10d1\u10d8
territories.BA=\u10d1\u10dd\u10e1\u10dc\u10d8\u10d0 \u10d3\u10d0 \u10f0\u10d4\u10e0\u10ea\u10d4\u10d2\u10dd\u10d5\u10d8\u10dc\u10d0
+territories.NL=\u10dc\u10d8\u10d3\u10d4\u10e0\u10da\u10d0\u10dc\u10d3\u10d4\u10d1\u10d8
territories.NI=\u10dc\u10d8\u10d9\u10d0\u10e0\u10d0\u10d2\u10e3\u10d0
territories.NG=\u10dc\u10d8\u10d2\u10d4\u10e0\u10d8\u10d0
territories.AZ=\u10d0\u10d6\u10d4\u10e0\u10d1\u10d0\u10d8\u10ef\u10d0\u10dc\u10d8
territories.NE=\u10dc\u10d8\u10d2\u10d4\u10e0\u10d8
territories.ZM=\u10d6\u10d0\u10db\u10d1\u10d8\u10d0
-territories.AU=\u10d0\u10d5\u10e1\u10e2\u10e0\u10d0\u10da\u10d8\u10d0
territories.NA=\u10dc\u10d0\u10db\u10d8\u10d1\u10d8\u10d0
+territories.AU=\u10d0\u10d5\u10e1\u10e2\u10e0\u10d0\u10da\u10d8\u10d0
territories.AT=\u10d0\u10d5\u10e1\u10e2\u10e0\u10d8\u10d0
territories.AR=\u10d0\u10e0\u10d2\u10d4\u10dc\u10e2\u10d8\u10dc\u10d0
-territories.MZ=\u10db\u10dd\u10d6\u10d0\u10db\u10d1\u10d8\u10d9\u10d8
territories.AO=\u10d0\u10dc\u10d2\u10dd\u10da\u10d0
+territories.MZ=\u10db\u10dd\u10d6\u10d0\u10db\u10d1\u10d8\u10d9\u10d8
territories.MY=\u10db\u10d0\u10da\u10d0\u10d8\u10d6\u10d8\u10d0
-territories.MX=\u10db\u10d4\u10e5\u10e1\u10d8\u10d9\u10d0
territories.AM=\u10e1\u10d0\u10e1\u10dd\u10db\u10ee\u10d4\u10d7\u10d8
-territories.MW=\u10db\u10d0\u10da\u10d0\u10d5\u10d8
+territories.MX=\u10db\u10d4\u10e5\u10e1\u10d8\u10d9\u10d0
territories.AL=\u10d0\u10da\u10d1\u10d0\u10dc\u10d4\u10d7\u10d8
+territories.MW=\u10db\u10d0\u10da\u10d0\u10d5\u10d8
territories.MV=\u10db\u10d0\u10da\u10d3\u10d8\u10d5\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8
territories.ZA=\u10e1\u10d0\u10db\u10ee\u10e0\u10d4\u10d7 \u10d0\u10e4\u10e0\u10d8\u10d9\u10d0
territories.MU=\u10db\u10d0\u10d5\u10e0\u10d8\u10d9\u10d8\u10d0
territories.MT=\u10db\u10d0\u10da\u10e2\u10d0
-territories.MR=\u10db\u10d0\u10d5\u10e0\u10d8\u10e2\u10d0\u10dc\u10d8\u10d0
territories.AG=\u10d0\u10dc\u10e2\u10d8\u10d2\u10e3\u10d0 \u10d3\u10d0 \u10d1\u10d0\u10e0\u10d1\u10e3\u10d3\u10d0
+territories.MR=\u10db\u10d0\u10d5\u10e0\u10d8\u10e2\u10d0\u10dc\u10d8\u10d0
territories.AF=\u10d0\u10d5\u10e6\u10d0\u10dc\u10d4\u10d7\u10d8
territories.AE=\u10d0\u10e0\u10d0\u10d1\u10d4\u10d7\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10d4\u10db\u10d8\u10e0\u10d0\u10e2\u10d4\u10d1\u10d8
territories.AD=\u10d0\u10dc\u10d3\u10dd\u10e0\u10d0
@@ -138,7 +138,6 @@ territories.MN=\u10db\u10dd\u10dc\u10e6\u10dd\u10da\u10d4\u10d7\u10d8
territories.MM=\u10db\u10d8\u10d0\u10dc\u10db\u10d0\u10e0\u10d8
territories.ML=\u10db\u10d0\u10da\u10d8
territories.MK=\u10db\u10d0\u10d9\u10d4\u10d3\u10dd\u10dc\u10d8\u10d0
-territories.YU=\u10e1\u10d4\u10e0\u10d1\u10d8\u10d0
territories.MH=\u10db\u10d0\u10e0\u10e8\u10d0\u10da\u10d8\u10e1 \u10d9\u10e3\u10dc\u10eb\u10e3\u10da\u10d4\u10d1\u10d8
territories.MG=\u10db\u10d0\u10d3\u10d0\u10d2\u10d0\u10e1\u10d9\u10d0\u10e0\u10d8
territories.MD=\u10db\u10dd\u10da\u10d3\u10dd\u10d5\u10d0
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kk.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kk.properties
index ee9c4dd..0782017 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kk.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kk.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.KZT=KZT
currenciesSymbol.KZT=\u0442\u04a3\u0433.
shortMonths=\u049b\u0430\u04a3.®\u0430\u049b\u043f.®\u043d\u0430\u0443.®\u0441\u04d9\u0443.®\u043c\u0430\u043c.®\u043c\u0430\u0443.®\u0448\u0456\u043b.®\u0442\u0430\u043c.®\u049b\u044b\u0440.®\u049b\u0430\u0437.®\u049b\u0430\u0440.®\u0436\u0435\u043b\u0442.®®
months=\u049b\u0430\u04a3\u0442\u0430\u0440®\u0430\u049b\u043f\u0430\u043d®\u043d\u0430\u0443\u0440\u044b\u0437®\u0441\u04d9\u0443\u0456\u0440®\u043c\u0430\u043c\u044b\u0440®\u043c\u0430\u0443\u0441\u044b\u043c®\u0448\u0456\u043b\u0434\u0435®\u0442\u0430\u043c\u044b\u0437®\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a®\u049b\u0430\u0437\u0430\u043d®\u049b\u0430\u0440\u0430\u0448\u0430®\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kl.properties
index 4cad25f..bee1c6a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kl.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.DKK=DKK
currenciesSymbol.DKK=kr
shortMonths=jan®feb®mar®apr®maj®jun®jul®aug®sep®okt®nov®dec®®
months=januari®februari®martsi®aprili®maji®juni®juli®augustusi®septemberi®oktoberi®novemberi®decemberi®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_km.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_km.properties
index d772ce6..fc979d3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_km.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_km.properties
@@ -13,7 +13,9 @@ currenciesSymbol.KHR=\u17db
shortMonths=\u17e1®\u17e2®\u17e3®\u17e4®\u17e5®\u17e6®\u17e7®\u17e8®\u17e9®\u17e1\u17e0®\u17e1\u17e1®\u17e1\u17e2®®
months=\u1798\u1780\u179a\u17b6®\u1780\u17bb\u1798\u17d2\u1797\u17c8®\u1798\u17b7\u1793\u17b6®\u1798\u17c1\u179f\u17b6®\u17a7\u179f\u1797\u17b6®\u1798\u17b7\u1790\u17bb\u1793\u17b6®\u1780\u1780\u17d2\u1780\u178a\u17b6®\u179f\u17b8\u17a0\u17b6®\u1780\u1789\u17d2\u1789\u17b6®\u178f\u17bb\u179b\u17b6®\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6®\u1792\u17d2\u1793\u17bc®®
shortWeekdays=®\u17a2\u17b6®\u1785®\u17a2®\u1796\u17bb®\u1796\u17d2\u179a®\u179f\u17bb®\u179f®
-weekdays=®\u1790\u17d2\u1784\u17c3\u200b\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799®\u1790\u17d2\u1784\u17c3\u200b\u1785\u17d0\u1793\u17d2\u1791®\u1790\u17d2\u1784\u17c3\u200b\u17a2\u1784\u17d2\u1782\u17b6\u179a®\u1790\u17d2\u1784\u17c3\u200b\u1796\u17bb\u1792®\u1790\u17d2\u1784\u17c3\u200b\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd®\u1790\u17d2\u1784\u17c3\u200b\u179f\u17bb\u1780\u17d2\u179a®\u1790\u17d2\u1784\u17c3\u200b\u179f\u17c5\u179a\u17cd®
+weekdays=®\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799®\u200b\u1790\u17d2\u1784\u17c3\u1785\u17d0\u1793\u17d2\u1791®\u1790\u17d2\u1784\u17c3\u17a2\u1784\u17d2\u1782\u17b6\u179a®\u1790\u17d2\u1784\u17c3\u1796\u17bb\u1792®\u1790\u17d2\u1784\u17c3\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd®\u1790\u17d2\u1784\u17c3\u179f\u17bb\u1780\u17d2\u179a®\u1790\u17d2\u1784\u17c3\u179f\u17c5\u179a\u17cd®
+firstDayOfWeek=mon
+eras=\u1798\u17bb\u1793\u200b\u1782.\u179f.®\u1782.\u179f.®
ampms=\u1796\u17d2\u179a\u17b9\u1780®\u179b\u17d2\u1784\u17b6\u1785®
shortDateFormat=d/M/yyyy
mediumDateFormat=d MMMM yyyy
@@ -55,8 +57,8 @@ territories.SA=\u17a2\u17b6\u179a\u17c9\u17b6\u1794\u17ca\u17b8\u179f\u17b6\u17a
territories.FR=\u1794\u17b6\u179a\u17b6\u17c6\u1784
territories.FM=\u1798\u17b7\u1780\u17d2\u179a\u17bc\u1793\u17c1\u179f\u17ca\u17b8
territories.RW=\u179a\u179c\u17c9\u17b6\u1793\u17cb\u178a\u17b6
-territories.RU=\u179a\u17bc\u179f\u17d2\u179f\u17ca\u17b8
territories.FJ=\u17a0\u17d2\u179c\u17c9\u17b8\u17a0\u17d2\u179f\u17c9\u17b8
+territories.RU=\u179a\u17bc\u179f\u17d2\u179f\u17ca\u17b8
territories.FI=\u17a0\u17d2\u179c\u17b6\u17c6\u1784\u17a1\u1784\u17cb
territories.RO=\u179a\u17bc\u1798\u17c9\u17b6\u1793\u17b8
territories.ET=\u17a2\u17c1\u178f\u17d2\u1799\u17bc\u1796\u17b8
@@ -82,11 +84,11 @@ territories.PK=\u1794\u17c9\u17b6\u1782\u17b8\u179f\u17d2\u1790\u17b6\u1793
territories.PH=\u17a0\u17d2\u179c\u17c9\u17b8\u179b\u17b8\u1796\u17b8\u1793
territories.PG=\u1794\u17c9\u17b6\u1796\u17bc\u17a2\u17b6\u1793\u17bc\u179c\u17c2\u179b\u17a0\u17d2\u1782\u17b8\u178e\u17c1
territories.CZ=\u179f\u17b6\u1792\u17b6\u179a\u178e\u179a\u178a\u17d2\u178b\u1786\u17c1\u1780
-territories.PE=\u1794\u17c9\u17c1\u179a\u17bc
territories.CY=\u179f\u17c9\u17b8\u1796\u179a\u17cd
+territories.PE=\u1794\u17c9\u17c1\u179a\u17bc
territories.CV=\u1780\u17b6\u1794\u179c\u17c2\u179a
-territories.PA=\u1794\u17c9\u17b6\u178e\u17b6\u1798\u17c9\u17b6
territories.CU=\u1782\u17bb\u1799\u1794\u17b6
+territories.PA=\u1794\u17c9\u17b6\u178e\u17b6\u1798\u17c9\u17b6
territories.CR=\u1780\u17bc\u179f\u17d2\u178f\u17b6\u179a\u17b8\u1780\u17b6
territories.CO=\u1780\u17bc\u17a1\u17bb\u17c6\u1794\u17ca\u17b8
territories.CN=\u1785\u17b7\u1793
@@ -104,36 +106,36 @@ territories.BW=\u1794\u17bb\u178f\u179f\u17d2\u179c\u17b6\u178e\u17b6
territories.BT=\u1794\u17ca\u17bc\u178f\u17b6\u1793
territories.BS=\u1794\u17b6\u17a0\u17b6\u1798\u17c9\u17b6
territories.BR=\u1794\u17d2\u179a\u17c1\u179f\u17ca\u17b8\u179b
-territories.NZ=\u1793\u17bc\u179c\u17c2\u179b\u17a0\u17d2\u179f\u17c1\u17a1\u1784\u17cb
territories.BO=\u1794\u17bc\u179b\u17b8\u179c\u17b8
+territories.NZ=\u1793\u17bc\u179c\u17c2\u179b\u17a0\u17d2\u179f\u17c1\u17a1\u1784\u17cb
territories.BN=\u1794\u17ca\u17d2\u179a\u17bb\u1799\u178e\u17c1
territories.BJ=\u1794\u17c1\u178e\u17b6\u17c6\u1784
territories.BI=\u1794\u17ca\u17bc\u179a\u17bb\u1793\u178c\u17b8
territories.BH=\u1794\u17b6\u179a\u17c9\u17c2\u1793
territories.BG=\u1794\u17ca\u17bb\u179b\u17a0\u17d2\u1782\u17b6\u179a\u17b8
territories.BF=\u1794\u17ca\u17bc\u179a\u1782\u17b8\u178e\u17b6\u17a0\u17d2\u179c\u17b6\u179f\u17bc
-territories.NP=\u1793\u17c1\u1794\u17c9\u17b6\u179b\u17cb
territories.BE=\u1794\u17c2\u179b\u17a0\u17d2\u179f\u17c9\u17b7\u1780
-territories.NO=\u1793\u17d0\u179a\u179c\u17c2\u179f
+territories.NP=\u1793\u17c1\u1794\u17c9\u17b6\u179b\u17cb
territories.BD=\u1794\u1784\u17cb\u1780\u17d2\u179b\u17b6\u178a\u17c1\u179f\u17d2\u17a0
+territories.NO=\u1793\u17d0\u179a\u179c\u17c2\u179f
territories.BB=\u1794\u17b6\u179a\u1794\u17b6\u178a\u17bc\u179f
territories.ZW=\u17a0\u17d2\u179f\u17ca\u17b8\u1798\u1794\u17b6\u1794\u179c\u17c9\u17c1
-territories.NL=\u17a0\u17bc\u179b\u17d2\u179b\u1784\u17cb
territories.BA=\u1794\u17bc\u179f\u17d2\u1793\u17c9\u17b8
+territories.NL=\u17a0\u17bc\u179b\u17d2\u179b\u1784\u17cb
territories.NI=\u1793\u17b8\u1780\u17b6\u179a\u17c9\u17b6\u17a0\u17d2\u1782\u17d0\u179a
territories.NG=\u1793\u17b8\u17a0\u17d2\u179f\u17c1\u179a\u17b8\u1799\u17c9\u17b6
territories.AZ=\u17a2\u17b6\u17a0\u17ca\u17d2\u179f\u17c2\u179a\u1794\u17c2\u17a0\u17d2\u179f\u1784\u17cb
territories.NE=\u1793\u17b8\u17a0\u17d2\u179f\u17c1\u179a
territories.ZM=\u17a0\u17d2\u179f\u17b6\u17c6\u1794\u17ca\u17b8
-territories.AU=\u17a2\u17bc\u179f\u17d2\u178f\u17d2\u179a\u17b6\u179b\u17b8
territories.NA=\u178e\u17b6\u1798\u17b8\u1794\u17ca\u17b8
+territories.AU=\u17a2\u17bc\u179f\u17d2\u178f\u17d2\u179a\u17b6\u179b\u17b8
territories.AT=\u17a2\u17bc\u1791\u17d2\u179a\u17b8\u179f
territories.AR=\u17a2\u17b6\u17a0\u17d2\u179f\u1784\u17cb\u1791\u17b8\u1793
-territories.MZ=\u1798\u17c9\u17bc\u17a0\u17d2\u179f\u17b6\u17c6\u1794\u17ca\u17b7\u1780
territories.AO=\u17a2\u1784\u17cb\u17a0\u17d2\u1782\u17c4\u17a1\u17b6
+territories.MZ=\u1798\u17c9\u17bc\u17a0\u17d2\u179f\u17b6\u17c6\u1794\u17ca\u17b7\u1780
territories.MY=\u1798\u17c9\u17b6\u179b\u17c1\u179f\u17c9\u17b8
-territories.MX=\u1798\u17c9\u17b7\u1785\u179f\u17b7\u1780
territories.AM=\u17a2\u17b6\u179a\u1798\u17c1\u1793\u17b8
+territories.MX=\u1798\u17c9\u17b7\u1785\u179f\u17b7\u1780
territories.AL=\u17a2\u17b6\u179b\u17cb\u1794\u17b6\u1793\u17b8
territories.ZA=\u17a2\u17b6\u17a0\u17d2\u179c\u17d2\u179a\u17b7\u1780\u1781\u17b6\u1784\u178f\u17d2\u1794\u17bc\u1784
territories.MU=\u1798\u17c9\u17bc\u179a\u17b8\u1791\u17bb\u179f
@@ -146,7 +148,6 @@ territories.MN=\u1798\u17c9\u17bb\u1784\u17a0\u17d2\u1782\u17c4\u179b\u17b8
territories.MM=\u1798\u17b8\u1799\u17c9\u17b6\u1793\u17cb\u1798\u17c9\u17b6
territories.ML=\u1798\u17c9\u17b6\u179b\u17b8
territories.MK=\u1798\u17c9\u17b6\u179f\u17c1\u178a\u1793
-territories.YU=\u1799\u17bc\u17a0\u17d2\u1782\u17c4\u179f\u17d2\u179b\u17b6\u179c\u17b8
territories.MG=\u1798\u17c9\u17b6\u178a\u17b6\u17a0\u17d2\u1780\u17b6\u179f\u17d2\u1780\u17b6\u179a
territories.MD=\u179f\u17b6\u1792\u17b6\u179a\u178e\u179a\u178a\u17d2\u178b\u1798\u17c9\u17bb\u179b\u178a\u17b6\u179c\u17b8
territories.MC=\u1798\u17c9\u17bc\u178e\u17b6\u1780\u17bc
@@ -240,8 +241,8 @@ languages.bm=\u1797\u17b6\u179f\u17b6\u1794\u17b6\u1798\u17d2\u1794\u17b6\u179a\
languages.bh=\u1797\u17b6\u179f\u17b6\u1794\u17b7\u17a0\u17b6\u179a
languages.bg=\u1797\u17b6\u179f\u17b6\u1794\u17ca\u17bb\u179b\u17a0\u17d2\u1780\u17b6\u179a\u17b8
languages.tt=\u1797\u17b6\u179f\u17b6\u178f\u17b6\u178f\u17b6\u179a
-languages.no=\u1797\u17b6\u179f\u17b6\u1793\u17d0\u179a\u179c\u17c2\u179f
languages.be=\u1797\u17b6\u179f\u17b6\u1794\u17c1\u17a1\u17b6\u179a\u17bb\u179f\u17d2\u179f
+languages.no=\u1797\u17b6\u179f\u17b6\u1793\u17d0\u179a\u179c\u17c2\u179f
languages.hi=\u1797\u17b6\u179f\u17b6\u17a0\u17c9\u17b7\u1793\u178c\u17b8
languages.tr=\u1797\u17b6\u179f\u17b6\u1791\u17bd\u179a\u1782\u17b8
languages.nl=\u1797\u17b6\u179f\u17b6\u17a0\u17bb\u179b\u17d2\u179b\u1784\u17cb
@@ -249,8 +250,8 @@ languages.zu=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u179f\u17c9\u17bc\u179b\u17bc
languages.to=\u1797\u17b6\u179f\u17b6\u178f\u17bb\u1784\u17a0\u17d2\u1782\u17c4
languages.he=\u1797\u17b6\u179f\u17b6\u17a0\u17c1\u1794\u17d2\u179a\u17b7
languages.tk=\u1797\u17b6\u179f\u17b6\u1791\u17bd\u1782\u1798\u17c1\u1793\u17b8\u179f\u17d2\u178f\u1784\u17cb
-languages.ne=\u1797\u17b6\u179f\u17b6\u1793\u17c1\u1794\u17c9\u17b6\u179b\u17cb
languages.az=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u17a0\u17ca\u17d2\u179f\u17c2\u179a\u1794\u17c2\u17a0\u17d2\u179f\u1784\u17cb
+languages.ne=\u1797\u17b6\u179f\u17b6\u1793\u17c1\u1794\u17c9\u17b6\u179b\u17cb
languages.ay=\u1797\u17b6\u179f\u17b6\u17a2\u17b8\u1798\u17c9\u17b6\u179a\u17c9\u17b6
languages.th=\u1797\u17b6\u179f\u17b6\u1790\u17c3
languages.tg=\u1797\u17b6\u179f\u17b6\u178f\u17b6\u178a\u17a0\u17d2\u179f\u17c9\u17b8\u1782\u17b8\u179f\u17d2\u178f\u1784\u17cb
@@ -262,24 +263,24 @@ languages.gu=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u1780\u17bb\u1799\u17c9\u17b6\
languages.an=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u179a\u17c9\u17b6\u17a0\u17d2\u1782\u17c4\u1793
languages.za=\u1797\u17b6\u179f\u17b6\u1785\u17bd\u1784
languages.mt=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179b\u17cb\u178f\u17b6
-languages.ms=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179b\u17c1\u179f\u17c9\u17b8
languages.gn=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u1780\u17bd\u179a\u17c9\u17b6\u1793\u17b8
+languages.ms=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179b\u17c1\u179f\u17c9\u17b8
languages.sw=\u1797\u17b6\u179f\u17b6\u179f\u17d2\u179c\u17b6\u17a0\u17c9\u17b8\u179b\u17b8
languages.mr=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179a\u17b6\u1792\u17b8
languages.sv=\u1797\u17b6\u179f\u17b6\u179f\u17ca\u17bb\u1799\u17a2\u17c2\u178a
languages.gl=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u1780\u17b6\u179b\u17b8\u179f\u17c9\u17b8
languages.su=\u1797\u17b6\u17c6\u179f\u17b6\u179f\u17ca\u17bc\u178a\u1784\u17cb
languages.af=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u17a0\u17d2\u179c\u17d2\u179a\u17b8\u1780\u17b6\u17a2\u17b6\u1793
-languages.mo=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17bb\u179b\u178a\u17b6\u179c\u17b8
languages.ae=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u179c\u17c2\u179f\u17d2\u178f\u1784\u17cb
+languages.mo=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17bb\u179b\u178a\u17b6\u179c\u17b8
languages.mn=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17bb\u1784\u17a0\u17d2\u1782\u17c4\u179b\u17b8
languages.sq=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u179b\u17cb\u1794\u17b6\u1793\u17b8
languages.ml=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u17a1\u17b6\u17a1\u17b6\u1799\u17c9\u17b6\u1793
-languages.mk=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179f\u17c1\u178a\u17bc\u1793\u17b8
languages.aa=\u1797\u17b6\u179f\u17b6\u17a2\u17b6\u17a0\u17d2\u179c\u17b6\u179a
+languages.mk=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u179f\u17c1\u178a\u17bc\u1793\u17b8
languages.so=\u1797\u17b6\u179f\u17b6\u179f\u17bc\u1798\u17c9\u17b6\u179b\u17b8
-languages.mi=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17c4\u179a\u17b8
languages.gd=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u1780\u17c2\u179b\u17b7\u1782
+languages.mi=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17c4\u179a\u17b8
languages.sm=\u1797\u17b6\u179f\u17b6\u179f\u17b6\u1798\u17bc\u17a2\u17b6
languages.sl=\u1797\u17b6\u179f\u17b6\u179f\u17d2\u179b\u17bc\u179c\u17c9\u17b6\u1793\u17b8
languages.mg=\u1797\u17b6\u179f\u17b6\u1798\u17c9\u17b6\u178a\u17b6\u17a0\u17d2\u1780\u17b6\u179f\u1780\u17b6\u179a
@@ -293,13 +294,13 @@ languages.fr=\u1797\u17b6\u179f\u17b6\u1794\u17b6\u179a\u17b6\u17c6\u1784
languages.lv=\u1797\u17b6\u179f\u17b6\u17a1\u17b6\u178f\u179c\u17b8\u1799\u17c9\u17b6
languages.lt=\u1797\u17b6\u179f\u17b6\u179b\u17b8\u1791\u17bb\u1799\u17a2\u17b6\u1793\u17b8
languages.ru=\u1797\u17b6\u179f\u17b6\u0e23\u0e31\u179a\u17bc\u179f\u17d2\u179f\u17c9\u17b8
-languages.lo=\u1797\u17b6\u179f\u17b6\u17a1\u17b6\u179c
languages.fj=\u17a0\u17d2\u179c\u17c9\u17b8\u17a0\u17d2\u179f\u17c9\u17b8
+languages.lo=\u1797\u17b6\u179f\u17b6\u17a1\u17b6\u179c
languages.fi=\u1797\u17b6\u179f\u17b6\u17a0\u17d2\u179c\u17b6\u17c6\u1784\u17a1\u1784\u17cb
languages.ro=\u1797\u17b6\u179f\u17b6\u179a\u17bc\u1798\u17c9\u17b6\u1793\u17b8
languages.rn=\u1797\u17b6\u179f\u17b6\u179a\u17bc\u1793\u17d2\u178c\u17b8
languages.la=\u1797\u17b6\u179f\u17b6\u17a1\u17b6\u178f\u17c6\u17b6\u1784
languages.xh=\u1797\u17b6\u179f\u17b6\u1783\u179f\u17b6
languages.eu=\u1797\u17b6\u179f\u17b6\u1794\u17b6\u179f\u17d2\u1780\u17c1
-languages.ky=\u1797\u17b6\u179f\u17b6\u1782\u17c0\u179a\u17a0\u17d2\u1782\u17b8\u179f\u17d2\u178f\u1784\u17cb
languages.et=\u1797\u17b6\u179f\u17b6\u17a2\u17c1\u179f\u17d2\u178f\u17bc\u1793\u17b8
+languages.ky=\u1797\u17b6\u179f\u17b6\u1782\u17c0\u179a\u17a0\u17d2\u1782\u17b8\u179f\u17d2\u178f\u1784\u17cb
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn.properties
index badc5a1..839c7df 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn.properties
@@ -5,7 +5,7 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesSymbol.INR=\u0930\u0941
+currenciesSymbol.INR=\u0cb0\u0cc2
shortMonths=\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0®\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0®\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd®\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd®\u0cae\u0cc6®\u0c9c\u0cc2\u0ca8\u0ccd®\u0c9c\u0cc1\u0cb2\u0cc8®\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd®\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd®\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd®\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd®\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd®®
months=\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0®\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0®\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd®\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd®\u0cae\u0cc6®\u0c9c\u0cc2\u0ca8\u0ccd®\u0c9c\u0cc1\u0cb2\u0cc8®\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd®\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd®\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd®\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd®\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd®®
shortWeekdays=®\u0cb0.®\u0cb8\u0ccb.®\u0cae\u0c82.®\u0cac\u0cc1.®\u0c97\u0cc1.®\u0cb6\u0cc1.®\u0cb6\u0ca8\u0cbf.®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn_IN.properties
index dd8ef56..857c9cc 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kn_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ko.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ko.properties
index 86ed719..ee2974d 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ko.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ko.properties
@@ -6,699 +6,241 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\uc694\ub974\ub2e8 \ub514\ub098\ub974
-currenciesDisplayName.XAU=\uae08
-currenciesDisplayName.FOK=\ud398\ub85c\uc81c\ub3c4 \ud06c\ub85c\ub108
-currenciesDisplayName.LBP=\ub808\ubc14\ub17c \ud30c\uc6b4\ub4dc
-currenciesDisplayName.EUR=\uc720\ub85c\ud654
-currenciesDisplayName.VND=\ubca0\ud2b8\ub0a8 \ub3d9
-currenciesDisplayName.TZS=\ud0c4\uc790\ub2c8\uc544 \uc2e4\ub9c1
-currenciesDisplayName.BOP=\ubcfc\ub9ac\ube44\uc544\ub178 \ud398\uc18c
-currenciesDisplayName.KHR=\uce84\ubcf4\ub514\uc544 \ub9ac\uc584
-currenciesDisplayName.XAM=\uc544\uc2dc\uc544 \uae30\uae08 \uc5f0\ud569 \ud1b5\ud654 \ub2e8\uc704
-currenciesDisplayName.BOL=\ubcfc\ub9ac\ube44\uc544\ub178 (1863-1962)
-currenciesDisplayName.KHO=\uce84\ubcf4\ub514\uc544 \uad6c\uad8c \ub9ac\uc584
-currenciesDisplayName.ZMP=\uc7d8\ube44\uc544 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.AUP=\ud638\uc8fc \ud30c\uc6b4\ub4dc
-currenciesDisplayName.MTP=\ubab0\ud0c0 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.GHR=\uac00\ub098 \uc7ac\ud3c9\uac00 \uc2dc\ub514
-currenciesDisplayName.ZMK=\uc7d8\ube44\uc544 \ucf70\uccd0
-currenciesDisplayName.XAD=\uc544\uc2dc\uc544 \ub514\ub098\ub974 \uacc4\uc0b0 \ub2e8\uc704
-currenciesDisplayName.GHP=\uac00\ub098 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BOB=\ubcfc\ub9ac\ube44\uc544\ub178
-currenciesDisplayName.GHO=\uac00\ub098 \uad6c\uad8c \uc2dc\ub514
-currenciesDisplayName.MTL=\ubab0\ud0c0 \ub9ac\ub77c
-currenciesDisplayName.AUD=\ud638\uc8fc \ub2ec\ub7ec
-currenciesDisplayName.ITL=\uc774\ud0c8\ub9ac\uc544 \ub9ac\ub77c
-currenciesDisplayName.GHC=\uac00\ub098 \uc2dc\ub514
-currenciesDisplayName.SGD=\uc2f1\uac00\ud3f4 \ub2ec\ub7ec
-currenciesDisplayName.PAB=\ud30c\ub098\ub9c8 \ubc1c\ubcf4\uc544
-currenciesDisplayName.LAK=\ub77c\uc624\uc2a4 \ud0a4\ud504
-currenciesDisplayName.KGS=\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4 \uc19c
-currenciesDisplayName.CHF=\uc2a4\uc704\uc2a4 \ud504\ub791\ub2ec\ub7ec
-currenciesDisplayName.ATS=\ud638\uc8fc \uc2e4\ub9c1
-currenciesDisplayName.USD=\ubbf8\uad6d \ub2ec\ub7ec
-currenciesDisplayName.ETD=\uc774\ub514\uc624\ud53c\uc544 \ub2ec\ub7ec
-currenciesDisplayName.BND=\ubd80\ub8e8\ub098\uc774 \ub2ec\ub7ec
-currenciesDisplayName.JMP=\uc790\uba54\uc774\uce74 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.ETB=\uc774\ub514\uc624\ud53c\uc544 \ube44\ub974
-currenciesDisplayName.DZG=\uc54c\uc81c\ub9ac \ud504\ub791 \uc81c\ub974\ubbf8\ub0a0
-currenciesDisplayName.DZF=\uc54c\uc81c\ub9ac \uc2e0\uad8c \ud504\ub791
-currenciesDisplayName.DZD=\uc54c\uc81c\ub9ac \ub514\ub098\ub974
-currenciesDisplayName.PYG=\ud30c\ub77c\uacfc\uc774 \uacfc\ub77c\ub2c8
-currenciesDisplayName.LYP=\ub9ac\ube44\uc544 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.JMD=\uc790\uba54\uc774\uce74 \ub2ec\ub7ec
-currenciesDisplayName.ISK=\uc544\uc774\uc2ac\ub780\ub4dc \ud06c\ub85c\ub098
-currenciesDisplayName.ESP=\uc2a4\ud398\uc778 \ud398\uc138\ud0c0
-currenciesDisplayName.BMP=\ubc84\ubba4\ub2e4 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.LYD=\ub9ac\ube44\uc544 \ub514\ub098\ub974
-currenciesDisplayName.LYB=\ub9ac\ube44\uc544 \uc601\uad6d \uad70\uc0ac\ub839 \ub9ac\ub77c
-currenciesDisplayName.BMD=\ubc84\ubba4\ub2e4 \ub2ec\ub7ec
-currenciesDisplayName.NLG=\ub124\ub378\ub780\ub4dc \uae38\ub354
-currenciesDisplayName.MRO=\ubaa8\ub9ac\ud0c0\ub2c8 \uc6b0\uae30\uc57c
-currenciesDisplayName.IRR=\uc774\ub780 \ub9ac\uc584
-currenciesDisplayName.SEK=\uc2a4\uc6e8\ub374 \ud06c\ub85c\ub098
-currenciesDisplayName.ERN=\uc5d0\ub9ac\ud2b8\ub9ac\uc544 \ub098\ud06c\ud30c
+currenciesDisplayName.YDD=\uc608\uba58 \ub514\ub098\ub974
+currenciesDisplayName.TWD=\ub300\ub9cc \uc2e0\uad8c \ub2ec\ub7ec
currenciesDisplayName.KES=\ucf00\ub0d0 \uc2e4\ub9c1
+currenciesDisplayName.BYB=\ubca8\ub77c\ub8e8\uc2a4 \uc2e0\uad8c \ub8e8\ube14 (1994-1999)
+currenciesDisplayName.LKR=\uc2a4\ub9ac\ub791\uce74 \ub8e8\ud53c
+currenciesDisplayName.RWF=\ub974\uc644\ub2e4 \ud504\ub791
+currenciesDisplayName.TJS=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc18c\ubaa8\ub2c8
+currenciesDisplayName.SDP=\uc218\ub2e8 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.TJR=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \ub8e8\ube14
+currenciesDisplayName.ERN=\uc5d0\ub9ac\ud2b8\ub9ac\uc544 \ub098\ud06c\ud30c
+currenciesDisplayName.AFN=\uc544\ud504\uac00\ub2c8
+currenciesDisplayName.GRD=\uadf8\ub9ac\uc2a4 \ub4dc\ub77c\ud06c\ub9c8
+currenciesDisplayName.IEP=\uc544\uc77c\ub79c\ub4dc \ud30c\uc6b4\ub4dc
currenciesDisplayName.ARS=\uc544\ub974\ud5e8\ud2f0\ub098 \ud398\uc18c
+currenciesDisplayName.SDD=\uc218\ub2e8 \ub514\ub098\ub974
currenciesDisplayName.ARP=\uc544\ub974\ud5e8\ud2f0\ub098 \ud398\uc18c (1983-1985)
-currenciesDisplayName.ARM=\uc544\ub974\ud5e8\ud2f0\ub098 \ud398\uc18c \ubaa8\ub124\ub2e4 \uad6d\uc601
-currenciesDisplayName.TWD=\ub300\ub9cc \uc2e0\uad8c \ub2ec\ub7ec
-currenciesDisplayName.SDP=\uc218\ub2e8 \ud30c\uc6b4\ub4dc
currenciesDisplayName.GEL=\uadf8\ub8e8\uc9c0\uc57c \ub77c\ub9ac
+currenciesDisplayName.AFA=\uc544\ud504\uac00\ub2c8 (1927-2002)
currenciesDisplayName.GEK=\uadf8\ub8e8\uc9c0\uc57c \uc9c0\ud3d0 \ub77c\ub9ac\ud2b8
-currenciesDisplayName.MQF=\ub9d0\ud2f0\ub2c8\ud06c \ud504\ub791
+currenciesDisplayName.CRC=\ucf54\uc2a4\ud0c0\ub9ac\uce74 \ucf5c\ub860
currenciesDisplayName.FKP=\ud3ec\ud074\ub79c\ub4dc\uc81c\ub3c4 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.EEK=\uc5d0\uc2a4\ud1a0\ub2c8\uc544 \ud06c\ub8ec
+currenciesDisplayName.HKD=\ud64d\ucf69 \ub2ec\ub7ec
+currenciesDisplayName.MDL=\ubab0\ub3c4\ubc14 \ub808\uc774
currenciesDisplayName.ARA=\uc544\ub974\ud5e8\ud2f0\ub098 \uc624\uc2a4\ud2b8\ub784
-currenciesDisplayName.SDD=\uc218\ub2e8 \ub514\ub098\ub974
currenciesDisplayName.IQD=\uc774\ub77c\ud06c \ub514\ub098\ub974
-currenciesDisplayName.TVD=\ud22c\ubc1c\ub8e8 \ub2ec\ub7ec
currenciesDisplayName.SCR=\uc138\uc774\uc274 \ub8e8\ud53c
+currenciesDisplayName.VUV=\ubc14\ub204\uc544\ud22c \ubc14\ud22c
+currenciesDisplayName.DKK=\ub374\ub9c8\ud06c \ud06c\ub85c\ub124
+currenciesDisplayName.KPW=\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d \uc6d0
+currenciesDisplayName.IDR=\uc778\ub3c4\ub124\uc2dc\uc544 \ub8e8\ud53c\uc544
currenciesDisplayName.LVR=\ub77c\ud2b8\ube44\uc544 \ub8e8\ube14
-currenciesDisplayName.FJP=\ud53c\uc9c0 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.SOS=\uc18c\ub9d0\ub9ac\uc544 \uc2e4\ub9c1
+currenciesDisplayName.AED=\uc544\ub78d\uc5d0\ubbf8\ub808\uc774\ud2b8 \ub514\ub098\ub974
+currenciesDisplayName.BWP=\ubcf4\uce20\uc640\ub098 \ud3f4\ub77c
currenciesDisplayName.LVL=\ub77c\ud2b8\ube44\uc544 \ub77c\ud2b8
-currenciesDisplayName.CDL=\ucf69\uace0 \uc790\uc774\ub974
-currenciesDisplayName.CDG=\ucf69\uace0 \uacf5\ud654\uad6d \ud504\ub791
-currenciesDisplayName.CDF=\ucf69\uace0 \ud504\ub791 \ucf69\uace8\ub77c\uc2a4
-currenciesDisplayName.FJD=\ud53c\uc9c0 \ub2ec\ub7ec
+currenciesDisplayName.RUR=\ub7ec\uc2dc\uc544 \ub8e8\ube14 (1991-1998)
currenciesDisplayName.NIO=\ub2c8\uce74\ub77c\uacfc \ucf54\ub974\ub3c4\ubc14 \uc624\ub85c
+currenciesDisplayName.ADP=\uc548\ub3c4\ub77c \ud398\uc138\ud0c0
+currenciesDisplayName.FJD=\ud53c\uc9c0 \ub2ec\ub7ec
currenciesDisplayName.MOP=\ub9c8\uce74\uc624 \ud30c\ud0c0\uce74
+currenciesDisplayName.RUB=\ub7ec\uc2dc\uc544 \ub8e8\ube14
+currenciesDisplayName.CDF=\ucf69\uace0 \ud504\ub791 \ucf69\uace8\ub77c\uc2a4
currenciesDisplayName.NIC=\ub2c8\uce74\ub77c\uacfc \ucf54\ub974\ub3c4\ubc14
-currenciesDisplayName.FIN=\ud540\ub780\ub4dc \ub9c8\ub974\uce74 (1860-1962)
-currenciesDisplayName.FIM=\ud540\ub780\ub4dc \ub9c8\ub974\uce74
+currenciesDisplayName.DJF=\uc9c0\ubd80\ud2f0 \ud504\ub791
currenciesDisplayName.SBD=\uc194\ub85c\ubaac \uc81c\ub3c4 \ub2ec\ub7ec
+currenciesDisplayName.UZS=\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc228
+currenciesDisplayName.ECS=\uc5d0\ucfe0\uc544\ub3c4\ub974 \uc218\ud06c\ub808
+currenciesDisplayName.PHP=\ud544\ub9ac\ud540 \ud398\uc18c
+currenciesDisplayName.THB=\ud0dc\uad6d \ubc14\ud2b8
currenciesDisplayName.LUF=\ub8e9\uc148\ubd80\ub974\ud06c \ud504\ub791
-currenciesDisplayName.TTO=\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0 \uad6c\uad8c \ub2ec\ub7ec
-currenciesDisplayName.AOS=\uc559\uace8\ub77c \uc5d0\uc2a4\ucfe0\ub3c4
-currenciesDisplayName.AOR=\uc559\uace8\ub77c \ucf74\uc790 Reajustado (1995-1999)
-currenciesDisplayName.MNT=\ubabd\uace8 \ud22c\uadf8\ub9ad
-currenciesDisplayName.HUF=\ud5dd\uac00\ub9ac \ud3ec\ub9b0\ud2b8
-currenciesDisplayName.BIF=\ubd80\ub8ec\ub514 \ud504\ub791
-currenciesDisplayName.AON=\uc559\uace8\ub77c \uc2e0\uadc4 \ucf74\uc790 (1990-2000)
-currenciesDisplayName.AOK=\uc559\uace8\ub77c \ucf74\uc790 (1977-1990)
+currenciesDisplayName.FIM=\ud540\ub780\ub4dc \ub9c8\ub974\uce74
currenciesDisplayName.TTD=\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0 \ub2ec\ub7ec
currenciesDisplayName.SZL=\uc2a4\uc640\uc9c8\ub780\ub4dc \ub9b4\ub791\uac8c\ub2c8
-currenciesDisplayName.GBP=\uc601\uad6d\ub839 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1
-currenciesDisplayName.SAS=\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544 \uc790\uce58\ub839 \ub9ac\uc584
+currenciesDisplayName.MNT=\ubabd\uace8 \ud22c\uadf8\ub9ad
currenciesDisplayName.SAR=\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544 \ub9ac\uc584
+currenciesDisplayName.UAH=\uc6b0\ud06c\ub77c\uc774\ub098 \uadf8\ub9ac\ube0c\ub098
+currenciesDisplayName.HUF=\ud5dd\uac00\ub9ac \ud3ec\ub9b0\ud2b8
+currenciesDisplayName.COP=\ucf5c\ub86c\ube44\uc544 \ud398\uc18c
+currenciesDisplayName.QAR=\uce74\ud0c0\ub974 \ub9ac\uc584
currenciesDisplayName.LTT=\ub8e9\uc148\ubd80\ub974\ud06c \ud0c0\ub85c\ub098
-currenciesDisplayName.INR=\uc778\ub3c4 \ub8e8\ud53c
currenciesDisplayName.PTE=\ud3ec\ub974\ud22c\uac08 \uc5d0\uc2a4\ucfe0\ub3c4
-currenciesDisplayName.AOA=\uc559\uace8\ub77c \ucf74\uc790
-currenciesDisplayName.PTC=\ud3ec\ub974\ud22c\uac08 \ucf58\ud1a0
+currenciesDisplayName.AOR=\uc559\uace8\ub77c \ucf74\uc790 Reajustado (1995-1999)
+currenciesDisplayName.UYU=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c \uc6b0\ub8e8\uacfc\uc694
+currenciesDisplayName.GBP=\uc601\uad6d\ub839 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1
+currenciesDisplayName.BIF=\ubd80\ub8ec\ub514 \ud504\ub791
+currenciesDisplayName.INR=\uc778\ub3c4 \ub8e8\ud53c
+currenciesDisplayName.ZRZ=\uc790\uc774\ub974 \uc790\uc774\ub974
+currenciesDisplayName.AON=\uc559\uace8\ub77c \uc2e0\uadc4 \ucf74\uc790 (1990-2000)
currenciesDisplayName.LTL=\ub9ac\ud22c\uc544\ub2c8\uc544 \ub9ac\ud0c0
+currenciesDisplayName.XFU=\ud504\ub791\uc2a4 UIC-\ud504\ub791
currenciesDisplayName.KZT=\uce74\uc790\ud750\uc2a4\ud0c4 \ud150\uac8c
-currenciesDisplayName.KZR=\uce74\uc790\ud750\uc2a4\ud0c4 \ub8e8\ube14
-currenciesDisplayName.VGD=\uc601\uad6d\ub839 \ubc84\uc9c4 \uc544\uc77c\ub79c\ub4dc \ub2ec\ub7ec
-currenciesDisplayName.NGP=\ub2c8\uc81c\ub974 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.MMX=\ubbf8\uc580\ub9c8 \ub2ec\ub7ec \ud0dc\ud658\uad8c
+currenciesDisplayName.MZM=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c
+currenciesDisplayName.UYP=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c (1975-1993)
+currenciesDisplayName.AOK=\uc559\uace8\ub77c \ucf74\uc790 (1977-1990)
+currenciesDisplayName.BUK=\ubc84\ub9c8 \ucc28\ud2b8
+currenciesDisplayName.GNS=\uae30\ub2c8 \uc2dc\ub9ac
+currenciesDisplayName.XFO=\ud504\ub791\uc2a4 Gold \ud504\ub791
+currenciesDisplayName.PGK=\ud30c\ud478\uc544\ub274\uae30\ub2c8 \ud0a4\ub098
+currenciesDisplayName.SYP=\uc2dc\ub9ac\uc544 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.MZE=\ubaa8\uc7a0\ube44\ud06c \uc5d0\uc2a4\ucfe0\ub3c4
+currenciesDisplayName.OMR=\uc624\ub9cc \ub9ac\uc584
currenciesDisplayName.NGN=\ub2c8\uc81c\ub974 \ub098\uc774\ub77c
+currenciesDisplayName.ZRN=\uc790\uc774\ub974 \uc2e0\uad8c \uc790\uc774\ub974
+currenciesDisplayName.AOA=\uc559\uace8\ub77c \ucf74\uc790
+currenciesDisplayName.CNY=\uc911\uad6d \uc704\uc548 \uc778\ubbfc\ud3d0
+currenciesDisplayName.MAF=\ubaa8\ub85c\ucf54 \ud504\ub791
+currenciesDisplayName.GNF=\uae30\ub2c8 \ud504\ub791
currenciesDisplayName.HTG=\ud558\uc774\ud2f0 \uad6c\ub974\ub4dc
-currenciesDisplayName.SYP=\uc2dc\ub9ac\uc544 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.PSP=\ud314\ub808\uc2a4\ud0c0\uc778 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BHD=\ubc14\ub808\uc778 \ub514\ub098\ub974
+currenciesDisplayName.MAD=\ubaa8\ub85c\ucf54 \ub514\ub818
+currenciesDisplayName.TRY=\uc0c8\ub85c\uc6b4 \ud130\ud0a4 \ub9ac\ub77c
currenciesDisplayName.MMK=\ubbf8\uc580\ub9c8 \ud0a4\uc58f
+currenciesDisplayName.MYR=\ub9d0\ub808\uc774\uc9c0\uc544 \ub9c1\uae30\ud2b8
+currenciesDisplayName.LSL=\ub808\uc18c\ud1a0 \ub85c\ud2f0
+currenciesDisplayName.XEU=\uc720\ub7fd \ud658\uc728 \ub2e8\uc704
+currenciesDisplayName.BHD=\ubc14\ub808\uc778 \ub514\ub098\ub974
+currenciesDisplayName.SLL=\uc2dc\uc5d0\ub77c\ub9ac\uc628 \ub9ac\uc628
+currenciesDisplayName.BTN=\ubd80\ud0c4 \ub20c\ud22c\ub214
+currenciesDisplayName.TRL=\ud130\uae30 \ub9ac\ub77c
+currenciesDisplayName.KMF=\ucf54\ubaa8\ub974 \ud504\ub791
currenciesDisplayName.ANG=\ub124\ub378\ub780\ub4dc \uc548\ud2f8\ub808\uc2a4 \uad74\ub374
currenciesDisplayName.CZK=\uccb4\ucf54 \uacf5\ud654\uad6d \ucf54\ub8e8\ub098
-currenciesDisplayName.IMP=\ub9e8\ub3c4 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1
-currenciesDisplayName.BGX=\ubd88\uac00\ub9ac\uc544 \ub81b \ud0dc\ud658\uad8c
-currenciesDisplayName.LSL=\ub808\uc18c\ud1a0 \ub85c\ud2f0
-currenciesDisplayName.GAF=\uac00\ubd09 CFA \ud504\ub791
-currenciesDisplayName.BGO=\ubd88\uac00\ub9ac\uc544 \ub81b (1879-1952)
+currenciesDisplayName.AZM=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8
+currenciesDisplayName.KYD=\ucf00\uc774\ub9e8 \uc81c\ub3c4 \ub2ec\ub7ec
+currenciesDisplayName.GMD=\uac10\ube44\uc544 \ub2ec\ub77c\uc2dc
currenciesDisplayName.BGN=\ubd88\uac00\ub9ac\uc544 \uc2e0\uad8c \ub81b
-currenciesDisplayName.BGM=\ubd88\uac00\ub9ac\uc544 \uc0ac\ud68c\uc8fc\uc758 \ub81b
currenciesDisplayName.CAD=\uce90\ub098\ub2e4 \ub2ec\ub7ec
currenciesDisplayName.BGL=\ubd88\uac00\ub9ac\uc544 \ub3d9\uc804 \ub81b
-currenciesDisplayName.TRL=\ud130\uae30 \ub9ac\ub77c
-currenciesDisplayName.KYD=\ucf00\uc774\ub9e8 \uc81c\ub3c4 \ub2ec\ub7ec
-currenciesDisplayName.CYP=\uc2f8\uc774\ud504\ub7ec\uc2a4 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.VEB=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974
+currenciesDisplayName.MLF=\ub9d0\ub9ac \ud504\ub791
currenciesDisplayName.ILS=\uc774\uc2a4\ub77c\uc5d8 \uc2e0\uad8c \uc138\ucf08
+currenciesDisplayName.MXP=\uba55\uc2dc\ucf54 \uc2e4\ubc84 \ud398\uc18c (1861-1992)
+currenciesDisplayName.PES=\ud398\ub8e8 \uc194
currenciesDisplayName.GYD=\uac00\uc774\uc544\ub098 \ub2ec\ub7ec
-currenciesDisplayName.AMD=\uc544\ub974\uba54\ub2c8\uc544 \ub4dc\ub78c
+currenciesDisplayName.MXN=\uba55\uc2dc\ucf54 \ud398\uc18c
currenciesDisplayName.ILP=\uc774\uc2a4\ub77c\uc5d8 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.MLF=\ub9d0\ub9ac \ud504\ub791
-currenciesDisplayName.ILL=\uc774\uc2a4\ub77c\uc5d8 \uc138\ucf08
-currenciesDisplayName.VEB=\ubca0\ub124\uc8fc\uc5d8\ub77c \ubcfc\ub9ac\ubc14\ub974
-currenciesDisplayName.ALX=\uc54c\ubc14\ub2c8\uc544 \ub2ec\ub7ec \ud0dc\ud658\uad8c
+currenciesDisplayName.SKK=\uc2ac\ub85c\ubc14\ud0a4\uc544 \ucf54\ub8e8\ub098
+currenciesDisplayName.CYP=\uc2f8\uc774\ud504\ub7ec\uc2a4 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.XDR=\ud2b9\ubcc4\uc778\ucd9c\uad8c
+currenciesDisplayName.PEN=\ud398\ub8e8 \uc194 \ub204\uc5d0\ubcf4
currenciesDisplayName.LRD=\ub77c\uc774\ubca0\ub9ac\uc544 \ub2ec\ub7ec
-currenciesDisplayName.ALV=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c \ubc1c\ub8e8\ud2b8
+currenciesDisplayName.PEI=\ud398\ub8e8 \uc778\ud2f0
+currenciesDisplayName.AMD=\uc544\ub974\uba54\ub2c8\uc544 \ub4dc\ub78c
+currenciesDisplayName.BSD=\ubc14\ud558\ub9c8 \ub2ec\ub7ec
currenciesDisplayName.HRK=\ud06c\ub85c\uc544\ud2f0\uc544 \ucfe0\ub098
-currenciesDisplayName.REF=\ub9ac\uc720\ub2c8\uc628 \ud504\ub791
+currenciesDisplayName.CLP=\uce60\ub808 \ud398\uc18c
currenciesDisplayName.HRD=\ud06c\ub85c\uc544\ud2f0\uc544 \ub514\ub098\ub974
-currenciesDisplayName.ALL=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c
-currenciesDisplayName.JEP=\uc800\uc9c0 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1
-currenciesDisplayName.ALK=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c (1946-1961)
-currenciesDisplayName.MKN=\ub9c8\ucf00\ub3c4\ub2c8\uc544 \ub514\ub098\ub974 (1992-1993)
-currenciesDisplayName.VDP=\ubd81 \ubca0\ud2b8\ub0a8 \ubca0\ud2b8\ubbfc \ud53c\uc544\uc2a4\ud0c0 \ub3d9 \ubca0\ud2b8
-currenciesDisplayName.VDN=\ubd81 \ubca0\ud2b8\ub0a8 \uc2e0\uad8c \ub3d9
+currenciesDisplayName.FRF=\ud504\ub791\uc2a4 \ud504\ub791
+currenciesDisplayName.BRR=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc81c\uc774\ub8e8
currenciesDisplayName.MKD=\ub9c8\ucf00\ub3c4\ub2c8\uc544 \ub514\ub098\ub974
-currenciesDisplayName.VDD=\ubd81 \ubca0\ud2b8\ub0a8 \ud53c\uc544\uc2a4\ud0c0 \ub3d9 \ubca0\ud2b8
-currenciesDisplayName.TPP=\ud2f0\ubaa8\ub974 \ud30c\ud0c0\uce74
-currenciesDisplayName.BEL=\ubca8\uae30\uc5d0 \ud504\ub791 (\uae08\uc735)
-currenciesDisplayName.GWP=\uae30\ub124\ube44\uc3d8 \ud398\uc18c
+currenciesDisplayName.ALL=\uc54c\ubc14\ub2c8\uc544 \ub808\ud06c
+currenciesDisplayName.BRN=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc790\ub450 \ub178\ubcf4
+currenciesDisplayName.MWK=\ub9d0\ub77c\uc704 \ucf70\uccd0
+currenciesDisplayName.BRL=\ube0c\ub77c\uc9c8 \ub808\uc54c
+currenciesDisplayName.TPE=\ud2f0\ubaa8\ub974 \uc5d0\uc2a4\ucfe0\ub3c4
+currenciesDisplayName.BRE=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc81c\uc774\ub8e8 (1990-1993)
+currenciesDisplayName.BRC=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc790\ub450
+currenciesDisplayName.BRB=\ubcfc\ub9ac\ube44\uc544\ub178 \ud06c\ub8e8\uc81c\uc774\ub8e8 \ub178\ubcf4 (1967-1986)
+currenciesDisplayName.DEM=\ub3c5\uc77c \ub9c8\ub974\ud06c
currenciesDisplayName.KWD=\ucfe0\uc6e8\uc774\ud2b8 \ub514\ub098\ub974
-currenciesDisplayName.GWM=\ud3ec\ub974\ud22c\uac08\ub839 \uae30\ub2c8 \ubc00 \ub808\uc774\uc2a4
+currenciesDisplayName.XCD=\ub3d9\uce74\ub9ac\ube0c \ub2ec\ub7ec
+currenciesDisplayName.NPR=\ub124\ud314 \ub8e8\ud53c
+currenciesDisplayName.GWP=\uae30\ub124\ube44\uc3d8 \ud398\uc18c
+currenciesDisplayName.YUN=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \uc804\ud658 \ub514\ub098\ub974
+currenciesDisplayName.SVC=\uc5d8\uc0b4\ubc14\ub3c4\ub974 \ucf5c\ub860
+currenciesDisplayName.YUM=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub178\ube44 \ub514\ub098\ub974
+currenciesDisplayName.BEL=\ubca8\uae30\uc5d0 \ud504\ub791 (\uae08\uc735)
+currenciesDisplayName.SIT=\uc2ac\ub85c\ubca0\ub2c8\uc544 \ud1a8\ub77c\ub974
+currenciesDisplayName.JPY=\uc77c\ubcf8 \uc5d4\ud654
+currenciesDisplayName.MVR=\ubab0\ub514\ube0c \uc81c\ub3c4 \ub8e8\ud53c\uc544
+currenciesDisplayName.GWE=\ud3ec\ub974\ud22c\uac08\ub839 \uae30\ub2c8 \uc5d0\uc2a4\ucfe0\ub3c4
currenciesDisplayName.BEF=\ubca8\uae30\uc5d0 \ud504\ub791
-currenciesDisplayName.TPE=\ud2f0\ubaa8\ub974 \uc5d0\uc2a4\ucfe0\ub3c4
+currenciesDisplayName.YUD=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub3d9\uc804 \ub514\ub098\ub974
currenciesDisplayName.BEC=\ubca8\uae30\uc5d0 \ud504\ub791 (\ud0dc\ud658)
-currenciesDisplayName.GWE=\ud3ec\ub974\ud22c\uac08\ub839 \uae30\ub2c8 \uc5d0\uc2a4\ucfe0\ub3c4
-currenciesDisplayName.SVC=\uc5d8\uc0b4\ubc14\ub3c4\ub974 \ucf5c\ub860
-currenciesDisplayName.CWG=\ucfe0\ub77c\uce74\uc624 \uae38\ub354
-currenciesDisplayName.BDT=\ubc29\uae00\ub77c\ub370\uc2dc \ud0c0\uce74
-currenciesDisplayName.TOS=\ud1b5\uac00 \ud30c\uc6b4\ub4dc \uc2a4\ud138\ub9c1
currenciesDisplayName.SUR=\uc18c\ub828 \ub8e8\ube14
-currenciesDisplayName.SUN=\uc18c\ub828 \uc2e0\uad8c \ub8e8\ube14
-currenciesDisplayName.NCF=\ub274 \uce7c\ub808\ub3c4\ub2c8\uc544 \ud504\ub791 \uc81c\ub974\ubbf8\ub0a0
-currenciesDisplayName.CVE=\uce74\ubcf4\ubca0\ub974\ub370 \uc5d0\uc2a4\ucfe0\ub3c4
+currenciesDisplayName.ROL=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc774
+currenciesDisplayName.DDM=\ub3d9\ub3c5 \uc624\uc2a4\ud2b8\ub9c8\ub974\ud06c
+currenciesDisplayName.BDT=\ubc29\uae00\ub77c\ub370\uc2dc \ud0c0\uce74
+currenciesDisplayName.AWG=\uc544\ub8e8\ubc14 \uae38\ub354
+currenciesDisplayName.NOK=\ub178\ub974\uc6e8\uc774 \ud06c\ub85c\ub124
+currenciesDisplayName.MUR=\ubaa8\ub9ac\uc154\uc2a4 \ub8e8\ud53c
currenciesDisplayName.ZAR=\ub0a8\uc544\ud504\ub9ac\uce74 \ub79c\ub4dc
-currenciesDisplayName.DOP=\ub3c4\ubbf8\ub2c8\uce74 \ud398\uc18c
-currenciesDisplayName.CUX=\ucfe0\ubc14 \ud0dc\ud658\uad8c \ub9c8\ub974\ud06c
-currenciesDisplayName.ZAP=\ub0a8\uc544\ud504\ub9ac\uce74 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.SHP=\uc138\uc778\ud2b8\ud5ec\ub808\ub098 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.XAU=\uae08
currenciesDisplayName.ZAL=\ub0a8\uc544\ud504\ub9ac\uce74 \ub79c\ub4dc (\uae08\uc735)
+currenciesDisplayName.VND=\ubca0\ud2b8\ub0a8 \ub3d9
+currenciesDisplayName.TZS=\ud0c4\uc790\ub2c8\uc544 \uc2e4\ub9c1
+currenciesDisplayName.GIP=\uc9c0\ube0c\ub864\ud130 \ud30c\uc6b4\ub4dc
currenciesDisplayName.TND=\ud280\ub2c8\uc9c0 \ub514\ub098\ub974
-currenciesDisplayName.CUP=\ucfe0\ubc14 \ud398\uc18c
-currenciesDisplayName.GUF=\ud504\ub791\uc2a4\ub839 \uac00\uc774\uc544\ub098 \ud504\ub791 \uae30\uc544\ub098
+currenciesDisplayName.CVE=\uce74\ubcf4\ubca0\ub974\ub370 \uc5d0\uc2a4\ucfe0\ub3c4
currenciesDisplayName.UGX=\uc6b0\uac04\ub2e4 \uc2e4\ub9c1
-currenciesDisplayName.LNR=\uc2e4\ub860 \ub8e8\ud53c
-currenciesDisplayName.AIF=\uc544\ud30c\ub974\uc640 \uc774\uc0ac\uc2a4\uc758 \ud504\ub791
-currenciesDisplayName.VAL=\ubc14\ud2f0\uce78 \ub9ac\ub77c
-currenciesDisplayName.STE=\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398 \uc5d0\uc2a4\ucfe0\ub3c4
+currenciesDisplayName.ZMK=\uc7d8\ube44\uc544 \ucf70\uccd0
+currenciesDisplayName.JOD=\uc694\ub974\ub2e8 \ub514\ub098\ub974
+currenciesDisplayName.LBP=\ub808\ubc14\ub17c \ud30c\uc6b4\ub4dc
currenciesDisplayName.UGS=\uc6b0\uac04\ub2e4 \uc2e4\ub9c1 (1966-1987)
currenciesDisplayName.STD=\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398 \ub3c4\ube0c\ub77c
-currenciesDisplayName.MHD=\ub9c8\uc0ec \uad70\ub3c4 \ub2ec\ub7ec
-currenciesDisplayName.NZP=\ub274\uc9c8\ub79c\ub4dc \ud30c\uc6b4\ub4dc
currenciesDisplayName.WST=\uc11c \uc0ac\ubaa8\uc544 \ud0c8\ub77c
-currenciesDisplayName.WSP=\uc11c \uc0ac\ubaa8\uc544 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.HNL=\uc628\ub450\ub77c\uc2a4 \ub818\ud53c\ub77c
-currenciesDisplayName.XMF=\ud504\ub791\uc2a4 \uba54\ud2b8\ub85c\ud3f4\ub9ac\ud0c4 \ub204\ubcf4 \ud504\ub791
+currenciesDisplayName.KHR=\uce84\ubcf4\ub514\uc544 \ub9ac\uc584
+currenciesDisplayName.EUR=\uc720\ub85c\ud654
+currenciesDisplayName.DOP=\ub3c4\ubbf8\ub2c8\uce74 \ud398\uc18c
+currenciesDisplayName.MTP=\ubab0\ud0c0 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.BOP=\ubcfc\ub9ac\ube44\uc544\ub178 \ud398\uc18c
+currenciesDisplayName.MTL=\ubab0\ud0c0 \ub9ac\ub77c
+currenciesDisplayName.CUP=\ucfe0\ubc14 \ud398\uc18c
currenciesDisplayName.TMM=\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \ub9c8\ub098\ud2b8
-currenciesDisplayName.GTQ=\uacfc\ud14c\ub9d0\ub77c \ucf00\ud2b8\uc0b4
+currenciesDisplayName.SGD=\uc2f1\uac00\ud3f4 \ub2ec\ub7ec
currenciesDisplayName.NZD=\ub274\uc9c8\ub79c\ub4dc \ub2ec\ub7ec
-currenciesDisplayName.SSP=\uc2a4\ucf54\ud2c0\ub79c\ub4dc \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BBD=\ubc14\ubca0\uc774\ub3c4\uc2a4 \ub2ec\ub7ec
+currenciesDisplayName.USD=\ubbf8\uad6d \ub2ec\ub7ec
+currenciesDisplayName.HNL=\uc628\ub450\ub77c\uc2a4 \ub818\ud53c\ub77c
+currenciesDisplayName.BOB=\ubcfc\ub9ac\ube44\uc544\ub178
+currenciesDisplayName.ITL=\uc774\ud0c8\ub9ac\uc544 \ub9ac\ub77c
+currenciesDisplayName.PAB=\ud30c\ub098\ub9c8 \ubc1c\ubcf4\uc544
+currenciesDisplayName.GTQ=\uacfc\ud14c\ub9d0\ub77c \ucf00\ud2b8\uc0b4
+currenciesDisplayName.LAK=\ub77c\uc624\uc2a4 \ud0a4\ud504
+currenciesDisplayName.GHC=\uac00\ub098 \uc2dc\ub514
+currenciesDisplayName.AUD=\ud638\uc8fc \ub2ec\ub7ec
currenciesDisplayName.NAD=\ub098\ubbf8\ube44\uc544 \ub2ec\ub7ec
+currenciesDisplayName.KGS=\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4 \uc19c
currenciesDisplayName.MGF=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974 \ud504\ub791
+currenciesDisplayName.CHF=\uc2a4\uc704\uc2a4 \ud504\ub791\ub2ec\ub7ec
+currenciesDisplayName.BBD=\ubc14\ubca0\uc774\ub3c4\uc2a4 \ub2ec\ub7ec
currenciesDisplayName.MGA=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974 \uc544\ub9ac\uc544\ub9ac
-currenciesDisplayName.EGP=\uc774\uc9d1\ud2b8 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BZH=\uc601\uad6d\ub839 \ud63c\ub450\ub77c\uc2a4 \ub2ec\ub7ec
+currenciesDisplayName.PYG=\ud30c\ub77c\uacfc\uc774 \uacfc\ub77c\ub2c8
currenciesDisplayName.PLZ=\ud3f4\ub780\ub4dc \uc990\ub85c\ud2f0 (1950-1995)
-currenciesDisplayName.BAN=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \uc2e0 \ub514\ub098\ub974
-currenciesDisplayName.BAM=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ud0dc\ud658 \ub9c8\ub974\ud06c
-currenciesDisplayName.BZD=\ubca8\ub9ac\uc988 \ub2ec\ub7ec
-currenciesDisplayName.BAD=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ub514\ub098\ub974
-currenciesDisplayName.PLN=\ud3f4\ub780\ub4dc \uc990\ub85c\ud2f0
currenciesDisplayName.YER=\uc608\uba58 \ub9ac\uc54c
+currenciesDisplayName.ATS=\ud638\uc8fc \uc2e4\ub9c1
+currenciesDisplayName.ETB=\uc774\ub514\uc624\ud53c\uc544 \ube44\ub974
+currenciesDisplayName.BND=\ubd80\ub8e8\ub098\uc774 \ub2ec\ub7ec
+currenciesDisplayName.JMD=\uc790\uba54\uc774\uce74 \ub2ec\ub7ec
+currenciesDisplayName.EGP=\uc774\uc9d1\ud2b8 \ud30c\uc6b4\ub4dc
+currenciesDisplayName.PLN=\ud3f4\ub780\ub4dc \uc990\ub85c\ud2f0
+currenciesDisplayName.DZD=\uc54c\uc81c\ub9ac \ub514\ub098\ub974
+currenciesDisplayName.ISK=\uc544\uc774\uc2ac\ub780\ub4dc \ud06c\ub85c\ub098
currenciesDisplayName.SRG=\uc218\ub9ac\ub0a8 \uae38\ub354
-currenciesDisplayName.CSK=\uccb4\ucf54\uc2ac\ub85c\ubc14\ud0a4\uc544 \ub3d9\uc804 \ucf54\ub8e8\ub098
+currenciesDisplayName.LYD=\ub9ac\ube44\uc544 \ub514\ub098\ub974
+currenciesDisplayName.BZD=\ubca8\ub9ac\uc988 \ub2ec\ub7ec
+currenciesDisplayName.BAM=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ud0dc\ud658 \ub9c8\ub974\ud06c
+currenciesDisplayName.ESP=\uc2a4\ud398\uc778 \ud398\uc138\ud0c0
currenciesDisplayName.KRW=\ub300\ud55c\ubbfc\uad6d \uc6d0
+currenciesDisplayName.NLG=\ub124\ub378\ub780\ub4dc \uae38\ub354
+currenciesDisplayName.MRO=\ubaa8\ub9ac\ud0c0\ub2c8 \uc6b0\uae30\uc57c
+currenciesDisplayName.BAD=\ubcf4\uc2a4\ub2c8\uc544-\ud5e4\ub974\uccb4\uace0\ube44\ub098 \ub514\ub098\ub974
+currenciesDisplayName.ZWD=\uc9d0\ube44\ube0c\uc6e8 \ub2ec\ub7ec
+currenciesDisplayName.SEK=\uc2a4\uc6e8\ub374 \ud06c\ub85c\ub098
+currenciesDisplayName.CSK=\uccb4\ucf54\uc2ac\ub85c\ubc14\ud0a4\uc544 \ub3d9\uc804 \ucf54\ub8e8\ub098
currenciesDisplayName.BYR=\ubca8\ub77c\ub8e8\uc2a4 \ub8e8\ube14
-currenciesDisplayName.BYL=\ubca8\ub77c\ub8e8\uc2a4 \ub8e8\ube14 (1992-1994)
-currenciesDisplayName.CSC=\uccb4\ucf54\uc2ac\ub85c\ubc14\ud0a4\uc544 \ucf54\ub8e8\ub098
-currenciesDisplayName.KRO=\ub300\ud55c\ubbfc\uad6d \uad6c\uad8c \uc6d0
-currenciesDisplayName.KRH=\ub300\ud55c\ubbfc\uad6d \ud658
-currenciesDisplayName.BYB=\ubca8\ub77c\ub8e8\uc2a4 \uc2e0\uad8c \ub8e8\ube14 (1994-1999)
-currenciesDisplayName.SQS=\uc18c\ub9d0\ub9ac\ub79c\ub4dc \uc2e4\ub9c1
-currenciesDisplayName.GRN=\uadf8\ub9ac\uc2a4 \uc2e0\uad8c \ub4dc\ub77c\ud06c\ub9c8
+currenciesDisplayName.IRR=\uc774\ub780 \ub9ac\uc584
currenciesDisplayName.PKR=\ud30c\ud0a4\uc2a4\ud0c4 \ub8e8\ud53c
-currenciesDisplayName.AFN=\uc544\ud504\uac00\ub2c8
-currenciesDisplayName.ZWD=\uc9d0\ube44\ube0c\uc6e8 \ub2ec\ub7ec
-currenciesDisplayName.LKR=\uc2a4\ub9ac\ub791\uce74 \ub8e8\ud53c
-currenciesDisplayName.GRD=\uadf8\ub9ac\uc2a4 \ub4dc\ub77c\ud06c\ub9c8
-currenciesDisplayName.IEP=\uc544\uc77c\ub79c\ub4dc \ud30c\uc6b4\ub4dc
-currenciesDisplayName.AFA=\uc544\ud504\uac00\ub2c8 (1927-2002)
-currenciesDisplayName.YDD=\uc608\uba58 \ub514\ub098\ub974
-currenciesDisplayName.RWF=\ub974\uc644\ub2e4 \ud504\ub791
-currenciesDisplayName.CRC=\ucf54\uc2a4\ud0c0\ub9ac\uce74 \ucf5c\ub860
-currenciesDisplayName.TJS=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc18c\ubaa8\ub2c8
-currenciesDisplayName.TJR=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \ub8e8\ube14
-currenciesDisplayName.EEK=\uc5d0\uc2a4\ud1a0\ub2c8\uc544 \ud06c\ub8ec
-currenciesDisplayName.GQP=\uc801\ub3c4 \uae30\ub2c8 \ud398\uc138\ud0c0 \uae30\ub2c8\uc544\ub098
-currenciesDisplayName.MDR=\ubab0\ub3c4\ubc14 \ub8e8\ube14 \uc9c0\ud3d0
-currenciesDisplayName.HKD=\ud64d\ucf69 \ub2ec\ub7ec
-currenciesDisplayName.DKK=\ub374\ub9c8\ud06c \ud06c\ub85c\ub124
-currenciesDisplayName.MDL=\ubab0\ub3c4\ubc14 \ub808\uc774
-currenciesDisplayName.GQF=\uc801\ub3c4 \uae30\ub2c8 \ud504\ub791
-currenciesDisplayName.IDR=\uc778\ub3c4\ub124\uc2dc\uc544 \ub8e8\ud53c\uc544
-currenciesDisplayName.AED=\uc544\ub78d\uc5d0\ubbf8\ub808\uc774\ud2b8 \ub514\ub098\ub974
-currenciesDisplayName.KPW=\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d \uc6d0
-currenciesDisplayName.IDN=\uc778\ub3c4\ub124\uc2dc\uc544 \uc2e0\uad8c \ub8e8\ud53c\uc544
-currenciesDisplayName.BWP=\ubcf4\uce20\uc640\ub098 \ud3f4\ub77c
-currenciesDisplayName.MDC=\ubab0\ub3c4\ubc14 \ub808\uc774 \uc9c0\ud3d0
-currenciesDisplayName.IDJ=\uc778\ub3c4\ub124\uc2dc\uc544 \uc790\ubc14 \ub8e8\ud53c\uc544
-currenciesDisplayName.KPP=\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d \uc6d0
-currenciesDisplayName.IDG=\uc778\ub3c4\ub124\uc2dc\uc544 \ub2c8\uce74 \uae38\ub354
-currenciesDisplayName.VUV=\ubc14\ub204\uc544\ud22c \ubc14\ud22c
-currenciesDisplayName.XID=\uc774\uc2ac\ub78c \ub514\ub098\ub974
-currenciesDisplayName.SOS=\uc18c\ub9d0\ub9ac\uc544 \uc2e4\ub9c1
-currenciesDisplayName.ADP=\uc548\ub3c4\ub77c \ud398\uc138\ud0c0
-currenciesDisplayName.RUR=\ub7ec\uc2dc\uc544 \ub8e8\ube14 (1991-1998)
-currenciesDisplayName.GPF=\uacfc\ub2ec\ub85c\ud504 \ud504\ub791
-currenciesDisplayName.DJF=\uc9c0\ubd80\ud2f0 \ud504\ub791
-currenciesDisplayName.ADD=\uc548\ub3c4\ub77c \ub514\ub124\ub974
-currenciesDisplayName.MCG=\ubaa8\ub098\ucf54 \ud504\ub791 \uc81c\ub974\ubbf8\ub0a0
-currenciesDisplayName.MCF=\ubaa8\ub098\ucf54 \ud504\ub791 \ub204\ubcf4
-currenciesDisplayName.ECS=\uc5d0\ucfe0\uc544\ub3c4\ub974 \uc218\ud06c\ub808
-currenciesDisplayName.LIF=\ub9ac\ud788\ud150\uc288\ud0c0\uc778 \ud504\ub791
-currenciesDisplayName.RUB=\ub7ec\uc2dc\uc544 \ub8e8\ube14
-currenciesDisplayName.PHP=\ud544\ub9ac\ud540 \ud398\uc18c
-currenciesDisplayName.UZS=\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc228
-currenciesDisplayName.COP=\ucf5c\ub86c\ube44\uc544 \ud398\uc18c
-currenciesDisplayName.THB=\ud0dc\uad6d \ubc14\ud2b8
-currenciesDisplayName.IBP=\ubd81\ubd80 \uc544\uc77c\ub79c\ub4dc \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BUR=\ubc84\ub9c8 \ub8e8\ud53c
-currenciesDisplayName.COF=\ucf69\uace0 CFA \ud504\ub791
-currenciesDisplayName.BUK=\ubc84\ub9c8 \ucc28\ud2b8
-currenciesDisplayName.COB=\ucf5c\ub86c\ube44\uc544 \uc9c0\ud3d0 \ud398\uc18c
-currenciesDisplayName.UZC=\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc228 \ucfe0\ud3f0
-currenciesDisplayName.QAR=\uce74\ud0c0\ub974 \ub9ac\uc584
-currenciesDisplayName.UAH=\uc6b0\ud06c\ub77c\uc774\ub098 \uadf8\ub9ac\ube0c\ub098
-currenciesDisplayName.GNS=\uae30\ub2c8 \uc2dc\ub9ac
-currenciesDisplayName.CNY=\uc911\uad6d \uc704\uc548 \uc778\ubbfc\ud3d0
-currenciesDisplayName.MZM=\ubaa8\uc7a0\ube44\ud06c \uba54\ud2f0\uce7c
-currenciesDisplayName.UYU=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c \uc6b0\ub8e8\uacfc\uc694
-currenciesDisplayName.GNI=\uae30\ub2c8 \ud504\ub791 (1960-1972)
-currenciesDisplayName.SML=\uc0b0\ub9c8\ub9ac\ub178 \ub9ac\ub77c
-currenciesDisplayName.MZE=\ubaa8\uc7a0\ube44\ud06c \uc5d0\uc2a4\ucfe0\ub3c4
-currenciesDisplayName.PGK=\ud30c\ud478\uc544\ub274\uae30\ub2c8 \ud0a4\ub098
-currenciesDisplayName.OMS=\uc624\ub9cc \ub9ac\uc584 \uc0ac\uc774\ub514
-currenciesDisplayName.GNF=\uae30\ub2c8 \ud504\ub791
-currenciesDisplayName.UYP=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c (1975-1993)
-currenciesDisplayName.OMR=\uc624\ub9cc \ub9ac\uc584
-currenciesDisplayName.XFU=\ud504\ub791\uc2a4 UIC-\ud504\ub791
-currenciesDisplayName.ZRZ=\uc790\uc774\ub974 \uc790\uc774\ub974
-currenciesDisplayName.BTR=\ubd80\ud0c4 \ub8e8\ud53c
-currenciesDisplayName.MAF=\ubaa8\ub85c\ucf54 \ud504\ub791
-currenciesDisplayName.MAD=\ubaa8\ub85c\ucf54 \ub514\ub818
-currenciesDisplayName.XFO=\ud504\ub791\uc2a4 Gold \ud504\ub791
-currenciesDisplayName.BTN=\ubd80\ud0c4 \ub20c\ud22c\ub214
-currenciesDisplayName.UYF=\uc6b0\ub8e8\uacfc\uc774 \ud398\uc18c \ud478\uc5d0\ub974\ub5bc
-currenciesDisplayName.MYR=\ub9d0\ub808\uc774\uc9c0\uc544 \ub9c1\uae30\ud2b8
-currenciesDisplayName.ZRN=\uc790\uc774\ub974 \uc2e0\uad8c \uc790\uc774\ub974
-currenciesDisplayName.AZM=\uc544\uc81c\ub974\ubc14\uc774\uc820 \ub9c8\ub098\ud2b8
-currenciesDisplayName.GMP=\uac10\ube44\uc544 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.KMF=\ucf54\ubaa8\ub974 \ud504\ub791
-currenciesDisplayName.SLL=\uc2dc\uc5d0\ub77c\ub9ac\uc628 \ub9ac\uc628
-currenciesDisplayName.GMD=\uac10\ube44\uc544 \ub2ec\ub77c\uc2dc
-currenciesDisplayName.XEU=\uc720\ub7fd \ud658\uc728 \ub2e8\uc704
-currenciesDisplayName.BSP=\ubc14\ud558\ub9c8 \ub2ec\ub7ec \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BSD=\ubc14\ud558\ub9c8 \ub2ec\ub7ec
-currenciesDisplayName.MXP=\uba55\uc2dc\ucf54 \uc2e4\ubc84 \ud398\uc18c (1861-1992)
-currenciesDisplayName.MXN=\uba55\uc2dc\ucf54 \ud398\uc18c
-currenciesDisplayName.PES=\ud398\ub8e8 \uc194
-currenciesDisplayName.GLK=\uadf8\ub9b0\ub780\ub4dc \ud06c\ub85c\ub124
-currenciesDisplayName.BRZ=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc81c\uc774\ub8e8 (1942-1967)
-currenciesDisplayName.PEN=\ud398\ub8e8 \uc194 \ub204\uc5d0\ubcf4
-currenciesDisplayName.CLP=\uce60\ub808 \ud398\uc18c
-currenciesDisplayName.SKK=\uc2ac\ub85c\ubc14\ud0a4\uc544 \ucf54\ub8e8\ub098
-currenciesDisplayName.PEI=\ud398\ub8e8 \uc778\ud2f0
-currenciesDisplayName.BRR=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc81c\uc774\ub8e8
-currenciesDisplayName.XDR=\ud2b9\ubcc4\uc778\ucd9c\uad8c
-currenciesDisplayName.FRG=\ud504\ub791\uc2a4 \ud504\ub791 \uc81c\ub974\ubbf8\ub0a0/\ud504\ub791 \ud3ec\uc559\uce74\ub808
-currenciesDisplayName.FRF=\ud504\ub791\uc2a4 \ud504\ub791
-currenciesDisplayName.BRN=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc790\ub450 \ub178\ubcf4
-currenciesDisplayName.CLE=\uce60\ub808 \uc5d0\uc2a4\ucfe0\ub3c4
-currenciesDisplayName.BRL=\ube0c\ub77c\uc9c8 \ub808\uc54c
-currenciesDisplayName.CLC=\uce60\ub808 \ucf58\ub3c4\ub974
-currenciesDisplayName.BRE=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc81c\uc774\ub8e8 (1990-1993)
-currenciesDisplayName.DES=\ub3c5\uc77c \uc2a4\ud37c\ub9c8\ub974\ud06c
-currenciesDisplayName.MWP=\ub9d0\ub77c\uc704 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.BRC=\ube0c\ub77c\uc9c8 \ud06c\ub8e8\uc790\ub450
-currenciesDisplayName.BRB=\ubcfc\ub9ac\ube44\uc544\ub178 \ud06c\ub8e8\uc81c\uc774\ub8e8 \ub178\ubcf4 (1967-1986)
-currenciesDisplayName.MWK=\ub9d0\ub77c\uc704 \ucf70\uccd0
-currenciesDisplayName.DEM=\ub3c5\uc77c \ub9c8\ub974\ud06c
-currenciesDisplayName.NPR=\ub124\ud314 \ub8e8\ud53c
-currenciesDisplayName.CKD=\ucfe1 \uc81c\ub3c4 \ub2ec\ub7ec
-currenciesDisplayName.JPY=\uc77c\ubcf8 \uc5d4\ud654
-currenciesDisplayName.MVR=\ubab0\ub514\ube0c \uc81c\ub3c4 \ub8e8\ud53c\uc544
-currenciesDisplayName.MVP=\ubab0\ub514\ube0c \uc81c\ub3c4 \ub8e8\ud53c
-currenciesDisplayName.XCD=\ub3d9\uce74\ub9ac\ube0c \ub2ec\ub7ec
-currenciesDisplayName.SIT=\uc2ac\ub85c\ubca0\ub2c8\uc544 \ud1a8\ub77c\ub974
-currenciesDisplayName.YUR=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \uac1c\ub7c9 \ub514\ub098\ub974
-currenciesDisplayName.AWG=\uc544\ub8e8\ubc14 \uae38\ub354
-currenciesDisplayName.YUO=\uc720\uace0\uc2ac\ub77c\ube44\uc544 10\uc6d4 \ub514\ub098\ub974
-currenciesDisplayName.DDM=\ub3d9\ub3c5 \uc624\uc2a4\ud2b8\ub9c8\ub974\ud06c
-currenciesDisplayName.YUN=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \uc804\ud658 \ub514\ub098\ub974
-currenciesDisplayName.YUM=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub178\ube44 \ub514\ub098\ub974
-currenciesDisplayName.TCC=\ud130\ud06c\uc2a4\ucf00\uc774\ucee4\uc2a4 \ud06c\ub77c\uc6b4
-currenciesDisplayName.YUG=\uc720\uace0\uc2ac\ub77c\ube44\uc544 1994 \ub514\ub098\ub974
-currenciesDisplayName.YUF=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \uc5f0\ud569 \ub514\ub098\ub974
-currenciesDisplayName.RON=\ub8e8\ub9c8\ub2c8\uc544 \uc2e0\uad8c \ub808\uc774
-currenciesDisplayName.YUD=\uc720\uace0\uc2ac\ub77c\ube44\uc544 \ub3d9\uc804 \ub514\ub098\ub974
-currenciesDisplayName.ROL=\ub8e8\ub9c8\ub2c8\uc544 \ub808\uc774
-currenciesDisplayName.SIB=\uc2ac\ub85c\ubca0\ub2c8\uc544 \ud1a8\ub77c\ub974 \ubcf8\uc2a4
-currenciesDisplayName.NOK=\ub178\ub974\uc6e8\uc774 \ud06c\ub85c\ub124
-currenciesDisplayName.MUR=\ubaa8\ub9ac\uc154\uc2a4 \ub8e8\ud53c
-currenciesDisplayName.GIP=\uc9c0\ube0c\ub864\ud130 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.VNS=\ubca0\ud2b8\ub0a8 \uad6d\uc601 \ub3d9
-currenciesDisplayName.VNR=\ubca0\ud2b8\ub0a8 \uacf5\ud654\uad6d \ub3d9
-currenciesDisplayName.KID=\ud0a4\ub9ac\ubc14\uc2dc \ub2ec\ub7ec
-currenciesDisplayName.SHP=\uc138\uc778\ud2b8\ud5ec\ub808\ub098 \ud30c\uc6b4\ub4dc
-currenciesDisplayName.VNN=\ubca0\ud2b8\ub0a8 \uc2e0\uad8c \ub3d9
-currenciesSymbol.JOD=JOD
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=MTL
-currenciesSymbol.AUD=AUD
-currenciesSymbol.ITL=ITL
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=KGS
-currenciesSymbol.CHF=CHF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LYD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
+currenciesDisplayName.BMD=\ubc84\ubba4\ub2e4 \ub2ec\ub7ec
+currenciesSymbol.JPY=\uffe5
currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=TWD
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=GEL
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIC=NIC
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.SAS=SAS
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=KZT
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=LSL
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=GYD
-currenciesSymbol.AMD=AMD
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=ALL
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MKD
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=UGX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=NAD
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=BAM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=PLN
-currenciesSymbol.YER=YER
-currenciesSymbol.SRG=SRG
-currenciesSymbol.CSK=CSK
currenciesSymbol.KRW=\uffe6
-currenciesSymbol.BYR=BYR
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=AFN
-currenciesSymbol.ZWD=ZWD
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DJF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=MZM
-currenciesSymbol.UYU=UYU
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
-currenciesSymbol.GNF=GNF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=OMR
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.XFO=XFO
-currenciesSymbol.BTN=BTN
-currenciesSymbol.UYF=UYF
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.MYR=MYR
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MXN
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=SKK
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=BRL
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MWK
-currenciesSymbol.DEM=DEM
-currenciesSymbol.NPR=NPR
-currenciesSymbol.CKD=CKD
-currenciesSymbol.JPY=\uffe5
-currenciesSymbol.MVR=MVR
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=XCD
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.ITL=ITL
+currenciesSymbol.USD=US$
shortMonths=1\uc6d4®2\uc6d4®3\uc6d4®4\uc6d4®5\uc6d4®6\uc6d4®7\uc6d4®8\uc6d4®9\uc6d4®10\uc6d4®11\uc6d4®12\uc6d4®®
months=1\uc6d4®2\uc6d4®3\uc6d4®4\uc6d4®5\uc6d4®6\uc6d4®7\uc6d4®8\uc6d4®9\uc6d4®10\uc6d4®11\uc6d4®12\uc6d4®®
shortWeekdays=®\uc77c®\uc6d4®\ud654®\uc218®\ubaa9®\uae08®\ud1a0®
@@ -713,7 +255,7 @@ shortTimeFormat=a hh'\uc2dc' mm'\ubd84'
mediumTimeFormat=a hh'\uc2dc' mm'\ubd84'
longTimeFormat=a hh'\uc2dc' mm'\ubd84' ss'\ucd08'
fullTimeFormat=a hh'\uc2dc' mm'\ubd84' ss'\ucd08' z
-zoneStrings=America/Los_Angeles®PST®\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc®PDT®\ud0dc\ud3c9\uc591 \uae30\uc900\uc2dc®©Pacific/Honolulu®HST®\ud558\uc640\uc774 \ud45c\uc900\uc2dc®HST®\ud558\uc640\uc774 \ud45c\uc900\uc2dc®©Etc/GMT®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®©America/Phoenix®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®©Africa/Casablanca®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®©America/Denver®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®MDT®\uc0b0\uc545 \uae30\uc900\uc2dc®©Asia/Jerusalem®IST®\uc774\uc2a4\ub77c\uc5d8 \ud45c\uc900\uc2dc®IDT®\uc774\uc2a4\ub77c\uc5d8 \uae30\uc900\uc2dc®©America/Anchorage®AST®\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc®ADT®\uc54c\ub798\uc2a4\uce74 \uae30\uc900\uc2dc®©Europe/Paris®CET®\uc911\ubd80\uc720\ub7fd \ud45c\uc900\uc2dc®CEST®\uc911\ubd80\uc720\ub7fd \uae30\uc900\uc2dc®©America/Indianapolis®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®©Europe/Bucharest®EET®\ub3d9\ubd80\uc720\ub7fd \ud45c\uc900\uc2dc®EEST®\ub3d9\ubd80\uc720\ub7fd \uae30\uc900\uc2dc®©Asia/Tokyo®JST®\uc77c\ubcf8 \ud45c\uc900\uc2dc®JST®\uc77c\ubcf8 \ud45c\uc900\uc2dc®©Asia/Shanghai®CTT®\uc911\uad6d \ud45c\uc900\uc2dc®CDT®\uc911\uad6d \ud45c\uc900\uc2dc®©America/New_York®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®EDT®\ub3d9\ubd80 \uae30\uc900\uc2dc®©Asia/Seoul®KST®\ud55c\uad6d\ud45c\uc900\uc2dc®KST®\ud55c\uad6d\ud45c\uc900\uc2dc®©America/Halifax®AST®\ub300\uc11c\uc591 \ud45c\uc900\uc2dc®ADT®\ub300\uc11c\uc591 \uae30\uc900\uc2dc®©America/St_Johns®CNT®\ub274\ud380\ub4e4\ub79c\ub4dc \ud45c\uc900\uc2dc®CDT®\ub274\ud380\ub4e4\ub79c\ub4dc \uae30\uc900\uc2dc®©America/Chicago®CST®\uc911\ubd80 \ud45c\uc900\uc2dc®CDT®\uc911\ubd80 \uae30\uc900\uc2dc®©
+zoneStrings=America/St_Johns®CNT®\ub274\ud380\ub4e4\ub79c\ub4dc \ud45c\uc900\uc2dc®CDT®\ub274\ud380\ub4e4\ub79c\ub4dc \uae30\uc900\uc2dc®©America/Anchorage®AST®\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc®ADT®\uc54c\ub798\uc2a4\uce74 \uae30\uc900\uc2dc®©Europe/Paris®CET®\uc911\ubd80\uc720\ub7fd \ud45c\uc900\uc2dc®CEST®\uc911\ubd80\uc720\ub7fd \uae30\uc900\uc2dc®©America/Halifax®AST®\ub300\uc11c\uc591 \ud45c\uc900\uc2dc®ADT®\ub300\uc11c\uc591 \uae30\uc900\uc2dc®©Asia/Shanghai®CTT®\uc911\uad6d \ud45c\uc900\uc2dc®CDT®\uc911\uad6d \ud45c\uc900\uc2dc®©America/New_York®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®EDT®\ub3d9\ubd80 \uae30\uc900\uc2dc®©America/Denver®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®MDT®\uc0b0\uc545 \uae30\uc900\uc2dc®©Africa/Casablanca®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®GMT®\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc®©America/Los_Angeles®PST®\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc®PDT®\ud0dc\ud3c9\uc591 \uae30\uc900\uc2dc®©Asia/Jerusalem®IST®\uc774\uc2a4\ub77c\uc5d8 \ud45c\uc900\uc2dc®IDT®\uc774\uc2a4\ub77c\uc5d8 \uae30\uc900\uc2dc®©Pacific/Honolulu®HST®\ud558\uc640\uc774 \ud45c\uc900\uc2dc®HST®\ud558\uc640\uc774 \ud45c\uc900\uc2dc®©America/Phoenix®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®MST®\uc0b0\uc545 \ud45c\uc900\uc2dc®©Asia/Tokyo®JST®\uc77c\ubcf8 \ud45c\uc900\uc2dc®JST®\uc77c\ubcf8 \ud45c\uc900\uc2dc®©Europe/Bucharest®EET®\ub3d9\ubd80\uc720\ub7fd \ud45c\uc900\uc2dc®EEST®\ub3d9\ubd80\uc720\ub7fd \uae30\uc900\uc2dc®©America/Chicago®CST®\uc911\ubd80 \ud45c\uc900\uc2dc®CDT®\uc911\ubd80 \uae30\uc900\uc2dc®©Asia/Seoul®KST®\ud55c\uad6d\ud45c\uc900\uc2dc®KST®\ud55c\uad6d\ud45c\uc900\uc2dc®©America/Indianapolis®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®EST®\ub3d9\ubd80 \ud45c\uc900\uc2dc®©
territories.TL=\ub3d9\ud2f0\ubaa8\ub974
territories.TK=\ud1a0\ucf08\ub77c\uc6b0
territories.TJ=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4
@@ -802,6 +344,7 @@ territories.CX=\ud06c\ub9ac\uc2a4\ub9c8\uc2a4\uc12c
territories.CV=\uae4c\ubf40\ubca0\ub974\ub370
territories.PA=\ud30c\ub098\ub9c8
territories.CU=\ucfe0\ubc14
+territories.CS=\uc138\ub974\ube44\uc544 \ubc0f \ubaac\ud14c\ub124\uadf8\ub85c
territories.CR=\ucf54\uc2a4\ud0c0\ub9ac\uce74
territories.CO=\ucf5c\ub86c\ube44\uc544
territories.CN=\uc911\uad6d
@@ -872,17 +415,16 @@ territories.AI=\uc548\uae38\ub77c
territories.MS=\ubaac\ud2b8\uc138\ub77c\ud2b8
territories.MR=\ubaa8\ub9ac\ud0c0\ub2c8
territories.AG=\uc564\ud2f0\uac00 \ubc14\ubd80\ub2e4
-territories.MQ=\ub9d0\ud2f0\ub2c8\ud06c
territories.AF=\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4
-territories.MP=\ubd81\ub9c8\ub9ac\uc544\ub098\uc81c\ub3c4
+territories.MQ=\ub9d0\ud2f0\ub2c8\ud06c
territories.AE=\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8
-territories.MO=\ub9c8\uce74\uc624, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c
+territories.MP=\ubd81\ub9c8\ub9ac\uc544\ub098\uc81c\ub3c4
territories.AD=\uc548\ub3c4\ub77c
+territories.MO=\ub9c8\uce74\uc624, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c
territories.MN=\ubabd\uace8
territories.MM=\ubbf8\uc580\ub9c8
territories.ML=\ub9d0\ub9ac
territories.MK=\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4
-territories.YU=\uc720\uace0\uc2ac\ub77c\ube44\uc544
territories.YT=\ub9c8\uc694\ud2f0
territories.MH=\ub9c8\uc0ec \uad70\ub3c4
territories.MG=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974
@@ -953,8 +495,8 @@ territories.TR=\ud130\ud0a4
territories.TO=\ud1b5\uac00
territories.TN=\ud280\ub2c8\uc9c0
territories.TM=\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4
-languages.gwi=\uadf8\uc704\uce5c\uc5b4
languages.akk=\uc544\uce74\ub4dc\uc5b4
+languages.gwi=\uadf8\uc704\uce5c\uc5b4
languages.eka=\uc774\uce74\uc8fd\uc5b4
languages.ijo=\uc774\uc870\uc5b4
languages.xh=\ubc18\ud22c\uc5b4(\ub0a8\uc544\ud504\ub9ac\uce74)
@@ -967,15 +509,15 @@ languages.pon=\ud3fc\ud398\uc774\uc5b4
languages.min=\ubbf8\ub0ad\uce74\ubc14\uc6b0
languages.suk=\uc218\ucfe0\ub9c8\uc871\uc5b4
languages.wo=\uc62c\ub85c\ud504\uc5b4
-languages.lol=\ubabd\uad6c\uc5b4
languages.kut=\ucfe0\ud14c\ub124\uc5b4
+languages.lol=\ubabd\uad6c\uc5b4
languages.mic=\ubbf8\ud06c\ub9e5\uc5b4
languages.wa=\uc648\ub860\uc5b4
languages.kum=\ucfe0\ubbf9\uc5b4
languages.zap=\uc0ac\ud3ec\ud14c\ud06c\uc5b4
languages.cus=\ucfe0\uc2dc\ud2b8\uc81c\uc871\uc5b4 (\uae30\ud0c0)
-languages.jbo=\ub85c\ubc18\uc5b4
languages.doi=\ub3c4\uadf8\ub9ac\uc5b4
+languages.jbo=\ub85c\ubc18\uc5b4
languages.vo=\ubcfc\ub77c\ud4cc\ud06c\uc5b4
languages.oto=\uc624\ud1a0\ubbf8\uc548\uc5b4
languages.vi=\ubca0\ud2b8\ub0a8\uc5b4
@@ -999,8 +541,8 @@ languages.egy=\uc774\uc9d1\ud2b8\uc5b4 (\uace0\ub300)
languages.ug=\uc704\uad6c\ub974\uc5b4
languages.fan=\ud321\uadf8\uc5b4
languages.ssa=\ub2c8\ub85c-\uc0ac\ud558\ub78c\uc5b4 (\uae30\ud0c0)
-languages.mga=\uc544\uc77c\ub79c\ub4dc\uc5b4, \uc911\uc138 (900-1200)
languages.bat=\ubc1c\ud2b8\uc5b4 (\uae30\ud0c0)
+languages.mga=\uc544\uc77c\ub79c\ub4dc\uc5b4, \uc911\uc138 (900-1200)
languages.nyo=\ub274\ub85c\uc5b4
languages.bas=\ubc14\uc0ac\uc5b4
languages.nyn=\ub2c8\uc548\ucf5c\uc5b4
@@ -1028,8 +570,8 @@ languages.kru=\ucfe0\ub974\ud06c\uc5b4
languages.tg=\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4\uc5b4
languages.byn=\ube0c\ub9b0\uc5b4
languages.te=\ud154\ub8e8\uad6c\uc5b4
-languages.kro=\ud06c\ub8e8\uc5b4
languages.csb=\uce74\uc288\ube44\uc544\uc5b4
+languages.kro=\ud06c\ub8e8\uc5b4
languages.ta=\ud0c0\ubc00\uc5b4
languages.tkl=\ud1a0\ucf08\ub77c\uc6b0\uc81c\ub3c4\uc5b4
languages.efi=\uc774\ud53d\uc5b4
@@ -1053,8 +595,8 @@ languages.sk=\uc2ac\ub85c\ubc14\ud0a4\uc544\uc5b4
languages.grb=\uac8c\ub974\ubcf4\uc5b4
languages.si=\uc2a4\ub9ac\ub791\uce74\uc5b4
languages.sh=\uc138\ub974\ubcf4\ud06c\ub85c\uc544\ud2f0\uc544\uc5b4
-languages.crh=\ud06c\ub9ac\ubbfc \ud130\ud0a4\uc5b4; \ud06c\ub9ac\ubbfc \ud0c0\ud0c0\ub974\uc5b4
languages.afa=\uc544\uc2dc\uc544-\uc544\ud504\ub9ac\uce74\uc5b4 (\uae30\ud0c0)
+languages.crh=\ud06c\ub9ac\ubbfc \ud130\ud0a4\uc5b4; \ud06c\ub9ac\ubbfc \ud0c0\ud0c0\ub974\uc5b4
languages.sg=\uc0b0\uace0\uc5b4
languages.se=\ubd81\ubd80 \uc0ac\ubbf8\uc5b4
languages.sd=\uc2e0\ub514\uc5b4
@@ -1078,14 +620,14 @@ languages.son=\uc1a1\uac00\uc774\uc871\uc5b4
languages.cpp=\ud06c\ub808\uc624\ub9ac\uc2a4\uc640 \ud53c\uae34\uc2a4\uc5b4, \ud3ec\ub974\ud22c\uac08\uc5b4-\uae30\ubc18 (\uae30\ud0c0)
languages.sog=\uc18c\uadf8\ub514\uc5d4\uc5b4
languages.ada=\uc544\ub2f9\uba54\uc5b4
-languages.kos=\ucf54\uc2a4\ub77c\uc774\uc5d4\uc5b4
-languages.hit=\ud558\ud0c0\uc774\ud2b8\uc5b4
languages.cpf=\ud06c\ub808\uc624\ub9ac\uc2a4\uc640 \ud53c\uae34\uc2a4\uc5b4, \ud504\ub791\uc2a4\uc5b4-\uae30\ubc18 (\uae30\ud0c0)
+languages.hit=\ud558\ud0c0\uc774\ud2b8\uc5b4
+languages.kos=\ucf54\uc2a4\ub77c\uc774\uc5d4\uc5b4
languages.cpe=\ud06c\ub808\uc624\ub9ac\uc2a4\uc640 \ud53c\uae34\uc2a4\uc5b4, \uc601\uc5b4-\uae30\ubc18 (\uae30\ud0c0)
languages.him=\ud788\ub9c8\ucc28\ub9ac\uc5b4
-languages.kok=\ucf54\uce74\ub2c8\uc5b4
-languages.hil=\ud5e4\ub9ac\uac00\ub1ec\uc5b4
languages.got=\uace0\ud2b8\uc5b4
+languages.hil=\ud5e4\ub9ac\uac00\ub1ec\uc5b4
+languages.kok=\ucf54\uce74\ub2c8\uc5b4
languages.gor=\uace0\ub860\ud0c8\ub85c\uc5b4
languages.gon=\uace4\ub514\uc5b4
languages.din=\ub529\uce74\uc5b4
@@ -1156,21 +698,21 @@ languages.ms=\ub9d0\ub808\uc774\uc5b4
languages.mr=\ub9c8\ub77c\ud2f0\uc5b4
languages.fro=\ud504\ub791\uc2a4\uc5b4, \uace0\ub300 (842-ca.1400)
languages.mo=\ubab0\ub2e4\ube44\uc544\uc5b4
-languages.frm=\ud504\ub791\uc2a4\uc5b4, \uc911\uc138 (ca.1400-1600)
languages.mn=\ubabd\uace8\uc5b4
-languages.jrb=\uc720\ub300-\uc544\ub77c\ube44\uc544\uc5b4
+languages.frm=\ud504\ub791\uc2a4\uc5b4, \uc911\uc138 (ca.1400-1600)
languages.ml=\ub9d0\ub77c\uc584\ub78c\uc5b4
+languages.jrb=\uc720\ub300-\uc544\ub77c\ube44\uc544\uc5b4
languages.mk=\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4
languages.mi=\ub9c8\uc624\ub9ac\uc5b4
languages.mh=\ub9c8\uc15c\uc81c\ub3c4\uc5b4
languages.mg=\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974\uc5b4
languages.mwr=\ub9c8\ub974\uc640\ub9ac\uc5b4
languages.bra=\ube0c\ub77c\uc5b4
-languages.den=\uc2ac\ub77c\ube0c\uc5b4
languages.lv=\ub77c\ud2b8\ube44\uc544\uc5b4
+languages.den=\uc2ac\ub77c\ube0c\uc5b4
languages.lu=\ub8e8\ubc14-\uce74\ud0c4\uac00\uc5b4
-languages.del=\ub378\ub77c\uc6e8\uc5b4\uc5b4
languages.lt=\ub9ac\ud22c\uc544\ub2c8\uc544\uc5b4
+languages.del=\ub378\ub77c\uc6e8\uc5b4\uc5b4
languages.lo=\ub77c\uc624\uc5b4
languages.ln=\ub9c1\uac08\ub77c\uc5b4
languages.li=\ub9bc\ubc84\uac70\uc5b4
@@ -1223,37 +765,37 @@ languages.iu=\uc774\ub205\ud2f0\ud22c\ud2b8\uc5b4
languages.pap=\ud30c\ud53c\uc544\uba3c\ud1a0\uc5b4
languages.it=\uc774\ud0c8\ub9ac\uc544\uc5b4
languages.sgn=\uc218\ud654
-languages.is=\uc544\uc774\uc2ac\ub780\ub4dc\uc5b4
languages.kha=\uce74\uc2dc\uc5b4
+languages.is=\uc544\uc774\uc2ac\ub780\ub4dc\uc5b4
languages.chr=\uccb4\ub85c\ud0a4\uc5b4
languages.pam=\ud31c\ud321\uac00\uc5b4
languages.pal=\ud314\ube4c\ub808\uc5b4
languages.chp=\uce58\ud398\uc6b0\uc580
-languages.io=\uc774\ub3c4\uc5b4
languages.cho=\ucd09\ud1a0\uc5b4
+languages.io=\uc774\ub3c4\uc5b4
languages.chn=\uce58\ub204\ud06c\uc5b4\uc640 \uc601\uc5b4 \ud504\ub791\uc2a4\uc5b4\uc758 \ud63c\uc131\uc5b4
languages.chm=\ub9c8\ub9ac\uc5b4
languages.tyv=\ud22c\ube44\ub2c8\uc548\uc5b4
languages.bnt=\ubc18\ud22c\uc5b4
languages.pag=\ud310\uac00\uc2dc\ub09c\uc5b4
-languages.ik=\uc774\ub204\ud53c\uc544\ud06c\uc5b4
languages.chk=\uce04\ucf00\uc2a4\uc5b4
-languages.ii=\uc2dc\uce04\uc548 \uc774\uc5b4
+languages.ik=\uc774\ub204\ud53c\uc544\ud06c\uc5b4
languages.haw=\ud558\uc640\uc774\uc5b4
+languages.ii=\uc2dc\uce04\uc548 \uc774\uc5b4
languages.lam=\ub78c\ubc14\uc5b4
-languages.ig=\uc774\uadf8\ubcf4\uc5b4
languages.chg=\ucc28\uac00\ud0c0\uc774\uc5b4
+languages.ig=\uc774\uadf8\ubcf4\uc5b4
languages.sga=\uc544\uc77c\ub79c\ub4dc, \uace0\ub300 (900\ub144 \uae4c\uc9c0)
languages.paa=\ud30c\ud478\uc544\uc5b4 (\uae30\ud0c0)
languages.ie=\uc778\ud130\ub9c1\uac8c\uc5b4
languages.id=\uc778\ub3c4\ub124\uc2dc\uc544\uc5b4
languages.lah=\ub77c\ud55c\ub2e4\uc5b4
-languages.day=\ub2e4\uc57c\ud06c\uc5b4
languages.chb=\uce58\ube0c\ucc28\uc5b4
+languages.day=\ub2e4\uc57c\ud06c\uc5b4
languages.ia=\uc778\ud130\ub9c1\uac70
languages.lad=\ub77c\ub514\ub178\uc5b4
-languages.hai=\ud558\uc774\ub2e4\uc5b4
languages.dar=\ub2e4\ub974\uadf8\uc640\uc5b4
+languages.hai=\ud558\uc774\ub2e4\uc5b4
languages.hy=\uc544\ub974\uba54\ub2c8\uc544\uc5b4
languages.ath=\uc544\ud0c0\ubc14\uc2a4\uce74\uc5b4
languages.hu=\ud5dd\uac00\ub9ac\uc5b4
@@ -1275,9 +817,9 @@ languages.iro=\uc774\ub7ec\ucffc\uc774\uc5b4
languages.gn=\uad6c\uc544\ub77c\ub2c8\uc5b4
languages.gl=\uac08\ub9ac\uc2dc\uc544\uc5b4
languages.arw=\uc544\ub77c\uc640\ud06c\uc5b4
-languages.gez=\uac8c\uc774\uc988\uc5b4
-languages.art=\uae30\uacc4\uc5b4 (\uae30\ud0c0)
languages.gd=\uc2a4\ucf54\uac24\ub9ad\uc5b4
+languages.art=\uae30\uacc4\uc5b4 (\uae30\ud0c0)
+languages.gez=\uac8c\uc774\uc988\uc5b4
languages.ira=\uc774\ub780\uc5b4
languages.ga=\uc544\uc77c\ub79c\ub4dc\uc5b4
languages.arp=\uc544\ub77c\ud30c\ud638\uc5b4
@@ -1286,8 +828,8 @@ languages.fy=\ud504\ub9ac\uc9c0\uc544\uc5b4
languages.bla=\uc2dd\uc2dc\uce74\uc5b4
languages.gem=\ub3c5\uc77c\uc5b4 (\uae30\ud0c0)
languages.ypk=\uc57c\ud53d\uc5b4
-languages.arc=\uc544\ub78c\uc5b4
languages.fr=\ud504\ub791\uc2a4\uc5b4
+languages.arc=\uc544\ub78c\uc5b4
languages.fo=\ud398\ub85c\uc2a4\uc5b4
languages.cel=\ucf08\ud2b8\uc5b4 (\uae30\ud0c0)
languages.fj=\ud53c\uc9c0\uc5b4
@@ -1311,9 +853,9 @@ languages.tum=\ud23c\ubd80\uce74\uc5b4
languages.mos=\ubaa8\uc2dc\uc5b4
languages.dz=\ubd80\ud0c4\uc5b4
languages.nic=\ub2c8\uc81c\ub974 - \ucf54\ub974\ub3c4\ud30c\ub2c8\uc544\uc5b4 (\uae30\ud0c0)
-languages.lus=\ub8e8\uc0e4\uc774\uc5b4
-languages.fiu=\ud53c\ub178\uc6b0\uadf8\ub9ac\uc544\uc5b4 (\uae30\ud0c0)
languages.dv=\ub514\ubca0\ud788\uc5b4
+languages.fiu=\ud53c\ub178\uc6b0\uadf8\ub9ac\uc544\uc5b4 (\uae30\ud0c0)
+languages.lus=\ub8e8\uc0e4\uc774\uc5b4
languages.nia=\ub2c8\uc544\uc2a4\uc5b4
languages.moh=\ubaa8\ud638\ud06c\uc5b4
languages.luo=\ub8e8\uc624\uc5b4
@@ -1336,8 +878,8 @@ languages.wak=\uc640\uce74\uc0e8\uc5b4
languages.sat=\uc0b0\ud0c8\ub9ac\uc5b4
languages.cy=\uc6e8\uc77c\uc2a4\uc5b4
languages.sas=\uc0ac\uc0ac\ud06c\uc5b4
-languages.kbd=\uce74\ubc14\ub974\ub514\uc5b4
languages.cv=\ucd94\ubc14\uc2dc\uc5b4
+languages.kbd=\uce74\ubc14\ub974\ub514\uc5b4
languages.cu=\uad50\ud68c\uc2ac\ub77c\ube0c\uc5b4
languages.mni=\ub9c8\ub2c8\ud478\ub9ac\uc5b4
languages.cs=\uccb4\ucf54\uc5b4
@@ -1349,16 +891,16 @@ languages.co=\ucf54\ub974\uc2dc\uce74\uc5b4
languages.sai=\ub0a8\uc544\uba54\ub9ac\uce74 \uc778\ub514\uc5b8\uc5b4 (\uae30\ud0c0)
languages.mnc=\ub9cc\uc8fc\uc5b4
languages.sah=\uc57c\ud050\ud2b8\uc5b4
-languages.kaw=\uce74\uc704\uc5b4
-languages.inh=\uc778\uadc0\uc2dc\uc5b4
languages.gba=\uadf8\ubc14\uc57c\uc5b4
+languages.inh=\uc778\uadc0\uc2dc\uc5b4
+languages.kaw=\uce74\uc704\uc5b4
languages.sad=\uc0b0\ub2e4\uc6e8\uc5b4
languages.ch=\ucc28\ubaa8\ub85c\uc5b4
-languages.ine=\uc778\ub3c4\uc720\ub7fd\uc5b4 (\uae30\ud0c0)
languages.bho=\ud638\uc988\ud478\ub9ac\uc5b4
+languages.ine=\uc778\ub3c4\uc720\ub7fd\uc5b4 (\uae30\ud0c0)
languages.enm=\uc601\uc5b4, \uc911\uc138 (1100-1500)
-languages.kar=\uce74\ub80c\uc5b4
languages.inc=\uc778\ub3c4\uc5b4 (\uae30\ud0c0)
+languages.kar=\uce74\ub80c\uc5b4
languages.gay=\uac00\uc694\uc5b4
languages.ca=\uce74\ud0c8\ub85c\ub2c8\uc544\uc5b4
languages.umb=\uc724\ubc88\ub450\uc5b4
@@ -1366,19 +908,19 @@ languages.syr=\uc2dc\ub9ac\uc544\uc5b4
languages.kam=\uce84\ubc14\uc5b4
languages.tsi=\ud2b8\uc2ec\uc2dc\uc548\uc5b4
languages.ang=\uc774\uc804 \uc601\uc5b4 (ca.450-1100)
-languages.kac=\uce74\uce5c\uc5b4
languages.cau=\uce74\ud504\uce74\uc2a4\uc5b4 (\uae30\ud0c0)
+languages.kac=\uce74\uce5c\uc5b4
languages.kab=\ucee4\ubc14\uc77c\uc5b4
-languages.kaa=\uce74\ub77c\uce7c\ud30c\ud06c\uc5b4
languages.bs=\ubcf4\uc2a4\ub2c8\uc544\uc5b4
-languages.car=\uce74\ub9ac\ube0c\uc5b4
+languages.kaa=\uce74\ub77c\uce7c\ud30c\ud06c\uc5b4
languages.br=\ube0c\ub974\ud0c0\ub274\uc5b4
+languages.car=\uce74\ub9ac\ube0c\uc5b4
languages.bo=\ud2f0\ubca0\ud2b8\uc5b4
languages.bn=\ubcb5\uace8\uc5b4
languages.bm=\ubc24\ubc14\ub77c\uc5b4
languages.gaa=\uac00\uc5b4
-languages.cai=\uc911\uc559 \uc544\uba54\ub9ac\uce74 \uc778\ub514\uc548\uc5b4 (\uae30\ud0c0)
languages.bi=\ube44\uc2ac\ub77c\ub9c8\uc5b4
+languages.cai=\uc911\uc559 \uc544\uba54\ub9ac\uce74 \uc778\ub514\uc548\uc5b4 (\uae30\ud0c0)
languages.bh=\ube44\ud558\ub974\uc5b4
languages.bg=\ubd88\uac00\ub9ac\uc544\uc5b4
languages.be=\ubca8\ub85c\ub8e8\uc2dc\uc5b4
@@ -1392,10 +934,10 @@ languages.az=\uc544\uc81c\ub974\ubc14\uc774\uc794\uc5b4
languages.ay=\uc544\uc774\ub9c8\ub77c\uc5b4
languages.av=\uc544\ubc14\ub9ad\uc5b4
languages.as=\uc544\uc0d8\uc5b4
-languages.dsb=\uc800\uae09 \uc18c\ub974\ube44\uc548\uc5b4
languages.ar=\uc544\ub78d\uc5b4
-languages.ilo=\uc774\ub85c\ucf54\uc5b4
+languages.dsb=\uc800\uae09 \uc18c\ub974\ube44\uc548\uc5b4
languages.elx=\uc5d8\ub78c\uc5b4
+languages.ilo=\uc774\ub85c\ucf54\uc5b4
languages.zh=\uc911\uad6d\uc5b4
languages.an=\uc544\ub77c\uace4\uc5b4
languages.pra=\ud504\ub77c\ud06c\ub9ac\ud2b8\uc5b4
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok.properties
new file mode 100644
index 0000000..6e3fe91
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok.properties
@@ -0,0 +1,156 @@
+# LocaleInformation_kok.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesSymbol.INR=\u0930\u0941
+shortMonths=\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940®\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940®\u092e\u093e\u0930\u094d\u091a®\u090f\u092a\u094d\u0930\u093f\u0932®\u092e\u0947®\u091c\u0942\u0928®\u091c\u0941\u0932\u0948®\u0913\u0917\u0938\u094d\u091f®\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930®\u0913\u0915\u094d\u091f\u094b\u092c\u0930®\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930®\u0921\u093f\u0938\u0947\u0902\u092c\u0930®®
+months=\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940®\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940®\u092e\u093e\u0930\u094d\u091a®\u090f\u092a\u094d\u0930\u093f\u0932®\u092e\u0947®\u091c\u0942\u0928®\u091c\u0941\u0932\u0948®\u0913\u0917\u0938\u094d\u091f®\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930®\u0913\u0915\u094d\u091f\u094b\u092c\u0930®\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930®\u0921\u093f\u0938\u0947\u0902\u092c\u0930®®
+shortWeekdays=®\u0930\u0935\u093f®\u0938\u094b\u092e®\u092e\u0902\u0917\u0933®\u092c\u0941\u0927®\u0917\u0941\u0930\u0941®\u0936\u0941\u0915\u094d\u0930®\u0936\u0928\u093f®
+weekdays=®\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930®\u0938\u094b\u092e\u0935\u093e\u0930®\u092e\u0902\u0917\u0933\u093e\u0930®\u092c\u0941\u0927\u0935\u093e\u0930®\u0917\u0941\u0930\u0941\u0935\u093e\u0930®\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930®\u0936\u0928\u093f\u0935\u093e\u0930®
+eras=\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935®\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e®
+ampms=\u092e.\u092a\u0942.®\u092e.\u0928\u0902.®
+zoneStrings=Asia/Calcutta®IST®\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f®IST®\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f®©
+territories.IN=\u092d\u093e\u0930\u0924
+languages.es=\u0938\u094d\u092a\u093e\u0928\u093f\u0937
+languages.ku=\u0915\u0941\u0930\u094d\u0926\u093f\u0937
+languages.eo=\u0907\u0938\u094d\u092a\u0930\u093e\u0928\u094d\u091f\u094b
+languages.en=\u0906\u0902\u0917\u094d\u0932
+languages.ks=\u0915\u0936\u094d\u092e\u0940\u0930\u0940
+languages.el=\u0917\u094d\u0930\u0940\u0915\u094d
+languages.qu=\u0915\u094d\u0935\u0947\u091a\u094d\u0935\u093e
+languages.ko=\u0915\u094b\u0930\u093f\u092f\u0928\u094d
+languages.kn=\u0915\u0928\u094d\u0928\u0921\u093e
+languages.km=\u0915\u0902\u092c\u094b\u0921\u093f\u092f\u0928
+languages.kok=\u0915\u094b\u0902\u0915\u0923\u0940
+languages.kl=\u0917\u094d\u0930\u0940\u0928\u0932\u093e\u0928\u094d\u0921\u093f\u0915
+languages.kk=\u0915\u091c\u093c\u0916\u094d
+languages.wo=\u0909\u0932\u094b\u092b\u093c
+languages.ka=\u091c\u093e\u0930\u094d\u091c\u093f\u092f\u0928\u094d
+languages.dz=\u092d\u0942\u091f\u093e\u0928\u0940
+languages.jv=\u091c\u093e\u0935\u0928\u0940\u0938\u094d
+languages.pt=\u092a\u094b\u0930\u094d\u091a\u0941\u0917\u0940\u091c\u093c\u094d
+languages.ps=\u092a\u093e\u0937\u094d\u091f\u094b (\u092a\u0941\u0937\u094d\u091f\u094b)
+languages.de=\u091c\u0930\u094d\u092e\u0928
+languages.pl=\u092a\u094b\u0932\u093f\u0937
+languages.da=\u0921\u093e\u0928\u093f\u0937
+languages.vo=\u0913\u0932\u093e\u092a\u0941\u0915
+languages.ja=\u091c\u093e\u092a\u0928\u0940\u0938\u094d
+languages.vi=\u0935\u093f\u092f\u0924\u094d\u0928\u093e\u092e\u0940\u091c\u093c
+languages.cy=\u0935\u0947\u0933\u094d\u0937\u094d
+languages.pa=\u092a\u0902\u091c\u093e\u092c\u0940
+languages.cs=\u091c\u093c\u0947\u0915\u094d
+languages.iu=\u0907\u0928\u094d\u092f\u0941\u0915\u091f\u094d\u091f
+languages.co=\u0915\u094b\u0930\u094d\u0936\u093f\u092f\u0928
+languages.it=\u0907\u091f\u093e\u0932\u093f\u092f\u0928
+languages.is=\u0906\u0908\u0938\u094d\u0932\u093e\u0928\u094d\u0921\u093f\u0915
+languages.uz=\u0909\u091c\u093c\u092c\u0947\u0915
+languages.or=\u0913\u0930\u093f\u092f\u093e
+languages.ik=\u0907\u0928\u0942\u092a\u0947\u092f\u093e\u0915\u094d
+languages.ur=\u0909\u0930\u094d\u0926\u0942
+languages.om=\u0913\u0930\u094b\u092e\u094b (\u0905\u092b\u093e\u0928)
+languages.ca=\u0915\u091f\u0932\u093e\u0928
+languages.ie=\u0907\u0928\u094d\u091f\u0930\u0932\u093f\u0902\u0917\u094d
+languages.id=\u0907\u0928\u094d\u0921\u094b\u0928\u0947\u0937\u093f\u092f\u0928
+languages.uk=\u092f\u0941\u0915\u094d\u0930\u0947\u0928\u093f\u092f\u0928\u094d
+languages.ia=\u0907\u0928\u094d\u091f\u0930\u0932\u093f\u0902\u0917\u094d\u0935\u093e
+languages.oc=\u0913\u0938\u093f\u091f\u093e\u0928\u094d
+languages.ug=\u0909\u0927\u0942\u0930
+languages.hy=\u0906\u0930\u094d\u092e\u0940\u0928\u093f\u092f\u0928\u094d
+languages.br=\u092c\u094d\u0930\u0947\u091f\u0928
+languages.hu=\u0939\u0902\u0917\u0947\u0930\u093f\u092f\u0928\u094d
+languages.bo=\u0924\u093f\u092c\u0947\u0924\u093f\u092f\u0928
+languages.bn=\u092c\u0902\u0917\u093e\u0932\u0940
+languages.hr=\u0915\u094d\u0930\u094b\u092f\u0947\u0937\u093f\u092f\u0928\u094d
+languages.bi=\u092c\u093f\u0938\u0932\u092e\u093e
+languages.tw=\u0924\u094d\u0935\u093f
+languages.bh=\u092c\u0940\u0939\u093e\u0930\u0940
+languages.bg=\u092c\u0932\u094d\u0917\u0947\u0930\u093f\u092f\u0928
+languages.tt=\u0924\u091f\u093e\u0930
+languages.no=\u0928\u094b\u0930\u094d\u0935\u0947\u091c\u093f\u092f\u0928
+languages.be=\u092c\u0948\u0932\u094b\u0930\u0941\u0938\u093f\u092f\u0928\u094d
+languages.ts=\u0924\u094d\u0938\u094b\u0917\u093e
+languages.hi=\u0939\u093f\u0928\u094d\u0926\u0940
+languages.tr=\u0924\u0941\u0930\u094d\u0915\u093f\u0937
+languages.nl=\u0921\u091a\u094d
+languages.zu=\u091c\u0941\u0932\u0942
+languages.ba=\u092c\u0937\u094d\u0915\u093f\u0930
+languages.to=\u0924\u094b\u0902\u0917\u093e
+languages.he=\u0939\u0947\u092c\u094d\u0930\u0941
+languages.tn=\u0938\u0947\u0924\u094d\u0938\u094d\u0935\u093e\u0928\u093e
+languages.tl=\u0924\u0917\u093e\u0932\u094b\u0917
+languages.tk=\u0924\u0941\u0930\u094d\u0915\u092e\u0928
+languages.ha=\u0939\u094c\u0938\u093e
+languages.ne=\u0928\u0947\u092a\u093e\u0933\u0940
+languages.az=\u0905\u091c\u093c\u0930\u092c\u0948\u091c\u093e\u0928\u0940
+languages.ti=\u0924\u093f\u0917\u094d\u0930\u093f\u0928\u094d\u092f\u093e
+languages.ay=\u0910\u092e\u0930\u093e
+languages.th=\u0925\u093e\u0908
+languages.tg=\u0924\u091c\u093f\u0915
+languages.na=\u0928\u094c\u0930\u094b
+languages.te=\u0924\u0947\u0932\u0941\u0917\u0942
+languages.zh=\u091a\u0940\u0928\u0940\u0938\u094d
+languages.as=\u0905\u0938\u093e\u092e\u0940
+languages.ar=\u0905\u0930\u0947\u092c\u093f\u0915\u094d
+languages.ta=\u0924\u092e\u093f\u0933
+languages.gu=\u0917\u0941\u091c\u0930\u093e\u0924\u0940
+languages.my=\u092c\u0930\u094d\u092e\u0940\u091c\u093c\u094d
+languages.am=\u0905\u092e\u0939\u093e\u0930\u093f\u0915\u094d
+languages.za=\u091d\u094d\u0939\u0941\u0928\u094d\u0917
+languages.mt=\u092e\u093e\u0932\u0924\u0940\u0938\u094d
+languages.ms=\u092e\u0932\u092f
+languages.gn=\u0917\u094c\u0930\u093e\u0928\u0940
+languages.sw=\u0938\u094d\u0935\u093e\u0939\u093f\u0932\u0940
+languages.mr=\u092e\u0930\u093e\u0920\u0940
+languages.sv=\u0938\u094d\u0935\u0940\u0926\u0940\u0937
+languages.gl=\u0917\u0947\u0932\u0940\u0936\u093f\u092f\u0928
+languages.su=\u0938\u0941\u0902\u0926\u0928\u0940\u0938
+languages.af=\u0905\u092b\u094d\u0930\u093f\u0915\u093e\u0928\u094d\u0938
+languages.st=\u0938\u0947\u0938\u094b\u0925\u094b
+languages.mo=\u092e\u094b\u0932\u094d\u0921\u093e\u0935\u093f\u092f\u0928\u094d
+languages.ss=\u0938\u093f\u0938\u094d\u0935\u093e\u0924\u0940
+languages.mn=\u092e\u0902\u0917\u094b\u0932\u093f\u092f\u0928\u094d
+languages.sr=\u0938\u0947\u0930\u094d\u092c\u093f\u092f\u0928\u094d
+languages.sq=\u0906\u0932\u094d\u092c\u0947\u0928\u093f\u092f\u0928\u094d
+languages.ml=\u092e\u0933\u093f\u092f\u093e\u0933\u092e
+languages.ab=\u0905\u092c\u0916\u0947\u091c\u093c\u093f\u092f\u0928
+languages.mk=\u092e\u0938\u0940\u0921\u094b\u0928\u093f\u092f\u0928\u094d
+languages.aa=\u0905\u092b\u093e\u0930
+languages.so=\u0938\u094b\u092e\u093e\u0933\u0940
+languages.sn=\u0936\u094b\u0928\u093e
+languages.mi=\u092e\u093e\u0913\u0930\u0940
+languages.gd=\u0938\u094d\u0915\u093e\u091f\u0938\u094d \u0917\u0947\u0932\u093f\u0915\u094d
+languages.sm=\u0938\u092e\u094b\u0928
+languages.sl=\u0938\u094d\u0932\u094b\u0935\u0947\u0928\u093f\u092f\u0928\u094d
+languages.mg=\u092e\u0932\u093e\u0917\u0938\u0940
+languages.sk=\u0938\u094d\u0932\u094b\u0935\u093e\u0915
+languages.ga=\u0910\u0930\u093f\u0937
+languages.yo=\u092f\u0942\u0930\u0941\u092c\u093e
+languages.si=\u0938\u093f\u0928\u094d\u0939\u0932\u0940\u0938\u094d
+languages.sh=\u0938\u0947\u0930\u094d\u092c\u094b-\u0915\u094d\u0930\u094b\u092f\u0947\u0937\u093f\u092f\u0928\u094d
+languages.sg=\u0938\u093e\u0902\u0917\u094d\u0930\u094b
+languages.yi=\u0907\u0926\u094d\u0926\u093f\u0937\u094d
+languages.sd=\u0938\u093f\u0902\u0927\u0940
+languages.fy=\u092b\u094d\u0930\u093f\u0936\u093f\u092f\u0928\u094d
+languages.sa=\u0938\u0902\u0938\u094d\u0915\u0943\u0924
+languages.fr=\u092b\u094d\u0930\u0947\u0928\u094d\u091a
+languages.lv=\u0932\u093e\u091f\u094d\u0935\u093f\u092f\u0928\u094d (\u0932\u0947\u091f\u094d\u091f\u093f\u0937\u094d)
+languages.fo=\u092b\u0947\u0930\u094b\u0938\u094d
+languages.lt=\u0932\u093f\u0925\u0941\u0906\u0928\u093f\u092f\u0928\u094d
+languages.rw=\u0915\u093f\u0928\u094d\u092f\u093e\u0930\u094d\u0935\u093e\u0928\u094d\u0921\u093e
+languages.ru=\u0930\u0937\u094d\u092f\u0928\u094d
+languages.fj=\u092b\u093f\u091c\u0940
+languages.lo=\u0932\u093e\u0913\u0924\u093f\u092f\u0928\u094d
+languages.fi=\u092b\u093f\u0928\u094d\u0928\u093f\u0937\u094d
+languages.ln=\u0932\u093f\u0902\u0917\u093e\u0932\u093e
+languages.ro=\u0930\u094b\u092e\u093e\u0928\u093f\u092f\u0928\u094d
+languages.rn=\u0915\u093f\u0930\u0941\u0928\u094d\u0926\u0940
+languages.rm=\u0930\u0939\u091f\u094b-\u0930\u094b\u092e\u093e\u0928\u094d\u0938\u094d
+languages.fa=\u092a\u0930\u094d\u0937\u093f\u092f\u0928\u094d
+languages.la=\u0932\u093e\u091f\u093f\u0928
+languages.xh=\u091d\u093c\u094c\u0938\u093e
+languages.eu=\u092c\u093e\u0938\u094d\u0915
+languages.et=\u0907\u0938\u094d\u091f\u094b\u0928\u093f\u092f\u0928\u094d
+languages.ky=\u0915\u093f\u0930\u094d\u0917\u093f\u091c\u093c
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok_IN.properties
index c814c1c..64ff6f5 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_kok_IN.properties
@@ -1,16 +1,18 @@
-# LocaleInformation_ar_IN.properties --
+# LocaleInformation_kok_IN.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
longDateFormat=d MMMM yyyy
fullDateFormat=EEEE d MMMM yyyy
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
longTimeFormat=h:mm:ss a z
fullTimeFormat=h:mm:ss a z
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ky.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ky.properties
index f736a49..ae32951 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ky.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ky.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.KGS=KGS
currenciesSymbol.KGS=\u0441\u043e\u043c
territories.KG=\u041a\u044b\u0440\u0433\u044b\u0437\u0441\u0442\u0430\u043d
languages.ky=\u041a\u044b\u0440\u0433\u044b\u0437
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo.properties
index 37eb889..cf94908 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo.properties
@@ -12,6 +12,7 @@ shortMonths=\u0ea1.\u0e81.®\u0e81.\u0e9e.®\u0ea1\u0eb5.\u0e99.®\u0ea1.\u0eaa..®\
months=\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99®\u0e81\u0eb8\u0ea1\u0e9e\u0eb2®\u0ea1\u0eb5\u0e99\u0eb2®\u0ec0\u0ea1\u0eaa\u0eb2®\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2®\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2®\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94®\u0eaa\u0eb4\u0e87\u0eab\u0eb2®\u0e81\u0eb1\u0e99\u0e8d\u0eb2®\u0e95\u0eb8\u0ea5\u0eb2®\u0e9e\u0eb0\u0e88\u0eb4\u0e81®\u0e97\u0eb1\u0e99\u0ea7\u0eb2®®
shortWeekdays=®\u0ead\u0eb2.®\u0e88.®\u0ead.®\u0e9e.®\u0e9e\u0eab.®\u0eaa\u0e81.®\u0eaa.®
weekdays=®\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94®\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99®\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99®\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94®\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94®\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81®\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2®
+eras=\u0e9b\u0eb5\u0e81\u0ec8\u0ead\u0e99\u0e84\u0eb4\u0e94\u0eaa\u0eb0\u0e81\u0eb2\u0e99\u0e97\u0eb5\u0ec8®\u0e84.\u0eaa.®
ampms=\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87®\u0eab\u0ea5\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87®
shortDateFormat=d/M/yyyy
mediumDateFormat=d MMM yyyy
@@ -83,13 +84,14 @@ territories.PL=\u0ec2\u0e9b\u0ec1\u0ea5\u0e99
territories.PK=\u0e9b\u0eb2\u0e81\u0eb4\u0eaa\u0e96\u0eb2\u0e99
territories.PH=\u0e9f\u0eb4\u0ea5\u0eb4\u0e9b\u0eb4\u0e99
territories.PG=\u0e9b\u0eb2\u0e9b\u0ebb\u0ea7\u0e99\u0eb4\u0ea7\u0e81\u0eb5\u0e99\u0eb5
-territories.PF=\u0ec0\u0e9f\u0eb1\u0e99\u0ea3\u0ec2\u0e9e\u0ea5\u0eb4\u0e99\u0eb5\u0ec0\u0e8a\u0e8d
territories.CZ=\u0eaa\u0eb2\u0e97\u0eb2\u0ea5\u0eb0\u0e99\u0eb0\u0ea5\u0eb1\u0e94\u0ec0\u0e8a\u0eb1\u0e81
-territories.PE=\u0ec0\u0e9b\u0ea5\u0eb9
+territories.PF=\u0ec0\u0e9f\u0eb1\u0e99\u0ea3\u0ec2\u0e9e\u0ea5\u0eb4\u0e99\u0eb5\u0ec0\u0e8a\u0e8d
territories.CY=\u0ec4\u0e8a\u0e9b\u0eb1\u0ebc\u0e94
+territories.PE=\u0ec0\u0e9b\u0ea5\u0eb9
territories.CV=\u0ec0\u0e84\u0e9a\u0ea7\u0ead\u0e94
-territories.PA=\u0e9b\u0eb2\u0e99\u0eb2\u0ea1\u0eb2
territories.CU=\u0e84\u0eb4\u0ea7\u0e9a\u0eb2
+territories.PA=\u0e9b\u0eb2\u0e99\u0eb2\u0ea1\u0eb2
+territories.CS=\u0ec0\u0e8a\u0eb5\u0ec0\u0e9a\u0e8d
territories.CR=\u0e84\u0ead\u0eaa\u0e95\u0eb2\u0ea5\u0eb4\u0e81\u0eb2
territories.CO=\u0ec2\u0e84\u0ea5\u0eb3\u0ec0\u0e9a\u0e8d
territories.CN=\u0e88\u0eb5\u0e99
@@ -107,58 +109,57 @@ territories.BW=\u0e9a\u0ead\u0eb1\u0e94\u0eaa\u0eb0\u0ea7\u0eb2\u0e99\u0eb2
territories.BT=\u0e9e\u0eb9\u0e96\u0eb2\u0e99
territories.BS=\u0e9a\u0eb2\u0eae\u0eb2\u0ea1\u0eb2\u0eaa
territories.BR=\u0e9a\u0ebc\u0eb2\u0e8a\u0eb4\u0ea7
-territories.NZ=\u0e99\u0eb4\u0ea7\u0e8a\u0eb5\u0ec1\u0ea5\u0e99
territories.BO=\u0ec2\u0e9a\u0ea5\u0eb4\u0ec0\u0ea7\u0e8d
+territories.NZ=\u0e99\u0eb4\u0ea7\u0e8a\u0eb5\u0ec1\u0ea5\u0e99
territories.BN=\u0e9a\u0eb9\u0eae\u0ec4\u0e99
territories.BM=\u0ec0\u0e9a\u0eb5\u0ea1\u0eb4\u0ea7\u0e94\u0eb2
-territories.NU=\u0e99\u0eb5\u0ea2\u0eb9
territories.BJ=\u0ec0\u0e9a\u0e99\u0eb4\u0e99
+territories.NU=\u0e99\u0eb5\u0ea2\u0eb9
territories.BI=\u0e9a\u0eb9\u0ea5\u0eb1\u0e99\u0e95\u0eb4
territories.BH=\u0e9a\u0eb2\u0ec0\u0ea5\u0e99
territories.BG=\u0e9a\u0eb1\u0e87\u0e81\u0eb2\u0ec0\u0ea5\u0e8d
territories.BF=\u0ec0\u0e9a\u0eb5\u0e81\u0eb4\u0e99\u0eb2\u0e9f\u0eb2\u0ec2\u0e8a
-territories.NP=\u0ec0\u0e99\u0e9b\u0eb2\u0e99
territories.BE=\u0ec0\u0e9a\u0ea7\u0ea2\u0ebd\u0ea1
-territories.NO=\u0e99\u0ecd\u0ec0\u0ea7
+territories.NP=\u0ec0\u0e99\u0e9b\u0eb2\u0e99
territories.BD=\u0e9a\u0eb1\u0e87\u0e81\u0eb0\u0ea5\u0eb2\u0ec0\u0e97\u0e94
+territories.NO=\u0e99\u0ecd\u0ec0\u0ea7
territories.BB=\u0e9a\u0eb2\u0e9a\u0eb2\u0e84\u0eb1\u0ead\u0e94
territories.ZW=\u0e8a\u0eb4\u0ea1\u0e9a\u0eb1\u0e9a\u0ec0\u0ea7
-territories.NL=\u0ec0\u0e99\u0ec0\u0e97\u0eb5\u0ec1\u0ea5\u0e99
territories.BA=\u0e9a\u0eb1\u0ead\u0e94\u0eaa\u0ec0\u0e99\u0e8d \u0ec1\u0ea5\u0eb0 \u0ec0\u0eae\u0eb5\u0e94\u0ec2\u0e81\u0ea7\u0eb4\u0ec0\u0e99\u0e8d
+territories.NL=\u0ec0\u0e99\u0ec0\u0e97\u0eb5\u0ec1\u0ea5\u0e99
territories.NI=\u0e99\u0eb4\u0e84\u0eb2\u0ea5\u0eb2\u0e81\u0ebb\u0ea7
territories.NG=\u0ec4\u0e99\u0e88\u0eb5\u0ec0\u0ea5\u0e8d
territories.AZ=\u0ead\u0eb2\u0ec0\u0e8a\u0eb5\u0ec4\u0e9a\u0e88\u0eb1\u0e99
territories.NE=\u0ec4\u0e99\u0ec0\u0e88\u0eb5
-territories.NC=\u0e99\u0eb4\u0ea7\u0e84\u0eb2\u0ea5\u0eb4\u0ec2\u0e84\u0ec0\u0e99\u0e8d
territories.AW=\u0ead\u0eb2\u0ea5\u0eb9\u0e9a\u0eb2
+territories.NC=\u0e99\u0eb4\u0ea7\u0e84\u0eb2\u0ea5\u0eb4\u0ec2\u0e84\u0ec0\u0e99\u0e8d
territories.ZM=\u0ec1\u0e8a\u0ea1\u0ec0\u0e9a\u0e8d
-territories.AU=\u0ead\u0ebb\u0ead\u0e94\u0eaa\u0eb0\u0e95\u0eb2\u0ea5\u0eb5
territories.NA=\u0e99\u0eb2\u0ea1\u0eb4\u0ec0\u0e9a\u0e8d
+territories.AU=\u0ead\u0ebb\u0ead\u0e94\u0eaa\u0eb0\u0e95\u0eb2\u0ea5\u0eb5
territories.AT=\u0ead\u0ebb\u0ead\u0e94\u0eaa\u0eb0\u0ec0\u0e95\u0ebc\u0e8d
territories.AR=\u0ead\u0eb2\u0ec0\u0e88\u0e99\u0e95\u0eb4\u0e99\u0eb2\u0ec8
-territories.MZ=\u0ec2\u0ea1\u0ec1\u0e8a\u0ea1\u0e9a\u0eb4\u0e81
territories.AO=\u0ead\u0eb1\u0e99\u0ec2\u0e81\u0ea5\u0eb2
-territories.MY=\u0ea1\u0eb2\u0ec0\u0ea5\u0ec0\u0e8a\u0e8d
+territories.MZ=\u0ec2\u0ea1\u0ec1\u0e8a\u0ea1\u0e9a\u0eb4\u0e81
territories.AN=\u0ec0\u0e99\u0ec0\u0e97\u0eb5\u0ec1\u0ea5\u0e99\u0ec1\u0ead\u0e99\u0ec0\u0e97\u0eb4\u0e99
-territories.MX=\u0ec1\u0ea1\u0eb1\u0e81\u0e8a\u0eb4\u0ec2\u0e81
+territories.MY=\u0ea1\u0eb2\u0ec0\u0ea5\u0ec0\u0e8a\u0e8d
territories.AM=\u0ead\u0eb2\u0ea1\u0eb4\u0ec0\u0e99\u0e8d
+territories.MX=\u0ec1\u0ea1\u0eb1\u0e81\u0e8a\u0eb4\u0ec2\u0e81
territories.AL=\u0ec1\u0ead\u0ea5\u0ec0\u0e9a\u0ec0\u0e99\u0e8d
territories.ZA=\u0ead\u0eb2\u0e9f\u0eb0\u0ea5\u0eb4\u0e81\u0eb2\u0ec3\u0e95\u0ec9
territories.MU=\u0ea1\u0ecd\u0ea3\u0eb4\u0e95\u0ebd\u0e94
-territories.MT=\u0ea1\u0eb1\u0e99\u0e95\u0eb2
territories.AI=\u0ead\u0eb1\u0e99\u0e81\u0eb4\u0ea5\u0eb2
+territories.MT=\u0ea1\u0eb1\u0e99\u0e95\u0eb2
territories.MS=\u0ea1\u0ead\u0e99\u0ec0\u0e8a\u0eb5\u0ea5\u0eb2\u0e94
territories.MR=\u0ea1\u0ecd\u0ea5\u0eb4\u0e81\u0e97\u0eb2\u0ec0\u0e99\u0e8d
-territories.MQ=\u0ea1\u0eb2\u0e95\u0eb4\u0e99\u0eb4\u0e81
territories.AF=\u0ead\u0eb1\u0e9f\u0e81\u0eb2\u0e99\u0eb4\u0e94\u0eaa\u0eb0\u0e96\u0eb2\u0e99
+territories.MQ=\u0ea1\u0eb2\u0e95\u0eb4\u0e99\u0eb4\u0e81
territories.AE=\u0eaa\u0eb0\u0eab\u0eb0\u0ea5\u0eb1\u0e94\u0ead\u0eb2\u0eab\u0ea5\u0eb1\u0e9a\u0ec0\u0ead\u0ea1\u0eb4\u0ec0\u0ea5\u0e94
-territories.MO=\u0ea1\u0eb2\u0ec0\u0e81\u0ebb\u0ec9\u0eb2
territories.AD=\u0ead\u0eb1\u0e99\u0e94\u0ecd\u0ea5\u0eb2
+territories.MO=\u0ea1\u0eb2\u0ec0\u0e81\u0ebb\u0ec9\u0eb2
territories.MN=\u0ea1\u0ebb\u0e87\u0ec2\u0e81\u0ea5\u0eb5
territories.MM=\u0eaa\u0eb0\u0eab\u0eb0\u0e9e\u0eb2\u0e9a\u0e9e\u0eb0\u0ea1\u0ec9\u0eb2
territories.ML=\u0ea1\u0eb2\u0ea5\u0eb4
territories.MK=\u0ec1\u0ea1\u0e8a\u0eb4\u0ec2\u0e84\u0ec0\u0e99\u0e8d
-territories.YU=\u0ea2\u0eb9\u0ec2\u0e81\u0eaa\u0eb0\u0ea5\u0eb2\u0ec0\u0ea7\u0e8d
territories.YT=\u0ea1\u0eb2\u0ea2\u0ead\u0e94
territories.MG=\u0ea1\u0eb2\u0e84\u0eb2\u0e81\u0eb1\u0eaa\u0e81\u0eb2
territories.MD=\u0ec2\u0ea1\u0e99\u0ec2\u0e84\u0ea7\u0eb2
@@ -221,8 +222,8 @@ territories.TM=\u0ec0\u0e95\u0ea3\u0eb5\u0e81\u0ec0\u0ea1\u0e99\u0eb4\u0eaa\u0eb
languages.es=\u0eaa\u0eb0\u0ec0\u0e9b\u0e99
languages.ku=\u0ec0\u0e84\u0eb5\u0e94
languages.eo=\u0ec0\u0ead\u0eaa\u0ec0\u0e9b\u0eb5\u0ea5\u0eb1\u0e99\u0ec2\u0e95
-languages.ks=\u0e84\u0eb1\u0e94\u0e8a\u0eb0\u0ea1\u0eb5\u0ea5\u0eb5
languages.en=\u0ead\u0eb1\u0e87\u0e81\u0eb4\u0e94
+languages.ks=\u0e84\u0eb1\u0e94\u0e8a\u0eb0\u0ea1\u0eb5\u0ea5\u0eb5
languages.el=\u0e81\u0eb5\u0e81
languages.qu=\u0e84\u0eb4\u0ea7\u0e8a\u0ebb\u0ea7
languages.ko=\u0ec0\u0e81\u0ebb\u0eb2\u0eab\u0ea5\u0eb5
@@ -246,8 +247,8 @@ languages.cy=\u0ec0\u0ea7\u0ea7
languages.pa=\u0e9b\u0eb1\u0e99\u0e88\u0eb2
languages.cs=\u0ec0\u0e8a\u0eb1\u0e81
languages.iu=\u0ec4\u0ead\u0e99\u0eb8\u0e81\u0e95\u0eb4\u0e95\u0eb1\u0e81
-languages.it=\u0ead\u0eb4\u0e95\u0eb2\u0eaa\u0eb4
languages.co=\u0e84\u0ecd\u0e8a\u0eb4\u0e81\u0ec9\u0eb2
+languages.it=\u0ead\u0eb4\u0e95\u0eb2\u0eaa\u0eb4
languages.is=\u0ec4\u0ead\u0ec1\u0ea5\u0e99\u0e94\u0eb4\u0e94
languages.uz=\u0ead\u0eb8\u0e94\u0eaa\u0eb0\u0ec0\u0e9a\u0e94
languages.or=\u0ec2\u0ead\u0ea5\u0eb4\u0e8d\u0eb2
@@ -323,8 +324,8 @@ languages.mk=\u0ec1\u0ea1\u0eb1\u0e81\u0e8a\u0eb4\u0ec2\u0e94\u0ec0\u0e99\u0e8d
languages.aa=\u0ead\u0eb2\u0e9f\u0eb2
languages.so=\u0ec2\u0e8a\u0ea1\u0eb2\u0eaa\u0eb4
languages.sn=\u0ec2\u0e8a\u0e99\u0eb2
-languages.mi=\u0ec0\u0ea1\u0ebb\u0eb2\u0ea5\u0eb5
languages.gd=\u0eaa\u0eb0\u0e81\u0eb1\u0ead\u0e94\u0ec0\u0e84\u0eb5\u0e94
+languages.mi=\u0ec0\u0ea1\u0ebb\u0eb2\u0ea5\u0eb5
languages.sm=\u0e8a\u0eb2\u0ea1\u0ebb\u0ea7
languages.sl=\u0eaa\u0eb0\u0ec2\u0ea5\u0ea7\u0eb2\u0ec0\u0e99\u0e8d
languages.mg=\u0ea1\u0eb2\u0ea5\u0eb2\u0e81\u0eb2\u0e8a\u0eb4
@@ -340,14 +341,14 @@ languages.fy=\u0e9f\u0eb4\u0e99\u0ec1\u0ea5\u0e99
languages.sa=\u0eaa\u0eb1\u0e99\u0eaa\u0eb0\u0e81\u0eb4\u0e94
languages.fr=\u0e9d\u0eb1\u0ec8\u0ea5\u0e87\u0ec0\u0eaa\u0e94
languages.lv=\u0ec1\u0ea5\u0e95\u0eb0\u0ec0\u0ea7\u0e8d(\u0ec0\u0ea5\u0e94\u0e97\u0eb0\u0ea7\u0eb4\u0e94)
-languages.lt=\u0ea5\u0eb4\u0e97\u0ebb\u0ea7\u0ec0\u0e99\u0e8d
languages.fo=\u0e9f\u0eb2\u0ec2\u0ea5\u0e94
+languages.lt=\u0ea5\u0eb4\u0e97\u0ebb\u0ea7\u0ec0\u0e99\u0e8d
languages.rw=\u0e84\u0eb4\u0e99\u0e8d\u0eb2\u0ea7\u0eb1\u0e99\u0e94\u0eb2
languages.ru=\u0ea5\u0eb1\u0e94\u0ec0\u0e8a\u0e8d
-languages.lo=\u0ea5\u0eb2\u0ea7
languages.fj=\u0e9f\u0eb4\u0e88\u0eb4
-languages.ln=\u0ea5\u0eb4\u0e87\u0e81\u0eb2\u0ea5\u0eb2
+languages.lo=\u0ea5\u0eb2\u0ea7
languages.fi=\u0e9f\u0eb4\u0e99
+languages.ln=\u0ea5\u0eb4\u0e87\u0e81\u0eb2\u0ea5\u0eb2
languages.ro=\u0ec2\u0ea5\u0ea1\u0eb1\u0e99
languages.rn=\u0e84\u0eb4\u0ea5\u0eb1\u0e99\u0eaa\u0eb5
languages.rm=\u0ec0\u0ea5\u0ec2\u0e95-\u0ec2\u0ea5\u0ec1\u0ea1\u0e99
@@ -355,5 +356,5 @@ languages.fa=\u0ec0\u0e9b\u0eb5\u0ec0\u0e8a\u0e8d
languages.la=\u0ea5\u0eb2\u0e95\u0eb4\u0e99
languages.xh=\u0ec2\u0e8a\u0eaa\u0eb2
languages.eu=\u0ec1\u0e9a\u0eaa
-languages.ky=\u0ec0\u0e84\u0ea7\u0e81\u0eb4\u0e94
languages.et=\u0ec0\u0ead\u0eaa\u0ec2\u0e95\u0ec0\u0e99\u0e8d
+languages.ky=\u0ec0\u0e84\u0ea7\u0e81\u0eb4\u0e94
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo_LA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo_LA.properties
index 8931e5c..8e0b684 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo_LA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lo_LA.properties
@@ -5,5 +5,4 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=#,##0%
currencyFormat=\u00a4#,##0.00;\u00a4-#,##0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt.properties
index af0f5d0..5eea5f1 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt.properties
@@ -8,41 +8,50 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.LTL=LTL
+currenciesDisplayName.INR=Indijos rupija
+currenciesDisplayName.RUB=Rusijos rublis
+currenciesDisplayName.JPY=Jena
+currenciesDisplayName.BRL=Brazilijos realas
+currenciesDisplayName.CNY=\u017denminbi juanis
+currenciesDisplayName.USD=JAV doleris
+currenciesDisplayName.EUR=Euras
+currenciesDisplayName.LTL=Litas
+currenciesDisplayName.GBP=Svaras sterling\u0173
currenciesSymbol.LTL=Lt
-shortMonths=Sau®Vas®Kov®Bal®Geg®Bir®Lie®Rgp®Rgs®Spa®Lap®Grd®®
-months=Sausio®Vasario®Kovo®Baland\u017eio®Gegu\u017e\u0117s®Bir\u017eelio®Liepos®Rugpj\u016b\u010dio®Rugs\u0117jo®Spalio®Lapkri\u010dio®Gruod\u017eio®®
+shortMonths=Sau®Vas®Kov®Bal®Geg®Bir®Lie®Rgp®Rgs®Spl®Lap®Grd®®
+months=Sausis®Vasaris®Kovas®Balandis®Gegu\u017e\u0117®Bir\u017eelis®Liepa®Rugpj\u016btis®Rugs\u0117jis®Spalis®Lapkritis®Gruodis®®
shortWeekdays=®Sk®Pr®An®Tr®Kt®Pn®\u0160t®
-weekdays=®Sekmadienis®Pirmadienis®Antradienis®Tre\u010diadienis®Ketvirtadienis®Penktadienis®\u0160e\u0161tadienis®
+weekdays=®sekmadienis®pirmadienis®antradienis®tre\u010diadienis®ketvirtadienis®penktadienis®\u0161e\u0161tadienis®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
-eras=pr.Kr.®po.Kr.®
-shortDateFormat=yyyy.MM.dd
+eras=pr. Kr.®po Kr.®
+ampms=prie\u0161piet®popiet®
+shortDateFormat=yyyy-MM-dd
mediumDateFormat=yyyy.MM.dd
longDateFormat=yyyy 'm.' MMMM d 'd.'
fullDateFormat=yyyy 'm.' MMMM d 'd.',EEEE
territories.TL=Ryt\u0173 Timoras
territories.TK=Tokelau
-territories.TJ=Tad\u017eikija
+territories.TJ=Tad\u017eikistas
territories.TH=Tailandas
territories.TG=Togas
-territories.TF=Pranc\u016bz\u0173 pietin\u0117s teritorijos
-territories.GY=Gviana
+territories.TF=Pranc\u016bzijos Piet\u0173 sritys
+territories.GY=Gajana
territories.TD=\u010cadas
-territories.TC=Turks ir Kaikos salos
-territories.GW=Gvin\u0117ja-Bisau
+territories.TC=Turkso ir Caicoso salos
+territories.GW=Bisau Gvin\u0117ja
territories.GU=Guamas
territories.GT=Gvatemala
-territories.GS=Ryt\u0173 D\u017eord\u017eija ir Ryt\u0173 Sandwich salos
+territories.GS=Piet\u0173 Georgijos ir Piet\u0173 Sandwicho Salos
territories.GR=Graikija
-territories.GQ=Ekvatorin\u0117 Gvin\u0117ja
+territories.GQ=Pusiaujo Gvin\u0117ja
territories.GP=Gvadelup\u0117
territories.SZ=Svazilendas
territories.SY=Sirija
territories.GN=Gvin\u0117ja
territories.GM=Gambija
territories.GL=Grenlandija
-territories.SV=El Salvadoras
+territories.SV=Salvadoras
territories.ST=San Tom\u0117 ir Princip\u0117
territories.GI=Gibraltaras
territories.GH=Gana
@@ -59,7 +68,7 @@ territories.GA=Gabonas
territories.SK=Slovakia
territories.SJ=Svalbardo ir Jan Majen salos
territories.SI=Slov\u0117nija
-territories.SH=\u0160ventoji Elena
+territories.SH=\u0160v. Elenos sala
territories.SG=Singap\u016bras
territories.SE=\u0160vedija
territories.SD=Sudanas
@@ -68,10 +77,10 @@ territories.SB=Saliamono salos
territories.SA=Saudo Arabija
territories.FR=Pranc\u016bzija
territories.FO=Farer\u0173 salos
-territories.FM=Mikronezijos Federacin\u0117s Valstijos
+territories.FM=Mikronezija
territories.RW=Ruanda
-territories.FK=Folklendo salos (Malvinai)
-territories.RU=Rusijos Federacija
+territories.FK=Falklando salos
+territories.RU=Rusija
territories.FJ=Fid\u017eis
territories.FI=Suomija
territories.RO=Rumunija
@@ -95,32 +104,33 @@ territories.PT=Portugalija
territories.PS=Palestinos teritorija
territories.PR=Puerto Rikas
territories.DE=Vokietija
-territories.PN=Pitkernas
+territories.PN=Pitcairnas
territories.PM=Sen Pjeras ir Mikelonas
territories.PL=Lenkija
territories.PK=Pakistanas
territories.PH=Filipinai
territories.PG=Papua Naujoji Gvin\u0117ja
territories.PF=Pranc\u016bz\u0173 Polinezija
-territories.CZ=\u010cekijos respublika
+territories.CZ=\u010cekija
territories.PE=Peru
territories.CY=Kipras
territories.CX=Kal\u0117d\u0173 sala
-territories.CV=\u017daliojo Ky\u0161ulio salos
+territories.CV=\u017daliasis Ky\u0161ulys
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbija ir Juodkalnija
territories.CR=Kosta Rika
territories.CO=Kolumbija
territories.CN=Kinija
territories.CM=Kamer\u016bnas
territories.CL=\u010cil\u0117
territories.CK=Kuko salos
-territories.CI=Kot d\u2019Ivuar
+territories.CI=Dramblio Kaulo Krantas
territories.CH=\u0160veicarija
territories.CG=Kongas
territories.CF=Centrin\u0117s Afrikos Respublika
territories.CD=Kongo Demokratin\u0117 Respublika
-territories.CC=Kokos\u0173 salos
+territories.CC=Kokos\u0173 (Keelingo) salos
territories.OM=Omanas
territories.CA=Kanada
territories.BZ=Belizas
@@ -128,17 +138,17 @@ territories.BY=Baltarusija
territories.BW=Botsvana
territories.BV=Bouvet sala
territories.BT=Butanas
-territories.BS=Bahamai
+territories.BS=Bahamos
territories.BR=Brazilija
territories.NZ=Naujoji Zelandija
territories.BO=Bolivija
territories.BN=Brun\u0117jus
-territories.BM=Bermudai
-territories.NU=Niuj\u0117
+territories.BM=Bermuda
+territories.NU=Niue
territories.BJ=Beninas
territories.BI=Burundis
territories.BH=Bahreinas
-territories.NR=Nauru
+territories.NR=Nauru Respublika
territories.BG=Bulgarija
territories.BF=Burkina Fasas
territories.NP=Nepalas
@@ -162,11 +172,12 @@ territories.AU=Australija
territories.AT=Austrija
territories.AS=Amerikos Samoa
territories.AR=Argentina
-territories.AQ=Antarktika
+territories.AQ=Antarktis
territories.MZ=Mozambikas
+territories.200=Serbija ir Juodkalnija
territories.AO=Angola
territories.MY=Malaizija
-territories.AN=Nyderland\u0173 Antilai
+territories.AN=Olandijos Antilai
territories.MX=Meksika
territories.AM=Arm\u0117nija
territories.MW=Malavis
@@ -175,29 +186,28 @@ territories.MV=Maldivai
territories.ZA=Piet\u0173 Afrika
territories.MU=Mauricijus
territories.MT=Malta
-territories.AI=Angvila
-territories.MS=Montserat
+territories.AI=Angilija
+territories.MS=Montserratas
territories.MR=Mauritanija
territories.AG=Antigva ir Barbuda
territories.MQ=Martinika
territories.AF=Afganistanas
-territories.MP=\u0160iaurin\u0117s Marianos salos
territories.AE=Jungtiniai Arab\u0173 Emyratai
-territories.MO=Kinijos S.A.R. Makao
+territories.MP=Marianos \u0161iaurin\u0117s salos
territories.AD=Andora
+territories.MO=Kinijos S.A.R. Makao
territories.MN=Mongolija
-territories.MM=Mjanma
+territories.MM=Mianmaras
territories.ML=Malis
-territories.MK=Makedonijos Respublika
-territories.YU=Jugoslavija
-territories.YT=Majot\u0117
-territories.MH=Mar\u0161alo salos
+territories.MK=Makedonija
+territories.YT=Mayotte\u2019as
+territories.MH=Mar\u0161alo Salos
territories.MG=Madagaskaras
-territories.MD=Moldovos Respublika
+territories.MD=Moldova
territories.MC=Monakas
territories.MA=Marokas
territories.YE=Jemenas
-territories.LY=Libijos Arab\u0173 D\u017eamahirija
+territories.LY=Libija
territories.LV=Latvija
territories.LU=Liuksemburgas
territories.LT=Lietuva
@@ -205,9 +215,9 @@ territories.LS=Lesotas
territories.LR=Liberija
territories.LK=\u0160ri Lanka
territories.LI=Lichten\u0161teinas
-territories.LC=\u0160ventoji Liucija
+territories.LC=Sent Lusija
territories.LB=Libanas
-territories.LA=Laoso Liaudies Demokratin\u0117 Respublika
+territories.LA=Laosas
territories.KZ=Kazachstanas
territories.KY=Kaiman\u0173 salos
territories.KW=Kuveitas
@@ -220,30 +230,30 @@ territories.WS=Samoa
territories.KH=Kambod\u017ea
territories.KG=Kirgiztanas
territories.KE=Kenija
-territories.WF=Valiso ir Futuna salos
+territories.WF=Wallisas ir Futuna
territories.JP=Japonija
territories.JO=Jordanija
territories.JM=Jamaika
territories.VU=Vanuatu
territories.VN=Vietnamas
-territories.VI=JAV Virginijos salos
-territories.VG=Brit\u0173 Virginijos salos
+territories.VI=Mergeli\u0173 salos (JAV)
+territories.VG=Did\u017eiosios Britanijos Mergeli\u0173 salos
territories.VE=Venesuela
territories.VC=\u0160ventasis Vincentas ir Grenadinai
-territories.VA=Vatikano Miesto Valstija
+territories.VA=Vatikanas
territories.IT=Italija
territories.IS=Islandija
-territories.IR=Irano
+territories.IR=Iranas
territories.IQ=Irakas
-territories.UZ=Uzbekija
-territories.IO=Brit\u0173 Indijos vandenyno teritorija
+territories.UZ=Uzbekistanas
+territories.IO=Indijos vandenyno brit\u0173 sritis
territories.UY=Urugvajus
territories.IN=Indija
territories.IL=Izraelis
-territories.US=United States
+territories.US=Jungtin\u0117s Valstijos US
territories.IE=Airija
territories.ID=Indonezija
-territories.UM=JAV antraeil\u0117s teritorijos salos
+territories.UM=Jungtini\u0173 Valstij\u0173 ma\u017eosios aplinkin\u0117s salos
territories.UG=Uganda
territories.UA=Ukraina
territories.HU=Vengrija
@@ -251,8 +261,8 @@ territories.HT=Haitis
territories.HR=Kroatija
territories.TZ=Tanzanija
territories.HN=Hond\u016bras
-territories.HM=Heard ir McDonald salos
-territories.TW=Taivanis
+territories.HM=Heardo salos
+territories.TW=Taivanas
territories.TV=Tuvalu
territories.HK=Kinijos S.A.R.Honkongas
territories.TT=Trinidadas ir Tobagas
@@ -268,9 +278,10 @@ languages.no=Norveg\u0173
languages.el=Graik\u0173
languages.nl=Oland\u0173
languages.bg=Bulgar\u0173
+languages.hi=Hindi
languages.lv=Latvi\u0173
+languages.cs=\u010cek\u0173
languages.he=Hebraj\u0173
-languages.cs=\u010cekijos
languages.it=Ital\u0173
languages.lt=Lietuvi\u0173
languages.fr=Pranc\u016bz\u0173
@@ -285,8 +296,8 @@ languages.pl=Lenk\u0173
languages.sl=Slov\u0117n\u0173
languages.sk=Slovak\u0173
languages.de=Vokie\u010di\u0173
-languages.hu=Vengr\u0173
languages.et=Est\u0173
+languages.hu=Vengr\u0173
languages.es=Ispan\u0173
-languages.hr=Kroat\u0173
languages.da=Dan\u0173
+languages.hr=Kroat\u0173
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt_LT.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt_LT.properties
index 1ec73e9..a7f543a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt_LT.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lt_LT.properties
@@ -5,5 +5,4 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=#,##%
currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lv.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lv.properties
index 894bea2..d032ba0 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lv.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_lv.properties
@@ -8,7 +8,6 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.LVL=LVL
currenciesSymbol.LVL=Ls
shortMonths=Jan®Feb®Mar®Apr®Mai®J\u016bn®J\u016bl®Aug®Sep®Okt®Nov®Dec®®
months=janv\u0101ris®febru\u0101ris®marts®apr\u012blis®maijs®j\u016bnijs®j\u016blijs®augusts®septembris®oktobris®novembris®decembris®®
@@ -108,6 +107,7 @@ territories.CX=Ziemsv\u0113tku sala
territories.CV=Kaboverde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbija un Melnkalne
territories.CR=Kostarika
territories.CO=Kolumbija
territories.CN=\u0136\u012bna
@@ -178,17 +178,16 @@ territories.AI=Angilja
territories.MS=Montserrata
territories.MR=Maurit\u0101nija
territories.AG=Antigva un Barbuda
-territories.MQ=Martinika
territories.AF=Afganist\u0101na
-territories.MP=Zieme\u013cu Marianas
+territories.MQ=Martinika
territories.AE=Apvienotie Ar\u0101bu Emir\u0101ti
-territories.MO=Makao, \u0136\u012bnas \u012bpa\u0161\u0101s p\u0101rvaldes apgabals
+territories.MP=Zieme\u013cu Marianas
territories.AD=Andora
+territories.MO=Makao, \u0136\u012bnas \u012bpa\u0161\u0101s p\u0101rvaldes apgabals
territories.MN=Mongolija
territories.MM=Mjanma
territories.ML=Mali
territories.MK=Ma\u0137edonija
-territories.YU=Dienvidsl\u0101vija
territories.YT=Majota
territories.MH=M\u0101r\u0161ala salas
territories.MG=Madagaskara
@@ -268,8 +267,8 @@ languages.el=grie\u0137u
languages.nl=holandie\u0161u
languages.bg=bulg\u0101ru
languages.lv=latvie\u0161u
-languages.he=ivrits
languages.cs=\u010dehu
+languages.he=ivrits
languages.it=it\u0101lie\u0161u
languages.lt=lietuvie\u0161u
languages.fr=fran\u010du
@@ -284,8 +283,8 @@ languages.pl=po\u013cu
languages.sl=slov\u0113\u0146u
languages.sk=slov\u0101ku
languages.de=v\u0101cu
-languages.hu=ung\u0101ru
languages.et=igau\u0146u
+languages.hu=ung\u0101ru
languages.es=sp\u0101\u0146u
-languages.hr=horv\u0101tu
languages.da=d\u0101\u0146u
+languages.hr=horv\u0101tu
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mk.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mk.properties
index 3dc1cc7..ea30eee 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mk.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mk.properties
@@ -9,481 +9,267 @@ decimalSeparator=,
groupingSeparator=.
localPatternChars=GuMtkHmsSEDFwWahKzUeygAZ
currenciesDisplayName.YDD=\u0408\u0435\u043c\u0435\u043d\u0441\u043a\u0438 \u0434\u0438\u0430\u043d\u0440
-currenciesDisplayName.GRN=\u0413\u0440\u0447\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
-currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.TWD=\u0422\u0430\u0458\u0432\u0430\u043d\u0441\u043a\u0438 \u043d\u043e\u0432 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.LKR=\u0428\u0440\u0438\u043b\u0430\u043d\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
+currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.BYB=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u0431\u0459\u0430 (1994-1999)
-currenciesDisplayName.TJS=\u0422\u0430\u045f\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0442\u0441\u043a\u0438 \u0441\u043e\u043c\u043e\u043d\u0438
+currenciesDisplayName.LKR=\u0428\u0440\u0438\u043b\u0430\u043d\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
currenciesDisplayName.RWF=\u0420\u0443\u0430\u043d\u0434\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.TJR=\u0442\u0430\u045f\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
+currenciesDisplayName.TJS=\u0422\u0430\u045f\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0442\u0441\u043a\u0438 \u0441\u043e\u043c\u043e\u043d\u0438
currenciesDisplayName.SDP=\u0421\u0443\u0434\u0430\u043d\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.GRD=\u0413\u0440\u0447\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.TJR=\u0442\u0430\u045f\u0438\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
currenciesDisplayName.AFN=\u0410\u0432\u0433\u0430\u043d\u0438
+currenciesDisplayName.GRD=\u0413\u0440\u0447\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
currenciesDisplayName.IEP=\u0418\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.ARS=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u0438 \u041f\u0435\u0437\u043e\u0441
-currenciesDisplayName.ARP=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u0438 \u041f\u0435\u0437\u043e\u0441 (1983-1985)
currenciesDisplayName.SDD=\u0421\u0443\u0434\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.ARP=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u0438 \u041f\u0435\u0437\u043e\u0441 (1983-1985)
currenciesDisplayName.GEL=\u0413\u0440\u0443\u0437\u0438\u0441\u043a\u0438 \u043b\u0430\u0440\u0438
currenciesDisplayName.AFA=\u0410\u0432\u0433\u0430\u043d\u0438 (1927-2002)
currenciesDisplayName.CRC=\u041a\u043e\u0441\u0442\u0430\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u041a\u043e\u043b\u043e\u043d
currenciesDisplayName.FKP=\u0424\u0430\u043a\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.TVD=\u0422\u0443\u0432\u0430\u043b\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438 \u043b\u0435\u0443
currenciesDisplayName.HKD=\u0425\u043e\u043d\u0433\u043a\u043e\u0448\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438 \u043b\u0435\u0443
currenciesDisplayName.IQD=\u0418\u0440\u0430\u0447\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SCR=\u0421\u0435\u0458\u0448\u0435\u043b\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
-currenciesDisplayName.XID=\u0418\u0441\u043b\u0430\u043c\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.VUV=\u0412\u0430\u043d\u0430\u0442\u0441\u043a\u0438 \u0432\u0430\u0442\u0443
currenciesDisplayName.KPW=\u0421\u0435\u0432\u0435\u0440\u043d\u043e \u043a\u043e\u0440\u0435\u0458\u0441\u043a\u0438 \u0432\u043e\u043d
-currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0438\u0458\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.LVR=\u041b\u0430\u0442\u0432\u0438\u0458\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
+currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0438\u0458\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.AED=\u0414\u0438\u0440\u0445\u0430\u043c
-currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0438\u0458\u0441\u043a\u0438 \u043b\u0430\u0442
currenciesDisplayName.BWP=\u0411\u043e\u0446\u0432\u0430\u043d\u0442\u0441\u043a\u0430 \u041f\u0443\u043b\u0430
+currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0438\u0458\u0441\u043a\u0438 \u043b\u0430\u0442
currenciesDisplayName.RUR=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430 (1991-1998)
-currenciesDisplayName.FJP=\u0424\u0438\u045f\u0438 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.NIG=\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0432\u0430\u043d\u0441\u043a\u0430 \u0437\u043b\u0430\u0442\u043d\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
-currenciesDisplayName.MOP=\u041c\u0430\u043a\u0430\u043e \u043f\u0430\u0442\u0430\u043a\u0430
-currenciesDisplayName.FJD=\u0424\u0438\u045f\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.ADP=\u0410\u043d\u0434\u043e\u0440\u0441\u043a\u0430 \u041f\u0435\u0437\u0435\u0442\u0430
+currenciesDisplayName.FJD=\u0424\u0438\u045f\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MOP=\u041c\u0430\u043a\u0430\u043e \u043f\u0430\u0442\u0430\u043a\u0430
currenciesDisplayName.RUB=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
currenciesDisplayName.NIC=\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0432\u0430\u043d\u0441\u043a\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
-currenciesDisplayName.LIF=\u041b\u0438\u0445\u043d\u0442\u0435\u043d\u0448\u0442\u0430\u0458\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.UZS=\u0423\u0417\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0421\u0443\u043c
currenciesDisplayName.SBD=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ADD=\u0410\u043d\u0434\u043e\u0440\u0441\u043a\u0438 \u0414\u0438\u043d\u0435\u0440
-currenciesDisplayName.THB=\u0422\u0430\u0438 \u0431\u0430\u0442
+currenciesDisplayName.UZS=\u0423\u0417\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0421\u0443\u043c
currenciesDisplayName.PHP=\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0441\u043a\u0438 \u043f\u0435\u0437\u043e\u0441
+currenciesDisplayName.THB=\u0422\u0430\u0438 \u0431\u0430\u0442
currenciesDisplayName.LUF=\u041b\u0443\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0448\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.FIN=\u0424\u0438\u043d\u0441\u043a\u0430 \u041c\u0430\u0440\u043a\u0430 (1860-1962)
currenciesDisplayName.FIM=\u0424\u0438\u043d\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.SZL=\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434\u0441\u043a\u0438 \u043b\u0438\u043b\u0430\u0433\u0435\u043d
currenciesDisplayName.MNT=\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u0441\u043a\u0438 \u0442\u0443\u0433\u0440\u0438\u043a
currenciesDisplayName.SAR=\u0421\u0430\u0443\u0434\u0438\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.UAH=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0430 \u0445\u0440\u0438\u0432\u043d\u0438\u0458\u0430
currenciesDisplayName.HUF=\u0423\u043d\u0433\u0430\u0440\u0441\u043a\u0430 \u0444\u043e\u0440\u0438\u043d\u0442\u0430
-currenciesDisplayName.IBP=\u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0438\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.QAR=\u041a\u0432\u0430\u0442\u0430\u0440\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.COP=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u0441\u043a\u0438 \u041f\u0435\u0437\u043e\u0441
+currenciesDisplayName.QAR=\u041a\u0432\u0430\u0442\u0430\u0440\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.LTT=\u041b\u0438\u0442\u0432\u0430\u043d\u0438\u0441\u043a\u0438 \u043b\u0438\u0442\u0430\u0437
currenciesDisplayName.PTE=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.PTC=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u043e \u043a\u043e\u043d\u0442\u043e
-currenciesDisplayName.AOS=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
currenciesDisplayName.GBP=\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
-currenciesDisplayName.BUR=\u0411\u0443\u0440\u043c\u0435\u0437\u0438\u0441\u043a\u0438 \u0440\u0443\u043f\u0438\u0438
-currenciesDisplayName.ZRZ=\u0417\u0438\u0440\u0441\u043a\u043e \u0437\u0430\u0438\u0440\u0435
-currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
currenciesDisplayName.BIF=\u0411\u0443\u0440\u0438\u043d\u0434\u0438\u0441\u043a\u0438 \u0424\u0440\u0430\u043d\u043a
-currenciesDisplayName.LTL=\u041b\u0438\u0442\u0432\u0430\u043d\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0430
+currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
+currenciesDisplayName.ZRZ=\u0417\u0438\u0440\u0441\u043a\u043e \u0437\u0430\u0438\u0440\u0435
currenciesDisplayName.AON=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u041a\u0432\u0430\u043d\u0437\u0430 (1990-2000)
-currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0458\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1975-1993)
-currenciesDisplayName.SML=\u0421\u0430\u043d\u043c\u0430\u0440\u0438\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
-currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u0441\u043a\u0438 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.LTL=\u041b\u0438\u0442\u0432\u0430\u043d\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0430
currenciesDisplayName.KZT=\u041a\u0430\u0437\u0430\u043a\u0441\u0442\u0430\u043d\u0442\u0441\u043a\u0430 \u0442\u0435\u043d\u0433\u0430
-currenciesDisplayName.KZR=\u041a\u0430\u0437\u0430\u043a\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
+currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u0441\u043a\u0438 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0458\u0441\u043a\u043e \u043f\u0435\u0441\u043e (1975-1993)
currenciesDisplayName.AOK=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u041a\u0432\u0430\u043d\u0437\u0430 (1977-1990)
currenciesDisplayName.PGK=\u041f\u0430\u043f\u0443\u0430 \u043d\u043e\u0432\u043e\u0433\u0432\u0438\u043d\u0435\u0458\u0441\u043a\u0438\u0430 \u043a\u0438\u043d\u0430
currenciesDisplayName.SYP=\u0421\u0438\u0440\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u043a\u0438 \u0420\u0438\u0430\u043b
-currenciesDisplayName.NGP=\u041d\u0438\u0433\u0435\u0440\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.MZE=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u0441\u043a\u043e \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.ZRN=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u043d\u043e\u0432\u043e\u0437\u0430\u0438\u0440\u0435
+currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u043a\u0438 \u0420\u0438\u0430\u043b
currenciesDisplayName.NGN=\u041d\u0438\u0433\u0435\u0440\u0438\u0441\u043a\u0430 \u043d\u0430\u0438\u0440\u0430
-currenciesDisplayName.PSP=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
+currenciesDisplayName.ZRN=\u0417\u0430\u0438\u0440\u0441\u043a\u043e \u043d\u043e\u0432\u043e\u0437\u0430\u0438\u0440\u0435
currenciesDisplayName.AOA=\u0410\u043d\u0433\u043e\u043b\u0441\u043a\u0430 \u041a\u0432\u0430\u043d\u0437\u0430
-currenciesDisplayName.GNI=\u0413\u0432\u0438\u043d\u0435\u0458\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a (1960-1972)
currenciesDisplayName.MAF=\u041c\u0430\u0440\u043a\u043e\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.GNF=\u0413\u0432\u0438\u043d\u0435\u0458\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u0430\u043d\u0441\u043a\u0438 \u0414\u0438\u0440\u0445\u0430\u043c
currenciesDisplayName.HTG=\u0425\u0430\u0438\u0442\u0441\u043a\u0438 \u0433\u0443\u0440\u0434
+currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u0430\u043d\u0441\u043a\u0438 \u0414\u0438\u0440\u0445\u0430\u043c
currenciesDisplayName.MYR=\u041c\u0430\u043b\u0430\u0437\u0438\u0441\u043a\u0438 \u0440\u0438\u043d\u0433\u0438\u0442
-currenciesDisplayName.BTR=\u0411\u0443\u0442\u0430\u043d\u0441\u043a\u0438 \u0420\u0443\u043f\u0438\u0438
currenciesDisplayName.LSL=\u041b\u0435\u0441\u043e\u0442\u0441\u043a\u043e \u043b\u043e\u0442\u0438
-currenciesDisplayName.SLL=\u0421\u0438\u0435\u0440\u0430\u043b\u0435\u043e\u043d\u0441\u043a\u043e \u043b\u0435\u043e\u043d\u0435
currenciesDisplayName.BHD=\u0411\u0430\u0445\u0440\u0430\u0438\u043d\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440
+currenciesDisplayName.SLL=\u0421\u0438\u0435\u0440\u0430\u043b\u0435\u043e\u043d\u0441\u043a\u043e \u043b\u0435\u043e\u043d\u0435
currenciesDisplayName.TRL=\u0422\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.KMF=\u041a\u043e\u043c\u043e\u0440\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.GAF=\u0413\u0430\u0431\u043e\u043d CFA \u0424\u0440\u0430\u043d\u043a
currenciesDisplayName.CZK=\u0427\u0435\u0448\u043a\u0430 \u043a\u043e\u0440\u043e\u043d\u0430
-currenciesDisplayName.GMP=\u0413\u0430\u043c\u0431\u0438\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
currenciesDisplayName.GMD=\u0413\u0430\u043c\u0431\u0438\u0441\u043a\u0438 \u0414\u0430\u043b\u0430\u0441\u0438
-currenciesDisplayName.BGO=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0438 \u043b\u0435\u0432(1879-1952)
currenciesDisplayName.BGN=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0438 \u043d\u043e\u0432 \u043b\u0435\u0432
currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
-currenciesDisplayName.BGM=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0438 \u0441\u043e\u0446\u0438\u0458\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043a\u0438 \u043b\u0435\u0432
currenciesDisplayName.BGL=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0438 \u0446\u0432\u0440\u0441\u0442 \u043b\u0435\u0432
currenciesDisplayName.VEB=\u0412\u0435\u043d\u0435\u0446\u0443\u0435\u043b\u0441\u043a\u0438 \u0431\u043e\u043b\u0438\u0432\u0430\u0440
currenciesDisplayName.MLF=\u041c\u0430\u043b\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0441\u0440\u0435\u0431\u0440\u0435\u043d \u043f\u0435\u0437\u043e\u0441 (1861-1992)
currenciesDisplayName.ILS=\u0418\u0437\u0440\u0430\u0435\u043b\u0441\u043a\u0438 \u043d\u043e\u0432 \u0448\u0435\u043a\u0435\u043b
+currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0441\u0440\u0435\u0431\u0440\u0435\u043d \u043f\u0435\u0437\u043e\u0441 (1861-1992)
currenciesDisplayName.PES=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043b
-currenciesDisplayName.BSP=\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
-currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u043f\u0435\u0437\u043e\u0441
currenciesDisplayName.GYD=\u0413\u0432\u0438\u0458\u0430\u043d\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
+currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u043f\u0435\u0437\u043e\u0441
currenciesDisplayName.ILP=\u0418\u0437\u0440\u0435\u043b\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.CYP=\u041a\u0438\u043f\u0430\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.SKK=\u0421\u043b\u043e\u0432\u0430\u0447\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
+currenciesDisplayName.CYP=\u041a\u0438\u043f\u0430\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.PEN=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u043a\u0438 \u043d\u043e\u0432 \u0441\u043e\u043b
-currenciesDisplayName.ILL=\u0418\u0437\u0440\u0430\u0435\u043b\u0441\u043a\u0438 \u0448\u0435\u043a\u0435\u043b
currenciesDisplayName.LRD=\u041b\u0438\u0431\u0435\u0440\u0438\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.AMD=\u0415\u0440\u043c\u0435\u043d\u0438\u0441\u043a\u0438 \u0414\u0440\u0430\u043c
currenciesDisplayName.BSD=\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
-currenciesDisplayName.GLK=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0441\u043a \u043a\u0440\u0443\u043d\u0430
currenciesDisplayName.HRK=\u0425\u0440\u0432\u0430\u0442\u0441\u043a\u0430 \u041a\u0443\u043d\u0430
-currenciesDisplayName.MKN=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0434\u0435\u043d\u0430\u0440 (1992-1993)
currenciesDisplayName.HRD=\u0425\u0440\u0432\u0430\u0442\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.ALV=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0430 \u041b\u0435\u043a \u0412\u0430\u043b\u0443\u0442\u0430
currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MWP=\u041c\u0430\u043b\u0430\u0432\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.TDF=\u2018\u0430\u0434\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.MKD=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0434\u0435\u043d\u0430\u0440
-currenciesDisplayName.TPP=\u0422\u0438\u043c\u043e\u0440\u0441\u043a\u0430 \u043f\u0430\u0442\u0430\u043a\u0430
currenciesDisplayName.ALL=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u041b\u0435\u043a
-currenciesDisplayName.ALK=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438 \u043b\u0435\u043a (1946-1961)
currenciesDisplayName.TPE=\u0422\u0438\u043c\u043e\u0440\u0441\u043a\u0438 \u0435\u0441\u043a\u0443\u0434\u043e
currenciesDisplayName.DEM=\u0413\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u0430 \u041c\u0430\u0440\u043a\u0430
-currenciesDisplayName.XCD=\u0418\u0441\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0440\u0438\u0431\u0438\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.KWD=\u041a\u0443\u0432\u0430\u0458\u0442\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.XCD=\u0418\u0441\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0440\u0438\u0431\u0438\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.NPR=\u041d\u0435\u043f\u0430\u043b\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
currenciesDisplayName.GWP=\u0413\u0432\u0438\u043d\u0435\u0458\u0441\u043a\u0438 \u0411\u0438\u0441\u0430\u0443 \u043f\u0435\u0437\u043e\u0441
currenciesDisplayName.YUN=\u0408\u0443\u0433\u043e\u0441\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0431\u0438\u043b\u0435\u043d \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SVC=\u0415\u043b\u0441\u0430\u0432\u0430\u0434\u043e\u0440\u0441\u043a\u0438 \u043a\u043e\u043b\u043e\u043d
-currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438 \u0442\u043e\u043b\u0430\u0440
currenciesDisplayName.BEL=\u0411\u0435\u043b\u0433\u0438\u0441\u043a\u0438 \u0424\u0440\u0430\u043d\u043a (\u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0441\u043a\u0438)
+currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438 \u0442\u043e\u043b\u0430\u0440
currenciesDisplayName.JPY=\u0408\u0430\u043f\u043e\u043d\u0441\u043a\u0438 \u0458\u0435\u043d
currenciesDisplayName.BEF=\u0411\u0435\u043b\u0433\u0438\u0441\u043a\u0438 \u0424\u0440\u0430\u043d\u043a
currenciesDisplayName.YUD=\u0408\u0443\u0433\u043e\u0441\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.BEC=\u0411\u0435\u043b\u0433\u0438\u0441\u043a\u0438 \u0424\u0440\u0430\u043d\u043a (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0431\u0438\u043b\u0435\u043d)
currenciesDisplayName.SUR=\u0421\u043e\u0432\u0435\u0442\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
-currenciesDisplayName.RON=\u0420\u043e\u043c\u0430\u043d\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u043b\u0435\u0430
currenciesDisplayName.ROL=\u0420\u043e\u043c\u0430\u043d\u0441\u043a\u0430 \u043b\u0435\u0430
-currenciesDisplayName.SUN=\u0421\u043e\u0432\u0435\u0442\u0441\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u0431\u0459\u0430
-currenciesDisplayName.SIB=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438 \u0442\u043e\u043b\u0430\u0440 \u0431\u043e\u043d
-currenciesDisplayName.VNS=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0434\u043e\u043d\u0433
-currenciesDisplayName.VNR=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u0447\u043a\u0438 \u0434\u043e\u043d\u0433
currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0448\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
-currenciesDisplayName.VNN=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u043d\u043e\u0432 \u0434\u043e\u043d\u0433
currenciesDisplayName.ZAR=\u0408\u0443\u0436\u043d\u043e \u0430\u0444\u0440\u0438\u0447\u043a\u0438 \u0440\u0430\u043d\u0434
-currenciesDisplayName.ZAP=\u0408\u0443\u0436\u043d\u043e \u0430\u0444\u0440\u0438\u0447\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.ZAL=\u0408\u0443\u0436\u043d\u043e \u0430\u0444\u0440\u0438\u0447\u043a\u0438 \u0440\u0430\u043d\u0434(\u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0441\u043a\u0438)
currenciesDisplayName.VND=\u0412\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043d\u0433
-currenciesDisplayName.KID=\u041a\u0438\u0440\u0431\u0430\u0442\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.TZS=\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.GIP=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.ZMP=\u0417\u0430\u043c\u0431\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.TND=\u0422\u0443\u043d\u0435\u0437\u0438\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.UGX=\u0423\u0433\u0430\u043d\u0434\u0438\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
currenciesDisplayName.ZMK=\u0417\u0430\u043c\u0431\u0438\u0441\u043a\u0430 \u043a\u0432\u0430\u043d\u0447\u0430
currenciesDisplayName.JOD=\u0408\u043e\u0440\u0434\u0430\u043d\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.LBP=\u041b\u0438\u0431\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.VAL=\u0412\u0430\u0442\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.UGS=\u0423\u0433\u0430\u043d\u0434\u0438\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433 (1966-1987)
currenciesDisplayName.WST=\u0421\u0430\u043c\u043e\u0430 \u0442\u0430\u043b\u0430
currenciesDisplayName.KHR=\u041a\u0430\u043c\u0431\u043e\u045f\u0438\u0441\u043a\u0438 \u0440\u0435\u043b
currenciesDisplayName.DOP=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u041f\u0435\u0437\u043e\u0441
currenciesDisplayName.EUR=\u0415\u0432\u0440\u043e
-currenciesDisplayName.LNR=\u0426\u0435\u0458\u043b\u043e\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
-currenciesDisplayName.WSP=\u0421\u0430\u043c\u043e\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.KHO=\u041a\u0430\u043c\u0431\u043e\u045f\u0438\u0441\u043a\u0438 \u0441\u0442\u0430\u0440 \u0440\u0435\u043b
currenciesDisplayName.MTP=\u041c\u0430\u043b\u0442\u0438\u0441\u043a\u0430 \u0444\u0438\u043d\u0442\u0430
currenciesDisplayName.USS=\u0421\u0410\u0414 \u0434\u043e\u043b\u0430\u0440 (Same day)
-currenciesDisplayName.NZP=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.CUP=\u041a\u0443\u0431\u0430\u043d\u0441\u043a\u0438 \u043f\u0435\u0437\u043e\u0441
currenciesDisplayName.MTL=\u041c\u0430\u043b\u0442\u0438\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.TMM=\u0422\u0443\u0440\u043c\u0435\u043d\u0442\u0438\u0441\u0442\u0430\u043d\u0442\u0441\u043a\u0438 \u043c\u0430\u0442\u0430\u0442
currenciesDisplayName.USN=\u0421\u0410\u0414 \u0434\u043e\u043b\u0430\u0440 (Next day)
-currenciesDisplayName.GHP=\u0413\u0430\u043d\u0430\u0458\u0441\u043a\u0438 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.SSP=\u0428\u043a\u043e\u0442\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
-currenciesDisplayName.AUP=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
-currenciesDisplayName.GHO=\u0413\u0430\u043d\u0430\u0458\u0441\u043a\u0438 \u0441\u0442\u0430\u0440\u0438 \u0421\u0435\u0434\u0438
currenciesDisplayName.SGD=\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440\u0441\u043a\u0438 \u0434\u043e\u0430\u043b\u0440
currenciesDisplayName.NZD=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.USD=\u0421\u0410\u0414 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.HNL=\u0425\u043e\u043d\u0434\u0443\u0440\u0441\u043a\u0430 \u043b\u0435\u043c\u043f\u0438\u0440\u0430
-currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u043a\u0441\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.PAB=\u041f\u0430\u043d\u0430\u043c\u0441\u043a\u0430 \u0431\u0430\u043b\u0431\u043e\u0430
+currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u043a\u0441\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.GTQ=\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0441\u043a\u0438 \u043a\u0432\u0435\u0442\u0446\u0430\u043b
-currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
-currenciesDisplayName.GHC=\u0413\u0430\u043d\u0430\u0458\u0441\u043a\u0438 \u0421\u0435\u0434\u0438
-currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f
currenciesDisplayName.NAD=\u041d\u0430\u043c\u0438\u0431\u0438\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f
+currenciesDisplayName.GHC=\u0413\u0430\u043d\u0430\u0458\u0441\u043a\u0438 \u0421\u0435\u0434\u0438
+currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
currenciesDisplayName.KGS=\u041a\u0438\u0440\u0433\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0438 \u0441\u043e\u043c
-currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
currenciesDisplayName.CHF=\u0428\u0432\u0430\u0458\u0446\u0430\u0440\u0441\u043a\u0438 \u0424\u0440\u0430\u043d\u043a
+currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
currenciesDisplayName.PYG=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0458\u0441\u043a\u0430 \u0433\u0443\u0430\u0440\u0430\u043d\u0430
-currenciesDisplayName.JMP=\u0408\u0430\u043c\u0430\u0458\u043a\u0430\u043d\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.PLZ=\u041f\u043e\u043b\u0441\u043a\u0430 \u0437\u043b\u043e\u0442\u0430 (1950-1995)
currenciesDisplayName.YER=\u0408\u0435\u043c\u0435\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.ATS=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0441\u043a\u0438 \u0428\u0438\u043b\u0438\u043d\u0433
-currenciesDisplayName.ETD=\u0415\u0442\u0438\u043e\u043f\u0438\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
-currenciesDisplayName.LYP=\u041b\u0438\u0431\u0438\u0458\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
currenciesDisplayName.ETB=\u0415\u0442\u0438\u043e\u043f\u0438\u0441\u043a\u0438 \u0411\u0438\u0440
currenciesDisplayName.BND=\u0411\u0440\u0443\u043d\u0435\u0458\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.DZF=\u0410\u043b\u0433\u0435\u0440\u0438\u0441\u043a\u0438 \u043d\u043e\u0432 \u0424\u0440\u0430\u043d\u043a
-currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
-currenciesDisplayName.JMD=\u0408\u0430\u043c\u0430\u0458\u043a\u0430\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.PLN=\u041f\u043e\u043b\u0441\u043a\u0430 \u0437\u043b\u043e\u0442\u0430
+currenciesDisplayName.JMD=\u0408\u0430\u043c\u0430\u0458\u043a\u0430\u043d\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0430 \u0424\u0443\u043d\u0442\u0430
currenciesDisplayName.DZD=\u0410\u043b\u0433\u0435\u0440\u0438\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440
currenciesDisplayName.ISK=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.SRG=\u0421\u0443\u0440\u0438\u043d\u0430\u043c\u0441\u043a\u0438 \u0433\u0438\u043b\u0434\u0435\u0440
-currenciesDisplayName.BZH=\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u043e \u0425\u043e\u043d\u0434\u0443\u0440\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
currenciesDisplayName.LYD=\u041b\u0438\u0431\u0438\u0458\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.BAN=\u0411\u043e\u0441\u0430\u043d\u0441\u043a\u043e-\u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0441\u043a\u0438 \u043d\u043e\u0432 \u0414\u0438\u043d\u0430\u0440
-currenciesDisplayName.BAM=\u0411\u043e\u0441\u0430\u043d\u0441\u043a\u043e-\u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0431\u0438\u043b\u043d\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.BZD=\u0411\u0435\u043b\u0438\u0437\u0438\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
+currenciesDisplayName.BAM=\u0411\u043e\u0441\u0430\u043d\u0441\u043a\u043e-\u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0431\u0438\u043b\u043d\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.ESP=\u0428\u043f\u0430\u043d\u0441\u043a\u0430 \u041f\u0435\u0437\u0435\u0442\u0430
-currenciesDisplayName.KRW=\u0408\u0443\u0436\u043d\u043e \u043a\u043e\u0440\u0435\u0458\u0441\u043a\u0438 \u0432\u043e\u043d
currenciesDisplayName.NLG=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0433\u0438\u043b\u0434\u0435\u0440
-currenciesDisplayName.BMP=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438 \u0444\u0443\u043d\u0442\u0430
+currenciesDisplayName.KRW=\u0408\u0443\u0436\u043d\u043e \u043a\u043e\u0440\u0435\u0458\u0441\u043a\u0438 \u0432\u043e\u043d
currenciesDisplayName.BAD=\u0411\u043e\u0441\u0430\u043d\u0441\u043a\u043e-\u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440
currenciesDisplayName.ZWD=\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0438\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
-currenciesDisplayName.KRO=\u0408\u0443\u0436\u043d\u043e \u043a\u043e\u0440\u0435\u0458\u0441\u043a\u0438 \u0441\u0442\u0430\u0440 \u0432\u043e\u043d
currenciesDisplayName.CSK=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0447\u043a\u0430 \u0446\u0432\u0440\u0441\u0442\u0430 \u043a\u043e\u0440\u043e\u043d\u0430
currenciesDisplayName.BYR=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u043a\u0430 \u0420\u0443\u0431\u0459\u0430
currenciesDisplayName.IRR=\u0418\u0440\u0430\u043d\u0441\u043a\u0438 \u0440\u0438\u0430\u043b
currenciesDisplayName.PKR=\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u0458\u0430
currenciesDisplayName.BMD=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438 \u0414\u043e\u043b\u0430\u0440
-currenciesDisplayName.KRH=\u0408\u0443\u0436\u043d\u043e \u043a\u043e\u0440\u0435\u0441\u043a\u0438 \u0445\u0432\u0430\u043d
-currenciesDisplayName.BYL=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u043a\u0430 \u0420\u0443\u0431\u0459\u0430 (1992-1994)
-currenciesDisplayName.CSC=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0447\u043a\u0430 \u043a\u043e\u0440\u043e\u043d\u0430
-currenciesSymbol.YDD=YDD
-currenciesSymbol.GRN=GRN
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.TWD=NT$
currenciesSymbol.LKR=SL Re
-currenciesSymbol.BYB=BYB
-currenciesSymbol.TJS=TJS
-currenciesSymbol.RWF=RWF
-currenciesSymbol.TJR=TJR
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GRD=GRD
-currenciesSymbol.AFN=Af
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AMD=dram
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.AFA=AFA
-currenciesSymbol.CRC=C
-currenciesSymbol.FKP=FKP
-currenciesSymbol.TVD=TVD
-currenciesSymbol.MDL=MDL
-currenciesSymbol.HKD=HK$
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.SCR=SR
-currenciesSymbol.XID=XID
-currenciesSymbol.VUV=VT
-currenciesSymbol.KPW=KPW
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.LVR=LVR
-currenciesSymbol.AED=AED
-currenciesSymbol.LVL=LVL
-currenciesSymbol.BWP=BWP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.MOP=MOP
-currenciesSymbol.FJD=F$
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUB=RUB
-currenciesSymbol.NIC=NIC
-currenciesSymbol.LIF=LIF
-currenciesSymbol.UZS=UZS
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.ADD=ADD
-currenciesSymbol.THB=THB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.LUF=LUF
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.SZL=E
-currenciesSymbol.MNT=Tug
currenciesSymbol.SAR=SRl
-currenciesSymbol.UAH=UAH
-currenciesSymbol.HUF=Ft
-currenciesSymbol.IBP=IBP
+currenciesSymbol.FJD=F$
currenciesSymbol.QAR=QR
-currenciesSymbol.COP=Col$
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.PTC=PTC
-currenciesSymbol.AOS=AOS
-currenciesSymbol.BUR=BUR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.INR=INR
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.LTL=LTL
-currenciesSymbol.AON=AON
-currenciesSymbol.UYP=UYP
-currenciesSymbol.SML=SML
-currenciesSymbol.MZM=Mt
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.AOK=AOK
-currenciesSymbol.PGK=PGK
-currenciesSymbol.SYP=LS
-currenciesSymbol.OMR=RO
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MZE=MZE
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.NGN=NGN
-currenciesSymbol.PSP=PSP
-currenciesSymbol.AOA=AOA
-currenciesSymbol.GNI=GNI
-currenciesSymbol.MAF=MAF
-currenciesSymbol.GNF=GF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.HTG=HTG
-currenciesSymbol.MYR=RM
-currenciesSymbol.BTR=BTR
-currenciesSymbol.LSL=M
-currenciesSymbol.SLL=SLL
-currenciesSymbol.BHD=BD
-currenciesSymbol.TRL=TL
-currenciesSymbol.KMF=CF
-currenciesSymbol.GAF=GAF
-currenciesSymbol.CZK=CZK
-currenciesSymbol.GMP=GMP
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGM=BGM
-currenciesSymbol.BGL=lev
-currenciesSymbol.VEB=Be
-currenciesSymbol.MLF=MLF
-currenciesSymbol.MXP=MXP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.PES=PES
-currenciesSymbol.BSP=BSP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.GYD=G$
-currenciesSymbol.ILP=ILP
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.SKK=Sk
-currenciesSymbol.PEN=PEN
-currenciesSymbol.ILL=ILL
-currenciesSymbol.LRD=LRD
-currenciesSymbol.AMD=dram
-currenciesSymbol.BSD=BSD
-currenciesSymbol.GLK=GLK
-currenciesSymbol.HRK=HRK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.FRF=FRF
-currenciesSymbol.MWP=MWP
-currenciesSymbol.TDF=TDF
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.ALL=lek
-currenciesSymbol.ALK=ALK
-currenciesSymbol.TPE=TPE
-currenciesSymbol.DEM=DEM
-currenciesSymbol.XCD=EC$
-currenciesSymbol.KWD=KD
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.GWP=GWP
-currenciesSymbol.YUN=YUN
-currenciesSymbol.SVC=SVC
-currenciesSymbol.SIT=SIT
-currenciesSymbol.BEL=BEL
-currenciesSymbol.BEF=BF
-currenciesSymbol.YUD=YUD
-currenciesSymbol.BEC=BEC
-currenciesSymbol.SUR=SUR
-currenciesSymbol.RON=RON
-currenciesSymbol.ROL=leu
-currenciesSymbol.SUN=SUN
-currenciesSymbol.SIB=SIB
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.NOK=NKr
-currenciesSymbol.VNN=VNN
-currenciesSymbol.ZAR=R
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.VND=VND
-currenciesSymbol.KID=KID
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.GIP=GIP
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.TND=TND
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.JOD=JD
currenciesSymbol.LBP=LL
-currenciesSymbol.VAL=VAL
-currenciesSymbol.UGS=UGS
-currenciesSymbol.WST=WST
+currenciesSymbol.MNT=Tug
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
currenciesSymbol.KHR=CR
-currenciesSymbol.DOP=RD$
-currenciesSymbol.LNR=LNR
-currenciesSymbol.WSP=WSP
-currenciesSymbol.KHO=KHO
-currenciesSymbol.MTP=MTP
-currenciesSymbol.USS=USS
-currenciesSymbol.NZP=NZP
-currenciesSymbol.CUP=CUP
+currenciesSymbol.SYP=LS
currenciesSymbol.MTL=Lm
-currenciesSymbol.TMM=TMM
-currenciesSymbol.USN=USN
-currenciesSymbol.GHP=GHP
-currenciesSymbol.SSP=SSP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.SGD=S$
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
+currenciesSymbol.HUF=Ft
currenciesSymbol.NZD=$NZ
-currenciesSymbol.USD=US$
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
+currenciesSymbol.DOP=RD$
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.PAB=PAB
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
+currenciesSymbol.BIF=Fbu
currenciesSymbol.GTQ=Q
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
+currenciesSymbol.PLN=Zl
+currenciesSymbol.VEB=Be
+currenciesSymbol.KMF=CF
+currenciesSymbol.SEK=SKr
currenciesSymbol.AUD=$A
-currenciesSymbol.GHC=GHC
-currenciesSymbol.LAK=LAK
-currenciesSymbol.NAD=N$
-currenciesSymbol.KGS=som
-currenciesSymbol.BBD=BDS$
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
currenciesSymbol.CHF=SwF
-currenciesSymbol.PYG=PYG
-currenciesSymbol.JMP=JMP
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.YER=YRl
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.LYP=LYP
currenciesSymbol.ETB=Br
-currenciesSymbol.BND=BND
-currenciesSymbol.DZF=DZF
-currenciesSymbol.EGP=EGP
-currenciesSymbol.JMD=J$
-currenciesSymbol.PLN=Zl
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.MXN=MEX$
currenciesSymbol.DZD=DA
-currenciesSymbol.ISK=ISK
-currenciesSymbol.SRG=Sf
-currenciesSymbol.BZH=BZH
-currenciesSymbol.LYD=LD
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=KM
currenciesSymbol.BZD=BZ$
-currenciesSymbol.ESP=ESP
-currenciesSymbol.KRW=KRW
-currenciesSymbol.NLG=NLG
-currenciesSymbol.BMP=BMP
-currenciesSymbol.BAD=BAD
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.SEK=SKr
-currenciesSymbol.KRO=KRO
-currenciesSymbol.CSK=CSK
-currenciesSymbol.BYR=Rbl
currenciesSymbol.IRR=RI
-currenciesSymbol.PKR=Pra
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=\u0458\u0430\u043d.®\u0444\u0435\u0432.®\u043c\u0430\u0440.®\u0430\u043f\u0440.®\u043c\u0430\u0458.®\u0458\u0443\u043d.®\u0458\u0443\u043b.®\u0430\u0432\u0433.®\u0441\u0435\u043f\u0442.®\u043e\u043a\u0442.®\u043d\u043e\u0435\u043c.®\u0434\u0435\u043a\u0435\u043c.®®
months=\u0458\u0430\u043d\u0443\u0430\u0440\u0438®\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440\u0438\u043b®\u043c\u0430\u0458®\u0458\u0443\u043d\u0438®\u0458\u0443\u043b\u0438®\u0430\u0432\u0433\u0443\u0441\u0442®\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438®\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438®\u043d\u043e\u0435\u043c\u0432\u0440\u0438®\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438®®
shortWeekdays=®\u043d\u0435\u0434.®\u043f\u043e\u043d.®\u0432\u0442.®\u0441\u0440\u0435.®\u0447\u0435\u0442.®\u043f\u0435\u0442.®\u0441\u0430\u0431.®
@@ -582,6 +368,7 @@ territories.CX=\u0411\u043e\u0436\u0438\u045c\u043d\u0438 \u041e\u0441\u0442\u04
territories.CV=\u0417\u0435\u043b\u0435\u043d\u043e\u0440\u0442\u0441\u043a\u0438 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.PA=\u041f\u0430\u043d\u0430\u043c\u0430
territories.CU=\u041a\u0443\u0431\u0430
+territories.CS=\u0421\u0440\u0431\u0438\u0458\u0430 \u0438 \u0426\u0440\u043d\u0430 \u0413\u043e\u0440\u0430
territories.CR=\u041a\u043e\u0441\u0442\u0430\u0440\u0438\u043a\u0430
territories.CO=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u0458\u0430
territories.CN=\u041a\u0438\u043d\u0430
@@ -652,17 +439,16 @@ territories.AI=\u0410\u043d\u0433\u0432\u0438\u043b\u0430
territories.MS=\u041c\u043e\u043d\u0441\u0435\u0440\u0430\u0442
territories.MR=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u0458\u0430
territories.AG=\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0438 \u0411\u0430\u0440\u0431\u0443\u0434\u0430
-territories.MQ=\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a
territories.AF=\u0410\u0432\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d
-territories.MP=\u0421\u0435\u0432\u0435\u0440\u043d\u0438 \u041c\u0430\u0440\u0438\u0458\u0430\u043d\u0438\u043d\u0438 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
+territories.MQ=\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a
territories.AE=\u041e\u0431\u0435\u0434\u0438\u043d\u0435\u0442\u0438 \u0410\u0440\u0430\u043f\u0441\u043a\u0438 \u0415\u043c\u0438\u0440\u0430\u0442\u0438
-territories.MO=\u041c\u0430\u043a\u0430\u043e \u0421.\u0410.\u0420 \u041a\u0438\u043d\u0430
+territories.MP=\u0421\u0435\u0432\u0435\u0440\u043d\u0438 \u041c\u0430\u0440\u0438\u0458\u0430\u043d\u0438\u043d\u0438 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.AD=\u0410\u043d\u0434\u043e\u0440\u0430
+territories.MO=\u041c\u0430\u043a\u0430\u043e \u0421.\u0410.\u0420 \u041a\u0438\u043d\u0430
territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u0458\u0430
territories.MM=\u041c\u0443\u0430\u043d\u043c\u0430\u0440
territories.ML=\u041c\u0430\u043b\u0438
territories.MK=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u0458\u0430
-territories.YU=\u0408\u0443\u0433\u043e\u0441\u043b\u0430\u0432\u0438\u0458\u0430
territories.YT=\u041c\u0430\u0458\u043e\u0442\u0435
territories.MH=\u041c\u0430\u0440\u0448\u0430\u043b\u043e\u0432\u0438 \u041e\u0421\u0442\u0440\u043e\u0432\u0438
territories.MG=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn.properties
index 789ed39..42073b6 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn.properties
@@ -7,13 +7,11 @@
decimalSeparator=,
groupingSeparator=\u00a0
+currenciesSymbol.MNT=\u20ae
shortMonths=\u0445\u0443\u043b®\u04af\u0445\u044d®\u0431\u0430\u0440®\u0442\u0443\u0443®\u043b\u0443\u0443®\u043c\u043e\u0433®\u043c\u043e\u0440®\u0445\u043e\u043d®\u0431\u0438\u0447®\u0442\u0430\u0445®\u043d\u043e\u0445®\u0433\u0430\u0445®®
months=\u0425\u0443\u043b\u0433\u0430\u043d\u0430®\u04ae\u0445\u044d\u0440®\u0411\u0430\u0440®\u0422\u0443\u0443\u043b\u0430\u0439®\u041b\u0443\u0443®\u041c\u043e\u0433\u043e\u0439®\u041c\u043e\u0440\u044c®\u0425\u043e\u043d\u044c®\u0411\u0438\u0447®\u0422\u0430\u0445\u0438\u0430®\u041d\u043e\u0445\u043e\u0439®\u0413\u0430\u0445\u0430\u0439®®
shortWeekdays=®\u041d\u044f®\u0414\u0430®\u041c\u044f®\u041b\u0445®\u041f\u04af®\u0411\u0430®\u0411\u044f®
weekdays=®\u043d\u044f\u043c®\u0434\u0430\u0432\u0430\u0430®\u043c\u044f\u0433\u043c\u0430\u0440®\u043b\u0445\u0430\u0433\u0432\u0430®\u043f\u04af\u0440\u044d\u0432®\u0431\u0430\u0430\u0441\u0430\u043d®\u0431\u044f\u043c\u0431\u0430®
-minNumberOfDaysInFirstWeek=4
-firstDayOfWeek=mon
eras=\u043c.\u044d.\u04e9®\u043c.\u044d.®
-ampms=AM®PM®
territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b \u0443\u043b\u0441
languages.mn=\u041c\u043e\u043d\u0433\u043e\u043b \u0445\u044d\u043b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr.properties
index 5893883..77dc88c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr.properties
@@ -10,20 +10,21 @@ shortMonths=\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940®\u092b\u0947\u092c\
months=\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940®\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940®\u092e\u093e\u0930\u094d\u091a®\u090f\u092a\u094d\u0930\u093f\u0932®\u092e\u0947®\u091c\u0942\u0928®\u091c\u0941\u0932\u0948®\u0913\u0917\u0938\u094d\u091f®\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930®\u0913\u0915\u094d\u091f\u094b\u092c\u0930®\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930®\u0921\u093f\u0938\u0947\u0902\u092c\u0930®®
shortWeekdays=®\u0930\u0935\u093f®\u0938\u094b\u092e®\u092e\u0902\u0917\u0933®\u092c\u0941\u0927®\u0917\u0941\u0930\u0941®\u0936\u0941\u0915\u094d\u0930®\u0936\u0928\u093f®
weekdays=®\u0930\u0935\u093f\u0935\u093e\u0930®\u0938\u094b\u092e\u0935\u093e\u0930®\u092e\u0902\u0917\u0933\u0935\u093e\u0930®\u092c\u0941\u0927\u0935\u093e\u0930®\u0917\u0941\u0930\u0941\u0935\u093e\u0930®\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930®\u0936\u0928\u093f\u0935\u093e\u0930®
+eras=\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935®\u0938\u0928®
ampms=\u092e.\u092a\u0942.®\u092e.\u0928\u0902.®
zoneStrings=Asia/Calcutta®IST®\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f®IST®\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f®©
territories.IN=\u092d\u093e\u0930\u0924
languages.es=\u0938\u094d\u092a\u093e\u0928\u093f\u0937
languages.ku=\u0915\u0941\u0930\u094d\u0926\u093f\u0937
languages.eo=\u0907\u0938\u094d\u092a\u0930\u093e\u0928\u094d\u091f\u094b
-languages.ks=\u0915\u0936\u094d\u092e\u0940\u0930\u0940
languages.en=\u0907\u0902\u0917\u094d\u0930\u0947\u091c\u0940
+languages.ks=\u0915\u0936\u094d\u092e\u0940\u0930\u0940
languages.el=\u0917\u094d\u0930\u0940\u0915
languages.qu=\u0915\u094d\u0935\u0947\u091a\u0913
languages.ko=\u0915\u094b\u0930\u093f\u092f\u0928\u094d
languages.kn=\u0915\u0928\u094d\u0928\u0921
-languages.kok=\u0915\u094b\u0902\u0915\u0923\u0940
languages.km=\u0915\u0902\u092c\u094b\u0921\u093f\u092f\u0928
+languages.kok=\u0915\u094b\u0902\u0915\u0923\u0940
languages.kl=\u0917\u094d\u0930\u0940\u0928\u0932\u093e\u0928\u094d\u0921\u093f\u0915
languages.kk=\u0915\u091c\u093c\u0915
languages.wo=\u0909\u0932\u094b\u092b
@@ -42,8 +43,8 @@ languages.cy=\u0935\u0947\u0932\u094d\u0937
languages.pa=\u092a\u0902\u091c\u093e\u092c\u0940
languages.cs=\u091c\u093c\u0947\u0915
languages.iu=\u0907\u0928\u0941\u0915\u093f\u091f\u0941\u091f\u094d
-languages.it=\u0907\u091f\u093e\u0932\u093f\u092f\u0928
languages.co=\u0915\u094b\u0930\u094d\u0938\u093f\u0915\u0928
+languages.it=\u0907\u091f\u093e\u0932\u093f\u092f\u0928
languages.is=\u0906\u0908\u0938\u0932\u093e\u0928\u094d\u0921\u093f\u0915
languages.uz=\u0909\u091c\u093c\u092c\u0947\u0915
languages.or=\u0913\u0930\u093f\u092f\u093e
@@ -136,15 +137,15 @@ languages.fy=\u092b\u094d\u0930\u093f\u0938\u093f\u092f\u0928\u094d
languages.sa=\u0938\u0902\u0938\u094d\u0915\u0943\u0924
languages.fr=\u092b\u094d\u0930\u0947\u0928\u094d\u091a
languages.lv=\u0932\u093e\u091f\u094d\u0935\u093f\u092f\u0928\u094d (\u0932\u0947\u091f\u094d\u091f\u093f\u0937)
-languages.lt=\u0932\u093f\u0925\u0941\u0906\u0928\u093f\u092f\u0928\u094d
languages.fo=\u092b\u0947\u0930\u094b\u0938\u094d
+languages.lt=\u0932\u093f\u0925\u0941\u0906\u0928\u093f\u092f\u0928\u094d
languages.rw=\u0915\u093f\u0928\u094d\u092f\u093e\u0930\u094d\u0935\u093e\u0928\u094d\u0921\u093e
languages.root=\u092e\u0930\u093e\u0920\u0940
languages.ru=\u0930\u0937\u094d\u092f\u0928\u094d
-languages.lo=\u0932\u093e\u0913\u0924\u093f\u092f\u0928\u094d
languages.fj=\u092b\u093f\u091c\u0940
-languages.ln=\u0932\u093f\u0902\u0917\u093e\u0932\u093e
+languages.lo=\u0932\u093e\u0913\u0924\u093f\u092f\u0928\u094d
languages.fi=\u092b\u093f\u0928\u094d\u0928\u093f\u0937
+languages.ln=\u0932\u093f\u0902\u0917\u093e\u0932\u093e
languages.ro=\u0930\u094b\u092e\u093e\u0928\u093f\u092f\u0928\u094d
languages.rn=\u0915\u093f\u0930\u0941\u0928\u094d\u0926\u0940
languages.rm=\u0930\u0939\u091f\u094b-\u0930\u094b\u092e\u093e\u0928\u094d\u0938\u094d
@@ -152,5 +153,5 @@ languages.fa=\u092a\u0930\u094d\u0937\u093f\u092f\u0928\u094d
languages.la=\u0932\u093e\u091f\u093f\u0928
languages.xh=\u0915\u094d\u0938\u094d\u0939\u094b\u0938\u093e
languages.eu=\u092c\u093e\u0938\u094d\u0915
-languages.ky=\u0915\u093f\u0930\u094d\u0917\u093f\u091c\u093c
languages.et=\u0907\u0938\u094d\u091f\u094b\u0928\u093f\u092f\u0928\u094d
+languages.ky=\u0915\u093f\u0930\u094d\u0917\u093f\u091c\u093c
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr_IN.properties
index d8023c9..3b599a5 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mr_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms.properties
index 583c683..26e7c8e 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms.properties
@@ -12,6 +12,7 @@ months=Januari®Februari®Mac®April®Mei®Jun®Julai®Ogos®September®Oktober®November®
shortWeekdays=®Ahd®Isn®Sel®Rab®Kha®Jum®Sab®
weekdays=®Ahad®Isnin®Selasa®Rabu®Khamis®Jumaat®Sabtu®
firstDayOfWeek=mon
+eras=S.M.®T.M.®
territories.TL=Timor-Leste
territories.TK=Tokelau
territories.TJ=Tadjikistan
@@ -100,6 +101,7 @@ territories.CX=Christmas Island
territories.CV=Cape Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbia
territories.CR=Kosta Rika
territories.CO=Colombia
territories.CN=Cina
@@ -170,17 +172,16 @@ territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
territories.AG=Antigua dan Barbuda
-territories.MQ=Martinique
territories.AF=Afghanistan
-territories.MP=Northern Mariana Islands
+territories.MQ=Martinique
territories.AE=Emiriah Arab Bersatu
-territories.MO=Macao S.A.R., China
+territories.MP=Northern Mariana Islands
territories.AD=Andorra
+territories.MO=Macao S.A.R., China
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedonia
-territories.YU=Yugoslavia
territories.YT=Mayotte
territories.MH=Kepulauan Marshall
territories.MG=Madagaskar
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms_BN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms_BN.properties
index d7805f3..52663ae 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms_BN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ms_BN.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.BND=BND
currenciesSymbol.BND=$
currenciesSymbol.USD=US$
shortDateFormat=dd/MM/yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mt.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mt.properties
index 6d4c75d..4dfc21b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mt.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mt.properties
@@ -15,15 +15,15 @@ minNumberOfDaysInFirstWeek=4
eras=QK®WK®
shortDateFormat=dd/MM/yyyy
mediumDateFormat=dd MMM yyyy
-longDateFormat=d 'ta''' MMMM yyyy
-fullDateFormat=EEEE, d 'ta''' MMMM yyyy
+longDateFormat=d 'ta\u2019' MMMM yyyy
+fullDateFormat=EEEE, d 'ta\u2019' MMMM yyyy
zoneStrings=Europe/Malta®CET®\u0126in \u010aentrali Ewropew®CEST®\u0126in \u010aentrali Ewropew tas-Sajf®©
territories.TL=Timor tal-Lvant
territories.TK=Tokelaw
territories.TJ=Ta\u0121ikistan
territories.TH=Tajlandja
territories.TG=Togo
-territories.TF=Territorji Fran\u010bi\u017ci ta' Nofsinhar
+territories.TF=Territorji Fran\u010bi\u017ci ta\u2019 Nofsinhar
territories.GY=Gujana
territories.TD=\u010aad
territories.TC=Turks and Caicos Islands
@@ -40,7 +40,9 @@ territories.GN=Gineja
territories.GM=Gambja
territories.GL=Grinlandja
territories.SV=El Salvador
+territories.062=Asja t\u2019Isfel \u010aentrali
territories.ST=Sao Tome and Principe
+territories.061=Polinesja
territories.GI=Gibraltar
territories.GH=Gana
territories.SR=Surinam
@@ -64,9 +66,12 @@ territories.SC=Seychelles
territories.SB=Solomon Islands
territories.SA=G\u0127arabja Sawdita
territories.FR=Franza
+territories.057=Mikronesja
territories.FO=G\u017cejjer Faroe
territories.FM=Mikronesja
territories.RW=Rwanda
+territories.054=Melanesja
+territories.053=Awstralja u New Zealand
territories.FK=Falkland Islands
territories.RU=Russja
territories.FJ=Fi\u0121i
@@ -76,20 +81,25 @@ territories.RE=R\u00e9union
territories.ET=Etijopja
territories.ES=Spanja
territories.ER=Eritreja
+territories.833=Isle of Man
territories.EH=Sahara tal-Punent
territories.EG=E\u0121ittu
+territories.830=Channel Islands
territories.EE=Estonja
territories.EC=Ekwador
territories.DZ=Al\u0121erija
territories.QA=Qatar
+territories.039=Ewropa t\u2019Isfel
territories.DO=Republikka Domenikana
territories.PY=Paragwaj
+territories.035=Asja tax-Xlokk
territories.DM=Dominika
territories.PW=Palau
territories.DK=Danimarka
territories.DJ=\u0120ibuti
territories.PT=Portugall
territories.PS=Palestinian Territory
+territories.030=Asja tal-Lvant
territories.PR=Puerto Rico
territories.DE=\u0120ermanja
territories.PN=Pitcairn
@@ -106,13 +116,16 @@ territories.CX=Christmas Island
territories.CV=Kape Verde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbja u Montenegro
territories.CR=Kosta Rika
+territories.029=Karibew
territories.CO=Kolumbja
territories.CN=\u010aina
territories.CM=Kamerun
territories.CL=\u010aili
territories.CK=Cook Islands
-territories.CI=Kosta ta' l-Avorju
+territories.CI=Kosta ta\u2019 l-Avorju
+territories.021=Amerika ta\u2019 Fuq
territories.CH=Svizzera
territories.CG=Kongo
territories.CF=Repubblika Afrikana \u010aentrali
@@ -120,6 +133,7 @@ territories.CD=Democratic Republic of the Congo
territories.CC=Cocos (Keeling) Islands
territories.OM=Oman
territories.CA=Kanada
+territories.419=Amerika Latina u l-Karibew
territories.BZ=Beli\u017ce
territories.BY=Bjelorussja
territories.BW=Botswana
@@ -127,14 +141,22 @@ territories.BV=Bouvet Island
territories.BT=Butan
territories.BS=Ba\u0127amas
territories.BR=Bra\u017cil
+territories.019=Amerika
+territories.018=Affrika t\u2019Isfel
territories.NZ=New Zealand
territories.BO=Bolivja
+territories.017=Affrika Nofsani
territories.BN=Brunej
territories.BM=Bermuda
+territories.015=Affrika ta\u2019 Fuq
+territories.014=Affrika tal-Lvant
+territories.013=Amerika \u010aentrali
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Affrika tal-Punent
territories.BH=Ba\u0127rajn
+territories.172=Commonwealth tal-Istati Independenti
territories.NR=Nauru
territories.BG=Bulgarija
territories.BF=Burkina Faso
@@ -159,26 +181,31 @@ territories.AU=Awstralja
territories.AT=Awstrija
territories.AS=Samoa Amerikana
territories.AR=Ar\u0121entina
+territories.009=O\u010bejanja
territories.AQ=Antarctica
territories.MZ=Mo\u017cambik
territories.AO=Angola
territories.MY=Malasja
territories.AN=Antilles Olandi\u017ci
territories.MX=Messiku
+territories.005=Amerika t\u2019Isfel
territories.AM=Armenja
territories.MW=Malawi
territories.AL=Albanija
territories.MV=Maldives
-territories.ZA=Afrika t'Isfel
+territories.003=Amerika ta\u2019 Fuq
+territories.ZA=Afrika t\u2019Isfel
territories.MU=Mawrizju
+territories.002=Affrika
territories.MT=Malta
+territories.001=Dinja
territories.AI=Angwilla
territories.MS=Montserrat
territories.MR=Mawritanja
territories.AG=Antigua and Barbuda
territories.MQ=Martinik
territories.AF=Afganistan
-territories.MP=G\u017cejjer Marjana ta' Fuq
+territories.MP=G\u017cejjer Marjana ta\u2019 Fuq
territories.AE=Emirati G\u0127arab Maqg\u0127uda
territories.MO=Macao S.A.R., China
territories.AD=Andorra
@@ -186,9 +213,8 @@ territories.MN=Mongolja
territories.MM=Mjanmar
territories.ML=Mali
territories.MK=Ma\u010bedonja
-territories.YU=Jugoslavja
territories.YT=Majotte
-territories.MH=G\u017cejjer ta' Marshall
+territories.MH=G\u017cejjer ta\u2019 Marshall
territories.MG=Madagaskar
territories.MD=Maldova
territories.MC=Monako
@@ -196,10 +222,14 @@ territories.MA=Marokk
territories.YE=Jemen
territories.LY=Libja
territories.LV=Latvja
+territories.155=Ewropa tal-Punent
territories.LU=Lussemburgu
+territories.154=Ewropa ta\u2019 Fuq
territories.LT=Litwanja
territories.LS=Lesoto
territories.LR=Liberja
+territories.151=Ewropa tal-Lvant
+territories.150=Ewropa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -208,8 +238,10 @@ territories.LA=Laos
territories.KZ=Ka\u017cakstan
territories.KY=Cayman Islands
territories.KW=Kuwajt
-territories.KR=Koreja t'Isfel
-territories.KP=Koreja ta' Fuq
+territories.145=Asja tal-Punent
+territories.142=Asja
+territories.KR=Koreja t\u2019Isfel
+territories.KP=Koreja ta\u2019 Fuq
territories.KN=Saint Kitts and Nevis
territories.KM=Komoros
territories.KI=Kiribati
@@ -257,8 +289,8 @@ territories.TR=Turkija
territories.TO=Tonga
territories.TN=Tune\u017c
territories.TM=Turkmenistan
-languages.gwi=Gwi\u010bin
languages.akk=Akkadjen
+languages.gwi=Gwi\u010bin
languages.eka=Ekajuk
languages.ijo=I\u0121o
languages.xh=\u0126o\u017ca
@@ -271,15 +303,15 @@ languages.pon=Ponpejan
languages.min=Minangkabaw
languages.suk=Sukuma
languages.wo=Wolof
-languages.lol=Mongo
languages.kut=Kutenaj
+languages.lol=Mongo
languages.mic=Mikmek
languages.wa=Walloon
languages.kum=Kumiku
languages.zap=\u017bapotek
languages.cus=Kuxtiku (O\u0127ra)
-languages.jbo=Lojban
languages.doi=Dogri
+languages.jbo=Lojban
languages.vo=Volapuk
languages.oto=Lingwi Otomjani
languages.vi=Vjetnami\u017c
@@ -294,7 +326,7 @@ languages.nap=Neapolitan
languages.uz=U\u017cbek
languages.uga=Ugaritiku
languages.tmh=Tamaxek
-languages.nai=Indjan tal-Amerika ta' Fuq (O\u0127ra)
+languages.nai=Indjan tal-Amerika ta\u2019 Fuq (O\u0127ra)
languages.nah=Na\u0127watil
languages.ur=Urdu
languages.fat=Fanti
@@ -303,8 +335,8 @@ languages.egy=E\u0121izzjan (Antik)
languages.ug=Wigur
languages.fan=Fang
languages.ssa=Nilo-Sa\u0127aram
-languages.mga=Irlandi\u017c, Medjevali (900-1200)
languages.bat=Baltiku (O\u0127ra)
+languages.mga=Irlandi\u017c, Medjevali (900-1200)
languages.nyo=Njoro
languages.bas=Basa
languages.nyn=Nyankole
@@ -323,7 +355,7 @@ languages.tt=Tatar
languages.ts=Tsonga
languages.bad=Banda
languages.tr=Tork
-languages.to=Tongan (G\u017cejjer ta' Tonga)
+languages.to=Tongan (G\u017cejjer ta\u2019 Tonga)
languages.tn=Zwana
languages.tl=Tagalog
languages.tk=Turkmeni
@@ -333,8 +365,8 @@ languages.kru=Kurusk
languages.tg=Ta\u0121ik
languages.byn=Blin
languages.te=Telugu
-languages.kro=Kru
languages.csb=Kashubian
+languages.kro=Kru
languages.ta=Tamil
languages.tkl=Tokelau
languages.efi=Efik
@@ -342,7 +374,7 @@ languages.sw=Swa\u0127ili
languages.sv=Svedi\u017c
languages.su=Sundani\u017c
languages.krc=Karachay-Balkar
-languages.st=Soto, t'Isfel
+languages.st=Soto, t\u2019Isfel
languages.ss=Swati
languages.sr=Serb
languages.sq=Albani\u017c
@@ -358,10 +390,10 @@ languages.sk=Slovakk
languages.grb=\u0120erbo
languages.si=Sin\u0127ali\u017c
languages.sh=Serbo-Kroat
-languages.crh=Crimean Turkish; Crimean Tatar
languages.afa=Afro-Asjatiku (O\u0127ra)
+languages.crh=Crimean Turkish; Crimean Tatar
languages.sg=Sango
-languages.se=Sami ta' Fuq
+languages.se=Sami ta\u2019 Fuq
languages.sd=Sindi
languages.udm=Udmurt
languages.sc=Sardinjan
@@ -384,14 +416,14 @@ languages.son=Songaj
languages.cpp=Creoles and pidgins, Portuguese-based (Other)
languages.sog=Sogdien
languages.ada=Adangme
-languages.kos=Kosrejan
-languages.hit=\u0126ittit
languages.cpf=Kreoli u Pi\u0121ini, Bba\u017cat fuq il-Fran\u010bi\u017c (O\u0127ra)
+languages.hit=\u0126ittit
+languages.kos=Kosrejan
languages.cpe=Kreoli u Pi\u0121ini, Bba\u017cat fuq l-Ingli\u017c (O\u0127ra)
languages.him=\u0126ima\u010bali
-languages.kok=Konkani
-languages.hil=Hiligaynon
languages.got=Gotiku
+languages.hil=Hiligaynon
+languages.kok=Konkani
languages.gor=Gorontalo
languages.gon=Gondi
languages.din=Dinka
@@ -431,7 +463,7 @@ languages.mag=Maga\u0127i
languages.mad=Maduri\u017c
languages.sma=Southern Sami
languages.oc=Provenzal (wara 1500)
-languages.nso=Soto, ta' Fuq
+languages.nso=Soto, ta\u2019 Fuq
languages.btk=Batak
languages.myv=Erzya
languages.dgr=Dogrib
@@ -439,7 +471,7 @@ languages.ny=\u010ai\u010bewa; Njan\u0121a
languages.myn=Majan
languages.nv=Nava\u0127o
languages.kmb=Kimbundu
-languages.nr=Ndebele, t'Isfel
+languages.nr=Ndebele, t\u2019Isfel
languages.gmh=\u0120ermaniku, Medjevali Pulit (ca. 1050-1500)
languages.no=Norve\u0121i\u017c
languages.nn=Ninorsk Norve\u0121i\u017c
@@ -448,7 +480,7 @@ languages.root=G\u0127erq
languages.ng=Ndonga
languages.sla=Slavic (Other)
languages.ne=Nepali\u017c
-languages.nd=Ndebele, ta' Fuq
+languages.nd=Ndebele, ta\u2019 Fuq
languages.cmc=Lingwi \u010aamiki
languages.tet=Tetum
languages.nb=Bokmahal Norve\u0121i\u017c
@@ -463,21 +495,21 @@ languages.ms=Malajan
languages.mr=Marati
languages.fro=Fran\u010bi\u017c, Antik (842-ca. 1400)
languages.mo=Moldavjan
-languages.frm=Fran\u010bi\u017c, Medjevali (ca. 1400-1600)
languages.mn=Mongoljan
-languages.jrb=Lhudi-G\u0127arbi
+languages.frm=Fran\u010bi\u017c, Medjevali (ca. 1400-1600)
languages.ml=Malajalam
+languages.jrb=Lhudi-G\u0127arbi
languages.mk=Ma\u010bedonjan
languages.mi=Maori
languages.mh=Marxall
languages.mg=Malaga\u017ci
languages.mwr=Marwari
languages.bra=Braj
-languages.den=Slav
languages.lv=Latvjan (Lettix)
+languages.den=Slav
languages.lu=Luba-Katanga
-languages.del=Delawerjan
languages.lt=Litwanjan
+languages.del=Delawerjan
languages.lo=Lao
languages.ln=Lingaljan
languages.li=Limburgish
@@ -530,38 +562,38 @@ languages.iu=Inukitut
languages.pap=Papjamento
languages.it=Taljan
languages.sgn=Lingwa tas-Sinjali
-languages.is=I\u017clandi\u017c
languages.kha=Kasi
+languages.is=I\u017clandi\u017c
languages.chr=\u010aerokij
languages.pam=Pampamga
languages.pal=Pa\u0127lavi
languages.chp=\u010aipewjan
-languages.io=Ido
languages.cho=\u010aostaw
+languages.io=Ido
languages.chn=\u0120argon ta\u010b-\u010ainuk
languages.chm=Mari
languages.tyv=Tuvinjan
languages.bnt=Bantu
languages.pag=Pangasinjan
-languages.ik=Inupjak
languages.chk=\u010aukese
-languages.ii=Sichuan Yi
+languages.ik=Inupjak
languages.haw=\u0126awajjan
+languages.ii=Sichuan Yi
languages.lam=Lamba
-languages.ig=Igbo
languages.chg=\u010aagataj
+languages.ig=Igbo
languages.sga=Irlandi\u017c, Antik (sa l-900)
languages.paa=Papwan (O\u0127ra)
languages.ie=Interlingue
languages.id=Indone\u017cjan
languages.lah=Landa
-languages.day=Dajak
languages.chb=\u010aib\u010ba
+languages.day=Dajak
languages.ia=Interlingua
languages.lad=Ladino
-languages.hz=\u0126erero
-languages.hai=\u0126ajda
languages.dar=Dargwa
+languages.hai=\u0126ajda
+languages.hz=\u0126erero
languages.hy=Armenjan
languages.ath=Lingwi Atabaskani
languages.hu=Ungeri\u017c
@@ -583,9 +615,9 @@ languages.iro=Lingwi Irogwjani
languages.gn=Gwarani
languages.gl=Gallegjan
languages.arw=Arawak
-languages.gez=Geez
-languages.art=Artifi\u010bjali (O\u0127ra)
languages.gd=Galliku Sko\u010b\u010bi\u017c
+languages.art=Artifi\u010bjali (O\u0127ra)
+languages.gez=Geez
languages.ira=Iranjan
languages.ga=Irlandi\u017c
languages.arp=Arapa\u0127o
@@ -594,8 +626,8 @@ languages.fy=Fri\u017cjan
languages.bla=Siksika
languages.gem=\u0120ermaniku (O\u0127ra)
languages.ypk=Lingwi Jupi\u010bi
-languages.arc=Aramajk
languages.fr=Fran\u010bi\u017c
+languages.arc=Aramajk
languages.fo=Fawri\u017c
languages.cel=Keltiku (O\u0127ra)
languages.fj=Fi\u0121i
@@ -619,9 +651,9 @@ languages.tum=Tumbuka
languages.mos=Mossi
languages.dz=D\u017congka
languages.nic=Ni\u0121erjan - Kordofanjan
-languages.lus=Luxaj
-languages.fiu=Finno - Ugrijan
languages.dv=Dive\u0127i
+languages.fiu=Finno - Ugrijan
+languages.lus=Luxaj
languages.nia=Nijas
languages.moh=Mo\u0127ak
languages.luo=Luwa
@@ -644,8 +676,8 @@ languages.wak=Lingwi Wakaxani
languages.sat=Santali
languages.cy=Welx
languages.sas=Saska
-languages.kbd=Kabardian
languages.cv=\u010auvax
+languages.kbd=Kabardian
languages.cu=Slaviku tal-Knisja
languages.mni=Manipuri
languages.cs=\u010aek
@@ -654,20 +686,20 @@ languages.cr=Krij
languages.sal=Salixan
languages.dua=Dwala
languages.co=Korsiku
-languages.sai=Indjan tal-Amerika t'Isfel (O\u0127ra)
+languages.sai=Indjan tal-Amerika t\u2019Isfel (O\u0127ra)
languages.mnc=Man\u010burjan
languages.sah=Jakut
-languages.kaw=Kawi
-languages.inh=Ingush
languages.gba=Gbaja
+languages.inh=Ingush
+languages.kaw=Kawi
languages.sad=Sandawe
languages.ch=\u010aamorro
-languages.ine=Indo-Ewropew
languages.bho=Bojpuri
+languages.ine=Indo-Ewropew
languages.enm=Ingli\u017c, Medjevali (1100-1500)
-languages.kar=Karen
-languages.inc=Indjan (O\u0127ra)
languages.ce=\u010ae\u010ben
+languages.inc=Indjan (O\u0127ra)
+languages.kar=Karen
languages.gay=Gajo
languages.ca=Katalan
languages.umb=Umbundu
@@ -675,19 +707,19 @@ languages.syr=Sirjan
languages.kam=Kamba
languages.tsi=Zimxjan
languages.ang=Ingli\u017c, Antik (ca.450-1100)
-languages.kac=Ka\u010bin
languages.cau=Kawkasu (O\u0127ra)
+languages.kac=Ka\u010bin
languages.kab=Kabuljan
-languages.kaa=Kara-Kalpak
languages.bs=Bosnijan
-languages.car=Karib
+languages.kaa=Kara-Kalpak
languages.br=Brenton
+languages.car=Karib
languages.bo=Tibetjan
languages.bn=Bengali
languages.bm=Bambara
languages.gaa=Ga
-languages.cai=Amerika \u010aentrali (O\u0127ra)
languages.bi=Bislama
+languages.cai=Amerika \u010aentrali (O\u0127ra)
languages.bh=Bi\u0127ari
languages.bg=Bulgaru
languages.be=Belarussu
@@ -701,10 +733,10 @@ languages.az=A\u017cerbaj\u0121ani
languages.ay=Ajmara
languages.av=Avarik
languages.as=Assamese
-languages.dsb=Lower Sorbian
languages.ar=G\u0127arbi
-languages.ilo=Iloko
+languages.dsb=Lower Sorbian
languages.elx=Elamit
+languages.ilo=Iloko
languages.zh=\u010aini\u017c
languages.an=Aragonese
languages.pra=Lingwi Prakriti
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nb.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nb.properties
index 3c8b0b3..0ce22cd 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nb.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nb.properties
@@ -8,768 +8,358 @@
decimalSeparator=,
groupingSeparator=\u00a0
percentFormat=#,##0 %
-currenciesDisplayName.JOD=Jordanske dinarer
-currenciesDisplayName.BOV=Boliviansk mvdol
-currenciesDisplayName.XAU=Gull
-currenciesDisplayName.FOK=F\u00e6r\u00f8yske kronur
-currenciesDisplayName.LBP=Libanesiske pund
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamesiske dong
-currenciesDisplayName.TZS=Tanzanianske shilling
-currenciesDisplayName.BOP=Boliviansk pesos
-currenciesDisplayName.KHR=Kambodsjanske riel
-currenciesDisplayName.XAM=Asian Monetary Unit
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Kambodsjanske gamle riel
-currenciesDisplayName.ZMP=Zambiske pund
-currenciesDisplayName.AUP=Australske pund
-currenciesDisplayName.XAF=CFA Franc BEAC
-currenciesDisplayName.MTP=Maltesiske pund
-currenciesDisplayName.GHR=Ghanesiske revaluerte cedi
-currenciesDisplayName.ZMK=Zambiske kwacha
-currenciesDisplayName.XAD=Asian Dinar Unit of Account
-currenciesDisplayName.GHP=Ghanesiske pund
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghanesiske gamle cedi
-currenciesDisplayName.MTL=Maltesiske lira
-currenciesDisplayName.AUD=Australske dollar
-currenciesDisplayName.USS=Amerikanske dollar (samme dag)
-currenciesDisplayName.ITL=Italienske lire
-currenciesDisplayName.USN=Amerikanske dollar (neste dag)
-currenciesDisplayName.GHC=Ghanesiske cedi
-currenciesDisplayName.SGD=Singaporske dollar
-currenciesDisplayName.PAB=Panamanske balboa
-currenciesDisplayName.LAK=Laotiske kip
-currenciesDisplayName.KGS=Kirgisiske som
-currenciesDisplayName.CHF=Sveitsiske franc
-currenciesDisplayName.ATS=\u00d8sterrikske shilling
-currenciesDisplayName.USD=Amerikanske dollar
-currenciesDisplayName.ETD=Etiopiske dollar
-currenciesDisplayName.BND=Bruneiske dollar
-currenciesDisplayName.JMP=Jamaikanske pund
-currenciesDisplayName.ETB=Etiopiske birr
-currenciesDisplayName.DZG=Algeriske franc germinal
-currenciesDisplayName.DZF=Algeriske nye franc
-currenciesDisplayName.DZD=Algeriske dinarer
-currenciesDisplayName.PYG=Paraguayanske guarani
-currenciesDisplayName.LYP=Libyske pund
-currenciesDisplayName.JMD=Jamaikanske dollar
-currenciesDisplayName.ISK=Islandske kronar
-currenciesDisplayName.ESP=Spanske peseta
-currenciesDisplayName.BMP=Bermudiske pund
-currenciesDisplayName.LYD=Libyske dinarer
-currenciesDisplayName.LYB=Libyske British Military Authority-lira
-currenciesDisplayName.BMD=Bermudiske dollar
-currenciesDisplayName.NLG=Nederlandske gylden
-currenciesDisplayName.MRO=Mauritanske ouguiya
-currenciesDisplayName.IRR=Iranske rialer
-currenciesDisplayName.SEK=Svenske kroner
-currenciesDisplayName.ERN=Eritreiske nakfa
+currenciesDisplayName.YDD=Jemenittiske dinarer
+currenciesDisplayName.TWD=Taiwanske nye dollar
currenciesDisplayName.KES=Kenyanske shilling
-currenciesDisplayName.CFF=Sentralafrikanske franc (CFA)
+currenciesDisplayName.BYB=Hviterussiske nye rubler (1994-1999)
+currenciesDisplayName.LKR=Srilankiske rupier
+currenciesDisplayName.RWF=Rwandiske franc
+currenciesDisplayName.TJS=Tadsjikiske somoni
+currenciesDisplayName.SDP=Sudanesiske pund
+currenciesDisplayName.TJR=Tadsjikiske rubler
+currenciesDisplayName.ERN=Eritreiske nakfa
+currenciesDisplayName.AFN=Afghani
+currenciesDisplayName.GRD=Greske drakmer
+currenciesDisplayName.IEP=Irske pund
currenciesDisplayName.ARS=Argentinske pesos
+currenciesDisplayName.SDD=Sudanesiske dinarer
currenciesDisplayName.ARP=Argentinske pesos (1983-1985)
-currenciesDisplayName.ARM=Argentinske Peso Moneda Nacional
-currenciesDisplayName.TWD=Taiwanske nye dollar
-currenciesDisplayName.SDP=Sudanesiske pund
currenciesDisplayName.GEL=Georgiske lari
+currenciesDisplayName.AFA=Afghani (1927-2002)
currenciesDisplayName.GEK=Georgiske kupon larit
-currenciesDisplayName.MQF=Martinique-franc
+currenciesDisplayName.CRC=Costaricanske colon
currenciesDisplayName.FKP=Falklands\u00f8yene-pund
+currenciesDisplayName.EEK=Estiske kroon
+currenciesDisplayName.HKD=Hongkong-dollar
+currenciesDisplayName.MDL=Moldovske leu
currenciesDisplayName.ARA=Argentinske australer
-currenciesDisplayName.SDD=Sudanesiske dinarer
currenciesDisplayName.IQD=Irakske dinarer
-currenciesDisplayName.TVD=Tuvalske dollar
currenciesDisplayName.SCR=Seychelliske rupier
+currenciesDisplayName.VUV=Vanuatisk vatu
+currenciesDisplayName.DKK=Danske kroner
+currenciesDisplayName.KPW=Nordkoreanske won
+currenciesDisplayName.GQE=Ekvatorialguineanske ekwele guineana
+currenciesDisplayName.IDR=Indonesiske rupier
currenciesDisplayName.LVR=Latviske rubler
-currenciesDisplayName.FJP=Fijianske pund
+currenciesDisplayName.SOS=Somaliske shilling
+currenciesDisplayName.AED=UAE dirham
+currenciesDisplayName.BWP=Botswanske pula
currenciesDisplayName.LVL=Latviske lats
-currenciesDisplayName.CDL=Congolesiske zaire
-currenciesDisplayName.CDG=Kongolesiske republikk-franc
-currenciesDisplayName.CDF=Kongolesiske franc (congolais)
-currenciesDisplayName.FJD=Fijianske dollar
+currenciesDisplayName.RUR=Russiske rubler (1991-1998)
currenciesDisplayName.NIO=Nicaraguanske cordoba oro
+currenciesDisplayName.ADP=Andorranske pesetas
+currenciesDisplayName.FJD=Fijianske dollar
currenciesDisplayName.MOP=Makaoske pataca
-currenciesDisplayName.NIG=Nicaraguanske gullcordoba
+currenciesDisplayName.RUB=Russiske rubler
+currenciesDisplayName.CDF=Kongolesiske franc (congolais)
currenciesDisplayName.NIC=Nicaraguanske cordoba
-currenciesDisplayName.XTR=COMECON Transferable Ruble
-currenciesDisplayName.FIN=Finske mark (1860-1962)
-currenciesDisplayName.FIM=Finske mark
+currenciesDisplayName.DJF=Djiboutiske franc
+currenciesDisplayName.ECV=Ecuadorianske Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Salomonske dollar
+currenciesDisplayName.UZS=Usbekiske sum
+currenciesDisplayName.ECS=Ecuadorianske sucre
+currenciesDisplayName.PHP=Filippinske pesos
+currenciesDisplayName.THB=Thailandske baht
currenciesDisplayName.LUF=Luxemburgske franc
-currenciesDisplayName.TTO=Trinidadiske gamle dollar
-currenciesDisplayName.AOS=Angolanske escudo
-currenciesDisplayName.AOR=Angolan Kwanza Reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongolske tugrik
-currenciesDisplayName.HUF=Ungarske forinter
-currenciesDisplayName.BIF=Burundiske franc
-currenciesDisplayName.AON=Angolanske ny kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolanske kwanza (1977-1990)
+currenciesDisplayName.FIM=Finske mark
currenciesDisplayName.TTD=Trinidadiske dollar
currenciesDisplayName.SZL=Swazilandske lilangeni
-currenciesDisplayName.NHF=Ny-hebridene CFP-franc
-currenciesDisplayName.GBP=Britiske pund sterling
-currenciesDisplayName.SAS=Saudiarabiske riyaler (1936-1952)
+currenciesDisplayName.MNT=Mongolske tugrik
currenciesDisplayName.SAR=Saudiarabiske riyaler
+currenciesDisplayName.UAK=Ukrainske karbovanetz
+currenciesDisplayName.UAH=Ukrainsle hryvnia
+currenciesDisplayName.HUF=Ungarske forinter
+currenciesDisplayName.COP=Colombianske pesos
+currenciesDisplayName.QAR=Qatarske riyaler
currenciesDisplayName.LTT=Litauiske talonas
-currenciesDisplayName.INR=Indiske rupier
currenciesDisplayName.PTE=Portugisiske escudo
-currenciesDisplayName.AOA=Angolanske kwanza
-currenciesDisplayName.PTC=Portugisiske conto
+currenciesDisplayName.AOR=Angolan Kwanza Reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguayanske peso uruguayo
+currenciesDisplayName.GBP=Britiske pund sterling
+currenciesDisplayName.BIF=Burundiske franc
+currenciesDisplayName.INR=Indiske rupier
+currenciesDisplayName.ZRZ=Zairiske zaire
+currenciesDisplayName.AON=Angolanske ny kwanza (1990-2000)
currenciesDisplayName.LTL=Litauiske lita
+currenciesDisplayName.XFU=French UIC-Franc
currenciesDisplayName.KZT=Kasakhstanske tenge
-currenciesDisplayName.KZR=Kasakhstanske rubler
-currenciesDisplayName.VGD=De britiske jomfru\u00f8yene-dollar
-currenciesDisplayName.NGP=Nigerianske pund
-currenciesDisplayName.MMX=Myanmarske dollar (FEC)
+currenciesDisplayName.MZM=Mosambikiske metical
+currenciesDisplayName.UYP=Uruguayanske pesos (1975-1993)
+currenciesDisplayName.AOK=Angolanske kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmesiske kyat
+currenciesDisplayName.GNS=Guineanske syli
+currenciesDisplayName.XFO=French Gold Franc
+currenciesDisplayName.PGK=Papuanske kina
+currenciesDisplayName.SYP=Syriske pund
+currenciesDisplayName.MZE=Mosambikiske escudo
+currenciesDisplayName.OMR=Omanske rialer
currenciesDisplayName.NGN=Nigerianske naira
+currenciesDisplayName.ZRN=Zairiske nye zaire
+currenciesDisplayName.AOA=Angolanske kwanza
+currenciesDisplayName.CNY=Kinesiske Yuan Renminbi
+currenciesDisplayName.MAF=Marokkanske franc
+currenciesDisplayName.GNF=Guineanske franc
currenciesDisplayName.HTG=Haitiske gourde
-currenciesDisplayName.SYP=Syriske pund
-currenciesDisplayName.PSP=Palestinske pund
-currenciesDisplayName.BHD=Bahrainske dinarer
+currenciesDisplayName.MAD=Marokkanske dirham
+currenciesDisplayName.TRY=Ny tyrkisk lire
currenciesDisplayName.MMK=Myanmarske kyat
+currenciesDisplayName.MYR=Malaysiske ringgit
+currenciesDisplayName.LSL=Lesothiske loti
+currenciesDisplayName.XEU=European Currency Unit
+currenciesDisplayName.BHD=Bahrainske dinarer
+currenciesDisplayName.SLL=Sierraleonske leone
+currenciesDisplayName.BTN=Bhutanske ngultrum
+currenciesDisplayName.TRL=Tyrkiske lira
+currenciesDisplayName.KMF=Komoriske franc
currenciesDisplayName.ANG=Nederlandske antillegylden
currenciesDisplayName.CZK=Tsjekkiske koruna
-currenciesDisplayName.IMP=Manske pund sterling
-currenciesDisplayName.BGX=Bulgarske lev (FEC)
-currenciesDisplayName.LSL=Lesothiske loti
-currenciesDisplayName.GAF=Gabonske franc (CFA)
-currenciesDisplayName.BGO=Bulgarske lev (1879-1952)
+currenciesDisplayName.AZM=Aserbajdsjanske Manat
+currenciesDisplayName.KYD=Caymanske dollar
+currenciesDisplayName.GMD=Gambiske dalasi
currenciesDisplayName.BGN=Bulgarske lev
-currenciesDisplayName.BGM=Bulgarske sosialist-lev
currenciesDisplayName.CAD=Kanadiske dollar
+currenciesDisplayName.MXV=Meksikanske Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bulgarske lev (hard)
-currenciesDisplayName.TRL=Tyrkiske lira
-currenciesDisplayName.KYD=Caymanske dollar
-currenciesDisplayName.CYP=Kypriotiske pund
+currenciesDisplayName.VEB=Venezuelanske bolivar
+currenciesDisplayName.MLF=Maliske franc
currenciesDisplayName.ILS=Israelske nye shekler
+currenciesDisplayName.MXP=Meksikanske s\u00f8lvpesos (1861-1992)
+currenciesDisplayName.PES=Peruvianske sol
currenciesDisplayName.GYD=Guyanske dollar
-currenciesDisplayName.AMD=Armenske dram
+currenciesDisplayName.MXN=Meksikanske pesos
currenciesDisplayName.ILP=Israelske pund
-currenciesDisplayName.MLF=Maliske franc
-currenciesDisplayName.ILL=Israelske shekler
-currenciesDisplayName.VEB=Venezuelanske bolivar
-currenciesDisplayName.ALX=Albanske dollar (FEC)
+currenciesDisplayName.SKK=Slovakiske koruna
+currenciesDisplayName.CYP=Kypriotiske pund
+currenciesDisplayName.XDR=Special Drawing Rights
+currenciesDisplayName.PEN=Peruvianske sol nuevo
currenciesDisplayName.LRD=Liberiske dollar
-currenciesDisplayName.ALV=Albanske lek valute
+currenciesDisplayName.PEI=Peruvianske inti
+currenciesDisplayName.AMD=Armenske dram
+currenciesDisplayName.BSD=Bahamske dollar
currenciesDisplayName.HRK=Kroatiske kuna
-currenciesDisplayName.REF=Reunionske franc
+currenciesDisplayName.CLP=Chilenske pesos
currenciesDisplayName.HRD=Kroatiske dinarer
-currenciesDisplayName.ALL=Albanske lek
-currenciesDisplayName.JEP=Jersey pund sterling
-currenciesDisplayName.ALK=Albanske lek (1946-1961)
-currenciesDisplayName.MKN=Makedonske denarer (1992-1993)
-currenciesDisplayName.VDP=Nordvietnamesiske viet minh piastre dong viet
-currenciesDisplayName.VDN=Nordvietnamesiske nye dong
-currenciesDisplayName.MKD=Makedonske denarer
-currenciesDisplayName.VDD=Nordvietnamesiske piastre dong viet
-currenciesDisplayName.TPP=Timoresiske pataca
currenciesDisplayName.XPF=CFP Franc
-currenciesDisplayName.BEL=Belgiske franc (\u00f8konomiske)
-currenciesDisplayName.GWP=Guinea-Bissau-pesos
-currenciesDisplayName.KWD=Kuwaitiske dinarer
-currenciesDisplayName.GWM=Portugisiske Guinea Mil Reis
-currenciesDisplayName.BEF=Belgiske franc
+currenciesDisplayName.FRF=Franske franc
+currenciesDisplayName.BRR=Brasilianske cruzeiro
+currenciesDisplayName.MKD=Makedonske denarer
+currenciesDisplayName.CLF=Chilenske Unidades de Fomento
+currenciesDisplayName.ALL=Albanske lek
+currenciesDisplayName.BRN=Brasilianske cruzado novo
+currenciesDisplayName.MWK=Malawisle kwacha
+currenciesDisplayName.BRL=Brasilianske realer
currenciesDisplayName.TPE=Timoresiske escudo
-currenciesDisplayName.BEC=Belgiske franc (konvertible)
-currenciesDisplayName.GWE=Portugisiske guinea escudo
+currenciesDisplayName.BRE=Brasilianske cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brasilianske cruzado
+currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
+currenciesDisplayName.DEM=Tyske mark
+currenciesDisplayName.KWD=Kuwaitiske dinarer
+currenciesDisplayName.XCD=\u00d8stkaribiske dollar
+currenciesDisplayName.NPR=Nepalesiske rupier
+currenciesDisplayName.GWP=Guinea-Bissau-pesos
+currenciesDisplayName.YUN=Jugoslaviske konvertible dinarer
currenciesDisplayName.SVC=Salvadoranske colon
-currenciesDisplayName.CWG=Curacao-gylden
-currenciesDisplayName.BDT=Bangladeshiske taka
-currenciesDisplayName.TOS=Tonganske pund sterling
-currenciesDisplayName.TOP=Tonganske pa\u02bbanga
+currenciesDisplayName.YUM=Jugoslaviske noviy-dinarer
+currenciesDisplayName.BEL=Belgiske franc (\u00f8konomiske)
+currenciesDisplayName.SIT=Slovenske tolar
+currenciesDisplayName.JPY=Japanske yen
currenciesDisplayName.XOF=CFA Franc BCEAO
+currenciesDisplayName.MVR=Maldiviske rufiyaa
+currenciesDisplayName.GWE=Portugisiske guinea escudo
+currenciesDisplayName.BEF=Belgiske franc
+currenciesDisplayName.TOP=Tonganske pa\u02bbanga
+currenciesDisplayName.YUD=Jugoslaviske dinarer (hard)
+currenciesDisplayName.BEC=Belgiske franc (konvertible)
currenciesDisplayName.SUR=Sovjetiske rubler
-currenciesDisplayName.SUN=Sovjetiske nye rubler
-currenciesDisplayName.NCF=Kaledonske franc germinal
-currenciesDisplayName.CVE=Kappverdiske escudo
-currenciesDisplayName.XNF=Franske antiller-franc (CFA)
+currenciesDisplayName.ROL=Rumenske leu
+currenciesDisplayName.DDM=\u00d8sttyske ostmark
+currenciesDisplayName.BDT=Bangladeshiske taka
+currenciesDisplayName.XBD=European Unit of Account (XBD)
+currenciesDisplayName.AWG=Arubiske gylden
+currenciesDisplayName.XBC=European Unit of Account (XBC)
+currenciesDisplayName.XBB=European Monetary Unit
+currenciesDisplayName.XBA=European Composite Unit
+currenciesDisplayName.NOK=Norske kroner
+currenciesDisplayName.MUR=Mauritiske rupier
currenciesDisplayName.ZAR=S\u00f8rafrikanske rand
-currenciesDisplayName.DOP=Dominikanske pesos
-currenciesDisplayName.CUX=Kubanske Foreign Exchange Certificates
-currenciesDisplayName.ZAP=S\u00f8rafrikanske pund
+currenciesDisplayName.SHP=Sankthelenske pund
+currenciesDisplayName.XAU=Gull
currenciesDisplayName.ZAL=S\u00f8rafrikanske rand (\u00f8konomisk)
+currenciesDisplayName.VND=Vietnamesiske dong
+currenciesDisplayName.TZS=Tanzanianske shilling
+currenciesDisplayName.GIP=Gibraltarske pund
currenciesDisplayName.TND=Tunisiske dinarer
-currenciesDisplayName.CUP=Kubanske pesos
-currenciesDisplayName.GUF=Fransk Guyana-franc guiana
+currenciesDisplayName.CVE=Kappverdiske escudo
currenciesDisplayName.UGX=Ugandiske shilling
-currenciesDisplayName.LNR=Ceylonske rupier
-currenciesDisplayName.AIF=Affar og Issa franc
-currenciesDisplayName.VAL=Vatikanstatens lira
-currenciesDisplayName.STE=Sao Tome og Principe-escudo
+currenciesDisplayName.ZMK=Zambiske kwacha
+currenciesDisplayName.JOD=Jordanske dinarer
+currenciesDisplayName.XAF=CFA Franc BEAC
+currenciesDisplayName.LBP=Libanesiske pund
currenciesDisplayName.UGS=Ugandiske shilling (1966-1987)
currenciesDisplayName.STD=Sao Tome og Principe-dobra
-currenciesDisplayName.MHD=Marshall\u00f8yene-dollar
-currenciesDisplayName.NZP=Nyzealandske pund
currenciesDisplayName.WST=Vestsamoisk tala
-currenciesDisplayName.WSP=Vestsamoisk pund
-currenciesDisplayName.HNL=Hoduras Lempira
-currenciesDisplayName.XMF=French Metropolitan Nouveau Franc
+currenciesDisplayName.KHR=Kambodsjanske riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominikanske pesos
+currenciesDisplayName.BOV=Boliviansk mvdol
+currenciesDisplayName.MTP=Maltesiske pund
+currenciesDisplayName.USS=Amerikanske dollar (samme dag)
+currenciesDisplayName.BOP=Boliviansk pesos
+currenciesDisplayName.MTL=Maltesiske lira
+currenciesDisplayName.CUP=Kubanske pesos
currenciesDisplayName.TMM=Turkmenske manat
-currenciesDisplayName.GTQ=Guatemalanske quetzal
+currenciesDisplayName.USN=Amerikanske dollar (neste dag)
+currenciesDisplayName.SGD=Singaporske dollar
currenciesDisplayName.NZD=Nyzealandske dollar
-currenciesDisplayName.SSP=Skotske pund
-currenciesDisplayName.BBD=Barbadisk dollar
+currenciesDisplayName.USD=Amerikanske dollar
+currenciesDisplayName.HNL=Hoduras Lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Italienske lire
+currenciesDisplayName.PAB=Panamanske balboa
+currenciesDisplayName.GTQ=Guatemalanske quetzal
+currenciesDisplayName.LAK=Laotiske kip
+currenciesDisplayName.GHC=Ghanesiske cedi
+currenciesDisplayName.AUD=Australske dollar
currenciesDisplayName.NAD=Namibiske dollar
+currenciesDisplayName.KGS=Kirgisiske som
currenciesDisplayName.MGF=Madagassiske franc
+currenciesDisplayName.CHF=Sveitsiske franc
+currenciesDisplayName.BBD=Barbadisk dollar
currenciesDisplayName.MGA=Madagassiske ariary
-currenciesDisplayName.EGP=Egyptiske pund
-currenciesDisplayName.BZH=Britisk Honduras-dollar
+currenciesDisplayName.PYG=Paraguayanske guarani
currenciesDisplayName.PLZ=Polske zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnia-Hercegovina nye dinarer
-currenciesDisplayName.PLX=Polske US dollar (FEC)
-currenciesDisplayName.BAM=Bosnia-Hercegovina mark (konvertible)
-currenciesDisplayName.BZD=Beliziske dollar
-currenciesDisplayName.BAD=Bosnia-Hercegovina dinarer
-currenciesDisplayName.PLN=Polske zloty
currenciesDisplayName.YER=Jemenittiske rialer
+currenciesDisplayName.ATS=\u00d8sterrikske shilling
+currenciesDisplayName.ETB=Etiopiske birr
+currenciesDisplayName.BND=Bruneiske dollar
+currenciesDisplayName.JMD=Jamaikanske dollar
+currenciesDisplayName.EGP=Egyptiske pund
+currenciesDisplayName.PLN=Polske zloty
+currenciesDisplayName.DZD=Algeriske dinarer
+currenciesDisplayName.ISK=Islandske kronar
currenciesDisplayName.SRG=Surinamske gylden
-currenciesDisplayName.CSK=Tsjekkoslovakiske koruna (hard)
+currenciesDisplayName.LYD=Libyske dinarer
+currenciesDisplayName.BZD=Beliziske dollar
+currenciesDisplayName.BAM=Bosnia-Hercegovina mark (konvertible)
+currenciesDisplayName.ESP=Spanske peseta
currenciesDisplayName.KRW=S\u00f8rkoreanske won
+currenciesDisplayName.NLG=Nederlandske gylden
+currenciesDisplayName.MRO=Mauritanske ouguiya
+currenciesDisplayName.BAD=Bosnia-Hercegovina dinarer
+currenciesDisplayName.ZWD=Zimbabwiske dollar
+currenciesDisplayName.SEK=Svenske kroner
+currenciesDisplayName.CSK=Tsjekkoslovakiske koruna (hard)
currenciesDisplayName.BYR=Hviterussiske rubler
-currenciesDisplayName.YEI=Jemenittiske imadi-riyaler
-currenciesDisplayName.BYL=Hviterussiske rubler (1992-1994)
-currenciesDisplayName.CSC=Tsjekkoslovakiske koruna
-currenciesDisplayName.KRO=S\u00f8rkoreanske gamle won
-currenciesDisplayName.KRH=S\u00f8rkoreanske hwan
-currenciesDisplayName.BYB=Hviterussiske nye rubler (1994-1999)
-currenciesDisplayName.SQS=Somalilandske shilling
-currenciesDisplayName.GRN=Greske nye drakmer
+currenciesDisplayName.IRR=Iranske rialer
currenciesDisplayName.PKR=Pakistanske rupier
-currenciesDisplayName.AFN=Afghani
-currenciesDisplayName.ZWD=Zimbabwiske dollar
-currenciesDisplayName.LKR=Srilankiske rupier
-currenciesDisplayName.GRD=Greske drakmer
-currenciesDisplayName.IEP=Irske pund
-currenciesDisplayName.AFA=Afghani (1927-2002)
-currenciesDisplayName.YDD=Jemenittiske dinarer
-currenciesDisplayName.RWF=Rwandiske franc
-currenciesDisplayName.CRC=Costaricanske colon
-currenciesDisplayName.TJS=Tadsjikiske somoni
-currenciesDisplayName.TJR=Tadsjikiske rubler
-currenciesDisplayName.EEK=Estiske kroon
-currenciesDisplayName.GQP=Ekvatorialguineanske peseta guineana
-currenciesDisplayName.MDR=Moldovske ruble cupon
-currenciesDisplayName.HKD=Hongkong-dollar
-currenciesDisplayName.DKK=Danske kroner
-currenciesDisplayName.MDL=Moldovske leu
-currenciesDisplayName.GQF=Ekvatorialguineanske franco
-currenciesDisplayName.GQE=Ekvatorialguineanske ekwele guineana
-currenciesDisplayName.IDR=Indonesiske rupier
-currenciesDisplayName.AED=UAE dirham
-currenciesDisplayName.KPW=Nordkoreanske won
-currenciesDisplayName.IDN=Indonesiske nye rupier
-currenciesDisplayName.BWP=Botswanske pula
-currenciesDisplayName.MDC=Moldovske leu cupon
-currenciesDisplayName.IDJ=Indonesiske Java-rupier
-currenciesDisplayName.KPP=Nordkoreanske won (1947-1959)
-currenciesDisplayName.IDG=Indonesiske nica-gylden
-currenciesDisplayName.VUV=Vanuatisk vatu
-currenciesDisplayName.XID=Islamske dinarer
-currenciesDisplayName.SOS=Somaliske shilling
-currenciesDisplayName.ADP=Andorranske pesetas
-currenciesDisplayName.RUR=Russiske rubler (1991-1998)
-currenciesDisplayName.GPF=Guadeloupe-franc
-currenciesDisplayName.DJF=Djiboutiske franc
-currenciesDisplayName.ADD=Andorranske dinarer
-currenciesDisplayName.MCG=Monegaskiske franc germinal
-currenciesDisplayName.MCF=Monegaskiske franc nouveau
-currenciesDisplayName.ECV=Ecuadorianske Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ecuadorianske sucre
-currenciesDisplayName.LIF=Liechtensteinske franc
-currenciesDisplayName.RUB=Russiske rubler
-currenciesDisplayName.PHP=Filippinske pesos
-currenciesDisplayName.UZS=Usbekiske sum
-currenciesDisplayName.COP=Colombianske pesos
-currenciesDisplayName.THB=Thailandske baht
-currenciesDisplayName.IBP=Nordirske pund
-currenciesDisplayName.BUR=Burmesiske rupier
-currenciesDisplayName.COF=Kongolesiske franc (CFA)
-currenciesDisplayName.BUK=Burmesiske kyat
-currenciesDisplayName.COB=Colombianske papir-pesos
-currenciesDisplayName.UZC=Usbekiske kupong-som
-currenciesDisplayName.UAK=Ukrainske karbovanetz
-currenciesDisplayName.QAR=Qatarske riyaler
-currenciesDisplayName.UAH=Ukrainsle hryvnia
-currenciesDisplayName.GNS=Guineanske syli
-currenciesDisplayName.CNY=Kinesiske Yuan Renminbi
-currenciesDisplayName.MZM=Mosambikiske metical
-currenciesDisplayName.CNX=Kinesiske US dollar (FEC)
-currenciesDisplayName.UYU=Uruguayanske peso uruguayo
-currenciesDisplayName.GNI=Guineanske franc (1960-1972)
-currenciesDisplayName.SML=Sanmarinske lira
-currenciesDisplayName.CNP=Kinesiske Jen Min Piao Yuan
-currenciesDisplayName.MZE=Mosambikiske escudo
-currenciesDisplayName.GNF=Guineanske franc
-currenciesDisplayName.OMS=Omanske rial saidi
-currenciesDisplayName.PGK=Papuanske kina
-currenciesDisplayName.OMR=Omanske rialer
-currenciesDisplayName.UYP=Uruguayanske pesos (1975-1993)
-currenciesDisplayName.XFU=French UIC-Franc
-currenciesDisplayName.BTR=Bhutanske rupier
-currenciesDisplayName.ZRZ=Zairiske zaire
-currenciesDisplayName.MAF=Marokkanske franc
-currenciesDisplayName.MAD=Marokkanske dirham
-currenciesDisplayName.BTN=Bhutanske ngultrum
-currenciesDisplayName.XFO=French Gold Franc
-currenciesDisplayName.UYF=Uruguayanske peso fuerte
-currenciesDisplayName.MYR=Malaysiske ringgit
-currenciesDisplayName.ZRN=Zairiske nye zaire
-currenciesDisplayName.AZM=Aserbajdsjanske Manat
-currenciesDisplayName.GMP=Gambiske pund
-currenciesDisplayName.KMF=Komoriske franc
-currenciesDisplayName.SLL=Sierraleonske leone
-currenciesDisplayName.GMD=Gambiske dalasi
-currenciesDisplayName.XEU=European Currency Unit
-currenciesDisplayName.BSP=Bahamske pund
-currenciesDisplayName.CMF=Kamerunske franc (CFA)
-currenciesDisplayName.MXV=Meksikanske Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA Franc BCEAEC
-currenciesDisplayName.BSD=Bahamske dollar
-currenciesDisplayName.MXP=Meksikanske s\u00f8lvpesos (1861-1992)
-currenciesDisplayName.MXN=Meksikanske pesos
-currenciesDisplayName.PES=Peruvianske sol
-currenciesDisplayName.GLK=Gr\u00f8nlandske kroner
-currenciesDisplayName.BRZ=Brasilianske cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruvianske sol nuevo
-currenciesDisplayName.CLP=Chilenske pesos
-currenciesDisplayName.SKK=Slovakiske koruna
-currenciesDisplayName.PEI=Peruvianske inti
-currenciesDisplayName.BRR=Brasilianske cruzeiro
-currenciesDisplayName.XDR=Special Drawing Rights
-currenciesDisplayName.FRG=Franske franc (Germinal/Franc Poincare)
-currenciesDisplayName.FRF=Franske franc
-currenciesDisplayName.BRN=Brasilianske cruzado novo
-currenciesDisplayName.CLF=Chilenske Unidades de Fomento
-currenciesDisplayName.CLE=Chilenske escudo
-currenciesDisplayName.BRL=Brasilianske realer
-currenciesDisplayName.CLC=Chilenske condor
-currenciesDisplayName.BRE=Brasilianske cruzeiro (1990-1993)
-currenciesDisplayName.DES=Tyske sperrmark
-currenciesDisplayName.MWP=Malawiske pund
-currenciesDisplayName.BRC=Brasilianske cruzado
-currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
-currenciesDisplayName.MWK=Malawisle kwacha
-currenciesDisplayName.PDR=Transdniestrianske rubler
-currenciesDisplayName.DEM=Tyske mark
-currenciesDisplayName.TDF=Tsjadiske franc (CFA)
-currenciesDisplayName.PDN=Transdniestrianske nye rubler
-currenciesDisplayName.PDK=Transdniestriansk rubler (kupon)
-currenciesDisplayName.NPR=Nepalesiske rupier
-currenciesDisplayName.CKD=Cook\u00f8yene dollar
-currenciesDisplayName.JPY=Japanske yen
-currenciesDisplayName.MVR=Maldiviske rufiyaa
-currenciesDisplayName.XCF=CFA Nouveau Franc
-currenciesDisplayName.MVP=Maldiviske rupier
-currenciesDisplayName.XCD=\u00d8stkaribiske dollar
-currenciesDisplayName.SIT=Slovenske tolar
-currenciesDisplayName.YUR=Jugoslaviske reforerte dinarer
-currenciesDisplayName.AWG=Arubiske gylden
-currenciesDisplayName.YUO=Jugoslaviske oktoberdinarer
-currenciesDisplayName.DDM=\u00d8sttyske ostmark
-currenciesDisplayName.YUN=Jugoslaviske konvertible dinarer
-currenciesDisplayName.YUM=Jugoslaviske noviy-dinarer
-currenciesDisplayName.TCC=Turks- og Caicos\u00f8yene-crown
-currenciesDisplayName.YUG=Jugoslaviske 1994-dinarer
-currenciesDisplayName.YUF=Jugoslaviske f\u00f8derasjonen-dinarer
-currenciesDisplayName.RON=Rumenske nye leu
-currenciesDisplayName.YUD=Jugoslaviske dinarer (hard)
-currenciesDisplayName.ROL=Rumenske leu
-currenciesDisplayName.SIB=Slovenske tolar bons
-currenciesDisplayName.NOK=Norske kroner
-currenciesDisplayName.MUR=Mauritiske rupier
-currenciesDisplayName.XBD=European Unit of Account (XBD)
-currenciesDisplayName.GIP=Gibraltarske pund
-currenciesDisplayName.VNS=Vietnamesiske nasjonale dong
-currenciesDisplayName.XBC=European Unit of Account (XBC)
-currenciesDisplayName.VNR=Vietnamesiske republikk-dong
-currenciesDisplayName.XBB=European Monetary Unit
-currenciesDisplayName.XBA=European Composite Unit
-currenciesDisplayName.KID=Kiribatiske dollar
-currenciesDisplayName.SHP=Sankthelenske pund
-currenciesDisplayName.VNN=Vietnamesiske nye dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudiske dollar
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=kr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=kr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
-shortMonths=jan®feb®mar®apr®mai®jun®jul®aug®sep®okt®nov®des®®
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
+shortMonths=jan.®feb.®mars®april®mai®juni®juli®aug.®sep.®okt.®nov.®des.®®
months=januar®februar®mars®april®mai®juni®juli®august®september®oktober®november®desember®®
-shortWeekdays=®s\u00f8n.®man.®tir.®ons.®tor.®fre.®l\u00f8r.®
+shortWeekdays=®s\u00f8.®ma.®ti.®on.®to.®fr.®l\u00f8.®
weekdays=®s\u00f8ndag®mandag®tirsdag®onsdag®torsdag®fredag®l\u00f8rdag®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
eras=f.Kr.®e.Kr.®
+ampms=a.m.®p.m.®
shortDateFormat=dd.MM.yy
mediumDateFormat=d. MMM. yyyy
longDateFormat=d. MMMM yyyy
@@ -867,6 +457,7 @@ territories.CX=Christmas\u00f8ya
territories.CV=Kapp Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbia og Montenegro
territories.CR=Costa Rica
territories.CO=Colombia
territories.CN=Kina
@@ -937,17 +528,16 @@ territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
territories.AG=Antigua og Barbuda
-territories.MQ=Martinique
territories.AF=Afghanistan
-territories.MP=Nord-Marianene
+territories.MQ=Martinique
territories.AE=De forente arabiske emiratene
-territories.MO=Macao S.A.R. (Kina)
+territories.MP=Nord-Marianene
territories.AD=Andorra
+territories.MO=Macao S.A.R. (Kina)
territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedonia, Republikken
-territories.YU=Jugoslavia
territories.YT=Mayotte
territories.MH=Marshall\u00f8yene
territories.MG=Madagaskar
@@ -1018,10 +608,9 @@ territories.TR=Tyrkia
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
-languages.gwi=gwich\u02bbin
languages.akk=akkadisk
+languages.gwi=gwich\u02bcin
languages.eka=ekajuk
-languages.ijo=ijo
languages.xh=xhosa
languages.sux=sumerisk
languages.sus=susu
@@ -1032,20 +621,19 @@ languages.pon=ponapisk
languages.min=minangkabau
languages.suk=sukuma
languages.wo=wolof
-languages.lol=mongo
languages.kut=kutenai
+languages.lol=mongo
languages.mic=micmac
languages.wa=vallonsk
languages.kum=kumyk
languages.zap=zapotec
languages.cus=kusjitisk (annet)
-languages.jbo=lojban
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volapyk
languages.oto=otomisk spr\u00e5k
languages.vi=vietnamesisk
-languages.vai=vai
-languages.rar=rarotongan
+languages.rar=rarotongansk
languages.ve=venda
languages.rap=rapanui
languages.raj=rajasthani
@@ -1054,8 +642,8 @@ languages.nzi=nzima
languages.nap=napolitansk
languages.uz=usbekisk
languages.uga=ugaritisk
-languages.tmh=tamashek
-languages.nai=nordamerikansk indiansk (annet)
+languages.tmh=tamasjek
+languages.nai=nordamerikansk indiansk
languages.nah=nahuatl
languages.ur=urdu
languages.fat=fanti
@@ -1064,8 +652,8 @@ languages.egy=egyptisk (historisk)
languages.ug=uigurisk
languages.fan=fang
languages.ssa=nilo-saharam (annet)
-languages.mga=mellomirsk (900-1200)
languages.bat=baltisk (annet)
+languages.mga=mellomirsk (900-1200)
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1093,8 +681,8 @@ languages.kru=kurukh
languages.tg=tatsjikisk
languages.byn=blin
languages.te=telugu
-languages.kro=kru
languages.csb=kasjubisk
+languages.kro=kru
languages.ta=tamil
languages.tkl=tokelau
languages.efi=efik
@@ -1118,8 +706,8 @@ languages.sk=slovakisk
languages.grb=grebo
languages.si=singalesisk
languages.sh=serbokroatisk
-languages.crh=krimtyrkisk, krimtatarisk
languages.afa=afroasiatisk (annet)
+languages.crh=krimtatarisk
languages.sg=sango
languages.se=nordsamisk
languages.sd=sindhi
@@ -1133,7 +721,6 @@ languages.ro=rumensk
languages.rn=rundi
languages.rm=retoromansk
languages.mdf=moksha
-languages.tiv=tiv
languages.ady=adyghe
languages.zun=zuni
languages.kpe=kpelle
@@ -1143,14 +730,14 @@ languages.son=songhai
languages.cpp=kreolsk og pidgin, portugisiskbasert (annet)
languages.sog=sogdisk
languages.ada=adangme
-languages.kos=kosraeansk
-languages.hit=hettittisk
languages.cpf=kreolsk og pidgin, franskbasert (annet)
+languages.hit=hettittisk
+languages.kos=kosraeansk
languages.cpe=kreolsk og pidgin, engelskbasert (annet)
languages.him=himachali
-languages.kok=konkani
-languages.hil=hiligaynon
languages.got=gotisk
+languages.hil=hiligaynon
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
@@ -1164,10 +751,9 @@ languages.snk=soninke
languages.cop=koptisk
languages.yap=yapesisk
languages.ach=acoli
-languages.yao=yao
languages.phi=filippinsk (annet)
languages.pl=polsk
-languages.ace=akinesisk
+languages.ace=achinesisk
languages.pi=pali
languages.pa=panjabi
languages.bug=buginesisk
@@ -1191,7 +777,7 @@ languages.mad=maduresisk
languages.sma=s\u00f8rsamisk
languages.oc=oksitansk (etter 1500)
languages.nso=sotho, nord
-languages.btk=batak
+languages.btk=batak (Indonesia)
languages.myv=erzya
languages.dgr=dogrib
languages.ny=nyanja
@@ -1221,21 +807,21 @@ languages.ms=malayisk
languages.mr=marathi
languages.fro=gammelfransk (842 til ca.1400)
languages.mo=moldavisk
-languages.frm=mellomfransk (ca.1400-1600)
languages.mn=mongolsk
-languages.jrb=j\u00f8dearabisk
+languages.frm=mellomfransk (ca.1400-1600)
languages.ml=malayalam
+languages.jrb=j\u00f8dearabisk
languages.mk=makedonsk
languages.mi=maori
languages.mh=marshallesisk
languages.mg=madagassisk
languages.mwr=marwari
languages.bra=braj
-languages.den=slavisk
languages.lv=latvisk
+languages.den=slavisk (athapaskansk)
languages.lu=luba-katanga
-languages.del=delaware
languages.lt=litauisk
+languages.del=delaware
languages.lo=laotisk
languages.ln=lingala
languages.li=limburgisk
@@ -1275,7 +861,6 @@ languages.jv=javanesisk
languages.gil=kiribatisk; gilbertesisk
languages.znd=zande
languages.shn=shan
-languages.fon=fon
languages.xal=kalmyk
languages.aus=australsk spr\u00e5k
languages.kho=khotanesisk
@@ -1288,38 +873,38 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italiensk
languages.sgn=tegnspr\u00e5k
-languages.is=islandsk
languages.kha=khasi
+languages.is=islandsk
languages.chr=cherokee
languages.pam=pampanga
languages.pal=pahlavi
languages.chp=chipewiansk
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=chinook
languages.chm=mari
languages.tyv=tuvinisk
languages.bnt=bantu
languages.pag=pangasinan
-languages.ik=unupiak
languages.chk=chuukesisk
-languages.ii=sichuan-yi
+languages.ik=unupiak
languages.haw=hawaiisk
+languages.ii=sichuan-yi
languages.lam=lamba
-languages.ig=ibo
languages.chg=chagatai
+languages.ig=ibo
languages.sga=gammelirsk (til 900)
languages.paa=papuisk (annet)
languages.ie=interlingue
languages.id=indonesisk
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
languages.lad=ladinsk
-languages.hz=herero
-languages.hai=haida
languages.dar=dargwa
+languages.hai=haida
+languages.hz=herero
languages.hy=armensk
languages.ath=athapaskansk spr\u00e5k
languages.hu=ungarsk
@@ -1340,9 +925,9 @@ languages.iro=irokansk spr\u00e5k
languages.gn=guarani
languages.gl=galicisk
languages.arw=arawak
-languages.gez=ges
-languages.art=kunstig (annet)
languages.gd=skotsk g\u00e6lisk
+languages.art=kunstig (annet)
+languages.gez=ges
languages.ira=iransk
languages.ga=irsk
languages.arp=arapaho
@@ -1351,8 +936,8 @@ languages.fy=frisisk
languages.bla=siksika
languages.gem=germansk (annet)
languages.ypk=jupisk spr\u00e5k
-languages.arc=arameisk
languages.fr=fransk
+languages.arc=arameisk
languages.fo=f\u00e6r\u00f8ysk
languages.cel=keltisk (annet)
languages.fj=fijiansk
@@ -1376,12 +961,11 @@ languages.tum=tumbuka
languages.mos=mossi
languages.dz=dzongkha
languages.nic=niger - kordofaniansk (annet)
-languages.lus=lushai
-languages.fiu=finsk-ugrisk (annet)
languages.dv=divehi
+languages.fiu=finsk-ugrisk (annet)
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
-languages.luo=luo
languages.lun=lunda
languages.apa=apache-spr\u00e5k
languages.lui=luiseno
@@ -1401,8 +985,8 @@ languages.wak=wakasjansk spr\u00e5k
languages.sat=santali
languages.cy=walisisk
languages.sas=sasak
-languages.kbd=kabardisk
languages.cv=tsjuvansk
+languages.kbd=kabardisk
languages.cu=kirkeslavisk
languages.mni=manipuri
languages.cs=tsjekkisk
@@ -1414,17 +998,17 @@ languages.co=korsikansk
languages.sai=s\u00f8ramerikansk indiansk (annet)
languages.mnc=mandsju
languages.sah=jakutsk
-languages.kaw=kawi
-languages.inh=ingusjisk
languages.gba=gbaya
+languages.inh=ingusjisk
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=indoeuropeisk (annet)
languages.bho=bhojpuri
+languages.ine=indoeuropeisk (annet)
languages.enm=mellomengelsk (1100-1500)
-languages.kar=karensk
-languages.inc=indisk (annet)
languages.ce=tsjetsjensk
+languages.inc=indisk (annet)
+languages.kar=karensk
languages.gay=gayo
languages.ca=katalansk
languages.umb=umbundu
@@ -1432,19 +1016,19 @@ languages.syr=syrisk
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=gammelengelsk (ca. 450-1100)
-languages.kac=kachin
languages.cau=kaukasisk (annet)
+languages.kac=kachin
languages.kab=kabylsk
-languages.kaa=karakalpakisk
languages.bs=bosnisk
-languages.car=karibisk
+languages.kaa=karakalpakisk
languages.br=bretonsk
+languages.car=karibisk
languages.bo=tibetansk
languages.bn=bengali
languages.bm=bambara
languages.gaa=ga
-languages.cai=sentralamerikansk indiansk (annet)
languages.bi=bislama
+languages.cai=sentralamerikansk indiansk (annet)
languages.bh=bihari
languages.bg=bulgarsk
languages.be=hviterussisk
@@ -1458,10 +1042,10 @@ languages.az=aserbajdsjansk
languages.ay=aymara
languages.av=avarisk
languages.as=assamisk
-languages.dsb=lavsorbisk
languages.ar=arabisk
-languages.ilo=iloko
+languages.dsb=lavsorbisk
languages.elx=elamittisk
+languages.ilo=iloko
languages.zh=kinesisk
languages.an=aragonsk
languages.pra=prakrit-spr\u00e5k
@@ -1474,12 +1058,12 @@ languages.ae=avestisk
languages.ab=abkhasisk
languages.aa=afar
languages.yo=joruba
-languages.alg=algonkin
+languages.alg=algonkinsk spr\u00e5k
languages.ale=aleutisk
languages.mkh=mon-khmer (Other)
languages.yi=jiddisk
languages.dra=dravidisk (annet)
-languages.ber=berbisk
+languages.ber=berbisk (annet)
languages.nds=lavtysk; lavsaksisk
languages.bem=bemba
languages.bej=beja
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nl.properties
index 8215239..f21481b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nl.properties
@@ -7,761 +7,352 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.JOD=Jordaanse dinar
-currenciesDisplayName.BOV=Boliviaanse mvdol
-currenciesDisplayName.XAU=Goud
-currenciesDisplayName.FOK=Faer\u00f6erse kroon
-currenciesDisplayName.LBP=Libanees pond
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamese dong
-currenciesDisplayName.TZS=Tanzaniaanse shilling
-currenciesDisplayName.BOP=Boliviaanse peso
-currenciesDisplayName.KHR=Cambodjaanse riel
-currenciesDisplayName.XAM=Aziatische monetaire eenheid
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Cambodjaanse oude riel
-currenciesDisplayName.ZMP=Zambiaans pond
-currenciesDisplayName.AUP=Australisch pond
-currenciesDisplayName.XAF=CFA-franc BEAC
-currenciesDisplayName.MTP=Maltees pond
-currenciesDisplayName.GHR=Ghanese hergewaardeerde cedi
-currenciesDisplayName.ZMK=Zambiaanse kwacha
-currenciesDisplayName.XAD=Aziatische dinar-rekeneenheid
-currenciesDisplayName.GHP=Ghanees pond
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Ghanese oude cedi
-currenciesDisplayName.MTL=Maltese lire
-currenciesDisplayName.AUD=Australische dollar
-currenciesDisplayName.USS=Amerikaanse dollar (zelfde dag)
-currenciesDisplayName.ITL=Italiaanse lire
-currenciesDisplayName.USN=Amerikaanse dollar (volgende dag)
-currenciesDisplayName.GHC=Ghanese cedi
-currenciesDisplayName.SGD=Singaporese dollar
-currenciesDisplayName.PAB=Panamese balboa
-currenciesDisplayName.LAK=Laotiaanse kip
-currenciesDisplayName.KGS=Kirgizische som
-currenciesDisplayName.CHF=Zwitserse franc
-currenciesDisplayName.ATS=Oostenrijkse schilling
-currenciesDisplayName.USD=Amerikaanse dollar
-currenciesDisplayName.ETD=Ethiopische dollar
-currenciesDisplayName.BND=Bruneise dollar
-currenciesDisplayName.JMP=Jamaicaans pond
-currenciesDisplayName.ETB=Ethiopische birr
-currenciesDisplayName.DZG=Algerijnse franc germinal
-currenciesDisplayName.DZF=Algerijnse nieuwe franc
-currenciesDisplayName.DZD=Algerijnse dinar
-currenciesDisplayName.PYG=Paraguayaanse guarani
-currenciesDisplayName.LYP=Libisch pond
-currenciesDisplayName.JMD=Jamaicaanse dollar
-currenciesDisplayName.ISK=IJslandse kroon
-currenciesDisplayName.ESP=Spaanse peseta
-currenciesDisplayName.BMP=Bermuda-pond
-currenciesDisplayName.LYD=Libische dinar
-currenciesDisplayName.LYB=Libische Britse Militaire Autoriteit-lire
-currenciesDisplayName.BMD=Bermuda-dollar
-currenciesDisplayName.NLG=Nederlandse gulden
-currenciesDisplayName.MRO=Mauritaanse ouguiya
-currenciesDisplayName.IRR=Iraanse rial
-currenciesDisplayName.SEK=Zweedse kroon
-currenciesDisplayName.ERN=Eritrese nakfa
+currenciesDisplayName.YDD=Jemenitische dinar
+currenciesDisplayName.TWD=Nieuwe Taiwanese dollar
currenciesDisplayName.KES=Kenyaanse shilling
-currenciesDisplayName.CFF=Centraal-Afrikaanse CFA-franc
+currenciesDisplayName.BYB=Wit-Russische nieuwe roebel (1994-1999)
+currenciesDisplayName.LKR=Srilankaanse rupee
+currenciesDisplayName.RWF=Rwandese franc
+currenciesDisplayName.TJS=Tadzjikistaanse somoni
+currenciesDisplayName.SDP=Soedanees pond
+currenciesDisplayName.TJR=Tadzjikistaanse roebel
+currenciesDisplayName.ERN=Eritrese nakfa
+currenciesDisplayName.AFN=Afghani
+currenciesDisplayName.GRD=Griekse drachme
+currenciesDisplayName.IEP=Iers pond
currenciesDisplayName.ARS=Argentijnse peso
+currenciesDisplayName.SDD=Soedanese dinar
currenciesDisplayName.ARP=Argentijnse peso (1983-1985)
-currenciesDisplayName.ARM=Argentijnse peso moneda nacional
-currenciesDisplayName.TWD=Nieuwe Taiwanese dollar
-currenciesDisplayName.SDP=Soedanees pond
currenciesDisplayName.GEL=Georgische lari
+currenciesDisplayName.AFA=Afghani (1927-2002)
currenciesDisplayName.GEK=Georgische kupon larit
-currenciesDisplayName.MQF=Martinikaanse franc
+currenciesDisplayName.CRC=Costaricaanse col\u00f3n
currenciesDisplayName.FKP=Falklandeilands pond
+currenciesDisplayName.EEK=Estlandse kroon
+currenciesDisplayName.HKD=Hongkongse dollar
+currenciesDisplayName.MDL=Moldavische leu
currenciesDisplayName.ARA=Argentijnse austral
-currenciesDisplayName.SDD=Soedanese dinar
currenciesDisplayName.IQD=Iraakse dinar
-currenciesDisplayName.TVD=Tuvaluaanse dollar
currenciesDisplayName.SCR=Seychelse rupee
+currenciesDisplayName.VUV=Vanuatuaanse vatu
+currenciesDisplayName.DKK=Deense kroon
+currenciesDisplayName.KPW=Noord-Koreaanse won
+currenciesDisplayName.GQE=Equatoriaal-Guinese ekwele guineana
+currenciesDisplayName.IDR=Indonesische rupiah
currenciesDisplayName.LVR=Letse roebel
-currenciesDisplayName.FJP=Fijisch pond
+currenciesDisplayName.SOS=Somalische shilling
+currenciesDisplayName.AED=Verenigde Arabische Emiraten-dirham
+currenciesDisplayName.BWP=Botswaanse pula
currenciesDisplayName.LVL=Letse lats
-currenciesDisplayName.CDL=Congolese za\u00efre
-currenciesDisplayName.CDG=Congolese franc
-currenciesDisplayName.CDF=Congolese franc congolais
-currenciesDisplayName.FJD=Fijische dollar
+currenciesDisplayName.RUR=Russische roebel (1991-1998)
currenciesDisplayName.NIO=Nicaraguaanse c\u00f3rdoba oro
+currenciesDisplayName.ADP=Andorrese peseta
+currenciesDisplayName.FJD=Fijische dollar
currenciesDisplayName.MOP=Macause pataca
-currenciesDisplayName.NIG=Nicaraguaanse gouden c\u00f3rdoba
+currenciesDisplayName.RUB=Russische roebel
+currenciesDisplayName.CDF=Congolese franc congolais
currenciesDisplayName.NIC=Nicaraguaanse c\u00f3rdoba
-currenciesDisplayName.XTR=COMECON transferable roebel
-currenciesDisplayName.FIN=Finse markka (1860-1962)
-currenciesDisplayName.FIM=Finse markka
+currenciesDisplayName.DJF=Djiboutiaanse franc
+currenciesDisplayName.ECV=Ecuadoraanse unidad de valor constante (UVC)
currenciesDisplayName.SBD=Salomonseilandse dollar
+currenciesDisplayName.UZS=Oezbekistaanse sum
+currenciesDisplayName.ECS=Ecuadoraanse sucre
+currenciesDisplayName.PHP=Filipijnse peso
+currenciesDisplayName.THB=Thaise baht
currenciesDisplayName.LUF=Luxemburgse frank
-currenciesDisplayName.TTO=Trinidad en Tobago-oude dollar
-currenciesDisplayName.AOS=Angolese escudo
-currenciesDisplayName.AOR=Angolese kwanza reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongoolse tugrik
-currenciesDisplayName.HUF=Hongaarse forint
-currenciesDisplayName.BIF=Burundese franc
-currenciesDisplayName.AON=Angolese nieuwe kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolese kwanza (1977-1990)
+currenciesDisplayName.FIM=Finse markka
currenciesDisplayName.TTD=Trinidad en Tobago-dollar
currenciesDisplayName.SZL=Swazische lilangeni
-currenciesDisplayName.NHF=Nieuw-Hebridiaanse CFP-franc
-currenciesDisplayName.GBP=Brits pond sterling
-currenciesDisplayName.SAS=Saoedische souvereine rial
+currenciesDisplayName.MNT=Mongoolse tugrik
currenciesDisplayName.SAR=Saoedische rial
+currenciesDisplayName.UAK=Oekra\u00efense karbovanetz
+currenciesDisplayName.UAH=Oekra\u00efense hryvnia
+currenciesDisplayName.HUF=Hongaarse forint
+currenciesDisplayName.COP=Colombiaanse peso
+currenciesDisplayName.QAR=Qatarese rial
currenciesDisplayName.LTT=Litouwse talonas
-currenciesDisplayName.INR=Indiase rupee
currenciesDisplayName.PTE=Portugese escudo
-currenciesDisplayName.AOA=Angolese kwanza
-currenciesDisplayName.PTC=Portugese conto
+currenciesDisplayName.AOR=Angolese kwanza reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguayaanse peso uruguayo
+currenciesDisplayName.GBP=Brits pond sterling
+currenciesDisplayName.BIF=Burundese franc
+currenciesDisplayName.INR=Indiase rupee
+currenciesDisplayName.ZRZ=Za\u00efrese za\u00efre
+currenciesDisplayName.AON=Angolese nieuwe kwanza (1990-2000)
currenciesDisplayName.LTL=Litouwse litas
+currenciesDisplayName.XFU=Franse UIC-franc
currenciesDisplayName.KZT=Kazachstaanse tenge
-currenciesDisplayName.KZR=Kazachstaanse roebel
-currenciesDisplayName.VGD=Britse Maagdeneilandse dollar
-currenciesDisplayName.NGP=Nigeriaans pond
-currenciesDisplayName.MMX=Myanmarese dollarwisselcertificaten
+currenciesDisplayName.MZM=Mozambikaanse metical
+currenciesDisplayName.UYP=Uruguayaanse peso (1975-1993)
+currenciesDisplayName.AOK=Angolese kwanza (1977-1990)
+currenciesDisplayName.BUK=Birmese kyat
+currenciesDisplayName.GNS=Guinese syli
+currenciesDisplayName.XFO=Franse gouden franc
+currenciesDisplayName.PGK=Papuaanse kina
+currenciesDisplayName.SYP=Syrisch pond
+currenciesDisplayName.MZE=Mozambikaanse escudo
+currenciesDisplayName.OMR=Omaanse rial
currenciesDisplayName.NGN=Nigeriaanse naira
+currenciesDisplayName.ZRN=Za\u00efrese nieuwe za\u00efre
+currenciesDisplayName.AOA=Angolese kwanza
+currenciesDisplayName.CNY=Chinese yuan renminbi
+currenciesDisplayName.MAF=Marokkaanse franc
+currenciesDisplayName.GNF=Guinese franc
currenciesDisplayName.HTG=Ha\u00eftiaanse gourde
-currenciesDisplayName.SYP=Syrisch pond
-currenciesDisplayName.PSP=Palestijns pond
-currenciesDisplayName.BHD=Bahreinse dinar
+currenciesDisplayName.MAD=Marokkaanse dirham
+currenciesDisplayName.TRY=Nieuwe Turkse lire
currenciesDisplayName.MMK=Myanmarese kyat
+currenciesDisplayName.MYR=Maleisische ringgit
+currenciesDisplayName.LSL=Lesothaanse loti
+currenciesDisplayName.XEU=European Currency Unit
+currenciesDisplayName.BHD=Bahreinse dinar
+currenciesDisplayName.SLL=Sierraleoonse leone
+currenciesDisplayName.BTN=Bhutaanse ngultrum
+currenciesDisplayName.TRL=Turkse lire
+currenciesDisplayName.KMF=Comorese franc
currenciesDisplayName.ANG=Nederlands-Antilliaanse gulden
currenciesDisplayName.CZK=Tsjechische koruna
-currenciesDisplayName.IMP=Isle of Man pond sterling
-currenciesDisplayName.BGX=Bulgaarse levwisselcertificaten
-currenciesDisplayName.LSL=Lesothaanse loti
-currenciesDisplayName.GAF=Gabonese CFA-franc
-currenciesDisplayName.BGO=Bulgaarse lev (1879-1952)
+currenciesDisplayName.AZM=Azerbeidzjaanse manat
+currenciesDisplayName.KYD=Caymaneilandse dollar
+currenciesDisplayName.GMD=Gambiaanse dalasi
currenciesDisplayName.BGN=Bulgaarse nieuwe lev
-currenciesDisplayName.BGM=Bulgaarse socialistische lev
currenciesDisplayName.CAD=Canadese dollar
+currenciesDisplayName.MXV=Mexicaanse unidad de inversion (UDI)
currenciesDisplayName.BGL=Bulgaarse harde lev
-currenciesDisplayName.TRL=Turkse lire
-currenciesDisplayName.KYD=Caymaneilandse dollar
-currenciesDisplayName.CYP=Cyprisch pond
+currenciesDisplayName.VEB=Venezolaanse bolivar
+currenciesDisplayName.MLF=Malinese franc
currenciesDisplayName.ILS=Isra\u00eblische nieuwe shekel
+currenciesDisplayName.MXP=Mexicaanse zilveren peso (1861-1992)
+currenciesDisplayName.PES=Peruaanse sol
currenciesDisplayName.GYD=Guyaanse dollar
-currenciesDisplayName.AMD=Armeense dram
+currenciesDisplayName.MXN=Mexicaanse peso
currenciesDisplayName.ILP=Isra\u00eblisch pond
-currenciesDisplayName.MLF=Malinese franc
-currenciesDisplayName.ILL=Isra\u00eblische shekel
-currenciesDisplayName.VEB=Venezolaanse bolivar
-currenciesDisplayName.ALX=Albanese dollarwisselcertificaten
+currenciesDisplayName.SKK=Slowaakse koruna
+currenciesDisplayName.CYP=Cyprisch pond
+currenciesDisplayName.XDR=Special Drawing Rights
+currenciesDisplayName.PEN=Peruaanse nieuwe sol
currenciesDisplayName.LRD=Liberiaanse dollar
-currenciesDisplayName.ALV=Albanese lek valute
+currenciesDisplayName.PEI=Peruaanse inti
+currenciesDisplayName.AMD=Armeense dram
+currenciesDisplayName.BSD=Bahamaanse dollar
currenciesDisplayName.HRK=Kroatische kuna
-currenciesDisplayName.REF=R\u00e9unionse franc
+currenciesDisplayName.CLP=Chileense peso
currenciesDisplayName.HRD=Kroatische dinar
-currenciesDisplayName.ALL=Albanese lek
-currenciesDisplayName.JEP=Jersey pond sterling
-currenciesDisplayName.ALK=Albanese lek (1946-1961)
-currenciesDisplayName.MKN=Macedonische denar (1992-1993)
-currenciesDisplayName.VDP=Noord-Vietnamese viet minh piastre dong viet
-currenciesDisplayName.VDN=Noord-Vietnamese nieuwe dong
-currenciesDisplayName.MKD=Macedonische denar
-currenciesDisplayName.VDD=Noord-Vietnamese piastre dong viet
-currenciesDisplayName.TPP=Timorese pataca
currenciesDisplayName.XPF=CFP-franc
-currenciesDisplayName.BEL=Belgische frank (financieel)
-currenciesDisplayName.GWP=Guinee-Bissause peso
-currenciesDisplayName.KWD=Koeweitse dinar
-currenciesDisplayName.GWM=Portuguees-Guinese mil reis
-currenciesDisplayName.BEF=Belgische frank
+currenciesDisplayName.FRF=Franse franc
+currenciesDisplayName.BRR=Braziliaanse cruzeiro
+currenciesDisplayName.MKD=Macedonische denar
+currenciesDisplayName.CLF=Chileense unidades de fomento
+currenciesDisplayName.ALL=Albanese lek
+currenciesDisplayName.BRN=Braziliaanse cruzado novo
+currenciesDisplayName.MWK=Malawische kwacha
+currenciesDisplayName.BRL=Braziliaanse real
currenciesDisplayName.TPE=Timorese escudo
-currenciesDisplayName.BEC=Belgische frank (convertibel)
-currenciesDisplayName.GWE=Portuguees-Guinese escudo
+currenciesDisplayName.BRE=Braziliaanse cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Braziliaanse cruzado
+currenciesDisplayName.BRB=Braziliaanse cruzeiro novo (1967-1986)
+currenciesDisplayName.DEM=Duitse mark
+currenciesDisplayName.KWD=Koeweitse dinar
+currenciesDisplayName.XCD=Oost-Caribische dollar
+currenciesDisplayName.NPR=Nepalese rupee
+currenciesDisplayName.GWP=Guinee-Bissause peso
+currenciesDisplayName.YUN=Joegoslavische convertibele dinar
currenciesDisplayName.SVC=Salvadoraanse col\u00f3n
-currenciesDisplayName.CWG=Cura\u00e7ao-gulden
-currenciesDisplayName.BDT=Bengalese taka
-currenciesDisplayName.TOS=Tongaans pond sterling
-currenciesDisplayName.TOP=Tongaanse pa\u02bbanga
+currenciesDisplayName.YUM=Joegoslavische noviy-dinar
+currenciesDisplayName.BEL=Belgische frank (financieel)
+currenciesDisplayName.SIT=Sloveense tolar
+currenciesDisplayName.JPY=Japanse yen
currenciesDisplayName.XOF=CFA-franc BCEAO
+currenciesDisplayName.MVR=Maldivische rufiyaa
+currenciesDisplayName.GWE=Portuguees-Guinese escudo
+currenciesDisplayName.BEF=Belgische frank
+currenciesDisplayName.TOP=Tongaanse pa\u02bbanga
+currenciesDisplayName.YUD=Joegoslavische harde dinar
+currenciesDisplayName.BEC=Belgische frank (convertibel)
currenciesDisplayName.SUR=Sovjet-roebel
-currenciesDisplayName.SUN=Nieuwe sovjet-roebel
-currenciesDisplayName.NCF=Nieuw-Caledonische franc germinal
-currenciesDisplayName.CVE=Kaapverdische escudo
-currenciesDisplayName.XNF=Franse antillen CFA-franc
+currenciesDisplayName.ROL=Roemeense leu
+currenciesDisplayName.DDM=Oost-Duitse ostmark
+currenciesDisplayName.BDT=Bengalese taka
+currenciesDisplayName.XBD=Europese rekeneenheid (XBD)
+currenciesDisplayName.AWG=Arubaanse gulden
+currenciesDisplayName.XBC=Europese rekeneenheid (XBC)
+currenciesDisplayName.XBB=Europese monetaire eenheid
+currenciesDisplayName.XBA=Europese samengestelde eenheid
+currenciesDisplayName.NOK=Noorse kroon
+currenciesDisplayName.MUR=Mauritiaanse rupee
currenciesDisplayName.ZAR=Zuid-Afrikaanse rand
-currenciesDisplayName.DOP=Dominicaanse peso
-currenciesDisplayName.CUX=Cubaanse wisselcertificaten
-currenciesDisplayName.ZAP=Zuid-Afrikaans pond
+currenciesDisplayName.SHP=Sint-Heleense pond
+currenciesDisplayName.XAU=Goud
currenciesDisplayName.ZAL=Zuid-Afrikaanse rand (financieel)
+currenciesDisplayName.VND=Vietnamese dong
+currenciesDisplayName.TZS=Tanzaniaanse shilling
+currenciesDisplayName.GIP=Gibraltarees pond
currenciesDisplayName.TND=Tunesische dinar
-currenciesDisplayName.CUP=Cubaanse peso
-currenciesDisplayName.GUF=Frans-Guyaanse franc guiana
+currenciesDisplayName.CVE=Kaapverdische escudo
currenciesDisplayName.UGX=Oegandese shilling
-currenciesDisplayName.LNR=Ceylon-rupee
-currenciesDisplayName.AIF=Affars en Issas-franc
-currenciesDisplayName.VAL=Vaticaanse lire
-currenciesDisplayName.STE=Santomese escudo
+currenciesDisplayName.ZMK=Zambiaanse kwacha
+currenciesDisplayName.JOD=Jordaanse dinar
+currenciesDisplayName.XAF=CFA-franc BEAC
+currenciesDisplayName.LBP=Libanees pond
currenciesDisplayName.UGS=Oegandese shilling (1966-1987)
currenciesDisplayName.STD=Santomese dobra
-currenciesDisplayName.MHD=Marshalleilandse dollar
-currenciesDisplayName.NZP=Nieuw-Zeelands pond
currenciesDisplayName.WST=West-Samoaanse tala
-currenciesDisplayName.WSP=West-Samoaans pond
-currenciesDisplayName.HNL=Hodurese lempira
-currenciesDisplayName.XMF=Franse metropolische nieuwe franc
+currenciesDisplayName.KHR=Cambodjaanse riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominicaanse peso
+currenciesDisplayName.BOV=Boliviaanse mvdol
+currenciesDisplayName.MTP=Maltees pond
+currenciesDisplayName.USS=Amerikaanse dollar (zelfde dag)
+currenciesDisplayName.BOP=Boliviaanse peso
+currenciesDisplayName.MTL=Maltese lire
+currenciesDisplayName.CUP=Cubaanse peso
currenciesDisplayName.TMM=Turkmeense manat
-currenciesDisplayName.GTQ=Guatemalteekse quetzal
+currenciesDisplayName.USN=Amerikaanse dollar (volgende dag)
+currenciesDisplayName.SGD=Singaporese dollar
currenciesDisplayName.NZD=Nieuw-Zeelandse dollar
-currenciesDisplayName.SSP=Schotse pond
-currenciesDisplayName.BBD=Barbadaanse dollar
+currenciesDisplayName.USD=Amerikaanse dollar
+currenciesDisplayName.HNL=Hodurese lempira
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Italiaanse lire
+currenciesDisplayName.PAB=Panamese balboa
+currenciesDisplayName.GTQ=Guatemalteekse quetzal
+currenciesDisplayName.LAK=Laotiaanse kip
+currenciesDisplayName.GHC=Ghanese cedi
+currenciesDisplayName.AUD=Australische dollar
currenciesDisplayName.NAD=Namibische dollar
+currenciesDisplayName.KGS=Kirgizische som
currenciesDisplayName.MGF=Malagassische franc
+currenciesDisplayName.CHF=Zwitserse franc
+currenciesDisplayName.BBD=Barbadaanse dollar
currenciesDisplayName.MGA=Malagassische ariary
-currenciesDisplayName.EGP=Egyptisch pond
-currenciesDisplayName.BZH=Brits-Hondurese dollar
+currenciesDisplayName.PYG=Paraguayaanse guarani
currenciesDisplayName.PLZ=Poolse zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnische nieuwe dinar
-currenciesDisplayName.PLX=Poolse Amerikaanse-dollarwisselcertificaten
-currenciesDisplayName.BAM=Bosnische convertibele mark
-currenciesDisplayName.BZD=Belizaanse dollar
-currenciesDisplayName.BAD=Bosnische dinar
-currenciesDisplayName.PLN=Poolse zloty
currenciesDisplayName.YER=Jemenitische rial
+currenciesDisplayName.ATS=Oostenrijkse schilling
+currenciesDisplayName.ETB=Ethiopische birr
+currenciesDisplayName.BND=Bruneise dollar
+currenciesDisplayName.JMD=Jamaicaanse dollar
+currenciesDisplayName.EGP=Egyptisch pond
+currenciesDisplayName.PLN=Poolse zloty
+currenciesDisplayName.DZD=Algerijnse dinar
+currenciesDisplayName.ISK=IJslandse kroon
currenciesDisplayName.SRG=Surinaamse gulden
-currenciesDisplayName.CSK=Tsjechoslowaakse harde koruna
+currenciesDisplayName.LYD=Libische dinar
+currenciesDisplayName.SRD=Surinaamse dollar
+currenciesDisplayName.BZD=Belizaanse dollar
+currenciesDisplayName.BAM=Bosnische convertibele mark
+currenciesDisplayName.ESP=Spaanse peseta
currenciesDisplayName.KRW=Zuid-Koreaanse won
+currenciesDisplayName.NLG=Nederlandse gulden
+currenciesDisplayName.MRO=Mauritaanse ouguiya
+currenciesDisplayName.BAD=Bosnische dinar
+currenciesDisplayName.ZWD=Zimbabwaanse dollar
+currenciesDisplayName.SEK=Zweedse kroon
+currenciesDisplayName.CSK=Tsjechoslowaakse harde koruna
currenciesDisplayName.BYR=Wit-Russische roebel
-currenciesDisplayName.YEI=Jemenitische imadi rial
-currenciesDisplayName.BYL=Wit-Russische roebel (1992-1994)
-currenciesDisplayName.CSC=Tsjechoslowaakse koruna
-currenciesDisplayName.KRO=Zuid-Koreaanse oude won
-currenciesDisplayName.KRH=Zuid-Koreaanse hwan
-currenciesDisplayName.BYB=Wit-Russische nieuwe roebel (1994-1999)
-currenciesDisplayName.SQS=Somalilandse shilling
-currenciesDisplayName.GRN=Griekse nieuwe drachme
+currenciesDisplayName.IRR=Iraanse rial
currenciesDisplayName.PKR=Pakistaanse rupee
-currenciesDisplayName.AFN=Afghani
-currenciesDisplayName.ZWD=Zimbabwaanse dollar
-currenciesDisplayName.LKR=Srilankaanse rupee
-currenciesDisplayName.GRD=Griekse drachme
-currenciesDisplayName.IEP=Iers pond
-currenciesDisplayName.AFA=Afghani (1927-2002)
-currenciesDisplayName.YDD=Jemenitische dinar
-currenciesDisplayName.RWF=Rwandese franc
-currenciesDisplayName.CRC=Costaricaanse col\u00f3n
-currenciesDisplayName.TJS=Tadzjikistaanse somoni
-currenciesDisplayName.TJR=Tadzjikistaanse roebel
-currenciesDisplayName.EEK=Estlandse kroon
-currenciesDisplayName.GQP=Equatoriaal-Guinese peseta puineana
-currenciesDisplayName.MDR=Moldavische roebel-cupon
-currenciesDisplayName.HKD=Hongkongse dollar
-currenciesDisplayName.DKK=Deense kroon
-currenciesDisplayName.MDL=Moldavische leu
-currenciesDisplayName.GQF=Equatoriaal-Guinese franco
-currenciesDisplayName.GQE=Equatoriaal-Guinese ekwele guineana
-currenciesDisplayName.IDR=Indonesische rupiah
-currenciesDisplayName.AED=Verenigde Arabische Emiraten-dirham
-currenciesDisplayName.KPW=Noord-Koreaanse won
-currenciesDisplayName.IDN=Indonesische nieuwe rupiah
-currenciesDisplayName.BWP=Botswaanse pula
-currenciesDisplayName.MDC=Monegaskische leu cupon
-currenciesDisplayName.IDJ=Indonesische Java-rupiah
-currenciesDisplayName.KPP=Noord-Koreaanse Volksrepubliek-won
-currenciesDisplayName.IDG=Indonesische nica-gulden
-currenciesDisplayName.VUV=Vanuatuaanse vatu
-currenciesDisplayName.XID=Islamitische dinar
-currenciesDisplayName.SOS=Somalische shilling
-currenciesDisplayName.ADP=Andorrese peseta
-currenciesDisplayName.RUR=Russische roebel (1991-1998)
-currenciesDisplayName.GPF=Guadeloupse franc
-currenciesDisplayName.DJF=Djiboutiaanse franc
-currenciesDisplayName.ADD=Andorrese diner
-currenciesDisplayName.MCG=Monegaskische franc germinal
-currenciesDisplayName.MCF=Monegaskische nieuwe franc
-currenciesDisplayName.ECV=Ecuadoraanse unidad de valor constante (UVC)
-currenciesDisplayName.ECS=Ecuadoraanse sucre
-currenciesDisplayName.LIF=Liechtensteinse frank
-currenciesDisplayName.RUB=Russische roebel
-currenciesDisplayName.PHP=Filipijnse peso
-currenciesDisplayName.UZS=Oezbekistaanse sum
-currenciesDisplayName.COP=Colombiaanse peso
-currenciesDisplayName.THB=Thaise baht
-currenciesDisplayName.IBP=Noord-Iers pond
-currenciesDisplayName.BUR=Birmese rupee
-currenciesDisplayName.COF=Congolese CFA-franc
-currenciesDisplayName.BUK=Birmese kyat
-currenciesDisplayName.COB=Colombiaanse papieren peso
-currenciesDisplayName.UZC=Oezbekistaanse coupon-som
-currenciesDisplayName.UAK=Oekra\u00efense karbovanetz
-currenciesDisplayName.QAR=Qatarese rial
-currenciesDisplayName.UAH=Oekra\u00efense hryvnia
-currenciesDisplayName.GNS=Guinese syli
-currenciesDisplayName.CNY=Chinese yuan renminbi
-currenciesDisplayName.MZM=Mozambikaanse metical
-currenciesDisplayName.CNX=Chinese Amerikaanse-dollarwisselcertificaten
-currenciesDisplayName.UYU=Uruguayaanse peso uruguayo
-currenciesDisplayName.GNI=Guinese franc (1960-1972)
-currenciesDisplayName.SML=Sanmarinese lire
-currenciesDisplayName.CNP=Chinese jen min piao yuan
-currenciesDisplayName.MZE=Mozambikaanse escudo
-currenciesDisplayName.GNF=Guinese franc
-currenciesDisplayName.OMS=Omaanse rial saidi
-currenciesDisplayName.PGK=Papuaanse kina
-currenciesDisplayName.OMR=Omaanse rial
-currenciesDisplayName.UYP=Uruguayaanse peso (1975-1993)
-currenciesDisplayName.XFU=Franse UIC-franc
-currenciesDisplayName.BTR=Bhutaanse rupee
-currenciesDisplayName.ZRZ=Za\u00efrese za\u00efre
-currenciesDisplayName.MAF=Marokkaanse franc
-currenciesDisplayName.MAD=Marokkaanse dirham
-currenciesDisplayName.BTN=Bhutaanse ngultrum
-currenciesDisplayName.XFO=Franse gouden franc
-currenciesDisplayName.UYF=Uruguayaanse peso fuerte
-currenciesDisplayName.MYR=Maleisische ringgit
-currenciesDisplayName.ZRN=Za\u00efrese nieuwe za\u00efre
-currenciesDisplayName.AZM=Azerbeidzjaanse manat
-currenciesDisplayName.GMP=Gambiaans pond
-currenciesDisplayName.KMF=Comorese franc
-currenciesDisplayName.SLL=Sierraleoonse leone
-currenciesDisplayName.GMD=Gambiaanse dalasi
-currenciesDisplayName.XEU=European Currency Unit
-currenciesDisplayName.BSP=Bahamaans pond
-currenciesDisplayName.CMF=Kameroense CFA-franc
-currenciesDisplayName.MXV=Mexicaanse unidad de inversion (UDI)
-currenciesDisplayName.XEF=CFA-franc BCEAEC
-currenciesDisplayName.BSD=Bahamaanse dollar
-currenciesDisplayName.MXP=Mexicaanse zilveren peso (1861-1992)
-currenciesDisplayName.MXN=Mexicaanse peso
-currenciesDisplayName.PES=Peruaanse sol
-currenciesDisplayName.GLK=Groenlandse kroon
-currenciesDisplayName.BRZ=Braziliaanse cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruaanse nieuwe sol
-currenciesDisplayName.CLP=Chileense peso
-currenciesDisplayName.SKK=Slowaakse koruna
-currenciesDisplayName.PEI=Peruaanse inti
-currenciesDisplayName.BRR=Braziliaanse cruzeiro
-currenciesDisplayName.XDR=Special Drawing Rights
-currenciesDisplayName.FRG=Franse franc germinal/franc poincare
-currenciesDisplayName.FRF=Franse franc
-currenciesDisplayName.BRN=Braziliaanse cruzado novo
-currenciesDisplayName.CLF=Chileense unidades de fomento
-currenciesDisplayName.CLE=Chileense escudo
-currenciesDisplayName.BRL=Braziliaanse real
-currenciesDisplayName.CLC=Chileense condor
-currenciesDisplayName.BRE=Braziliaanse cruzeiro (1990-1993)
-currenciesDisplayName.DES=Duitse sperrmark
-currenciesDisplayName.MWP=Malawisch pond
-currenciesDisplayName.BRC=Braziliaanse cruzado
-currenciesDisplayName.BRB=Braziliaanse cruzeiro novo (1967-1986)
-currenciesDisplayName.MWK=Malawische kwacha
-currenciesDisplayName.PDR=Trans-Djnestrische roebel
-currenciesDisplayName.DEM=Duitse mark
-currenciesDisplayName.TDF=Tsjaadse CFA-franc
-currenciesDisplayName.PDN=Trans-Djnestrische nieuwe roebel
-currenciesDisplayName.PDK=Trans-Djnestrische roebel-kupon
-currenciesDisplayName.NPR=Nepalese rupee
-currenciesDisplayName.CKD=Cookeilandse dollar
-currenciesDisplayName.JPY=Japanse yen
-currenciesDisplayName.MVR=Maldivische rufiyaa
-currenciesDisplayName.XCF=CFA nieuwe franc
-currenciesDisplayName.MVP=Maldivische rupee
-currenciesDisplayName.XCD=Oost-Caribische dollar
-currenciesDisplayName.SIT=Sloveense tolar
-currenciesDisplayName.YUR=Joegoslavische hervormde dinar
-currenciesDisplayName.AWG=Arubaanse gulden
-currenciesDisplayName.YUO=Joegoslavische oktober-dinar
-currenciesDisplayName.DDM=Oost-Duitse ostmark
-currenciesDisplayName.YUN=Joegoslavische convertibele dinar
-currenciesDisplayName.YUM=Joegoslavische noviy-dinar
-currenciesDisplayName.TCC=Turks en Caicos-kroon
-currenciesDisplayName.YUG=Joegoslavische 1994-dinar
-currenciesDisplayName.YUF=Joegoslavische federale dinar
-currenciesDisplayName.RON=Roemeense nieuwe leu
-currenciesDisplayName.YUD=Joegoslavische harde dinar
-currenciesDisplayName.ROL=Roemeense leu
-currenciesDisplayName.SIB=Sloveense tolar bons
-currenciesDisplayName.NOK=Noorse kroon
-currenciesDisplayName.MUR=Mauritiaanse rupee
-currenciesDisplayName.XBD=Europese rekeneenheid (XBD)
-currenciesDisplayName.GIP=Gibraltarees pond
-currenciesDisplayName.VNS=Vietnamese nationale dong
-currenciesDisplayName.XBC=Europese rekeneenheid (XBC)
-currenciesDisplayName.VNR=Vietnamese Republiek-dong
-currenciesDisplayName.XBB=Europese monetaire eenheid
-currenciesDisplayName.XBA=Europese samengestelde eenheid
-currenciesDisplayName.KID=Kiribatische dollar
-currenciesDisplayName.SHP=Sint-Heleense pond
-currenciesDisplayName.VNN=Vietnamese nieuwe dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=fl
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermuda-dollar
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.NLG=fl
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=jan®feb®mrt®apr®mei®jun®jul®aug®sep®okt®nov®dec®®
months=januari®februari®maart®april®mei®juni®juli®augustus®september®oktober®november®december®®
shortWeekdays=®zo®ma®di®wo®do®vr®za®
@@ -775,7 +366,7 @@ shortTimeFormat=H:mm
mediumTimeFormat=H:mm:ss
longTimeFormat=H:mm:ss z
fullTimeFormat=H:mm:ss' uur' z
-zoneStrings=America/Indianapolis®EST®Eastern-standaardtijd®EST®Eastern-standaardtijd®©America/Halifax®AST®Atlantic-standaardtijd®ADT®Atlantic-zomertijd®©Pacific/Honolulu®HST®Hawa\u00ef-standaardtijd®HST®Hawa\u00ef-standaardtijd®©America/Denver®MST®Mountain-standaardtijd®MDT®Mountain-zomertijd®©America/Anchorage®AST®Alaska-standaardtijd®ADT®Alaska-zomertijd®©America/St_Johns®CNT®Newfoundland-standaardtijd®CDT®Newfoundland-zomertijd®©Africa/Casablanca®GMT®Greenwich Mean Time®GMT®Greenwich Mean Time®©America/Chicago®CST®Central-standaardtijd®CDT®Central-zomertijd®©Asia/Shanghai®CTT®Chinese standaardtijd®CDT®Chinese standaardtijd®©Asia/Tokyo®JST®Japanse standaardtijd®JST®Japanse standaardtijd®©America/New_York®EST®Eastern-standaardtijd®EDT®Eastern-zomertijd®©Europe/Bucharest®EET®Oost-Europese standaardtijd®EEST®Oost-Europese zomertijd®©America/Los_Angeles®PST®Pacific-standaardtijd®PDT®Pacific-zomertijd®©America/Phoenix®MST®Mountain-standaardtijd®MST®Mountain-standaardtijd®©Etc/GMT®GMT®Greenwich Mean Time®GMT®Greenwich Mean Time®©Asia/Jerusalem®IST®Isra\u00eblische standaardtijd®IDT®Isra\u00eblische zomertijd®©Europe/Paris®CET®Midden-Europese standaardtijd®CEST®Midden-Europese zomertijd®©
+zoneStrings=Pacific/Honolulu®HST®Hawa\u00ef-standaardtijd®HST®Hawa\u00ef-standaardtijd®©Europe/Bucharest®EET®Oost-Europese standaardtijd®EEST®Oost-Europese zomertijd®©America/Los_Angeles®PST®Pacific-standaardtijd®PDT®Pacific-zomertijd®©America/Denver®MST®Mountain-standaardtijd®MDT®Mountain-zomertijd®©Asia/Jerusalem®IST®Isra\u00eblische standaardtijd®IDT®Isra\u00eblische zomertijd®©America/Phoenix®MST®Mountain-standaardtijd®MST®Mountain-standaardtijd®©America/Chicago®CST®Central-standaardtijd®CDT®Central-zomertijd®©America/Indianapolis®EST®Eastern-standaardtijd®EST®Eastern-standaardtijd®©America/St_Johns®CNT®Newfoundland-standaardtijd®CDT®Newfoundland-zomertijd®©America/Anchorage®AST®Alaska-standaardtijd®ADT®Alaska-zomertijd®©Asia/Shanghai®CTT®Chinese standaardtijd®CDT®Chinese standaardtijd®©Asia/Tokyo®JST®Japanse standaardtijd®JST®Japanse standaardtijd®©Europe/Paris®CET®Midden-Europese standaardtijd®CEST®Midden-Europese zomertijd®©America/New_York®EST®Eastern-standaardtijd®EDT®Eastern-zomertijd®©America/Halifax®AST®Atlantic-standaardtijd®ADT®Atlantic-zomertijd®©Africa/Casablanca®GMT®Greenwich Mean Time®GMT®Greenwich Mean Time®©
territories.TL=Oost-Timor
territories.TK=Tokelau
territories.TJ=Tadzjikistan
@@ -798,7 +389,9 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Groenland
territories.SV=El Salvador
+territories.062=Zuidelijk Centraal-Azi\u00eb
territories.ST=Sao Tom\u00e9 en Principe
+territories.061=Polynesi\u00eb
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Suriname
@@ -822,9 +415,12 @@ territories.SC=Seychellen
territories.SB=Salomonseilanden
territories.SA=Saoedi-Arabi\u00eb
territories.FR=Frankrijk
+territories.057=Micronesi\u00eb
territories.FO=Faer\u00f6er
territories.FM=Micronesia, Federale Staten van
territories.RW=Rwanda
+territories.054=Melanesi\u00eb
+territories.053=Australi\u00eb en Nieuw-Zeeland
territories.FK=Falklandeilanden
territories.RU=Russische Federatie
territories.FJ=Fiji
@@ -834,20 +430,26 @@ territories.RE=R\u00e9union
territories.ET=Ethiopi\u00eb
territories.ES=Spanje
territories.ER=Eritrea
+territories.833=Isle of Man
territories.EH=West-Sahara
territories.EG=Egypte
+territories.830=Kanaaleilanden
territories.EE=Estland
+territories.QO=Oceani\u00eb (overige)
territories.EC=Ecuador
territories.DZ=Algerije
territories.QA=Qatar
+territories.039=Zuid-Europa
territories.DO=Dominicaanse Republiek
territories.PY=Paraguay
+territories.035=Zuidoost-Azi\u00eb
territories.DM=Dominica
territories.PW=Palau
territories.DK=Denemarken
territories.DJ=Djibouti
territories.PT=Portugal
territories.PS=Palestijns Gebied
+territories.030=Oost-Azi\u00eb
territories.PR=Puerto Rico
territories.DE=Duitsland
territories.PN=Pitcairn
@@ -864,13 +466,16 @@ territories.CX=Christmaseiland
territories.CV=Kaapverdi\u00eb
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Servi\u00eb en Montenegro
territories.CR=Costa Rica
+territories.029=Caribisch gebied
territories.CO=Colombia
territories.CN=China
territories.CM=Kameroen
territories.CL=Chili
territories.CK=Cookeilanden
territories.CI=Ivoorkust
+territories.021=Noord-Amerika
territories.CH=Zwitserland
territories.CG=Congo
territories.CF=Centraal-Afrikaanse Republiek
@@ -885,13 +490,20 @@ territories.BV=Bouveteiland
territories.BT=Bhutan
territories.BS=Bahama\u2019s
territories.BR=Brazili\u00eb
+territories.019=Amerika
+territories.018=Zuidelijk Afrika
territories.NZ=Nieuw-Zeeland
territories.BO=Bolivia
+territories.017=Centraal-Afrika
territories.BN=Brunei Darussalam
territories.BM=Bermuda
+territories.015=Noord-Afrika
+territories.014=Oost-Afrika
+territories.013=Midden-Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=West-Afrika
territories.BH=Bahrein
territories.NR=Nauru
territories.BG=Bulgarije
@@ -909,6 +521,7 @@ territories.NG=Nigeria
territories.NF=Norfolkeiland
territories.AZ=Azerbeidzjan
territories.NE=Niger
+territories.AX=Alandeilanden
territories.NC=Nieuw-Caledoni\u00eb
territories.AW=Aruba
territories.ZM=Zambia
@@ -917,19 +530,23 @@ territories.AU=Australi\u00eb
territories.AT=Oostenrijk
territories.AS=Amerikaans Samoa
territories.AR=Argentini\u00eb
+territories.009=Oceani\u00eb
territories.AQ=Antarctica
territories.MZ=Mozambique
territories.AO=Angola
territories.MY=Maleisi\u00eb
territories.AN=Nederlandse Antillen
territories.MX=Mexico
+territories.005=Zuid-Amerika
territories.AM=Armeni\u00eb
territories.MW=Malawi
territories.AL=Albani\u00eb
territories.MV=Maldiven
territories.ZA=Zuid-Afrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Wereld
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritani\u00eb
@@ -944,7 +561,6 @@ territories.MN=Mongoli\u00eb
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedoni\u00eb, Republiek
-territories.YU=Joegoslavi\u00eb
territories.YT=Mayotte
territories.MH=Marshalleilanden
territories.MG=Madagaskar
@@ -954,10 +570,14 @@ territories.MA=Marokko
territories.YE=Jemen
territories.LY=Libi\u00eb
territories.LV=Letland
+territories.155=West-Europa
territories.LU=Luxemburg
+territories.154=Noord-Europa
territories.LT=Litouwen
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=Oost-Europa
+territories.150=Europa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -966,6 +586,8 @@ territories.LA=Laos
territories.KZ=Kazachstan
territories.KY=Caymaneilanden
territories.KW=Koeweit
+territories.145=West-Azi\u00eb
+territories.142=Azi\u00eb
territories.KR=Zuid-Korea
territories.KP=Noord-Korea
territories.KN=Saint Kitts en Nevis
@@ -1015,8 +637,8 @@ territories.TR=Turkije
territories.TO=Tonga
territories.TN=Tunesi\u00eb
territories.TM=Turkmenistan
-languages.gwi=Gwich\u02bbin
languages.akk=Akkadisch
+languages.gwi=Gwich\u02bcin
languages.eka=Ekajuk
languages.ijo=Ijo
languages.xh=Xhosa
@@ -1029,15 +651,15 @@ languages.pon=Pohnpeiaans
languages.min=Minangkabau
languages.suk=Sukuma
languages.wo=Wolof
-languages.lol=Mongo
languages.kut=Kutenai
-languages.mic=Micmac
+languages.lol=Mongo
+languages.mic=Mi'kmaq
languages.wa=Wallonisch
languages.kum=Kumyk
languages.zap=Zapotec
languages.cus=Koesjitisch (overige)
-languages.jbo=Lojban
languages.doi=Dogri
+languages.jbo=Lojban
languages.vo=Volap\u00fck
languages.oto=Otomi-talen
languages.vi=Vietnamees
@@ -1052,7 +674,7 @@ languages.nap=Napolitaans
languages.uz=Oezbeeks
languages.uga=Oegaritisch
languages.tmh=Tamashek
-languages.nai=Noord-Amerikaans Indiaans (overige)
+languages.nai=Noord-Amerikaans Indiaans
languages.nah=Nahuatl
languages.ur=Urdu
languages.fat=Fanti
@@ -1061,8 +683,8 @@ languages.egy=Egyptisch (klassiek)
languages.ug=Uighur
languages.fan=Fang
languages.ssa=Nilo-Saharam (overige)
-languages.mga=Iers, middel- (900-1200)
languages.bat=Baltisch (overige)
+languages.mga=Iers, middel- (900-1200)
languages.nyo=Nyoro
languages.bas=Basa
languages.nyn=Nyankole
@@ -1090,8 +712,8 @@ languages.kru=Kurukh
languages.tg=Tadzjik
languages.byn=Blin
languages.te=Teloegoe
-languages.kro=Kru
languages.csb=Kasjoebisch
+languages.kro=Kru
languages.ta=Tamil
languages.tkl=Tokelau
languages.efi=Efik
@@ -1112,11 +734,11 @@ languages.sm=Samoaans
languages.sl=Sloveens
languages.grc=Grieks, klassiek (tot 1453)
languages.sk=Slowaaks
-languages.grb=Gerbo
+languages.grb=Grebo
languages.si=Singalees
languages.sh=Servokroatisch
-languages.crh=Krim-Turks; Krim-Tataars
-languages.afa=Afro-aziatisch (overige)
+languages.afa=Afro-Aziatisch (overige)
+languages.crh=Krim-Tataars
languages.sg=Sango
languages.se=Noord-Samisch
languages.sd=Sindhi
@@ -1140,14 +762,14 @@ languages.son=Songhai
languages.cpp=Creools en Pidgin, op Portugees gebaseerd (overige)
languages.sog=Sogdisch
languages.ada=Adangme
-languages.kos=Kosreaans
-languages.hit=Hittite
languages.cpf=Creools en Pidgin, op Frans gebaseerd (overige)
+languages.hit=Hettitisch
+languages.kos=Kosraeaans
languages.cpe=Creools en Pidgin, op Engels gebaseerd (overige)
languages.him=Himachali
-languages.kok=Konkani
-languages.hil=Hiligaynon
languages.got=Gothisch
+languages.hil=Hiligaynon
+languages.kok=Konkani
languages.gor=Gorontalo
languages.gon=Gondi
languages.din=Dinka
@@ -1162,9 +784,9 @@ languages.cop=Koptisch
languages.yap=Yapees
languages.ach=Akoli
languages.yao=Yao
-languages.phi=Filipijns (overige)
+languages.phi=Filippijns (overige)
languages.pl=Pools
-languages.ace=Atjehs
+languages.ace=Atjees
languages.pi=Pali
languages.pa=Punjabi
languages.bug=Buginees
@@ -1174,7 +796,7 @@ languages.bua=Buriat
languages.mas=Masai
languages.smn=Inari Sami
languages.os=Ossetisch
-languages.map=Austronesisch
+languages.map=Austronesisch (overige)
languages.or=Oriya
languages.man=Mandingo
languages.smj=Lule Sami
@@ -1187,12 +809,12 @@ languages.mag=Magahi
languages.mad=Madurees
languages.sma=Zuid-Samisch
languages.oc=Langue d\u2019Oc (na 1500)
-languages.nso=Sotho, noorderlijk
-languages.btk=Batak
+languages.nso=Noord-Sotho
+languages.btk=Bataks (Indonesi\u00eb)
languages.myv=Erzya
languages.dgr=Dogrib
languages.ny=Nyanja
-languages.myn=Mayan
+languages.myn=Mayan-talen
languages.nv=Navajo
languages.kmb=Kimbundu
languages.nr=Ndebele, zuid-
@@ -1213,26 +835,26 @@ languages.tem=Timne
languages.my=Birmees
languages.lez=Lezgisch
languages.mt=Maltees
-languages.peo=Perzisch, oud- (ca. 600-400 B.C.)
+languages.peo=Perzisch, oud- (ca. 600-400 v. Chr.)
languages.ms=Maleis
languages.mr=Marathi
-languages.fro=Frans, oud (842-ca. 1400)
+languages.fro=Frans, oud- (ca. 842-1400)
languages.mo=Moldavisch
-languages.frm=Frans, middel (ca. 1400-1600)
languages.mn=Mongools
-languages.jrb=Judeo-Arabisch
+languages.frm=Frans, middel- (ca. 1400-1800)
languages.ml=Malayalam
+languages.jrb=Judeo-Arabisch
languages.mk=Macedonisch
languages.mi=Maori
languages.mh=Marshallees
languages.mg=Malagasisch
languages.mwr=Marwari
languages.bra=Braj
-languages.den=Slave
languages.lv=Letlands
+languages.den=Slave (Athapascan)
languages.lu=Luba-Katanga
-languages.del=Delaware
languages.lt=Litouws
+languages.del=Delaware
languages.lo=Lao
languages.ln=Lingala
languages.li=Limburgs
@@ -1285,38 +907,38 @@ languages.iu=Inuktitut
languages.pap=Papiamento
languages.it=Italiaans
languages.sgn=Gebarentalen
-languages.is=IJslands
languages.kha=Khasi
+languages.is=IJslands
languages.chr=Cherokee
languages.pam=Pampanga
languages.pal=Pahlavi
languages.chp=Chipewyan
-languages.io=Ido
languages.cho=Choctaw
+languages.io=Ido
languages.chn=Chinook-jargon
languages.chm=Mari
languages.tyv=Tuvinisch
-languages.bnt=Bantu
+languages.bnt=Bantoe (overige)
languages.pag=Pangasinan
-languages.ik=Inupiaq
languages.chk=Chuukees
-languages.ii=Sichuan Yi
+languages.ik=Inupiaq
languages.haw=Hawa\u00efaans
+languages.ii=Sichuan Yi
languages.lam=Lamba
-languages.ig=Igbo
languages.chg=Chagatai
+languages.ig=Igbo
languages.sga=Iers, oud- (tot 900)
-languages.paa=Papoea (overige)
+languages.paa=Papoeaas (overige)
languages.ie=Interlingue
languages.id=Indonesisch
languages.lah=Lahnda
-languages.day=Dajak
languages.chb=Chibcha
+languages.day=Dajak
languages.ia=Interlingua
languages.lad=Ladino
-languages.hz=Herero
-languages.hai=Haida
languages.dar=Dargwa
+languages.hai=Haida
+languages.hz=Herero
languages.hy=Armeens
languages.ath=Athapascaanse talen
languages.hu=Hongaars
@@ -1338,10 +960,10 @@ languages.iro=Irokese talen
languages.gn=Guarani
languages.gl=Galicisch
languages.arw=Arawak
-languages.gez=Geez
-languages.art=Kunsttalen (overige)
languages.gd=Schots Gaelic
-languages.ira=Iraans
+languages.art=Kunstmatige talen (overige)
+languages.gez=Geez
+languages.ira=Iraans (overige)
languages.ga=Iers
languages.arp=Arapaho
languages.arn=Araukaans
@@ -1349,8 +971,8 @@ languages.fy=Fries
languages.bla=Siksika
languages.gem=Germaans (overige)
languages.ypk=Yupik-talen
-languages.arc=Aramees
languages.fr=Frans
+languages.arc=Aramees
languages.fo=Faer\u00f6ers
languages.cel=Keltisch (overige)
languages.fj=Fijisch
@@ -1373,13 +995,13 @@ languages.ee=Ewe
languages.tum=Toemboeka
languages.mos=Mossi
languages.dz=Dzongkha
-languages.nic=Niger - Kordofanisch (overige)
-languages.lus=Lushai
-languages.fiu=Fins-Oegrisch (overige)
+languages.nic=Niger-Kordofanisch (overige)
languages.dv=Divehi
+languages.fiu=Finoegrische talen (overige)
+languages.lus=Lushai
languages.nia=Nias
languages.moh=Mohawk
-languages.luo=Luo
+languages.luo=Luo (Kenia en Tanzania)
languages.lun=Lunda
languages.apa=Apache-talen
languages.lui=Luiseno
@@ -1399,12 +1021,12 @@ languages.wak=Wakashan-talen
languages.sat=Santali
languages.cy=Welsh
languages.sas=Sasak
-languages.kbd=Kabardisch
languages.cv=Tsjoevasjisch
+languages.kbd=Kabardisch
languages.cu=Kerkslavisch
languages.mni=Manipoeri
languages.cs=Tsjechisch
-languages.sam=Samaritaans Aramees
+languages.sam=Samaritaans-Aramees
languages.cr=Cree
languages.sal=Salishan-talen
languages.dua=Duala
@@ -1412,17 +1034,17 @@ languages.co=Corsicaans
languages.sai=Zuid-Amerikaans Indiaans (overige)
languages.mnc=Mantsjoe
languages.sah=Yakut
-languages.kaw=Kawi
-languages.inh=Ingoesj
languages.gba=Gbaya
+languages.inh=Ingoesj
+languages.kaw=Kawi
languages.sad=Sandawe
languages.ch=Chamorro
-languages.ine=Indo-Europees (overige)
languages.bho=Bhojpuri
+languages.ine=Indo-Europees (overige)
languages.enm=Engels, middel- (1100-1500)
-languages.kar=Karen
-languages.inc=Indisch (overige)
languages.ce=Chechen
+languages.inc=Indisch (overige)
+languages.kar=Karen
languages.gay=Gayo
languages.ca=Catalaans
languages.umb=Umbundu
@@ -1430,19 +1052,19 @@ languages.syr=Syriac
languages.kam=Kamba
languages.tsi=Tsimshian
languages.ang=Engels, oud (ca. 450-1100)
-languages.kac=Kachin
languages.cau=Kaukasisch (overige)
+languages.kac=Kachin
languages.kab=Kabyle
-languages.kaa=Kara-Kalpaks
languages.bs=Bosnisch
-languages.car=Caribisch
+languages.kaa=Karakalpaks
languages.br=Bretons
+languages.car=Caribisch
languages.bo=Tibetaans
languages.bn=Bengalees
languages.bm=Bambara
languages.gaa=Ga
-languages.cai=Midden-Amerikaans Indiaans (overige)
languages.bi=Bislama
+languages.cai=Midden-Amerikaans Indiaans (overige)
languages.bh=Bihari
languages.bg=Bulgaars
languages.be=Wit-Russisch
@@ -1456,10 +1078,10 @@ languages.az=Azerbeidzjaans
languages.ay=Aymara
languages.av=Avarisch
languages.as=Assamees
-languages.dsb=Nedersorbisch
languages.ar=Arabisch
-languages.ilo=Iloko
+languages.dsb=Nedersorbisch
languages.elx=Elamitisch
+languages.ilo=Iloko
languages.zh=Chinees
languages.an=Aragonees
languages.pra=Prakrit-talen
@@ -1477,8 +1099,8 @@ languages.ale=Aleut
languages.mkh=Mon-Khmer (overige)
languages.yi=Jiddisch
languages.dra=Dravidisch (overige)
-languages.ber=Berber
-languages.nds=Laagduits; Laagsaxon
+languages.ber=Berber (overige)
+languages.nds=Laagduits
languages.bem=Bemba
languages.bej=Beja
languages.tpi=Tok Pisin
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nn.properties
index abe0643..934b6c3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nn.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_nn.properties
@@ -7,15 +7,21 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.NOK=NOK
-currenciesSymbol.NOK=kr
-shortMonths=jan®feb®mar®apr®mai®jun®jul®aug®sep®okt®nov®des®®
+currenciesDisplayName.INR=Indiske rupi
+currenciesDisplayName.NOK=Norske kroner
+currenciesDisplayName.RUB=Russiske rubler
+currenciesDisplayName.CNY=Kinesiske yuan renminbi
+currenciesDisplayName.GBP=Britiske pund
+currenciesDisplayName.BRL=Brasilianske real
+currenciesDisplayName.USD=Amerikanske dollar
+shortMonths=jan.®feb.®mars®april®mai®juni®juli®aug.®sep.®okt.®nov.®des.®®
months=januar®februar®mars®april®mai®juni®juli®august®september®oktober®november®desember®®
-shortWeekdays=®su®m\u00e5®ty®on®to®fr®la®
+shortWeekdays=®su.®m\u00e5.®ty.®on.®to.®fr.®la.®
weekdays=®sundag®m\u00e5ndag®tysdag®onsdag®torsdag®fredag®laurdag®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
eras=f.Kr.®e.Kr.®
+ampms=a.m.®p.m.®
shortDateFormat=dd.MM.yy
mediumDateFormat=d. MMM. yyyy
longDateFormat=d. MMMM yyyy
@@ -46,7 +52,9 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Gr\u00f8nland
territories.SV=El Salvador
+territories.062=S\u00f8rlege Sentral-Asia
territories.ST=Sao Tome og Principe
+territories.061=Polynesia
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Surinam
@@ -70,9 +78,12 @@ territories.SC=Seychellene
territories.SB=Salomon\u00f8yene
territories.SA=Saudi Arabia
territories.FR=Frankrike
+territories.057=Mikronesia
territories.FO=F\u00e6r\u00f8yene
territories.FM=Mikronesiaf\u00f8derasjonen
territories.RW=Rwanda
+territories.054=Melanesia
+territories.053=Australia og New Zealand
territories.FK=Falklands\u00f8yene (Malvinas)
territories.RU=Den russiske f\u00f8derasjon
territories.FJ=Fiji
@@ -82,20 +93,26 @@ territories.RE=Reunion
territories.ET=Etiopia
territories.ES=Spania
territories.ER=Eritrea
+territories.833=Man
territories.EH=Vest-Sahara
territories.EG=Egypt
+territories.830=Kanal\u00f8yene
territories.EE=Estland
+territories.QO=Ytre Oseania
territories.EC=Ecuador
territories.DZ=Algerie
territories.QA=Qatar
+territories.039=S\u00f8r-Europa
territories.DO=Den dominikanske republikk
territories.PY=Paraguay
+territories.035=S\u00f8raust-Asia
territories.DM=Dominica
territories.PW=Palau
territories.DK=Danmark
territories.DJ=Djibouti
territories.PT=Portugal
territories.PS=Palestinsk territorium
+territories.030=Aust-Asia
territories.PR=Puerto Rico
territories.DE=Tyskland
territories.PN=Pitcairn
@@ -112,13 +129,16 @@ territories.CX=Christmas\u00f8ya
territories.CV=Kapp Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbia Montenegro
territories.CR=Costa Rica
+territories.029=Karibiske hav
territories.CO=Colombia
territories.CN=Kina
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cook\u00f8yene
territories.CI=Elfenbenskysten
+territories.021=Nord-Amerika
territories.CH=Sveits
territories.CG=Kongo
territories.CF=Den sentralafrikanske republikk
@@ -133,13 +153,20 @@ territories.BV=Bouvet\u00f8ya
territories.BT=Bhutan
territories.BS=Bahamas
territories.BR=Brasil
+territories.019=Amerika
+territories.018=S\u00f8rlege Afrika
territories.NZ=New Zealand
territories.BO=Bolivia
+territories.017=Sentral-Afrika
territories.BN=Brunei Darussalam
territories.BM=Bermuda
+territories.015=Nord-Afrika
+territories.014=Aust-Afrika
+territories.013=Sentral-Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Vest-Afrika
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulgaria
@@ -157,6 +184,7 @@ territories.NG=Nigeria
territories.NF=Norfolk\u00f8yene
territories.AZ=Aserbajdsjan
territories.NE=Niger
+territories.AX=\u00c5land
territories.NC=Ny-Caledonia
territories.AW=Aruba
territories.ZM=Zambia
@@ -165,19 +193,23 @@ territories.AU=Australia
territories.AT=\u00d8sterrike
territories.AS=Amerikansk Samoa
territories.AR=Argentina
+territories.009=Oseania
territories.AQ=Antarktis
territories.MZ=Mosambik
territories.AO=Angola
territories.MY=Malaysia
territories.AN=De nederlandske antiller
territories.MX=Mexico
+territories.005=S\u00f8r-Amerika
territories.AM=Armenia
territories.MW=Malawi
territories.AL=Albania
territories.MV=Maldivene
territories.ZA=S\u00f8r-Afrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Verden
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
@@ -192,7 +224,6 @@ territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedonia, Republikken
-territories.YU=Jugoslavia
territories.YT=Mayotte
territories.MH=Marshall\u00f8yene
territories.MG=Madagaskar
@@ -202,10 +233,14 @@ territories.MA=Marokko
territories.YE=Yemen
territories.LY=Libya
territories.LV=Latvia
+territories.155=Vest-Europa
territories.LU=Luxembourg
+territories.154=Nord-Europa
territories.LT=Litauen
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=Aust-Europa
+territories.150=Europa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=St. Lucia
@@ -214,6 +249,8 @@ territories.LA=Laos, Den folkedemokratiske republikken
territories.KZ=Kasakhstan
territories.KY=Cayman\u00f8yene
territories.KW=Kuwait
+territories.145=Vest-Asia
+territories.142=Asia
territories.KR=S\u00f8r-Korea
territories.KP=Nord-Korea
territories.KN=St. Christopher og Nevis
@@ -263,6 +300,16 @@ territories.TR=Tyrkia
territories.TO=Tonga
territories.TN=Tunisia
territories.TM=Turkmenistan
+languages.zh=Kinesisk
+languages.en=Engelsk
+languages.ru=Russisk
+languages.ar=Arabisk
+languages.it=Italiensk
languages.nb=norsk bokm\u00e5l
+languages.fr=Fransk
+languages.de=Tysk
+languages.es=Spansk
languages.no=norsk
+languages.ja=Japansk
languages.nn=norsk nynorsk
+languages.pt=Portugisisk
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om.properties
index a576ea3..fa6a876 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om.properties
@@ -5,7 +5,15 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.KES=KES
+currenciesDisplayName.INR=Indian Rupee
+currenciesDisplayName.RUB=Russian Ruble
+currenciesDisplayName.JPY=Japanese Yen
+currenciesDisplayName.BRL=Brazilian Real
+currenciesDisplayName.CNY=Chinese Yuan Renminbi
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.ETB=Itoophiyaa Birrii
+currenciesDisplayName.GBP=British Pound Sterling
currenciesSymbol.KES=Ksh
shortMonths=Ama®Gur®Bit®Elb®Cam®Wax®Ado®Hag®Ful®Onk®Sad®Mud®®
months=Amajjii®Guraandhala®Bitooteessa®Elba®Caamsa®Waxabajjii®Adooleessa®Hagayya®Fuulbana®Onkololeessa®Sadaasa®Muddee®®
@@ -13,6 +21,27 @@ shortWeekdays=®Dil®Wix®Qib®Rob®Kam®Jim®San®
weekdays=®Dilbata®Wiixata®Qibxata®Roobii®Kamiisa®Jimaata®Sanbata®
firstDayOfWeek=sat
eras=KD®KB®
-territories.KE=Keeniyaa
+territories.FR=France
+territories.IN=India
+territories.CN=China
territories.ET=Itoophiyaa
+territories.DE=Germany
+territories.GB=United Kingdom
+territories.BR=Brazil
+territories.RU=Russia
+territories.JP=Japan
+territories.US=United States
+territories.KE=Keeniyaa
+territories.IT=Italy
+languages.zh=Chinese
+languages.en=English
+languages.ru=Russian
+languages.hi=Hindi
+languages.ar=Arabic
+languages.it=Italian
+languages.fr=French
languages.om=Oromoo
+languages.de=German
+languages.es=Spanish
+languages.ja=Japanese
+languages.pt=Portuguese
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om_ET.properties
index 77578cd..7801c49 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om_ET.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_om_ET.properties
@@ -6,7 +6,6 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ETB=ETB
currenciesSymbol.ETB=$
currenciesSymbol.USD=US$
ampms=WD®WB®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_or_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_or_IN.properties
index bd9edc1..69196bc 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_or_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_or_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=dd-MM-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa.properties
index 1476a6c..6d4770a 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa.properties
@@ -6,8 +6,8 @@
# This file was automatically generated by gnu.localegen from CLDR.
zeroDigit=\u0a66
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
currenciesDisplayName.INR=\u0a30\u0a41\u0a2a\u0a3f\u0a2f
currenciesSymbol.INR=\u0a30\u0a41.
shortMonths=\u0a1c\u0a28\u0a35\u0a30\u0a40®\u0a5e\u0a30\u0a35\u0a30\u0a40®\u0a2e\u0a3e\u0a30\u0a1a®\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32®\u0a2e\u0a08®\u0a1c\u0a42\u0a28®\u0a1c\u0a41\u0a32\u0a3e\u0a08®\u0a05\u0a17\u0a38\u0a24®\u0a38\u0a24\u0a70\u0a2c\u0a30®\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30®\u0a28\u0a35\u0a70\u0a2c\u0a30®\u0a26\u0a38\u0a70\u0a2c\u0a30®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa_IN.properties
index cd2c6ae..be1e030 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pa_IN.properties
@@ -5,7 +5,7 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4##,##,##0.00;-\u00a4##,##,##0.00
+currencyFormat=\u00a4#,##,##0.00;-\u00a4#,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pl.properties
index ee4eaff..91f53cd 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pl.properties
@@ -7,737 +7,348 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.JOD=dinar jorda\u0144ski
-currenciesDisplayName.BOV=mvdol boliwijski
-currenciesDisplayName.XAU=z\u0142oto
-currenciesDisplayName.FOK=korona Wysp Owczych
-currenciesDisplayName.LBP=funt liba\u0144ski
-currenciesDisplayName.EUR=euro
-currenciesDisplayName.VND=dong wietnamski
-currenciesDisplayName.TZS=szyling tanza\u0144ski
-currenciesDisplayName.BOP=peso boliwijskie
-currenciesDisplayName.KHR=riel kambod\u017ca\u0144ski
-currenciesDisplayName.XAM=jednostka monetarna azjatycka
-currenciesDisplayName.BOL=boliviano (1863-1962)
-currenciesDisplayName.KHO=stary riel kambod\u017ca\u0144ski
-currenciesDisplayName.ZMP=funt zambijski
-currenciesDisplayName.AUP=funt australijski
-currenciesDisplayName.XAF=frank CFA BEAC
-currenciesDisplayName.MTP=funt malta\u0144ski
-currenciesDisplayName.GHR=cedi zrewaloryzowane gha\u0144skie
-currenciesDisplayName.ZMK=kwacha zambijska
-currenciesDisplayName.XAD=jednostla dinar rozliczeniowy azjatycki
-currenciesDisplayName.GHP=funt gha\u0144ski
-currenciesDisplayName.BOB=boliviano
-currenciesDisplayName.GHO=stare cedi gha\u0144skie
-currenciesDisplayName.MTL=lira malta\u0144ska
-currenciesDisplayName.AUD=dolar australijski
-currenciesDisplayName.ITL=lir w\u0142oski
-currenciesDisplayName.GHC=cedi gha\u0144skie
-currenciesDisplayName.SGD=dolar singapurski
-currenciesDisplayName.PAB=balboa panamski
-currenciesDisplayName.LAK=kip laota\u0144ski
-currenciesDisplayName.KGS=som kirgiski
-currenciesDisplayName.CHF=frank szwajcarski
-currenciesDisplayName.ATS=szyling austriacki\u00a0
-currenciesDisplayName.USD=dolar ameryka\u0144ski\u00a0
-currenciesDisplayName.ETD=dolar etiopski
-currenciesDisplayName.BND=dolar brunejski
-currenciesDisplayName.JMP=funt jamajski
-currenciesDisplayName.ETB=birr etiopski
-currenciesDisplayName.DZF=nowy frank algierski
-currenciesDisplayName.DZD=dinar algierski
-currenciesDisplayName.PYG=guarani paragwajskie
-currenciesDisplayName.LYP=funt libijski
-currenciesDisplayName.JMD=dolar jamajski
-currenciesDisplayName.ISK=korona islandzka
-currenciesDisplayName.ESP=peseta hiszpa\u0144ska
-currenciesDisplayName.BMP=funt bermudzki
-currenciesDisplayName.LYD=dinar libijski
-currenciesDisplayName.LYB=lir brytyjskich w\u0142adz wojskowych w Libii
-currenciesDisplayName.BMD=dolar bermudzki
-currenciesDisplayName.NLG=gulden holenderski\u00a0
-currenciesDisplayName.MRO=ouguiya mautera\u0144ska
-currenciesDisplayName.IRR=rial ira\u0144ski
-currenciesDisplayName.SEK=korona szwedzka
-currenciesDisplayName.ERN=nakfa erytrejska
+currenciesDisplayName.YDD=dinar jeme\u0144ski
+currenciesDisplayName.TWD=nowy dolar tajwa\u0144ski
currenciesDisplayName.KES=szyling kenijski
-currenciesDisplayName.CFF=frank CFA Republiki \u015arodkowoafryka\u0144skiej
+currenciesDisplayName.BYB=rubel bia\u0142oruski (1994-1999)
+currenciesDisplayName.LKR=rupia lankijska
+currenciesDisplayName.RWF=frank ruandyjski
+currenciesDisplayName.TJS=somoni tad\u017cyckie
+currenciesDisplayName.SDP=funt suda\u0144ski
+currenciesDisplayName.TJR=rubel tad\u017cycki
+currenciesDisplayName.ERN=nakfa erytrejska
+currenciesDisplayName.AFN=afgani
+currenciesDisplayName.GRD=drachma grecka
+currenciesDisplayName.IEP=funt irlandzki
currenciesDisplayName.ARS=peso argenty\u0144skie
+currenciesDisplayName.SDD=dinar suda\u0144ski
currenciesDisplayName.ARP=peso argenty\u0144skie (1983-1985)
-currenciesDisplayName.ARM=peso argenty\u0144skie Moneda Nacional
-currenciesDisplayName.TWD=nowy dolar tajwa\u0144ski
-currenciesDisplayName.SDP=funt suda\u0144ski
currenciesDisplayName.GEL=lari gruzi\u0144skie
+currenciesDisplayName.AFA=afgani (1927-2002)
currenciesDisplayName.GEK=Larit gruzi\u0144ski kupon
-currenciesDisplayName.MQF=frank Martynika
+currenciesDisplayName.CRC=colon kostaryka\u0144ski
currenciesDisplayName.FKP=funt Wysp Falklandzkich
+currenciesDisplayName.EEK=korona esto\u0144ska
+currenciesDisplayName.HKD=dolar hongko\u0144ski
+currenciesDisplayName.MDL=lej mo\u0142dawski
currenciesDisplayName.ARA=austral argenty\u0144ski
-currenciesDisplayName.SDD=dinar suda\u0144ski
currenciesDisplayName.IQD=dinar iracki
-currenciesDisplayName.TVD=dolar Tuvalu
currenciesDisplayName.SCR=rupia seszelska
+currenciesDisplayName.VUV=vatu Vanuatu
+currenciesDisplayName.DKK=korona du\u0144ska
+currenciesDisplayName.KPW=won p\u00f3\u0142nocnokorea\u0144ski
+currenciesDisplayName.GQE=ekwele gwinejskie Gwinei R\u00f3wnikowej
+currenciesDisplayName.IDR=rupia indonezyjska
currenciesDisplayName.LVR=rubel \u0142otewski
-currenciesDisplayName.FJP=funt fid\u017cijski
+currenciesDisplayName.SOS=szyling somalijski
+currenciesDisplayName.AED=dirham ZEA
+currenciesDisplayName.BWP=pula
currenciesDisplayName.LVL=\u0142at \u0142otewski
-currenciesDisplayName.CDL=zair kongijski
-currenciesDisplayName.CDG=frank Republiki Konga
-currenciesDisplayName.CDF=frank kongijski
-currenciesDisplayName.FJD=dolar fid\u017cijski
+currenciesDisplayName.RUR=rubel rosyjski (1991-1998)
currenciesDisplayName.NIO=cordoba oro nikaragua\u0144ska
+currenciesDisplayName.ADP=peseta andorska
+currenciesDisplayName.FJD=dolar fid\u017cijski
currenciesDisplayName.MOP=pataka Macao
-currenciesDisplayName.NIG=cordoba Gold nikaragua\u0144ska
+currenciesDisplayName.RUB=rubel rosyjski
+currenciesDisplayName.CDF=frank kongijski
currenciesDisplayName.NIC=cordoba nikaragua\u0144ska
-currenciesDisplayName.XTR=rubel transferowy COMECON
-currenciesDisplayName.FIN=marka fi\u0144ska (1860-1962)
-currenciesDisplayName.FIM=marka fi\u0144ska
+currenciesDisplayName.DJF=frank D\u017cibuti
currenciesDisplayName.SBD=dolar Wysp Salomona
+currenciesDisplayName.UZS=som uzbecki
+currenciesDisplayName.ECS=sucre ekwadorski
+currenciesDisplayName.PHP=peso filipi\u0144skie
+currenciesDisplayName.THB=baht tajski
currenciesDisplayName.LUF=frank luksemburski
-currenciesDisplayName.TTO=stary dolar Trynidadu i Tobago
-currenciesDisplayName.AOS=escudo angola\u0144skie
-currenciesDisplayName.AOR=kwanza angola\u0144ska Reajustado (1995-1999)
-currenciesDisplayName.MNT=tugrik mongolski
-currenciesDisplayName.HUF=forint w\u0119gierski\u00a0
-currenciesDisplayName.BIF=frank burundyjski
-currenciesDisplayName.AON=nowa kwanza angola\u0144ska (1990-2000)
-currenciesDisplayName.AOK=kwanza angola\u0144ska (1977-1990)
+currenciesDisplayName.FIM=marka fi\u0144ska
currenciesDisplayName.TTD=dolar Trynidadu i Tobago
currenciesDisplayName.SZL=lilangeni Suazi
-currenciesDisplayName.GBP=funt szterling
-currenciesDisplayName.SAS=riyal sovereign saudyjski
+currenciesDisplayName.MNT=tugrik mongolski
currenciesDisplayName.SAR=rial saudyjski
+currenciesDisplayName.UAK=karbowaniec ukrai\u0144ski
+currenciesDisplayName.UAH=hrywna ukrai\u0144ska
+currenciesDisplayName.HUF=forint w\u0119gierski\u00a0
+currenciesDisplayName.COP=peso kolumbijskie
+currenciesDisplayName.QAR=rial katarski
currenciesDisplayName.LTT=talon litewski
-currenciesDisplayName.INR=rupia indyjska
currenciesDisplayName.PTE=escudo portugalskie
-currenciesDisplayName.AOA=kwanza angola\u0144ska
-currenciesDisplayName.PTC=conto portugalskie
+currenciesDisplayName.AOR=kwanza angola\u0144ska Reajustado (1995-1999)
+currenciesDisplayName.UYU=peso urugwajskie
+currenciesDisplayName.GBP=funt szterling
+currenciesDisplayName.BIF=frank burundyjski
+currenciesDisplayName.INR=rupia indyjska
+currenciesDisplayName.ZRZ=zair zairski
+currenciesDisplayName.AON=nowa kwanza angola\u0144ska (1990-2000)
currenciesDisplayName.LTL=lit litewski
+currenciesDisplayName.XFU=UIC-frank francuski
currenciesDisplayName.KZT=Tenge kazachskie
-currenciesDisplayName.KZR=rubel kazachski
-currenciesDisplayName.VGD=dolar Brytyjskich Wysp Dziewiczych
-currenciesDisplayName.NGP=funt nigeryjski
-currenciesDisplayName.MMX=dolarowy certyfikat Myanmar dla transakcji zagranicznych
+currenciesDisplayName.MZM=metical Mozambik
+currenciesDisplayName.UYP=peso urugwajskie (1975-1993)
+currenciesDisplayName.AOK=kwanza angola\u0144ska (1977-1990)
+currenciesDisplayName.BUK=kyat birma\u0144ski
+currenciesDisplayName.GNS=syli gwinejskie
+currenciesDisplayName.XFO=frank z\u0142oty francuski
+currenciesDisplayName.PGK=kina Papua Nowa Gwinea
+currenciesDisplayName.SYP=funt syryjski
+currenciesDisplayName.MZE=escudo mozambickie
+currenciesDisplayName.OMR=rial Omanu
currenciesDisplayName.NGN=naira nigeryjska
+currenciesDisplayName.ZRN=nowy zair zairski
+currenciesDisplayName.AOA=kwanza angola\u0144ska
+currenciesDisplayName.CNY=juan renminbi
+currenciesDisplayName.MAF=frank maroka\u0144ski
+currenciesDisplayName.GNF=frank gwinejski
currenciesDisplayName.HTG=gourde haita\u0144skie
-currenciesDisplayName.SYP=funt syryjski
-currenciesDisplayName.PSP=funt palesty\u0144ski
-currenciesDisplayName.BHD=dinar bahra\u0144ski
+currenciesDisplayName.MAD=dirham maroka\u0144ski
+currenciesDisplayName.TRY=nowa lira turecka
currenciesDisplayName.MMK=kyat Myanmar
+currenciesDisplayName.MYR=ringgit malezyjski
+currenciesDisplayName.LSL=loti Lesoto
+currenciesDisplayName.BHD=dinar bahra\u0144ski
+currenciesDisplayName.SLL=leone Sierra Leone
+currenciesDisplayName.BTN=ngultrum Bhutan
+currenciesDisplayName.TRL=lir turecki
+currenciesDisplayName.KMF=frank komoryjski
currenciesDisplayName.ANG=gulden Antyle Holenderskie
currenciesDisplayName.CZK=korona czeska
-currenciesDisplayName.IMP=funt szterling Wyspa Man
-currenciesDisplayName.BGX=lewa bu\u0142garskie dewizowe dla transakcji zagranicznych
-currenciesDisplayName.LSL=loti Lesoto
-currenciesDisplayName.GAF=frank CFA Gabonu
-currenciesDisplayName.BGO=lewa bu\u0142garskie (1879-1952)
+currenciesDisplayName.AZM=manat azerbejd\u017ca\u0144ski
+currenciesDisplayName.KYD=dolar kajma\u0144ski
+currenciesDisplayName.GMD=dalasi gambijskie
currenciesDisplayName.BGN=nowe lewa bu\u0142garskie
-currenciesDisplayName.BGM=lewa bu\u0142garskie socjalistyczne
currenciesDisplayName.CAD=dolar kanadyjski
currenciesDisplayName.BGL=lewa bu\u0142garskie
-currenciesDisplayName.TRL=lir turecki
-currenciesDisplayName.KYD=dolar kajma\u0144ski
-currenciesDisplayName.CYP=funt cypryjski
+currenciesDisplayName.VEB=boliwar wenezuelski
+currenciesDisplayName.MLF=frank malijski
currenciesDisplayName.ILS=nowy szekel izraelski
+currenciesDisplayName.MXP=peso srebrne meksyka\u0144skie (1861-1992)
+currenciesDisplayName.PES=sol peruwia\u0144ski
currenciesDisplayName.GYD=dolar guja\u0144ski
-currenciesDisplayName.AMD=dram arme\u0144ski
+currenciesDisplayName.MXN=peso meksyka\u0144skie
currenciesDisplayName.ILP=funt izraelski
-currenciesDisplayName.MLF=frank malijski
-currenciesDisplayName.ILL=szekel izraelski
-currenciesDisplayName.VEB=boliwar wenezuelski
-currenciesDisplayName.ALX=dolar alba\u0144ski dewizowy dla transakcji zagranicznych
+currenciesDisplayName.SKK=korona s\u0142owacka
+currenciesDisplayName.CYP=funt cypryjski
+currenciesDisplayName.XDR=specjalne prawa ci\u0105gnienia
+currenciesDisplayName.PEN=nowy sol peruwia\u0144ski
currenciesDisplayName.LRD=dolar liberyjski
-currenciesDisplayName.ALV=lek waluta alba\u0144ska
+currenciesDisplayName.PEI=inti peruwia\u0144ski
+currenciesDisplayName.AMD=dram arme\u0144ski
+currenciesDisplayName.BSD=dolar bahamski
currenciesDisplayName.HRK=kuna chorwacka
-currenciesDisplayName.REF=frank Reunion
+currenciesDisplayName.CLP=peso chilijskie
currenciesDisplayName.HRD=dinar chorwacki
-currenciesDisplayName.ALL=lek alba\u0144ski
-currenciesDisplayName.JEP=funt szterling Jersey
-currenciesDisplayName.ALK=lek alba\u0144ski (1946-1961)
-currenciesDisplayName.MKN=denar macedo\u0144ski (1992-1993)
-currenciesDisplayName.VDP=viet minh piastre dong viet p\u00f3\u0142nocnowietnamski
-currenciesDisplayName.VDN=nowy dong p\u00f3\u0142nocnowietnamski
-currenciesDisplayName.MKD=denar macedo\u0144ski
-currenciesDisplayName.VDD=piastre dong viet p\u00f3\u0142nocnowietnamski
-currenciesDisplayName.TPP=pataca timorskie
currenciesDisplayName.XPF=frank CFP
-currenciesDisplayName.BEL=frank belgijski (finansowy)
-currenciesDisplayName.GWP=peso Guinea-Bissau
-currenciesDisplayName.KWD=dinar kuwejcki
-currenciesDisplayName.BEF=frank belgijski
+currenciesDisplayName.FRF=frank francuski\u00a0
+currenciesDisplayName.BRR=cruzeiro brazylijskie
+currenciesDisplayName.MKD=denar macedo\u0144ski
+currenciesDisplayName.ALL=lek alba\u0144ski
+currenciesDisplayName.BRN=cruzado brazylijskie
+currenciesDisplayName.MWK=kwacha malawska
+currenciesDisplayName.BRL=real brazylijski
currenciesDisplayName.TPE=escudo timorskie
-currenciesDisplayName.BEC=frank belgijski (zamienny)
-currenciesDisplayName.GWE=escudo Gwinea Portugalska
+currenciesDisplayName.BRE=cruzeiro brazylijskie(1990-1993)
+currenciesDisplayName.BRC=cruzado brazylijskie
+currenciesDisplayName.BRB=cruzeiro novo brazylijskie (1967-1986)
+currenciesDisplayName.DEM=marka niemiecka
+currenciesDisplayName.KWD=dinar kuwejcki
+currenciesDisplayName.XCD=dolar wschodniokaraibski
+currenciesDisplayName.NPR=rupia nepalska
+currenciesDisplayName.GWP=peso Guinea-Bissau
+currenciesDisplayName.YUN=dinar jugos\u0142awia\u0144ski wymienny
currenciesDisplayName.SVC=colon salwadorski
-currenciesDisplayName.CWG=gulden Curacao
-currenciesDisplayName.BDT=taka bengalska
-currenciesDisplayName.TOS=funt szterling Tonga
-currenciesDisplayName.TOP=pa\u02bbanga Tonga
+currenciesDisplayName.YUM=nowy dinar jugos\u0142awia\u0144ski
+currenciesDisplayName.BEL=frank belgijski (finansowy)
+currenciesDisplayName.SIT=tolar s\u0142owe\u0144ski
+currenciesDisplayName.JPY=jen japo\u0144ski
currenciesDisplayName.XOF=frank CFA
+currenciesDisplayName.MVR=rufiyaa malediwska
+currenciesDisplayName.GWE=escudo Gwinea Portugalska
+currenciesDisplayName.BEF=frank belgijski
+currenciesDisplayName.TOP=pa\u02bbanga Tonga
+currenciesDisplayName.YUD=dinar jugos\u0142awia\u0144ski wymienny
+currenciesDisplayName.BEC=frank belgijski (zamienny)
currenciesDisplayName.SUR=rubel radziecki
-currenciesDisplayName.SUN=nowy rubel radziecki
-currenciesDisplayName.NCF=franc germinal Nowa Kaledonia
-currenciesDisplayName.CVE=escudo Zielonego Przyl\u0105dka
-currenciesDisplayName.XNF=frank CFA Antyli Francuskich
+currenciesDisplayName.ROL=lej rumu\u0144ski
+currenciesDisplayName.DDM=wschodnia marka wschodnioniemiecka
+currenciesDisplayName.BDT=taka bengalska
+currenciesDisplayName.AWG=gulden arubski
+currenciesDisplayName.NOK=korona norweska
+currenciesDisplayName.MUR=rupia Mauritius
currenciesDisplayName.ZAR=rand po\u0142udniowoafryka\u0144ski
-currenciesDisplayName.DOP=peso dominika\u0144skie
-currenciesDisplayName.CUX=certyfikaty kuba\u0144skie dla transakcji zagranicznych
-currenciesDisplayName.ZAP=funt po\u0142udniowoafryka\u0144ski
+currenciesDisplayName.SHP=funt Wyspy \u015awi\u0119tej Heleny
+currenciesDisplayName.XAU=z\u0142oto
currenciesDisplayName.ZAL=rand po\u0142udniowoafryka\u0144ski (finansowy)
+currenciesDisplayName.VND=dong wietnamski
+currenciesDisplayName.TZS=szyling tanza\u0144ski
+currenciesDisplayName.GIP=funt gibraltarski
currenciesDisplayName.TND=dinar tunezyjski
-currenciesDisplayName.CUP=peso kuba\u0144skie
+currenciesDisplayName.CVE=escudo Zielonego Przyl\u0105dka
currenciesDisplayName.UGX=szyling ugandyjski
-currenciesDisplayName.LNR=rupia cejlo\u0144ska
-currenciesDisplayName.AIF=frank Affars and Issas Franc
-currenciesDisplayName.VAL=lir Miasta Watykan
-currenciesDisplayName.STE=escudo Wysp \u015awi\u0119tego Tomasza i\u00a0Ksi\u0105\u017c\u0119cej
+currenciesDisplayName.ZMK=kwacha zambijska
+currenciesDisplayName.JOD=dinar jorda\u0144ski
+currenciesDisplayName.XAF=frank CFA BEAC
+currenciesDisplayName.LBP=funt liba\u0144ski
currenciesDisplayName.UGS=szyling ugandyjski (1966-1987)
currenciesDisplayName.STD=dobra Wysp \u015awi\u0119tego Tomasza i\u00a0Ksi\u0105\u017c\u0119cej
-currenciesDisplayName.MHD=dolar Wysp Marshalla
-currenciesDisplayName.NZP=funt nowozelandzki
currenciesDisplayName.WST=tala samoa\u0144ska
-currenciesDisplayName.WSP=funt samoa\u0144ski
-currenciesDisplayName.HNL=lempira Hondurasu
-currenciesDisplayName.XMF=nowy frank Metropolii Francuskiej
+currenciesDisplayName.KHR=riel kambod\u017ca\u0144ski
+currenciesDisplayName.EUR=euro
+currenciesDisplayName.DOP=peso dominika\u0144skie
+currenciesDisplayName.BOV=mvdol boliwijski
+currenciesDisplayName.MTP=funt malta\u0144ski
+currenciesDisplayName.BOP=peso boliwijskie
+currenciesDisplayName.MTL=lira malta\u0144ska
+currenciesDisplayName.CUP=peso kuba\u0144skie
currenciesDisplayName.TMM=manat turkme\u0144ski
-currenciesDisplayName.GTQ=quetzal gwatemalski
+currenciesDisplayName.SGD=dolar singapurski
currenciesDisplayName.NZD=dolar nowozelandzki
-currenciesDisplayName.SSP=funt szkocki
-currenciesDisplayName.BBD=dolar Barbadosu
+currenciesDisplayName.USD=dolar ameryka\u0144ski\u00a0
+currenciesDisplayName.HNL=lempira Hondurasu
+currenciesDisplayName.BOB=boliviano
+currenciesDisplayName.ITL=lir w\u0142oski
+currenciesDisplayName.PAB=balboa panamski
+currenciesDisplayName.GTQ=quetzal gwatemalski
+currenciesDisplayName.LAK=kip laota\u0144ski
+currenciesDisplayName.GHC=cedi gha\u0144skie
+currenciesDisplayName.AUD=dolar australijski
currenciesDisplayName.NAD=dolar namibijski
+currenciesDisplayName.KGS=som kirgiski
currenciesDisplayName.MGF=frank malgaski
+currenciesDisplayName.CHF=frank szwajcarski
+currenciesDisplayName.BBD=dolar Barbadosu
currenciesDisplayName.MGA=ariar malgaski
-currenciesDisplayName.EGP=funt egipski
-currenciesDisplayName.BZH=dolar Hondurasu Brytyjskiego
+currenciesDisplayName.PYG=guarani paragwajskie
currenciesDisplayName.PLZ=z\u0142oty polski (1950-1995)
-currenciesDisplayName.BAN=nowy dinar Bo\u015bni i Hercegowinyr
-currenciesDisplayName.PLX=z\u0142oty polski dewizowy dla transakcji zagranicznych
-currenciesDisplayName.BAM=marka konwertybilna Bo\u015bni i Hercegowiny
-currenciesDisplayName.BZD=dolar belize\u0144ski
-currenciesDisplayName.BAD=dinar Bo\u015bni i Hercegowiny
-currenciesDisplayName.PLN=z\u0142oty polski
currenciesDisplayName.YER=rial jeme\u0144ski
+currenciesDisplayName.ATS=szyling austriacki\u00a0
+currenciesDisplayName.ETB=birr etiopski
+currenciesDisplayName.BND=dolar brunejski
+currenciesDisplayName.JMD=dolar jamajski
+currenciesDisplayName.EGP=funt egipski
+currenciesDisplayName.PLN=z\u0142oty polski
+currenciesDisplayName.DZD=dinar algierski
+currenciesDisplayName.ISK=korona islandzka
currenciesDisplayName.SRG=gulden surinamski
-currenciesDisplayName.CSK=korona czechos\u0142owacka
+currenciesDisplayName.LYD=dinar libijski
+currenciesDisplayName.BZD=dolar belize\u0144ski
+currenciesDisplayName.BAM=marka konwertybilna Bo\u015bni i Hercegowiny
+currenciesDisplayName.ESP=peseta hiszpa\u0144ska
currenciesDisplayName.KRW=won po\u0142udniowokorea\u0144ski
+currenciesDisplayName.NLG=gulden holenderski\u00a0
+currenciesDisplayName.MRO=ouguiya mautera\u0144ska
+currenciesDisplayName.BAD=dinar Bo\u015bni i Hercegowiny
+currenciesDisplayName.ZWD=dolar Zimbabwe
+currenciesDisplayName.SEK=korona szwedzka
+currenciesDisplayName.CSK=korona czechos\u0142owacka
currenciesDisplayName.BYR=rubel bia\u0142oruski
-currenciesDisplayName.YEI=riyal Imadi jeme\u0144ski
-currenciesDisplayName.BYL=rubel bia\u0142oruski (1992-1994)
-currenciesDisplayName.CSC=korona czechos\u0142owacka
-currenciesDisplayName.KRO=stary won po\u0142udniowokorea\u0144ski
-currenciesDisplayName.KRH=hwan po\u0142udniowokorea\u0144ski
-currenciesDisplayName.BYB=rubel bia\u0142oruski (1994-1999)
-currenciesDisplayName.SQS=szyling somalijski
-currenciesDisplayName.GRN=nowa drachma grecka
+currenciesDisplayName.IRR=rial ira\u0144ski
currenciesDisplayName.PKR=rupia pakista\u0144ska
-currenciesDisplayName.AFN=afgani
-currenciesDisplayName.ZWD=dolar Zimbabwe
-currenciesDisplayName.LKR=rupia lankijska
-currenciesDisplayName.GRD=drachma grecka
-currenciesDisplayName.IEP=funt irlandzki
-currenciesDisplayName.AFA=afgani (1927-2002)
-currenciesDisplayName.YDD=dinar jeme\u0144ski
-currenciesDisplayName.RWF=frank ruandyjski
-currenciesDisplayName.CRC=colon kostaryka\u0144ski
-currenciesDisplayName.TJS=somoni tad\u017cyckie
-currenciesDisplayName.TJR=rubel tad\u017cycki
-currenciesDisplayName.EEK=korona esto\u0144ska
-currenciesDisplayName.GQP=peseta guja\u0144ska Gwinei R\u00f3wnikowej
-currenciesDisplayName.MDR=rubel kuponowy mo\u0142dawski
-currenciesDisplayName.HKD=dolar hongko\u0144ski
-currenciesDisplayName.DKK=korona du\u0144ska
-currenciesDisplayName.MDL=lej mo\u0142dawski
-currenciesDisplayName.GQF=frank Gwinei R\u00f3wnikowej
-currenciesDisplayName.GQE=ekwele gwinejskie Gwinei R\u00f3wnikowej
-currenciesDisplayName.IDR=rupia indonezyjska
-currenciesDisplayName.AED=dirham ZEA
-currenciesDisplayName.KPW=won p\u00f3\u0142nocnokorea\u0144ski
-currenciesDisplayName.IDN=nowa rupia indonezyjska
-currenciesDisplayName.BWP=pula
-currenciesDisplayName.MDC=lej kuponowy mo\u0142dawski
-currenciesDisplayName.IDJ=rupia indonezyjska Java
-currenciesDisplayName.KPP=won ludowop\u00f3\u0142nocnokorea\u0144ski
-currenciesDisplayName.IDG=gulden indonezyjski Nica
-currenciesDisplayName.VUV=vatu Vanuatu
-currenciesDisplayName.XID=dinar islamski
-currenciesDisplayName.SOS=szyling somalijski
-currenciesDisplayName.ADP=peseta andorska
-currenciesDisplayName.RUR=rubel rosyjski (1991-1998)
-currenciesDisplayName.GPF=frank Gwadelupy
-currenciesDisplayName.DJF=frank D\u017cibuti
-currenciesDisplayName.ADD=diner andorski
-currenciesDisplayName.MCG=frank Monaco Germinal
-currenciesDisplayName.MCF=nowy frank Monaco
-currenciesDisplayName.ECS=sucre ekwadorski
-currenciesDisplayName.LIF=frank Liechtenstein
-currenciesDisplayName.RUB=rubel rosyjski
-currenciesDisplayName.PHP=peso filipi\u0144skie
-currenciesDisplayName.UZS=som uzbecki
-currenciesDisplayName.COP=peso kolumbijskie
-currenciesDisplayName.THB=baht tajski
-currenciesDisplayName.IBP=fund p\u00f3\u0142nocnoirlandzki
-currenciesDisplayName.BUR=rupia birma\u0144ska
-currenciesDisplayName.COF=frank CFA Konga
-currenciesDisplayName.BUK=kyat birma\u0144ski
-currenciesDisplayName.COB=peso kolumbijskie papierowe
-currenciesDisplayName.UZC=som kuponowy uzbecki
-currenciesDisplayName.UAK=karbowaniec ukrai\u0144ski
-currenciesDisplayName.QAR=rial katarski
-currenciesDisplayName.UAH=hrywna ukrai\u0144ska
-currenciesDisplayName.GNS=syli gwinejskie
-currenciesDisplayName.CNY=juan renminbi
-currenciesDisplayName.MZM=metical Mozambik
-currenciesDisplayName.CNX=dolar chi\u0144ski dla transakcji zagranicznych
-currenciesDisplayName.UYU=peso urugwajskie
-currenciesDisplayName.GNI=frank gwinejski (1960-1972)
-currenciesDisplayName.SML=lir San Marino
-currenciesDisplayName.MZE=escudo mozambickie
-currenciesDisplayName.CNP=Jen Min Piao juan Jen Min Piao chi\u0144ski
-currenciesDisplayName.GNF=frank gwinejski
-currenciesDisplayName.PGK=kina Papua Nowa Gwinea
-currenciesDisplayName.OMS=rial saidi oma\u0144ski
-currenciesDisplayName.OMR=rial Omanu
-currenciesDisplayName.UYP=peso urugwajskie (1975-1993)
-currenciesDisplayName.XFU=UIC-frank francuski
-currenciesDisplayName.BTR=rupia Bhutan
-currenciesDisplayName.ZRZ=zair zairski
-currenciesDisplayName.MAF=frank maroka\u0144ski
-currenciesDisplayName.MAD=dirham maroka\u0144ski
-currenciesDisplayName.BTN=ngultrum Bhutan
-currenciesDisplayName.XFO=frank z\u0142oty francuski
-currenciesDisplayName.UYF=peso urugwajskie Fuerte
-currenciesDisplayName.MYR=ringgit malezyjski
-currenciesDisplayName.ZRN=nowy zair zairski
-currenciesDisplayName.AZM=manat azerbejd\u017ca\u0144ski
-currenciesDisplayName.GMP=funt gambijski
-currenciesDisplayName.KMF=frank komoryjski
-currenciesDisplayName.SLL=leone Sierra Leone
-currenciesDisplayName.GMD=dalasi gambijskie
-currenciesDisplayName.BSP=funt bahamski
-currenciesDisplayName.CMF=frank CFA Kamerunu
-currenciesDisplayName.XEF=frank CFA BCEAEC
-currenciesDisplayName.BSD=dolar bahamski
-currenciesDisplayName.MXP=peso srebrne meksyka\u0144skie (1861-1992)
-currenciesDisplayName.MXN=peso meksyka\u0144skie
-currenciesDisplayName.PES=sol peruwia\u0144ski
-currenciesDisplayName.GLK=korona grenlandzka
-currenciesDisplayName.BRZ=cruzeiro brazylijskie (1942-1967)
-currenciesDisplayName.PEN=nowy sol peruwia\u0144ski
-currenciesDisplayName.CLP=peso chilijskie
-currenciesDisplayName.SKK=korona s\u0142owacka
-currenciesDisplayName.PEI=inti peruwia\u0144ski
-currenciesDisplayName.BRR=cruzeiro brazylijskie
-currenciesDisplayName.XDR=specjalne prawa ci\u0105gnienia
-currenciesDisplayName.FRF=frank francuski\u00a0
-currenciesDisplayName.BRN=cruzado brazylijskie
-currenciesDisplayName.CLE=escudo chilijskie
-currenciesDisplayName.BRL=real brazylijski
-currenciesDisplayName.CLC=condor chilijski
-currenciesDisplayName.BRE=cruzeiro brazylijskie(1990-1993)
-currenciesDisplayName.MWP=funt malawski
-currenciesDisplayName.BRC=cruzado brazylijskie
-currenciesDisplayName.BRB=cruzeiro novo brazylijskie (1967-1986)
-currenciesDisplayName.MWK=kwacha malawska
-currenciesDisplayName.PDR=rubel naddniestrza\u0144ski
-currenciesDisplayName.DEM=marka niemiecka
-currenciesDisplayName.TDF=frank CFA Czadu
-currenciesDisplayName.PDN=nowy rubel naddniestrza\u0144ski
-currenciesDisplayName.PDK=rubel kuponowy naddniestrza\u0144ski
-currenciesDisplayName.NPR=rupia nepalska
-currenciesDisplayName.CKD=dolar Wysp Cooka
-currenciesDisplayName.JPY=jen japo\u0144ski
-currenciesDisplayName.MVR=rufiyaa malediwska
-currenciesDisplayName.XCF=nowy frank CFA
-currenciesDisplayName.MVP=rupia malediwska
-currenciesDisplayName.XCD=dolar wschodniokaraibski
-currenciesDisplayName.SIT=tolar s\u0142owe\u0144ski
-currenciesDisplayName.YUR=dinar reformowany jugos\u0142awia\u0144ski
-currenciesDisplayName.AWG=gulden arubski
-currenciesDisplayName.YUO=dinar pa\u017adziernikowy jugos\u0142awia\u0144ski
-currenciesDisplayName.DDM=wschodnia marka wschodnioniemiecka
-currenciesDisplayName.YUN=dinar jugos\u0142awia\u0144ski wymienny
-currenciesDisplayName.YUM=nowy dinar jugos\u0142awia\u0144ski
-currenciesDisplayName.TCC=korona Turks i Caicos
-currenciesDisplayName.YUG=dinar jugos\u0142awia\u0144ski 1994
-currenciesDisplayName.YUF=dinar Federacji jugos\u0142awia\u0144skiej
-currenciesDisplayName.RON=nowy lej rumu\u0144ski
-currenciesDisplayName.YUD=dinar jugos\u0142awia\u0144ski wymienny
-currenciesDisplayName.ROL=lej rumu\u0144ski
-currenciesDisplayName.SIB=tolar s\u0142owe\u0144ski bonowy
-currenciesDisplayName.NOK=korona norweska
-currenciesDisplayName.MUR=rupia Mauritius
-currenciesDisplayName.GIP=funt gibraltarski
-currenciesDisplayName.VNS=dong narodowy wietnamski
-currenciesDisplayName.VNR=dong Republiki Wietnamskiej
-currenciesDisplayName.KID=dolar Kiribati
-currenciesDisplayName.SHP=funt Wyspy \u015awi\u0119tej Heleny
-currenciesDisplayName.VNN=nowy dong wietnamski
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=dolar bermudzki
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=USh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.UGX=USh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=z\u0142
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=st®lut®mrz®kw®maj®cz®lip®sier®wrz®pa\u017a®lis®gr®®
-months=Stycze\u0144®Luty®Marzec®Kwiecie\u0144®Maj®Czerwiec®Lipiec®Sierpie\u0144®Wrzesie\u0144®Pa\u017adziernik®Listopad®Grudzie\u0144®®
-shortWeekdays=®N®Pn®Wt®\u015ar®Cz®Pt®So®
+months=stycze\u0144®luty®marzec®kwiecie\u0144®maj®czerwiec®lipiec®sierpie\u0144®wrzesie\u0144®pa\u017adziernik®listopad®grudzie\u0144®®
+shortWeekdays=®niedz.®pon.®wt.®\u015br.®czw.®pt.®sob.®
weekdays=®niedziela®poniedzia\u0142ek®wtorek®\u015broda®czwartek®pi\u0105tek®sobota®
firstDayOfWeek=mon
eras=p.n.e.®n.e.®
-shortDateFormat=yy-MM-dd
+shortDateFormat=dd.MM.yy
mediumDateFormat=yyyy-MM-dd
longDateFormat=d MMMM yyyy
fullDateFormat=EEEE, d MMMM yyyy
@@ -763,7 +374,9 @@ territories.GN=Gwinea
territories.GM=Gambia
territories.GL=Grenlandia
territories.SV=Salwador
+territories.062=Azja Po\u0142udniowo-\u015arodkowa
territories.ST=Wyspy \u015awi\u0119tego Tomasza i Ksi\u0105\u017c\u0119ca
+territories.061=Polinezja
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Surinam
@@ -787,9 +400,12 @@ territories.SC=Seszele
territories.SB=Wyspy Salomona
territories.SA=Arabia Saudyjska
territories.FR=Francja
+territories.057=Mikronezja
territories.FO=Wyspy Owcze
territories.FM=Mikronezja, Stany Sfederowane
territories.RW=Rwanda
+territories.054=Melanezja
+territories.053=Australia i Nowa Zelandia
territories.FK=Falklandy (Malwiny)
territories.RU=Federacja Rosyjska
territories.FJ=Fid\u017ci
@@ -799,20 +415,26 @@ territories.RE=Reunion
territories.ET=Etiopia
territories.ES=Hiszpania
territories.ER=Erytrea
+territories.833=Wyspa Man
territories.EH=Sahara Zachodnia
territories.EG=Egipt
+territories.830=Wyspy Normandzkie
territories.EE=Estonia
+territories.QO=Oceania inne
territories.EC=Ekwador
territories.DZ=Algieria
territories.QA=Katar
+territories.039=Europa Po\u0142udniowa
territories.DO=Republika Dominika\u0144ska
territories.PY=Paragwaj
+territories.035=Azja Po\u0142udniowo-Wschodnia
territories.DM=Dominika
territories.PW=Palau
territories.DK=Dania
territories.DJ=D\u017cibuti
territories.PT=Portugalia
territories.PS=Terytoria Palesty\u0144skie
+territories.030=Azja Wschodnia
territories.PR=Puerto Rico
territories.DE=Niemcy
territories.PN=Pitcairn
@@ -829,13 +451,16 @@ territories.CX=Wyspa Bo\u017cego Narodzenia
territories.CV=Wyspy Zielonego Przyl\u0105dka
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbia i Czarnog\u00f3ra
territories.CR=Kostaryka
+territories.029=Morze Karaibskie
territories.CO=Kolumbia
territories.CN=Chiny
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Wyspy Cooka
territories.CI=Wybrze\u017ce Ko\u015bci S\u0142oniowej
+territories.021=Ameryka P\u00f3\u0142nocna
territories.CH=Szwajcaria
territories.CG=Kongo
territories.CF=Republika \u015arodkowej Afryki
@@ -850,13 +475,20 @@ territories.BV=Wyspa Bouveta
territories.BT=Bhutan
territories.BS=Bahamy
territories.BR=Brazylia
+territories.019=Ameryka
+territories.018=Afryka Po\u0142udniowa
territories.NZ=Nowa Zelandia
territories.BO=Boliwia
+territories.017=Afryka \u015arodkowa
territories.BN=Brunei Darussalam
territories.BM=Bermudy
+territories.015=Afryka P\u00f3\u0142nocna
+territories.014=Afryka Wschodnia
+territories.013=Ameryka \u015arodkowa
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Afryka Zachodnia
territories.BH=Bahrajn
territories.NR=Nauru
territories.BG=Bu\u0142garia
@@ -874,6 +506,7 @@ territories.NG=Nigeria
territories.NF=Wyspa Norfolk
territories.AZ=Azerbejd\u017can
territories.NE=Niger
+territories.AX=Wyspy Alandzkie
territories.NC=Nowa Kaledonia
territories.AW=Aruba
territories.ZM=Zambia
@@ -882,19 +515,23 @@ territories.AU=Australia
territories.AT=Austria
territories.AS=Samoa Ameryka\u0144skie
territories.AR=Argentyna
+territories.009=Oceania
territories.AQ=Antarktyka
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malezja
territories.AN=Antyle Holenderskie
territories.MX=Meksyk
+territories.005=Ameryka Po\u0142udniowa
territories.AM=Armenia
territories.MW=Malawi
territories.AL=Albania
territories.MV=Malediwy
territories.ZA=Afryka Po\u0142udniowa
territories.MU=Mauritius
+territories.002=Afryka
territories.MT=Malta
+territories.001=\u015awiat
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauretania
@@ -909,7 +546,6 @@ territories.MN=Mongolia
territories.MM=Birma
territories.ML=Mali
territories.MK=Macedonia, Republika
-territories.YU=Jugos\u0142awia
territories.YT=Majotta
territories.MH=Wyspy Marshalla
territories.MG=Madagaskar
@@ -919,10 +555,14 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=Libijska
territories.LV=\u0141otwa
+territories.155=Europa Zachodnia
territories.LU=Luksemburg
+territories.154=Europa P\u00f3\u0142nocna
territories.LT=Litwa
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=Europa Wschodnia
+territories.150=Europa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -931,6 +571,8 @@ territories.LA=Laos (Demokratyczna Republika Ludowa)
territories.KZ=Kazachstan
territories.KY=Kajmany
territories.KW=Kuwejt
+territories.145=Azja Zachodnia
+territories.142=Azja
territories.KR=Korea Po\u0142udniowa
territories.KP=Korea P\u00f3\u0142nocna
territories.KN=Saint Kitts i Nevis
@@ -989,8 +631,8 @@ languages.el=grecki
languages.nl=holenderski
languages.bg=bu\u0142garski
languages.lv=\u0142otewski
-languages.he=hebrajski
languages.cs=czeski
+languages.he=hebrajski
languages.it=w\u0142oski
languages.lt=litewski
languages.fr=francuski
@@ -1005,8 +647,8 @@ languages.pl=polski
languages.sl=s\u0142owe\u0144ski
languages.sk=s\u0142owacki
languages.de=niemiecki
-languages.hu=w\u0119gierski
languages.et=esto\u0144ski
+languages.hu=w\u0119gierski
languages.es=hiszpa\u0144ski
-languages.hr=chorwacki
languages.da=du\u0144ski
+languages.hr=chorwacki
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps.properties
index 79ed634..3ddfebb 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps.properties
@@ -24,8 +24,8 @@ fullTimeFormat=H:mm:ss (z)
zoneStrings=Asia/Kabul®AFT®\u062f \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646 \u067e\u0647 \u0648\u062e\u062a®AFT®\u062f \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646 \u067e\u0647 \u0648\u062e\u062a®©
territories.SV=\u0633\u0627\u0644\u0648\u06d0\u0689\u0648\u0631
territories.PT=\u067e\u0648\u0631\u062a\u06ab\u0627\u0644
-territories.JP=\u062c\u0627\u067e\u0627\u0646
territories.GN=\u06ab\u06cc\u0627\u0646\u0627
+territories.JP=\u062c\u0627\u067e\u0627\u0646
territories.PS=\u0641\u0644\u0633\u0637\u06cc\u0646
territories.DK=\u0689\u0646\u0645\u0627\u0631\u06a9
territories.JM=\u062c\u0645\u06cc\u06a9\u0627
@@ -42,10 +42,10 @@ territories.YE=\u06cc\u0645\u0646
territories.SA=\u0633\u0639\u0648\u062f\u06cc \u0639\u0631\u0628\u0633\u062a\u0627\u0646
territories.CU=\u06a9\u06cc\u0648\u0628\u0627
territories.LY=\u0644\u06cc\u0628\u06cc\u0627
-territories.IT=\u0627\u06cc\u067c\u0627\u0644\u06cc\u0647
territories.FR=\u0641\u0631\u0627\u0646\u0633\u0647
-territories.IS=\u0622\u06cc\u0633\u0644\u06cc\u0646\u0689
+territories.IT=\u0627\u06cc\u067c\u0627\u0644\u06cc\u0647
territories.CO=\u06a9\u0648\u0644\u0645\u0628\u06cc\u0627
+territories.IS=\u0622\u06cc\u0633\u0644\u06cc\u0646\u0689
territories.CN=\u0686\u06cc\u0646
territories.UY=\u06cc\u0648\u0631\u0648\u06ab\u0648\u0627\u06cc
territories.RW=\u0631\u0648\u0646\u062f\u0627
@@ -62,14 +62,14 @@ territories.LA=\u0644\u0627\u0648\u0633
territories.NZ=\u0646\u06cc\u0648\u0632\u06cc\u0644\u0646\u0689
territories.ET=\u062d\u0628\u0634\u0647
territories.KW=\u06a9\u0648\u06cc\u067c
-territories.HU=\u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646
territories.ES=\u0647\u0633\u067e\u0627\u0646\u06cc\u0647
+territories.HU=\u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646
territories.TZ=\u062a\u0646\u0632\u0627\u0646\u06cc\u0627
territories.HN=\u0647\u0627\u0646\u0689\u0648\u0631\u0627\u0633
territories.NP=\u0646\u06cc\u067e\u0627\u0644
territories.NO=\u0646\u0627\u0631\u0648\u06d0
-territories.HK=\u0647\u0627\u0646\u06a9\u0627\u0646\u06ab
territories.BG=\u0628\u0644\u063a\u0627\u0631\u06cc\u0647
+territories.HK=\u0647\u0627\u0646\u06a9\u0627\u0646\u06ab
territories.EG=\u0645\u0635\u0631
territories.NL=\u0647\u0627\u0644\u06d0\u0646\u0689
territories.BD=\u0628\u0646\u06ab\u0644\u0647\u200c\u062f\u06cc\u0634
@@ -116,5 +116,5 @@ languages.hy=\u0627\u0631\u0645\u0646\u064a
languages.de=\u0627\u0644\u0645\u0627\u0646\u064a
languages.mg=\u0645\u0644\u063a\u0627\u0633\u064a
languages.et=\u062d\u0628\u0634\u064a
-languages.ku=\u06a9\u0631\u062f\u064a
languages.bal=\u0628\u0644\u0648\u0685\u064a
+languages.ku=\u06a9\u0631\u062f\u064a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps_AF.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps_AF.properties
index e2279e0..086555b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps_AF.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ps_AF.properties
@@ -11,5 +11,5 @@ minusSign=\u2212
zeroDigit=\u06f0
decimalSeparator=\u066b
groupingSeparator=\u066c
-currencyFormat=#,##0 \u00a4;-#,##0 \u00a4
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
firstDayOfWeek=sat
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt.properties
index 241d386..15ce646 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt.properties
@@ -7,758 +7,256 @@
decimalSeparator=,
groupingSeparator=.
-currenciesDisplayName.JOD=Dinar jordaniano
-currenciesDisplayName.BOV=Mvdol boliviano
-currenciesDisplayName.XAU=Ouro
-currenciesDisplayName.FOK=Coroa das Ilhas Fero\u00e9
-currenciesDisplayName.LBP=Libra libanesa
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Dong vietnamita
-currenciesDisplayName.TZS=Xelim de Tanz\u00e2nia
-currenciesDisplayName.BOP=Peso boliviano
-currenciesDisplayName.KHR=Riel cambojano
-currenciesDisplayName.XAM=Unidade Monet\u00e1ria Asi\u00e1tica
-currenciesDisplayName.BOL=Boliviano (1863-1962)
-currenciesDisplayName.KHO=Riel Antigo do Camboja
-currenciesDisplayName.ZMP=Libra zambiana
-currenciesDisplayName.AUP=Libra australiana
-currenciesDisplayName.XAF=Franco CFA BEAC
-currenciesDisplayName.MTP=Libra maltesa
-currenciesDisplayName.GHR=Cedi reajustado de Gana
-currenciesDisplayName.ZMK=Cuacha zambiano
-currenciesDisplayName.XAD=Unidade de Conta asi\u00e1tica em dinares
-currenciesDisplayName.GHP=Libra de Gana
-currenciesDisplayName.BOB=Boliviano
-currenciesDisplayName.GHO=Cedi Antigo de Gana
-currenciesDisplayName.MTL=Lira maltesa
-currenciesDisplayName.AUD=D\u00f3lar australiano
-currenciesDisplayName.USS=D\u00f3lar norte-americano (Mesmo dia)
-currenciesDisplayName.ITL=Lira italiana
-currenciesDisplayName.USN=D\u00f3lar norte-americano (Dia seguinte)
-currenciesDisplayName.GHC=Cedi de Gana
-currenciesDisplayName.SGD=D\u00f3lar de Cingapura
-currenciesDisplayName.PAB=Balboa panamenho
-currenciesDisplayName.LAK=Kip de Laos
-currenciesDisplayName.KGS=Som de Quirguist\u00e3o
-currenciesDisplayName.CHF=Franco su\u00ed\u00e7o
-currenciesDisplayName.ATS=Xelim austr\u00edaco
-currenciesDisplayName.USD=D\u00f3lar norte-americano
-currenciesDisplayName.ETD=D\u00f3lar et\u00edope
-currenciesDisplayName.BND=D\u00f3lar do Brunei
-currenciesDisplayName.JMP=Libra jamaicana
-currenciesDisplayName.ETB=Birr et\u00edope
-currenciesDisplayName.DZG=Franco Germinal argelino
-currenciesDisplayName.DZF=Franco Novo argelino
-currenciesDisplayName.DZD=Dinar argelino
-currenciesDisplayName.PYG=Guarani paraguaio
-currenciesDisplayName.LYP=Libra l\u00edbia
-currenciesDisplayName.JMD=D\u00f3lar jamaicano
-currenciesDisplayName.ISK=Coroa islandesa
-currenciesDisplayName.ESP=Peseta espanhola
-currenciesDisplayName.BMP=Libra das Bermudas
-currenciesDisplayName.LYD=Dinar l\u00edbio
-currenciesDisplayName.LYB=Lira l\u00edbia da Autoridade Militar Brit\u00e2nica
-currenciesDisplayName.BMD=D\u00f3lar das Bermudas
-currenciesDisplayName.NLG=Guilder holand\u00eas
-currenciesDisplayName.MRO=Ouguiya da Maurit\u00e2nia
-currenciesDisplayName.IRR=Rial iraniano
-currenciesDisplayName.SEK=Coroa sueca
-currenciesDisplayName.ERN=Nakfa da Eritr\u00e9ia
+currenciesDisplayName.YDD=Dinar iemenita
+currenciesDisplayName.TWD=D\u00f3lar Novo de Taiwan
currenciesDisplayName.KES=Xelim queniano
-currenciesDisplayName.CFF=Franco da Rep\u00fablica Centro-Africana CFA
+currenciesDisplayName.BYB=Rublo novo bielo-russo (1994-1999)
+currenciesDisplayName.LKR=Rupia de Sri Lanka
+currenciesDisplayName.RWF=Franco ruand\u00eas
+currenciesDisplayName.TJS=Somoni tadjique
+currenciesDisplayName.SDP=Libra sudanesa
+currenciesDisplayName.TJR=Rublo do Tadjiquist\u00e3o
+currenciesDisplayName.ERN=Nakfa da Eritr\u00e9ia
+currenciesDisplayName.AFN=Afegane
+currenciesDisplayName.GRD=Dracma grego
+currenciesDisplayName.IEP=Libra irlandesa
currenciesDisplayName.ARS=Peso argentino
+currenciesDisplayName.SDD=Dinar sudan\u00eas
currenciesDisplayName.ARP=Peso argentino (1983-1985)
-currenciesDisplayName.ARM=Peso moneda nacional argentino
-currenciesDisplayName.TWD=D\u00f3lar Novo de Taiwan
-currenciesDisplayName.SDP=Libra sudanesa
currenciesDisplayName.GEL=Lari georgiano
+currenciesDisplayName.AFA=Afegane (1927-2002)
currenciesDisplayName.GEK=Cupom Lari georgiano
-currenciesDisplayName.MQF=Franco da Martinica
+currenciesDisplayName.CRC=Colon da Costa Rica
currenciesDisplayName.FKP=Libra das Malvinas
+currenciesDisplayName.EEK=Coroa estoniana
+currenciesDisplayName.HKD=D\u00f3lar de Hong Kong
+currenciesDisplayName.MDL=Leu de Mold\u00e1via
currenciesDisplayName.ARA=Austral argentino
-currenciesDisplayName.SDD=Dinar sudan\u00eas
currenciesDisplayName.IQD=Dinar iraquiano
-currenciesDisplayName.TVD=D\u00f3lar de Tuvalu
currenciesDisplayName.SCR=Rupia das Seychelles
+currenciesDisplayName.VUV=Vatu de Vanuatu
+currenciesDisplayName.DKK=Coroa dinamarquesa
+currenciesDisplayName.KPW=Won norte-coreano
+currenciesDisplayName.GQE=Ekwele de Guin\u00e9 Equatorial
+currenciesDisplayName.IDR=Rupia indon\u00e9sia
currenciesDisplayName.LVR=Rublo let\u00e3o
-currenciesDisplayName.FJP=Libra de Fiji
+currenciesDisplayName.SOS=Xelim somali
+currenciesDisplayName.AED=Dir\u00e9m dos Emirados \u00c1rabes Unidos
+currenciesDisplayName.BWP=Pula botsuanesa
currenciesDisplayName.LVL=Lats let\u00e3o
-currenciesDisplayName.CDL=Zaire congol\u00eas
-currenciesDisplayName.CDG=Franco da Rep\u00fablica do Congo
-currenciesDisplayName.CDF=Franco congol\u00eas
-currenciesDisplayName.FJD=D\u00f3lar de Fiji
+currenciesDisplayName.RUR=Rublo russo (1991-1998)
currenciesDisplayName.NIO=C\u00f3rdoba Ouro nicaraguano
+currenciesDisplayName.ADP=Peseta de Andorra
+currenciesDisplayName.FJD=D\u00f3lar de Fiji
currenciesDisplayName.MOP=Pataca macaense
-currenciesDisplayName.NIG=C\u00f3rdoba Ouro nicaraguano
+currenciesDisplayName.RUB=Rublo russo
+currenciesDisplayName.CDF=Franco congol\u00eas
currenciesDisplayName.NIC=C\u00f3rdoba nicaraguano
-currenciesDisplayName.XTR=Rublo transfer\u00edvel do COMECON
-currenciesDisplayName.FIN=Marca finlandesa (1860-1962)
-currenciesDisplayName.FIM=Marca finlandesa
+currenciesDisplayName.DJF=Franco do Djibuti
+currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) do Equador
currenciesDisplayName.SBD=D\u00f3lar das Ilhas Salom\u00e3o
+currenciesDisplayName.UZS=Sum do Usbequist\u00e3o
+currenciesDisplayName.ECS=Sucre equatoriano
+currenciesDisplayName.PHP=Peso filipino
+currenciesDisplayName.THB=Baht tailand\u00eas
currenciesDisplayName.LUF=Franco luxemburgu\u00eas
-currenciesDisplayName.TTO=D\u00f3lar Antigo de Trinidad e Tobago
-currenciesDisplayName.AOS=Escudo angolano
-currenciesDisplayName.AOR=Cuanza angolano reajustado (1995-1999)
-currenciesDisplayName.MNT=Tugrik mongol
-currenciesDisplayName.HUF=Forinte h\u00fangaro
-currenciesDisplayName.BIF=Franco do Burundi
-currenciesDisplayName.AON=Cuanza novo angolano (1990-2000)
-currenciesDisplayName.AOK=Cuanza angolano (1977-1990)
+currenciesDisplayName.FIM=Marca finlandesa
currenciesDisplayName.TTD=D\u00f3lar de Trinidad e Tobago
currenciesDisplayName.SZL=Lilangeni da Suazil\u00e2ndia
-currenciesDisplayName.NHF=Franco CFP das Novas H\u00e9bridas
-currenciesDisplayName.GBP=Libra esterlina brit\u00e2nica
-currenciesDisplayName.SAS=Rial Soberano saudita
+currenciesDisplayName.MNT=Tugrik mongol
currenciesDisplayName.SAR=Rial saudita
+currenciesDisplayName.UAK=Karbovanetz ucraniano
+currenciesDisplayName.UAH=Hryvnia ucraniano
+currenciesDisplayName.HUF=Forinte h\u00fangaro
+currenciesDisplayName.COP=Peso colombiano
+currenciesDisplayName.QAR=Rial catariano
currenciesDisplayName.LTT=Talonas lituano
-currenciesDisplayName.INR=Rupia indiana
currenciesDisplayName.PTE=Escudo portugu\u00eas
-currenciesDisplayName.AOA=Cuanza angolano
-currenciesDisplayName.PTC=Conto portugu\u00eas
+currenciesDisplayName.AOR=Cuanza angolano reajustado (1995-1999)
+currenciesDisplayName.UYU=Peso uruguaio
+currenciesDisplayName.GBP=Libra esterlina brit\u00e2nica
+currenciesDisplayName.BIF=Franco do Burundi
+currenciesDisplayName.INR=Rupia indiana
+currenciesDisplayName.ZRZ=Zaire zairense
+currenciesDisplayName.AON=Cuanza novo angolano (1990-2000)
currenciesDisplayName.LTL=Lita lituano
+currenciesDisplayName.XFU=Franco UIC franc\u00eas
currenciesDisplayName.KZT=Tenge do Cazaquist\u00e3o
-currenciesDisplayName.KZR=Rublo do Cazaquist\u00e3o
-currenciesDisplayName.VGD=D\u00f3lar das Ilhas Virgens Brit\u00e2nicas
-currenciesDisplayName.NGP=Libra nigeriana
-currenciesDisplayName.MMX=Certificados de c\u00e2mbio birmaneses em d\u00f3lares
+currenciesDisplayName.MZM=Metical de Mo\u00e7ambique
+currenciesDisplayName.UYP=Peso uruguaio (1975-1993)
+currenciesDisplayName.AOK=Cuanza angolano (1977-1990)
+currenciesDisplayName.BUK=Kyat birman\u00eas
+currenciesDisplayName.GNS=Syli de Guin\u00e9
+currenciesDisplayName.XFO=Franco-ouro franc\u00eas
+currenciesDisplayName.PGK=Kina da Papua-Nova Guin\u00e9
+currenciesDisplayName.SYP=Libra s\u00edria
+currenciesDisplayName.MZE=Escudo de Mo\u00e7ambique
+currenciesDisplayName.OMR=Rial de Om\u00e3
currenciesDisplayName.NGN=Naira nigeriana
+currenciesDisplayName.ZRN=Zaire Novo zairense
+currenciesDisplayName.AOA=Cuanza angolano
+currenciesDisplayName.CNY=Yuan Renminbi chin\u00eas
+currenciesDisplayName.MAF=Franco marroquino
+currenciesDisplayName.GNF=Franco de Guin\u00e9
currenciesDisplayName.HTG=Gurde do Haiti
-currenciesDisplayName.SYP=Libra s\u00edria
-currenciesDisplayName.PSP=Libra palestina
-currenciesDisplayName.BHD=Dinar bareinita
+currenciesDisplayName.MAD=Dir\u00e9m marroquino
currenciesDisplayName.MMK=Kyat de Mianmar
+currenciesDisplayName.MYR=Ringgit malaio
+currenciesDisplayName.LSL=Loti de Lesoto
+currenciesDisplayName.XEU=Unidade Monet\u00e1ria Europ\u00e9ia
+currenciesDisplayName.BHD=Dinar bareinita
+currenciesDisplayName.SLL=Leone de Serra Leoa
+currenciesDisplayName.BTN=Ngultrum do But\u00e3o
+currenciesDisplayName.TRL=Lira turca
+currenciesDisplayName.KMF=Franco de Comores
currenciesDisplayName.ANG=Guilder das Antilhas Holandesas
currenciesDisplayName.CZK=Coroa da Rep\u00fablica Checa
-currenciesDisplayName.IMP=Libra esterlina da Ilha de Man
-currenciesDisplayName.BGX=Certificados de c\u00e2mbio b\u00falgaros em leva
-currenciesDisplayName.LSL=Loti de Lesoto
-currenciesDisplayName.GAF=Franco do Gab\u00e3o CFA
-currenciesDisplayName.BGO=Lev b\u00falgaro (1879-1952)
+currenciesDisplayName.AZM=Manat azerbaijano
+currenciesDisplayName.KYD=D\u00f3lar das Ilhas Caim\u00e3o
+currenciesDisplayName.GMD=Dalasi de G\u00e2mbia
currenciesDisplayName.BGN=Lev novo b\u00falgaro
-currenciesDisplayName.BGM=Lev socialista b\u00falgaro
currenciesDisplayName.CAD=D\u00f3lar canadense
+currenciesDisplayName.MXV=Unidad de Inversion (UDI) mexicana
currenciesDisplayName.BGL=Lev forte b\u00falgaro
-currenciesDisplayName.TRL=Lira turca
-currenciesDisplayName.KYD=D\u00f3lar das Ilhas Caim\u00e3o
-currenciesDisplayName.CYP=Libra de Chipre
+currenciesDisplayName.VEB=Bol\u00edvar venezuelano
+currenciesDisplayName.MLF=Franco de Mali
currenciesDisplayName.ILS=Sheqel Novo israelita
+currenciesDisplayName.MXP=Peso Plata mexicano (1861-1992)
+currenciesDisplayName.PES=Sol peruano
currenciesDisplayName.GYD=D\u00f3lar da Guiana
-currenciesDisplayName.AMD=Dram Arm\u00e9nio
+currenciesDisplayName.MXN=Peso mexicano
currenciesDisplayName.ILP=Libra israelita
-currenciesDisplayName.MLF=Franco de Mali
-currenciesDisplayName.ILL=Sheqel israelita
-currenciesDisplayName.VEB=Bol\u00edvar venezuelano
-currenciesDisplayName.ALX=Certificados de c\u00e2mbio albaneses em d\u00f3lares
+currenciesDisplayName.SKK=Coroa eslovaca
+currenciesDisplayName.CYP=Libra de Chipre
+currenciesDisplayName.XDR=Direitos Especiais de Giro
+currenciesDisplayName.PEN=Sol Novo peruano
currenciesDisplayName.LRD=D\u00f3lar liberiano
-currenciesDisplayName.ALV=Lek Valute Alban\u00eas
+currenciesDisplayName.PEI=Inti peruano
+currenciesDisplayName.AMD=Dram Arm\u00e9nio
+currenciesDisplayName.BSD=D\u00f3lar das Bahamas
currenciesDisplayName.HRK=Kuna croata
-currenciesDisplayName.REF=Franco de Reuni\u00e3o
+currenciesDisplayName.CLP=Peso chileno
currenciesDisplayName.HRD=Dinar croata
-currenciesDisplayName.ALL=Lek Alban\u00eas
-currenciesDisplayName.JEP=Libra esterlina de Jersey
-currenciesDisplayName.MKN=Dinar maced\u00f4nio (1992-1993)
-currenciesDisplayName.VDP=Viet Minh Piastre Dong Viet do Vietn\u00e3 do Norte
-currenciesDisplayName.VDN=Dong Novo do Vietn\u00e3 do Norte
-currenciesDisplayName.MKD=Dinar maced\u00f4nio
-currenciesDisplayName.VDD=Piastre Dong Viet do Vietn\u00e3 do Norte
-currenciesDisplayName.TPP=Pataca timorense
currenciesDisplayName.XPF=Franco CFP
-currenciesDisplayName.BEL=Franco belga (financeiro)
-currenciesDisplayName.GWP=Peso da Guin\u00e9-Bissau
-currenciesDisplayName.KWD=Dinar coveitiano
-currenciesDisplayName.GWM=Mil-r\u00e9is da Guin\u00e9 Portuguesa
-currenciesDisplayName.BEF=Franco belga
+currenciesDisplayName.FRF=Franco franc\u00eas
+currenciesDisplayName.BRR=Cruzeiro brasileiro
+currenciesDisplayName.MKD=Dinar maced\u00f4nio
+currenciesDisplayName.CLF=Unidades de Fomento chilenas
+currenciesDisplayName.ALL=Lek Alban\u00eas
+currenciesDisplayName.BRN=Cruzado novo brasileiro
+currenciesDisplayName.MWK=Cuacha do Mal\u00e1ui
+currenciesDisplayName.BRL=Real brasileiro
currenciesDisplayName.TPE=Escudo timorense
-currenciesDisplayName.BEC=Franco belga (convers\u00edvel)
-currenciesDisplayName.GWE=Escudo da Guin\u00e9 Portuguesa
+currenciesDisplayName.BRE=Cruzeiro brasileiro (1990-1993)
+currenciesDisplayName.BRC=Cruzado brasileiro
+currenciesDisplayName.BRB=Cruzeiro novo brasileiro(1967-1986)
+currenciesDisplayName.DEM=Marco alem\u00e3o
+currenciesDisplayName.KWD=Dinar coveitiano
+currenciesDisplayName.XCD=D\u00f3lar do Caribe Oriental
+currenciesDisplayName.NPR=Rupia nepalesa
+currenciesDisplayName.GWP=Peso da Guin\u00e9-Bissau
+currenciesDisplayName.YUN=Dinar convers\u00edvel iugoslavo
currenciesDisplayName.SVC=Colom salvadorenho
-currenciesDisplayName.CWG=Guilder de Cura\u00e7au
-currenciesDisplayName.BDT=Taka de Bangladesh
-currenciesDisplayName.TOS=Libra esterlina de Tonga
-currenciesDisplayName.TOP=Pa\u02bbanga de Tonga
+currenciesDisplayName.YUM=Super Dinar iugoslavo
+currenciesDisplayName.BEL=Franco belga (financeiro)
+currenciesDisplayName.SIT=Tolar Bons esloveno
+currenciesDisplayName.JPY=Iene japon\u00eas
currenciesDisplayName.XOF=Franco CFA BCEAO
+currenciesDisplayName.MVR=Rupias das Ilhas Maldivas
+currenciesDisplayName.GWE=Escudo da Guin\u00e9 Portuguesa
+currenciesDisplayName.BEF=Franco belga
+currenciesDisplayName.TOP=Pa\u02bbanga de Tonga
+currenciesDisplayName.YUD=Dinar forte iugoslavo
+currenciesDisplayName.BEC=Franco belga (convers\u00edvel)
currenciesDisplayName.SUR=Rublo sovi\u00e9tico
-currenciesDisplayName.SUN=Rublo Novo sovi\u00e9tico
-currenciesDisplayName.NCF=Franco Germinal da Nova Caled\u00f4nia
-currenciesDisplayName.CVE=Escudo cabo-verdiano
-currenciesDisplayName.XNF=Franco CFA das Antilhas Francesas
+currenciesDisplayName.ROL=Leu romeno
+currenciesDisplayName.DDM=Ostmark da Alemanha Oriental
+currenciesDisplayName.BDT=Taka de Bangladesh
+currenciesDisplayName.XBD=Unidade de Conta Europ\u00e9ia (XBD)
+currenciesDisplayName.AWG=Guilder de Aruba
+currenciesDisplayName.XBC=Unidade de Conta Europ\u00e9ia (XBC)
+currenciesDisplayName.XBB=Unidade Monet\u00e1ria Europ\u00e9ia
+currenciesDisplayName.XBA=Unidade Composta Europ\u00e9ia
+currenciesDisplayName.NOK=Coroa norueguesa
+currenciesDisplayName.MUR=Rupia de Maur\u00edcio
currenciesDisplayName.ZAR=Rand sul-africano
-currenciesDisplayName.DOP=Peso dominicano
-currenciesDisplayName.CUX=Certificados de c\u00e2mbio cubanos
-currenciesDisplayName.ZAP=Libra sul-africana
+currenciesDisplayName.SHP=Libra de Santa Helena
+currenciesDisplayName.XAU=Ouro
currenciesDisplayName.ZAL=Rand sul-africano (financeiro)
+currenciesDisplayName.VND=Dong vietnamita
+currenciesDisplayName.TZS=Xelim de Tanz\u00e2nia
+currenciesDisplayName.GIP=Libra de Gibraltar
currenciesDisplayName.TND=Dinar tunisiano
-currenciesDisplayName.CUP=Peso cubano
-currenciesDisplayName.GUF=Franco da Guiana Francesa
+currenciesDisplayName.CVE=Escudo cabo-verdiano
currenciesDisplayName.UGX=Xelim ugandense
-currenciesDisplayName.LNR=Rupia do Ceil\u00e3o
-currenciesDisplayName.AIF=Franco de Affars e Issas
-currenciesDisplayName.VAL=Lira da Cidade do Vaticano
-currenciesDisplayName.STE=Escudo de S\u00e3o Tom\u00e9 e Pr\u00edncipe
+currenciesDisplayName.ZMK=Cuacha zambiano
+currenciesDisplayName.JOD=Dinar jordaniano
+currenciesDisplayName.XAF=Franco CFA BEAC
+currenciesDisplayName.LBP=Libra libanesa
currenciesDisplayName.UGS=Xelim ugandense (1966-1987)
currenciesDisplayName.STD=Dobra de S\u00e3o Tom\u00e9 e Pr\u00edncipe
-currenciesDisplayName.MHD=D\u00f3lar das Ilhas Marshall
-currenciesDisplayName.NZP=Libra da Nova Zel\u00e2ndia
currenciesDisplayName.WST=Tala de Samoa Ocidental
-currenciesDisplayName.WSP=Libra de Samoa Ocidental
-currenciesDisplayName.HNL=Lempira de Honduras
-currenciesDisplayName.XMF=Franco Novo Metropolitano franc\u00eas
+currenciesDisplayName.KHR=Riel cambojano
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Peso dominicano
+currenciesDisplayName.BOV=Mvdol boliviano
+currenciesDisplayName.MTP=Libra maltesa
+currenciesDisplayName.USS=D\u00f3lar norte-americano (Mesmo dia)
+currenciesDisplayName.BOP=Peso boliviano
+currenciesDisplayName.MTL=Lira maltesa
+currenciesDisplayName.CUP=Peso cubano
currenciesDisplayName.TMM=Manat do Turcomenist\u00e3o
-currenciesDisplayName.GTQ=Quet\u00e7al da Guatemala
+currenciesDisplayName.USN=D\u00f3lar norte-americano (Dia seguinte)
+currenciesDisplayName.SGD=D\u00f3lar de Cingapura
currenciesDisplayName.NZD=D\u00f3lar da Nova Zel\u00e2ndia
-currenciesDisplayName.SSP=Libra escocesa
-currenciesDisplayName.BBD=D\u00f3lar de Barbados
+currenciesDisplayName.USD=D\u00f3lar norte-americano
+currenciesDisplayName.HNL=Lempira de Honduras
+currenciesDisplayName.BOB=Boliviano
+currenciesDisplayName.ITL=Lira italiana
+currenciesDisplayName.PAB=Balboa panamenho
+currenciesDisplayName.GTQ=Quet\u00e7al da Guatemala
+currenciesDisplayName.LAK=Kip de Laos
+currenciesDisplayName.GHC=Cedi de Gana
+currenciesDisplayName.AUD=D\u00f3lar australiano
currenciesDisplayName.NAD=D\u00f3lar da Nam\u00edbia
+currenciesDisplayName.KGS=Som de Quirguist\u00e3o
currenciesDisplayName.MGF=Franco de Madagascar
+currenciesDisplayName.CHF=Franco su\u00ed\u00e7o
+currenciesDisplayName.BBD=D\u00f3lar de Barbados
currenciesDisplayName.MGA=Ariary de Madagascar
-currenciesDisplayName.EGP=Libra eg\u00edpcia
-currenciesDisplayName.BZH=D\u00f3lar de Honduras Brit\u00e2nica
+currenciesDisplayName.PYG=Guarani paraguaio
currenciesDisplayName.PLZ=Zloti polon\u00eas (1950-1995)
-currenciesDisplayName.BAN=Dinar novo da B\u00f3snia-Herzeg\u00f3vina
-currenciesDisplayName.PLX=Certificados de c\u00e2mbio poloneses em d\u00f3lares
-currenciesDisplayName.BAM=Marco b\u00f3snio-herzeg\u00f3vino convers\u00edvel
-currenciesDisplayName.BZD=D\u00f3lar do Belize
-currenciesDisplayName.BAD=Dinar da B\u00f3snia-Herzeg\u00f3vina
-currenciesDisplayName.PLN=Zloti polon\u00eas
currenciesDisplayName.YER=Rial iemenita
+currenciesDisplayName.ATS=Xelim austr\u00edaco
+currenciesDisplayName.ETB=Birr et\u00edope
+currenciesDisplayName.BND=D\u00f3lar do Brunei
+currenciesDisplayName.JMD=D\u00f3lar jamaicano
+currenciesDisplayName.EGP=Libra eg\u00edpcia
+currenciesDisplayName.PLN=Zloti polon\u00eas
+currenciesDisplayName.DZD=Dinar argelino
+currenciesDisplayName.ISK=Coroa islandesa
currenciesDisplayName.SRG=Guilder do Suriname
-currenciesDisplayName.CSK=Coroa Forte checoslovaca
+currenciesDisplayName.LYD=Dinar l\u00edbio
+currenciesDisplayName.BZD=D\u00f3lar do Belize
+currenciesDisplayName.BAM=Marco b\u00f3snio-herzeg\u00f3vino convers\u00edvel
+currenciesDisplayName.ESP=Peseta espanhola
currenciesDisplayName.KRW=Won sul-coreano
+currenciesDisplayName.NLG=Guilder holand\u00eas
+currenciesDisplayName.MRO=Ouguiya da Maurit\u00e2nia
+currenciesDisplayName.BAD=Dinar da B\u00f3snia-Herzeg\u00f3vina
+currenciesDisplayName.ZWD=D\u00f3lar do Zimb\u00e1bwe
+currenciesDisplayName.SEK=Coroa sueca
+currenciesDisplayName.CSK=Coroa Forte checoslovaca
currenciesDisplayName.BYR=Rublo bielo-russo
-currenciesDisplayName.YEI=Rial Imadi iemenita
-currenciesDisplayName.BYL=Rublo bielo-russo (1992-1994)
-currenciesDisplayName.CSC=Coroa checoslovaca
-currenciesDisplayName.KRO=Won Antigo sul-coreano
-currenciesDisplayName.KRH=Hwan sul-coreano
-currenciesDisplayName.BYB=Rublo novo bielo-russo (1994-1999)
-currenciesDisplayName.SQS=Xelim de Somalil\u00e2ndia
-currenciesDisplayName.GRN=Dracma Novo grego
+currenciesDisplayName.IRR=Rial iraniano
currenciesDisplayName.PKR=Rupia paquistanesa
-currenciesDisplayName.AFN=Afegane
-currenciesDisplayName.ZWD=D\u00f3lar do Zimb\u00e1bwe
-currenciesDisplayName.LKR=Rupia de Sri Lanka
-currenciesDisplayName.GRD=Dracma grego
-currenciesDisplayName.IEP=Libra irlandesa
-currenciesDisplayName.AFA=Afegane (1927-2002)
-currenciesDisplayName.YDD=Dinar iemenita
-currenciesDisplayName.RWF=Franco ruand\u00eas
-currenciesDisplayName.CRC=Colon da Costa Rica
-currenciesDisplayName.TJS=Somoni tadjique
-currenciesDisplayName.TJR=Rublo do Tadjiquist\u00e3o
-currenciesDisplayName.EEK=Coroa estoniana
-currenciesDisplayName.GQP=Peseta Guineana de Guin\u00e9 Equatorial
-currenciesDisplayName.MDR=Cupom rublo mol\u00e1vio
-currenciesDisplayName.HKD=D\u00f3lar de Hong Kong
-currenciesDisplayName.DKK=Coroa dinamarquesa
-currenciesDisplayName.MDL=Leu de Mold\u00e1via
-currenciesDisplayName.GQF=Franco de Guin\u00e9 Equatorial
-currenciesDisplayName.GQE=Ekwele de Guin\u00e9 Equatorial
-currenciesDisplayName.IDR=Rupia indon\u00e9sia
-currenciesDisplayName.AED=Dir\u00e9m dos Emirados \u00c1rabes Unidos
-currenciesDisplayName.KPW=Won norte-coreano
-currenciesDisplayName.IDN=Rupia Nova indon\u00e9sia
-currenciesDisplayName.BWP=Pula botsuanesa
-currenciesDisplayName.MDC=Cupom leu mold\u00e1vio
-currenciesDisplayName.IDJ=Rupia Java indon\u00e9sia
-currenciesDisplayName.KPP=Won da Rep\u00fablica Popular da Cor\u00e9ia do Norte
-currenciesDisplayName.IDG=Guilder Nica indon\u00e9sio
-currenciesDisplayName.VUV=Vatu de Vanuatu
-currenciesDisplayName.XID=Dinar isl\u00e2mico
-currenciesDisplayName.SOS=Xelim somali
-currenciesDisplayName.ADP=Peseta de Andorra
-currenciesDisplayName.RUR=Rublo russo (1991-1998)
-currenciesDisplayName.GPF=Franco de Guadalupe
-currenciesDisplayName.DJF=Franco do Djibuti
-currenciesDisplayName.ADD=Diner de Andorra
-currenciesDisplayName.MCG=Franco Germinal de M\u00f4naco
-currenciesDisplayName.MCF=Franco Novo de M\u00f4naco
-currenciesDisplayName.ECV=Unidad de Valor Constante (UVC) do Equador
-currenciesDisplayName.ECS=Sucre equatoriano
-currenciesDisplayName.LIF=Franco de Liechtenstein
-currenciesDisplayName.RUB=Rublo russo
-currenciesDisplayName.PHP=Peso filipino
-currenciesDisplayName.UZS=Sum do Usbequist\u00e3o
-currenciesDisplayName.COP=Peso colombiano
-currenciesDisplayName.THB=Baht tailand\u00eas
-currenciesDisplayName.IBP=Libra da Irlanda do Norte
-currenciesDisplayName.BUR=Rupia birmanesa
-currenciesDisplayName.COF=Franco do Congo CFA
-currenciesDisplayName.BUK=Kyat birman\u00eas
-currenciesDisplayName.COB=Peso de Papel colombiano
-currenciesDisplayName.UZC=Coupon Som do Usbequist\u00e3o
-currenciesDisplayName.UAK=Karbovanetz ucraniano
-currenciesDisplayName.QAR=Rial catariano
-currenciesDisplayName.UAH=Hryvnia ucraniano
-currenciesDisplayName.GNS=Syli de Guin\u00e9
-currenciesDisplayName.CNY=Yuan Renminbi chin\u00eas
-currenciesDisplayName.MZM=Metical de Mo\u00e7ambique
-currenciesDisplayName.CNX=Certificados de c\u00e2mbio chineses em d\u00f3lares dos EUA
-currenciesDisplayName.UYU=Peso uruguaio
-currenciesDisplayName.GNI=Franco de Guin\u00e9 (1960-1972)
-currenciesDisplayName.SML=Lira de San Marino
-currenciesDisplayName.CNP=Jen Min Piao Yuan chin\u00eas
-currenciesDisplayName.MZE=Escudo de Mo\u00e7ambique
-currenciesDisplayName.GNF=Franco de Guin\u00e9
-currenciesDisplayName.OMS=Rial Saidi de Om\u00e3
-currenciesDisplayName.PGK=Kina da Papua-Nova Guin\u00e9
-currenciesDisplayName.OMR=Rial de Om\u00e3
-currenciesDisplayName.UYP=Peso uruguaio (1975-1993)
-currenciesDisplayName.XFU=Franco UIC franc\u00eas
-currenciesDisplayName.BTR=Rupia do But\u00e3o
-currenciesDisplayName.ZRZ=Zaire zairense
-currenciesDisplayName.MAF=Franco marroquino
-currenciesDisplayName.MAD=Dir\u00e9m marroquino
-currenciesDisplayName.BTN=Ngultrum do But\u00e3o
-currenciesDisplayName.XFO=Franco-ouro franc\u00eas
-currenciesDisplayName.UYF=Peso Fuerte uruguaio
-currenciesDisplayName.MYR=Ringgit malaio
-currenciesDisplayName.ZRN=Zaire Novo zairense
-currenciesDisplayName.AZM=Manat azerbaijano
-currenciesDisplayName.GMP=Libra de G\u00e2mbia
-currenciesDisplayName.KMF=Franco de Comores
-currenciesDisplayName.SLL=Leone de Serra Leoa
-currenciesDisplayName.GMD=Dalasi de G\u00e2mbia
-currenciesDisplayName.XEU=Unidade Monet\u00e1ria Europ\u00e9ia
-currenciesDisplayName.BSP=Libra das Bahamas
-currenciesDisplayName.CMF=Franco dos Camar\u00f5es CFA
-currenciesDisplayName.MXV=Unidad de Inversion (UDI) mexicana
-currenciesDisplayName.XEF=Franco CFA BCEAEC
-currenciesDisplayName.BSD=D\u00f3lar das Bahamas
-currenciesDisplayName.MXP=Peso Plata mexicano (1861-1992)
-currenciesDisplayName.MXN=Peso mexicano
-currenciesDisplayName.PES=Sol peruano
-currenciesDisplayName.GLK=Coroa de Groenl\u00e2ndia
-currenciesDisplayName.BRZ=Cruzeiro brasileiro (1942-1967)
-currenciesDisplayName.PEN=Sol Novo peruano
-currenciesDisplayName.CLP=Peso chileno
-currenciesDisplayName.SKK=Coroa eslovaca
-currenciesDisplayName.PEI=Inti peruano
-currenciesDisplayName.BRR=Cruzeiro brasileiro
-currenciesDisplayName.XDR=Direitos Especiais de Giro
-currenciesDisplayName.FRG=Franco Germinal franc\u00eas/Franco Poincar\u00e9
-currenciesDisplayName.FRF=Franco franc\u00eas
-currenciesDisplayName.BRN=Cruzado novo brasileiro
-currenciesDisplayName.CLF=Unidades de Fomento chilenas
-currenciesDisplayName.CLE=Escudo chileno
-currenciesDisplayName.BRL=Real brasileiro
-currenciesDisplayName.CLC=Condor chileno
-currenciesDisplayName.BRE=Cruzeiro brasileiro (1990-1993)
-currenciesDisplayName.DES=Sperrmark alem\u00e3o
-currenciesDisplayName.MWP=Libra do Mal\u00e1ui
-currenciesDisplayName.BRC=Cruzado brasileiro
-currenciesDisplayName.BRB=Cruzeiro novo brasileiro(1967-1986)
-currenciesDisplayName.MWK=Cuacha do Mal\u00e1ui
-currenciesDisplayName.PDR=Rublo de Transdniestria
-currenciesDisplayName.DEM=Marco alem\u00e3o
-currenciesDisplayName.TDF=Franco CFA de Chade
-currenciesDisplayName.PDN=Rublo Novo de Transdniestria
-currenciesDisplayName.PDK=Cupom rublo de Transdniestria
-currenciesDisplayName.NPR=Rupia nepalesa
-currenciesDisplayName.CKD=D\u00f3lar das Ilhas Cook
-currenciesDisplayName.JPY=Iene japon\u00eas
-currenciesDisplayName.MVR=Rupias das Ilhas Maldivas
-currenciesDisplayName.XCF=Franco Novo CFA
-currenciesDisplayName.MVP=Rupia das Ilhas Maldivas
-currenciesDisplayName.XCD=D\u00f3lar do Caribe Oriental
-currenciesDisplayName.SIT=Tolar Bons esloveno
-currenciesDisplayName.YUR=Dinar reformado iugoslavo
-currenciesDisplayName.AWG=Guilder de Aruba
-currenciesDisplayName.YUO=Dinar de outubro iugoslavo
-currenciesDisplayName.DDM=Ostmark da Alemanha Oriental
-currenciesDisplayName.YUN=Dinar convers\u00edvel iugoslavo
-currenciesDisplayName.YUM=Super Dinar iugoslavo
-currenciesDisplayName.TCC=Coroa de Turcas e Caicos
-currenciesDisplayName.YUG=Dinar iugoslavo de 1994
-currenciesDisplayName.YUF=Dinar da Federa\u00e7\u00e3o Iugoslava
-currenciesDisplayName.RON=Leu Novo romeno
-currenciesDisplayName.YUD=Dinar forte iugoslavo
-currenciesDisplayName.ROL=Leu romeno
-currenciesDisplayName.SIB=Tolar Bons esloveno
-currenciesDisplayName.NOK=Coroa norueguesa
-currenciesDisplayName.MUR=Rupia de Maur\u00edcio
-currenciesDisplayName.XBD=Unidade de Conta Europ\u00e9ia (XBD)
-currenciesDisplayName.GIP=Libra de Gibraltar
-currenciesDisplayName.VNS=Dong Nacional vietnamita
-currenciesDisplayName.XBC=Unidade de Conta Europ\u00e9ia (XBC)
-currenciesDisplayName.VNR=Dong da Rep\u00fablica do Vietn\u00e3
-currenciesDisplayName.XBB=Unidade Monet\u00e1ria Europ\u00e9ia
-currenciesDisplayName.XBA=Unidade Composta Europ\u00e9ia
-currenciesDisplayName.KID=D\u00f3lar do Quiribati
-currenciesDisplayName.SHP=Libra de Santa Helena
-currenciesDisplayName.VNN=Dong Novo vietnamita
-currenciesSymbol.JOD=JOD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=\u0111
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=MTL
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=SGD
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=KGS
-currenciesSymbol.CHF=CHF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LYD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=MRO
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=TWD
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=GEL
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
-currenciesSymbol.SAR=SAR
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=Esc.
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=KZT
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=LSL
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=GYD
-currenciesSymbol.AMD=AMD
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=ALL
-currenciesSymbol.JEP=JEP
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MKD
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
+currenciesDisplayName.BMD=D\u00f3lar das Bermudas
currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=TOP
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=UGX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=NAD
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=BAM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=PLN
currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=SRG
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=BYR
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=AFA
-currenciesSymbol.ZWD=ZWD
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IEP
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HKD
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DJF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MZM=MZM
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=UYU
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.GNF=GNF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=OMR
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=BTN
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=MYR
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MXN
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=SKK
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
+currenciesSymbol.VND=\u0111
+currenciesSymbol.PTE=Esc.
currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MWK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=NPR
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=XCD
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.AFN=AFA
shortMonths=jan®fev®mar®abr®mai®jun®jul®ago®set®out®nov®dez®®
months=janeiro®fevereiro®mar\u00e7o®abril®maio®junho®julho®agosto®setembro®outubro®novembro®dezembro®®
shortWeekdays=®dom®seg®ter®qua®qui®sex®s\u00e1b®
@@ -770,7 +268,7 @@ mediumDateFormat=d/MMM/yyyy
longDateFormat=d' de 'MMMM' de 'yyyy
fullDateFormat=EEEE, d' de 'MMMM' de 'yyyy
fullTimeFormat=HH'H'mm'm'ss's' z
-zoneStrings=America/Indianapolis®EST®Hor\u00e1rio Padr\u00e3o Oriental®EST®Hor\u00e1rio Padr\u00e3o Oriental®©America/Halifax®AST®Hor\u00e1rio Padr\u00e3o Atl\u00e2ntico®ADT®Hor\u00e1rio de Ver\u00e3o Atl\u00e2ntico®©Pacific/Honolulu®HST®Hor\u00e1rio Padr\u00e3o do Hava\u00ed®HST®Hor\u00e1rio Padr\u00e3o do Hava\u00ed®©America/Denver®MST®Hor\u00e1rio Padr\u00e3o Montanha®MDT®Hor\u00e1rio de Ver\u00e3o Montanha®©America/Anchorage®AST®Hor\u00e1rio Padr\u00e3o do Alasca®ADT®Hor\u00e1rio de Ver\u00e3o do Alasca®©America/St_Johns®CNT®Hor\u00e1rio Padr\u00e3o de Terra Nova®CDT®Hor\u00e1rio de Ver\u00e3o de Terra Nova®©Africa/Casablanca®GMT®Hor\u00e1rio do Meridiano de Greenwich®GMT®Hor\u00e1rio do Meridiano de Greenwich®©America/Chicago®CST®Hor\u00e1rio Padr\u00e3o Central®CDT®Hor\u00e1rio de Ver\u00e3o Central®©Asia/Shanghai®CTT®Hor\u00e1rio Padr\u00e3o da China®CDT®Hor\u00e1rio Padr\u00e3o da China®©Asia/Tokyo®JST®Hor\u00e1rio Padr\u00e3o do Jap\u00e3o®JST®Hor\u00e1rio Padr\u00e3o do Jap\u00e3o®©America/New_York®EST®Hor\u00e1rio Padr\u00e3o Oriental®EDT®Hor\u00e1rio de Ver\u00e3o Oriental®©Europe/Bucharest®EET®Hor\u00e1rio Padr\u00e3o da Europa Oriental®EEST®Hor\u00e1rio de Ver\u00e3o da Europa Oriental®©America/Los_Angeles®PST®Hor\u00e1rio Padr\u00e3o do Pac\u00edfico®PDT®Hor\u00e1rio de Ver\u00e3o do Pac\u00edfico®©America/Phoenix®MST®Hor\u00e1rio Padr\u00e3o Montanha®MST®Hor\u00e1rio Padr\u00e3o Montanha®©Etc/GMT®GMT®Hor\u00e1rio do Meridiano de Greenwich®GMT®Hor\u00e1rio do Meridiano de Greenwich®©Asia/Jerusalem®IST®Hor\u00e1rio Padr\u00e3o de Israel®IDT®Hor\u00e1rio de Ver\u00e3o de Israel®©Europe/Paris®CET®Hor\u00e1rio Padr\u00e3o Europa Central®CEST®Hor\u00e1rio de Ver\u00e3o Europa Central®©
+zoneStrings=Pacific/Honolulu®HST®Hor\u00e1rio Padr\u00e3o do Hava\u00ed®HST®Hor\u00e1rio Padr\u00e3o do Hava\u00ed®©Europe/Bucharest®EET®Hor\u00e1rio Padr\u00e3o da Europa Oriental®EEST®Hor\u00e1rio de Ver\u00e3o da Europa Oriental®©America/Los_Angeles®PST®Hor\u00e1rio Padr\u00e3o do Pac\u00edfico®PDT®Hor\u00e1rio de Ver\u00e3o do Pac\u00edfico®©America/Denver®MST®Hor\u00e1rio Padr\u00e3o Montanha®MDT®Hor\u00e1rio de Ver\u00e3o Montanha®©Asia/Jerusalem®IST®Hor\u00e1rio Padr\u00e3o de Israel®IDT®Hor\u00e1rio de Ver\u00e3o de Israel®©America/Phoenix®MST®Hor\u00e1rio Padr\u00e3o Montanha®MST®Hor\u00e1rio Padr\u00e3o Montanha®©America/Chicago®CST®Hor\u00e1rio Padr\u00e3o Central®CDT®Hor\u00e1rio de Ver\u00e3o Central®©America/Indianapolis®EST®Hor\u00e1rio Padr\u00e3o Oriental®EST®Hor\u00e1rio Padr\u00e3o Oriental®©America/St_Johns®CNT®Hor\u00e1rio Padr\u00e3o de Terra Nova®CDT®Hor\u00e1rio de Ver\u00e3o de Terra Nova®©America/Anchorage®AST®Hor\u00e1rio Padr\u00e3o do Alasca®ADT®Hor\u00e1rio de Ver\u00e3o do Alasca®©Asia/Shanghai®CTT®Hor\u00e1rio Padr\u00e3o da China®CDT®Hor\u00e1rio Padr\u00e3o da China®©Asia/Tokyo®JST®Hor\u00e1rio Padr\u00e3o do Jap\u00e3o®JST®Hor\u00e1rio Padr\u00e3o do Jap\u00e3o®©Europe/Paris®CET®Hor\u00e1rio Padr\u00e3o Europa Central®CEST®Hor\u00e1rio de Ver\u00e3o Europa Central®©America/New_York®EST®Hor\u00e1rio Padr\u00e3o Oriental®EDT®Hor\u00e1rio de Ver\u00e3o Oriental®©America/Halifax®AST®Hor\u00e1rio Padr\u00e3o Atl\u00e2ntico®ADT®Hor\u00e1rio de Ver\u00e3o Atl\u00e2ntico®©Africa/Casablanca®GMT®Hor\u00e1rio do Meridiano de Greenwich®GMT®Hor\u00e1rio do Meridiano de Greenwich®©
territories.TL=Timor Leste
territories.TK=Tokelau
territories.TJ=Tadjiquist\u00e3o
@@ -859,6 +357,7 @@ territories.CX=Ilhas Natal
territories.CV=Cabo Verde
territories.PA=Panam\u00e1
territories.CU=Cuba
+territories.CS=S\u00e9rvia e Montenegro
territories.CR=Costa Rica
territories.CO=Col\u00f4mbia
territories.CN=China
@@ -929,17 +428,16 @@ territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Maurit\u00e2nia
territories.AG=Ant\u00edgua e Barbuda
-territories.MQ=Martinica
territories.AF=Afeganist\u00e3o
-territories.MP=Ilhas Marianas do Norte
+territories.MQ=Martinica
territories.AE=Emirados \u00c1rabes Unidos
-territories.MO=Macau, Regi\u00e3o Admin. Especial da China
+territories.MP=Ilhas Marianas do Norte
territories.AD=Andorra
+territories.MO=Macau, Regi\u00e3o Admin. Especial da China
territories.MN=Mong\u00f3lia
territories.MM=Mianm\u00e1
territories.ML=Mali
territories.MK=Maced\u00f4nia, Rep\u00fablica da
-territories.YU=Iugosl\u00e1via
territories.YT=Mayotte
territories.MH=Ilhas Marshall
territories.MG=Madagascar
@@ -1010,8 +508,8 @@ territories.TR=Turquia
territories.TO=Tonga
territories.TN=Tun\u00edsia
territories.TM=Turcomenist\u00e3o
-languages.gwi=gwich\u02bbin
languages.akk=acadiano
+languages.gwi=gwich\u02bcin
languages.eka=ekajuk
languages.xh=xosa
languages.sux=sum\u00e9rio
@@ -1023,15 +521,15 @@ languages.pon=pohnpeian
languages.min=minangkabau
languages.suk=sukuma
languages.wo=uolofe
-languages.lol=mongo
languages.kut=kutenai
+languages.lol=mongo
languages.mic=miquemaque
languages.wa=walloon
languages.kum=kumyk
languages.zap=zapoteca
languages.cus=cuxitas (outros)
-languages.jbo=lojban
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volapuque
languages.oto=idiomas otomanos
languages.vi=vietnamita
@@ -1054,8 +552,8 @@ languages.egy=eg\u00edpcio (arcaico)
languages.ug=uighur
languages.fan=fangue
languages.ssa=nilo-saarianos (outros)
-languages.mga=irland\u00eas, medieval (900-1200)
languages.bat=b\u00e1lticos (outros)
+languages.mga=irland\u00eas, medieval (900-1200)
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1082,8 +580,8 @@ languages.kru=kurukh
languages.tg=tadjique
languages.byn=Blin
languages.te=telugu
-languages.kro=kru
languages.csb=kashubian
+languages.kro=kru
languages.ta=t\u00e2mil
languages.tkl=toquelauano
languages.efi=efique
@@ -1105,8 +603,8 @@ languages.sk=eslovaco
languages.grb=Gerbo
languages.si=cingal\u00eas
languages.sh=servo-croata
-languages.crh=crimean turkish; crimean tatar
languages.afa=afro-asi\u00e1tico (outros)
+languages.crh=crimean turkish; crimean tatar
languages.sg=sango
languages.se=northern sami
languages.sd=sindi
@@ -1129,14 +627,14 @@ languages.son=songai
languages.cpp=crioulos e p\u00eddgin, portugu\u00eas (outros)
languages.sog=sogdien
languages.ada=adangme
-languages.kos=kosraean
-languages.hit=hitita
languages.cpf=crioulos e p\u00eddgin, franc\u00eas (outros)
+languages.hit=hitita
+languages.kos=kosraean
languages.cpe=crioulos e p\u00eddgin, ingl\u00eas (outros)
languages.him=himachali
-languages.kok=concani
-languages.hil=hiligaynon
languages.got=g\u00f3tico
+languages.hil=hiligaynon
+languages.kok=concani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
@@ -1200,21 +698,21 @@ languages.ms=malaio
languages.mr=marata
languages.fro=franc\u00eas, arcaico (842-aprox.1400)
languages.mo=mold\u00e1vio
-languages.frm=franc\u00eas, medieval (aprox.1400-1600)
languages.mn=mongol
-languages.jrb=judaico-ar\u00e1bico
+languages.frm=franc\u00eas, medieval (aprox.1400-1600)
languages.ml=malaiala
+languages.jrb=judaico-ar\u00e1bico
languages.mk=maced\u00f4nio
languages.mi=maori
languages.mh=marshall\u00eas
languages.mg=malgaxe
languages.mwr=marwari
languages.bra=braj
-languages.den=slave
languages.lv=let\u00e3o
+languages.den=slave
languages.lu=luba-catanga
-languages.del=delaware
languages.lt=lituano
+languages.del=delaware
languages.lo=laosiano
languages.ln=lingala
languages.li=limburgish
@@ -1266,38 +764,38 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italiano
languages.sgn=linguages de sinais
-languages.is=island\u00eas
languages.kha=khasi
+languages.is=island\u00eas
languages.chr=cheroqui
languages.pam=pampanga
languages.pal=p\u00e1lavi
languages.chp=chipewyan
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=chinook jargon
languages.chm=mari
languages.tyv=tuvinian
languages.bnt=banto
languages.pag=pangasin\u00e3
-languages.ik=Inupiaq
languages.chk=chuukese
-languages.ii=sichuan yi
+languages.ik=Inupiaq
languages.haw=havaiano
+languages.ii=sichuan yi
languages.lam=lamba
-languages.ig=ibo
languages.chg=chagatai
+languages.ig=ibo
languages.sga=irland\u00eas, arcaico (at\u00e9 900)
languages.paa=papuanos (outros)
languages.ie=interlingue
languages.id=indon\u00e9sio
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interl\u00edngua
languages.lad=ladino
-languages.hz=herero
-languages.hai=haida
languages.dar=dargwa
+languages.hai=haida
+languages.hz=herero
languages.hy=arm\u00eanio
languages.ath=idiomas atabascanos
languages.hu=h\u00fangaro
@@ -1319,9 +817,9 @@ languages.iro=idiomas iroqueses
languages.gn=guarani
languages.gl=galego
languages.arw=arauaqui
-languages.gez=geez
-languages.art=artificiais (outros)
languages.gd=ga\u00e9lico escoc\u00eas
+languages.art=artificiais (outros)
+languages.gez=geez
languages.ira=iraniano
languages.ga=irland\u00eas
languages.arp=arapaho
@@ -1330,8 +828,8 @@ languages.fy=fris\u00e3o
languages.bla=siksika
languages.gem=germ\u00e2nicos (outros)
languages.ypk=idiomas i\u00fapique
-languages.arc=aramaico
languages.fr=franc\u00eas
+languages.arc=aramaico
languages.fo=fero\u00eas
languages.cel=c\u00e9lticos (outros)
languages.fj=fijiano
@@ -1355,9 +853,9 @@ languages.tum=tumbuka
languages.mos=mossi
languages.dz=dzonga
languages.nic=niger - kordofanian (other)
-languages.lus=lushai
-languages.fiu=ugro-fin\u00eas (outros)
languages.dv=divehi
+languages.fiu=ugro-fin\u00eas (outros)
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
languages.lun=lunda
@@ -1379,8 +877,8 @@ languages.wak=wakashan languages
languages.sat=santali
languages.cy=gal\u00eas
languages.sas=sasak
-languages.kbd=kabardian
languages.cv=chuvash
+languages.kbd=kabardian
languages.cu=eslavo eclesi\u00e1stico
languages.mni=manipuri
languages.cs=tcheco
@@ -1392,17 +890,17 @@ languages.co=c\u00f3rsico
languages.sai=ind\u00edgenas sul-americanos (outros)
languages.mnc=manchu
languages.sah=iacuto
-languages.kaw=kawi
-languages.inh=inguche
languages.gba=gbaia
+languages.inh=inguche
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=indo-europeus (outros)
languages.bho=bhojpuri
+languages.ine=indo-europeus (outros)
languages.enm=ingl\u00eas, medieval (1100-1500)
-languages.kar=karen
-languages.inc=\u00edndicos (outros)
languages.ce=chechene
+languages.inc=\u00edndicos (outros)
+languages.kar=karen
languages.gay=gayo
languages.ca=catal\u00e3o
languages.umb=umbundu
@@ -1410,19 +908,19 @@ languages.syr=sir\u00edaco
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=ingl\u00eas, arcaico (aprox. 450-1100)
-languages.kac=kachin
languages.cau=caucasianos (outros)
+languages.kac=kachin
languages.kab=kabyle
-languages.kaa=kara-Kalpak
languages.bs=b\u00f3snio
-languages.car=caribe
+languages.kaa=kara-Kalpak
languages.br=bret\u00e3o
+languages.car=caribe
languages.bo=tibetano
languages.bn=bengali
languages.bm=bambara
languages.gaa=ga
-languages.cai=ind\u00edgenas centro-americanos (outros)
languages.bi=bislam\u00e1
+languages.cai=ind\u00edgenas centro-americanos (outros)
languages.bh=biari
languages.bg=b\u00falgaro
languages.be=bielo-russo
@@ -1436,10 +934,10 @@ languages.az=azerbaijano
languages.ay=aimara
languages.av=avaric
languages.as=assam\u00eas
-languages.dsb=Lower Sorbian
languages.ar=\u00e1rabe
-languages.ilo=ilocano
+languages.dsb=Lower Sorbian
languages.elx=elamite
+languages.ilo=ilocano
languages.zh=chin\u00eas
languages.an=aragon\u00eas
languages.pra=idiomas pr\u00e1crito
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt_PT.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt_PT.properties
index bf92b00..e8eecd8 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt_PT.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_pt_PT.properties
@@ -9,10 +9,9 @@ currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
shortDateFormat=yy/MM/dd
mediumDateFormat=yyyy/MM/dd
territories.PS=Territ\u00f3rio Palestiniano
-territories.MP=Ilhas Mariana do Norte
territories.GL=Gronel\u00e2ndia
+territories.MP=Ilhas Mariana do Norte
territories.MO=Macau - Regi\u00e3o Administrativa Especial da China
-territories.YU=Jugosl\u00e1via
territories.AE=Emiratos \u00c1rabes Unidos
territories.MK=Maced\u00f3nia, Rep\u00fablica da
territories.PL=Pol\u00f3nia
@@ -45,16 +44,16 @@ territories.KZ=Cazaquist\u00e3o
territories.KY=Ilhas Caim\u00e3o
territories.ER=Eritreia
territories.KR=Coreia do Sul
-territories.KP=Coreia do Norte
territories.BJ=Benim
+territories.KP=Coreia do Norte
territories.KN=Saint Kitts e Nevis
territories.HK=Hong Kong - Regi\u00e3o Administrativa Especial da China
territories.EH=Sahara Ocidental
territories.EG=Egipto
territories.EE=Est\u00f3nia
territories.TM=Turquemenist\u00e3o
-territories.KG=Quirguizist\u00e3o
territories.BA=B\u00f3snia-Herzegovina
+territories.KG=Quirguizist\u00e3o
territories.KE=Qu\u00e9nia
territories.TJ=Tajiquist\u00e3o
territories.NC=Nova Caled\u00f3nia
@@ -65,8 +64,8 @@ territories.TC=Ilhas Turcas e Caicos
territories.GW=Guin\u00e9-Bissau
territories.AQ=Ant\u00e1rctica
territories.GS=Ilhas South Georgia e South Sandwich
-territories.MU=Maur\u00edcias
territories.AM=Arm\u00e9nia
+territories.MU=Maur\u00edcias
languages.sl=esloveno
languages.pl=polaco
languages.cs=checo
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ro.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ro.properties
index 6930feb..439b980 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ro.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ro.properties
@@ -8,7 +8,14 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.ROL=ROL
+currenciesDisplayName.INR=Rupie indian\u0103
+currenciesDisplayName.TRY=Noua lir\u0103 turceasc\u0103
+currenciesDisplayName.JPY=Yen japonez
+currenciesDisplayName.RUB=Rubl\u0103 ruseasc\u0103
+currenciesDisplayName.CNY=Yuan Renminbi chinezesc
+currenciesDisplayName.GBP=Lir\u0103 sterlin\u0103 britanic\u0103
+currenciesDisplayName.USD=Dolar SUA
+currenciesDisplayName.BRL=Real brazilian
currenciesSymbol.ROL=lei
shortMonths=Ian®Feb®Mar®Apr®Mai®Iun®Iul®Aug®Sep®Oct®Nov®Dec®®
months=ianuarie®februarie®martie®aprilie®mai®iunie®iulie®august®septembrie®octombrie®noiembrie®decembrie®®
@@ -42,7 +49,9 @@ territories.GN=Guineea
territories.GM=Gambia
territories.GL=Groenlanda
territories.SV=El Salvador
+territories.062=Asia centrala \u015fi de Sud
territories.ST=Sao Tome \u015fi Principe
+territories.061=Polinezia
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Surinam
@@ -66,9 +75,12 @@ territories.SC=Seychelles
territories.SB=Insulele Solomon
territories.SA=Arabia Saudit\u0103
territories.FR=Fran\u0163a
+territories.057=Micronezia
territories.FO=Insulele Feroe
territories.FM=Micronezia, Statele Federate
territories.RW=Rwanda
+territories.054=Melanezia
+territories.053=Australia \u0219i Noua Zeeland\u0103
territories.FK=Insulele Falkland
territories.RU=Rusia
territories.FJ=Fiji
@@ -80,18 +92,23 @@ territories.ES=Spania
territories.ER=Eritrea
territories.EH=Sahara de Vest
territories.EG=Egipt
+territories.830=Insulele Anglo-Normande
territories.EE=Estonia
+territories.QO=Alt\u0103 Oceania
territories.EC=Ecuador
territories.DZ=Algeria
territories.QA=Qatar
+territories.039=Europa meridional\u0103
territories.DO=Republica Dominican\u0103
territories.PY=Paraguay
+territories.035=Asia de Sud-Est
territories.DM=Dominica
territories.PW=Palau
territories.DK=Danemarca
territories.DJ=Djibouti
territories.PT=Portugalia
territories.PS=Teritoriul Palestinian
+territories.030=Asia oriental\u0103
territories.PR=Porto Rico
territories.DE=Germania
territories.PN=Pitcairn
@@ -108,13 +125,16 @@ territories.CX=Insula Christmas
territories.CV=Capul Verde
territories.PA=Panama
territories.CU=Cuba
+territories.CS=Serbia \u015fi Muntenegru
territories.CR=Costa Rica
+territories.029=Caraibe
territories.CO=Columbia
territories.CN=China
territories.CM=Camerun
territories.CL=Chile
territories.CK=Insulele Cook
territories.CI=Coasta de Filde\u015f
+territories.021=America de Nord
territories.CH=Eleve\u0163ia
territories.CG=Congo
territories.CF=Republica Central African\u0103
@@ -129,13 +149,20 @@ territories.BV=Insula Bouvet
territories.BT=Bhutan
territories.BS=Bahamas
territories.BR=Brazilia
+territories.019=Americi
+territories.018=Africa austral\u0103
territories.NZ=Noua Zeeland\u0103
territories.BO=Bolivia
+territories.017=Africa central\u0103
territories.BN=Brunei
territories.BM=Bermuda
+territories.015=Africa septentrional\u0103
+territories.014=Africa oriental\u0103
+territories.013=America central\u0103
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Africa occidental\u0103
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulgaria
@@ -153,6 +180,7 @@ territories.NG=Nigeria
territories.NF=Insulele Norfolk
territories.AZ=Azerbaidjan
territories.NE=Niger
+territories.AX=Insulele Aland
territories.NC=Noua Caledonie
territories.AW=Aruba
territories.ZM=Zambia
@@ -167,6 +195,7 @@ territories.AO=Angola
territories.MY=Malaezia
territories.AN=Antilele Olandeze
territories.MX=Mexic
+territories.005=America de Sud
territories.AM=Armenia
territories.MW=Malawi
territories.AL=Albania
@@ -174,6 +203,7 @@ territories.MV=Maldive
territories.ZA=Africa de Sud
territories.MU=Mauritius
territories.MT=Malta
+territories.001=Lume
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauritania
@@ -188,7 +218,6 @@ territories.MN=Mongolia
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Macedonia
-territories.YU=Iugoslavia
territories.YT=Mayotte
territories.MH=Insulele Marshall
territories.MG=Madagascar
@@ -198,10 +227,14 @@ territories.MA=Maroc
territories.YE=Yemen
territories.LY=Libia, Jamahiriya Arab\u0103
territories.LV=Letonia
+territories.155=Europa occidental\u0103
territories.LU=Luxemburg
+territories.154=Europa septentrional\u0103
territories.LT=Lituania
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=Europa de Est
+territories.150=Europa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -210,6 +243,7 @@ territories.LA=Lao, Republica Democratic\u0103 Popular\u0103
territories.KZ=Kazahstan
territories.KY=Insulele Cayman
territories.KW=Kuweit
+territories.145=Asia occidental\u0103
territories.KR=Coreea de Sud
territories.KP=Coreea de Nord
territories.KN=Saint Kitts \u015fi Nevis
@@ -268,8 +302,8 @@ languages.el=Greac\u0103
languages.nl=Olandez\u0103
languages.bg=Bulgar\u0103
languages.lv=Leton\u0103
-languages.he=Ebraic\u0103
languages.cs=Ceh\u0103
+languages.he=Ebraic\u0103
languages.it=Italian\u0103
languages.lt=Lituanian\u0103
languages.fr=Francez\u0103
@@ -284,8 +318,8 @@ languages.pl=Polonez\u0103
languages.sl=Sloven\u0103
languages.sk=Slovac\u0103
languages.de=German\u0103
-languages.hu=Maghiar\u0103
languages.et=Estonian\u0103
+languages.hu=Maghiar\u0103
languages.es=Spaniol\u0103
-languages.hr=Croat\u0103
languages.da=Danez\u0103
+languages.hr=Croat\u0103
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru.properties
index 8f4168d..cc69fee 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru.properties
@@ -5,379 +5,296 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+decimalSeparator=,
+groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.TWD=\u041d\u043e\u0432\u044b\u0439 \u0442\u0430\u0439\u0432\u0430\u043d\u044c\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.LKR=\u0428\u0440\u0438 - \u041b\u0430\u043d\u043a\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
+currenciesDisplayName.KES=\u041a\u0435\u043d\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.BYB=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1994-1999)
-currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u043a\u0441\u043a\u0438\u0439 \u0441\u043e\u043c\u043e\u043d\u0438
+currenciesDisplayName.LKR=\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.RWF=\u0424\u0440\u0430\u043d\u043a \u0420\u0443\u0430\u043d\u0434\u044b
-currenciesDisplayName.ERN=\u041d\u0430\u043a\u0444\u0430
+currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u043a\u0441\u043a\u0438\u0439 \u0441\u043e\u043c\u043e\u043d\u0438
currenciesDisplayName.TJR=\u0422\u0430\u0434\u0436\u0438\u043a\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.GRD=\u0414\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.ERN=\u041d\u0430\u043a\u0444\u0430
+currenciesDisplayName.GRD=\u0413\u0440\u0435\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0440\u0430\u0445\u043c\u0430
currenciesDisplayName.IEP=\u0418\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.ARS=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.SDD=\u0421\u0443\u0434\u0430\u043d\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.GEL=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\u0439 \u043b\u0430\u0440\u0438
-currenciesDisplayName.GEK=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\u0439 \u043a\u0443\u043f\u043e\u043d
currenciesDisplayName.AFA=\u0410\u0444\u0433\u0430\u043d\u0438 (1927-2002)
+currenciesDisplayName.GEK=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\u0439 \u043a\u0443\u043f\u043e\u043d
currenciesDisplayName.CRC=\u041a\u043e\u0441\u0442\u0430\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0439 \u043a\u043e\u043b\u043e\u043d
currenciesDisplayName.FKP=\u0424\u0443\u043d\u0442 \u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u043e\u0432
-currenciesDisplayName.EEK=\u041a\u0440\u043e\u043d\u0430
-currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438\u0439 \u043b\u0435\u0439
+currenciesDisplayName.EEK=\u042d\u0441\u0442\u043e\u043d\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.HKD=\u0413\u043e\u043d\u043a\u043e\u043d\u0433\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
+currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438\u0439 \u043b\u0435\u0439
currenciesDisplayName.IQD=\u0418\u0440\u0430\u043a\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SCR=\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.VUV=\u0412\u0430\u0442\u0443
-currenciesDisplayName.KPW=\u0421\u0435\u0432\u0435\u0440\u043e - \u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u0432\u043e\u043d\u0430
currenciesDisplayName.DKK=\u0414\u0430\u0442\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.IDR=\u0420\u0443\u043f\u0438\u044f
+currenciesDisplayName.KPW=\u0421\u0435\u0432\u0435\u0440\u043e-\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u0432\u043e\u043d\u0430
+currenciesDisplayName.IDR=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.AED=\u0414\u0438\u0440\u0445\u0430\u043c (\u041e\u0410\u042d)
+currenciesDisplayName.BWP=\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0441\u043a\u0430\u044f \u043f\u0443\u043b\u0430
currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0438\u0439 \u043b\u0430\u0442
-currenciesDisplayName.BWP=\u041f\u0443\u043b\u0430
currenciesDisplayName.RUR=\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1991-1998)
currenciesDisplayName.NIO=\u0417\u043e\u043b\u043e\u0442\u0430\u044f \u043a\u043e\u0440\u0434\u043e\u0431\u0430
-currenciesDisplayName.FJD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0424\u0438\u0434\u0436\u0438
currenciesDisplayName.ADP=\u0410\u043d\u0434\u043e\u0440\u0440\u0441\u043a\u0430\u044f \u043f\u0435\u0441\u0435\u0442\u0430
+currenciesDisplayName.FJD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0424\u0438\u0434\u0436\u0438
currenciesDisplayName.RUB=\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
currenciesDisplayName.CDF=\u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.DJF=\u0424\u0440\u0430\u043d\u043a \u0414\u0436\u0438\u0431\u0443\u0442\u0438
-currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u043a\u0441\u043a\u0438\u0439 \u0441\u0443\u043c
currenciesDisplayName.SBD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u043e\u0432
-currenciesDisplayName.ECS=\u0421\u0443\u043a\u0440\u0435
-currenciesDisplayName.THB=\u0411\u0430\u0442
+currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u043a\u0441\u043a\u0438\u0439 \u0441\u0443\u043c
+currenciesDisplayName.ECS=\u042d\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u043a\u0438\u0439 \u0441\u0443\u043a\u0440\u0435
currenciesDisplayName.PHP=\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.THB=\u0422\u0430\u0438\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0431\u0430\u0442
currenciesDisplayName.LUF=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.FIM=\u041c\u0430\u0440\u043a\u0430
+currenciesDisplayName.FIM=\u0424\u0438\u043d\u0441\u043a\u0430\u044f \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.TTD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434\u0430 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e
-currenciesDisplayName.SZL=\u041b\u0438\u043b\u0430\u043d\u0433\u0435\u043d\u0438
-currenciesDisplayName.MNT=\u0422\u0443\u0433\u0440\u0438\u043a
-currenciesDisplayName.UAK=\u041a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446 (\u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0439)
+currenciesDisplayName.SZL=\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0439 \u043b\u0438\u043b\u0430\u043d\u0433\u0435\u043d\u0438
+currenciesDisplayName.MNT=\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0443\u0433\u0440\u0438\u043a
currenciesDisplayName.SAR=\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
+currenciesDisplayName.UAK=\u041a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446 (\u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0439)
currenciesDisplayName.UAH=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0430\u044f \u0433\u0440\u0438\u0432\u043d\u0430
-currenciesDisplayName.HUF=\u0424\u043e\u0440\u0438\u043d\u0442
-currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
+currenciesDisplayName.HUF=\u0412\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439 \u0444\u043e\u0440\u0438\u043d\u0442
currenciesDisplayName.COP=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u0439\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
currenciesDisplayName.PTE=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u043e\u0435 \u044d\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.GBP=\u0424\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u043e\u0432
-currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
+currenciesDisplayName.GBP=\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u043e\u0432
currenciesDisplayName.BIF=\u0411\u0443\u0440\u0443\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.LTL=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u043b\u0438\u0442
+currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.AON=\u041d\u043e\u0432\u0430\u044f \u043a\u0432\u0430\u043d\u0437\u0430
-currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.MZM=\u041c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.LTL=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u043b\u0438\u0442
currenciesDisplayName.KZT=\u0422\u0435\u043d\u0433\u0435 (\u043a\u0430\u0437\u0430\u0445\u0441\u043a\u0438\u0439)
+currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.PGK=\u041a\u0438\u043d\u0430
currenciesDisplayName.SYP=\u0421\u0438\u0440\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
+currenciesDisplayName.NGN=\u041d\u0438\u0433\u0435\u0440\u0438\u0439\u0441\u043a\u0430\u044f \u043d\u0430\u0439\u0440\u0430
currenciesDisplayName.ZRN=\u041d\u043e\u0432\u044b\u0439 \u0437\u0430\u0438\u0440
-currenciesDisplayName.NGN=\u041d\u0430\u0439\u0440\u0430
currenciesDisplayName.CNY=\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u044e\u0430\u043d\u044c
currenciesDisplayName.GNF=\u0413\u0432\u0438\u043d\u0435\u0439\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.HTG=\u0413\u0430\u0438\u0442\u044f\u043d\u0441\u043a\u0438\u0439 \u0433\u0443\u0440\u0434
currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u043a\u0430\u043d\u0441\u043a\u0438\u0439 \u0434\u0438\u0440\u0445\u0430\u043c
-currenciesDisplayName.HTG=\u0413\u0443\u0440\u0434
+currenciesDisplayName.TRY=\u041d\u043e\u0432\u0430\u044f \u0442\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u043b\u0438\u0440\u0430
currenciesDisplayName.MYR=\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0438\u043d\u0433\u0433\u0438\u0442
-currenciesDisplayName.XEU=\u042d\u041a\u042e (\u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b)
currenciesDisplayName.LSL=\u041b\u043e\u0442\u0438
-currenciesDisplayName.SLL=\u041b\u0435\u043e\u043d\u0435
+currenciesDisplayName.XEU=\u042d\u041a\u042e (\u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b)
currenciesDisplayName.BHD=\u0411\u0430\u0445\u0440\u0435\u0439\u043d\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.SLL=\u041b\u0435\u043e\u043d\u0435
currenciesDisplayName.BTN=\u041d\u0433\u0443\u043b\u0442\u0440\u0443\u043c
currenciesDisplayName.TRL=\u0422\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u043b\u0438\u0440\u0430
currenciesDisplayName.KMF=\u0424\u0440\u0430\u043d\u043a \u041a\u043e\u043c\u043e\u0440\u0441\u043a\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u043e\u0432
-currenciesDisplayName.CZK=\u0427\u0435\u0448\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.ANG=\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0430\u043d\u0442\u0438\u043b\u044c\u0441\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
+currenciesDisplayName.CZK=\u0427\u0435\u0448\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.AZM=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u043a\u0438\u0439 \u043c\u0430\u043d\u0430\u0442
currenciesDisplayName.KYD=\u0414\u043e\u043b\u043b\u0430\u0440 \u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u044b\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u043e\u0432
-currenciesDisplayName.GMD=\u0414\u0430\u043b\u0430\u0441\u0438
+currenciesDisplayName.GMD=\u0413\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0438\u0439 \u0434\u0430\u043b\u0430\u0441\u0438
currenciesDisplayName.BGN=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u043a\u0438\u0439 \u043b\u0435\u0432
currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.BGL=\u041b\u0435\u0432
-currenciesDisplayName.VEB=\u0411\u043e\u043b\u0438\u0432\u0430\u0440
-currenciesDisplayName.ILS=\u0428\u0435\u043a\u0435\u043b\u044c
-currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.VEB=\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u044c\u0441\u043a\u0438\u0439 \u0431\u043e\u043b\u0438\u0432\u0430\u0440
+currenciesDisplayName.ILS=\u041d\u043e\u0432\u044b\u0439 \u0438\u0437\u0440\u0430\u0438\u043b\u044c\u0441\u043a\u0438\u0439 \u0448\u0435\u043a\u0435\u043b\u044c
currenciesDisplayName.GYD=\u0413\u0430\u0439\u0430\u043d\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.CYP=\u041a\u0438\u043f\u0440\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.SKK=\u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.CYP=\u041a\u0438\u043f\u0440\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.XDR=\u0421\u0414\u0420 (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f)
-currenciesDisplayName.PEN=\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u043b\u044c
+currenciesDisplayName.PEN=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u043a\u0438\u0439 \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u043b\u044c
currenciesDisplayName.LRD=\u041b\u0438\u0431\u0435\u0440\u0438\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.AMD=\u0410\u0440\u043c\u044f\u043d\u0441\u043a\u0438\u0439 \u0434\u0440\u0430\u043c
currenciesDisplayName.BSD=\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.HRK=\u041a\u0443\u043d\u0430
-currenciesDisplayName.HRD=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.HRK=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0430\u044f \u043a\u0443\u043d\u0430
currenciesDisplayName.CLP=\u0427\u0438\u043b\u0438\u0439\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.HRD=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.XPF=\u0424\u0440\u0430\u043d\u043a \u041a\u0424\u041f
currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.BRR=\u041a\u0440\u0443\u0437\u0435\u0439\u0440\u043e \u0440\u0435\u0430\u043b
-currenciesDisplayName.MKD=\u0414\u0435\u043d\u0430\u0440
-currenciesDisplayName.ALL=\u041b\u0435\u043a
+currenciesDisplayName.MKD=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.ALL=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438\u0439 \u043b\u0435\u043a
currenciesDisplayName.MWK=\u041a\u0432\u0430\u0447\u0430 (\u043c\u0430\u043b\u0430\u0432\u0438\u0439\u0441\u043a\u0430\u044f)
currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0435\u0430\u043b
currenciesDisplayName.TPE=\u0422\u0438\u043c\u043e\u0440\u0441\u043a\u043e\u0435 \u044d\u0441\u043a\u0443\u0434\u043e
currenciesDisplayName.DEM=\u041d\u0435\u043c\u0435\u0446\u043a\u0430\u044f \u043c\u0430\u0440\u043a\u0430
-currenciesDisplayName.XCD=\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u043e - \u043a\u0430\u0440\u0438\u0431\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.KWD=\u041a\u0443\u0432\u0435\u0439\u0442\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.XCD=\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u043e-\u043a\u0430\u0440\u0438\u0431\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.NPR=\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
-currenciesDisplayName.GWP=\u041f\u0435\u0441\u043e \u0413\u0432\u0438\u043d\u0435\u0438 - \u0411\u0438\u0441\u0430\u0443
+currenciesDisplayName.GWP=\u041f\u0435\u0441\u043e \u0413\u0432\u0438\u043d\u0435\u0438-\u0411\u0438\u0441\u0430\u0443
currenciesDisplayName.YUN=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SVC=\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440\u0441\u043a\u0438\u0439 \u043a\u043e\u043b\u043e\u043d
-currenciesDisplayName.SIT=\u0422\u043e\u043b\u0430\u0440
-currenciesDisplayName.JPY=\u0419\u0435\u043d\u0430
+currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438\u0439 \u0442\u043e\u043b\u0430\u0440
+currenciesDisplayName.JPY=\u042f\u043f\u043e\u043d\u0441\u043a\u0430\u044f \u0438\u0435\u043d\u0430
currenciesDisplayName.XOF=\u0424\u0440\u0430\u043d\u043a \u041a\u0424\u0410 \u0412\u0421\u0415\u0410\u041e
-currenciesDisplayName.MVR=\u0420\u0443\u0444\u0438\u044f
-currenciesDisplayName.TOP=\u041f\u0430\u0430\u043d\u0433\u0430
+currenciesDisplayName.MVR=\u041c\u0430\u043b\u044c\u0434\u0438\u0432\u0441\u043a\u0430\u044f \u0440\u0443\u0444\u0438\u044f
currenciesDisplayName.BEF=\u0411\u0435\u043b\u044c\u0433\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ROL=\u041b\u0435\u0439
-currenciesDisplayName.BDT=\u0422\u0430\u043a\u0430
+currenciesDisplayName.TOP=\u041f\u0430\u0430\u043d\u0433\u0430
+currenciesDisplayName.ROL=\u0420\u0443\u043c\u044b\u043d\u0441\u043a\u0438\u0439 \u043b\u0435\u0439
+currenciesDisplayName.BDT=\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448\u0441\u043a\u0430\u044f \u0442\u0430\u043a\u0430
currenciesDisplayName.AWG=\u0410\u0440\u0443\u0431\u0430\u043d\u0441\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.ZAR=\u0420\u044d\u043d\u0434
currenciesDisplayName.MUR=\u041c\u0430\u0432\u0440\u0438\u043a\u0438\u0439\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
+currenciesDisplayName.ZAR=\u042e\u0436\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0439 \u0440\u044d\u043d\u0434
currenciesDisplayName.SHP=\u0424\u0443\u043d\u0442 \u043e\u0441\u0442\u0440\u043e\u0432\u0430 \u0421\u0432\u044f\u0442\u043e\u0439 \u0415\u043b\u0435\u043d\u044b
currenciesDisplayName.XAU=\u0417\u043e\u043b\u043e\u0442\u043e
-currenciesDisplayName.VND=\u0414\u043e\u043d\u0433
+currenciesDisplayName.VND=\u0412\u044c\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438\u0439 \u0434\u043e\u043d\u0433
currenciesDisplayName.TZS=\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.GIP=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.TND=\u0422\u0443\u043d\u0438\u0441\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.CVE=\u042d\u0441\u043a\u0443\u0434\u043e \u041a\u0430\u0431\u043e - \u0412\u0435\u0440\u0434\u0435
+currenciesDisplayName.CVE=\u042d\u0441\u043a\u0443\u0434\u043e \u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435
currenciesDisplayName.ZMK=\u041a\u0432\u0430\u0447\u0430 (\u0437\u0430\u043c\u0431\u0438\u0439\u0441\u043a\u0430\u044f)
-currenciesDisplayName.XAF=\u0424\u0440\u0430\u043d\u043a \u041a\u0424\u0410 \u0412\u0415\u0410\u0421
currenciesDisplayName.JOD=\u0418\u043e\u0440\u0434\u0430\u043d\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.XAF=\u0424\u0440\u0430\u043d\u043a \u041a\u0424\u0410 \u0412\u0415\u0410\u0421
currenciesDisplayName.LBP=\u041b\u0438\u0432\u0430\u043d\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.UGS=\u0423\u0433\u0430\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.STD=\u0414\u043e\u0431\u0440\u0430
currenciesDisplayName.WST=\u0422\u0430\u043b\u0430
-currenciesDisplayName.KHR=\u0420\u0438\u0435\u043b\u044c
-currenciesDisplayName.DOP=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.KHR=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0438\u0435\u043b\u044c
currenciesDisplayName.EUR=\u0415\u0432\u0440\u043e
-currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.DOP=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.MTL=\u041c\u0430\u043b\u044c\u0442\u0438\u0439\u0441\u043a\u0430\u044f \u043b\u0438\u0440\u0430
-currenciesDisplayName.TMM=\u041c\u0430\u043d\u0430\u0442
+currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u043a\u043e\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.TMM=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u043a\u0438\u0439 \u043c\u0430\u043d\u0430\u0442
currenciesDisplayName.SGD=\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.NZD=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.USD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410
+currenciesDisplayName.HNL=\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u0441\u043a\u0430\u044f \u043b\u0435\u043c\u043f\u0438\u0440\u0430
currenciesDisplayName.BOB=\u0411\u043e\u043b\u0438\u0432\u0438\u0430\u043d\u043e
-currenciesDisplayName.HNL=\u041b\u0435\u043c\u043f\u0438\u0440\u0430
+currenciesDisplayName.PAB=\u041f\u0430\u043d\u0430\u043c\u0441\u043a\u043e\u0435 \u0431\u0430\u043b\u044c\u0431\u043e\u0430
currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0430\u044f \u043b\u0438\u0440\u0430
-currenciesDisplayName.PAB=\u0411\u0430\u043b\u044c\u0431\u043e\u0430
-currenciesDisplayName.GTQ=\u041a\u0435\u0442\u0441\u0430\u043b\u044c
-currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.GHC=\u0421\u0435\u0434\u0438
-currenciesDisplayName.LAK=\u041a\u0438\u043f
+currenciesDisplayName.GTQ=\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u0435\u0442\u0441\u0430\u043b\u044c
currenciesDisplayName.NAD=\u0414\u043e\u043b\u043b\u0430\u0440 \u041d\u0430\u043c\u0438\u0431\u0438\u0438
+currenciesDisplayName.LAK=\u041a\u0438\u043f \u041b\u041d\u0414\u0420
+currenciesDisplayName.GHC=\u0413\u0430\u043d\u0441\u043a\u0438\u0439 \u0441\u0435\u0434\u0438
+currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.KGS=\u0421\u043e\u043c (\u043a\u0438\u0440\u0433\u0438\u0437\u0441\u043a\u0438\u0439)
currenciesDisplayName.MGF=\u041c\u0430\u043b\u0430\u0433\u0430\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.CHF=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.PYG=\u0413\u0443\u0430\u0440\u0430\u043d\u0438
+currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
+currenciesDisplayName.PYG=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\u0441\u043a\u0438\u0439 \u0433\u0443\u0430\u0440\u0430\u043d\u0438
currenciesDisplayName.PLZ=\u0417\u043b\u043e\u0442\u044b\u0439
currenciesDisplayName.YER=\u0419\u0435\u043c\u0435\u043d\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
-currenciesDisplayName.ATS=\u0428\u0438\u043b\u043b\u0438\u043d\u0433
+currenciesDisplayName.ATS=\u0410\u0432\u0441\u0442\u0440\u0438\u0439\u0441\u043a\u0438\u0439 \u0448\u0438\u043b\u043b\u0438\u043d\u0433
currenciesDisplayName.ETB=\u042d\u0444\u0438\u043e\u043f\u0441\u043a\u0438\u0439 \u0431\u044b\u0440
currenciesDisplayName.BND=\u0411\u0440\u0443\u043d\u0435\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.JMD=\u042f\u043c\u0430\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
currenciesDisplayName.PLN=\u041f\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0437\u043b\u043e\u0442\u044b\u0439
+currenciesDisplayName.JMD=\u042f\u043c\u0430\u0439\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
+currenciesDisplayName.EGP=\u0415\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.DZD=\u0410\u043b\u0436\u0438\u0440\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.ISK=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.SRG=\u0421\u0443\u0440\u0438\u043d\u0430\u043c\u0441\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
currenciesDisplayName.LYD=\u041b\u0438\u0432\u0438\u0439\u0441\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.BZD=\u0411\u0435\u043b\u0438\u0437\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.KRW=\u0412\u043e\u043d\u0430
currenciesDisplayName.NLG=\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
-currenciesDisplayName.MRO=\u0423\u0433\u0438\u044f
+currenciesDisplayName.KRW=\u0412\u043e\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u041a\u043e\u0440\u0435\u0438
+currenciesDisplayName.MRO=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u0443\u0433\u0438\u044f
currenciesDisplayName.ZWD=\u0414\u043e\u043b\u043b\u0430\u0440 \u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435
currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u043a\u0430\u044f \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.BYR=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
currenciesDisplayName.IRR=\u0418\u0440\u0430\u043d\u0441\u043a\u0438\u0439 \u0440\u0438\u0430\u043b
currenciesDisplayName.PKR=\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u0440\u0443\u043f\u0438\u044f
currenciesDisplayName.BMD=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440
-currenciesDisplayName.BYL=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1992-1994)
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.TWD=NT$
currenciesSymbol.LKR=SL Re
-currenciesSymbol.BYB=BYB
-currenciesSymbol.TJS=TJS
-currenciesSymbol.RWF=RWF
-currenciesSymbol.ERN=ERN
-currenciesSymbol.TJR=TJR
-currenciesSymbol.GRD=GRD
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.AFA=AFA
-currenciesSymbol.CRC=C
-currenciesSymbol.FKP=FKP
-currenciesSymbol.EEK=EEK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.HKD=HK$
+currenciesSymbol.ZAR=R
+currenciesSymbol.RUR=\u0440.
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.SCR=SR
-currenciesSymbol.VUV=VT
-currenciesSymbol.KPW=KPW
-currenciesSymbol.DKK=DKr
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
currenciesSymbol.IDR=Rp
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.AED=AED
-currenciesSymbol.LVL=LVL
-currenciesSymbol.BWP=BWP
-currenciesSymbol.RUR=\u0440.
-currenciesSymbol.NIO=NIO
-currenciesSymbol.FJD=F$
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUB=RUB
-currenciesSymbol.CDF=CDF
-currenciesSymbol.DJF=DF
-currenciesSymbol.UZS=UZS
+currenciesSymbol.RUB=\u0440\u0443\u0431.
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.ECS=ECS
-currenciesSymbol.THB=THB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.LUF=LUF
-currenciesSymbol.FIM=FIM
+currenciesSymbol.NOK=NKr
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.MNT=Tug
-currenciesSymbol.UAK=UAK
-currenciesSymbol.SAR=SRl
+currenciesSymbol.STD=Db
currenciesSymbol.UAH=\u0433\u0440\u043d.
-currenciesSymbol.HUF=Ft
-currenciesSymbol.QAR=QR
-currenciesSymbol.COP=Col$
-currenciesSymbol.PTE=PTE
-currenciesSymbol.INR=INR
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.LTL=LTL
-currenciesSymbol.AON=AON
-currenciesSymbol.UYP=UYP
-currenciesSymbol.MZM=Mt
-currenciesSymbol.KZT=T
-currenciesSymbol.PGK=PGK
-currenciesSymbol.SYP=LS
-currenciesSymbol.OMR=RO
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.NGN=NGN
-currenciesSymbol.CNY=Y
-currenciesSymbol.GNF=GF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.HTG=HTG
-currenciesSymbol.MYR=RM
-currenciesSymbol.XEU=XEU
-currenciesSymbol.LSL=M
-currenciesSymbol.SLL=SLL
-currenciesSymbol.BHD=BD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.TRL=TL
-currenciesSymbol.KMF=CF
-currenciesSymbol.CZK=CZK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.AZM=AZM
-currenciesSymbol.KYD=KYD
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BGN=BGN
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.VEB=Be
-currenciesSymbol.ILS=ILS
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.GYD=G$
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.SKK=Sk
-currenciesSymbol.XDR=XDR
-currenciesSymbol.PEN=PEN
-currenciesSymbol.LRD=LRD
-currenciesSymbol.AMD=dram
-currenciesSymbol.BSD=BSD
-currenciesSymbol.HRK=HRK
-currenciesSymbol.HRD=HRD
-currenciesSymbol.CLP=Ch$
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRR=BRR
-currenciesSymbol.MKD=MDen
-currenciesSymbol.ALL=lek
-currenciesSymbol.MWK=MK
-currenciesSymbol.BRL=R$
-currenciesSymbol.TPE=TPE
-currenciesSymbol.DEM=DEM
-currenciesSymbol.XCD=EC$
-currenciesSymbol.KWD=KD
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.GWP=GWP
-currenciesSymbol.YUN=YUN
-currenciesSymbol.SVC=SVC
-currenciesSymbol.SIT=SIT
-currenciesSymbol.XOF=XOF
-currenciesSymbol.MVR=MVR
-currenciesSymbol.TOP=T$
-currenciesSymbol.BEF=BF
-currenciesSymbol.ROL=leu
+currenciesSymbol.SAR=SRl
+currenciesSymbol.FJD=F$
currenciesSymbol.BDT=Tk
-currenciesSymbol.AWG=AWG
-currenciesSymbol.NOK=NKr
-currenciesSymbol.ZAR=R
-currenciesSymbol.MUR=MUR
-currenciesSymbol.SHP=SHP
-currenciesSymbol.XAU=XAU
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.GIP=GIP
-currenciesSymbol.TND=TND
-currenciesSymbol.CVE=CVEsc
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAF=XAF
-currenciesSymbol.JOD=JD
+currenciesSymbol.QAR=QR
currenciesSymbol.LBP=LL
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.WST=WST
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
currenciesSymbol.KHR=CR
-currenciesSymbol.DOP=RD$
-currenciesSymbol.CUP=CUP
+currenciesSymbol.SYP=LS
currenciesSymbol.MTL=Lm
-currenciesSymbol.TMM=TMM
-currenciesSymbol.SGD=S$
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
+currenciesSymbol.CVE=CVEsc
+currenciesSymbol.HUF=Ft
currenciesSymbol.NZD=$NZ
-currenciesSymbol.USD=US$
-currenciesSymbol.BOB=Bs
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
+currenciesSymbol.DOP=RD$
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.PAB=PAB
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
+currenciesSymbol.BIF=Fbu
+currenciesSymbol.PLN=Zl
+currenciesSymbol.GNF=GF
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
+currenciesSymbol.KMF=CF
+currenciesSymbol.SEK=SKr
currenciesSymbol.AUD=$A
-currenciesSymbol.GHC=GHC
-currenciesSymbol.LAK=LAK
-currenciesSymbol.NAD=N$
-currenciesSymbol.KGS=som
-currenciesSymbol.MGF=MGF
-currenciesSymbol.BBD=BDS$
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
+currenciesSymbol.SKK=Sk
currenciesSymbol.CHF=SwF
-currenciesSymbol.PYG=PYG
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.YER=YRl
-currenciesSymbol.ATS=ATS
currenciesSymbol.ETB=Br
-currenciesSymbol.BND=BND
-currenciesSymbol.EGP=EGP
-currenciesSymbol.JMD=J$
-currenciesSymbol.PLN=Zl
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
currenciesSymbol.DZD=DA
-currenciesSymbol.ISK=ISK
-currenciesSymbol.SRG=Sf
-currenciesSymbol.LYD=LD
+currenciesSymbol.ANG=NA f.
currenciesSymbol.BZD=BZ$
-currenciesSymbol.KRW=KRW
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.SEK=SKr
-currenciesSymbol.BYR=Rbl
currenciesSymbol.IRR=RI
-currenciesSymbol.PKR=Pra
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.BYL=BYL
+currenciesSymbol.GYD=G$
+currenciesSymbol.CAD=Can$
shortMonths=\u044f\u043d\u0432.®\u0444\u0435\u0432\u0440.®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440.®\u043c\u0430\u0439®\u0438\u044e\u043d\u044c®\u0438\u044e\u043b\u044c®\u0430\u0432\u0433.®\u0441\u0435\u043d\u0442.®\u043e\u043a\u0442.®\u043d\u043e\u044f\u0431.®\u0434\u0435\u043a.®®
months=\u042f\u043d\u0432\u0430\u0440\u044c®\u0424\u0435\u0432\u0440\u0430\u043b\u044c®\u041c\u0430\u0440\u0442®\u0410\u043f\u0440\u0435\u043b\u044c®\u041c\u0430\u0439®\u0418\u044e\u043d\u044c®\u0418\u044e\u043b\u044c®\u0410\u0432\u0433\u0443\u0441\u0442®\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c®\u041e\u043a\u0442\u044f\u0431\u0440\u044c®\u041d\u043e\u044f\u0431\u0440\u044c®\u0414\u0435\u043a\u0430\u0431\u0440\u044c®®
shortWeekdays=®\u0412\u0441®\u041f\u043d®\u0412\u0442®\u0421\u0440®\u0427\u0442®\u041f\u0442®\u0421\u0431®
@@ -414,7 +331,9 @@ territories.GN=\u0413\u0432\u0438\u043d\u0435\u044f
territories.GM=\u0413\u0430\u043c\u0431\u0438\u044f
territories.GL=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f
territories.SV=\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440
+territories.062=\u042e\u0436\u043d\u0430\u044f \u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0410\u0437\u0438\u044f
territories.ST=\u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438
+territories.061=\u041f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u044f
territories.GI=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440
territories.GH=\u0413\u0430\u043d\u0430
territories.SR=\u0421\u0443\u0440\u0438\u043d\u0430\u043c
@@ -438,9 +357,12 @@ territories.SC=\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u043a\u0438\u043
territories.SB=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430
territories.SA=\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f
territories.FR=\u0424\u0440\u0430\u043d\u0446\u0438\u044f
+territories.057=\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u044f
territories.FO=\u0424\u0430\u0440\u0435\u0440\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430
territories.FM=\u0424\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u043e \u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u044f
territories.RW=\u0420\u0443\u0430\u043d\u0434\u0430
+territories.054=\u041c\u0435\u043b\u0430\u043d\u0435\u0437\u0438\u044f
+territories.053=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f \u0438 \u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f
territories.FK=\u0424\u043e\u043b\u044c\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430
territories.RU=\u0420\u043e\u0441\u0441\u0438\u044f
territories.FJ=\u0424\u0438\u0434\u0436\u0438
@@ -450,20 +372,26 @@ territories.RE=\u0420\u0435\u044e\u043d\u044c\u043e\u043d
territories.ET=\u042d\u0444\u0438\u043e\u043f\u0438\u044f
territories.ES=\u0418\u0441\u043f\u0430\u043d\u0438\u044f
territories.ER=\u042d\u0440\u0438\u0442\u0440\u0435\u044f
+territories.833=\u041c\u044d\u043d, \u043e\u0441\u0442\u0440\u043e\u0432
territories.EH=\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430
territories.EG=\u0415\u0433\u0438\u043f\u0435\u0442
+territories.830=\u041d\u043e\u0440\u043c\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430
territories.EE=\u042d\u0441\u0442\u043e\u043d\u0438\u044f
+territories.QO=\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u0430\u044f \u041e\u043a\u0435\u0430\u043d\u0438\u044f
territories.EC=\u042d\u043a\u0432\u0430\u0434\u043e\u0440
territories.DZ=\u0410\u043b\u0436\u0438\u0440
territories.QA=\u041a\u0430\u0442\u0430\u0440
+territories.039=\u042e\u0436\u043d\u0430\u044f \u0415\u0432\u0440\u043e\u043f\u0430
territories.DO=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430
territories.PY=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439
+territories.035=\u042e\u0433\u043e-\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u0430\u044f \u0410\u0437\u0438\u044f
territories.DM=\u041e\u0441\u0442\u0440\u043e\u0432 \u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430
territories.PW=\u041f\u0430\u043b\u0430\u0443
territories.DK=\u0414\u0430\u043d\u0438\u044f
territories.DJ=\u0414\u0436\u0438\u0431\u0443\u0442\u0438
territories.PT=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f
territories.PS=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0430\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u0438\u044f
+territories.030=\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u0430\u044f \u0410\u0437\u0438\u044f
territories.PR=\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e
territories.DE=\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f
territories.PN=\u041e\u0441\u0442\u0440\u043e\u0432 \u041f\u0438\u0442\u043a\u044d\u0440\u043d
@@ -480,13 +408,16 @@ territories.CX=\u041e\u0441\u0442\u0440\u043e\u0432 \u0420\u043e\u0436\u0434\u04
territories.CV=\u041e\u0441\u0442\u0440\u043e\u0432\u0430 \u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u041c\u044b\u0441\u0430
territories.PA=\u041f\u0430\u043d\u0430\u043c\u0430
territories.CU=\u041a\u0443\u0431\u0430
+territories.CS=\u0421\u0435\u0440\u0431\u0438\u044f \u0438 \u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f
territories.CR=\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430
+territories.029=\u041a\u0430\u0440\u0438\u0431\u044b
territories.CO=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f
territories.CN=\u041a\u0438\u0442\u0430\u0439
territories.CM=\u041a\u0430\u043c\u0435\u0440\u0443\u043d
territories.CL=\u0427\u0438\u043b\u0438
territories.CK=\u041e\u0441\u0442\u0440\u043e\u0432\u0430 \u041a\u0443\u043a\u0430
territories.CI=\u041a\u043e\u0442 \u0434\u2019\u0418\u0432\u0443\u0430\u0440
+territories.021=\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.CH=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f
territories.CG=\u041a\u043e\u043d\u0433\u043e
territories.CF=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430
@@ -501,13 +432,20 @@ territories.BV=\u041e\u0441\u0442\u0440\u043e\u0432 \u0411\u0443\u0432\u0435
territories.BT=\u0411\u0443\u0442\u0430\u043d
territories.BS=\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430
territories.BR=\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f
+territories.019=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u042e\u0436\u043d\u0430\u044f \u0410\u043c\u0435\u0440\u0438\u043a\u0430
+territories.018=\u042e\u0436\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
territories.NZ=\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f
territories.BO=\u0411\u043e\u043b\u0438\u0432\u0438\u044f
+territories.017=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
territories.BN=\u0411\u0440\u0443\u043d\u0435\u0439 \u0414\u0430\u0440\u0443\u0441\u0441\u0430\u043b\u0430\u043c
territories.BM=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430
+territories.015=\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
+territories.014=\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
+territories.013=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.NU=\u041d\u0438\u0443\u0435
territories.BJ=\u0411\u0435\u043d\u0438\u043d
territories.BI=\u0411\u0443\u0440\u0443\u043d\u0434\u0438
+territories.011=\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
territories.BH=\u0411\u0430\u0445\u0440\u0435\u0439\u043d
territories.NR=\u041d\u0430\u0443\u0440\u0443
territories.BG=\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f
@@ -525,6 +463,7 @@ territories.NG=\u041d\u0438\u0433\u0435\u0440\u0438\u044f
territories.NF=\u041e\u0441\u0442\u0440\u043e\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a
territories.AZ=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d
territories.NE=\u041d\u0438\u0433\u0435\u0440
+territories.AX=\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430
territories.NC=\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f
territories.AW=\u0410\u0440\u0443\u0431\u0430
territories.ZM=\u0417\u0430\u043c\u0431\u0438\u044f
@@ -533,19 +472,23 @@ territories.AU=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f
territories.AT=\u0410\u0432\u0441\u0442\u0440\u0438\u044f
territories.AS=\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u0421\u0430\u043c\u043e\u0430
territories.AR=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430
+territories.009=\u041e\u043a\u0435\u0430\u043d\u0438\u044f
territories.AQ=\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430
territories.MZ=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a
territories.AO=\u0410\u043d\u0433\u043e\u043b\u0430
territories.MY=\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f
territories.AN=\u0413\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u0410\u043d\u0442\u0438\u043b\u044c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430
territories.MX=\u041c\u0435\u043a\u0441\u0438\u043a\u0430
+territories.005=\u042e\u0436\u043d\u0430\u044f \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.AM=\u0410\u0440\u043c\u0435\u043d\u0438\u044f
territories.MW=\u041c\u0430\u043b\u0430\u0432\u0438
territories.AL=\u0410\u043b\u0431\u0430\u043d\u0438\u044f
territories.MV=\u041c\u0430\u043b\u044c\u0434\u0438\u0432\u044b
territories.ZA=\u042e\u0436\u043d\u0430\u044f \u0410\u0444\u0440\u0438\u043a\u0430
territories.MU=\u041c\u0430\u0432\u0440\u0438\u043a\u0438\u0439
+territories.002=\u0410\u0444\u0440\u0438\u043a\u0430
territories.MT=\u041c\u0430\u043b\u044c\u0442\u0430
+territories.001=\u0412\u0441\u0435\u043c\u0438\u0440\u043d\u043e\u0435
territories.AI=\u0410\u043d\u0433\u0443\u0438\u043b\u043b\u0430
territories.MS=\u041c\u043e\u043d\u0441\u0435\u0440\u0440\u0430\u0442
territories.MR=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f
@@ -557,10 +500,9 @@ territories.AE=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044
territories.MO=\u041c\u0430\u043a\u0430\u043e (\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0441 \u041e\u0441\u043e\u0431\u044b\u043c \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u041a\u0438\u0442\u0430\u0439)
territories.AD=\u0410\u043d\u0434\u043e\u0440\u0440\u0430
territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f
-territories.MM=\u041c\u0430\u0439\u0430\u043d\u043c\u0430\u0440
+territories.MM=\u041c\u044c\u044f\u043d\u043c\u0430
territories.ML=\u041c\u0430\u043b\u0438
territories.MK=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f
-territories.YU=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0438\u044f
territories.YT=\u041c\u0430\u0439\u043e\u0442\u0442\u0430
territories.MH=\u041c\u0430\u0440\u0448\u0430\u043b\u043b\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430
territories.MG=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
@@ -570,10 +512,14 @@ territories.MA=\u041c\u0430\u0440\u043e\u043a\u043a\u043e
territories.YE=\u0419\u0435\u043c\u0435\u043d
territories.LY=\u041b\u0438\u0432\u0438\u044f
territories.LV=\u041b\u0430\u0442\u0432\u0438\u044f
+territories.155=\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0415\u0432\u0440\u043e\u043f\u0430
territories.LU=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433
+territories.154=\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0415\u0432\u0440\u043e\u043f\u0430
territories.LT=\u041b\u0438\u0442\u0432\u0430
territories.LS=\u041b\u0435\u0441\u043e\u0442\u043e
territories.LR=\u041b\u0438\u0431\u0435\u0440\u0438\u044f
+territories.151=\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u0430\u044f \u0415\u0432\u0440\u043e\u043f\u0430
+territories.150=\u0415\u0432\u0440\u043e\u043f\u0430
territories.LK=\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430
territories.LI=\u041b\u0438\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d
territories.LC=\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0438\u044f
@@ -582,6 +528,8 @@ territories.LA=\u041b\u0430\u043e\u0441
territories.KZ=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d
territories.KY=\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430
territories.KW=\u041a\u0443\u0432\u0435\u0439\u0442
+territories.145=\u0411\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0412\u043e\u0441\u0442\u043e\u043a
+territories.142=\u0410\u0437\u0438\u044f
territories.KR=\u042e\u0436\u043d\u0430\u044f \u041a\u043e\u0440\u0435\u044f
territories.KP=\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u041a\u043e\u0440\u0435\u044f
territories.KN=\u0421\u0435\u043d\u0442-\u041a\u0438\u0442\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441
@@ -631,357 +579,357 @@ territories.TR=\u0422\u0443\u0440\u0446\u0438\u044f
territories.TO=\u0422\u043e\u043d\u0433\u0430
territories.TN=\u0422\u0443\u043d\u0438\u0441
territories.TM=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d
-languages.akk=\u0410\u043a\u043a\u0430\u0434\u0441\u043a\u0438\u0439
-languages.eka=\u042d\u043a\u0430\u0434\u0436\u0443\u043a
-languages.ijo=\u0418\u0434\u0436\u043e
-languages.xh=\u0425\u043e\u0437\u0430
-languages.sux=\u0428\u0443\u043c\u0435\u0440\u0441\u043a\u0438\u0439
-languages.sus=\u0421\u0443\u0441\u0443
-languages.mis=\u0421\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.loz=\u041b\u043e\u0437\u0438
-languages.tog=\u0422\u043e\u043d\u0433\u0430 (\u041d\u044c\u044f\u0441\u0430)
-languages.pon=\u041f\u043e\u043d\u0430\u043f\u0435
-languages.min=\u041c\u0438\u043d\u0430\u043d\u0433\u043a\u0430\u0431\u0430\u0443
-languages.suk=\u0421\u0443\u043a\u0443\u043c\u0430
-languages.wo=\u0412\u043e\u043b\u043e\u0444
-languages.lol=\u041c\u043e\u043d\u0433\u043e
-languages.kut=\u041a\u0443\u0442\u0435\u043d\u0430\u0438
-languages.mic=\u041c\u0438\u043a\u043c\u0430\u043a
-languages.kum=\u041a\u0443\u043c\u044b\u043a\u0441\u043a\u0438\u0439
-languages.zap=\u0421\u0430\u043f\u043e\u0442\u0435\u043a\u0441\u043a\u0438\u0439
-languages.cus=\u041a\u0443\u0448\u0438\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.doi=\u0414\u043e\u0433\u0440\u0438
-languages.vo=\u0412\u043e\u043b\u0430\u043f\u0430\u043a
-languages.oto=\u041e\u0442\u043e\u043c\u0430\u043d\u0433\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.vi=\u0412\u044c\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438\u0439
-languages.vai=\u0412\u0430\u0438
-languages.raj=\u0420\u0430\u0434\u0436\u0430\u0441\u0442\u0445\u0430\u043d\u0438
-languages.ota=\u0421\u0442\u0430\u0440\u043e\u0442\u0443\u0440\u0435\u0446\u043a\u0438\u0439
-languages.nzi=\u041d\u0437\u0438\u043c\u0430
-languages.uz=\u0423\u0437\u0431\u0435\u043a\u0441\u043a\u0438\u0439
-languages.uga=\u0423\u0433\u0430\u0440\u0438\u0442\u0441\u043a\u0438\u0439
-languages.tmh=\u0422\u0430\u043c\u0430\u0448\u0435\u043a
-languages.nai=\u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.nah=\u0410\u0446\u0442\u0435\u043a\u0441\u043a\u0438\u0439
-languages.ur=\u0423\u0440\u0434\u0443
-languages.fat=\u0424\u0430\u043d\u0442\u0438
-languages.uk=\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0439
-languages.egy=\u0414\u0440\u0435\u0432\u043d\u0435\u0435\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0438\u0439
-languages.ug=\u0423\u0439\u0433\u0443\u0440\u0441\u043a\u0438\u0439
-languages.fan=\u0424\u0430\u043d\u0433
-languages.ssa=\u041d\u0438\u043b\u043e-\u0441\u0430\u0445\u0430\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.mga=\u0421\u0440\u0435\u0434\u043d\u0435\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.bat=\u0411\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.nyo=\u041d\u044c\u043e\u0440\u043e
-languages.bas=\u0411\u0430\u0441\u0430
-languages.nyn=\u041d\u044c\u044f\u043d\u043a\u043e\u043b\u0435
-languages.nym=\u041d\u044c\u044f\u043c\u0432\u0435\u0437\u0438
-languages.ban=\u0411\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-languages.osa=\u041e\u0441\u0435\u0434\u0436\u0438
-languages.bal=\u0411\u0435\u043b\u0443\u0434\u0436\u0441\u043a\u0438\u0439
-languages.bai=\u0411\u0430\u043c\u0438\u043b\u0435\u043a\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.tw=\u0422\u0432\u0438
-languages.tli=\u0422\u043b\u0438\u043d\u0433\u0438\u0442
-languages.tt=\u0422\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439
-languages.ts=\u0422\u0441\u043e\u043d\u0433\u0430
-languages.bad=\u0411\u0430\u043d\u0434\u0430
-languages.tr=\u0422\u0443\u0440\u0435\u0446\u043a\u0438\u0439
-languages.to=\u0422\u043e\u043d\u0433\u0430
-languages.tn=\u0421\u0435\u0442\u0441\u0432\u0430\u043d\u0430
-languages.tl=\u0422\u0430\u0433\u0430\u043b\u043e\u0433
-languages.tk=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u043a\u0438\u0439
-languages.ti=\u0422\u0438\u0433\u0440\u0438\u043d\u0438\u0430
-languages.th=\u0422\u0430\u0439\u0441\u043a\u0438\u0439
-languages.tg=\u0422\u0430\u0434\u0436\u0438\u043a\u0441\u043a\u0438\u0439
-languages.te=\u0422\u0435\u043b\u0443\u0433\u0443
-languages.kro=\u041a\u0440\u0443
-languages.ta=\u0422\u0430\u043c\u0438\u043b\u044c\u0441\u043a\u0438\u0439
-languages.efi=\u042d\u0444\u0438\u043a
-languages.sw=\u0421\u0443\u0430\u0445\u0438\u043b\u0438
-languages.sv=\u0428\u0432\u0435\u0434\u0441\u043a\u0438\u0439
-languages.su=\u0421\u0430\u043d\u0434\u0430\u043d\u0438\u0437\u0441\u043a\u0438\u0439
-languages.st=\u0421\u0435\u0441\u043e\u0442\u043e
-languages.ss=\u0421\u0438\u0441\u0432\u0430\u0442\u0438
-languages.sr=\u0421\u0435\u0440\u0431\u0441\u043a\u0438\u0439
-languages.sq=\u0410\u043b\u0431\u0430\u043d\u0441\u043a\u0438\u0439
-languages.men=\u041c\u0435\u043d\u0434\u0435
-languages.crp=\u041a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.so=\u0421\u043e\u043c\u0430\u043b\u0438
-languages.afh=\u0410\u0444\u0440\u0438\u0445\u0438\u043b\u0438
-languages.sn=\u0428\u043e\u043d\u0430
-languages.sm=\u0421\u0430\u043c\u043e\u0430
-languages.grc=\u0414\u0440\u0435\u0432\u043d\u0435\u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439
-languages.sl=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438\u0439
-languages.sk=\u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439
-languages.si=\u0421\u0438\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
-languages.afa=\u0410\u0444\u0440\u0430\u0437\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.sh=\u0421\u0435\u0440\u0431\u0441\u043a\u043e-\u0445\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439
-languages.sg=\u0421\u0430\u043d\u0433\u043e
-languages.sd=\u0421\u0438\u043d\u0434\u0438
-languages.sa=\u0421\u0430\u043d\u0441\u043a\u0440\u0438\u0442
-languages.rw=\u041a\u0438\u043d\u044f\u0440\u0432\u0430\u043d\u0434\u0430
-languages.ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439
-languages.ro=\u0420\u0443\u043c\u044b\u043d\u0441\u043a\u0438\u0439
-languages.rn=\u041a\u0438\u0440\u0443\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u0439
-languages.rm=\u0420\u0430\u0435\u0442\u043e-\u0440\u043e\u043c\u0430\u043d\u0441\u043a\u0438\u0439
-languages.tiv=\u0422\u0438\u0432\u0438
-languages.ady=\u0410\u0434\u044b\u0433\u0435\u0439\u0441\u043a\u0438\u0439
-languages.zun=\u0417\u0443\u043d\u044c\u0438
-languages.kpe=\u041a\u043f\u0435\u043b\u043b\u0435
-languages.qu=\u041a\u0435\u0447\u0443\u0430
-languages.tig=\u0422\u0438\u0433\u0440\u0435
-languages.cpp=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u043e\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.sog=\u0421\u043e\u0433\u0434\u0438\u0439\u0441\u043a\u0438\u0439
-languages.ada=\u0410\u0434\u0430\u043d\u0433\u043c\u0435
-languages.cpf=\u0424\u0440\u0430\u043d\u043a\u043e-\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.cpe=\u0410\u043d\u0433\u043b\u043e-\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.him=\u0425\u0438\u043c\u0430\u0447\u0430\u043b\u0438
-languages.kok=\u041a\u043e\u043d\u043a\u0430\u043d\u0438
-languages.hil=\u0425\u0438\u043b\u0438\u0433\u0430\u0439\u043d\u043e\u043d
-languages.got=\u0413\u043e\u0442\u0441\u043a\u0438\u0439
-languages.gon=\u0413\u043e\u043d\u0434\u0438
-languages.din=\u0414\u0438\u043d\u043a\u0430
-languages.nub=\u041d\u0443\u0431\u0438\u0439\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.pt=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
-languages.ps=\u041f\u0430\u0448\u0442\u043e (\u041f\u0443\u0448\u0442\u043e)
-languages.phn=\u0424\u0438\u043d\u0438\u043a\u0438\u0439\u0441\u043a\u0438\u0439
-languages.goh=\u0421\u0442\u0430\u0440\u043e\u0432\u0435\u0440\u0445\u043d\u0435\u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
-languages.cop=\u041a\u043e\u043f\u0442\u0441\u043a\u0438\u0439
-languages.yap=\u042f\u043f
-languages.ach=\u0410\u0447\u043e\u043b\u0438
-languages.yao=\u042f\u043e
-languages.ace=\u0410\u0447\u0435\u0445\u0441\u043a\u0438\u0439
-languages.pl=\u041f\u043e\u043b\u044c\u0441\u043a\u0438\u0439
-languages.pi=\u041f\u0430\u043b\u0438
-languages.pa=\u041f\u0430\u043d\u0434\u0436\u0430\u0431\u0441\u043a\u0438\u0439
-languages.bug=\u0411\u0443\u0433\u0438\u0439\u0441\u043a\u0438\u0439
-languages.iba=\u0418\u0431\u0430\u043d\u0441\u043a\u0438\u0439
-languages.bua=\u0411\u0443\u0440\u044f\u0442\u0441\u043a\u0438\u0439
-languages.mas=\u041c\u0430\u0441\u0430\u0438
-languages.map=\u0410\u0432\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.os=\u041e\u0441\u0435\u0442\u0438\u043d\u0441\u043a\u0438\u0439
-languages.or=\u041e\u0440\u0438\u044f
-languages.man=\u041c\u0430\u043d\u0434\u0438\u043d\u0433\u043e
-languages.smi=\u0421\u0430\u0430\u043c\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.mak=\u041c\u0430\u043a\u0430\u0441\u0441\u0430\u0440\u0441\u043a\u0438\u0439
-languages.om=\u041e\u0440\u043e\u043c\u043e (\u0410\u0444\u0430\u043d)
-languages.mai=\u041c\u0430\u0439\u0442\u0445\u0438\u043b\u0438
-languages.mag=\u041c\u0430\u0433\u0430\u0445\u0438
-languages.oj=\u041e\u0434\u0436\u0438\u0431\u0432\u0430
-languages.mad=\u041c\u0430\u0434\u0443\u0440\u0441\u043a\u0438\u0439
-languages.nso=\u0421\u043e\u0442\u043e \u0421\u0435\u0432\u0435\u0440\u043d\u044b\u0439
-languages.oc=\u041e\u043a\u0438\u0442\u0430\u043d
-languages.myn=\u041c\u0430\u0439\u044f \u044f\u0437\u044b\u043a\u0438
-languages.gmh=\u0421\u0440\u0435\u0434\u043d\u0435\u0432\u0435\u0440\u0445\u043d\u0435\u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
-languages.no=\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439
-languages.nl=\u0413\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.sla=\u0421\u043b\u0430\u0432\u044f\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.ne=\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u043a\u0438\u0439
-languages.na=\u041d\u0430\u0443\u0440\u0443
-languages.ter=\u0422\u0435\u0440\u0435\u043d\u043e
-languages.my=\u0411\u0438\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u0439
-languages.lez=\u041b\u0435\u0437\u0433\u0438\u043d\u0441\u043a\u0438\u0439
-languages.mt=\u041c\u0430\u043b\u044c\u0442\u0438\u0439\u0441\u043a\u0438\u0439
-languages.peo=\u0421\u0442\u0430\u0440\u043e\u043f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
-languages.ms=\u041c\u0430\u043b\u0430\u0439\u0441\u043a\u0438\u0439
-languages.mr=\u041c\u0430\u0440\u0430\u0442\u0438\u0439\u0441\u043a\u0438\u0439
-languages.fro=\u0421\u0442\u0430\u0440\u043e\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
-languages.mo=\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438\u0439
-languages.frm=\u0421\u0440\u0435\u0434\u043d\u0435\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
-languages.mn=\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u043a\u0438\u0439
-languages.jrb=\u0415\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u0430\u0440\u0430\u0431\u0441\u043a\u0438\u0439
-languages.ml=\u041c\u0430\u043b\u0430\u044f\u043b\u0430\u043c
-languages.mk=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438\u0439
-languages.mi=\u041c\u0430\u043e\u0440\u0438
-languages.mg=\u041c\u0430\u043b\u0430\u0433\u0430\u0441\u0438\u0439\u0441\u043a\u0438\u0439
-languages.mwr=\u041c\u0430\u0440\u0432\u0430\u0440\u0438
-languages.bra=\u0411\u0440\u0430\u0443\u0438
-languages.lv=\u041b\u0430\u0442\u0432\u0438\u0439\u0441\u043a\u0438\u0439
-languages.lu=\u041b\u0443\u0431\u0430-\u041a\u0430\u0442\u0430\u043d\u0433\u0430
-languages.del=\u0414\u0435\u043b\u0430\u0432\u0430\u0440\u0441\u043a\u0438\u0439
-languages.lt=\u041b\u0438\u0442\u043e\u0432\u0441\u043a\u0438\u0439
-languages.lo=\u041b\u0430\u043e\u0441\u0441\u043a\u0438\u0439
-languages.ln=\u041b\u0438\u043d\u0433\u0430\u043b\u0430
-languages.ewo=\u042d\u0432\u043e\u043d\u0434\u043e
-languages.la=\u041b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0439
-languages.jpr=\u0415\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u043f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
-languages.vot=\u0423\u0434\u043c\u0443\u0440\u0442\u0441\u043a\u0438\u0439 (\u0412\u043e\u0442\u044f\u0446\u043a\u0438\u0439)
-languages.ky=\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u043a\u0438\u0439
-languages.sit=\u0421\u0438\u043d\u043e\u0442\u0438\u0431\u0435\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.ku=\u041a\u0443\u0440\u0434\u0438\u0448
-languages.sio=\u0421\u0438\u0443 \u044f\u0437\u044b\u043a\u0438
-languages.ks=\u041a\u0430\u0448\u043c\u0438\u0440\u0441\u043a\u0438\u0439
-languages.awa=\u0410\u0432\u0430\u0434\u0445\u0438
-languages.ko=\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\u0439
-languages.kn=\u041a\u0430\u043d\u0430\u0434\u0430
-languages.km=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0438\u0439\u0441\u043a\u0438\u0439
-languages.kl=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.kk=\u041a\u0430\u0437\u0430\u0445\u0441\u043a\u0438\u0439
-languages.rom=\u0426\u044b\u0433\u0430\u043d\u0441\u043a\u0438\u0439
-languages.sid=\u0421\u0438\u0434\u0430\u043c\u0430
-languages.non=\u0421\u0442\u0430\u0440\u043e\u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439
-languages.ka=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\u0439
-languages.mus=\u041a\u0440\u0438\u043a
-languages.roa=\u0420\u043e\u043c\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.nog=\u041d\u043e\u0433\u0430\u0439\u0441\u043a\u0438\u0439
-languages.mun=\u041c\u0443\u043d\u0434\u0430 \u044f\u0437\u044b\u043a\u0438
-languages.mul=\u0420\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u043c\u0435\u0439 \u044f\u0437\u044b\u043a\u0438
-languages.jv=\u042f\u0432\u0430\u043d\u0441\u043a\u0438\u0439
-languages.gil=\u0413\u0438\u043b\u044c\u0431\u0435\u0440\u0442\u0441\u043a\u0438\u0439
-languages.shn=\u0428\u0430\u043d\u0441\u043a\u0438\u0439
-languages.fon=\u0424\u043e\u043d
-languages.kho=\u0425\u043e\u0442\u0430\u043d\u0441\u043a\u0438\u0439
-languages.ja=\u042f\u043f\u043e\u043d\u0441\u043a\u0438\u0439
-languages.khi=\u041a\u043e\u0439\u0441\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.pau=\u041f\u0430\u043b\u0430\u0443
-languages.chy=\u0427\u0435\u0439\u0435\u043d\u043d
-languages.tai=\u0422\u0430\u0442\u0441\u043a\u0438\u0439
-languages.iu=\u0418\u043d\u0430\u043a\u0442\u0438\u0442\u0443\u0442
-languages.it=\u0418\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0439
-languages.pap=\u041f\u0430\u043f\u044c\u044f\u043c\u0435\u043d\u0442\u043e
-languages.is=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.kha=\u041a\u0445\u0430\u0441\u0438
-languages.chr=\u0427\u0435\u0440\u043e\u043a\u0438
-languages.pam=\u041f\u0430\u043c\u043f\u0430\u043d\u0433\u0430
-languages.pal=\u041f\u0435\u0445\u043b\u0435\u0432\u0438\u0439\u0441\u043a\u0438\u0439
-languages.cho=\u0427\u043e\u043a\u0442\u0430\u0432
-languages.chn=\u0427\u0438\u043d\u0443\u043a \u0436\u0430\u0440\u0433\u043e\u043d
-languages.chm=\u041c\u0430\u0440\u0438\u0439\u0441\u043a\u0438\u0439 (\u0427\u0435\u0440\u0435\u043c\u0438\u0441\u0441\u043a\u0438\u0439)
-languages.tyv=\u0422\u0443\u0432\u0438\u043d\u0441\u043a\u0438\u0439
-languages.bnt=\u0411\u0430\u043d\u0442\u0443 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.ik=\u0418\u043d\u0430\u043f\u0438\u0430\u043a
-languages.pag=\u041f\u0430\u043d\u0433\u0430\u0441\u0438\u043d\u0430\u043d
-languages.chk=\u0427\u0443\u043a\u043e\u0442\u0441\u043a\u0438\u0439
-languages.haw=\u0413\u0430\u0432\u0430\u0439\u0441\u043a\u0438\u0439
-languages.lam=\u041b\u0430\u043c\u0431\u0430
-languages.chg=\u0427\u0430\u0433\u0430\u0442\u0430\u0439\u0441\u043a\u0438\u0439
-languages.sga=\u0421\u0442\u0430\u0440\u043e\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.ie=\u0421\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a
-languages.paa=\u041f\u0430\u043f\u0443\u0430\u0441\u0441\u043a\u043e-\u0430\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.id=\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438\u0439
-languages.lah=\u041b\u0430\u0445\u043d\u0434\u0430
-languages.chb=\u0427\u0438\u0431\u0447\u0430
-languages.ia=\u0421\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a
-languages.lad=\u041b\u0430\u0434\u0438\u043d\u043e
-languages.hai=\u0425\u0430\u0439\u0434\u0430
-languages.hy=\u0410\u0440\u043c\u044f\u043d\u0441\u043a\u0438\u0439
-languages.ath=\u0410\u0442\u0430\u043f\u0430\u0447\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.hu=\u0412\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439
-languages.dak=\u0414\u0430\u043a\u043e\u0442\u0430
-languages.hr=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439
-languages.hi=\u0425\u0438\u043d\u0434\u0438
-languages.dyu=\u0414\u0438\u0443\u043b\u0430 (\u0414\u044c\u044e\u043b\u0430)
-languages.he=\u0418\u0432\u0440\u0438\u0442
-languages.ha=\u0425\u043e\u0441\u0430
-languages.wen=\u041b\u0443\u0436\u0438\u0446\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.gu=\u0413\u0443\u044f\u0440\u0430\u0442\u0438
-languages.sem=\u0421\u0435\u043c\u0438\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.iro=\u0418\u0440\u043e\u043a\u0435\u0437\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.sel=\u0421\u0435\u043b\u044c\u043a\u0443\u043f\u0441\u043a\u0438\u0439
-languages.gn=\u0413\u0443\u0430\u0440\u0430\u043d\u0438
-languages.gl=\u0413\u0430\u043b\u0438\u0446\u0438\u0439\u0441\u043a\u0438\u0439
-languages.arw=\u0410\u0440\u0430\u0432\u0430\u043a\u0441\u043a\u0438\u0439
-languages.gez=\u0413\u0435\u044d\u0437
-languages.art=\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.gd=\u0413\u0430\u044d\u043b\u044c\u0441\u043a\u0438\u0439
-languages.ira=\u0418\u0440\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.ga=\u0418\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
-languages.fy=\u0424\u0440\u0438\u0437\u0441\u043a\u0438\u0439
-languages.bla=\u0421\u0438\u043a\u0441\u0438\u043a\u0430
-languages.gem=\u0413\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.arc=\u0410\u0440\u0430\u043c\u0435\u0439\u0441\u043a\u0438\u0439
-languages.fr=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
-languages.fo=\u0424\u0430\u0440\u0435\u0440\u0441\u043a\u0438\u0439
-languages.fj=\u0424\u0438\u0434\u0436\u0438
-languages.fi=\u0424\u0438\u043d\u0441\u043a\u0438\u0439
-languages.fa=\u041f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
-languages.eu=\u0411\u0430\u0441\u043a\u0441\u043a\u0438\u0439
-languages.et=\u042d\u0441\u0442\u043e\u043d\u0441\u043a\u0438\u0439
-languages.es=\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438\u0439
-languages.eo=\u042d\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e
-languages.en=\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-languages.el=\u0413\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439
-languages.tut=\u0410\u043b\u0442\u0430\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.niu=\u041d\u0438\u0443\u044d
-languages.mos=\u041c\u043e\u0435\u0439
-languages.dz=\u0411\u0443\u0442\u0430\u043d\u0441\u043a\u0438\u0439
-languages.nic=\u041d\u0438\u0433\u0435\u0440-\u043a\u043e\u0440\u0434\u043e\u0444\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.fiu=\u0424\u0438\u043d\u043d\u043e-\u0443\u0433\u043e\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.moh=\u041c\u043e\u0445\u0430\u0443\u043a
-languages.luo=\u041b\u0443\u043e (\u041a\u0435\u043d\u0438\u044f \u0438 \u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f)
-languages.lun=\u041b\u0443\u043d\u0434\u0430
-languages.lui=\u041b\u0443\u0438\u0441\u0435\u043d\u044c\u043e
-languages.hup=\u0425\u0443\u043b\u0430
-languages.bin=\u0411\u0438\u043d\u0438
-languages.de=\u041d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
-languages.bik=\u0411\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439
-languages.was=\u0412\u0430\u0448\u043e
-languages.und=\u041d\u0435\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439
-languages.war=\u0412\u0430\u0440\u0430\u0439
-languages.da=\u0414\u0430\u0442\u0441\u043a\u0438\u0439
-languages.dum=\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0441\u0440\u0435\u0434\u043d\u0435\u0432\u0435\u043a\u043e\u0432\u044b\u0439
-languages.wal=\u0412\u043e\u043b\u0430\u043c\u043e
-languages.mno=\u041c\u0430\u043d\u043e\u0431\u043e \u044f\u0437\u044b\u043a\u0438
-languages.wak=\u0412\u0430\u043a\u0430\u0448\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.cy=\u0412\u0430\u043b\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-languages.cv=\u0427\u0443\u0432\u0430\u0448\u0441\u043a\u0438\u0439
-languages.mni=\u041c\u0430\u043d\u0438\u043f\u0443\u0440\u0441\u043a\u0438\u0439
-languages.cs=\u0427\u0435\u0448\u0441\u043a\u0438\u0439
-languages.sam=\u0421\u0430\u043c\u0430\u0440\u0438\u0442\u044f\u043d\u0441\u043a\u0438\u0439 \u0430\u0440\u0430\u043c\u0435\u0439\u0441\u043a\u0438\u0439
-languages.sal=\u0421\u0430\u043b\u0438\u0448\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.dua=\u0414\u0443\u0430\u043b\u0430
-languages.co=\u041a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0439
-languages.sai=\u042e\u0436\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.sah=\u042f\u043a\u0443\u0442\u0441\u043a\u0438\u0439
-languages.kaw=\u041a\u0430\u0432\u0438
-languages.sad=\u0421\u0430\u043d\u0434\u0430\u0432\u0435
-languages.bho=\u0411\u0445\u043e\u0434\u0436\u043f\u0443\u0440\u0438
-languages.enm=\u0421\u0440\u0435\u0434\u043d\u0435\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-languages.kar=\u041a\u0430\u0440\u0435\u043d\u0441\u043a\u0438\u0439
-languages.inc=\u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.gay=\u0413\u0430\u0439\u043e
-languages.ca=\u041a\u0430\u0442\u0430\u043b\u0430\u043d\u0441\u043a\u0438\u0439
-languages.umb=\u0423\u043c\u0431\u0443\u043d\u0434\u0443
-languages.kam=\u041a\u0430\u043c\u0431\u0430
-languages.tsi=\u0426\u0438\u043c\u0448\u0438\u0430\u043d
-languages.ang=\u0421\u0442\u0430\u0440\u043e\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
-languages.cau=\u041a\u0430\u0432\u043a\u0430\u0437\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.kab=\u041a\u0430\u0431\u0438\u043b\u044c\u0441\u043a\u0438\u0439
-languages.kaa=\u041a\u0430\u0440\u0430\u043a\u0430\u043b\u043f\u0430\u043a\u0441\u043a\u0438\u0439
-languages.car=\u041a\u0430\u0440\u0438\u0431
-languages.br=\u0411\u0440\u0435\u0442\u043e\u043d\u0441\u043a\u0438\u0439
-languages.bo=\u0422\u0438\u0431\u0435\u0442\u0441\u043a\u0438\u0439
-languages.bn=\u0411\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
-languages.gaa=\u0413\u0430
-languages.cai=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.bi=\u0411\u0438\u0441\u043b\u0430\u043c\u0430
-languages.bh=\u0411\u0438\u0445\u0430\u0440\u0441\u043a\u0438\u0439
-languages.bg=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u043a\u0438\u0439
-languages.be=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u043a\u0438\u0439
-languages.cad=\u041a\u0430\u0434\u0434\u043e
-languages.ba=\u0411\u0430\u0448\u043a\u0438\u0440\u0441\u043a\u0438\u0439
-languages.zu=\u0417\u0443\u043b\u0443\u0441\u0441\u043a\u0438\u0439
-languages.zen=\u0417\u0435\u043d\u0430\u0433\u0441\u043a\u0438\u0439
-languages.pro=\u0421\u0442\u0430\u0440\u043e\u043f\u0440\u043e\u0432\u0430\u043d\u0441\u0430\u043b\u044c\u0441\u043a\u0438\u0439
-languages.az=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u043a\u0438\u0439
-languages.ay=\u0410\u044f\u043c\u0430\u0440\u0430
-languages.as=\u0410\u0441\u0441\u0430\u043c\u0441\u043a\u0438\u0439
-languages.ar=\u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0439
-languages.ilo=\u0418\u043b\u043e\u043a\u043e
-languages.elx=\u042d\u043b\u0430\u043c\u0441\u043a\u0438\u0439
-languages.zh=\u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439
-languages.pra=\u041f\u0440\u0430\u043a\u0440\u0438\u0442\u044b \u044f\u0437\u044b\u043a\u0438
-languages.am=\u0410\u043c\u0445\u0430\u0440\u0441\u043a\u0438\u0439
-languages.new=\u041d\u0435\u0432\u0430\u0440\u0441\u043a\u0438\u0439
-languages.za=\u0417\u0443\u0430\u043d\u0433
-languages.af=\u0410\u0444\u0440\u0438\u043a\u0430\u0430\u043d\u0441
-languages.ab=\u0410\u0431\u0445\u0430\u0437\u0441\u043a\u0438\u0439
-languages.aa=\u0410\u0444\u0430\u0440
-languages.yo=\u0419\u043e\u0440\u0443\u0431\u0430
-languages.alg=\u0410\u043b\u0433\u043e\u043d\u043a\u0438\u043d\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
-languages.ale=\u0410\u043b\u0435\u0443\u0442\u0441\u043a\u0438\u0439
-languages.mkh=\u041c\u043e\u043d\u043a\u0445\u043c\u0435\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.yi=\u0418\u0434\u0438\u0448
-languages.dra=\u0414\u0440\u0430\u0432\u0438\u0434\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
-languages.bem=\u0411\u0435\u043c\u0431\u0430
-languages.bej=\u0411\u0435\u0434\u0436\u0430
+languages.akk=\u0430\u043a\u043a\u0430\u0434\u0441\u043a\u0438\u0439
+languages.eka=\u044d\u043a\u0430\u0434\u0436\u0443\u043a
+languages.ijo=\u0438\u0434\u0436\u043e
+languages.xh=\u043a\u043e\u0441\u0430
+languages.sux=\u0448\u0443\u043c\u0435\u0440\u0441\u043a\u0438\u0439
+languages.sus=\u0441\u0443\u0441\u0443
+languages.mis=\u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.loz=\u043b\u043e\u0437\u0438
+languages.tog=\u0442\u043e\u043d\u0433\u0430 (\u043d\u044c\u044f\u0441\u0430)
+languages.pon=\u043f\u043e\u043d\u0430\u043f\u0435
+languages.min=\u043c\u0438\u043d\u0430\u043d\u0433\u043a\u0430\u0431\u0430\u0443
+languages.suk=\u0441\u0443\u043a\u0443\u043c\u0430
+languages.wo=\u0432\u043e\u043b\u043e\u0444
+languages.kut=\u043a\u0443\u0442\u0435\u043d\u0430\u0438
+languages.lol=\u043c\u043e\u043d\u0433\u043e
+languages.mic=\u043c\u0438\u043a\u043c\u0430\u043a
+languages.kum=\u043a\u0443\u043c\u044b\u043a\u0441\u043a\u0438\u0439
+languages.zap=\u0441\u0430\u043f\u043e\u0442\u0435\u043a\u0441\u043a\u0438\u0439
+languages.cus=\u043a\u0443\u0448\u0438\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.doi=\u0434\u043e\u0433\u0440\u0438
+languages.vo=\u0432\u043e\u043b\u0430\u043f\u044e\u043a
+languages.oto=\u043e\u0442\u043e\u043c\u0430\u043d\u0433\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.vi=\u0432\u044c\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438\u0439
+languages.vai=\u0432\u0430\u0438
+languages.raj=\u0440\u0430\u0434\u0436\u0430\u0441\u0442\u0445\u0430\u043d\u0438
+languages.nzi=\u043d\u0437\u0438\u043c\u0430
+languages.ota=\u0441\u0442\u0430\u0440\u043e\u0442\u0443\u0440\u0435\u0446\u043a\u0438\u0439
+languages.uz=\u0443\u0437\u0431\u0435\u043a\u0441\u043a\u0438\u0439
+languages.uga=\u0443\u0433\u0430\u0440\u0438\u0442\u0441\u043a\u0438\u0439
+languages.tmh=\u0442\u0430\u043c\u0430\u0448\u0435\u043a
+languages.nai=\u0441\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.nah=\u0430\u0446\u0442\u0435\u043a\u0441\u043a\u0438\u0439
+languages.ur=\u0443\u0440\u0434\u0443
+languages.fat=\u0444\u0430\u043d\u0442\u0438
+languages.uk=\u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0439
+languages.egy=\u0434\u0440\u0435\u0432\u043d\u0435\u0435\u0433\u0438\u043f\u0435\u0442\u0441\u043a\u0438\u0439
+languages.ug=\u0443\u0439\u0433\u0443\u0440\u0441\u043a\u0438\u0439
+languages.fan=\u0444\u0430\u043d\u0433
+languages.ssa=\u043d\u0438\u043b\u043e-\u0441\u0430\u0445\u0430\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.bat=\u0431\u0430\u043b\u0442\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.mga=\u0441\u0440\u0435\u0434\u043d\u0435\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
+languages.bas=\u0431\u0430\u0441\u0430
+languages.nyo=\u043d\u044c\u043e\u0440\u043e
+languages.nyn=\u043d\u044c\u044f\u043d\u043a\u043e\u043b\u0435
+languages.nym=\u043d\u044c\u044f\u043c\u0432\u0435\u0437\u0438
+languages.ban=\u0431\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0439
+languages.osa=\u043e\u0441\u0435\u0434\u0436\u0438
+languages.bal=\u0431\u0435\u043b\u0443\u0434\u0436\u0441\u043a\u0438\u0439
+languages.bai=\u0431\u0430\u043c\u0438\u043b\u0435\u043a\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.tw=\u0442\u0432\u0438
+languages.tli=\u0442\u043b\u0438\u043d\u0433\u0438\u0442
+languages.tt=\u0442\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439
+languages.ts=\u0442\u0441\u043e\u043d\u0433\u0430
+languages.bad=\u0431\u0430\u043d\u0434\u0430
+languages.tr=\u0442\u0443\u0440\u0435\u0446\u043a\u0438\u0439
+languages.to=\u0442\u043e\u043d\u0433\u0430
+languages.tn=\u0442\u0441\u0432\u0430\u043d\u0430
+languages.tl=\u0442\u0430\u0433\u0430\u043b\u043e\u0433
+languages.tk=\u0442\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u043a\u0438\u0439
+languages.ti=\u0442\u0438\u0433\u0440\u0438\u043d\u044c\u044f
+languages.th=\u0442\u0430\u0439\u0441\u043a\u0438\u0439
+languages.tg=\u0442\u0430\u0434\u0436\u0438\u043a\u0441\u043a\u0438\u0439
+languages.te=\u0442\u0435\u043b\u0443\u0433\u0443
+languages.kro=\u043a\u0440\u0443
+languages.ta=\u0442\u0430\u043c\u0438\u043b\u044c\u0441\u043a\u0438\u0439
+languages.efi=\u044d\u0444\u0438\u043a
+languages.sw=\u0441\u0443\u0430\u0445\u0438\u043b\u0438
+languages.sv=\u0448\u0432\u0435\u0434\u0441\u043a\u0438\u0439
+languages.su=\u0441\u0443\u043d\u0434\u0430\u043d\u0441\u043a\u0438\u0439
+languages.st=\u0441\u043e\u0442\u043e \u044e\u0436\u043d\u044b\u0439
+languages.ss=\u0441\u0432\u0430\u0437\u0438
+languages.sr=\u0441\u0435\u0440\u0431\u0441\u043a\u0438\u0439
+languages.sq=\u0430\u043b\u0431\u0430\u043d\u0441\u043a\u0438\u0439
+languages.men=\u043c\u0435\u043d\u0434\u0435
+languages.crp=\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.so=\u0441\u043e\u043c\u0430\u043b\u0438
+languages.afh=\u0430\u0444\u0440\u0438\u0445\u0438\u043b\u0438
+languages.sn=\u0448\u043e\u043d\u0430
+languages.sm=\u0441\u0430\u043c\u043e\u0430\u043d\u0441\u043a\u0438\u0439
+languages.sl=\u0441\u043b\u043e\u0432\u0435\u043d\u0441\u043a\u0438\u0439
+languages.grc=\u0434\u0440\u0435\u0432\u043d\u0435\u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439
+languages.sk=\u0441\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439
+languages.si=\u0441\u0438\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
+languages.sh=\u0441\u0435\u0440\u0431\u0441\u043a\u043e\u0445\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439
+languages.afa=\u0430\u0444\u0440\u0430\u0437\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.sg=\u0441\u0430\u043d\u0433\u043e
+languages.sd=\u0441\u0438\u043d\u0434\u0445\u0438
+languages.sa=\u0441\u0430\u043d\u0441\u043a\u0440\u0438\u0442
+languages.rw=\u043a\u0438\u043d\u044c\u044f\u0440\u0443\u0430\u043d\u0434\u0430
+languages.ru=\u0440\u0443\u0441\u0441\u043a\u0438\u0439
+languages.ro=\u0440\u0443\u043c\u044b\u043d\u0441\u043a\u0438\u0439
+languages.rn=\u0440\u0443\u043d\u0434\u0438
+languages.rm=\u0440\u0435\u0442\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u043a\u0438\u0439
+languages.tiv=\u0442\u0438\u0432\u0438
+languages.ady=\u0430\u0434\u044b\u0433\u0435\u0439\u0441\u043a\u0438\u0439
+languages.zun=\u0437\u0443\u043d\u044c\u0438
+languages.kpe=\u043a\u043f\u0435\u043b\u043b\u0435
+languages.qu=\u043a\u0435\u0447\u0443\u0430
+languages.tig=\u0442\u0438\u0433\u0440\u0435
+languages.cpp=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u043e-\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.sog=\u0441\u043e\u0433\u0434\u0438\u0439\u0441\u043a\u0438\u0439
+languages.ada=\u0430\u0434\u0430\u043d\u0433\u043c\u0435
+languages.cpf=\u0444\u0440\u0430\u043d\u043a\u043e-\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.cpe=\u0430\u043d\u0433\u043b\u043e-\u043a\u0440\u0435\u043e\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u043f\u0438\u0434\u0436\u0438\u043d\u044b (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.him=\u0445\u0438\u043c\u0430\u0447\u0430\u043b\u0438
+languages.got=\u0433\u043e\u0442\u0441\u043a\u0438\u0439
+languages.hil=\u0445\u0438\u043b\u0438\u0433\u0430\u0439\u043d\u043e\u043d
+languages.kok=\u043a\u043e\u043d\u043a\u0430\u043d\u0438
+languages.gon=\u0433\u043e\u043d\u0434\u0438
+languages.din=\u0434\u0438\u043d\u043a\u0430
+languages.nub=\u043d\u0443\u0431\u0438\u0439\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.pt=\u043f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
+languages.ps=\u043f\u0430\u0448\u0442\u043e (\u043f\u0443\u0448\u0442\u0443)
+languages.phn=\u0444\u0438\u043d\u0438\u043a\u0438\u0439\u0441\u043a\u0438\u0439
+languages.goh=\u0441\u0442\u0430\u0440\u043e\u0432\u0435\u0440\u0445\u043d\u0435\u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
+languages.cop=\u043a\u043e\u043f\u0442\u0441\u043a\u0438\u0439
+languages.yap=\u044f\u043f
+languages.ach=\u0430\u0447\u043e\u043b\u0438
+languages.yao=\u044f\u043e
+languages.pl=\u043f\u043e\u043b\u044c\u0441\u043a\u0438\u0439
+languages.ace=\u0430\u0447\u0435\u0445\u0441\u043a\u0438\u0439
+languages.pi=\u043f\u0430\u043b\u0438
+languages.pa=\u043f\u0430\u043d\u0434\u0436\u0430\u0431\u0438 (\u043f\u0435\u043d\u0434\u0436\u0430\u0431\u0438)
+languages.bug=\u0431\u0443\u0433\u0438\u0439\u0441\u043a\u0438\u0439
+languages.iba=\u0438\u0431\u0430\u043d\u0441\u043a\u0438\u0439
+languages.bua=\u0431\u0443\u0440\u044f\u0442\u0441\u043a\u0438\u0439
+languages.mas=\u043c\u0430\u0441\u0430\u0438
+languages.os=\u043e\u0441\u0435\u0442\u0438\u043d\u0441\u043a\u0438\u0439
+languages.map=\u0430\u0432\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.or=\u043e\u0440\u0438\u044f
+languages.man=\u043c\u0430\u043d\u0434\u0438\u043d\u0433\u043e
+languages.smi=\u0441\u0430\u0430\u043c\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.mak=\u043c\u0430\u043a\u0430\u0441\u0441\u0430\u0440\u0441\u043a\u0438\u0439
+languages.om=\u043e\u0440\u043e\u043c\u043e
+languages.mai=\u043c\u0430\u0439\u0442\u0445\u0438\u043b\u0438
+languages.oj=\u043e\u0434\u0436\u0438\u0431\u0432\u0430
+languages.mag=\u043c\u0430\u0433\u0430\u0445\u0438
+languages.mad=\u043c\u0430\u0434\u0443\u0440\u0441\u043a\u0438\u0439
+languages.oc=\u043e\u043a\u0441\u0438\u0442\u0430\u043d\u0441\u043a\u0438\u0439
+languages.nso=\u0441\u043e\u0442\u043e \u0441\u0435\u0432\u0435\u0440\u043d\u044b\u0439
+languages.myn=\u043c\u0430\u0439\u044f \u044f\u0437\u044b\u043a\u0438
+languages.gmh=\u0441\u0440\u0435\u0434\u043d\u0435\u0432\u0435\u0440\u0445\u043d\u0435\u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
+languages.no=\u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439
+languages.nl=\u043d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 (\u0433\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439)
+languages.sla=\u0441\u043b\u0430\u0432\u044f\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.ne=\u043d\u0435\u043f\u0430\u043b\u044c\u0441\u043a\u0438\u0439
+languages.na=\u043d\u0430\u0443\u0440\u0443
+languages.ter=\u0442\u0435\u0440\u0435\u043d\u043e
+languages.my=\u0431\u0438\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u0439
+languages.lez=\u043b\u0435\u0437\u0433\u0438\u043d\u0441\u043a\u0438\u0439
+languages.mt=\u043c\u0430\u043b\u044c\u0442\u0438\u0439\u0441\u043a\u0438\u0439
+languages.ms=\u043c\u0430\u043b\u0430\u0439\u0441\u043a\u0438\u0439
+languages.peo=\u0441\u0442\u0430\u0440\u043e\u043f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
+languages.mr=\u043c\u0430\u0440\u0430\u0442\u0445\u0438
+languages.fro=\u0441\u0442\u0430\u0440\u043e\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
+languages.mo=\u043c\u043e\u043b\u0434\u0430\u0432\u0441\u043a\u0438\u0439
+languages.mn=\u043c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u043a\u0438\u0439
+languages.frm=\u0441\u0440\u0435\u0434\u043d\u0435\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
+languages.ml=\u043c\u0430\u043b\u0430\u044f\u043b\u0430\u043c
+languages.jrb=\u0435\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u0430\u0440\u0430\u0431\u0441\u043a\u0438\u0439
+languages.mk=\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438\u0439
+languages.mi=\u043c\u0430\u043e\u0440\u0438
+languages.mg=\u043c\u0430\u043b\u0430\u0433\u0430\u0441\u0438\u0439\u0441\u043a\u0438\u0439
+languages.mwr=\u043c\u0430\u0440\u0432\u0430\u0440\u0438
+languages.bra=\u0431\u0440\u0430\u0443\u0438
+languages.lv=\u043b\u0430\u0442\u044b\u0448\u0441\u043a\u0438\u0439
+languages.lu=\u043b\u0443\u0431\u0430-\u041a\u0430\u0442\u0430\u043d\u0433\u0430
+languages.lt=\u043b\u0438\u0442\u043e\u0432\u0441\u043a\u0438\u0439
+languages.del=\u0434\u0435\u043b\u0430\u0432\u0430\u0440\u0441\u043a\u0438\u0439
+languages.lo=\u043b\u0430\u043e\u0441\u0441\u043a\u0438\u0439
+languages.ln=\u043b\u0438\u043d\u0433\u0430\u043b\u0430
+languages.ewo=\u044d\u0432\u043e\u043d\u0434\u043e
+languages.la=\u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0439
+languages.jpr=\u0435\u0432\u0440\u0435\u0439\u0441\u043a\u043e-\u043f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
+languages.vot=\u0443\u0434\u043c\u0443\u0440\u0442\u0441\u043a\u0438\u0439 (\u0412\u043e\u0442\u044f\u0446\u043a\u0438\u0439)
+languages.sit=\u0441\u0438\u043d\u043e\u0442\u0438\u0431\u0435\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.ky=\u043a\u0438\u0440\u0433\u0438\u0437\u0441\u043a\u0438\u0439
+languages.ku=\u043a\u0443\u0440\u0434\u0441\u043a\u0438\u0439
+languages.sio=\u0441\u0438\u0443 \u044f\u0437\u044b\u043a\u0438
+languages.ks=\u043a\u0430\u0448\u043c\u0438\u0440\u0438
+languages.awa=\u0430\u0432\u0430\u0434\u0445\u0438
+languages.ko=\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\u0439
+languages.kn=\u043a\u0430\u043d\u043d\u0430\u0434\u0430
+languages.km=\u043a\u0445\u043c\u0435\u0440\u0441\u043a\u0438\u0439
+languages.kl=\u044d\u0441\u043a\u0438\u043c\u043e\u0441\u0441\u043a\u0438\u0439 (\u0433\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439)
+languages.kk=\u043a\u0430\u0437\u0430\u0445\u0441\u043a\u0438\u0439
+languages.rom=\u0446\u044b\u0433\u0430\u043d\u0441\u043a\u0438\u0439
+languages.sid=\u0441\u0438\u0434\u0430\u043c\u0430
+languages.non=\u0441\u0442\u0430\u0440\u043e\u043d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439
+languages.ka=\u0433\u0440\u0443\u0437\u0438\u043d\u0441\u043a\u0438\u0439
+languages.mus=\u043a\u0440\u0438\u043a
+languages.roa=\u0440\u043e\u043c\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.nog=\u043d\u043e\u0433\u0430\u0439\u0441\u043a\u0438\u0439
+languages.mun=\u043c\u0443\u043d\u0434\u0430 \u044f\u0437\u044b\u043a\u0438
+languages.mul=\u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u043c\u0435\u0439 \u044f\u0437\u044b\u043a\u0438
+languages.jv=\u044f\u0432\u0430\u043d\u0441\u043a\u0438\u0439
+languages.gil=\u0433\u0438\u043b\u044c\u0431\u0435\u0440\u0442\u0441\u043a\u0438\u0439
+languages.shn=\u0448\u0430\u043d\u0441\u043a\u0438\u0439
+languages.fon=\u0444\u043e\u043d
+languages.kho=\u0445\u043e\u0442\u0430\u043d\u0441\u043a\u0438\u0439
+languages.ja=\u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0439
+languages.khi=\u043a\u043e\u0439\u0441\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.chy=\u0447\u0435\u0439\u0435\u043d\u043d
+languages.pau=\u043f\u0430\u043b\u0430\u0443
+languages.tai=\u0442\u0430\u0442\u0441\u043a\u0438\u0439
+languages.iu=\u0438\u043d\u0443\u043a\u0442\u0438\u0442\u0443\u0442
+languages.pap=\u043f\u0430\u043f\u044c\u044f\u043c\u0435\u043d\u0442\u043e
+languages.it=\u0438\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0438\u0439
+languages.kha=\u043a\u0445\u0430\u0441\u0438
+languages.is=\u0438\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
+languages.chr=\u0447\u0435\u0440\u043e\u043a\u0438
+languages.pam=\u043f\u0430\u043c\u043f\u0430\u043d\u0433\u0430
+languages.pal=\u043f\u0435\u0445\u043b\u0435\u0432\u0438\u0439\u0441\u043a\u0438\u0439
+languages.cho=\u0447\u043e\u043a\u0442\u0430\u0432
+languages.chn=\u0447\u0438\u043d\u0443\u043a \u0436\u0430\u0440\u0433\u043e\u043d
+languages.chm=\u043c\u0430\u0440\u0438\u0439\u0441\u043a\u0438\u0439 (\u0427\u0435\u0440\u0435\u043c\u0438\u0441\u0441\u043a\u0438\u0439)
+languages.tyv=\u0442\u0443\u0432\u0438\u043d\u0441\u043a\u0438\u0439
+languages.bnt=\u0431\u0430\u043d\u0442\u0443 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.chk=\u0447\u0443\u043a\u043e\u0442\u0441\u043a\u0438\u0439
+languages.pag=\u043f\u0430\u043d\u0433\u0430\u0441\u0438\u043d\u0430\u043d
+languages.ik=\u0438\u043d\u0443\u043f\u0438\u0430\u043a
+languages.haw=\u0433\u0430\u0432\u0430\u0439\u0441\u043a\u0438\u0439
+languages.lam=\u043b\u0430\u043c\u0431\u0430
+languages.chg=\u0447\u0430\u0433\u0430\u0442\u0430\u0439\u0441\u043a\u0438\u0439
+languages.sga=\u0441\u0442\u0430\u0440\u043e\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
+languages.paa=\u043f\u0430\u043f\u0443\u0430\u0441\u0441\u043a\u043e-\u0430\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.ie=\u0438\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u0432\u0435
+languages.id=\u0438\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u0439\u0441\u043a\u0438\u0439
+languages.lah=\u043b\u0430\u0445\u043d\u0434\u0430
+languages.chb=\u0447\u0438\u0431\u0447\u0430
+languages.ia=\u0438\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u0432\u0430
+languages.lad=\u043b\u0430\u0434\u0438\u043d\u043e
+languages.hai=\u0445\u0430\u0439\u0434\u0430
+languages.hy=\u0430\u0440\u043c\u044f\u043d\u0441\u043a\u0438\u0439
+languages.ath=\u0430\u0442\u0430\u043f\u0430\u0447\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.hu=\u0432\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439
+languages.dak=\u0434\u0430\u043a\u043e\u0442\u0430
+languages.hr=\u0445\u043e\u0440\u0432\u0430\u0442\u0441\u043a\u0438\u0439
+languages.hi=\u0445\u0438\u043d\u0434\u0438
+languages.dyu=\u0434\u0438\u0443\u043b\u0430 (\u0434\u044c\u044e\u043b\u0430)
+languages.he=\u0438\u0432\u0440\u0438\u0442
+languages.ha=\u0445\u0430\u0443\u0441\u0430
+languages.wen=\u043b\u0443\u0436\u0438\u0446\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.gu=\u0433\u0443\u0434\u0436\u0430\u0440\u0430\u0442\u0438
+languages.sem=\u0441\u0435\u043c\u0438\u0442\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.sel=\u0441\u0435\u043b\u044c\u043a\u0443\u043f\u0441\u043a\u0438\u0439
+languages.iro=\u0438\u0440\u043e\u043a\u0435\u0437\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.gn=\u0433\u0443\u0430\u0440\u0430\u043d\u0438
+languages.gl=\u0433\u0430\u043b\u0438\u0441\u0438\u0439\u0441\u043a\u0438\u0439
+languages.arw=\u0430\u0440\u0430\u0432\u0430\u043a\u0441\u043a\u0438\u0439
+languages.gd=\u0433\u0430\u044d\u043b\u044c\u0441\u043a\u0438\u0439
+languages.art=\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.gez=\u0433\u0435\u044d\u0437
+languages.ira=\u0438\u0440\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.ga=\u0438\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439
+languages.fy=\u0444\u0440\u0438\u0437\u0441\u043a\u0438\u0439
+languages.bla=\u0441\u0438\u043a\u0441\u0438\u043a\u0430
+languages.gem=\u0433\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.fr=\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0439
+languages.arc=\u0430\u0440\u0430\u043c\u0435\u0439\u0441\u043a\u0438\u0439
+languages.fo=\u0444\u0430\u0440\u0435\u0440\u0441\u043a\u0438\u0439
+languages.fj=\u0444\u0438\u0434\u0436\u0438
+languages.fi=\u0444\u0438\u043d\u0441\u043a\u0438\u0439
+languages.fa=\u043f\u0435\u0440\u0441\u0438\u0434\u0441\u043a\u0438\u0439
+languages.eu=\u0431\u0430\u0441\u043a\u0441\u043a\u0438\u0439
+languages.et=\u044d\u0441\u0442\u043e\u043d\u0441\u043a\u0438\u0439
+languages.es=\u0438\u0441\u043f\u0430\u043d\u0441\u043a\u0438\u0439
+languages.eo=\u044d\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e
+languages.en=\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
+languages.el=\u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0439
+languages.tut=\u0430\u043b\u0442\u0430\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.niu=\u043d\u0438\u0443\u044d
+languages.mos=\u043c\u043e\u0435\u0439
+languages.dz=\u0434\u0437\u043e\u043d\u0433-\u043a\u044d
+languages.fiu=\u0444\u0438\u043d\u043d\u043e-\u0443\u0433\u043e\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.nic=\u043d\u0438\u0433\u0435\u0440-\u043a\u043e\u0440\u0434\u043e\u0444\u0430\u043d\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.moh=\u043c\u043e\u0445\u0430\u0443\u043a
+languages.luo=\u043b\u0443\u043e (\u041a\u0435\u043d\u0438\u044f \u0438 \u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f)
+languages.lun=\u043b\u0443\u043d\u0434\u0430
+languages.lui=\u043b\u0443\u0438\u0441\u0435\u043d\u044c\u043e
+languages.hup=\u0425\u0443\u043f\u0430
+languages.bin=\u0431\u0438\u043d\u0438
+languages.de=\u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439
+languages.bik=\u0431\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439
+languages.was=\u0432\u0430\u0448\u043e
+languages.und=\u043d\u0435\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439
+languages.war=\u0432\u0430\u0440\u0430\u0439
+languages.da=\u0434\u0430\u0442\u0441\u043a\u0438\u0439
+languages.dum=\u043d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0439 \u0441\u0440\u0435\u0434\u043d\u0435\u0432\u0435\u043a\u043e\u0432\u044b\u0439
+languages.wal=\u0432\u043e\u043b\u0430\u043c\u043e
+languages.mno=\u043c\u0430\u043d\u043e\u0431\u043e \u044f\u0437\u044b\u043a\u0438
+languages.wak=\u0432\u0430\u043a\u0430\u0448\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.cy=\u0432\u0430\u043b\u043b\u0438\u0439\u0441\u043a\u0438\u0439
+languages.cv=\u0447\u0443\u0432\u0430\u0448\u0441\u043a\u0438\u0439
+languages.mni=\u043c\u0430\u043d\u0438\u043f\u0443\u0440\u0441\u043a\u0438\u0439
+languages.cs=\u0447\u0435\u0448\u0441\u043a\u0438\u0439
+languages.sam=\u0441\u0430\u043c\u0430\u0440\u0438\u0442\u044f\u043d\u0441\u043a\u0438\u0439 \u0430\u0440\u0430\u043c\u0435\u0439\u0441\u043a\u0438\u0439
+languages.dua=\u0434\u0443\u0430\u043b\u0430
+languages.sal=\u0441\u0430\u043b\u0438\u0448\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.co=\u043a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0439
+languages.sai=\u044e\u0436\u043d\u043e\u0439 \u0430\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.sah=\u044f\u043a\u0443\u0442\u0441\u043a\u0438\u0439
+languages.kaw=\u043a\u0430\u0432\u0438
+languages.sad=\u0441\u0430\u043d\u0434\u0430\u0432\u0435
+languages.bho=\u0431\u0445\u043e\u0434\u0436\u043f\u0443\u0440\u0438
+languages.enm=\u0441\u0440\u0435\u0434\u043d\u0435\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
+languages.inc=\u0438\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.kar=\u043a\u0430\u0440\u0435\u043d\u0441\u043a\u0438\u0439
+languages.gay=\u0433\u0430\u0439\u043e
+languages.ca=\u043a\u0430\u0442\u0430\u043b\u0430\u043d\u0441\u043a\u0438\u0439
+languages.umb=\u0443\u043c\u0431\u0443\u043d\u0434\u0443
+languages.kam=\u043a\u0430\u043c\u0431\u0430
+languages.tsi=\u0446\u0438\u043c\u0448\u0438\u0430\u043d
+languages.ang=\u0441\u0442\u0430\u0440\u043e\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439
+languages.cau=\u043a\u0430\u0432\u043a\u0430\u0437\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.kab=\u043a\u0430\u0431\u0438\u043b\u044c\u0441\u043a\u0438\u0439
+languages.kaa=\u043a\u0430\u0440\u0430\u043a\u0430\u043b\u043f\u0430\u043a\u0441\u043a\u0438\u0439
+languages.br=\u0431\u0440\u0435\u0442\u043e\u043d\u0441\u043a\u0438\u0439
+languages.car=\u043a\u0430\u0440\u0438\u0431
+languages.bo=\u0442\u0438\u0431\u0435\u0442\u0441\u043a\u0438\u0439
+languages.bn=\u0431\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439
+languages.gaa=\u0433\u0430
+languages.bi=\u0431\u0438\u0441\u043b\u0430\u043c\u0430
+languages.cai=\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438 \u0438\u043d\u0434\u0435\u0439\u0446\u0435\u0432 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.bh=\u0431\u0438\u0445\u0430\u0440\u0438
+languages.bg=\u0431\u043e\u043b\u0433\u0430\u0440\u0441\u043a\u0438\u0439
+languages.be=\u0431\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u043a\u0438\u0439
+languages.cad=\u043a\u0430\u0434\u0434\u043e
+languages.ba=\u0431\u0430\u0448\u043a\u0438\u0440\u0441\u043a\u0438\u0439
+languages.zu=\u0437\u0443\u043b\u0443
+languages.zen=\u0437\u0435\u043d\u0430\u0433\u0441\u043a\u0438\u0439
+languages.pro=\u0441\u0442\u0430\u0440\u043e\u043f\u0440\u043e\u0432\u0430\u043d\u0441\u0430\u043b\u044c\u0441\u043a\u0438\u0439
+languages.az=\u0430\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u043a\u0438\u0439
+languages.ay=\u0430\u0439\u043c\u0430\u0440\u0430
+languages.as=\u0430\u0441\u0441\u0430\u043c\u0441\u043a\u0438\u0439
+languages.ar=\u0430\u0440\u0430\u0431\u0441\u043a\u0438\u0439
+languages.elx=\u044d\u043b\u0430\u043c\u0441\u043a\u0438\u0439
+languages.ilo=\u0438\u043b\u043e\u043a\u043e
+languages.zh=\u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439
+languages.am=\u0430\u043c\u0445\u0430\u0440\u0441\u043a\u0438\u0439
+languages.pra=\u043f\u0440\u0430\u043a\u0440\u0438\u0442\u044b \u044f\u0437\u044b\u043a\u0438
+languages.new=\u043d\u0435\u0432\u0430\u0440\u0441\u043a\u0438\u0439
+languages.za=\u0447\u0436\u0443\u0430\u043d\u044c
+languages.af=\u0430\u0444\u0440\u0438\u043a\u0430\u0430\u043d\u0441
+languages.ab=\u0430\u0431\u0445\u0430\u0437\u0441\u043a\u0438\u0439
+languages.aa=\u0430\u0444\u0430\u0440
+languages.yo=\u0439\u043e\u0440\u0443\u0431\u0430
+languages.alg=\u0430\u043b\u0433\u043e\u043d\u043a\u0438\u043d\u0441\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u0438
+languages.ale=\u0430\u043b\u0435\u0443\u0442\u0441\u043a\u0438\u0439
+languages.mkh=\u043c\u043e\u043d\u043a\u0445\u043c\u0435\u0440\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.yi=\u0438\u0434\u0438\u0448
+languages.dra=\u0434\u0440\u0430\u0432\u0438\u0434\u0438\u0439\u0441\u043a\u0438\u0435 (\u0434\u0440\u0443\u0433\u0438\u0435)
+languages.bem=\u0431\u0435\u043c\u0431\u0430
+languages.bej=\u0431\u0435\u0434\u0436\u0430
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_RU.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_RU.properties
index d2cebbb..8271983 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_RU.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_RU.properties
@@ -5,6 +5,4 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=\u00a0
-currencyFormat=#,##0.00\u00a4;-#,##0.00\u00a4
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_UA.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_UA.properties
index 8072886..65fdceb 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_UA.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ru_UA.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-decimalSeparator=,
-groupingSeparator=\u00a0
currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
mediumDateFormat=d MMM yyyy
longDateFormat=d MMMM yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa.properties
index 20c046f..72491fd 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa.properties
@@ -6,8 +6,8 @@
# This file was automatically generated by gnu.localegen from CLDR.
zeroDigit=\u0966
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
currenciesSymbol.INR=\u0930\u0941
territories.IN=\u092d\u093e\u0930\u0924\u092e\u094d
languages.sa=\u0938\u0902\u0938\u094d\u0915\u0943\u0924
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa_IN.properties
index 8edd061..20bb5e3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sa_IN.properties
@@ -5,7 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4##,##,##0.00;-\u00a4##,##,##0.00
+currencyFormat=\u00a4#,##,##0.00;-\u00a4#,##,##0.00
+firstDayOfWeek=mon
shortDateFormat=d-MM-yy
mediumDateFormat=dd-MM-yyyy
longDateFormat=d MMMM yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid.properties
new file mode 100644
index 0000000..b5e18b9
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid.properties
@@ -0,0 +1,55 @@
+# LocaleInformation_sid.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=Indian Rupee
+currenciesDisplayName.JPY=Japanese Yen
+currenciesDisplayName.RUB=Russian Ruble
+currenciesDisplayName.CNY=Chinese Yuan Renminbi
+currenciesDisplayName.GBP=British Pound Sterling
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.BRL=Brazilian Real
+currenciesSymbol.ETB=$
+currenciesSymbol.USD=US$
+shortMonths=Jan®Feb®Mar®Apr®May®Jun®Jul®Aug®Sep®Oct®Nov®Dec®®
+months=January®February®March®April®May®June®July®August®September®October®November®December®®
+shortWeekdays=®Sam®San®Mak®Row®Ham®Arb®Qid®
+weekdays=®Sambata®Sanyo®Maakisanyo®Roowe®Hamuse®Arbe®Qidaame®
+firstDayOfWeek=sat
+eras=YIA®YIG®
+ampms=soodo®hawwaro®
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE, MMMM dd, yyyy
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
+territories.FR=France
+territories.IN=India
+territories.CN=China
+territories.ET=Itiyoophiya
+territories.DE=Germany
+territories.GB=United Kingdom
+territories.BR=Brazil
+territories.RU=Russia
+territories.JP=Japan
+territories.US=United States
+territories.IT=Italy
+languages.zh=Chinese
+languages.en=English
+languages.sid=Sidaamu Afo
+languages.ru=Russian
+languages.hi=Hindi
+languages.ar=Arabic
+languages.it=Italian
+languages.fr=French
+languages.de=German
+languages.es=Spanish
+languages.ja=Japanese
+languages.pt=Portuguese
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_LY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid_ET.properties
index ba347fe..b01b6c1 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_LY.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sid_ET.properties
@@ -1,8 +1,8 @@
-# LocaleInformation_ar_LY.properties --
+# LocaleInformation_sid_ET.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4 #,##0.000;\u00a4 #,##0.000-
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sk.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sk.properties
index 21886f3..d73c3ed 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sk.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sk.properties
@@ -8,740 +8,340 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=Jord\u00e1nsky din\u00e1r
-currenciesDisplayName.BOV=Boliv\u00edjske mvdol
-currenciesDisplayName.XAU=Zlato
-currenciesDisplayName.FOK=Faeroe Islands Kronur
-currenciesDisplayName.LBP=Libanonsk\u00e1 libra
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamsk\u00fd dong
-currenciesDisplayName.TZS=Tanzansk\u00fd \u0161iling
-currenciesDisplayName.BOP=Boliv\u00edjske peso
-currenciesDisplayName.KHR=Kambod\u017esk\u00fd riel
-currenciesDisplayName.KHO=Kambod\u017esk\u00fd star\u00fd riel
-currenciesDisplayName.ZMP=Zambsk\u00e1 libra
-currenciesDisplayName.AUP=Austr\u00e1lska libra
-currenciesDisplayName.XAF=CFA frank BEAC
-currenciesDisplayName.MTP=Maltsk\u00e1 libra
-currenciesDisplayName.GHR=Ghansk\u00fd prehodnoten\u00fd cedi
-currenciesDisplayName.ZMK=Zambsk\u00e1 kwacha
-currenciesDisplayName.GHP=Ghansk\u00e1 libra
-currenciesDisplayName.GHO=Ghansk\u00fd star\u00fd cedi
-currenciesDisplayName.MTL=Maltsk\u00e1 lira
-currenciesDisplayName.AUD=Austr\u00e1lsky dol\u00e1r
-currenciesDisplayName.USS=US dol\u00e1r (Same day)
-currenciesDisplayName.ITL=Taliansk\u00e1 lira
-currenciesDisplayName.USN=US dol\u00e1r (Next day)
-currenciesDisplayName.GHC=Ghansk\u00fd cedi
-currenciesDisplayName.SGD=Singap\u00farsky dol\u00e1r
-currenciesDisplayName.PAB=Panamsk\u00e1 balboa
-currenciesDisplayName.LAK=Laosk\u00fd kip
-currenciesDisplayName.KGS=Kyrgysk\u00fd som
-currenciesDisplayName.CHF=\u0160vaj\u010diarsk\u00fd frank
-currenciesDisplayName.ATS=Rak\u00fasky \u0161iling
-currenciesDisplayName.USD=US dol\u00e1r
-currenciesDisplayName.ETD=Ethiopsk\u00fd dol\u00e1r
-currenciesDisplayName.BND=Bruneisk\u00fd dol\u00e1r
-currenciesDisplayName.JMP=Jamajsk\u00e1 libra
-currenciesDisplayName.ETB=Ethiopsk\u00fd birr
-currenciesDisplayName.DZG=Al\u017e\u00edrsky frank Germinal
-currenciesDisplayName.DZF=Al\u017e\u00edrsky nov\u00fd frank
-currenciesDisplayName.DZD=Al\u017e\u00edrsky din\u00e1r
-currenciesDisplayName.PYG=Paraguaysk\u00e9 guarani
-currenciesDisplayName.LYP=Libyjsk\u00e1 libra
-currenciesDisplayName.JMD=Jamajsk\u00fd dol\u00e1r
-currenciesDisplayName.ISK=Islandsk\u00e1 krona
-currenciesDisplayName.ESP=\u0160panielsk\u00e1 peseta
-currenciesDisplayName.BMP=Bermudsk\u00e1 libra
-currenciesDisplayName.LYD=Libyjsk\u00fd din\u00e1r
-currenciesDisplayName.LYB=Libyjsk\u00e1 BMA lira
-currenciesDisplayName.BMD=Bermudsk\u00fd dol\u00e1r
-currenciesDisplayName.NLG=Nizozemsk\u00fd guilder
-currenciesDisplayName.MRO=Mauritania Ouguiya
-currenciesDisplayName.IRR=Ir\u00e1nsky rial
-currenciesDisplayName.SEK=\u0160v\u00e9dska krona
-currenciesDisplayName.ERN=Eritrejsk\u00e1 nakfa
+currenciesDisplayName.YDD=Jemensk\u00fd din\u00e1r
+currenciesDisplayName.TWD=Taiwansk\u00fd nov\u00fd dol\u00e1r
currenciesDisplayName.KES=Ke\u0148sk\u00fd \u0161iling
-currenciesDisplayName.CFF=CAR CFA frank
+currenciesDisplayName.BYB=Belarussian nov\u00fd rube\u013e (1994-1999)
+currenciesDisplayName.LKR=\u0160rilansk\u00e1 rupia
+currenciesDisplayName.RWF=Rwandsk\u00fd frank
+currenciesDisplayName.TJS=Tad\u017eikistansk\u00fd somoni
+currenciesDisplayName.SDP=Sud\u00e1nska libra
+currenciesDisplayName.TJR=Tad\u017eikistansk\u00fd rube\u013e
+currenciesDisplayName.ERN=Eritrejsk\u00e1 nakfa
+currenciesDisplayName.GRD=Gr\u00e9cka drachma
+currenciesDisplayName.IEP=\u00cdrska libra
currenciesDisplayName.ARS=Argentinsk\u00e9 peso
+currenciesDisplayName.SDD=Sud\u00e1nsky din\u00e1r
currenciesDisplayName.ARP=Argentinsk\u00e9 peso (1983-1985)
-currenciesDisplayName.ARM=Argentinsk\u00e9 peso Moneda Nacional
-currenciesDisplayName.TWD=Taiwansk\u00fd nov\u00fd dol\u00e1r
-currenciesDisplayName.SDP=Sud\u00e1nska libra
currenciesDisplayName.GEL=Gruz\u00ednsky lari
currenciesDisplayName.GEK=Gruz\u00ednsky Kupon Larit
-currenciesDisplayName.MQF=Martinique frank
+currenciesDisplayName.CRC=Kostariksk\u00fd colon
currenciesDisplayName.FKP=Falklandsk\u00e1 libra
+currenciesDisplayName.EEK=Est\u00f3nska kroon
+currenciesDisplayName.HKD=Hong Kongsk\u00fd dol\u00e1r
+currenciesDisplayName.MDL=Moldavsk\u00fd leu
currenciesDisplayName.ARA=Argentinsk\u00fd austral
-currenciesDisplayName.SDD=Sud\u00e1nsky din\u00e1r
currenciesDisplayName.IQD=Irack\u00fd din\u00e1r
-currenciesDisplayName.TVD=Tuvalu dol\u00e1r
currenciesDisplayName.SCR=Sej\u0161elsk\u00e1 rupia
+currenciesDisplayName.VUV=Vanuatu vatu
+currenciesDisplayName.DKK=D\u00e1nska krone
+currenciesDisplayName.KPW=Severok\u00f3rejsk\u00fd won
+currenciesDisplayName.GQE=Rovn\u00edkov\u00e1 Guinea Ekwele Guineana
+currenciesDisplayName.IDR=Indon\u00e9zska rupia
currenciesDisplayName.LVR=Loty\u0161sk\u00fd rube\u013e
-currenciesDisplayName.FJP=Fiji libra
+currenciesDisplayName.SOS=Som\u00e1lsky \u0161iling
+currenciesDisplayName.AED=UAE dirham
+currenciesDisplayName.BWP=Botswanan Pula
currenciesDisplayName.LVL=Loty\u0161sk\u00fd lats
-currenciesDisplayName.CDL=Kon\u017esk\u00fd zaire
-currenciesDisplayName.CDG=Kon\u017esk\u00fd frank
-currenciesDisplayName.CDF=Kon\u017esk\u00fd frank Congolais
-currenciesDisplayName.FJD=Fiji dol\u00e1r
+currenciesDisplayName.RUR=Rusk\u00fd rube\u013e (1991-1998)
currenciesDisplayName.NIO=Nikaragujsk\u00e1 Cordoba Oro
+currenciesDisplayName.ADP=Andorsk\u00e1 peseta
+currenciesDisplayName.FJD=Fiji dol\u00e1r
currenciesDisplayName.MOP=Macao Pataca
-currenciesDisplayName.NIG=Nikaragujsk\u00e1 zlat\u00e1 Cordoba
+currenciesDisplayName.RUB=Rusk\u00fd rube\u013e
+currenciesDisplayName.CDF=Kon\u017esk\u00fd frank Congolais
currenciesDisplayName.NIC=Nikaragujsk\u00e1 cordoba
-currenciesDisplayName.XTR=COMECON rube\u013e
-currenciesDisplayName.FIN=Finsk\u00e1 marka (1860-1962)
-currenciesDisplayName.FIM=Finsk\u00e1 marka
+currenciesDisplayName.DJF=D\u017eibutsk\u00fd frank
+currenciesDisplayName.ECV=Ekuadorsk\u00fd Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Solomon Islands dol\u00e1r
+currenciesDisplayName.UZS=Uzbekistansk\u00fd sum
+currenciesDisplayName.ECS=Ekuadorsk\u00fd sucre
+currenciesDisplayName.PHP=Filip\u00ednske peso
+currenciesDisplayName.THB=Thajsk\u00fd b\u00e1t
currenciesDisplayName.LUF=Luxembursk\u00fd frank
-currenciesDisplayName.TTO=Trinidad a Tobago star\u00fd dol\u00e1r
-currenciesDisplayName.AOS=Angolsk\u00e9 eskudo
-currenciesDisplayName.AOR=Angolsk\u00e1 kwanza Reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongolsk\u00fd tugrik
-currenciesDisplayName.HUF=Ma\u010farsk\u00fd forint
-currenciesDisplayName.BIF=Burundsk\u00fd frank
-currenciesDisplayName.AON=Angolsk\u00e1 nov\u00e1 kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolsk\u00e1 kwanza (1977-1990)
+currenciesDisplayName.FIM=Finsk\u00e1 marka
currenciesDisplayName.TTD=Trinidad a Tobago dol\u00e1r
currenciesDisplayName.SZL=Swaziland lilangeni
-currenciesDisplayName.NHF=New Hebrides CFP frank
-currenciesDisplayName.GBP=Britsk\u00e1 libra
-currenciesDisplayName.SAS=Saudsk\u00fd Riyal
+currenciesDisplayName.MNT=Mongolsk\u00fd tugrik
currenciesDisplayName.SAR=Saudsk\u00fd riyal
+currenciesDisplayName.UAK=Ukrainsk\u00fd karbovanetz
+currenciesDisplayName.UAH=Ukrainsk\u00e1 hrivna
+currenciesDisplayName.HUF=Ma\u010farsk\u00fd forint
+currenciesDisplayName.COP=Colombijsk\u00e9 peso
+currenciesDisplayName.QAR=Qatarsk\u00fd rial
currenciesDisplayName.LTT=Litevsk\u00fd talonas
-currenciesDisplayName.INR=Indijsk\u00e1 rupia
currenciesDisplayName.PTE=Portugalsk\u00e9 eskudo
-currenciesDisplayName.AOA=Angolsk\u00e1 kwanza
-currenciesDisplayName.PTC=Portugalsk\u00e9 conto
+currenciesDisplayName.AOR=Angolsk\u00e1 kwanza Reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguajsk\u00e9 peso Uruguayo
+currenciesDisplayName.GBP=Britsk\u00e1 libra
+currenciesDisplayName.BIF=Burundsk\u00fd frank
+currenciesDisplayName.INR=Indijsk\u00e1 rupia
+currenciesDisplayName.ZRZ=Zairsk\u00fd Zaire
+currenciesDisplayName.AON=Angolsk\u00e1 nov\u00e1 kwanza (1990-2000)
currenciesDisplayName.LTL=Litevsk\u00e1 lita
+currenciesDisplayName.XFU=Franc\u00fazsky UIC-frank
currenciesDisplayName.KZT=Kaza\u017esk\u00fd tenge
-currenciesDisplayName.KZR=Kaza\u017esk\u00fd rube\u013e
-currenciesDisplayName.VGD=British Virgin Islands dol\u00e1r
-currenciesDisplayName.NGP=Nigersk\u00e1 libra
-currenciesDisplayName.MMX=Myanmarsk\u00e9 dol\u00e1rov\u00e9 certifik\u00e1ty
+currenciesDisplayName.MZM=Mozambijsk\u00e9 metical
+currenciesDisplayName.UYP=Uruguajsk\u00e9 peso (1975-1993)
+currenciesDisplayName.AOK=Angolsk\u00e1 kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmese Kyat
+currenciesDisplayName.GNS=Guinejsk\u00fd syli
+currenciesDisplayName.XFO=Franc\u00fazsky zlat\u00fd frank
+currenciesDisplayName.PGK=Papua Nov\u00e1 Guinea kina
+currenciesDisplayName.SYP=Syrsk\u00e1 libra
+currenciesDisplayName.MZE=Mozambijsk\u00e9 eskudo
+currenciesDisplayName.OMR=Om\u00e1nsk\u00fd rial
currenciesDisplayName.NGN=Nigersk\u00e1 naira
+currenciesDisplayName.ZRN=Zairsk\u00fd nov\u00fd zaire
+currenciesDisplayName.AOA=Angolsk\u00e1 kwanza
+currenciesDisplayName.CNY=\u010c\u00ednsky Yuan Renminbi
+currenciesDisplayName.MAF=Marock\u00fd frank
+currenciesDisplayName.GNF=Guinejsk\u00fd frank
currenciesDisplayName.HTG=Haitsk\u00e9 gourde
-currenciesDisplayName.SYP=Syrsk\u00e1 libra
-currenciesDisplayName.PSP=Palest\u00ednska libra
-currenciesDisplayName.BHD=Bahraisk\u00fd din\u00e1r
+currenciesDisplayName.MAD=Marock\u00fd dirham
currenciesDisplayName.MMK=Myanmarsk\u00fd kyat
+currenciesDisplayName.MYR=Malajsk\u00fd ringgit
+currenciesDisplayName.LSL=Lesothsk\u00fd loti
+currenciesDisplayName.BHD=Bahraisk\u00fd din\u00e1r
+currenciesDisplayName.SLL=Sierra Leone Leone
+currenciesDisplayName.BTN=Bhutansky ngultrum
+currenciesDisplayName.TRL=Tureck\u00e1 lira
+currenciesDisplayName.KMF=Comoro frank
currenciesDisplayName.ANG=Nizozemsk\u00fd Antilsk\u00fd guilder
currenciesDisplayName.CZK=\u010cesk\u00e1 koruna
-currenciesDisplayName.IMP=Libra Isle of Man
-currenciesDisplayName.BGX=Bulharsk\u00e9 certifik\u00e1ty v leva
-currenciesDisplayName.LSL=Lesothsk\u00fd loti
-currenciesDisplayName.GAF=Gab\u00fansky CFA frank
-currenciesDisplayName.BGO=Bulharsk\u00fd leva (1879-1952)
+currenciesDisplayName.AZM=Azerbaid\u017eansk\u00fd manat
+currenciesDisplayName.KYD=Kajmansk\u00fd dol\u00e1r
+currenciesDisplayName.GMD=Gambsk\u00fd dalasi
currenciesDisplayName.BGN=Bulharsk\u00fd leva nov\u00fd
-currenciesDisplayName.BGM=Bulharsk\u00fd socialistick\u00fd leva
currenciesDisplayName.CAD=Kanadsk\u00fd dol\u00e1r
+currenciesDisplayName.MXV=Mexick\u00e9 Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bulharsk\u00fd leva
-currenciesDisplayName.TRL=Tureck\u00e1 lira
-currenciesDisplayName.KYD=Kajmansk\u00fd dol\u00e1r
-currenciesDisplayName.CYP=Cyprusk\u00e1 libra
+currenciesDisplayName.VEB=Venezuelsk\u00fd bolivar
+currenciesDisplayName.MLF=Malsk\u00fd frank
currenciesDisplayName.ILS=Izraelsk\u00fd \u0161ekel
+currenciesDisplayName.MXP=Mexick\u00e9 striborn\u00e9 peso (1861-1992)
+currenciesDisplayName.PES=Peruvsk\u00fd sol
currenciesDisplayName.GYD=Guyansk\u00fd dol\u00e1r
-currenciesDisplayName.AMD=Armensk\u00fd dram
+currenciesDisplayName.MXN=Mexick\u00e9 peso
currenciesDisplayName.ILP=Izraelsk\u00e1 libra
-currenciesDisplayName.MLF=Malsk\u00fd frank
-currenciesDisplayName.ILL=Izraelsk\u00fd \u0161ekel
-currenciesDisplayName.VEB=Venezuelsk\u00fd bolivar
-currenciesDisplayName.ALX=Alb\u00e1nske dol\u00e1rov\u00e9 certifik\u00e1ty
+currenciesDisplayName.SKK=Slovensk\u00e1 koruna
+currenciesDisplayName.CYP=Cyprusk\u00e1 libra
+currenciesDisplayName.XDR=\u0160peci\u00e1lne pr\u00e1va \u010derpania
+currenciesDisplayName.PEN=Peruvsk\u00fd sol Nuevo
currenciesDisplayName.LRD=Lib\u00e9rsk\u00fd dol\u00e1r
-currenciesDisplayName.ALV=Alb\u00e1nsky valutov\u00fd lek
+currenciesDisplayName.PEI=Peruvsk\u00fd inti
+currenciesDisplayName.AMD=Armensk\u00fd dram
+currenciesDisplayName.BSD=Bahamsk\u00fd dol\u00e1r
currenciesDisplayName.HRK=Chorv\u00e1tska kuna
-currenciesDisplayName.REF=Reunion frank
+currenciesDisplayName.CLP=\u010c\u00edlske peso
currenciesDisplayName.HRD=Chorv\u00e1tsky din\u00e1r
-currenciesDisplayName.ALL=Alb\u00e1nsky lek
-currenciesDisplayName.JEP=Jersey libra
-currenciesDisplayName.ALK=Alb\u00e1nsky lek (1946-1961)
-currenciesDisplayName.MKN=Maced\u00f3nsky den\u00e1r (1992-1993)
-currenciesDisplayName.VDP=Severovietnamsk\u00fd Viet Minh Piastre Dong Viet
-currenciesDisplayName.VDN=Severovietnamsk\u00fd nov\u00fd Dong
-currenciesDisplayName.MKD=Maced\u00f3nsky den\u00e1r
-currenciesDisplayName.VDD=Severovietnamsk\u00fd Piastre Dong Viet
-currenciesDisplayName.TPP=Timorsk\u00e1 pataca
currenciesDisplayName.XPF=CFP frank
-currenciesDisplayName.BEL=Belgick\u00fd frank (finan\u010dn\u00fd)
-currenciesDisplayName.GWP=Guinea-Bissau peso
-currenciesDisplayName.KWD=Kuvaitsk\u00fd din\u00e1r
-currenciesDisplayName.GWM=Portugalsk\u00e9 Guinea Mil Reis
-currenciesDisplayName.BEF=Belgick\u00fd frank
+currenciesDisplayName.FRF=Franc\u00fazsky frank
+currenciesDisplayName.BRR=Braz\u00edlske cruzeiro
+currenciesDisplayName.MKD=Maced\u00f3nsky den\u00e1r
+currenciesDisplayName.CLF=\u010c\u00edlske Unidades de Fomento
+currenciesDisplayName.ALL=Alb\u00e1nsky lek
+currenciesDisplayName.BRN=Braz\u00edlske Cruzado Novo
+currenciesDisplayName.MWK=Malavsk\u00e1 kwacha
+currenciesDisplayName.BRL=Boliv\u00edjsky real
currenciesDisplayName.TPE=Timorsk\u00e9 eskudo
-currenciesDisplayName.BEC=Belgick\u00fd frank (konvertibiln\u00fd)
-currenciesDisplayName.GWE=Portugalsk\u00e1 Guinea eskudo
+currenciesDisplayName.BRE=Boliv\u00edjske cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Boliv\u00edjske cruzado
+currenciesDisplayName.BRB=Boliv\u00edjske Cruzeiro Novo (1967-1986)
+currenciesDisplayName.DEM=Nemeck\u00e1 marka
+currenciesDisplayName.KWD=Kuvaitsk\u00fd din\u00e1r
+currenciesDisplayName.XCD=East Caribbean dol\u00e1r
+currenciesDisplayName.NPR=Nep\u00e1lska rupia
+currenciesDisplayName.GWP=Guinea-Bissau peso
+currenciesDisplayName.YUN=Juhosl\u00e1vsky din\u00e1r
currenciesDisplayName.SVC=El Salvadorsk\u00fd colon
-currenciesDisplayName.CWG=Curacao guilder
-currenciesDisplayName.BDT=Banglad\u00e9\u0161ska taka
-currenciesDisplayName.TOS=Tonga libra
-currenciesDisplayName.TOP=Tonga Pa\u02bbanga
+currenciesDisplayName.YUM=Juhosl\u00e1vsky Noviy din\u00e1r
+currenciesDisplayName.BEL=Belgick\u00fd frank (finan\u010dn\u00fd)
+currenciesDisplayName.SIT=Slovinsk\u00fd Tolar
+currenciesDisplayName.JPY=Japonsk\u00fd yen
currenciesDisplayName.XOF=CFA frank BCEAO
+currenciesDisplayName.MVR=Maldivsk\u00e1 rufiyaa
+currenciesDisplayName.GWE=Portugalsk\u00e1 Guinea eskudo
+currenciesDisplayName.BEF=Belgick\u00fd frank
+currenciesDisplayName.TOP=Tonga Pa\u02bbanga
+currenciesDisplayName.YUD=Juhosl\u00e1vsky din\u00e1r
+currenciesDisplayName.BEC=Belgick\u00fd frank (konvertibiln\u00fd)
currenciesDisplayName.SUR=Sovietsk\u00fd rube\u013e
-currenciesDisplayName.SUN=Sovietsk\u00fd nov\u00fd rube\u013e
-currenciesDisplayName.NCF=New Caledonia frank Germinal
-currenciesDisplayName.CVE=Cape Verde eskudo
-currenciesDisplayName.XNF=Franc\u00fazske Antilly CFA frank
+currenciesDisplayName.ROL=Rumunsk\u00fd leu
+currenciesDisplayName.DDM=V\u00fdchodonemeck\u00e1 marka
+currenciesDisplayName.BDT=Banglad\u00e9\u0161ska taka
+currenciesDisplayName.AWG=Arubsk\u00fd guilder
+currenciesDisplayName.NOK=N\u00f3rksy krone
+currenciesDisplayName.MUR=Mauritsk\u00e1 rupia
currenciesDisplayName.ZAR=Juhoafrick\u00fd rand
-currenciesDisplayName.DOP=Dominik\u00e1nske peso
-currenciesDisplayName.CUX=Kub\u00e1nske certifik\u00e1ty
-currenciesDisplayName.ZAP=Juhoafrick\u00e1 libra
+currenciesDisplayName.SHP=Libra
+currenciesDisplayName.XAU=Zlato
currenciesDisplayName.ZAL=Juhoafrick\u00fd rand (financial)
+currenciesDisplayName.VND=Vietnamsk\u00fd dong
+currenciesDisplayName.TZS=Tanzansk\u00fd \u0161iling
+currenciesDisplayName.GIP=Gibraltarsk\u00e1 libra
currenciesDisplayName.TND=Tunisk\u00fd din\u00e1r
-currenciesDisplayName.CUP=Kub\u00e1nske peso
-currenciesDisplayName.GUF=Franc\u00fazska Guyana frank Guiana
+currenciesDisplayName.CVE=Cape Verde eskudo
currenciesDisplayName.UGX=Ugandsk\u00fd \u0161iling
-currenciesDisplayName.LNR=Ceylonsk\u00e1 rupia
-currenciesDisplayName.AIF=Affars a Issas frank
-currenciesDisplayName.VAL=Vatik\u00e1nska lira
-currenciesDisplayName.STE=Sao Tome a Principe eskudo
+currenciesDisplayName.ZMK=Zambsk\u00e1 kwacha
+currenciesDisplayName.JOD=Jord\u00e1nsky din\u00e1r
+currenciesDisplayName.XAF=CFA frank BEAC
+currenciesDisplayName.LBP=Libanonsk\u00e1 libra
currenciesDisplayName.UGS=Ugandan \u0161iling (1966-1987)
currenciesDisplayName.STD=Sao Tome a Principe dobra
-currenciesDisplayName.MHD=Marshall Islands dol\u00e1r
-currenciesDisplayName.NZP=Nikaragujsk\u00e1 libra
currenciesDisplayName.WST=Z\u00e1padn\u00e1 Samoa tala
-currenciesDisplayName.WSP=Z\u00e1padn\u00e1 Samoa libra
-currenciesDisplayName.HNL=Hodurask\u00e1 lempira
-currenciesDisplayName.XMF=Franc\u00fazsky Metropolitan Nouveau frank
+currenciesDisplayName.KHR=Kambod\u017esk\u00fd riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominik\u00e1nske peso
+currenciesDisplayName.BOV=Boliv\u00edjske mvdol
+currenciesDisplayName.MTP=Maltsk\u00e1 libra
+currenciesDisplayName.USS=US dol\u00e1r (Same day)
+currenciesDisplayName.BOP=Boliv\u00edjske peso
+currenciesDisplayName.MTL=Maltsk\u00e1 lira
+currenciesDisplayName.CUP=Kub\u00e1nske peso
currenciesDisplayName.TMM=Turkm\u00e9nsky manat
-currenciesDisplayName.GTQ=Guatemalsk\u00fd quetzal
+currenciesDisplayName.USN=US dol\u00e1r (Next day)
+currenciesDisplayName.SGD=Singap\u00farsky dol\u00e1r
currenciesDisplayName.NZD=Novoz\u00e9landsk\u00fd dol\u00e1r
-currenciesDisplayName.SSP=\u0160k\u00f3tska libra
-currenciesDisplayName.BBD=Barbadosk\u00fd dol\u00e1r
+currenciesDisplayName.USD=US dol\u00e1r
+currenciesDisplayName.HNL=Hodurask\u00e1 lempira
+currenciesDisplayName.ITL=Taliansk\u00e1 lira
+currenciesDisplayName.PAB=Panamsk\u00e1 balboa
+currenciesDisplayName.GTQ=Guatemalsk\u00fd quetzal
+currenciesDisplayName.LAK=Laosk\u00fd kip
+currenciesDisplayName.GHC=Ghansk\u00fd cedi
+currenciesDisplayName.AUD=Austr\u00e1lsky dol\u00e1r
currenciesDisplayName.NAD=Namibsk\u00fd dol\u00e1r
+currenciesDisplayName.KGS=Kyrgysk\u00fd som
currenciesDisplayName.MGF=Madagaskarsk\u00fd frank
+currenciesDisplayName.CHF=\u0160vaj\u010diarsk\u00fd frank
+currenciesDisplayName.BBD=Barbadosk\u00fd dol\u00e1r
currenciesDisplayName.MGA=Madagaskarsk\u00fd ariary
-currenciesDisplayName.EGP=Egyptsk\u00e1 libra
-currenciesDisplayName.BZH=Britisk\u00fd Hondurask\u00fd dol\u00e1r
+currenciesDisplayName.PYG=Paraguaysk\u00e9 guarani
currenciesDisplayName.PLZ=Polsk\u00fd zloty (1950-1995)
-currenciesDisplayName.BAN=Bosniansk\u00fd nov\u00fd din\u00e1r
-currenciesDisplayName.PLX=Polsk\u00e9 certifik\u00e1ty v US dol\u00e1roch
-currenciesDisplayName.BAM=Bosniansk\u00fd konvertibiln\u00e1 marka
-currenciesDisplayName.BZD=Belize dol\u00e1r
-currenciesDisplayName.BAD=Bosniansk\u00fd din\u00e1r
-currenciesDisplayName.PLN=Polsk\u00fd zloty
currenciesDisplayName.YER=Jemensk\u00fd rial
+currenciesDisplayName.ATS=Rak\u00fasky \u0161iling
+currenciesDisplayName.ETB=Ethiopsk\u00fd birr
+currenciesDisplayName.BND=Bruneisk\u00fd dol\u00e1r
+currenciesDisplayName.JMD=Jamajsk\u00fd dol\u00e1r
+currenciesDisplayName.EGP=Egyptsk\u00e1 libra
+currenciesDisplayName.PLN=Polsk\u00fd zloty
+currenciesDisplayName.DZD=Al\u017e\u00edrsky din\u00e1r
+currenciesDisplayName.ISK=Islandsk\u00e1 krona
currenciesDisplayName.SRG=Surinamsk\u00fd guilder
-currenciesDisplayName.CSK=\u010ceskoslovensk\u00e1 koruna
+currenciesDisplayName.LYD=Libyjsk\u00fd din\u00e1r
+currenciesDisplayName.BZD=Belize dol\u00e1r
+currenciesDisplayName.BAM=Bosniansk\u00fd konvertibiln\u00e1 marka
+currenciesDisplayName.ESP=\u0160panielsk\u00e1 peseta
currenciesDisplayName.KRW=Juhok\u00f3rejsk\u00fd won
+currenciesDisplayName.NLG=Nizozemsk\u00fd guilder
+currenciesDisplayName.MRO=Mauritania Ouguiya
+currenciesDisplayName.BAD=Bosniansk\u00fd din\u00e1r
+currenciesDisplayName.ZWD=Zimbabsk\u00fd dol\u00e1r
+currenciesDisplayName.SEK=\u0160v\u00e9dska krona
+currenciesDisplayName.CSK=\u010ceskoslovensk\u00e1 koruna
currenciesDisplayName.BYR=Belarussian rube\u013e
-currenciesDisplayName.YEI=Jemensk\u00fd Imadi Riyal
-currenciesDisplayName.BYL=Belarussian rube\u013e (1992-1994)
-currenciesDisplayName.CSC=\u010ceskoslovensk\u00e1 koruna
-currenciesDisplayName.KRO=Juhok\u00f3rejsk\u00fd star\u00fd won
-currenciesDisplayName.KRH=Juhok\u00f3rejsk\u00fd hwan
-currenciesDisplayName.BYB=Belarussian nov\u00fd rube\u013e (1994-1999)
-currenciesDisplayName.SQS=Som\u00e1lsky \u0161iling
-currenciesDisplayName.GRN=Gr\u00e9cka nov\u00e1 drachma
+currenciesDisplayName.IRR=Ir\u00e1nsky rial
currenciesDisplayName.PKR=Pakistansk\u00e1 rupia
-currenciesDisplayName.ZWD=Zimbabsk\u00fd dol\u00e1r
-currenciesDisplayName.LKR=\u0160rilansk\u00e1 rupia
-currenciesDisplayName.GRD=Gr\u00e9cka drachma
-currenciesDisplayName.IEP=\u00cdrska libra
-currenciesDisplayName.YDD=Jemensk\u00fd din\u00e1r
-currenciesDisplayName.RWF=Rwandsk\u00fd frank
-currenciesDisplayName.CRC=Kostariksk\u00fd colon
-currenciesDisplayName.TJS=Tad\u017eikistansk\u00fd somoni
-currenciesDisplayName.TJR=Tad\u017eikistansk\u00fd rube\u013e
-currenciesDisplayName.EEK=Est\u00f3nska kroon
-currenciesDisplayName.GQP=Rovn\u00edkov\u00e1 Guinea Peseta Guineana
-currenciesDisplayName.MDR=Moldavsk\u00fd rube\u013e
-currenciesDisplayName.HKD=Hong Kongsk\u00fd dol\u00e1r
-currenciesDisplayName.DKK=D\u00e1nska krone
-currenciesDisplayName.MDL=Moldavsk\u00fd leu
-currenciesDisplayName.GQF=Rovn\u00edkov\u00e1 Guinea franko
-currenciesDisplayName.GQE=Rovn\u00edkov\u00e1 Guinea Ekwele Guineana
-currenciesDisplayName.IDR=Indon\u00e9zska rupia
-currenciesDisplayName.AED=UAE dirham
-currenciesDisplayName.KPW=Severok\u00f3rejsk\u00fd won
-currenciesDisplayName.IDN=Indon\u00e9zska nov\u00e1 rupia
-currenciesDisplayName.BWP=Botswanan Pula
-currenciesDisplayName.MDC=Moldavsk\u00fd Leu Cupon
-currenciesDisplayName.IDJ=Indon\u00e9zska Java rupia
-currenciesDisplayName.KPP=Severok\u00f3rejsk\u00fd won
-currenciesDisplayName.IDG=Indon\u00e9zsky nica guilder
-currenciesDisplayName.VUV=Vanuatu vatu
-currenciesDisplayName.XID=Islamsk\u00fd din\u00e1r
-currenciesDisplayName.SOS=Som\u00e1lsky \u0161iling
-currenciesDisplayName.ADP=Andorsk\u00e1 peseta
-currenciesDisplayName.RUR=Rusk\u00fd rube\u013e (1991-1998)
-currenciesDisplayName.GPF=Guadeloupsk\u00fd frank
-currenciesDisplayName.DJF=D\u017eibutsk\u00fd frank
-currenciesDisplayName.ADD=Andorsk\u00fd diner
-currenciesDisplayName.MCG=Monack\u00fd frank Germinal
-currenciesDisplayName.MCF=Monack\u00fd frank Nouveau
-currenciesDisplayName.ECV=Ekuadorsk\u00fd Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ekuadorsk\u00fd sucre
-currenciesDisplayName.LIF=Lichten\u0161teinsk\u00fd frank
-currenciesDisplayName.RUB=Rusk\u00fd rube\u013e
-currenciesDisplayName.PHP=Filip\u00ednske peso
-currenciesDisplayName.UZS=Uzbekistansk\u00fd sum
-currenciesDisplayName.COP=Colombijsk\u00e9 peso
-currenciesDisplayName.THB=Thajsk\u00fd b\u00e1t
-currenciesDisplayName.IBP=Severo\u00edrska libra
-currenciesDisplayName.BUR=Burmese rupia
-currenciesDisplayName.COF=Kon\u017esk\u00fd CFA frank
-currenciesDisplayName.BUK=Burmese Kyat
-currenciesDisplayName.COB=Colombijsk\u00e9 papierov\u00e9 peso
-currenciesDisplayName.UZC=Uzbekistansk\u00fd Coupon Som
-currenciesDisplayName.UAK=Ukrainsk\u00fd karbovanetz
-currenciesDisplayName.QAR=Qatarsk\u00fd rial
-currenciesDisplayName.UAH=Ukrainsk\u00e1 hrivna
-currenciesDisplayName.GNS=Guinejsk\u00fd syli
-currenciesDisplayName.CNY=\u010c\u00ednsky Yuan Renminbi
-currenciesDisplayName.MZM=Mozambijsk\u00e9 metical
-currenciesDisplayName.CNX=\u010c\u00ednsky certifik\u00e1ty v US dol\u00e1roch
-currenciesDisplayName.UYU=Uruguajsk\u00e9 peso Uruguayo
-currenciesDisplayName.GNI=Guinejsk\u00fd frank (1960-1972)
-currenciesDisplayName.SML=San Marino lira
-currenciesDisplayName.MZE=Mozambijsk\u00e9 eskudo
-currenciesDisplayName.CNP=\u010c\u00ednsky Jen Min Piao Yuan
-currenciesDisplayName.GNF=Guinejsk\u00fd frank
-currenciesDisplayName.OMS=Om\u00e1nsk\u00fd rial Saidi
-currenciesDisplayName.PGK=Papua Nov\u00e1 Guinea kina
-currenciesDisplayName.OMR=Om\u00e1nsk\u00fd rial
-currenciesDisplayName.UYP=Uruguajsk\u00e9 peso (1975-1993)
-currenciesDisplayName.XFU=Franc\u00fazsky UIC-frank
-currenciesDisplayName.BTR=Bhutan rupia
-currenciesDisplayName.ZRZ=Zairsk\u00fd Zaire
-currenciesDisplayName.MAF=Marock\u00fd frank
-currenciesDisplayName.MAD=Marock\u00fd dirham
-currenciesDisplayName.BTN=Bhutansky ngultrum
-currenciesDisplayName.XFO=Franc\u00fazsky zlat\u00fd frank
-currenciesDisplayName.UYF=Uruguajsk\u00e9 peso Fuerte
-currenciesDisplayName.MYR=Malajsk\u00fd ringgit
-currenciesDisplayName.ZRN=Zairsk\u00fd nov\u00fd zaire
-currenciesDisplayName.AZM=Azerbaid\u017eansk\u00fd manat
-currenciesDisplayName.GMP=Gambsk\u00e1 libra
-currenciesDisplayName.KMF=Comoro frank
-currenciesDisplayName.SLL=Sierra Leone Leone
-currenciesDisplayName.GMD=Gambsk\u00fd dalasi
-currenciesDisplayName.BSP=Bahamsk\u00e1 libra
-currenciesDisplayName.CMF=Camerunsk\u00fd CFA frank
-currenciesDisplayName.MXV=Mexick\u00e9 Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA frank BCEAEC
-currenciesDisplayName.BSD=Bahamsk\u00fd dol\u00e1r
-currenciesDisplayName.MXP=Mexick\u00e9 striborn\u00e9 peso (1861-1992)
-currenciesDisplayName.MXN=Mexick\u00e9 peso
-currenciesDisplayName.PES=Peruvsk\u00fd sol
-currenciesDisplayName.GLK=Gr\u00f3nsky krone
-currenciesDisplayName.BRZ=Braz\u00edlske cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruvsk\u00fd sol Nuevo
-currenciesDisplayName.CLP=\u010c\u00edlske peso
-currenciesDisplayName.SKK=Slovensk\u00e1 koruna
-currenciesDisplayName.PEI=Peruvsk\u00fd inti
-currenciesDisplayName.BRR=Braz\u00edlske cruzeiro
-currenciesDisplayName.XDR=\u0160peci\u00e1lne pr\u00e1va \u010derpania
-currenciesDisplayName.FRG=Franc\u00fazsky frank Germinal/frank Poincare
-currenciesDisplayName.FRF=Franc\u00fazsky frank
-currenciesDisplayName.BRN=Braz\u00edlske Cruzado Novo
-currenciesDisplayName.CLF=\u010c\u00edlske Unidades de Fomento
-currenciesDisplayName.CLE=\u010c\u00edlske eskudo
-currenciesDisplayName.BRL=Boliv\u00edjsky real
-currenciesDisplayName.CLC=\u010c\u00edlsky condor
-currenciesDisplayName.BRE=Boliv\u00edjske cruzeiro (1990-1993)
-currenciesDisplayName.DES=Nemeck\u00e1 sperrmarka
-currenciesDisplayName.MWP=Malavsk\u00e1 libra
-currenciesDisplayName.BRC=Boliv\u00edjske cruzado
-currenciesDisplayName.BRB=Boliv\u00edjske Cruzeiro Novo (1967-1986)
-currenciesDisplayName.MWK=Malavsk\u00e1 kwacha
-currenciesDisplayName.PDR=Transdniestria rube\u013e
-currenciesDisplayName.DEM=Nemeck\u00e1 marka
-currenciesDisplayName.TDF=Chadsk\u00fd CFA frank
-currenciesDisplayName.PDN=Transdniestria nov\u00fd rube\u013e
-currenciesDisplayName.PDK=Transdniestria rube\u013e Kupon
-currenciesDisplayName.NPR=Nep\u00e1lska rupia
-currenciesDisplayName.CKD=Cook Islands dol\u00e1r
-currenciesDisplayName.JPY=Japonsk\u00fd yen
-currenciesDisplayName.MVR=Maldivsk\u00e1 rufiyaa
-currenciesDisplayName.XCF=CFA Nouveau frank
-currenciesDisplayName.MVP=Maldivsk\u00e1 rupia
-currenciesDisplayName.XCD=East Caribbean dol\u00e1r
-currenciesDisplayName.SIT=Slovinsk\u00fd Tolar
-currenciesDisplayName.YUR=Juhosl\u00e1vsky din\u00e1r
-currenciesDisplayName.AWG=Arubsk\u00fd guilder
-currenciesDisplayName.YUO=Juhosl\u00e1vsky okt\u00f3brov\u00fd din\u00e1r
-currenciesDisplayName.DDM=V\u00fdchodonemeck\u00e1 marka
-currenciesDisplayName.YUN=Juhosl\u00e1vsky din\u00e1r
-currenciesDisplayName.YUM=Juhosl\u00e1vsky Noviy din\u00e1r
-currenciesDisplayName.TCC=Turks a Caicos Crown
-currenciesDisplayName.YUG=Juhosl\u00e1vsky din\u00e1r
-currenciesDisplayName.YUF=Juhosl\u00e1vsky din\u00e1r
-currenciesDisplayName.RON=Rumunsk\u00fd nov\u00fd leu
-currenciesDisplayName.YUD=Juhosl\u00e1vsky din\u00e1r
-currenciesDisplayName.ROL=Rumunsk\u00fd leu
-currenciesDisplayName.SIB=Slovinsk\u00fd tolar Bons
-currenciesDisplayName.NOK=N\u00f3rksy krone
-currenciesDisplayName.MUR=Mauritsk\u00e1 rupia
-currenciesDisplayName.GIP=Gibraltarsk\u00e1 libra
-currenciesDisplayName.VNS=Vietnamsk\u00fd n\u00e1rodn\u00fd dong
-currenciesDisplayName.VNR=Vietnamsk\u00fd dong
-currenciesDisplayName.KID=Kiribati dol\u00e1r
-currenciesDisplayName.SHP=Libra
-currenciesDisplayName.VNN=Vietnamsk\u00fd nov\u00fd dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermudsk\u00fd dol\u00e1r
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=jan®feb®mar®apr®m\u00e1j®j\u00fan®j\u00fal®aug®sep®okt®nov®dec®®
months=janu\u00e1r®febru\u00e1r®marec®apr\u00edl®m\u00e1j®j\u00fan®j\u00fal®august®september®okt\u00f3ber®november®december®®
shortWeekdays=®Ne®Po®Ut®St®\u0160t®Pi®So®
@@ -779,7 +379,9 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Gr\u00f3nsko
territories.SV=Salvador
+territories.062=Ju\u017en\u00e1 \u00c1zia
territories.ST=Sv\u00e4t\u00fd Tom\u00e1\u0161 a Princove ostrovy
+territories.061=Polyn\u00e9zia
territories.GI=Gibralt\u00e1r
territories.GH=Ghana
territories.SR=Surinam
@@ -803,9 +405,12 @@ territories.SC=Seychelsk\u00e9 ostrovy
territories.SB=\u0160alam\u00fanove ostrovy
territories.SA=Saudsk\u00e1 Ar\u00e1bia
territories.FR=Franc\u00fazsko
+territories.057=Mikron\u00e9sia
territories.FO=Faersk\u00e9 ostrovy
territories.FM=Mikron\u00e9zia, Federat\u00edvne \u0161t\u00e1ty
territories.RW=Rwanda
+territories.054=Melan\u00e9zia
+territories.053=Austr\u00e1lia a Nov\u00fd Z\u00e9land
territories.FK=Falklandsk\u00e9 ostrovy
territories.RU=Rusk\u00e1 feder\u00e1cia
territories.FJ=Fid\u017ei
@@ -815,20 +420,26 @@ territories.RE=Reunion
territories.ET=Eti\u00f3pia
territories.ES=\u0160panielsko
territories.ER=Eritrea
+territories.833=Ostrov Man
territories.EH=Z\u00e1padn\u00e1 Sahara
territories.EG=Egypt
+territories.830=Kan\u00e1l La Manche
territories.EE=Est\u00f3nsko
+territories.QO=Tichomorie - ostatn\u00e9
territories.EC=Ekv\u00e1dor
territories.DZ=Al\u017e\u00edrsko
territories.QA=Katar
+territories.039=Ju\u017en\u00e1 Eur\u00f3pa
territories.DO=Dominik\u00e1nska republika
territories.PY=Paraguaj
+territories.035=Juhov\u00fdchodn\u00e1 \u00c1zia
territories.DM=Dominika
territories.PW=Palau
territories.DK=D\u00e1nsko
territories.DJ=D\u017eibuti
territories.PT=Portugalsko
territories.PS=Palest\u00ednske \u00fazemie
+territories.030=V\u00fdchodn\u00e1 \u00c1zia
territories.PR=Portoriko
territories.DE=Nemecko
territories.PN=Pitcairnove ostrovy
@@ -845,13 +456,16 @@ territories.CX=Viano\u010dn\u00fd ostrov
territories.CV=Kapverdy
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Srbsko a \u010cierna Hora
territories.CR=Kostarika
+territories.029=Karibik
territories.CO=Kolumbia
territories.CN=\u010c\u00edna
territories.CM=Kamerun
territories.CL=\u010cile
territories.CK=Cookove ostrovy
territories.CI=Pobre\u017eie Slonoviny
+territories.021=Severn\u00e1 Amerika
territories.CH=\u0160vaj\u010diarsko
territories.CG=Kongo
territories.CF=Stredoafrick\u00e1 republika
@@ -866,13 +480,20 @@ territories.BV=Bouvetov ostrov
territories.BT=But\u00e1n
territories.BS=Bahamy
territories.BR=Braz\u00edlia
+territories.019=Americk\u00fd kontinent
+territories.018=Ju\u017en\u00e1 Afrika
territories.NZ=Nov\u00fd Z\u00e9land
territories.BO=Bol\u00edvia
+territories.017=Stredn\u00e1 Afrika
territories.BN=Brunej
territories.BM=Bermudy
+territories.015=Severn\u00e1 Afrika
+territories.014=V\u00fdchodn\u00e1 Afrika
+territories.013=Stredn\u00e1 Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Z\u00e1padn\u00e1 Afrika
territories.BH=Bahrajn
territories.NR=Nauru
territories.BG=Bulharsko
@@ -890,6 +511,7 @@ territories.NG=Nig\u00e9ria
territories.NF=Norfolkov ostrov
territories.AZ=Azerbajd\u017ean
territories.NE=Niger
+territories.AX=Alandsk\u00e9 ostrovy
territories.NC=Nov\u00e1 Kaled\u00f3nia
territories.AW=Aruba
territories.ZM=Zambia
@@ -900,17 +522,21 @@ territories.AS=Americk\u00e1 Samoa
territories.AR=Argent\u00edna
territories.AQ=Antarctica
territories.MZ=Mozambik
+territories.200=\u010ceskoslovensko
territories.AO=Angola
territories.MY=Malajzia
territories.AN=Holandsk\u00e9 Antily
territories.MX=Mexiko
+territories.005=Ju\u017en\u00e1 Amerika
territories.AM=Arm\u00e9nsko
territories.MW=Malawi
territories.AL=Alb\u00e1nsko
territories.MV=Maldivy
territories.ZA=Ju\u017en\u00e1 Afrika
territories.MU=Maur\u00edcius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Svet
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Maurit\u00e1nia
@@ -925,7 +551,6 @@ territories.MN=Mongolsko
territories.MM=Mjanmarsko
territories.ML=Mali
territories.MK=Maced\u00f3nsko, republika
-territories.YU=Juhosl\u00e1via
territories.YT=Mayotte
territories.MH=Marshallove ostrovy
territories.MG=Madagaskar
@@ -935,10 +560,14 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=L\u00fdbijsk\u00e1 arabsk\u00e1 d\u017eamah\u00edrija
territories.LV=Loty\u0161sko
+territories.155=Z\u00e1padn\u00e1 Eur\u00f3pa
territories.LU=Luxembursko
+territories.154=Severn\u00e1 Eur\u00f3pa
territories.LT=Litva
territories.LS=Lesotho
territories.LR=Lib\u00e9ria
+territories.151=V\u00fdchodn\u00e1 Eur\u00f3pa
+territories.150=Eur\u00f3pa
territories.LK=Sr\u00ed Lanka
territories.LI=Lichten\u0161tajnsko
territories.LC=Sv\u00e4t\u00e1 Lucia
@@ -947,6 +576,8 @@ territories.LA=Laosk\u00e1 \u013eudovodemokratick\u00e1 republika
territories.KZ=Kazachstan
territories.KY=Kajmansk\u00e9 ostrovy
territories.KW=Kuvajt
+territories.145=Z\u00e1padn\u00e1 \u00c1zia
+territories.142=\u00c1zia
territories.KR=K\u00f3rea, Ju\u017en\u00e1
territories.KP=K\u00f3rea, Severn\u00e1
territories.KN=Saint Kitts a Nevis
@@ -1005,8 +636,8 @@ languages.el=gr\u00e9cky
languages.nl=holandsk\u00fd
languages.bg=bulharsk\u00fd
languages.lv=loty\u0161sk\u00fd
-languages.he=hebrejsk\u00fd
languages.cs=\u010desk\u00fd
+languages.he=hebrejsk\u00fd
languages.it=taliansky
languages.lt=litovsk\u00fd
languages.fr=franc\u00fazsky
@@ -1021,8 +652,8 @@ languages.pl=po\u013esk\u00fd
languages.sl=slovinsk\u00fd
languages.sk=slovensk\u00fd
languages.de=nemeck\u00fd
-languages.hu=ma\u010farsk\u00fd
languages.et=est\u00f3nsky
+languages.hu=ma\u010farsk\u00fd
languages.es=\u0161panielsky
-languages.hr=chorv\u00e1tsky
languages.da=d\u00e1nsky
+languages.hr=chorv\u00e1tsky
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl.properties
index 377ea4e..991615e 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl.properties
@@ -8,16 +8,24 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
+currenciesDisplayName.INR=Indijski Rupi
+currenciesDisplayName.RUB=Ruska Rublja
+currenciesDisplayName.JPY=Japonski Jen
+currenciesDisplayName.BRL=Brazilski Real
+currenciesDisplayName.CNY=Kitajski Yuan Renminbi
+currenciesDisplayName.USD=Ameri\u0161ki Dolar
+currenciesDisplayName.EUR=Evro
currenciesDisplayName.SIT=Slovenski tolar
-currenciesSymbol.SIT=SIT
+currenciesDisplayName.GBP=Britanski Funt Sterling
shortMonths=jan®feb®mar®apr®maj®jun®jul®avg®sep®okt®nov®dec®®
months=januar®februar®marec®april®maj®junij®julij®avgust®september®oktober®november®december®®
shortWeekdays=®ned®pon®tor®sre®\u010det®pet®sob®
weekdays=®nedelja®ponedeljek®torek®sreda®\u010detrtek®petek®sobota®
firstDayOfWeek=mon
-eras=pr.n.\u0161.®po Kr.®
-shortDateFormat=yy.M.d
-mediumDateFormat=yyyy.M.d
+eras=pr.n.\u0161.®n.\u0161.®
+ampms=dop.®pop.®
+shortDateFormat=d.M.yy
+mediumDateFormat=d.M.yyyy
longDateFormat=dd. MMMM yyyy
fullDateFormat=EEEE, dd. MMMM yyyy
shortTimeFormat=H:mm
@@ -46,7 +54,9 @@ territories.GN=Gvineja
territories.GM=Gambija
territories.GL=Grenlandija
territories.SV=Salvador
+territories.062=Ju\u017eno-centralna Azija
territories.ST=Sao Tome in Principe
+territories.061=Polinezija
territories.GI=Gibraltar
territories.GH=Gana
territories.SR=Surinam
@@ -70,9 +80,12 @@ territories.SC=Sej\u0161eli
territories.SB=Salomonovo oto\u010dje
territories.SA=Saudova Arabija
territories.FR=Francija
+territories.057=Micronezija
territories.FO=Fererski otoki
territories.FM=Mikronezija
territories.RW=Ruanda
+territories.054=Melanezija
+territories.053=Avstralija i Nova Zelandija
territories.FK=Falklandski (Malvinski) otoki
territories.RU=Ruska federacija
territories.FJ=Fid\u017ei
@@ -82,20 +95,26 @@ territories.RE=Reunion
territories.ET=Etiopija
territories.ES=\u0160panija
territories.ER=Eritreja
+territories.833=Otok Man
territories.EH=Zahodna Sahara
territories.EG=Egipt
+territories.830=Kanalski otoki
territories.EE=Estonija
+territories.QO=Ostala oceanija
territories.EC=Ekvador
territories.DZ=Al\u017eirija
territories.QA=Katar
+territories.039=Ju\u017ena Evropa
territories.DO=Dominikanska republika
territories.PY=Paragvaj
+territories.035=Jugovzhodna Azija
territories.DM=Dominika
territories.PW=Palau
territories.DK=Danska
territories.DJ=D\u017eibuti
territories.PT=Portugalska
territories.PS=Palestinsko ozemlje
+territories.030=Vzhodna Azija
territories.PR=Portoriko
territories.DE=Nem\u010dija
territories.PN=Pitcairn
@@ -112,13 +131,16 @@ territories.CX=Bo\u017ei\u010dni otok
territories.CV=Kapverdski otoki
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Srbija in \u010crna gora
territories.CR=Kostarika
+territories.029=Karibi
territories.CO=Kolumbija
territories.CN=Kitajska
territories.CM=Kamerun
territories.CL=\u010cile
territories.CK=Cookovi otoki
territories.CI=Slonoko\u0161\u010dena obala
+territories.021=Severna Amerika
territories.CH=\u0160vica
territories.CG=Kongo
territories.CF=Centralnoafri\u0161ka republika
@@ -133,13 +155,20 @@ territories.BV=Otok Bouvet
territories.BT=Butan
territories.BS=Bahami
territories.BR=Brazilija
+territories.019=Amerike
+territories.018=Ju\u017ena Afrika
territories.NZ=Nova Zelandija
territories.BO=Bolivija
+territories.017=Centralna Afrika
territories.BN=Brunej
territories.BM=Bermuda
+territories.015=Severna Afrika
+territories.014=Vzhodna Afrika
+territories.013=Centralna Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Zahodna Afrika
territories.BH=Bahrajn
territories.NR=Nauru
territories.BG=Bolgarija
@@ -157,6 +186,7 @@ territories.NG=Nigerija
territories.NF=Otok Norfolk
territories.AZ=Azerbajd\u017ean
territories.NE=Niger
+territories.AX=Alandski otoki
territories.NC=Nova Kaledonija
territories.AW=Aruba
territories.ZM=Zambija
@@ -165,19 +195,23 @@ territories.AU=Avstralija
territories.AT=Avstrija
territories.AS=Ameri\u0161ka Samoa
territories.AR=Argentina
+territories.009=Oceanija
territories.AQ=Antarktika
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malezija
territories.AN=Nizozemski Antili
territories.MX=Mehika
+territories.005=Ju\u017ena Amerika
territories.AM=Armenija
territories.MW=Malavi
territories.AL=Albanija
territories.MV=Maldivi
territories.ZA=Ju\u017ena Afrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Svet
territories.AI=Angvila
territories.MS=Montserrat
territories.MR=Mavretanija
@@ -192,7 +226,6 @@ territories.MN=Mongolija
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Republika Makedonija
-territories.YU=Jugoslavija
territories.YT=Mayotte
territories.MH=Marshallovi otoki
territories.MG=Madagaskar
@@ -202,10 +235,14 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=Libija
territories.LV=Latvija
+territories.155=Zapadna Evropa
territories.LU=Luxemburg
+territories.154=Severna Evropa
territories.LT=Litva
territories.LS=Lesoto
territories.LR=Liberija
+territories.151=Vzhodna Evropa
+territories.150=Evropa
territories.LK=\u0160rilanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -214,6 +251,8 @@ territories.LA=Ljudska demokrati\u010dna republika Laos
territories.KZ=Kazahstan
territories.KY=Kajmanski otoki
territories.KW=Kuvajt
+territories.145=Zahodna Azija
+territories.142=Azija
territories.KR=Ju\u017ena Koreja
territories.KP=Severna Koreja
territories.KN=Saint Kitts in Nevis
@@ -271,9 +310,10 @@ languages.no=Norve\u0161\u010dina
languages.el=Gr\u0161\u010dina
languages.nl=Nizozem\u0161\u010dina
languages.bg=Bolgar\u0161\u010dina
+languages.hi=Hinduj\u0161\u010dina
languages.lv=Leton\u0161\u010dina
-languages.he=Hebrej\u0161\u010dina
languages.cs=\u010ce\u0161\u010dina
+languages.he=Hebrej\u0161\u010dina
languages.it=Italijan\u0161\u010dina
languages.lt=Litov\u0161\u010dina
languages.fr=Franco\u0161\u010dina
@@ -288,8 +328,8 @@ languages.pl=Polj\u0161\u010dina
languages.sl=Sloven\u0161\u010dina
languages.sk=Slova\u0161\u010dina
languages.de=Nem\u0161\u010dina
-languages.hu=Mad\u017ear\u0161\u010dina
languages.et=Eston\u0161\u010dina
+languages.hu=Mad\u017ear\u0161\u010dina
languages.es=\u0160pan\u0161\u010dina
-languages.hr=Hrva\u0161\u010dina
languages.da=Dan\u0161\u010dina
+languages.hr=Hrva\u0161\u010dina
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IQ.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl_SI.properties
index d0fc8f8..ee54b4f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ar_IQ.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sl_SI.properties
@@ -1,8 +1,8 @@
-# LocaleInformation_ar_IQ.properties --
+# LocaleInformation_sl_SI.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
#
# This file was automatically generated by gnu.localegen from CLDR.
-currencyFormat=\u00a4 #,##0.000;\u00a4 #,##0.000-
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so.properties
index 80daa6c..6928b1f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so.properties
@@ -5,7 +5,17 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.KES=KES
+currenciesDisplayName.INR=Indian Rupee
+currenciesDisplayName.RUB=Russian Ruble
+currenciesDisplayName.JPY=Japanese Yen
+currenciesDisplayName.BRL=Brazilian Real
+currenciesDisplayName.CNY=Chinese Yuan Renminbi
+currenciesDisplayName.USD=US Dollar
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.ETB=Itoobiya Bir
+currenciesDisplayName.SOS=Somalia Schilling
+currenciesDisplayName.DJF=Jabuuti Faran
+currenciesDisplayName.GBP=British Pound Sterling
currenciesSymbol.KES=Ksh
shortMonths=Kob®Lab®Sad®Afr®Sha®Lix®Tod®Sid®Sag®Tob®KIT®LIT®®
months=Bisha Koobaad®Bisha Labaad®Bisha Saddexaad®Bisha Afraad®Bisha Shanaad®Bisha Lixaad®Bisha Todobaad®Bisha Sideedaad®Bisha Sagaalaad®Bisha Tobnaad®Bisha Kow iyo Tobnaad®Bisha Laba iyo Tobnaad®®
@@ -28,9 +38,9 @@ territories.AT=Osteeriya
territories.MZ=Musambiig
territories.AO=Angoola
territories.MX=Meksiko
-territories.MW=Malaawi
-territories.GR=Giriigga
territories.AM=Armeeniya
+territories.GR=Giriigga
+territories.MW=Malaawi
territories.ZA=Koonfur Afrika
territories.MV=Maaldiqeen
territories.SY=Suuriya
@@ -44,6 +54,7 @@ territories.MK=Makadooniya
territories.SO=Soomaaliya
territories.GD=Giriinaada
territories.SL=Siraaliyoon
+territories.GB=United Kingdom
territories.MC=Moonako
territories.MA=Marooko
territories.SE=Iswidhan
@@ -71,11 +82,11 @@ territories.EG=Masar
territories.KH=Kamboodiya
territories.KE=Kiiniya
territories.QA=Qadar
-territories.JP=Jabbaan
territories.DK=Danmaark
+territories.JP=Jabbaan
territories.PT=Bortuqaal
-territories.JO=Urdun
territories.DJ=Jabuuti
+territories.JO=Urdun
territories.JM=Jameyka
territories.DE=Jarmal
territories.PL=Booland
@@ -86,15 +97,15 @@ territories.VE=Fenisuweela
territories.CU=Kuuba
territories.VA=Faatikaan
territories.IT=Talyaani
-territories.IS=Iislaand
territories.CN=Shiinaha
-territories.IR=Iiraan
+territories.IS=Iislaand
territories.CM=Kameruun
-territories.IQ=Ciraaq
+territories.IR=Iiraan
territories.CL=Jili
+territories.IQ=Ciraaq
territories.IN=Hindiya
territories.CH=Swiiserlaand
-territories.IL=Israa'iil
+territories.IL=Israa\u02bciil
territories.US=Qaramada Midoobey ee Maraykanka
territories.OM=Cumaan
territories.CA=Kanada
@@ -108,8 +119,8 @@ territories.HR=Korweeshiya
territories.TZ=Tansaaniya
territories.BJ=Beniin
territories.BH=Baxrayn
-territories.NO=Noorweey
territories.BE=Beljiyam
+territories.NO=Noorweey
territories.BD=Bangaala-Deesh
territories.ZW=Simbaabwe
territories.TR=Turki
@@ -122,4 +133,15 @@ territories.ZM=Saambiya
territories.TH=Taylaand
territories.TG=Toogo
territories.NA=Namiibiya
+languages.zh=Chinese
+languages.en=English
languages.so=Soomaali
+languages.ru=Russian
+languages.hi=Hindi
+languages.ar=Arabic
+languages.it=Italian
+languages.fr=French
+languages.de=German
+languages.es=Spanish
+languages.ja=Japanese
+languages.pt=Portuguese
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_DJ.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_DJ.properties
index 8efb21e..e85acd3 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_DJ.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_DJ.properties
@@ -6,6 +6,5 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.DJF=DJF
currenciesSymbol.DJF=$
currenciesSymbol.USD=US$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_ET.properties
index 7323cdf..1838857 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_ET.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_ET.properties
@@ -6,6 +6,5 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ETB=ETB
currenciesSymbol.ETB=$
currenciesSymbol.USD=US$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_SO.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_SO.properties
index 9e197f3..a5b4070 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_SO.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_so_SO.properties
@@ -6,6 +6,5 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.SOS=SOS
currenciesSymbol.SOS=$
currenciesSymbol.USD=US$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sq.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sq.properties
index 25c1597..e8e85c8 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sq.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sq.properties
@@ -8,7 +8,14 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.ALL=ALL
+currenciesDisplayName.INR=Rupee indiane
+currenciesDisplayName.JPY=Jeni Japonez
+currenciesDisplayName.RUB=Rubla ruse
+currenciesDisplayName.CNY=Renminbi(Yuan) Kinez
+currenciesDisplayName.GBP=Paund Sterlina Britanike
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.USD=Dollar amerikan
+currenciesDisplayName.BRL=Real Brazilian
currenciesSymbol.ALL=Lek
shortMonths=Jan®Shk®Mar®Pri®Maj®Qer®Kor®Gsh®Sht®Tet®N\u00ebn®Dhj®®
months=janar®shkurt®mars®prill®maj®qershor®korrik®gusht®shtator®tetor®n\u00ebntor®dhjetor®®
@@ -35,15 +42,16 @@ territories.GT=Guatemal\u00eb
territories.GR=Greqi
territories.GQ=Guineja Ekuatoriale
territories.SZ=Svaziland\u00eb
-territories.SY=Siri
territories.GN=Guine
+territories.SY=Siri
territories.GM=Gambi
territories.ST=Sao Tome e Prinsipe
territories.GH=Gan\u00eb
territories.GE=Gjeorgji
territories.SO=Somali
-territories.SL=Siera Leone
+territories.GB=Mbret\u00ebria e Bashkuar
territories.GA=Gjabon
+territories.SL=Siera Leone
territories.SK=Sllovaki
territories.SI=Slloveni
territories.SG=Singapor
@@ -54,8 +62,8 @@ territories.SA=Arabia Saudite
territories.FR=Franc\u00eb
territories.FM=Mikronezi
territories.RW=Ruanda
-territories.RU=Rusi
territories.FJ=Fixhi
+territories.RU=Rusi
territories.FI=Finland\u00eb
territories.RO=Rumani
territories.ET=Etiopi
@@ -81,6 +89,7 @@ territories.CZ=Republika e \u00c7ekis\u00eb
territories.CY=Qipro
territories.CV=Kap Verde
territories.CU=Kub\u00eb
+territories.CS=Serbi\u00eb en Montenegro
territories.CR=Kosta Rika
territories.CO=Kolumbi
territories.CN=Kin\u00eb
@@ -94,42 +103,42 @@ territories.CA=Kanada
territories.BY=Bjellorusi
territories.BW=Botsvana
territories.BT=Butan
-territories.NZ=Zelanda e Re
+territories.BR=Brazili
territories.BO=Bolivi
+territories.NZ=Zelanda e Re
territories.BN=Brunej
territories.BH=Bahrein
territories.BG=Bullgari
territories.BE=Belgjik\u00eb
territories.NO=Norvegji
territories.ZW=Zimbabve
-territories.NL=Vendet e Ul\u00ebta
territories.BA=Bosnja dhe Hercegovina
+territories.NL=Vendet e Ul\u00ebta
territories.NI=Nikaragua
territories.NG=Nigeri
territories.AZ=Azerbajxhan
territories.ZM=Zambi
-territories.AU=Australi
territories.NA=Namibi
+territories.AU=Australi
territories.AT=Austri
territories.AR=Argjentin\u00eb
-territories.MZ=Mozambik
territories.AO=Angol\u00eb
+territories.MZ=Mozambik
territories.MY=Malajzi
-territories.MX=Meksik\u00eb
territories.AM=Armeni
-territories.MW=Malavi
+territories.MX=Meksik\u00eb
territories.AL=Shqip\u00ebria
+territories.MW=Malavi
territories.MV=Maldivit
territories.ZA=Afrika e Jugut
territories.MT=Malt\u00eb
-territories.MR=Mauritani
territories.AG=Antigua e Barbuda
+territories.MR=Mauritani
territories.AF=Afganistan
territories.AE=Emiratet Arabe te Bashkuara
territories.AD=Andorr\u00eb
territories.MN=Mongoli
territories.MK=Maqedoni
-territories.YU=Serbi\u00eb
territories.MH=Ishujt Marshall
territories.MG=Madagaskar
territories.MD=Moldavi
@@ -177,4 +186,15 @@ territories.TW=Tajvan
territories.TT=Trinidad e Tobago
territories.TR=Turqi
territories.TN=Tunisi
+languages.zh=Kineze
languages.sq=shqipe
+languages.en=Anglisht
+languages.ru=Rusisht
+languages.hi=Hindi
+languages.ar=Arabisht
+languages.it=Italisht
+languages.fr=Frengjisht
+languages.de=Gjermanisht
+languages.es=Spanjisht
+languages.ja=Japanisht
+languages.pt=Portugeze
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr.properties
index 9b272dc..f3263c0 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr.properties
@@ -10,62 +10,52 @@ groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
currenciesDisplayName.GBP=\u0424\u0443\u043d\u0442\u0430 \u0441\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u0430
currenciesDisplayName.CHF=\u0428\u0432\u0430\u0458\u0446\u0430\u0440\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
-currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
currenciesDisplayName.HRK=\u041a\u0443\u043d\u0430
+currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
currenciesDisplayName.IEP=\u0418\u0440\u0441\u043a\u0430 \u0444\u0443\u043d\u0442\u0430
+currenciesDisplayName.INR=\u0418\u043d\u0434\u0438\u0458\u0441\u043a\u0438 \u0420\u0443\u043f\u0438
currenciesDisplayName.JPY=\u0408\u0435\u043d
currenciesDisplayName.HRD=\u0425\u0440\u0432\u0430\u0442\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.EUR=\u0415\u0412\u0420\u041e
+currenciesDisplayName.ITL=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u0441\u043a\u0430 \u043b\u0438\u0440\u0430
currenciesDisplayName.PTE=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0438 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0448\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
currenciesDisplayName.AUD=\u0410\u0443\u0441\u0442\u0440\u0430\u043b\u0438\u0458\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0448\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
currenciesDisplayName.DEM=\u041d\u0435\u043c\u0430\u0447\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.LUF=\u041b\u0443\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0448\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
-currenciesDisplayName.BEF=\u0411\u0435\u043b\u0433\u0438\u0458\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
-currenciesDisplayName.YUN=YUN
currenciesDisplayName.NLG=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0433\u0443\u043b\u0434\u0435\u043d
+currenciesDisplayName.BEF=\u0411\u0435\u043b\u0433\u0438\u0458\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u0430\u043a
currenciesDisplayName.DKK=\u0414\u0430\u043d\u0441\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
currenciesDisplayName.RUR=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430 (1991-1998)
currenciesDisplayName.KWD=\u041a\u0443\u0432\u0430\u0458\u0442\u0441\u043a\u0438 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.CNY=\u041a\u0438\u043d\u0435\u0441\u043a\u0438 \u0408\u0443\u0430\u043d \u0420\u0435\u043d\u043c\u0438\u043d\u0431\u0438
currenciesDisplayName.ESP=\u0428\u043f\u0430\u043d\u0441\u043a\u0430 \u043f\u0435\u0437\u0435\u0442\u0430
-currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.GRD=\u0414\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.ATS=\u0410\u0443\u0441\u0442\u0440\u0438\u0458\u0441\u043a\u0438 \u0448\u0438\u043b\u0438\u043d\u0433
+currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b\u0441\u043a\u0438 \u0420\u0435\u0430\u043b
currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u043a\u0430 \u043a\u0440\u0443\u043d\u0430
currenciesDisplayName.USD=\u0410\u043c\u0435\u0440\u0438\u0447\u043a\u0438 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.CSD=\u0421\u0440\u043f\u0441\u043a\u0438 \u0414\u0438\u043d\u0430\u0440
currenciesDisplayName.RUB=\u0420\u0443\u0441\u043a\u0430 \u0440\u0443\u0431\u0459\u0430
-currenciesDisplayName.FIN=\u0424\u0438\u043d\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430 (1860-1962)
currenciesDisplayName.FIM=\u0424\u0438\u043d\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.SIT=\u0422\u043e\u043b\u0430\u0440
currenciesDisplayName.BAM=\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0431\u0438\u043b\u043d\u0430 \u043c\u0430\u0440\u043a\u0430
-currenciesSymbol.CHF=SwF
-currenciesSymbol.FRF=FRF
-currenciesSymbol.HRK=HRK
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.HRD=HRD
-currenciesSymbol.PTE=PTE
+currenciesSymbol.KWD=KD
+currenciesSymbol.INR=INR
currenciesSymbol.NOK=NKr
-currenciesSymbol.AUD=$A
-currenciesSymbol.DEM=DEM
-currenciesSymbol.LUF=LUF
currenciesSymbol.BEF=BF
+currenciesSymbol.BAM=KM
currenciesSymbol.YUN=\u0414\u0438\u043d
-currenciesSymbol.NLG=NLG
+currenciesSymbol.IEP=IR\u00a3
currenciesSymbol.DKK=DKr
-currenciesSymbol.RUR=RUR
-currenciesSymbol.KWD=KD
-currenciesSymbol.ESP=ESP
-currenciesSymbol.CAD=Can$
-currenciesSymbol.GRD=GRD
-currenciesSymbol.ATS=ATS
-currenciesSymbol.SEK=SKr
+currenciesSymbol.CHF=SwF
+currenciesSymbol.CNY=\u0423
+currenciesSymbol.AUD=$A
currenciesSymbol.USD=US$
-currenciesSymbol.RUB=RUB
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SIT=SIT
-currenciesSymbol.BAM=KM
+currenciesSymbol.CSD=YUN
+currenciesSymbol.SEK=SKr
+currenciesSymbol.CAD=Can$
shortMonths=\u0458\u0430\u043d®\u0444\u0435\u0431®\u043c\u0430\u0440®\u0430\u043f\u0440®\u043c\u0430\u0458®\u0458\u0443\u043d®\u0458\u0443\u043b®\u0430\u0432\u0433®\u0441\u0435\u043f®\u043e\u043a\u0442®\u043d\u043e\u0432®\u0434\u0435\u0446®®
months=\u0458\u0430\u043d\u0443\u0430\u0440®\u0444\u0435\u0431\u0440\u0443\u0430\u0440®\u043c\u0430\u0440\u0442®\u0430\u043f\u0440\u0438\u043b®\u043c\u0430\u0458®\u0458\u0443\u043d®\u0458\u0443\u043b®\u0430\u0432\u0433\u0443\u0441\u0442®\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440®\u043e\u043a\u0442\u043e\u0431\u0430\u0440®\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440®\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440®®
shortWeekdays=®\u043d\u0435\u0434®\u043f\u043e\u043d®\u0443\u0442\u043e®\u0441\u0440\u0435®\u0447\u0435\u0442®\u043f\u0435\u0442®\u0441\u0443\u0431®
@@ -103,7 +93,9 @@ territories.GN=\u0413\u0432\u0438\u043d\u0435\u0458\u0430
territories.GM=\u0413\u0430\u043c\u0431\u0438\u0458\u0430
territories.GL=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434
territories.SV=\u0421\u0430\u043b\u0432\u0430\u0434\u043e\u0440
+territories.062=\u0408\u0443\u0436\u043d\u043e-\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0410\u0437\u0438\u0458\u0430
territories.ST=\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438
+territories.061=\u041f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u0458\u0430
territories.GI=\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440
territories.GH=\u0413\u0430\u043d\u0430
territories.SR=\u0421\u0443\u0440\u0438\u043d\u0430\u043c
@@ -127,9 +119,12 @@ territories.SC=\u0421\u0435\u0458\u0448\u0435\u043b\u0438
territories.SB=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u0441\u043a\u0430 \u041e\u0441\u0442\u0440\u0432\u0430
territories.SA=\u0421\u0430\u0443\u0434\u0438\u0458\u0441\u043a\u0430 \u0410\u0440\u0430\u0431\u0438\u0458\u0430
territories.FR=\u0424\u0440\u0430\u043d\u0446\u0443\u0441\u043a\u0430
+territories.057=\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u0458\u0430
territories.FO=\u0424\u0430\u0440\u0441\u043a\u0430 \u041e\u0441\u0442\u0440\u0432\u0430
territories.FM=\u041c\u0438\u043a\u0440\u043e\u043d\u0435\u0437\u0438\u0458\u0430
territories.RW=\u0420\u0443\u0430\u043d\u0434\u0430
+territories.054=\u041c\u0435\u043b\u0430\u043d\u0435\u0437\u0438\u0458\u0430
+territories.053=\u0410\u0443\u0441\u0442\u0440\u0430\u043b\u0438\u0458\u0430 \u0438 \u041d\u043e\u0432\u0438 \u0417\u0435\u043b\u0430\u043d\u0434
territories.FK=\u0424\u043e\u043b\u043a\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u041e\u0441\u0442\u0440\u0432\u0430
territories.RU=\u0420\u0443\u0441\u0438\u0458\u0430
territories.FJ=\u0424\u0438\u045f\u0438
@@ -139,20 +134,26 @@ territories.RE=\u0420\u0435\u0438\u043d\u0438\u043e\u043d
territories.ET=\u0415\u0442\u0438\u043e\u043f\u0438\u0458\u0430
territories.ES=\u0428\u043f\u0430\u043d\u0438\u0458\u0430
territories.ER=\u0415\u0440\u0438\u0442\u0440\u0435\u0458\u0430
+territories.833=\u041e\u0441\u0442\u0440\u0432\u043e \u041c\u0430\u043d
territories.EH=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430
territories.EG=\u0415\u0433\u0438\u043f\u0430\u0442
+territories.830=\u041a\u0430\u043d\u0430\u043b\u0441\u043a\u0430 \u043e\u0441\u0442\u0440\u0432\u0430
territories.EE=\u0415\u0441\u0442\u043e\u043d\u0438\u0458\u0430
+territories.QO=\u041e\u0441\u0442\u0430\u043b\u0430 \u043e\u043a\u0435\u0430\u043d\u0438\u0458\u0430
territories.EC=\u0415\u043a\u0432\u0430\u0434\u043e\u0440
territories.DZ=\u0410\u043b\u0436\u0438\u0440
territories.QA=\u041a\u0430\u0442\u0430\u0440
+territories.039=\u0408\u0443\u0436\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.DO=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0420\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430
territories.PY=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0458
+territories.035=\u0408\u0443\u0433\u043e\u0438\u0441\u0442\u043e\u0447\u043d\u0430 \u0410\u0437\u0438\u0458\u0430
territories.DM=\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430
territories.PW=\u041f\u0430\u043b\u0430\u0443
territories.DK=\u0414\u0430\u043d\u0441\u043a\u0430
territories.DJ=\u040f\u0438\u0431\u0443\u0442\u0438
territories.PT=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b
territories.PS=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u043a\u0430 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0438\u0458\u0430
+territories.030=\u0418\u0441\u0442\u043e\u0447\u043d\u0430 \u0410\u0437\u0438\u0458\u0430
territories.PR=\u041f\u043e\u0440\u0442\u043e \u0420\u0438\u043a\u043e
territories.DE=\u041d\u0435\u043c\u0430\u0447\u043a\u0430
territories.PN=\u041f\u0438\u0442\u043a\u0435\u0440\u043d
@@ -169,12 +170,15 @@ territories.CX=\u0411\u043e\u0436\u0438\u045b\u043d\u043e \u041e\u0441\u0442\u04
territories.CV=\u041a\u0430\u043f\u0435 \u0412\u0435\u0440\u0434\u0435
territories.PA=\u041f\u0430\u043d\u0430\u043c\u0430
territories.CU=\u041a\u0443\u0431\u0430
+territories.CS=\u0421\u0440\u0431\u0438\u0458\u0430 \u0438 \u0426\u0440\u043d\u0430 \u0413\u043e\u0440\u0430
territories.CR=\u041a\u043e\u0441\u0442\u0430\u0440\u0438\u043a\u0430
+territories.029=\u041a\u0430\u0440\u0438\u0431\u0438
territories.CO=\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u0458\u0430
territories.CN=\u041a\u0438\u043d\u0430
territories.CM=\u041a\u0430\u043c\u0435\u0440\u0443\u043d
territories.CL=\u0427\u0438\u043b\u0435
territories.CI=\u041e\u0431\u0430\u043b\u0430 \u0421\u043b\u043e\u043d\u043e\u0432\u0430\u0447\u0435
+territories.021=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.CH=\u0428\u0432\u0430\u0458\u0446\u0430\u0440\u0441\u043a\u0430
territories.CG=\u041a\u043e\u043d\u0433\u043e
territories.CF=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e \u0410\u0444\u0440\u0438\u0447\u043a\u0430 \u0420\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430
@@ -189,13 +193,20 @@ territories.BV=\u0411\u0443\u0432\u0435
territories.BT=\u0411\u0443\u0442\u0430\u043d
territories.BS=\u0411\u0430\u0445\u0430\u043c\u0438
territories.BR=\u0411\u0440\u0430\u0455\u0438\u043b
+territories.019=\u0410\u043c\u0435\u0440\u0438\u043a\u0435
+territories.018=\u0408\u0443\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.NZ=\u041d\u043e\u0432\u0438 \u0417\u0435\u043b\u0430\u043d\u0434
territories.BO=\u0411\u043e\u043b\u0438\u0432\u0438\u0458\u0430
+territories.017=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.BN=\u0411\u0440\u0443\u043d\u0435\u0458
territories.BM=\u0411\u0435\u0440\u043c\u0443\u0434\u0430
+territories.015=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.014=\u0418\u0441\u0442\u043e\u0447\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.013=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.NU=\u041d\u0438\u0443\u0435
territories.BJ=\u0411\u0435\u043d\u0438\u043d
territories.BI=\u0411\u0443\u0440\u0443\u043d\u0434\u0438
+territories.011=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.BH=\u0411\u0430\u0445\u0440\u0435\u0438\u043d
territories.NR=\u041d\u0430\u0443\u0440\u0443
territories.BG=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0430
@@ -213,6 +224,7 @@ territories.NG=\u041d\u0438\u0433\u0435\u0440\u0438\u0458\u0430
territories.NF=\u041d\u043e\u0440\u0444\u043e\u043b\u043a \u041e\u0441\u0442\u0440\u0432\u043e
territories.AZ=\u0410\u0437\u0435\u0440\u0431\u0435\u0458\u045f\u0430\u043d
territories.NE=\u041d\u0438\u0433\u0435\u0440
+territories.AX=\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0430 \u043e\u0441\u0442\u0440\u0432\u0430
territories.NC=\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u0458\u0430
territories.AW=\u0410\u0440\u0443\u0431\u0430
territories.ZM=\u0417\u0430\u043c\u0431\u0438\u0458\u0430
@@ -220,18 +232,22 @@ territories.NA=\u041d\u0430\u043c\u0438\u0431\u0438\u0458\u0430
territories.AU=\u0410\u0443\u0441\u0442\u0440\u0430\u043b\u0438\u0458\u0430
territories.AT=\u0410\u0443\u0441\u0442\u0440\u0438\u0458\u0430
territories.AR=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430
+territories.009=\u041e\u043a\u0435\u0430\u043d\u0438\u0458\u0430
territories.MZ=\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a
territories.AO=\u0410\u043d\u0433\u043e\u043b\u0430
territories.MY=\u041c\u0430\u043b\u0435\u0437\u0438\u0458\u0430
territories.AN=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u0410\u043d\u0442\u0438\u043b\u0438
territories.MX=\u041c\u0435\u043a\u0441\u0438\u043a\u043e
+territories.005=\u0408\u0443\u0436\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.AM=\u0410\u0440\u043c\u0435\u043d\u0438\u0458\u0430
territories.MW=\u041c\u0430\u043b\u0430\u0432\u0438
territories.AL=\u0410\u043b\u0431\u0430\u043d\u0438\u0458\u0430
territories.MV=\u041c\u0430\u043b\u0434\u0438\u0432\u0438
territories.ZA=\u0408\u0443\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.MU=\u041c\u0430\u0443\u0440\u0438\u0446\u0438\u0458\u0443\u0441
+territories.002=\u0410\u0444\u0440\u0438\u043a\u0430
territories.MT=\u041c\u0430\u043b\u0442\u0430
+territories.001=\u0421\u0432\u0435\u0442
territories.MS=\u041c\u043e\u043d\u0441\u0435\u0440\u0430\u0442
territories.MR=\u041c\u0430\u0443\u0440\u0438\u0442\u0430\u043d\u0438\u0458\u0430
territories.MQ=\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a
@@ -244,7 +260,6 @@ territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u0458\u0430
territories.MM=\u041c\u0438\u0458\u0430\u043d\u043c\u0430\u0440
territories.ML=\u041c\u0430\u043b\u0438
territories.MK=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u0458\u0430
-territories.YU=\u0408\u0443\u0433\u043e\u0441\u043b\u0430\u0432\u0438\u0458\u0430
territories.YT=\u041c\u0430\u0458\u043e\u0442\u0435
territories.MH=\u041c\u0430\u0440\u0448\u0430\u043b\u0441\u043a\u0430 \u041e\u0441\u0442\u0440\u0432\u0430
territories.MG=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
@@ -254,10 +269,14 @@ territories.MA=\u041c\u0430\u0440\u043e\u043a\u043e
territories.YE=\u0408\u0435\u043c\u0435\u043d
territories.LY=\u041b\u0438\u0431\u0438\u0458\u0430
territories.LV=\u041b\u0435\u0442\u043e\u043d\u0438\u0458\u0430
+territories.155=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.LU=\u041b\u0443\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433
+territories.154=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
territories.LT=\u041b\u0438\u0442\u0432\u0430\u043d\u0438\u0458\u0430
territories.LS=\u041b\u0435\u0441\u043e\u0442\u043e
territories.LR=\u041b\u0438\u0431\u0435\u0440\u0438\u0458\u0430
+territories.151=\u0418\u0441\u0442\u043e\u0447\u043d\u0430 \u0415\u0432\u0440\u043e\u043f\u0430
+territories.150=\u0415\u0432\u0440\u043e\u043f\u0430
territories.LK=\u0428\u0440\u0438 \u041b\u0430\u043d\u043a\u0430
territories.LI=\u041b\u0438\u0445\u0442\u0435\u043d\u0448\u0442\u0430\u0458\u043d
territories.LC=\u0421\u0435\u043d\u0442 \u041b\u0443\u0446\u0438\u0458\u0430
@@ -266,6 +285,8 @@ territories.LA=\u041b\u0430\u043e\u0441
territories.KZ=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d
territories.KY=\u041a\u0430\u0458\u043c\u0430\u043d\u0441\u043a\u0430 \u041e\u0441\u0442\u0440\u0432\u0430
territories.KW=\u041a\u0443\u0432\u0430\u0458\u0442
+territories.145=\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0410\u0437\u0438\u0458\u0430
+territories.142=\u0410\u0437\u0438\u0458\u0430
territories.KR=\u0408\u0443\u0436\u043d\u0430 \u041a\u043e\u0440\u0435\u0458\u0430
territories.KP=\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u041a\u043e\u0440\u0435\u0458\u0430
territories.KN=\u0421\u0435\u043d\u0442 \u041a\u0438\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441
@@ -340,10 +361,10 @@ languages.yi=\u0408\u0438\u0434\u0438\u0448
languages.sa=\u0421\u0430\u043d\u0441\u043a\u0440\u0438\u0442
languages.cs=\u0427\u0435\u0448\u043a\u0438
languages.lv=\u041b\u0435\u0442\u043e\u043d\u0441\u043a\u0438
-languages.it=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u0441\u043a\u0438
languages.fr=\u0424\u0440\u0430\u043d\u0446\u0443\u0441\u043a\u0438
-languages.is=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0438
+languages.it=\u0418\u0442\u0430\u043b\u0438\u0458\u0430\u043d\u0441\u043a\u0438
languages.co=\u041a\u043e\u0440\u0437\u0438\u043a\u0430\u043d\u0441\u043a\u0438
+languages.is=\u0418\u0441\u043b\u0430\u043d\u0434\u0441\u043a\u0438
languages.lt=\u041b\u0438\u0442\u0432\u0430\u043d\u0441\u043a\u0438
languages.ru=\u0420\u0443\u0441\u043a\u0438
languages.fi=\u0424\u0438\u043d\u0441\u043a\u0438
@@ -355,12 +376,12 @@ languages.uk=\u0423\u043a\u0440\u0430\u0458\u0438\u043d\u0441\u043a\u0438
languages.fa=\u041f\u0435\u0440\u0441\u0438\u0458\u0441\u043a\u0438
languages.la=\u041b\u0430\u0442\u0438\u043d\u0441\u043a\u0438
languages.hy=\u0410\u0440\u043c\u0435\u043d\u0441\u043a\u0438
-languages.ky=\u041a\u0438\u0440\u0433\u0438\u0441\u043a\u0438
languages.eu=\u0411\u0430\u0441\u043a\u0438\u0458\u0441\u043a\u0438
-languages.et=\u0415\u0441\u0442\u043e\u043d\u0441\u043a\u0438
+languages.ky=\u041a\u0438\u0440\u0433\u0438\u0441\u043a\u0438
languages.br=\u0411\u0440\u0435\u0442\u043e\u043d\u0441\u043a\u0438
-languages.hu=\u041c\u0430\u0452\u0430\u0440\u0441\u043a\u0438
+languages.et=\u0415\u0441\u0442\u043e\u043d\u0441\u043a\u0438
languages.es=\u0428\u043f\u0430\u043d\u0441\u043a\u0438
+languages.hu=\u041c\u0430\u0452\u0430\u0440\u0441\u043a\u0438
languages.ku=\u041a\u0443\u0440\u0434\u0441\u043a\u0438
languages.hr=\u0425\u0440\u0432\u0430\u0442\u0441\u043a\u0438
languages.eo=\u0415\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e
@@ -368,9 +389,10 @@ languages.en=\u0415\u043d\u0433\u043b\u0435\u0441\u043a\u0438
languages.el=\u0413\u0440\u0447\u043a\u0438
languages.ko=\u041a\u043e\u0440\u0435\u0458\u0441\u043a\u0438
languages.no=\u041d\u043e\u0440\u0432\u0435\u0448\u043a\u0438
-languages.km=\u041a\u043c\u0435\u0440\u0441\u043a\u0438
languages.bg=\u0411\u0443\u0433\u0430\u0440\u0441\u043a\u0438
+languages.km=\u041a\u043c\u0435\u0440\u0441\u043a\u0438
languages.tr=\u0422\u0443\u0440\u0441\u043a\u0438
languages.be=\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u043a\u0438
+languages.hi=\u0425\u0438\u043d\u0434\u0438
languages.nl=\u0425\u043e\u043b\u0430\u043d\u0434\u0441\u043a\u0438
languages.he=\u0425\u0435\u0431\u0440\u0435\u0458\u0441\u043a\u0438
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Cyrl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Cyrl.properties
new file mode 100644
index 0000000..6d66ad1
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Cyrl.properties
@@ -0,0 +1,23 @@
+# LocaleInformation_sr_BA_Cyrl.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
+currenciesDisplayName.BAM=\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0431\u0438\u043b\u043d\u0430 \u041c\u0430\u0440\u043a\u0430
+currenciesSymbol.BAM=\u041a\u041c.
+shortMonths=\u0408\u0430\u043d®\u0424\u0435\u0431®\u041c\u0430\u0440®\u0410\u043f\u0440®\u041c\u0430\u0458®\u0408\u0443\u043d®\u0408\u0443\u043b®\u0410\u0432\u0433®\u0421\u0435\u043f®\u041e\u043a\u0442®\u041d\u043e\u0432®\u0414\u0435\u0446®®
+months=®®®®®\u0458\u0443\u043d\u0438®\u0458\u0443\u043b\u0438®®®®®®®
+shortWeekdays=®®®®\u0441\u0440\u0438®®®®
+weekdays=®®®®\u0441\u0440\u0438\u0458\u0435\u0434\u0430®®®®
+shortDateFormat=yy-MM-dd
+mediumDateFormat=yyyy-MM-dd
+longDateFormat=dd. MMMM yyyy.
+fullDateFormat=EEEE, dd. MMMM yyyy.
+shortTimeFormat=HH:mm
+mediumTimeFormat=HH:mm:ss
+fullTimeFormat=HH '\u0447\u0430\u0441\u043e\u0432\u0430', mm '\u043c\u0438\u043d\u0443\u0442\u0430', ss' \u0441\u0435\u043a\u0443\u043d\u0434\u0438'
+zoneStrings=Europe/Sarajevo®\u0421\u0440\u0435\u0434\u045a\u0435 \u0415\u0432\u0440\u043e\u043f\u0441\u043a\u043e \u0412\u0440\u0438\u0458\u0435\u043c\u0435®©
+languages.sr=\u0441\u0440\u043f\u0441\u043a\u0438 \u0458\u0435\u0437\u0438\u043a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Latn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Latn.properties
new file mode 100644
index 0000000..5206362
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_BA_Latn.properties
@@ -0,0 +1,21 @@
+# LocaleInformation_sr_BA_Latn.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
+currenciesDisplayName.BAM=Konvertibilna Marka
+currenciesSymbol.BAM=KM.
+months=®®®®®juni®juli®®®®®®®
+shortWeekdays=®®®®sri®®®®
+weekdays=®®®®srijeda®®®®
+shortDateFormat=yy-MM-dd
+mediumDateFormat=yyyy-MM-dd
+longDateFormat=dd. MMMM yyyy.
+shortTimeFormat=HH:mm
+mediumTimeFormat=HH:mm:ss
+fullTimeFormat=HH '\u010dasova', mm 'minuta', ss 'sekundi'
+zoneStrings=Europe/Sarajevo®Srednje Evropsko Vrijeme®©
+languages.sh=Srpski jezik
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Cyrl.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Cyrl.properties
new file mode 100644
index 0000000..7769cfe
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Cyrl.properties
@@ -0,0 +1,10 @@
+# LocaleInformation_sr_Cyrl.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesSymbol.CSD=CSD
+currenciesSymbol.CNY=Y
+currenciesSymbol.BRL=R$
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Latn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Latn.properties
index dac0d63..8f6a178 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Latn.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sr_Latn.properties
@@ -5,6 +5,40 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+currenciesDisplayName.GBP=Funta sterlinga
+currenciesDisplayName.CHF=\u0160vajcarski franak
+currenciesDisplayName.HRK=Kuna
+currenciesDisplayName.FRF=Francuski franak
+currenciesDisplayName.IEP=Irska funta
+currenciesDisplayName.INR=Indijski Rupi
+currenciesDisplayName.JPY=Jen
+currenciesDisplayName.HRD=Hrvatski dinar
+currenciesDisplayName.EUR=EVRO
+currenciesDisplayName.ITL=Italijanska lira
+currenciesDisplayName.PTE=Portugalski eskudo
+currenciesDisplayName.AUD=Australijski dolar
+currenciesDisplayName.NOK=Norve\u0161ka kruna
+currenciesDisplayName.DEM=Nema\u010dka marka
+currenciesDisplayName.LUF=Luksembur\u0161ki franak
+currenciesDisplayName.NLG=Holandski gulden
+currenciesDisplayName.BEF=Belgijski franak
+currenciesDisplayName.DKK=Danska kruna
+currenciesDisplayName.RUR=Ruska rublja (1991-1998)
+currenciesDisplayName.KWD=Kuvajtski dinar
+currenciesDisplayName.CNY=Kineski Juan Renminbi
+currenciesDisplayName.ESP=\u0160panska pezeta
+currenciesDisplayName.GRD=Drahma
+currenciesDisplayName.CAD=Kanadski dolar
+currenciesDisplayName.ATS=Austrijski \u0161iling
+currenciesDisplayName.BRL=Brazilski Real
+currenciesDisplayName.SEK=\u0160vedska kruna
+currenciesDisplayName.USD=Ameri\u010dki dolar
+currenciesDisplayName.CSD=Srpski Dinar
+currenciesDisplayName.RUB=Ruska rublja
+currenciesDisplayName.FIM=Finska marka
+currenciesDisplayName.SIT=Tolar
+currenciesDisplayName.BAM=Konvertibilna marka
+currenciesSymbol.CNY=U
currenciesSymbol.YUN=Din
shortMonths=jan®feb®mar®apr®maj®jun®jul®avg®sep®okt®nov®dec®®
months=januar®februar®mart®april®maj®jun®jul®avgust®septembar®oktobar®novembar®decembar®®
@@ -13,7 +47,7 @@ weekdays=®nedelja®ponedeljak®utorak®sreda®\u010detvrtak®petak®subota®
eras=p. n. e.®n. e.®
longDateFormat=EEEE, d.MM.yyyy.
fullDateFormat=EEEE, dd. MMMM yyyy.
-zoneStrings=Europe/Belgrade®Centralno Evropsko Vreme®Centralno Evropsko Letnje Vreme®©
+zoneStrings=Europe/Belgrade®Centralno Evropsko Vreme®Centralno Evropsko Vreme®©
territories.TL=Timor-Leste
territories.TK=Tokelau
territories.TJ=Tad\u017eikistan
@@ -36,7 +70,9 @@ territories.GN=Gvineja
territories.GM=Gambija
territories.GL=Grenland
territories.SV=Salvador
+territories.062=Ju\u017eno-centralna Azija
territories.ST=Sao Tome i Principe
+territories.061=Polinezija
territories.GI=Gibraltar
territories.GH=Gana
territories.SR=Surinam
@@ -50,20 +86,23 @@ territories.GB=Velika Britanija
territories.SL=Sijera Leone
territories.GA=Gabon
territories.SK=Slova\u010dka
-territories.SJ=Svalbard i Jan Majen
+territories.SJ=Svalbard i Janmajen Ostrva
territories.SI=Slovenija
-territories.SH=Saint Helena
+territories.SH=Sveta Jelena
territories.SG=Singapur
territories.SE=\u0160vedska
territories.SD=Sudan
territories.SC=Sej\u0161eli
-territories.SB=Solomon Islands
+territories.SB=Solomonska Ostrva
territories.SA=Saudijska Arabija
territories.FR=Francuska
+territories.057=Micronezija
territories.FO=Farska Ostrva
territories.FM=Mikronezija
territories.RW=Ruanda
-territories.FK=Folklendska Ostrva
+territories.054=Melanezija
+territories.053=Australija i Novi Zeland
+territories.FK=Folklandska Ostrva
territories.RU=Rusija
territories.FJ=Fid\u017ei
territories.FI=Finska
@@ -72,20 +111,26 @@ territories.RE=Rejunion
territories.ET=Etiopija
territories.ES=\u0160panija
territories.ER=Eritreja
+territories.833=Ostrvo Man
territories.EH=Zapadna Sahara
territories.EG=Egipat
+territories.830=Kanalska ostrva
territories.EE=Estonija
+territories.QO=Ostala okeanija
territories.EC=Ekvador
territories.DZ=Al\u017eir
territories.QA=Katar
+territories.039=Ju\u017ena Evropa
territories.DO=Dominikanska Republika
territories.PY=Paragvaj
+territories.035=Jugoisto\u010dna Azija
territories.DM=Dominika
territories.PW=Palau
territories.DK=Danska
territories.DJ=D\u017eibuti
territories.PT=Portugal
territories.PS=Palestinska Teritorija
+territories.030=Isto\u010dna Azija
territories.PR=Porto Riko
territories.DE=Nema\u010dka
territories.PN=Pitcairn
@@ -102,13 +147,16 @@ territories.CX=Uskr\u0161nja Ostrva
territories.CV=Kape Verde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Srbija i Crna Gora
territories.CR=Kostarika
+territories.029=Karibi
territories.CO=Kolumbija
territories.CN=Kina
territories.CM=Kamerun
territories.CL=\u010cile
territories.CK=Kukova Ostrva
territories.CI=Obala Slonova\u010de
+territories.021=Severna Amerika
territories.CH=\u0160vajcarska
territories.CG=Kongo
territories.CF=Centralno Afri\u010dka Republika
@@ -123,13 +171,20 @@ territories.BV=Buve Ostrva
territories.BT=Butan
territories.BS=Bahami
territories.BR=Brazil
+territories.019=Amerike
+territories.018=Ju\u017ena Afrika
territories.NZ=Novi Zeland
territories.BO=Bolivija
+territories.017=Centralna Afrika
territories.BN=Brunej
territories.BM=Bermuda
+territories.015=Severna Afrika
+territories.014=Isto\u010dna Afrika
+territories.013=Centralna Amerika
territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Zapadna Afrika
territories.BH=Bahrein
territories.NR=Nauru
territories.BG=Bugarska
@@ -147,6 +202,7 @@ territories.NG=Nigerija
territories.NF=Norfolk Ostrvo
territories.AZ=Azerbejd\u017ean
territories.NE=Niger
+territories.AX=Alandska ostrva
territories.NC=Nova Kaledonija
territories.AW=Aruba
territories.ZM=Zambija
@@ -155,21 +211,25 @@ territories.AU=Australija
territories.AT=Austrija
territories.AS=Ameri\u010dka Samoa
territories.AR=Argentina
+territories.009=Okeanija
territories.AQ=Antarktika
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malezija
territories.AN=Holandski Antili
territories.MX=Meksiko
+territories.005=Ju\u017ena Amerika
territories.AM=Armenija
territories.MW=Malavi
territories.AL=Albanija
territories.MV=Maldivi
territories.ZA=Ju\u017ena Afrika
territories.MU=Mauricius
+territories.002=Afrika
territories.MT=Malta
+territories.001=Svet
territories.AI=Angvila
-territories.MS=Montserrat
+territories.MS=Monserat
territories.MR=Mauritanija
territories.AG=Antigva i Barbuda
territories.MQ=Martinik
@@ -182,8 +242,7 @@ territories.MN=Mongolija
territories.MM=Mijanmar
territories.ML=Mali
territories.MK=Makedonija
-territories.YU=Jugoslavija
-territories.YT=Mayotte
+territories.YT=Majote
territories.MH=Mar\u0161alska Ostrva
territories.MG=Madagaskar
territories.MD=Moldavija
@@ -192,11 +251,15 @@ territories.MA=Maroko
territories.YE=Jemen
territories.LY=Libija
territories.LV=Letonija
+territories.155=Zapadna Evropa
territories.LU=Luksemburg
+territories.154=Severna Evropa
territories.LT=Litvanija
territories.LS=Lesoto
territories.LR=Liberija
-territories.LK=\u0160rilanka
+territories.151=Isto\u010dna Evropa
+territories.150=Evropa
+territories.LK=\u0160ri Lanka
territories.LI=Lihten\u0161tajn
territories.LC=Sent Lucija
territories.LB=Liban
@@ -204,6 +267,8 @@ territories.LA=Laos
territories.KZ=Kazahstan
territories.KY=Kajmanska Ostrva
territories.KW=Kuvajt
+territories.145=Zapadna Azija
+territories.142=Azija
territories.KR=Ju\u017ena Koreja
territories.KP=Severna Koreja
territories.KN=Sent Kits i Nevis
@@ -211,9 +276,9 @@ territories.KM=Komorska Ostrva
territories.KI=Kiribati
territories.WS=Samoa
territories.KH=Kambod\u017ea
-territories.KG=Kirgistan
+territories.KG=Kirgizstan
territories.KE=Kenija
-territories.WF=Valis i Futuna
+territories.WF=Valis i Futuna Ostrva
territories.JP=Japan
territories.JO=Jordan
territories.JM=Jamajka
@@ -276,12 +341,13 @@ languages.sh=Srpsko-Hrvatski
languages.vi=Vijetnamski
languages.ja=Japanski
languages.yi=Jidi\u0161
+languages.sa=Sanskrit
languages.cs=\u010ce\u0161ki
languages.lv=Letonski
-languages.it=Italijanski
languages.fr=Francuski
-languages.is=Islandski
+languages.it=Italijanski
languages.co=Korzikanski
+languages.is=Islandski
languages.lt=Litvanski
languages.ru=Ruski
languages.fi=Finski
@@ -289,25 +355,27 @@ languages.ro=Rumunski
languages.rm=Reto-Romanski
languages.ca=Katalonski
languages.id=Indonezijski
-languages.uk=Ukrajnski
+languages.uk=Ukrajinski
languages.fa=Persijski
languages.la=Latinski
languages.hy=Armenski
-languages.ky=Kirgiski
languages.eu=Baskijski
-languages.et=Estonski
+languages.ky=Kirgiski
languages.br=Bretonski
-languages.hu=Ma\u0111arski
+languages.et=Estonski
languages.es=\u0160panski
+languages.hu=Ma\u0111arski
languages.ku=Kurdski
languages.hr=Hrvatski
+languages.eo=Esperanto
languages.en=Engleski
languages.el=Gr\u010dki
languages.ko=Korejski
languages.no=Norve\u0161ki
-languages.km=Kmerski
languages.bg=Bugarski
+languages.km=Kmerski
languages.tr=Turski
languages.be=Beloruski
+languages.hi=Hindi
languages.nl=Holandski
languages.he=Hebrejski
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sv.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sv.properties
index 81f255c..5792519 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sv.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sv.properties
@@ -7,756 +7,363 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.JOD=Jordansk dinar
-currenciesDisplayName.BOV=Boliviansk mvdol
-currenciesDisplayName.FOK=F\u00e4r\u00f6isk krona
-currenciesDisplayName.LBP=Libanesiskt pund
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnamesisk dong
-currenciesDisplayName.TZS=Tanzanisk shilling
-currenciesDisplayName.BOP=Boliviansk peso
-currenciesDisplayName.KHR=Kambodjansk riel
-currenciesDisplayName.KHO=Kambodjansk gammal riel
-currenciesDisplayName.ZMP=Zambiskt pund
-currenciesDisplayName.AUP=Australiskt pund
-currenciesDisplayName.XAF=CFA Franc BEAC
-currenciesDisplayName.MTP=Maltesiskt pund
-currenciesDisplayName.GHR=Ghanansk omv\u00e4rderad cedi
-currenciesDisplayName.ZMK=Zambisk kwacha
-currenciesDisplayName.GHP=Ghananskt pund
-currenciesDisplayName.GHO=Ghanansk gammal cedi
-currenciesDisplayName.MTL=Maltesisk lira
-currenciesDisplayName.AUD=Australisk dollar
-currenciesDisplayName.USS=US-dollar (samma dag)
-currenciesDisplayName.ITL=Italiensk lira
-currenciesDisplayName.USN=US-dollar (n\u00e4sta dag)
-currenciesDisplayName.GHC=Ghanansk cedi
-currenciesDisplayName.SGD=Singaporiansk dollar
-currenciesDisplayName.PAB=Panamansk balboa
-currenciesDisplayName.LAK=Laotisk kip
-currenciesDisplayName.KGS=Kirgizistansk som
-currenciesDisplayName.CHF=Schweizisk franc
-currenciesDisplayName.ATS=\u00d6sterrikisk schilling
-currenciesDisplayName.USD=US-dollar
-currenciesDisplayName.ETD=Etiopisk dollar
-currenciesDisplayName.BND=Bruneisk dollar
-currenciesDisplayName.JMP=Jamaicanskt pund
-currenciesDisplayName.ETB=Etiopisk birr
-currenciesDisplayName.DZG=Algerisk franc germinal
-currenciesDisplayName.DZF=Algerisk ny franc
-currenciesDisplayName.DZD=Algerisk dinar
-currenciesDisplayName.PYG=Paraguaysk guarani
-currenciesDisplayName.LYP=Libyskt pund
-currenciesDisplayName.JMD=Jamaicansk dollar
-currenciesDisplayName.ISK=Isl\u00e4ndsk krona
-currenciesDisplayName.ESP=Spansk peseta
-currenciesDisplayName.BMP=Bermuda-pund
-currenciesDisplayName.LYD=Libysk dinar
-currenciesDisplayName.LYB=Libyska brittiska milit\u00e4rmyndighetens lira
-currenciesDisplayName.BMD=Bermuda-dollar
-currenciesDisplayName.NLG=Nederl\u00e4ndsk gulden
-currenciesDisplayName.MRO=Mauretansk ouguiya
-currenciesDisplayName.IRR=Iransk rial
-currenciesDisplayName.SEK=Svensk krona
-currenciesDisplayName.ERN=Eritreansk nakfa
+currenciesDisplayName.YDD=Jemenitisk dinar
+currenciesDisplayName.TWD=Taiwanesisk ny dollar
currenciesDisplayName.KES=Kenyansk shilling
-currenciesDisplayName.CFF=Centralafrikansk CFA-franc
+currenciesDisplayName.BYB=Vitrysk ny rubel (1994-1999)
+currenciesDisplayName.LKR=Srilankesisk rupie
+currenciesDisplayName.RWF=Rwandisk franc
+currenciesDisplayName.TJS=Tadzjikisk somoni
+currenciesDisplayName.SDP=Sudanesiskt pund
+currenciesDisplayName.TJR=Tadzjikisk rubel
+currenciesDisplayName.ERN=Eritreansk nakfa
+currenciesDisplayName.GRD=Grekisk drachma
+currenciesDisplayName.IEP=Irl\u00e4ndskt pund
currenciesDisplayName.ARS=Argentinsk peso
+currenciesDisplayName.SDD=Sudanesisk dinar
currenciesDisplayName.ARP=Argentinsk peso (1983-1985)
-currenciesDisplayName.ARM=Argentinsk peso \u2013 Moneda nacional
-currenciesDisplayName.TWD=Taiwanesisk ny dollar
-currenciesDisplayName.SDP=Sudanesiskt pund
currenciesDisplayName.GEL=Georgisk lari
currenciesDisplayName.GEK=Georgisk kupon larit
-currenciesDisplayName.MQF=Martiniqueisk franc
+currenciesDisplayName.CRC=Costarikansk col\u00f3n
currenciesDisplayName.FKP=Falklands\u00f6arnas pund
+currenciesDisplayName.EEK=Estnisk krona
+currenciesDisplayName.HKD=Hongkong-dollar
+currenciesDisplayName.MDL=Moldavisk leu
currenciesDisplayName.ARA=Argentinsk austral
-currenciesDisplayName.SDD=Sudanesisk dinar
currenciesDisplayName.IQD=Irakisk dinar
-currenciesDisplayName.TVD=Tuvaluansk dollar
currenciesDisplayName.SCR=Seychellisk rupie
+currenciesDisplayName.VUV=Vanuatisk vatu
+currenciesDisplayName.DKK=Dansk krona
+currenciesDisplayName.KPW=Nordkoreansk won
+currenciesDisplayName.GQE=Ekvatorialguineansk ekwele guineana
+currenciesDisplayName.IDR=Indonesisk rupiah
currenciesDisplayName.LVR=Lettisk rubel
-currenciesDisplayName.FJP=Fijianskt pund
+currenciesDisplayName.SOS=Somalisk shilling
+currenciesDisplayName.AED=F\u00f6renade arabemiratens dirham
+currenciesDisplayName.BWP=Botswansk pula
currenciesDisplayName.LVL=Lettisk lats
-currenciesDisplayName.CDL=Kongolesisk zaire
-currenciesDisplayName.CDG=Kongolesisk franc
-currenciesDisplayName.CDF=Kongolesisk franc congolais
-currenciesDisplayName.FJD=Fijiansk dollar
+currenciesDisplayName.RUR=Rysk rubel (1991-1998)
currenciesDisplayName.NIO=Nicaraguansk c\u00f3rdoba oro
+currenciesDisplayName.ADP=Andorransk peseta
+currenciesDisplayName.FJD=Fijiansk dollar
currenciesDisplayName.MOP=Macaoisk pataca
-currenciesDisplayName.NIG=Nicaraguansk guldc\u00f3rdoba
+currenciesDisplayName.RUB=Rysk rubel
+currenciesDisplayName.CDF=Kongolesisk franc congolais
currenciesDisplayName.NIC=Nicaraguansk c\u00f3rdoba
-currenciesDisplayName.FIN=Finsk mark (1860-1962)
-currenciesDisplayName.FIM=Finsk mark
+currenciesDisplayName.DJF=Djiboutisk franc
+currenciesDisplayName.ECV=Ecuadoriansk Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Salomon-dollar
+currenciesDisplayName.UZS=Uzbekisk sum
+currenciesDisplayName.ECS=Ecuadoriansk sucre
+currenciesDisplayName.PHP=Filippinsk peso
+currenciesDisplayName.THB=Thail\u00e4ndsk baht
currenciesDisplayName.LUF=Luxemburgsk franc
-currenciesDisplayName.TTO=Trinidadisk gammal dollar
-currenciesDisplayName.AOS=Angolansk escudo
-currenciesDisplayName.AOR=Angolansk kwanza \u2013 Reajustado (1995-1999)
-currenciesDisplayName.MNT=Mongolisk tugrik
-currenciesDisplayName.HUF=Ungersk forint
-currenciesDisplayName.BIF=Burundisk franc
-currenciesDisplayName.AON=Angolansk ny kwanza (1990-2000)
-currenciesDisplayName.AOK=Angolansk kwanza (1977-1990)
+currenciesDisplayName.FIM=Finsk mark
currenciesDisplayName.TTD=Trinidadisk dollar
currenciesDisplayName.SZL=Swazil\u00e4ndsk lilangeni
-currenciesDisplayName.NHF=Nyhebridisk CFP-franc
-currenciesDisplayName.GBP=Brittiskt pund sterling
-currenciesDisplayName.SAS=Saudisk sovereign riyal
+currenciesDisplayName.MNT=Mongolisk tugrik
currenciesDisplayName.SAR=Saudisk riyal
+currenciesDisplayName.UAK=Ukrainsk karbovanetz
+currenciesDisplayName.UAH=Ukrainsk hryvnia
+currenciesDisplayName.HUF=Ungersk forint
+currenciesDisplayName.COP=Colombiansk peso
+currenciesDisplayName.QAR=Qatarisk rial
currenciesDisplayName.LTT=Lettisk talonas
-currenciesDisplayName.INR=Indisk rupie
currenciesDisplayName.PTE=Portugisisk escudo
-currenciesDisplayName.AOA=Angolansk kwanza
-currenciesDisplayName.PTC=Portugisisk conto
+currenciesDisplayName.AOR=Angolansk kwanza \u2013 Reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguayansk peso uruguayo
+currenciesDisplayName.GBP=Brittiskt pund sterling
+currenciesDisplayName.BIF=Burundisk franc
+currenciesDisplayName.INR=Indisk rupie
+currenciesDisplayName.ZRZ=Zairisk zaire
+currenciesDisplayName.AON=Angolansk ny kwanza (1990-2000)
currenciesDisplayName.LTL=Lettisk lita
+currenciesDisplayName.XFU=French UIC-Franc
currenciesDisplayName.KZT=Kazakisk tenge
-currenciesDisplayName.KZR=Kazakisk rubel
-currenciesDisplayName.VGD=Jungfru\u00f6isk dollar
-currenciesDisplayName.NGP=Nigerianskt pund
-currenciesDisplayName.MMX=Myanmarisk dollar \u2013 Foreign Exchange Certificates
+currenciesDisplayName.MZM=Mo\u00e7ambikisk metical
+currenciesDisplayName.UYP=Uruguayansk peso (1975-1993)
+currenciesDisplayName.AOK=Angolansk kwanza (1977-1990)
+currenciesDisplayName.BUK=Burmesisk kyat
+currenciesDisplayName.GNS=Guineansk syli
+currenciesDisplayName.XFO=Fransk guldfranc
+currenciesDisplayName.PGK=Papuansk kina
+currenciesDisplayName.SYP=Syriskt pund
+currenciesDisplayName.MZE=Mo\u00e7ambikisk escudo
+currenciesDisplayName.OMR=Omansk rial
currenciesDisplayName.NGN=Nigeriansk naira
+currenciesDisplayName.ZRN=Zairisk ny zaire
+currenciesDisplayName.AOA=Angolansk kwanza
+currenciesDisplayName.CNY=Kinesisk yuan renminbi
+currenciesDisplayName.MAF=Marockansk franc
+currenciesDisplayName.GNF=Guineansk franc
currenciesDisplayName.HTG=Haitisk gourde
-currenciesDisplayName.SYP=Syriskt pund
-currenciesDisplayName.PSP=Palestinskt pund
-currenciesDisplayName.BHD=Bahrainsk dinar
+currenciesDisplayName.MAD=Marockansk dirham
+currenciesDisplayName.TRY=Ny turkisk lira
currenciesDisplayName.MMK=Myanmarisk kyat
+currenciesDisplayName.MYR=Malaysisk ringgit
+currenciesDisplayName.LSL=Lesothisk loti
+currenciesDisplayName.BHD=Bahrainsk dinar
+currenciesDisplayName.SLL=Sierraleonsk leone
+currenciesDisplayName.BTN=Bhutanesisk ngultrum
+currenciesDisplayName.TRL=Turkisk lira
+currenciesDisplayName.KMF=Komorisk franc
currenciesDisplayName.ANG=Nederl\u00e4ndsk antillisk gulden
currenciesDisplayName.CZK=Tjeckisk koruna
-currenciesDisplayName.IMP=Isle of Man-pund sterling
-currenciesDisplayName.BGX=Bulgarisk lev \u2013 Foreign Exchange Certificates
-currenciesDisplayName.LSL=Lesothisk loti
-currenciesDisplayName.GAF=Gabonesisk CFA-franc
-currenciesDisplayName.BGO=Bulgarisk lev (1879-1952)
+currenciesDisplayName.AZM=Azerbajdzjansk manat
+currenciesDisplayName.KYD=Cayman-dollar
+currenciesDisplayName.GMD=Gambisk dalasi
currenciesDisplayName.BGN=Bulgarisk ny lev
-currenciesDisplayName.BGM=Bulgarisk socialistisk lev
currenciesDisplayName.CAD=Kanadensisk dollar
+currenciesDisplayName.MXV=Mexikansk Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bulgarisk h\u00e5rd lev
-currenciesDisplayName.TRL=Turkisk lira
-currenciesDisplayName.KYD=Cayman-dollar
-currenciesDisplayName.CYP=Cypriotiskt pund
+currenciesDisplayName.VEB=Venezuelansk bolivar
+currenciesDisplayName.MLF=Malisk franc
currenciesDisplayName.ILS=Israelisk ny shekel
+currenciesDisplayName.MXP=Mexikansk silverpeso (1861-1992)
+currenciesDisplayName.PES=Peruansk sol
currenciesDisplayName.GYD=Guyanansk dollar
-currenciesDisplayName.AMD=Armenisk dram
+currenciesDisplayName.MXN=Mexikansk peso
currenciesDisplayName.ILP=Israeliskt pund
-currenciesDisplayName.MLF=Malisk franc
-currenciesDisplayName.ILL=Israelisk shekel
-currenciesDisplayName.VEB=Venezuelansk bolivar
-currenciesDisplayName.ALX=Albansk dollar \u2013 Foreign Exchange Certificates)
+currenciesDisplayName.SKK=Slovakisk koruna
+currenciesDisplayName.CYP=Cypriotiskt pund
+currenciesDisplayName.PEN=Peruansk sol nuevo
currenciesDisplayName.LRD=Liberisk dollar
-currenciesDisplayName.ALV=Albansk lek \u2013 Valute)
+currenciesDisplayName.PEI=Peruansk inti
+currenciesDisplayName.AMD=Armenisk dram
+currenciesDisplayName.BSD=Bahamansk dollar
currenciesDisplayName.HRK=Kroatisk kuna
-currenciesDisplayName.REF=R\u00e9union-franc
+currenciesDisplayName.CLP=Chilensk peso
currenciesDisplayName.HRD=Kroatisk dinar
-currenciesDisplayName.ALL=Albansk lek
-currenciesDisplayName.JEP=Jersey-pund sterling
-currenciesDisplayName.ALK=Albansk lek (1946-1961)
-currenciesDisplayName.MKN=Makedonisk denar (1992-1993)
-currenciesDisplayName.VDP=Nordvietnamesisk viet minh piastre dong viet
-currenciesDisplayName.VDN=Nordvietnamesisk ny dong
-currenciesDisplayName.MKD=Makedonisk denar
-currenciesDisplayName.VDD=Nordvietnamesisk piastre dong viet
-currenciesDisplayName.TPP=Timoriansk pataca
currenciesDisplayName.XPF=CFP-franc
-currenciesDisplayName.BEL=Belgisk franc (finansiell)
-currenciesDisplayName.GWP=Guinea-Bissau-peso
-currenciesDisplayName.KWD=Kuwaitisk dinar
-currenciesDisplayName.GWM=Portugisiska Guinea-mil reis
-currenciesDisplayName.BEF=Belgisk franc
+currenciesDisplayName.FRF=Fransk franc
+currenciesDisplayName.BRR=Brasiliansk cruzeiro
+currenciesDisplayName.MKD=Makedonisk denar
+currenciesDisplayName.CLF=Chilensk unidad de fomento
+currenciesDisplayName.ALL=Albansk lek
+currenciesDisplayName.BRN=Brasiliansk cruzado novo
+currenciesDisplayName.MWK=Malawisk kwacha
+currenciesDisplayName.BRL=Brasiliansk real
currenciesDisplayName.TPE=Timoriansk escudo
-currenciesDisplayName.BEC=Belgisk franc (konvertibel)
-currenciesDisplayName.GWE=Portugisiska Guinea-escudo
+currenciesDisplayName.BRE=Brasiliansk cruzeiro (1990-1993)
+currenciesDisplayName.BRC=Brasiliansk cruzado
+currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
+currenciesDisplayName.DEM=Tysk mark
+currenciesDisplayName.KWD=Kuwaitisk dinar
+currenciesDisplayName.XCD=\u00d6stkaribisk dollar
+currenciesDisplayName.NPR=Nepalesisk rupie
+currenciesDisplayName.GWP=Guinea-Bissau-peso
+currenciesDisplayName.YUN=Jugoslavisk konvertibel dinar
currenciesDisplayName.SVC=Salvadoransk col\u00f3n
-currenciesDisplayName.CWG=Cura\u00e7ao-gulden
-currenciesDisplayName.BDT=Bangladeshisk taka
-currenciesDisplayName.TOS=Tonganskt pund sterling
-currenciesDisplayName.TOP=Tongansk pa\u02bbanga
+currenciesDisplayName.YUM=Dinar (Serbien och Montenegro)
+currenciesDisplayName.BEL=Belgisk franc (finansiell)
+currenciesDisplayName.SIT=Slovensk tolar
+currenciesDisplayName.JPY=Japansk yen
currenciesDisplayName.XOF=CFA Franc BCEAO
+currenciesDisplayName.MVR=Maldivisk rufiyaa
+currenciesDisplayName.GWE=Portugisiska Guinea-escudo
+currenciesDisplayName.BEF=Belgisk franc
+currenciesDisplayName.TOP=Tongansk pa\u02bbanga
+currenciesDisplayName.YUD=Jugoslavisk h\u00e5rd dinar
+currenciesDisplayName.BEC=Belgisk franc (konvertibel)
currenciesDisplayName.SUR=Sovjetisk rubel
-currenciesDisplayName.SUN=Sovjetisk ny rubel
-currenciesDisplayName.NCF=Nykaledonsk franc germinal
-currenciesDisplayName.CVE=Kapverdisk escudo
-currenciesDisplayName.XNF=Fransk Antillisk CFA-franc
+currenciesDisplayName.ROL=Rum\u00e4nsk leu
+currenciesDisplayName.DDM=\u00d6sttysk mark
+currenciesDisplayName.BDT=Bangladeshisk taka
+currenciesDisplayName.AWG=Aruba-florin
+currenciesDisplayName.NOK=Norsk krona
+currenciesDisplayName.MUR=Mauritisk rupie
currenciesDisplayName.ZAR=Sydafrikansk rand
-currenciesDisplayName.DOP=Dominikansk peso
-currenciesDisplayName.CUX=Kubansk Foreign Exchange Certificates
-currenciesDisplayName.ZAP=Sydafrikansk rand
+currenciesDisplayName.SHP=S:t Helena-pund
currenciesDisplayName.ZAL=Sydafrikansk rand (finansiell)
+currenciesDisplayName.VND=Vietnamesisk dong
+currenciesDisplayName.TZS=Tanzanisk shilling
+currenciesDisplayName.GIP=Gibraltiskt pund
currenciesDisplayName.TND=Tunisisk dinar
-currenciesDisplayName.CUP=Kubansk peso
-currenciesDisplayName.GUF=Franska Guyanas Franc Guiana
+currenciesDisplayName.CVE=Kapverdisk escudo
currenciesDisplayName.UGX=Ugandisk shilling
-currenciesDisplayName.LNR=Ceylonesisk rupie
-currenciesDisplayName.AIF=Affars och Issas-franc
-currenciesDisplayName.VAL=Vatikansk lira
-currenciesDisplayName.STE=S\u00e3o Tom\u00e9 och Pr\u00edncipe-escudo
+currenciesDisplayName.ZMK=Zambisk kwacha
+currenciesDisplayName.JOD=Jordansk dinar
+currenciesDisplayName.XAF=CFA Franc BEAC
+currenciesDisplayName.LBP=Libanesiskt pund
currenciesDisplayName.UGS=Ugandisk shilling (1966-1987)
currenciesDisplayName.STD=S\u00e3o Tom\u00e9 och Pr\u00edncipe-dobra
-currenciesDisplayName.MHD=Marshall\u00f6isk dollar
-currenciesDisplayName.NZP=Nyzeel\u00e4ndskt pund
currenciesDisplayName.WST=V\u00e4stsamoansk tala
-currenciesDisplayName.WSP=V\u00e4stsamoanskt pund
-currenciesDisplayName.HNL=Hoduransk lempira
-currenciesDisplayName.XMF=French Metropolitan Nouveau Franc
+currenciesDisplayName.KHR=Kambodjansk riel
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominikansk peso
+currenciesDisplayName.BOV=Boliviansk mvdol
+currenciesDisplayName.MTP=Maltesiskt pund
+currenciesDisplayName.USS=US-dollar (samma dag)
+currenciesDisplayName.BOP=Boliviansk peso
+currenciesDisplayName.MTL=Maltesisk lira
+currenciesDisplayName.CUP=Kubansk peso
currenciesDisplayName.TMM=Turkmensk manat
-currenciesDisplayName.GTQ=Guatemalansk quetzal
+currenciesDisplayName.USN=US-dollar (n\u00e4sta dag)
+currenciesDisplayName.SGD=Singaporiansk dollar
currenciesDisplayName.NZD=Nyzeel\u00e4ndsk dollar
-currenciesDisplayName.SSP=Skotskt pund
-currenciesDisplayName.BBD=Barbadisk dollar
+currenciesDisplayName.USD=US-dollar
+currenciesDisplayName.HNL=Hoduransk lempira
+currenciesDisplayName.ITL=Italiensk lira
+currenciesDisplayName.PAB=Panamansk balboa
+currenciesDisplayName.GTQ=Guatemalansk quetzal
+currenciesDisplayName.LAK=Laotisk kip
+currenciesDisplayName.GHC=Ghanansk cedi
+currenciesDisplayName.AUD=Australisk dollar
currenciesDisplayName.NAD=Namibisk dollar
+currenciesDisplayName.KGS=Kirgizistansk som
currenciesDisplayName.MGF=Madagaskisk franc
+currenciesDisplayName.CHF=Schweizisk franc
+currenciesDisplayName.BBD=Barbadisk dollar
currenciesDisplayName.MGA=Madagaskisk ariary
-currenciesDisplayName.EGP=Egyptiskt pund
-currenciesDisplayName.BZH=Brittiska Honduras-dollar
+currenciesDisplayName.PYG=Paraguaysk guarani
currenciesDisplayName.PLZ=Polsk zloty (1950-1995)
-currenciesDisplayName.BAN=Bosnisk-hercegovinsk ny dinar
-currenciesDisplayName.PLX=Polsk US-dollar Foreign Exchange Certificates
-currenciesDisplayName.BAM=Konvertibel bosnisk-hercegovinsk mark
-currenciesDisplayName.BZD=Belizisk dollar
-currenciesDisplayName.BAD=Bosnisk-hercegovinsk dinar
-currenciesDisplayName.PLN=Polsk zloty
currenciesDisplayName.YER=Jemenitisk rial
+currenciesDisplayName.ATS=\u00d6sterrikisk schilling
+currenciesDisplayName.ETB=Etiopisk birr
+currenciesDisplayName.BND=Bruneisk dollar
+currenciesDisplayName.JMD=Jamaicansk dollar
+currenciesDisplayName.EGP=Egyptiskt pund
+currenciesDisplayName.PLN=Polsk zloty
+currenciesDisplayName.DZD=Algerisk dinar
+currenciesDisplayName.ISK=Isl\u00e4ndsk krona
currenciesDisplayName.SRG=Surinamesisk gulden
-currenciesDisplayName.CSK=Tjeckisk h\u00e5rd koruna
+currenciesDisplayName.LYD=Libysk dinar
+currenciesDisplayName.BZD=Belizisk dollar
+currenciesDisplayName.BAM=Konvertibel bosnisk-hercegovinsk mark
+currenciesDisplayName.ESP=Spansk peseta
currenciesDisplayName.KRW=Sydkoreansk won
+currenciesDisplayName.NLG=Nederl\u00e4ndsk gulden
+currenciesDisplayName.MRO=Mauretansk ouguiya
+currenciesDisplayName.BAD=Bosnisk-hercegovinsk dinar
+currenciesDisplayName.ZWD=Zimbabwisk dollar
+currenciesDisplayName.SEK=Svensk krona
+currenciesDisplayName.CSK=Tjeckisk h\u00e5rd koruna
currenciesDisplayName.BYR=Vitrysk rubel
-currenciesDisplayName.YEI=Jemenitisk imadi riyal
-currenciesDisplayName.BYL=Vitrysk rubel (1992-1994)
-currenciesDisplayName.CSC=Tjeckisk koruna
-currenciesDisplayName.KRO=Sydkoreansk gammal won
-currenciesDisplayName.KRH=Sydkoreansk hwan
-currenciesDisplayName.BYB=Vitrysk ny rubel (1994-1999)
-currenciesDisplayName.SQS=Somalil\u00e4ndsk shilling
-currenciesDisplayName.GRN=Grekisk ny drachma
+currenciesDisplayName.IRR=Iransk rial
currenciesDisplayName.PKR=Pakistansk rupie
-currenciesDisplayName.ZWD=Zimbabwisk dollar
-currenciesDisplayName.LKR=Srilankesisk rupie
-currenciesDisplayName.GRD=Grekisk drachma
-currenciesDisplayName.IEP=Irl\u00e4ndskt pund
-currenciesDisplayName.YDD=Jemenitisk dinar
-currenciesDisplayName.RWF=Rwandisk franc
-currenciesDisplayName.CRC=Costarikansk col\u00f3n
-currenciesDisplayName.TJS=Tadzjikisk somoni
-currenciesDisplayName.TJR=Tadzjikisk rubel
-currenciesDisplayName.EEK=Estnisk krona
-currenciesDisplayName.GQP=Ekvatorialguineansk peseta guineana
-currenciesDisplayName.MDR=Moldavisk rubelkupong
-currenciesDisplayName.HKD=Hongkong-dollar
-currenciesDisplayName.DKK=Dansk krona
-currenciesDisplayName.MDL=Moldavisk leu
-currenciesDisplayName.GQF=Ekvatorialguineansk franco
-currenciesDisplayName.GQE=Ekvatorialguineansk ekwele guineana
-currenciesDisplayName.IDR=Indonesisk rupiah
-currenciesDisplayName.AED=F\u00f6renade arabemiratens dirham
-currenciesDisplayName.KPW=Nordkoreansk won
-currenciesDisplayName.IDN=Indonesisk ny rupiah
-currenciesDisplayName.BWP=Botswansk pula
-currenciesDisplayName.MDC=Moldavisk leu-kupong
-currenciesDisplayName.IDJ=Indonesisk java rupiah
-currenciesDisplayName.KPP=Nordkoreansk won
-currenciesDisplayName.IDG=Indonesisk nica gulden
-currenciesDisplayName.VUV=Vanuatisk vatu
-currenciesDisplayName.XID=Islamisk dinar
-currenciesDisplayName.SOS=Somalisk shilling
-currenciesDisplayName.ADP=Andorransk peseta
-currenciesDisplayName.RUR=Rysk rubel (1991-1998)
-currenciesDisplayName.GPF=Guadeloupisk franc
-currenciesDisplayName.DJF=Djiboutisk franc
-currenciesDisplayName.ADD=Andorransk diner
-currenciesDisplayName.MCG=Monegaskisk franc germinal
-currenciesDisplayName.MCF=Monegaskisk franc nouveau
-currenciesDisplayName.ECV=Ecuadoriansk Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ecuadoriansk sucre
-currenciesDisplayName.LIF=Liechtensteinsk franc
-currenciesDisplayName.RUB=Rysk rubel
-currenciesDisplayName.PHP=Filippinsk peso
-currenciesDisplayName.UZS=Uzbekisk sum
-currenciesDisplayName.COP=Colombiansk peso
-currenciesDisplayName.THB=Thail\u00e4ndsk baht
-currenciesDisplayName.IBP=Nordirl\u00e4ndskt pund
-currenciesDisplayName.BUR=Burmesisk rupee
-currenciesDisplayName.COF=Kongolesisk CFA-franc
-currenciesDisplayName.BUK=Burmesisk kyat
-currenciesDisplayName.COB=Colombiansk papperspeso
-currenciesDisplayName.UZC=Uzbekisk coupon som
-currenciesDisplayName.UAK=Ukrainsk karbovanetz
-currenciesDisplayName.QAR=Qatarisk rial
-currenciesDisplayName.UAH=Ukrainsk hryvnia
-currenciesDisplayName.GNS=Guineansk syli
-currenciesDisplayName.CNY=Kinesisk yuan renminbi
-currenciesDisplayName.MZM=Mo\u00e7ambikisk metical
-currenciesDisplayName.CNX=Kinesisk USA-dollar Foreign Exchange Certificates
-currenciesDisplayName.UYU=Uruguayansk peso uruguayo
-currenciesDisplayName.GNI=Guineansk franc (1960-1972)
-currenciesDisplayName.SML=Sanmarinsk lira
-currenciesDisplayName.MZE=Mo\u00e7ambikisk escudo
-currenciesDisplayName.CNP=Kinesisk jen min piao yuan
-currenciesDisplayName.PGK=Papuansk kina
-currenciesDisplayName.OMS=Omansk rial saidi
-currenciesDisplayName.GNF=Guineansk franc
-currenciesDisplayName.OMR=Omansk rial
-currenciesDisplayName.UYP=Uruguayansk peso (1975-1993)
-currenciesDisplayName.XFU=French UIC-Franc
-currenciesDisplayName.BTR=Bhutanesisk rupie
-currenciesDisplayName.ZRZ=Zairisk zaire
-currenciesDisplayName.MAF=Marockansk franc
-currenciesDisplayName.MAD=Marockansk dirham
-currenciesDisplayName.BTN=Bhutanesisk ngultrum
-currenciesDisplayName.XFO=Fransk guldfranc
-currenciesDisplayName.UYF=Uruguayansk peso fuerte
-currenciesDisplayName.MYR=Malaysisk ringgit
-currenciesDisplayName.ZRN=Zairisk ny zaire
-currenciesDisplayName.AZM=Azerbajdzjansk manat
-currenciesDisplayName.GMP=Gambiskt pund
-currenciesDisplayName.KMF=Komorisk franc
-currenciesDisplayName.SLL=Sierraleonsk leone
-currenciesDisplayName.GMD=Gambisk dalasi
-currenciesDisplayName.BSP=Bahamanskt pund
-currenciesDisplayName.CMF=Kamerunsk CFA-franc
-currenciesDisplayName.MXV=Mexikansk Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA Franc BCEAEC
-currenciesDisplayName.BSD=Bahamansk dollar
-currenciesDisplayName.MXP=Mexikansk silverpeso (1861-1992)
-currenciesDisplayName.MXN=Mexikansk peso
-currenciesDisplayName.PES=Peruansk sol
-currenciesDisplayName.GLK=Gr\u00f6nl\u00e4ndsk krona
-currenciesDisplayName.BRZ=Brasiliansk cruzeiro (1942-1967)
-currenciesDisplayName.PEN=Peruansk sol nuevo
-currenciesDisplayName.CLP=Chilensk peso
-currenciesDisplayName.SKK=Slovakisk koruna
-currenciesDisplayName.PEI=Peruansk inti
-currenciesDisplayName.BRR=Brasiliansk cruzeiro
-currenciesDisplayName.FRG=Fransk Franc Germinal/Franc Poincare
-currenciesDisplayName.FRF=Fransk franc
-currenciesDisplayName.BRN=Brasiliansk cruzado novo
-currenciesDisplayName.CLF=Chilensk unidad de fomento
-currenciesDisplayName.CLE=Chilensk escudo
-currenciesDisplayName.BRL=Brasiliansk real
-currenciesDisplayName.CLC=Chilensk condor
-currenciesDisplayName.BRE=Brasiliansk cruzeiro (1990-1993)
-currenciesDisplayName.DES=Tysk sperrmark
-currenciesDisplayName.MWP=Malawiskt pund
-currenciesDisplayName.BRC=Brasiliansk cruzado
-currenciesDisplayName.BRB=Brasiliansk cruzeiro novo (1967-1986)
-currenciesDisplayName.MWK=Malawisk kwacha
-currenciesDisplayName.PDR=Transdniestrisk rubel
-currenciesDisplayName.DEM=Tysk mark
-currenciesDisplayName.TDF=Tchadisk CFA-franc
-currenciesDisplayName.PDN=Transdniestrisk ny rubel
-currenciesDisplayName.PDK=Transdniestrisk rubelkupong
-currenciesDisplayName.NPR=Nepalesisk rupie
-currenciesDisplayName.CKD=Cook-dollar
-currenciesDisplayName.JPY=Japansk yen
-currenciesDisplayName.MVR=Maldivisk rufiyaa
-currenciesDisplayName.XCF=CFA Nouveau Franc
-currenciesDisplayName.MVP=Maldivisk rupie
-currenciesDisplayName.XCD=\u00d6stkaribisk dollar
-currenciesDisplayName.SIT=Slovensk tolar
-currenciesDisplayName.YUR=Jugoslavisk reformerad dinar
-currenciesDisplayName.AWG=Aruba-florin
-currenciesDisplayName.YUO=Jugoslavisk oktoberdinar
-currenciesDisplayName.DDM=\u00d6sttysk mark
-currenciesDisplayName.YUN=Jugoslavisk konvertibel dinar
-currenciesDisplayName.YUM=Dinar (Serbien och Montenegro)
-currenciesDisplayName.TCC=Turks and Caicos-crown
-currenciesDisplayName.YUG=Jugoslavisk dinar (1994)
-currenciesDisplayName.YUF=Jugoslavisk federationsdinar
-currenciesDisplayName.RON=Rum\u00e4nsk ny leu
-currenciesDisplayName.YUD=Jugoslavisk h\u00e5rd dinar
-currenciesDisplayName.ROL=Rum\u00e4nsk leu
-currenciesDisplayName.SIB=Slovensk tolar bons
-currenciesDisplayName.NOK=Norsk krona
-currenciesDisplayName.MUR=Mauritisk rupie
-currenciesDisplayName.GIP=Gibraltiskt pund
-currenciesDisplayName.VNS=Vietnamesisk nationell dong
-currenciesDisplayName.VNR=Vietnamesisk dong
-currenciesDisplayName.KID=Kiribatisk dollar
-currenciesDisplayName.SHP=S:t Helena-pund
-currenciesDisplayName.VNN=Vietnamesisk ny dong
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=kr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermuda-dollar
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.BAD=BAD
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=kr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.KYD=KYD
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=jan®feb®mar®apr®maj®jun®jul®aug®sep®okt®nov®dec®®
months=januari®februari®mars®april®maj®juni®juli®augusti®september®oktober®november®december®®
-shortWeekdays=®s\u00f6®m\u00e5®ti®on®to®fr®l\u00f6®
+shortWeekdays=®s\u00f6n®m\u00e5n®tis®ons®tors®fre®l\u00f6r®
weekdays=®s\u00f6ndag®m\u00e5ndag®tisdag®onsdag®torsdag®fredag®l\u00f6rdag®
minNumberOfDaysInFirstWeek=4
firstDayOfWeek=mon
eras=f.Kr.®e.Kr.®
ampms=f.m.®e.m.®
shortDateFormat=yyyy-MM-dd
-mediumDateFormat=yyyy-MM-dd
-longDateFormat='den 'd MMM yyyy
-fullDateFormat='den 'd MMMM yyyy
+mediumDateFormat=d MMM yyyy
+longDateFormat=EEEE d MMM yyyy
+fullDateFormat=EEEE d MMMM yyyy
shortTimeFormat=HH.mm
mediumTimeFormat=HH.mm.ss
longTimeFormat=HH.mm.ss z
fullTimeFormat='kl. 'HH.mm.ss z
-zoneStrings=America/Indianapolis®EST®Eastern, normaltid®EST®Eastern, normaltid®©America/Halifax®AST®Atlantic, normaltid®ADT®Atlantic, sommartid®©Pacific/Honolulu®HST®Hawaii, normaltid®HST®Hawaii, normaltid®©America/Denver®MST®Mountain, normaltid®MDT®Mountain, sommartid®©America/Anchorage®AST®Alaska, normaltid®ADT®Alaska, sommartid®©America/St_Johns®CNT®Newfoundland, normaltid®CDT®Newfoundland, sommartid®©Africa/Casablanca®GMT®Greenwichtid®GMT®Greenwichtid®©America/Chicago®CST®Central, normaltid®CDT®Central, sommartid®©Asia/Shanghai®CTT®Kina, normaltid®CDT®Kina, normaltid®©Asia/Tokyo®JST®Japan, normaltid®JST®Japan, normaltid®©America/New_York®EST®Eastern, normaltid®EDT®Eastern, sommartid®©Europe/Bucharest®EET®\u00d6steuropa, normaltid®EEST®\u00d6steuropa, sommartid®©America/Los_Angeles®PST®Pacific, normaltid®PDT®Pacific, sommartid®©America/Phoenix®MST®Mountain, normaltid®MST®Mountain, sommartid®©Etc/GMT®GMT®Greenwichtid®GMT®Greenwichtid®©Asia/Jerusalem®IST®Israel, normaltid®IDT®Israel, sommartid®©Europe/Paris®CET®Centraleuropa, normaltid®CEST®Centraleuropa, sommartid®©
+zoneStrings=Pacific/Honolulu®HST®Hawaii, normaltid®HST®Hawaii, normaltid®©Europe/Bucharest®EET®\u00d6steuropa, normaltid®EEST®\u00d6steuropa, sommartid®©America/Los_Angeles®PST®Pacific, normaltid®PDT®Pacific, sommartid®©America/Denver®MST®Mountain, normaltid®MDT®Mountain, sommartid®©Asia/Jerusalem®IST®Israel, normaltid®IDT®Israel, sommartid®©America/Phoenix®MST®Mountain, normaltid®MST®Mountain, sommartid®©America/Chicago®CST®Central, normaltid®CDT®Central, sommartid®©America/Indianapolis®EST®Eastern, normaltid®EST®Eastern, normaltid®©America/St_Johns®CNT®Newfoundland, normaltid®CDT®Newfoundland, sommartid®©America/Anchorage®AST®Alaska, normaltid®ADT®Alaska, sommartid®©Asia/Shanghai®CTT®Kina, normaltid®CDT®Kina, normaltid®©Asia/Tokyo®JST®Japan, normaltid®JST®Japan, normaltid®©Europe/Paris®CET®Centraleuropa, normaltid®CEST®Centraleuropa, sommartid®©America/New_York®EST®Eastern, normaltid®EDT®Eastern, sommartid®©America/Halifax®AST®Atlantic, normaltid®ADT®Atlantic, sommartid®©Africa/Casablanca®GMT®Greenwichtid®GMT®Greenwichtid®©
territories.TL=\u00d6sttimor
-territories.TK=Tokelau\u00f6arna
+territories.TK=Tokelau
territories.TJ=Tadzjikistan
territories.TH=Thailand
territories.TG=Togo
-territories.TF=Franska Sydterritorierna
+territories.TF=Franska s\u00f6dra territorierna
territories.GY=Guyana
territories.TD=Tchad
territories.TC=Turks- och Caicos\u00f6arna
@@ -773,7 +380,9 @@ territories.GN=Guinea
territories.GM=Gambia
territories.GL=Gr\u00f6nland
territories.SV=El Salvador
+territories.062=S\u00f6dra Centralasien
territories.ST=S\u00e3o Tom\u00e9 och Pr\u00edncipe
+territories.061=Polynesien
territories.GI=Gibraltar
territories.GH=Ghana
territories.SR=Surinam
@@ -797,9 +406,12 @@ territories.SC=Seychellerna
territories.SB=Salomon\u00f6arna
territories.SA=Saudiarabien
territories.FR=Frankrike
+territories.057=Mikronesien
territories.FO=F\u00e4r\u00f6arna
territories.FM=Mikronesien
territories.RW=Rwanda
+territories.054=Melanesien
+territories.053=Australien och Nya Zeeland
territories.FK=Falklands\u00f6arna
territories.RU=Ryssland
territories.FJ=Fiji
@@ -809,20 +421,26 @@ territories.RE=R\u00e9union
territories.ET=Etiopien
territories.ES=Spanien
territories.ER=Eritrea
+territories.833=Isle of Man
territories.EH=V\u00e4stra Sahara
territories.EG=Egypten
+territories.830=Kanal\u00f6arna
territories.EE=Estland
+territories.QO=Yttre \u00f6ar i Oceanien
territories.EC=Ecuador
territories.DZ=Algeriet
territories.QA=Qatar
+territories.039=Sydeuropa
territories.DO=Dominikanska republiken
territories.PY=Paraguay
+territories.035=Sydostasien
territories.DM=Dominica
territories.PW=Palau
territories.DK=Danmark
territories.DJ=Djibouti
territories.PT=Portugal
territories.PS=Palestinska territoriet
+territories.030=Ostasien
territories.PR=Puerto Rico
territories.DE=Tyskland
territories.PN=Pitcairn
@@ -839,17 +457,20 @@ territories.CX=Jul\u00f6n
territories.CV=Kap Verde
territories.PA=Panama
territories.CU=Kuba
+territories.CS=Serbien och Montenegro
territories.CR=Costa Rica
+territories.029=Karibien
territories.CO=Colombia
territories.CN=Kina
territories.CM=Kamerun
territories.CL=Chile
territories.CK=Cook\u00f6arna
territories.CI=Elfenbenskusten
+territories.021=Nordamerika
territories.CH=Schweiz
-territories.CG=Kongo-Brazzaville
+territories.CG=Kongo
territories.CF=Centralafrikanska republiken
-territories.CD=Kongo-Kinshasa
+territories.CD=Demokratiska republiken Kongo
territories.CC=Kokos\u00f6arna (Keeling\u00f6arna)
territories.OM=Oman
territories.CA=Kanada
@@ -860,13 +481,20 @@ territories.BV=Bouvet\u00f6n
territories.BT=Bhutan
territories.BS=Bahamas
territories.BR=Brasilien
+territories.019=Nord- och Sydamerika
+territories.018=S\u00f6dra Afrika
territories.NZ=Nya Zeeland
territories.BO=Bolivia
+territories.017=Centralafrika
territories.BN=Brunei
territories.BM=Bermuda
-territories.NU=Niue\u00f6n
+territories.015=Nordafrika
+territories.014=\u00d6stafrika
+territories.013=Centralamerika
+territories.NU=Niue
territories.BJ=Benin
territories.BI=Burundi
+territories.011=V\u00e4stafrika
territories.BH=Bahrain
territories.NR=Nauru
territories.BG=Bulgarien
@@ -884,6 +512,7 @@ territories.NG=Nigeria
territories.NF=Norfolk\u00f6n
territories.AZ=Azerbajdzjan
territories.NE=Niger
+territories.AX=\u00c5land
territories.NC=Nya Kaledonien
territories.AW=Aruba
territories.ZM=Zambia
@@ -892,19 +521,23 @@ territories.AU=Australien
territories.AT=\u00d6sterrike
territories.AS=Amerikanska Samoa
territories.AR=Argentina
+territories.009=Oceanien
territories.AQ=Antarktis
territories.MZ=Mo\u00e7ambique
territories.AO=Angola
territories.MY=Malaysia
territories.AN=Nederl\u00e4ndska Antillerna
territories.MX=Mexiko
+territories.005=Sydamerika
territories.AM=Armenien
territories.MW=Malawi
territories.AL=Albanien
territories.MV=Maldiverna
territories.ZA=Sydafrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=Malta
+territories.001=V\u00e4rlden
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Mauretanien
@@ -919,7 +552,6 @@ territories.MN=Mongoliet
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedonien
-territories.YU=Jugoslavien
territories.YT=Mayotte
territories.MH=Marshall\u00f6arna
territories.MG=Madagaskar
@@ -929,10 +561,14 @@ territories.MA=Marocko
territories.YE=Jemen
territories.LY=Libyen
territories.LV=Lettland
+territories.155=V\u00e4steuropa
territories.LU=Luxemburg
+territories.154=Nordeuropa
territories.LT=Litauen
territories.LS=Lesotho
territories.LR=Liberia
+territories.151=\u00d6steuropa
+territories.150=Europa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=S:t Lucia
@@ -941,6 +577,8 @@ territories.LA=Laos
territories.KZ=Kazakstan
territories.KY=Cayman\u00f6arna
territories.KW=Kuwait
+territories.145=V\u00e4stasien
+territories.142=Asien
territories.KR=Sydkorea
territories.KP=Nordkorea
territories.KN=S:t Kitts och Nevis
@@ -960,7 +598,7 @@ territories.VI=Amerikanska Jungfru\u00f6arna
territories.VG=Brittiska Jungfru\u00f6arna
territories.VE=Venezuela
territories.VC=S:t Vincent och Grenadinerna
-territories.VA=Vatikanstaten
+territories.VA=Vatikanen
territories.IT=Italien
territories.IS=Island
territories.IR=Iran
@@ -990,8 +628,8 @@ territories.TR=Turkiet
territories.TO=Tonga
territories.TN=Tunisien
territories.TM=Turkmenistan
-languages.gwi=gwich\u02bbin
languages.akk=akkadiska
+languages.gwi=gwich'in
languages.eka=ekajuk
languages.xh=xhosa
languages.sux=sumeriska
@@ -1003,15 +641,15 @@ languages.pon=ponape
languages.min=minangkabau
languages.suk=sukuma
languages.wo=wolof
-languages.lol=lolo; mongo
languages.kut=kutenai
+languages.lol=lolo; mongo
languages.mic=mic-mac
languages.wa=walloon
languages.kum=kumyk
languages.zap=zapotek
languages.cus=kushitiska (annat)
-languages.jbo=lojban
languages.doi=dogri
+languages.jbo=lojban
languages.vo=volap\u00fck
languages.oto=otomanguespr\u00e5k
languages.vi=vietnamesiska
@@ -1034,8 +672,8 @@ languages.egy=fornegyptiska
languages.ug=uiguriska
languages.fan=fang
languages.ssa=nilosahariskt (annat)
-languages.mga=medeliriska (900-1200)
languages.bat=baltiskt (annat)
+languages.mga=medeliriska (900-1200)
languages.nyo=nyoro
languages.bas=basa
languages.nyn=nyankole
@@ -1063,8 +701,8 @@ languages.kru=kurukh
languages.tg=tadzjikiska
languages.byn=blin
languages.te=telugu
-languages.kro=kru
languages.csb=kasjubiska
+languages.kro=kru
languages.ta=tamil
languages.tkl=tokelauiska
languages.efi=efik
@@ -1088,8 +726,8 @@ languages.sk=slovakiska
languages.grb=grebo
languages.si=singalesiska
languages.sh=serbokroatiska
-languages.crh=krimturkiska; krimtatar
languages.afa=afro-asiatiskt (andra)
+languages.crh=krimturkiska; krimtatar
languages.sg=sango
languages.se=nord\u00adsamiska
languages.sd=sindhi
@@ -1113,14 +751,14 @@ languages.son=songhai
languages.cpp=kreolska och pidgin, portugisiskbaserade (\u00f6vriga)
languages.sog=sogdiska
languages.ada=adangme
-languages.kos=kosreanska
-languages.hit=hettitiska
languages.cpf=kreolska och pidgin, franskbaserade (\u00f6vriga)
+languages.hit=hettitiska
+languages.kos=kosreanska
languages.cpe=kreolska och pidgin, engelskbaserade (\u00f6vriga)
languages.him=himachali
-languages.kok=konkani
-languages.hil=hiligaynon
languages.got=gotiska
+languages.hil=hiligaynon
+languages.kok=konkani
languages.gor=gorontalo
languages.gon=gondi
languages.din=dinka
@@ -1137,7 +775,7 @@ languages.phi=filippinskt spr\u00e5k (annat)
languages.pl=polska
languages.ace=achinese
languages.pi=pali
-languages.pa=panjabi
+languages.pa=punjabi
languages.bug=buginesiska
languages.iba=iban
languages.sms=skoltsamiska
@@ -1189,21 +827,21 @@ languages.ms=malajiska
languages.mr=marathi
languages.fro=fornfranska (842- ca 1400)
languages.mo=moldaviska
-languages.frm=medelfranska (ca 1400-1600)
languages.mn=mongoliska
-languages.jrb=judisk arabiska
+languages.frm=medelfranska (ca 1400-1600)
languages.ml=malayalam
+languages.jrb=judisk arabiska
languages.mk=makedonska
languages.mi=maori
languages.mh=marshalliska
languages.mg=malagassiska
languages.mwr=marwari
languages.bra=braj
-languages.den=slave
languages.lv=lettiska
+languages.den=slave
languages.lu=luba-katanga
-languages.del=delaware
languages.lt=litauiska
+languages.del=delaware
languages.lo=laotiska
languages.ln=lingala
languages.li=limburgiska
@@ -1255,38 +893,38 @@ languages.iu=inuktitut
languages.pap=papiamento
languages.it=italienska
languages.sgn=teckenspr\u00e5k
-languages.is=isl\u00e4ndska
languages.kha=khasi
+languages.is=isl\u00e4ndska
languages.chr=cherokesiska
languages.pam=pampanga
languages.pal=pahlavi
languages.chp=chipewyan
-languages.io=ido
languages.cho=choctaw
+languages.io=ido
languages.chn=chinook
languages.chm=mari
languages.tyv=tuviniska
languages.bnt=bantuspr\u00e5k
languages.pag=pangasinan
-languages.ik=inupiaq
languages.chk=chuukesiska
-languages.ii=sichuan yi
+languages.ik=inupiaq
languages.haw=hawaiiska
+languages.ii=sichuan yi
languages.lam=lamba
-languages.ig=ibo
languages.chg=chagatai
+languages.ig=ibo
languages.sga=forniriska (till 900)
languages.paa=papuaspr\u00e5k (annat)
languages.ie=interlingue
languages.id=indonesiska
languages.lah=lahnda
-languages.day=dayak
languages.chb=chibcha
+languages.day=dayak
languages.ia=interlingua
languages.lad=ladino
-languages.hz=herero
-languages.hai=haida
languages.dar=dargwa
+languages.hai=haida
+languages.hz=herero
languages.hy=armeniska
languages.ath=athapasiska spr\u00e5k
languages.hu=ungerska
@@ -1308,9 +946,9 @@ languages.iro=irokesiska
languages.gn=guaran\u00ed
languages.gl=galiciska
languages.arw=arawakiska
-languages.gez=geez
-languages.art=artificiellt (annat)
languages.gd=skotsk gaeliska
+languages.art=artificiellt (annat)
+languages.gez=geez
languages.ira=iranska
languages.ga=irl\u00e4ndsk gaeliska
languages.arp=arapaho
@@ -1319,8 +957,8 @@ languages.fy=frisiska
languages.bla=siksika
languages.gem=germanskt (annat)
languages.ypk=yupiska spr\u00e5k
-languages.arc=arameiska
languages.fr=franska
+languages.arc=arameiska
languages.fo=f\u00e4r\u00f6iska
languages.cel=keltiskt (annat)
languages.fj=fidjianska
@@ -1328,7 +966,7 @@ languages.fi=finska
languages.ff=fulani
languages.tvl=tuvaluanska
languages.ceb=cebuano
-languages.fa=farsi
+languages.fa=persiska
languages.eu=baskiska
languages.sco=skotska
languages.et=estniska
@@ -1344,9 +982,9 @@ languages.tum=tumbuka
languages.mos=mossi
languages.dz=dzongkha
languages.nic=kordofanspr\u00e5k (annat)
-languages.lus=lushai
-languages.fiu=finskugriskt (annat)
languages.dv=divehi
+languages.fiu=finskugriskt (annat)
+languages.lus=lushai
languages.nia=nias
languages.moh=mohawk
languages.lun=lunda
@@ -1368,8 +1006,8 @@ languages.wak=wakash
languages.sat=santali
languages.cy=walesiska
languages.sas=sasak
-languages.kbd=kabardinska
languages.cv=tjuvasjiska
+languages.kbd=kabardinska
languages.cu=kyrkoslaviska
languages.mni=manipuri
languages.cs=tjeckiska
@@ -1381,17 +1019,17 @@ languages.co=korsikanska
languages.sai=nordamerikanskt indianskt (annat)
languages.mnc=manchuriska
languages.sah=jakutiska
-languages.kaw=kawi
-languages.inh=ingusjiska
languages.gba=gbaya
+languages.inh=ingusjiska
+languages.kaw=kawi
languages.sad=sandawe
languages.ch=chamorro
-languages.ine=indoeuropeiskt (annat)
languages.bho=bhojpuri
+languages.ine=indoeuropeiskt (annat)
languages.enm=medelengelska (1100-1500)
-languages.kar=karen
-languages.inc=indiskt (annat)
languages.ce=tjetjenska
+languages.inc=indiskt (annat)
+languages.kar=karen
languages.gay=gayo
languages.ca=katalanska
languages.umb=umbundu
@@ -1399,19 +1037,19 @@ languages.syr=syriska
languages.kam=kamba
languages.tsi=tsimshian
languages.ang=fornengelska (ca 450-1100)
-languages.kac=kachin
languages.cau=kaukasiskt (annat)
+languages.kac=kachin
languages.kab=kabyliska
-languages.kaa=karakalpakiska
languages.bs=bosniska
-languages.car=karibiska
+languages.kaa=karakalpakiska
languages.br=bretonska
+languages.car=karibiska
languages.bo=tibetanska
languages.bn=bengali
languages.bm=bambara
languages.gaa=ga
-languages.cai=centralamerikanskt indianskt (annat)
languages.bi=bislama
+languages.cai=centralamerikanskt indianskt (annat)
languages.bh=bihari
languages.bg=bulgariska
languages.be=vitryska
@@ -1425,10 +1063,10 @@ languages.az=azerbajdzjanska
languages.ay=aymara
languages.av=avariska
languages.as=assami
-languages.dsb=l\u00e5gsorbiska
languages.ar=arabiska
-languages.ilo=iloko
+languages.dsb=l\u00e5gsorbiska
languages.elx=elamitiska
+languages.ilo=iloko
languages.zh=kinesiska
languages.an=aragonesiska
languages.pra=prakrit
@@ -1451,4 +1089,4 @@ languages.nds=l\u00e5gtyska; l\u00e5gsaxiska
languages.bem=bemba
languages.bej=beyja
languages.tpi=tok pisin
-variants.REVISED=Reviderad
+variants.REVISED=reviderad
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw.properties
index 7ba98bc..2213bcb 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw.properties
@@ -5,13 +5,12 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.TZS=TZS
-currenciesDisplayName.KES=KES
+currenciesDisplayName.TZS=Shilingi ya Tanzania
currenciesSymbol.TZS=TSh
currenciesSymbol.KES=KSh
-shortMonths=Jan®Feb®Mar®Apr®Mei®Jun®Jul®Ago®Sep®Okt®Nov®Des®®
+shortMonths=Jan®Feb®Mac®Apr®Mei®Jun®Jul®Ago®Sep®Okt®Nov®Des®®
months=Januari®Februari®Machi®Aprili®Mei®Juni®Julai®Agosti®Septemba®Oktoba®Novemba®Desemba®®
-shortWeekdays=®Jpi®Jtt®Jnn®Jtn®Alh®Iju®Jmo®
+shortWeekdays=®Jpl®Jtt®Jnn®Jtn®Alh®Ijm®Jms®
weekdays=®Jumapili®Jumatatu®Jumanne®Jumatano®Alhamisi®Ijumaa®Jumamosi®
firstDayOfWeek=sat
eras=KK®BK®
@@ -24,8 +23,8 @@ territories.MX=Meksiko
territories.ZA=Afrika ya Kusini
territories.GQ=Guinea ya Ikweta
territories.AG=Antigua na Barbuda
-territories.ST=Sao Tome na Principe
territories.AE=Muugano wa Falme za Nchi za Kiarabu
+territories.ST=Sao Tome na Principe
territories.SO=Somali
territories.MH=Visiwa vya Marshall
territories.GB=Uingereza
@@ -46,16 +45,16 @@ territories.KP=Korea ya Kaskazini
territories.KN=Saint Kitts na Nevis
territories.KM=Visiwa vya Komoro
territories.EG=Misri
-territories.KH=Kampuchea
territories.EC=Ekvado
+territories.KH=Kampuchea
territories.KE=Kenya
-territories.PY=Paragwai
territories.DO=Jamhuri ya Dominikan
+territories.PY=Paragwai
territories.DM=Dominika
-territories.JP=Ujapani
territories.DK=Udenmarki
-territories.PT=Ureno
+territories.JP=Ujapani
territories.DJ=Jibuti
+territories.PT=Ureno
territories.JM=Jamaika
territories.DE=Udachi
territories.PH=Filipino
@@ -63,20 +62,21 @@ territories.PG=Papua Guinea Mpya
territories.CZ=Jamhuri ya Czech
territories.CV=Rasi Verde
territories.VC=Saint Vincent na Grenadines
+territories.CS=Serbiya da Montenegro
territories.VA=Vatikano
-territories.IT=Uitaliani
territories.CO=Kolombia
-territories.IS=Barafu
+territories.IT=Uitaliani
territories.CN=Uchina
-territories.IR=Uajemi
+territories.IS=Barafu
territories.CM=Kamerun
+territories.IR=Uajemi
territories.IQ=Iraki
territories.UY=Urugwai
-territories.IN=Uhindi
territories.CI=Pwani ya Pembe
+territories.IN=Uhindi
territories.CH=Uswisi
-territories.IL=Uyahudi
territories.CG=Kongo
+territories.IL=Uyahudi
territories.CF=Jamhuri ya Afrika ya Kati
territories.US=Muungano wa Nchi za Amerika
territories.CA=Kanada
@@ -87,8 +87,8 @@ territories.HR=Kroatia
territories.TZ=Tanzania
territories.NP=Nepali
territories.TT=Trinidad na Tobago
-territories.NO=Unorwe
territories.BE=Ubelgiji
+territories.NO=Unorwe
territories.TR=Uturuki
territories.NL=Uholanzi
territories.BA=Bosnia na Herzegowina
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw_TZ.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw_TZ.properties
index 4126b6b..1990c32 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw_TZ.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_sw_TZ.properties
@@ -6,3 +6,4 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
+firstDayOfWeek=mon
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr.properties
new file mode 100644
index 0000000..2caa330
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr.properties
@@ -0,0 +1,11 @@
+# LocaleInformation_syr.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesSymbol.SYP=\u0644.\u0633.\u200f
+shortMonths=\u070f\u071f\u0722\u00a0\u070f\u0712®\u072b\u0712\u071b®\u0710\u0715\u072a®\u0722\u071d\u0723\u0722®\u0710\u071d\u072a®\u071a\u0719\u071d\u072a\u0722®\u072c\u0721\u0718\u0719®\u0710\u0712®\u0710\u071d\u0720\u0718\u0720®\u070f\u072c\u072b\u00a0\u070f\u0710®\u070f\u072c\u072b\u00a0\u070f\u0712®\u070f\u071f\u0722\u00a0\u070f\u0710®®
+territories.SY=\u0723\u0718\u072a\u071d\u071d\u0710
+languages.syr=\u0723\u0718\u072a\u071d\u071d\u0710
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr_SY.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr_SY.properties
new file mode 100644
index 0000000..cf1012f
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_syr_SY.properties
@@ -0,0 +1,17 @@
+# LocaleInformation_syr_SY.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=\u00a4 #,##0.00;\u00a4 #,##0.00-
+firstDayOfWeek=thu
+shortDateFormat=dd/MM/yyyy
+mediumDateFormat=dd/MM/yyyy
+longDateFormat=dd MMMM, yyyy
+fullDateFormat=dd MMMM, yyyy
+shortTimeFormat=h:mm
+mediumTimeFormat=h:mm:ss
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta.properties
index 2267090..01bd7b9 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta.properties
@@ -23,16 +23,16 @@ territories.GW=\u0b95\u0bbf\u0ba9\u0bbf-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0b
territories.GT=\u0b95\u0bc1\u0bb5\u0bbe\u0ba4\u0bcd\u0ba4\u0bbe\u0bae\u0bbe\u0bb2\u0bbe
territories.GR=\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd
territories.GQ=\u0b88\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bbf\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf
-territories.SY=\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe
territories.GN=\u0b95\u0bbf\u0ba9\u0bbf
+territories.SY=\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe
territories.GM=\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe
territories.SV=\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd
territories.GH=\u0b95\u0bbe\u0ba9\u0bbe
territories.SR=\u0b9a\u0bc2\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd
territories.GE=\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe
territories.GD=\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe
-territories.SM=\u0b9a\u0bbe\u0ba9\u0bcd\u0bae\u0bc6\u0bb0\u0bbf\u0ba9\u0bcb
territories.GB=\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bbf\u0bb7\u0bcd \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bb0\u0b9a\u0bc1
+territories.SM=\u0b9a\u0bbe\u0ba9\u0bcd\u0bae\u0bc6\u0bb0\u0bbf\u0ba9\u0bcb
territories.GA=\u0b95\u0bbe\u0baa\u0bcb\u0ba9\u0bcd
territories.SK=\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe
territories.SI=\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe
@@ -41,8 +41,8 @@ territories.SE=\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd
territories.SB=\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd
territories.SA=\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe
territories.FR=\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd
-territories.RU=\u0bb0\u0bb7\u0bcd\u0baf\u0bbe
territories.FJ=\u0baa\u0bbf\u0b9c\u0bbf
+territories.RU=\u0bb0\u0bb7\u0bcd\u0baf\u0bbe
territories.FI=\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1
territories.RO=\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe
territories.ET=\u0b8e\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe
@@ -64,11 +64,11 @@ territories.PK=\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd
territories.PH=\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd
territories.PG=\u0baa\u0bbe\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe-\u0ba8\u0bbf\u0baf\u0bc2\u0b95\u0bbf\u0ba9\u0bbf
territories.CZ=\u0b9a\u0bc6\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1
-territories.PE=\u0baa\u0bc6\u0bb0\u0bc1
territories.CY=\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd
+territories.PE=\u0baa\u0bc6\u0bb0\u0bc1
territories.CV=\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7
-territories.PA=\u0baa\u0ba3\u0bbe\u0bae\u0bbe
territories.CU=\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe
+territories.PA=\u0baa\u0ba3\u0bbe\u0bae\u0bbe
territories.CR=\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe
territories.CO=\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe
territories.CN=\u0b9a\u0bc0\u0ba9
@@ -86,35 +86,35 @@ territories.BW=\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe
territories.BT=\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd
territories.BS=\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd
territories.BR=\u0baa\u0bbf\u0bb0\u0bc7\u0bb8\u0bbf\u0bb2\u0bcd
-territories.NZ=\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1
territories.BO=\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe
+territories.NZ=\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1
territories.BN=\u0baa\u0bc1\u0bb0\u0bc2\u0ba9\u0bc7\u0baf\u0bcd
territories.BJ=\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd
territories.BI=\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf
territories.BH=\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd
-territories.NR=\u0ba8\u0bcc\u0bb0\u0bc1
territories.BG=\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe
+territories.NR=\u0ba8\u0bcc\u0bb0\u0bc1
territories.BF=\u0baa\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bcb \u0baa\u0bbe\u0bb8\u0bcb
-territories.NP=\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd
territories.BE=\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd
-territories.NO=\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7
+territories.NP=\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd
territories.BD=\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd
+territories.NO=\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7
territories.BB=\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bcb\u0bb8\u0bcd
territories.ZW=\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7
-territories.NL=\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1
territories.BA=\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0bbf\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe
+territories.NL=\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1
territories.NI=\u0ba8\u0bbf\u0b95\u0bbe\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bbe
territories.AZ=\u0b85\u0b9c\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd
-territories.AU=\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe
territories.NA=\u0ba9\u0bbe\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe
+territories.AU=\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe
territories.AT=\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe
territories.AR=\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba3\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe
territories.AO=\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe
territories.MY=\u0bae\u0bb2\u0bc7\u0bb7\u0bbf\u0baf\u0bbe
-territories.MX=\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb
territories.AM=\u0b86\u0bb0\u0bcd\u0bae\u0bc0\u0ba9\u0bbf\u0baf\u0bbe
-territories.MW=\u0bae\u0bb2\u0bbe\u0bb5\u0bc0
+territories.MX=\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb
territories.AL=\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe
+territories.MW=\u0bae\u0bb2\u0bbe\u0bb5\u0bc0
territories.MV=\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1
territories.ZA=\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe
territories.MT=\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe
@@ -183,14 +183,14 @@ territories.TM=\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb
languages.es=\u0bb8\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0bb7\u0bcd
languages.ku=\u0b95\u0bc1\u0bb0\u0bcd\u0ba4\u0bbf\u0bb7\u0bcd
languages.eo=\u0b8e\u0bb8\u0bcd\u0baa\u0bb0\u0bc7\u0ba9\u0bcd\u0b9f\u0bcb
-languages.ks=\u0b95\u0bbe\u0bb7\u0bcd\u0bae\u0bbf\u0bb0\u0bbf
languages.en=\u0b86\u0b99\u0bcd\u0b95\u0bbf\u0bb2\u0bae\u0bcd
+languages.ks=\u0b95\u0bbe\u0bb7\u0bcd\u0bae\u0bbf\u0bb0\u0bbf
languages.el=\u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd
languages.qu=\u0b95\u0bbf\u0baf\u0bc1\u0b9a\u0bbe
languages.ko=\u0b95\u0bca\u0bb0\u0bbf\u0baf\u0ba9\u0bcd
languages.kn=\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bbe
-languages.kok=\u0b95\u0bca\u0b99\u0bcd\u0b95\u0ba9\u0bbf
languages.km=\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0ba9\u0bcd
+languages.kok=\u0b95\u0bca\u0b99\u0bcd\u0b95\u0ba9\u0bbf
languages.kl=\u0b95\u0bbf\u0bb0\u0bbf\u0ba9\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd
languages.kk=\u0b95\u0b9a\u0bbe\u0b95\u0bcd
languages.wo=\u0b92\u0bb2\u0bcb\u0baa\u0bcd
@@ -209,8 +209,8 @@ languages.cy=\u0bb5\u0bc6\u0bb2\u0bcd\u0bb7\u0bcd
languages.pa=\u0baa\u0b9e\u0bcd\u0b9a\u0bbe\u0baa\u0bbf
languages.cs=\u0b9a\u0bc6\u0b95\u0bcd
languages.iu=\u0b87\u0ba9\u0bc1\u0b95\u0bbf\u0b9f\u0b9f\u0bcd
-languages.it=\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf\u0baf\u0ba9\u0bcd
languages.co=\u0b95\u0bbe\u0bb0\u0bcd\u0b9a\u0bbf\u0baf\u0ba9\u0bcd
+languages.it=\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf\u0baf\u0ba9\u0bcd
languages.is=\u0b90\u0bb8\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd
languages.uz=\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bcd
languages.or=\u0b92\u0bb0\u0bbf\u0baf\u0bbe
@@ -303,15 +303,15 @@ languages.fy=\u0baa\u0bbf\u0bb0\u0bbf\u0bb7\u0bbf\u0baf\u0ba9\u0bcd
languages.sa=\u0b9a\u0bae\u0bb8\u0bcd\u0b95\u0bbf\u0bb0\u0bc1\u0ba4\u0bae\u0bcd
languages.fr=\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1
languages.lv=\u0bb2\u0bc7\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0ba9\u0bcd (\u0bb2\u0bc7\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd)
-languages.lt=\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd
languages.fo=\u0baa\u0bc8\u0bb0\u0bcb\u0bb8\u0bbf
+languages.lt=\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd
languages.rw=\u0b95\u0bbf\u0ba9\u0bcd\u0baf\u0bb0\u0bcd\u0bb5\u0bc6\u0ba9\u0bcd\u0b9f\u0bbe
languages.root=\u0ba4\u0bae\u0bbf\u0bb4\u0bcd
languages.ru=\u0bb0\u0bb7\u0bbf\u0baf\u0ba9\u0bcd
-languages.lo=\u0bb2\u0bcb\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0ba9\u0bcd
languages.fj=\u0baa\u0bbf\u0b9c\u0bbf
-languages.ln=\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bbe\u0bb2\u0bbe
+languages.lo=\u0bb2\u0bcb\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0ba9\u0bcd
languages.fi=\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0bbf\u0bb7\u0bcd
+languages.ln=\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bbe\u0bb2\u0bbe
languages.ro=\u0bb0\u0bcb\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd
languages.rn=\u0b95\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbf
languages.rm=\u0bb0\u0bc8\u0b9f\u0bcd\u0b9f\u0bcb-\u0bb0\u0bcb\u0bae\u0bc6\u0ba9\u0bcd\u0bb8\u0bcd
@@ -319,5 +319,5 @@ languages.fa=\u0baa\u0bb0\u0bcd\u0bb8\u0bbf\u0baf\u0ba9\u0bcd
languages.la=\u0bb2\u0bbe\u0ba4\u0bbf\u0ba9\u0bcd
languages.xh=\u0bb9\u0bcb\u0bb7\u0bbe
languages.eu=\u0baa\u0bb8\u0bcd\u0b95\u0bcd
-languages.ky=\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd
languages.et=\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd
+languages.ky=\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta_IN.properties
index c44d55c..1df35d1 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ta_IN.properties
@@ -5,8 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
firstDayOfWeek=mon
shortDateFormat=d-M-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te.properties
index d921248..c4580f5 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te.properties
@@ -6,11 +6,42 @@
# This file was automatically generated by gnu.localegen from CLDR.
zeroDigit=\u0c66
+currenciesDisplayName.INR=\u0c30\u0c42\u0c2a\u0c3e\u0c2f\u0c3f
+currenciesDisplayName.JPY=\u0c1c\u0c2a\u0c3e\u0c28\u0c41 \u0c26\u0c47\u0c36 \u0c2f\u0c46\u0c38\u0c4d
+currenciesDisplayName.RUB=\u0c30\u0c37\u0c4d\u0c2f \u0c26\u0c47\u0c36 \u0c30\u0c42\u0c2c\u0c32\u0c4d
+currenciesDisplayName.CNY=\u0c1a\u0c48\u0c28\u0c3e \u0c26\u0c47\u0c36 \u0c2f\u0c41\u0c35\u0c3e\u0c28\u0c4d \u0c30\u0c46\u0c28\u0c4d\u200c\u0c2e\u0c3f\u0c28\u0c4d\u200c\u0c2c\u0c3f
+currenciesDisplayName.EUR=\u0c2f\u0c41\u0c30\u0c4a
+currenciesDisplayName.GBP=\u0c2c\u0c4d\u0c3f\u0c1f\u0c3f\u0c37\u0c4d \u0c2a\u0c4c\u0c28\u0c4d\u0c21 \u0c38\u0c4d\u0c1f\u0c46\u0c30\u0c4d\u0c32\u0c3f\u0c17\u0c4d
+currenciesDisplayName.BRL=\u0c2c\u0c4d\u0c30\u0c1c\u0c3f\u0c32\u0c4d \u0c26\u0c47\u0c36 \u0c30\u0c3f\u0c2f\u0c3e\u0c32\u0c4d
+currenciesDisplayName.USD=\u0c10\u0c15\u0c4d\u0c2f \u0c30\u0c3e\u0c37\u0c4d\u0c1f\u0c4d\u0c30 \u0c05\u0c2e\u0c46\u0c30\u0c3f\u0c15 \u0c21\u0c3e\u0c32\u0c30\u0c4d
currenciesSymbol.INR=\u0c30\u0c42.
+currenciesSymbol.RUB=\u0c30\u0c42\u0c2c\u0c32\u0c4d
+currenciesSymbol.CNY=\u0c2f\u0c41
+currenciesSymbol.BRL=\u0c30\u0c3f$
shortMonths=\u0c1c\u0c28\u0c35\u0c30\u0c3f®\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f®\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f®\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d®\u0c2e\u0c47®\u0c1c\u0c42\u0c28\u0c4d®\u0c1c\u0c42\u0c32\u0c48®\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41®\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d®\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d®\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d®\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d®®
months=\u0c1c\u0c28\u0c35\u0c30\u0c3f®\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f®\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f®\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d®\u0c2e\u0c47®\u0c1c\u0c42\u0c28\u0c4d®\u0c1c\u0c42\u0c32\u0c48®\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41®\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d®\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d®\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d®\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d®®
shortWeekdays=®\u0c06\u0c26\u0c3f®\u0c38\u0c4b\u0c2e®\u0c2e\u0c02\u0c17\u0c33®\u0c2c\u0c41\u0c27®\u0c17\u0c41\u0c30\u0c41®\u0c36\u0c41\u0c15\u0c4d\u0c30®\u0c36\u0c28\u0c3f®
weekdays=®\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02®\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02®\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02®\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02®\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02®\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02®\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02®
-ampms=\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28®\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28®
+ampms=\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28\u0c02®\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28\u0c02®
+territories.FR=\u0c2b\u0c4d\u0c30\u0c3e\u0c28\u0c4d\u0c38\u0c4d\u200c
territories.IN=\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c33\u0c02
+territories.CN=\u0c1a\u0c48\u0c28\u0c3e
+territories.DE=\u0c19\u0c30\u0c4d\u0c2e\u0c28\u0c3f
+territories.GB=\u0c2c\u0c4d\u0c30\u0c3f\u0c1f\u0c28\u0c4d
+territories.BR=\u0c2c\u0c4d\u0c30\u0c1c\u0c3f\u0c32\u0c4d
+territories.RU=\u0c30\u0c37\u0c4d\u0c2f
+territories.JP=\u0c1c\u0c2a\u0c3e\u0c38\u0c41
+territories.US=\u0c10\u0c15\u0c4d\u0c2f \u0c30\u0c3e\u0c37\u0c4d\u0c1f\u0c4d\u0c30 \u0c05\u0c2e\u0c46\u0c30\u0c3f\u0c15
+territories.IT=\u0c07\u0c1f\u0c32\u0c3f
+languages.zh=\u0c1a\u0c48\u0c28\u0c3e \u0c2d\u0c3e\u0c37
+languages.en=\u0c06\u0c02\u0c17\u0c4d\u0c32\u0c02
languages.te=\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41
+languages.ru=\u0c30\u0c37\u0c4d\u0c2f\u0c28\u0c4d \u0c2d\u0c3e\u0c37
+languages.hi=\u0c39\u0c3f\u0c02\u0c26\u0c40
+languages.ar=\u0c05\u0c30\u0c2c\u0c3f\u0c15\u0c4d
+languages.it=\u0c07\u0c1f\u0c3e\u0c32\u0c3f\u0c2f\u0c28\u0c4d \u0c2d\u0c3e\u0c37
+languages.fr=\u0c2b\u0c4d\u0c30\u0c46\u0c02\u0c1a\u0c4d
+languages.de=\u0c19\u0c30\u0c4d\u0c2e\u0c28\u0c4d
+languages.es=\u0c38\u0c4d\u0c2a\u0c3e\u0c28\u0c3f\u0c37\u0c4d
+languages.ja=\u0c1c\u0c2a\u0c3e\u0c28\u0c41 \u0c2d\u0c3e\u0c37
+languages.pt=\u0c2a\u0c4a\u0c30\u0c4d\u0c1a\u0c41\u0c17\u0c32\u0c4d \u0c2d\u0c3e\u0c37
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te_IN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te_IN.properties
index 93be7d3..84dbb36 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te_IN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_te_IN.properties
@@ -5,8 +5,8 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-percentFormat=##,##,##0%
-currencyFormat=\u00a4 ##,##,##0.00;-\u00a4 ##,##,##0.00
+percentFormat=#,##,##0%
+currencyFormat=\u00a4 #,##,##0.00;-\u00a4 #,##,##0.00
firstDayOfWeek=mon
shortDateFormat=dd-MM-yy
mediumDateFormat=dd-MM-yyyy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_th.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_th.properties
index 506ed4f..e621f11 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_th.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_th.properties
@@ -6,8 +6,55 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
+currenciesDisplayName.GBP=\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e25\u0e34\u0e07\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29
+currenciesDisplayName.PKR=\u0e23\u0e39\u0e1b\u0e35\u0e1b\u0e32\u0e01\u0e35\u0e2a\u0e16\u0e32\u0e19
+currenciesDisplayName.PHP=\u0e40\u0e1b\u0e42\u0e0b\u0e1f\u0e34\u0e25\u0e34\u0e1b\u0e1b\u0e34\u0e19\u0e2a\u0e4c
+currenciesDisplayName.ARS=\u0e40\u0e1b\u0e42\u0e0b\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e08\u0e19\u0e15\u0e34\u0e19\u0e48\u0e32
+currenciesDisplayName.FRF=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a
+currenciesDisplayName.MYR=\u0e23\u0e34\u0e07\u0e01\u0e34\u0e15\u0e21\u0e32\u0e40\u0e25\u0e40\u0e0b\u0e35\u0e22
+currenciesDisplayName.IEP=\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e44\u0e2d\u0e23\u0e34\u0e0a
+currenciesDisplayName.ARP=\u0e40\u0e1b\u0e42\u0e0b\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e08\u0e19\u0e15\u0e34\u0e19\u0e48\u0e32 (1983-1985)
+currenciesDisplayName.INR=\u0e23\u0e39\u0e1b\u0e35\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22
+currenciesDisplayName.CLP=\u0e40\u0e1b\u0e42\u0e0b\u0e0a\u0e34\u0e25\u0e35
+currenciesDisplayName.JPY=\u0e40\u0e22\u0e19
+currenciesDisplayName.NZD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e19\u0e34\u0e27\u0e0b\u0e35\u0e41\u0e25\u0e19\u0e14\u0e4c
+currenciesDisplayName.EUR=\u0e22\u0e39\u0e42\u0e23
+currenciesDisplayName.AUD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22
+currenciesDisplayName.FJD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e1f\u0e34\u0e08\u0e34
+currenciesDisplayName.TRY=\u0e15\u0e38\u0e23\u0e01\u0e35 \u0e25\u0e35\u0e23\u0e48\u0e32 \u0e43\u0e2b\u0e21\u0e48
+currenciesDisplayName.USS=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e2a\u0e2b\u0e23\u0e31\u0e10 (\u0e27\u0e31\u0e19\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19)
+currenciesDisplayName.ILP=\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e2d\u0e34\u0e2a\u0e23\u0e32\u0e40\u0e2d\u0e25
currenciesDisplayName.THB=\u0e1a\u0e32\u0e17
+currenciesDisplayName.USN=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e2a\u0e2b\u0e23\u0e31\u0e10 (\u0e27\u0e31\u0e19\u0e16\u0e31\u0e14\u0e44\u0e1b)
+currenciesDisplayName.SGD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e2a\u0e34\u0e07\u0e04\u0e42\u0e1b\u0e23\u0e4c
+currenciesDisplayName.CNY=\u0e2b\u0e22\u0e27\u0e19\u0e40\u0e2b\u0e23\u0e34\u0e19\u0e40\u0e2b\u0e21\u0e34\u0e19\u0e1a\u0e35\u0e49
+currenciesDisplayName.CAD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e04\u0e32\u0e19\u0e32\u0e14\u0e32
+currenciesDisplayName.ATS=\u0e0a\u0e34\u0e25\u0e25\u0e34\u0e07\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e35\u0e22
+currenciesDisplayName.IDR=\u0e23\u0e39\u0e40\u0e1b\u0e35\u0e22\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
+currenciesDisplayName.BRL=\u0e23\u0e35\u0e25
+currenciesDisplayName.USD=\u0e14\u0e2d\u0e23\u0e4c\u0e25\u0e48\u0e32\u0e23\u0e4c\u0e2a\u0e2b\u0e23\u0e31\u0e10
+currenciesDisplayName.MXN=\u0e40\u0e1b\u0e42\u0e0b\u0e41\u0e21\u0e47\u0e01\u0e0b\u0e34\u0e42\u0e01
+currenciesDisplayName.RUB=\u0e23\u0e39\u0e40\u0e1a\u0e34\u0e25\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22
+currenciesDisplayName.HKD=\u0e40\u0e2b\u0e23\u0e35\u0e22\u0e0d\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07
+currenciesDisplayName.XAU=\u0e17\u0e2d\u0e07
+currenciesSymbol.GBP=\\u00A3
+currenciesSymbol.PKR=Pra
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.MYR=RM
+currenciesSymbol.IEP=IR\\u00A3
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.JPY=\\u00A5
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.AUD=$A
+currenciesSymbol.FJD=F$
currenciesSymbol.THB=\u0e3f
+currenciesSymbol.SGD=S$
+currenciesSymbol.CNY=\uffe5
+currenciesSymbol.CAD=Can$
+currenciesSymbol.IDR=Rp
+currenciesSymbol.USD=US$
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.HKD=HK$
shortMonths=\u0e21.\u0e04.®\u0e01.\u0e1e.®\u0e21\u0e35.\u0e04.®\u0e40\u0e21.\u0e22.®\u0e1e.\u0e04.®\u0e21\u0e34.\u0e22.®\u0e01.\u0e04.®\u0e2a.\u0e04.®\u0e01.\u0e22.®\u0e15.\u0e04.®\u0e1e.\u0e22.®\u0e18.\u0e04.®®
months=\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21®\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c®\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21®\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19®\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21®\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19®\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21®\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21®\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19®\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21®\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19®\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21®®
shortWeekdays=®\u0e2d\u0e32.®\u0e08.®\u0e2d.®\u0e1e.®\u0e1e\u0e24.®\u0e28.®\u0e2a.®
@@ -30,8 +77,11 @@ territories.TG=\u0e42\u0e15\u0e42\u0e01
territories.TF=\u0e2d\u0e32\u0e13\u0e32\u0e40\u0e02\u0e15\u0e17\u0e32\u0e07\u0e43\u0e15\u0e49\u0e02\u0e2d\u0e07\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a
territories.GY=\u0e01\u0e32\u0e22\u0e32\u0e19\u0e32
territories.TD=\u0e0a\u0e32\u0e14
+territories.TC=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e40\u0e15\u0e34\u0e01\u0e2a\u0e4c\u0e41\u0e25\u0e30\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e40\u0e04\u0e04\u0e2d\u0e2a
territories.GW=\u0e01\u0e34\u0e19\u0e35-\u0e1a\u0e34\u0e2a\u0e40\u0e0b\u0e32
+territories.GU=\u0e01\u0e27\u0e21
territories.GT=\u0e01\u0e31\u0e27\u0e40\u0e15\u0e21\u0e32\u0e25\u0e32
+territories.GS=\u0e40\u0e01\u0e32\u0e30\u0e40\u0e0b\u0e32\u0e17\u0e4c\u0e08\u0e2d\u0e23\u0e4c\u0e40\u0e08\u0e35\u0e22\u0e41\u0e25\u0e30\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e40\u0e0b\u0e32\u0e17\u0e4c\u0e41\u0e0b\u0e19\u0e14\u0e4c\u0e27\u0e34\u0e0a
territories.GR=\u0e01\u0e23\u0e35\u0e0b
territories.GQ=\u0e2d\u0e34\u0e40\u0e04\u0e27\u0e17\u0e2d\u0e40\u0e23\u0e35\u0e22\u0e25\u0e01\u0e34\u0e19\u0e35
territories.GP=\u0e01\u0e31\u0e27\u0e40\u0e14\u0e2d\u0e25\u0e39\u0e1b
@@ -41,6 +91,10 @@ territories.GN=\u0e01\u0e34\u0e19\u0e35
territories.GM=\u0e41\u0e01\u0e21\u0e40\u0e1a\u0e35\u0e22
territories.GL=\u0e01\u0e23\u0e35\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.SV=\u0e40\u0e2d\u0e25\u0e0b\u0e31\u0e25\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c
+territories.062=\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e01\u0e25\u0e32\u0e07\u0e15\u0e2d\u0e19\u0e43\u0e15\u0e49
+territories.ST=\u0e40\u0e0b\u0e32\u0e42\u0e15\u0e40\u0e21\u0e41\u0e25\u0e30\u0e1b\u0e23\u0e34\u0e19\u0e0b\u0e34\u0e40\u0e1b
+territories.061=\u0e42\u0e1b\u0e25\u0e34\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
+territories.GI=\u0e22\u0e34\u0e1a\u0e23\u0e2d\u0e25\u0e15\u0e32\u0e23\u0e4c
territories.GH=\u0e01\u0e32\u0e19\u0e48\u0e32
territories.SR=\u0e2a\u0e38\u0e23\u0e34\u0e19\u0e31\u0e21
territories.GF=\u0e40\u0e1f\u0e23\u0e19\u0e0a\u0e4c\u0e01\u0e35\u0e2d\u0e32\u0e19\u0e32
@@ -49,40 +103,59 @@ territories.SO=\u0e42\u0e0b\u0e21\u0e32\u0e40\u0e25\u0e35\u0e22
territories.GD=\u0e40\u0e01\u0e23\u0e19\u0e32\u0e14\u0e32
territories.SN=\u0e40\u0e0b\u0e40\u0e19\u0e01\u0e31\u0e25
territories.SM=\u0e0b\u0e32\u0e19\u0e21\u0e32\u0e23\u0e35\u0e42\u0e19
+territories.GB=\u0e2a\u0e2b\u0e23\u0e32\u0e0a\u0e2d\u0e32\u0e13\u0e32\u0e08\u0e31\u0e01\u0e23
territories.SL=\u0e40\u0e0b\u0e35\u0e22\u0e23\u0e4c\u0e23\u0e32\u0e25\u0e35\u0e42\u0e2d\u0e19
territories.GA=\u0e01\u0e32\u0e1a\u0e2d\u0e07
territories.SK=\u0e2a\u0e42\u0e25\u0e27\u0e32\u0e40\u0e01\u0e35\u0e22
+territories.SJ=\u0e2a\u0e1f\u0e32\u0e25\u0e1a\u0e32\u0e23\u0e4c\u0e41\u0e25\u0e30\u0e41\u0e08\u0e19\u0e21\u0e32\u0e40\u0e22\u0e19
territories.SI=\u0e2a\u0e42\u0e25\u0e27\u0e35\u0e40\u0e19\u0e35\u0e22
+territories.SH=\u0e40\u0e0b\u0e19\u0e15\u0e4c\u0e40\u0e2e\u0e40\u0e25\u0e19\u0e32
territories.SG=\u0e2a\u0e34\u0e07\u0e04\u0e42\u0e1b\u0e23\u0e4c
territories.SE=\u0e2a\u0e27\u0e35\u0e40\u0e14\u0e19
territories.SD=\u0e0b\u0e39\u0e14\u0e32\u0e19
territories.SC=\u0e40\u0e0b\u0e40\u0e0a\u0e25\u0e2a\u0e4c
territories.SB=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e42\u0e0b\u0e42\u0e25\u0e21\u0e2d\u0e19
+territories.SA=\u0e0b\u0e32\u0e2d\u0e38\u0e14\u0e35\u0e2d\u0e32\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22
territories.FR=\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a
+territories.057=\u0e44\u0e21\u0e42\u0e04\u0e23\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
+territories.FO=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e1f\u0e32\u0e42\u0e23
territories.FM=\u0e44\u0e21\u0e42\u0e04\u0e23\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
territories.RW=\u0e23\u0e27\u0e31\u0e19\u0e14\u0e32
+territories.054=\u0e40\u0e21\u0e25\u0e32\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
+territories.053=\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22\u0e41\u0e25\u0e30\u0e19\u0e34\u0e27\u0e0b\u0e35\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.FK=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e1f\u0e2d\u0e25\u0e4c\u0e04\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.RU=\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22
territories.FJ=\u0e1f\u0e34\u0e08\u0e34
territories.FI=\u0e1f\u0e34\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.RO=\u0e42\u0e23\u0e21\u0e32\u0e40\u0e19\u0e35\u0e22
+territories.RE=\u0e40\u0e23\u0e2d\u0e39\u0e40\u0e19\u0e35\u0e22\u0e07
territories.ET=\u0e40\u0e2d\u0e18\u0e34\u0e42\u0e2d\u0e40\u0e1b\u0e35\u0e22
territories.ES=\u0e2a\u0e40\u0e1b\u0e19
territories.ER=\u0e40\u0e2d\u0e23\u0e34\u0e40\u0e17\u0e23\u0e35\u0e22
+territories.833=\u0e40\u0e01\u0e32\u0e30\u0e41\u0e21\u0e19
territories.EH=\u0e0b\u0e32\u0e2e\u0e32\u0e23\u0e32\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01
territories.EG=\u0e2d\u0e35\u0e22\u0e34\u0e1b\u0e15\u0e4c
+territories.830=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e41\u0e0a\u0e19\u0e40\u0e19\u0e25
territories.EE=\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22
+territories.QO=\u0e40\u0e2d\u0e32\u0e15\u0e4c\u0e44\u0e25\u0e2d\u0e34\u0e07\u0e42\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e40\u0e19\u0e35\u0e22
territories.EC=\u0e40\u0e2d\u0e01\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c
territories.DZ=\u0e41\u0e2d\u0e25\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22
territories.QA=\u0e01\u0e32\u0e15\u0e32\u0e23\u0e4c
+territories.039=\u0e22\u0e38\u0e42\u0e23\u0e1b\u0e43\u0e15\u0e49
territories.DO=\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e31\u0e19
territories.PY=\u0e1b\u0e32\u0e23\u0e32\u0e01\u0e27\u0e31\u0e22
+territories.035=\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01\u0e40\u0e09\u0e35\u0e22\u0e07\u0e43\u0e15\u0e49
territories.DM=\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e32
+territories.PW=\u0e1b\u0e32\u0e40\u0e25\u0e32
territories.DK=\u0e40\u0e14\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e01
territories.DJ=\u0e08\u0e34\u0e1a\u0e39\u0e15\u0e35
territories.PT=\u0e42\u0e1b\u0e23\u0e15\u0e38\u0e40\u0e01\u0e2a
+territories.PS=\u0e1b\u0e32\u0e40\u0e25\u0e0b\u0e15\u0e34\u0e40\u0e19\u0e35\u0e22\u0e19\u0e40\u0e17\u0e23\u0e4c\u0e23\u0e34\u0e17\u0e2d\u0e23\u0e35
+territories.030=\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01
territories.PR=\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e42\u0e15\u0e23\u0e34\u0e42\u0e01
territories.DE=\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e19\u0e35
+territories.PN=\u0e1e\u0e34\u0e15\u0e41\u0e04\u0e23\u0e4c\u0e19
+territories.PM=\u0e41\u0e0b\u0e07\u0e1b\u0e35\u0e41\u0e22\u0e23\u0e4c\u0e41\u0e25\u0e30\u0e21\u0e35\u0e40\u0e01\u0e2d\u0e25\u0e07
territories.PL=\u0e42\u0e1b\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.PK=\u0e1b\u0e32\u0e01\u0e35\u0e2a\u0e16\u0e32\u0e19
territories.PH=\u0e1f\u0e34\u0e25\u0e34\u0e1b\u0e1b\u0e34\u0e19\u0e2a\u0e4c
@@ -91,34 +164,50 @@ territories.PF=\u0e40\u0e1f\u0e23\u0e19\u0e0a\u0e4c\u0e42\u0e1e\u0e25\u0e35\u0e1
territories.CZ=\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e40\u0e0a\u0e47\u0e01
territories.PE=\u0e40\u0e1b\u0e23\u0e39
territories.CY=\u0e44\u0e0b\u0e1b\u0e23\u0e31\u0e2a
+territories.CX=\u0e40\u0e01\u0e32\u0e30\u0e04\u0e23\u0e34\u0e2a\u0e21\u0e32\u0e2a\u0e15\u0e4c
territories.CV=\u0e40\u0e04\u0e1b\u0e40\u0e27\u0e34\u0e23\u0e4c\u0e14
territories.PA=\u0e1b\u0e32\u0e19\u0e32\u0e21\u0e32
territories.CU=\u0e04\u0e34\u0e27\u0e1a\u0e32
+territories.CS=\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e40\u0e1a\u0e35\u0e22
territories.CR=\u0e04\u0e2d\u0e2a\u0e15\u0e32\u0e23\u0e34\u0e01\u0e32
+territories.029=\u0e41\u0e04\u0e23\u0e34\u0e40\u0e1a\u0e35\u0e22\u0e19
territories.CO=\u0e42\u0e04\u0e25\u0e31\u0e21\u0e40\u0e1a\u0e35\u0e22
territories.CN=\u0e08\u0e35\u0e19
territories.CM=\u0e41\u0e04\u0e40\u0e21\u0e2d\u0e23\u0e39\u0e19
territories.CL=\u0e0a\u0e34\u0e25\u0e35
+territories.CK=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e04\u0e38\u0e01
territories.CI=\u0e42\u0e01\u0e15\u0e14\u0e34\u0e27\u0e31\u0e27\u0e23\u0e4c
+territories.021=\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32\u0e40\u0e2b\u0e19\u0e37\u0e2d
territories.CH=\u0e2a\u0e27\u0e34\u0e15\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.CG=\u0e04\u0e2d\u0e07\u0e42\u0e01
territories.CF=\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e01\u0e25\u0e32\u0e07
+territories.CD=\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e1b\u0e23\u0e30\u0e0a\u0e32\u0e18\u0e34\u0e1b\u0e44\u0e15\u0e22\u0e04\u0e2d\u0e07\u0e42\u0e01
+territories.CC=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e42\u0e04\u0e42\u0e04\u0e2a (\u0e04\u0e35\u0e25\u0e34\u0e07)
territories.OM=\u0e42\u0e2d\u0e21\u0e32\u0e19
territories.CA=\u0e41\u0e04\u0e19\u0e32\u0e14\u0e32
territories.BZ=\u0e40\u0e1a\u0e25\u0e35\u0e0a
territories.BY=\u0e40\u0e1a\u0e25\u0e32\u0e23\u0e38\u0e2a
territories.BW=\u0e1a\u0e2d\u0e15\u0e2a\u0e27\u0e32\u0e19\u0e32
+territories.BV=\u0e40\u0e01\u0e32\u0e30\u0e1a\u0e39\u0e40\u0e27\u0e15\u0e4c
territories.BT=\u0e20\u0e39\u0e10\u0e32\u0e19
territories.BS=\u0e1a\u0e32\u0e2e\u0e32\u0e21\u0e32\u0e2a
territories.BR=\u0e1a\u0e23\u0e32\u0e0b\u0e34\u0e25
+territories.019=\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32
+territories.018=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e43\u0e15\u0e49
territories.NZ=\u0e19\u0e34\u0e27\u0e0b\u0e35\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.BO=\u0e42\u0e1a\u0e25\u0e34\u0e40\u0e27\u0e35\u0e22
+territories.017=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e01\u0e25\u0e32\u0e07
territories.BN=\u0e1a\u0e23\u0e39\u0e44\u0e19
territories.BM=\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e27\u0e14\u0e49\u0e32
+territories.015=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e40\u0e2b\u0e19\u0e37\u0e2d
+territories.014=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01
+territories.013=\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32\u0e01\u0e25\u0e32\u0e07
territories.NU=\u0e19\u0e35\u0e22\u0e39
territories.BJ=\u0e40\u0e1a\u0e19\u0e34\u0e19
territories.BI=\u0e1a\u0e38\u0e23\u0e38\u0e19\u0e14\u0e35
+territories.011=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01
territories.BH=\u0e1a\u0e32\u0e2b\u0e4c\u0e40\u0e23\u0e19
+territories.NR=\u0e19\u0e32\u0e2d\u0e39\u0e23\u0e39
territories.BG=\u0e1a\u0e31\u0e25\u0e41\u0e01\u0e40\u0e23\u0e35\u0e22
territories.BF=\u0e1a\u0e39\u0e23\u0e4c\u0e01\u0e34\u0e19\u0e32\u0e1f\u0e32\u0e42\u0e0b
territories.NP=\u0e40\u0e19\u0e1b\u0e32\u0e25
@@ -131,33 +220,42 @@ territories.NL=\u0e40\u0e19\u0e40\u0e18\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e1
territories.BA=\u0e1a\u0e2d\u0e2a\u0e40\u0e19\u0e35\u0e22\u0e41\u0e25\u0e30\u0e40\u0e2e\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e42\u0e01\u0e27\u0e35\u0e19\u0e32
territories.NI=\u0e19\u0e34\u0e04\u0e32\u0e23\u0e32\u0e01\u0e31\u0e27
territories.NG=\u0e44\u0e19\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22
+territories.NF=\u0e40\u0e01\u0e32\u0e30\u0e19\u0e2d\u0e23\u0e4c\u0e1f\u0e2d\u0e25\u0e4c\u0e01
territories.AZ=\u0e2d\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e1a\u0e08\u0e32\u0e19
territories.NE=\u0e44\u0e19\u0e40\u0e08\u0e2d\u0e23\u0e4c
+territories.AX=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e2d\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.NC=\u0e19\u0e34\u0e27\u0e41\u0e04\u0e25\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22
territories.AW=\u0e2d\u0e32\u0e23\u0e39\u0e1a\u0e32
territories.ZM=\u0e41\u0e0b\u0e21\u0e40\u0e1a\u0e35\u0e22
-territories.AU=\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22
territories.NA=\u0e19\u0e32\u0e21\u0e34\u0e40\u0e1a\u0e35\u0e22
+territories.AU=\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22
territories.AT=\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e35\u0e22
+territories.AS=\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e31\u0e19\u0e0b\u0e32\u0e21\u0e31\u0e27
territories.AR=\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e08\u0e19\u0e15\u0e34\u0e19\u0e32
+territories.009=\u0e42\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e40\u0e19\u0e35\u0e22
territories.AQ=\u0e41\u0e2d\u0e19\u0e15\u0e32\u0e23\u0e4c\u0e01\u0e15\u0e34\u0e01\u0e32
territories.MZ=\u0e42\u0e21\u0e41\u0e0b\u0e21\u0e1a\u0e34\u0e04
territories.AO=\u0e41\u0e2d\u0e07\u0e42\u0e01\u0e25\u0e32
territories.MY=\u0e21\u0e32\u0e40\u0e25\u0e40\u0e0b\u0e35\u0e22
territories.AN=\u0e40\u0e19\u0e40\u0e2e\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e41\u0e2d\u0e19\u0e17\u0e34\u0e25\u0e25\u0e34\u0e2a
territories.MX=\u0e40\u0e21\u0e47\u0e01\u0e0b\u0e34\u0e42\u0e01
+territories.005=\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32\u0e43\u0e15\u0e49
territories.AM=\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e21\u0e40\u0e19\u0e35\u0e22
territories.MW=\u0e21\u0e32\u0e25\u0e32\u0e27\u0e35
territories.AL=\u0e41\u0e2d\u0e25\u0e40\u0e1a\u0e40\u0e19\u0e35\u0e22
+territories.MV=\u0e21\u0e31\u0e25\u0e14\u0e35\u0e1f\u0e2a\u0e4c
territories.ZA=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e43\u0e15\u0e49
territories.MU=\u0e21\u0e2d\u0e23\u0e34\u0e40\u0e0a\u0e35\u0e22\u0e2a
+territories.002=\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32
territories.MT=\u0e21\u0e2d\u0e25\u0e15\u0e32
+territories.001=\u0e42\u0e25\u0e01
territories.AI=\u0e2d\u0e31\u0e19\u0e01\u0e34\u0e25\u0e48\u0e32
territories.MS=\u0e21\u0e2d\u0e19\u0e15\u0e4c\u0e40\u0e0b\u0e23\u0e4c\u0e41\u0e23\u0e47\u0e15
territories.MR=\u0e21\u0e2d\u0e23\u0e34\u0e40\u0e15\u0e40\u0e19\u0e35\u0e22
territories.AG=\u0e41\u0e2d\u0e19\u0e15\u0e34\u0e01\u0e32\u0e41\u0e25\u0e30\u0e1a\u0e32\u0e23\u0e4c\u0e1a\u0e39\u0e14\u0e32
territories.MQ=\u0e21\u0e32\u0e23\u0e4c\u0e15\u0e34\u0e19\u0e35\u0e01
territories.AF=\u0e2d\u0e31\u0e1f\u0e01\u0e32\u0e19\u0e34\u0e2a\u0e16\u0e32\u0e19
+territories.MP=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e19\u0e2d\u0e23\u0e4c\u0e17\u0e40\u0e17\u0e34\u0e23\u0e4c\u0e19\u0e21\u0e32\u0e40\u0e23\u0e35\u0e22\u0e19\u0e32
territories.AE=\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e32\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e21\u0e34\u0e40\u0e23\u0e15\u0e2a\u0e4c
territories.MO=\u0e21\u0e32\u0e40\u0e01\u0e4a\u0e32 \u0e40\u0e02\u0e15\u0e1b\u0e01\u0e04\u0e23\u0e2d\u0e07\u0e1e\u0e34\u0e40\u0e28\u0e29\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e08\u0e35\u0e19
territories.AD=\u0e2d\u0e31\u0e19\u0e14\u0e2d\u0e23\u0e4c\u0e23\u0e32
@@ -165,8 +263,8 @@ territories.MN=\u0e21\u0e2d\u0e07\u0e42\u0e01\u0e40\u0e25\u0e35\u0e22
territories.MM=\u0e1e\u0e21\u0e48\u0e32
territories.ML=\u0e21\u0e32\u0e25\u0e35
territories.MK=\u0e21\u0e32\u0e0b\u0e34\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22
-territories.YU=\u0e22\u0e39\u0e42\u0e01\u0e2a\u0e25\u0e32\u0e40\u0e27\u0e35\u0e22
territories.YT=\u0e21\u0e32\u0e22\u0e2d\u0e15
+territories.MH=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e21\u0e32\u0e23\u0e4c\u0e41\u0e0a\u0e25
territories.MG=\u0e21\u0e32\u0e14\u0e32\u0e01\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e4c
territories.MD=\u0e21\u0e2d\u0e25\u0e42\u0e14\u0e27\u0e32
territories.MC=\u0e42\u0e21\u0e19\u0e32\u0e42\u0e01
@@ -174,25 +272,34 @@ territories.MA=\u0e42\u0e21\u0e23\u0e47\u0e2d\u0e01\u0e42\u0e01
territories.YE=\u0e40\u0e22\u0e40\u0e21\u0e19
territories.LY=\u0e25\u0e34\u0e40\u0e1a\u0e35\u0e22
territories.LV=\u0e25\u0e31\u0e15\u0e40\u0e27\u0e35\u0e22
+territories.155=\u0e22\u0e38\u0e42\u0e23\u0e1b\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01
territories.LU=\u0e25\u0e31\u0e01\u0e40\u0e0b\u0e21\u0e40\u0e1a\u0e34\u0e23\u0e4c\u0e01
+territories.154=\u0e22\u0e38\u0e42\u0e23\u0e1b\u0e40\u0e2b\u0e19\u0e37\u0e2d
territories.LT=\u0e25\u0e34\u0e17\u0e31\u0e27\u0e40\u0e19\u0e35\u0e22
territories.LS=\u0e40\u0e25\u0e42\u0e0b\u0e42\u0e17
territories.LR=\u0e44\u0e25\u0e1a\u0e35\u0e40\u0e23\u0e35\u0e22
+territories.151=\u0e22\u0e38\u0e42\u0e23\u0e1b\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01
+territories.150=\u0e22\u0e38\u0e42\u0e23\u0e1b
territories.LK=\u0e28\u0e23\u0e35\u0e25\u0e31\u0e07\u0e01\u0e32
territories.LI=\u0e25\u0e34\u0e01\u0e40\u0e15\u0e19\u0e2a\u0e44\u0e15\u0e19\u0e4c
+territories.LC=\u0e40\u0e0b\u0e19\u0e15\u0e4c\u0e25\u0e39\u0e40\u0e0b\u0e35\u0e22
territories.LB=\u0e40\u0e25\u0e1a\u0e32\u0e19\u0e2d\u0e19
territories.LA=\u0e25\u0e32\u0e27
territories.KZ=\u0e04\u0e32\u0e0b\u0e31\u0e04\u0e2a\u0e16\u0e32\u0e19
territories.KY=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e40\u0e04\u0e22\u0e4c\u0e41\u0e21\u0e19
territories.KW=\u0e04\u0e39\u0e40\u0e27\u0e15
+territories.145=\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01
+territories.142=\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22
territories.KR=\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e43\u0e15\u0e49
territories.KP=\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e40\u0e2b\u0e19\u0e37\u0e2d
+territories.KN=\u0e40\u0e0b\u0e19\u0e15\u0e4c\u0e04\u0e34\u0e15\u0e2a\u0e4c\u0e41\u0e25\u0e30\u0e40\u0e19\u0e27\u0e34\u0e2a
territories.KM=\u0e04\u0e2d\u0e42\u0e21\u0e42\u0e23\u0e2a
territories.KI=\u0e04\u0e34\u0e23\u0e34\u0e1a\u0e32\u0e2a
territories.WS=\u0e0b\u0e32\u0e21\u0e31\u0e27
territories.KH=\u0e01\u0e31\u0e21\u0e1e\u0e39\u0e0a\u0e32
territories.KG=\u0e04\u0e35\u0e23\u0e4c\u0e01\u0e34\u0e0b\u0e2a\u0e16\u0e32\u0e19
territories.KE=\u0e40\u0e04\u0e19\u0e22\u0e32
+territories.WF=\u0e27\u0e32\u0e25\u0e25\u0e34\u0e2a\u0e41\u0e25\u0e30\u0e1f\u0e38\u0e15\u0e39\u0e19\u0e32
territories.JP=\u0e0d\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e19
territories.JO=\u0e08\u0e2d\u0e23\u0e4c\u0e41\u0e14\u0e19
territories.JM=\u0e08\u0e32\u0e40\u0e21\u0e01\u0e32
@@ -202,17 +309,20 @@ territories.VI=\u0e22\u0e39\u0e40\u0e2d\u0e2a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0
territories.VG=\u0e1a\u0e23\u0e34\u0e17\u0e34\u0e0a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e08\u0e34\u0e19\u0e44\u0e2d\u0e2a\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.VE=\u0e40\u0e27\u0e40\u0e19\u0e0b\u0e38\u0e40\u0e2d\u0e25\u0e32
territories.VC=\u0e40\u0e0b\u0e19\u0e15\u0e4c\u0e27\u0e34\u0e19\u0e40\u0e0b\u0e19\u0e15\u0e4c\u0e41\u0e25\u0e30\u0e40\u0e01\u0e23\u0e19\u0e32\u0e14\u0e35\u0e19\u0e2a\u0e4c
+territories.VA=\u0e27\u0e32\u0e15\u0e34\u0e01\u0e31\u0e19
territories.IT=\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35
territories.IS=\u0e44\u0e2d\u0e0b\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.IR=\u0e2d\u0e34\u0e2b\u0e23\u0e48\u0e32\u0e19
territories.IQ=\u0e2d\u0e34\u0e23\u0e31\u0e01
territories.UZ=\u0e2d\u0e38\u0e0b\u0e40\u0e1a\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19
+territories.IO=\u0e1a\u0e23\u0e34\u0e15\u0e34\u0e2a\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22\u0e42\u0e2d\u0e40\u0e0a\u0e35\u0e22\u0e19\u0e40\u0e17\u0e23\u0e4c\u0e23\u0e34\u0e17\u0e2d\u0e23\u0e35
territories.UY=\u0e2d\u0e38\u0e23\u0e38\u0e01\u0e27\u0e31\u0e22
territories.IN=\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22
territories.IL=\u0e2d\u0e34\u0e2a\u0e23\u0e32\u0e40\u0e2d\u0e25
territories.US=\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32
territories.IE=\u0e44\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c
territories.ID=\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22
+territories.UM=\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e44\u0e21\u0e40\u0e19\u0e2d\u0e23\u0e4c\u0e40\u0e2d\u0e32\u0e15\u0e4c\u0e44\u0e25\u0e2d\u0e34\u0e07
territories.UG=\u0e2d\u0e39\u0e01\u0e32\u0e19\u0e14\u0e32
territories.UA=\u0e22\u0e39\u0e40\u0e04\u0e23\u0e19
territories.HU=\u0e2e\u0e31\u0e07\u0e01\u0e32\u0e23\u0e35
@@ -220,7 +330,9 @@ territories.HT=\u0e40\u0e2e\u0e15\u0e34
territories.HR=\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22
territories.TZ=\u0e17\u0e32\u0e19\u0e0b\u0e32\u0e40\u0e19\u0e35\u0e22
territories.HN=\u0e2e\u0e2d\u0e19\u0e14\u0e39\u0e23\u0e31\u0e2a
+territories.HM=\u0e40\u0e01\u0e32\u0e30\u0e40\u0e2e\u0e34\u0e23\u0e4c\u0e14\u0e41\u0e25\u0e30\u0e2b\u0e21\u0e39\u0e48\u0e40\u0e01\u0e32\u0e30\u0e41\u0e21\u0e01\u0e14\u0e2d\u0e19\u0e31\u0e25\u0e14\u0e4c
territories.TW=\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19
+territories.TV=\u0e15\u0e39\u0e27\u0e32\u0e25\u0e39
territories.HK=\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07 \u0e40\u0e02\u0e15\u0e1b\u0e01\u0e04\u0e23\u0e2d\u0e07\u0e1e\u0e34\u0e40\u0e28\u0e29\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e08\u0e35\u0e19
territories.TT=\u0e15\u0e23\u0e34\u0e19\u0e34\u0e41\u0e14\u0e14\u0e41\u0e25\u0e30\u0e42\u0e15\u0e40\u0e1a\u0e42\u0e01
territories.TR=\u0e15\u0e38\u0e23\u0e01\u0e35
@@ -230,8 +342,8 @@ territories.TM=\u0e40\u0e15\u0e34\u0e23\u0e4c\u0e01\u0e40\u0e21\u0e19\u0e34\u0e2
languages.es=\u0e2a\u0e40\u0e1b\u0e19
languages.ku=\u0e40\u0e04\u0e34\u0e14
languages.eo=\u0e40\u0e2d\u0e2a\u0e40\u0e1b\u0e2d\u0e23\u0e31\u0e19\u0e42\u0e15
-languages.ks=\u0e04\u0e31\u0e0a\u0e21\u0e35\u0e23\u0e35
languages.en=\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29
+languages.ks=\u0e04\u0e31\u0e0a\u0e21\u0e35\u0e23\u0e35
languages.el=\u0e01\u0e23\u0e35\u0e01
languages.qu=\u0e04\u0e34\u0e27\u0e0a\u0e31\u0e27
languages.ko=\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35
@@ -255,8 +367,8 @@ languages.cy=\u0e40\u0e27\u0e25\u0e2a\u0e4c
languages.pa=\u0e1b\u0e31\u0e0d\u0e08\u0e32\u0e1b
languages.cs=\u0e40\u0e0a\u0e47\u0e04
languages.iu=\u0e44\u0e2d\u0e19\u0e38\u0e01\u0e15\u0e34\u0e15\u0e31\u0e17
-languages.it=\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35
languages.co=\u0e04\u0e2d\u0e23\u0e4c\u0e0b\u0e34\u0e01\u0e32
+languages.it=\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35
languages.is=\u0e44\u0e2d\u0e0b\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e14\u0e34\u0e04
languages.uz=\u0e2d\u0e38\u0e2a\u0e40\u0e1a\u0e04
languages.or=\u0e42\u0e2d\u0e23\u0e34\u0e22\u0e32
@@ -332,8 +444,8 @@ languages.mk=\u0e41\u0e21\u0e0b\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22
languages.aa=\u0e2d\u0e32\u0e1f\u0e32
languages.so=\u0e42\u0e0b\u0e21\u0e32\u0e25\u0e35
languages.sn=\u0e42\u0e0b\u0e19\u0e32
-languages.mi=\u0e40\u0e21\u0e32\u0e23\u0e35
languages.gd=\u0e2a\u0e01\u0e47\u0e2d\u0e15\u0e2a\u0e4c\u0e40\u0e01\u0e25\u0e34\u0e04
+languages.mi=\u0e40\u0e21\u0e32\u0e23\u0e35
languages.sm=\u0e0b\u0e32\u0e21\u0e31\u0e27
languages.sl=\u0e2a\u0e42\u0e25\u0e40\u0e27\u0e40\u0e19\u0e35\u0e22
languages.mg=\u0e21\u0e32\u0e25\u0e32\u0e01\u0e32\u0e0b\u0e35
@@ -349,14 +461,14 @@ languages.fy=\u0e1f\u0e23\u0e35\u0e2a\u0e41\u0e25\u0e19\u0e14\u0e4c
languages.sa=\u0e2a\u0e31\u0e19\u0e2a\u0e01\u0e24\u0e15
languages.fr=\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a
languages.lv=\u0e41\u0e25\u0e15\u0e40\u0e27\u0e35\u0e22 (\u0e40\u0e25\u0e17\u0e17\u0e34\u0e2a\u0e0a\u0e4c)
-languages.lt=\u0e25\u0e34\u0e18\u0e31\u0e27\u0e40\u0e19\u0e35\u0e22
languages.fo=\u0e1f\u0e32\u0e42\u0e23\u0e2a
+languages.lt=\u0e25\u0e34\u0e18\u0e31\u0e27\u0e40\u0e19\u0e35\u0e22
languages.rw=\u0e04\u0e34\u0e19\u0e22\u0e32\u0e27\u0e31\u0e19\u0e14\u0e32
languages.ru=\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22
-languages.lo=\u0e25\u0e32\u0e27
languages.fj=\u0e1f\u0e34\u0e08\u0e34
-languages.ln=\u0e25\u0e34\u0e07\u0e01\u0e32\u0e25\u0e32
+languages.lo=\u0e25\u0e32\u0e27
languages.fi=\u0e1f\u0e34\u0e19
+languages.ln=\u0e25\u0e34\u0e07\u0e01\u0e32\u0e25\u0e32
languages.ro=\u0e42\u0e23\u0e21\u0e31\u0e19
languages.rn=\u0e04\u0e34\u0e23\u0e31\u0e19\u0e14\u0e35
languages.rm=\u0e40\u0e23\u0e42\u0e15-\u0e42\u0e23\u0e41\u0e21\u0e19\u0e0b\u0e4c
@@ -364,5 +476,5 @@ languages.fa=\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e35\u0e22
languages.la=\u0e25\u0e30\u0e15\u0e34\u0e19
languages.xh=\u0e42\u0e0b\u0e2a\u0e32
languages.eu=\u0e41\u0e1a\u0e2a\u0e01\u0e4c
-languages.ky=\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e0b
languages.et=\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22
+languages.ky=\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e0b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti.properties
index d5f6510..22dbc40 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti.properties
@@ -5,6 +5,19 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
shortMonths=\u1303\u1295\u12e9®\u134c\u1265\u1229®\u121b\u122d\u127d®\u12a4\u1355\u1228®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235®\u1234\u1355\u1274®\u12a6\u12ad\u1270®\u1296\u126c\u121d®\u12f2\u1234\u121d®®
months=\u1303\u1295\u12e9\u12c8\u122a®\u134c\u1265\u1229\u12c8\u122a®\u121b\u122d\u127d®\u12a4\u1355\u1228\u120d®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235\u1275®\u1234\u1355\u1274\u121d\u1260\u122d®\u12a6\u12ad\u1270\u12cd\u1260\u122d®\u1296\u126c\u121d\u1260\u122d®\u12f2\u1234\u121d\u1260\u122d®®
shortWeekdays=®\u1230\u1295\u1260®\u1230\u1291\u12ed®\u1220\u1209\u1235®\u1228\u1261\u12d5®\u1283\u1219\u1235®\u12d3\u122d\u1262®\u1240\u12f3\u121d®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ER.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ER.properties
index 4a79aef..7b9882c 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ER.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ER.properties
@@ -6,7 +6,6 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ERN=ERN
currenciesSymbol.ERN=$
currenciesSymbol.USD=US$
shortMonths=\u1325\u122a®\u1208\u12ab\u1272®\u1218\u130b\u1262®\u121a\u12eb\u12dd®\u130d\u1295\u1266®\u1230\u1290®\u1213\u121d\u1208®\u1290\u1213\u1230®\u1218\u1235\u12a8®\u1325\u1245\u121d®\u1215\u12f3\u122d®\u1273\u1215\u1233®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ET.properties
index aa77a72..04c7d0b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ET.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ti_ET.properties
@@ -6,8 +6,6 @@
# This file was automatically generated by gnu.localegen from CLDR.
currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
-currenciesDisplayName.ETB=ETB
-currenciesSymbol.ETB=$
currenciesSymbol.USD=US$
shortDateFormat=dd/MM/yy
mediumDateFormat=dd-MMM-yy
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig.properties
new file mode 100644
index 0000000..12e05b3
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig.properties
@@ -0,0 +1,300 @@
+# LocaleInformation_tig.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.ERN=$
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
+shortMonths=\u1303\u1295\u12e9®\u134c\u1265\u1229®\u121b\u122d\u127d®\u12a4\u1355\u1228®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235®\u1234\u1355\u1274®\u12a6\u12ad\u1270®\u1296\u126c\u121d®\u12f2\u1234\u121d®®
+months=\u1303\u1295\u12e9\u12c8\u122a®\u134c\u1265\u1229\u12c8\u122a®\u121b\u122d\u127d®\u12a4\u1355\u1228\u120d®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235\u1275®\u1234\u1355\u1274\u121d\u1260\u122d®\u12a6\u12ad\u1270\u12cd\u1260\u122d®\u1296\u126c\u121d\u1260\u122d®\u12f2\u1234\u121d\u1260\u122d®®
+shortWeekdays=®\u1230/\u12d3®\u1230\u1296®\u1273\u120b\u1238®\u12a3\u1228\u122d®\u12a8\u121a\u123d®\u1305\u121d\u12d3®\u1230/\u1295®
+weekdays=®\u1230\u1295\u1260\u1275 \u12d3\u1263\u12ed®\u1230\u1296®\u1273\u120b\u1238\u1296®\u12a3\u1228\u122d\u1263\u12d3®\u12a8\u121a\u123d®\u1305\u121d\u12d3\u1275®\u1230\u1295\u1260\u1275 \u1295\u12a2\u123d®
+firstDayOfWeek=sat
+eras=\u12d3/\u12d3®\u12d3/\u121d®
+ampms=\u1240\u12f0\u121d \u1230\u122d\u121d\u12d5\u120d®\u1213\u1246 \u1235\u122d\u121d\u12d5\u120d®
+territories.AU=\u12a0\u12cd\u1235\u1275\u122c\u120a\u12eb
+territories.TD=\u127b\u12f5
+territories.AT=\u12a6\u1235\u1275\u122a\u12eb
+territories.GY=\u1309\u12eb\u1293
+territories.AR=\u12a0\u122d\u1300\u1295\u1272\u1293
+territories.GW=\u1262\u1233\u12ce
+territories.MY=\u121b\u120c\u12e2\u12eb
+territories.MX=\u121c\u12ad\u1232\u12ae
+territories.AN=\u1294\u12d8\u122d\u120b\u1295\u12f5\u1235 \u12a0\u1295\u1272\u120d\u1235
+territories.AM=\u12a0\u122d\u121c\u1292\u12eb
+territories.GR=\u130d\u122a\u12ad
+territories.ZA=\u12f0\u1261\u1265 \u12a0\u134d\u122a\u12ab
+territories.AL=\u12a0\u120d\u1263\u1292\u12eb
+territories.GQ=\u12a2\u12b3\u1276\u122a\u12eb\u120d \u130a\u1292
+territories.MU=\u121b\u1229\u1238\u1235
+territories.SY=\u1232\u122a\u12eb
+territories.MT=\u121b\u120d\u1273
+territories.GN=\u130a\u1292
+territories.MR=\u121e\u122a\u1274\u1292\u12eb
+territories.GM=\u130b\u121d\u1262\u12eb
+territories.MO=\u121b\u12ab\u12ce
+territories.AE=\u12e8\u1270\u1263\u1260\u1229\u1275 \u12a0\u1228\u1265 \u12a4\u121d\u122c\u1275\u1235
+territories.MN=\u121e\u1295\u130e\u120a\u12eb
+territories.AD=\u12a0\u1295\u12f6\u122b
+territories.MK=\u121b\u12a8\u12f6\u1292\u12eb
+territories.GF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1309\u12ca\u12a0\u1293
+territories.SO=\u1231\u121b\u120c
+territories.GE=\u1306\u122d\u1302\u12eb
+territories.SN=\u1234\u1294\u130b\u120d
+territories.GB=\u12a5\u1295\u130d\u120a\u12dd
+territories.SK=\u1235\u120e\u126b\u12aa\u12eb
+territories.SI=\u1235\u120e\u126c\u1292\u12eb
+territories.MD=\u121e\u120d\u12f6\u126b
+territories.SG=\u1232\u1295\u130b\u1356\u122d
+territories.MA=\u121e\u122e\u12ae
+territories.SE=\u1235\u12ca\u12f5\u1295
+territories.SD=\u1231\u12f3\u1295
+territories.SA=\u1233\u12cd\u12f5\u12a0\u1228\u1262\u12eb
+territories.YE=\u12e8\u1218\u1295
+territories.LY=\u120a\u1262\u12eb
+territories.FR=\u1348\u1228\u1295\u1233\u12ed
+territories.LV=\u120b\u1275\u126a\u12eb
+territories.LT=\u120a\u1271\u12cc\u1292\u12eb
+territories.FM=\u121a\u12ad\u122e\u1294\u12e2\u12eb
+territories.RU=\u122b\u123a\u12eb
+territories.FJ=\u134a\u1302
+territories.FI=\u134a\u1295\u120b\u1295\u12f5
+territories.RO=\u122e\u121c\u1292\u12eb
+territories.LB=\u120a\u1263\u1296\u1235
+territories.ET=\u12a2\u1275\u12ee\u1335\u12eb
+territories.ES=\u1235\u1354\u1295
+territories.KW=\u12ad\u12cc\u1275
+territories.ER=\u12a4\u122d\u1275\u122b
+territories.KR=\u1230\u121c\u1295 \u12ae\u122a\u12eb
+territories.KP=\u12f0\u1261\u1265 \u12ae\u122a\u12eb
+territories.KM=\u12ae\u121e\u122e\u1235
+territories.EH=\u121d\u12d5\u122b\u1263\u12ca \u1233\u1205\u122b
+territories.EG=\u130d\u1265\u133d
+territories.EE=\u12a4\u1235\u1276\u1292\u12eb
+territories.EC=\u12a2\u12b3\u12f6\u122d
+territories.KH=\u12ab\u121d\u1266\u12f2\u12eb
+territories.DZ=\u12a0\u120d\u1304\u122a\u12eb
+territories.DO=\u12f6\u121a\u1292\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.DM=\u12f6\u121a\u1292\u12ab
+territories.DK=\u12f4\u1295\u121b\u122d\u12ad
+territories.JP=\u1303\u1353\u1295
+territories.JO=\u1306\u122d\u12f3\u1295
+territories.PR=\u1356\u122d\u1273 \u122a\u12ae
+territories.JM=\u1303\u121b\u12ed\u12ab
+territories.DE=\u1300\u122d\u1218\u1295
+territories.PL=\u1356\u120b\u1295\u12f5
+territories.PG=\u1353\u1351\u12cb \u1292\u12cd \u130a\u1292
+territories.PF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1356\u120a\u1294\u12e2\u12eb
+territories.PE=\u1354\u1229
+territories.CZ=\u127c\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.VI=\u12e8\u12a0\u121c\u122a\u12ab \u1268\u122d\u1302\u1295 \u12f0\u1234\u1276\u127d
+territories.CY=\u1233\u12ed\u1355\u1228\u1235
+territories.VG=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u12f5\u1295\u130d\u120d \u12f0\u1234\u1276\u127d
+territories.CV=\u12ac\u1355 \u126c\u122d\u12f4
+territories.VE=\u126c\u1295\u12d9\u12cc\u120b
+territories.CS=\u1230\u122d\u1262\u12eb
+territories.CO=\u12ae\u120e\u121d\u1262\u12eb
+territories.IT=\u1323\u120a\u12eb\u1295
+territories.CN=\u127b\u12ed\u1293
+territories.IS=\u12a0\u12ed\u1235\u120b\u1295\u12f5
+territories.CM=\u12ab\u121c\u1229\u1295
+territories.CL=\u127a\u120a
+territories.IQ=\u12a2\u122b\u1245
+territories.UZ=\u12e9\u12dd\u1260\u12aa\u1235\u1273\u1295
+territories.IN=\u1205\u1295\u12f5
+territories.CH=\u1235\u12ca\u12d8\u122d\u120b\u1295\u12f5
+territories.IL=\u12a5\u1235\u122b\u12a4\u120d
+territories.CF=\u12e8\u1218\u12ab\u12a8\u1208\u129b\u12cd \u12a0\u134d\u122a\u12ab \u122a\u1350\u1265\u120a\u12ad
+territories.US=\u12a0\u121c\u122a\u12ab
+territories.CD=\u12ae\u1295\u130e
+territories.IE=\u12a0\u12e8\u122d\u120b\u1295\u12f5
+territories.ID=\u12a2\u1295\u12f6\u1294\u12e2\u12eb
+territories.BZ=\u1264\u120a\u12d8
+territories.BY=\u1264\u120b\u1229\u1235
+territories.UG=\u12e9\u130b\u1295\u12f3
+territories.BT=\u1261\u1205\u1273\u1295
+territories.BR=\u1265\u122b\u12da\u120d
+territories.NZ=\u1292\u12cd \u12da\u120b\u1295\u12f5
+territories.HU=\u1200\u1295\u130b\u122a
+territories.BO=\u1266\u120a\u126a\u12eb
+territories.HT=\u1200\u12ed\u1272
+territories.BM=\u1264\u122d\u1219\u12f3
+territories.HR=\u12ad\u122e\u12a4\u123d\u12eb
+territories.TZ=\u1273\u1295\u12db\u1292\u12eb
+territories.BH=\u1263\u1205\u122c\u1295
+territories.BG=\u1261\u120d\u130c\u122a\u12eb
+territories.NP=\u1294\u1353\u120d
+territories.HK=\u1206\u1295\u130d \u12ae\u1295\u130d
+territories.TT=\u1275\u122a\u1292\u12f3\u12f5 \u12a5\u1293 \u1276\u1263\u130e
+territories.NO=\u1296\u122d\u12cc
+territories.BE=\u1264\u120d\u1304\u121d
+territories.TR=\u1271\u122d\u12ad
+territories.NL=\u1294\u12d8\u122d\u120b\u1295\u12f5
+territories.BB=\u1263\u122d\u1264\u12f6\u1235
+territories.BA=\u1266\u1235\u1292\u12eb \u12a5\u1293 \u1204\u122d\u12de\u130e\u126a\u1292\u12eb
+territories.TN=\u1271\u1292\u12da\u12eb
+territories.TL=\u121d\u1235\u122b\u1245 \u1272\u121e\u122d
+territories.NG=\u1293\u12ed\u1304\u122a\u12eb
+territories.TJ=\u1273\u1303\u12aa\u1235\u1273\u1295
+territories.AZ=\u12a0\u12d8\u122d\u1263\u1303\u1295
+territories.ZM=\u12db\u121d\u1262\u12eb
+territories.TH=\u1273\u12ed\u120b\u1295\u12f5
+territories.NC=\u1292\u12cd \u12ab\u120c\u12f6\u1292\u12eb
+territories.TF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u12f0\u1261\u1263\u12ca \u130d\u12db\u1276\u127d
+territories.NA=\u1293\u121a\u1262\u12eb
+languages.es=\u1235\u1353\u1292\u123d
+languages.ku=\u12a9\u122d\u12f5\u123d\u129b
+languages.eo=\u12a4\u1235\u1350\u122b\u1295\u1276
+languages.en=\u12a5\u1295\u130d\u120a\u12dd\u129b
+languages.ks=\u12ab\u123d\u121a\u122d\u129b
+languages.el=\u130d\u122a\u12ad\u129b
+languages.qu=\u12b5\u127f\u129b
+languages.ko=\u12ae\u122a\u12eb\u129b
+languages.kn=\u12ab\u1293\u12f3\u129b
+languages.km=\u12ad\u1218\u122d\u129b
+languages.kl=\u12ab\u120b\u120a\u1231\u1275\u129b
+languages.kk=\u12ab\u12db\u12ad\u129b
+languages.wo=\u12ce\u120e\u134d\u129b
+languages.ka=\u130a\u12ee\u122d\u130a\u12eb\u1295
+languages.dz=\u12f5\u12de\u1295\u130d\u12bb\u129b
+languages.jv=\u1303\u126b\u1295\u129b
+languages.pt=\u1356\u122d\u1271\u130b\u120a\u129b
+languages.ps=\u1351\u123d\u1276\u129b
+languages.de=\u1300\u122d\u1218\u1295
+languages.pl=\u1356\u120a\u123d
+languages.da=\u12f4\u1292\u123d
+languages.vo=\u126e\u120b\u1351\u12ad\u129b
+languages.ja=\u1303\u1353\u1295\u129b
+languages.vi=\u126a\u1275\u1293\u121d\u129b
+languages.cy=\u12c8\u120d\u123d
+languages.pa=\u1353\u1295\u1303\u1262\u129b
+languages.cs=\u127c\u12ad\u129b
+languages.iu=\u12a5\u1291\u12ad\u1272\u1271\u1275\u129b
+languages.co=\u12ae\u122d\u1232\u12ab\u129b
+languages.it=\u1323\u120a\u12eb\u1295\u129b
+languages.is=\u12a0\u12ed\u1235\u120b\u1295\u12f5\u129b
+languages.uz=\u12a1\u12dd\u1260\u12ad\u129b
+languages.or=\u12a6\u122a\u12eb\u129b
+languages.ik=\u12a5\u1291\u1352\u12eb\u1245\u129b
+languages.ur=\u12a1\u122d\u12f1\u129b
+languages.om=\u12a6\u122e\u121d\u129b
+languages.ca=\u12ab\u1273\u120b\u1295\u129b
+languages.ie=\u12a5\u1295\u1270\u122d\u120a\u1295\u130d\u12c8
+languages.id=\u12a5\u1295\u12f6\u1292\u1232\u129b
+languages.uk=\u12e9\u12ad\u1228\u1292\u129b
+languages.ia=\u12a2\u1295\u1274\u122d\u120a\u1295\u1313
+languages.oc=\u12a6\u12aa\u1273\u1295\u129b
+languages.ug=\u12a1\u12ca\u130d\u1201\u122d\u129b
+languages.hy=\u12a0\u122d\u1218\u1293\u12ca
+languages.br=\u1265\u122c\u1276\u1295\u129b
+languages.hu=\u1200\u1295\u130b\u122a\u129b
+languages.bo=\u1275\u1260\u1275\u1295\u129b
+languages.bn=\u1260\u1295\u130b\u120a\u129b
+languages.hr=\u12ad\u122e\u123d\u12eb\u1295\u129b
+languages.bi=\u1262\u1235\u120b\u121d\u129b
+languages.tw=\u1275\u12ca\u129b
+languages.bh=\u1262\u1203\u122a
+languages.bg=\u1261\u120d\u130b\u122a\u129b
+languages.tt=\u1273\u1273\u122d\u129b
+languages.no=\u1296\u122d\u12cc\u1302\u12eb\u1295
+languages.be=\u1264\u120b\u122b\u123b\u129b
+languages.ts=\u133e\u1295\u130b\u129b
+languages.hi=\u1210\u1295\u12f5\u129b
+languages.tr=\u1271\u122d\u12ad\u129b
+languages.nl=\u12f0\u127d
+languages.zu=\u12d9\u1209\u129b
+languages.ba=\u1263\u1235\u12aa\u122d\u129b
+languages.to=\u1276\u1295\u130b
+languages.he=\u12d5\u1265\u122b\u1235\u1325
+languages.tn=\u133d\u12cb\u1293\u12ca\u129b
+languages.tl=\u1273\u130b\u120e\u1308\u129b
+languages.tk=\u1271\u122d\u12ad\u1218\u1295\u129b
+languages.ha=\u1203\u12cd\u1233\u129b
+languages.ne=\u1294\u1353\u120a\u129b
+languages.az=\u12a0\u12dc\u122d\u1263\u12ed\u1303\u1295\u129b
+languages.ti=\u1275\u130d\u122d\u129b
+languages.ay=\u12a0\u12eb\u121b\u122d\u129b
+languages.th=\u1273\u12ed\u129b
+languages.tg=\u1273\u1302\u12aa\u129b
+languages.na=\u1293\u12a1\u1229
+languages.te=\u1270\u1209\u1309\u129b
+languages.zh=\u127b\u12ed\u1295\u129b
+languages.as=\u12a0\u1233\u121c\u12db\u12ca
+languages.ar=\u12d0\u122d\u1262\u129b
+languages.ta=\u1273\u121a\u120d\u129b
+languages.gu=\u1309\u1303\u122d\u1272\u129b
+languages.my=\u1261\u122d\u121b\u129b
+languages.am=\u12a0\u121d\u1210\u1228\u129b
+languages.za=\u12e1\u12cb\u1295\u130d\u129b
+languages.mt=\u121b\u120d\u1272\u1235\u129b
+languages.ms=\u121b\u120b\u12ed\u129b
+languages.gn=\u1313\u122b\u1292\u129b
+languages.byn=\u1265\u120a\u1295
+languages.sw=\u1235\u12cb\u1202\u120a\u129b
+languages.mr=\u121b\u122b\u12da\u129b
+languages.sv=\u1235\u12ca\u12f5\u1295\u129b
+languages.gl=\u130b\u1208\u130b\u129b
+languages.su=\u1231\u12f3\u1295\u129b
+languages.af=\u12a0\u134d\u122a\u1243\u1295\u1235\u129b
+languages.st=\u1236\u12de\u129b
+languages.mo=\u121e\u120d\u12f3\u126b\u12ca\u1293
+languages.ss=\u1235\u12cb\u1272\u129b
+languages.mn=\u121e\u1295\u130e\u120b\u12ca\u129b
+languages.gez=\u130d\u12d5\u12dd\u129b
+languages.sr=\u1230\u122d\u1262\u129b
+languages.sq=\u120d\u1264\u1292\u129b
+languages.ml=\u121b\u120b\u12eb\u120b\u121d\u129b
+languages.ab=\u12a0\u1265\u1210\u12da\u129b
+languages.mk=\u121b\u12a8\u12f6\u1292\u129b
+languages.aa=\u12a0\u134b\u122d\u129b
+languages.so=\u1231\u121b\u120d\u129b
+languages.sn=\u123e\u1293\u129b
+languages.mi=\u121b\u12ee\u122a\u129b
+languages.gd=\u12a5\u1235\u12ae\u1275\u1235 \u130c\u120d\u12ad\u129b
+languages.sm=\u1233\u121e\u12a0\u129b
+languages.sl=\u1235\u120e\u126a\u129b
+languages.mg=\u121b\u120b\u130b\u1235\u129b
+languages.tig=\u1275\u130d\u1228
+languages.sk=\u1235\u120e\u126b\u12ad\u129b
+languages.ga=\u12a0\u12ed\u122a\u123d
+languages.yo=\u12ee\u1229\u1263\u12ca\u129b
+languages.si=\u1235\u1295\u1203\u120d\u129b
+languages.sg=\u1233\u1295\u130e\u129b
+languages.yi=\u12ed\u12f2\u123b\u12ca\u129b
+languages.sd=\u1232\u1295\u12f5\u1202\u129b
+languages.fy=\u134d\u122a\u1235\u129b
+languages.sid=\u1232\u12f3\u121d\u129b
+languages.sa=\u1233\u1295\u1235\u12ad\u122a\u1275\u129b
+languages.fr=\u1348\u1228\u1295\u1233\u12ed\u129b
+languages.lv=\u120b\u1275\u126a\u12eb\u1295
+languages.fo=\u134b\u122e\u129b
+languages.lt=\u120a\u1271\u12a0\u1292\u12eb\u1295
+languages.rw=\u12aa\u1295\u12eb\u122d\u12cb\u1295\u12f5\u129b
+languages.ru=\u122b\u123d\u129b
+languages.fj=\u134a\u1302\u129b
+languages.lo=\u120b\u12cd\u1235\u129b
+languages.fi=\u134a\u1292\u123d
+languages.ln=\u120a\u1295\u130b\u120b\u129b
+languages.ro=\u122e\u121b\u1292\u12eb\u1295
+languages.rn=\u1229\u1295\u12f2\u129b
+languages.rm=\u122e\u121b\u1295\u1235
+languages.fa=\u1350\u122d\u1232\u12eb\u129b
+languages.la=\u120b\u1272\u1295\u129b
+languages.xh=\u12de\u1233\u129b
+languages.eu=\u1263\u1235\u12ad\u129b
+languages.et=\u12a4\u1235\u1276\u1292\u12a0\u1295
+languages.ky=\u12aa\u122d\u130a\u12dd\u129b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig_ER.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig_ER.properties
new file mode 100644
index 0000000..c6a9b41
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tig_ER.properties
@@ -0,0 +1,16 @@
+# LocaleInformation_tig_ER.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE\u1361 dd MMMM \u12ee\u121d yyyy G
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tr.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tr.properties
index 993620d..a13d86e 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tr.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tr.properties
@@ -8,762 +8,351 @@
decimalSeparator=,
groupingSeparator=.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\u00dcrd\u00fcn Dinar\u0131
-currenciesDisplayName.BOV=Bolivya Mvdol
-currenciesDisplayName.XAU=Alt\u0131n
-currenciesDisplayName.FOK=Faroe Adalar\u0131 Kronu
-currenciesDisplayName.LBP=L\u00fcbnan Liras\u0131
-currenciesDisplayName.EUR=Euro
-currenciesDisplayName.VND=Vietnam Dongu
-currenciesDisplayName.TZS=Tanzanya \u015eilini
-currenciesDisplayName.BOP=Bolivya Pezosu
-currenciesDisplayName.KHR=Kambo\u00e7ya Rieli
-currenciesDisplayName.XAM=Asya Para Birimi
-currenciesDisplayName.BOL=Bolivya Bolivyanosu (1863-1962)
-currenciesDisplayName.KHO=Eski Kambo\u00e7ya Rieli
-currenciesDisplayName.ZMP=Zambiya Liras\u0131
-currenciesDisplayName.AUP=Avustralya Liras\u0131
-currenciesDisplayName.XAF=CFA Frang\u0131 BEAC
-currenciesDisplayName.MTP=Malta Liras\u0131
-currenciesDisplayName.GHR=Yeni Gana Sedisi
-currenciesDisplayName.ZMK=Zambiya Kva\u00e7as\u0131
-currenciesDisplayName.XAD=Asya Hesap Birimi Dinar\u0131
-currenciesDisplayName.GHP=Gana Liras\u0131
-currenciesDisplayName.BOB=Bolivya Bolivyanosu
-currenciesDisplayName.GHO=Eski Gana Sedisi
-currenciesDisplayName.MTL=Malta Liras\u0131
-currenciesDisplayName.AUD=Avustralya Dolar\u0131
-currenciesDisplayName.USS=ABD Dolar\u0131 (Ayn\u0131 g\u00fcn)
-currenciesDisplayName.ITL=\u0130talyan Lireti
-currenciesDisplayName.USN=ABD Dolar\u0131 (Ertesi g\u00fcn)
-currenciesDisplayName.GHC=Gana Sedisi
-currenciesDisplayName.SGD=Singapur Dolar\u0131
-currenciesDisplayName.PAB=Panama Balboas\u0131
-currenciesDisplayName.LAK=Laos Kipi
-currenciesDisplayName.KGS=K\u0131rg\u0131z Somu
-currenciesDisplayName.CHF=\u0130svi\u00e7re Frang\u0131
-currenciesDisplayName.ATS=Avusturya \u015eilini
-currenciesDisplayName.USD=ABD Dolar\u0131
-currenciesDisplayName.ETD=Etiyopya Dolar\u0131
-currenciesDisplayName.BND=Brunei Dolar\u0131
-currenciesDisplayName.JMP=Jamaika Liras\u0131
-currenciesDisplayName.ETB=Etiyopya Birri
-currenciesDisplayName.DZG=Cezayir Frang\u0131 (Germinal)
-currenciesDisplayName.DZF=Yeni Cezayir Frang\u0131
-currenciesDisplayName.DZD=Cezayir Dinar\u0131
-currenciesDisplayName.PYG=Paraguay Guaranisi
-currenciesDisplayName.LYP=Libya Liras\u0131
-currenciesDisplayName.JMD=Jamaika Dolar\u0131
-currenciesDisplayName.ISK=\u0130zlanda Kronu
-currenciesDisplayName.ESP=\u0130spanyol Pezetas\u0131
-currenciesDisplayName.BMP=Bermuda Liras\u0131
-currenciesDisplayName.LYD=Libya Dinar\u0131
-currenciesDisplayName.LYB=Libya \u0130ngiliz Askeri Y\u00f6netimi Liras\u0131
-currenciesDisplayName.BMD=Bermuda Dolar\u0131
-currenciesDisplayName.NLG=Hollanda Florini
-currenciesDisplayName.MRO=Moritanya Ouguiyas\u0131
-currenciesDisplayName.IRR=\u0130ran Riyali
-currenciesDisplayName.SEK=\u0130sve\u00e7 Kronu
-currenciesDisplayName.ERN=Eritre Nakfas\u0131
+currenciesDisplayName.YDD=Yemen Dinar\u0131
+currenciesDisplayName.TWD=Yeni Tayvan Dolar\u0131
currenciesDisplayName.KES=Kenya \u015eilini
-currenciesDisplayName.CFF=Orta Afrika Cumhuriyeti Frang\u0131
+currenciesDisplayName.BYB=Yeni Beyaz Rusya Rublesi (1994-1999)
+currenciesDisplayName.LKR=Sri Lanka Rupisi
+currenciesDisplayName.RWF=Ruanda Frang\u0131
+currenciesDisplayName.TJS=Tacikistan Somonisi
+currenciesDisplayName.SDP=Sudan Liras\u0131
+currenciesDisplayName.TJR=Tacikistan Rublesi
+currenciesDisplayName.ERN=Eritre Nakfas\u0131
+currenciesDisplayName.AFN=Afganistan Afganisi
+currenciesDisplayName.GRD=Yunan Drahmisi
+currenciesDisplayName.IEP=\u0130rlanda Liras\u0131
currenciesDisplayName.ARS=Arjantin Pezosu
+currenciesDisplayName.SDD=Sudan Dinar\u0131
currenciesDisplayName.ARP=Arjantin Pezosu (1983-1985)
-currenciesDisplayName.ARM=Arjantin Pezosu Moneda Nacional
-currenciesDisplayName.TWD=Yeni Tayvan Dolar\u0131
-currenciesDisplayName.SDP=Sudan Liras\u0131
currenciesDisplayName.GEL=G\u00fcrcistan Larisi
+currenciesDisplayName.AFA=Afganistan Afganisi (1927-2002)
currenciesDisplayName.GEK=G\u00fcrcistan Kupon Larisi
-currenciesDisplayName.MQF=Martinik Frang\u0131
+currenciesDisplayName.CRC=Kosta Rika Kolonu
currenciesDisplayName.FKP=Falkland Adalar\u0131 Liras\u0131
+currenciesDisplayName.EEK=Estonya Krunu
+currenciesDisplayName.HKD=Hong Kong Dolar\u0131
+currenciesDisplayName.MDL=Moldova Leyi
currenciesDisplayName.ARA=Arjantin Australi
-currenciesDisplayName.SDD=Sudan Dinar\u0131
currenciesDisplayName.IQD=Irak Dinar\u0131
-currenciesDisplayName.TVD=Tuvalu Dolar\u0131
currenciesDisplayName.SCR=Sey\u015feller Rupisi
+currenciesDisplayName.VUV=Vanuatu Vatusu
+currenciesDisplayName.DKK=Danimarka Kronu
+currenciesDisplayName.KPW=Kuzey Kore Wonu
+currenciesDisplayName.GQE=Ekvator Ginesi Ekuelesi
+currenciesDisplayName.IDR=Endonezya Rupiah\u0131
currenciesDisplayName.LVR=Letonya Rublesi
-currenciesDisplayName.FJP=Fiji Liras\u0131
+currenciesDisplayName.SOS=Somali \u015eilini
+currenciesDisplayName.AED=Birle\u015fik Arap Emirlikleri Dirhemi
+currenciesDisplayName.BWP=Botsvana Pulas\u0131
currenciesDisplayName.LVL=Letonya Lat\u0131
-currenciesDisplayName.CDL=Kongo Zairesi
-currenciesDisplayName.CDG=Kongo Cumhuriyeti Frang\u0131
-currenciesDisplayName.CDF=Kongo Frang\u0131
-currenciesDisplayName.FJD=Fiji Dolar\u0131
+currenciesDisplayName.RUR=Rus Rublesi (1991-1998)
currenciesDisplayName.NIO=Nikaragua Kordobas\u0131 (Oro)
+currenciesDisplayName.ADP=Andora Pezetas\u0131
+currenciesDisplayName.FJD=Fiji Dolar\u0131
currenciesDisplayName.MOP=Makao Patacas\u0131
-currenciesDisplayName.NIG=Alt\u0131n Nikaragua Kordobas\u0131
+currenciesDisplayName.RUB=Rus Rublesi
+currenciesDisplayName.CDF=Kongo Frang\u0131
currenciesDisplayName.NIC=Nikaragua Kordobas\u0131
-currenciesDisplayName.XTR=COMECON Transfer Edilebilir Rublesi
-currenciesDisplayName.FIN=Fin Markkas\u0131 (1860-1962)
-currenciesDisplayName.FIM=Fin Markkas\u0131
+currenciesDisplayName.DJF=Cibuti Frang\u0131
+currenciesDisplayName.ECV=Ekvator Unidad de Valor Constante (UVC)
currenciesDisplayName.SBD=Solomon Adalar\u0131 Dolar\u0131
+currenciesDisplayName.UZS=\u00d6zbekistan Sumu
+currenciesDisplayName.ECS=Ekvator Sukresi
+currenciesDisplayName.PHP=Filipinler Pezosu
+currenciesDisplayName.THB=Tayland Baht\u0131
currenciesDisplayName.LUF=L\u00fcksemburg Frang\u0131
-currenciesDisplayName.TTO=Eski Trinidad ve Tobago Dolar\u0131
-currenciesDisplayName.AOS=Angola Esk\u00fcdosu
-currenciesDisplayName.AOR=Angola Kvanzas\u0131 Reajustado (1995-1999)
-currenciesDisplayName.MNT=Mo\u011fol Tugriki
-currenciesDisplayName.HUF=Macar Forinti
-currenciesDisplayName.BIF=Burundi Frang\u0131
-currenciesDisplayName.AON=Yeni Angola Kvanzas\u0131 (1990-2000)
-currenciesDisplayName.AOK=Angola Kvanzas\u0131 (1977-1990)
+currenciesDisplayName.FIM=Fin Markkas\u0131
currenciesDisplayName.TTD=Trinidad ve Tobago Dolar\u0131
currenciesDisplayName.SZL=Swaziland Lilangenisi
-currenciesDisplayName.NHF=Yeni Hebridler CFP Frang\u0131
-currenciesDisplayName.GBP=\u0130ngiliz Sterlini
-currenciesDisplayName.SAS=Suudi Arabistan Riyali (Sovereign)
+currenciesDisplayName.MNT=Mo\u011fol Tugriki
currenciesDisplayName.SAR=Suudi Arabistan Riyali
+currenciesDisplayName.UAK=Ukrayna Karbovanetz
+currenciesDisplayName.UAH=Ukrayna Grivnas\u0131
+currenciesDisplayName.HUF=Macar Forinti
+currenciesDisplayName.COP=Kolombiya Pezosu
+currenciesDisplayName.QAR=Katar Riyali
currenciesDisplayName.LTT=Litvanya Talonu
-currenciesDisplayName.INR=Hindistan Rupisi
currenciesDisplayName.PTE=Portekiz Esk\u00fcdosu
-currenciesDisplayName.AOA=Angola Kvanzas\u0131
-currenciesDisplayName.PTC=Portekiz Conto
+currenciesDisplayName.AOR=Angola Kvanzas\u0131 Reajustado (1995-1999)
+currenciesDisplayName.UYU=Uruguay Pezosu (Uruguayo)
+currenciesDisplayName.GBP=\u0130ngiliz Sterlini
+currenciesDisplayName.BIF=Burundi Frang\u0131
+currenciesDisplayName.INR=Hindistan Rupisi
+currenciesDisplayName.ZRZ=Zaire Zairesi
+currenciesDisplayName.AON=Yeni Angola Kvanzas\u0131 (1990-2000)
currenciesDisplayName.LTL=Litvanya Litas\u0131
+currenciesDisplayName.XFU=Frans\u0131z UIC-Frang\u0131
currenciesDisplayName.KZT=Kazakistan Tengesi
-currenciesDisplayName.KZR=Kazakistan Rublesi
-currenciesDisplayName.VGD=\u0130ngiliz Virgin Adalar\u0131 Dolar\u0131
-currenciesDisplayName.NGP=Nijerya Liras\u0131
-currenciesDisplayName.MMX=Myanmar Dolar\u0131 FEC
+currenciesDisplayName.MZM=Mozambik Metical\u0131
+currenciesDisplayName.UYP=Uruguay Pezosu (1975-1993)
+currenciesDisplayName.AOK=Angola Kvanzas\u0131 (1977-1990)
+currenciesDisplayName.BUK=Burma Kyat\u0131
+currenciesDisplayName.GNS=Gine Syli
+currenciesDisplayName.XFO=Frans\u0131z Alt\u0131n Frang\u0131
+currenciesDisplayName.PGK=Papua Yeni Gine Kinas\u0131
+currenciesDisplayName.SYP=Suriye Liras\u0131
+currenciesDisplayName.MZE=Mozambik Esk\u00fcdosu
+currenciesDisplayName.OMR=Umman Riyali
currenciesDisplayName.NGN=Nijerya Nairas\u0131
+currenciesDisplayName.ZRN=Yeni Zaire Zairesi
+currenciesDisplayName.AOA=Angola Kvanzas\u0131
+currenciesDisplayName.CNY=\u00c7in Yuan\u0131 Renminbi
+currenciesDisplayName.MAF=Fas Frang\u0131
+currenciesDisplayName.GNF=Gine Frang\u0131
currenciesDisplayName.HTG=Haiti Gurdu
-currenciesDisplayName.SYP=Suriye Liras\u0131
-currenciesDisplayName.PSP=Filistin Liras\u0131
-currenciesDisplayName.BHD=Bahreyn Dinar\u0131
+currenciesDisplayName.MAD=Fas Dirhemi
+currenciesDisplayName.TRY=Yeni T\u00fcrk Liras\u0131
currenciesDisplayName.MMK=Myanmar Kyat\u0131
+currenciesDisplayName.MYR=Malezya Ringiti
+currenciesDisplayName.LSL=Lesotho Lotisi
+currenciesDisplayName.XEU=Avrupa Para Birimi
+currenciesDisplayName.BHD=Bahreyn Dinar\u0131
+currenciesDisplayName.SLL=Sierra Leone Leonesi
+currenciesDisplayName.BTN=Bhutan Ngultrumu
+currenciesDisplayName.TRL=T\u00fcrk Liras\u0131
+currenciesDisplayName.KMF=Komorlar Frang\u0131
currenciesDisplayName.ANG=Hollanda Antilleri Guldeni
currenciesDisplayName.CZK=\u00c7ek Cumhuriyeti Korunas\u0131
-currenciesDisplayName.IMP=Man Adas\u0131 Sterlini
-currenciesDisplayName.BGX=Bulgar Levas\u0131 FEC
-currenciesDisplayName.LSL=Lesotho Lotisi
-currenciesDisplayName.GAF=Gabon CFA Frang\u0131
-currenciesDisplayName.BGO=Bulgar Levas\u0131 (1879-1952)
+currenciesDisplayName.AZM=Azerbaycan Manat\u0131
+currenciesDisplayName.KYD=Kayman Adalar\u0131 Dolar\u0131
+currenciesDisplayName.GMD=Gambiya Dalasisi
currenciesDisplayName.BGN=Yeni Bulgar Levas\u0131
-currenciesDisplayName.BGM=Sosyalist Bulgar Levas\u0131
currenciesDisplayName.CAD=Kanada Dolar\u0131
+currenciesDisplayName.MXV=Meksika Unidad de Inversion (UDI)
currenciesDisplayName.BGL=Bulgar Levas\u0131 (Hard)
-currenciesDisplayName.TRL=T\u00fcrk Liras\u0131
-currenciesDisplayName.KYD=Kayman Adalar\u0131 Dolar\u0131
-currenciesDisplayName.CYP=G\u00fcney K\u0131br\u0131s Liras\u0131
+currenciesDisplayName.VEB=Venezuela Bolivar\u0131
+currenciesDisplayName.MLF=Mali Frang\u0131
currenciesDisplayName.ILS=Yeni \u0130srail \u015eekeli
+currenciesDisplayName.MXP=G\u00fcm\u00fc\u015f Meksika Pezosu (1861-1992)
+currenciesDisplayName.PES=Peru Solu
currenciesDisplayName.GYD=Guyana Dolar\u0131
-currenciesDisplayName.AMD=Ermenistan Dram\u0131
+currenciesDisplayName.MXN=Meksika Pezosu
currenciesDisplayName.ILP=\u0130srail Liras\u0131
-currenciesDisplayName.MLF=Mali Frang\u0131
-currenciesDisplayName.ILL=\u0130srail \u015eekeli
-currenciesDisplayName.VEB=Venezuela Bolivar\u0131
-currenciesDisplayName.ALX=Arnavut Dolar\u0131 FEC
+currenciesDisplayName.SKK=Slovak Korunas\u0131
+currenciesDisplayName.CYP=G\u00fcney K\u0131br\u0131s Liras\u0131
+currenciesDisplayName.XDR=\u00d6zel \u00c7ekme Hakk\u0131 (SDR)
+currenciesDisplayName.PEN=Yeni Peru Solu
currenciesDisplayName.LRD=Liberya Dolar\u0131
-currenciesDisplayName.ALV=Arnavutluk Leki Valute
+currenciesDisplayName.PEI=Peru \u0130nti
+currenciesDisplayName.AMD=Ermenistan Dram\u0131
+currenciesDisplayName.BSD=Bahama Dolar\u0131
currenciesDisplayName.HRK=H\u0131rvat Kunas\u0131
-currenciesDisplayName.REF=Reunion Frang\u0131
+currenciesDisplayName.CLP=\u015eili Pezosu
currenciesDisplayName.HRD=H\u0131rvat Dinar\u0131
-currenciesDisplayName.ALL=Arnavutluk Leki
-currenciesDisplayName.JEP=Jersey Sterlini
-currenciesDisplayName.ALK=Arnavutluk Leki (1946-1961)
-currenciesDisplayName.MKN=Makedonya Dinar\u0131 (1992-1993)
-currenciesDisplayName.VDP=Kuzey Vietnam Viet Minh Piastre Dong Viet
-currenciesDisplayName.VDN=Yeni Kuzey Vietnam Dongu
-currenciesDisplayName.MKD=Makedonya Dinar\u0131
-currenciesDisplayName.VDD=Kuzey Vietnam Piastre Dong Viet
-currenciesDisplayName.TPP=Timor Patacas\u0131
currenciesDisplayName.XPF=CFP Frang\u0131
-currenciesDisplayName.BEL=Bel\u00e7ika Frang\u0131 (finansal)
-currenciesDisplayName.GWP=Gine-Bissau Pezosu
-currenciesDisplayName.KWD=Kuveyt Dinar\u0131
-currenciesDisplayName.GWM=Portekiz Ginesi Mil Reis
-currenciesDisplayName.BEF=Bel\u00e7ika Frang\u0131
+currenciesDisplayName.FRF=Frans\u0131z Frang\u0131
+currenciesDisplayName.BRR=Brezilya Kruzeirosu
+currenciesDisplayName.MKD=Makedonya Dinar\u0131
+currenciesDisplayName.CLF=\u015eili Unidades de Fomento
+currenciesDisplayName.ALL=Arnavutluk Leki
+currenciesDisplayName.BRN=Yeni Brezilya Kruzadosu
+currenciesDisplayName.MWK=Malavi Kva\u00e7as\u0131
+currenciesDisplayName.BRL=Brezilya Reali
currenciesDisplayName.TPE=Timor Esk\u00fcdosu
-currenciesDisplayName.BEC=Bel\u00e7ika Frang\u0131 (konvertibl)
-currenciesDisplayName.GWE=Portekiz Ginesi Esk\u00fcdosu
+currenciesDisplayName.BRE=Brezilya Kruzeirosu (1990-1993)
+currenciesDisplayName.BRC=Brezilya Kruzadosu
+currenciesDisplayName.BRB=Yeni Brezilya Kruzeirosu (1967-1986)
+currenciesDisplayName.DEM=Alman Mark\u0131
+currenciesDisplayName.KWD=Kuveyt Dinar\u0131
+currenciesDisplayName.XCD=Do\u011fu Karayip Dolar\u0131
+currenciesDisplayName.NPR=Nepal Rupisi
+currenciesDisplayName.GWP=Gine-Bissau Pezosu
+currenciesDisplayName.YUN=Konvertibl Yugoslav Dinar\u0131
currenciesDisplayName.SVC=El Salvador Kolonu
-currenciesDisplayName.CWG=Kurasao Florini
-currenciesDisplayName.BDT=Banglade\u015f Takas\u0131
-currenciesDisplayName.TOS=Tonga Sterlini
-currenciesDisplayName.TOP=Tonga Pa\u02bbangas\u0131
+currenciesDisplayName.YUM=Yeni Yugoslav Dinar\u0131
+currenciesDisplayName.BEL=Bel\u00e7ika Frang\u0131 (finansal)
+currenciesDisplayName.SIT=Slovenya Tolar\u0131
+currenciesDisplayName.JPY=Japon Yeni
currenciesDisplayName.XOF=CFA Frang\u0131 BCEAO
+currenciesDisplayName.MVR=Maldiv Adalar\u0131 Rufiyaa
+currenciesDisplayName.GWE=Portekiz Ginesi Esk\u00fcdosu
+currenciesDisplayName.BEF=Bel\u00e7ika Frang\u0131
+currenciesDisplayName.TOP=Tonga Pa\u02bbangas\u0131
+currenciesDisplayName.YUD=Yugoslav Dinar\u0131 (Hard)
+currenciesDisplayName.BEC=Bel\u00e7ika Frang\u0131 (konvertibl)
currenciesDisplayName.SUR=Sovyet Rublesi
-currenciesDisplayName.SUN=Yeni Sovyet Rublesi
-currenciesDisplayName.NCF=Yeni Kaledonya Frang\u0131 (Germinal)
-currenciesDisplayName.CVE=Cape Verde Esk\u00fcdosu
-currenciesDisplayName.XNF=Frans\u0131z Antilleri CFA Frang\u0131
+currenciesDisplayName.ROL=Romen Leyi
+currenciesDisplayName.DDM=Do\u011fu Alman Mark\u0131
+currenciesDisplayName.BDT=Banglade\u015f Takas\u0131
+currenciesDisplayName.XBD=Avrupa Hesap Birimi (XBD)
+currenciesDisplayName.AWG=Aruba Florini
+currenciesDisplayName.XBC=Avrupa Hesap Birimi (XBC)
+currenciesDisplayName.XBB=Avrupa Para Birimi
+currenciesDisplayName.XBA=Birle\u015fik Avrupa Birimi
+currenciesDisplayName.NOK=Norve\u00e7 Kronu
+currenciesDisplayName.MUR=Mauritius Rupisi
currenciesDisplayName.ZAR=G\u00fcney Afrika Rand\u0131
-currenciesDisplayName.DOP=Dominik Pezosu
-currenciesDisplayName.CUX=K\u00fcba FEC
-currenciesDisplayName.ZAP=G\u00fcney Afrika Liras\u0131
+currenciesDisplayName.SHP=Saint Helena Liras\u0131
+currenciesDisplayName.XAU=Alt\u0131n
currenciesDisplayName.ZAL=G\u00fcney Afrika Rand\u0131 (finansal)
+currenciesDisplayName.VND=Vietnam Dongu
+currenciesDisplayName.TZS=Tanzanya \u015eilini
+currenciesDisplayName.GIP=Cebelitar\u0131k Liras\u0131
currenciesDisplayName.TND=Tunus Dinar\u0131
-currenciesDisplayName.CUP=K\u00fcba Pezosu
-currenciesDisplayName.GUF=Frans\u0131z Guyanas\u0131 Frang\u0131
+currenciesDisplayName.CVE=Cape Verde Esk\u00fcdosu
currenciesDisplayName.UGX=Uganda \u015eilini
-currenciesDisplayName.LNR=Seylan Rupisi
-currenciesDisplayName.AIF=Afarlar ve \u0130ssalar Frang\u0131
-currenciesDisplayName.VAL=Vatikan \u015eehir Devleti Liras\u0131
-currenciesDisplayName.STE=Sao Tome ve Principe Esk\u00fcdosu
+currenciesDisplayName.ZMK=Zambiya Kva\u00e7as\u0131
+currenciesDisplayName.JOD=\u00dcrd\u00fcn Dinar\u0131
+currenciesDisplayName.XAF=CFA Frang\u0131 BEAC
+currenciesDisplayName.LBP=L\u00fcbnan Liras\u0131
currenciesDisplayName.UGS=Uganda \u015eilini (1966-1987)
currenciesDisplayName.STD=Sao Tome ve Principe Dobras\u0131
-currenciesDisplayName.MHD=Marshall Adalar\u0131 Dolar\u0131
-currenciesDisplayName.NZP=Yeni Zelanda Liras\u0131
currenciesDisplayName.WST=Bat\u0131 Samoa Talas\u0131
-currenciesDisplayName.WSP=Bat\u0131 Samoa Liras\u0131
-currenciesDisplayName.HNL=Honduras Lempiras\u0131
-currenciesDisplayName.XMF=Ana Fransa yeni Frang\u0131
+currenciesDisplayName.KHR=Kambo\u00e7ya Rieli
+currenciesDisplayName.EUR=Euro
+currenciesDisplayName.DOP=Dominik Pezosu
+currenciesDisplayName.BOV=Bolivya Mvdol
+currenciesDisplayName.MTP=Malta Liras\u0131
+currenciesDisplayName.USS=ABD Dolar\u0131 (Ayn\u0131 g\u00fcn)
+currenciesDisplayName.BOP=Bolivya Pezosu
+currenciesDisplayName.MTL=Malta Liras\u0131
+currenciesDisplayName.CUP=K\u00fcba Pezosu
currenciesDisplayName.TMM=T\u00fcrkmenistan Manat\u0131
-currenciesDisplayName.GTQ=Guatemala Ketzali
+currenciesDisplayName.USN=ABD Dolar\u0131 (Ertesi g\u00fcn)
+currenciesDisplayName.SGD=Singapur Dolar\u0131
currenciesDisplayName.NZD=Yeni Zelanda Dolar\u0131
-currenciesDisplayName.SSP=\u0130sko\u00e7ya Liras\u0131
-currenciesDisplayName.BBD=Barbados Dolar\u0131
+currenciesDisplayName.USD=ABD Dolar\u0131
+currenciesDisplayName.HNL=Honduras Lempiras\u0131
+currenciesDisplayName.BOB=Bolivya Bolivyanosu
+currenciesDisplayName.ITL=\u0130talyan Lireti
+currenciesDisplayName.PAB=Panama Balboas\u0131
+currenciesDisplayName.GTQ=Guatemala Ketzali
+currenciesDisplayName.LAK=Laos Kipi
+currenciesDisplayName.GHC=Gana Sedisi
+currenciesDisplayName.AUD=Avustralya Dolar\u0131
currenciesDisplayName.NAD=Namibya Dolar\u0131
+currenciesDisplayName.KGS=K\u0131rg\u0131z Somu
currenciesDisplayName.MGF=Madagaskar Frang\u0131
+currenciesDisplayName.CHF=\u0130svi\u00e7re Frang\u0131
+currenciesDisplayName.BBD=Barbados Dolar\u0131
currenciesDisplayName.MGA=Madagaskar Ariary
-currenciesDisplayName.EGP=M\u0131s\u0131r Liras\u0131
-currenciesDisplayName.BZH=\u0130ngiliz Honduras\u0131 Dolar\u0131
+currenciesDisplayName.PYG=Paraguay Guaranisi
currenciesDisplayName.PLZ=Polonya Zlotisi (1950-1995)
-currenciesDisplayName.BAN=Yeni Bosna Hersek Dinar\u0131
-currenciesDisplayName.PLX=Polonya ABD Dolar\u0131 FEC
-currenciesDisplayName.BAM=Konvertibl Bosna Hersek Mark\u0131
-currenciesDisplayName.BZD=Belize Dolar\u0131
-currenciesDisplayName.BAD=Bosna Hersek Dinar\u0131
-currenciesDisplayName.PLN=Polonya Zlotisi
currenciesDisplayName.YER=Yemen Riyali
+currenciesDisplayName.ATS=Avusturya \u015eilini
+currenciesDisplayName.ETB=Etiyopya Birri
+currenciesDisplayName.BND=Brunei Dolar\u0131
+currenciesDisplayName.JMD=Jamaika Dolar\u0131
+currenciesDisplayName.EGP=M\u0131s\u0131r Liras\u0131
+currenciesDisplayName.PLN=Polonya Zlotisi
+currenciesDisplayName.DZD=Cezayir Dinar\u0131
+currenciesDisplayName.ISK=\u0130zlanda Kronu
currenciesDisplayName.SRG=Surinam Guldeni
-currenciesDisplayName.CSK=\u00c7ekoslavak Korunas\u0131 (Hard)
+currenciesDisplayName.LYD=Libya Dinar\u0131
+currenciesDisplayName.BZD=Belize Dolar\u0131
+currenciesDisplayName.BAM=Konvertibl Bosna Hersek Mark\u0131
+currenciesDisplayName.ESP=\u0130spanyol Pezetas\u0131
currenciesDisplayName.KRW=G\u00fcney Kore Wonu
+currenciesDisplayName.NLG=Hollanda Florini
+currenciesDisplayName.MRO=Moritanya Ouguiyas\u0131
+currenciesDisplayName.BAD=Bosna Hersek Dinar\u0131
+currenciesDisplayName.ZWD=Zimbabwe Dolar\u0131
+currenciesDisplayName.SEK=\u0130sve\u00e7 Kronu
+currenciesDisplayName.CSK=\u00c7ekoslavak Korunas\u0131 (Hard)
currenciesDisplayName.BYR=Beyaz Rusya Rublesi
-currenciesDisplayName.YEI=Yemen Riyali (Imadi)
-currenciesDisplayName.BYL=Beyaz Rusya Rublesi (1992-1994)
-currenciesDisplayName.CSC=\u00c7ekoslavak Korunas\u0131
-currenciesDisplayName.KRO=Eski G\u00fcney Kore Wonu
-currenciesDisplayName.KRH=G\u00fcney Kore Hwan\u0131
-currenciesDisplayName.BYB=Yeni Beyaz Rusya Rublesi (1994-1999)
-currenciesDisplayName.SQS=Somaliland \u015eilini
-currenciesDisplayName.GRN=Yeni Yunan Drahmisi
+currenciesDisplayName.IRR=\u0130ran Riyali
currenciesDisplayName.PKR=Pakistan Rupisi
-currenciesDisplayName.AFN=Afganistan Afganisi
-currenciesDisplayName.ZWD=Zimbabwe Dolar\u0131
-currenciesDisplayName.LKR=Sri Lanka Rupisi
-currenciesDisplayName.GRD=Yunan Drahmisi
-currenciesDisplayName.IEP=\u0130rlanda Liras\u0131
-currenciesDisplayName.AFA=Afganistan Afganisi (1927-2002)
-currenciesDisplayName.YDD=Yemen Dinar\u0131
-currenciesDisplayName.RWF=Ruanda Frang\u0131
-currenciesDisplayName.CRC=Kosta Rika Kolonu
-currenciesDisplayName.TJS=Tacikistan Somonisi
-currenciesDisplayName.TJR=Tacikistan Rublesi
-currenciesDisplayName.EEK=Estonya Krunu
-currenciesDisplayName.GQP=Ekvator Ginesi Pezetas\u0131
-currenciesDisplayName.MDR=Moldova Rublesi (Cupon)
-currenciesDisplayName.HKD=Hong Kong Dolar\u0131
-currenciesDisplayName.DKK=Danimarka Kronu
-currenciesDisplayName.MDL=Moldova Leyi
-currenciesDisplayName.GQF=Ekvator Ginesi Frang\u0131
-currenciesDisplayName.GQE=Ekvator Ginesi Ekuelesi
-currenciesDisplayName.IDR=Endonezya Rupiah\u0131
-currenciesDisplayName.AED=Birle\u015fik Arap Emirlikleri Dirhemi
-currenciesDisplayName.KPW=Kuzey Kore Wonu
-currenciesDisplayName.IDN=Yeni Endonezya Rupiah\u0131
-currenciesDisplayName.BWP=Botsvana Pulas\u0131
-currenciesDisplayName.MDC=Moldova Leyi (Cupon)
-currenciesDisplayName.IDJ=Endonezya Java Rupiah\u0131
-currenciesDisplayName.KPP=Kuzey Kore Halk Cumhuriyeti Wonu
-currenciesDisplayName.IDG=Endonezya Nica Florini
-currenciesDisplayName.VUV=Vanuatu Vatusu
-currenciesDisplayName.XID=\u0130slam Dinar\u0131
-currenciesDisplayName.SOS=Somali \u015eilini
-currenciesDisplayName.ADP=Andora Pezetas\u0131
-currenciesDisplayName.RUR=Rus Rublesi (1991-1998)
-currenciesDisplayName.GPF=Guadeloupe Frang\u0131
-currenciesDisplayName.DJF=Cibuti Frang\u0131
-currenciesDisplayName.ADD=Andora Dinar\u0131
-currenciesDisplayName.MCG=Fas Frang\u0131 (Germinal)
-currenciesDisplayName.MCF=Yeni Fas Frang\u0131
-currenciesDisplayName.ECV=Ekvator Unidad de Valor Constante (UVC)
-currenciesDisplayName.ECS=Ekvator Sukresi
-currenciesDisplayName.LIF=Liechtenstein Frang\u0131
-currenciesDisplayName.RUB=Rus Rublesi
-currenciesDisplayName.PHP=Filipinler Pezosu
-currenciesDisplayName.UZS=\u00d6zbekistan Sumu
-currenciesDisplayName.COP=Kolombiya Pezosu
-currenciesDisplayName.THB=Tayland Baht\u0131
-currenciesDisplayName.IBP=Kuzey \u0130rlanda Liras\u0131
-currenciesDisplayName.BUR=Burma Rupisi
-currenciesDisplayName.COF=Kongo CFA Frang\u0131
-currenciesDisplayName.BUK=Burma Kyat\u0131
-currenciesDisplayName.COB=Kolombiya Ka\u011f\u0131t Pezosu
-currenciesDisplayName.UZC=\u00d6zbekistan Sumu (Coupon)
-currenciesDisplayName.UAK=Ukrayna Karbovanetz
-currenciesDisplayName.QAR=Katar Riyali
-currenciesDisplayName.UAH=Ukrayna Grivnas\u0131
-currenciesDisplayName.GNS=Gine Syli
-currenciesDisplayName.CNY=\u00c7in Yuan\u0131 Renminbi
-currenciesDisplayName.MZM=Mozambik Metical\u0131
-currenciesDisplayName.CNX=\u00c7in ABD Dolar\u0131 FEC
-currenciesDisplayName.UYU=Uruguay Pezosu (Uruguayo)
-currenciesDisplayName.GNI=Gine Frang\u0131 (1960-1972)
-currenciesDisplayName.SML=San Marino Liras\u0131
-currenciesDisplayName.CNP=\u00c7in Jen Min Piao Yuan\u0131
-currenciesDisplayName.MZE=Mozambik Esk\u00fcdosu
-currenciesDisplayName.GNF=Gine Frang\u0131
-currenciesDisplayName.OMS=Umman Riyali (Saidi)
-currenciesDisplayName.PGK=Papua Yeni Gine Kinas\u0131
-currenciesDisplayName.OMR=Umman Riyali
-currenciesDisplayName.UYP=Uruguay Pezosu (1975-1993)
-currenciesDisplayName.XFU=Frans\u0131z UIC-Frang\u0131
-currenciesDisplayName.BTR=Bhutan Rupisi
-currenciesDisplayName.ZRZ=Zaire Zairesi
-currenciesDisplayName.MAF=Fas Frang\u0131
-currenciesDisplayName.MAD=Fas Dirhemi
-currenciesDisplayName.BTN=Bhutan Ngultrumu
-currenciesDisplayName.XFO=Frans\u0131z Alt\u0131n Frang\u0131
-currenciesDisplayName.UYF=Uruguay Pezosu (Fuerte)
-currenciesDisplayName.MYR=Malezya Ringiti
-currenciesDisplayName.ZRN=Yeni Zaire Zairesi
-currenciesDisplayName.AZM=Azerbaycan Manat\u0131
-currenciesDisplayName.GMP=Gambiya Liras\u0131
-currenciesDisplayName.KMF=Komorlar Frang\u0131
-currenciesDisplayName.SLL=Sierra Leone Leonesi
-currenciesDisplayName.GMD=Gambiya Dalasisi
-currenciesDisplayName.XEU=Avrupa Para Birimi
-currenciesDisplayName.BSP=Bahama Liras\u0131
-currenciesDisplayName.CMF=Kamerun CFA Frang\u0131
-currenciesDisplayName.MXV=Meksika Unidad de Inversion (UDI)
-currenciesDisplayName.XEF=CFA Frank BCEAEC
-currenciesDisplayName.BSD=Bahama Dolar\u0131
-currenciesDisplayName.MXP=G\u00fcm\u00fc\u015f Meksika Pezosu (1861-1992)
-currenciesDisplayName.MXN=Meksika Pezosu
-currenciesDisplayName.PES=Peru Solu
-currenciesDisplayName.GLK=Gr\u00f6nland Kronu
-currenciesDisplayName.BRZ=Brezilya Kruzeirosu (1942-1967)
-currenciesDisplayName.PEN=Yeni Peru Solu
-currenciesDisplayName.CLP=\u015eili Pezosu
-currenciesDisplayName.SKK=Slovak Korunas\u0131
-currenciesDisplayName.PEI=Peru \u0130nti
-currenciesDisplayName.BRR=Brezilya Kruzeirosu
-currenciesDisplayName.XDR=\u00d6zel \u00c7ekme Hakk\u0131 (SDR)
-currenciesDisplayName.FRG=Frans\u0131z Frang\u0131 (Germinal/Franc Poincare)
-currenciesDisplayName.FRF=Frans\u0131z Frang\u0131
-currenciesDisplayName.BRN=Yeni Brezilya Kruzadosu
-currenciesDisplayName.CLF=\u015eili Unidades de Fomento
-currenciesDisplayName.CLE=\u015eili Esk\u00fcdosu
-currenciesDisplayName.BRL=Brezilya Reali
-currenciesDisplayName.CLC=\u015eili Condor
-currenciesDisplayName.BRE=Brezilya Kruzeirosu (1990-1993)
-currenciesDisplayName.DES=Alman Sperrmark
-currenciesDisplayName.MWP=Malavi Liras\u0131
-currenciesDisplayName.BRC=Brezilya Kruzadosu
-currenciesDisplayName.BRB=Yeni Brezilya Kruzeirosu (1967-1986)
-currenciesDisplayName.MWK=Malavi Kva\u00e7as\u0131
-currenciesDisplayName.PDR=Transdniestria Rublesi
-currenciesDisplayName.DEM=Alman Mark\u0131
-currenciesDisplayName.TDF=\u00c7ad CFA Frang\u0131
-currenciesDisplayName.PDN=Yeni Transdniestria Rublesi
-currenciesDisplayName.PDK=Transdniestria Rublesi (Kupon)
-currenciesDisplayName.NPR=Nepal Rupisi
-currenciesDisplayName.CKD=Cook Adalar\u0131 Dolar\u0131
-currenciesDisplayName.JPY=Japon Yeni
-currenciesDisplayName.MVR=Maldiv Adalar\u0131 Rufiyaa
-currenciesDisplayName.XCF=CFA Yeni Frank
-currenciesDisplayName.MVP=Maldiv Adalar\u0131 Rupisi
-currenciesDisplayName.XCD=Do\u011fu Karayip Dolar\u0131
-currenciesDisplayName.SIT=Slovenya Tolar\u0131
-currenciesDisplayName.YUR=Yugoslav Dinar\u0131 (Reformed)
-currenciesDisplayName.AWG=Aruba Florini
-currenciesDisplayName.YUO=Yugoslav Ekim Dinar\u0131
-currenciesDisplayName.DDM=Do\u011fu Alman Mark\u0131
-currenciesDisplayName.YUN=Konvertibl Yugoslav Dinar\u0131
-currenciesDisplayName.YUM=Yeni Yugoslav Dinar\u0131
-currenciesDisplayName.TCC=Turks ve Caicos Adalar\u0131 Crownu
-currenciesDisplayName.YUG=Yugoslav 1994 Dinar\u0131
-currenciesDisplayName.YUF=Yugoslav Federasyonu Dinar\u0131
-currenciesDisplayName.RON=Yeni Romen Leyi
-currenciesDisplayName.YUD=Yugoslav Dinar\u0131 (Hard)
-currenciesDisplayName.ROL=Romen Leyi
-currenciesDisplayName.SIB=Slovenya Tolar\u0131 (Bons)
-currenciesDisplayName.NOK=Norve\u00e7 Kronu
-currenciesDisplayName.MUR=Mauritius Rupisi
-currenciesDisplayName.XBD=Avrupa Hesap Birimi (XBD)
-currenciesDisplayName.GIP=Cebelitar\u0131k Liras\u0131
-currenciesDisplayName.VNS=Vietnam Ulusal Dongu
-currenciesDisplayName.XBC=Avrupa Hesap Birimi (XBC)
-currenciesDisplayName.VNR=Vietnam Cumhuriyeti Dongu
-currenciesDisplayName.XBB=Avrupa Para Birimi
-currenciesDisplayName.XBA=Birle\u015fik Avrupa Birimi
-currenciesDisplayName.KID=Kiribati Dolar\u0131
-currenciesDisplayName.SHP=Saint Helena Liras\u0131
-currenciesDisplayName.VNN=Yeni Vietnam Dongu
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.USS=USS
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=Bermuda Dolar\u0131
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
+currenciesSymbol.STD=Db
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.USD=US$
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.CNP=CNP
-currenciesSymbol.MZE=MZE
currenciesSymbol.GNF=GF
-currenciesSymbol.OMS=OMS
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMR=RO
-currenciesSymbol.UYP=UYP
-currenciesSymbol.XFU=XFU
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=Nu
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=RM
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=Oca®\u015eub®Mar®Nis®May®Haz®Tem®A\u011fu®Eyl®Eki®Kas®Ara®®
months=Ocak®\u015eubat®Mart®Nisan®May\u0131s®Haziran®Temmuz®A\u011fustos®Eyl\u00fcl®Ekim®Kas\u0131m®Aral\u0131k®®
shortWeekdays=®Paz®Pzt®Sal®\u00c7ar®Per®Cum®Cmt®
@@ -774,6 +363,7 @@ shortDateFormat=dd.MM.yyyy
mediumDateFormat=dd.MMM.yyyy
longDateFormat=dd MMMM yyyy EEEE
fullDateFormat=dd MMMM yyyy EEEE
+zoneStrings=Pacific/Honolulu®Hawaii Standart Saati®Hawaii Standart Saati®©America/Los_Angeles®Pasifik Standart Saati®Pasifik Yaz Saati®©America/Denver®ABD S\u0131rada\u011flar Standart Saati®ABD S\u0131rada\u011flar Yaz Saati®©America/Phoenix®ABD S\u0131rada\u011flar Standart Saati®ABD S\u0131rada\u011flar Standart Saati®©America/Chicago®Merkezi Standart Saati®Merkezi Yaz Saati®©America/Indianapolis®Do\u011fu Standart Saati®Do\u011fu Standart Saati®©America/St_Johns®Newfoundland Standart Saati®Newfoundland Yaz Saati®©America/Anchorage®Alaska Standart Saati®Alaska Yaz Saati®©Asia/Shanghai®\u00c7in Standart Saati®\u00c7in Standart Saati®©America/New_York®Do\u011fu Standart Saati®Do\u011fu Yaz Saati®©America/Halifax®Atlantik Standart Saati®Atlantik Yaz Saati®©
territories.TL=Do\u011fu Timor
territories.TK=Tokelau
territories.TJ=Tacikistan
@@ -796,7 +386,9 @@ territories.GN=Gine
territories.GM=Gambia
territories.GL=Gr\u00f6nland
territories.SV=El Salvador
+territories.062=G\u00fcney Orta Asya
territories.ST=Sao Tome ve Principe
+territories.061=Polinezya
territories.GI=Cebelitar\u0131k
territories.GH=Gana
territories.SR=Surinam
@@ -820,9 +412,12 @@ territories.SC=Sey\u015feller
territories.SB=Solomon Adalar\u0131
territories.SA=Suudi Arabistan
territories.FR=Fransa
+territories.057=Mikronezya
territories.FO=Faroe Adalar\u0131
territories.FM=Mikronezya Federal Eyaletleri
territories.RW=Ruanda
+territories.054=Melanezya
+territories.053=Avustralya ve Yeni Zelanda
territories.FK=Falkland Adalar\u0131 (Malvinalar)
territories.RU=Rusya Federasyonu
territories.FJ=Fiji
@@ -832,20 +427,26 @@ territories.RE=Reunion
territories.ET=Etiyopya
territories.ES=\u0130spanya
territories.ER=Eritre
+territories.833=Man Adas\u0131
territories.EH=Bat\u0131 Sahara
territories.EG=M\u0131s\u0131r
+territories.830=Kanal Adalar\u0131
territories.EE=Estonya
+territories.QO=Uzak Okyanusya
territories.EC=Ekvator
territories.DZ=Cezayir
territories.QA=Katar
+territories.039=G\u00fcney Avrupa
territories.DO=Dominik Cumhuriyeti
territories.PY=Paraguay
+territories.035=G\u00fcney Do\u011fu Asya
territories.DM=Dominik
territories.PW=Palau
territories.DK=Danimarka
territories.DJ=Cibuti
territories.PT=Portekiz
territories.PS=Filistin B\u00f6lgesi
+territories.030=Do\u011fu Asya
territories.PR=Porto Riko
territories.DE=Almanya
territories.PN=Pitcairn
@@ -862,13 +463,16 @@ territories.CX=Christmas Adas\u0131
territories.CV=Cape Verde
territories.PA=Panama
territories.CU=K\u00fcba
+territories.CS=S\u0131rbistan-Karada\u011f
territories.CR=Kosta Rika
+territories.029=Karayipler
territories.CO=Kolombiya
territories.CN=\u00c7in
territories.CM=Kamerun
territories.CL=\u015eili
territories.CK=Cook Adalar\u0131
territories.CI=Fildi\u015fi Sahilleri
+territories.021=Kuzey Amerika
territories.CH=\u0130svi\u00e7re
territories.CG=Kongo
territories.CF=Orta Afrika Cumhuriyeti
@@ -883,13 +487,20 @@ territories.BV=Bouvet Adas\u0131
territories.BT=Bhutan
territories.BS=Bahamalar
territories.BR=Brezilya
+territories.019=Amerika
+territories.018=G\u00fcney Afrika
territories.NZ=Yeni Zelanda
territories.BO=Bolivya
+territories.017=Orta Afrika
territories.BN=Brunei
territories.BM=Bermuda
+territories.015=Kuzey Afrika
+territories.014=Do\u011fu Afrika
+territories.013=Orta Amerika
territories.NU=Niue Adalar\u0131
territories.BJ=Benin
territories.BI=Burundi
+territories.011=Bat\u0131 Afrika
territories.BH=Bahreyn
territories.NR=Nauru Adas\u0131
territories.BG=Bulgaristan
@@ -907,6 +518,7 @@ territories.NG=Nijerya
territories.NF=Norfolk Adas\u0131
territories.AZ=Azerbaycan
territories.NE=Nijer
+territories.AX=Aland Adalar\u0131
territories.NC=Yeni Kaledonya
territories.AW=Aruba
territories.ZM=Zambiya
@@ -915,19 +527,23 @@ territories.AU=Avustralya
territories.AT=Avusturya
territories.AS=Amerikan Samoas\u0131
territories.AR=Arjantin
+territories.009=Okyanusya
territories.AQ=Antarktika
territories.MZ=Mozambik
territories.AO=Angola
territories.MY=Malezya
territories.AN=Hollanda Antilleri
territories.MX=Meksika
+territories.005=G\u00fcney Amerika
territories.AM=Ermenistan
territories.MW=Malavi
territories.AL=Arnavutluk
territories.MV=Maldivler
territories.ZA=G\u00fcney Afrika
territories.MU=Mauritius
+territories.002=Afrika
territories.MT=Malta
+territories.001=D\u00fcnya
territories.AI=Anguilla
territories.MS=Montserrat
territories.MR=Moritanya
@@ -942,7 +558,6 @@ territories.MN=Mo\u011folistan
territories.MM=Myanmar
territories.ML=Mali
territories.MK=Makedonya Cumhuriyeti
-territories.YU=Yugoslavya
territories.YT=Mayotte
territories.MH=Marshall Adalar\u0131
territories.MG=Madagaskar
@@ -952,10 +567,14 @@ territories.MA=Fas
territories.YE=Yemen
territories.LY=Libya
territories.LV=Letonya
+territories.155=Bat\u0131 Avrupa
territories.LU=L\u00fcksemburg
+territories.154=Kuzey Avrupa
territories.LT=Litvanya
territories.LS=Lesotho
territories.LR=Liberya
+territories.151=Do\u011fu Avrupa
+territories.150=Avrupa
territories.LK=Sri Lanka
territories.LI=Liechtenstein
territories.LC=Saint Lucia
@@ -964,6 +583,8 @@ territories.LA=Laos
territories.KZ=Kazakistan
territories.KY=Kayman Adalar\u0131
territories.KW=Kuveyt
+territories.145=Bat\u0131 Asya
+territories.142=Asya
territories.KR=G\u00fcney Kore
territories.KP=Kuzey Kore
territories.KN=Saint Kittler ve Neviler
@@ -1013,141 +634,260 @@ territories.TR=T\u00fcrkiye
territories.TO=Tonga
territories.TN=Tunus
territories.TM=T\u00fcrkmenistan
-languages.es=\u0130spanyolca
+languages.lb=L\u00fcksemburg Dili
+languages.la=Latince
+languages.xh=Xhosa
+languages.ky=K\u0131rg\u0131zca
+languages.iro=Iroquoian Dilleri
languages.ku=K\u00fcrt\u00e7e
-languages.eo=Esperanto
+languages.krc=Kara\u00e7ay-Balkar
languages.ks=Ke\u015fmirce
-languages.en=\u0130ngilizce
-languages.el=Yunanca
-languages.qu=Quechua
+languages.ypk=Yupik Dilleri
languages.ko=Korece
languages.kn=Kannada
languages.km=Kambo\u00e7ya Dili
languages.kl=Gr\u00f6nland Dili
+languages.ira=\u0130ran Dili
languages.kk=Kazak Dili
+languages.grc=Antik Yunan (1453'e kadar)
+languages.crp=Creoles ve Pidgins (Di\u011fer)
languages.wo=Wolof
+languages.art=Yapay (Di\u011fer)
languages.ka=G\u00fcrc\u00fcce
-languages.dz=Bhutan Dili
+languages.crh=K\u0131r\u0131m T\u00fcrk\u00e7esi; K\u0131r\u0131m Tatarcas\u0131
+languages.gem=Almanca tabanl\u0131 (Di\u011fer)
+languages.afa=Afro Asya Dilleri (Di\u011fer)
languages.jv=Java Dili
-languages.pt=Portekizce
-languages.ps=Pe\u015ftun Dili
-languages.de=Almanca
-languages.pl=Polonya Dili
-languages.da=Danca
+languages.arc=Aramice
+languages.cel=Kelt\u00e7e (Di\u011fer)
+languages.sco=\u0130sko\u00e7
languages.vo=Volapuk
+languages.tut=Altay Dilleri (Di\u011fer)
languages.ja=Japonca
languages.vi=Vietnam Dili
-languages.cy=Gal Dili
-languages.pa=Pencap Dili
-languages.cs=\u00c7ek\u00e7e
+languages.tup=Tupi dilleri
languages.iu=Inuktitut
languages.it=\u0130talyanca
-languages.co=Korsika Dili
languages.is=\u0130zlandaca
+languages.ady=Adige
languages.uz=\u00d6zbek\u00e7e
-languages.or=Oriya
+languages.io=Ido
languages.ik=Inupiak
languages.ur=Urduca
-languages.om=Oromo (Afan)
-languages.ca=Katalan Dili
+languages.nic=Nijer - Kordofanian (Di\u011fer)
languages.ie=Interlingue
+languages.cpp=Creoles ve Pidgins, Portekizce tabanl\u0131 (Di\u011fer)
languages.id=Endonezya Dili
-languages.uk=Ukraynaca
languages.ia=Interlingua
-languages.oc=Occitan
+languages.hit=Hitit\u00e7e
+languages.uk=Ukraynaca
languages.ug=Uygurca
+languages.cpf=Creoles ve Pidgins, Frans\u0131zca tabanl\u0131 (Di\u011fer)
+languages.fiu=Finno - Ugrian (Di\u011fer)
languages.hy=Ermenice
-languages.br=Breton Dili
+languages.cpe=Creoles ve Pidgins, \u0130ngilizce tabanl\u0131 (Di\u011fer)
+languages.nub=Nubian Dilleri
languages.hu=Macarca
-languages.bo=Tibet\u00e7e
-languages.bn=Bengal Dili
+languages.ht=Haiti Dili
+languages.wak=Wakashan Dilleri
+languages.phi=Filipinler Dili (Di\u011fer)
languages.hr=H\u0131rvat\u00e7a
-languages.bi=Bislama
+languages.ty=Tahiti Dili
+languages.apa=Apa\u00e7i Dilleri
languages.tw=Twi
-languages.bh=Bihari
-languages.bg=Bulgarca
+languages.goh=Almanca (750-1050)
languages.tt=Tatarca
-languages.no=Norve\u00e7\u00e7e
-languages.be=Beyaz Rus\u00e7a
-languages.ts=Tsonga
languages.hi=Hint Dili
+languages.ts=Tsonga
+languages.mno=Manobo Dilleri
languages.tr=T\u00fcrk\u00e7e
-languages.nl=Hollanda Dili
-languages.zu=Zulu
-languages.ba=Ba\u015fk\u0131rt Dili
-languages.to=Tonga
+languages.sal=Salishan Dilleri
languages.he=\u0130branice
+languages.cop=Kiptice
+languages.to=Tonga (Tonga Adalar\u0131)
languages.tn=Setswana
+languages.sai=G\u00fcney Amerika Yerlileri Dili (Di\u011fer)
+languages.sms=Skolt Sami
languages.tl=Tagalog
-languages.tk=T\u00fcrkmence
languages.ha=Hausa
-languages.ne=Nepal Dili
-languages.az=Azerice
+languages.tk=T\u00fcrkmence
+languages.dum=Felemenk\u00e7e (1050-1350)
languages.ti=Tigrinya
-languages.ay=Aymara
languages.th=Tay Dili
+languages.smn=Inari Sami
languages.tg=Tacik Dili
-languages.na=Nauru
+languages.mnc=Man\u00e7urya Dili
languages.te=Telugu
-languages.zh=\u00c7ince
-languages.ar=Arap\u00e7a
+languages.smj=Lule Sami
+languages.smi=Sami Dilleri (Di\u011fer)
languages.ta=Tamil
+languages.syr=S\u00fcryanice
languages.gu=Gujarati
-languages.my=Birmanya Dili
-languages.am=Amharik
-languages.za=Zhuang
-languages.mt=Malta Dili
-languages.ms=Malay
+languages.inh=\u0130ngu\u015f Dili
+languages.sma=G\u00fcney Sami
+languages.ine=Hint-Avrupa (Di\u011fer)
languages.gn=Guarani
+languages.inc=Hint\u00e7e (Di\u011fer)
languages.sw=Swahili
-languages.mr=Marathi
-languages.sv=\u0130sve\u00e7\u00e7e
languages.gl=Gali\u00e7ya Dili
+languages.sv=\u0130sve\u00e7\u00e7e
languages.su=Sudan Dili
-languages.af=Afrikaan Dili
languages.st=Sesotho
-languages.mo=Moldavya Dili
+languages.enm=\u0130ngilizce (1100-1500)
languages.ss=Siswati
-languages.mn=Mo\u011fol Dili
+languages.mad=Madura Dili
languages.sr=S\u0131rp\u00e7a
languages.sq=Arnavut\u00e7a
-languages.ml=Malayalam
-languages.ab=Abazca
-languages.mk=Makedonca
-languages.aa=Afar
languages.so=Somali Dili
-languages.sn=Shona
-languages.mi=Maori
languages.gd=\u0130sko\u00e7 Gal Dili
+languages.sn=Shona
languages.sm=Samoa Dili
languages.sl=Slovence
-languages.mg=Malaga Dili
-languages.sk=Slovak\u00e7a
languages.ga=\u0130rlanda Dili
-languages.yo=Yoruba
+languages.sk=Slovak\u00e7a
languages.si=Sinhal Dili
languages.sh=S\u0131rp-H\u0131rvat Dili
languages.sg=Sangho
-languages.yi=Yiddi\u015f
-languages.sd=Sindhi
+languages.se=Kuzey Sami
languages.fy=Frizye Dili
+languages.sd=Sindhi
+languages.sc=Sardunya Dili
languages.sa=Sanskrit\u00e7e
+languages.cau=Kafkas\u00e7a (Di\u011fer)
+languages.ang=Eski \u0130ngilizce (450-1100)
languages.fr=Frans\u0131zca
-languages.lv=Letonya Dili
-languages.lt=Litvanya Dili
+languages.sla=Slav Dilleri (Di\u011fer)
languages.fo=Faroe Dili
+languages.pro=Eski Proven\u00e7al (1500'e kadar)
languages.rw=Kinyarwanda
+languages.gmh=Almanca (1050-1500)
languages.ru=Rus\u00e7a
-languages.lo=Laos Dili
languages.fj=Fiji Dili
-languages.ln=Lingala
languages.fi=Fince
+languages.cai=Orta Amerika Yerlileri (Di\u011fer)
languages.ro=Romence
+languages.cad=Caddo
languages.rn=Kirundi
+languages.hsb=Yukar\u0131 Sorb\u00e7a
languages.rm=Rhaeto-Roman Dili
languages.fa=Fars\u00e7a
-languages.la=Latince
-languages.xh=Xhosa
+languages.pra=Prakrit Dilleri
+languages.peo=Eski Fars\u00e7a (600-400 M.\u00d6.)
+languages.cmc=Chamic Dilleri
languages.eu=Bask Dili
-languages.ky=K\u0131rg\u0131zca
languages.et=Estonya Dili
+languages.dsb=A\u015fa\u011f\u0131 Sorb\u00e7a
+languages.elx=Elam
+languages.es=\u0130spanyolca
+languages.eo=Esperanto
+languages.en=\u0130ngilizce
+languages.el=Yunanca
+languages.qu=Quechua
+languages.fro=Frans\u0131zca (842-1400)
+languages.frm=Frans\u0131zca (1400-1600)
+languages.ee=Ewe
+languages.mkh=Mon-Khmer (Di\u011fer)
+languages.dz=Bhutan Dili
+languages.nds=A\u015fa\u011f\u0131 Almanca; A\u015fa\u011f\u0131 Sakson
+languages.alg=Algonquian Dilleri
+languages.dra=Dravidian (Di\u011fer)
+languages.pt=Portekizce
+languages.ber=Berberi
+languages.ps=Pe\u015ftun Dili
+languages.de=Almanca
+languages.sit=\u00c7in-Tibet (Di\u011fer)
+languages.pl=Polonya Dili
+languages.da=Danca
+languages.sio=Siu Dilleri
+languages.sux=S\u00fcmer
+languages.cy=Gal Dili
+languages.akk=Akad Dili
+languages.cv=\u00c7uva\u015f
+languages.pa=Pencap Dili
+languages.cu=Kilise Slavcas\u0131
+languages.cs=\u00c7ek\u00e7e
+languages.rom=Romanca
+languages.co=Korsika Dili
+languages.mis=\u00c7e\u015fitli Diller
+languages.os=Oset
+languages.or=Oriya
+languages.roa=Roman Dili (Di\u011fer)
+languages.ce=\u00c7e\u00e7ence
+languages.om=Oromo (Afan)
+languages.ca=Katalan Dili
+languages.oj=Ojibwa
+languages.mun=Munda Dilleri
+languages.mul=Birden Fazla Diller
+languages.oc=Occitan (1500 sonras\u0131); Proven\u00e7al
+languages.bs=Bosna Dili
+languages.kum=Kumuk\u00e7a
+languages.xal=Kalm\u0131k
+languages.br=Breton Dili
+languages.bo=Tibet\u00e7e
+languages.bn=Bengal Dili
+languages.bi=Bislama
+languages.bh=Bihari
+languages.nr=G\u00fcney Ndebele
+languages.bg=Bulgarca
+languages.be=Beyaz Rus\u00e7a
+languages.oto=Osmanl\u0131 Dilleri
+languages.no=Norve\u00e7\u00e7e
+languages.nn=Norve\u00e7\u00e7e Nynorsk
+languages.tai=Tay Dili (Di\u011fer)
+languages.nl=Hollanda Dili
+languages.ba=Ba\u015fk\u0131rt Dili
+languages.zu=Zulu
+languages.pau=Palau Dili
+languages.sgn=\u0130\u015faret Dilleri
+languages.cus=Cushitic (Di\u011fer)
+languages.az=Azerice
+languages.khi=Khoisan (Di\u011fer)
+languages.ne=Nepal Dili
+languages.ay=Aymara
+languages.nd=Kuzey Ndebele
+languages.nb=Norve\u00e7 Kitap Dili
+languages.av=Avar Dili
+languages.ota=Osmanl\u0131ca (1500-1928)
+languages.na=Nauru
+languages.aus=Avustralya Dilleri
+languages.ar=Arap\u00e7a
+languages.zh=\u00c7ince
+languages.sga=Eski \u0130rlandaca (900'e kadar)
+languages.my=Birmanya Dili
+languages.chy=\u00c7eyen
+languages.am=Amharik
+languages.nai=Kuzey Amerika Yerlileri Dili (Di\u011fer)
+languages.za=Zhuang
+languages.paa=Papua Dili (Di\u011fer)
+languages.mt=Malta Dili
+languages.ms=Malay
+languages.mr=Marathi
+languages.chr=\u00c7eroki
+languages.af=Afrikaan Dili
+languages.ssa=Nil-Sahara (Di\u011fer)
+languages.mo=Moldavya Dili
+languages.haw=Hawaii Dili
+languages.mn=Mo\u011fol Dili
+languages.ab=Abazca
+languages.aa=Afar
+languages.ml=Malayalam
+languages.mk=Makedonca
+languages.mi=Maori
+languages.mh=Marshall Adalar\u0131 Dili
+languages.mg=Malaga Dili
+languages.chg=\u00c7a\u011fatay Dili
+languages.mga=\u0130rlanda Dili (900-1200)
+languages.yo=Yoruba
+languages.osa=Osage
+languages.egy=M\u0131s\u0131r Dili (Eski)
+languages.yi=Yiddi\u015f
+languages.wen=Sorb Dilleri
+languages.lv=Letonya Dili
+languages.bat=Balt\u0131k (Di\u011fer)
+languages.ath=Athapascan Dilleri
+languages.lt=Litvanya Dili
+languages.ban=Bali Dili
+languages.lo=Laos Dili
+languages.ln=Lingala
+languages.bai=Bamileke Dilleri
+languages.sem=Sami (Di\u011fer)
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tt.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tt.properties
index 39b7e4b..fe92ef7 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tt.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_tt.properties
@@ -7,7 +7,6 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.RUR=RUR
currenciesSymbol.RUR=\u0440.
territories.RU=\u0420\u043e\u0441\u0441\u0438\u044f
languages.tt=\u0422\u0430\u0442\u0430\u0440
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uk.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uk.properties
index 8260f46..2716f7b 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uk.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uk.properties
@@ -8,697 +8,344 @@
decimalSeparator=,
groupingSeparator=\u00a0
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\u0419\u043e\u0440\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.BOV=\u0411\u043e\u043b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u043c\u0432\u0434\u043e\u043b
-currenciesDisplayName.XAU=\u0417\u043e\u043b\u043e\u0442\u043e
-currenciesDisplayName.FOK=\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.LBP=\u041b\u0456\u0432\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.EUR=\u0404\u0432\u0440\u043e
-currenciesDisplayName.VND=\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043d\u0433
-currenciesDisplayName.TZS=\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.BOP=\u0411\u043e\u043b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.KHR=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0454\u043b\u044c
-currenciesDisplayName.XAM=\u0410\u0437\u0456\u0430\u0442\u0441\u044c\u043a\u0430 \u0432\u0430\u043b\u044e\u0442\u043d\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f
-currenciesDisplayName.BOL=\u0411\u043e\u043b\u0456\u0432\u0456\u0430\u043d\u043e (1863-1962)
-currenciesDisplayName.KHO=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0441\u0442\u0430\u0440\u0438\u0439 \u0440\u0456\u0454\u043b\u044c
-currenciesDisplayName.ZMP=\u0417\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.AUP=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.XAF=\u0424\u0440\u0430\u043d\u043a \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0438\u0441\u0442\u0432\u0430
-currenciesDisplayName.MTP=\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.GHR=\u0413\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u043e\u0446\u0456\u043d\u0435\u043d\u0438\u0439 \u0441\u0435\u0434\u0456
-currenciesDisplayName.ZMK=\u0417\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u0447\u0430
-currenciesDisplayName.GHP=\u0413\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BOB=\u0411\u043e\u043b\u0456\u0432\u0456\u0430\u043d\u043e
-currenciesDisplayName.GHO=\u0413\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0441\u0442\u0430\u0440\u0438\u0439 \u0441\u0435\u0434\u0456
-currenciesDisplayName.MTL=\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
-currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ITL=\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
-currenciesDisplayName.GHC=\u0413\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0441\u0435\u0434\u0456
-currenciesDisplayName.SGD=\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.PAB=\u041f\u0430\u043d\u0430\u043c\u0441\u044c\u043a\u0430 \u0431\u0430\u043b\u044c\u0431\u043e\u0430
-currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u044c\u043a\u0438\u0439 \u043a\u0456\u043f
-currenciesDisplayName.KGS=\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0438\u0439 \u0441\u043e\u043c
-currenciesDisplayName.CHF=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ATS=\u0410\u0432\u0441\u0442\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.USD=\u0414\u043e\u043b\u0430\u0440 \u0421\u0428\u0410
-currenciesDisplayName.ETD=\u0415\u0444\u0456\u043e\u043f\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.BND=\u0411\u0440\u0443\u043d\u0435\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440r
-currenciesDisplayName.JMP=\u042f\u043c\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.ETB=\u0415\u0444\u0456\u043e\u043f\u0441\u044c\u043a\u0438\u0439 \u0431\u0438\u0440
-currenciesDisplayName.DZF=\u0410\u043b\u0436\u0438\u0440\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.DZD=\u0410\u043b\u0436\u0438\u0440\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.PYG=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u0430\u0440\u0430\u043d\u0456
-currenciesDisplayName.LYP=\u041b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.JMD=\u042f\u043c\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ISK=\u0406\u0441\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.ESP=\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
-currenciesDisplayName.BMP=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.LYD=\u041b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.BMD=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.NLG=\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
-currenciesDisplayName.MRO=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0430 \u0443\u0433\u0456\u044f
-currenciesDisplayName.IRR=\u0406\u0440\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
-currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.ERN=\u0415\u0440\u0438\u0442\u0440\u0435\u0439\u0441\u044c\u043a\u0430 \u043d\u0430\u043a\u0444\u0430
+currenciesDisplayName.YDD=\u0404\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.TWD=\u041d\u043e\u0432\u0438\u0439 \u0442\u0430\u0439\u0432\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.KES=\u041a\u0435\u043d\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.CFF=\u0424\u0440\u0430\u043d\u043a \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u043e\u0457 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0438
+currenciesDisplayName.BYB=\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1994-1999)
+currenciesDisplayName.LKR=\u0428\u0440\u0456-\u043b\u0430\u043d\u043a\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
+currenciesDisplayName.RWF=\u0420\u0443\u0430\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0438\u0439 \u0441\u043e\u043c\u043e\u043d\u0456
+currenciesDisplayName.SDP=\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.TJR=\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
+currenciesDisplayName.ERN=\u0415\u0440\u0438\u0442\u0440\u0435\u0439\u0441\u044c\u043a\u0430 \u043d\u0430\u043a\u0444\u0430
+currenciesDisplayName.AFN=\u0410\u0444\u0433\u0430\u043d\u0456
+currenciesDisplayName.GRD=\u0413\u0440\u0435\u0446\u044c\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.IEP=\u0406\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.ARS=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.SDD=\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.ARP=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e (1983-1985)
-currenciesDisplayName.TWD=\u041d\u043e\u0432\u0438\u0439 \u0442\u0430\u0439\u0432\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.SDP=\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.GEL=\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0430\u0440\u0456
-currenciesDisplayName.MQF=\u041c\u0430\u0440\u0442\u0438\u043d\u0456\u043a\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.AFA=\u0410\u0444\u0433\u0430\u043d\u0456 (1927-2002)
+currenciesDisplayName.CRC=\u041a\u043e\u0441\u0442\u0430-\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u043e\u043d
currenciesDisplayName.FKP=\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.EEK=\u0415\u0441\u0442\u043e\u043d\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.HKD=\u0413\u043e\u043d\u043a\u043e\u043d\u0433\u0456\u0432\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u0439
currenciesDisplayName.ARA=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0441\u044c\u043a\u0438\u0439 \u0430\u0432\u0441\u0442\u0440\u0430\u043b
-currenciesDisplayName.SDD=\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.IQD=\u0406\u0440\u0430\u043a\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.TVD=\u0414\u043e\u043b\u0430\u0440 \u0422\u0443\u0432\u0430\u043b\u0443
currenciesDisplayName.SCR=\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
+currenciesDisplayName.VUV=\u0412\u0430\u043d\u0443\u0430\u0442\u0441\u044c\u043a\u0430 \u0432\u0430\u0442\u0443
+currenciesDisplayName.DKK=\u0414\u0430\u0442\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.KPW=\u0412\u043e\u043d\u0430 \u041f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0457 \u041a\u043e\u0440\u0435\u0457
+currenciesDisplayName.IDR=\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
currenciesDisplayName.LVR=\u041b\u0430\u0442\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.FJP=\u0424\u0456\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
+currenciesDisplayName.AED=\u0414\u0438\u0440\u0445\u0435\u043c \u041e\u0410\u0415
+currenciesDisplayName.BWP=\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0441\u044c\u043a\u0430 \u043f\u0443\u043b\u0430
currenciesDisplayName.LVL=\u041b\u0430\u0442\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u043b\u0430\u0442
-currenciesDisplayName.CDL=\u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u044c\u043a\u0438\u0439 \u0437\u0430\u0457\u0440
-currenciesDisplayName.CDG=\u0424\u0440\u0430\u043d\u043a \u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u044c\u043a\u043e\u0457 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0438
-currenciesDisplayName.CDF=\u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.FJD=\u0424\u0456\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.RUR=\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1991-1998)
currenciesDisplayName.NIO=\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430\u043d\u0441\u044c\u043a\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430 \u043e\u0440\u043e
+currenciesDisplayName.ADP=\u0410\u043d\u0434\u043e\u0440\u0440\u0441\u044c\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
+currenciesDisplayName.FJD=\u0424\u0456\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.MOP=\u041c\u0430\u043a\u0430\u043e \u043f\u0430\u0442\u0430\u043a\u0430
-currenciesDisplayName.NIG=\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430\u043d\u0441\u044c\u043a\u0430 \u0437\u043e\u043b\u043e\u0442\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
+currenciesDisplayName.RUB=\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
+currenciesDisplayName.CDF=\u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.NIC=\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430\u043d\u0441\u044c\u043a\u0430 \u043a\u043e\u0440\u0434\u043e\u0431\u0430
-currenciesDisplayName.XTR=\u0420\u0443\u0431\u043b\u044c \u0420\u0415\u0412
-currenciesDisplayName.FIN=\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0441\u044c\u043a\u0430 \u043c\u0430\u0440\u043a\u0430 (1860-1962)
-currenciesDisplayName.FIM=\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0441\u044c\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
+currenciesDisplayName.DJF=\u0424\u0440\u0430\u043d\u043a \u0414\u0436\u0456\u0431\u0443\u0442\u0456
+currenciesDisplayName.ECV=\u0415\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u044c\u043a\u0438\u0439 UV\u0421
currenciesDisplayName.SBD=\u0414\u043e\u043b\u0430\u0440 \u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0438\u0445 \u041e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
+currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u0446\u044c\u043a\u0438\u0439 \u0441\u0443\u043c
+currenciesDisplayName.ECS=\u0415\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u044c\u043a\u0435 \u0441\u0443\u043a\u0440\u0435
+currenciesDisplayName.PHP=\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.THB=\u0422\u0430\u0457\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0431\u0430\u0442
currenciesDisplayName.LUF=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.TTO=\u0421\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u043b\u0430\u0440 \u0422\u0440\u0438\u043d\u0456\u0434\u0430\u0434\u0443 \u0456 \u0422\u043e\u0431\u0430\u0433\u043e
-currenciesDisplayName.AOS=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.MNT=\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0442\u0443\u0433\u0440\u0438\u043a
-currenciesDisplayName.HUF=\u0423\u0433\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u043e\u0440\u0438\u043d\u0442
-currenciesDisplayName.BIF=\u0411\u0443\u0440\u0443\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.AON=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043d\u043e\u0432\u0430 \u043a\u0432\u0430\u043d\u0437\u0430 (1990-2000)
-currenciesDisplayName.AOK=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u043d\u0437\u0430 (1977-1990)
+currenciesDisplayName.FIM=\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0441\u044c\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
currenciesDisplayName.TTD=\u0414\u043e\u043b\u0430\u0440 \u0422\u0440\u0438\u043d\u0456\u0434\u0430\u0434\u0443 \u0456 \u0422\u043e\u0431\u0430\u0433\u043e
currenciesDisplayName.SZL=\u0421\u0432\u0430\u0437\u0456\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0456 \u043b\u0456\u043b\u0430\u043d\u0433\u0435\u043d\u0456
-currenciesDisplayName.NHF=\u0424\u0440\u0430\u043d\u043a \u0413\u0435\u0431\u0440\u0456\u0434\u0441\u044c\u043a\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
-currenciesDisplayName.GBP=\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0456\u0432
+currenciesDisplayName.MNT=\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0442\u0443\u0433\u0440\u0438\u043a
currenciesDisplayName.SAR=\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
+currenciesDisplayName.UAK=\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446\u044c
+currenciesDisplayName.HUF=\u0423\u0433\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u043e\u0440\u0438\u043d\u0442
+currenciesDisplayName.COP=\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
currenciesDisplayName.LTT=\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u0442\u0430\u043b\u043e\u043d
-currenciesDisplayName.INR=\u0406\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
currenciesDisplayName.PTE=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.AOA=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u043d\u0437\u0430
-currenciesDisplayName.PTC=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u043e
+currenciesDisplayName.UYU=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.GBP=\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0456\u0432
+currenciesDisplayName.BIF=\u0411\u0443\u0440\u0443\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.INR=\u0406\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
+currenciesDisplayName.ZRZ=\u0417\u0430\u0457\u0440\u0441\u044c\u043a\u0438\u0439 \u0437\u0430\u0457\u0440
+currenciesDisplayName.AON=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043d\u043e\u0432\u0430 \u043a\u0432\u0430\u043d\u0437\u0430 (1990-2000)
currenciesDisplayName.LTL=\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u043b\u0456\u0442
+currenciesDisplayName.XFU=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a UIC
currenciesDisplayName.KZT=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0442\u0435\u043d\u0433\u0435
-currenciesDisplayName.KZR=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.VGD=\u0414\u043e\u043b\u0430\u0440 \u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0438\u0445 \u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0438\u0445 \u041e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
-currenciesDisplayName.NGP=\u041d\u0456\u0433\u0435\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u0446\u044c\u043a\u0438\u0439 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
+currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e (1975-1993)
+currenciesDisplayName.AOK=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u043d\u0437\u0430 (1977-1990)
+currenciesDisplayName.BUK=\u0411\u0456\u0440\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u0456\u0430\u0442
+currenciesDisplayName.GNS=\u0413\u0432\u0456\u043d\u0435\u0439\u0441\u044c\u043a\u0435 \u0441\u0456\u043b\u0456
+currenciesDisplayName.XFO=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0437\u043e\u043b\u043e\u0442\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.PGK=\u041a\u0456\u043d\u0430 \u041f\u0430\u043f\u0443\u0430 \u041d\u043e\u0432\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
+currenciesDisplayName.SYP=\u0421\u0438\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.MZE=\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u0446\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
+currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
currenciesDisplayName.NGN=\u041d\u0456\u0433\u0435\u0440\u0456\u0439\u0441\u044c\u043a\u0430 \u043d\u0430\u0439\u0440\u0430
+currenciesDisplayName.ZRN=\u0417\u0430\u0457\u0440\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0437\u0430\u0457\u0440
+currenciesDisplayName.AOA=\u0410\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u043d\u0437\u0430
+currenciesDisplayName.CNY=\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u044e\u0430\u043d\u044c
+currenciesDisplayName.MAF=\u041c\u0430\u0440\u043e\u043a\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.GNF=\u0413\u0432\u0456\u0439\u043d\u0435\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.HTG=\u0413\u0430\u0457\u0442\u044f\u043d\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u0440\u0434
-currenciesDisplayName.SYP=\u0421\u0438\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.PSP=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BHD=\u0411\u0430\u0445\u0440\u0435\u0439\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u0440\u0445\u0435\u043c
+currenciesDisplayName.TRY=\u041d\u043e\u0432\u0430 \u0442\u0443\u0440\u0435\u0446\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
currenciesDisplayName.MMK=\u041a\u02bc\u044f\u0442 \u041c\u02bc\u044f\u043d\u043c\u0438
+currenciesDisplayName.MYR=\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0438\u043d\u0433\u0456\u0442
+currenciesDisplayName.LSL=\u041b\u0435\u0441\u043e\u0442\u0441\u044c\u043a\u0438\u0439 \u043b\u043e\u0442\u0456
+currenciesDisplayName.XEU=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0432\u0430\u043b\u044e\u0442\u043d\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f
+currenciesDisplayName.BHD=\u0411\u0430\u0445\u0440\u0435\u0439\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.SLL=\u041b\u0435\u043e\u043d\u0435 \u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435
+currenciesDisplayName.BTN=\u0411\u0443\u0442\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u0433\u0443\u043b\u0442\u0440\u0443\u043c
+currenciesDisplayName.TRL=\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
+currenciesDisplayName.KMF=\u041a\u043e\u043c\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.ANG=\u0413\u0443\u043b\u044c\u0434\u0435\u043d \u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0445 \u0410\u043d\u0442\u0456\u043b
currenciesDisplayName.CZK=\u0427\u0435\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.IMP=\u0424\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0456\u0432 \u041e\u0441\u0442\u0440\u043e\u0432\u0430 \u041c\u0435\u043d
-currenciesDisplayName.LSL=\u041b\u0435\u0441\u043e\u0442\u0441\u044c\u043a\u0438\u0439 \u043b\u043e\u0442\u0456
-currenciesDisplayName.GAF=\u0413\u0430\u0431\u043e\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BGO=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u0432 (1879-1952)
+currenciesDisplayName.AZM=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043c\u0430\u043d\u0430\u0442
+currenciesDisplayName.KYD=\u0414\u043e\u043b\u0430\u0440 \u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
+currenciesDisplayName.GMD=\u0413\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0430 \u0434\u0430\u043b\u0430\u0441\u0456
currenciesDisplayName.BGN=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u043b\u0435\u0432
-currenciesDisplayName.BGM=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0441\u043e\u0446\u0456\u0430\u043b\u0456\u0441\u0442\u0438\u0447\u043d\u0438\u0439 \u043b\u0435\u0432
currenciesDisplayName.CAD=\u041a\u0430\u043d\u0430\u0434\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.MXV=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 UDI
currenciesDisplayName.BGL=\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0442\u0432\u0435\u0440\u0434\u0438\u0439 \u043b\u0435\u0432
-currenciesDisplayName.TRL=\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
-currenciesDisplayName.KYD=\u0414\u043e\u043b\u0430\u0440 \u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
-currenciesDisplayName.CYP=\u041a\u0456\u043f\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.VEB=\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0431\u043e\u043b\u0456\u0432\u0430\u0440
+currenciesDisplayName.MLF=\u041c\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
currenciesDisplayName.ILS=\u0406\u0437\u0440\u0430\u0457\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0448\u0435\u043a\u0435\u043b\u044c
+currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u0441\u0440\u0456\u0431\u043d\u0435 \u043f\u0435\u0441\u043e (1861-1992)
+currenciesDisplayName.PES=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0441\u043e\u043b
currenciesDisplayName.GYD=\u0413\u0430\u0439\u044f\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.AMD=\u0412\u0456\u0440\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0440\u0430\u043c
+currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.ILP=\u0406\u0437\u0440\u0430\u0457\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.MLF=\u041c\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ILL=\u0406\u0437\u0440\u0430\u0457\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0448\u0435\u043a\u0435\u043b\u044c
-currenciesDisplayName.VEB=\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0431\u043e\u043b\u0456\u0432\u0430\u0440
+currenciesDisplayName.SKK=\u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.CYP=\u041a\u0456\u043f\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.XDR=\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0456 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u043f\u043e\u0437\u0438\u0447\u0435\u043d\u043d\u044f
+currenciesDisplayName.PEN=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0441\u043e\u043b
currenciesDisplayName.LRD=\u041b\u0456\u0431\u0435\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.ALV=\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u043a
+currenciesDisplayName.PEI=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0456\u043d\u0442\u0456
+currenciesDisplayName.AMD=\u0412\u0456\u0440\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0440\u0430\u043c
+currenciesDisplayName.BSD=\u0411\u0430\u0433\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.HRK=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0430 \u043a\u0443\u043d\u0430
-currenciesDisplayName.REF=\u0420\u0435\u044e\u043d\u044c\u0439\u043e\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.CLP=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.HRD=\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.ALL=\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u043a
-currenciesDisplayName.JEP=\u0424\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0456\u0432 \u0414\u0436\u0435\u0440\u0441\u0456
-currenciesDisplayName.ALK=\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u043a (1946-1961)
-currenciesDisplayName.MKN=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440 (1992-1993)
-currenciesDisplayName.VDN=\u041d\u043e\u0432\u0438\u0439 \u0434\u043e\u043d\u0433 \u041f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0433\u043e \u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0443
-currenciesDisplayName.MKD=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.TPP=\u0422\u0456\u043c\u043e\u0440\u0441\u044c\u043a\u0430 \u043f\u0430\u0442\u0430\u043a\u0430
currenciesDisplayName.XPF=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0442\u0438\u0445\u043e\u043e\u043a\u0435\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BEL=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a (\u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0438\u0439)
-currenciesDisplayName.GWP=\u041f\u0435\u0441\u043e \u0413\u0432\u0456\u043d\u0435\u0457-\u0411\u0456\u0441\u0430\u0443
-currenciesDisplayName.KWD=\u041a\u0443\u0432\u0435\u0439\u0442\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.GWM=\u041c\u0456\u043b\u044c\u0440\u0435\u0439\u0441 \u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
-currenciesDisplayName.BEF=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.BRR=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e
+currenciesDisplayName.MKD=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.CLF=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 UF
+currenciesDisplayName.ALL=\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u043a
+currenciesDisplayName.BRN=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043d\u043e\u0432\u0435 \u043a\u0440\u0443\u0437\u0430\u0434\u043e
+currenciesDisplayName.MWK=\u041c\u0430\u043b\u0430\u0432\u0456\u0439\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u0447\u0430
+currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0440\u0435\u0430\u043b
currenciesDisplayName.TPE=\u0422\u0456\u043c\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.BEC=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0438\u0439)
-currenciesDisplayName.GWE=\u0415\u0441\u043a\u0443\u0434\u043e \u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
+currenciesDisplayName.BRE=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e (1990-1993)
+currenciesDisplayName.BRC=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0430\u0434\u043e
+currenciesDisplayName.BRB=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043d\u043e\u0432\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e (1967-1986)
+currenciesDisplayName.DEM=\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
+currenciesDisplayName.KWD=\u041a\u0443\u0432\u0435\u0439\u0442\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.XCD=\u0414\u043e\u043b\u0430\u0440 \u0421\u0445\u0456\u0434\u043d\u0438\u0445 \u041a\u0438\u0440\u0438\u0431\u0456\u0432
+currenciesDisplayName.NPR=\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
+currenciesDisplayName.GWP=\u041f\u0435\u0441\u043e \u0413\u0432\u0456\u043d\u0435\u0457-\u0411\u0456\u0441\u0430\u0443
+currenciesDisplayName.YUN=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
currenciesDisplayName.SVC=\u0415\u043b\u044c-\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u043e\u043d
-currenciesDisplayName.CWG=\u0413\u0443\u043b\u044c\u0434\u0435\u043d \u041a\u0443\u0440\u0430\u0441\u044e
-currenciesDisplayName.BDT=\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0441\u044c\u043a\u0430 \u0442\u0430\u043a\u0430
-currenciesDisplayName.TOS=\u0424\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0456\u0432 \u0422\u043e\u043d\u0433\u043e
-currenciesDisplayName.TOP=\u041f\u0430\u0430\u043d\u0433\u0430 \u0422\u043e\u043d\u0433\u043e
+currenciesDisplayName.YUM=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.BEL=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a (\u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0438\u0439)
+currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0442\u043e\u043b\u0430\u0440
+currenciesDisplayName.JPY=\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430 \u0454\u043d\u0430
currenciesDisplayName.XOF=\u0424\u0440\u0430\u043d\u043a \u0417\u0430\u0445\u0456\u0434\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0438\u0441\u0442\u0432\u0430
+currenciesDisplayName.MVR=\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0440\u0443\u0444\u0456\u044f
+currenciesDisplayName.GWE=\u0415\u0441\u043a\u0443\u0434\u043e \u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
+currenciesDisplayName.BEF=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.TOP=\u041f\u0430\u0430\u043d\u0433\u0430 \u0422\u043e\u043d\u0433\u043e
+currenciesDisplayName.YUD=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u0442\u0432\u0435\u0440\u0434\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.BEC=\u0411\u0435\u043b\u044c\u0433\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0438\u0439)
currenciesDisplayName.SUR=\u0420\u0430\u0434\u044f\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.SUN=\u0420\u0430\u0434\u044f\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.NCF=\u0424\u0440\u0430\u043d\u043a \u041d\u043e\u0432\u043e\u0457 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u0457
-currenciesDisplayName.CVE=\u0415\u0441\u043a\u0443\u0434\u043e \u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435
-currenciesDisplayName.XNF=\u0424\u0440\u0430\u043d\u043a \u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0445 \u0410\u043d\u0442\u0438\u043b\u044c\u0441\u044c\u043a\u0438\u0445 \u041e\u0441\u0442\u0440\u043e\u0432\u0456\u0432
+currenciesDisplayName.ROL=\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u0439
+currenciesDisplayName.BDT=\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0441\u044c\u043a\u0430 \u0442\u0430\u043a\u0430
+currenciesDisplayName.XBD=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f (XBD)
+currenciesDisplayName.AWG=\u0410\u0440\u0443\u0431\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
+currenciesDisplayName.XBC=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f (XBC)
+currenciesDisplayName.XBB=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0433\u0440\u043e\u0448\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f
+currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0437\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.MUR=\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
currenciesDisplayName.ZAR=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0430\u043d\u0434
-currenciesDisplayName.DOP=\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.CUX=\u041a\u0443\u0431\u0438\u043d\u0441\u044c\u043a\u0456 \u0432\u0430\u043b\u044e\u0442\u043d\u0456 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u0438
-currenciesDisplayName.ZAP=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.SHP=\u0424\u0443\u043d\u0442 \u0421\u0432\u044f\u0442\u043e\u0457 \u0404\u043b\u0435\u043d\u0438
+currenciesDisplayName.XAU=\u0417\u043e\u043b\u043e\u0442\u043e
currenciesDisplayName.ZAL=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0430\u043d\u0434
+currenciesDisplayName.VND=\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043d\u0433
+currenciesDisplayName.TZS=\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
+currenciesDisplayName.GIP=\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.TND=\u0422\u0443\u043d\u0456\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.GUF=\u0424\u0440\u0430\u043d\u043a \u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u043e\u0457 \u0413\u0432\u0456\u0430\u043d\u0438
+currenciesDisplayName.CVE=\u0415\u0441\u043a\u0443\u0434\u043e \u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435
currenciesDisplayName.UGX=\u0423\u0433\u0430\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.LNR=\u0426\u0435\u0439\u043b\u043e\u043d\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.AIF=\u0424\u0440\u0430\u043d\u043a \u0410\u0444\u0444\u0430\u0440\u0441\u0443 \u0442\u0430 \u0406\u0441\u0430\u0430\u0441\u0443
-currenciesDisplayName.VAL=\u0412\u0430\u0442\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
-currenciesDisplayName.STE=\u0415\u0441\u043a\u0443\u0434\u043e \u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f\u0456
+currenciesDisplayName.ZMK=\u0417\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u0447\u0430
+currenciesDisplayName.JOD=\u0419\u043e\u0440\u0434\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.XAF=\u0424\u0440\u0430\u043d\u043a \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0444\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0438\u0441\u0442\u0432\u0430
+currenciesDisplayName.LBP=\u041b\u0456\u0432\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.UGS=\u0423\u0433\u0430\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433 (1966-1987)
currenciesDisplayName.STD=\u0414\u043e\u0431\u0440\u0430 \u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f\u0456
-currenciesDisplayName.MHD=\u0414\u043e\u043b\u0430\u0440 \u041c\u0430\u0440\u0448\u0430\u043b\u043b\u043e\u0432\u0438\u0445 \u043e\u0441\u0442\u0440\u043e\u0432\u0456\u0432r
-currenciesDisplayName.NZP=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
currenciesDisplayName.WST=\u0422\u0430\u043b\u0430 \u0417\u0430\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0421\u0430\u043c\u043e\u0430
-currenciesDisplayName.WSP=\u0424\u0443\u043d\u0442 \u0417\u0430\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0421\u0430\u043c\u043e\u0430
-currenciesDisplayName.HNL=\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u044c\u043a\u0430 \u043b\u0435\u043c\u043f\u0456\u0440\u0430
-currenciesDisplayName.XMF=\u0424\u0440\u0430\u043d\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0445 \u043c\u0435\u0442\u0440\u043e\u043f\u043e\u043b\u0456\u0439
+currenciesDisplayName.KHR=\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0454\u043b\u044c
+currenciesDisplayName.EUR=\u0404\u0432\u0440\u043e
+currenciesDisplayName.DOP=\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.BOV=\u0411\u043e\u043b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u043c\u0432\u0434\u043e\u043b
+currenciesDisplayName.MTP=\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.BOP=\u0411\u043e\u043b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
+currenciesDisplayName.MTL=\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
+currenciesDisplayName.CUP=\u041a\u0443\u0431\u0438\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
currenciesDisplayName.TMM=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u043c\u0430\u043d\u0430\u0442
+currenciesDisplayName.SGD=\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.NZD=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.USD=\u0414\u043e\u043b\u0430\u0440 \u0421\u0428\u0410
+currenciesDisplayName.HNL=\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u044c\u043a\u0430 \u043b\u0435\u043c\u043f\u0456\u0440\u0430
+currenciesDisplayName.BOB=\u0411\u043e\u043b\u0456\u0432\u0456\u0430\u043d\u043e
+currenciesDisplayName.ITL=\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430 \u043b\u0456\u0440\u0430
+currenciesDisplayName.PAB=\u041f\u0430\u043d\u0430\u043c\u0441\u044c\u043a\u0430 \u0431\u0430\u043b\u044c\u0431\u043e\u0430
currenciesDisplayName.GTQ=\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u043a\u0435\u0442\u0441\u0430\u043b\u044c
-currenciesDisplayName.NZD=\u041d\u043e\u0432\u043e\u0437\u0435\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440r
-currenciesDisplayName.SSP=\u0428\u043e\u0442\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.LAK=\u041b\u0430\u043e\u0441\u044c\u043a\u0438\u0439 \u043a\u0456\u043f
+currenciesDisplayName.GHC=\u0413\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0441\u0435\u0434\u0456
+currenciesDisplayName.AUD=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.NAD=\u041d\u0430\u043c\u0456\u0431\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.KGS=\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0438\u0439 \u0441\u043e\u043c
currenciesDisplayName.MGF=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.CHF=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
+currenciesDisplayName.BBD=\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
currenciesDisplayName.MGA=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0430\u0440\u0456\u0430\u0440\u0456
-currenciesDisplayName.EGP=\u0404\u0433\u0438\u043f\u0435\u0442\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BZH=\u0414\u043e\u043b\u0430\u0440 \u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441\u0443
+currenciesDisplayName.PYG=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u0430\u0440\u0430\u043d\u0456
currenciesDisplayName.PLZ=\u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0437\u043b\u043e\u0442\u0438\u0439 (1950-1995)
-currenciesDisplayName.BAN=\u041d\u043e\u0432\u0438\u0439 \u0434\u0438\u043d\u0430\u0440 \u0411\u043e\u0441\u043d\u0456\u0457 \u0456 \u0413\u0435\u0440\u0446\u043e\u0433\u043e\u0432\u0438\u043d\u0438
-currenciesDisplayName.BAM=\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u0440\u043a\u0430 \u0411\u043e\u0441\u043d\u0456\u0457 \u0456 \u0413\u0435\u0440\u0446\u043e\u0433\u043e\u0432\u0438\u043d\u0438
-currenciesDisplayName.BZD=\u0411\u0435\u043b\u0456\u0437\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.BAD=\u0414\u0438\u043d\u0430\u0440 \u0411\u043e\u0441\u043d\u0456\u0457 \u0456 \u0413\u0435\u0446\u043e\u0433\u043e\u0432\u0438\u043d\u0438
-currenciesDisplayName.PLN=\u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0437\u043b\u043e\u0442\u0438\u0439
currenciesDisplayName.YER=\u0404\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
+currenciesDisplayName.ATS=\u0410\u0432\u0441\u0442\u0440\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
+currenciesDisplayName.ETB=\u0415\u0444\u0456\u043e\u043f\u0441\u044c\u043a\u0438\u0439 \u0431\u0438\u0440
+currenciesDisplayName.BND=\u0411\u0440\u0443\u043d\u0435\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.JMD=\u042f\u043c\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.EGP=\u0404\u0433\u0438\u043f\u0435\u0442\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
+currenciesDisplayName.PLN=\u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0437\u043b\u043e\u0442\u0438\u0439
+currenciesDisplayName.DZD=\u0410\u043b\u0436\u0438\u0440\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.ISK=\u0406\u0441\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.SRG=\u0421\u0443\u0440\u0438\u043d\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
-currenciesDisplayName.CSK=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430 \u0442\u0432\u0435\u0440\u0434\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.LYD=\u041b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
+currenciesDisplayName.BZD=\u0411\u0435\u043b\u0456\u0437\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.BAM=\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u0440\u043a\u0430 \u0411\u043e\u0441\u043d\u0456\u0457 \u0456 \u0413\u0435\u0440\u0446\u043e\u0433\u043e\u0432\u0438\u043d\u0438
+currenciesDisplayName.ESP=\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
currenciesDisplayName.KRW=\u0412\u043e\u043d\u0430 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e\u0457 \u041a\u043e\u0440\u0435\u0457
+currenciesDisplayName.NLG=\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
+currenciesDisplayName.MRO=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0430 \u0443\u0433\u0456\u044f
+currenciesDisplayName.BAD=\u0414\u0438\u043d\u0430\u0440 \u0411\u043e\u0441\u043d\u0456\u0457 \u0456 \u0413\u0435\u0446\u043e\u0433\u043e\u0432\u0438\u043d\u0438
+currenciesDisplayName.ZWD=\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesDisplayName.SEK=\u0428\u0432\u0435\u0434\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
+currenciesDisplayName.CSK=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430 \u0442\u0432\u0435\u0440\u0434\u0430 \u043a\u0440\u043e\u043d\u0430
currenciesDisplayName.BYR=\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.BYL=\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1992-1994)
-currenciesDisplayName.CSC=\u0427\u0435\u0445\u043e\u0441\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.KRO=\u0421\u0442\u0430\u0440\u0430 \u0432\u043e\u043d\u0430 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e\u0457 \u041a\u043e\u0440\u0435\u0457
-currenciesDisplayName.BYB=\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1994-1999)
-currenciesDisplayName.SQS=\u0421\u043e\u043c\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.GRN=\u0413\u0440\u0435\u0446\u044c\u043a\u0430 \u043d\u043e\u0432\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
+currenciesDisplayName.IRR=\u0406\u0440\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
currenciesDisplayName.PKR=\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.AFN=\u0410\u0444\u0433\u0430\u043d\u0456
-currenciesDisplayName.ZWD=\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.LKR=\u0428\u0440\u0456-\u043b\u0430\u043d\u043a\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.GRD=\u0413\u0440\u0435\u0446\u044c\u043a\u0430 \u0434\u0440\u0430\u0445\u043c\u0430
-currenciesDisplayName.IEP=\u0406\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.AFA=\u0410\u0444\u0433\u0430\u043d\u0456 (1927-2002)
-currenciesDisplayName.YDD=\u0404\u043c\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.RWF=\u0420\u0443\u0430\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.CRC=\u041a\u043e\u0441\u0442\u0430-\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u043e\u043d
-currenciesDisplayName.TJS=\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0438\u0439 \u0441\u043e\u043c\u043e\u043d\u0456
-currenciesDisplayName.TJR=\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.EEK=\u0415\u0441\u0442\u043e\u043d\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.MDR=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u0435\u0432\u0438\u0439 \u043a\u0443\u043f\u043e\u043d
-currenciesDisplayName.HKD=\u0413\u043e\u043d\u043a\u043e\u043d\u0433\u0456\u0432\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.DKK=\u0414\u0430\u0442\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.MDL=\u041c\u043e\u043b\u0434\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u0439
-currenciesDisplayName.GQF=\u0424\u0440\u0430\u043d\u043a \u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0456\u0430\u043b\u044c\u043d\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
-currenciesDisplayName.IDR=\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.AED=\u0414\u0438\u0440\u0445\u0435\u043c \u041e\u0410\u0415
-currenciesDisplayName.KPW=\u0412\u043e\u043d\u0430 \u041f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0457 \u041a\u043e\u0440\u0435\u0457
-currenciesDisplayName.IDN=\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u0439\u0441\u044c\u043a\u0430 \u043d\u043e\u0432\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.BWP=\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0441\u044c\u043a\u0430 \u043f\u0443\u043b\u0430
-currenciesDisplayName.VUV=\u0412\u0430\u043d\u0443\u0430\u0442\u0441\u044c\u043a\u0430 \u0432\u0430\u0442\u0443
-currenciesDisplayName.XID=\u0406\u0441\u043b\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.SOS=\u0421\u043e\u043c\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0448\u0438\u043b\u0456\u043d\u0433
-currenciesDisplayName.ADP=\u0410\u043d\u0434\u043e\u0440\u0440\u0441\u044c\u043a\u0430 \u043f\u0435\u0441\u0435\u0442\u0430
-currenciesDisplayName.RUR=\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c (1991-1998)
-currenciesDisplayName.GPF=\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.DJF=\u0424\u0440\u0430\u043d\u043a \u0414\u0436\u0456\u0431\u0443\u0442\u0456
-currenciesDisplayName.ADD=\u0410\u043d\u0434\u043e\u0440\u0440\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.MCF=\u041c\u043e\u043d\u0430\u043a\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.ECV=\u0415\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u044c\u043a\u0438\u0439 UV\u0421
-currenciesDisplayName.ECS=\u0415\u043a\u0432\u0430\u0434\u043e\u0440\u0441\u044c\u043a\u0435 \u0441\u0443\u043a\u0440\u0435
-currenciesDisplayName.LIF=\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.RUB=\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.PHP=\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.UZS=\u0423\u0437\u0431\u0435\u0446\u044c\u043a\u0438\u0439 \u0441\u0443\u043c
-currenciesDisplayName.COP=\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.THB=\u0422\u0430\u0457\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0438\u0439 \u0431\u0430\u0442
-currenciesDisplayName.IBP=\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0456\u0440\u043b\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BUR=\u0411\u0456\u0440\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.COF=\u041a\u043e\u043d\u0433\u043e\u043b\u0435\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BUK=\u0411\u0456\u0440\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u0456\u0430\u0442
-currenciesDisplayName.COB=\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0430\u043f\u0435\u0440\u043e\u0432\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.UAK=\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0438\u0439 \u043a\u0430\u0440\u0431\u043e\u0432\u0430\u043d\u0435\u0446\u044c
-currenciesDisplayName.QAR=\u041a\u0430\u0442\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
-currenciesDisplayName.UAH=\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 \u0433\u0440\u0438\u0432\u043d\u044f
-currenciesDisplayName.GNS=\u0413\u0432\u0456\u043d\u0435\u0439\u0441\u044c\u043a\u0435 \u0441\u0456\u043b\u0456
-currenciesDisplayName.CNY=\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0438\u0439 \u044e\u0430\u043d\u044c
-currenciesDisplayName.MZM=\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u0446\u044c\u043a\u0438\u0439 \u043c\u0435\u0442\u0438\u043a\u0430\u043b
-currenciesDisplayName.UYU=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.GNI=\u0413\u0432\u0456\u043d\u0435\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a (1960-1972)
-currenciesDisplayName.SML=\u041b\u0456\u0440\u0430 \u0421\u0430\u043d-\u041c\u0430\u0440\u0438\u043d\u043e
-currenciesDisplayName.MZE=\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u0446\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.PGK=\u041a\u0456\u043d\u0430 \u041f\u0430\u043f\u0443\u0430 \u041d\u043e\u0432\u043e\u0457 \u0413\u0432\u0456\u043d\u0435\u0457
-currenciesDisplayName.OMS=\u041e\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b \u0441\u0430\u0457\u0434\u0456
-currenciesDisplayName.GNF=\u0413\u0432\u0456\u0439\u043d\u0435\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.UYP=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e (1975-1993)
-currenciesDisplayName.OMR=\u041e\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440\u0456\u0430\u043b
-currenciesDisplayName.XFU=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a UIC
-currenciesDisplayName.ZRZ=\u0417\u0430\u0457\u0440\u0441\u044c\u043a\u0438\u0439 \u0437\u0430\u0457\u0440
-currenciesDisplayName.BTR=\u0411\u0443\u0442\u0430\u043d\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.MAF=\u041c\u0430\u0440\u043e\u043a\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MAD=\u041c\u0430\u0440\u043e\u043a\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u0440\u0445\u0435\u043c
-currenciesDisplayName.XFO=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0437\u043e\u043b\u043e\u0442\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BTN=\u0411\u0443\u0442\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u0433\u0443\u043b\u0442\u0440\u0443\u043c
-currenciesDisplayName.UYF=\u0423\u0440\u0443\u0433\u0432\u0430\u0439\u0441\u044c\u043a\u0435 \u0441\u0438\u043b\u044c\u043d\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.ZRN=\u0417\u0430\u0457\u0440\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0437\u0430\u0457\u0440
-currenciesDisplayName.MYR=\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0440\u0438\u043d\u0433\u0456\u0442
-currenciesDisplayName.AZM=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043c\u0430\u043d\u0430\u0442
-currenciesDisplayName.GMP=\u0413\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.KMF=\u041a\u043e\u043c\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.SLL=\u041b\u0435\u043e\u043d\u0435 \u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435
-currenciesDisplayName.GMD=\u0413\u0430\u043c\u0431\u0456\u0439\u0441\u044c\u043a\u0430 \u0434\u0430\u043b\u0430\u0441\u0456
-currenciesDisplayName.XEU=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0432\u0430\u043b\u044e\u0442\u043d\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f
-currenciesDisplayName.BSP=\u0411\u0430\u0433\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.CMF=\u041a\u0430\u043c\u0435\u0440\u0443\u043d\u0441\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.MXV=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0438\u0439 UDI
-currenciesDisplayName.XEF=\u0424\u0440\u0430\u043d\u043a \u041a\u0424\u0410 BCEAEC
-currenciesDisplayName.BSD=\u0411\u0430\u0433\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
-currenciesDisplayName.MXP=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u0441\u0440\u0456\u0431\u043d\u0435 \u043f\u0435\u0441\u043e (1861-1992)
-currenciesDisplayName.MXN=\u041c\u0435\u043a\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.PES=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0441\u043e\u043b
-currenciesDisplayName.GLK=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.BRZ=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e (1942-1967)
-currenciesDisplayName.PEN=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0441\u043e\u043b
-currenciesDisplayName.CLP=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0435 \u043f\u0435\u0441\u043e
-currenciesDisplayName.SKK=\u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.PEI=\u041f\u0435\u0440\u0443\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0456\u043d\u0442\u0456
-currenciesDisplayName.BRR=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e
-currenciesDisplayName.XDR=\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0456 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u043f\u043e\u0437\u0438\u0447\u0435\u043d\u043d\u044f
-currenciesDisplayName.FRF=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043d\u043a
-currenciesDisplayName.BRN=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043d\u043e\u0432\u0435 \u043a\u0440\u0443\u0437\u0430\u0434\u043e
-currenciesDisplayName.CLF=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 UF
-currenciesDisplayName.CLE=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0435\u0441\u043a\u0443\u0434\u043e
-currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0440\u0435\u0430\u043b
-currenciesDisplayName.CLC=\u0427\u0438\u043b\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043d\u0434\u043e\u0440
-currenciesDisplayName.BRE=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e (1990-1993)
-currenciesDisplayName.MWP=\u041c\u0430\u043b\u0430\u0432\u0456\u0439\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.BRC=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043a\u0440\u0443\u0437\u0430\u0434\u043e
-currenciesDisplayName.BRB=\u0411\u0440\u0430\u0437\u0438\u043b\u044c\u0441\u044c\u043a\u0435 \u043d\u043e\u0432\u0435 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e (1967-1986)
-currenciesDisplayName.MWK=\u041c\u0430\u043b\u0430\u0432\u0456\u0439\u0441\u044c\u043a\u0430 \u043a\u0432\u0430\u0447\u0430
-currenciesDisplayName.PDR=\u041f\u0440\u0438\u0434\u043d\u0456\u0441\u0442\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.DEM=\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430 \u043c\u0430\u0440\u043a\u0430
-currenciesDisplayName.TDF=\u0424\u0440\u0430\u043d\u043a \u0427\u0430\u0434\u0443
-currenciesDisplayName.PDN=\u041f\u0440\u0438\u0434\u043d\u0456\u0441\u0442\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0440\u0443\u0431\u043b\u044c
-currenciesDisplayName.PDK=\u041f\u0440\u0438\u0434\u043d\u0456\u0441\u0442\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u0435\u0432\u0438\u0439 \u043a\u0443\u043f\u043e\u043d
-currenciesDisplayName.NPR=\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.CKD=\u0414\u043e\u043b\u0430\u0440 \u041e\u0441\u0442\u0440\u043e\u0432\u0456\u0432 \u041a\u0443\u043a\u0430
-currenciesDisplayName.JPY=\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430 \u0454\u043d\u0430
-currenciesDisplayName.MVR=\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0440\u0443\u0444\u0456\u044f
-currenciesDisplayName.XCF=\u041d\u043e\u0432\u0438\u0439 \u0444\u0440\u0430\u043d\u043a \u041a\u0424\u0410
-currenciesDisplayName.MVP=\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.XCD=\u0414\u043e\u043b\u0430\u0440 \u0421\u0445\u0456\u0434\u043d\u0438\u0445 \u041a\u0438\u0440\u0438\u0431\u0456\u0432
-currenciesDisplayName.SIT=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u044c\u043a\u0438\u0439 \u0442\u043e\u043b\u0430\u0440
-currenciesDisplayName.YUR=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u0440\u0435\u0444\u043e\u0440\u043c\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.AWG=\u0410\u0440\u0443\u0431\u0441\u044c\u043a\u0438\u0439 \u0433\u0443\u043b\u044c\u0434\u0435\u043d
-currenciesDisplayName.YUO=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u0436\u043e\u0432\u0442\u043d\u0435\u0432\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.YUN=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.YUM=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.TCC=\u041a\u0440\u043e\u043d\u0430 \u0422\u0435\u0440\u043a\u0441\u0430 \u0456 \u041a\u0430\u0439\u043a\u043e\u0441\u0430
-currenciesDisplayName.YUG=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u0440 1994
-currenciesDisplayName.YUF=\u0414\u0438\u043d\u0430\u0440 \u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u043e\u0457 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0456\u0457
-currenciesDisplayName.RON=\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u043b\u0435\u0439
-currenciesDisplayName.YUD=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0441\u044c\u043a\u0438\u0439 \u0442\u0432\u0435\u0440\u0434\u0438\u0439 \u0434\u0438\u043d\u0430\u0440
-currenciesDisplayName.ROL=\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0438\u0439 \u043b\u0435\u0439
-currenciesDisplayName.NOK=\u041d\u043e\u0440\u0432\u0435\u0437\u044c\u043a\u0430 \u043a\u0440\u043e\u043d\u0430
-currenciesDisplayName.MUR=\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439\u0441\u044c\u043a\u0430 \u0440\u0443\u043f\u0456\u044f
-currenciesDisplayName.XBD=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f (XBD)
-currenciesDisplayName.GIP=\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u044c\u043a\u0438\u0439 \u0444\u0443\u043d\u0442
-currenciesDisplayName.VNS=\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0438\u0439 \u0434\u043e\u043d\u0433
-currenciesDisplayName.XBC=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f (XBC)
-currenciesDisplayName.VNR=\u0414\u043e\u043d\u0433 \u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u043e\u0457 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0438
-currenciesDisplayName.XBB=\u0404\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430 \u0433\u0440\u043e\u0448\u043e\u0432\u0430 \u043e\u0434\u0438\u043d\u0438\u0446\u044f
-currenciesDisplayName.KID=\u0414\u043e\u043b\u0430\u0440 \u041a\u0456\u0440\u0438\u0431\u0430\u0442\u0456
-currenciesDisplayName.SHP=\u0424\u0443\u043d\u0442 \u0421\u0432\u044f\u0442\u043e\u0457 \u0404\u043b\u0435\u043d\u0438
-currenciesDisplayName.VNN=\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0438\u0439 \u043d\u043e\u0432\u0438\u0439 \u0434\u043e\u043d\u0433
-currenciesSymbol.JOD=JD
-currenciesSymbol.BOV=BOV
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LL
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=T Sh
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=CR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.XAF=XAF
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=Bs
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=Lm
-currenciesSymbol.AUD=$A
-currenciesSymbol.GHC=GHC
-currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=som
-currenciesSymbol.CHF=SwF
-currenciesSymbol.ATS=ATS
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=Br
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DA
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=J$
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LD
-currenciesSymbol.BMD=Ber$
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=UM
-currenciesSymbol.IRR=RI
-currenciesSymbol.SEK=SKr
-currenciesSymbol.ERN=ERN
+currenciesDisplayName.BMD=\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u044c\u043a\u0438\u0439 \u0434\u043e\u043b\u0430\u0440
+currenciesSymbol.BGL=lev
+currenciesSymbol.XCD=EC$
currenciesSymbol.KES=K Sh
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=Arg$
-currenciesSymbol.ARP=ARP
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
+currenciesSymbol.LKR=SL Re
+currenciesSymbol.CYP=\u00a3C
+currenciesSymbol.BYR=Rbl
+currenciesSymbol.MKD=MDen
+currenciesSymbol.VUV=VT
+currenciesSymbol.MWK=MK
+currenciesSymbol.BMD=Ber$
+currenciesSymbol.SCR=SR
+currenciesSymbol.IEP=IR\u00a3
+currenciesSymbol.AMD=dram
+currenciesSymbol.TOP=T$
+currenciesSymbol.NPR=Nrs
+currenciesSymbol.SOS=So. Sh.
+currenciesSymbol.CLP=Ch$
+currenciesSymbol.KWD=KD
currenciesSymbol.GEL=lari
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
+currenciesSymbol.AFN=Af
+currenciesSymbol.ZAR=R
+currenciesSymbol.ROL=leu
currenciesSymbol.IQD=ID
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=F$
-currenciesSymbol.NIO=NIO
-currenciesSymbol.MOP=MOP
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.XTR=XTR
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
+currenciesSymbol.HKD=HK$
+currenciesSymbol.ARS=Arg$
+currenciesSymbol.BRL=R$
+currenciesSymbol.ALL=lek
+currenciesSymbol.CRC=C
+currenciesSymbol.IDR=Rp
+currenciesSymbol.RUB=\u0440\u0443\u0431.
+currenciesSymbol.DKK=DKr
+currenciesSymbol.TZS=T Sh
currenciesSymbol.SBD=SI$
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.MNT=Tug
-currenciesSymbol.HUF=Ft
-currenciesSymbol.BIF=Fbu
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
+currenciesSymbol.NOK=NKr
+currenciesSymbol.UGX=U Sh
+currenciesSymbol.BEF=BF
currenciesSymbol.TTD=TT$
currenciesSymbol.SZL=E
-currenciesSymbol.NHF=NHF
+currenciesSymbol.STD=Db
+currenciesSymbol.UAH=UAH
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.INR=INR
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=T
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=LS
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=NA f.
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.LSL=M
-currenciesSymbol.GAF=GAF
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=Can$
-currenciesSymbol.BGL=lev
-currenciesSymbol.TRL=TL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=\u00a3C
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=G$
-currenciesSymbol.AMD=dram
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=Be
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=lek
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MDen
-currenciesSymbol.TPP=TPP
-currenciesSymbol.XPF=CFPF
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
+currenciesSymbol.FJD=F$
+currenciesSymbol.UYU=Ur$
currenciesSymbol.BDT=Tk
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=T$
-currenciesSymbol.XOF=XOF
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
+currenciesSymbol.QAR=QR
+currenciesSymbol.LBP=LL
+currenciesSymbol.MNT=Tug
+currenciesSymbol.DJF=DF
+currenciesSymbol.JOD=JD
+currenciesSymbol.SGD=S$
+currenciesSymbol.KHR=CR
+currenciesSymbol.SYP=LS
+currenciesSymbol.MTL=Lm
+currenciesSymbol.MZM=Mt
+currenciesSymbol.YER=YRl
currenciesSymbol.CVE=CVEsc
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=R
+currenciesSymbol.HUF=Ft
+currenciesSymbol.NZD=$NZ
+currenciesSymbol.OMR=RO
+currenciesSymbol.KZT=T
+currenciesSymbol.INR=INR
currenciesSymbol.DOP=RD$
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=U Sh
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=Db
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
+currenciesSymbol.NAD=N$
+currenciesSymbol.TRL=TL
+currenciesSymbol.COP=Col$
currenciesSymbol.HNL=L
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
+currenciesSymbol.KGS=som
+currenciesSymbol.ZWD=Z$
+currenciesSymbol.MYR=RM
+currenciesSymbol.SRG=Sf
currenciesSymbol.GTQ=Q
-currenciesSymbol.NZD=$NZ
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BDS$
-currenciesSymbol.NAD=N$
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.BAM=KM
-currenciesSymbol.BZD=BZ$
-currenciesSymbol.BAD=BAD
+currenciesSymbol.BIF=Fbu
currenciesSymbol.PLN=Zl
-currenciesSymbol.YER=YRl
-currenciesSymbol.SRG=Sf
-currenciesSymbol.CSK=CSK
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BYR=Rbl
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=Pra
-currenciesSymbol.AFN=Af
-currenciesSymbol.ZWD=Z$
-currenciesSymbol.LKR=SL Re
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IR\u00a3
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=C
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKr
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.IDR=Rp
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.VUV=VT
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=So. Sh.
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=Col$
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=Y
-currenciesSymbol.MZM=Mt
-currenciesSymbol.UYU=Ur$
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
currenciesSymbol.GNF=GF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=RO
-currenciesSymbol.XFU=XFU
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.BTR=BTR
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.XFO=XFO
-currenciesSymbol.BTN=Nu
-currenciesSymbol.UYF=UYF
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.MYR=RM
-currenciesSymbol.AZM=AZM
-currenciesSymbol.GMP=GMP
+currenciesSymbol.LSL=M
+currenciesSymbol.VEB=Be
+currenciesSymbol.BOB=Bs
+currenciesSymbol.CNY=Y
currenciesSymbol.KMF=CF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.MXV=MXV
-currenciesSymbol.XEF=XEF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MEX$
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=Ch$
+currenciesSymbol.SEK=SKr
+currenciesSymbol.AUD=$A
+currenciesSymbol.LYD=LD
+currenciesSymbol.JMD=J$
currenciesSymbol.SKK=Sk
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=R$
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.TDF=TDF
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=Nrs
-currenciesSymbol.CKD=CKD
-currenciesSymbol.MVR=MVR
-currenciesSymbol.XCF=XCF
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=EC$
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=leu
-currenciesSymbol.NOK=NKr
-currenciesSymbol.MUR=MUR
-currenciesSymbol.XBD=XBD
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.XBC=XBC
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
+currenciesSymbol.CHF=SwF
+currenciesSymbol.ETB=Br
+currenciesSymbol.MRO=UM
+currenciesSymbol.BBD=BDS$
+currenciesSymbol.PKR=Pra
+currenciesSymbol.XPF=CFPF
+currenciesSymbol.TWD=NT$
+currenciesSymbol.BHD=BD
+currenciesSymbol.BTN=Nu
+currenciesSymbol.MXN=MEX$
+currenciesSymbol.DZD=DA
+currenciesSymbol.ANG=NA f.
+currenciesSymbol.BZD=BZ$
+currenciesSymbol.IRR=RI
+currenciesSymbol.GYD=G$
+currenciesSymbol.BAM=KM
+currenciesSymbol.CAD=Can$
shortMonths=\u0421\u0456\u0447®\u041b\u044e\u0442®\u0411\u0435\u0440®\u041a\u0432\u0456®\u0422\u0440\u0430®\u0427\u0435\u0440®\u041b\u0438\u043f®\u0421\u0435\u0440®\u0412\u0435\u0440®\u0416\u043e\u0432®\u041b\u0438\u0441®\u0413\u0440\u0443®®
months=\u0421\u0456\u0447\u0435\u043d\u044c®\u041b\u044e\u0442\u0438\u0439®\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c®\u041a\u0432\u0456\u0442\u0435\u043d\u044c®\u0422\u0440\u0430\u0432\u0435\u043d\u044c®\u0427\u0435\u0440\u0432\u0435\u043d\u044c®\u041b\u0438\u043f\u0435\u043d\u044c®\u0421\u0435\u0440\u043f\u0435\u043d\u044c®\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c®\u0416\u043e\u0432\u0442\u0435\u043d\u044c®\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434®\u0413\u0440\u0443\u0434\u0435\u043d\u044c®®
shortWeekdays=®\u041d\u0434®\u041f\u043d®\u0412\u0442®\u0421\u0440®\u0427\u0442®\u041f\u0442®\u0421\u0431®
@@ -731,7 +378,9 @@ territories.GN=\u0413\u0432\u0456\u043d\u0435\u044f
territories.GM=\u0413\u0430\u043c\u0431\u0456\u044f
territories.GL=\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0456\u044f
territories.SV=\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440
+territories.062=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e-\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430 \u0410\u0437\u0456\u044f
territories.ST=\u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f\u0456
+territories.061=\u041f\u043e\u043b\u0456\u043d\u0435\u0437\u0456\u044f
territories.GI=\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440
territories.GH=\u0413\u0430\u043d\u0430
territories.SR=\u0421\u0443\u0440\u0438\u043d\u0430\u043c
@@ -755,9 +404,12 @@ territories.SC=\u0421\u0435\u0439\u0448\u0435\u043b\u0438
territories.SB=\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.SA=\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0432\u0456\u044f
territories.FR=\u0424\u0440\u0430\u043d\u0446\u0456\u044f
+territories.057=\u041c\u0456\u043a\u0440\u043e\u043d\u0435\u0437\u0456\u044f
territories.FO=\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.FM=\u041c\u0456\u043a\u0440\u043e\u043d\u0435\u0437\u0456\u044f
territories.RW=\u0420\u0443\u0430\u043d\u0434\u0430
+territories.054=\u041c\u0435\u043b\u0430\u043d\u0435\u0437\u0456\u044f
+territories.053=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f \u0442\u0430 \u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f
territories.FK=\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 (\u041c\u0430\u043b\u044c\u0432\u0456\u043d\u0438)
territories.RU=\u0420\u043e\u0441\u0456\u044f
territories.FJ=\u0424\u0456\u0434\u0436\u0456
@@ -767,20 +419,26 @@ territories.RE=\u0420\u0435\u044e\u043d\u044c\u0439\u043e\u043d
territories.ET=\u0415\u0444\u0456\u043e\u043f\u0456\u044f
territories.ES=\u0406\u0441\u043f\u0430\u043d\u0456\u044f
territories.ER=\u0415\u0440\u0438\u0442\u0440\u0435\u044f
+territories.833=\u041e\u0441\u0442\u0440\u0456\u0432 \u041c\u0435\u043d
territories.EH=\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430
territories.EG=\u0404\u0433\u0438\u043f\u0435\u0442
+territories.830=\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041b\u0430-\u041c\u0430\u043d\u0448\u0443
territories.EE=\u0415\u0441\u0442\u043e\u043d\u0456\u044f
+territories.QO=\u0406\u043d\u0448\u0430 \u041e\u043a\u0435\u0430\u043d\u0456\u044f
territories.EC=\u0415\u043a\u0432\u0430\u0434\u043e\u0440
territories.DZ=\u0410\u043b\u0436\u0438\u0440
territories.QA=\u041a\u0430\u0442\u0430\u0440
+territories.039=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0404\u0432\u0440\u043e\u043f\u0430
territories.DO=\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430
territories.PY=\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439
+territories.035=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e-\u0421\u0445\u0456\u0434\u043d\u0430 \u0410\u0437\u0456\u044f
territories.DM=\u0414\u043e\u043c\u0456\u043d\u0456\u043a
territories.PW=\u041f\u0430\u043b\u0430\u0443
territories.DK=\u0414\u0430\u043d\u0456\u044f
territories.DJ=\u0414\u0436\u0456\u0431\u0443\u0442\u0456
territories.PT=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f
territories.PS=\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0430
+territories.030=\u0421\u0445\u0456\u0434\u043d\u0430 \u0410\u0437\u0456\u044f
territories.PR=\u041f\u0443\u0435\u0440\u0442\u043e-\u0420\u0456\u043a\u043e
territories.DE=\u041d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430
territories.PN=\u041f\u0456\u0442\u043a\u0435\u0440\u043d
@@ -798,12 +456,14 @@ territories.CV=\u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435
territories.PA=\u041f\u0430\u043d\u0430\u043c\u0430
territories.CU=\u041a\u0443\u0431\u0430
territories.CR=\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430
+territories.029=\u041a\u0430\u0440\u0438\u0431\u0438
territories.CO=\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u044f
territories.CN=\u041a\u0438\u0442\u0430\u0439
territories.CM=\u041a\u0430\u043c\u0435\u0440\u0443\u043d
territories.CL=\u0427\u0438\u043b\u0456
territories.CK=\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0443\u043a\u0430
territories.CI=\u041a\u043e\u0442-\u0434\u2019\u0406\u0432\u0443\u0430\u0440
+territories.021=\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.CH=\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f
territories.CG=\u041a\u043e\u043d\u0433\u043e
territories.CF=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430
@@ -818,13 +478,20 @@ territories.BV=\u0411\u0443\u0432\u0435, \u043e\u0441\u0442\u0440\u0456\u0432
territories.BT=\u0411\u0443\u0442\u0430\u043d
territories.BS=\u0411\u0430\u0433\u0430\u043c\u0438
territories.BR=\u0411\u0440\u0430\u0437\u0438\u043b\u0456\u044f
+territories.019=\u0410\u043c\u0435\u0440\u0438\u043a\u0438
+territories.018=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.NZ=\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f
territories.BO=\u0411\u043e\u043b\u0456\u0432\u0456\u044f
+territories.017=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.BN=\u0411\u0440\u0443\u043d\u0435\u0439
territories.BM=\u0411\u0435\u0440\u043c\u0443\u0434\u0438
+territories.015=\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.014=\u0421\u0445\u0456\u0434\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
+territories.013=\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.NU=\u041d\u0456\u044f
territories.BJ=\u0411\u0435\u043d\u0456\u043d
territories.BI=\u0411\u0443\u0440\u0443\u043d\u0434\u0456
+territories.011=\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430
territories.BH=\u0411\u0430\u0445\u0440\u0435\u0439\u043d
territories.NR=\u041d\u0430\u0443\u0440\u0443
territories.BG=\u0411\u043e\u043b\u0433\u0430\u0440\u0456\u044f
@@ -842,6 +509,7 @@ territories.NG=\u041d\u0456\u0433\u0435\u0440\u0456\u044f
territories.NF=\u041e\u0441\u0442\u0440\u0456\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a
territories.AZ=\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d
territories.NE=\u041d\u0456\u0433\u0435\u0440
+territories.AX=\u0410\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.NC=\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u044f
territories.AW=\u0410\u0440\u0443\u0431\u0430
territories.ZM=\u0417\u0430\u043c\u0431\u0456\u044f
@@ -850,19 +518,23 @@ territories.AU=\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f
territories.AT=\u0410\u0432\u0441\u0442\u0440\u0456\u044f
territories.AS=\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u0421\u0430\u043c\u043e\u0430
territories.AR=\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430
+territories.009=\u041e\u043a\u0435\u0430\u043d\u0456\u044f
territories.AQ=\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430
territories.MZ=\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u043a
territories.AO=\u0410\u043d\u0433\u043e\u043b\u0430
territories.MY=\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f
territories.AN=\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u0410\u043d\u0442\u0456\u043b\u044c\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.MX=\u041c\u0435\u043a\u0441\u0438\u043a\u0430
+territories.005=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0410\u043c\u0435\u0440\u0438\u043a\u0430
territories.AM=\u0412\u0456\u0440\u043c\u0435\u043d\u0456\u044f
territories.MW=\u041c\u0430\u043b\u0430\u0432\u0456
territories.AL=\u0410\u043b\u0431\u0430\u043d\u0456\u044f
territories.MV=\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0438
territories.ZA=\u041f\u0410\u0420
territories.MU=\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439
+territories.002=\u0410\u0444\u0440\u0438\u043a\u0430
territories.MT=\u041c\u0430\u043b\u044c\u0442\u0430
+territories.001=\u0421\u0432\u0456\u0442
territories.AI=\u0410\u043d\u0433\u0456\u043b\u044c\u044f
territories.MS=\u041c\u043e\u043d\u0441\u0435\u0440\u0440\u0430\u0442
territories.MR=\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0456\u044f
@@ -877,7 +549,6 @@ territories.MN=\u041c\u043e\u043d\u0433\u043e\u043b\u0456\u044f
territories.MM=\u041c\u02bc\u044f\u043d\u043c\u0430
territories.ML=\u041c\u0430\u043b\u0456
territories.MK=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f
-territories.YU=\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0456\u044f
territories.YT=\u041c\u0430\u0439\u043e\u0442
territories.MH=\u041c\u0430\u0440\u0448\u0430\u043b\u043b\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438
territories.MG=\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440
@@ -887,10 +558,14 @@ territories.MA=\u041c\u0430\u0440\u043e\u043a\u043a\u043e
territories.YE=\u0404\u043c\u0435\u043d
territories.LY=\u041b\u0456\u0432\u0456\u044f
territories.LV=\u041b\u0430\u0442\u0432\u0456\u044f
+territories.155=\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0404\u0432\u0440\u043e\u043f\u0430
territories.LU=\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433
+territories.154=\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0404\u0432\u0440\u043e\u043f\u0430
territories.LT=\u041b\u0438\u0442\u0432\u0430
territories.LS=\u041b\u0435\u0441\u043e\u0442\u043e
territories.LR=\u041b\u0456\u0431\u0435\u0440\u0456\u044f
+territories.151=\u0421\u0445\u0456\u0434\u043d\u0430 \u0404\u0432\u0440\u043e\u043f\u0430
+territories.150=\u0404\u0432\u0440\u043e\u043f\u0430
territories.LK=\u0428\u0440\u0456-\u041b\u0430\u043d\u043a\u0430
territories.LI=\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d
territories.LC=\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0456\u044f
@@ -899,6 +574,8 @@ territories.LA=\u041b\u0430\u043e\u0441
territories.KZ=\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d
territories.KY=\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438
territories.KW=\u041a\u0443\u0432\u0435\u0439\u0442
+territories.145=\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0410\u0437\u0456\u044f
+territories.142=\u0410\u0437\u0456\u044f
territories.KR=\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u041a\u043e\u0440\u0435\u044f
territories.KP=\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041a\u043e\u0440\u0435\u044f
territories.KN=\u0421\u0435\u043d\u0442-\u041a\u0456\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441
@@ -951,8 +628,8 @@ territories.TM=\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u043
languages.es=\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430
languages.ku=\u041a\u0443\u0440\u0434\u0441\u044c\u043a\u0430
languages.eo=\u0415\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e
-languages.ks=\u041a\u0430\u0448\u043c\u0456\u0440\u0441\u044c\u043a\u0430
languages.en=\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430
+languages.ks=\u041a\u0430\u0448\u043c\u0456\u0440\u0441\u044c\u043a\u0430
languages.el=\u0413\u0440\u0435\u0446\u044c\u043a\u0430
languages.qu=\u041a\u0435\u0447\u0443\u0430
languages.ko=\u041a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430
@@ -975,8 +652,8 @@ languages.vi=\u0412\u02bc\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0430
languages.cy=\u0412\u0430\u043b\u043b\u0456\u0439\u0441\u044c\u043a\u0430
languages.pa=\u041f\u0430\u043d\u0434\u0436\u0430\u0431\u0456
languages.cs=\u0427\u0435\u0441\u044c\u043a\u0430
-languages.it=\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430
languages.co=\u041a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430
+languages.it=\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430
languages.is=\u0406\u0441\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430
languages.uz=\u0423\u0437\u0431\u0435\u0446\u044c\u043a\u0430
languages.or=\u041e\u0440\u0456\u044f
@@ -1048,12 +725,12 @@ languages.sr=\u0421\u0435\u0440\u0431\u0441\u044c\u043a\u0430
languages.sq=\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0430
languages.ml=\u041c\u0430\u043b\u0430\u0439\u044f\u043b\u0430\u043c
languages.ab=\u0410\u0431\u0445\u0430\u0437\u044c\u043a\u0430
-languages.mk=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0430
languages.aa=\u0410\u0444\u0430\u0440\u0441\u044c\u043a\u0430
+languages.mk=\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0430
languages.so=\u0421\u043e\u043c\u0430\u043b\u0456
languages.sn=\u0428\u043e\u043d\u0430
-languages.mi=\u041c\u0430\u043e\u0440\u0456
languages.gd=\u0413\u0430\u0435\u043b\u044c\u0441\u044c\u043a\u0430
+languages.mi=\u041c\u0430\u043e\u0440\u0456
languages.sm=\u0421\u0430\u043c\u043e\u0430\u043d\u0441\u044c\u043a\u0430
languages.sl=\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u044c\u043a\u0430
languages.mg=\u041c\u0430\u043b\u0430\u0433\u0430\u0441\u0456\u0439\u0441\u044c\u043a\u0430
@@ -1069,14 +746,14 @@ languages.fy=\u0424\u0440\u0438\u0437\u044c\u043a\u0430
languages.sa=\u0421\u0430\u043d\u0441\u043a\u0440\u0438\u0442
languages.fr=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430
languages.lv=\u041b\u0430\u0442\u0432\u0456\u0439\u0441\u044c\u043a\u0430
-languages.lt=\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0430
languages.fo=\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0430
+languages.lt=\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0430
languages.rw=\u041a\u0456\u043d\u0430\u0440\u0443\u0430\u043d\u0434\u0430
languages.ru=\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0430
-languages.lo=\u041b\u0430\u043e\u0441\u044c\u043a\u0430
languages.fj=\u0424\u0456\u0434\u0436\u0456
-languages.ln=\u041b\u0456\u043d\u0433\u0430\u043b\u0430
+languages.lo=\u041b\u0430\u043e\u0441\u044c\u043a\u0430
languages.fi=\u0424\u0456\u043d\u0441\u044c\u043a\u0430
+languages.ln=\u041b\u0456\u043d\u0433\u0430\u043b\u0430
languages.ro=\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0430
languages.rn=\u041a\u0456\u0440\u0443\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0430
languages.rm=\u0420\u0435\u0442\u0440\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0456 \u0434\u0456\u0430\u043b\u0435\u043a\u0442\u0438
@@ -1084,5 +761,5 @@ languages.fa=\u041f\u0435\u0440\u0441\u044c\u043a\u0430
languages.la=\u041b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0430
languages.xh=\u041a\u0445\u043e\u0441\u0430
languages.eu=\u0411\u0430\u0441\u043a\u0456\u0432
-languages.ky=\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0430
languages.et=\u0415\u0441\u0442\u043e\u043d\u0441\u044c\u043a\u0430
+languages.ky=\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0430
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ur.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ur.properties
index d38179b..a8bb439 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ur.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_ur.properties
@@ -5,7 +5,6 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.PKR=PKR
currenciesSymbol.PKR=Rs
territories.PK=\u067e\u0627\u06a9\u0633\u062a\u0627\u0646
languages.ur=\u0627\u0631\u062f\u0648
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz.properties
index ec1fa9e..3ffc7a8 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz.properties
@@ -7,7 +7,41 @@
decimalSeparator=,
groupingSeparator=\u00a0
-currenciesDisplayName.UZS=UZS
+currenciesDisplayName.INR=\u04b2\u0438\u043d\u0434 \u0440\u0443\u043f\u0438\u044f\u0441\u0438
+currenciesDisplayName.RUB=\u0420\u0443\u0441 \u0440\u0443\u0431\u043b\u0438
+currenciesDisplayName.JPY=\u042f\u043f\u043e\u043d \u0439\u0435\u043d\u0430\u0441\u0438
+currenciesDisplayName.BRL=\u0411\u0440\u0430\u0437\u0438\u043b \u0440\u0435\u0430\u043b\u0438
+currenciesDisplayName.UZS=\u040e\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u043e\u043d \u0441\u045e\u043c
+currenciesDisplayName.CNY=\u0425\u0438\u0442\u043e\u0439 \u044e\u0430\u043d\u0438
+currenciesDisplayName.USD=\u0410\u049a\u0428 \u0434\u043e\u043b\u043b\u0430\u0440\u0438
+currenciesDisplayName.EUR=\u0415\u0432\u0440\u043e
+currenciesDisplayName.GBP=\u0418\u043d\u0433\u043b\u0438\u0437 \u0444\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u0438
currenciesSymbol.UZS=\u0441\u045e\u043c
+shortMonths=\u042f\u043d\u0432®\u0424\u0435\u0432®\u041c\u0430\u0440®\u0410\u043f\u0440®\u041c\u0430\u0439®\u0418\u044e\u043d®\u0418\u044e\u043b®\u0410\u0432\u0433®\u0421\u0435\u043d®\u041e\u043a\u0442®\u041d\u043e\u044f®\u0414\u0435\u043a®®
+months=\u042f\u043d\u0432\u0430\u0440\u044c®\u0424\u0435\u0432\u0440\u0430\u043b\u044c®\u041c\u0430\u0440\u0442®\u0410\u043f\u0440\u0435\u043b\u044c®\u041c\u0430\u0439®\u0418\u044e\u043d\u044c®\u0418\u044e\u043b\u044c®\u0410\u0432\u0433\u0443\u0441\u0442®\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c®\u041e\u043a\u0442\u044f\u0431\u0440\u044c®\u041d\u043e\u044f\u0431\u0440\u044c®\u0414\u0435\u043a\u0430\u0431\u0440\u044c®®
+shortWeekdays=®\u042f\u043a\u0448®\u0414\u0443\u0448®\u0421\u0435\u0448®\u0427\u043e\u0440®\u041f\u0430\u0439®\u0416\u0443\u043c®\u0428\u0430\u043d®
+weekdays=®\u042f\u043a\u0448\u0430\u043d\u0431\u0430®\u0414\u0443\u0448\u0430\u043d\u0431\u0430®\u0421\u0435\u0448\u0430\u043d\u0431\u0430®\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430®\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430®\u0416\u0443\u043c\u0430®\u0428\u0430\u043d\u0431\u0430®
+territories.FR=\u0424\u0440\u0430\u043d\u0446\u0438\u044f
+territories.IN=\u04b2\u0438\u043d\u0434\u0438\u0441\u0442\u043e\u043d
+territories.CN=\u0425\u0438\u0442\u043e\u0439
+territories.AF=\u0410\u0444\u0493\u043e\u043d\u0438\u0441\u0442\u043e\u043d
+territories.DE=\u041e\u043b\u043c\u043e\u043d\u0438\u044f
+territories.GB=\u0411\u0438\u0440\u043b\u0430\u0448\u0433\u0430\u043d \u049a\u0438\u0440\u043e\u043b\u043b\u0438\u043a
+territories.BR=\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f
territories.UZ=\u040e\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u043e\u043d
+territories.RU=\u0420\u043e\u0441\u0441\u0438\u044f
+territories.JP=\u042f\u043f\u043e\u043d\u0438\u044f
+territories.US=\u049a\u045e\u0448\u043c\u0430 \u0428\u0442\u0430\u0442\u043b\u0430\u0440
+territories.IT=\u0418\u0442\u0430\u043b\u0438\u044f
+languages.zh=\u0425\u0438\u0442\u043e\u0439\u0447\u0430
+languages.en=\u0418\u043d\u0433\u043b\u0438\u0437\u0447\u0430
+languages.ru=\u0420\u0443\u0441\u0447\u0430
+languages.hi=\u04b2\u0438\u043d\u0434\u0447\u0430
+languages.ar=\u0410\u0440\u0430\u0431\u0447\u0430
+languages.it=\u0418\u0442\u0430\u043b\u044f\u043d\u0447\u0430
+languages.fr=\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0447\u0430
+languages.de=\u041e\u043b\u043c\u043e\u043d\u0447\u0430
+languages.es=\u0418\u0441\u043f\u0430\u043d\u0447\u0430
+languages.ja=\u042f\u043f\u043e\u043d\u0447\u0430
languages.uz=\u040e\u0437\u0431\u0435\u043a
+languages.pt=\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0447\u0430
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn_MN.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF_Arab.properties
index 7bcb6b8..6a58c5e 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_mn_MN.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF_Arab.properties
@@ -1,9 +1,8 @@
-# LocaleInformation_mn_MN.properties --
+# LocaleInformation_uz_AF_Arab.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.MNT=MNT
-currenciesSymbol.MNT=\u20ae
+firstDayOfWeek=sat
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Arab.properties
index 5f654ea..5a66a0f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_AF.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Arab.properties
@@ -1,4 +1,4 @@
-# LocaleInformation_uz_AF.properties --
+# LocaleInformation_uz_Arab.properties --
# Copyright (C) 1991-2005 Unicode, Inc.
# All rights reserved. Distributed under the Terms of Use
# in http://www.unicode.org/copyright.html.
@@ -11,7 +11,7 @@ minusSign=\u2212
zeroDigit=\u06f0
decimalSeparator=\u066b
groupingSeparator=\u066c
-currencyFormat=#,##0 \u00a4;-#,##0 \u00a4
+currencyFormat=#,##0.00 \u00a4;-#,##0.00 \u00a4
currenciesDisplayName.AFA=\u0627\u0641\u063a\u0627\u0646\u06cc
currenciesSymbol.AFA=\u0627\u0641\u063a\u0627\u0646\u06cc
shortMonths=\u062c\u0646\u0648®\u0641\u0628\u0631®\u0645\u0627\u0631®\u0627\u067e\u0631®\u0645\u0640\u06cc®\u062c\u0648\u0646®\u062c\u0648\u0644®\u0627\u06af\u0633®\u0633\u067e\u062a®\u0627\u06a9\u062a®\u0646\u0648\u0645®\u062f\u0633\u0645®®
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Latn.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Latn.properties
new file mode 100644
index 0000000..8d0c8c7
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_uz_Latn.properties
@@ -0,0 +1,45 @@
+# LocaleInformation_uz_Latn.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=Hind rupiyasi
+currenciesDisplayName.RUB=Rus rubli
+currenciesDisplayName.JPY=Yapon yenasi
+currenciesDisplayName.BRL=Brazil reali
+currenciesDisplayName.UZS=O\u02bfzbekiston so\u02bfm
+currenciesDisplayName.CNY=Xitoy yuani
+currenciesDisplayName.USD=AQSH dollari
+currenciesDisplayName.EUR=Evro
+currenciesDisplayName.GBP=Ingliz funt sterlingi
+currenciesSymbol.UZS=so\u02bfm
+shortMonths=Yanv®Fev®Mar®Apr®May®Iyun®Iyul®Avg®Sen®Okt®Noya®Dek®®
+months=Yanvar®Fevral®Mart®Aprel®May®Iyun®Iyul®Avgust®Sentyabr®Oktyabr®Noyabr®Dekabr®®
+shortWeekdays=®Yaksh®Dush®Sesh®Chor®Pay®Jum®Shan®
+weekdays=®Yakshanba®Dushanba®Seshanba®Chorshanba®Payshanba®Juma®Shanba®
+territories.FR=Frantsiya
+territories.IN=Hindiston
+territories.CN=Xitoy
+territories.AF=Afg\u02bfoniston
+territories.DE=Olmoniya
+territories.GB=Birlashgan Qirollik
+territories.BR=Braziliya
+territories.UZ=O\u02bfzbekiston
+territories.RU=Rossiya
+territories.JP=Yaponiya
+territories.US=Qo'shma Shtatlar
+territories.IT=Italiya
+languages.zh=Xitoycha
+languages.en=Inglizcha
+languages.ru=Ruscha
+languages.hi=Hindcha
+languages.ar=Arabcha
+languages.it=Italyancha
+languages.fr=Frantsuzcha
+languages.de=Olmoncha
+languages.es=Ispancha
+languages.ja=Yaponcha
+languages.uz=o\u02bfzbek
+languages.pt=Portugalcha
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_vi.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_vi.properties
index 7ccdba4..e8482ca 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_vi.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_vi.properties
@@ -57,8 +57,8 @@ territories.SA=A-r\u1eadp X\u00ea-\u00fat
territories.FR=Ph\u00e1p
territories.FM=Mi-cr\u00f4-n\u00ea-xi-a
territories.RW=Ru-an-\u0111a
-territories.RU=Nga
territories.FJ=Phi-gi
+territories.RU=Nga
territories.FI=Ph\u1ea7n Lan
territories.RO=Ru-ma-ni
territories.ET=\u00ca-ti-\u00f4-pi-a
@@ -80,11 +80,12 @@ territories.PK=Pa-ki-xtan
territories.PH=Phi-lip-pin
territories.PG=Pa-pu-a Niu Ghi-n\u00ea
territories.CZ=C\u1ed9ng h\u00f2a S\u00e9c
-territories.PE=P\u00ea-ru
territories.CY=S\u00edp
+territories.PE=P\u00ea-ru
territories.CV=C\u00e1p-ve
-territories.PA=Pa-na-ma
territories.CU=Cu Ba
+territories.PA=Pa-na-ma
+territories.CS=S\u00e9c-bia
territories.CR=C\u1ed1t-xta Ri-ca
territories.CO=C\u00f4-l\u00f4m-bi-a
territories.CN=Trung Qu\u1ed1c
@@ -101,51 +102,50 @@ territories.BY=B\u00ea-la-r\u00fat
territories.BW=B\u1ed1t-xoa-na
territories.BS=Ba-ha-ma
territories.BR=Bra-xin
-territories.NZ=Niu Di-l\u00e2n
territories.BO=B\u00f4-li-vi-a
+territories.NZ=Niu Di-l\u00e2n
territories.BN=Bru-n\u00e2y
territories.BJ=B\u00ea-nanh
territories.BI=Bu-run-\u0111i
territories.BH=Ba-ren
territories.BG=Bun-ga-ri
territories.BF=Bu\u1ed1c-ki-na Pha-x\u00f4
-territories.NP=N\u00ea-pan
territories.BE=B\u1ec9
-territories.NO=Na Uy
+territories.NP=N\u00ea-pan
territories.BD=B\u0103ng-la-\u0111\u00e9t
+territories.NO=Na Uy
territories.BB=B\u00e1c-ba-\u0111\u1ed1t
territories.ZW=Dim-ba-bu-\u00ea
-territories.NL=H\u00e0 Lan
territories.BA=B\u00f4-xni-a H\u00e9c-x\u00ea-g\u00f4-vi-na
+territories.NL=H\u00e0 Lan
territories.NI=Ni-ca-ra-goa
territories.NG=Ni-gi\u00ea-ri-a
territories.AZ=Ai-d\u00e9c-bai-gian
territories.NE=Ni-gi\u00ea
territories.ZM=D\u0103m-bi-a
-territories.AU=\u00dac
territories.NA=Nam-mi-bi-a
+territories.AU=\u00dac
territories.AT=\u00c1o
territories.AR=\u00c1c-hen-ti-na
-territories.MZ=M\u00f4-d\u0103m-b\u00edch
territories.AO=\u0102ng-g\u00f4-la
+territories.MZ=M\u00f4-d\u0103m-b\u00edch
territories.MY=Ma-lay-xi-a
-territories.MX=M\u00ea-hi-c\u00f4
territories.AM=\u00c1c-m\u00ea-ni-a
-territories.MW=Ma-la-uy
+territories.MX=M\u00ea-hi-c\u00f4
territories.AL=An-ba-ni
+territories.MW=Ma-la-uy
territories.MV=Man-\u0111i-v\u01a1
territories.ZA=Nam Phi
territories.MU=M\u00f4-ri-x\u01a1
territories.MT=Man-ta
-territories.MR=M\u00f4-ri-ta-ni
territories.AG=An-ti-gu-a v\u00e0 Ba-bu-\u0111a
+territories.MR=M\u00f4-ri-ta-ni
territories.AF=\u00c1p-ga-ni-xtan
territories.AE=C\u00e1c Ti\u1ec3u V\u01b0\u01a1ng qu\u1ed1c A-r\u1eadp Th\u1ed1ng nh\u1ea5t
territories.MN=M\u00f4ng C\u1ed5
territories.MM=Mi-an-ma
territories.ML=Ma-li
territories.MK=Ma-x\u00ea-\u0111\u00f4-ni-a
-territories.YU=Nam T\u01b0
territories.MH=Qu\u1ea7n \u0111\u1ea3o M\u00e1c-san
territories.MG=Ma-\u0111a-g\u00e1t-xca
territories.MD=M\u00f4n-\u0111\u00f4-va
@@ -233,8 +233,8 @@ languages.yi=Ti\u1ebfng Y-\u0111it
languages.sa=Ti\u1ebfng Ph\u1ea1n
languages.cs=Ti\u1ebfng S\u00e9c
languages.lv=Ti\u1ebfng L\u00e1t-vi-a
-languages.it=Ti\u1ebfng \u00dd
languages.fr=Ti\u1ebfng Ph\u00e1p
+languages.it=Ti\u1ebfng \u00dd
languages.is=Ti\u1ebfng Ai-x\u01a1-len
languages.uz=Ti\u1ebfng U-d\u01a1-b\u1ebfch
languages.lt=Ti\u1ebfng L\u00edt-va
@@ -250,8 +250,8 @@ languages.ia=Ti\u1ebfng Khoa H\u1ecdc Qu\u1ed1c T\u1ebf
languages.la=Ti\u1ebfng La-tinh
languages.hy=Ti\u1ebfng \u00c1c-m\u00ea-ni
languages.et=Ti\u1ebfng E-xt\u00f4-ni-a
-languages.hu=Ti\u1ebfng Hung-ga-ri
languages.es=Ti\u1ebfng T\u00e2y Ban Nha
+languages.hu=Ti\u1ebfng Hung-ga-ri
languages.bo=Ti\u1ebfng T\u00e2y T\u1ea1ng
languages.hr=Ti\u1ebfng Cr\u00f4-a-ti-a
languages.eo=Ti\u1ebfng Qu\u1ed1c T\u1ebf Ng\u1eef
@@ -260,10 +260,10 @@ languages.el=Ti\u1ebfng Hy L\u1ea1p
languages.ko=Ti\u1ebfng H\u00e0n Qu\u1ed1c
languages.kn=Ti\u1ebfng Kan-na-\u0111a
languages.no=Ti\u1ebfng Na Uy
-languages.km=Ti\u1ebfng Campuchia
languages.bg=Ti\u1ebfng Bun-ga-ri
+languages.km=Ti\u1ebfng Campuchia
languages.tr=Ti\u1ebfng Th\u1ed5 Nh\u0129 K\u1ef3
-languages.hi=Ti\u1ebfng Hin-\u0111i
languages.be=Ti\u1ebfng B\u00ea-la-r\u00fat
+languages.hi=Ti\u1ebfng Hin-\u0111i
languages.nl=Ti\u1ebfng H\u00e0 Lan
languages.he=Ti\u1ebfng H\u00ea-br\u01a1
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal.properties
new file mode 100644
index 0000000..f0485c2
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal.properties
@@ -0,0 +1,169 @@
+# LocaleInformation_wal.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+currenciesDisplayName.INR=\u12e8\u1215\u1295\u12f5 \u1229\u1352
+currenciesDisplayName.RUB=\u12e8\u122b\u123b \u1229\u1265\u120d
+currenciesDisplayName.JPY=\u12e8\u1303\u1353\u1295 \u12e8\u1295
+currenciesDisplayName.BRL=\u12e8\u1265\u122b\u12da\u120d \u122a\u120d
+currenciesDisplayName.CNY=\u12e8\u127b\u12ed\u1293 \u12e9\u12a0\u1295 \u1228\u1295\u121a\u1295\u1262
+currenciesDisplayName.USD=\u12e8\u12a0\u121c\u122a\u12ab\u1295 \u12f6\u120b\u122d
+currenciesDisplayName.EUR=\u12a0\u12cd\u122e
+currenciesDisplayName.ETB=\u12e8\u12a2\u1275\u12ee\u1335\u12eb \u1265\u122d
+currenciesDisplayName.GBP=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u1353\u12cd\u1295\u12f5 \u1235\u1270\u122d\u120a\u1295\u130d
+currenciesSymbol.ETB=$
+currenciesSymbol.CNY=Y
+currenciesSymbol.USD=USD
+currenciesSymbol.BRL=R$
+shortMonths=\u1303\u1295\u12e9®\u134c\u1265\u1229®\u121b\u122d\u127d®\u12a4\u1355\u1228®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235®\u1234\u1355\u1274®\u12a6\u12ad\u1270®\u1296\u126c\u121d®\u12f2\u1234\u121d®®
+months=\u1303\u1295\u12e9\u12c8\u122a®\u134c\u1265\u1229\u12c8\u122a®\u121b\u122d\u127d®\u12a4\u1355\u1228\u120d®\u121c\u12ed®\u1301\u1295®\u1301\u120b\u12ed®\u12a6\u1308\u1235\u1275®\u1234\u1355\u1274\u121d\u1260\u122d®\u12a6\u12ad\u1270\u12cd\u1260\u122d®\u1296\u126c\u121d\u1260\u122d®\u12f2\u1234\u121d\u1260\u122d®®
+shortWeekdays=®\u12c8\u130b®\u1233\u12ed\u1296®\u121b\u1246\u1233®\u12a0\u1229\u12cb®\u1203\u1219\u1233®\u12a0\u122d\u1263®\u1244\u122b®
+weekdays=®\u12c8\u130b®\u1233\u12ed\u1296®\u121b\u1246\u1233\u129b®\u12a0\u1229\u12cb®\u1203\u1219\u1233®\u12a0\u122d\u1263®\u1244\u122b®
+firstDayOfWeek=sat
+eras=\u12a0\u12f3 \u12ce\u12f4®\u130d\u122e\u1270\u1273 \u120b\u12ed\u1273®
+ampms=\u121b\u1208\u12f6®\u1243\u121b®
+territories.AU=\u12a0\u12cd\u1235\u1275\u122c\u120a\u12eb
+territories.TD=\u127b\u12f5
+territories.AT=\u12a6\u1235\u1275\u122a\u12eb
+territories.GY=\u1309\u12eb\u1293
+territories.AR=\u12a0\u122d\u1300\u1295\u1272\u1293
+territories.GW=\u1262\u1233\u12ce
+territories.MY=\u121b\u120c\u12e2\u12eb
+territories.MX=\u121c\u12ad\u1232\u12ae
+territories.AN=\u1294\u12d8\u122d\u120b\u1295\u12f5\u1235 \u12a0\u1295\u1272\u120d\u1235
+territories.AM=\u12a0\u122d\u121c\u1292\u12eb
+territories.GR=\u130d\u122a\u12ad
+territories.ZA=\u12f0\u1261\u1265 \u12a0\u134d\u122a\u12ab
+territories.AL=\u12a0\u120d\u1263\u1292\u12eb
+territories.GQ=\u12a2\u12b3\u1276\u122a\u12eb\u120d \u130a\u1292
+territories.MU=\u121b\u1229\u1238\u1235
+territories.SY=\u1232\u122a\u12eb
+territories.MT=\u121b\u120d\u1273
+territories.GN=\u130a\u1292
+territories.MR=\u121e\u122a\u1274\u1292\u12eb
+territories.GM=\u130b\u121d\u1262\u12eb
+territories.MO=\u121b\u12ab\u12ce
+territories.AE=\u12e8\u1270\u1263\u1260\u1229\u1275 \u12a0\u1228\u1265 \u12a4\u121d\u122c\u1275\u1235
+territories.MN=\u121e\u1295\u130e\u120a\u12eb
+territories.AD=\u12a0\u1295\u12f6\u122b
+territories.MK=\u121b\u12a8\u12f6\u1292\u12eb
+territories.GF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1309\u12ca\u12a0\u1293
+territories.SO=\u1231\u121b\u120c
+territories.GE=\u1306\u122d\u1302\u12eb
+territories.SN=\u1234\u1294\u130b\u120d
+territories.GB=\u12a5\u1295\u130d\u120a\u12dd
+territories.SK=\u1235\u120e\u126b\u12aa\u12eb
+territories.SI=\u1235\u120e\u126c\u1292\u12eb
+territories.MD=\u121e\u120d\u12f6\u126b
+territories.SG=\u1232\u1295\u130b\u1356\u122d
+territories.MA=\u121e\u122e\u12ae
+territories.SE=\u1235\u12ca\u12f5\u1295
+territories.SD=\u1231\u12f3\u1295
+territories.SA=\u1233\u12cd\u12f5\u12a0\u1228\u1262\u12eb
+territories.YE=\u12e8\u1218\u1295
+territories.LY=\u120a\u1262\u12eb
+territories.FR=\u1348\u1228\u1295\u1233\u12ed
+territories.LV=\u120b\u1275\u126a\u12eb
+territories.LT=\u120a\u1271\u12cc\u1292\u12eb
+territories.FM=\u121a\u12ad\u122e\u1294\u12e2\u12eb
+territories.RU=\u122b\u123a\u12eb
+territories.FJ=\u134a\u1302
+territories.FI=\u134a\u1295\u120b\u1295\u12f5
+territories.RO=\u122e\u121c\u1292\u12eb
+territories.LB=\u120a\u1263\u1296\u1235
+territories.ET=\u12a2\u1275\u12ee\u1335\u12eb
+territories.ES=\u1235\u1354\u1295
+territories.KW=\u12ad\u12cc\u1275
+territories.ER=\u12a4\u122d\u1275\u122b
+territories.KR=\u1230\u121c\u1295 \u12ae\u122a\u12eb
+territories.KP=\u12f0\u1261\u1265 \u12ae\u122a\u12eb
+territories.KM=\u12ae\u121e\u122e\u1235
+territories.EH=\u121d\u12d5\u122b\u1263\u12ca \u1233\u1205\u122b
+territories.EG=\u130d\u1265\u133d
+territories.EE=\u12a4\u1235\u1276\u1292\u12eb
+territories.EC=\u12a2\u12b3\u12f6\u122d
+territories.KH=\u12ab\u121d\u1266\u12f2\u12eb
+territories.DZ=\u12a0\u120d\u1304\u122a\u12eb
+territories.DO=\u12f6\u121a\u1292\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.DM=\u12f6\u121a\u1292\u12ab
+territories.DK=\u12f4\u1295\u121b\u122d\u12ad
+territories.JP=\u1303\u1353\u1295
+territories.JO=\u1306\u122d\u12f3\u1295
+territories.PR=\u1356\u122d\u1273 \u122a\u12ae
+territories.JM=\u1303\u121b\u12ed\u12ab
+territories.DE=\u1300\u122d\u1218\u1295
+territories.PL=\u1356\u120b\u1295\u12f5
+territories.PG=\u1353\u1351\u12cb \u1292\u12cd \u130a\u1292
+territories.PF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u1356\u120a\u1294\u12e2\u12eb
+territories.PE=\u1354\u1229
+territories.CZ=\u127c\u12ad \u122a\u1351\u1265\u120a\u12ad
+territories.VI=\u12e8\u12a0\u121c\u122a\u12ab \u1268\u122d\u1302\u1295 \u12f0\u1234\u1276\u127d
+territories.CY=\u1233\u12ed\u1355\u1228\u1235
+territories.VG=\u12e8\u12a5\u1295\u130d\u120a\u12dd \u12f5\u1295\u130d\u120d \u12f0\u1234\u1276\u127d
+territories.CV=\u12ac\u1355 \u126c\u122d\u12f4
+territories.VE=\u126c\u1295\u12d9\u12cc\u120b
+territories.CS=\u1230\u122d\u1262\u12eb
+territories.CO=\u12ae\u120e\u121d\u1262\u12eb
+territories.IT=\u1323\u120a\u12eb\u1295
+territories.CN=\u127b\u12ed\u1293
+territories.IS=\u12a0\u12ed\u1235\u120b\u1295\u12f5
+territories.CM=\u12ab\u121c\u1229\u1295
+territories.CL=\u127a\u120a
+territories.IQ=\u12a2\u122b\u1245
+territories.UZ=\u12e9\u12dd\u1260\u12aa\u1235\u1273\u1295
+territories.IN=\u1205\u1295\u12f5
+territories.CH=\u1235\u12ca\u12d8\u122d\u120b\u1295\u12f5
+territories.IL=\u12a5\u1235\u122b\u12a4\u120d
+territories.CF=\u12e8\u1218\u12ab\u12a8\u1208\u129b\u12cd \u12a0\u134d\u122a\u12ab \u122a\u1350\u1265\u120a\u12ad
+territories.US=\u12a0\u121c\u122a\u12ab
+territories.CD=\u12ae\u1295\u130e
+territories.IE=\u12a0\u12e8\u122d\u120b\u1295\u12f5
+territories.ID=\u12a2\u1295\u12f6\u1294\u12e2\u12eb
+territories.BZ=\u1264\u120a\u12d8
+territories.BY=\u1264\u120b\u1229\u1235
+territories.UG=\u12e9\u130b\u1295\u12f3
+territories.BT=\u1261\u1205\u1273\u1295
+territories.BR=\u1265\u122b\u12da\u120d
+territories.NZ=\u1292\u12cd \u12da\u120b\u1295\u12f5
+territories.HU=\u1200\u1295\u130b\u122a
+territories.BO=\u1266\u120a\u126a\u12eb
+territories.HT=\u1200\u12ed\u1272
+territories.BM=\u1264\u122d\u1219\u12f3
+territories.HR=\u12ad\u122e\u12a4\u123d\u12eb
+territories.TZ=\u1273\u1295\u12db\u1292\u12eb
+territories.BH=\u1263\u1205\u122c\u1295
+territories.BG=\u1261\u120d\u130c\u122a\u12eb
+territories.NP=\u1294\u1353\u120d
+territories.HK=\u1206\u1295\u130d \u12ae\u1295\u130d
+territories.TT=\u1275\u122a\u1292\u12f3\u12f5 \u12a5\u1293 \u1276\u1263\u130e
+territories.NO=\u1296\u122d\u12cc
+territories.BE=\u1264\u120d\u1304\u121d
+territories.TR=\u1271\u122d\u12ad
+territories.NL=\u1294\u12d8\u122d\u120b\u1295\u12f5
+territories.BB=\u1263\u122d\u1264\u12f6\u1235
+territories.BA=\u1266\u1235\u1292\u12eb \u12a5\u1293 \u1204\u122d\u12de\u130e\u126a\u1292\u12eb
+territories.TN=\u1271\u1292\u12da\u12eb
+territories.TL=\u121d\u1235\u122b\u1245 \u1272\u121e\u122d
+territories.NG=\u1293\u12ed\u1304\u122a\u12eb
+territories.TJ=\u1273\u1303\u12aa\u1235\u1273\u1295
+territories.AZ=\u12a0\u12d8\u122d\u1263\u1303\u1295
+territories.ZM=\u12db\u121d\u1262\u12eb
+territories.TH=\u1273\u12ed\u120b\u1295\u12f5
+territories.NC=\u1292\u12cd \u12ab\u120c\u12f6\u1292\u12eb
+territories.TF=\u12e8\u1348\u1228\u1295\u1233\u12ed \u12f0\u1261\u1263\u12ca \u130d\u12db\u1276\u127d
+territories.NA=\u1293\u121a\u1262\u12eb
+languages.zh=\u127b\u12ed\u1295\u129b
+languages.en=\u12a5\u1295\u130d\u120a\u12dd\u129b
+languages.ru=\u122b\u123d\u129b
+languages.hi=\u1210\u1295\u12f5\u129b
+languages.ar=\u12d0\u122d\u1262\u129b
+languages.wal=\u12c8\u120b\u12ed\u1273\u1271
+languages.it=\u1323\u120a\u12eb\u1295\u129b
+languages.fr=\u1348\u1228\u1295\u1233\u12ed\u129b
+languages.de=\u1300\u122d\u1218\u1295
+languages.es=\u1235\u1353\u1292\u123d
+languages.ja=\u1303\u1353\u1295\u129b
+languages.pt=\u1356\u122d\u1271\u130b\u120a\u129b
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal_ET.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal_ET.properties
new file mode 100644
index 0000000..eec1bed
--- /dev/null
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_wal_ET.properties
@@ -0,0 +1,17 @@
+# LocaleInformation_wal_ET.properties --
+# Copyright (C) 1991-2005 Unicode, Inc.
+# All rights reserved. Distributed under the Terms of Use
+# in http://www.unicode.org/copyright.html.
+#
+# This file was automatically generated by gnu.localegen from CLDR.
+
+groupingSeparator=\u12c8
+currencyFormat=\u00a4#,##0.00;-\u00a4#,##0.00
+shortDateFormat=dd/MM/yy
+mediumDateFormat=dd-MMM-yyyy
+longDateFormat=dd MMMM yyyy
+fullDateFormat=EEEE\u1365 dd MMMM \u130b\u120b\u1233 yyyy G
+shortTimeFormat=h:mm a
+mediumTimeFormat=h:mm:ss a
+longTimeFormat=h:mm:ss a
+fullTimeFormat=h:mm:ss a
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh.properties
index 035c2b5..1924cee 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh.properties
@@ -6,740 +6,258 @@
# This file was automatically generated by gnu.localegen from CLDR.
localPatternChars=GanjkHmsSEDFwWxhKzAeugXZ
-currenciesDisplayName.JOD=\u7ea6\u65e6\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.XAU=\u9ec4\u91d1
-currenciesDisplayName.FOK=\u6cd5\u7f57\u7fa4\u5c9b\u514b\u6717
-currenciesDisplayName.LBP=\u9ece\u5df4\u5ae9\u78c5
-currenciesDisplayName.EUR=\u6b27\u5143
-currenciesDisplayName.VND=\u8d8a\u5357\u76fe
-currenciesDisplayName.TZS=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4
-currenciesDisplayName.BOP=\u73bb\u5229\u7ef4\u4e9a\u6bd4\u7d22
-currenciesDisplayName.KHR=\u67ec\u57d4\u5be8\u91cc\u5c14
-currenciesDisplayName.XAM=\u4e9a\u6d32\u8d27\u5e01\u5355\u4f4d
-currenciesDisplayName.BOL=\u73bb\u5229\u7ef4\u4e9a (1863-1962)
-currenciesDisplayName.KHO=\u67ec\u57d4\u5be8\u65e7\u91cc\u5c14
-currenciesDisplayName.ZMP=\u8d5e\u6bd4\u4e9a\u78c5
-currenciesDisplayName.AUP=\u6fb3\u5927\u5229\u4e9a\u78c5
-currenciesDisplayName.MTP=\u9a6c\u5c14\u4ed6\u78c5
-currenciesDisplayName.GHR=\u52a0\u7eb3\u91cd\u8bc4\u4f30\u585e\u7b2c
-currenciesDisplayName.ZMK=\u8d5e\u6bd4\u4e9a\u9a6c\u62c9\u7ef4
-currenciesDisplayName.XAD=\u4e9a\u6d32\u7b2c\u7eb3\u5c14\u5143\u5e10\u6237\u5355\u4f4d
-currenciesDisplayName.GHP=\u52a0\u7eb3\u78c5
-currenciesDisplayName.BOB=\u73bb\u5229\u7ef4\u4e9a
-currenciesDisplayName.GHO=\u52a0\u7eb3\u65e7\u585e\u7b2c
-currenciesDisplayName.MTL=\u9a6c\u5c14\u4ed6\u91cc\u62c9
-currenciesDisplayName.AUD=\u6fb3\u5927\u5229\u4e9a\u5143
-currenciesDisplayName.USS=\u7f8e\u5143 (\u540c\u4e00\u5929)
-currenciesDisplayName.ITL=\u610f\u5927\u5229\u91cc\u62c9
-currenciesDisplayName.USN=\u7f8e\u5143 (\u4e0b\u4e00\u5929)
-currenciesDisplayName.GHC=\u52a0\u7eb3\u585e\u7b2c
-currenciesDisplayName.SGD=\u65b0\u52a0\u5761\u5143
-currenciesDisplayName.PAB=\u5df4\u62ff\u9a6c\u5df4\u6ce2\u4e9a
-currenciesDisplayName.LAK=\u8001\u631d\u57fa\u666e
-currenciesDisplayName.KGS=\u5409\u5c14\u5409\u65af\u5766\u8428\u59c6
-currenciesDisplayName.CHF=\u745e\u58eb\u6cd5\u90ce
-currenciesDisplayName.ATS=\u5965\u5730\u5229\u897f\u4ee4
-currenciesDisplayName.USD=\u7f8e\u5143
-currenciesDisplayName.ETD=\u57c3\u585e\u4fc4\u6bd4\u4e9a\u5143
-currenciesDisplayName.BND=\u6c76\u83b1\u5143
-currenciesDisplayName.JMP=\u7259\u4e70\u52a0\u78c5
-currenciesDisplayName.ETB=\u57c3\u585e\u4fc4\u6bd4\u4e9a\u6bd4\u5c14
-currenciesDisplayName.DZG=\u963f\u5c14\u53ca\u5229\u4e9a\u6cd5\u90ce\u6bd4\u65af\u67e5
-currenciesDisplayName.DZF=\u963f\u5c14\u53ca\u5229\u4e9a\u65b0\u6cd5\u90ce
-currenciesDisplayName.DZD=\u963f\u5c14\u53ca\u5229\u4e9a\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.PYG=\u5df4\u62c9\u572d\u5e01
-currenciesDisplayName.LYP=\u5229\u6bd4\u4e9a\u78c5
-currenciesDisplayName.JMD=\u7259\u4e70\u52a0\u5143
-currenciesDisplayName.ISK=\u51b0\u5c9b\u514b\u6717
-currenciesDisplayName.ESP=\u897f\u73ed\u7259\u9a6c\u8d5b\u5854
-currenciesDisplayName.BMP=\u767e\u6155\u5927\u78c5
-currenciesDisplayName.LYD=\u5229\u6bd4\u4e9a\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.LYB=\u5229\u6bd4\u4e9a\u82f1\u56fd\u519b\u961f\u519b\u65b9\u91cc\u62c9
-currenciesDisplayName.BMD=\u767e\u6155\u5927\u5143
-currenciesDisplayName.NLG=\u8377\u5170\u76fe
-currenciesDisplayName.MRO=\u91cc\u5854\u5c3c\u4e9a\u4e4c\u5409\u4e9a
-currenciesDisplayName.IRR=\u4f0a\u6717\u91cc\u4e9a \u5c14
-currenciesDisplayName.SEK=\u745e\u58eb\u514b\u6717
-currenciesDisplayName.ERN=\u5384\u7acb\u7279\u91cc\u4e9a\u7eb3\u798f\u5361
+currenciesDisplayName.YDD=\u4e5f\u95e8\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.TWD=\u65b0\u53f0\u5e01
currenciesDisplayName.KES=\u80af\u5c3c\u4e9a\u5148\u4ee4
-currenciesDisplayName.CFF=\u4e2d\u975e\u5171\u548c\u56fd CFA \u6cd5\u90ce
+currenciesDisplayName.BYB=\u767d\u4fc4\u7f57\u65af\u65b0\u5362\u5e03 (1994-1999)
+currenciesDisplayName.LKR=\u65af\u91cc\u5170\u5361\u5362\u6bd4
+currenciesDisplayName.RWF=\u5362\u65fa\u8fbe\u6cd5\u90ce
+currenciesDisplayName.TJS=\u5854\u5409\u514b\u65af\u5766\u7d22\u83ab\u5c3c
+currenciesDisplayName.SDP=\u82cf\u4e39\u78c5
+currenciesDisplayName.TJR=\u5854\u5409\u514b\u65af\u5766\u5362\u5e03
+currenciesDisplayName.ERN=\u5384\u7acb\u7279\u91cc\u4e9a\u7eb3\u798f\u5361
+currenciesDisplayName.AFN=\u963f\u5bcc\u6c57\u5c3c
+currenciesDisplayName.GRD=\u5e0c\u814a\u5fb7\u62c9\u514b\u9a6c
+currenciesDisplayName.IEP=\u7231\u5c14\u5170\u78c5
currenciesDisplayName.ARS=\u963f\u6839\u5ef7\u6bd4\u7d22
+currenciesDisplayName.SDD=\u82cf\u4e39\u7b2c\u7eb3\u5c14\u5143
currenciesDisplayName.ARP=\u963f\u6839\u5ef7\u6bd4\u7d22 (1983-1985)
-currenciesDisplayName.ARM=\u963f\u6839\u5ef7\u6bd4\u7d22\u6807\u51c6\u5c40
-currenciesDisplayName.TWD=\u65b0\u53f0\u5e01
-currenciesDisplayName.SDP=\u82cf\u4e39\u78c5
currenciesDisplayName.GEL=\u4e54\u6cbb\u4e9a\u5e93\u84ec\u62c9\u745e
+currenciesDisplayName.AFA=\u963f\u5bcc\u6c57\u5c3c (1927-2002)
currenciesDisplayName.GEK=\u4e54\u6cbb\u4e9a\u5e93\u84ec\u62c9\u745e\u7279
-currenciesDisplayName.MQF=\u9a6c\u8482\u5c3c\u6cd5\u90ce
+currenciesDisplayName.CRC=\u54e5\u65af\u8fbe\u9ece\u52a0\u79d1\u9686
currenciesDisplayName.FKP=\u798f\u514b\u5170\u7fa4\u5c9b\u78c5
+currenciesDisplayName.EEK=\u7231\u6c99\u5c3c\u4e9a\u514b\u6717
+currenciesDisplayName.HKD=\u6e2f\u5143
+currenciesDisplayName.MDL=\u5357\u7279\u5e02\u5217\u4f0a
currenciesDisplayName.ARA=\u963f\u6839\u5ef7\u5965\u65af\u7279
-currenciesDisplayName.SDD=\u82cf\u4e39\u7b2c\u7eb3\u5c14\u5143
currenciesDisplayName.IQD=\u4f0a\u62c9\u514b\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.TVD=\u56fe\u74e6\u5362\u5143
currenciesDisplayName.SCR=\u585e\u820c\u5c14\u5362\u6bd4
+currenciesDisplayName.VUV=\u74e6\u52aa\u963f\u56fe
+currenciesDisplayName.DKK=\u4e39\u9ea6\u514b\u6717
+currenciesDisplayName.KPW=\u5317\u671d\u9c9c\u5e01
+currenciesDisplayName.GQE=\u8d64\u9053\u51e0\u5185\u4e9a\u7231\u514b\u5a01\u4e50
+currenciesDisplayName.IDR=\u5370\u5ea6\u5c3c\u897f\u4e9a\u76fe
currenciesDisplayName.LVR=\u62c9\u8131\u7ef4\u4e9a\u5362\u5e03
-currenciesDisplayName.FJP=\u6590\u6d4e\u78c5
+currenciesDisplayName.SOS=\u7d22\u9a6c\u91cc\u5148\u4ee4
+currenciesDisplayName.AED=\u963f\u8054\u914b\u8fea\u62c9\u59c6
+currenciesDisplayName.BWP=\u6ce2\u6e23\u90a3\u6251\u62c9
currenciesDisplayName.LVL=\u62c9\u8131\u7ef4\u4e9a\u62c9\u7279
-currenciesDisplayName.CDL=\u521a\u679c\u624e\u4f0a\u5c14
-currenciesDisplayName.CDG=\u521a\u679c\u5171\u548c\u56fd\u6cd5\u90ce
-currenciesDisplayName.CDF=\u521a\u679c\u6cd5\u90ce
-currenciesDisplayName.FJD=\u6590\u6d4e\u5143
+currenciesDisplayName.RUR=\u4fc4\u56fd\u5362\u5e03 (1991-1998)
currenciesDisplayName.NIO=\u5c3c\u52a0\u62c9\u74dc\u91d1\u54e5\u591a\u534e
+currenciesDisplayName.ADP=\u5b89\u9053\u5c14\u6bd4\u585e\u5854\u5143
+currenciesDisplayName.FJD=\u6590\u6d4e\u5143
currenciesDisplayName.MOP=\u6fb3\u95e8\u5143
-currenciesDisplayName.NIG=\u5c3c\u52a0\u62c9\u74dc\u91d1\u79d1\u591a\u5df4
+currenciesDisplayName.RUB=\u4fc4\u56fd\u5362\u5e03
+currenciesDisplayName.CDF=\u521a\u679c\u6cd5\u90ce
currenciesDisplayName.NIC=\u5c3c\u52a0\u62c9\u74dc\u79d1\u591a\u5df4
-currenciesDisplayName.FIN=\u82ac\u5170\u739b\u5361 (1860-1962)
-currenciesDisplayName.FIM=\u82ac\u5170\u739b\u5361
+currenciesDisplayName.DJF=\u5409\u5e03\u63d0\u6cd5\u90ce
currenciesDisplayName.SBD=\u6240\u7f57\u95e8\u7fa4\u5c9b\u5143
+currenciesDisplayName.UZS=\u4e4c\u5179\u522b\u514b\u65af\u5766\u5e01
+currenciesDisplayName.ECS=\u5384\u74dc\u591a\u5c14\u82cf\u514b\u96f7
+currenciesDisplayName.PHP=\u83f2\u5f8b\u5bbe\u6bd4\u7d22
+currenciesDisplayName.THB=\u6cf0\u94e2
currenciesDisplayName.LUF=\u5362\u68ee\u5821\u6cd5\u90ce
-currenciesDisplayName.TTO=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u65e7\u5143
-currenciesDisplayName.AOS=\u5b89\u54e5\u62c9\u57c3\u65af\u5e93\u591a
-currenciesDisplayName.AOR=\u5b89\u6208\u62c9\u5bbd\u624e Reajustado (1995-1999)
-currenciesDisplayName.MNT=\u8499\u53e4\u56fe\u683c\u91cc\u514b
-currenciesDisplayName.HUF=\u5308\u7259\u5229\u7f36\u745e\u7279
-currenciesDisplayName.BIF=\u5e03\u9686\u8fea\u6cd5\u90ce
-currenciesDisplayName.AON=\u5b89\u6208\u62c9\u65b0\u5bbd\u624e (1990-2000)
-currenciesDisplayName.AOK=\u5b89\u6208\u62c9\u5bbd\u624e (1977-1990)
+currenciesDisplayName.FIM=\u82ac\u5170\u739b\u5361
currenciesDisplayName.TTD=\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5\u5143
currenciesDisplayName.SZL=\u65af\u5a01\u58eb\u5170\u5e01
-currenciesDisplayName.NHF=\u65b0\u8d6b\u5e03\u91cc\u5e95 CFP \u6cd5\u90ce
-currenciesDisplayName.GBP=\u82f1\u78c5
-currenciesDisplayName.SAS=\u6c99\u7279\u7279\u6743\u91cc\u4e9a\u5c14
+currenciesDisplayName.MNT=\u8499\u53e4\u56fe\u683c\u91cc\u514b
currenciesDisplayName.SAR=\u6c99\u7279\u91cc\u4e9a\u5c14
+currenciesDisplayName.UAK=\u4e4c\u514b\u5170\u5e01
+currenciesDisplayName.UAH=\u4e4c\u514b\u5170\u8d6b\u91cc\u7eb3
+currenciesDisplayName.HUF=\u5308\u7259\u5229\u7f36\u745e\u7279
+currenciesDisplayName.COP=\u54e5\u4f26\u6bd4\u4e9a\u6bd4\u7d22
+currenciesDisplayName.QAR=\u5361\u5854\u5c14\u91cc\u4e9a\u5c14
currenciesDisplayName.LTT=\u7acb\u9676\u5b9b\u5854\u54af\u5450\u53f8
-currenciesDisplayName.INR=\u5370\u5ea6\u5362\u6bd4
currenciesDisplayName.PTE=\u8461\u8404\u7259\u94c3\u6728
-currenciesDisplayName.AOA=\u5b89\u6208\u62c9\u5bbd\u624e
-currenciesDisplayName.PTC=\u8461\u8404\u7259\u5025\u6d82
+currenciesDisplayName.AOR=\u5b89\u6208\u62c9\u5bbd\u624e Reajustado (1995-1999)
+currenciesDisplayName.UYU=\u4e4c\u62c9\u572d\u6bd4\u7d22
+currenciesDisplayName.GBP=\u82f1\u78c5
+currenciesDisplayName.BIF=\u5e03\u9686\u8fea\u6cd5\u90ce
+currenciesDisplayName.INR=\u5370\u5ea6\u5362\u6bd4
+currenciesDisplayName.ZRZ=\u624e\u4f0a\u5c14\u5143
+currenciesDisplayName.AON=\u5b89\u6208\u62c9\u65b0\u5bbd\u624e (1990-2000)
currenciesDisplayName.LTL=\u7acb\u9676\u5b9b\u5229\u5854
currenciesDisplayName.KZT=\u54c8\u8428\u514b\u817e\u989d
-currenciesDisplayName.KZR=\u54c8\u8428\u514b\u5362\u5e03
-currenciesDisplayName.VGD=\u82f1\u56fd\u7ef4\u4eac\u7fa4\u5c9b\u5e01
-currenciesDisplayName.NGP=\u5c3c\u65e5\u5229\u4e9a\u78c5
-currenciesDisplayName.MMX=\u7f05\u7538\u5143\u5916\u6c47\u5238
+currenciesDisplayName.MZM=\u83ab\u6851\u6bd4\u514b\u5e01
+currenciesDisplayName.UYP=\u4e4c\u62c9\u572d\u6bd4\u7d22 (1975-1993)
+currenciesDisplayName.AOK=\u5b89\u6208\u62c9\u5bbd\u624e (1977-1990)
+currenciesDisplayName.BUK=\u7f05\u5143
+currenciesDisplayName.GNS=\u51e0\u5185\u4e9aSyli
+currenciesDisplayName.XFO=\u6cd5\u56fd\u91d1\u6cd5\u90ce
+currenciesDisplayName.PGK=\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u57fa\u90a3
+currenciesDisplayName.SYP=\u53d9\u5229\u4e9a\u78c5
+currenciesDisplayName.MZE=\u83ab\u6851\u6bd4\u514b\u57c3\u65af\u5e93\u591a
+currenciesDisplayName.OMR=\u963f\u66fc\u91cc\u5c14
currenciesDisplayName.NGN=\u5c3c\u65e5\u5229\u4e9a\u5948\u62c9.
+currenciesDisplayName.ZRN=\u65b0\u624e\u4f0a\u5c14\u5143
+currenciesDisplayName.AOA=\u5b89\u6208\u62c9\u5bbd\u624e
+currenciesDisplayName.CNY=\u4eba\u6c11\u5e01
+currenciesDisplayName.MAF=\u6469\u6d1b\u54e5\u6cd5\u90ce
+currenciesDisplayName.GNF=\u51e0\u5185\u4e9a\u6cd5\u90ce
currenciesDisplayName.HTG=\u6d77\u5730\u53e4\u5fb7
-currenciesDisplayName.SYP=\u53d9\u5229\u4e9a\u78c5
-currenciesDisplayName.PSP=\u5df4\u52d2\u65af\u5766\u78c5
-currenciesDisplayName.BHD=\u5df4\u6797\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.MAD=\u6469\u6d1b\u54e5\u8fea\u62c9\u59c6
+currenciesDisplayName.TRY=\u65b0\u571f\u8033\u5176\u91cc\u62c9
currenciesDisplayName.MMK=\u7f05\u7538\u5f00\u4e9a\u7279
+currenciesDisplayName.MYR=\u9a6c\u6765\u897f\u4e9a\u5e01
+currenciesDisplayName.LSL=\u83b1\u7d22\u6258
+currenciesDisplayName.XEU=\u6b27\u6d32\u8d27\u5e01\u5355\u4f4d
+currenciesDisplayName.BHD=\u5df4\u6797\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.SLL=\u8d5b\u62c9\u91cc\u6602\u5e01
+currenciesDisplayName.BTN=\u4e0d\u4e39\u52aa\u624e\u59c6
+currenciesDisplayName.TRL=\u571f\u8033\u5176\u91cc\u62c9
+currenciesDisplayName.KMF=\u79d1\u6469\u7f57\u6cd5\u90ce
currenciesDisplayName.ANG=\u8377\u5170\u5b89\u66ff\u5170\u76fe
currenciesDisplayName.CZK=\u6377\u514b\u514b\u90ce
-currenciesDisplayName.IMP=\u66fc\u5c9b\u78c5
-currenciesDisplayName.BGX=\u4fdd\u52a0\u5229\u4e9a\u5217\u514b\u5916\u6c47\u5238
-currenciesDisplayName.LSL=\u83b1\u7d22\u6258
-currenciesDisplayName.BGO=\u4fdd\u52a0\u5229\u4e9a\u5217\u514b (1879-1952)
+currenciesDisplayName.KYD=\u5f00\u66fc\u5c9b\u5143
+currenciesDisplayName.GMD=\u5188\u6bd4\u4e9a\u8fbe\u62c9\u897f
currenciesDisplayName.BGN=\u4fdd\u52a0\u5229\u4e9a\u65b0\u5217\u514b
-currenciesDisplayName.BGM=\u4fdd\u52a0\u5229\u4e9a\u793e\u4f1a\u4e3b\u4e49\u5217\u514b
currenciesDisplayName.CAD=\u52a0\u62ff\u5927\u5143
currenciesDisplayName.BGL=\u4fdd\u52a0\u5229\u4e9a\u786c\u5217\u514b
-currenciesDisplayName.TRL=\u571f\u8033\u5176\u91cc\u62c9
-currenciesDisplayName.KYD=\u5f00\u66fc\u5c9b\u5143
-currenciesDisplayName.CYP=\u585e\u6d66\u8def\u65af\u78c5
+currenciesDisplayName.VEB=\u5185\u745e\u62c9\u535a\u5229\u74e6
+currenciesDisplayName.MLF=\u9a6c\u91cc\u6cd5\u90ce
currenciesDisplayName.ILS=\u4ee5\u8272\u5217\u65b0\u8c22\u5ba2\u5c14
+currenciesDisplayName.MXP=\u58a8\u897f\u54e5\u94f6\u6bd4\u7d22 (1861-1992)
+currenciesDisplayName.PES=\u79d8\u9c81\u7d22\u989d
currenciesDisplayName.GYD=\u572d\u4e9a\u90a3\u5143
-currenciesDisplayName.AMD=\u4e9a\u7f8e\u5c3c\u4e9a\u5fb7\u62c9\u59c6
+currenciesDisplayName.MXN=\u58a8\u897f\u54e5\u6bd4\u7d22
currenciesDisplayName.ILP=\u4ee5\u8272\u5217\u78c5
-currenciesDisplayName.MLF=\u9a6c\u91cc\u6cd5\u90ce
-currenciesDisplayName.ILL=\u4ee5\u8272\u5217\u8c22\u5ba2\u5c14
-currenciesDisplayName.VEB=\u5185\u745e\u62c9\u535a\u5229\u74e6
-currenciesDisplayName.ALX=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5143\u5916\u6c47\u5238
+currenciesDisplayName.SKK=\u65af\u6d1b\u4f10\u514b\u79d1\u8def\u90a3
+currenciesDisplayName.CYP=\u585e\u6d66\u8def\u65af\u78c5
+currenciesDisplayName.XDR=\u7279\u522b\u63d0\u6b3e\u6743
+currenciesDisplayName.PEN=\u79d8\u9c81\u7d22\u989d\u5974\u827e\u631d
currenciesDisplayName.LRD=\u5229\u6bd4\u4e9a\u5143
-currenciesDisplayName.ALV=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b\u5e01
+currenciesDisplayName.PEI=\u79d8\u9c81\u56e0\u8482
+currenciesDisplayName.AMD=\u4e9a\u7f8e\u5c3c\u4e9a\u5fb7\u62c9\u59c6
+currenciesDisplayName.BSD=\u5df4\u54c8\u9a6c\u5143
currenciesDisplayName.HRK=\u514b\u7f57\u5730\u4e9a\u5e93\u5a1c\u5143
-currenciesDisplayName.REF=\u7559\u5c3c\u6c6a\u8054\u5408\u4f1a\u6cd5\u90ce
+currenciesDisplayName.CLP=\u667a\u5229 \u6bd4\u7d22
currenciesDisplayName.HRD=\u514b\u7f57\u5730\u4e9a\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.ALL=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b
-currenciesDisplayName.JEP=\u6cfd\u897f\u78c5
-currenciesDisplayName.ALK=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b (1946-1961)
-currenciesDisplayName.MKN=\u9a6c\u5176\u987f\u6234\u7eb3 (1992-1993)
-currenciesDisplayName.VDP=\u5317\u8d8a\u76ae\u827e\u65af\u7279\u660e\u76fe
-currenciesDisplayName.VDN=\u5317\u8d8a\u76ae\u827e\u65af\u7279\u65b0\u76fe
+currenciesDisplayName.FRF=\u6cd5\u56fd\u6cd5\u90ce
+currenciesDisplayName.BRR=\u5df4\u897f\u514b\u9c81\u585e\u7f57
currenciesDisplayName.MKD=\u9a6c\u5176\u987f\u6234\u7eb3
-currenciesDisplayName.VDD=\u5317\u8d8a\u76ae\u827e\u65af\u7279\u76fe
-currenciesDisplayName.TPP=\u5e1d\u6c76\u5e15\u5854\u5361
-currenciesDisplayName.BEL=\u6bd4\u5229\u65f6\u6cd5\u90ce\uff08\u91d1\u878d\uff09
-currenciesDisplayName.GWP=\u51e0\u5185\u4e9a\u6bd4\u7d22
-currenciesDisplayName.KWD=\u79d1\u5a01\u7279\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.GWM=\u8461\u8404\u7259\u51e0\u5185\u4e9a\u8ff7\u6d31\u745e
-currenciesDisplayName.BEF=\u6bd4\u5229\u65f6\u6cd5\u90ce
+currenciesDisplayName.CLF=\u667a\u5229 Unidades de Fomento
+currenciesDisplayName.ALL=\u963f\u5c14\u5df4\u5c3c\u4e9a\u5217\u514b
+currenciesDisplayName.BRN=\u5df4\u897f\u514b\u9c81\u585e\u7f57 Cruzado Novo
+currenciesDisplayName.MWK=\u9a6c\u62c9\u7ef4\u5938\u6070
+currenciesDisplayName.BRL=\u5df4\u897f\u91cc\u5c14
currenciesDisplayName.TPE=\u5e1d\u6c76\u57c3\u65af\u5e93\u591a
-currenciesDisplayName.BEC=\u6bd4\u5229\u65f6\u6cd5\u90ce\u5151\u6362\u5238
-currenciesDisplayName.GWE=\u8461\u8404\u7259\u51e0\u5185\u4e9a\u57c3\u65af\u5e93\u591a
+currenciesDisplayName.BRE=\u5df4\u897f\u514b\u9c81\u585e\u7f57 (1990-1993)
+currenciesDisplayName.BRC=\u5df4\u897f\u514b\u9c81\u585e\u7f57
+currenciesDisplayName.BRB=\u5df4\u897f\u514b\u9c81\u8d5b\u7f57 (1967-1986)
+currenciesDisplayName.DEM=\u5fb7\u56fd\u9a6c\u514b
+currenciesDisplayName.KWD=\u79d1\u5a01\u7279\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.XCD=\u4e1c\u52a0\u52d2\u6bd4\u5143
+currenciesDisplayName.NPR=\u5c3c\u6cca\u5c14\u5362\u6bd4
+currenciesDisplayName.GWP=\u51e0\u5185\u4e9a\u6bd4\u7d22
+currenciesDisplayName.YUN=\u5357\u65af\u62c9\u592b\u5151\u6362\u7b2c\u7eb3\u5c14\u5143
currenciesDisplayName.SVC=\u8428\u5c14\u74e6\u591a\u79d1\u6d1b\u6d85
-currenciesDisplayName.CWG=\u5e93\u62c9\u76fe
-currenciesDisplayName.BDT=\u5b5f\u52a0\u62c9\u8fbe\u5361
-currenciesDisplayName.TOS=\u6c64\u52a0\u78c5
+currenciesDisplayName.YUM=\u5357\u65af\u62c9\u592b\u504c\u5a01\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.BEL=\u6bd4\u5229\u65f6\u6cd5\u90ce\uff08\u91d1\u878d\uff09
+currenciesDisplayName.SIT=\u65af\u6d1b\u6587\u5c3c\u4e9a\u6dd8\u62c9
+currenciesDisplayName.JPY=\u65e5\u5143
+currenciesDisplayName.MVR=\u9a6c\u5c14\u4ee3\u592b\u7fa4\u5c9b\u82a6\u83f2\u4e9a
+currenciesDisplayName.GWE=\u8461\u8404\u7259\u51e0\u5185\u4e9a\u57c3\u65af\u5e93\u591a
+currenciesDisplayName.BEF=\u6bd4\u5229\u65f6\u6cd5\u90ce
currenciesDisplayName.TOP=\u6c64\u52a0\u5e01
+currenciesDisplayName.YUD=\u5357\u65af\u62c9\u592b\u786c\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.BEC=\u6bd4\u5229\u65f6\u6cd5\u90ce\u5151\u6362\u5238
currenciesDisplayName.SUR=\u82cf\u8054\u5362\u5e03
-currenciesDisplayName.SUN=\u82cf\u8054\u65b0\u5362\u5e03
-currenciesDisplayName.NCF=\u65b0\u5361\u91cc\u591a\u5c3c\u4e9a\u65b0\u6cd5\u90ce
-currenciesDisplayName.CVE=\u4f5b\u5f97\u89d2\u57c3\u65af\u5e93\u591a
-currenciesDisplayName.XNF=\u6cd5\u56fd\u5b89\u7684\u5217\u65af CFA \u6cd5\u90ce
+currenciesDisplayName.ROL=\u7f57\u9a6c\u5c3c\u4e9a\u956d
+currenciesDisplayName.DDM=\u4e1c\u5fb7\u5965\u65af\u7279\u9a6c\u514b
+currenciesDisplayName.BDT=\u5b5f\u52a0\u62c9\u8fbe\u5361
+currenciesDisplayName.AWG=\u963f\u9c81\u5df4\u57fa\u5c14\u5fb7\u5143
+currenciesDisplayName.XBB=\u6b27\u6d32\u91d1\u878d\u5355\u4f4d
+currenciesDisplayName.XBA=\u6b27\u6d32\u590d\u5408\u5355\u4f4d
+currenciesDisplayName.NOK=\u632a\u5a01\u514b\u6717
+currenciesDisplayName.MUR=\u6bdb\u91cc\u6c42\u65af\u5362\u6bd4
currenciesDisplayName.ZAR=\u5357\u975e\u5170\u7279
-currenciesDisplayName.DOP=\u591a\u7c73\u5c3c\u52a0\u6bd4\u7d22
-currenciesDisplayName.CUX=\u53e4\u5df4\u5916\u6c47\u5238
-currenciesDisplayName.ZAP=\u5357\u975e\u78c5
+currenciesDisplayName.SHP=\u5723\u8d6b\u52d2\u62ff\u78c5
+currenciesDisplayName.XAU=\u9ec4\u91d1
currenciesDisplayName.ZAL=\u5357\u975e\u5170\u7279 (\u91d1\u878d)
+currenciesDisplayName.VND=\u8d8a\u5357\u76fe
+currenciesDisplayName.TZS=\u5766\u6851\u5c3c\u4e9a\u5148\u4ee4
+currenciesDisplayName.GIP=\u76f4\u5e03\u7f57\u9640\u78c5
currenciesDisplayName.TND=\u7a81\u5c3c\u65af\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.CUP=\u53e4\u5df4\u6bd4\u7d22
-currenciesDisplayName.GUF=\u6cd5\u56fd\u5c5e\u572d\u4e9a\u90a3\u6cd5\u90ce
+currenciesDisplayName.CVE=\u4f5b\u5f97\u89d2\u57c3\u65af\u5e93\u591a
currenciesDisplayName.UGX=\u4e4c\u5e72\u8fbe\u5148\u4ee4
-currenciesDisplayName.LNR=\u9521\u5170\u5362\u6bd4
-currenciesDisplayName.AIF=\u963f\u53d1\u548c\u4f0a\u8428\u6cd5\u90ce
-currenciesDisplayName.VAL=\u68b5\u8c1b\u5188\u91cc\u62c9
-currenciesDisplayName.STE=\u5723\u591a\u7f8e\u666e\u6797\u897f\u6bd4\u94c3\u6728
+currenciesDisplayName.ZMK=\u8d5e\u6bd4\u4e9a\u9a6c\u62c9\u7ef4
+currenciesDisplayName.JOD=\u7ea6\u65e6\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.LBP=\u9ece\u5df4\u5ae9\u78c5
currenciesDisplayName.UGS=\u4e4c\u5e72\u8fbe\u5148\u4ee4 (1966-1987)
currenciesDisplayName.STD=\u5723\u591a\u7f8e\u666e\u6797\u897f\u6bd4\u90fd\u6bd4\u62c9
-currenciesDisplayName.MHD=\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u5143
-currenciesDisplayName.NZP=\u65b0\u897f\u5170\u78c5
currenciesDisplayName.WST=\u897f\u8428\u6469\u4e9a\u5854\u62c9
-currenciesDisplayName.WSP=\u897f\u8428\u6469\u4e9a\u78c5
-currenciesDisplayName.HNL=\u6d2a\u90fd\u62c9\u65af\u52d2\u76ae\u62c9
-currenciesDisplayName.XMF=\u6cd5\u56fd\u57ce\u5e02\u504c\u4f5b\u6cd5\u90ce
+currenciesDisplayName.KHR=\u67ec\u57d4\u5be8\u91cc\u5c14
+currenciesDisplayName.EUR=\u6b27\u5143
+currenciesDisplayName.DOP=\u591a\u7c73\u5c3c\u52a0\u6bd4\u7d22
+currenciesDisplayName.MTP=\u9a6c\u5c14\u4ed6\u78c5
+currenciesDisplayName.USS=\u7f8e\u5143 (\u540c\u4e00\u5929)
+currenciesDisplayName.BOP=\u73bb\u5229\u7ef4\u4e9a\u6bd4\u7d22
+currenciesDisplayName.MTL=\u9a6c\u5c14\u4ed6\u91cc\u62c9
+currenciesDisplayName.CUP=\u53e4\u5df4\u6bd4\u7d22
currenciesDisplayName.TMM=\u571f\u5e93\u66fc\u65af\u5766\u5e01
-currenciesDisplayName.GTQ=\u5371\u5730\u9a6c\u62c9
+currenciesDisplayName.USN=\u7f8e\u5143 (\u4e0b\u4e00\u5929)
+currenciesDisplayName.SGD=\u65b0\u52a0\u5761\u5143
currenciesDisplayName.NZD=\u65b0\u897f\u5170\u5143
-currenciesDisplayName.SSP=\u82cf\u683c\u5170\u78c5
-currenciesDisplayName.BBD=\u5df4\u5df4\u591a\u65af\u5143
+currenciesDisplayName.USD=\u7f8e\u5143
+currenciesDisplayName.HNL=\u6d2a\u90fd\u62c9\u65af\u52d2\u76ae\u62c9
+currenciesDisplayName.BOB=\u73bb\u5229\u7ef4\u4e9a
+currenciesDisplayName.ITL=\u610f\u5927\u5229\u91cc\u62c9
+currenciesDisplayName.PAB=\u5df4\u62ff\u9a6c\u5df4\u6ce2\u4e9a
+currenciesDisplayName.GTQ=\u5371\u5730\u9a6c\u62c9
+currenciesDisplayName.LAK=\u8001\u631d\u57fa\u666e
+currenciesDisplayName.GHC=\u52a0\u7eb3\u585e\u7b2c
+currenciesDisplayName.AUD=\u6fb3\u5927\u5229\u4e9a\u5143
currenciesDisplayName.NAD=\u7eb3\u7c73\u6bd4\u4e9a\u5143
+currenciesDisplayName.KGS=\u5409\u5c14\u5409\u65af\u5766\u8428\u59c6
currenciesDisplayName.MGF=\u9a6c\u8fbe\u52a0\u65af\u52a0\u6cd5\u90ce
+currenciesDisplayName.CHF=\u745e\u58eb\u6cd5\u90ce
+currenciesDisplayName.BBD=\u5df4\u5df4\u591a\u65af\u5143
currenciesDisplayName.MGA=\u9a6c\u8fbe\u52a0\u65af\u52a0\u963f\u65e5\u745e
-currenciesDisplayName.EGP=\u57c3\u53ca\u78c5
-currenciesDisplayName.BZH=\u5c5e\u6d2a\u90fd\u62c9\u65af\u5143
+currenciesDisplayName.PYG=\u5df4\u62c9\u572d\u5e01
currenciesDisplayName.PLZ=\u6ce2\u5170\u5179\u7f57\u63d0 (1950-1995)
-currenciesDisplayName.BAN=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u65b0\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.PLX=\u6ce2\u5170\u7f8e\u5143 \u5916\u6c47\u5238
-currenciesDisplayName.BAM=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u5151\u6362\u5238
-currenciesDisplayName.BZD=\u4f2f\u5229\u5179\u5143
-currenciesDisplayName.BAD=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.PLN=\u6ce2\u5170\u5179\u7f57\u63d0
currenciesDisplayName.YER=\u4e5f\u95e8\u91cc\u5c14
+currenciesDisplayName.ATS=\u5965\u5730\u5229\u897f\u4ee4
+currenciesDisplayName.ETB=\u57c3\u585e\u4fc4\u6bd4\u4e9a\u6bd4\u5c14
+currenciesDisplayName.BND=\u6c76\u83b1\u5143
+currenciesDisplayName.JMD=\u7259\u4e70\u52a0\u5143
+currenciesDisplayName.EGP=\u57c3\u53ca\u78c5
+currenciesDisplayName.PLN=\u6ce2\u5170\u5179\u7f57\u63d0
+currenciesDisplayName.DZD=\u963f\u5c14\u53ca\u5229\u4e9a\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.ISK=\u51b0\u5c9b\u514b\u6717
currenciesDisplayName.SRG=\u82cf\u91cc\u5357\u57fa\u5c14
-currenciesDisplayName.CSK=\u6377\u514b\u786c\u514b\u90ce
+currenciesDisplayName.LYD=\u5229\u6bd4\u4e9a\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.BZD=\u4f2f\u5229\u5179\u5143
+currenciesDisplayName.BAM=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u5151\u6362\u5238
+currenciesDisplayName.ESP=\u897f\u73ed\u7259\u9a6c\u8d5b\u5854
currenciesDisplayName.KRW=\u97e9\u56fd\u5e01
+currenciesDisplayName.NLG=\u8377\u5170\u76fe
+currenciesDisplayName.MRO=\u91cc\u5854\u5c3c\u4e9a\u4e4c\u5409\u4e9a
+currenciesDisplayName.BAD=\u6ce2\u58eb\u5c3c\u4e9a-\u8d6b\u585e\u54e5\u7ef4\u7eb3\u7b2c\u7eb3\u5c14\u5143
+currenciesDisplayName.ZWD=\u6d25\u5df4\u5e03\u97e6\u5143
+currenciesDisplayName.SEK=\u745e\u58eb\u514b\u6717
+currenciesDisplayName.CSK=\u6377\u514b\u786c\u514b\u90ce
currenciesDisplayName.BYR=\u767d\u4fc4\u7f57\u65af\u5362\u5e03
-currenciesDisplayName.YEI=\u4e5f\u95e8\u963f\u9a6c\u8fea\u91cc\u5c14
-currenciesDisplayName.BYL=\u767d\u4fc4\u7f57\u65af\u5362\u5e03 (1992-1994)
-currenciesDisplayName.CSC=\u6377\u514b\u514b\u90ce
-currenciesDisplayName.KRO=\u97e9\u56fd\u65e7\u5e01
-currenciesDisplayName.KRH=\u97e9\u56fd\u5143
-currenciesDisplayName.BYB=\u767d\u4fc4\u7f57\u65af\u65b0\u5362\u5e03 (1994-1999)
-currenciesDisplayName.SQS=\u7d22\u9a6c\u91cc\u5927\u9646\u5148\u4ee4
-currenciesDisplayName.GRN=\u5e0c\u814a\u65b0\u5fb7\u62c9\u514b\u9a6c
+currenciesDisplayName.IRR=\u4f0a\u6717\u91cc\u4e9a \u5c14
currenciesDisplayName.PKR=\u5df4\u57fa\u65af\u5766\u5362\u6bd4
-currenciesDisplayName.AFN=\u963f\u5bcc\u6c57\u5c3c
-currenciesDisplayName.ZWD=\u6d25\u5df4\u5e03\u97e6\u5143
-currenciesDisplayName.LKR=\u65af\u91cc\u5170\u5361\u5362\u6bd4
-currenciesDisplayName.GRD=\u5e0c\u814a\u5fb7\u62c9\u514b\u9a6c
-currenciesDisplayName.IEP=\u7231\u5c14\u5170\u78c5
-currenciesDisplayName.AFA=\u963f\u5bcc\u6c57\u5c3c (1927-2002)
-currenciesDisplayName.YDD=\u4e5f\u95e8\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.RWF=\u5362\u65fa\u8fbe\u6cd5\u90ce
-currenciesDisplayName.CRC=\u54e5\u65af\u8fbe\u9ece\u52a0\u79d1\u9686
-currenciesDisplayName.TJS=\u5854\u5409\u514b\u65af\u5766\u7d22\u83ab\u5c3c
-currenciesDisplayName.TJR=\u5854\u5409\u514b\u65af\u5766\u5362\u5e03
-currenciesDisplayName.EEK=\u7231\u6c99\u5c3c\u4e9a\u514b\u6717
-currenciesDisplayName.GQP=\u8d64\u9053\u51e0\u5185\u4e9a\u5339\u585e\u5854
-currenciesDisplayName.MDR=\u5357\u7279\u5e02\u5362\u5e03
-currenciesDisplayName.HKD=\u6e2f\u5143
-currenciesDisplayName.DKK=\u4e39\u9ea6\u514b\u6717
-currenciesDisplayName.MDL=\u5357\u7279\u5e02\u5217\u4f0a
-currenciesDisplayName.GQF=\u8d64\u9053\u51e0\u5185\u4e9a\u6cd5\u90ce
-currenciesDisplayName.GQE=\u8d64\u9053\u51e0\u5185\u4e9a\u7231\u514b\u5a01\u4e50
-currenciesDisplayName.IDR=\u5370\u5ea6\u5c3c\u897f\u4e9a\u76fe
-currenciesDisplayName.AED=\u963f\u8054\u914b\u8fea\u62c9\u59c6
-currenciesDisplayName.KPW=\u5317\u671d\u9c9c\u5e01
-currenciesDisplayName.IDN=\u5370\u5ea6\u5c3c\u897f\u4e9a\u65b0\u76fe
-currenciesDisplayName.BWP=\u6ce2\u6e23\u90a3\u6251\u62c9
-currenciesDisplayName.MDC=\u5357\u7279\u5e02\u5217\u4f0a\u5e01
-currenciesDisplayName.IDJ=\u5370\u5ea6\u5c3c\u897f\u4e9a\u722a\u54c7\u76fe
-currenciesDisplayName.KPP=\u5317\u671d\u9c9c\u4eba\u6c11\u5e01
-currenciesDisplayName.IDG=\u5370\u5ea6\u5c3c\u897f\u4e9a\u5c3c\u5361\u76fe
-currenciesDisplayName.VUV=\u74e6\u52aa\u963f\u56fe
-currenciesDisplayName.XID=\u4f0a\u65af\u5170\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.SOS=\u7d22\u9a6c\u91cc\u5148\u4ee4
-currenciesDisplayName.ADP=\u5b89\u9053\u5c14\u6bd4\u585e\u5854\u5143
-currenciesDisplayName.RUR=\u4fc4\u56fd\u5362\u5e03 (1991-1998)
-currenciesDisplayName.GPF=\u74dc\u5fb7\u7f57\u666e\u5c9b\u6cd5\u90ce
-currenciesDisplayName.DJF=\u5409\u5e03\u63d0\u6cd5\u90ce
-currenciesDisplayName.ADD=\u5b89\u9053\u5c14\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.MCG=\u6469\u6d1b\u54e5\u9769\u547d\u65f6\u671f\u8d27\u5e01
-currenciesDisplayName.MCF=\u6469\u6d1b\u54e5\u65b0\u6cd5\u90ce
-currenciesDisplayName.ECS=\u5384\u74dc\u591a\u5c14\u82cf\u514b\u96f7
-currenciesDisplayName.LIF=\u5217\u652f\u6566\u58eb\u767b\u6cd5\u90ce
-currenciesDisplayName.RUB=\u4fc4\u56fd\u5362\u5e03
-currenciesDisplayName.PHP=\u83f2\u5f8b\u5bbe\u6bd4\u7d22
-currenciesDisplayName.UZS=\u4e4c\u5179\u522b\u514b\u65af\u5766\u5e01
-currenciesDisplayName.COP=\u54e5\u4f26\u6bd4\u4e9a\u6bd4\u7d22
-currenciesDisplayName.THB=\u6cf0\u94e2
-currenciesDisplayName.IBP=\u5317\u7231\u5c14\u5170\u78c5
-currenciesDisplayName.BUR=\u7f05\u7538\u5362\u6bd4
-currenciesDisplayName.COF=\u521a\u679c CFA \u6cd5\u90ce
-currenciesDisplayName.BUK=\u7f05\u5143
-currenciesDisplayName.COB=\u54e5\u4f26\u6bd4\u4e9a\u7eb8\u6bd4\u7d22
-currenciesDisplayName.UZC=\u4e4c\u5179\u522b\u514b\u65af\u5766\u8d27\u5e01\u5238
-currenciesDisplayName.UAK=\u4e4c\u514b\u5170\u5e01
-currenciesDisplayName.QAR=\u5361\u5854\u5c14\u91cc\u4e9a\u5c14
-currenciesDisplayName.UAH=\u4e4c\u514b\u5170\u8d6b\u91cc\u7eb3
-currenciesDisplayName.GNS=\u51e0\u5185\u4e9aSyli
-currenciesDisplayName.CNY=\u4eba\u6c11\u5e01
-currenciesDisplayName.MZM=\u83ab\u6851\u6bd4\u514b\u5e01
-currenciesDisplayName.CNX=\u4e2d\u56fd\u7f8e\u5143\u5916\u6c47\u5238
-currenciesDisplayName.UYU=\u4e4c\u62c9\u572d\u6bd4\u7d22
-currenciesDisplayName.GNI=\u51e0\u5185\u4e9a\u6cd5\u90ce (1960-1972)
-currenciesDisplayName.SML=\u5723\u9a6c\u5229\u8bfa\u91cc\u62c9
-currenciesDisplayName.MZE=\u83ab\u6851\u6bd4\u514b\u57c3\u65af\u5e93\u591a
-currenciesDisplayName.CNP=\u4e2d\u56fd\u4eba\u6c11\u7968\u5143
-currenciesDisplayName.GNF=\u51e0\u5185\u4e9a\u6cd5\u90ce
-currenciesDisplayName.PGK=\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u57fa\u90a3
-currenciesDisplayName.OMS=\u963f\u66fc\u91cc\u5c14\u585e\u8fea
-currenciesDisplayName.OMR=\u963f\u66fc\u91cc\u5c14
-currenciesDisplayName.UYP=\u4e4c\u62c9\u572d\u6bd4\u7d22 (1975-1993)
-currenciesDisplayName.BTR=\u4e0d\u4e39\u5362\u6bd4
-currenciesDisplayName.ZRZ=\u624e\u4f0a\u5c14\u5143
-currenciesDisplayName.MAF=\u6469\u6d1b\u54e5\u6cd5\u90ce
-currenciesDisplayName.MAD=\u6469\u6d1b\u54e5\u8fea\u62c9\u59c6
-currenciesDisplayName.BTN=\u4e0d\u4e39\u52aa\u624e\u59c6
-currenciesDisplayName.XFO=\u6cd5\u56fd\u91d1\u6cd5\u90ce
-currenciesDisplayName.UYF=\u4e4c\u62c9\u572d\u6bd4\u7d22\u4f0f\u5c14\u7279
-currenciesDisplayName.MYR=\u9a6c\u6765\u897f\u4e9a\u5e01
-currenciesDisplayName.ZRN=\u65b0\u624e\u4f0a\u5c14\u5143
-currenciesDisplayName.GMP=\u5188\u6bd4\u4e9a\u78c5
-currenciesDisplayName.KMF=\u79d1\u6469\u7f57\u6cd5\u90ce
-currenciesDisplayName.SLL=\u8d5b\u62c9\u91cc\u6602\u5e01
-currenciesDisplayName.GMD=\u5188\u6bd4\u4e9a\u8fbe\u62c9\u897f
-currenciesDisplayName.XEU=\u6b27\u6d32\u8d27\u5e01\u5355\u4f4d
-currenciesDisplayName.BSP=\u5df4\u54c8\u9a6c\u78c5
-currenciesDisplayName.CMF=\u5580\u9ea6\u9686 CFA \u6cd5\u90ce
-currenciesDisplayName.BSD=\u5df4\u54c8\u9a6c\u5143
-currenciesDisplayName.MXP=\u58a8\u897f\u54e5\u94f6\u6bd4\u7d22 (1861-1992)
-currenciesDisplayName.MXN=\u58a8\u897f\u54e5\u6bd4\u7d22
-currenciesDisplayName.PES=\u79d8\u9c81\u7d22\u989d
-currenciesDisplayName.GLK=\u683c\u9675\u5170\u514b\u6717
-currenciesDisplayName.BRZ=\u5df4\u897f\u514b\u9c81\u585e\u7f57 (1942-1967)
-currenciesDisplayName.PEN=\u79d8\u9c81\u7d22\u989d\u5974\u827e\u631d
-currenciesDisplayName.CLP=\u667a\u5229 \u6bd4\u7d22
-currenciesDisplayName.SKK=\u65af\u6d1b\u4f10\u514b\u79d1\u8def\u90a3
-currenciesDisplayName.PEI=\u79d8\u9c81\u56e0\u8482
-currenciesDisplayName.BRR=\u5df4\u897f\u514b\u9c81\u585e\u7f57
-currenciesDisplayName.XDR=\u7279\u522b\u63d0\u6b3e\u6743
-currenciesDisplayName.FRG=\u6cd5\u56fd\u6cd5\u90ce\u6bd4\u65af\u67e5/\u6cd5\u90ce\u5e9e\u52a0\u83b1
-currenciesDisplayName.FRF=\u6cd5\u56fd\u6cd5\u90ce
-currenciesDisplayName.BRN=\u5df4\u897f\u514b\u9c81\u585e\u7f57 Cruzado Novo
-currenciesDisplayName.CLF=\u667a\u5229 Unidades de Fomento
-currenciesDisplayName.CLE=\u667a\u5229\u57c3\u65af\u5e93\u591a
-currenciesDisplayName.BRL=\u5df4\u897f\u91cc\u5c14
-currenciesDisplayName.CLC=\u667a\u5229\u80af\u675c
-currenciesDisplayName.BRE=\u5df4\u897f\u514b\u9c81\u585e\u7f57 (1990-1993)
-currenciesDisplayName.DES=\u5fb7\u56fd\u53f8\u8421\u9a6c\u514b
-currenciesDisplayName.MWP=\u9a6c\u62c9\u7ef4\u78c5
-currenciesDisplayName.BRC=\u5df4\u897f\u514b\u9c81\u585e\u7f57
-currenciesDisplayName.BRB=\u5df4\u897f\u514b\u9c81\u8d5b\u7f57 (1967-1986)
-currenciesDisplayName.MWK=\u9a6c\u62c9\u7ef4\u5938\u6070
-currenciesDisplayName.PDR=\u8f66\u57ce\u5362\u5e03
-currenciesDisplayName.DEM=\u5fb7\u56fd\u9a6c\u514b
-currenciesDisplayName.PDN=\u8f66\u57ce\u65b0\u5362\u5e03
-currenciesDisplayName.PDK=\u8f66\u57ce\u5362\u5e03\u5238
-currenciesDisplayName.NPR=\u5c3c\u6cca\u5c14\u5362\u6bd4
-currenciesDisplayName.CKD=\u5e93\u514b\u7fa4\u5c9b\u5143
-currenciesDisplayName.JPY=\u65e5\u5143
-currenciesDisplayName.MVR=\u9a6c\u5c14\u4ee3\u592b\u7fa4\u5c9b\u82a6\u83f2\u4e9a
-currenciesDisplayName.MVP=\u9a6c\u5c14\u4ee3\u592b\u7fa4\u5c9b\u5362\u6bd4
-currenciesDisplayName.XCD=\u4e1c\u52a0\u52d2\u6bd4\u5143
-currenciesDisplayName.SIT=\u65af\u6d1b\u6587\u5c3c\u4e9a\u6dd8\u62c9
-currenciesDisplayName.YUR=\u5357\u65af\u62c9\u592b\u6539\u9769\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.AWG=\u963f\u9c81\u5df4\u57fa\u5c14\u5fb7\u5143
-currenciesDisplayName.YUO=\u5357\u65af\u62c9\u592b\u5341\u6708\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.DDM=\u4e1c\u5fb7\u5965\u65af\u7279\u9a6c\u514b
-currenciesDisplayName.YUN=\u5357\u65af\u62c9\u592b\u5151\u6362\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.YUM=\u5357\u65af\u62c9\u592b\u504c\u5a01\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.TCC=\u7279\u514b\u65af\u548c\u51ef\u79d1\u65af\u7fa4\u5c9b\u514b\u6717
-currenciesDisplayName.YUG=\u5357\u65af\u62c9\u592b 1994 \u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.YUF=\u5357\u65af\u62c9\u592b\u8054\u90a6\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.RON=\u7f57\u9a6c\u5c3c\u4e9a\u65b0\u956d
-currenciesDisplayName.YUD=\u5357\u65af\u62c9\u592b\u786c\u7b2c\u7eb3\u5c14\u5143
-currenciesDisplayName.ROL=\u7f57\u9a6c\u5c3c\u4e9a\u956d
-currenciesDisplayName.SIB=\u65af\u6d1b\u6587\u5c3c\u4e9a\u6dd8\u62c9\u78c5
-currenciesDisplayName.NOK=\u632a\u5a01\u514b\u6717
-currenciesDisplayName.MUR=\u6bdb\u91cc\u6c42\u65af\u5362\u6bd4
-currenciesDisplayName.GIP=\u76f4\u5e03\u7f57\u9640\u78c5
-currenciesDisplayName.VNS=\u8d8a\u5357\u56fd\u5bb6\u76fe
-currenciesDisplayName.VNR=\u8d8a\u5357\u5171\u548c\u56fd\u76fe
-currenciesDisplayName.XBB=\u6b27\u6d32\u91d1\u878d\u5355\u4f4d
-currenciesDisplayName.XBA=\u6b27\u6d32\u590d\u5408\u5355\u4f4d
-currenciesDisplayName.KID=\u57fa\u91cc\u5df4\u65af\u5143
-currenciesDisplayName.SHP=\u5723\u8d6b\u52d2\u62ff\u78c5
-currenciesDisplayName.VNN=\u8d8a\u5357\u660e\u76fe
-currenciesSymbol.JOD=JOD
-currenciesSymbol.XAU=XAU
-currenciesSymbol.FOK=FOK
-currenciesSymbol.LBP=LBP
-currenciesSymbol.VND=VND
-currenciesSymbol.TZS=TZS
-currenciesSymbol.BOP=BOP
-currenciesSymbol.KHR=KHR
-currenciesSymbol.XAM=XAM
-currenciesSymbol.BOL=BOL
-currenciesSymbol.KHO=KHO
-currenciesSymbol.ZMP=ZMP
-currenciesSymbol.AUP=AUP
-currenciesSymbol.MTP=MTP
-currenciesSymbol.GHR=GHR
-currenciesSymbol.ZMK=ZMK
-currenciesSymbol.XAD=XAD
-currenciesSymbol.GHP=GHP
-currenciesSymbol.BOB=BOB
-currenciesSymbol.GHO=GHO
-currenciesSymbol.MTL=MTL
-currenciesSymbol.AUD=AUD
-currenciesSymbol.USS=USS
+currenciesDisplayName.BMD=\u767e\u6155\u5927\u5143
+currenciesSymbol.TWD=NT$
currenciesSymbol.ITL=ITL
-currenciesSymbol.USN=USN
-currenciesSymbol.GHC=GHC
+currenciesSymbol.JPY=JP\u00a5
currenciesSymbol.SGD=S$
-currenciesSymbol.PAB=PAB
-currenciesSymbol.LAK=LAK
-currenciesSymbol.KGS=KGS
-currenciesSymbol.CHF=CHF
-currenciesSymbol.ATS=ATS
+currenciesSymbol.CNY=\uffe5
+currenciesSymbol.HKD=HK$
currenciesSymbol.USD=US$
-currenciesSymbol.ETD=ETD
-currenciesSymbol.BND=BND
-currenciesSymbol.JMP=JMP
-currenciesSymbol.ETB=ETB
-currenciesSymbol.DZG=DZG
-currenciesSymbol.DZF=DZF
-currenciesSymbol.DZD=DZD
-currenciesSymbol.PYG=PYG
-currenciesSymbol.LYP=LYP
-currenciesSymbol.JMD=JMD
-currenciesSymbol.ISK=ISK
-currenciesSymbol.ESP=ESP
-currenciesSymbol.BMP=BMP
-currenciesSymbol.LYD=LYD
-currenciesSymbol.LYB=LYB
-currenciesSymbol.BMD=BMD
-currenciesSymbol.NLG=NLG
-currenciesSymbol.MRO=MRO
-currenciesSymbol.IRR=IRR
-currenciesSymbol.SEK=SEK
-currenciesSymbol.ERN=ERN
-currenciesSymbol.KES=KES
-currenciesSymbol.CFF=CFF
-currenciesSymbol.ARS=ARS
-currenciesSymbol.ARP=ARP
-currenciesSymbol.ARM=ARM
-currenciesSymbol.TWD=NT$
-currenciesSymbol.SDP=SDP
-currenciesSymbol.GEL=GEL
-currenciesSymbol.GEK=GEK
-currenciesSymbol.MQF=MQF
-currenciesSymbol.FKP=FKP
-currenciesSymbol.ARA=ARA
-currenciesSymbol.SDD=SDD
-currenciesSymbol.IQD=IQD
-currenciesSymbol.TVD=TVD
-currenciesSymbol.SCR=SCR
-currenciesSymbol.LVR=LVR
-currenciesSymbol.FJP=FJP
-currenciesSymbol.LVL=LVL
-currenciesSymbol.CDL=CDL
-currenciesSymbol.CDG=CDG
-currenciesSymbol.CDF=CDF
-currenciesSymbol.FJD=FJD
-currenciesSymbol.NIO=NIO
currenciesSymbol.MOP=P
-currenciesSymbol.NIG=NIG
-currenciesSymbol.NIC=NIC
-currenciesSymbol.FIN=FIN
-currenciesSymbol.FIM=FIM
-currenciesSymbol.SBD=SBD
-currenciesSymbol.LUF=LUF
-currenciesSymbol.TTO=TTO
-currenciesSymbol.AOS=AOS
-currenciesSymbol.AOR=AOR
-currenciesSymbol.MNT=MNT
-currenciesSymbol.HUF=HUF
-currenciesSymbol.BIF=BIF
-currenciesSymbol.AON=AON
-currenciesSymbol.AOK=AOK
-currenciesSymbol.TTD=TTD
-currenciesSymbol.SZL=SZL
-currenciesSymbol.NHF=NHF
-currenciesSymbol.SAS=SAS
currenciesSymbol.SAR=SRl
-currenciesSymbol.LTT=LTT
-currenciesSymbol.PTE=PTE
-currenciesSymbol.AOA=AOA
-currenciesSymbol.PTC=PTC
-currenciesSymbol.LTL=LTL
-currenciesSymbol.KZT=KZT
-currenciesSymbol.KZR=KZR
-currenciesSymbol.VGD=VGD
-currenciesSymbol.NGP=NGP
-currenciesSymbol.MMX=MMX
-currenciesSymbol.NGN=NGN
-currenciesSymbol.HTG=HTG
-currenciesSymbol.SYP=SYP
-currenciesSymbol.PSP=PSP
-currenciesSymbol.BHD=BHD
-currenciesSymbol.MMK=MMK
-currenciesSymbol.ANG=ANG
-currenciesSymbol.CZK=CZK
-currenciesSymbol.IMP=IMP
-currenciesSymbol.BGX=BGX
-currenciesSymbol.LSL=LSL
-currenciesSymbol.BGO=BGO
-currenciesSymbol.BGN=BGN
-currenciesSymbol.BGM=BGM
-currenciesSymbol.CAD=CAD
-currenciesSymbol.BGL=BGL
-currenciesSymbol.TRL=TRL
-currenciesSymbol.KYD=KYD
-currenciesSymbol.CYP=CYP
-currenciesSymbol.ILS=ILS
-currenciesSymbol.GYD=GYD
-currenciesSymbol.AMD=AMD
-currenciesSymbol.ILP=ILP
-currenciesSymbol.MLF=MLF
-currenciesSymbol.ILL=ILL
-currenciesSymbol.VEB=VEB
-currenciesSymbol.ALX=ALX
-currenciesSymbol.LRD=LRD
-currenciesSymbol.ALV=ALV
-currenciesSymbol.HRK=HRK
-currenciesSymbol.REF=REF
-currenciesSymbol.HRD=HRD
-currenciesSymbol.ALL=ALL
-currenciesSymbol.JEP=JEP
-currenciesSymbol.ALK=ALK
-currenciesSymbol.MKN=MKN
-currenciesSymbol.VDP=VDP
-currenciesSymbol.VDN=VDN
-currenciesSymbol.MKD=MKD
-currenciesSymbol.VDD=VDD
-currenciesSymbol.TPP=TPP
-currenciesSymbol.BEL=BEL
-currenciesSymbol.GWP=GWP
-currenciesSymbol.KWD=KWD
-currenciesSymbol.GWM=GWM
-currenciesSymbol.BEF=BEF
-currenciesSymbol.TPE=TPE
-currenciesSymbol.BEC=BEC
-currenciesSymbol.GWE=GWE
-currenciesSymbol.SVC=SVC
-currenciesSymbol.CWG=CWG
-currenciesSymbol.BDT=BDT
-currenciesSymbol.TOS=TOS
-currenciesSymbol.TOP=TOP
-currenciesSymbol.SUR=SUR
-currenciesSymbol.SUN=SUN
-currenciesSymbol.NCF=NCF
-currenciesSymbol.CVE=CVE
-currenciesSymbol.XNF=XNF
-currenciesSymbol.ZAR=ZAR
-currenciesSymbol.DOP=DOP
-currenciesSymbol.CUX=CUX
-currenciesSymbol.ZAP=ZAP
-currenciesSymbol.ZAL=ZAL
-currenciesSymbol.TND=TND
-currenciesSymbol.CUP=CUP
-currenciesSymbol.GUF=GUF
-currenciesSymbol.UGX=UGX
-currenciesSymbol.LNR=LNR
-currenciesSymbol.AIF=AIF
-currenciesSymbol.VAL=VAL
-currenciesSymbol.STE=STE
-currenciesSymbol.UGS=UGS
-currenciesSymbol.STD=STD
-currenciesSymbol.MHD=MHD
-currenciesSymbol.NZP=NZP
-currenciesSymbol.WST=WST
-currenciesSymbol.WSP=WSP
-currenciesSymbol.HNL=HNL
-currenciesSymbol.XMF=XMF
-currenciesSymbol.TMM=TMM
-currenciesSymbol.GTQ=GTQ
-currenciesSymbol.NZD=NZD
-currenciesSymbol.SSP=SSP
-currenciesSymbol.BBD=BBD
-currenciesSymbol.NAD=NAD
-currenciesSymbol.MGF=MGF
-currenciesSymbol.MGA=MGA
-currenciesSymbol.EGP=EGP
-currenciesSymbol.BZH=BZH
-currenciesSymbol.PLZ=PLZ
-currenciesSymbol.BAN=BAN
-currenciesSymbol.PLX=PLX
-currenciesSymbol.BAM=BAM
-currenciesSymbol.BZD=BZD
-currenciesSymbol.BAD=BAD
-currenciesSymbol.PLN=PLN
-currenciesSymbol.YER=YER
-currenciesSymbol.SRG=SRG
-currenciesSymbol.CSK=CSK
currenciesSymbol.KRW=\uffe6
-currenciesSymbol.BYR=BYR
-currenciesSymbol.YEI=YEI
-currenciesSymbol.BYL=BYL
-currenciesSymbol.CSC=CSC
-currenciesSymbol.KRO=KRO
-currenciesSymbol.KRH=KRH
-currenciesSymbol.BYB=BYB
-currenciesSymbol.SQS=SQS
-currenciesSymbol.GRN=GRN
-currenciesSymbol.PKR=PKR
-currenciesSymbol.AFN=AFN
-currenciesSymbol.ZWD=ZWD
-currenciesSymbol.LKR=LKR
-currenciesSymbol.GRD=GRD
-currenciesSymbol.IEP=IEP
-currenciesSymbol.AFA=AFA
-currenciesSymbol.YDD=YDD
-currenciesSymbol.RWF=RWF
-currenciesSymbol.CRC=CRC
-currenciesSymbol.TJS=TJS
-currenciesSymbol.TJR=TJR
-currenciesSymbol.EEK=EEK
-currenciesSymbol.GQP=GQP
-currenciesSymbol.MDR=MDR
-currenciesSymbol.HKD=HK$
-currenciesSymbol.DKK=DKK
-currenciesSymbol.MDL=MDL
-currenciesSymbol.GQF=GQF
-currenciesSymbol.GQE=GQE
-currenciesSymbol.IDR=IDR
-currenciesSymbol.AED=AED
-currenciesSymbol.KPW=KPW
-currenciesSymbol.IDN=IDN
-currenciesSymbol.BWP=BWP
-currenciesSymbol.MDC=MDC
-currenciesSymbol.IDJ=IDJ
-currenciesSymbol.KPP=KPP
-currenciesSymbol.IDG=IDG
-currenciesSymbol.VUV=VUV
-currenciesSymbol.XID=XID
-currenciesSymbol.SOS=SOS
-currenciesSymbol.ADP=ADP
-currenciesSymbol.RUR=RUR
-currenciesSymbol.GPF=GPF
-currenciesSymbol.DJF=DJF
-currenciesSymbol.ADD=ADD
-currenciesSymbol.MCG=MCG
-currenciesSymbol.MCF=MCF
-currenciesSymbol.ECS=ECS
-currenciesSymbol.LIF=LIF
-currenciesSymbol.RUB=RUB
-currenciesSymbol.PHP=PHP
-currenciesSymbol.UZS=UZS
-currenciesSymbol.COP=COP
-currenciesSymbol.THB=THB
-currenciesSymbol.IBP=IBP
-currenciesSymbol.BUR=BUR
-currenciesSymbol.COF=COF
-currenciesSymbol.BUK=BUK
-currenciesSymbol.COB=COB
-currenciesSymbol.UZC=UZC
-currenciesSymbol.UAK=UAK
-currenciesSymbol.QAR=QAR
-currenciesSymbol.UAH=UAH
-currenciesSymbol.GNS=GNS
-currenciesSymbol.CNY=\uffe5
-currenciesSymbol.MZM=MZM
-currenciesSymbol.CNX=CNX
-currenciesSymbol.UYU=UYU
-currenciesSymbol.GNI=GNI
-currenciesSymbol.SML=SML
-currenciesSymbol.MZE=MZE
-currenciesSymbol.CNP=CNP
-currenciesSymbol.PGK=PGK
-currenciesSymbol.OMS=OMS
-currenciesSymbol.GNF=GNF
-currenciesSymbol.UYP=UYP
-currenciesSymbol.OMR=OMR
-currenciesSymbol.BTR=BTR
-currenciesSymbol.ZRZ=ZRZ
-currenciesSymbol.MAF=MAF
-currenciesSymbol.MAD=MAD
-currenciesSymbol.BTN=BTN
-currenciesSymbol.XFO=XFO
-currenciesSymbol.UYF=UYF
-currenciesSymbol.MYR=MYR
-currenciesSymbol.ZRN=ZRN
-currenciesSymbol.GMP=GMP
-currenciesSymbol.KMF=KMF
-currenciesSymbol.SLL=SLL
-currenciesSymbol.GMD=GMD
-currenciesSymbol.XEU=XEU
-currenciesSymbol.BSP=BSP
-currenciesSymbol.CMF=CMF
-currenciesSymbol.BSD=BSD
-currenciesSymbol.MXP=MXP
-currenciesSymbol.MXN=MXN
-currenciesSymbol.PES=PES
-currenciesSymbol.GLK=GLK
-currenciesSymbol.BRZ=BRZ
-currenciesSymbol.PEN=PEN
-currenciesSymbol.CLP=CLP
-currenciesSymbol.SKK=SKK
-currenciesSymbol.PEI=PEI
-currenciesSymbol.BRR=BRR
-currenciesSymbol.XDR=XDR
-currenciesSymbol.FRG=FRG
-currenciesSymbol.FRF=FRF
-currenciesSymbol.BRN=BRN
-currenciesSymbol.CLF=CLF
-currenciesSymbol.CLE=CLE
-currenciesSymbol.BRL=BRL
-currenciesSymbol.CLC=CLC
-currenciesSymbol.BRE=BRE
-currenciesSymbol.DES=DES
-currenciesSymbol.MWP=MWP
-currenciesSymbol.BRC=BRC
-currenciesSymbol.BRB=BRB
-currenciesSymbol.MWK=MWK
-currenciesSymbol.PDR=PDR
-currenciesSymbol.DEM=DEM
-currenciesSymbol.PDN=PDN
-currenciesSymbol.PDK=PDK
-currenciesSymbol.NPR=NPR
-currenciesSymbol.CKD=CKD
-currenciesSymbol.JPY=JP\u00a5
-currenciesSymbol.MVR=MVR
-currenciesSymbol.MVP=MVP
-currenciesSymbol.XCD=XCD
-currenciesSymbol.SIT=SIT
-currenciesSymbol.YUR=YUR
-currenciesSymbol.AWG=AWG
-currenciesSymbol.YUO=YUO
-currenciesSymbol.DDM=DDM
-currenciesSymbol.YUN=YUN
-currenciesSymbol.YUM=YUM
-currenciesSymbol.TCC=TCC
-currenciesSymbol.YUG=YUG
-currenciesSymbol.YUF=YUF
-currenciesSymbol.RON=RON
-currenciesSymbol.YUD=YUD
-currenciesSymbol.ROL=ROL
-currenciesSymbol.SIB=SIB
-currenciesSymbol.NOK=NOK
-currenciesSymbol.MUR=MUR
-currenciesSymbol.GIP=GIP
-currenciesSymbol.VNS=VNS
-currenciesSymbol.VNR=VNR
-currenciesSymbol.XBB=XBB
-currenciesSymbol.XBA=XBA
-currenciesSymbol.KID=KID
-currenciesSymbol.SHP=SHP
-currenciesSymbol.VNN=VNN
shortMonths=\u4e00\u6708®\u4e8c\u6708®\u4e09\u6708®\u56db\u6708®\u4e94\u6708®\u516d\u6708®\u4e03\u6708®\u516b\u6708®\u4e5d\u6708®\u5341\u6708®\u5341\u4e00\u6708®\u5341\u4e8c\u6708®®
months=\u4e00\u6708®\u4e8c\u6708®\u4e09\u6708®\u56db\u6708®\u4e94\u6708®\u516d\u6708®\u4e03\u6708®\u516b\u6708®\u4e5d\u6708®\u5341\u6708®\u5341\u4e00\u6708®\u5341\u4e8c\u6708®®
-shortWeekdays=®\u65e5®\u4e00®\u4e8c®\u4e09®\u56db®\u4e94®\u516d®
+shortWeekdays=®\u5468\u65e5®\u5468\u4e00®\u5468\u4e8c®\u5468\u4e09®\u5468\u56db®\u5468\u4e94®\u5468\u516d®
weekdays=®\u661f\u671f\u65e5®\u661f\u671f\u4e00®\u661f\u671f\u4e8c®\u661f\u671f\u4e09®\u661f\u671f\u56db®\u661f\u671f\u4e94®\u661f\u671f\u516d®
eras=\u516c\u5143\u524d®\u516c\u5143®
ampms=\u4e0a\u5348®\u4e0b\u5348®
-zoneStrings=America/Indianapolis®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®©America/Halifax®AST®\u5927\u897f\u6d0b\u6807\u51c6\u65f6\u95f4®ADT®\u5927\u897f\u6d0b\u590f\u4ee4\u65f6\u95f4®©Pacific/Honolulu®HST®\u590f\u5a01\u5937\u6807\u51c6\u65f6\u95f4®HST®\u590f\u5a01\u5937\u6807\u51c6\u65f6\u95f4®©America/Denver®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®MDT®\u5c71\u533a\u590f\u4ee4\u65f6\u95f4®©America/Anchorage®AST®\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4®ADT®\u963f\u62c9\u65af\u52a0\u590f\u4ee4\u65f6\u95f4®©America/St_Johns®CNT®\u7ebd\u82ac\u5170\u6807\u51c6\u65f6\u95f4®CDT®\u7ebd\u82ac\u5170\u590f\u4ee4\u65f6\u95f4®©Africa/Casablanca®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®©America/Chicago®CST®\u4e2d\u592e\u6807\u51c6\u65f6\u95f4®CDT®\u4e2d\u592e\u590f\u4ee4\u65f6\u95f4®©Asia/Shanghai®CTT®\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4®CDT®\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4®©Asia/Tokyo®JST®\u65e5\u672c\u6807\u51c6\u65f6\u95f4®JST®\u65e5\u672c\u6807\u51c6\u65f6\u95f4®©America/New_York®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®EDT®\u4e1c\u90e8\u590f\u4ee4\u65f6\u95f4®©Europe/Bucharest®EET®\u4e1c\u6b27\u6807\u51c6\u65f6\u95f4®EEST®\u4e1c\u6b27\u590f\u4ee4\u65f6\u95f4®©America/Los_Angeles®PST®\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4®PDT®\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6\u95f4®©America/Phoenix®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®©Etc/GMT®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®©Asia/Jerusalem®IST®\u4ee5\u8272\u5217\u6807\u51c6\u65f6\u95f4®IDT®\u4ee5\u8272\u5217\u590f\u4ee4\u65f6\u95f4®©Europe/Paris®CET®\u4e2d\u6b27\u6807\u51c6\u65f6\u95f4®CEST®\u4e2d\u6b27\u590f\u4ee4\u65f6\u95f4®©
+zoneStrings=America/Halifax®AST®\u5927\u897f\u6d0b\u6807\u51c6\u65f6\u95f4®ADT®\u5927\u897f\u6d0b\u590f\u4ee4\u65f6\u95f4®©America/Indianapolis®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®©Europe/Paris®CET®\u4e2d\u6b27\u6807\u51c6\u65f6\u95f4®CEST®\u4e2d\u6b27\u590f\u4ee4\u65f6\u95f4®©America/Phoenix®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®©America/Los_Angeles®PST®\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4®PDT®\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6\u95f4®©Pacific/Honolulu®HST®\u590f\u5a01\u5937\u6807\u51c6\u65f6\u95f4®HST®\u590f\u5a01\u5937\u6807\u51c6\u65f6\u95f4®©America/Denver®MST®\u5c71\u533a\u6807\u51c6\u65f6\u95f4®MDT®\u5c71\u533a\u590f\u4ee4\u65f6\u95f4®©Europe/Bucharest®EET®\u4e1c\u6b27\u6807\u51c6\u65f6\u95f4®EEST®\u4e1c\u6b27\u590f\u4ee4\u65f6\u95f4®©America/New_York®EST®\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4®EDT®\u4e1c\u90e8\u590f\u4ee4\u65f6\u95f4®©Asia/Tokyo®JST®\u65e5\u672c\u6807\u51c6\u65f6\u95f4®JST®\u65e5\u672c\u6807\u51c6\u65f6\u95f4®©America/Anchorage®AST®\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4®ADT®\u963f\u62c9\u65af\u52a0\u590f\u4ee4\u65f6\u95f4®©Asia/Shanghai®CTT®\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4®CDT®\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4®©America/Chicago®CST®\u4e2d\u592e\u6807\u51c6\u65f6\u95f4®CDT®\u4e2d\u592e\u590f\u4ee4\u65f6\u95f4®©Africa/Casablanca®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®GMT®\u683c\u6797\u5a01\u6cbb\u6807\u51c6\u65f6\u95f4®©America/St_Johns®CNT®\u7ebd\u82ac\u5170\u6807\u51c6\u65f6\u95f4®CDT®\u7ebd\u82ac\u5170\u590f\u4ee4\u65f6\u95f4®©Asia/Jerusalem®IST®\u4ee5\u8272\u5217\u6807\u51c6\u65f6\u95f4®IDT®\u4ee5\u8272\u5217\u590f\u4ee4\u65f6\u95f4®©
territories.TL=\u4e1c\u5e1d\u6c76
territories.TK=\u6258\u514b\u52b3
territories.TJ=\u5854\u5409\u514b\u65af\u5766
@@ -762,7 +280,9 @@ territories.GN=\u51e0\u5185\u4e9a
territories.GM=\u5188\u6bd4\u4e9a
territories.GL=\u683c\u9675\u5170
territories.SV=\u8428\u5c14\u74e6\u591a
+territories.062=\u4e2d\u5357\u4e9a
territories.ST=\u5723\u591a\u7f8e\u548c\u666e\u6797\u897f\u6bd4
+territories.061=\u73bb\u91cc\u5c3c\u897f\u4e9a
territories.GI=\u76f4\u5e03\u7f57\u9640
territories.GH=\u52a0\u7eb3
territories.SR=\u82cf\u91cc\u5357
@@ -786,9 +306,12 @@ territories.SC=\u585e\u820c\u5c14
territories.SB=\u6240\u7f57\u95e8\u7fa4\u5c9b
territories.SA=\u6c99\u7279\u963f\u62c9\u4f2f
territories.FR=\u6cd5\u56fd
+territories.057=\u5bc6\u514b\u7f57\u5c3c\u897f\u4e9a
territories.FO=\u6cd5\u7f57\u7fa4\u5c9b
territories.FM=\u5bc6\u514b\u7f57\u5c3c\u897f\u4e9a\u8054\u90a6
territories.RW=\u5362\u65fa\u8fbe
+territories.054=\u7f8e\u62c9\u5c3c\u897f\u4e9a
+territories.053=\u6fb3\u5927\u5229\u4e9a\u548c\u65b0\u897f\u5170
territories.FK=\u798f\u514b\u5170\u7fa4\u5c9b
territories.RU=\u4fc4\u7f57\u65af\u8054\u90a6
territories.FJ=\u6590\u6d4e
@@ -798,20 +321,26 @@ territories.RE=\u7559\u5c3c\u6c6a
territories.ET=\u57c3\u585e\u4fc4\u6bd4\u4e9a
territories.ES=\u897f\u73ed\u7259
territories.ER=\u5384\u7acb\u7279\u91cc\u4e9a
+territories.833=\u66fc\u5c9b
territories.EH=\u897f\u6492\u54c8\u62c9
territories.EG=\u57c3\u53ca
+territories.830=\u6d77\u5ce1\u7fa4\u5c9b
territories.EE=\u7231\u6c99\u5c3c\u4e9a
+territories.QO=\u5927\u6d0b\u6d32\u8fb9\u8fdc\u7fa4\u5c9b
territories.EC=\u5384\u74dc\u591a\u5c14
territories.DZ=\u963f\u5c14\u53ca\u5229\u4e9a
territories.QA=\u5361\u5854\u5c14
+territories.039=\u5357\u6b27
territories.DO=\u591a\u7c73\u5c3c\u52a0\u5171\u548c\u56fd
territories.PY=\u5df4\u62c9\u572d
+territories.035=\u4e1c\u5357\u4e9a
territories.DM=\u591a\u7c73\u5c3c\u52a0\u5c98
territories.PW=\u5e15\u52b3
territories.DK=\u4e39\u9ea6
territories.DJ=\u5409\u5e03\u63d0
territories.PT=\u8461\u8404\u7259
territories.PS=\u5df4\u52d2\u65af\u5766\u9886\u571f
+territories.030=\u4e1c\u4e9a
territories.PR=\u6ce2\u591a\u9ece\u5404
territories.DE=\u5fb7\u56fd
territories.PN=\u76ae\u7279\u51ef\u6069
@@ -828,13 +357,16 @@ territories.CX=\u5723\u8bde\u5c9b
territories.CV=\u4f5b\u5f97\u89d2
territories.PA=\u5df4\u62ff\u9a6c
territories.CU=\u53e4\u5df4
+territories.CS=\u585e\u5c14\u7ef4\u4e9a\u548c\u9ed1\u5c71
territories.CR=\u54e5\u65af\u8fbe\u9ece\u52a0
+territories.029=\u52a0\u52d2\u6bd4\u6d77
territories.CO=\u54e5\u4f26\u6bd4\u4e9a
territories.CN=\u4e2d\u56fd
territories.CM=\u5580\u9ea6\u9686
territories.CL=\u667a\u5229
territories.CK=\u5e93\u514b\u7fa4\u5c9b
territories.CI=\u8c61\u7259\u6d77\u5cb8
+territories.021=\u5317\u7f8e\u6d32
territories.CH=\u745e\u58eb
territories.CG=\u521a\u679c
territories.CF=\u4e2d\u975e\u5171\u548c\u56fd
@@ -849,13 +381,20 @@ territories.BV=\u5e03\u7ef4\u7279\u5c9b
territories.BT=\u4e0d\u4e39
territories.BS=\u5df4\u54c8\u9a6c
territories.BR=\u5df4\u897f
+territories.019=\u7f8e\u6d32
+territories.018=\u5357\u975e
territories.NZ=\u65b0\u897f\u5170
territories.BO=\u73bb\u5229\u7ef4\u4e9a
+territories.017=\u4e2d\u975e
territories.BN=\u6587\u83b1
territories.BM=\u767e\u6155\u5927
+territories.015=\u5317\u975e
+territories.014=\u4e1c\u975e
+territories.013=\u4e2d\u7f8e\u6d32
territories.NU=\u7ebd\u57c3
territories.BJ=\u8d1d\u5b81
territories.BI=\u5e03\u9686\u8fea
+territories.011=\u897f\u975e
territories.BH=\u5df4\u6797
territories.NR=\u7459\u9c81
territories.BG=\u4fdd\u52a0\u5229\u4e9a
@@ -873,6 +412,7 @@ territories.NG=\u5c3c\u65e5\u5229\u4e9a
territories.NF=\u8bfa\u798f\u514b\u5c9b
territories.AZ=\u963f\u585e\u62dc\u7586
territories.NE=\u5c3c\u65e5\u5c14
+territories.AX=\u5965\u5170\u7fa4\u5c9b
territories.NC=\u65b0\u5580\u91cc\u591a\u5c3c\u4e9a
territories.AW=\u963f\u9c81\u5df4
territories.ZM=\u8d5e\u6bd4\u4e9a
@@ -881,19 +421,23 @@ territories.AU=\u6fb3\u5927\u5229\u4e9a
territories.AT=\u5965\u5730\u5229
territories.AS=\u7f8e\u5c5e\u8428\u6469\u4e9a
territories.AR=\u963f\u6839\u5ef7
+territories.009=\u5927\u6d0b\u6d32
territories.AQ=\u5357\u6781\u6d32
territories.MZ=\u83ab\u6851\u6bd4\u514b
territories.AO=\u5b89\u54e5\u62c9
territories.MY=\u9a6c\u6765\u897f\u4e9a
territories.AN=\u8377\u5c5e\u5b89\u7684\u5217\u65af\u7fa4\u5c9b
territories.MX=\u58a8\u897f\u54e5
+territories.005=\u5357\u7f8e\u6d32
territories.AM=\u4e9a\u7f8e\u5c3c\u4e9a
territories.MW=\u9a6c\u62c9\u7ef4
territories.AL=\u963f\u5c14\u5df4\u5c3c\u4e9a
territories.MV=\u9a6c\u5c14\u4ee3\u592b
territories.ZA=\u5357\u975e
territories.MU=\u6bdb\u91cc\u6c42\u65af
+territories.002=\u975e\u6d32
territories.MT=\u9a6c\u8033\u4ed6
+territories.001=\u4e16\u754c
territories.AI=\u5b89\u572d\u62c9
territories.MS=\u8499\u7279\u585e\u62c9\u7fa4\u5c9b
territories.MR=\u6bdb\u91cc\u5854\u5c3c\u4e9a
@@ -908,7 +452,6 @@ territories.MN=\u8499\u53e4
territories.MM=\u7f05\u7538
territories.ML=\u9a6c\u91cc
territories.MK=\u9a6c\u5176\u987f\u738b\u56fd
-territories.YU=\u5357\u65af\u62c9\u592b
territories.YT=\u9a6c\u7ea6\u7279
territories.MH=\u9a6c\u7ecd\u5c14\u7fa4\u5c9b
territories.MG=\u9a6c\u8fbe\u52a0\u65af\u52a0
@@ -918,10 +461,14 @@ territories.MA=\u6469\u6d1b\u54e5
territories.YE=\u4e5f\u95e8
territories.LY=\u5229\u6bd4\u4e9a
territories.LV=\u62c9\u8131\u7ef4\u4e9a
+territories.155=\u897f\u6b27
territories.LU=\u5362\u68ee\u5821
+territories.154=\u5317\u6b27
territories.LT=\u7acb\u9676\u5b9b
territories.LS=\u83b1\u7d22\u6258
territories.LR=\u5229\u6bd4\u91cc\u4e9a
+territories.151=\u4e1c\u6b27
+territories.150=\u6b27\u6d32
territories.LK=\u65af\u91cc\u5170\u5361
territories.LI=\u5217\u652f\u6566\u58eb\u767b
territories.LC=\u5723\u5362\u897f\u4e9a
@@ -930,6 +477,8 @@ territories.LA=\u8001\u631d\u4eba\u6c11\u6c11\u4e3b\u5171\u548c\u56fd
territories.KZ=\u54c8\u8428\u514b\u65af\u5766
territories.KY=\u5f00\u66fc\u7fa4\u5c9b
territories.KW=\u79d1\u5a01\u7279
+territories.145=\u897f\u4e9a
+territories.142=\u4e9a\u6d32
territories.KR=\u97e9\u56fd
territories.KP=\u5317\u671d\u9c9c
territories.KN=\u5723\u57fa\u8328\u548c\u5c3c\u7ef4\u65af
@@ -979,8 +528,8 @@ territories.TR=\u571f\u8033\u5176
territories.TO=\u6c64\u52a0
territories.TN=\u7a81\u5c3c\u65af
territories.TM=\u571f\u5e93\u66fc\u65af\u5766
-languages.gwi=\u5409\u7ef4\u514b\u7434\u6587
languages.akk=\u963f\u5361\u5fb7\u6587
+languages.gwi=\u5409\u7ef4\u514b\u7434\u6587
languages.ijo=\u4f0a\u4e54\u6587
languages.xh=\u73ed\u56fe\u6587
languages.sux=\u82cf\u9a6c\u6587
@@ -992,15 +541,15 @@ languages.pon=\u6ce2\u90a3\u8d1d\u6587
languages.min=\u7c73\u5357\u5361\u4fdd\u6587
languages.suk=\u82cf\u5e93\u9a6c\u6587
languages.wo=\u6c83\u5c14\u592b\u6587
-languages.lol=\u8499\u53e4\u6587
languages.kut=\u5e93\u7279\u5185\u6587
+languages.lol=\u8499\u53e4\u6587
languages.mic=\u7c73\u514b\u9a6c\u514b\u6587
languages.wa=\u83ef\u9686\u6587
languages.kum=\u5e93\u6885\u514b\u6587
languages.zap=\u8428\u6ce2\u8482\u514b\u6587
languages.cus=\u5176\u4ed6\u5e93\u65bd\u7279\u8bed\u7cfb
-languages.jbo=\u6d1b\u5409\u822c\uff08\u4eba\u5de5\u8bed\u8a00\uff09
languages.doi=\u591a\u683c\u6765\u6587
+languages.jbo=\u6d1b\u5409\u822c\uff08\u4eba\u5de5\u8bed\u8a00\uff09
languages.vo=\u6c83\u62c9\u666e\u514b\u6587
languages.oto=\u5965\u6258\u7c73\u8bed\u7cfb
languages.vi=\u8d8a\u5357\u6587
@@ -1023,8 +572,8 @@ languages.uk=\u4e4c\u514b\u5170\u6587
languages.ug=\u7ef4\u543e\u5c14\u6587
languages.fan=\u82b3\u683c\u6587
languages.ssa=\u5176\u4ed6\u5c3c\u7f57\u8428\u54c8\u5170\u6587
-languages.mga=\u4e2d\u53e4\u7231\u5c14\u5170\u6587
languages.bat=\u6ce2\u7f57\u7684\u6d77\u5730\u533a\u4e4b\u8bed\u8a00
+languages.mga=\u4e2d\u53e4\u7231\u5c14\u5170\u6587
languages.nyo=\u5c3c\u7ea6\u7f57\u8bed\u65cf
languages.bas=\u5df4\u8428\u6587
languages.nyn=\u5c3c\u6602\u79d1\u52d2\u6587
@@ -1052,8 +601,8 @@ languages.kru=\u5e93\u9c81\u514b\u6587
languages.tg=\u5854\u5409\u514b\u6587
languages.byn=\u5e03\u6797\u6587
languages.te=\u6cf0\u5362\u56fa\u6587
-languages.kro=\u514b\u9c81\u6587
languages.csb=\u5361\u8212\u6587
+languages.kro=\u514b\u9c81\u6587
languages.ta=\u6cf0\u7c73\u5c14\u6587
languages.tkl=\u9640\u514b\u5a04\u6587
languages.sw=\u65af\u74e6\u5e0c\u91cc\u6587
@@ -1076,8 +625,8 @@ languages.sk=\u65af\u6d1b\u4f10\u514b\u6587
languages.grb=\u683c\u5217\u535a\u6587
languages.si=\u50e7\u4f3d\u7f57\u6587
languages.sh=\u585e\u6ce2\u5c3c\u65af-\u514b\u7f57\u5730\u4e9a\u6587
-languages.crh=\u514b\u91cc\u7c73\u4e9a\u571f\u8033\u5176\u6587\uff1b\u514b\u91cc\u7c73\u4e9a\u5854\u5854\u6587
languages.afa=\u5176\u4ed6\u4e9a\u975e\u8bed\u7cfb
+languages.crh=\u514b\u91cc\u7c73\u4e9a\u571f\u8033\u5176\u6587\uff1b\u514b\u91cc\u7c73\u4e9a\u5854\u5854\u6587
languages.sg=\u6851\u6208\u6587
languages.se=\u5317\u8428\u8ff7\u6587
languages.sd=\u82cf\u4e39\u6587
@@ -1101,14 +650,14 @@ languages.son=\u6851\u6d77\u6587
languages.cpp=\u4e0d\u7eaf\u7cb9\u4e4b\u8461\u56fd\u65b9\u8a00
languages.sog=\u7d22\u683c\u8fea\u4e9a\u6587
languages.ada=\u963f\u5f53\u6885\u6587
-languages.kos=\u67ef\u53f8\u745e\u6069\u6587
-languages.hit=\u897f\u53f0\u6587
languages.cpf=\u4e0d\u7eaf\u7cb9\u4e4b\u6cd5\u56fd\u65b9\u8a00
+languages.hit=\u897f\u53f0\u6587
+languages.kos=\u67ef\u53f8\u745e\u6069\u6587
languages.cpe=\u4e0d\u7eaf\u7cb9\u4e4b\u82f1\u56fd\u65b9\u8a00
languages.him=\u8d6b\u9a6c\u67e5\u5229\u6587
-languages.kok=\u521a\u5361\u5c3c\u6587
-languages.hil=\u5e0c\u5229\u76d6\u519c\u6587
languages.got=\u54e5\u8fbe\u6587
+languages.hil=\u5e0c\u5229\u76d6\u519c\u6587
+languages.kok=\u521a\u5361\u5c3c\u6587
languages.gor=\u79d1\u6d1b\u6d85\u8fbe\u7f57\u6587
languages.gon=\u5c97\u5fb7\u6587
languages.din=\u4e01\u5361\u6587
@@ -1179,21 +728,21 @@ languages.ms=\u9a6c\u6765\u6587
languages.mr=\u9a6c\u62c9\u5730\u6587
languages.fro=\u53e4\u6cd5\u6587
languages.mo=\u6469\u5c14\u591a\u74e6\u6587
-languages.frm=\u4e2d\u53e4\u6cd5\u6587
languages.mn=\u8499\u53e4\u6587
-languages.jrb=\u72b9\u592a\u963f\u62c9\u4f2f\u8bed\u7cfb
+languages.frm=\u4e2d\u53e4\u6cd5\u6587
languages.ml=\u9a6c\u6765\u4e9a\u62c9\u59c6\u6587
+languages.jrb=\u72b9\u592a\u963f\u62c9\u4f2f\u8bed\u7cfb
languages.mk=\u9a6c\u5176\u987f\u6587
languages.mi=\u6bdb\u5229\u6587
languages.mh=\u9a6c\u7ecd\u5c14\u6587
languages.mg=\u9a6c\u5c14\u52a0\u4ec0\u6587
languages.mwr=\u9a6c\u5c14\u5c3c\u91cc\u6587
languages.bra=\u5e03\u62c9\u6770\u6587
-languages.den=\u53f8\u96f7\u592b\u6587
languages.lv=\u62c9\u812b\u7dad\u4e9e\u6587
+languages.den=\u53f8\u96f7\u592b\u6587
languages.lu=\u9c81\u5df4\u52a0\u4e39\u52a0\u6587
-languages.del=\u7279\u62c9\u74e6\u5370\u7b2c\u5b89\u4eba\u6587
languages.lt=\u7acb\u9676\u5b9b\u6587
+languages.del=\u7279\u62c9\u74e6\u5370\u7b2c\u5b89\u4eba\u6587
languages.lo=\u8001\u631d\u6587
languages.ln=\u6797\u52a0\u62c9\u6587
languages.li=\u6dcb\u5e03\u5c14\u5409\u6587
@@ -1246,38 +795,38 @@ languages.iu=\u7231\u65af\u57fa\u6469\u6587
languages.pap=\u5e15\u76ae\u4e9a\u5185\u6258\u6587
languages.it=\u610f\u5927\u5229\u6587
languages.sgn=\u624b\u8bed
-languages.is=\u51b0\u5c9b\u6587
languages.kha=\u5361\u897f\u6587
+languages.is=\u51b0\u5c9b\u6587
languages.chr=\u5f7b\u7f57\u57fa\u6587
languages.pam=\u90a6\u677f\u7259\u6587
languages.pal=\u5e15\u62c9\u7ef4\u6587
languages.chp=\u4f69\u74e6\u626c\u6587
-languages.io=\u7231\u5fb7\u83aa\u6587\uff08\u4eba\u5de5\u8bed\u8a00\uff09
languages.cho=\u4e54\u514b\u6258\u6587
+languages.io=\u7231\u5fb7\u83aa\u6587\uff08\u4eba\u5de5\u8bed\u8a00\uff09
languages.chn=\u5951\u52aa\u514b\u6587
languages.chm=\u9a6c\u91cc\u6587
languages.tyv=\u56fe\u74e6\u6587
languages.bnt=\u73ed\u56fe\u6587
languages.pag=\u90a6\u963f\u897f\u5357\u6587
-languages.ik=\u4f9d\u5974\u76ae\u7ef4\u514b\u6587
languages.chk=\u695a\u543e\u514b\u6587
-languages.ii=\u56db\u5ddd\u8bdd
+languages.ik=\u4f9d\u5974\u76ae\u7ef4\u514b\u6587
languages.haw=\u590f\u5a01\u5937\u6587
+languages.ii=\u56db\u5ddd\u8bdd
languages.lam=\u5170\u5df4\u6587
-languages.ig=\u4f0a\u683c\u535a\u6587
languages.chg=\u67e5\u52a0\u6587
+languages.ig=\u4f0a\u683c\u535a\u6587
languages.sga=\u53e4\u7231\u5c14\u5170\u6587
languages.paa=\u5176\u4ed6\u5df4\u5e03\u4e9a\u6587
languages.ie=\u62c9\u4e01\u56fd\u9645\u6587
languages.id=\u5370\u5ea6\u5c3c\u897f\u4e9a\u6587
languages.lah=\u62c9\u4ea8\u8fbe\u6587
-languages.day=\u8fbe\u96c5\u514b\u6587
languages.chb=\u5951\u5e03\u5361\u6587
+languages.day=\u8fbe\u96c5\u514b\u6587
languages.ia=\u62c9\u4e01\u56fd\u9645\u6587
languages.lad=\u62c9\u8fea\u8bfa\u6587
-languages.hz=\u8d6b\u96f7\u7f57\u6587
-languages.hai=\u6d77\u8fbe\u6587
languages.dar=\u8fbe\u5c14\u683c\u74e6\u6587
+languages.hai=\u6d77\u8fbe\u6587
+languages.hz=\u8d6b\u96f7\u7f57\u6587
languages.hy=\u4e9a\u7f8e\u5c3c\u4e9a\u6587
languages.ath=\u5176\u4ed6\u963f\u6492\u5df4\u65af\u5361\u8bed\u7cfb
languages.hu=\u5308\u7259\u5229\u6587
@@ -1298,9 +847,9 @@ languages.iro=\u4f0a\u6d1b\u90ed\u4f0a\u8d39\u6587
languages.gn=\u74dc\u62c9\u5c3c\u6587
languages.gl=\u52a0\u5229\u897f\u4e9a\u6587
languages.arw=\u963f\u62c9\u74e6\u514b\u6587
-languages.gez=\u5409\u5179\u6587
-languages.art=\u5176\u4ed6\u4eba\u5de5\u8bed\u8a00
languages.gd=\u82cf\u683c\u5170- \u76d6\u5c14\u6587
+languages.art=\u5176\u4ed6\u4eba\u5de5\u8bed\u8a00
+languages.gez=\u5409\u5179\u6587
languages.ira=\u4f0a\u6717\u6587
languages.ga=\u7231\u5c14\u5170\u6587
languages.arp=\u963f\u62c9\u5e15\u970d\u6587
@@ -1308,8 +857,8 @@ languages.arn=\u963f\u52b3\u574e\u6587
languages.fy=\u5f17\u91cc\u65af\u5170\u6587
languages.bla=\u53f8\u514b\u53f8\u5361\u6587
languages.ypk=\u55bb\u76ae\u514b\u6587
-languages.arc=\u963f\u62c9\u7c73\u6587
languages.fr=\u6cd5\u6587
+languages.arc=\u963f\u62c9\u7c73\u6587
languages.fo=\u6cd5\u7f57\u6587
languages.cel=\u5176\u4ed6\u51ef\u5c14\u7279\u8bed\u7cfb
languages.fj=\u6590\u6d4e\u6587
@@ -1333,9 +882,9 @@ languages.tum=\u901a\u5e03\u5361\u6587
languages.mos=\u83ab\u897f\u6587
languages.dz=\u4e0d\u4e39\u6587
languages.nic=\u5176\u4ed6\u5c3c\u65e5\u5c14\u521a\u679c\u8bed\u7cfb
-languages.lus=\u5362\u6652\u6587
-languages.fiu=\u82ac\u5308\u6587\uff08\u5176\u4ed6\uff09
languages.dv=\u8fea\u7ef4\u5e0c\u6587
+languages.fiu=\u82ac\u5308\u6587\uff08\u5176\u4ed6\uff09
+languages.lus=\u5362\u6652\u6587
languages.nia=\u5c3c\u5c14\u53f8\u6587
languages.moh=\u6469\u970d\u514b\u6587
languages.luo=\u5362\u5965\u6587
@@ -1358,8 +907,8 @@ languages.wak=\u74e6\u5580\u5c71\u6587
languages.sat=\u6851\u55d2\u5229\u6587
languages.cy=\u5a01\u5c14\u58eb\u6587
languages.sas=\u585e\u585e\u5361\u6587
-languages.kbd=\u5361\u5df4\u5c14\u8fbe\u6587
languages.cv=\u695a\u74e6\u4ec0\u6587
+languages.kbd=\u5361\u5df4\u5c14\u8fbe\u6587
languages.cu=\u5b97\u6559\u65af\u62c9\u592b\u6587
languages.mni=\u66fc\u5c3c\u666e\u91cc\u6587
languages.cs=\u6377\u514b\u6587
@@ -1371,17 +920,17 @@ languages.co=\u79d1\u897f\u5609\u6587
languages.sai=\u5176\u4ed6\u5357\u7f8e\u5370\u7b2c\u5b89\u6587
languages.mnc=\u6ee1\u6587
languages.sah=\u96c5\u5e93\u7279\u6587
-languages.kaw=\u5361\u5a01\u6587
-languages.inh=\u5370\u53e4\u4ec0\u6587
languages.gba=\u845b\u5df4\u4e9a\u6587
+languages.inh=\u5370\u53e4\u4ec0\u6587
+languages.kaw=\u5361\u5a01\u6587
languages.sad=\u6563\u8fbe\u7ef4\u6587
languages.ch=\u67e5\u83ab\u7f57\u6587
-languages.ine=\u5176\u4ed6\u5370\u6b27\u8bed\u7cfb
languages.bho=\u535a\u6770\u666e\u5c14\u6587
+languages.ine=\u5176\u4ed6\u5370\u6b27\u8bed\u7cfb
languages.enm=\u4e2d\u53e4\u82f1\u6587
-languages.kar=\u5580\u4f26\u6587
-languages.inc=\u5370\u5ea6\u6587\uff08\u5176\u4ed6\uff09
languages.ce=\u8f66\u81e3\u6587
+languages.inc=\u5370\u5ea6\u6587\uff08\u5176\u4ed6\uff09
+languages.kar=\u5580\u4f26\u6587
languages.gay=\u8fe6\u7ea6\u6587
languages.ca=\u52a0\u6cf0\u7f57\u5c3c\u4e9a\u6587
languages.umb=\u59c6\u5d29\u675c\u6587
@@ -1389,19 +938,19 @@ languages.syr=\u53d9\u5229\u4e9a\u6587
languages.kam=\u5361\u59c6\u5df4\u6587
languages.tsi=\u8482\u59c6\u897f\u4e9a\u6587
languages.ang=\u4e2d\u53e4\u82f1\u8bed
-languages.kac=\u5361\u7434\u6587
languages.cau=\u5176\u4ed6\u9ad8\u52a0\u7d22\u8bed\u7cfb
+languages.kac=\u5361\u7434\u6587
languages.kab=\u5361\u6bd4\u5c14\u6587
-languages.kaa=\u5361\u62c9\u5361\u5c14\u5e15\u514b\u6587
languages.bs=\u6ce2\u65af\u5c3c\u4e9a\u6587
-languages.car=\u5df4\u52d2\u6bd4\u6587
+languages.kaa=\u5361\u62c9\u5361\u5c14\u5e15\u514b\u6587
languages.br=\u5e03\u91cc\u591a\u5c3c\u6587
+languages.car=\u5df4\u52d2\u6bd4\u6587
languages.bo=\u897f\u85cf\u6587
languages.bn=\u5b5f\u52a0\u62c9\u6587
languages.bm=\u73ed\u5df4\u62c9\u6587
languages.gaa=\u52a0\u6587
-languages.cai=\u5176\u4ed6\u4e2d\u7f8e\u5370\u7b2c\u5b89\u8bed\u7cfb
languages.bi=\u6bd4\u65af\u62c9\u9a6c\u6587
+languages.cai=\u5176\u4ed6\u4e2d\u7f8e\u5370\u7b2c\u5b89\u8bed\u7cfb
languages.bh=\u6bd4\u54c8\u5c14\u6587
languages.bg=\u4fdd\u52a0\u5229\u4e9a\u6587
languages.be=\u767d\u4fc4\u7f57\u65af\u6587
@@ -1415,10 +964,10 @@ languages.az=\u963f\u585e\u62dc\u7586\u6587
languages.ay=\u827e\u9a6c\u62c9\u6587
languages.av=\u963f\u74e6\u5c14\u6587
languages.as=\u963f\u8428\u59c6\u6587
-languages.dsb=\u4e0b\u585e\u5c14\u7ef4\u4e9a\u6587
languages.ar=\u963f\u62c9\u4f2f\u6587
-languages.ilo=\u4f0a\u6d1b\u5e72\u8bfa\u6587
+languages.dsb=\u4e0b\u585e\u5c14\u7ef4\u4e9a\u6587
languages.elx=\u827e\u62c9\u7c73\u7279\u6587
+languages.ilo=\u4f0a\u6d1b\u5e72\u8bfa\u6587
languages.zh=\u4e2d\u6587
languages.pra=\u5370\u5ea6\u53e4\u4ee3\u53ca\u4e2d\u4e16\u7eaa\u4e4b\u4e2d\u90e8\u53ca\u5317\u90e8\u65b9\u8a00
languages.am=\u963f\u59c6\u54c8\u62c9\u6587
diff --git a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh_Hant.properties b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh_Hant.properties
index 0f79a7d..505cf5f 100644
--- a/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh_Hant.properties
+++ b/libjava/classpath/resource/gnu/java/locale/LocaleInformation_zh_Hant.properties
@@ -5,394 +5,243 @@
#
# This file was automatically generated by gnu.localegen from CLDR.
-currenciesDisplayName.JOD=\u7d04\u65e6\u7b2c\u7d0d\u723e
-currenciesDisplayName.BOV=\u73bb\u5229\u7dad\u4e9e \u5e55\u591a
-currenciesDisplayName.XAU=\u9ec3\u91d1
-currenciesDisplayName.FOK=\u6cd5\u7f85\u5cf6\u514b\u6717
-currenciesDisplayName.LBP=\u9ece\u5df4\u5ae9\u938a
-currenciesDisplayName.EUR=\u6b50\u5143
-currenciesDisplayName.TZS=\u5766\u6851\u5c3c\u4e9e \u5148\u4ee4
-currenciesDisplayName.BOP=\u73bb\u5229\u7dad\u4e9e\u62ab\u7d22
-currenciesDisplayName.KHR=\u67ec\u57d4\u5be8\u745e\u723e
-currenciesDisplayName.XAM=\u4e9e\u6d32\u8ca8\u5e63\u55ae\u4f4d
-currenciesDisplayName.BOL=\u73bb\u5229\u7dad\u4e9e\u820a\u8ca8\u5e63\u55ae\u4f4d (1863-1962)
-currenciesDisplayName.KHO=\u67ec\u57d4\u5be8\u820a\u745e\u723e
-currenciesDisplayName.ZMP=\u8d0a\u6bd4\u4e9e\u938a
-currenciesDisplayName.AUP=\u6fb3\u5927\u5229\u4e9e\u938a
-currenciesDisplayName.XAF=\u897f\u975e \u6cd5\u90ce BEAC
-currenciesDisplayName.MTP=\u99ac\u723e\u4ed6\u938a
-currenciesDisplayName.GHR=\u8fe6\u7d0d\u91cd\u65b0\u4f30\u4ef7\u5f8c\u7684\u4ed9\u8515
-currenciesDisplayName.ZMK=\u5c1a\u6bd4\u4e9e\u514b\u74e6\u67e5
-currenciesDisplayName.XAD=\u4e9e\u6d32\u7b2c\u7d0d\u723e\u6703\u8a08\u55ae\u4f4d
-currenciesDisplayName.GHP=\u8fe6\u7d0d\u938a
-currenciesDisplayName.BOB=\u73bb\u5229\u7dad\u4e9e\u8ca8\u5e63\u55ae\u4f4d
-currenciesDisplayName.GHO=\u8fe6\u7d0d\u820a\u4ed9\u8515
-currenciesDisplayName.MTL=\u99ac\u723e\u4ed6\u91cc\u62c9
-currenciesDisplayName.AUD=\u6fb3\u5e63
-currenciesDisplayName.ITL=\u7fa9\u5927\u5229\u91cc\u62c9
-currenciesDisplayName.USN=\u7f8e\u5143 (\u7b2c\u4e8c\u5929)
-currenciesDisplayName.GHC=\u8fe6\u7d0d\u4ed9\u8515
-currenciesDisplayName.SGD=\u65b0\u52a0\u5761\u5e63
-currenciesDisplayName.PAB=\u5df4\u62ff\u99ac\u5df4\u6ce2\u4e9e
-currenciesDisplayName.LAK=\u8001\u64be \u958b\u666e
-currenciesDisplayName.KGS=\u5409\u723e\u5409\u65af\u7d22\u99ac
-currenciesDisplayName.ATS=\u5967\u5730\u5229\u5148\u4ee4
-currenciesDisplayName.ETD=\u57c3\u8cfd\u4fc4\u6bd4\u4e9e\u5143
-currenciesDisplayName.BND=\u6c76\u840a\u5143
-currenciesDisplayName.JMP=\u7259\u8cb7\u52a0\u938a
-currenciesDisplayName.ETB=\u8863\u7d22\u6bd4\u4e9e\u6bd4\u723e
-currenciesDisplayName.DZG=\u963f\u723e\u53ca\u5229\u4e9e\u6cd5\u90ce Germinal
-currenciesDisplayName.DZF=\u963f\u723e\u53ca\u5229\u4e9e\u65b0\u6cd5\u90ce
-currenciesDisplayName.DZD=\u963f\u723e\u53ca\u5229\u4e9e\u7b2c\u7d0d\u723e
-currenciesDisplayName.PYG=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c
-currenciesDisplayName.LYP=\u5229\u6bd4\u4e9e\u938a
-currenciesDisplayName.JMD=\u7259\u8cb7\u52a0\u5143
-currenciesDisplayName.ISK=\u51b0\u5cf6\u514b\u6717
-currenciesDisplayName.ESP=\u897f\u73ed\u7259\u966a\u58eb\u7279
-currenciesDisplayName.BMP=\u767e\u6155\u9054\u938a
-currenciesDisplayName.LYD=\u5229\u6bd4\u4e9e\u7b2c\u7d0d\u723e
-currenciesDisplayName.LYB=\u5229\u6bd4\u4e9e\u82f1\u570b\u7684\u8ecd\u4e8b\u7576\u5c40\u91cc\u62c9
-currenciesDisplayName.BMD=\u767e\u6155\u9054\u5e63
-currenciesDisplayName.NLG=\u8377\u862d\u76fe
-currenciesDisplayName.MRO=\u8305\u5229\u5854\u5c3c\u4e9e\u70cf\u5409\u4e9e
-currenciesDisplayName.IRR=\u4f0a\u6717\u91cc\u4e9e\u723e
-currenciesDisplayName.SEK=\u745e\u5178\u514b\u7f85\u7d0d
-currenciesDisplayName.ERN=\u5384\u7acb\u7279\u91cc\u4e9e\u7d0d\u514b\u6cd5
+currenciesDisplayName.YDD=\u8449\u9580\u7b2c\u7d0d\u723e
+currenciesDisplayName.TWD=\u65b0\u81fa\u5e63
currenciesDisplayName.KES=\u80af\u5c3c\u4e9e\u5148\u4ee4
-currenciesDisplayName.CFF=\u4e2d\u975e\u5171\u548c\u570b\u897f\u975e\u6cd5\u90ce
+currenciesDisplayName.BYB=\u767d\u4fc4\u7f85\u65af\u65b0\u76e7\u5e03 (1994-1999)
+currenciesDisplayName.LKR=\u65af\u91cc\u862d\u5361\u76e7\u5e03
+currenciesDisplayName.RWF=\u76e7\u5b89\u9054\u6cd5\u90ce
+currenciesDisplayName.TJS=\u5854\u5409\u514b\u65af\u5766 \u7d22\u83ab\u5c3c
+currenciesDisplayName.SDP=\u8607\u4e39\u938a
+currenciesDisplayName.TJR=\u5854\u5409\u514b\u65af\u5766\u76e7\u5e03
+currenciesDisplayName.ERN=\u5384\u7acb\u7279\u91cc\u4e9e\u7d0d\u514b\u6cd5
+currenciesDisplayName.GRD=\u5e0c\u81d8\u5fb7\u62c9\u514b\u99ac
+currenciesDisplayName.IEP=\u611b\u723e\u862d\u938a
currenciesDisplayName.ARS=\u963f\u6839\u5ef7\u62ab\u7d22
+currenciesDisplayName.SDD=\u8607\u4e39\u7b2c\u7d0d\u723e
currenciesDisplayName.ARP=\u963f\u6839\u5ef7\u62ab\u7d22(1983-1985)
-currenciesDisplayName.ARM=\u963f\u6839\u5ef7\u62ab\u7d22 Moneda Nacional
-currenciesDisplayName.TWD=\u65b0\u81fa\u5e63
-currenciesDisplayName.SDP=\u8607\u4e39\u938a
currenciesDisplayName.GEL=\u55ac\u6cbb\u62c9\u91cc
currenciesDisplayName.GEK=\u55ac\u6cbb \u5eab\u65c1 \u62c9\u91cc
-currenciesDisplayName.MQF=\u99ac\u63d0\u5c3c\u514b\u5cf6\u6cd5\u90ce
+currenciesDisplayName.CRC=\u54e5\u65af\u5927\u9ece\u52a0\u79d1\u90ce
currenciesDisplayName.FKP=\u798f\u514b\u862d\u7fa4\u5cf6\u938a
+currenciesDisplayName.EEK=\u611b\u6c99\u5c3c\u4e9e\u514b\u6717
+currenciesDisplayName.MDL=\u6469\u675c\u96f2\u5217\u4f0a
currenciesDisplayName.ARA=\u963f\u6839\u5ef7\u5967\u65af\u7279\u7d0d\u723e
-currenciesDisplayName.SDD=\u8607\u4e39\u7b2c\u7d0d\u723e
currenciesDisplayName.IQD=\u4f0a\u62c9\u514b\u7b2c\u7d0d\u723e
-currenciesDisplayName.TVD=\u5410\u74e6\u9b6f\u7f8e\u5143
currenciesDisplayName.SCR=\u585e\u820c\u723e\u7fa4\u5cf6\u76e7\u5e03
+currenciesDisplayName.VUV=\u842c\u90a3\u675c\u842c\u675c
+currenciesDisplayName.DKK=\u4e39\u9ea5\u514b\u7f85\u7d0d
+currenciesDisplayName.KPW=\u5317\u671d\u9bae\u5e63
+currenciesDisplayName.GQE=\u8d64\u9053\u5e7e\u5167\u4e9e\u57c3\u594e\u52d2
+currenciesDisplayName.IDR=\u5370\u5c3c - \u76e7\u5e03
currenciesDisplayName.LVR=\u62c9\u812b\u7dad\u4e9e\u76e7\u5e03
-currenciesDisplayName.FJP=\u6590\u6fdf\u938a
+currenciesDisplayName.SOS=\u7d22\u99ac\u5229\u4e9e\u5148\u4ee4
+currenciesDisplayName.AED=\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b\u8fea\u723e\u6c57
+currenciesDisplayName.BWP=\u6ce2\u672d\u90a3 - \u666e\u62c9
currenciesDisplayName.LVL=\u62c9\u812b\u7dad\u4e9e\u62c9\u7279\u9280\u5e63
-currenciesDisplayName.CDL=\u525b\u679c\u624e\u4f0a\u723e
-currenciesDisplayName.CDG=\u525b\u679c\u5171\u548c\u570b\u6cd5\u90ce
-currenciesDisplayName.CDF=\u525b\u679c\u6cd5\u90ce
-currenciesDisplayName.FJD=\u6590\u6fdf\u5143
+currenciesDisplayName.RUR=\u4fc4\u7f85\u65af\u76e7\u5e03 (1991-1998)
currenciesDisplayName.NIO=\u5c3c\u52a0\u62c9\u74dc \u91d1\u54e5\u591a\u83ef
+currenciesDisplayName.ADP=\u5b89\u9053\u723e\u966a\u58eb\u7279
+currenciesDisplayName.FJD=\u6590\u6fdf\u5143
currenciesDisplayName.MOP=\u6fb3\u9580\u5143
-currenciesDisplayName.NIG=\u5c3c\u52a0\u62c9\u74dc\u91d1\u91d1\u54e5\u591a\u83ef
-currenciesDisplayName.XTR=COMECON \u53ef\u8f49\u79fb\u76e7\u5e03
-currenciesDisplayName.FIN=\u82ac\u862d\u99ac\u514b (1860-1962)
-currenciesDisplayName.FIM=\u82ac\u862d\u99ac\u514b
+currenciesDisplayName.RUB=\u4fc4\u7f85\u65af\u76e7\u5e03
+currenciesDisplayName.CDF=\u525b\u679c\u6cd5\u90ce
+currenciesDisplayName.DJF=\u5409\u5e03\u5730\u6cd5\u90ce
+currenciesDisplayName.ECV=\u5384\u74dc\u591a\u723e\u7531\u91cc\u9054\u74e6\u5eb7\u65af\u5766 (UVC)
currenciesDisplayName.SBD=\u7d22\u7f85\u9580\u7fa4\u5cf6\u5143
+currenciesDisplayName.UZS=\u70cf\u8332\u5225\u514b\u65af\u5766 \u85a9\u6728
+currenciesDisplayName.ECS=\u5384\u74dc\u591a\u8607\u514b\u96f7
+currenciesDisplayName.PHP=\u83f2\u5f8b\u8cd3\u62ab\u7d22
+currenciesDisplayName.THB=\u6cf0\u9296
currenciesDisplayName.LUF=\u76e7\u68ee\u5821\u6cd5\u90ce
-currenciesDisplayName.TTO=\u7279\u7acb\u5c3c\u9054\u548c\u591a\u5df4\u54e5\u820a\u5143r
-currenciesDisplayName.AOS=\u5b89\u54e5\u62c9\u57c3\u65af\u5eab\u591a
-currenciesDisplayName.AOR=\u5b89\u54e5\u62c9\u65b0\u5bec\u624e Reajustado (1995-1999)
-currenciesDisplayName.MNT=\u8499\u53e4\u5716\u683c\u91cc\u514b
-currenciesDisplayName.HUF=\u5308\u7259\u5229 - \u798f\u6797
-currenciesDisplayName.BIF=\u84b2\u9686\u5730\u6cd5\u90ce
-currenciesDisplayName.AON=\u5b89\u54e5\u62c9\u65b0\u5bec\u624e (1990-2000)
-currenciesDisplayName.AOK=\u5b89\u54e5\u62c9\u5bec\u624e(1977-1990)
+currenciesDisplayName.FIM=\u82ac\u862d\u99ac\u514b
currenciesDisplayName.TTD=\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5r
currenciesDisplayName.SZL=\u65af\u5a01\u58eb\u862d \u91cc\u90ce
-currenciesDisplayName.NHF=\u65b0\u8d6b\u5e03\u91cc\u5e95\u7fa4\u5cf6 CFP \u6cd5\u90ce
-currenciesDisplayName.GBP=\u82f1\u938a
-currenciesDisplayName.SAS=\u6c99\u70cf\u5730\u5b97\u4e3b\u91cc\u96c5
+currenciesDisplayName.MNT=\u8499\u53e4\u5716\u683c\u91cc\u514b
currenciesDisplayName.SAR=\u6c99\u70cf\u5730\u91cc\u96c5
+currenciesDisplayName.UAK=\u70cf\u514b\u862d \u5361\u672c\u74e6\u90a3\u8332
+currenciesDisplayName.UAH=\u70cf\u514b\u862d\u683c\u91cc\u592b\u90a3
+currenciesDisplayName.HUF=\u5308\u7259\u5229 - \u798f\u6797
+currenciesDisplayName.COP=\u54e5\u502b\u6bd4\u4e9e\u62ab\u7d22
+currenciesDisplayName.QAR=\u5361\u9054\u723e\u91cc\u4e9e\u723e
currenciesDisplayName.LTT=\u7acb\u9676\u5b9b\u7279\u7f85
-currenciesDisplayName.INR=\u5370\u5ea6\u76e7\u5e03
currenciesDisplayName.PTE=\u8461\u8404\u7259\u57c3\u65af\u5eab\u591a
-currenciesDisplayName.AOA=\u5b89\u54e5\u62c9\u5bec\u624e
-currenciesDisplayName.PTC=\u8461\u8404\u7259 \u5eb7\u62d6
+currenciesDisplayName.AOR=\u5b89\u54e5\u62c9\u65b0\u5bec\u624e Reajustado (1995-1999)
+currenciesDisplayName.UYU=\u70cf\u62c9\u572d\u62ab\u7d22
+currenciesDisplayName.GBP=\u82f1\u938a
+currenciesDisplayName.BIF=\u84b2\u9686\u5730\u6cd5\u90ce
+currenciesDisplayName.INR=\u5370\u5ea6\u76e7\u5e03
+currenciesDisplayName.ZRZ=\u624e\u4f0a\u723e\u624e\u4f0a\u723e
+currenciesDisplayName.AON=\u5b89\u54e5\u62c9\u65b0\u5bec\u624e (1990-2000)
currenciesDisplayName.LTL=\u7acb\u9676\u5b9b\u91cc\u5854
+currenciesDisplayName.XFU=\u6cd5\u570b UIC \u6cd5\u90ce
currenciesDisplayName.KZT=\u5361\u624e\u514b\u65af\u5766\u5766\u5409
-currenciesDisplayName.KZR=\u5361\u624e\u514b\u65af\u5766\u76e7\u5e03
-currenciesDisplayName.VGD=\u82f1\u5c6c\u7dad\u723e\u65af\u7fa4\u5cf6\u5143
-currenciesDisplayName.NGP=\u5948\u53ca\u5229\u4e9e\u938a
-currenciesDisplayName.MMX=\u7dec\u7538\u7f8e\u5143\u5916\u532f\u5238
-currenciesDisplayName.NGN=\u5948\u53ca\u5229\u4e9e\u5948\u62c9
+currenciesDisplayName.MZM=\u83ab\u4e09\u6bd4\u514b\u6885\u8482\u5361\u723e
+currenciesDisplayName.UYP=\u70cf\u62c9\u572d\u62ab\u7d22 (1975-1993)
+currenciesDisplayName.AOK=\u5b89\u54e5\u62c9\u5bec\u624e(1977-1990)
+currenciesDisplayName.BUK=\u7dec\u7538\u5143
+currenciesDisplayName.GNS=\u5e7e\u5167\u4e9e\u897f\u91cc
+currenciesDisplayName.XFO=\u6cd5\u570b\u91d1\u6cd5\u90ce
+currenciesDisplayName.PGK=\u5df4\u5e03\u4e9e\u7d10\u5e7e\u5167\u4e9e\u57fa\u90a3
currenciesDisplayName.SYP=\u6558\u5229\u4e9e\u938a
-currenciesDisplayName.PSP=\u5df4\u52d2\u65af\u5766\u938a
-currenciesDisplayName.BHD=\u5df4\u6797\u7b2c\u7d0d\u723e
+currenciesDisplayName.MZE=\u83ab\u6851\u6bd4\u514b\u57c3\u65af\u5eab\u591a
+currenciesDisplayName.OMR=\u963f\u66fc\u91cc\u5967
+currenciesDisplayName.NGN=\u5948\u53ca\u5229\u4e9e\u5948\u62c9
+currenciesDisplayName.ZRN=\u85a9\u4f0a\u624e\u65b0\u4f0a\u723e
+currenciesDisplayName.AOA=\u5b89\u54e5\u62c9\u5bec\u624e
+currenciesDisplayName.CNY=\u4eba\u6c11\u5e63
+currenciesDisplayName.GNF=\u5e7e\u5167\u4e9e\u6cd5\u90ce
currenciesDisplayName.MMK=\u7dec\u7538\u5143
+currenciesDisplayName.MYR=\u99ac\u4f86\u897f\u4e9e - \u6797\u5409\u7279
+currenciesDisplayName.LSL=\u8cf4\u7d22\u6258\u7f85\u8482
+currenciesDisplayName.XEU=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d
+currenciesDisplayName.BHD=\u5df4\u6797\u7b2c\u7d0d\u723e
+currenciesDisplayName.SLL=\u7345\u5b50\u5c71\u5229\u6602
+currenciesDisplayName.KMF=\u79d1\u6469\u7f85\u6cd5\u90ce
currenciesDisplayName.ANG=\u8377\u862d \u5b89\u68af\u862d \u76fe
currenciesDisplayName.CZK=\u6377\u514b\u514b\u6717
-currenciesDisplayName.IMP=\u66fc\u57ce\u5cf6\u82f1\u938a
-currenciesDisplayName.BGX=\u4fdd\u52a0\u5229\u4e9e\u5217\u5f17\u5916\u532f\u5238
-currenciesDisplayName.LSL=\u8cf4\u7d22\u6258\u7f85\u8482
-currenciesDisplayName.GAF=\u52a0\u84ec\u897f\u975e\u6cd5\u90ce
-currenciesDisplayName.BGO=\u4fdd\u52a0\u5229\u4e9e\u5217\u5f17 (1879-1952)
+currenciesDisplayName.AZM=\u963f\u585e\u62dc\u5f4a\u99ac\u7279\u7d0d
+currenciesDisplayName.KYD=\u958b\u66fc\u7fa4\u5cf6\u7f8e\u5143
+currenciesDisplayName.GMD=\u7518\u6bd4\u4e9e\u9054\u62c9\u897f
currenciesDisplayName.BGN=\u4fdd\u52a0\u5229\u4e9e\u65b0\u5217\u5f17
-currenciesDisplayName.BGM=\u4fdd\u52a0\u5229\u4e9e \u793e\u6703\u4e3b\u7fa9\u5217\u5f17
currenciesDisplayName.CAD=\u52a0\u5e63
+currenciesDisplayName.MXV=\u58a8\u897f\u54e5\u6cd5\u5f8b\u53cd\u8f49(UDI)
currenciesDisplayName.BGL=\u4fdd\u52a0\u5229\u4e9e\u786c\u5217\u5f17
-currenciesDisplayName.KYD=\u958b\u66fc\u7fa4\u5cf6\u7f8e\u5143
-currenciesDisplayName.CYP=\u8cfd\u6d66\u8def\u65af\u938a
+currenciesDisplayName.VEB=\u59d4\u5167\u745e\u62c9\u535a\u5229\u74e6
+currenciesDisplayName.MLF=\u99ac\u91cc\u6cd5\u90ce
currenciesDisplayName.ILS=\u4ee5\u8272\u5217\u65b0\u8b1d\u514b\u723e
+currenciesDisplayName.MXP=\u58a8\u897f\u54e5\u9280\u62ab\u7d22 (1861-1992)
+currenciesDisplayName.PES=\u79d8\u9b6f\u592a\u967d\u5e63
currenciesDisplayName.GYD=\u572d\u4e9e\u90a3\u5143
-currenciesDisplayName.AMD=\u4e9e\u7f8e\u5c3c\u4e9e\u5fb7\u62c9\u59c6
+currenciesDisplayName.MXN=\u58a8\u897f\u54e5 - \u62ab\u7d22
currenciesDisplayName.ILP=\u4ee5\u8272\u5217\u938a
-currenciesDisplayName.MLF=\u99ac\u91cc\u6cd5\u90ce
-currenciesDisplayName.ILL=\u4ee5\u8272\u5217\u8b1d\u5ba2\u723e
-currenciesDisplayName.VEB=\u59d4\u5167\u745e\u62c9\u535a\u5229\u74e6
-currenciesDisplayName.ALX=\u963f\u723e\u5df4\u5c3c\u4e9e\u5143\u5916\u532f\u5238
+currenciesDisplayName.SKK=\u65af\u6d1b\u4f10\u514b\u514b\u6717
+currenciesDisplayName.CYP=\u8cfd\u6d66\u8def\u65af\u938a
+currenciesDisplayName.XDR=\u7279\u6b8a\u63d0\u6b3e\u6b0a
+currenciesDisplayName.PEN=\u79d8\u9b6f\u65b0\u592a\u967d\u5e63
currenciesDisplayName.LRD=\u8cf4\u6bd4\u745e\u4e9e\u5143
-currenciesDisplayName.ALV=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b\u5e63
+currenciesDisplayName.PEI=\u7955\u9b6f\u56e0\u8482
+currenciesDisplayName.AMD=\u4e9e\u7f8e\u5c3c\u4e9e\u5fb7\u62c9\u59c6
+currenciesDisplayName.BSD=\u5df4\u54c8\u99ac\u5143
currenciesDisplayName.HRK=\u514b\u7f85\u5730\u4e9e\u5eab\u7d0d
-currenciesDisplayName.REF=\u7559\u5c3c\u6c6a\u5cf6\u6cd5\u90ce
+currenciesDisplayName.CLP=\u667a\u5229\u62ab\u7d22
currenciesDisplayName.HRD=\u514b\u7f85\u5730\u4e9e\u7b2c\u7d0d\u723e
-currenciesDisplayName.ALL=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b
-currenciesDisplayName.JEP=\u6fa4\u897f\u938a
-currenciesDisplayName.ALK=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b (1946-1961)
-currenciesDisplayName.MKN=\u99ac\u5176\u9813\u7b2c\u7d0d\u723e(1992-1993)
-currenciesDisplayName.VDP=\u5317\u8d8a\u5357 \u540d \u76ae\u963f\u65af\u7279\u8d8a\u5357\u76fe
-currenciesDisplayName.VDN=\u5317\u8d8a\u5357\u65b0\u76fe
-currenciesDisplayName.MKD=\u99ac\u5176\u9813\u7b2c\u7d0d\u723e
-currenciesDisplayName.VDD=\u5317\u8d8a\u5357 \u76ae\u963f\u65af\u7279\u8d8a\u5357\u76fe
-currenciesDisplayName.TPP=\u5e1d\u6c76\u5143
currenciesDisplayName.XPF=CFP \u6cd5\u90ce
-currenciesDisplayName.BEL=\u6bd4\u5229\u6642\u6cd5\u90ce \uff08\u91d1\u878d\uff09
-currenciesDisplayName.GWP=\u5e7e\u5167\u4e9e\u62ab\u7d22\u62ab\u7d22
-currenciesDisplayName.KWD=\u79d1\u5a01\u7279\u7b2c\u7d0d\u723e
-currenciesDisplayName.GWM=\u8461\u5c6c\u5e7e\u5167\u4e9e\u7c73\u723e\u91cc\u65af
-currenciesDisplayName.BEF=\u6bd4\u5229\u6642\u6cd5\u90ce
+currenciesDisplayName.FRF=\u6cd5\u570b\u6cd5\u90ce
+currenciesDisplayName.BRR=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85
+currenciesDisplayName.MKD=\u99ac\u5176\u9813\u7b2c\u7d0d\u723e
+currenciesDisplayName.CLF=\u5361\u6797\u6cb9\u9054\u4f5b\u66fc\u8dce
+currenciesDisplayName.ALL=\u963f\u723e\u5df4\u5c3c\u4e9e\u5217\u514b
+currenciesDisplayName.BRN=\u5df4\u897f \u514b\u5982\u723e\u9054 \u8fb2\u74e6
+currenciesDisplayName.MWK=\u99ac\u62c9\u7dad\u514b\u74e6\u67e5
+currenciesDisplayName.BRL=\u5df4\u897f\u91cc\u62c9
currenciesDisplayName.TPE=\u5e1d\u6c76 \u57c3\u65af\u5eab\u591a
-currenciesDisplayName.BEC=\u6bd4\u5229\u6642\u6cd5\u90ce \uff08\u53ef\u8f49\u63db\uff09
-currenciesDisplayName.GWE=\u8461\u5c6c\u5e7e\u5167\u4e9e\u57c3\u65af\u5eab\u591a
+currenciesDisplayName.BRE=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85 (1990-1993)
+currenciesDisplayName.BRC=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85 (1986-1989)
+currenciesDisplayName.BRB=\u5df4\u897f\u514b\u9b6f\u85a9\u591a \u8fb2\u74e6 (1967-1986)
+currenciesDisplayName.DEM=\u5fb7\u570b\u99ac\u514b
+currenciesDisplayName.KWD=\u79d1\u5a01\u7279\u7b2c\u7d0d\u723e
+currenciesDisplayName.XCD=\u683c\u745e\u90a3\u9054\u5143
+currenciesDisplayName.NPR=\u5c3c\u6cca\u723e\u76e7\u5e03
+currenciesDisplayName.GWP=\u5e7e\u5167\u4e9e\u62ab\u7d22\u62ab\u7d22
+currenciesDisplayName.YUN=\u5357\u65af\u62c9\u592b \u53ef\u8f49\u63db\u7b2c\u7d0d\u723e
currenciesDisplayName.SVC=\u611b\u723e \u85a9\u723e\u74e6\u591a\u79d1\u90ce
-currenciesDisplayName.CWG=\u5eab\u62c9\u514b \u76fe
-currenciesDisplayName.BDT=\u5b5f\u52a0\u62c9\u5854\u5361
-currenciesDisplayName.TOS=\u6e6f\u52a0\u82f1\u938a
-currenciesDisplayName.TOP=\u6771\u52a0\u6f58\u52a0
+currenciesDisplayName.YUM=\u5357\u65af\u62c9\u592b\u632a\u5a01\u4e9e\u7b2c\u7d0d\u723e
+currenciesDisplayName.BEL=\u6bd4\u5229\u6642\u6cd5\u90ce \uff08\u91d1\u878d\uff09
+currenciesDisplayName.SIT=\u65af\u6d1b\u7dad\u5c3c\u4e9e\u6258\u52d2
+currenciesDisplayName.JPY=\u65e5\u5713
currenciesDisplayName.XOF=\u897f\u975e \u6cd5\u90ce BCEAO
+currenciesDisplayName.MVR=\u99ac\u723e\u5730\u592b\u6d77\u5cf6\u76e7\u975e\u4e9e
+currenciesDisplayName.GWE=\u8461\u5c6c\u5e7e\u5167\u4e9e\u57c3\u65af\u5eab\u591a
+currenciesDisplayName.BEF=\u6bd4\u5229\u6642\u6cd5\u90ce
+currenciesDisplayName.TOP=\u6771\u52a0\u6f58\u52a0
+currenciesDisplayName.YUD=\u5357\u65af\u62c9\u592b\u7b2c\u7d0d\u723e\u786c\u5e63
+currenciesDisplayName.BEC=\u6bd4\u5229\u6642\u6cd5\u90ce \uff08\u53ef\u8f49\u63db\uff09
currenciesDisplayName.SUR=\u8607\u806f\u76e7\u5e03
-currenciesDisplayName.SUN=\u8607\u806f\u65b0\u76e7\u5e03
-currenciesDisplayName.NCF=\u8d6b\u5e03\u91cc\u5e95\u7fa4\u5cf6 CFP \u6cd5\u90ce
-currenciesDisplayName.CVE=\u7dad\u5fb7\u89d2\u57c3\u65af\u5eab\u591a
-currenciesDisplayName.XNF=\u6cd5\u570b\u5b89\u7684\u5217\u65af\u7fa4\u5cf6 \u897f\u975e \u6cd5\u90ce
+currenciesDisplayName.ROL=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a
+currenciesDisplayName.DDM=\u6771\u5fb7\u6771\u5fb7\u99ac\u514b
+currenciesDisplayName.BDT=\u5b5f\u52a0\u62c9\u5854\u5361
+currenciesDisplayName.XBD=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBD)
+currenciesDisplayName.AWG=\u963f\u9b6f\u5df4\u76fe
+currenciesDisplayName.XBC=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBC)
+currenciesDisplayName.XBB=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d
+currenciesDisplayName.XBA=\u6b50\u6d32\u7d9c\u5408\u55ae\u4f4d
+currenciesDisplayName.NOK=\u632a\u5a01\u514b\u7f85\u7d0d
+currenciesDisplayName.MUR=\u6a21\u91cc\u897f\u65af\u76e7\u5e03
currenciesDisplayName.ZAR=\u5357\u975e\u862d\u7279
-currenciesDisplayName.DOP=\u591a\u660e\u5c3c\u52a0\u62ab\u7d22
-currenciesDisplayName.CUX=\u53e4\u5df4\u4eba\u5916\u532f\u5238
-currenciesDisplayName.ZAP=\u5357\u975e\u938a
+currenciesDisplayName.SHP=\u8056\u8d6b\u52d2\u62ff \u938a
+currenciesDisplayName.XAU=\u9ec3\u91d1
currenciesDisplayName.ZAL=\u5357\u975e - \u862d\u7279 (\u91d1\u878d)
+currenciesDisplayName.TZS=\u5766\u6851\u5c3c\u4e9e \u5148\u4ee4
+currenciesDisplayName.GIP=\u76f4\u5e03\u7f85\u9640\u938a
currenciesDisplayName.TND=\u7a81\u5c3c\u897f\u4e9e\u7b2c\u7d0d\u723e
-currenciesDisplayName.CUP=\u53e4\u5df4\u62ab\u7d22
-currenciesDisplayName.GUF=\u6cd5\u5c6c\u572d\u4e9e\u90a3\u6cd5\u90ce\u572d\u4e9e\u90a3
+currenciesDisplayName.CVE=\u7dad\u5fb7\u89d2\u57c3\u65af\u5eab\u591a
currenciesDisplayName.UGX=\u70cf\u5e72\u9054\u5148\u4ee4
-currenciesDisplayName.LNR=\u932b\u862d\u76e7\u5e03
-currenciesDisplayName.AIF=\u963f\u6cd5\u723e\u548c\u4f0a\u85a9\u6cd5\u90ce
-currenciesDisplayName.VAL=\u68b5\u8482\u5ca1\u57ce\u91cc\u62c9
-currenciesDisplayName.STE=\u8056\u591a\u7f8e\u5cf6\u548c\u666e\u6797\u897f\u6bd4\u5cf6\u57c3\u65af\u5eab\u591a
+currenciesDisplayName.ZMK=\u5c1a\u6bd4\u4e9e\u514b\u74e6\u67e5
+currenciesDisplayName.JOD=\u7d04\u65e6\u7b2c\u7d0d\u723e
+currenciesDisplayName.XAF=\u897f\u975e \u6cd5\u90ce BEAC
+currenciesDisplayName.LBP=\u9ece\u5df4\u5ae9\u938a
currenciesDisplayName.UGS=\u70cf\u5e72\u9054\u5148\u4ee4 (1966-1987)
currenciesDisplayName.STD=\u8056\u591a\u7f8e\u5cf6\u548c\u666e\u6797\u897f\u6bd4\u5cf6\u591a\u5e03\u62c9
-currenciesDisplayName.MHD=\u99ac\u7d39\u723e\u7fa4\u5cf6\u7f8e\u5143
-currenciesDisplayName.NZP=\u7d10\u897f\u862d\u938a
currenciesDisplayName.WST=\u897f\u85a9\u6469\u4e9e\u5854\u62c9
-currenciesDisplayName.WSP=\u897f\u85a9\u6469\u4e9e\u938a
-currenciesDisplayName.HNL=\u6d2a\u90fd\u62c9\u65af\u502b\u76ae\u62c9
-currenciesDisplayName.XMF=\u6cd5\u570b\u5927\u57ce\u5e02\u65b0 \u6cd5\u90ce
+currenciesDisplayName.KHR=\u67ec\u57d4\u5be8\u745e\u723e
+currenciesDisplayName.EUR=\u6b50\u5143
+currenciesDisplayName.DOP=\u591a\u660e\u5c3c\u52a0\u62ab\u7d22
+currenciesDisplayName.BOV=\u73bb\u5229\u7dad\u4e9e \u5e55\u591a
+currenciesDisplayName.MTP=\u99ac\u723e\u4ed6\u938a
+currenciesDisplayName.BOP=\u73bb\u5229\u7dad\u4e9e\u62ab\u7d22
+currenciesDisplayName.MTL=\u99ac\u723e\u4ed6\u91cc\u62c9
+currenciesDisplayName.CUP=\u53e4\u5df4\u62ab\u7d22
currenciesDisplayName.TMM=\u571f\u5eab\u66fc\u99ac\u7d0d\u7279
-currenciesDisplayName.GTQ=\u74dc\u5730\u99ac\u62c9\u683c\u67e5\u723e
+currenciesDisplayName.USN=\u7f8e\u5143 (\u7b2c\u4e8c\u5929)
+currenciesDisplayName.SGD=\u65b0\u52a0\u5761\u5e63
currenciesDisplayName.NZD=\u7d10\u897f\u862d\u5e63
-currenciesDisplayName.SSP=\u8607\u683c\u862d\u938a
-currenciesDisplayName.BBD=\u5df4\u8c9d\u591a\u5143
+currenciesDisplayName.HNL=\u6d2a\u90fd\u62c9\u65af\u502b\u76ae\u62c9
+currenciesDisplayName.BOB=\u73bb\u5229\u7dad\u4e9e\u8ca8\u5e63\u55ae\u4f4d
+currenciesDisplayName.ITL=\u7fa9\u5927\u5229\u91cc\u62c9
+currenciesDisplayName.PAB=\u5df4\u62ff\u99ac\u5df4\u6ce2\u4e9e
+currenciesDisplayName.GTQ=\u74dc\u5730\u99ac\u62c9\u683c\u67e5\u723e
+currenciesDisplayName.LAK=\u8001\u64be \u958b\u666e
+currenciesDisplayName.GHC=\u8fe6\u7d0d\u4ed9\u8515
+currenciesDisplayName.AUD=\u6fb3\u5e63
currenciesDisplayName.NAD=\u7d0d\u7c73\u6bd4\u4e9e\u5143
+currenciesDisplayName.KGS=\u5409\u723e\u5409\u65af\u7d22\u99ac
currenciesDisplayName.MGF=\u99ac\u9054\u52a0\u65af\u52a0\u6cd5\u90ce
+currenciesDisplayName.BBD=\u5df4\u8c9d\u591a\u5143
currenciesDisplayName.MGA=\u99ac\u9054\u52a0\u65af\u52a0\u827e\u745e\u723e
-currenciesDisplayName.EGP=\u57c3\u53ca\u938a
-currenciesDisplayName.BZH=\u82f1\u570b\u7684\u6d2a\u90fd\u62c9\u65af\u5143r
+currenciesDisplayName.PYG=\u5df4\u62c9\u572d\u74dc\u62c9\u5c3c
currenciesDisplayName.PLZ=\u6ce2\u862d\u8332\u7f85\u63d0 (1950-1995)
-currenciesDisplayName.BAN=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u65b0\u7b2c\u7d0d\u723e
-currenciesDisplayName.PLX=\u6ce2\u862d\u7f8e\u5143\u5916\u532f\u5238
-currenciesDisplayName.BAM=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u53ef\u8f49\u63db\u99ac\u514b
-currenciesDisplayName.BZD=\u4f2f\u5229\u8332\u5143
-currenciesDisplayName.BAD=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u7b2c\u7d0d\u723e
-currenciesDisplayName.PLN=\u6ce2\u862d\u8332\u7f85\u63d0
currenciesDisplayName.YER=\u4e5f\u9580\u91cc\u4e9e\u723e
+currenciesDisplayName.ATS=\u5967\u5730\u5229\u5148\u4ee4
+currenciesDisplayName.ETB=\u8863\u7d22\u6bd4\u4e9e\u6bd4\u723e
+currenciesDisplayName.BND=\u6c76\u840a\u5143
+currenciesDisplayName.JMD=\u7259\u8cb7\u52a0\u5143
+currenciesDisplayName.EGP=\u57c3\u53ca\u938a
+currenciesDisplayName.PLN=\u6ce2\u862d\u8332\u7f85\u63d0
+currenciesDisplayName.DZD=\u963f\u723e\u53ca\u5229\u4e9e\u7b2c\u7d0d\u723e
+currenciesDisplayName.ISK=\u51b0\u5cf6\u514b\u6717
currenciesDisplayName.SRG=\u8607\u91cc\u5357\u76fe
-currenciesDisplayName.CSK=\u6377\u514b\u65af\u6d1b\u4f10\u514b\u786c\u514b\u6717
+currenciesDisplayName.LYD=\u5229\u6bd4\u4e9e\u7b2c\u7d0d\u723e
+currenciesDisplayName.BZD=\u4f2f\u5229\u8332\u5143
+currenciesDisplayName.BAM=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u53ef\u8f49\u63db\u99ac\u514b
+currenciesDisplayName.ESP=\u897f\u73ed\u7259\u966a\u58eb\u7279
currenciesDisplayName.KRW=\u97d3\u570b\u571c
+currenciesDisplayName.NLG=\u8377\u862d\u76fe
+currenciesDisplayName.MRO=\u8305\u5229\u5854\u5c3c\u4e9e\u70cf\u5409\u4e9e
+currenciesDisplayName.BAD=\u6ce2\u58eb\u5c3c\u4e9e-\u9ed1\u585e\u54e5\u7dad\u90a3\u7b2c\u7d0d\u723e
+currenciesDisplayName.ZWD=\u8f9b\u5df4\u5a01\u5143
+currenciesDisplayName.SEK=\u745e\u5178\u514b\u7f85\u7d0d
+currenciesDisplayName.CSK=\u6377\u514b\u65af\u6d1b\u4f10\u514b\u786c\u514b\u6717
currenciesDisplayName.BYR=\u767d\u4fc4\u7f85\u65af\u76e7\u5e03
-currenciesDisplayName.YEI=\u4e5f\u9580\u963f\u99ac\u8fea\u91cc\u4e9e\u723e
-currenciesDisplayName.BYL=\u767d\u4fc4\u7f85\u65af\u76e7\u5e03 (1992-1994)
-currenciesDisplayName.CSC=\u6377\u514b\u514b\u6717
-currenciesDisplayName.KRO=\u5357\u97d3\u820a\u5e63
-currenciesDisplayName.KRH=\u97d3\u570b \u54c8\u74e6
-currenciesDisplayName.BYB=\u767d\u4fc4\u7f85\u65af\u65b0\u76e7\u5e03 (1994-1999)
-currenciesDisplayName.SQS=\u7d22\u99ac\u91cc\u862d\u5148\u4ee4
-currenciesDisplayName.GRN=\u5e0c\u81d8\u65b0\u5fb7\u62c9\u514b\u99ac
+currenciesDisplayName.IRR=\u4f0a\u6717\u91cc\u4e9e\u723e
currenciesDisplayName.PKR=\u5df4\u57fa\u65af\u5766\u76e7\u5e03
-currenciesDisplayName.ZWD=\u8f9b\u5df4\u5a01\u5143
-currenciesDisplayName.LKR=\u65af\u91cc\u862d\u5361\u76e7\u5e03
-currenciesDisplayName.GRD=\u5e0c\u81d8\u5fb7\u62c9\u514b\u99ac
-currenciesDisplayName.IEP=\u611b\u723e\u862d\u938a
-currenciesDisplayName.YDD=\u8449\u9580\u7b2c\u7d0d\u723e
-currenciesDisplayName.RWF=\u76e7\u5b89\u9054\u6cd5\u90ce
-currenciesDisplayName.CRC=\u54e5\u65af\u5927\u9ece\u52a0\u79d1\u90ce
-currenciesDisplayName.TJS=\u5854\u5409\u514b\u65af\u5766 \u7d22\u83ab\u5c3c
-currenciesDisplayName.TJR=\u5854\u5409\u514b\u65af\u5766\u76e7\u5e03
-currenciesDisplayName.EEK=\u611b\u6c99\u5c3c\u4e9e\u514b\u6717
-currenciesDisplayName.GQP=\u8d64\u9053\u5e7e\u5167\u4e9e\u6bd4\u585e\u5854
-currenciesDisplayName.MDR=\u6469\u675c\u96f2\u76e7\u5e03\u5eab\u65c1
-currenciesDisplayName.DKK=\u4e39\u9ea5\u514b\u7f85\u7d0d
-currenciesDisplayName.MDL=\u6469\u675c\u96f2\u5217\u4f0a
-currenciesDisplayName.GQF=\u8d64\u9053\u5e7e\u5167\u4e9e\u4f5b\u6717\u54e5
-currenciesDisplayName.GQE=\u8d64\u9053\u5e7e\u5167\u4e9e\u57c3\u594e\u52d2
-currenciesDisplayName.IDR=\u5370\u5c3c - \u76e7\u5e03
-currenciesDisplayName.AED=\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b\u8fea\u723e\u6c57
-currenciesDisplayName.KPW=\u5317\u671d\u9bae\u5e63
-currenciesDisplayName.IDN=\u5370\u5ea6\u5c3c\u897f\u4e9e\u65b0\u76e7\u5e03
-currenciesDisplayName.BWP=\u6ce2\u672d\u90a3 - \u666e\u62c9
-currenciesDisplayName.MDC=\u6469\u675c\u96f2\u5217\u4f0a\u5eab\u65c1
-currenciesDisplayName.IDJ=\u5370\u5ea6\u5c3c\u897f\u4e9e\u722a\u54c7\u76e7\u5e03
-currenciesDisplayName.KPP=\u5317\u671d\u9bae\u4eba\u6c11\u5e63
-currenciesDisplayName.IDG=\u5370\u5ea6\u5c3c\u897f\u4e9e\u5c3c\u53ef\u76fe
-currenciesDisplayName.VUV=\u842c\u90a3\u675c\u842c\u675c
-currenciesDisplayName.XID=\u4f0a\u65af\u862d\u7b2c\u7d0d\u723e
-currenciesDisplayName.SOS=\u7d22\u99ac\u5229\u4e9e\u5148\u4ee4
-currenciesDisplayName.ADP=\u5b89\u9053\u723e\u966a\u58eb\u7279
-currenciesDisplayName.RUR=\u4fc4\u7f85\u65af\u76e7\u5e03 (1991-1998)
-currenciesDisplayName.GPF=\u74dc\u5fb7\u7f85\u666e\u5cf6\u6cd5\u90ce
-currenciesDisplayName.DJF=\u5409\u5e03\u5730\u6cd5\u90ce
-currenciesDisplayName.ADD=\u5b89\u9053\u723e\u7b2c\u7d0d\u723e
-currenciesDisplayName.MCG=\u6469\u7d0d\u54e5\u6cd5\u90ce \u5091\u7c73\u90a3
-currenciesDisplayName.MCF=\u6469\u7d0d\u54e5\u65b0\u6cd5\u90ce
-currenciesDisplayName.ECV=\u5384\u74dc\u591a\u723e\u7531\u91cc\u9054\u74e6\u5eb7\u65af\u5766 (UVC)
-currenciesDisplayName.ECS=\u5384\u74dc\u591a\u8607\u514b\u96f7
-currenciesDisplayName.LIF=\u5217\u652f\u6566\u65af\u767b\u6cd5\u90ce
-currenciesDisplayName.RUB=\u4fc4\u7f85\u65af\u76e7\u5e03
-currenciesDisplayName.PHP=\u83f2\u5f8b\u8cd3\u62ab\u7d22
-currenciesDisplayName.UZS=\u70cf\u8332\u5225\u514b\u65af\u5766 \u85a9\u6728
-currenciesDisplayName.COP=\u54e5\u502b\u6bd4\u4e9e\u62ab\u7d22
-currenciesDisplayName.THB=\u6cf0\u9296
-currenciesDisplayName.IBP=\u5317\u611b\u723e\u862d\u938a
-currenciesDisplayName.BUR=\u7dec\u7538\u76e7\u5e03
-currenciesDisplayName.COF=\u525b\u679c\u897f\u975e\u6cd5\u90ce
-currenciesDisplayName.BUK=\u7dec\u7538\u5143
-currenciesDisplayName.COB=\u54e5\u502b\u6bd4\u4e9e\u62ab\u7d22\u9214
-currenciesDisplayName.UZC=\u70cf\u8332\u5225\u514b\u65af\u5766 \u5eab\u90a6 \u7d22\u99ac
-currenciesDisplayName.UAK=\u70cf\u514b\u862d \u5361\u672c\u74e6\u90a3\u8332
-currenciesDisplayName.QAR=\u5361\u9054\u723e\u91cc\u4e9e\u723e
-currenciesDisplayName.UAH=\u70cf\u514b\u862d\u683c\u91cc\u592b\u90a3
-currenciesDisplayName.GNS=\u5e7e\u5167\u4e9e\u897f\u91cc
-currenciesDisplayName.CNY=\u4eba\u6c11\u5e63
-currenciesDisplayName.MZM=\u83ab\u4e09\u6bd4\u514b\u6885\u8482\u5361\u723e
-currenciesDisplayName.CNX=\u4e2d\u570b\u7f8e\u5143\u5916\u532f\u5238
-currenciesDisplayName.UYU=\u70cf\u62c9\u572d\u62ab\u7d22
-currenciesDisplayName.GNI=\u5e7e\u5167\u4e9e\u6cd5\u90ce (1960-1972)
-currenciesDisplayName.SML=\u8056\u99ac\u5229\u8afe\u91cc\u62c9
-currenciesDisplayName.MZE=\u83ab\u6851\u6bd4\u514b\u57c3\u65af\u5eab\u591a
-currenciesDisplayName.CNP=\u4e2d\u570b\u4eba\u6c11\u5e63\u5143
-currenciesDisplayName.PGK=\u5df4\u5e03\u4e9e\u7d10\u5e7e\u5167\u4e9e\u57fa\u90a3
-currenciesDisplayName.OMS=\u963f\u66fc\u91cc\u4e9e\u723e\u4ed9\u8515i
-currenciesDisplayName.GNF=\u5e7e\u5167\u4e9e\u6cd5\u90ce
-currenciesDisplayName.UYP=\u70cf\u62c9\u572d\u62ab\u7d22 (1975-1993)
-currenciesDisplayName.OMR=\u963f\u66fc\u91cc\u5967
-currenciesDisplayName.XFU=\u6cd5\u570b UIC \u6cd5\u90ce
-currenciesDisplayName.BTR=\u4e0d\u4e39\u76e7\u5e03
-currenciesDisplayName.ZRZ=\u624e\u4f0a\u723e\u624e\u4f0a\u723e
-currenciesDisplayName.XFO=\u6cd5\u570b\u91d1\u6cd5\u90ce
-currenciesDisplayName.UYF=\u70cf\u62c9\u572d\u62ab\u7d22\u798f\u5384\u7279
-currenciesDisplayName.MYR=\u99ac\u4f86\u897f\u4e9e - \u6797\u5409\u7279
-currenciesDisplayName.ZRN=\u85a9\u4f0a\u624e\u65b0\u4f0a\u723e
-currenciesDisplayName.AZM=\u963f\u585e\u62dc\u5f4a\u99ac\u7279\u7d0d
-currenciesDisplayName.GMP=\u5ca1\u6bd4\u4e9e\u938a
-currenciesDisplayName.KMF=\u79d1\u6469\u7f85\u6cd5\u90ce
-currenciesDisplayName.SLL=\u7345\u5b50\u5c71\u5229\u6602
-currenciesDisplayName.GMD=\u7518\u6bd4\u4e9e\u9054\u62c9\u897f
-currenciesDisplayName.XEU=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d
-currenciesDisplayName.BSP=\u5df4\u54c8\u99ac\u938a
-currenciesDisplayName.CMF=\u5361\u9ea5\u9686\u897f\u975e\u6cd5\u90ce
-currenciesDisplayName.MXV=\u58a8\u897f\u54e5\u6cd5\u5f8b\u53cd\u8f49(UDI)
-currenciesDisplayName.XEF=\u897f\u975e \u6cd5\u90ce BCEAEC
-currenciesDisplayName.BSD=\u5df4\u54c8\u99ac\u5143
-currenciesDisplayName.MXP=\u58a8\u897f\u54e5\u9280\u62ab\u7d22 (1861-1992)
-currenciesDisplayName.MXN=\u58a8\u897f\u54e5 - \u62ab\u7d22
-currenciesDisplayName.PES=\u79d8\u9b6f\u592a\u967d\u5e63
-currenciesDisplayName.GLK=\u683c\u9675\u862d\u514b\u7f85\u9209
-currenciesDisplayName.BRZ=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85 (1942-1967)
-currenciesDisplayName.PEN=\u79d8\u9b6f\u65b0\u592a\u967d\u5e63
-currenciesDisplayName.CLP=\u667a\u5229\u62ab\u7d22
-currenciesDisplayName.SKK=\u65af\u6d1b\u4f10\u514b\u514b\u6717
-currenciesDisplayName.PEI=\u7955\u9b6f\u56e0\u8482
-currenciesDisplayName.BRR=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85
-currenciesDisplayName.XDR=\u7279\u6b8a\u63d0\u6b3e\u6b0a
-currenciesDisplayName.FRG=\u6cd5\u570b\u6cd5\u90ce \u6377\u7c73\u90a3/\u9f90\u52a0\u840a\u6cd5\u90ce
-currenciesDisplayName.FRF=\u6cd5\u570b\u6cd5\u90ce
-currenciesDisplayName.BRN=\u5df4\u897f \u514b\u5982\u723e\u9054 \u8fb2\u74e6
-currenciesDisplayName.CLF=\u5361\u6797\u6cb9\u9054\u4f5b\u66fc\u8dce
-currenciesDisplayName.CLE=\u667a\u5229\u57c3\u65af\u5eab\u591a
-currenciesDisplayName.BRL=\u5df4\u897f\u91cc\u62c9
-currenciesDisplayName.CLC=\u667a\u5229 \u5eb7\u5c0e
-currenciesDisplayName.BRE=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85 (1990-1993)
-currenciesDisplayName.DES=\u5fb7\u570b \u8607\u99ac\u514bSperrmark
-currenciesDisplayName.MWP=\u99ac\u62c9\u7dad\u938a
-currenciesDisplayName.BRC=\u5df4\u897f\u514b\u9b6f\u8cfd\u7f85 (1986-1989)
-currenciesDisplayName.BRB=\u5df4\u897f\u514b\u9b6f\u85a9\u591a \u8fb2\u74e6 (1967-1986)
-currenciesDisplayName.MWK=\u99ac\u62c9\u7dad\u514b\u74e6\u67e5
-currenciesDisplayName.PDR=\u8eca\u57ce\u76e7\u5e03
-currenciesDisplayName.DEM=\u5fb7\u570b\u99ac\u514b
-currenciesDisplayName.TDF=\u4e4d\u5f97 \u897f\u975e \u6cd5\u90ce
-currenciesDisplayName.PDN=\u8eca\u57ce\u65b0\u76e7\u5e03
-currenciesDisplayName.PDK=\u8eca\u57ce\u76e7\u5e03 Kupon
-currenciesDisplayName.NPR=\u5c3c\u6cca\u723e\u76e7\u5e03
-currenciesDisplayName.CKD=\u5eab\u514b\u7fa4\u5cf6\u5143
-currenciesDisplayName.JPY=\u65e5\u5713
-currenciesDisplayName.MVR=\u99ac\u723e\u5730\u592b\u6d77\u5cf6\u76e7\u975e\u4e9e
-currenciesDisplayName.XCF=\u897f\u975e \u65b0 \u6cd5\u90ce
-currenciesDisplayName.MVP=\u99ac\u723e\u5730\u592b\u76e7\u5e03
-currenciesDisplayName.XCD=\u683c\u745e\u90a3\u9054\u5143
-currenciesDisplayName.SIT=\u65af\u6d1b\u7dad\u5c3c\u4e9e\u6258\u52d2
-currenciesDisplayName.YUR=\u5357\u65af\u62c9\u592b\u6539\u5236\u5f8c\u7684\u7b2c\u7d0d\u723e
-currenciesDisplayName.AWG=\u963f\u9b6f\u5df4\u76fe
-currenciesDisplayName.YUO=\u5357\u65af\u62c9\u592b\u5341\u6708 \u7b2c\u7d0d\u723e
-currenciesDisplayName.DDM=\u6771\u5fb7\u6771\u5fb7\u99ac\u514b
-currenciesDisplayName.YUN=\u5357\u65af\u62c9\u592b \u53ef\u8f49\u63db\u7b2c\u7d0d\u723e
-currenciesDisplayName.YUM=\u5357\u65af\u62c9\u592b\u632a\u5a01\u4e9e\u7b2c\u7d0d\u723e
-currenciesDisplayName.TCC=\u571f\u8033\u5176\u4eba\u548c\u51f1\u79d1\u65af\u51a0
-currenciesDisplayName.YUG=\u5357\u65af\u62c9\u592b\u4eba1994 \u7b2c\u7d0d\u723e
-currenciesDisplayName.YUF=\u5357\u65af\u62c9\u592b\u806f\u90a6\u7b2c\u7d0d\u723e
-currenciesDisplayName.RON=\u7f85\u99ac\u5c3c\u4e9e\u65b0\u5217\u4f0a
-currenciesDisplayName.YUD=\u5357\u65af\u62c9\u592b\u7b2c\u7d0d\u723e\u786c\u5e63
-currenciesDisplayName.ROL=\u7f85\u99ac\u5c3c\u4e9e\u5217\u4f0a
-currenciesDisplayName.SIB=\u65af\u6d1b\u6587\u5c3c\u4e9e Tolar Bons
-currenciesDisplayName.NOK=\u632a\u5a01\u514b\u7f85\u7d0d
-currenciesDisplayName.MUR=\u6a21\u91cc\u897f\u65af\u76e7\u5e03
-currenciesDisplayName.XBD=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBD)
-currenciesDisplayName.GIP=\u76f4\u5e03\u7f85\u9640\u938a
-currenciesDisplayName.VNS=\u8d8a\u5357\u570b\u5bb6\u76fe
-currenciesDisplayName.XBC=\u6b50\u6d32\u6703\u8a08\u55ae\u4f4d(XBC)
-currenciesDisplayName.VNR=\u8d8a\u5357\u5171\u548c\u570b \u76fe
-currenciesDisplayName.XBB=\u6b50\u6d32\u8ca8\u5e63\u55ae\u4f4d
-currenciesDisplayName.XBA=\u6b50\u6d32\u7d9c\u5408\u55ae\u4f4d
-currenciesDisplayName.SHP=\u8056\u8d6b\u52d2\u62ff \u938a
-currenciesDisplayName.VNN=\u8d8a\u5357\u65b0\u76fe
-currenciesSymbol.GBP=GBP
-currenciesSymbol.XOF=XOF
-currenciesSymbol.TDF=TDF
-currenciesSymbol.ECV=ECV
-currenciesSymbol.XAF=XAF
+currenciesDisplayName.BMD=\u767e\u6155\u9054\u5e63
+currenciesSymbol.MOP=MOP
+currenciesSymbol.SGD=SGD
+currenciesSymbol.KRW=KRW
currenciesSymbol.NZD=$NZ
currenciesSymbol.EUR=EUR
-currenciesSymbol.XPF=XPF
-currenciesSymbol.XTR=XTR
-currenciesSymbol.KRW=KRW
-currenciesSymbol.BOV=BOV
-currenciesSymbol.SGD=SGD
-currenciesSymbol.XEF=XEF
-currenciesSymbol.XBD=XBD
-currenciesSymbol.XFU=XFU
-currenciesSymbol.XBC=XBC
-currenciesSymbol.MXV=MXV
-currenciesSymbol.CNY=CNY
-currenciesSymbol.MOP=MOP
-currenciesSymbol.GAF=GAF
-currenciesSymbol.AZM=AZM
-currenciesSymbol.XCF=XCF
+currenciesSymbol.GBP=GBP
shortDateFormat=yyyy/M/d
mediumDateFormat=yyyy/M/d
longDateFormat=yyyy'\u5e74'M'\u6708'd'\u65e5'
@@ -401,7 +250,7 @@ shortTimeFormat=a h:mm
mediumTimeFormat=a h:mm:ss
longTimeFormat=ahh'\u6642'mm'\u5206'ss'\u79d2'
fullTimeFormat=ahh'\u6642'mm'\u5206'ss'\u79d2' z
-zoneStrings=America/Indianapolis®\u6771\u90e8\u6a19\u6e96\u6642\u9593®\u6771\u90e8\u6a19\u6e96\u6642\u9593®©America/Halifax®\u5927\u897f\u6d0b\u6a19\u6e96\u6642\u9593®\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Pacific/Honolulu®\u590f\u5a01\u5937\u6a19\u6e96\u6642\u9593®\u590f\u5a01\u5937\u6a19\u6e96\u6642\u9593®©America/Denver®\u5c71\u5340\u6a19\u6e96\u6642\u9593®\u5c71\u5340\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/Anchorage®\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593®\u963f\u62c9\u65af\u52a0\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/St_Johns®\u7d10\u82ac\u862d\u6a19\u6e96\u6642\u9593®\u7d10\u82ac\u862d\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Africa/Casablanca®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®©America/Chicago®\u4e2d\u90e8\u6a19\u6e96\u6642\u9593®\u4e2d\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Asia/Shanghai®\u4e2d\u570b\u6a19\u6e96\u6642\u9593®\u4e2d\u570b\u6a19\u6e96\u6642\u9593®©Asia/Tokyo®\u65e5\u672c\u6a19\u6e96\u6642\u9593®\u65e5\u672c\u6a19\u6e96\u6642\u9593®©America/New_York®\u6771\u90e8\u6a19\u6e96\u6642\u9593®\u6771\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Europe/Bucharest®\u6771\u6b50\u6a19\u6e96\u6642\u9593®\u6771\u6b50\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/Los_Angeles®\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593®\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/Phoenix®\u5c71\u5340\u6a19\u6e96\u6642\u9593®\u5c71\u5340\u6a19\u6e96\u6642\u9593®©Etc/GMT®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®©Asia/Jerusalem®\u4ee5\u8272\u5217\u6a19\u6e96\u6642\u9593®\u4ee5\u8272\u5217\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Europe/Paris®\u4e2d\u6b50\u6a19\u6e96\u6642\u9593®\u4e2d\u6b50\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©
+zoneStrings=America/Halifax®\u5927\u897f\u6d0b\u6a19\u6e96\u6642\u9593®\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/Indianapolis®\u6771\u90e8\u6a19\u6e96\u6642\u9593®\u6771\u90e8\u6a19\u6e96\u6642\u9593®©Europe/Paris®\u4e2d\u6b50\u6a19\u6e96\u6642\u9593®\u4e2d\u6b50\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/Phoenix®\u5c71\u5340\u6a19\u6e96\u6642\u9593®\u5c71\u5340\u6a19\u6e96\u6642\u9593®©America/Los_Angeles®\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593®\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Pacific/Honolulu®\u590f\u5a01\u5937\u6a19\u6e96\u6642\u9593®\u590f\u5a01\u5937\u6a19\u6e96\u6642\u9593®©America/Denver®\u5c71\u5340\u6a19\u6e96\u6642\u9593®\u5c71\u5340\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Europe/Bucharest®\u6771\u6b50\u6a19\u6e96\u6642\u9593®\u6771\u6b50\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©America/New_York®\u6771\u90e8\u6a19\u6e96\u6642\u9593®\u6771\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Asia/Tokyo®\u65e5\u672c\u6a19\u6e96\u6642\u9593®\u65e5\u672c\u6a19\u6e96\u6642\u9593®©America/Anchorage®\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593®\u963f\u62c9\u65af\u52a0\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Asia/Shanghai®\u4e2d\u570b\u6a19\u6e96\u6642\u9593®\u4e2d\u570b\u6a19\u6e96\u6642\u9593®©America/Chicago®\u4e2d\u90e8\u6a19\u6e96\u6642\u9593®\u4e2d\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Africa/Casablanca®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®\u683c\u6797\u5a01\u6cbb\u6a19\u6e96\u6642\u9593®©America/St_Johns®\u7d10\u82ac\u862d\u6a19\u6e96\u6642\u9593®\u7d10\u82ac\u862d\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©Asia/Jerusalem®\u4ee5\u8272\u5217\u6a19\u6e96\u6642\u9593®\u4ee5\u8272\u5217\u65e5\u5149\u7bc0\u7d04\u6642\u9593®©
territories.TL=\u6771\u5e1d\u6587
territories.TK=\u6258\u514b\u52de\u7fa4\u5cf6
territories.TJ=\u5854\u5409\u514b
@@ -424,7 +273,9 @@ territories.GN=\u5e7e\u5167\u4e9e
territories.GM=\u7518\u6bd4\u4e9e
territories.GL=\u683c\u9675\u862d
territories.SV=\u85a9\u723e\u74e6\u591a
+territories.062=\u4e2d\u5357\u4e9e
territories.ST=\u8056\u591a\u7f8e\u53ca\u666e\u6797\u897f\u6bd4
+territories.061=\u73bb\u91cc\u5c3c\u897f\u4e9e
territories.GI=\u76f4\u5e03\u7f85\u9640
territories.GH=\u8fe6\u7d0d
territories.SR=\u8607\u5229\u5357
@@ -445,9 +296,12 @@ territories.SC=\u585e\u5e2d\u723e
territories.SB=\u7d22\u7f85\u9580\u7fa4\u5cf6
territories.SA=\u6c99\u70cf\u5730\u963f\u62c9\u4f2f
territories.FR=\u6cd5\u570b
+territories.057=\u5bc6\u514b\u7f85\u5c3c\u897f\u4e9e
territories.FO=\u6cd5\u7f85\u7fa4\u5cf6
territories.FM=\u5bc6\u514b\u7f85\u5c3c\u897f\u4e9e\u7fa4\u5cf6
territories.RW=\u76e7\u5b89\u9054
+territories.054=\u7f8e\u62c9\u5c3c\u897f\u4e9e
+territories.053=\u6fb3\u6d32\u8207\u7d10\u897f\u862d
territories.FK=\u798f\u514b\u862d\u7fa4\u5cf6
territories.RU=\u4fc4\u7f85\u65af
territories.FJ=\u6590\u6fdf
@@ -456,16 +310,22 @@ territories.RO=\u7f85\u99ac\u5c3c\u4e9e
territories.RE=\u7559\u5c3c\u65fa
territories.ET=\u8863\u7d22\u6bd4\u4e9e
territories.ER=\u5384\u5229\u5782\u4e9e
+territories.833=\u66fc\u5cf6
+territories.830=\u6d77\u5cfd\u7fa4\u5cf6
territories.EE=\u611b\u6c99\u5c3c\u4e9e
+territories.QO=\u5927\u6d0b\u6d32\u908a\u7586\u7fa4\u5cf6
territories.EC=\u5384\u74dc\u591a\u723e
territories.DZ=\u963f\u723e\u53ca\u5229\u4e9e
territories.QA=\u5361\u9054
+territories.039=\u5357\u6b50
territories.DO=\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b
+territories.035=\u6771\u5357\u4e9e
territories.DM=\u591a\u660e\u5c3c\u52a0
territories.PW=\u5e1b\u7409
territories.DK=\u4e39\u9ea5
territories.DJ=\u5409\u5e03\u5730
territories.PS=\u5df4\u52d2\u65af\u5766
+territories.030=\u6771\u4e9e
territories.PR=\u73bb\u591a\u9ece\u514b
territories.DE=\u5fb7\u570b
territories.PN=\u76ae\u7279\u5eb7
@@ -480,6 +340,7 @@ territories.CY=\u8cfd\u666e\u52d2\u65af
territories.CX=\u8056\u8a95\u5cf6
territories.CV=\u7dad\u5fb7\u89d2
territories.PA=\u5df4\u62ff\u99ac
+territories.CS=\u585e\u723e\u7dad\u4e9e\u548c\u8499\u7279\u5c3c\u54e5\u7f85
territories.CR=\u54e5\u65af\u5927\u9ece\u52a0
territories.CO=\u54e5\u502b\u6bd4\u4e9e
territories.CN=\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u570b
@@ -500,6 +361,7 @@ territories.NZ=\u7d10\u897f\u862d
territories.BO=\u73bb\u5229\u7dad\u4e9e
territories.BN=\u6c76\u840a
territories.BM=\u767e\u6155\u9054
+territories.014=\u6771\u975e
territories.NU=\u7d10\u5a01\u5cf6
territories.BJ=\u8c9d\u5357
territories.BI=\u6d66\u9686\u5730
@@ -517,36 +379,36 @@ territories.NG=\u5948\u53ca\u5229\u4e9e
territories.NF=\u8afe\u798f\u514b\u5cf6
territories.AZ=\u4e9e\u585e\u62dc\u7136
territories.NE=\u5c3c\u65e5
+territories.AX=\u4e9e\u862d\u7fa4\u5cf6
territories.NC=\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e\u7fa4\u5cf6
territories.AW=\u963f\u8def\u5df4
territories.ZM=\u5c1a\u6bd4\u4e9e
-territories.AU=\u6fb3\u6d32
territories.NA=\u7d0d\u7c73\u6bd4\u4e9e
+territories.AU=\u6fb3\u6d32
territories.AT=\u5967\u5730\u5229
territories.AS=\u7f8e\u5c6c\u85a9\u6469\u4e9e\u7fa4\u5cf6
territories.AQ=\u5357\u6975\u6d32
territories.MZ=\u83ab\u4e09\u6bd4\u514b
-territories.MY=\u99ac\u4f86\u897f\u4e9e
territories.AN=\u8377\u5c6c\u5b89\u5730\u5217\u65af
+territories.MY=\u99ac\u4f86\u897f\u4e9e
territories.AM=\u4e9e\u7f8e\u5c3c\u4e9e
-territories.MW=\u99ac\u62c9\u5a01
territories.AL=\u963f\u723e\u5df4\u5c3c\u4e9e
+territories.MW=\u99ac\u62c9\u5a01
territories.MV=\u99ac\u723e\u5730\u592b
territories.MU=\u6a21\u91cc\u897f\u65af
-territories.MT=\u99ac\u723e\u4ed6
territories.AI=\u5b89\u572d\u62c9\u5cf6
+territories.MT=\u99ac\u723e\u4ed6
territories.MS=\u8499\u7279\u8272\u62c9\u7279\u5cf6
-territories.MR=\u8305\u5229\u5854\u5c3c\u4e9e
territories.AG=\u5b89\u5730\u5361\u53ca\u5df4\u5e03\u9054
+territories.MR=\u8305\u5229\u5854\u5c3c\u4e9e
territories.MQ=\u99ac\u4e01\u5c3c\u514b\u5cf6
-territories.MP=\u5317\u99ac\u91cc\u5b89\u7d0d
territories.AE=\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b
-territories.MO=\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u570b\u6fb3\u9580\u7279\u5225\u884c\u653f\u5340
+territories.MP=\u5317\u99ac\u91cc\u5b89\u7d0d
territories.AD=\u5b89\u9053\u723e
+territories.MO=\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u570b\u6fb3\u9580\u7279\u5225\u884c\u653f\u5340
territories.MM=\u7dec\u7538
territories.ML=\u99ac\u5229
territories.MK=\u99ac\u5176\u9813
-territories.YU=\u585e\u723e\u7dad\u4e9e
territories.YT=\u99ac\u7d04\u7279
territories.MH=\u99ac\u7d39\u723e\u7fa4\u5cf6
territories.MG=\u99ac\u9054\u52a0\u65af\u52a0
@@ -554,16 +416,22 @@ territories.MD=\u6469\u723e\u591a\u74e6
territories.MC=\u6469\u7d0d\u54e5
territories.YE=\u8449\u9580
territories.LY=\u5229\u6bd4\u4e9e
+territories.155=\u897f\u6b50
territories.LV=\u62c9\u812b\u7dad\u4e9e
+territories.154=\u5317\u6b50
territories.LU=\u76e7\u68ee\u5821
territories.LS=\u8cf4\u7d22\u6265
+territories.151=\u6771\u6b50
territories.LR=\u8cf4\u6bd4\u745e\u4e9e
+territories.150=\u6b50\u6d32
territories.LK=\u65af\u91cc\u862d\u5361
territories.LI=\u5217\u652f\u6566\u65af\u767b
territories.LC=\u8056\u9732\u897f\u4e9e
territories.LA=\u5bee\u570b
territories.KZ=\u54c8\u85a9\u514b
territories.KY=\u958b\u66fc\u7fa4\u5cf6
+territories.145=\u897f\u4e9e
+territories.142=\u4e9e\u6d32
territories.KR=\u5357\u97d3
territories.KP=\u5317\u97d3
territories.KN=\u8056\u514b\u91cc\u65af\u591a\u798f\u53ca\u5c3c\u7dad\u65af
@@ -623,16 +491,16 @@ languages.wa=\u74e6\u9686\u6587
languages.kum=\u5eab\u5bc6\u514b\u6587
languages.zap=\u85a9\u6ce2\u7279\u514b\u6587
languages.cus=\u5eab\u65bd\u7279\u8a9e\u7cfb\uff08\u5176\u4ed6\uff09
-languages.jbo=\u908f\u8f2f\u6587
languages.doi=\u591a\u683c\u4f86\u6587
+languages.jbo=\u908f\u8f2f\u6587
languages.oto=\u5967\u6258\u7c73\u6587
languages.vai=\u8d8a\u5357\u6587
languages.rar=\u62c9\u7f85\u901a\u52a0\u6587
languages.ve=\u6eab\u9054\u6587
languages.rap=\u5fa9\u6d3b\u5cf6\u6587
languages.raj=\u62c9\u8cc8\u65af\u5766\u8af8\u6587
-languages.ota=\u9102\u5716\u66fc\u571f\u8033\u5176\u6587 (1500-1928)
languages.nzi=\u5c3c\u8332\u99ac\u6587
+languages.ota=\u9102\u5716\u66fc\u571f\u8033\u5176\u6587 (1500-1928)
languages.uz=\u70cf\u8332\u5225\u514b\u6587
languages.uga=\u70cf\u52a0\u5217\u6587
languages.tmh=\u5854\u99ac\u5947\u514b\u6587
@@ -644,10 +512,10 @@ languages.egy=\u53e4\u57c3\u53ca\u6587)
languages.ug=\u7dad\u543e\u723e\u6587
languages.fan=\u82b3\u65cf\u6587
languages.ssa=\u975e\u6d32\u6492\u54c8\u62c9\u6c99\u6f20\u908a\u7de3\u5730\u5e36\u6587
-languages.mga=\u611b\u723e\u862d\u6587\uff0c\u4e2d\u53e4 (900-1200)
languages.bat=\u6ce2\u7f85\u7684\u6587\uff08\u5176\u4ed6\uff09
-languages.nyo=\u5c3c\u5967\u56c9\u6587
+languages.mga=\u611b\u723e\u862d\u6587\uff0c\u4e2d\u53e4 (900-1200)
languages.bas=\u5df4\u85a9\u6587
+languages.nyo=\u5c3c\u5967\u56c9\u6587
languages.nyn=\u5c3c\u63da\u79d1\u840a\u6587
languages.nym=\u5c3c\u63da\u97cb\u9f4a\u6587
languages.hmn=\u5b5f\u6587
@@ -665,8 +533,8 @@ languages.tk=\u571f\u5eab\u66fc\u6587
languages.ti=\u63d0\u683c\u5229\u5c3c\u4e9e\u6587
languages.kru=\u5eab\u9b6f\u79d1\u6587
languages.te=\u6cf0\u76e7\u56fa\u6587
-languages.kro=\u514b\u9b6f\u6587
languages.csb=\u5361\u8212\u5e03\u6587
+languages.kro=\u514b\u9b6f\u6587
languages.ta=\u5766\u7c73\u723e\u6587
languages.tkl=\u6258\u514b\u52de\u6587
languages.efi=\u57c3\u83f2\u514b\u6587
@@ -685,8 +553,8 @@ languages.grc=\u53e4\u5e0c\u81d8\u6587 (\u81f3 1453)
languages.grb=\u54e5\u535a\u8a9e
languages.si=\u50e7\u4f3d\u7f85\u6587
languages.sh=\u585e\u723e\u7dad\u4e9e\u514b\u7f85\u57c3\u897f\u4e9e\u6587
-languages.crh=\u514b\u91cc\u7c73\u4e9e\u534a\u5cf6\u7684\u571f\u8033\u5176\u6587\uff1b\u514b\u91cc\u7c73\u4e9e\u534a\u5cf6\u7684\u5854\u5854\u723e\u6587
languages.afa=\u975e\u9583\u65cf\u53ca\u975e\u4e9e\u8a9e\u8a00
+languages.crh=\u514b\u91cc\u7c73\u4e9e\u534a\u5cf6\u7684\u571f\u8033\u5176\u6587\uff1b\u514b\u91cc\u7c73\u4e9e\u534a\u5cf6\u7684\u5854\u5854\u723e\u6587
languages.se=\u5317\u65b9\u85a9\u7c73\u6587
languages.sd=\u8607\u4e39\u6587
languages.udm=\u6c83\u8482\u827e\u514b\u6587
@@ -703,14 +571,14 @@ languages.tig=\u8482\u683c\u96f7\u6587
languages.cpp=\u6b50\u6d32\u8154\u8abf\u548c\u6d0b\u6d87\u6ff1\uff0c\u6e90\u81ea\u8461\u8404\u7259\u6587\u7684(\u5176\u4ed6)
languages.sog=\u7d22\u683c\u5e95\u4e9e\u7d0d\u6587
languages.ada=\u963f\u7576\u83ab\u6587
-languages.kos=\u79d1\u65af\u96f7\u6069\u6587
-languages.hit=\u8d6b\u68af\u6587
languages.cpf=\u6b50\u6d32\u8154\u8abf\u548c\u6d0b\u6d87\u6ff1\uff0c\u6e90\u81ea\u6cd5\u6587\u7684(\u5176\u4ed6)
+languages.hit=\u8d6b\u68af\u6587
+languages.kos=\u79d1\u65af\u96f7\u6069\u6587
languages.cpe=\u6b50\u6d32\u8154\u8abf\u548c\u6d0b\u6d87\u6ff1\uff0c\u6e90\u81ea\u82f1\u6587\u7684(\u5176\u4ed6)
languages.him=\u8d6b\u99ac\u67e5\u5229\u6587
-languages.kok=\u8ca2\u6839\u6587
-languages.hil=\u5e0c\u5229\u84cb\u8fb2\u6587
languages.got=\u54e5\u7279\u6587
+languages.hil=\u5e0c\u5229\u84cb\u8fb2\u6587
+languages.kok=\u8ca2\u6839\u6587
languages.gor=\u79d1\u9686\u9054\u7f85\u6587
languages.gon=\u5ca1\u5fb7\u6587
languages.nub=\u52aa\u6bd4\u4e9e\u6587
@@ -720,30 +588,30 @@ languages.goh=\u5fb7\u6587,\u4e0a\u53e4\u5168\u76db\u6642\u671f (ca.750-1050)
languages.ach=\u963f\u50d1\u5229\u6587
languages.yao=\u7464\u6587
languages.phi=\u5176\u4ed6\u83f2\u5f8b\u8cd3\u6587
-languages.ace=\u4e9e\u9f4a\u6587
languages.pl=\u6ce2\u862d\u6587
+languages.ace=\u4e9e\u9f4a\u6587
languages.pi=\u5df4\u5229\u6587
languages.bug=\u5e03\u5409\u65af\u6587
languages.sms=\u65af\u79d1\u7279\u85a9\u7c73\u6587
languages.bua=\u5e03\u91cc\u963f\u7279\u6587
languages.mas=\u99ac\u8cfd\u6587
languages.smn=\u4f0a\u7d0d\u88e1\u85a9\u7c73\u6587
-languages.map=\u5357\u5cf6\u6587
languages.os=\u5967\u585e\u63d0\u6587
+languages.map=\u5357\u5cf6\u6587
languages.or=\u6b50\u91cc\u4e9e\u6587
languages.smj=\u9b6f\u52d2\u85a9\u7c73\u6587
languages.smi=\u5176\u4ed6\u85a9\u7c73\u6587
languages.mak=\u671b\u52a0\u932b\u6587
languages.mai=\u9081\u8482\u5229\u6587
-languages.mag=\u99ac\u52a0\u4f0a\u6587
languages.oj=\u5967\u6770\u5e03\u74e6\u6587
+languages.mag=\u99ac\u52a0\u4f0a\u6587
languages.mad=\u99ac\u90fd\u62c9\u6587
languages.sma=\u5357\u85a9\u7c73\u6587
languages.oc=\u5967\u897f\u5766\u6587
languages.myv=\u5384\u723e\u8332\u4e9e\u6587
languages.dgr=\u591a\u683c\u91cc\u5e03\u6587
-languages.myn=\u99ac\u96c5\u6587
languages.ny=\u5c3c\u63da\u8cc8\u6587
+languages.myn=\u99ac\u96c5\u6587
languages.nv=\u7d0d\u74e6\u7d04\u6587
languages.nr=\u5357\u5730\u7562\u5217\u6587
languages.gmh=\u5fb7\u6587, \u4e2d\u53e4\u5168\u76db\u6642\u671f (ca.1050-1500)
@@ -761,12 +629,12 @@ languages.tem=\u63d0\u59c6\u6587
languages.my=\u7dec\u7538\u6587
languages.lez=\u7acb\u9676\u5b9b\u6587
languages.mt=\u99ac\u723e\u4ed6\u6587
-languages.peo=\u53e4\u6ce2\u65af\u6587 (ca.600-400 B.C.)
languages.ms=\u99ac\u4f86\u6587
+languages.peo=\u53e4\u6ce2\u65af\u6587 (ca.600-400 B.C.)
languages.mr=\u99ac\u62c9\u5730\u6587
languages.mo=\u6469\u723e\u591a\u74e6\u6587
-languages.jrb=\u7336\u592a\u6559-\u963f\u62c9\u4f2f\u6587
languages.ml=\u99ac\u4f86\u4e9e\u62c9\u59c6\u6587
+languages.jrb=\u7336\u592a\u6559-\u963f\u62c9\u4f2f\u6587
languages.mk=\u99ac\u5176\u9813\u6587
languages.mh=\u99ac\u7d39\u723e\u6587
languages.mg=\u99ac\u723e\u52a0\u4ec0\u6587
@@ -792,8 +660,8 @@ languages.kn=\u574e\u90a3\u9054\u6587
languages.km=\u9ad8\u68c9\u6587
languages.kl=\u683c\u9675\u862d\u6587
languages.kk=\u54c8\u85a9\u514b\u6587
-languages.kj=\u5ee3\u4e9e\u99ac\u6587
languages.rom=\u5409\u666e\u8cfd\u6587
+languages.kj=\u5ee3\u4e9e\u99ac\u6587
languages.sid=\u5e0c\u9054\u6469\u6587
languages.ki=\u5409\u5eab\u5c24\u4eba
languages.kg=\u525b\u679c\u6587
@@ -811,44 +679,44 @@ languages.fon=\u8c50\u6587
languages.xal=\u5361\u723e\u6885\u514b\u6587
languages.aus=\u6fb3\u6d32\u82f1\u6587
languages.kho=\u548c\u95d0[\u8207\u95d0]\u6587
-languages.pau=\u5e1b\u7409\u6587
languages.chy=\u6c99\u4f0a\u5b89\u6587
+languages.pau=\u5e1b\u7409\u6587
languages.iu=\u56e0\u7d10\u7279\u6587
-languages.it=\u7fa9\u5927\u5229\u6587
languages.pap=\u5e15\u76ae\u963f\u9580\u6258\u6587
+languages.it=\u7fa9\u5927\u5229\u6587
languages.sgn=\u624b\u8a9e
languages.is=\u51b0\u5cf6\u6587
languages.chr=\u67f4\u7f85\u57fa\u6587
languages.pam=\u6f58\u5e15\u5609\u6587
-languages.pal=\u5df4\u5217\u7dad\u6587
languages.chp=\u5947\u4f69\u74e6\u63da\u6587
-languages.io=\u4f0a\u6717\u6587
+languages.pal=\u5df4\u5217\u7dad\u6587
languages.cho=\u55ac\u514b\u6258\u6587
+languages.io=\u4f0a\u6717\u6587
languages.chn=\u5951\u5974\u514b\u6587
languages.chm=\u99ac\u91cc\u6587
languages.tyv=\u571f\u51e1\u6587
languages.bnt=\u73ed\u5716\u6587
-languages.ik=\u4f9d\u5974\u76ae\u7dad\u514b\u6587
-languages.pag=\u6f58\u52a0\u8f9b\u6587
languages.chk=\u8655\u5947\u65af\u6587
+languages.pag=\u6f58\u52a0\u8f9b\u6587
+languages.ik=\u4f9d\u5974\u76ae\u7dad\u514b\u6587
languages.ii=\u56db\u5ddd\u8a71
languages.lam=\u862d\u5df4\u6587
languages.ig=\u4f0a\u5e03\u6587
languages.sga=\u53e4\u611b\u723e\u862d\u6587\uff08\u81f3 900\uff09
-languages.ie=\u62c9\u4e01\u570b\u969b\u6587
languages.paa=\u5176\u4ed6\u5df4\u5e03\u4e9e\u8af8\u8a9e\u8a00
+languages.ie=\u62c9\u4e01\u570b\u969b\u6587
languages.id=\u5370\u5c3c\u6587
languages.lah=\u62c9\u4ea8\u9054\u6587
-languages.day=\u8fea\u96c5\u514b\u6587
languages.chb=\u5947\u5e03\u67e5\u6587
+languages.day=\u8fea\u96c5\u514b\u6587
languages.ia=\u62c9\u4e01\u570b\u969b\u6587
languages.lad=\u62c9\u8fea\u8afe\u6587
-languages.hz=\u8d6b\u96f7\u7f85\u6587
-languages.hai=\u6d77\u9054\u6587
languages.dar=\u9054\u723e\u683c\u74e6\u6587
+languages.hai=\u6d77\u9054\u6587
+languages.hz=\u8d6b\u96f7\u7f85\u6587
languages.hy=\u4e9e\u7f8e\u5c3c\u4e9e\u6587
languages.ath=\u963f\u85a9\u5df4\u65af\u5361\u6587
-languages.ht=\u6d77\u5730\u4eba
+languages.ht=\u6d77\u5730\u6587
languages.dak=\u9054\u79d1\u4ed6\u6587
languages.hr=\u514b\u7f85\u57c3\u897f\u4e9e\u6587
languages.ho=\u897f\u91cc\u83ab\u5716\u571f\u6587
@@ -859,18 +727,18 @@ languages.wen=\u6587\u5fb7\u6587
languages.gv=\u66fc\u5cf6\u6587
languages.gu=\u5409\u4e9e\u62c9\u5854\u6587
languages.sem=\u5176\u4ed6\u9583\u65cf\u8a9e\u8a00
-languages.iro=\u6613\u6d1b\u9b41\u6587
languages.sel=\u745f\u723e\u5361\u666e\u6587
+languages.iro=\u6613\u6d1b\u9b41\u6587
languages.gl=\u52a0\u91cc\u897f\u4e9e\u6587
-languages.gez=\u5409\u8332\u6587
-languages.art=\u5176\u4ed6\u4eba\u5de5\u8a9e\u8a00
languages.gd=\u8607\u683c\u862d - \u84cb\u723e\u6587
+languages.art=\u5176\u4ed6\u4eba\u5de5\u8a9e\u8a00
+languages.gez=\u5409\u8332\u6587
languages.ira=\u4f0a\u82b3\u6717\u6587
languages.ga=\u611b\u723e\u862d\u6587
languages.arn=\u963f\u52de\u574e\u6587
languages.fy=\u5f17\u91cc\u65af\u862d\u6587
languages.bla=\u932b\u514b\u932b\u5361\u6587
-languages.gem=\u5fb7\u570b\u7684(\u5176\u4ed6)
+languages.gem=\u5fb7\u570b\u6587(\u5176\u4ed6)
languages.ypk=\u611b\u65af\u57fa\u6469\u6587
languages.fo=\u6cd5\u7f85\u6587
languages.cel=\u514b\u723e\u7279\u6587\uff08\u5176\u4ed6\uff09
@@ -887,10 +755,10 @@ languages.niu=\u7d10\u57c3\u6587
languages.tup=\u5716\u76ae\u6587
languages.ee=\u57c3\u7def\u6587
languages.tum=\u5716\u59c6\u5e03\u5361\u6587
-languages.nic=\u5176\u4ed6\u5c3c\u65e5\u525b\u679c\u8a9e\u7cfb
-languages.lus=\u76e7\u6652\u6587
-languages.fiu=\u82ac\u862d-\u70cf\u6208\u723e\u65cf\u6587(\u5176\u4ed6)
languages.dv=\u8fea\u7dad\u897f\u6587
+languages.fiu=\u82ac\u862d-\u70cf\u6208\u723e\u65cf\u6587(\u5176\u4ed6)
+languages.lus=\u76e7\u6652\u6587
+languages.nic=\u5176\u4ed6\u5c3c\u65e5\u525b\u679c\u8a9e\u7cfb
languages.nia=\u5c3c\u4e9e\u65af\u6587
languages.moh=\u83ab\u970d\u514b\u6587
languages.luo=\u76e7\u5967\u6587
@@ -906,27 +774,27 @@ languages.da=\u4e39\u9ea5\u6587
languages.dum=\u8377\u862d\uff0c\u4e2d\u53e4 (ca. 1050-1350)
languages.mno=\u99ac\u8afe\u6ce2\u6587
languages.wak=\u5938\u57fa\u6b66\u7279\u6587
-languages.sat=\u6563\u5854\u5229\u6587
languages.cy=\u5a01\u723e\u58eb\u6587
+languages.sat=\u6563\u5854\u5229\u6587
languages.sas=\u6492\u6492\u514b\u6587
-languages.kbd=\u5361\u5df4\u723e\u9054\u6587
languages.cv=\u695a\u74e6\u751a\u6587
+languages.kbd=\u5361\u5df4\u723e\u9054\u6587
languages.mni=\u66fc\u5c3c\u666e\u88e1\u6587
-languages.sam=\u85a9\u746a\u5229\u4e9e\u963f\u62c9\u59c6\u6587
languages.cr=\u514b\u88e1\u6587
-languages.sal=\u85a9\u5229\u751a\u6587
+languages.sam=\u85a9\u746a\u5229\u4e9e\u963f\u62c9\u59c6\u6587
languages.dua=\u675c\u4e9e\u62c9\u6587
+languages.sal=\u85a9\u5229\u751a\u6587
languages.mnc=\u6eff\u65cf\u6587
languages.sah=\u96c5\u5eab\u7279\u6587
languages.gba=\u845b\u5df4\u4e9e\u6587
languages.sad=\u6851\u9054\u97cb\u6587
languages.ch=\u67e5\u83ab\u6d1b\u6587
-languages.ine=\u5370\u6b50\u8a9e\u7cfb\uff08\u5176\u4ed6\uff09
languages.bho=\u535a\u5091\u666e\u723e\u6587
+languages.ine=\u5370\u6b50\u8a9e\u7cfb\uff08\u5176\u4ed6\uff09
languages.enm=\u82f1\u6587\uff0c\u4e2d\u4e16\u7d00 (1100-1500)
-languages.kar=\u514b\u502b\u6587
-languages.inc=\u5370\u5ea6\u8a9e\u7cfb\uff08\u5176\u4ed6\uff09
languages.ce=\u8eca\u81e3\u6587
+languages.inc=\u5370\u5ea6\u8a9e\u7cfb\uff08\u5176\u4ed6\uff09
+languages.kar=\u514b\u502b\u6587
languages.gay=\u52a0\u7d04\u6587
languages.ca=\u52a0\u6cf0\u7f85\u5c3c\u4e9e\u6587
languages.umb=\u59c6\u672c\u675c\u6587
@@ -935,12 +803,12 @@ languages.tsi=\u6b3d\u897f\u5b89\u6587
languages.ang=\u53e4\u82f1\u6587 (ca.450-1100)
languages.cau=\u9ad8\u52a0\u7d22\u6587\uff08\u5176\u4ed6\uff09
languages.kab=\u5361\u6bd4\u723e\u6587
-languages.kaa=\u5361\u62c9\u5361\u723e\u5e15\u514b\u6587
languages.bs=\u6ce2\u58eb\u5c3c\u4e9e\u6587
+languages.kaa=\u5361\u62c9\u5361\u723e\u5e15\u514b\u6587
languages.bo=\u85cf\u6587
languages.gaa=\u52a0\u65cf\u6587
-languages.cai=\u4e2d\u7f8e\u5370\u7b2c\u5b89\u6587\uff08\u5176\u4ed6\uff09
languages.bi=\u6bd4\u65af\u62c9\u99ac\u6587
+languages.cai=\u4e2d\u7f8e\u5370\u7b2c\u5b89\u6587\uff08\u5176\u4ed6\uff09
languages.bh=\u6bd4\u54c8\u723e\u6587
languages.bg=\u4fdd\u52a0\u5229\u4e9e\u6587
languages.be=\u767d\u4fc4\u7f85\u65af\u6587
@@ -953,12 +821,12 @@ languages.ay=\u827e\u99ac\u62c9\u6587
languages.av=\u963f\u6cd5\u6587
languages.as=\u963f\u85a9\u59c6\u6587
languages.dsb=\u4e0b\u7d22\u5e03\u6587
-languages.ilo=\u4f0a\u6d1b\u95ca\u6587
languages.elx=\u57c3\u862d\u6587
+languages.ilo=\u4f0a\u6d1b\u95ca\u6587
languages.an=\u963f\u62c9\u8ca2\u6587
languages.pra=\u5370\u5ea6\u53e4\u4ee3\u53ca\u4e2d\u4e16\u7d00\u4e4b\u4e2d\u90e8\u53ca\u5317\u90e8\u65b9\u8a00
-languages.new=\u5c3c\u74e6\u723e\u6587
languages.ak=\u963f\u574e\u6587
+languages.new=\u5c3c\u74e6\u723e\u6587
languages.za=\u58ef\u6587
languages.af=\u5357\u975e\u8377\u862d\u6587
languages.ae=\u963f\u7def\u65af\u9640\u6587
diff --git a/libjava/classpath/resource/gnu/javax/print/PrinterDialog.properties b/libjava/classpath/resource/gnu/javax/print/PrinterDialog.properties
new file mode 100644
index 0000000..0c04db7
--- /dev/null
+++ b/libjava/classpath/resource/gnu/javax/print/PrinterDialog.properties
@@ -0,0 +1,93 @@
+# PrinterDialog.properties -- Default property file for PrinterDialog
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is part of GNU Classpath.
+#
+# GNU Classpath 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, or (at your option)
+# any later version.
+#
+# GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA.
+#
+# Linking this library statically or dynamically with other modules is
+# making a combined work based on this library. Thus, the terms and
+# conditions of the GNU General Public License cover the whole
+# combination.
+#
+# As a special exception, the copyright holders of this library give you
+# permission to link this library with independent modules to produce an
+# executable, regardless of the license terms of these independent
+# modules, and to copy and distribute the resulting executable under
+# terms of your choice, provided that you also meet, for each linked
+# independent module, the terms and conditions of the license of that
+# module. An independent module is a module which is not derived from
+# or based on this library. If you modify this library, you may extend
+# this exception to your version of the library, but you are not
+# obligated to do so. If you do not wish to do so, delete this
+# exception statement from your version.
+#
+rbt.onesided=Onesided
+rbt.calendar=Calendar
+rbt.duplex=Duplex
+rbt.blackwhite=Black&White
+rbt.color=Color
+rbt.low=Low
+rbt.normal=Normal
+rbt.high=High
+rbt.all=All
+rbt.pages=Pages
+rbt.portrait=Portrait
+rbt.landscape=Landscape
+rbt.revportrait=Reversed Portrait
+rbt.revlandscape=Reversed Landscape
+cb.cover=Cover page
+cb.sort=Sort
+cb.output=Redirect output in file
+lb.size=Size:
+lb.source=Source:
+lb.left=left (mm)
+lb.right=right (mm)
+lb.top=top (mm)
+lb.bottom=bottom (mm)
+lb.name=Name:
+lb.status=Status:
+lb.typ=Typ:
+lb.info=Info:
+lb.to=to
+lb.copies=Number of copies:
+lb.jobname=Job name:
+lb.username=User name:
+lb.priority=Priority:
+lb.acceptingjobs=Printer is accepting jobs
+lb.notacceptingjobs=Printer is not accepting jobs
+lb.automatically=Automatically Select
+bt.attributes=Attributes...
+bt.print=Print
+bt.OK=OK
+bt.cancel=Cancel
+# names of the panel titles
+title.medias=Medias
+title.printservice=Printservice
+title.orientation=Orientation
+title.color=Color
+title.sides=Sides
+title.copies=Copies
+title.quality=Quality
+title.jobattributes=Job-Attributes
+title.margins=Margins
+title.printdialog=Printing
+title.pagedialog=Printing
+title.printrange=Printrange
+# names of the main tabs
+tab.general=General
+tab.pagesetup=Page setup
+tab.appearance=Appearance
diff --git a/libjava/classpath/resource/gnu/javax/print/PrinterDialog_de.properties b/libjava/classpath/resource/gnu/javax/print/PrinterDialog_de.properties
new file mode 100644
index 0000000..b476551
--- /dev/null
+++ b/libjava/classpath/resource/gnu/javax/print/PrinterDialog_de.properties
@@ -0,0 +1,91 @@
+# PrinterDialog_de.properties -- German property file for PrinterDialog
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is part of GNU Classpath.
+#
+# GNU Classpath 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, or (at your option)
+# any later version.
+#
+# GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA.
+#
+# Linking this library statically or dynamically with other modules is
+# making a combined work based on this library. Thus, the terms and
+# conditions of the GNU General Public License cover the whole
+# combination.
+#
+# As a special exception, the copyright holders of this library give you
+# permission to link this library with independent modules to produce an
+# executable, regardless of the license terms of these independent
+# modules, and to copy and distribute the resulting executable under
+# terms of your choice, provided that you also meet, for each linked
+# independent module, the terms and conditions of the license of that
+# module. An independent module is a module which is not derived from
+# or based on this library. If you modify this library, you may extend
+# this exception to your version of the library, but you are not
+# obligated to do so. If you do not wish to do so, delete this
+# exception statement from your version.
+#
+rbt.onesided=Einseitig
+rbt.calendar=Kalenderdruck
+rbt.duplex=Duplex
+rbt.blackwhite=Schwarzweiß
+rbt.color=Farbe
+rbt.low=Entwurf
+rbt.normal=Normal
+rbt.high=Hoch
+rbt.all=Alle
+rbt.pages=Seiten
+rbt.portrait=Hochformat
+rbt.landscape=Querformat
+rbt.revportrait=Umgekehrtes Hochformat
+rbt.revlandscape=Umgekehrtes Querformat
+cb.cover=Deckblatt
+cb.sort=Sortieren
+cb.output=Ausgabe in Datei umleiten
+lb.size=Größe:
+lb.source=Quelle:
+lb.left=links (mm)
+lb.right=rechts (mm)
+lb.top=oben (mm)
+lb.bottom=unten (mm)
+lb.name=Name:
+lb.status=Status:
+lb.typ=Typ:
+lb.info=Info:
+lb.to=Bis
+lb.copies=Anzahl der Kopien:
+lb.jobname=Job-name:
+lb.username=Benutzername:
+lb.priority=Priorität:
+lb.acceptingjobs=Drucker nimmt Aufträge an
+lb.notacceptingjobs=Drucker nimmt keine Aufträge an
+lb.automatically=Automatische Auswahl
+bt.attributes=Eigenschaften...
+bt.print=Drucken
+bt.OK=OK
+bt.cancel=Abbrechen
+title.medias=Medien
+title.printservice=Druckdienst
+title.orientation=Ausrichtung
+title.color=Farbdarstellung
+title.sides=Seiten
+title.copies=Kopien
+title.quality=Qualität
+title.jobattributes=Job-Attribute
+title.margins=Ränder
+title.printdialog=Drucken
+title.pagedialog=Seite einrichten
+title.printrange=Druckbereich
+tab.general=Allgemein
+tab.pagesetup=Seite einrichten
+tab.appearance=Aussehen
diff --git a/libjava/classpath/resource/java/security/classpath.security b/libjava/classpath/resource/java/security/classpath.security
index cc7d493..13d691b 100644
--- a/libjava/classpath/resource/java/security/classpath.security
+++ b/libjava/classpath/resource/java/security/classpath.security
@@ -35,8 +35,9 @@
# obligated to do so. If you do not wish to do so, delete this
# exception statement from your version.
-
+# Note that the settings and ordering here are mirrored in Security.
security.provider.1=gnu.java.security.provider.Gnu
security.provider.2=gnu.javax.crypto.jce.GnuCrypto
security.provider.3=gnu.javax.crypto.jce.GnuSasl
security.provider.4=gnu.javax.net.ssl.provider.Jessie
+security.provider.5=gnu.javax.security.auth.callback.GnuCallbacks
diff --git a/libjava/classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties b/libjava/classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties
new file mode 100644
index 0000000..8141c2a
--- /dev/null
+++ b/libjava/classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties
@@ -0,0 +1,9 @@
+# Localized error messages for javax.imageio.plugins.jpeg
+
+# Compression types
+compression.types.jpeg=JPEG
+
+# Compression quality descriptions
+compression.minimum=Minimum useful
+compression.default=Visually lossless
+compression.maximum=Maximum useful
diff --git a/libjava/classpath/scripts/Makefile.in b/libjava/classpath/scripts/Makefile.in
index df9b898..6aeb082 100644
--- a/libjava/classpath/scripts/Makefile.in
+++ b/libjava/classpath/scripts/Makefile.in
@@ -70,6 +70,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -109,6 +110,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -129,6 +132,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -176,6 +180,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -194,8 +199,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -207,8 +215,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -225,7 +231,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -233,18 +242,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
diff --git a/libjava/classpath/scripts/build_mathnamespace b/libjava/classpath/scripts/build_mathnamespace
deleted file mode 100644
index a2e53a3..0000000
--- a/libjava/classpath/scripts/build_mathnamespace
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-echo "/* Warning ! This is a generated file. Use build_mathnamespace to regenerate it */"
-while read fun;do
- echo "#define ${fun} ClasspathMath_${fun}"
-done
diff --git a/libjava/classpath/scripts/checkstyle-config.xml b/libjava/classpath/scripts/checkstyle-config.xml
deleted file mode 100644
index 498e7fa..0000000
--- a/libjava/classpath/scripts/checkstyle-config.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE module PUBLIC
- "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
- "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
-<!--
-
-Changes to this file need to be discussed on classpath@gnu.org
-mailing list first and probably documented in the hacking guide.
-
--->
-<module name="Checker">
- <module name="PackageHtml"/>
-
- <module name="TreeWalker">
- <property name="tabWidth" value="8"/>
-
- <!-- Javadoc related checks -->
- <!--
- <module name="JavadocType">
- <property name="scope" value="protected"/>
- </module>
- <module name="JavadocMethod">
- <property name="scope" value="protected"/>
- <property name="allowUndeclaredRTE" value="true"/>
- </module>
- <module name="JavadocVariable">
- <property name="scope" value="protected"/>
- </module>
- -->
- <module name="JavadocStyle">
- <property name="checkFirstSentence" value="false"/>
- <property name="checkHtml" value="true"/>
- </module>
-
- <!-- File header checks -->
- <module name="RegexpHeader">
- <property name="headerFile" value="scripts/checkstyle-header.regex"/>
- <property name="multiLines" value="2, 3, 38"/>
- </module>
-
- <!-- import checks -->
- <module name="AvoidStarImport"/>
- <module name="RedundantImport"/>
- <module name="UnusedImports"/>
- <module name="ImportOrder">
- <property name="groups" value="gnu,java,javax,org"/>
- <property name="ordered" value="true"/>
- <property name="separated" value="true"/>
- </module>
-
- <!-- size checks -->
- <!--
- <module name="LineLength">
- <property name="max" value="80"/>
- </module>
- -->
-
- <!-- modifier checks -->
- <module name="ModifierOrder"/>
- <module name="RedundantModifier"/>
-
- <!-- block checks -->
- <!--
- <module name="EmptyBlock">
- <property name="option" value="text"/>
- </module>
- <module name="LeftCurly">
- <property name="option" value="nl"/>
- </module>
- <module name="RightCurly">
- <property name="option" value="alone"/>
- </module>
- <module name="AvoidNestedBlocks"/>
- -->
-
- <!-- coding problem checks -->
- <!--
- <module name="ArrayTrailingComma"/>
- <module name="CovariantEquals"/>
- <module name="DoubleCheckedLocking"/>
- <module name="EmptyStatement"/>
- <module name="EqualsHashCode"/>
- <module name="HiddenField"/>
- -->
- <module name="IllegalInstantiation">
- <property name="classes" value="java.lang.Boolean"/>
- </module>
- <!--
- <module name="InnerAssignment"/>
- <module name="MagicNumber"/>
- <module name="RedundantThrows"/>
- <module name="SimplifyBooleanExpression"/>
- <module name="SimplifyBooleanReturn"/>
- <module name="NestedIfDepth"/>
- <module name="NestedTryDepth"/>
- <module name="SuperClone"/>
- <module name="SuperFinalize"/>
- <module name="IllegalCatch"/>
- -->
- <module name="PackageDeclaration"/>
- <!--
- <module name="DeclarationOrder"/>
- <module name="DefaultComesLast"/>
- <module name="UnnecessaryParentheses"/>
- -->
-
- <!-- design problem checks -->
- <!--
- <module name="FinalClass"/>
- <module name="HideUtilityClassConstructor"/>
- -->
-
- <!-- miscellaneous checks -->
- <!--
- <module name="TodoComment"/>
- <module name="UpperEll"/>
- <module name="ArrayTypeStyle"/>
- <module name="Indentation">
- <property name="basicOffset" value="2"/>
- <property name="braceAdjustment" value="2"/>
- <property name="caseIndent" value="0"/>
- </module>
- -->
- </module>
- <!--
- <module name="StrictDuplicateCode"/>
- -->
-
- <module name="SuppressionFilter">
- <property name="file" value="scripts/checkstyle-suppressions.xml"/>
- </module>
-</module>
diff --git a/libjava/classpath/scripts/checkstyle-header.regex b/libjava/classpath/scripts/checkstyle-header.regex
deleted file mode 100644
index 15eb29a..0000000
--- a/libjava/classpath/scripts/checkstyle-header.regex
+++ /dev/null
@@ -1,38 +0,0 @@
-^/\* .*$
-^ .*$
-^ (Copyright \(C\) .*|Free Software Foundation, Inc.)$
-^$
-^This file is part of GNU Classpath.$
-^$
-^GNU Classpath 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, or \(at your option\)$
-^any later version.$
-^ *$
-^GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the$
-^Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA$
-^02110-1301 USA.$
-^$
-^Linking this library statically or dynamically with other modules is$
-^making a combined work based on this library. Thus, the terms and$
-^conditions of the GNU General Public License cover the whole$
-^combination.$
-^$
-^As a special exception, the copyright holders of this library give you$
-^permission to link this library with independent modules to produce an$
-^executable, regardless of the license terms of these independent$
-^modules, and to copy and distribute the resulting executable under$
-^terms of your choice, provided that you also meet, for each linked$
-^independent module, the terms and conditions of the license of that$
-^module. An independent module is a module which is not derived from$
-^or based on this library. If you modify this library, you may extend$
-^this exception to your version of the library, but you are not$
-^obligated to do so. If you do not wish to do so, delete this$
-^exception statement from your version. \*/$
-^ *$
diff --git a/libjava/classpath/scripts/checkstyle-suppressions.xml b/libjava/classpath/scripts/checkstyle-suppressions.xml
deleted file mode 100644
index 68c620c..0000000
--- a/libjava/classpath/scripts/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE suppressions PUBLIC
- "-//Puppy Crawl//DTD Suppressions 1.0//EN"
- "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-<!--
-
-Changes to this file need to be discussed on classpath@gnu.org
-mailing list first and probably documented in the hacking guide.
-
--->
-<suppressions>
- <suppress checks="AvoidStarImport"
- files="gnu/java/awt/peer/gtk/GtkToolkit.java"
- lines="48,59"/>
- <suppress checks="IllegalInstantiation"
- files="java/lang/Boolean.java"
- lines="65,73"/>
- <suppress checks="IllegalInstantiation"
- files="java/util/logging/LogManager.java"
- lines="674"/>
- <suppress checks="RegexpHeader"
- files="javax/rmi/CORBA/SystemException.java"
- lines="1"/>
- <suppress checks="RegexpHeader"
- files="javax/rmi/CORBA/ObjectImpl.java"
- lines="1"/>
- <suppress checks="RegexpHeader"
- files="javax/rmi/ORB.java"
- lines="1"/>
- <suppress checks="RegexpHeader"
- files="javax/rmi/BAD_OPERATION.java"
- lines="1"/>
-</suppressions>
-
diff --git a/libjava/classpath/scripts/checkstyle.css b/libjava/classpath/scripts/checkstyle.css
deleted file mode 100644
index 9d1fd8b..0000000
--- a/libjava/classpath/scripts/checkstyle.css
+++ /dev/null
@@ -1,42 +0,0 @@
-body {
- color: black;
- font-family: sans-serif;
-}
-h1 {
- color: #990000;
- border-width: 1px;
- border-style: solid;
- border-color: black;
- padding: 0.2em;
- background-color: #cccccc;
- width: 100%;
-}
-h2 {
- color: #990000;
- border-width: 1px;
- border-style: solid;
- border-color: black;
- padding: 0.2em;
- background-color: #cccccc;
- width: 100%;
-}
-h3 {
- color: #990000;
- border-width: 1px;
- border-style: solid;
- border-color: black;
- padding: 0.2em;
- background-color: #cccccc;
- width: 100%;
-}
-table {
- width: 100%;
-}
-th {
- color: white;
- background-color: #999999;
- text-align: left;
-}
-td {
- background-color: #cccccc;
-}
diff --git a/libjava/classpath/scripts/checkstyle2html.xsl b/libjava/classpath/scripts/checkstyle2html.xsl
deleted file mode 100644
index 8963987..0000000
--- a/libjava/classpath/scripts/checkstyle2html.xsl
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0'?>
-<!-- XSL stylesheet to convert checkstyle XML to HTML -->
-<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-
- <!-- This tells the XSLT processor to emit HTML -->
- <xsl:output method='html'
- doctype-public='-//W3C//DTD HTML 4.01//EN'
- doctype-system='http://www.w3.org/TR/html4/strict.dtd'
- omit-xml-declaration='yes'/>
-
- <!-- Match the checkstyle root element -->
- <xsl:template match='checkstyle'>
- <html>
- <head>
- <title>Checkstyle results</title>
- <link rel='stylesheet' type='text/css' href='checkstyle.css' />
- </head>
- <body>
- <h1>Checkstyle results</h1>
- <div>The following document contains the results of
- <a href='http://checkstyle.sourceforge.net/'>Checkstyle</a>.</div>
-
- <h2>Summary</h2>
- <table summary='Summary'>
- <tr>
- <th>Files</th><th>Infos</th><th>Warnings</th><th>Errors</th>
- </tr>
- <tr>
- <td><xsl:value-of select='count(file)' /></td>
- <td><xsl:value-of select='count(file/error[@severity="info"])' /></td>
- <td><xsl:value-of select='count(file/error[@severity="warning"])' /></td>
- <td><xsl:value-of select='count(file/error[@severity="error"])' /></td>
- </tr>
- </table>
-
- <h2>Files</h2>
- <table summary='Files'>
- <tr>
- <th>File</th><th>I</th><th>W</th><th>E</th>
- </tr>
- <!-- Process file elements in file mode -->
- <xsl:apply-templates select='file' mode='file'>
- <xsl:sort select="@name"/>
- </xsl:apply-templates>
- </table>
-
- <!-- Process file elements in detail mode -->
- <xsl:apply-templates select='file' mode='detail'>
- <xsl:sort select="@name"/>
- </xsl:apply-templates>
- </body>
- </html>
- </xsl:template>
-
- <!-- Match a file element in file mode -->
- <xsl:template match='file' mode='file'>
- <xsl:if test='count(error) &gt; 0'>
- <tr>
- <td>
- <xsl:element name='a'>
- <xsl:attribute name='href'>
- #<xsl:value-of select='translate(string(@name),"/","__")' />
- </xsl:attribute>
- <xsl:value-of select='@name' />
- </xsl:element>
- </td>
- <td><xsl:value-of select='count(error[@severity="info"])' /></td>
- <td><xsl:value-of select='count(error[@severity="warning"])' /></td>
- <td><xsl:value-of select='count(error[@severity="error"])' /></td>
- </tr>
- </xsl:if>
- </xsl:template>
-
- <!-- Match a file element in detail mode-->
- <xsl:template match='file' mode='detail'>
- <xsl:if test='count(error) &gt; 0'>
- <h3>
- <xsl:element name='a'>
- <xsl:attribute name='name'>
- <xsl:value-of select='translate(string(@name),"/","__")' />
- </xsl:attribute>
- <xsl:value-of select='@name' />
- </xsl:element>
- </h3>
- <table summary='Errors'>
- <tr>
- <th>Error</th><th width="100px">Line</th>
- </tr>
- <xsl:apply-templates select='error' />
- </table>
- </xsl:if>
- </xsl:template>
-
- <!-- Match an error element -->
- <xsl:template match='error'>
- <tr>
- <td><xsl:value-of select='@message'/></td>
- <td><xsl:value-of select='@line' /></td>
- </tr>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/libjava/classpath/scripts/classpath-build b/libjava/classpath/scripts/classpath-build
deleted file mode 100755
index cd0e7d6..0000000
--- a/libjava/classpath/scripts/classpath-build
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-
-# cvs may timeout ...
-set -e
-
-export CVS_RSH=ssh
-
-CLASSPATH_CVSSRCDIR=$HOME/src/cvs/classpath
-CLASSPATH_SRCDIR=$HOME/src/classpath
-CLASSPATH_BUILDDIR=$HOME/src/classpath/build
-
-DATE=`date +"%Y%m%d"`
-OUTPUTDIR=$HOME/public_html/classpath/daily
-LOGFILE=$OUTPUTDIR/classpath-$DATE.log
-
-echo -n > $LOGFILE
-
-if [ -d $CLASSPATH_CVSSRCDIR ] ; then
- echo "update cvs source tree" >> $LOGFILE
- cd $CLASSPATH_CVSSRCDIR
- cvs -z 3 update >> $LOGFILE 2>&1
-fi
-
-if [ -d $CLASSPATH_SRCDIR ] ; then
-
- # delete old sources
- echo "delete old source tree" >> $LOGFILE
-
- # workaround for automake safety behaviour with umask
- chmod u+w -R $CLASSPATH_SRCDIR
-
- rm -rf $CLASSPATH_SRCDIR
-
-fi
-
-echo "copy cvs tree to source tree" >> $LOGFILE
-cp -a $CLASSPATH_CVSSRCDIR $CLASSPATH_SRCDIR
-cd $CLASSPATH_SRCDIR
-
-# patch version in configure.ac
-if [ -f configure.ac ] ; then
- mv configure.ac configure.ac.orig
- sed "s/, \[.*cvs\]/, [$DATE]/" < configure.ac.orig > configure.ac
-fi
-
-# generate autofriends stuff
-./autogen.sh >> $LOGFILE 2>&1
-
-# create build directory
-mkdir build
-cd build
-
-# configure and build classpath
-export LD_LIBRARY_PATH=/usr/local/lib
-../configure --prefix=$HOME/local/classpath --with-jikes=/usr/bin/jikes --enable-glibj=both --enable-jni --enable-gtk-peer --enable-regen-headers >> $LOGFILE 2>&1
-make >> $LOGFILE 2>&1
-make install >> $LOGFILE 2>&1
-
-make dist >> $LOGFILE 2>&1
-#make distcheck >> $LOGFILE 2>&1
-cp classpath-$DATE.tar.gz $OUTPUTDIR
-
-cd $OUTPUTDIR
-ln -sf classpath-$DATE.tar.gz LATEST-SNAPSHOT
-ln -sf classpath-$DATE.log LATEST-BUILDLOG
-
-exit 0
-
diff --git a/libjava/classpath/scripts/classpath-daily b/libjava/classpath/scripts/classpath-daily
deleted file mode 100755
index c740527..0000000
--- a/libjava/classpath/scripts/classpath-daily
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-DATE=`date +"%Y%m%d"`
-OUTPUTDIR=$HOME/public_html/classpath/daily
-LOGFILE=$OUTPUTDIR/classpath-$DATE.log
-FAILEDLOG=$OUTPUTDIR/classpath-failed-$DATE.log
-MAIL="konqueror@gmx.de"
-
-/home/mkoch/bin/classpath-build
-
-if test "$?" = "1" ; then
- tail --lines=100 $LOGFILE > $FAILEDLOG
-
- mail $MAIL -s "classpath daily snapshot $DATE FAILED" < $FAILEDLOG
-else
- mail $MAIL -s "classpath daily snapshot $DATE SUCCESSFUL" < /dev/null > /dev/null
-fi
diff --git a/libjava/classpath/scripts/eclipse-gnu.xml b/libjava/classpath/scripts/eclipse-gnu.xml
deleted file mode 100644
index 60a1082..0000000
--- a/libjava/classpath/scripts/eclipse-gnu.xml
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<profiles version="8">
-<profile name="GNU" version="8">
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="82"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="17"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="17"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line_shifted"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line_shifted"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-</profile>
-</profiles>
diff --git a/libjava/classpath/scripts/generate-locale-list.sh b/libjava/classpath/scripts/generate-locale-list.sh
index fb55c1c..3c6809d 100755
--- a/libjava/classpath/scripts/generate-locale-list.sh
+++ b/libjava/classpath/scripts/generate-locale-list.sh
@@ -40,18 +40,30 @@ echo "obligated to do so. If you do not wish to do so, delete this"
echo "exception statement from your version. */"
echo
echo
-echo "package java.util;"
+echo "package gnu.java.locale;"
echo
echo "// This file was automatically generated by scripts/generate-locale-list.sh"
echo
echo
echo "class LocaleData"
echo "{"
-echo " public static String[] localeNames ="
+echo " public static final String[] localeNames ="
echo " {"
( cd $CLASSPATH_SRCDIR/resource/gnu/java/locale ; ls LocaleInformation_*.properties ) | xargs -n 1 echo | sed -e 's/LocaleInformation_\(.*\)\.properties/\1/' |
while read locale ; do echo " \"$locale\"," ; done
echo " };"
+
+echo
+echo " public static final String[] collatorLocaleNames ="
+echo " {"
+
+( cd $CLASSPATH_SRCDIR/resource/gnu/java/locale; grep -l collation_rules LocaleInformation_*.properties) |
+ xargs -n 1 echo | sed -e 's/LocaleInformation_\(.*\)\.properties/\1/' |
+ sed -e '/^$/ d' |
+ while read locale ; do echo " \"$locale\"," ; done
+
+echo " };"
+
echo "}"
diff --git a/libjava/classpath/scripts/jalopy-gnu.xml b/libjava/classpath/scripts/jalopy-gnu.xml
deleted file mode 100644
index ad5c5ab..0000000
--- a/libjava/classpath/scripts/jalopy-gnu.xml
+++ /dev/null
@@ -1,378 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<jalopy>
- <general>
- <compliance>
- <version>14</version>
- </compliance>
- <style>
- <description>GNU Java Coding Convention</description>
- <name>GNU</name>
- </style>
- </general>
- <inspector>
- <enable>false</enable>
- <naming>
- <classes>
- <abstract>[A-Z][a-zA-Z0-9]+</abstract>
- <general>[A-Z][a-zA-Z0-9]+</general>
- </classes>
- <fields>
- <default>[a-z][\w]+</default>
- <defaultStatic>[a-z][\w]+</defaultStatic>
- <defaultStaticFinal>[a-zA-Z][\w]+</defaultStaticFinal>
- <private>[a-z][\w]+</private>
- <privateStatic>[a-z][\w]+</privateStatic>
- <privateStaticFinal>[a-zA-Z][\w]+</privateStaticFinal>
- <protected>[a-z][\w]+</protected>
- <protectedStatic>[a-z][\w]+</protectedStatic>
- <protectedStaticFinal>[a-zA-Z][\w]+</protectedStaticFinal>
- <public>[a-z][\w]+</public>
- <publicStatic>[a-z][\w]+</publicStatic>
- <publicStaticFinal>[a-zA-Z][\w]+</publicStaticFinal>
- </fields>
- <interfaces>[A-Z][a-zA-Z0-9]+</interfaces>
- <labels>\w+</labels>
- <methods>
- <default>[a-z][\w]+</default>
- <defaultStatic>[a-z][\w]+</defaultStatic>
- <defaultStaticFinal>[a-z][\w]+</defaultStaticFinal>
- <private>[a-z][\w]+</private>
- <privateStatic>[a-z][\w]+</privateStatic>
- <privateStaticFinal>[a-z][\w]+</privateStaticFinal>
- <protected>[a-z][\w]+</protected>
- <protectedStatic>[a-z][\w]+</protectedStatic>
- <protectedStaticFinal>[a-z][\w]+</protectedStaticFinal>
- <public>[a-z][\w]+</public>
- <publicStatic>[a-z][\w]+</publicStatic>
- <publicStaticFinal>[a-z][\w]+</publicStaticFinal>
- </methods>
- <packages>[a-z]+(?:\.[a-z]+)*</packages>
- <parameters>
- <default>[a-z][\w]+</default>
- <final>[a-z][\w]+</final>
- </parameters>
- <variables>[a-z][\w]*</variables>
- </naming>
- <tips>
- <adhereToNamingConvention>false</adhereToNamingConvention>
- <alwaysOverrideEquals>false</alwaysOverrideEquals>
- <alwaysOverrideHashCode>false</alwaysOverrideHashCode>
- <avoidThreadGroups>false</avoidThreadGroups>
- <declareCollectionComment>false</declareCollectionComment>
- <dontIgnoreExceptions>false</dontIgnoreExceptions>
- <dontSubstituteObjectEquals>false</dontSubstituteObjectEquals>
- <neverDeclareException>false</neverDeclareException>
- <neverDeclareThrowable>false</neverDeclareThrowable>
- <neverInvokeWaitOutsideLoop>false</neverInvokeWaitOutsideLoop>
- <neverReturnZeroArrays>false</neverReturnZeroArrays>
- <neverUseEmptyFinally>false</neverUseEmptyFinally>
- <obeyContractEquals>false</obeyContractEquals>
- <overrideToString>false</overrideToString>
- <referToObjectsByInterface>false</referToObjectsByInterface>
- <replaceStructureWithClass>false</replaceStructureWithClass>
- <stringLiterallI18n>false</stringLiterallI18n>
- <useInterfaceOnlyForTypes>false</useInterfaceOnlyForTypes>
- <wrongCollectionComment>false</wrongCollectionComment>
- </tips>
- </inspector>
- <internal>
- <version>6</version>
- </internal>
- <messages>
- <priority>
- <general>30000</general>
- <parser>30000</parser>
- <parserJavadoc>30000</parserJavadoc>
- <printer>30000</printer>
- <printerJavadoc>30000</printerJavadoc>
- <transform>30000</transform>
- </priority>
- <showErrorStackTrace>true</showErrorStackTrace>
- </messages>
- <misc>
- <threadCount>1</threadCount>
- </misc>
- <printer>
- <alignment>
- <methodCallChain>true</methodCallChain>
- <parameterMethodDeclaration>false</parameterMethodDeclaration>
- <ternaryOperator>true</ternaryOperator>
- <variableAssignment>false</variableAssignment>
- <variableIdentifier>false</variableIdentifier>
- </alignment>
- <backup>
- <directory>bak</directory>
- <level>0</level>
- </backup>
- <blanklines>
- <after>
- <block>0</block>
- <braceLeft>0</braceLeft>
- <class>1</class>
- <declaration>0</declaration>
- <footer>1</footer>
- <header>1</header>
- <interface>1</interface>
- <lastImport>1</lastImport>
- <method>1</method>
- <package>1</package>
- </after>
- <before>
- <block>0</block>
- <braceRight>0</braceRight>
- <caseBlock>0</caseBlock>
- <comment>
- <javadoc>1</javadoc>
- <multiline>0</multiline>
- <singleline>0</singleline>
- </comment>
- <controlStatement>0</controlStatement>
- <declaration>0</declaration>
- <footer>0</footer>
- <header>0</header>
- <package>2</package>
- </before>
- <keepUpTo>1</keepUpTo>
- </blanklines>
- <braces>
- <empty>
- <cuddle>false</cuddle>
- <insertStatement>false</insertStatement>
- </empty>
- <insert>
- <dowhile>false</dowhile>
- <for>false</for>
- <ifelse>false</ifelse>
- <while>false</while>
- </insert>
- <remove>
- <block>true</block>
- <dowhile>true</dowhile>
- <for>true</for>
- <ifelse>true</ifelse>
- <while>true</while>
- </remove>
- <treatDifferent>
- <methodClass>true</methodClass>
- <methodClassIfWrapped>false</methodClassIfWrapped>
- </treatDifferent>
- </braces>
- <chunks>
- <blanklines>true</blanklines>
- <comments>true</comments>
- </chunks>
- <comments>
- <format>
- <multiline>false</multiline>
- </format>
- <javadoc>
- <check>
- <innerclass>false</innerclass>
- <tags>false</tags>
- <throwsTags>false</throwsTags>
- </check>
- <fieldsShort>false</fieldsShort>
- <generate>
- <class>0</class>
- <constructor>0</constructor>
- <field>0</field>
- <method>0</method>
- </generate>
- <parseComments>false</parseComments>
- <tags>
- <in-line />
- <standard />
- </tags>
- <templates>
- <method>
- <bottom> */</bottom>
- <exception> * @throws $exceptionType$ DOCUMENT ME!</exception>
- <param> * @param $paramType$ DOCUMENT ME!</param>
- <return> * @return DOCUMENT ME!</return>
- <top>/**| * DOCUMENT ME!</top>
- </method>
- </templates>
- </javadoc>
- <remove>
- <javadoc>false</javadoc>
- <multiline>false</multiline>
- <singleline>false</singleline>
- </remove>
- <separator>
- <fillCharacter>-</fillCharacter>
- <insert>false</insert>
- <insertRecursive>false</insertRecursive>
- <text>
- <class>Inner Classes</class>
- <constructor>Constructors</constructor>
- <field>Instance fields</field>
- <initializer>Instance initializers</initializer>
- <interface>Inner Interfaces</interface>
- <method>Methods</method>
- <static>Static fields/initializers</static>
- </text>
- </separator>
- </comments>
- <environment />
- <footer>
- <keys />
- <smartMode>0</smartMode>
- <use>false</use>
- </footer>
- <header>
- <keys />
- <smartMode>0</smartMode>
- <use>false</use>
- </header>
- <history>
- <policy>disabled</policy>
- </history>
- <imports>
- <grouping>
- <defaultDepth>1</defaultDepth>
- <packages>*:0|gnu:1|java:1|javax:1|org:1</packages>
- </grouping>
- <policy>disabled</policy>
- <sort>true</sort>
- </imports>
- <indentation>
- <caseFromSwitch>true</caseFromSwitch>
- <continuation>
- <block>true</block>
- <operator>true</operator>
- </continuation>
- <firstColumnComments>false</firstColumnComments>
- <label>true</label>
- <policy>
- <deep>true</deep>
- </policy>
- <sizes>
- <braceCuddled>1</braceCuddled>
- <braceLeft>2</braceLeft>
- <braceRight>2</braceRight>
- <braceRightAfter>0</braceRightAfter>
- <continuation>0</continuation>
- <deep>55</deep>
- <extends>-1</extends>
- <general>2</general>
- <implements>-1</implements>
- <leading>0</leading>
- <tabs>8</tabs>
- <throws>2</throws>
- <trailingComment>1</trailingComment>
- </sizes>
- <tabs>
- <enable>true</enable>
- <onlyLeading>true</onlyLeading>
- </tabs>
- </indentation>
- <misc>
- <arrayBracketsAfterIdent>false</arrayBracketsAfterIdent>
- <forceFormatting>false</forceFormatting>
- <insertExpressionParentheses>false</insertExpressionParentheses>
- <insertLoggingConditional>false</insertLoggingConditional>
- <insertTrailingNewline>true</insertTrailingNewline>
- <insertUID>false</insertUID>
- </misc>
- <sorting>
- <declaration>
- <class>false</class>
- <constructor>false</constructor>
- <enable>false</enable>
- <interface>false</interface>
- <method>false</method>
- <order>static|field|initializer|constructor|method|interface|class</order>
- <variable>false</variable>
- </declaration>
- <modifier>
- <enable>true</enable>
- <order>public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp</order>
- </modifier>
- </sorting>
- <whitespace>
- <after>
- <comma>true</comma>
- <semicolon>true</semicolon>
- <typeCast>true</typeCast>
- </after>
- <before>
- <braces>true</braces>
- <brackets>false</brackets>
- <bracketsTypes>false</bracketsTypes>
- <caseColon>false</caseColon>
- <operator>
- <not>true</not>
- </operator>
- <parentheses>
- <methodCall>false</methodCall>
- <methodDeclaration>false</methodDeclaration>
- <statement>true</statement>
- </parentheses>
- </before>
- <padding>
- <braces>true</braces>
- <brackets>false</brackets>
- <operator>
- <assignment>true</assignment>
- <bitwise>true</bitwise>
- <logical>true</logical>
- <mathematical>true</mathematical>
- <relational>true</relational>
- <shift>true</shift>
- </operator>
- <parenthesis>false</parenthesis>
- <typeCast>false</typeCast>
- </padding>
- </whitespace>
- <wrapping>
- <always>
- <after>
- <arrayElement>0</arrayElement>
- <braceRight>true</braceRight>
- <extendsTypes>false</extendsTypes>
- <implementsTypes>false</implementsTypes>
- <label>true</label>
- <methodCallChained>false</methodCallChained>
- <ternaryOperator>
- <first>false</first>
- <second>false</second>
- </ternaryOperator>
- <throwsTypes>false</throwsTypes>
- </after>
- <before>
- <braceLeft>true</braceLeft>
- <extends>false</extends>
- <implements>false</implements>
- <throws>false</throws>
- </before>
- <parameter>
- <methodCall>false</methodCall>
- <methodCallNested>false</methodCallNested>
- <methodDeclaration>false</methodDeclaration>
- </parameter>
- </always>
- <general>
- <beforeOperator>true</beforeOperator>
- <enable>true</enable>
- <lineLength>79</lineLength>
- </general>
- <ondemand>
- <after>
- <assignment>false</assignment>
- <leftParenthesis>false</leftParenthesis>
- <parameter>false</parameter>
- <types>
- <extends>false</extends>
- <implements>false</implements>
- <throws>false</throws>
- </types>
- </after>
- <before>
- <rightParenthesis>false</rightParenthesis>
- </before>
- <groupingParentheses>false</groupingParentheses>
- </ondemand>
- </wrapping>
- </printer>
-</jalopy>
-
diff --git a/libjava/classpath/scripts/japi b/libjava/classpath/scripts/japi
deleted file mode 100755
index 52bcbc4..0000000
--- a/libjava/classpath/scripts/japi
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/bin/sh
-
-CLASSPATH_CVS=~/japi/classpath
-JAPIZE_DIR=~/japitools-0.9
-FTPROOT=~alpha/pub/gnu/classpath/nightly/tests
-LOG=/tmp/japi.log
-export PATH=${PATH}:/usr/java/j2sdk1.4.1/bin
-
-rm -f /tmp/japi.log > /dev/null 2>&1
-
-classpath_checkout ()
-{
- if [ ! -d "${CLASSPATH_CVS}" ]; then
- mkdir --parents ${CLASSPATH_CVS}
- local dir=`dirname "${CLASSPATH_CVS}"`
- cd "${dir}"
- cvs -z3 -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/classpath co classpath >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out classpath"
- exit 1
- fi
- fi
-}
-
-classpath_update ()
-{
- cd "${CLASSPATH_CVS}" && cvs update -d -P . >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out classpath"
- exit 1
- fi
-}
-
-classpath_clean ()
-{
- if [ -d "${CLASSPATH_CVS}/build" ]; then
- rm -rf "${CLASSPATH_CVS}/build"
- fi
-# if [ -d "${CLASSPATH_PREFIX}" ]; then
-# rm -rf "${CLASSPATH_PREFIX}"
-# fi
- mkdir --parents "${CLASSPATH_CVS}/build"
-# mkdir --parents "${CLASSPATH_PREFIX}"
-}
-
-classpath_configure ()
-{
- cd "${CLASSPATH_CVS}"
- aclocal >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running aclocal"
- exit 1
- fi
- autoheader >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running autoheader"
- exit 1
- fi
- automake >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running automake"
- exit 1
- fi
- autoconf >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running autoconf"
- exit 1
- fi
- cd "${CLASSPATH_CVS}/build" && ../configure --with-gcj >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error configuring"
- exit 1
- fi
-}
-
-classpath_build ()
-{
- cd "${CLASSPATH_CVS}/build" && make >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during make"
- exit 1
- fi
-}
-
-
-japize_classpath ()
-{
- cd "${JAPIZE_DIR}/bin" && ./japize as classpath packages "${CLASSPATH_CVS}/build/lib/glibj.zip" +java +javax +org -java.awt.dnd.peer -java.awt.peer -org.apache -org.w3c.dom.css -org.w3c.dom.events -org.w3c.dom.html -org.w3c.dom.stylesheets -org.w3c.dom.traversal -org.w3c.dom.views -java.text.resources >> /tmp/japi.log 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running japize"
- exit 1
- fi
- cp -f "${JAPIZE_DIR}/bin/classpath.japi.gz" /tmp
-}
-
-japicompat_classpath ()
-{
- today=`date`
- echo "${today}" > /tmp/classpath-jdk11-compare.txt
- cd "${JAPIZE_DIR}/bin" && ./japicompat -q jdk11.japi.gz classpath.japi.gz >> /tmp/classpath-jdk11-compare.txt
- if [ $? -ne 0 ]; then
- echo "Error running japicompat"
- exit 1
- fi
- echo "${today}" > /tmp/classpath-jdk13-compare.txt
- cd "${JAPIZE_DIR}/bin" && ./japicompat -q jdk13.japi.gz classpath.japi.gz >> /tmp/classpath-jdk13-compare.txt
- if [ $? -ne 0 ]; then
- echo "Error running japicompat"
- exit 1
- fi
-}
-
-#--------------------------------------------------------------------
-# Update Classpath CVS
-#--------------------------------------------------------------------
-classpath_checkout
-classpath_update
-
-#--------------------------------------------------------------------
-# Build Classpath with GCJ 3.2
-#--------------------------------------------------------------------
-classpath_clean
-classpath_configure
-classpath_build
-
-#--------------------------------------------------------------------
-# Run japize on glibj.zip
-#--------------------------------------------------------------------
-japize_classpath
-
-#--------------------------------------------------------------------
-# Run japicompat against jdk13
-#--------------------------------------------------------------------
-japicompat_classpath
-
diff --git a/libjava/classpath/scripts/kissme-mauve b/libjava/classpath/scripts/kissme-mauve
deleted file mode 100755
index 8a6ee22..0000000
--- a/libjava/classpath/scripts/kissme-mauve
+++ /dev/null
@@ -1,346 +0,0 @@
-#!/bin/sh
-
-CLASSPATH_CVS=~/mauve/classpath
-CLASSPATH_PREFIX=~/mauve/root/classpath
-MAUVE_CVS=~/mauve/mauve
-KISSME_CVS=~/mauve/kissme
-KISSME_PREFIX=~/mauve/root/kissme
-KISSME_BIN=~/mauve/kissme/useful_scripts/kissme
-LOG=/tmp/mauve.log
-RESULTS=/tmp/kissme-mauve.txt
-REPORT=/tmp/kissme-mauve-report.txt
-TIMEOUT=30
-
-rm -f ${LOG} > /dev/null 2>&1
-rm -f ${RESULTS} > /dev/null 2>&1
-today=`date`
-echo "${today}" > ${LOG}
-touch ${RESULTS}
-
-
-_aclocal ()
-{
- aclocal "$@" >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running aclocal"
- exit 1
- fi
-}
-
-_autoheader ()
-{
- autoheader "$@" >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running autoheader"
- exit 1
- fi
-}
-
-_automake ()
-{
- automake "$@" >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running automake"
- exit 1
- fi
-}
-
-_autoconf ()
-{
- autoconf "$@" >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error running autoconf"
- exit 1
- fi
-}
-
-classpath_checkout ()
-{
- if [ ! -d "${CLASSPATH_CVS}" ]; then
- mkdir --parents ${CLASSPATH_CVS}
- local dir=`dirname "${CLASSPATH_CVS}"`
- cd "${dir}"
- cvs -z3 -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/classpath co classpath >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out classpath"
- exit 1
- fi
- fi
-}
-
-classpath_update ()
-{
- cd "${CLASSPATH_CVS}" && cvs update -d -P . >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out classpath"
- exit 1
- fi
-}
-
-classpath_clean ()
-{
- if [ -d "${CLASSPATH_CVS}/build" ]; then
- rm -rf "${CLASSPATH_CVS}/build"
- fi
- if [ -d "${CLASSPATH_PREFIX}" ]; then
- rm -rf "${CLASSPATH_PREFIX}"
- fi
- mkdir --parents "${CLASSPATH_CVS}/build"
- mkdir --parents "${CLASSPATH_PREFIX}"
-}
-
-classpath_configure ()
-{
- cd "${CLASSPATH_CVS}"
-
- _aclocal
- _autoheader
- _automake
- _autoconf
-
- cd "${CLASSPATH_CVS}/build" && ../configure --prefix=${CLASSPATH_PREFIX} --with-gcj --enable-jni >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error configuring"
- exit 1
- fi
-}
-
-classpath_build ()
-{
- cd "${CLASSPATH_CVS}/build" && make >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during make"
- exit 1
- fi
-}
-
-classpath_install ()
-{
- cd "${CLASSPATH_CVS}/build" && make install >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during make"
- exit 1
- fi
-}
-
-kissme_checkout ()
-{
- if [ ! -d "${KISSME_CVS}" ]; then
- mkdir --parents ${KISSME_CVS}
- local dir=`dirname "${KISSME_CVS}"`
- cd "${KISSME_CVS}"
- cvs -z3 -d :pserver:anonymous@cvs.kissme.sourceforge.net:/cvsroot/kissme co . >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out kissme"
- exit 1
- fi
- fi
-}
-
-kissme_update ()
-{
- cd "${KISSME_CVS}" && cvs update -d -P . >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out kissme"
- exit 1
- fi
-}
-
-kissme_clean ()
-{
- if [ -d "${KISSME_CVS}/build" ]; then
- rm -rf "${KISSME_CVS}/build"
- fi
- if [ -d "${KISSME_PREFIX}" ]; then
- rm -rf "${KISSME_PREFIX}"
- fi
- mkdir --parents "${KISSME_CVS}/build"
- mkdir --parents "${KISSME_PREFIX}"
-}
-
-kissme_configure ()
-{
- cd "${KISSME_CVS}"
-
- _aclocal
- _autoheader
- _automake -a
- _autoconf
-
- cd "${KISSME_CVS}" && ./configure --prefix=${KISSME_PREFIX} \
- --enable-use-zips --with-gnu-classpath=${CLASSPATH_CVS} \
- --with-gnu-classpath-build=${CLASSPATH_CVS}/build \
- --with-classpath-install-dir=${CLASSPATH_PREFIX} >> ${LOG} 2>&1
-
- if [ $? -ne 0 ]; then
- echo "Error configuring"
- exit 1
- fi
-}
-
-kissme_build ()
-{
- cd "${KISSME_CVS}" && make >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during make"
- exit 1
- fi
-}
-
-kissme_install ()
-{
- cd "${KISSME_CVS}" && make install >> ${LOG} 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during make"
- exit 1
- fi
-}
-
-mauve_checkout ()
-{
- if [ ! -d "${MAUVE_CVS}" ]; then
- mkdir --parents ${MAUVE_CVS}
- local dir=`dirname "${MAUVE_CVS}"`
- cd "${dir}"
- cvs -z3 -d :pserver:anoncvs@sources.redhat.com:/cvs/mauve co mauve >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out mauve"
- exit 1
- fi
- fi
-}
-
-mauve_update ()
-{
- cd "${MAUVE_CVS}" && cvs update -d -P . >> ${LOG} 2>/dev/null
- if [ $? -ne 0 ]; then
- echo "Error checking out mauve"
- exit 1
- fi
-}
-
-kissme_mauve ()
-{
- export JAVAC="jikes -bootclasspath ${CLASSPATH_PREFIX}/share/classpath/glibj.zip"
- export JAVA="${KISSME_BIN}"
-
-# if [ -f "${KISSME_CVS}/useful_scripts/mauve-kissme" ]; then
-# cp -f "${KISSME_CVS}/useful_scripts/mauve-kissme" "${MAUVE_CVS}"
-# fi
-
- if [ -f "${CLASSPATH_CVS}/mauve-classpath" ]; then
- cp -f "${CLASSPATH_CVS}/mauve-classpath" "${MAUVE_CVS}"
- fi
-
- cd "${MAUVE_CVS}"
- if [ $? -ne 0 ]; then
- echo "Error configuring mauve"
- exit 1
- fi
-
- _aclocal
- _automake
- _autoconf
-
- ./configure >> "${LOG}" 2>&1
- if [ $? -ne 0 ]; then
- echo "Error configuring mauve"
- exit 1
- fi
-
- # create class choices from key file
- if [ -f classes ]; then
- rm -f classes 2>/dev/null
- fi
- if [ -f choices ]; then
- rm -f choices 2>/dev/null
- fi
- /bin/sh choose "${MAUVE_CVS}" classpath
- if [ $? -ne 0 ]; then
- echo "Error during choose for mauve"
- exit 1
- fi
-
- # compile classes
- compile=`cat "${MAUVE_CVS}/classes" | tr '.' '/' | awk '{print $1".java"}' | xargs`
- ${JAVAC} -classpath "${MAUVE_CVS}" -d "${MAUVE_CVS}" ${compile} >> "${LOG}" 2>&1
- if [ $? -ne 0 ]; then
- echo "Error during compile for mauve"
- exit 1
- fi
-
- set -m
- for i in `cat "${MAUVE_CVS}/classes"`; do
- echo "$i" | ${JAVA} gnu.testlet.SimpleTestHarness -verbose >> "${RESULTS}" 2>&1 &
-
- vm_pid=$!
- sleep ${TIMEOUT} && kill -9 $vm_pid > /dev/null 2>&1 && echo "FAIL: $i execution aborted" >> "${RESULTS}" &
- kill_pid=$!
- fg %- 2>/dev/null
- kill -9 $kill_pid >/dev/null 2>&1 # && echo Test did not time out
- done
-}
-
-mauve_summary ()
-{
- if [ ! -f "${RESULTS}" ]; then
- echo "Error creating summary"
- exit 1
- fi
-
- pass_cnt=`grep PASS "${RESULTS}" | wc -l`
- fail_cnt=`grep FAIL "${RESULTS}" | wc -l`
- total_cnt=`expr $pass_cnt + $fail_cnt`
-
- today=`date`
- echo "Mauve test results for Kissme" > "${REPORT}"
- echo "Report generated on ${today}" >> "${REPORT}"
- echo "" >> "${REPORT}"
- echo "${fail_cnt} of ${total_cnt} tests failed." >> "${REPORT}"
- echo "" >> "${REPORT}"
- cat "${RESULTS}" >> "${REPORT}"
-}
-
-#--------------------------------------------------------------------
-# Update Classpath CVS
-#--------------------------------------------------------------------
-classpath_checkout
-classpath_update
-
-#--------------------------------------------------------------------
-# Build Classpath with GCJ 3.2
-#--------------------------------------------------------------------
-classpath_clean
-classpath_configure
-classpath_build
-classpath_install
-
-#--------------------------------------------------------------------
-# Update Kissme CVS
-#--------------------------------------------------------------------
-kissme_checkout
-kissme_update
-
-#--------------------------------------------------------------------
-# Build Kissme
-#--------------------------------------------------------------------
-kissme_clean
-kissme_configure
-kissme_build
-#kissme_install
-
-#--------------------------------------------------------------------
-# Update Mauve CVS
-#--------------------------------------------------------------------
-mauve_checkout
-mauve_update
-
-#--------------------------------------------------------------------
-# Execute Mauve
-#--------------------------------------------------------------------
-kissme_mauve
-
-#--------------------------------------------------------------------
-# Create report
-#--------------------------------------------------------------------
-mauve_summary
diff --git a/libjava/classpath/scripts/loc b/libjava/classpath/scripts/loc
deleted file mode 100755
index dc2f327..0000000
--- a/libjava/classpath/scripts/loc
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# loc Find a class or package
-#
-# Usage: loc [-l] class-pattern [dirname]
-
-# -l Use system locate command instead of find. In that case, loc
-# will ignore any directory to be searched.
-
-# Example:
-#
-# $ loc -l org.objectweb.jonas.common.JProp
-# /var/lib/jonas/demoserver/ejbjars/autoload/mejb.jar
-# /var/lib/jonas/lib/common/ow_jonas_bootstrap.jar
-# /var/lib/jonas/eclipseserver/ejbjars/autoload/mejb.jar
-# /var/lib/jonas/ejbjars/autoload/mejb.jar
-# /var/cache/jonas/work/ejbjars/jonas/mejb_2005.09.15-17.01.52.jar
-# /usr/src/redhat/BUILD/jonas-4.3.3/jonas/classes/common/org/objectweb/jonas/common/JProp.class
-
-
-MODE=$1
-if test "$MODE" == "-l"; then
- COMMAND='(locate \*.jar ; locate \*.war)'
- shift
-else
- COMMAND='(find "$FOO" -name \*.jar -follow ; find "$FOO" -name \*.war -follow)'
-fi
-
-FOO=$2
-if test "x$FOO" == "x"; then
- FOO=/usr/share/java
-fi
-
-eval "$COMMAND" 2>/dev/null | while read i; do
- if (fastjar tf $i 2>/dev/null | grep $1) > /dev/null 2>&1 ; then
- echo $i
- fi
-done
-
-if test "$MODE" != "-l"; then
- find "$FOO" -name '*.class' 2>/dev/null | grep $1
-else
- locate \*.class | grep $1
-fi
diff --git a/libjava/classpath/scripts/math_symbols b/libjava/classpath/scripts/math_symbols
deleted file mode 100644
index e676a51..0000000
--- a/libjava/classpath/scripts/math_symbols
+++ /dev/null
@@ -1,69 +0,0 @@
-acos
-asin
-atan
-atan2
-cos
-sin
-tan
-cosh
-sinh
-tanh
-exp
-frexp
-ldexp
-expm1
-log
-log10
-log1p
-modf
-pow
-sqrt
-ceil
-fabs
-floor
-fmod
-erf
-erfc
-gamma
-hypot
-finite
-j0
-j1
-jn
-lgamma
-y0
-y1
-yn
-acosh
-asinh
-cbrt
-logb
-nextafter
-remainder
-logb
-scalb
-significand
-logbf
-scalbf
-significandf
-copysign
-ilogb
-rint
-rintf
-scalbn
-__ieee754_sqrt
-__ieee754_asin
-__ieee754_asin
-__ieee754_atan2
-__ieee754_exp
-__ieee754_fmod
-__ieee754_log
-__ieee754_pow
-__ieee754_rem_pio2
-__ieee754_remainder
-__ieee754_scalb
-__ieee754_acos
-__kernel_cos
-__kernel_sin
-__kernel_tan
-__kernel_rem_pio2
diff --git a/libjava/classpath/scripts/patches.pl b/libjava/classpath/scripts/patches.pl
deleted file mode 100755
index 57f134d..0000000
--- a/libjava/classpath/scripts/patches.pl
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/perl -w
-# Purpose is to move patches from upload directory to
-# public patches directory. Any file not matching the correct
-# pattern is deleted. Any patch file without a README and the
-# file was last modified more than 120 minutes ago is deleted.
-# Any README file without a patch file which was last modified
-# more than 120 minutes ago is deleted.
-#
-# notes to self: as long as this runs as root do not worry
-# about quota problems or disk space
-
-use strict;
-
-my ($upload_dir) = "/home/ftp/classpath/incoming";
-my ($public_dir) = "/home/ftp/classpath/pub/patches";
-my ($user) = "classpath";
-my ($group) = "classpath";
-my ($mode_dir) = "775";
-my ($mode_file) = "664";
-my (@patches) = ();
-
-use vars qw($upload_dir $public_dir @patches $user $group
- $mode_dir $mode_file);
-
-# main
-{
- @patches = &getPatches();
- &movePatches(@patches);
-}
-
-#---------------------------------------------------------------
-# Purpose: To remove files not matching the correct pattern.
-# To remove README files without patches (last modified greater
-# than 2 hours). To remove patches without README files (last
-# modified greater than 2 hours).
-#---------------------------------------------------------------
-sub getPatches
-{
- my (@patches) = ();
- my (@entries) = ();
- my (%maybe) = ();
- my ($entry, $debug, $prefix, $junk, $file, $patch, $readme) = "";
- my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime,
- $mtime, $ctime, $blksize, $blocks) = "";
-
- $debug = 1;
-
- opendir(INCOMING, "$upload_dir") || die "could not open $upload_dir\n";
- @entries = grep( !/^\.\S+/, readdir(INCOMING)); # no .*
- closedir(INCOMING);
- foreach $entry (sort @entries)
- {
- if (($entry eq ".") || ($entry eq "..")) { next; }
- if (-d "$upload_dir/$entry")
- {
- print "Directory: $upload_dir/$entry/\n";
- }
- elsif (-e "$upload_dir/$entry")
- {
- if ($entry eq ".message") { next; }
- if ($entry eq "README") { next; }
- if ($entry !~ /^\w+-\d\d\d\d\d\d-\d+\.patch\.(gz|README)$/)
- {
- print "REGEX FAILED: $entry\n";
- unlink("$upload_dir/$entry");
- }
- else
- {
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
- $ctime,$blksize,$blocks) = stat("$upload_dir/$entry");
- if ($size > 512000)
- {
- print "LARGE PATCH: $entry\n";
- unlink("$upload_dir/$entry");
- }
- else
- {
- ($prefix,$junk) = split(/(\.gz|\.README)/, $entry, 2);
- $maybe{$prefix} += 1;
- }
- }
- }
- }
-
- foreach $entry (keys(%maybe))
- {
- if ($maybe{$entry} == 2)
- {
- $patch = "$entry.gz";
- $readme = "$entry.README";
-
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
- $ctime,$blksize,$blocks) = stat($patch);
- if (time-$mtime > 900)
- {
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
- $ctime,$blksize,$blocks) = stat($readme);
- if (time-$mtime > 900)
- {
- $patches[$#patches+1] = $entry;
- }
- }
- }
- else
- {
- if (-e "$upload_dir/$entry.gz")
- {
- unlink("$upload_dir/$entry.gz");
- print "STALE PATCH: $entry.gz\n";
- }
- elsif (-e "$upload_dir/$entry.README")
- {
- unlink("$upload_dir/$entry.README");
- print "STALE README: $entry.README\n";
- }
- }
- }
- return (@patches);
-}
-
-#---------------------------------------------------------------
-# Purpose: To move the patches to the proper directory and set
-# the permissions correctly.
-#---------------------------------------------------------------
-sub movePatches
-{
- my (@patches) = @_;
- my ($patch) = "";
- my ($fail) = 0;
-
- if (!(-d "$public_dir"))
- {
- system("mkdir -p $public_dir");
- system("chown $user.$group $public_dir");
- system("chmod $mode_dir $public_dir");
- }
- foreach $patch (@patches)
- {
- if (-e "$public_dir/$patch.gz")
- {
- print "Patch exists: $public_dir/$patch.gz\n";
- $fail = 1;
- }
- if (-e "$public_dir/$patch.README")
- {
- print "README exists: $public_dir/$patch.README\n";
- $fail = 1;
- }
- if ($fail == 0)
- {
- system("mv $upload_dir/$patch.gz $public_dir/$patch.gz");
- system("mv $upload_dir/$patch.README $public_dir/$patch.README");
- system("chown $user.$group $public_dir/*");
- system("chmod $mode_file $public_dir/*");
- open(MAIL, "|mail -s \"Classpath: $patch uploaded\" core\@classpath.org") || die "could not open mail\n";
- print MAIL "GNU Classpath FTP Maintenance\n";
- print MAIL "\n";
- print MAIL "Added Files:\n";
- print MAIL "ftp://ftp.classpath.org/pub/patches/$patch.gz\n";
- print MAIL "ftp://ftp.classpath.org/pub/patches/$patch.README\n\n";
- close(MAIL);
- }
- }
-}
diff --git a/libjava/classpath/scripts/timezones.pl b/libjava/classpath/scripts/timezones.pl
deleted file mode 100755
index 142ea4b..0000000
--- a/libjava/classpath/scripts/timezones.pl
+++ /dev/null
@@ -1,366 +0,0 @@
-#!/usr/bin/perl -w
-# Create the timezone tables for java/util/TimeZone from the
-# standard timezone sources by Arthur David Olson (as used by glibc)
-#
-# This needs the files from the package tzdata2000h which may be found
-# at ftp://ftp.cs.mu.oz.au/pub/.
-
-$TIMEZONEDIR = "tzdata";
-@TIMEZONEFILES = ("africa", "antarctica", "asia", "australasia",
- "europe", "northamerica", "pacificnew", "southamerica",
- "../tzabbrevs");
-
-# rules hash table:
-# key is a rule name
-# value is either "-" (no daylight savings) or a list of three elements:
-# $value[0] = end savings rule (list containing MONTH, DAY and TIME)
-# $value[1] = start savings rule (ditto)
-# $value[2] = daylight offset in milliseconds
-my %rules = ("-" => "-");
-
-# timezones list, list of pairs:
-# $timezones[$i][0] is a timezone name
-# $timezones[$i][1] = raw offset in milliseconds
-# $timezones[$i][2] = rule in the same format as the value of
-# the rules table, but TIME in milliseconds
-# $timezones[$i][3] = list of timezone names with this rule (aliases)
-my @timezones = ( [ "GMT", 0, "-", [ "GMT", "UTC" ] ]);
-
-
-# parse the offset of form +/-hh:mm:ss (:ss is optional) and return it
-# in milliseconds against UTC
-sub parseOffset($) {
- my $offset = $_[0];
- $offset =~ /^([+-]?)(\d+)(:(\d+)(:(\d+))?)?$/
- or die "Can't parse offset $offset";
- my $seconds = $2 * 3600;
- $seconds += $4 * 60 if ($3);
- $seconds += $6 if ($3 && $5);
- if ($1 eq "-") {
- $seconds = - $seconds;
- }
- return $seconds * 1000;
-}
-
-# parse the time of form +/-hh:mm:ss[swguz] (:ss is optional) and return it
-# in milliseconds since midnight in local wall time
- my $timezonename;
-sub parseTime($$$) {
- my ($rawoffset, $stdoffset, $time) = @_;
- $time =~ /^([+-]?)(\d+):(\d+)(:(\d+))?([swguz]?)$/
- or die "Can't parse time $time";
- my ($hour, $min) = ($2, $3);
- my $sec = ($4) ? $5 : 0;
- my $millis = ((($hour * 60) + $min) * 60 + $sec) * 1000;
- if ($1 eq "-") {
- $millis = -$millis;
- }
- # Normally millis is in wall time, adjust for utc and standard time.
- if ($6 =~ /[guz]/) {
- $millis += $rawoffset + $stdoffset;
- } elsif ($6 =~ /s/) {
- $millis += $stdoffset;
- }
- return $millis;
-}
-
-my %monthnames =
- ( "Jan" => "1",
- "Feb" => "2",
- "Mar" => "3",
- "Apr" => "4",
- "May" => "5",
- "Jun" => "6",
- "Jul" => "7",
- "Aug" => "8",
- "Sep" => "9",
- "Oct" => "10",
- "Nov" => "11",
- "Dec" => "12" );
-sub parseMonth($) {
- my $month = $monthnames{"$_[0]"} or die "Unknown month $_[0]";
- return $month;
-}
-
-my %weekdaynames =
- ( "Sun" => "7",
- "Mon" => "1",
- "Tue" => "2",
- "Wed" => "3",
- "Thu" => "4",
- "Fri" => "5",
- "Sat" => "6" );
-sub parseWeekday($) {
- my $weekday = $weekdaynames{"$_[0]"} or die "Unknown weekday $_[0]";
- return $weekday;
-}
-
-my @weekdayjavanames =
- ( "Calendar.SUNDAY",
- "Calendar.MONDAY",
- "Calendar.TUESDAY",
- "Calendar.WEDNESDAY",
- "Calendar.THURSDAY",
- "Calendar.FRIDAY",
- "Calendar.SATURDAY" );
-my @daysInMonths = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
-sub parseDay($$$) {
- my ($dayoffset, $month, $day) = @_;
- if ($day =~ /^\d+$/) {
- return "$day, 0";
- } elsif ($day =~ /^last([A-Z][a-z][a-z])$/) {
- my $weekday = ( parseWeekday($1) + $dayoffset + 7 ) % 7;
- if ($dayoffset) {
- my $day = $daysInMonths[$month - 1] + $dayoffset;
- warn "Can only approximate $day with dayoffset in $file"
- if ($month == 2);
- return "$day, -$weekdayjavanames[$weekday]";
- } else {
- return "-1, $weekdayjavanames[$weekday]";
- }
- } elsif ($day =~ /^([A-Z][a-z][a-z])>=(\d+)$/) {
- my $start = $2 + $dayoffset;
- my $weekday = ( parseWeekday($1) + $dayoffset + 7 ) % 7;
- if (($start % 7) == 1) {
- $start = ($start + 6) / 7;
- return "$start, $weekdayjavanames[$weekday]";
- } else {
- return "$start, -$weekdayjavanames[$weekday]";
- }
- } else {
- die "Unknown day $day";
- }
-}
-
-my @monthjavanames =
- ( "Calendar.JANUARY",
- "Calendar.FEBRUARY",
- "Calendar.MARCH",
- "Calendar.APRIL",
- "Calendar.MAY",
- "Calendar.JUNE",
- "Calendar.JULY",
- "Calendar.AUGUST",
- "Calendar.SEPTEMBER",
- "Calendar.OCTOBER",
- "Calendar.NOVEMBER",
- "Calendar.DECEMBER" );
-
-sub parseRule($$$) {
- my ($rawoffset, $stdoffset, $rule) = @_;
- my $monthnr = parseMonth($rule->[0]);
- my $time = parseTime($rawoffset, $stdoffset, $rule->[2]);
- my $dayoffset = 0;
- while ($time < 0) {
- $time += 24*3600*1000;
- $dayoffset--;
- }
- while ($time > 24*3600*1000) {
- $time -= 24*3600*1000;
- $dayoffset++;
- }
- $day = parseDay($dayoffset, $monthnr, $rule->[1]);
- return [ $monthjavanames[$monthnr-1], $day, $time ];
-}
-
-
-sub ruleEquals($$) {
- my ($rule1, $rule2) = @_;
- # check month names
- return (($rule1->[0] eq $rule2->[0])
- && ($rule1->[1] eq $rule2->[1])
- && ($rule1->[2] == $rule2->[2]));
-}
-
-sub findAlias($$) {
- my ($rawoffset, $rule) = @_;
- foreach $tz (@timezones) {
- my ($key, $tzoffset, $tzrule, $aliaslist) = @{$tz};
- next if ($tzoffset != $rawoffset);
- if ($rule eq "-") {
- return $tz if ($tzrule eq "-");
- } elsif ($tzrule ne "-") {
- next if $rule->[2] != $tzrule->[2];
- if (ruleEquals($rule->[0], $tzrule->[0])
- && ruleEquals($rule->[1], $tzrule->[1])) {
- return $tz;
- }
- }
- }
- return "";
-}
-
-sub makePretty($) {
- my ($offset) = @_;
- if (($offset % 3600) == 0) {
- $offset /= 3600;
- return "$offset * 3600";
- } else {
- return "$offset";
- }
-}
-
-sub tzcompare($$) {
- my ($a, $b) = @_;
- if (($a =~ /\//) != ($b =~ /\//)) {
- return ($a =~ /\//) ? 1 : -1;
- } else {
- return $a cmp $b;
- }
-}
-
-foreach $file (@TIMEZONEFILES) {
-# print STDERR "$file\n";
- open INPUT, "$TIMEZONEDIR/$file" or die "Can't open $TIMEZONEDIR/$file";
- my $in_time_zone = 0;
- while (<INPUT>) {
- $_ = $1 if /^([^\#]*)\#/;
- next if /^\s*$/;
- my @entries = split;
-# $, = ","; print "'$_' -> [",@entries,"]\n";
- if (!$in_time_zone) {
- if ($entries[0] eq "Rule") {
- # check if rule still applies
- # column 3 is TO entry.
- if ($entries[3] eq "max") {
- my $rulename = $entries[1];
- my $month = $entries[5];
- my $day = $entries[6];
- my $time = $entries[7];
- if ($entries[8] eq "0") {
- # This is the end time rule
- $rules{"$rulename"}[0] = [ $month, $day, $time ];
- } else {
- # This is the start time rule
- $rules{"$rulename"}[1] = [ $month, $day, $time ];
- $rules{"$rulename"}[2] = parseOffset($entries[8]);
- }
- }
- } elsif ($entries[0] eq "Zone") {
- $in_time_zone = 1;
- shift @entries;
- $timezonename = shift @entries;
- } elsif ($entries[0] eq "Remove") {
- my $found = 0;
- foreach $tz (@timezones) {
- my @newaliases;
- foreach $tzname (@{$tz->[3]}) {
- if ($tzname eq $entries[1]) {
- $found = 1;
- } else {
- push @newaliases, $tzname;
- }
- }
- if ($found) {
- if ($tz->[0] eq $entries[1]) {
- $tz->[0] = $newaliases[0];
- }
- $tz->[3] = \@newaliases;
- last;
- }
- }
-
- die "Unknown link $_" if ! $found;
- } elsif ($entries[0] eq "Link") {
- my $alias = 0;
- foreach $tz (@timezones) {
- foreach $tzname (@{$tz->[3]}) {
- if ($tzname eq $entries[1]) {
- $alias = $tz;
- last;
- }
- }
- }
-
- die "Unknown link $_" if ! $alias;
- die "@entries" if $entries[1] =~ /^\d+$/;
- push @{$alias->[3]}, $entries[2];
- } else {
- die "Unknown command: $_";
- }
- }
- if ($in_time_zone) {
- die "early end of Zone: $_" if ($entries[0] =~ /^[A-Za-z]+/);
- if (@entries <= 3) {
-# print "found ZONE $timezonename $entries[0] $entries[1] $entries[2]\n";
- # This is the last line and the only we look at.
- # other lines are for historic time zones.
- my $rawoffset = parseOffset($entries[0]);
- my $rule = $rules{"$entries[1]"} || "-";
- if ($rule ne "-") {
- if (!defined($rule->[2])) {
- $rule = "-";
- } else {
- # now we can parse the time since we know raw offset.
- my $savings = $rule->[2];
- my $endrule = parseRule($rawoffset, $savings,
- $rule->[0]);
- my $startrule = parseRule($rawoffset, $savings,
- $rule->[1]);
- $rule = [ $endrule, $startrule, $savings ];
-# print "start",@{$rule->[1]}, "end", @{$rule->[0]},
-# "offset", $rule->[2],"\n";
- }
- }
- my $alias = findAlias($rawoffset, $rule);
- if ($alias) {
- if (($alias->[0] =~ /\//)
- && ($timezonename !~ /\//)) {
- # alias is of Country/City form, timezonename not
- # make timezonename the real zone name
- $alias->[0] = $timezonename;
- }
- push @{$alias->[3]}, $timezonename;
- } else {
- push @timezones, [ $timezonename, $rawoffset, $rule,
- [ $timezonename ] ];
- }
- $in_time_zone = 0;
- }
- }
- }
- close INPUT;
-}
-
-@timezones = sort { if ($a->[1] != $b->[1]) { $a->[1] <=> $b->[1] }
- else { $a->[0] cmp $b->[0] } } @timezones;
-for (@timezones) {
- my ($name, $rawoffset, $rule, $aliaslist) = @{$_};
- my @aliases = sort { tzcompare($a, $b); } @{$aliaslist};
- $name = $aliases[0];
- $rawoffset = makePretty($rawoffset);
- if ($rule eq "-") {
- print <<EOF
- tz = new SimpleTimeZone($rawoffset, \"$name\");
-EOF
- } else {
- my ($endmonth, $endday, $endtime) = @{$rule->[0]};
- my ($startmonth, $startday, $starttime) = @{$rule->[1]};
- $endtime = makePretty($endtime);
- $starttime = makePretty($starttime);
- my $savings = $rule->[2];
- if ($savings == 3600 * 1000) {
- print <<EOF
- tz = new SimpleTimeZone
- ($rawoffset, \"$name\",
- $startmonth, $startday, $starttime,
- $endmonth, $endday, $endtime);
-EOF
- } else {
- $savings = makePretty($savings);
- print <<EOF
- tz = new SimpleTimeZone
- ($rawoffset, \"$name\",
- $startmonth, $startday, $starttime,
- $endmonth, $endday, $endtime, $savings);
-EOF
- }
- }
- for (@aliases) {
- print <<EOF
- timezones0.put(\"$_\", tz);
-EOF
- }
-}
-
-
diff --git a/libjava/classpath/scripts/tzabbrevs b/libjava/classpath/scripts/tzabbrevs
deleted file mode 100644
index f033f08..0000000
--- a/libjava/classpath/scripts/tzabbrevs
+++ /dev/null
@@ -1,40 +0,0 @@
-Link Pacific/Niue MIT
-Link America/Juneau AST
-Link PST8PDT PST
-# XXX: Remove PST8PDT after java.lang.System is merged with libgcj?
-# Remove PST8PDT
-Link MST PNT
-# XXX: Remove MST7 after java.lang.System is merged with libgcj?
-Link MST MST7
-Remove MST
-Link MST7MDT MST
-# XXX: Remove MST7MDT after java.lang.System is merged with libgcj?
-# Remove MST7MDT
-Link CST6CDT CST
-# XXX: Remove CST6CDT after java.lang.System is merged with libgcj?
-# Remove CST6CDT
-Link EST IET
-# XXX: Remove EST5 after java.lang.System is merged with libgcj?
-Link EST EST5
-Remove EST
-Link EST5EDT EST
-# XXX: Remove EST5EDT after java.lang.System is merged with libgcj?
-# Remove EST5EDT
-Link America/Anguilla PRT
-Link America/Argentina/Buenos_Aires AGT
-Link America/St_Johns CNT
-Link CET ECT
-Link Africa/Cairo ART
-Link Africa/Gaborone CAT
-Link Indian/Comoro EAT
-Link Indian/Mauritius NET
-Link Indian/Kerguelen PLT
-Link Asia/Calcutta IST
-Link Asia/Colombo BST
-Link Asia/Bangkok VST
-Link Asia/Brunei CTT
-Link Asia/Seoul JST
-Link Australia/Darwin ACT
-Link Australia/Sydney AET
-Link Pacific/Ponape SST
-Link Pacific/Auckland NST
diff --git a/libjava/classpath/scripts/unicode-blocks.pl b/libjava/classpath/scripts/unicode-blocks.pl
deleted file mode 100755
index f022220..0000000
--- a/libjava/classpath/scripts/unicode-blocks.pl
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/perl -w
-# unicode-blocks.pl -- Script to generate java.lang.Character.UnicodeBlock
-# Copyright (C) 2002, 2004 Free Software Foundation, Inc.
-#
-# This file is part of GNU Classpath.
-#
-# GNU Classpath 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, or (at your option)
-# any later version.
-#
-# GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 USA.
-#
-# Linking this library statically or dynamically with other modules is
-# making a combined work based on this library. Thus, the terms and
-# conditions of the GNU General Public License cover the whole
-# combination.
-#
-# As a special exception, the copyright holders of this library give you
-# permission to link this library with independent modules to produce an
-# executable, regardless of the license terms of these independent
-# modules, and to copy and distribute the resulting executable under
-# terms of your choice, provided that you also meet, for each linked
-# independent module, the terms and conditions of the license of that
-# module. An independent module is a module which is not derived from
-# or based on this library. If you modify this library, you may extend
-# this exception to your version of the library, but you are not
-# obligated to do so. If you do not wish to do so, delete this
-# exception statement from your version.
-
-
-# Code for reading Blocks.txt and generating (to standard out) the code for
-# java.lang.Character.UnicodeBlock, for pasting into java/lang/Character.java.
-# You should probably check that the results are accurate to the
-# specification, but I made sure it works OOB for Unicode 3.0.0 and JDK 1.4.
-# As the grammar for the Blocks.txt file is changing in Unicode 3.2.0, you
-# will have to tweak this some for future use. For now, the relevant
-# Unicode definition files are found in doc/unicode/.
-#
-# author Eric Blake <ebb9@email.byu.edu>
-#
-# usage: unicode-blocks.pl <blocks.txt>
-# where <blocks.txt> is obtained from www.unicode.org (named Blocks-3.txt
-# for Unicode version 3.0.0).
-
-
-die "Usage: $0 <blocks.txt>" unless @ARGV == 1;
-open (BLOCKS, $ARGV[0]) || die "Can't open Unicode block file: $!\n";
-
-# A hash of added fields and the JDK they were added in, to automatically
-# print @since tags. Maintaining this is optional (and tedious), but nice.
-my %additions = ("SYRIAC" => "1.4",
- "THAANA" => "1.4",
- "SINHALA" => "1.4",
- "MYANMAR" => "1.4",
- "ETHIOPIC" => "1.4",
- "CHEROKEE" => "1.4",
- "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS" => "1.4",
- "OGHAM" => "1.4",
- "RUNIC" => "1.4",
- "KHMER" => "1.4",
- "MONGOLIAN" => "1.4",
- "BRAILLE_PATTERNS" => "1.4",
- "CJK_RADICALS_SUPPLEMENT" => "1.4",
- "KANGXI_RADICALS" => "1.4",
- "IDEOGRAPHIC_DESCRIPTION_CHARACTERS" => "1.4",
- "BOPOMOFO_EXTENDED" => "1.4",
- "CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A" => "1.4",
- "YI_SYLLABLES" => "1.4",
- "YI_RADICALS" => "1.4",
- "CYRILLIC_SUPPLEMENTARY" => "1.5",
- "TAGALOG" => "1.5",
- "HANUNOO" => "1.5",
- "BUHID" => "1.5",
- "TAGBANWA" => "1.5",
- "LIMBU" => "1.5",
- "TAI_LE" => "1.5",
- "KHMER_SYMBOLS" => "1.5",
- "PHONETIC_EXTENSIONS" => "1.5",
- "MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A" => "1.5",
- "SUPPLEMENTAL_ARROWS_A" => "1.5",
- "SUPPLEMENTAL_ARROWS_B" => "1.5",
- "MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B" => "1.5",
- "SUPPLEMENTAL_MATHEMATICAL_OPERATORS" => "1.5",
- "MISCELLANEOUS_SYMBOLS_AND_ARROWS" => "1.5",
- "KATAKANA_PHONETIC_EXTENSIONS" => "1.5",
- "YIJING_HEXAGRAM_SYMBOLS" => "1.5",
- "VARIATION_SELECTORS" => "1.5",
- "LINEAR_B_SYLLABARY" => "1.5",
- "LINEAR_B_IDEOGRAMS" => "1.5",
- "AEGEAN_NUMBERS" => "1.5",
- "OLD_ITALIC" => "1.5",
- "GOTHIC" => "1.5",
- "UGARITIC" => "1.5",
- "DESERET" => "1.5",
- "SHAVIAN" => "1.5",
- "OSMANYA" => "1.5",
- "CYPRIOT_SYLLABARY" => "1.5",
- "BYZANTINE_MUSICAL_SYMBOLS" => "1.5",
- "MUSICAL_SYMBOLS" => "1.5",
- "TAI_XUAN_JING_SYMBOLS" => "1.5",
- "MATHEMATICAL_ALPHANUMERIC_SYMBOLS" => "1.5",
- "CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B" => "1.5",
- "CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT" => "1.5",
- "TAGS" => "1.5",
- "VARIATION_SELECTORS_SUPPLEMENT" => "1.5",
- "SUPPLEMENTARY_PRIVATE_USE_AREA_A" => "1.5",
- "SUPPLEMENTARY_PRIVATE_USE_AREA_B" => "1.5",
- "HIGH_SURROGATES" => "1.5",
- "HIGH_PRIVATE_USE_SURROGATES" => "1.5",
- "LOW_SURROGATES" => "1.5"
- );
-
-print <<'EOF';
- /**
- * A family of character subsets in the Unicode specification. A character
- * is in at most one of these blocks.
- *
- * This inner class was generated automatically from
- * <code>$ARGV[0]</code>, by some perl scripts.
- * This Unicode definition file can be found on the
- * <a href="http://www.unicode.org">http://www.unicode.org</a> website.
- * JDK 1.5 uses Unicode version 4.0.0.
- *
- * @author scripts/unicode-blocks.pl (written by Eric Blake)
- * @since 1.2
- */
- public static final class UnicodeBlock extends Subset
- {
- /** The start of the subset. */
- private final int start;
-
- /** The end of the subset. */
- private final int end;
-
- /** The canonical name of the block according to the Unicode standard. */
- private final String canonicalName;
-
- /** Constants for the <code>forName()</code> method */
- private static final int CANONICAL_NAME = 0;
- private static final int NO_SPACES_NAME = 1;
- private static final int CONSTANT_NAME = 2;
-
- /**
- * Constructor for strictly defined blocks.
- *
- * @param start the start character of the range
- * @param end the end character of the range
- * @param name the block name
- * @param canonicalName the name of the block as defined in the Unicode
- * standard.
- */
- private UnicodeBlock(int start, int end, String name,
- String canonicalName)
- {
- super(name);
- this.start = start;
- this.end = end;
- this.canonicalName = canonicalName;
- }
-
- /**
- * Returns the Unicode character block which a character belongs to.
- * <strong>Note</strong>: This method does not support the use of
- * supplementary characters. For such support, <code>of(int)</code>
- * should be used instead.
- *
- * @param ch the character to look up
- * @return the set it belongs to, or null if it is not in one
- */
- public static UnicodeBlock of(char ch)
- {
- return of((int) ch);
- }
-
- /**
- * Returns the Unicode character block which a code point belongs to.
- *
- * @param codePoint the character to look up
- * @return the set it belongs to, or null if it is not in one.
- * @throws IllegalArgumentException if the specified code point is
- * invalid.
- * @since 1.5
- */
- public static UnicodeBlock of(int codePoint)
- {
- if (codePoint > MAX_CODE_POINT)
- throw new IllegalArgumentException("The supplied integer value is " +
- "too large to be a codepoint.");
- // Simple binary search for the correct block.
- int low = 0;
- int hi = sets.length - 1;
- while (low <= hi)
- {
- int mid = (low + hi) >> 1;
- UnicodeBlock b = sets[mid];
- if (codePoint < b.start)
- hi = mid - 1;
- else if (codePoint > b.end)
- low = mid + 1;
- else
- return b;
- }
- return null;
- }
-
- /**
- * <p>
- * Returns the <code>UnicodeBlock</code> with the given name, as defined
- * by the Unicode standard. The version of Unicode in use is defined by
- * the <code>Character</code> class, and the names are given in the
- * <code>Blocks-<version>.txt</code> file corresponding to that version.
- * The name may be specified in one of three ways:
- * </p>
- * <ol>
- * <li>The canonical, human-readable name used by the Unicode standard.
- * This is the name with all spaces and hyphens retained. For example,
- * `Basic Latin' retrieves the block, UnicodeBlock.BASIC_LATIN.</li>
- * <li>The canonical name with all spaces removed e.g. `BasicLatin'.</li>
- * <li>The name used for the constants specified by this class, which
- * is the canonical name with all spaces and hyphens replaced with
- * underscores e.g. `BASIC_LATIN'</li>
- * </ol>
- * <p>
- * The names are compared case-insensitively using the case comparison
- * associated with the U.S. English locale. The method recognises the
- * previous names used for blocks as well as the current ones. At
- * present, this simply means that the deprecated `SURROGATES_AREA'
- * will be recognised by this method (the <code>of()</code> methods
- * only return one of the three new surrogate blocks).
- * </p>
- *
- * @param blockName the name of the block to look up.
- * @return the specified block.
- * @throws NullPointerException if the <code>blockName</code> is
- * <code>null</code>.
- * @throws IllegalArgumentException if the name does not match any Unicode
- * block.
- * @since 1.5
- */
- public static final UnicodeBlock forName(String blockName)
- {
- int type;
- if (blockName.indexOf(' ') != -1)
- type = CANONICAL_NAME;
- else if (blockName.indexOf('_') != -1)
- type = CONSTANT_NAME;
- else
- type = NO_SPACES_NAME;
- Collator usCollator = Collator.getInstance(Locale.US);
- usCollator.setStrength(Collator.PRIMARY);
- /* Special case for deprecated blocks not in sets */
- switch (type)
- {
- case CANONICAL_NAME:
- if (usCollator.compare(blockName, "Surrogates Area") == 0)
- return SURROGATES_AREA;
- break;
- case NO_SPACES_NAME:
- if (usCollator.compare(blockName, "SurrogatesArea") == 0)
- return SURROGATES_AREA;
- break;
- case CONSTANT_NAME:
- if (usCollator.compare(blockName, "SURROGATES_AREA") == 0)
- return SURROGATES_AREA;
- break;
- }
- /* Other cases */
- int setLength = sets.length;
- switch (type)
- {
- case CANONICAL_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- if (usCollator.compare(blockName, block.canonicalName) == 0)
- return block;
- }
- break;
- case NO_SPACES_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- String nsName = block.canonicalName.replaceAll(" ","");
- if (usCollator.compare(blockName, nsName) == 0)
- return block;
- }
- break;
- case CONSTANT_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- if (usCollator.compare(blockName, block.toString()) == 0)
- return block;
- }
- break;
- }
- throw new IllegalArgumentException("No Unicode block found for " +
- blockName + ".");
- }
-EOF
-
-my @names = ();
-while (<BLOCKS>) {
- next if /^\#/;
- my ($range, $block) = split(/; /);
- my ($start, $end) = split /\.\./, $range;
- next unless defined $block;
- chomp $block;
- $block =~ s/ *$//;
-
- # Translate new Unicode names which have the old name in Java
- $block = "Greek" if $block =~ /Greek and Coptic/;
- $block = "Combining Marks for Symbols"
- if $block =~ /Combining Diacritical Marks for Symbols/;
-
- (my $name = $block) =~ tr/a-z -/A-Z__/;
- push @names, $name;
- my $since = (defined $additions{$name}
- ? "\n * \@since $additions{$name}" : "");
- print <<EOF;
-
- /**
- * $block.
- * 0x$start - 0x$end.$since
- */
- public static final UnicodeBlock $name
- = new UnicodeBlock(0x$start, 0x$end,
- "$name",
- "$block");
-EOF
-}
-
-print <<EOF;
-
- /**
- * Surrogates Area.
- * '\uD800' - '\uDFFF'.
- * \@deprecated As of 1.5, the three areas,
- * <a href="#HIGH_SURROGATES">HIGH_SURROGATES</a>,
- * <a href="#HIGH_PRIVATE_USE_SURROGATES">HIGH_PRIVATE_USE_SURROGATES</a>
- * and <a href="#LOW_SURROGATES">LOW_SURROGATES</a>, as defined
- * by the Unicode standard, should be used in preference to
- * this. These are also returned from calls to <code>of(int)</code>
- * and <code>of(char)</code>.
- */
- \@Deprecated
- public static final UnicodeBlock SURROGATES_AREA
- = new UnicodeBlock(0xD800, 0xDFFF,
- "SURROGATES_AREA",
- "Surrogates Area");
-
- /**
- * The defined subsets.
- */
- private static final UnicodeBlock sets[] = {
-EOF
-
-foreach (@names) {
- print " $_,\n";
-}
-
-print <<EOF;
- };
- } // class UnicodeBlock
-EOF
diff --git a/libjava/classpath/scripts/unicode-muncher.pl b/libjava/classpath/scripts/unicode-muncher.pl
deleted file mode 100755
index db2b89a..0000000
--- a/libjava/classpath/scripts/unicode-muncher.pl
+++ /dev/null
@@ -1,868 +0,0 @@
-#!/usr/bin/perl -w
-# unicode-muncher.pl -- generate Unicode database for java.lang.Character
-# Copyright (C) 1998, 2002, 2004 Free Software Foundation, Inc.
-#
-# This file is part of GNU Classpath.
-#
-# GNU Classpath 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, or (at your option)
-# any later version.
-#
-# GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 USA.
-#
-# Linking this library statically or dynamically with other modules is
-# making a combined work based on this library. Thus, the terms and
-# conditions of the GNU General Public License cover the whole
-# combination.
-#
-# As a special exception, the copyright holders of this library give you
-# permission to link this library with independent modules to produce an
-# executable, regardless of the license terms of these independent
-# modules, and to copy and distribute the resulting executable under
-# terms of your choice, provided that you also meet, for each linked
-# independent module, the terms and conditions of the license of that
-# module. An independent module is a module which is not derived from
-# or based on this library. If you modify this library, you may extend
-# this exception to your version of the library, but you are not
-# obligated to do so. If you do not wish to do so, delete this
-# exception statement from your version.
-
-# Code for reading UnicodeData.txt and generating the code for
-# gnu.java.lang.CharData. For now, the relevant Unicode definition files
-# are found in doc/unicode/.
-#
-# Inspired by code from Jochen Hoenicke.
-# author Eric Blake <ebb9@email.byu.edu>
-# updated to Unicode 4.0.0 by Anthony Balkissoon <abalkiss@redhat.com>
-#
-# Usage: ./unicode-muncher <UnicodeData> <SpecialCasing> <CharData.java>
-# where <UnicodeData> and <SpecialCasing> are .txt files obtained from
-# www.unicode.org (named UnicodeData-4.0.0.txt and SpecialCasing-4.0.0.txt for
-# Unicode version 4.0.0), and <CharData.java> is the final location for the
-# Java interface gnu.java.lang.CharData.
-# As of JDK 1.5, use Unicode version 4.0.0 for best results.
-
-##
-## Convert a 16-bit integer to a Java source code String literal character
-##
-sub javaChar($) {
- my ($char) = @_;
- die "Out of range: $char\n" if $char < -0x8000 or $char > 0x10ffff;
- $char += 0x10000 if $char < 0;
- # Special case characters that must be escaped, or are shorter as ASCII
- return sprintf("\\%03o", $char) if $char < 0x20;
- return "\\\"" if $char == 0x22;
- return "\\\\" if $char == 0x5c;
- return pack("C", $char) if $char < 0x7f;
- return sprintf("\\u%04x", $char);
-}
-
-##
-## Convert the text UnicodeData file from www.unicode.org into a Java
-## interface with string constants holding the compressed information.
-##
-my @TYPECODES = qw(Cn Lu Ll Lt Lm Lo Mn Me Mc Nd Nl No Zs Zl Zp Cc Cf
- SKIPPED Co Cs Pd Ps Pe Pc Po Sm Sc Sk So Pi Pf);
-my @DIRCODES = qw(L R AL EN ES ET AN CS NSM BN B S WS ON LRE LRO RLE RLO PDF);
-
-my $NOBREAK_FLAG = 32;
-my $MIRRORED_FLAG = 64;
-
-my %special = ();
-
-# infoArray is an array where each element is a list of character information
-# for characters in a plane. The index of each list is equal to the plane
-# that it corresponds to even though most of these lists will currently be
-# empty. This is done so that that this script can be easily modified to
-# accomodate future versions of Unicode.
-my @infoArray = \((), (), (), (), (), (), (), (),
- (), (), (), (), (), (), (), (), ());
-
-# info is a reference to one of the lists in infoArray, depending on which
-# plane we're currently parsing.
-my $info;
-
-# titlecase is a string of ordered pairs of characters to store the titlecase
-# conversions of characters that have them
-my $titlecase = "";
-
-# count is simply used to print "." to the screen every so often
-my $count = 0;
-
-# range is used when the UnicodeData file blocks out ranges of code points
-my $range = 0;
-
-# largeNums is an array of numerical values that are too large to fit
-# into the 16 bit char where most numerical values are stored.
-# What is stored in the char then is a number N such that (-N - 3) is
-# the index into largeNums where the numerical value can be found.
-my @largeNums = ();
-
-die "Usage: $0 <UnicodeData.txt> <SpecialCasing.txt> <CharData.java>"
- unless @ARGV == 3;
-$| = 1;
-print "GNU Classpath Unicode Attribute Database Generator 2.1\n";
-print "Copyright (C) 1998, 2002 Free Software Foundation, Inc.\n";
-
-################################################################################
-################################################################################
-## Stage 0: Parse the special casing file
-print "Parsing special casing file\n";
-open (SPECIAL, "< $ARGV[1]") || die "Can't open special casing file: $!\n";
-while (<SPECIAL>) {
- next if /^\#/;
- my ($ch, undef, undef, $upper) = split / *; */;
-
- # This grabs only the special casing for multi-char uppercase. Note that
- # there are no multi-char lowercase, and that Sun ignores multi-char
- # titlecase rules. This script omits 3 special cases in Unicode 3.0.0,
- # which must be hardcoded in java.lang.String:
- # \u03a3 (Sun ignores this special case)
- # \u0049 - lowercases to \u0131, but only in Turkish locale
- # \u0069 - uppercases to \u0130, but only in Turkish locale
- next unless defined $upper and $upper =~ / /;
- $special{hex $ch} = [map {hex} split ' ', $upper];
-}
-close SPECIAL;
-
-################################################################################
-################################################################################
-## Stage 1: Parse the attribute file
-print "Parsing attributes file";
-open (UNICODE, "< $ARGV[0]") || die "Can't open Unicode attribute file: $!\n";
-while (<UNICODE>) {
- print "." unless $count++ % 1000;
- chomp;
- s/\r//g;
- my ($ch, $name, $category, undef, $bidir, $decomp, undef, undef, $numeric,
- $mirrored, undef, undef, $upcase, $lowcase, $title) = split ';';
- $ch = hex($ch);
-
- # plane tells us which Unicode code plane we're currently in and is an
- # index into infoArray.
- my $plane = int($ch / 0x10000);
- my $planeBase = $plane * 0x10000;
- $info = \@{$infoArray[$plane]};
-
- my ($type, $numValue, $upperchar, $lowerchar, $direction);
-
- # Set the value of the $type variable, checking to make sure that it's valid
- # and setting the mirrored and nobreak bits if necessary.
- $type = 0;
- while ($category !~ /^$TYPECODES[$type]$/) {
- if (++$type == @TYPECODES) {
- die "$ch: Unknown type: $category";
- }
- }
- $type |= $NOBREAK_FLAG if ($decomp =~ /noBreak/);
- $type |= $MIRRORED_FLAG if ($mirrored =~ /Y/);
-
- # Set the value of the $numeric variable checking the special cases of
- # large numbers or 'a' - 'z' values.
- if ($numeric =~ /^[0-9]+$/) {
- $numValue = $numeric;
- # If numeric takes more than 16 bits to store we want to store that
- # number in a separate array and store a number N in numValue such
- # that (-N - 3) is the offset into the separate array containing the
- # large numerical value.
- if ($numValue >= 0x7fff) {
- $numValue = -3 - @largeNums;
- push @largeNums, $numeric;
- }
- } elsif ($numeric eq "") {
- # Special case sequences of 'a'-'z'
- if ($ch >= 0x0041 && $ch <= 0x005a) {
- $numValue = $ch - 0x0037;
- } elsif ($ch >= 0x0061 && $ch <= 0x007a) {
- $numValue = $ch - 0x0057;
- } elsif ($ch >= 0xff21 && $ch <= 0xff3a) {
- $numValue = $ch - 0xff17;
- } elsif ($ch >= 0xff41 && $ch <= 0xff5a) {
- $numValue = $ch - 0xff37;
- } else {
- $numValue = -1;
- }
- } else {
- $numValue = -2;
- }
-
- # Set the uppercase and lowercase expansions for the character.
- $upperchar = $upcase ? hex($upcase) - $ch : 0;
- $lowerchar = $lowcase ? hex($lowcase) - $ch : 0;
-
- # If this character has a special titlecase expansion then append it to
- # the titlecase String.
- if ($title ne $upcase) {
- my $titlechar = $title ? hex($title) : $ch;
- $titlecase .= pack("n2", $ch, $titlechar);
- }
-
- # Set the direction variable, use the lower 2 bits as a count of how many
- # characters will be added to the String if this character undergoes an
- # uppercase expansion.
- $direction = 0;
- while ($bidir !~ /^$DIRCODES[$direction]$/) {
- if (++$direction == @DIRCODES) {
- $direction = -1;
- last;
- }
- }
- $direction <<= 2;
- $direction += $#{$special{$ch}} if defined $special{$ch};
-
- # If the UnicodeData file blocks off ranges of code points give them all
- # the same character information.
- if ($range) {
- die "Expecting end of range at $ch\n" unless $name =~ /Last>$/;
- for ($range + 1 .. $ch - 1) {
- $info->[$_ - $planeBase] = pack("n5", $type, $numValue, $upperchar,
- $lowerchar, $direction);
- }
- $range = 0;
- } elsif ($name =~ /First>$/) {
- $range = $ch;
- }
-
- # Store all this parsed information into the element in infoArray that info
- # points to.
- $info->[$ch - $planeBase] = pack("n5", $type, $numValue, $upperchar, $lowerchar,
- $direction);
-}
-close UNICODE;
-
-################################################################################
-################################################################################
-## Stage 2: Compress the data structures
-printf "\nCompressing data structures";
-$count = 0;
-
-# data is a String that will be used to create the DATA String containing
-# character information and offsets into the attribute tables.
-my @data = ();
-
-# charhashArray is an array of hashtables used so that we can reuse character
-# attributes when characters share the same attributes ... this makes our
-# attribute tables smaller. charhash is a pointer into this array.
-my @charhashArray = ({}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {});
-my $charhash = ();
-
-# charinfoArray is an array of arrays, one per plane, for storing character
-# information. charinfo is a pointer into this array.
-my @charinfoArray = \((), (), (), (), (), (), (), (),
- (), (), (), (), (), (), (), (), ());
-my $charinfo;
-
-# charlen is an array, one element per plane, that tells us how many unique
-# character attributes there are for that plane.
-my @charlen = ();
-
-for my $plane (0 .. 0x10) {
- $info = \@{$infoArray[$plane]};
- my $planeBase = $plane * 0x10000;
- $charhash = \%{$charhashArray[$plane]};
- $charinfo = \@{$charinfoArray[$plane]};
-
- for my $ch ($planeBase .. $planeBase + 0xffff) {
- my $index = $ch - $planeBase;
- print "." unless $count++ % 0x1000;
- $info->[$index] = pack("n5", 0, -1, 0, 0, -4) unless defined $info->[$index];
-
- my ($type, $numVal, $upper, $lower, $direction) = unpack("n5", $info->[$index]);
- if (! exists $charhash->{$info->[$index]}) {
- # If we entered this loop that means the character we're looking at
- # now has attributes that are unique from those that we've looked
- # at so far for this plane. So we push its attributes into charinfo
- # and store in charhash the offset into charinfo where these
- # attributes can later be found.
- push @{$charinfo}, [ $numVal, $upper, $lower, $direction ];
- $charhash->{$info->[$index]} = @{$charinfo} - 1;
- # When the file is generaged, the number we just stored in charhas
- # will be the upper 9 bits in the DATA String that are an offset
- # into the attribute tables.
- }
- $data[$plane] .= pack("n", ($charhash->{$info->[$index]} << 7) | $type);
- }
- $charlen[$plane] = scalar(@{$charinfoArray[$plane]});
-}
-
-# the shift that results in the best compression of the table. This is an array
-# because different shifts are better for the different tables for each plane.
-my @bestshift;
-
-# an initial guess.
-my $bestest = 1000000;
-my @bestblkstr;
-my @blksize = ();
-
-for my $plane (0 .. 0x10) {
- print "\n\nplane: $plane\n";
- print "Unique character entries: $charlen[$plane]\n";
- $bestest = 1000000;
- for my $i (3 .. 8) {
- my $blksize = 1 << $i;
- my %blocks = ();
- my @blkarray = ();
- my ($j, $k);
- print "shift: $i";
-
- for ($j = 0; $j < 0x10000; $j += $blksize) {
- my $blkkey = substr $data[$plane], 2 * $j, 2 * $blksize;
- if (! exists $blocks{$blkkey}) {
- push @blkarray, $blkkey;
- $blocks{$blkkey} = $#blkarray;
- }
- }
-
- my $blknum = @blkarray;
- my $blocklen = $blknum * $blksize;
- printf " before %5d", $blocklen;
-
- # Now we try to pack the blkarray as tight as possible by finding matching
- # heads and tails.
- for ($j = $blksize - 1; $j > 0; $j--) {
- my %tails = ();
- for $k (0 .. $#blkarray) {
- next unless defined $blkarray[$k];
- my $len = length $blkarray[$k];
- my $tail = substr $blkarray[$k], $len - $j * 2;
- if (exists $tails{$tail}) {
- push @{$tails{$tail}}, $k;
- } else {
- $tails{$tail} = [ $k ];
- }
- }
-
- # tails are calculated, now calculate the heads and merge.
- BLOCK:
- for $k (0 .. $#blkarray) {
- next unless defined $blkarray[$k];
- my $tomerge = $k;
- while (1) {
- my $head = substr($blkarray[$tomerge], 0, $j * 2);
- my $entry = $tails{$head};
- next BLOCK unless defined $entry;
-
- my $other = shift @{$entry};
- if ($other == $tomerge) {
- if (@{$entry}) {
- push @{$entry}, $other;
- $other = shift @{$entry};
- } else {
- push @{$entry}, $other;
- next BLOCK;
- }
- }
- if (@{$entry} == 0) {
- delete $tails{$head};
- }
-
- # a match was found
- my $merge = $blkarray[$other]
- . substr($blkarray[$tomerge], $j * 2);
- $blocklen -= $j;
- $blknum--;
-
- if ($other < $tomerge) {
- $blkarray[$tomerge] = undef;
- $blkarray[$other] = $merge;
- my $len = length $merge;
- my $tail = substr $merge, $len - $j * 2;
- $tails{$tail} = [ map { $_ == $tomerge ? $other : $_ }
- @{$tails{$tail}} ];
- next BLOCK;
- }
- $blkarray[$tomerge] = $merge;
- $blkarray[$other] = undef;
- }
- }
- }
- my $blockstr;
- for $k (0 .. $#blkarray) {
- $blockstr .= $blkarray[$k] if defined $blkarray[$k];
- }
-
- die "Unexpected $blocklen" if length($blockstr) != 2 * $blocklen;
- my $estimate = 2 * $blocklen + (0x20000 >> $i);
-
- printf " after merge %5d: %6d bytes\n", $blocklen, $estimate;
- if ($estimate < $bestest) {
- $bestest = $estimate;
- $bestshift[$plane] = $i;
- $bestblkstr[$plane] = $blockstr;
- }
- }
- $blksize[$plane] = 1 << $bestshift[$plane];
- print "best shift: ", $bestshift[$plane];
- print " blksize: ", $blksize[$plane];
-}
-my @blocksArray = \((), (), (), (), (), (), (), (),
- (), (), (), (), (), (), (), (), ());
-
-for my $plane (0 .. 0x10) {
- for (my $j = 0; $j < 0x10000; $j += $blksize[$plane]) {
- my $blkkey = substr $data[$plane], 2 * $j, 2 * $blksize[$plane];
- my $index = index $bestblkstr[$plane], $blkkey;
- while ($index & 1) {
- die "not found: $j" if $index == -1;
- $index = index $bestblkstr[$plane], $blkkey, $index + 1;
- }
- push @{$blocksArray[$plane]}, ($index / 2 - $j) & 0xffff;
- }
-}
-
-################################################################################
-################################################################################
-## Stage 3: Generate the file
-for my $plane (0 .. 0x10) {
- die "UTF-8 limit of blocks may be exceeded for plane $plane: " . scalar(@{$blocksArray[$plane]}) . "\n"
- if @{$blocksArray[$plane]} > 0xffff / 3;
- die "UTF-8 limit of data may be exceeded for plane $plane: " . length($bestblkstr[$plane]) . "\n"
- if length($bestblkstr[$plane]) > 0xffff / 3;
-}
-
-{
- print "\nGenerating $ARGV[2].";
- my ($i, $j);
-
- open OUTPUT, "> $ARGV[2]" or die "Failed creating output file: $!\n";
- print OUTPUT <<EOF;
-/* gnu/java/lang/CharData -- Database for java.lang.Character Unicode info
- Copyright (C) 2002 Free Software Foundation, Inc.
- *** This file is generated by scripts/unicode-muncher.pl ***
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.lang;
-
-/**
- * This contains the info about the unicode characters, that
- * java.lang.Character needs. It is generated automatically from
- * <code>$ARGV[0]</code> and
- * <code>$ARGV[1]</code>, by some
- * perl scripts. These Unicode definition files can be found on the
- * <a href="http://www.unicode.org">http://www.unicode.org</a> website.
- * JDK 1.5 uses Unicode version 4.0.0.
- *
- * The data is stored as string constants, but Character will convert these
- * Strings to their respective <code>char[]</code> components. The fields
- * are stored in arrays of 17 elements each, one element per Unicode plane.
- * <code>BLOCKS</code> stores the offset of a block of 2<sup>SHIFT</sup>
- * characters within <code>DATA</code>. The DATA field, in turn, stores
- * information about each character in the low order bits, and an offset
- * into the attribute tables <code>UPPER</code>, <code>LOWER</code>,
- * <code>NUM_VALUE</code>, and <code>DIRECTION</code>. Notice that the
- * attribute tables are much smaller than 0xffff entries; as many characters
- * in Unicode share common attributes. Numbers that are too large to fit
- * into NUM_VALUE as 16 bit chars are stored in LARGENUMS and a number N is
- * stored in NUM_VALUE such that (-N - 3) is the offset into LARGENUMS for
- * the particular character. The DIRECTION table also contains a field for
- * detecting characters with multi-character uppercase expansions.
- * Next, there is a listing for <code>TITLE</code> exceptions (most characters
- * just have the same title case as upper case). Finally, there are two
- * tables for multi-character capitalization, <code>UPPER_SPECIAL</code>
- * which lists the characters which are special cased, and
- * <code>UPPER_EXPAND</code>, which lists their expansion.
- *
- * \@author scripts/unicode-muncher.pl (written by Jochen Hoenicke,
- * Eric Blake)
- * \@see Character
- * \@see String
- */
-public interface CharData
-{
- /**
- * The Unicode definition file that was parsed to build this database.
- */
- String SOURCE = \"$ARGV[0]\";
-
- /**
- * The character shift amount to look up the block offset. In other words,
- * <code>(char) (BLOCKS.value[ch >> SHIFT[p]] + ch)</code> is the index
- * where <code>ch</code> is described in <code>DATA</code> if <code>ch</code>
- * is in Unicode plane <code>p</code>. Note that <code>p</code> is simply
- * the integer division of ch and 0x10000.
- */
- int[] SHIFT
-EOF
- for ($i = 0; $i < @bestshift - 1; $i++) {
- if ($i == 0){
- print OUTPUT " = new int[] {";
- }
- print OUTPUT $bestshift[$i], ", ";
- }
- if (scalar(@bestshift) > 0){
- print OUTPUT $bestshift[-1], "}";
- }
- else {
- print OUTPUT " = null";
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * The mapping of character blocks to their location in <code>DATA</code>.
- * Each entry has been adjusted so that the 16-bit sum with the desired
- * character gives the actual index into <code>DATA</code>.
- */
- String[] BLOCKS = new String[]{
-EOF
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- for ($i = 0; $i < @{$blocksArray[$plane]} / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if @{$blocksArray[$plane]} <= $i * 11 + $j;
- my $val = $blocksArray[$plane]->[$i * 11 + $j];
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * The array containing the numeric values that are too large to be stored as
- * chars in NUM_VALUE. NUM_VALUE in this case will contain a negative integer
- * N such that LARGENUMS[-N - 3] contains the correct numeric value.
- */
- int[] LARGENUMS
-EOF
- for ($i = 0; $i < @largeNums - 1; $i++) {
- if ($i == 0){
- print OUTPUT " = new int[] {";
- }
- print OUTPUT $largeNums[$i], ", ";
- }
- if (scalar(@largeNums) > 0){
- print OUTPUT $largeNums[-1], "}";
- }
- else {
- print OUTPUT " = null";
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * Information about each character. The low order 5 bits form the
- * character type, the next bit is a flag for non-breaking spaces, and the
- * next bit is a flag for mirrored directionality. The high order 9 bits
- * form the offset into the attribute tables. Note that this limits the
- * number of unique character attributes to 512, which is not a problem
- * as of Unicode version 4.0.0, but may soon become one.
- */
- String[] DATA = new String[]{
-EOF
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- my $len = length($bestblkstr[$plane]) / 2;
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = unpack "n", substr($bestblkstr[$plane], 2 * ($i * 11 + $j), 2);
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the attribute table for computing the numeric value of a
- * character. The value is -1 if Unicode does not define a value, -2
- * if the value is not a positive integer, otherwise it is the value.
- * Note that this is a signed value, but stored as an unsigned char
- * since this is a String literal.
- */
- String[] NUM_VALUE = new String[]{
-EOF
-
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- $len = @{$charinfoArray[$plane]};
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = $charinfoArray[$plane]->[$i * 11 + $j][0];
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the attribute table for computing the single-character uppercase
- * representation of a character. The value is the signed difference
- * between the character and its uppercase version. Note that this is
- * stored as an unsigned char since this is a String literal. When
- * capitalizing a String, you must first check if a multi-character uppercase
- * sequence exists before using this character.
- */
- String[] UPPER = new String[]{
-EOF
-
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- $len = @{$charinfoArray[$plane]};
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = $charinfoArray[$plane]->[$i * 11 + $j][1];
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the attribute table for computing the lowercase representation
- * of a character. The value is the signed difference between the
- * character and its lowercase version. Note that this is stored as an
- * unsigned char since this is a String literal.
- */
- String[] LOWER = new String[]{
-EOF
-
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- $len = @{$charinfoArray[$plane]};
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = $charinfoArray[$plane]->[$i * 11 + $j][2];
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the attribute table for computing the directionality class
- * of a character, as well as a marker of characters with a multi-character
- * capitalization. The direction is taken by performing a signed shift
- * right by 2 (where a result of -1 means an unknown direction, such as
- * for undefined characters). The lower 2 bits form a count of the
- * additional characters that will be added to a String when performing
- * multi-character uppercase expansion. This count is also used, along with
- * the offset in UPPER_SPECIAL, to determine how much of UPPER_EXPAND to use
- * when performing the case conversion. Note that this information is stored
- * as an unsigned char since this is a String literal.
- */
- String[] DIRECTION = new String[]{
-EOF
-
- for ($plane = 0; $plane <= 0x10; $plane++) {
- # The following if statement handles the cases of unassigned planes
- # specially so we don't waste space with unused Strings. As of
- # Unicode version 4.0.0 only planes 0, 1, 2, and 14 are used. If
- # you are updating this script to work with a later version of
- # Unicode you may have to alter this if statement.
- if ($plane > 2 && $plane != 14) {
- print OUTPUT ($plane == 0x10) ? " \"\"}" : " \"\",\n\n";
- }
- else {
- $len = @{$charinfoArray[$plane]};
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + " : " ";
- print OUTPUT "\"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = $charinfoArray[$plane]->[$i * 11 + $j][3];
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
- print OUTPUT ",\n\n";
- }
- }
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the listing of titlecase special cases (all other characters
- * can use <code>UPPER</code> to determine their titlecase). The listing
- * is a sorted sequence of character pairs; converting the first character
- * of the pair to titlecase produces the second character.
- */
- String TITLE
-EOF
-
- $len = length($titlecase) / 2;
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + \"" : " = \"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = unpack "n", substr($titlecase, 2 * ($i * 11 + $j), 2);
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
-
- print OUTPUT <<EOF;
-;
-
- /**
- * This is a listing of characters with multi-character uppercase sequences.
- * A character appears in this list exactly when it has a non-zero entry
- * in the low-order 2-bit field of DIRECTION. The listing is a sorted
- * sequence of pairs (hence a binary search on the even elements is an
- * efficient way to lookup a character). The first element of a pair is the
- * character with the expansion, and the second is the index into
- * UPPER_EXPAND where the expansion begins. Use the 2-bit field of
- * DIRECTION to determine where the expansion ends.
- */
- String UPPER_SPECIAL
-EOF
-
- my @list = sort {$a <=> $b} keys %special;
- my $expansion = "";
- my $offset = 0;
- $len = @list;
- for ($i = 0; $i < $len / 5; $i++) {
- print OUTPUT $i ? "\n + \"" : " = \"";
- for $j (0 .. 4) {
- last if $len <= $i * 5 + $j;
- my $ch = $list[$i * 5 + $j];
- print OUTPUT javaChar($ch);
- print OUTPUT javaChar($offset);
- $offset += @{$special{$ch}};
- $expansion .= pack "n*", @{$special{$ch}};
- }
- print OUTPUT "\"";
- }
-
- print OUTPUT <<EOF;
-;
-
- /**
- * This is the listing of special case multi-character uppercase sequences.
- * Characters listed in UPPER_SPECIAL index into this table to find their
- * uppercase expansion. Remember that you must also perform special-casing
- * on two single-character sequences in the Turkish locale, which are not
- * covered here in CharData.
- */
- String UPPER_EXPAND
-EOF
-
- $len = length($expansion) / 2;
- for ($i = 0; $i < $len / 11; $i++) {
- print OUTPUT $i ? "\n + \"" : " = \"";
- for $j (0 .. 10) {
- last if $len <= $i * 11 + $j;
- my $val = unpack "n", substr($expansion, 2 * ($i * 11 + $j), 2);
- print OUTPUT javaChar($val);
- }
- print OUTPUT "\"";
- }
-
- print OUTPUT ";\n}\n";
- close OUTPUT;
-}
-print "\nDone.\n";
diff --git a/libjava/classpath/test/Makefile.am b/libjava/classpath/test/Makefile.am
deleted file mode 100644
index bd3972a..0000000
--- a/libjava/classpath/test/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-SUBDIRS = java.net java.io java.util gnu.java.lang.reflect
-
diff --git a/libjava/classpath/test/base/OutputClass.java b/libjava/classpath/test/base/OutputClass.java
deleted file mode 100755
index d0fe3ec..0000000
--- a/libjava/classpath/test/base/OutputClass.java
+++ /dev/null
@@ -1,98 +0,0 @@
-import java.io.*;
-import gnu.java.lang.*;
-import java.lang.reflect.*;
-
-public class OutputClass {
- public static void main(String[] args) {
- for(int i=1;i<args.length;i++) {
- if(args[i].endsWith(".class")) {
- args[i] = args[i].substring(0,args[i].length()-6);
- }
- args[i] = args[i].replace('/','.');
- try {
- try {
- OutputClass.outputClass(Class.forName(args[i]),System.out);
- } catch(ClassNotFoundException E) {
- new PrintStream(new FileOutputStream(args[i]+".out-"+args[0])).println(args[i] + ": class missing.");
- }
- } catch(IOException e) {
- }
- }
- }
-
- static void outputClass(Class c, PrintStream out) {
- out.println(c.getName() + ":class:" + Modifier.toString(sanitizeModifier(c.getModifiers())));
- // Put implemented interfaces here
- Field[] f = ClassHelper.getAllFields(c);
- for(int i=0;i<f.length;i++) {
- if(Modifier.isPublic(f[i].getModifiers()) || Modifier.isProtected(f[i].getModifiers())) {
- out.println(
- c.getName()
- + ":field:"
- + Modifier.toString(sanitizeModifier(f[i].getModifiers()))
- + " "
- + f[i].getType().getName()
- + " "
- + ClassHelper.getTruncatedName(f[i].getName()));
- }
- }
-
- Method[] m = ClassHelper.getAllMethods(c);
- for(int i=0;i<m.length;i++) {
- if(Modifier.isPublic(m[i].getModifiers()) || Modifier.isProtected(m[i].getModifiers())) {
- out.println(
- c.getName()
- + ":method:"
- + Modifier.toString(sanitizeModifier(m[i].getModifiers()))
- + " "
- + m[i].getReturnType().getName()
- + " "
- + ClassHelper.getTruncatedName(m[i].getName())
- + "("
- + printArgs(m[i].getParameterTypes())
- + ")"
- + printExceptions(m[i].getExceptionTypes()));
- }
- }
-
- Constructor[] cl = c.getDeclaredConstructors();
- for(int i=0;i<cl.length;i++) {
- if(Modifier.isPublic(cl[i].getModifiers()) || Modifier.isProtected(cl[i].getModifiers())) {
- out.println(
- c.getName()
- + ":constructor:"
- + Modifier.toString(sanitizeModifier(cl[i].getModifiers()))
- + " "
- + ClassHelper.getTruncatedName(cl[i].getName())
- + "("
- + printArgs(cl[i].getParameterTypes())
- + ")"
- + printExceptions(m[i].getExceptionTypes()));
- }
- }
- }
-
- static String printArgs(Class[] args) {
- StringBuffer sb = new StringBuffer();
- for(int i=0;i<args.length;i++) {
- sb.append(args[i]);
- if(i!=args.length-1) {
- sb.append(",");
- }
- }
- return sb.toString();
- }
-
- static String printExceptions(Class[] exceptions) {
- StringBuffer sb = new StringBuffer();
- for(int i=0;i<exceptions.length;i++) {
- sb.append(" ");
- sb.append(exceptions[i].getName());
- }
- return sb.toString();
- }
-
- static int sanitizeModifier(int modifier) {
- return modifier & ~(Modifier.SYNCHRONIZED | Modifier.TRANSIENT | Modifier.VOLATILE | Modifier.NATIVE);
- }
-}
diff --git a/libjava/classpath/test/gnu.java.lang.reflect/Makefile.am b/libjava/classpath/test/gnu.java.lang.reflect/Makefile.am
deleted file mode 100644
index fa98724..0000000
--- a/libjava/classpath/test/gnu.java.lang.reflect/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-JAVAROOT = .
-
-check_JAVA = TypeSignatureTest.java
diff --git a/libjava/classpath/test/gnu.java.lang.reflect/TypeSignatureTest.java b/libjava/classpath/test/gnu.java.lang.reflect/TypeSignatureTest.java
deleted file mode 100644
index bd3465d..0000000
--- a/libjava/classpath/test/gnu.java.lang.reflect/TypeSignatureTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*************************************************************************
-/* TypeSignatureTest.java -- Tests TypeSignature class
-/*
-/* Copyright (c) 1998 by Free Software Foundation, Inc.
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Member;
-
-import gnu.java.lang.reflect.TypeSignature;
-
-public class TypeSignatureTest
-{
- public static void pass()
- {
- System.out.print( "PASSED: " );
- }
-
- public static void fail()
- {
- System.out.print( "FAILED: " );
- }
-
- public static void testClass( Class clazz, String type_code )
- {
- if( TypeSignature.getEncodingOfClass( clazz ).equals( type_code ) )
- pass();
- else
- fail();
-
- System.out.println( "class encoding of " + clazz );
- }
-
- public static void testGetClass( Class clazz, String type_code )
- throws ClassNotFoundException
- {
- if( TypeSignature.getClassForEncoding( type_code ).equals( clazz ) )
- pass();
- else
- fail();
-
- System.out.println( "class from encoding " + type_code );
- }
-
- public static void testConstructor( Constructor c, String type_code )
- {
- if( TypeSignature.getEncodingOfConstructor( c ).equals( type_code ) )
- pass();
- else
- fail();
-
- System.out.println( "constructor encoding of " + c );
- }
-
- public static void testMethod( Method m, String type_code )
- {
- if( TypeSignature.getEncodingOfMethod( m ).equals( type_code ) )
- pass();
- else
- fail();
-
- System.out.println( "method encoding of " + m );
- }
-
- public static void testMember( Member m, String type_code )
- {
- if( TypeSignature.getEncodingOfMember( m ).equals( type_code ) )
- pass();
- else
- fail();
-
- System.out.println( "member encoding of " + m );
- }
-
- public static void main( String[] args )
- {
- try
- {
- // test getEncodingOfClass
- testClass( Boolean.TYPE, "Z" );
- testClass( Byte.TYPE, "B" );
- testClass( Character.TYPE, "C" );
- testClass( Double.TYPE, "D" );
- testClass( Float.TYPE, "F" );
- testClass( Integer.TYPE, "I" );
- testClass( Long.TYPE, "J" );
- testClass( Short.TYPE, "S" );
- testClass( (new int[] {}).getClass(), "[I" );
- testClass( (new float[][][] {}).getClass(), "[[[F" );
- testClass( String.class, "Ljava/lang/String;" );
- testClass( TypeSignatureTest.class, "LTypeSignatureTest;" );
-
- // test named inner-class
- TypeSignatureTest tst = new TypeSignatureTest();
- Inner i = tst.new Inner();
- testClass( i.getClass(),
- "LTypeSignatureTest$Inner;" );
-
- // test anonymous inner-class
- Anon anon = new Anon() { public void f() {} };
- testClass( anon.getClass(), "LTypeSignatureTest$1;" );
-
- //test getEncodingOfConstructor
- testConstructor( String.class.getConstructor( new Class[] {} ),
- "()V" );
- testConstructor(
- String.class.getConstructor( new Class[]
- { (new byte[]{}).getClass() } ),
- "([B)V" );
-
- testConstructor(
- String.class.getConstructor( new Class[] { StringBuffer.class } ),
- "(Ljava/lang/StringBuffer;)V" );
-
- // test getEncodingOfMethod
- testMethod(
- String.class.getMethod( "lastIndexOf",
- new Class[] { Integer.TYPE, Integer.TYPE } ),
- "(II)I" );
-
- testMethod(
- String.class.getMethod( "length", new Class[] {} ),
- "()I" );
-
- testMethod(
- TypeSignatureTest.class.getMethod( "pass", new Class[] {} ),
- "()V" );
-
- testMember(
- TypeSignatureTest.class.getField( "i" ),
- "I" );
-
- testMember(
- TypeSignatureTest.class.getField( "s" ),
- "Ljava/lang/String;" );
-
- testMember(
- TypeSignatureTest.class.getField( "o" ),
- "[[Ljava/lang/Object;" );
-
- // test getClassForEncoding
- testGetClass( Boolean.TYPE, "Z" );
- testGetClass( Byte.TYPE, "B" );
- testGetClass( Character.TYPE, "C" );
- testGetClass( Double.TYPE, "D" );
- testGetClass( Float.TYPE, "F" );
- testGetClass( Integer.TYPE, "I" );
- testGetClass( Long.TYPE, "J" );
- testGetClass( Short.TYPE, "S" );
- testGetClass( (new int[] {}).getClass(), "[I" );
- testGetClass( (new float[][][] {}).getClass(), "[[[F" );
- testGetClass( String.class, "Ljava/lang/String;" );
- testGetClass( TypeSignatureTest.class, "LTypeSignatureTest;" );
-
- // test named inner-class
- testGetClass( i.getClass(),
- "LTypeSignatureTest$Inner;" );
-
- // test anonymous inner-class
- testGetClass( anon.getClass(), "LTypeSignatureTest$1;" );
- }
- catch( Exception e )
- {
- e.printStackTrace();
- }
- }
-
- public int i;
- public String s;
- public Object[][] o;
-
-
- class Inner
- {}
-}
-
-
-interface Anon
-{
- public void f();
-}
diff --git a/libjava/classpath/test/java.beans/DescriptorTest.java b/libjava/classpath/test/java.beans/DescriptorTest.java
deleted file mode 100644
index 31d2bd0..0000000
--- a/libjava/classpath/test/java.beans/DescriptorTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-import java.beans.*;
-
-public class DescriptorTest implements Runnable {
- public static void main(String[] args) {
- new DescriptorTest().run();
- }
-
- interface TestClass {
- public String[] getTest();
- public void setTest(String[] test);
- public String getTest(int i);
- public void setTest(int i, String name);
- }
-
- public void run() {
- try {
- new PropertyDescriptor("class",java.lang.Object.class);
- System.out.println("PASSED: Property Object.class");
- } catch(IntrospectionException e) {
- System.out.println("FAILED: Property Object.class");
- e.printStackTrace();
- }
-
- try {
- new IndexedPropertyDescriptor("test",TestClass.class);
- System.out.println("PASSED: Indexed Property Component.location");
- } catch(IntrospectionException e) {
- System.out.println("FAILED: Indexed Property Component.location");
- e.printStackTrace();
- }
-
- try {
- new EventSetDescriptor(java.awt.Button.class,"action",java.awt.event.ActionListener.class,"actionPerformed");
- System.out.println("PASSED: Event Set Button.action");
- } catch(IntrospectionException e) {
- System.out.println("FAILED: Event Set Button.action");
- e.printStackTrace();
- }
-
- try {
- new MethodDescriptor(java.awt.Component.class.getMethod("getLocation",new Class[0]));
- System.out.println("PASSED: Method Component.getLocation");
- } catch(NoSuchMethodException e) {
- System.out.println("FAILED: No such method: Component.getLocation()");
- e.printStackTrace();
- }
- }
-} \ No newline at end of file
diff --git a/libjava/classpath/test/java.beans/IntrospectorTest.java b/libjava/classpath/test/java.beans/IntrospectorTest.java
deleted file mode 100644
index d786382..0000000
--- a/libjava/classpath/test/java.beans/IntrospectorTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-import java.beans.*;
-
-public class IntrospectorTest {
- public static void main(String[] args) {
- try {
- BeanInfo b = Introspector.getBeanInfo(java.awt.Component.class);
- if(b.getPropertyDescriptors().length == 6
- && b.getEventSetDescriptors().length == 5
- && b.getMethodDescriptors().length == 128) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.awt.Component.class)");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.awt.Component.class)");
- }
- b = Introspector.getBeanInfo(java.util.BitSet.class);
- if(b.getPropertyDescriptors().length == 2
- && b.getEventSetDescriptors().length == 0
- && b.getMethodDescriptors().length == 17) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.util.BitSet.class)");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.util.BitSet.class)");
- }
- b = Introspector.getBeanInfo(java.lang.Object.class);
- if(b.getPropertyDescriptors().length == 1
- && b.getEventSetDescriptors().length == 0
- && b.getMethodDescriptors().length == 9) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.lang.Object.class)");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.lang.Object.class)");
- }
- b = Introspector.getBeanInfo(java.applet.Applet.class);
- if(b.getPropertyDescriptors().length == 24
- && b.getEventSetDescriptors().length == 6
- && b.getMethodDescriptors().length == 168) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class)");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class)");
- }
- b = Introspector.getBeanInfo(java.awt.Button.class);
- if(b.getPropertyDescriptors().length == 8
- && b.getEventSetDescriptors().length == 6
- && b.getMethodDescriptors().length == 134) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.awt.Button.class)");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.awt.Button.class)");
- }
- b = Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Panel.class);
- if(b.getPropertyDescriptors().length == 8
- && b.getEventSetDescriptors().length == 0
- && b.getMethodDescriptors().length == 22) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Panel.class)");
- } else {
- System.out.println(b.getPropertyDescriptors().length + " " + b.getEventSetDescriptors().length + " " + b.getMethodDescriptors().length);
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Panel.class)");
- }
- b = Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Component.class);
- if(b.getPropertyDescriptors().length == 18
- && b.getEventSetDescriptors().length == 1
- && b.getMethodDescriptors().length == 65) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Component.class)");
- } else {
- System.out.println(b.getPropertyDescriptors().length + " " + b.getEventSetDescriptors().length + " " + b.getMethodDescriptors().length);
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class,java.awt.Component.class)");
- }
- b = Introspector.getBeanInfo(java.applet.Applet.class,java.lang.Object.class);
- if(b.getPropertyDescriptors().length == 24
- && b.getEventSetDescriptors().length == 6
- && b.getMethodDescriptors().length == 160) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class,java.lang.Object.class)");
- } else {
- System.out.println(b.getPropertyDescriptors().length + " " + b.getEventSetDescriptors().length + " " + b.getMethodDescriptors().length);
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class,java.lang.Object.class)");
- }
-
- b = Introspector.getBeanInfo(java.applet.Applet.class,null);
- if(b.getPropertyDescriptors().length == 24
- && b.getEventSetDescriptors().length == 6
- && b.getMethodDescriptors().length == 168) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class,java.lang.Object.class)");
- } else {
- System.out.println(b.getPropertyDescriptors().length + " " + b.getEventSetDescriptors().length + " " + b.getMethodDescriptors().length);
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class,null)");
- }
-
- b = Introspector.getBeanInfo(java.applet.Applet.class);
- if(b.getPropertyDescriptors().length == 24
- && b.getEventSetDescriptors().length == 6
- && b.getMethodDescriptors().length == 168) {
- System.out.println("PASSED: Introspector.getBeanInfo(java.applet.Applet.class) 2nd time");
- } else {
- System.out.println("FAILED: Introspector.getBeanInfo(java.applet.Applet.class) 2nd time");
- }
- } catch(IntrospectionException e) {
- System.out.println("FAILED: IntrospectionException");
- e.printStackTrace();
- }
- }
-}
diff --git a/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java b/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java
deleted file mode 100644
index 8db2af0..0000000
--- a/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-import java.beans.PropertyChangeSupport;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeEvent;
-import java.util.Hashtable;
-
-public class PropertyChangeSupportTest implements Runnable {
- class Source {
- PropertyChangeSupport support = new PropertyChangeSupport(this);
- public void addPropertyChangeListener(PropertyChangeListener l) {
- support.addPropertyChangeListener(l);
- }
- public void addPropertyChangeListener(String s, PropertyChangeListener l) {
- support.addPropertyChangeListener(s,l);
- }
- public void removePropertyChangeListener(PropertyChangeListener l) {
- support.removePropertyChangeListener(l);
- }
- public void removePropertyChangeListener(String s, PropertyChangeListener l) {
- support.removePropertyChangeListener(s,l);
- }
-
- void changeProperty(String name) {
- support.firePropertyChange(name,"old","new");
-
- }
- }
-
- class Listener implements PropertyChangeListener {
- Hashtable numEventsReceived = new Hashtable();
- int getNumEvents(String propertyName) {
- Integer i = (Integer)numEventsReceived.get(propertyName);
- try {
- return i.intValue();
- } catch(NullPointerException e) {
- return 0;
- }
- }
-
- public void propertyChange(PropertyChangeEvent e) {
- Integer i = (Integer)numEventsReceived.get(e.getPropertyName());
- try {
- int newI = i.intValue() + 1;
- numEventsReceived.put(e.getPropertyName(), new Integer(newI));
- } catch(NullPointerException exc) {
- numEventsReceived.put(e.getPropertyName(), new Integer(1));
- }
- }
-
- public void reset() {
- numEventsReceived = new Hashtable();
- }
- }
-
- public void setProperties(Source s) {
- s.changeProperty("foo");
- s.changeProperty("foo");
- s.changeProperty("foo");
- s.changeProperty("bar");
- s.changeProperty("bar");
- s.changeProperty("foobar");
- }
-
- public void shouldEqual(Listener l, int foo, int bar, int foobar, String testName) {
- String whatsWrong = "";
- if(l.getNumEvents("foo") != foo) {
- whatsWrong += ("foo(" + l.getNumEvents("foo") + ") != " + foo);
- }
- if(l.getNumEvents("bar") != bar) {
- whatsWrong += (" bar(" + l.getNumEvents("bar") + ") != " + bar);
- }
- if(l.getNumEvents("foobar") != foobar) {
- whatsWrong += (" foobar(" + l.getNumEvents("foobar") + ") != " + foobar);
- }
-
- if(!whatsWrong.equals("")) {
- System.out.println("FAILURE: " + testName + ": " + whatsWrong);
- } else {
- System.out.println("Success: " + testName);
- }
- }
-
- public void run() {
- Source s = new Source();
-
- /* Test: single multi-property adds */
- Listener l = new Listener();
- s.addPropertyChangeListener(l);
- setProperties(s);
- shouldEqual(l, 3, 2, 1, "single multi-property adds");
-
- /* Test: multiple listeners */
- Listener l2 = new Listener();
- s.addPropertyChangeListener(l2);
- setProperties(s);
- shouldEqual(l, 6, 4, 2, "multiple listeners-l");
- shouldEqual(l2, 3, 2, 1, "multiple listeners-l2");
-
- /* Test: multiple multi-property adds */
- s.addPropertyChangeListener(l);
- setProperties(s);
- shouldEqual(l, 12, 8, 4, "multiple multi-property adds-l");
- shouldEqual(l2, 6, 4, 2, "multiple multi-property adds-l2");
-
- /* Test: remove multi-property add */
- s.removePropertyChangeListener(l);
- setProperties(s);
- shouldEqual(l, 15, 10, 5, "remove multi-property add-l");
- shouldEqual(l2, 9, 6, 3, "remove multi-property add-l2");
-
-
- s.removePropertyChangeListener(l);
- s.removePropertyChangeListener(l2);
- l.reset();
- l2.reset();
-
- /* ENABLE THIS IF YOU THINK RESET ISN'T HAPPENING
- shouldEqual(l, 0, 0, 0, "RESET-l");
- shouldEqual(l2, 0, 0, 0, "RESET-l2");
- setProperties(s);
- shouldEqual(l, 0, 0, 0, "RESET_AGAIN-l");
- shouldEqual(l2, 0, 0, 0, "RESET_AGAIN-l2");
- */
-
-
- /* Test: single property listener */
- s.addPropertyChangeListener("foo", l);
- setProperties(s);
- shouldEqual(l, 3, 0, 0, "single property listener");
-
- /* Test: multiple different properties */
- s.addPropertyChangeListener("bar", l);
- setProperties(s);
- shouldEqual(l, 6, 2, 0, "multiple different properties");
-
- /* Test: multiple of same property */
- s.addPropertyChangeListener("foo", l);
- setProperties(s);
- shouldEqual(l, 12, 4, 0, "multiple of same property");
-
- /* Test: multiple single-property listeners */
- s.addPropertyChangeListener("foo", l2);
- setProperties(s);
- shouldEqual(l, 18, 6, 0, "multiple single-property listeners-l");
- shouldEqual(l2, 3, 0, 0, "multiple single-property listeners-l2");
-
- /* Test: remove single-property add */
- s.removePropertyChangeListener("foo", l);
- setProperties(s);
- shouldEqual(l, 21, 8, 0, "remove single-property add-l");
- shouldEqual(l2, 6, 0, 0, "remove single-property add-l2");
-
-
- s.removePropertyChangeListener("foo", l);
- s.removePropertyChangeListener("bar", l);
- s.removePropertyChangeListener("foo", l2);
- l.reset();
- l2.reset();
-
- /* ENABLE THIS IF YOU THINK RESET ISN'T HAPPENING
- shouldEqual(l, 0, 0, 0, "RESET-l");
- shouldEqual(l2, 0, 0, 0, "RESET-l2");
- setProperties(s);
- shouldEqual(l, 0, 0, 0, "RESET_AGAIN-l");
- shouldEqual(l2, 0, 0, 0, "RESET_AGAIN-l2");
- */
-
- /* Test: multiple- and single-property interaction */
- s.addPropertyChangeListener(l);
- s.addPropertyChangeListener("foo", l);
- setProperties(s);
- shouldEqual(l, 6, 2, 1, "multiple- and single-property interaction");
-
- /* Test: multiple- and single-property interaction: multiple-listener removal */
- s.removePropertyChangeListener(l);
- setProperties(s);
- shouldEqual(l, 9, 2, 1, "multiple- and single-property interaction: multiple-listener removal");
-
- /* Test: hasListeners() with multiple cases */
- if(s.support.hasListeners("foo")) {
- System.out.println("Success: hasListeners() returning true");
- } else {
- System.out.println("FAILURE: hasListeners() returning true");
- }
- if(s.support.hasListeners("bar")) {
- System.out.println("FAILURE: hasListeners() returning false");
- } else {
- System.out.println("Success: hasListeners() returning false");
- }
- s.addPropertyChangeListener(l);
- if(s.support.hasListeners("bar")) {
- System.out.println("Success: hasListeners() with all-event listeners");
- } else {
- System.out.println("FAILURE: hasListeners() with all-event listeners");
- }
- }
-
- public static void main(String[] args) {
- new PropertyChangeSupportTest().run();
- }
-} \ No newline at end of file
diff --git a/libjava/classpath/test/java.io/BufferedByteOutputStreamTest.java b/libjava/classpath/test/java.io/BufferedByteOutputStreamTest.java
deleted file mode 100644
index e2785e6..0000000
--- a/libjava/classpath/test/java.io/BufferedByteOutputStreamTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*************************************************************************
-/* BufferedByteOutputStreamTest.java -- Test {Buffered,ByteArray}OutputStream
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-/**
- * Class to test BufferedOutputStream and ByteOutputStream
- *
- * @version 0.0
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class BufferedByteOutputStreamTest
-{
-
-public static void
-main(String argv[])
-{
- System.out.println("Started test of BufferedOutputStream and ByteArrayOutputStream");
-
- try
- {
- System.out.println("Test 1: Write Tests");
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream(24);
- BufferedOutputStream bos = new BufferedOutputStream(baos, 12);
-
- String str = "The Kroger on College Mall Rd. in Bloomington " +
- "used to sell Kroger brand froze pizzas for 68 cents. " +
- "I ate a lot of those in college. It was kind of embarrassing " +
- "walking out of the grocery with nothing but 15 frozen pizzas.\n";
-
- boolean passed = true;
-
- byte[] buf = str.getBytes();
- bos.write(buf, 0, 5);
- if (baos.toByteArray().length != 0)
- {
- passed = false;
- System.out.println("ByteArrayOutputStream has too many bytes #1");
- }
- bos.write(buf, 5, 8);
- bos.write(buf, 13, 12);
- bos.write(buf[25]);
- bos.write(buf, 26, buf.length - 26);
- bos.close();
-
- String str2 = new String(baos.toByteArray());
- if (!str.equals(str2))
- {
- passed = false;
- System.out.println("Unexpected string: " + str2);
- }
-
- if (passed)
- System.out.println("PASSED: Write Tests");
- else
- System.out.println("FAILED: Write Tests");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Write Tests: " + e);
- }
-
- System.out.println("Finished test of BufferedOutputStream and ByteArrayOutputStream");
-}
-
-} // class BufferedByteOutputStreamTest
-
diff --git a/libjava/classpath/test/java.io/BufferedCharWriterTest.java b/libjava/classpath/test/java.io/BufferedCharWriterTest.java
deleted file mode 100644
index 2893b4b..0000000
--- a/libjava/classpath/test/java.io/BufferedCharWriterTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*************************************************************************
-/* BufferedCharWriterTest.java -- Test {Buffered,CharArray}Writer
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-/**
- * Class to test BufferedWriter and CharArrayWriter
- *
- * @version 0.0
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class BufferedCharWriterTest
-{
-
-public static void
-main(String argv[])
-{
- System.out.println("Started test of BufferedWriter and CharArrayWriter");
-
- try
- {
- System.out.println("Test 1: Write Tests");
-
- CharArrayWriter caw = new CharArrayWriter(24);
- BufferedWriter bw = new BufferedWriter(caw, 12);
-
- String str = "I used to live right behind this super-cool bar in\n" +
- "Chicago called Lounge Ax. They have the best music of pretty\n" +
- "much anyplace in town with a great atmosphere and $1 Huber\n" +
- "on tap. I go to tons of shows there, even though I moved.\n";
-
- boolean passed = true;
-
- char[] buf = new char[str.length()];
- str.getChars(0, str.length(), buf, 0);
-
- bw.write(buf, 0, 5);
- if (caw.toCharArray().length != 0)
- {
- passed = false;
- System.out.println("CharArrayWriter has too many bytes #1");
- }
- bw.write(buf, 5, 8);
- bw.write(buf, 13, 12);
- bw.write(buf[25]);
- bw.write(buf, 26, buf.length - 26);
- bw.close();
-
- String str2 = new String(caw.toCharArray());
- if (!str.equals(str2))
- {
- passed = false;
- System.out.println("Unexpected string: " + str2);
- }
-
- if (passed)
- System.out.println("PASSED: Write Tests");
- else
- System.out.println("FAILED: Write Tests");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Write Tests: " + e);
- }
-
- System.out.println("Finished test of BufferedOutputStream and ByteArrayOutputStream");
-}
-
-} // class BufferedByteOutputStreamTest
-
diff --git a/libjava/classpath/test/java.io/BufferedInputStreamTest.java b/libjava/classpath/test/java.io/BufferedInputStreamTest.java
deleted file mode 100644
index c7d73e3..0000000
--- a/libjava/classpath/test/java.io/BufferedInputStreamTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*************************************************************************
-/* BufferedInputStreamTest.java -- Tests BufferedInputStream's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class BufferedInputStreamTest extends BufferedInputStream
-{
-
-public
-BufferedInputStreamTest(InputStream in, int size)
-{
- super(in, size);
-}
-
-public static int
-marktest(InputStream ins) throws IOException
-{
- BufferedInputStream bis = new BufferedInputStream(ins, 15);
-
- int bytes_read;
- int total_read = 0;
- byte[] buf = new byte[12];
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bis.mark(75);
- bis.read();
- bis.read(buf);
- bis.read(buf);
- bis.read(buf);
- bis.reset();
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bis.mark(555);
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bis.reset();
-
- bis.read(buf);
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- bis.mark(14);
-
- bis.read(buf);
-
- bis.reset();
-
- bytes_read = bis.read(buf);
- total_read += bytes_read;
- System.out.print(new String(buf, 0, bytes_read));
-
- while ((bytes_read = bis.read(buf)) != -1)
- {
- System.out.print(new String(buf, 0, bytes_read));
- total_read += bytes_read;
- }
-
- return(total_read);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of BufferedInputStream");
-
- try
- {
- System.out.println("Test 1: Protected Variables Test");
-
- String str = "This is a test line of text for this pass";
-
- StringBufferInputStream sbis = new StringBufferInputStream(str);
- BufferedInputStreamTest bist = new BufferedInputStreamTest(sbis, 12);
-
- bist.read();
- bist.mark(5);
-
- boolean passed = true;
-
- if (bist.buf.length != 12)
- {
- passed = false;
- System.out.println("buf.length is wrong. Expected 12, but got " +
- bist.buf.length);
- }
- if (bist.count != 12)
- {
- passed = false;
- System.out.println("count is wrong. Expected 12, but got " +
- bist.count);
- }
- if (bist.marklimit != 5)
- {
- passed = false;
- System.out.println("marklimit is wrong. Expected 5, but got " +
- bist.marklimit);
- }
- if (bist.markpos != 1)
- {
- passed = false;
- System.out.println("markpos is wrong. Expected 5, but got " +
- bist.markpos);
- }
- if (bist.pos != 1)
- {
- passed = false;
- System.out.println("pos is wrong. Expected 1, but got " +
- bist.pos);
- }
-
- if (passed)
- System.out.println("PASSED: Protected Variables Test");
- else
- System.out.println("FAILED: Protected Variables Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Protected Variables Test: " + e);
- }
-
- try
- {
- System.out.println("Test 2: Simple Read Test");
-
- String str = "One of my 8th grade teachers was Mr. Russell.\n" +
- "He used to start each year off by telling the class that the\n" +
- "earth was flat. He did it to teach people to question\n" +
- "things they are told. But everybody knew that he did it\n" +
- "so it lost its effect.\n";
-
- StringBufferInputStream sbis = new StringBufferInputStream(str);
- BufferedInputStream bis = new BufferedInputStream(sbis, 15);
-
- byte[] buf = new byte[12];
- int bytes_read;
- while((bytes_read = bis.read(buf)) != -1)
- System.out.print(new String(buf, 0, bytes_read));
-
- bis.close();
- System.out.println("PASSED: Simple Read Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Simple Read Test: " + e);
- }
-
- try
- {
- System.out.println("Test 3: First mark/reset Test");
-
- String str = "My 6th grade teacher was named Mrs. Hostetler.\n" +
- "She had a whole list of rules that you were supposed to follow\n" +
- "in class and if you broke a rule she would make you write the\n" +
- "rules out several times. The number varied depending on what\n" +
- "rule you broke. Since I knew I would get in trouble, I would\n" +
- "just go ahead and write out a few sets on the long school bus\n" +
- "ride home so that if had to stay in during recess and write\n" +
- "rules, five minutes later I could just tell the teacher I was\n" +
- "done so I could go outside and play kickball.\n";
-
- StringBufferInputStream sbis = new StringBufferInputStream(str);
-
- int total_read = marktest(sbis);
-
- if (total_read == str.length())
- System.out.println("PASSED: First mark/reset Test");
- else
- System.out.println("FAILED: First mark/reset Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: First mark/reset Test: " + e);
- }
-
- try
- {
- System.out.println("Test 4: Second mark/reset Test");
-
- String str = "My first day of college was fun. A bunch of us\n" +
- "got pretty drunk, then this guy named Rick Flake (I'm not\n" +
- "making that name up) took a piss in the bed of a Physical\n" +
- "Plant dept pickup truck. Later on we were walking across\n" +
- "campus, saw a cop, and took off running for no reason.\n" +
- "When we got back to the dorm we found an even drunker guy\n" +
- "passed out in a shopping cart outside.\n";
-
- ByteArrayInputStream sbis = new ByteArrayInputStream(str.getBytes());
-
- int total_read = marktest(sbis);
-
- if (total_read == str.length())
- System.out.println("PASSED: Second mark/reset Test");
- else
- System.out.println("FAILED: Second mark/reset Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Second mark/reset Test: " + e);
- }
-
- System.out.println("Finished test of BufferedInputStream");
-} // main
-
-} // class BufferedInputStreamTest
-
diff --git a/libjava/classpath/test/java.io/BufferedReaderTest.java b/libjava/classpath/test/java.io/BufferedReaderTest.java
deleted file mode 100644
index d3c1d4f..0000000
--- a/libjava/classpath/test/java.io/BufferedReaderTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*************************************************************************
-/* BufferedReaderTest.java -- Tests BufferedReader's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class BufferedReaderTest extends CharArrayReader
-{
-
-// Hehe. We override CharArrayReader.markSupported() in order to return
-// false so that we can test BufferedReader's handling of mark/reset in
-// both the case where the underlying stream does and does not support
-// mark/reset
-public boolean
-markSupported()
-{
- return(false);
-}
-
-public
-BufferedReaderTest(char[] buf)
-{
- super(buf);
-}
-
-public static int
-marktest(Reader ins) throws IOException
-{
- BufferedReader br = new BufferedReader(ins, 15);
-
- int chars_read;
- int total_read = 0;
- char[] buf = new char[12];
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- br.mark(75);
- br.read();
- br.read(buf);
- br.read(buf);
- br.read(buf);
- br.reset();
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- br.mark(555);
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- br.reset();
-
- br.read(buf);
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- br.mark(14);
-
- br.read(buf);
-
- br.reset();
-
- chars_read = br.read(buf);
- total_read += chars_read;
- System.out.print(new String(buf, 0, chars_read));
-
- while ((chars_read = br.read(buf)) != -1)
- {
- System.out.print(new String(buf, 0, chars_read));
- total_read += chars_read;
- }
-
- return(total_read);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of BufferedReader");
-
- try
- {
- System.out.println("Test 1: Simple Read Test");
-
- String str = "My 5th grade teacher was named Mr. Thompson. Terry\n" +
- "George Thompson to be precise. He had these sideburns like\n" +
- "Isaac Asimov's, only uglier. One time he had a contest and said\n" +
- "that if any kid who could lift 50lbs worth of weights on a barbell\n" +
- "all the way over their head, he would shave it off. Nobody could\n" +
- "though. One time I guess I made a comment about how stupid his\n" +
- "sideburns worked and he not only kicked me out of class, he called\n" +
- "my mother. Jerk.\n";
-
- StringReader sr = new StringReader(str);
- BufferedReader br = new BufferedReader(sr, 15);
-
- char[] buf = new char[12];
- int chars_read;
- while((chars_read = br.read(buf)) != -1)
- System.out.print(new String(buf, 0, chars_read));
-
- br.close();
- System.out.println("PASSED: Simple Read Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Simple Read Test: " + e);
- }
-
- try
- {
- System.out.println("Test 2: First mark/reset Test");
-
- String str = "Growing up in a rural area brings such delights. One\n" +
- "time my uncle called me up and asked me to come over and help him\n" +
- "out with something. Since he lived right across the field, I\n" +
- "walked right over. Turned out he wanted me to come down to the\n" +
- "barn and help him castrate a calf. Oh, that was fun. Not.\n";
-
- StringReader sr = new StringReader(str);
-// BufferedReader br = new BufferedReader(sr);
-
- int total_read = marktest(sr);
-
- if (total_read == str.length())
- System.out.println("PASSED: First mark/reset Test");
- else
- System.out.println("FAILED: First mark/reset Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: First mark/reset Test: " + e);
- }
-
- try
- {
- System.out.println("Test 3: Second mark/reset Test");
-
- String str = "Growing up we heated our house with a wood stove. That\n" +
- "thing could pump out some BTU's, let me tell you. No matter how\n" +
- "cold it got outside, it was always warm inside. Of course the\n" +
- "downside is that somebody had to chop the wood for the stove. That\n" +
- "somebody was me. I was slave labor. My uncle would go back and\n" +
- "chain saw up dead trees and I would load the wood in wagons and\n" +
- "split it with a maul. Somehow my no account brother always seemed\n" +
- "to get out of having to work.\n";
-
- char[] buf = new char[str.length()];
- str.getChars(0, str.length(), buf, 0);
- BufferedReaderTest brt = new BufferedReaderTest(buf);
-// BufferedReader br = new BufferedReader(car);
-
- int total_read = marktest(brt);
-
- if (total_read == str.length())
- System.out.println("PASSED: Second mark/reset Test");
- else
- System.out.println("FAILED: Second mark/reset Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Second mark/reset Test: " + e);
- }
-
- System.out.println("Finished test of BufferedReader");
-} // main
-
-} // class BufferedReaderTest
-
diff --git a/libjava/classpath/test/java.io/ByteArrayInputStreamTest.java b/libjava/classpath/test/java.io/ByteArrayInputStreamTest.java
deleted file mode 100644
index 1b44985..0000000
--- a/libjava/classpath/test/java.io/ByteArrayInputStreamTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*************************************************************************
-/* ByteArrayInputStreamTest.java -- Test ByteArrayInputStream's of course
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class ByteArrayInputStreamTest extends ByteArrayInputStream
-{
-
-public
-ByteArrayInputStreamTest(byte[] b)
-{
- super(b);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of ByteArrayInputStream.");
- System.out.flush();
-
- String str = "My sophomore year of college I moved out of the dorms. I\n" +
- "moved in with three friends into a brand new townhouse in east\n" +
- "Bloomington at 771 Woodbridge Drive. To this day that was the\n" +
- "nicest place I've ever lived.\n";
-
- byte[] str_bytes = str.getBytes();
-
- System.out.println("Test 1: Protected Variables");
-
- ByteArrayInputStreamTest bais = new ByteArrayInputStreamTest(str_bytes);
- byte[] read_buf = new byte[12];
-
- try
- {
- bais.read(read_buf);
- bais.mark(0);
-
- boolean passed = true;
-
- if (bais.mark != read_buf.length)
- {
- passed = false;
- System.out.println("The mark variable is wrong. Expected " +
- read_buf.length + " and got " + bais.mark);
- }
- bais.read(read_buf);
- if (bais.pos != (read_buf.length * 2))
- {
- passed = false;
- System.out.println("The pos variable is wrong. Expected 24 and got " +
- bais.pos);
- }
- if (bais.count != str_bytes.length)
- {
- passed = false;
- System.out.println("The count variable is wrong. Expected " +
- str_bytes.length + " and got " + bais.pos);
- }
- if (bais.buf != str_bytes)
- {
- passed = false;
- System.out.println("The buf variable is not correct");
- }
-
- if (passed)
- System.out.println("PASSED: Protected Variables Test");
- else
- System.out.println("FAILED: Protected Variables Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Protected Variables Test: " + e);
- }
-
- System.out.println("Test 2: Simple Read Test");
-
- bais = new ByteArrayInputStreamTest(str_bytes);
-
- try
- {
- int bytes_read, total_read = 0;
- while ((bytes_read = bais.read(read_buf, 0, read_buf.length)) != -1)
- {
- System.out.print(new String(read_buf, 0, bytes_read));
- total_read += bytes_read;
- }
-
- bais.close();
- if (total_read == str.length())
- System.out.println("PASSED: Simple Read Test");
- else
- System.out.println("FAILED: Simple Read Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Simple Read Test: " + e);
- }
-
- System.out.println("Test 3: mark/reset/available/skip test");
- bais = new ByteArrayInputStreamTest(str_bytes);
-
- try
- {
- boolean passed = true;
-
- bais.read(read_buf);
- if (bais.available() != (str_bytes.length - read_buf.length))
- {
- passed = false;
- System.out.println("available() reported " + bais.available() +
- " and " + (str_bytes.length - read_buf.length) +
- " was expected");
- }
-
- if (bais.skip(5) != 5)
- {
- passed = false;
- System.out.println("skip() didn't work");
- }
- if (bais.available() != (str_bytes.length - (read_buf.length + 5)))
- {
- passed = false;
- System.out.println("skip() lied");
- }
-
- if (!bais.markSupported())
- {
- passed = false;
- System.out.println("markSupported() should have returned true but returned false");
- }
-
- bais.mark(0);
- int availsave = bais.available();
- bais.read();
- bais.reset();
- if (bais.available() != availsave)
- {
- passed = false;
- System.out.println("mark/reset failed to work");
- }
-
- if (passed)
- System.out.println("PASSED: mark/reset/available/skip test");
- else
- System.out.println("FAILED: mark/reset/available/skip test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: mark/reset/available/skip test: " + e);
- }
-
- System.out.println("Finished ByteArrayInputStream test");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.io/CharArrayReaderTest.java b/libjava/classpath/test/java.io/CharArrayReaderTest.java
deleted file mode 100644
index 8b652b8..0000000
--- a/libjava/classpath/test/java.io/CharArrayReaderTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*************************************************************************
-/* CharArrayReaderTest.java -- Test CharArrayReaders's of course
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class CharArrayReaderTest extends CharArrayReader
-{
-
-public
-CharArrayReaderTest(char[] b)
-{
- super(b);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of CharArrayReader.");
- System.out.flush();
-
- String str = "In junior high, I did a lot writing. I wrote a science\n" +
- "fiction novel length story that was called 'The Destruction of\n" +
- "Planet Earth'. All the characters in the story were my friends \n" +
- "from school because I couldn't think up any cool names.";
-
- char[] str_chars = new char[str.length()];
- str.getChars(0, str.length(), str_chars, 0);
-
- System.out.println("Test 1: Protected Variables");
-
- CharArrayReaderTest car = new CharArrayReaderTest(str_chars);
- char[] read_buf = new char[12];
-
- try
- {
- car.read(read_buf);
- car.mark(0);
-
- boolean passed = true;
-
- if (car.markedPos != read_buf.length)
- {
- passed = false;
- System.out.println("The mark variable is wrong. Expected " +
- read_buf.length + " and got " + car.markedPos);
- }
- car.read(read_buf);
- if (car.pos != (read_buf.length * 2))
- {
- passed = false;
- System.out.println("The pos variable is wrong. Expected 24 and got " +
- car.pos);
- }
- if (car.count != str_chars.length)
- {
- passed = false;
- System.out.println("The count variable is wrong. Expected " +
- str_chars.length + " and got " + car.pos);
- }
- if (car.buf != str_chars)
- {
- passed = false;
- System.out.println("The buf variable is not correct");
- }
-
- if (passed)
- System.out.println("PASSED: Protected Variables Test");
- else
- System.out.println("FAILED: Protected Variables Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Protected Variables Test: " + e);
- }
-
- System.out.println("Test 2: Simple Read Test");
-
- car = new CharArrayReaderTest(str_chars);
-
- try
- {
- int chars_read, total_read = 0;
- while ((chars_read = car.read(read_buf, 0, read_buf.length)) != -1)
- {
- System.out.print(new String(read_buf, 0, chars_read));
- total_read += chars_read;
- }
-
- car.close();
- if (total_read == str.length())
- System.out.println("PASSED: Simple Read Test");
- else
- System.out.println("FAILED: Simple Read Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Simple Read Test: " + e);
- }
-
- System.out.println("Test 3: mark/reset/available/skip test");
- car = new CharArrayReaderTest(str_chars);
-
- try
- {
- boolean passed = true;
-
- car.read(read_buf);
- if (!car.ready())
- {
- passed = false;
- System.out.println("ready() reported false and should have " +
- "reported true.");
- }
-
- if (car.skip(5) != 5)
- {
- passed = false;
- System.out.println("skip() didn't work");
- }
-
- if (!car.markSupported())
- {
- passed = false;
- System.out.println("markSupported() should have returned true but returned false");
- }
-
- car.mark(0);
- int pos_save = car.pos;
- car.read();
- car.reset();
- if (car.pos != pos_save)
- {
- passed = false;
- System.out.println("mark/reset failed to work");
- }
-
- if (passed)
- System.out.println("PASSED: mark/reset/available/skip test");
- else
- System.out.println("FAILED: mark/reset/available/skip test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: mark/reset/available/skip test: " + e);
- }
-
- System.out.println("Finished CharArrayReader test");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.io/DataInputOutputTest.java b/libjava/classpath/test/java.io/DataInputOutputTest.java
deleted file mode 100644
index dd03fb0..0000000
--- a/libjava/classpath/test/java.io/DataInputOutputTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*************************************************************************
-/* DataInputOutputTest.java -- Tests Data{Input,Output}Stream's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-// Write some data using DataOutput and read it using DataInput.
-
-public class DataInputOutputTest
-{
-
-public static void
-runReadTest(String filename, int seq, String testname)
-{
- try
- {
- System.out.println("Test " + seq + ": " + testname);
-
- FileInputStream fis = new FileInputStream(filename);
- DataInputStream dis = new DataInputStream(fis);
-
- boolean passed = true;
-
- boolean b = dis.readBoolean();
- if (b != true)
- {
- passed = false;
- System.out.println("Failed to read boolean. Expected true and got false");
- }
- b = dis.readBoolean();
- if (b != false)
- {
- passed = false;
- System.out.println("Failed to read boolean. Expected false and got true");
- }
- byte bt = dis.readByte();
- if (bt != 8)
- {
- passed = false;
- System.out.println("Failed to read byte. Expected 8 and got "+ bt);
- }
- bt = dis.readByte();
- if (bt != -122)
- {
- passed = false;
- System.out.println("Failed to read byte. Expected -122 and got "+ bt);
- }
- char c = dis.readChar();
- if (c != 'a')
- {
- passed = false;
- System.out.println("Failed to read char. Expected a and got " + c);
- }
- c = dis.readChar();
- if (c != '\uE2D2')
- {
- passed = false;
- System.out.println("Failed to read char. Expected \\uE2D2 and got " + c);
- }
- short s = dis.readShort();
- if (s != 32000)
- {
- passed = false;
- System.out.println("Failed to read short. Expected 32000 and got " + s);
- }
- int i = dis.readInt();
- if (i != 8675309)
- {
- passed = false;
- System.out.println("Failed to read int. Expected 8675309 and got " + i);
- }
- long l = dis.readLong();
- if (l != 696969696969L)
- {
- passed = false;
- System.out.println("Failed to read long. Expected 696969696969 and got " + l);
- }
- float f = dis.readFloat();
- if (!Float.toString(f).equals("3.1415"))
- {
- passed = false;
- System.out.println("Failed to read float. Expected 3.1415 and got " + f);
- }
- double d = dis.readDouble();
- if (d != 999999999.999)
- {
- passed = false;
- System.out.println("Failed to read double. Expected 999999999.999 and got " + d);
- }
- String str = dis.readUTF();
- if (!str.equals("Testing code is such a boring activity but it must be done"))
- {
- passed = false;
- System.out.println("Read unexpected String: " + str);
- }
- str = dis.readUTF();
- if (!str.equals("a-->\u01FF\uA000\u6666\u0200RRR"))
- {
- passed = false;
- System.out.println("Read unexpected String: " + str);
- }
-
- if (passed)
- System.out.println("PASSED: " + testname + " read test");
- else
- System.out.println("FAILED: " + testname + " read test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: " + testname + " read test: " + e);
- }
-
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of DataInputStream and DataOutputStream");
-
- try
- {
- System.out.println("Test 1: DataOutputStream write test");
-
- FileOutputStream fos = new FileOutputStream("dataoutput.out");
- DataOutputStream dos = new DataOutputStream(fos);
-
- dos.writeBoolean(true);
- dos.writeBoolean(false);
- dos.writeByte((byte)8);
- dos.writeByte((byte)-122);
- dos.writeChar((char)'a');
- dos.writeChar((char)'\uE2D2');
- dos.writeShort((short)32000);
- dos.writeInt((int)8675309);
- dos.writeLong(696969696969L);
- dos.writeFloat((float)3.1415);
- dos.writeDouble((double)999999999.999);
- dos.writeUTF("Testing code is such a boring activity but it must be done");
- dos.writeUTF("a-->\u01FF\uA000\u6666\u0200RRR");
- dos.close();
-
- // We'll find out if this was really right later, but conditionally
- // report success for now
- System.out.println("PASSED: DataOutputStream write test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: DataOutputStream write test: " + e);
- }
-
- runReadTest("dataoutput.out", 2, "Read of JCL written data file");
- runReadTest("dataoutput-jdk.out", 3, "Read of JDK written data file");
-
-} // main
-
-} // class DataInputOutputTest
-
diff --git a/libjava/classpath/test/java.io/FileInputStreamTest.java b/libjava/classpath/test/java.io/FileInputStreamTest.java
deleted file mode 100644
index e42b93e..0000000
--- a/libjava/classpath/test/java.io/FileInputStreamTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*************************************************************************
-/* FileInputStreamTest.java -- Test of FileInputStream class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class FileInputStreamTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of FileInputStream");
-
- System.out.println("Test 1: File Read Test");
- try
- {
- FileInputStream fis = new FileInputStream("/etc/services");
-
- System.out.println("Available: " + fis.available());
- System.out.println("FileDescriptor: " + fis.getFD());
- System.out.println("Dumping file. Note that first 100 bytes will be skipped");
- fis.skip(100);
-
- byte[] buf = new byte[32];
- int bytes_read = 0;
-
- while((bytes_read = fis.read(buf)) != -1)
- System.out.print(new String(buf, 0, bytes_read));
-
- fis.close();
- System.out.println("PASSED: File read test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: File read test: " + e);
- }
-
- System.out.println("Test 2: File Not Found Test");
- try
- {
- FileInputStream fis = new FileInputStream("/etc/yourmommasawhore");
- System.out.println("FAILED: File Not Found Test");
- }
- catch (FileNotFoundException e)
- {
- System.out.println("PASSED: File Not Found Test");
- }
-
- System.out.println("Finished test of FileInputStream");
-}
-
-} // class FileInputStreamTest
-
diff --git a/libjava/classpath/test/java.io/FileOutputStreamTest.java b/libjava/classpath/test/java.io/FileOutputStreamTest.java
deleted file mode 100644
index 1917f4e..0000000
--- a/libjava/classpath/test/java.io/FileOutputStreamTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*************************************************************************
-/* FileOutputStreamTest.java -- Test of FileOutputStream class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class FileOutputStreamTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of FileOutputStream");
-
- System.out.println("Test 1: File Write Test");
- try
- {
- String s1 = "Ok, what are some of the great flame wars that we have " +
- "had lately. Let us see, there was emacs vs. xemacs, " +
- "KDE vs. Gnome, and Tcl vs. Guile";
-
- String s2 = "Operating systems I have known include: solaris, sco, " +
- "hp-ux, linux, freebsd, winblows, os400, mvs, tpf, its, multics";
-
- //File f = File.createTempFile("fostest", new File("/tmp"));
- File f = new File("/tmp/000000");
- FileOutputStream fos = new FileOutputStream(f.getPath());
-
- fos.write(s1.getBytes(), 0, 32);
- fos.write(s1.getBytes(), 32, s1.getBytes().length - 32);
- fos.close();
-
- fos = new FileOutputStream(f.getPath(), true);
- fos.write(s2.getBytes());
- fos.close();
-
- if (f.length() != (s1.length() + s2.length()))
- throw new IOException("Incorrect number of bytes written");
-
- f.delete();
-
- System.out.println("PASSED: File Write Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: File Write Test: " + e);
- }
-
- System.out.println("Test 2: Permission Denied Test");
- try
- {
- FileOutputStream fos = new FileOutputStream("/etc/newtempfile");
- System.out.println("FAILED: Permission Denied Test");
- }
- catch (IOException e)
- {
- System.out.println("PASSED: Permission Denied Test: " + e);
- }
-
- System.out.println("Finished test of FileOutputStream");
-}
-
-} // class FileOutputStreamTest
-
diff --git a/libjava/classpath/test/java.io/FileReaderTest.java b/libjava/classpath/test/java.io/FileReaderTest.java
deleted file mode 100644
index e22cec5..0000000
--- a/libjava/classpath/test/java.io/FileReaderTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*************************************************************************
-/* FileReaderTest.java -- Test of FileReader and InputStreamReader classes
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class FileReaderTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of FileReader and InputStreamReader");
-
- System.out.println("Test 1: File Read Test");
- try
- {
- FileReader fr = new FileReader("/etc/services");
-
- System.out.println("Dumping file. Note that first 100 bytes will be skipped");
- fr.skip(100);
-
- char[] buf = new char[32];
- int chars_read = 0;
-
- while((chars_read = fr.read(buf)) != -1)
- System.out.print(new String(buf, 0, chars_read));
-
- fr.close();
- System.out.println("PASSED: File read test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: File read test: " + e);
- }
-
- System.out.println("Test 2: File Not Found Test");
- try
- {
- FileReader fr = new FileReader("/etc/yourmommasawhore");
- System.out.println("FAILED: File Not Found Test");
- }
- catch (FileNotFoundException e)
- {
- System.out.println("PASSED: File Not Found Test");
- }
-
- System.out.println("Finished test of FileReader");
-}
-
-} // class FileReaderTest
-
diff --git a/libjava/classpath/test/java.io/FileTest.java b/libjava/classpath/test/java.io/FileTest.java
deleted file mode 100644
index 838b99e..0000000
--- a/libjava/classpath/test/java.io/FileTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*************************************************************************
-/* File.java -- Tests File class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class FileTest
-{
-
-static PrintWriter pw;
-
-public static void
-dumpFile(File f) throws IOException
-{
- pw.println("Name: " + f.getName());
- pw.println("Parent: " + f.getParent());
- pw.println("Path: " + f.getPath());
- pw.println("Absolute: " + f.getAbsolutePath());
- pw.println("Canonical: " + f.getCanonicalPath());
- pw.println("String: " + f.toString());
-}
-
-public static void
-deleteTempDirs() throws IOException
-{
- File f = new File("tempfiletest/tmp/tmp");
- if (!f.delete())
- throw new IOException("Could not delete " + f.getPath());
-
- f = new File("tempfiletest/tmp");
- if (!f.delete())
- throw new IOException("Could not delete " + f.getPath());
-
- f = new File("tempfiletest/");
- if (!f.delete())
- throw new IOException("Could not delete " + f.getPath());
-}
-
-public static void main(String[] argv)
-{
- System.out.println("Started test of File");
-
- // This test writes a bunch of things to a file. That file should
- // be "diff-ed" against one generated when this test is run against
- // the JDK java.io package.
- System.out.println("Test 1: Path Operations Test");
- try
- {
- pw = new PrintWriter(new OutputStreamWriter(new
- FileOutputStream("./file-test.out")));
-
- dumpFile(new File("/"));
- dumpFile(new File("~arenn/foo"));
- dumpFile(new File("foo"));
- dumpFile(new File("../../../jcl/"));
- dumpFile(new File("/tmp/bar.txt"));
- dumpFile(new File("/usr"));
- dumpFile(new File("../.."));
- pw.flush();
-
- File f = new File("gimme");
- if (f.isAbsolute())
- throw new IOException("isAbsolute() failed");
-
- f = new File("/etc/services");
- if (!f.isFile())
- throw new IOException("isFile() failed");
-
- pw.println("length: " + f.length());
- pw.println("lastModified: " + f.lastModified());
- pw.println("hashCode: " + f.hashCode());
-
- f = new File("/etc/");
- if (!f.isDirectory())
- throw new IOException("isDirectory() failed");
-
- pw.close();
- System.out.println("PASSED: Conditionally Passed Path Operations Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Path Operations Test: " + e);
- pw.close();
- }
-
- System.out.println("Test 2: File/Directory Manipulation Test");
- try
- {
- File f = new File("filetest");
- if (!f.exists())
- throw new IOException("The filetest directory doesn't exist");
-
- String[] filelist = f.list();
- if ((filelist == null) || (filelist.length != 3))
- throw new IOException("Failed to read directory list");
-
- for (int i = 0; i < filelist.length; i++)
- System.out.println(filelist[i]);
-
- System.out.println("Listing /etc/");
- f = new File("/etc/");
- filelist = f.list();
- for (int i = 0; i < filelist.length; i++)
- System.out.println(filelist[i]);
-
- f = new File("tempfiletest/tmp/tmp");
- if (!f.mkdirs())
- throw new IOException("Failed to create directories: " + f.getPath());
-
- deleteTempDirs();
-
- f = new File("tempfiletest/tmp/tmp/");
- if (!f.mkdirs())
- throw new IOException("Failed to create directories: " + f.getPath());
-
- deleteTempDirs();
-
- //f = File.createTempFile("tempfile#old", new File("."));
- f = new File("000000");
-
- if (!f.renameTo(new File("tempfiletemp")))
- throw new IOException("Failed to rename file: " + f.getPath());
-
- if (!f.delete())
- throw new IOException("Failed to delete file: " + f.getPath());
-
- System.out.println("PASSED: File/Directory Manipulation Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: File/Directory Manipulation Test: " + e);
- }
-
- System.out.println("Test 3: Read/Write Permissions Test");
- try
- {
- if ((new File("/")).canWrite() == true)
- throw new IOException("Permission to write / unexpectedly");
-
- if ((new File("/etc/services")).canRead() == false)
- throw new IOException("No permission to read /etc/services");
-
- System.out.println("PASSED: Read/Write Permissions Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Read/Write Permissions Test: " + e);
- }
-
- System.out.println("Test 4: Name Comparison Tests");
- try
- {
- File f1, f2;
-
- f1 = new File("/etc/");
- f2 = new File("/etc/");
- if (!f1.equals(f2))
- throw new IOException(f1 + " " + f2);
-
- f2 = new File("/etc");
- if (f1.equals(f2))
- throw new IOException(f1 + " " + f2);
-/*
- f1 = new File("a");
- f2 = new File("b");
- if (f1.compareTo(f2) >= 0)
- throw new IOException(f1 + " " + f2);
-
- f1 = new File("z");
- f2 = new File("y");
- if (f1.compareTo(f2) <= 0)
- throw new IOException(f1 + " " + f2);
-
- f1 = new File("../../jcl/");
- f2 = new File(".././.././jcl/.");
- if (f1.compareTo(f2) != 0)
- throw new IOException(f1 + " " + f2);
-*/
- System.out.println("PASSED: Name Comparison Tests");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Name Comparison Tests: " + e);
- }
-
- System.out.println("Finished test of File");
-}
-}
-
diff --git a/libjava/classpath/test/java.io/FileWriterTest.java b/libjava/classpath/test/java.io/FileWriterTest.java
deleted file mode 100644
index 3602c04..0000000
--- a/libjava/classpath/test/java.io/FileWriterTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*************************************************************************
-/* FileWriterTest.java -- Test of FileWriter and OutputStreamWriter classes
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class FileWriterTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of FileWriter and OutputStreamWriter");
-
- System.out.println("Test 1: File Write Test");
- try
- {
- String s1 = "Ok, what are some of the great flame wars that we have " +
- "had lately. Let us see, there was emacs vs. xemacs, " +
- "KDE vs. Gnome, and Tcl vs. Guile";
-
- String s2 = "Operating systems I have known include: solaris, sco, " +
- "hp-ux, linux, freebsd, winblows, os400, mvs, tpf, its, multics";
-
- //File f = File.createTempFile("fostest", new File("/tmp"));
- File f = new File("/tmp/000001");
- FileWriter fw = new FileWriter(f.getPath());
-
- char buf[] = new char[s1.length()];
- s1.getChars(0, s1.length(), buf, 0);
- fw.write(buf, 0, 32);
- fw.write(buf, 32, s1.getBytes().length - 32);
- fw.close();
-
- fw = new FileWriter(f.getPath(), true);
- buf = new char[s2.length()];
- s2.getChars(0, s2.length(), buf, 0);
- fw.write(buf);
- fw.close();
-
- if (f.length() != (s1.length() + s2.length()))
- throw new IOException("Incorrect number of chars written");
-
- f.delete();
-
- System.out.println("PASSED: File Write Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: File Write Test: " + e);
- }
-
- System.out.println("Test 2: Permission Denied Test");
- try
- {
- FileWriter fw = new FileWriter("/etc/newtempfile");
- System.out.println("FAILED: Permission Denied Test");
- }
- catch (IOException e)
- {
- System.out.println("PASSED: Permission Denied Test: " + e);
- }
-
- System.out.println("Finished test of FileWriter");
-}
-
-} // class FileWriter
-
diff --git a/libjava/classpath/test/java.io/HairyGraph.java b/libjava/classpath/test/java.io/HairyGraph.java
deleted file mode 100644
index ca9a713..0000000
--- a/libjava/classpath/test/java.io/HairyGraph.java
+++ /dev/null
@@ -1,75 +0,0 @@
-
-import java.io.*;
-
-class GraphNode implements Serializable
-{
- GraphNode( String s )
- {
- this.s = s;
- }
-
- public String toString()
- {
- return this.s;
- }
-
- String s;
- GraphNode a;
- GraphNode b;
- GraphNode c;
- GraphNode d;
-}
-
-
-public class HairyGraph implements Serializable
-{
- GraphNode A;
- GraphNode B;
- GraphNode C;
- GraphNode D;
-
- HairyGraph()
- {
- A = new GraphNode( "A" );
- B = new GraphNode( "B" );
- C = new GraphNode( "C" );
- D = new GraphNode( "D" );
-
- A.a = B;
- A.b = C;
- A.c = D;
- A.d = A;
-
- B.a = C;
- B.b = D;
- B.c = A;
- B.d = B;
-
- C.a = D;
- C.b = A;
- C.c = B;
- C.d = C;
-
- D.a = A;
- D.b = B;
- D.c = C;
- D.d = D;
- }
-
- public boolean equals( Object o )
- {
- HairyGraph hg = (HairyGraph)o;
-
- return (A.a == B.d) && (A.a == C.c) && (A.a == D.b)
- && (A.b == B.a) && (A.b == C.d) && (A.b == D.c)
- && (A.c == B.b) && (A.c == C.a) && (A.c == D.d)
- && (A.d == B.c) && (A.d == C.b) && (A.d == D.a);
- }
-
- void printOneLevel( GraphNode gn )
- {
- System.out.println( "GraphNode< " + gn + ": " + gn.a + ", " + gn.b
- + ", " + gn.c + ", " + gn.d + " >" );
- }
-
-}
diff --git a/libjava/classpath/test/java.io/LineNumberInputStreamTest.java b/libjava/classpath/test/java.io/LineNumberInputStreamTest.java
deleted file mode 100644
index fbc726f..0000000
--- a/libjava/classpath/test/java.io/LineNumberInputStreamTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*************************************************************************
-/* LineNumberInputStreamTest.java -- Tests LineNumberInputStream's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class LineNumberInputStreamTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of LineNumberInputStream");
-
- try
- {
- System.out.println("Test 1: First test series");
-
- boolean passed = true;
-
- String str = "I grew up by a small town called Laconia, Indiana\r" +
- "which has a population of about 64 people. But I didn't live\r\n" +
- "in town. I lived on a gravel road about 4 miles away\n" +
- "They paved that road\n";
-
- StringBufferInputStream sbis = new StringBufferInputStream(str);
- LineNumberInputStream lnis = new LineNumberInputStream(sbis);
-
- lnis.setLineNumber(2);
-
- byte[] buf = new byte[32];
- int bytes_read;
- while ((bytes_read = lnis.read(buf)) != -1)
- {
- str = new String(buf, 0, bytes_read);
- if (str.indexOf("\r") != -1)
- {
- passed = false;
- System.out.println("\nFound an unexpected \\r\n");
- }
-
- System.out.print(str);
- }
-
- if (lnis.getLineNumber() != 6)
- {
- passed = false;
- System.out.println("Line number was wrong. Expected 6 but got " +
- lnis.getLineNumber());
- }
-
- if (passed)
- System.out.println("PASSED: First test series");
- else
- System.out.println("FAILED: First test series");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: First test series: " + e);
- }
-
- try
- {
- System.out.println("Test 2: Second test series");
-
- boolean passed = true;
-
- String str = "One time I was playing kickball on the playground\n" +
- "in 4th grade and my friends kept talking about how they smelled\n" +
- "pot. I kept asking them what they smelled because I couldn't\n" +
- "figure out how a pot could have a smell";
-
- StringBufferInputStream sbis = new StringBufferInputStream(str);
- LineNumberInputStream lnis = new LineNumberInputStream(sbis);
-
- byte[] buf = new byte[32];
- int bytes_read;
- while ((bytes_read = lnis.read(buf)) != -1)
- System.out.print(new String(buf, 0, bytes_read));
-
- if (lnis.getLineNumber() != 3)
- {
- passed = false;
- System.out.println("\nLine number was wrong. Expected 3 but got " +
- lnis.getLineNumber());
- }
-
- if (passed)
- System.out.println("PASSED: Second test series");
- else
- System.out.println("FAILED: Second test series");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Second test series: " + e);
- }
-
- System.out.println("Finished test of LineNumberInputStream");
-}
-
-} // class LineNumberInputStreamTest
-
diff --git a/libjava/classpath/test/java.io/LineNumberReaderTest.java b/libjava/classpath/test/java.io/LineNumberReaderTest.java
deleted file mode 100644
index 1a20b70..0000000
--- a/libjava/classpath/test/java.io/LineNumberReaderTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*************************************************************************
-/* LineNumberReaderTest.java -- Tests LineNumberReader's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class LineNumberReaderTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of LineNumberReader");
-
- try
- {
- System.out.println("Test 1: First test series");
-
- boolean passed = true;
-
- String str = "In 6th grade I had a crush on this girl named Leanne\n" +
- "Dean. I thought she was pretty hot. I saw her at my ten year\n" +
- "high school reunion. I still think she's pretty hot. (She's\n" +
- "married to my brother's college roommate).\n";
-
- StringReader sbr = new StringReader(str);
- LineNumberReader lnr = new LineNumberReader(sbr);
-
- lnr.setLineNumber(2);
-
- char[] buf = new char[32];
- int chars_read;
- while ((chars_read = lnr.read(buf)) != -1)
- {
- str = new String(buf, 0, chars_read);
- if (str.indexOf("\r") != -1)
- {
- passed = false;
- System.out.println("\nFound an unexpected \\r\n");
- }
-
- System.out.print(str);
- }
-
- if (lnr.getLineNumber() != 6)
- {
- passed = false;
- System.out.println("Line number was wrong. Expected 6 but got " +
- lnr.getLineNumber());
- }
-
- if (passed)
- System.out.println("PASSED: First test series");
- else
- System.out.println("FAILED: First test series");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: First test series: " + e);
- }
-
- try
- {
- System.out.println("Test 2: Second test series");
-
- boolean passed = true;
-
- String str = "Exiting off the expressway in Chicago is not an easy\n" +
- "thing to do. For example, at Fullerton you have to run a\n" +
- "gauntlet of people selling flowers, begging for money, or trying\n" +
- "to 'clean' your windshield for tips.";
-
- StringReader sbr = new StringReader(str);
- LineNumberReader lnr = new LineNumberReader(sbr);
-
- char[] buf = new char[32];
- int chars_read;
- while ((chars_read = lnr.read(buf)) != -1)
- System.out.print(new String(buf, 0, chars_read));
- System.out.println("");
-
- if (lnr.getLineNumber() != 3)
- {
- passed = false;
- System.out.println("\nLine number was wrong. Expected 3 but got " +
- lnr.getLineNumber());
- }
-
- if (passed)
- System.out.println("PASSED: Second test series");
- else
- System.out.println("FAILED: Second test series");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Second test series: " + e);
- }
-
- System.out.println("Finished test of LineNumberReader");
-}
-
-} // class LineNumberReaderTest
-
diff --git a/libjava/classpath/test/java.io/Makefile.am b/libjava/classpath/test/java.io/Makefile.am
deleted file mode 100644
index 923e378..0000000
--- a/libjava/classpath/test/java.io/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-JAVAROOT = .
-
-check_JAVA = BufferedInputStreamTest.java ByteArrayInputStreamTest.java \
- DataInputOutputTest.java LineNumberInputStreamTest.java \
- PushbackInputStreamTest.java SequenceInputStreamTest.java \
- StringBufferInputStreamTest.java
-
diff --git a/libjava/classpath/test/java.io/OOSCallDefault.java b/libjava/classpath/test/java.io/OOSCallDefault.java
deleted file mode 100644
index c0465c1..0000000
--- a/libjava/classpath/test/java.io/OOSCallDefault.java
+++ /dev/null
@@ -1,39 +0,0 @@
-
-import java.io.*;
-
-public class OOSCallDefault implements Serializable
-{
- int x;
- double y;
- transient String s;
-
- OOSCallDefault( int X, double Y, String S )
- {
- x = X;
- y = Y;
- s = S;
- }
-
- public boolean equals( Object o )
- {
- OOSCallDefault oo = (OOSCallDefault)o;
- return oo.x == x
- && oo.y == y
- && oo.s.equals( s );
- }
-
- private void writeObject( ObjectOutputStream oos ) throws IOException
- {
- oos.writeObject( s );
- oos.defaultWriteObject();
- oos.writeObject( s );
- }
-
- private void readObject( ObjectInputStream ois )
- throws ClassNotFoundException, IOException
- {
- ois.readObject();
- ois.defaultReadObject();
- s = (String)ois.readObject();
- }
-}
diff --git a/libjava/classpath/test/java.io/OOSExtern.java b/libjava/classpath/test/java.io/OOSExtern.java
deleted file mode 100644
index 7394c5b..0000000
--- a/libjava/classpath/test/java.io/OOSExtern.java
+++ /dev/null
@@ -1,37 +0,0 @@
-
-import java.io.*;
-
-public class OOSExtern extends OOSNoCallDefault implements Externalizable
-{
- public OOSExtern()
- {}
-
- OOSExtern( int X, String S, boolean B )
- {
- super( X, S, B );
- }
-
- public void writeExternal( ObjectOutput oo ) throws IOException
- {
- oo.writeInt( super.x );
- oo.writeObject( super.s );
- oo.writeBoolean( super.b );
- }
-
- public void readExternal( ObjectInput oi )
- throws ClassNotFoundException, IOException
- {
- super.x = oi.readInt();
- super.s = (String)oi.readObject();
- super.b = oi.readBoolean();
- }
-
- public boolean equals( Object o )
- {
- OOSExtern e = (OOSExtern)o;
- return e.x == super.x
- && e.s.equals( super.s )
- && e.b == super.b;
- }
-
-}
diff --git a/libjava/classpath/test/java.io/OOSNoCallDefault.java b/libjava/classpath/test/java.io/OOSNoCallDefault.java
deleted file mode 100644
index 1e41754..0000000
--- a/libjava/classpath/test/java.io/OOSNoCallDefault.java
+++ /dev/null
@@ -1,42 +0,0 @@
-
-import java.io.*;
-
-public class OOSNoCallDefault implements Serializable
-{
- int x;
- String s;
- boolean b;
-
- OOSNoCallDefault()
- {}
-
- OOSNoCallDefault( int X, String S, boolean B )
- {
- x = X;
- s = S;
- b = B;
- }
-
- public boolean equals( Object o )
- {
- OOSNoCallDefault oo = (OOSNoCallDefault)o;
- return oo.x == x
- && oo.b == b
- && oo.s.equals( s );
- }
-
- private void writeObject( ObjectOutputStream oos ) throws IOException
- {
- oos.writeInt( x );
- oos.writeObject( s );
- oos.writeBoolean( b );
- }
-
- private void readObject( ObjectInputStream ois )
- throws ClassNotFoundException, IOException
- {
- x = ois.readInt();
- s = (String)ois.readObject();
- b = ois.readBoolean();
- }
-}
diff --git a/libjava/classpath/test/java.io/ObjectInputStreamTest.java b/libjava/classpath/test/java.io/ObjectInputStreamTest.java
deleted file mode 100644
index af236dd..0000000
--- a/libjava/classpath/test/java.io/ObjectInputStreamTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*************************************************************************
-/* ObjectInputStreamTest.java -- Tests ObjectInputStream class
-/*
-/* Copyright (c) 1998 by Free Software Foundation, Inc.
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.FileInputStream;
-import java.io.ObjectInputStream;
-
-public class ObjectInputStreamTest extends Test
-{
- public static void testSerial( Object obj, String filename )
- {
- try
- {
- ObjectInputStream ois =
- new ObjectInputStream( new FileInputStream( filename ) );
-
- Object read_object = ois.readObject();
- ois.close();
-
- if( read_object.equals( obj ) )
- pass();
- else
- fail();
- }
- catch( Exception e )
- {
- e.printStackTrace();
- fail();
- }
- }
-
-
- public static void main( String[] args )
- {
- testSerial( new OOSCallDefault( 1, 3.14, "test" ),
- "calldefault.data" );
- System.out.println( "Object calling defaultWriteObject()" );
-
- testSerial( new OOSNoCallDefault( 17, "no\ndefault", false ),
- "nocalldefault.data" );
- System.out.println( "Object not calling defaultWriteObject()" );
-
- testSerial( new OOSExtern( -1, "", true ), "external.data" );
- System.out.println( "Externalizable class" );
-
- testSerial( new HairyGraph(), "graph.data" );
- System.out.println( "Graph of objects with circular references" );
- }
-
-}
diff --git a/libjava/classpath/test/java.io/ObjectOutputStreamTest.java b/libjava/classpath/test/java.io/ObjectOutputStreamTest.java
deleted file mode 100644
index 62f60dc..0000000
--- a/libjava/classpath/test/java.io/ObjectOutputStreamTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*************************************************************************
-/* ObjectOutputStreamTest.java -- Tests ObjectOutputStream class
-/*
-/* Copyright (c) 1998 by Free Software Foundation, Inc.
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.ByteArrayOutputStream;
-import java.io.Externalizable;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-
-public class ObjectOutputStreamTest extends Test
-{
- public static void testSerial( Object obj, String filename )
- {
- if( writeMode )
- {
- try
- {
- ObjectOutputStream oos =
- new ObjectOutputStream( new FileOutputStream( filename ) );
- oos.writeObject( obj );
- oos.close();
- }
- catch( ObjectStreamException e )
- {}
- catch( IOException ioe )
- {
- ioe.printStackTrace();
- }
- }
- else
- {
- ByteArrayOutputStream bytes = new ByteArrayOutputStream();
-
- try
- {
- ObjectOutputStream oos = new ObjectOutputStream( bytes );
- oos.writeObject( obj );
- oos.close();
- }
- catch( ObjectStreamException e )
- {}
- catch( IOException ioe )
- {
- fail();
- return;
- }
-
- byte[] jcl_bytes = bytes.toByteArray();
- int data;
-
- FileInputStream jdk_file;
- try
- {
- jdk_file = new FileInputStream( filename );
-
- for( int i=0; i < jcl_bytes.length; i++ )
- {
- data = jdk_file.read();
-
- if( data == -1 )
- {
- fail();
- return;
- }
-
- if( (byte)data != jcl_bytes[i] )
- {
- fail();
- return;
- }
- }
-
- if( jdk_file.read() != -1 )
- {
- fail();
- return;
- }
- }
- catch( IOException e )
- {
- error();
- return;
- }
-
- pass();
- }
- }
-
-
- public static void main( String[] args )
- {
- writeMode = (args.length != 0);
-
- testSerial( new OOSNotSerial(), "notserial.data" );
- System.out.println( "Non-serializable class" );
-
- testSerial( new OOSBadField( 1, 2, new OOSNotSerial() ),
- "notserialfield.data" );
- System.out.println( "Object with non-serializable field" );
-
- testSerial( new OOSCallDefault( 1, 3.14, "test" ),
- "calldefault.data" );
- System.out.println( "Object calling defaultWriteObject()" );
-
- testSerial( new OOSNoCallDefault( 17, "no\ndefault", false ),
- "nocalldefault.data" );
- System.out.println( "Object not calling defaultWriteObject()" );
-
- testSerial( new OOSExtern( -1, "", true ), "external.data" );
- System.out.println( "Externalizable class" );
-
- testSerial( new HairyGraph(), "graph.data" );
- System.out.println( "Graph of objects with circular references" );
- }
-
-
- public static boolean writeMode;
-}
-
-
-class OOSNotSerial {}
-
-class OOSBadField implements Serializable
-{
- int x;
- int y;
- OOSNotSerial o;
-
- OOSBadField( int X, int Y, OOSNotSerial O )
- {
- x = X;
- y = Y;
- o = O;
- }
-}
diff --git a/libjava/classpath/test/java.io/ObjectStreamClassTest.java b/libjava/classpath/test/java.io/ObjectStreamClassTest.java
deleted file mode 100644
index 7002bf7..0000000
--- a/libjava/classpath/test/java.io/ObjectStreamClassTest.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*************************************************************************
-/* ObjectStreamClassTest.java -- Tests ObjectStreamClass class
-/*
-/* Copyright (c) 1998 by Free Software Foundation, Inc.
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.Externalizable;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamClass;
-import java.io.Serializable;
-import java.util.Hashtable;
-import java.util.Vector;
-
-public class ObjectStreamClassTest
-{
- public static void pass()
- {
- System.out.print( "PASSED: " );
- }
-
- public static void fail()
- {
- System.out.print( "FAILED: " );
- }
-
- public static void pass( boolean exp_pass )
- {
- if( exp_pass )
- pass();
- else
- System.out.print( "XPASSED: " );
- }
-
- public static void fail( boolean exp_pass )
- {
- if( exp_pass )
- fail();
- else
- System.out.print( "XFAIL: " );
- }
-
- public static void testLookup( Class cl, boolean non_null )
- {
- if( non_null == (ObjectStreamClass.lookup( cl ) != null) )
- pass();
- else
- fail();
-
- System.out.println( "lookup() for " + cl );
- }
-
- public static void testGetName( Class cl, String name )
- {
- if( ObjectStreamClass.lookup( cl ).getName().equals( name ) )
- pass();
- else
- fail();
-
- System.out.println( "getName() for " + cl );
- }
-
- public static void testForClass( Class cl, Class clazz )
- {
- if( ObjectStreamClass.lookup( cl ).forClass() == clazz )
- pass();
- else
- fail();
-
- System.out.println( "forClass() for " + cl );
- }
-
- public static void testSUID( Class cl, long suid )
- {
- testSUID( cl, suid, true );
- }
-
- public static void testSUID( Class cl, long suid, boolean exp_pass )
- {
- if( ObjectStreamClass.lookup( cl ).getSerialVersionUID() == suid )
- pass( exp_pass );
- else
- fail( exp_pass );
-
- System.out.println( "getSerialVersionUID() for " + cl );
- }
-
- public static void testHasWrite( Class cl, boolean has_write )
- {
- if( ObjectStreamClass.lookup( cl ).hasWriteMethod() == has_write )
- pass();
- else
- fail();
-
- System.out.println( "hasWriteMethod() for " + cl );
- }
-
- public static void testIsSerial( Class cl, boolean is_serial )
- {
- if( ObjectStreamClass.lookup( cl ).isSerializable() == is_serial )
- pass();
- else
- fail();
-
- System.out.println( "isSerializable() for " + cl );
- }
-
- public static void testIsExtern( Class cl, boolean is_extern )
- {
- if( ObjectStreamClass.lookup( cl ).isExternalizable() == is_extern )
- pass();
- else
- fail();
-
- System.out.println( "isExternalizable() for " + cl );
- }
-
- public static void main( String[] args )
- {
- try
- {
- // lookup
- testLookup( Serial.class, true );
- testLookup( NotSerial.class, false );
-
- // getName
- testGetName( java.lang.String.class, "java.lang.String" );
- testGetName( java.util.Hashtable.class, "java.util.Hashtable" );
-
- // forClass
- testForClass( java.lang.String.class, java.lang.String.class );
- testForClass( java.util.Vector.class, (new Vector()).getClass() );
-
- // getSerialVersionUID
- testSUID( A.class, 1577839372146469075L );
- testSUID( B.class, -7069956958769787679L );
-
- // NOTE: this fails for JDK 1.1.5v5 on linux because a non-null
- // jmethodID is returned from
- // GetStaticMethodID( env, C, "<clinit>", "()V" )
- // even though class C does not have a class initializer.
- // The JDK's serialver tool does not have this problem somehow.
- // I have not tested this on other platforms.
- testSUID( C.class, 7441756018870420732L, false );
-
- testSUID( Defined.class, 17 );
- testSUID( DefinedNotStatic.class, 8797806279193632512L );
- testSUID( DefinedNotFinal.class, -1014973327673071657L );
-
- // hasWriteMethod
- testHasWrite( Serial.class, false );
- testHasWrite( HasWrite.class, true );
- testHasWrite( InherWrite.class, false );
- testHasWrite( PubWrite.class, false );
- testHasWrite( StaticWrite.class, false );
- testHasWrite( ReturnWrite.class, false );
-
- // isSerializable
- testIsSerial( Serial.class, true );
- testIsSerial( Extern.class, false );
- testIsSerial( InherSerial.class, true );
- testIsSerial( InherExtern.class, false );
-
- // isExternalizable
- testIsExtern( Serial.class, false );
- testIsExtern( Extern.class, true );
- testIsExtern( InherSerial.class, false );
- testIsExtern( InherExtern.class, true );
- }
- catch( Exception e )
- {
- e.printStackTrace();
- }
- }
-}
-
-class NotSerial {}
-
-class A implements Serializable
-{
- int b;
- int a;
-
- public int f() { return 0; }
- float g() { return 3; }
-
- private float c;
-}
-
-abstract class B extends A
-{
- private B( int[] ar ) {}
- public B() {}
- public static void foo() {}
- public abstract void absfoo();
-
- private static String s;
- public int[] a;
-
- static
- {
- s = "hello";
- }
-}
-
-class C extends B implements Cloneable, Externalizable
-{
- public void absfoo() {}
- public void readExternal( ObjectInput i ) {}
- public void writeExternal( ObjectOutput o ) {}
-}
-
-
-class Defined implements Serializable
-{
- static final long serialVersionUID = 17;
-}
-
-class DefinedNotStatic implements Serializable
-{
- final long serialVersionUID = 17;
-}
-
-class DefinedNotFinal implements Serializable
-{
- static long serialVersionUID = 17;
-}
-
-class HasWrite implements Serializable
-{
- private void writeObject( ObjectOutputStream o ) {}
-}
-
-class InherWrite extends HasWrite {}
-
-class PubWrite implements Serializable
-{
- public void writeObject( ObjectOutputStream o ) {}
-}
-
-class StaticWrite implements Serializable
-{
- private static void writeObject( ObjectOutputStream o ) {}
-}
-
-class ReturnWrite implements Serializable
-{
- private int writeObject( ObjectOutputStream o )
- {
- return -1;
- }
-}
-
-
-class Serial implements Serializable {}
-
-class Extern implements Externalizable
-{
- public void readExternal( ObjectInput i )
- {}
-
- public void writeExternal( ObjectOutput o )
- {}
-}
-
-class InherExtern extends Extern implements Serializable {}
-
-class InherSerial extends Serial {}
diff --git a/libjava/classpath/test/java.io/PipedReaderWriterTest.java b/libjava/classpath/test/java.io/PipedReaderWriterTest.java
deleted file mode 100644
index 827598e..0000000
--- a/libjava/classpath/test/java.io/PipedReaderWriterTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*************************************************************************
-/* PipedReaderWriterTest.java -- Tests Piped{Reader,Writers}'s
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PipedReaderWriterTest
-{
-
-public static void
-main(String[] argv) throws InterruptedException
-{
- // Set up a reasonable buffer size for this test if one is not already
- // specified
- String prop = System.getProperty("gnu.java.io.pipe_size");
-// if (prop == null)
-// System.setProperty("gnu.java.io.pipe_size", "32");
-
- try
- {
- System.out.println("Started test of PipedReader and PipedWriter");
-
- System.out.println("Test 1: Basic pipe test");
-
- // Set up the thread to write
- PipedTestWriter ptw = new PipedTestWriter();
- String str = ptw.getStr();
- PipedWriter pw = ptw.getWriter();
-
- // Now set up our reader
- PipedReader pr = new PipedReader();
- pr.connect(pw);
- new Thread(ptw).start();
-
- char[] buf = new char[12];
- int chars_read, total_read = 0;
- while((chars_read = pr.read(buf)) != -1)
- {
- System.out.print(new String(buf, 0, chars_read));
- System.out.flush();
- Thread.sleep(10); // A short delay
- total_read += chars_read;
- }
-
- if (total_read == str.length())
- System.out.println("PASSED: Basic pipe test");
- else
- System.out.println("FAILED: Basic pipe test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Basic pipe test: " + e);
- }
-}
-
-} // class PipedReaderWriterTest
-
-class PipedTestWriter implements Runnable
-{
-
-String str;
-StringReader sbr;
-PipedWriter out;
-
-public
-PipedTestWriter()
-{
- str = "In college, there was a tradition going for a while that people\n" +
- "would get together and hang out at Showalter Fountain - in the center\n" +
- "of Indiana University's campus - around midnight. It was mostly folks\n" +
- "from the computer lab and just people who liked to use the Forum\n" +
- "bbs system on the VAX. IU pulled the plug on the Forum after I left\n" +
- "despite its huge popularity. Now they claim they are just giving\n" +
- "students what they want by cutting deals to make the campus all\n" +
- "Microsoft.\n";
-
- sbr = new StringReader(str);
-
- out = new PipedWriter();
-}
-
-public PipedWriter
-getWriter()
-{
- return(out);
-}
-
-public String
-getStr()
-{
- return(str);
-}
-
-public void
-run()
-{
- char[] buf = new char[32];
-
- int chars_read;
-
- try
- {
- int b = sbr.read();
- out.write(b);
-
- while ((chars_read = sbr.read(buf)) != -1)
- out.write(buf, 0, chars_read);
-
- out.close();
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Basic pipe test: " + e);
- }
-
-}
-
-} // PipedTestWriter
-
diff --git a/libjava/classpath/test/java.io/PipedStreamTest.java b/libjava/classpath/test/java.io/PipedStreamTest.java
deleted file mode 100644
index d30bfa3..0000000
--- a/libjava/classpath/test/java.io/PipedStreamTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*************************************************************************
-/* PipedStreamTest.java -- Tests Piped{Input,Output}Stream's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PipedStreamTest
-{
-
-public static void
-main(String[] argv) throws InterruptedException
-{
- // Set up a reasonable buffer size for this test if one is not already
- // specified
- String prop = System.getProperty("gnu.java.io.pipe_size");
-// if (prop == null)
-// System.setProperty("gnu.java.io.pipe_size", "32");
-
- try
- {
- System.out.println("Started test of PipedInputStream and " +
- "PipedOutputStream");
-
- System.out.println("Test 1: Basic piped stream test");
-
- // Set up the thread to write
- PipedStreamTestWriter pstw = new PipedStreamTestWriter();
- String str = pstw.getStr();
- PipedOutputStream pos = pstw.getStream();
-
- // Now set up our reader
- PipedInputStream pis = new PipedInputStream();
- pis.connect(pos);
- new Thread(pstw).start();
-
- byte[] buf = new byte[12];
- int bytes_read, total_read = 0;
- while((bytes_read = pis.read(buf)) != -1)
- {
- System.out.print(new String(buf, 0, bytes_read));
- System.out.flush();
- Thread.sleep(10); // A short delay
- total_read += bytes_read;
- }
-
- if (total_read == str.length())
- System.out.println("PASSED: Basic piped stream test");
- else
- System.out.println("FAILED: Basic piped stream test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Basic piped stream test: " + e);
- }
-}
-
-} // class PipedStreamTest
-
-class PipedStreamTestWriter implements Runnable
-{
-
-String str;
-StringBufferInputStream sbis;
-PipedOutputStream out;
-
-public
-PipedStreamTestWriter()
-{
- str = "I went to work for Andersen Consulting after I graduated\n" +
- "from college. They sent me to their training facility in St. Charles,\n" +
- "Illinois and tried to teach me COBOL. I didn't want to learn it.\n" +
- "The instructors said I had a bad attitude and I got a green sheet\n" +
- "which is a nasty note in your file saying what a jerk you are.\n";
-
- sbis = new StringBufferInputStream(str);
-
- out = new PipedOutputStream();
-}
-
-public PipedOutputStream
-getStream()
-{
- return(out);
-}
-
-public String
-getStr()
-{
- return(str);
-}
-
-public void
-run()
-{
- byte[] buf = new byte[32];
-
- int bytes_read;
-
- try
- {
- int b = sbis.read();
- out.write(b);
-
- while ((bytes_read = sbis.read(buf)) != -1)
- out.write(buf, 0, bytes_read);
-
- out.close();
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Basic piped stream test: " + e);
- }
-
-}
-
-}
-
diff --git a/libjava/classpath/test/java.io/PrintStreamTest.java b/libjava/classpath/test/java.io/PrintStreamTest.java
deleted file mode 100644
index bd4dde5..0000000
--- a/libjava/classpath/test/java.io/PrintStreamTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*************************************************************************
-/* PrintStreamTest.java -- Test of the PrintStream class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PrintStreamTest
-{
-
-public static void main(String[] argv) throws IOException
-{
- System.out.println("Started test of PrintStream");
- System.out.println("Test 1: Printing Test");
-
- char[] carray = { 'h', 'i' };
- byte[] barray = { 'b', 'y', 'e' };
-
- PrintStream ps = new PrintStream(new FileOutputStream("printstream.out"));
- ps.print(true);
- ps.print('|');
- ps.print(false);
- ps.print('|');
- ps.print('A');
- ps.print('|');
- ps.flush();
- ps.print(0xFFFFF);
- ps.print('|');
- ps.print(0xFFFFFFFFFFL);
- ps.print('|');
- ps.print(3.141592);
- ps.print('|');
- ps.print((double)99999999999.9999);
- ps.print('|');
- ps.print(carray);
- ps.print('|');
- ps.print("This is a string");
- ps.print('|');
- ps.print(ps);
- ps.println();
- ps.println(true);
- ps.println(false);
- ps.println('A');
- ps.flush();
- ps.println(0xFFFFF);
- ps.println(0xFFFFFFFFFFL);
- ps.println(3.141592);
- ps.println((double)99999999999.9999);
- ps.println(carray);
- ps.println("This is a string");
- ps.println(ps);
- ps.write('B');
- ps.println();
- ps.write(barray, 0, barray.length);
- ps.println();
- ps.close();
-
- if (ps.checkError())
- System.out.println("FAILED: Printing Test");
- else
- System.out.println("PASSED: Printing Test");
-
- System.out.println("PASSED: Test of PrintStream");
-}
-
-} // class PrintStreamTest
-
diff --git a/libjava/classpath/test/java.io/PrintWriterTest.java b/libjava/classpath/test/java.io/PrintWriterTest.java
deleted file mode 100644
index d466f44..0000000
--- a/libjava/classpath/test/java.io/PrintWriterTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*************************************************************************
-/* PrintWriterTest.java -- Test of the PrintWriter class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PrintWriterTest
-{
-
-public static void main(String[] argv) throws IOException
-{
- System.out.println("Started test of PrintWriter");
- System.out.println("Test 1: Printing Test");
-
- char[] carray = { 'h', 'i' };
- char[] carray2 = { 'b', 'y', 'e' };
-
- PrintWriter pw = new PrintWriter(new FileWriter("printwriter.out"));
- pw.print(true);
- pw.print('|');
- pw.print(false);
- pw.print('|');
- pw.print('A');
- pw.print('|');
- pw.flush();
- pw.print(0xFFFFF);
- pw.print('|');
- pw.print(0xFFFFFFFFFFL);
- pw.print('|');
- pw.print(3.141592);
- pw.print('|');
- pw.print((double)99999999999.9999);
- pw.print('|');
- pw.print(carray);
- pw.print('|');
- pw.print("This is a string");
- pw.print('|');
- pw.print(pw);
- pw.println();
- pw.println(true);
- pw.println(false);
- pw.println('A');
- pw.flush();
- pw.println(0xFFFFF);
- pw.println(0xFFFFFFFFFFL);
- pw.println(3.141592);
- pw.println((double)99999999999.9999);
- pw.println(carray);
- pw.println("This is a string");
- pw.println(pw);
- pw.write('B');
- pw.println();
- pw.write(carray2, 0, carray2.length);
- pw.println();
- pw.close();
-
- if (pw.checkError())
- System.out.println("FAILED: Printing Test");
- else
- System.out.println("PASSED: Printing Test");
-
- System.out.println("PASSED: Test of PrintWriter");
-}
-
-} // class PrintWriterTest
-
diff --git a/libjava/classpath/test/java.io/PushbackInputStreamTest.java b/libjava/classpath/test/java.io/PushbackInputStreamTest.java
deleted file mode 100644
index 9d67623..0000000
--- a/libjava/classpath/test/java.io/PushbackInputStreamTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*************************************************************************
-/* PushbackInputStreamTest.java -- Tests PushbackInputStream's of course
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PushbackInputStreamTest extends PushbackInputStream
-{
-
-public
-PushbackInputStreamTest(InputStream is, int size)
-{
- super(is, size);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of PushbackInputStream");
-
- String str = "Once when I was in fourth grade, my friend Lloyd\n" +
- "Saltsgaver and I got in trouble for kicking a bunch of\n" +
- "Kindergartners off the horse swings so we could play a game\n" +
- "of 'road hog'\n";
-
- System.out.println("Test 1: Protected Variables Test");
- {
- PushbackInputStreamTest pist = new PushbackInputStreamTest(
- new StringBufferInputStream(str), 15);
-
- boolean passed = true;
- if (pist.pos != pist.buf.length)
- {
- passed = false;
- System.out.println("The pos variable is wrong. Expected " +
- pist.buf.length + " but got " + pist.pos);
- }
- if (pist.buf.length != 15)
- {
- passed = false;
- System.out.println("The buf.length is wrong. Expected 15" +
- " but got " + pist.buf.length);
- }
-
- if (passed)
- System.out.println("PASSED: Protected Variables Test");
- else
- System.out.println("FAILED: Protected Variables Test");
- }
-
- System.out.println("Test 2: Basic Unread Tests");
- try
- {
- PushbackInputStreamTest pist = new PushbackInputStreamTest(
- new StringBufferInputStream(str), 15);
-
- byte[] read_buf1 = new byte[12];
- byte[] read_buf2 = new byte[12];
-
- boolean passed = true;
-
- pist.read(read_buf1);
- pist.unread(read_buf1);
- pist.read(read_buf2);
-
- for (int i = 0; i < read_buf1.length; i++)
- {
- if (read_buf1[i] != read_buf2[i])
- passed = false;
- }
-
- pist.unread(read_buf2, 1, read_buf2.length - 1);
- pist.unread(read_buf2[0]);
-
- int bytes_read, total_read = 0;
- while ((bytes_read = pist.read(read_buf1)) != -1)
- {
- System.out.print(new String(read_buf1, 0, bytes_read));
- total_read += bytes_read;
- }
-
- if (total_read != str.length())
- passed = false;
-
- if (passed)
- System.out.println("PASSED: Basic Unread Tests");
- else
- System.out.println("FAILED: Basic Unread Tests");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Basic Unread Tests: " + e);
- }
-
- System.out.println("Test 3: Buffer Overflow Test");
- try
- {
- PushbackInputStreamTest pist = new PushbackInputStreamTest(
- new StringBufferInputStream(str), 10);
-
- byte[] read_buf = new byte[12];
-
- pist.read(read_buf);
- pist.unread(read_buf);
- System.out.println("FAILED: Buffer Overflow Test");
- }
- catch(IOException e)
- {
- System.out.println("PASSED: Buffer Overflow Test: " + e);
- }
-
- System.out.println("Finished tests of PushbackInputStream");
-} // main
-
-} // class PushbackInputStreamTest
-
diff --git a/libjava/classpath/test/java.io/PushbackReaderTest.java b/libjava/classpath/test/java.io/PushbackReaderTest.java
deleted file mode 100644
index 3378306..0000000
--- a/libjava/classpath/test/java.io/PushbackReaderTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*************************************************************************
-/* PushbackReaderTest.java -- Tests PushbackReader's of course
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class PushbackReaderTest extends PushbackReader
-{
-
-public
-PushbackReaderTest(Reader r, int size)
-{
- super(r, size);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of PushbackReader");
-
- String str = "I used to idolize my older cousin Kurt. I wanted to be\n" +
- "just like him when I was a kid. (Now we are as different as night\n" +
- "and day - but still like each other). One thing he did for a while\n" +
- "was set traps for foxes thinking he would make money off sellnig furs.\n" +
- "Now I never saw a fox in all my years of Southern Indiana. That\n" +
- "didn't deter us. One time we went out in the middle of winter to\n" +
- "check our traps. It was freezing and I stepped onto a frozen over\n" +
- "stream. The ice broke and I got my foot soak. Despite the fact that\n" +
- "it made me look like a girl, I turned around and went straight home.\n" +
- "Good thing too since I couldn't even feel my foot by the time I got\n" +
- "there.\n";
-
- System.out.println("Test 1: Basic Unread Tests");
- try
- {
- PushbackReaderTest prt = new PushbackReaderTest(
- new StringReader(str), 15);
-
- char[] read_buf1 = new char[12];
- char[] read_buf2 = new char[12];
-
- boolean passed = true;
-
- prt.read(read_buf1);
- prt.unread(read_buf1);
- prt.read(read_buf2);
-
- for (int i = 0; i < read_buf1.length; i++)
- {
- if (read_buf1[i] != read_buf2[i])
- passed = false;
- }
-
- prt.unread(read_buf2, 1, read_buf2.length - 1);
- prt.unread(read_buf2[0]);
-
- int chars_read, total_read = 0;
- while ((chars_read = prt.read(read_buf1)) != -1)
- {
- System.out.print(new String(read_buf1, 0, chars_read));
- total_read += chars_read;
- }
-
- if (total_read != str.length())
- passed = false;
-
- if (passed)
- System.out.println("PASSED: Basic Unread Tests");
- else
- System.out.println("FAILED: Basic Unread Tests");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Basic Unread Tests: " + e);
- }
-
- System.out.println("Test 3: Buffer Overflow Test");
- try
- {
- PushbackReaderTest prt = new PushbackReaderTest(
- new StringReader(str), 10);
-
- char[] read_buf = new char[12];
-
- prt.read(read_buf);
- prt.unread(read_buf);
- System.out.println("FAILED: Buffer Overflow Test");
- }
- catch(IOException e)
- {
- System.out.println("PASSED: Buffer Overflow Test: " + e);
- }
-
- System.out.println("Finished tests of PushbackReader");
-} // main
-
-} // class PushbackReaderTest
-
diff --git a/libjava/classpath/test/java.io/README b/libjava/classpath/test/java.io/README
deleted file mode 100644
index d5ab4f5..0000000
--- a/libjava/classpath/test/java.io/README
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains tests for the java.io package. Some important
-things to note:
-
--- The file dataoutput-jdk.out is the results of the DataInputOutputTest
- test run through the JDK. It is needed for the real test so please
- don't delete it.
-
--- The directory filetest and its contents are used for the FileTest test.
- If that test bombs in the middle, it may leave the directory renamed
- to something else. In that case, you will need to rename it back
- manually to re-run the test after making fixes.
-
diff --git a/libjava/classpath/test/java.io/RandomAccessFileTest.java b/libjava/classpath/test/java.io/RandomAccessFileTest.java
deleted file mode 100644
index 8ee53b7..0000000
--- a/libjava/classpath/test/java.io/RandomAccessFileTest.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*************************************************************************
-/* RandomAccessFileTest.java -- Tests RandomAccessFile's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-// Write some data using DataOutput and read it using DataInput.
-
-public class RandomAccessFileTest
-{
-
-public static void
-runReadTest(String filename, int seq, String testname)
-{
- try
- {
- System.out.println("Test " + seq + ": " + testname);
-
- RandomAccessFile ras = new RandomAccessFile(filename, "r");
-
- boolean passed = true;
-
- boolean b = ras.readBoolean();
- if (b != true)
- {
- passed = false;
- System.out.println("Failed to read boolean. Expected true and got false");
- }
- b = ras.readBoolean();
- if (b != false)
- {
- passed = false;
- System.out.println("Failed to read boolean. Expected false and got true");
- }
- byte bt = ras.readByte();
- if (bt != 8)
- {
- passed = false;
- System.out.println("Failed to read byte. Expected 8 and got "+ bt);
- }
- bt = ras.readByte();
- if (bt != -122)
- {
- passed = false;
- System.out.println("Failed to read byte. Expected -122 and got "+ bt);
- }
- char c = ras.readChar();
- if (c != 'a')
- {
- passed = false;
- System.out.println("Failed to read char. Expected a and got " + c);
- }
- c = ras.readChar();
- if (c != '\uE2D2')
- {
- passed = false;
- System.out.println("Failed to read char. Expected \\uE2D2 and got " + c);
- }
- short s = ras.readShort();
- if (s != 32000)
- {
- passed = false;
- System.out.println("Failed to read short. Expected 32000 and got " + s);
- }
- int i = ras.readInt();
- if (i != 8675309)
- {
- passed = false;
- System.out.println("Failed to read int. Expected 8675309 and got " + i);
- }
- long l = ras.readLong();
- if (l != 696969696969L)
- {
- passed = false;
- System.out.println("Failed to read long. Expected 696969696969 and got " + l);
- }
- float f = ras.readFloat();
- if (!Float.toString(f).equals("3.1415"))
- {
- passed = false;
- System.out.println("Failed to read float. Expected 3.1415 and got " + f);
- }
- double d = ras.readDouble();
- if (d != 999999999.999)
- {
- passed = false;
- System.out.println("Failed to read double. Expected 999999999.999 and got " + d);
- }
- String str = ras.readUTF();
- if (!str.equals("Testing code is such a boring activity but it must be done"))
- {
- passed = false;
- System.out.println("Read unexpected String: " + str);
- }
- str = ras.readUTF();
- if (!str.equals("a-->\u01FF\uA000\u6666\u0200RRR"))
- {
- passed = false;
- System.out.println("Read unexpected String: " + str);
- }
-
- if (passed)
- System.out.println("PASSED: " + testname + " read test");
- else
- System.out.println("FAILED: " + testname + " read test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: " + testname + " read test: " + e);
- }
-
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of RandomAccessFile");
-
- System.out.println("Test 1: RandomAccessFile write test");
- try
- {
- RandomAccessFile raf = new RandomAccessFile("dataoutput.out", "rw");
-
- raf.writeBoolean(true);
- raf.writeBoolean(false);
- raf.writeByte((byte)8);
- raf.writeByte((byte)-122);
- raf.writeChar((char)'a');
- raf.writeChar((char)'\uE2D2');
- raf.writeShort((short)32000);
- raf.writeInt((int)8675309);
- raf.writeLong((long) 696969696969L);
- raf.writeFloat((float)3.1415);
- raf.writeDouble((double)999999999.999);
- raf.writeUTF("Testing code is such a boring activity but it must be done");
- raf.writeUTF("a-->\u01FF\uA000\u6666\u0200RRR");
- raf.close();
-
- // We'll find out if this was really right later, but conditionally
- // report success for now
- System.out.println("PASSED: RandomAccessFile write test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: RandomAccessFile write test: " + e);
- }
-
- runReadTest("dataoutput.out", 2, "Read of JCL written data file");
- runReadTest("dataoutput-jdk.out", 3, "Read of JDK written data file");
-
- System.out.println("Test 2: Seek Test");
- try
- {
- RandomAccessFile raf = new RandomAccessFile("/etc/services", "r");
-
- System.out.println("Length: " + raf.length());
-
- raf.skipBytes(24);
- if (raf.getFilePointer() != 24)
- throw new IOException("Unexpected file pointer value " +
- raf.getFilePointer());
-
- raf.seek(0);
- if (raf.getFilePointer() != 0)
- throw new IOException("Unexpected file pointer value " +
- raf.getFilePointer());
-
- raf.seek(100);
- if (raf.getFilePointer() != 100)
- throw new IOException("Unexpected file pointer value " +
- raf.getFilePointer());
-
- System.out.println("PASSED: Seek Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Seek Test: " + e);
- }
-
- System.out.println("Test 3: Validation Test");
- boolean failed = false;
- try
- {
- new RandomAccessFile("/vmlinuz", "rwx");
- System.out.println("Did not detect invalid mode");
- failed = true;
- }
- catch (IllegalArgumentException e) { ; }
- catch (IOException e) { ; }
-
- try
- {
- new RandomAccessFile("/vmlinuz", "rw");
- System.out.println("Did not detect read only file opened for write");
- failed = true;
- }
- catch (IOException e) { ; }
-
- try
- {
- new RandomAccessFile("/sherlockholmes", "r");
- System.out.println("Did not detect non-existent file");
- failed = true;
- }
- catch (IOException e) { ; }
-
- try
- {
- RandomAccessFile raf = new RandomAccessFile("/etc/services", "r");
- raf.seek(raf.length());
- raf.write('\n');
- System.out.println("Did not detect invalid write operation on read only file");
- failed = true;
- }
- catch (IOException e) { ; }
-
- if (failed)
- System.out.println("FAILED: Validation Test");
- else
- System.out.println("PASSED: Validation Test");
-
-/*
- System.out.println("Test 4: Set File Length Rest");
- try
- {
- File f = new File("tmptmptmp");
- RandomAccessFile raf = new RandomAccessFile("tmptmptmp", "rw");
-
- raf.setLength(50L);
- if (raf.length() != 50)
- throw new IOException("Bad length on extending file of " + raf.length());
-
- raf.setLength(25L);
- if (raf.length() != 25)
- throw new IOException("Bad length on extending file of " + raf.length());
-
- raf.close();
- f.delete();
-
- System.out.println("PASSED: Set File Length Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Set File Length Test: " + e);
- (new File("tmptmptmp")).delete();
- }
-*/
- System.out.println("Finished test of RandomAccessFile");
-} // main
-
-} // class DataInputOutputTest
-
diff --git a/libjava/classpath/test/java.io/SequenceInputStreamTest.java b/libjava/classpath/test/java.io/SequenceInputStreamTest.java
deleted file mode 100644
index 7b2c916..0000000
--- a/libjava/classpath/test/java.io/SequenceInputStreamTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*************************************************************************
-/* SequenceInputStreamTest.java -- Tests SequenceInputStream's
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class SequenceInputStreamTest
-{
-
-public static void
-main(String argv[])
-{
- System.out.println("Started test of SequenceInputStream");
-
- String str1 = "I don't believe in going to chain restaurants. I think\n" +
- "they are evil. I can't believe all the suburban folks who go to \n";
-
- String str2 = "places like the Olive Garden. Not only does the food make\n" +
- "me want to puke, non of these chains has the slightest bit of character.\n";
-
- byte[] buf = new byte[10];
-
- System.out.println("Test 1: Simple read test");
- try
- {
- StringBufferInputStream is1 = new StringBufferInputStream(str1);
- ByteArrayInputStream is2 = new ByteArrayInputStream(str2.getBytes());
- SequenceInputStream sis = new SequenceInputStream(is1, is2);
-
- int bytes_read;
- while((bytes_read = sis.read(buf)) != -1)
- {
- System.out.print(new String(buf,0,bytes_read));
- }
-
- sis.close();
- System.out.println("PASSED: Simple read test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Simple read test: " + e);
- }
-
- System.out.println("Test 2: close() test");
-
- try
- {
- StringBufferInputStream is1 = new StringBufferInputStream(str1);
- ByteArrayInputStream is2 = new ByteArrayInputStream(str2.getBytes());
- SequenceInputStream sis = new SequenceInputStream(is1, is2);
-
- sis.read(buf);
- sis.close();
- if (sis.read() != -1)
- System.out.println("FAILED: close() test");
- else
- System.out.println("PASSED: close() test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: close() test: " + e);
- }
-
- System.out.println("Finished test of SequenceInputStream");
-}
-
-} // class SequenceInputStream
-
diff --git a/libjava/classpath/test/java.io/StreamTokenizerTest.java b/libjava/classpath/test/java.io/StreamTokenizerTest.java
deleted file mode 100644
index e2d023f..0000000
--- a/libjava/classpath/test/java.io/StreamTokenizerTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*************************************************************************
-/* StreamTokenizerTest.java -- Test the StreamTokenizer class
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class StreamTokenizerTest
-{
-
-public static void
-main(String[] argv)
-{
- System.out.println("Started test of StreamTokenizer");
-
- try
- {
- System.out.println("Test 1: Basic Parsing Test");
-
- StreamTokenizer st = new StreamTokenizer(new
- FileInputStream("./stream-tokenizer.data"));
-
- System.out.println("No tokens read: " + st.toString());
- int j = 0;
- for (;;)
- {
- int ttype = st.nextToken();
- switch(ttype)
- {
- case StreamTokenizer.TT_NUMBER:
- System.out.println("Read a number: " + st.toString());
- break;
-
- case StreamTokenizer.TT_WORD:
- System.out.println("Read a word: " + st.toString());
- ++j;
- if (j == 2)
- {
- st.ordinaryChar('/');
- st.eolIsSignificant(true);
- st.lowerCaseMode(true);
- st.slashStarComments(true);
- st.slashSlashComments(true);
- }
- break;
-
- case StreamTokenizer.TT_EOL:
- System.out.println("Read an EOL: " + st.toString());
- break;
-
- case StreamTokenizer.TT_EOF:
- System.out.println("Read an EOF: " + st.toString());
-
- case '\'':
- case '"':
- System.out.println("Got a quote:" + st.toString());
- break;
-
- default:
- System.out.println("Got an ordinary:" + st.toString());
- break;
- }
- if (ttype == StreamTokenizer.TT_EOF)
- break;
- }
-
- System.out.println("PASSED: Basic Parsing Test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Basic Parsing Test: " + e);
- }
-
- System.out.println("Finished test of StreamTokenizer");
-}
-
-} // class StreamTokenizerTest
-
diff --git a/libjava/classpath/test/java.io/StringBufferInputStreamTest.java b/libjava/classpath/test/java.io/StringBufferInputStreamTest.java
deleted file mode 100644
index adafac6..0000000
--- a/libjava/classpath/test/java.io/StringBufferInputStreamTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*************************************************************************
-/* StringBufferInputStreamTest.java -- Test StringBufferInputStream's of course
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class StringBufferInputStreamTest extends StringBufferInputStream
-{
-
-public
-StringBufferInputStreamTest(String b)
-{
- super(b);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting test of StringBufferInputStream.");
- System.out.flush();
-
- String str = "Between my freshman and sophomore years of high school\n" +
- "we moved into a brand new building. The old high school was turned\n" +
- "into an elementary school.\n";
-
- System.out.println("Test 1: Protected Variables");
-
- StringBufferInputStreamTest sbis = new StringBufferInputStreamTest(str);
- byte[] read_buf = new byte[12];
-
- try
- {
- sbis.read(read_buf);
- sbis.mark(0);
-
- boolean passed = true;
-
- sbis.read(read_buf);
- if (sbis.pos != (read_buf.length * 2))
- {
- passed = false;
- System.out.println("The pos variable is wrong. Expected 24 and got " +
- sbis.pos);
- }
- if (sbis.count != str.length())
- {
- passed = false;
- System.out.println("The count variable is wrong. Expected " +
- str.length() + " and got " + sbis.pos);
- }
- if (sbis.buffer != str)
- {
- passed = false;
- System.out.println("The buf variable is not correct");
- }
-
- if (passed)
- System.out.println("PASSED: Protected Variables Test");
- else
- System.out.println("FAILED: Protected Variables Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Protected Variables Test: " + e);
- }
-
- System.out.println("Test 2: Simple Read Test");
-
- sbis = new StringBufferInputStreamTest(str);
-
- try
- {
- int bytes_read, total_read = 0;
- while ((bytes_read = sbis.read(read_buf, 0, read_buf.length)) != -1)
- {
- System.out.print(new String(read_buf, 0, bytes_read));
- total_read += bytes_read;
- }
-
- sbis.close();
- if (total_read == str.length())
- System.out.println("PASSED: Simple Read Test");
- else
- System.out.println("FAILED: Simple Read Test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: Simple Read Test: " + e);
- }
-
- System.out.println("Test 3: mark/reset/available/skip test");
- sbis = new StringBufferInputStreamTest(str);
-
- try
- {
- boolean passed = true;
-
- sbis.read(read_buf);
- if (sbis.available() != (str.length() - read_buf.length))
- {
- passed = false;
- System.out.println("available() reported " + sbis.available() +
- " and " + (str.length() - read_buf.length) +
- " was expected");
- }
-
- if (sbis.skip(5) != 5)
- {
- passed = false;
- System.out.println("skip() didn't work");
- }
- if (sbis.available() != (str.length() - (read_buf.length + 5)))
- {
- passed = false;
- System.out.println("skip() lied");
- }
-
- if (sbis.markSupported())
- {
- passed = false;
- System.out.println("markSupported() should have returned false but returned true");
- }
-
- int availsave = sbis.available();
- sbis.reset();
- if (sbis.pos != 0)
- {
- passed = false;
- System.out.println("mark/reset failed to work");
- }
-
- if (passed)
- System.out.println("PASSED: mark/reset/available/skip test");
- else
- System.out.println("FAILED: mark/reset/available/skip test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: mark/reset/available/skip test: " + e);
- }
-
- System.out.println("Finished StringBufferInputStream test");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.io/StringWriterTest.java b/libjava/classpath/test/java.io/StringWriterTest.java
deleted file mode 100644
index 5433606..0000000
--- a/libjava/classpath/test/java.io/StringWriterTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*************************************************************************
-/* StringWriterTest.java -- Test StringWriter
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-/**
- * Class to test StringWriter. This is just a rehash of the
- * BufferedCharWriterTest using a StringWriter instead of a
- * CharArrayWriter underneath.
- *
- * @version 0.0
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class StringWriterTest
-{
-
-public static void
-main(String argv[])
-{
- System.out.println("Started test of StringWriter");
-
- try
- {
- System.out.println("Test 1: Write Tests");
-
- StringWriter sw = new StringWriter(24);
- BufferedWriter bw = new BufferedWriter(sw, 12);
-
- String str = "There are a ton of great places to see live, original\n" +
- "music in Chicago. Places like Lounge Ax, Schuba's, the Empty\n" +
- "Bottle, and even the dreaded Metro with their sometimes asshole\n" +
- "bouncers.\n";
-
- boolean passed = true;
-
- char[] buf = new char[str.length()];
- str.getChars(0, str.length(), buf, 0);
-
- bw.write(buf, 0, 5);
- if (sw.toString().length() != 0)
- {
- passed = false;
- System.out.println("StringWriter has too many bytes #1");
- }
- bw.write(buf, 5, 8);
- bw.write(buf, 13, 12);
- bw.write(buf[25]);
- bw.write(buf, 26, buf.length - 26);
- bw.close();
-
- String str2 = sw.toString();
- if (!str.equals(str2))
- {
- passed = false;
- System.out.println("Unexpected string: " + str2);
- }
-
- if (passed)
- System.out.println("PASSED: Write Tests");
- else
- System.out.println("FAILED: Write Tests");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Write Tests: " + e);
- }
-
- System.out.println("Finished test of BufferedOutputStream and ByteArrayOutputStream");
-}
-
-} // class BufferedByteOutputStreamTest
-
diff --git a/libjava/classpath/test/java.io/Test.java b/libjava/classpath/test/java.io/Test.java
deleted file mode 100644
index 154884e..0000000
--- a/libjava/classpath/test/java.io/Test.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*************************************************************************
-/* Test.java -- Base class for test classes
-/*
-/* Copyright (c) 1998 by Free Software Foundation, Inc.
-/*
-/* 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, version 2. (see COPYING)
-/*
-/* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-public class Test
-{
- public static void error()
- {
- System.out.print( "ERROR: " );
- }
-
- public static void pass()
- {
- System.out.print( "PASSED: " );
- }
-
- public static void fail()
- {
- System.out.print( "FAILED: " );
- }
-
- public static void pass( boolean exp_pass )
- {
- if( exp_pass )
- pass();
- else
- System.out.print( "XPASSED: " );
- }
-
- public static void fail( boolean exp_pass )
- {
- if( exp_pass )
- fail();
- else
- System.out.print( "XFAIL: " );
- }
-}
diff --git a/libjava/classpath/test/java.io/UTF8EncodingTest.java b/libjava/classpath/test/java.io/UTF8EncodingTest.java
deleted file mode 100644
index 0c8d975..0000000
--- a/libjava/classpath/test/java.io/UTF8EncodingTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*************************************************************************
-/* UTF8EncodingTest.java -- A quick test of the UTF8 encoding
-/*
-/* Copyright (c) 1998 Free Software Foundation, Inc.
-/* Written by Aaron M. Renn (arenn@urbanophile.com)
-/*
-/* 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
-/* (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-/*************************************************************************/
-
-import java.io.*;
-
-public class UTF8EncodingTest
-{
-
-public static void main(String[] argv)
-{
- System.out.println("Started test of UTF8 encoding handling");
-
- String str1 = "This is the first line of text\n";
- String str2 = "This has some \u01FF\uA000\u6666\u0200 weird characters\n";
-
- System.out.println("Test 1: Write test");
- try
- {
- FileOutputStream fos = new FileOutputStream("utf8test.out");
- OutputStreamWriter osr = new OutputStreamWriter(fos, "UTF8");
- osr.write(str1);
- osr.write(str2);
- osr.close();
-
- System.out.println("PASSED: Write test (conditionally)");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Write Test: " + e);
- }
-
- System.out.println("Test 2: Read JDK file test");
- try
- {
- FileInputStream fis = new FileInputStream("utf8test-jdk.out");
- InputStreamReader isr = new InputStreamReader(fis, "UTF8");
- char[] buf = new char[255];
-
- int chars_read = isr.read(buf, 0, str1.length());
- String str3 = new String(buf, 0, chars_read);
-
- chars_read = isr.read(buf, 0, str2.length());
- String str4 = new String(buf, 0, chars_read);
-
- if (!str1.equals(str3) || !str2.equals(str4))
- System.out.println("FAILED: Read JDK file test");
- else
- System.out.println("PASSED: Read JDK file test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Read JDK file test: " + e);
- }
-
- System.out.println("Test 3: Read classpath file test");
- try
- {
- FileInputStream fis = new FileInputStream("utf8test.out");
- InputStreamReader isr = new InputStreamReader(fis, "UTF8");
- char[] buf = new char[255];
-
- int chars_read = isr.read(buf, 0, str1.length());
- String str3 = new String(buf, 0, chars_read);
-
- chars_read = isr.read(buf, 0, str2.length());
- String str4 = new String(buf, 0, chars_read);
-
- if (!str1.equals(str3) || !str2.equals(str4))
- System.out.println("FAILED: Read classpath file test");
- else
- System.out.println("PASSED: Read classpath file test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Read classpath file test: " + e);
- }
-
- System.out.println("Finished test of UTF8 encoding handling");
-}
-
-} // class UTF8EncodingTest
-
diff --git a/libjava/classpath/test/java.io/calldefault.data b/libjava/classpath/test/java.io/calldefault.data
deleted file mode 100644
index 60dcc00..0000000
--- a/libjava/classpath/test/java.io/calldefault.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/dataoutput-jdk.out b/libjava/classpath/test/java.io/dataoutput-jdk.out
deleted file mode 100644
index ba9875c..0000000
--- a/libjava/classpath/test/java.io/dataoutput-jdk.out
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/external.data b/libjava/classpath/test/java.io/external.data
deleted file mode 100644
index 139cc01..0000000
--- a/libjava/classpath/test/java.io/external.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/graph.data b/libjava/classpath/test/java.io/graph.data
deleted file mode 100644
index 55d5b11..0000000
--- a/libjava/classpath/test/java.io/graph.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/nocalldefault.data b/libjava/classpath/test/java.io/nocalldefault.data
deleted file mode 100644
index ba987bb..0000000
--- a/libjava/classpath/test/java.io/nocalldefault.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/notserial.data b/libjava/classpath/test/java.io/notserial.data
deleted file mode 100644
index 16b4971..0000000
--- a/libjava/classpath/test/java.io/notserial.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/notserialfield.data b/libjava/classpath/test/java.io/notserialfield.data
deleted file mode 100644
index a31f046..0000000
--- a/libjava/classpath/test/java.io/notserialfield.data
+++ /dev/null
Binary files differ
diff --git a/libjava/classpath/test/java.io/stream-tokenizer.data b/libjava/classpath/test/java.io/stream-tokenizer.data
deleted file mode 100644
index d09ff25..0000000
--- a/libjava/classpath/test/java.io/stream-tokenizer.data
+++ /dev/null
@@ -1,8 +0,0 @@
- -.1254.ab8/this is to the end of the line
-'This would be a string of quoted text'|||||||
-'\277\444\\\r\n'
-LOWER case ME
-ARE/*C type comments
-recognized even with EOL signficant?*/
-What//is up with C++ comments?
-Will this be pushed back?
diff --git a/libjava/classpath/test/java.io/utf8test-jdk.out b/libjava/classpath/test/java.io/utf8test-jdk.out
deleted file mode 100644
index 0e8ea1f..0000000
--- a/libjava/classpath/test/java.io/utf8test-jdk.out
+++ /dev/null
@@ -1,2 +0,0 @@
-This is the first line of text
-This has some ǿꀀ晦Ȁ weird characters
diff --git a/libjava/classpath/test/java.lang.reflect/ArrayTest.java b/libjava/classpath/test/java.lang.reflect/ArrayTest.java
deleted file mode 100644
index 4433e9b..0000000
--- a/libjava/classpath/test/java.lang.reflect/ArrayTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-import java.lang.reflect.Array;
-
-public class ArrayTest {
- public static void main(String[] args) {
- System.loadLibrary("javalangreflect");
-
- Object[] objArray = new Object[9];
- boolean[] boolArray = new boolean[9];
- double[] doubleArray = new double[9];
- byte[] byteArray = new byte[9];
- char[] charArray = new char[9];
-
- try {
- Boolean[][] blahArray = (Boolean[][])Array.newInstance(java.lang.Boolean.class,new int[]{9,1});
- System.out.print(blahArray != null ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- E.printStackTrace();
- }
- System.out.println(": newInstance(Class,int[])");
-
- try {
- boolean[] blahArray = (boolean[])Array.newInstance(java.lang.Boolean.TYPE, 9);
- System.out.print(blahArray != null ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- E.printStackTrace();
- }
- System.out.println(": newInstance(<primitive Class>,int)");
-
- try {
- objArray = (Object[])Array.newInstance(java.lang.Object.class, 9);
- System.out.print(objArray != null ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": newInstance(Class,int)");
-
- try {
- Boolean obj = new Boolean(true);
- Array.set(objArray,0,obj);
- System.out.print(objArray[0] == obj ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": set()");
-
- try {
- Array.setBoolean(boolArray,1,true);
- System.out.print(boolArray[1] == true ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setBoolean()");
-
- try {
- Array.setByte(byteArray,2,(byte)2);
- System.out.print(byteArray[2] == 2 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setByte()");
-
- try {
- Array.setShort(doubleArray,3,(short)3);
- System.out.print(doubleArray[3] == 3 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setShort()");
-
- try {
- Array.setChar(charArray,4,(char)4);
- System.out.print(charArray[4] == 4 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setChar()");
-
- try {
- Array.setInt(doubleArray,5,5);
- System.out.print(doubleArray[5] == 5 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setInt()");
-
- try {
- Array.setLong(doubleArray,6,6);
- System.out.print(doubleArray[6] == 6 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setLong()");
-
- try {
- Array.setFloat(doubleArray,7,7);
- System.out.print(doubleArray[7] == 7 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setFloat()");
-
- try {
- Array.setDouble(doubleArray,8,8);
- System.out.print(doubleArray[8] == 8 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": setDouble()");
-
- try {
- Boolean obj = (Boolean)Array.get(objArray,0);
- System.out.print(obj != null ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": get()");
-
- try {
- boolArray[1] = true;
- System.out.print(Array.getBoolean(boolArray,1) == true ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getBoolean()");
-
- try {
- byteArray[2] = (byte)2;
- System.out.print(Array.getByte(byteArray,2) == 2 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getByte()");
-
- try {
- byteArray[3] = (byte)3;
- System.out.print(Array.getShort(byteArray,3) == 3 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getShort()");
-
- try {
- charArray[4] = (char)4;
- System.out.print(Array.getChar(charArray,4) == 4 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getChar()");
-
- try {
- byteArray[5] = (byte)5;
- System.out.print(Array.getInt(byteArray,5) == 5 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getInt()");
-
- try {
- byteArray[6] = (byte)6;
- System.out.print(Array.getLong(byteArray,6) == 6 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getLong()");
-
- try {
- byteArray[7] = (byte)7;
- System.out.print(Array.getFloat(byteArray,7) == 7 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getFloat()");
-
- try {
- doubleArray[8] = 8;
- System.out.print(Array.getDouble(doubleArray,8) == 8 ? "PASSED" : "FAILED");
- } catch(Exception E) {
- System.out.print("FAILED");
- }
- System.out.println(": getDouble()");
- }
-}
diff --git a/libjava/classpath/test/java.lang.reflect/Makefile.am b/libjava/classpath/test/java.lang.reflect/Makefile.am
deleted file mode 100644
index 79106a8..0000000
--- a/libjava/classpath/test/java.lang.reflect/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-check_JAVA = ArrayTest.java
-
-
diff --git a/libjava/classpath/test/java.net/BUGS b/libjava/classpath/test/java.net/BUGS
deleted file mode 100644
index b44c508..0000000
--- a/libjava/classpath/test/java.net/BUGS
+++ /dev/null
@@ -1,5 +0,0 @@
-Why can I only send a 65332 sized UDP packet? Is there that much UDP overhead?
-
-Setting the multicast interface doesn't seem to work.
-
-
diff --git a/libjava/classpath/test/java.net/ClientDatagram.java b/libjava/classpath/test/java.net/ClientDatagram.java
deleted file mode 100644
index 6ec9825..0000000
--- a/libjava/classpath/test/java.net/ClientDatagram.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Class to test Datagrams from a client perspective */
-
-import java.io.*;
-import java.net.*;
-
-public class ClientDatagram
-{
-
-public static void
-main(String[] argv) throws IOException
-{
- System.out.println("Starting datagram tests");
-
- byte[] buf = new byte[2048];
- DatagramPacket p = new DatagramPacket(buf, buf.length);
- InetAddress addr = InetAddress.getByName("localhost");
-
- /* Execute the daytime UDP service on localhost. You may need to
- enable this in inetd to make the test work */
- System.out.println("Test 1: Simple daytime test");
- try
- {
-
- DatagramSocket s = new DatagramSocket();
-
- System.out.println("Socket bound to " + s.getLocalAddress() +
- ":" + s.getLocalPort());
-
- byte[] sbuf = { 'H', 'I' };
- DatagramPacket spack = new DatagramPacket(sbuf, sbuf.length, addr, 13);
-
- s.send(spack);
- s.receive(p);
-
- System.out.println("Received " + p.getLength() + " bytes from " +
- p.getAddress() + ":" + p.getPort());
-
- byte[] tmp = new byte[p.getLength()];
- for (int i = 0; i < p.getLength(); i++)
- tmp[i] = buf[i];
-
- System.out.print("Data: " + new String(tmp));
-
- s.close();
- System.out.println("PASSED simple datagram test");
- }
- catch(Exception e)
- {
- System.out.println("FAILED simple datagram test: " + e);
- }
-
- System.out.println("Test 2: Specific host/port binding");
- try
- {
- DatagramSocket s = new DatagramSocket(8765, addr);
- if (s.getLocalPort() != 8765)
- throw new IOException("Bound to wrong port: " + s.getLocalPort());
-
- if (!s.getLocalAddress().equals(addr))
- throw new IOException("Bound to wrong host:" + s.getLocalAddress());
-
- s.close();
- System.out.println("PASSED specific host/port binding test");
- }
- catch (Exception e)
- {
- System.out.println("FAILED specific host/port binding: " + e);
- }
-
- System.out.println("Test 3: Socket Options test");
- try
- {
- DatagramSocket s = new DatagramSocket();
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- System.out.println("Setting SO_TIMEOUT to 170");
- s.setSoTimeout(170);
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- System.out.println("Setting SO_TIMEOUT to 0");
- s.setSoTimeout(0);
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- s.close();
- }
- catch(Exception e)
- {
- System.out.println("WARNING: Problem with SO_TIMEOUT test: " + e.getMessage());
- System.out.println("This is ok on Linux");
- }
-
- System.out.println("Test 4: Max values test");
- try
- {
-// ServerDatagram sd = new ServerDatagram(37900);
-// sd.run();
-
- DatagramSocket s = new DatagramSocket();
- byte[] sbuf = new byte[65332];
- DatagramPacket spack = new DatagramPacket(sbuf, sbuf.length,
- addr, 37900);
-
- s.send(spack);
- s.close();
- }
- catch (Exception e)
- {
- System.out.println("FAILED max values test: " + e);
- }
-
- System.out.println("Datagram testing complete");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/ClientSocket.java b/libjava/classpath/test/java.net/ClientSocket.java
deleted file mode 100644
index 53a498b..0000000
--- a/libjava/classpath/test/java.net/ClientSocket.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/* A class to test my client TCP socket implementation */
-
-import java.net.*;
-import java.io.*;
-
-public class ClientSocket extends Object
-{
-public static void
-main(String[] argv) throws IOException
-{
- System.out.println("Starting client stream socket test");
-
- /* Simple connection and read test */
- System.out.println("Test 1: Connection to daytime port on local host");
- try
- {
- InetAddress addr = InetAddress.getByName("127.0.0.1");
-
- Socket s = new Socket(addr, 13);
-
- InputStream is = s.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
-
- for (String str = br.readLine(); ; str = br.readLine())
- {
- if (str == null)
- break;
- System.out.println(str);
- }
- s.close();
- System.out.println("PASSED: daytime test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: daytime test: " + e);
- }
-
- /* Simple connection refused test */
- System.out.println("Test 2: Connection refused test");
- try
- {
- InetAddress addr = InetAddress.getByName("127.0.0.1");
-
- Socket s = new Socket(addr, 47);
- s.close();
-
- System.out.print("WARNING: Cannot perform connection refused test");
- System.out.println(" because someone is listening on localhost:47");
- }
- catch(IOException e)
- {
- System.out.println("PASSED: connection refused test: " + e.getMessage());
- }
-
- /* Socket attributes test */
- System.out.println("Test 3: Connection attributes");
- try
- {
- Socket s = new Socket("www.netscape.com", 80);
-
- String laddr = s.getLocalAddress().getHostName();
- int lport = s.getLocalPort();
- String raddr = s.getInetAddress().getHostName();
- int rport = s.getPort();
-
- System.out.println("Local Address is: " + laddr);
- System.out.println("Local Port is: " + lport);
- System.out.println("Remote Address is: " + raddr);
- System.out.println("Remote Port is: " + rport);
- System.out.println("Socket.toString is: " + s);
-
- if ( (laddr == null) ||
- ((lport < 0) || (lport > 65535)) ||
- (raddr.indexOf("netscape.com") == -1) ||
- (rport != 80))
- System.out.println("FAILED: connection attribute test");
- else
- System.out.println("PASSED: connection attribute test");
-
- s.close();
- }
- catch(IOException e)
- {
- System.out.println("FAILED: connection attributes test: " + e.getMessage());
- }
-
- /* Socket options test */
- System.out.println("Test 4: Socket options");
- Socket s = new Socket("127.0.0.1", 23);
-
- try
- {
- // SO_TIMEOUT
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- System.out.println("Setting SO_TIMEOUT to 142");
- s.setSoTimeout(142);
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- System.out.println("Setting SO_TIMEOUT to 0");
- s.setSoTimeout(0);
- System.out.println("SO_TIMEOUT = " + s.getSoTimeout());
- }
- catch (IOException e)
- {
- System.out.println("WARNING: SO_TIMEOUT problem: " + e.getMessage());
- System.out.println("This is ok on Linux");
- }
- try
- {
- // Try TCP_NODELAY
- System.out.println("TCP_NODELAY = " + s.getTcpNoDelay());
- System.out.println("Setting TCP_NODELAY to true");
- s.setTcpNoDelay(true);
- System.out.println("TCP_NODELAY = " + s.getTcpNoDelay());
- System.out.println("Setting TCP_NODELAY to false");
- s.setTcpNoDelay(false);
- System.out.println("TCP_NODELAY = " + s.getTcpNoDelay());
-
- // Try SO_LINGER
- System.out.println("SO_LINGER = " + s.getSoLinger());
- System.out.println("Setting SO_LINGER to 100");
- s.setSoLinger(true, 100);
- System.out.println("SO_LINGER = " + s.getSoLinger());
- System.out.println("Setting SO_LINGER to off");
- s.setSoLinger(false, 0);
- System.out.println("SO_LINGER = " + s.getSoLinger());
-
- System.out.println("PASSED: socket options test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: socket options test: " + e.getMessage());
- }
- s.close();
-
- /* Simple read/write test */
- System.out.println("Test 5: Simple read/write test");
- try
- {
- System.out.println("Downloading the Transmeta homepage");
- s = new Socket("www.transmeta.com", 80);
-
- BufferedReader in = new BufferedReader(new
- InputStreamReader(s.getInputStream()));
- PrintWriter out = new PrintWriter(new
- OutputStreamWriter(s.getOutputStream()));
-
- out.print("GET /\r\n");
- out.flush();
-
- for (String str = in.readLine(); ; str = in.readLine())
- {
- if (str == null)
- break;
- System.out.println(str);
- }
-
- s.close();
- System.out.println("PASSED: simple read/write test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: simple read/write test: " + e.getMessage());
- }
-
- /* Connect to our server socket */
- System.out.println("Test 6: Connect to ServerSocket");
- try
- {
- s = new Socket("localhost", 9999);
-
- PrintWriter out = new PrintWriter(new
- OutputStreamWriter(s.getOutputStream()));
-
- out.println("Hello, there server socket");
- out.print("I'm dun");
- out.flush();
- s.close();
- System.out.println("PASSED: connect to server socket");
- }
- catch(Exception e)
- {
- System.out.println("FAILED: connect to server socket: " + e);
- }
-
- System.out.println("Client stream socket test complete");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/Makefile.am b/libjava/classpath/test/java.net/Makefile.am
deleted file mode 100644
index f57f67f..0000000
--- a/libjava/classpath/test/java.net/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-JAVAROOT = .
-
-check_JAVA = ClientDatagram.java ClientSocket.java MulticastClient.java \
- MulticastServer.java ServerDatagram.java ServerSocketTest.java \
- SubSocket.java TestNameLookups.java URLTest.java
-
-EXTRA_DIST = BUGS runtest
diff --git a/libjava/classpath/test/java.net/MulticastClient.java b/libjava/classpath/test/java.net/MulticastClient.java
deleted file mode 100644
index 8dc18fe..0000000
--- a/libjava/classpath/test/java.net/MulticastClient.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Test Multicast Sockets */
-
-import java.net.*;
-import java.io.*;
-
-public class MulticastClient
-{
-
-public static void
-main(String[] argv) throws IOException
-{
- System.out.println("Starting multicast tests");
- System.out.println("NOTE: You need to do an 'ifconfig <interface> " +
- "multicast' or this will fail on linux");
-
- byte[] buf = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o','r','l','d' };
-
- /* Simple Send */
- System.out.println("Test 1: Multicast send/receive test");
- try
- {
- InetAddress addr = InetAddress.getByName("234.0.0.1");
-
- MulticastSocket s = new MulticastSocket();
- DatagramPacket p = new DatagramPacket(buf, buf.length, addr, 3333);
-
- s.joinGroup(addr);
- s.send(p);
- s.close();
- }
- catch(IOException e)
- {
- System.out.println("FAILED: simple multicast send: " + e);
- }
-
- /* Options */
- System.out.println("Test 2: Multicast socket options");
- try
- {
- InetAddress addr;
- MulticastSocket s = new MulticastSocket();
-
- System.out.println("TTL = " + s.getTTL());
- System.out.println("Setting TTT to 121");
- s.setTTL((byte)12);
- System.out.println("TTL = " + s.getTTL());
-
- InetAddress oaddr = s.getInterface();
- System.out.println("Multicast Interface = " + oaddr);
- System.out.println("Setting interface to localhost");
- addr = InetAddress.getByName("198.211.138.177");
- s.setInterface(addr);
- System.out.println("Multicast Interface = " + s.getInterface());
- System.out.println("Setting interface to " + oaddr);
- s.setInterface(oaddr);
- System.out.println("Multicast Interface = " + s.getInterface());
- }
- catch(IOException e)
- {
- System.out.println("FAILED: multicast options: " + e);
- }
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/MulticastServer.java b/libjava/classpath/test/java.net/MulticastServer.java
deleted file mode 100644
index 1a54f99..0000000
--- a/libjava/classpath/test/java.net/MulticastServer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Mulitcast Server Socket for testing */
-
-import java.io.*;
-import java.net.*;
-
-public class MulticastServer
-{
-
-private MulticastSocket s;
-
-public static void
-main(String[] argv) throws IOException
-{
- MulticastServer ms = new MulticastServer(3333);
- ms.run();
-}
-
-public
-MulticastServer(int port) throws IOException
-{
- s = new MulticastSocket(port);
- System.out.println("Server multicast socket created");
-}
-
-public void
-run()
-{
- try
- {
- byte[] buf = new byte[255];
-
- DatagramPacket p = new DatagramPacket(buf, buf.length);
- InetAddress addr = InetAddress.getByName("234.0.0.1");
-
- p.setLength(buf.length);
-
- System.out.println("Joining multicast group");
- s.joinGroup(addr);
- System.out.print("Receiving ...");
- s.receive(p);
- System.out.println("");
- s.leaveGroup(addr);
- System.out.println("ServerDatagram: received " + p.getLength() +
- " bytes from " + p.getAddress().getHostName() + ":" +
- p.getPort());
- System.out.println("Data: " + new String(p.getData()));
-
- System.out.println("PASSED multicast server test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: MulticastServer caught an exception: " + e);
- }
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/ServerDatagram.java b/libjava/classpath/test/java.net/ServerDatagram.java
deleted file mode 100644
index 17ce44a..0000000
--- a/libjava/classpath/test/java.net/ServerDatagram.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Server Datagram Socket for testing */
-
-import java.io.*;
-import java.net.*;
-
-public class ServerDatagram implements Runnable
-{
-
-private DatagramSocket s;
-
-public static void
-main(String[] argv) throws IOException
-{
- ServerDatagram sd = new ServerDatagram(37900);
- sd.run();
-}
-
-public
-ServerDatagram(int port) throws SocketException
-{
- s = new DatagramSocket(port);
- System.out.println("Server datagram socket created");
-}
-
-public void
-run()
-{
- try
- {
- byte[] buf = new byte[65535];
-
- DatagramPacket p = new DatagramPacket(buf, buf.length);
-
- p.setLength(buf.length);
-
- s.receive(p);
- System.out.println("ServerDatagram: received " + p.getLength() +
- " bytes from " + p.getAddress().getHostName() + ":" +
- p.getPort());
-
- if (p.getLength() != 65332)
- throw new IOException("Incorrect data size");
- System.out.println("PASSED max values test");
- }
- catch (IOException e)
- {
- System.out.print("FAILED: ServerDatagram caught an exception: " + e);
- }
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/ServerSocketTest.java b/libjava/classpath/test/java.net/ServerSocketTest.java
deleted file mode 100644
index f444963..0000000
--- a/libjava/classpath/test/java.net/ServerSocketTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Class to test server sockets */
-
-import java.io.*;
-import java.net.*;
-
-public class ServerSocketTest extends ServerSocket
-{
-
-public
-ServerSocketTest(int port) throws IOException
-{
- super(port);
-}
-
-public static void
-main(String[] argv)
-{
- System.out.println("Starting up server socket");
-
- try {
- ServerSocketTest ss = new ServerSocketTest(9999);
-
- System.out.println("Created server socket bound to port " +
- ss.getLocalPort() + " on local address " +
- ss.getInetAddress());
-
- SubSocket s = new SubSocket();
- ss.implAccept(s);
-// Socket s = ss.accept();
-
- System.out.println("Got a connection from " + s.getInetAddress() +
- " on port " + s.getPort());
-
- BufferedReader br = new BufferedReader(new
- InputStreamReader(s.getInputStream()));
-
- for (String str = br.readLine(); ; str = br.readLine())
- {
- if (str == null)
- break;
- System.out.println(str);
- }
- s.close();
- ss.close();
- System.out.println("PASSED: server socket test");
- }
- catch (Exception e) {
- System.out.println("FAILED: server socket test: " + e);
- }
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/SubSocket.java b/libjava/classpath/test/java.net/SubSocket.java
deleted file mode 100644
index 97da447..0000000
--- a/libjava/classpath/test/java.net/SubSocket.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Quick and dirty Socket subclass */
-
-public class SubSocket extends java.net.Socket
-{
-}
-
diff --git a/libjava/classpath/test/java.net/TestNameLookups.java b/libjava/classpath/test/java.net/TestNameLookups.java
deleted file mode 100644
index 592d9e0..0000000
--- a/libjava/classpath/test/java.net/TestNameLookups.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* A class to test my java.net.InetAddress implementation */
-
-import java.net.*;
-
-public class TestNameLookups extends Object
-{
-public static void
-main(String[] argv) throws UnknownHostException
-{
- InetAddress addr;
-
- System.out.println("Started address lookup test");
-
- /* Test local host */
- try
- {
- addr = InetAddress.getLocalHost();
-
- System.out.println("The local hostname is " + addr.getHostName() +
- " with an IP address of " + addr.getHostAddress());
- }
- catch(UnknownHostException e)
- {
- System.out.println("WARNING: Can't resolve local hostname");
- }
-
- /* Test simple lookup by IP */
- addr = InetAddress.getByName("18.159.0.42");
-
- System.out.println("Looked up IP addres 18.159.0.42 and got back a " +
- "hostname of " + addr.getHostName());
-
- /* Test failed reverse lookup of IP */
- addr = InetAddress.getByName("194.72.246.154");
-
- System.out.println("Looked up IP addres 194.72.246.154 and got back a " +
- "hostname of " + addr.getHostName());
-
- /* Test mangled/invalid IP's */
- try { addr = InetAddress.getByName("122.24.1."); }
- catch (UnknownHostException e) {
- System.out.println("Passed bad IP test 1");
- }
-
- try { addr = InetAddress.getByName("122.24.52"); }
- catch (UnknownHostException e) {
- System.out.println("Passed bad IP test 2");
- }
-
- try { addr = InetAddress.getByName("122.256.52.1"); }
- catch (UnknownHostException e) {
- System.out.println("Passed bad IP test 3");
- }
-
- /* Test simple lookup by name with external info */
- addr = InetAddress.getByName("www.starnews.com");
- System.out.println("Looked up host www.starnews.com and got back an " +
- "IP address of " + addr.getHostAddress());
- byte[] octets = addr.getAddress();
- System.out.println("Raw Address Bytes: octet1=" + (int)octets[0] +
- " octets2=" + (int)octets[1] + " octet3=" + (int)octets[2] +
- " octets4=" + (int)octets[3]);
- System.out.println("toString() returned: " + addr.toString());
- System.out.println("isMulticastAddress returned: "
- + addr.isMulticastAddress());
-
- /* Test complex lookup */
- System.out.println("Looking up all addresses for indiana.edu ...");
- InetAddress[] list = InetAddress.getAllByName("indiana.edu");
- for (int i = 0; i < list.length; i++)
- {
- addr = list[i];
-
- System.out.println(" Hostname: " + addr.getHostName() +
- " IP Address: " + addr.getHostAddress());
- }
-
- /* Test equality */
- InetAddress addr1 = InetAddress.getByName("www.urbanophile.com");
- InetAddress addr2 = InetAddress.getByName("www.urbanophile.com");
-
- if (addr1.equals(addr2) && addr2.equals(addr1))
- System.out.println("Passed equality test #1");
- else
- System.out.println("Failed equality test #1");
-
- addr1 = InetAddress.getByName("www.ac.com");
- addr2 = InetAddress.getByName("www.hungry.com");
-
- if (!addr1.equals(addr2) && !addr2.equals(addr1))
- System.out.println("Passed equality test #2");
- else
- System.out.println("Failed equality test #2");
-
- /* Quick test to see if it looks like we're caching things */
- addr1 = InetAddress.getByName("www.urbanophile.com");
- System.out.println("Got " + addr1.getHostName() + " " + addr1.getHostAddress());
- addr2 = InetAddress.getByName("www.hungry.com");
- System.out.println("Got " + addr2.getHostName() + " " + addr2.getHostAddress());
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/URLTest.java b/libjava/classpath/test/java.net/URLTest.java
deleted file mode 100644
index 726bfa5..0000000
--- a/libjava/classpath/test/java.net/URLTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Test URL's */
-
-import java.net.*;
-import java.io.*;
-
-public class URLTest
-{
-
-public static void
-main(String argv[])
-{
- System.out.println("Starting URL tests");
-
- /* Simple URL test */
-
- System.out.println("Test 1: Simple URL test");
-
- try
- {
- URL url = new URL("http", "www.fsf.org", 80, "/");
-
- if (!url.getProtocol().equals("http") ||
- !url.getHost().equals("www.fsf.org") ||
- url.getPort() != 80 ||
- !url.getFile().equals("/"))
- System.out.println("FAILED: Simple URL test");
-
- System.out.println("URL is: " + url.toString());
-
- URLConnection uc = url.openConnection();
-
- if (uc instanceof HttpURLConnection)
- System.out.println("Got the expected connection type");
-
- HttpURLConnection hc = (HttpURLConnection)uc;
-
- hc.connect();
-
- System.out.flush();
- System.out.println("Dumping response headers");
- for (int i = 0; ; i++)
- {
- String key = hc.getHeaderFieldKey(i);
- if (key == null)
- break;
-
- System.out.println(key + ": " + hc.getHeaderField(i));
- }
-
- System.out.flush();
- System.out.println("Dumping contents");
-
- BufferedReader br = new BufferedReader(new
- InputStreamReader(hc.getInputStream()));
-
- for (String str = br.readLine(); str != null; str = br.readLine())
- {
- System.out.println(str);
- }
- System.out.flush();
-
- hc.disconnect();
-
- System.out.println("Content Type: " + hc.getContentType());
- System.out.println("Content Encoding: " + hc.getContentEncoding());
- System.out.println("Content Length: " + hc.getContentLength());
- System.out.println("Date: " + hc.getDate());
- System.out.println("Expiration: " + hc.getExpiration());
- System.out.println("Last Modified: " + hc.getLastModified());
-
- System.out.println("PASSED: Simple URL test");
- }
- catch(IOException e)
- {
- System.out.println("FAILED: Simple URL test: " + e);
- }
-
- // Parsing test
- System.out.println("Test 2: URL parsing test");
- try
- {
- URL url = new URL("http://www.urbanophile.com/arenn/trans/trans.html#mis");
- if (!url.toString().equals(
- "http://www.urbanophile.com/arenn/trans/trans.html#mis"))
- System.out.println("FAILED: Parse URL test: " + url.toString());
- else {
- System.out.println("Parsed ok: " + url.toString());
- url = new URL("http://www.foo.com:8080/#");
- if (!url.toString().equals("http://www.foo.com:8080/#"))
- System.out.println("FAILED: Parse URL test: " + url.toString());
- else {
- System.out.println("Parsed ok: " + url.toString());
- url = new URL("http://www.bar.com/test:file/");
- if (!url.toString().equals("http://www.bar.com/test:file/"))
- System.out.println("FAILED: Parse URL test: " + url.toString());
- else {
- System.out.println("Parsed ok: " + url.toString());
- url = new URL("http://www.gnu.org");
- if (!url.toString().equals("http://www.gnu.org/"))
- System.out.println("FAILED: Parse URL test: " + url.toString());
- else {
- System.out.println("Parsed ok: " + url.toString());
- url = new URL("HTTP://www.fsf.org/");
- if (!url.toString().equals("http://www.fsf.org/"))
- System.out.println("FAILED: Parse URL test: " + url.toString());
- else {
- System.out.println("Parsed ok: " + url.toString());
- System.out.println("PASSED: URL parse test");
- }
- }
- }
- }
- }
- }
- catch (IOException e)
- {
- System.out.println("FAILED: URL parsing test: " + e);
- }
-
- // getContent test
- System.out.println("Test 3: getContent test");
- try
- {
- URL url = new URL("http://localhost/~arenn/services.txt");
-
- Object obj = url.getContent();
- System.out.println("Object type is: " + obj.getClass().getName());
-
- if (obj instanceof InputStream)
- {
- System.out.println("Got InputStream, so dumping contents");
- BufferedReader br = new BufferedReader(new
- InputStreamReader((InputStream)obj));
-
- for (String str = br.readLine(); str != null; str = br.readLine())
- System.out.println(str);
-
- br.close();
- }
- else
- {
- System.out.println("FAILED: Object is not an InputStream");
- }
-
- System.out.println("PASSED: getContent test");
- }
- catch (IOException e)
- {
- System.out.println("FAILED: getContent test: " + e);
- }
-
- System.out.println("URL test complete");
-}
-
-}
-
diff --git a/libjava/classpath/test/java.net/runtest b/libjava/classpath/test/java.net/runtest
deleted file mode 100755
index 4439aa0..0000000
--- a/libjava/classpath/test/java.net/runtest
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-
-echo "Running java.net tests"
-echo "I assume japhar is in /usr/local/japhar"
-echo "Please make sure background processes don't block on a tty write"
-echo "Please do an 'ifconfig multicast' and 'ifconfig allmulti' on your"
-echo "network interfaces"
-
-export CLASSPATH=.:/usr/local/japhar/share
-export PATH=$PATH:/usr/local/japhar/bin
-
-echo "Executing name lookup test ..."
-japhar TestNameLookups
-
-echo "Executing stream socket tests ..."
-japhar ServerSocketTest &
-japhar ClientSocket
-
-echo "Executing datagram socket tests ..."
-japhar ServerDatagram &
-japhar ClientDatagram
-
-echo "Executing multicast socket tests ..."
-japhar MulticastServer &
-japhar MulticastClient
-
-echo "Executing URL tests ..."
-japhar URLTest
-
-echo "java.net Testing complete."
-exit 0
-
diff --git a/libjava/classpath/test/java.util/ArraysTest.java b/libjava/classpath/test/java.util/ArraysTest.java
deleted file mode 100644
index f144092..0000000
--- a/libjava/classpath/test/java.util/ArraysTest.java
+++ /dev/null
@@ -1,271 +0,0 @@
-//////
-// There should be a copyright thing here but I'm in too much of a hurry to add
-// one right now. I don't care much what the copyright is though so if someone
-// wants to put the appropriate one here, go right ahead (I think GPL probably
-// unless that causes a problem with running on proprietory JVMs or testing
-// proprietory class libraries or anything.
-//////
-
-import java.util.*;
-
-/**
- * Test of most of the methods in the Arrays class. The class prints out a
- * single pass/fail message, and enumerates all failures. The message is in the
- * PASS: or FAIL: format that dejagnu uses, but other than that I don't know
- * enough to make it a "proper" testsuite.
- */
-public class ArraysTest {
-
- static int passed = 0;
- static int failed = 0;
-
- public static void main(String[] args) {
- testBool();
- testByte();
- testChar();
- testShort();
- testInt();
- testLong();
- testFloat();
- testDouble();
- testObject();
- if (failed != 0) {
- System.out.println(" (" + failed + " fails and " + passed + " passes).");
- } else {
- System.out.println("PASSED: [Arrays] All " + passed + " tests.");
- }
- }
-
- static void testBool() {
- boolean[] a1 = new boolean[] {true, false, false, true, true, false, true};
- boolean[] a2 = new boolean[] {false, false, false, true, true, true, true};
- boolean[] a3 = new boolean[] {true, false, false, true, true, false, true};
- passfail("boolean equals", !Arrays.equals(a1, a2) && Arrays.equals(a1, a3));
- Arrays.fill(a1, false);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == false;
- }
- passfail("boolean fill", filled);
- }
-
- static void testByte() {
- byte[] a1 = new byte[] {3, -2, 0, 1, 4, 0, -5};
- byte[] a2 = new byte[] {-5, -2, 0, 0, 1, 3, 4};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("byte sort", sorted);
- passfail("byte search", Arrays.binarySearch(a2, (byte)1) == 4 &&
- Arrays.binarySearch(a2, (byte)-1) == -3);
- passfail("byte equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, (byte)6);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == (byte)6;
- }
- passfail("byte fill", filled);
- }
-
- static void testChar() {
- char[] a1 = new char[] {'i', 'd', 'f', 'g', 'j', 'f', 'a'};
- char[] a2 = new char[] {'a', 'd', 'f', 'f', 'g', 'i', 'j'};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("char sort", sorted);
- passfail("char search", Arrays.binarySearch(a2, 'i') == 5 &&
- Arrays.binarySearch(a2, 'e') == -3);
- passfail("char equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, 'Q');
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == 'Q';
- }
- passfail("char fill", filled);
- }
-
- static void testShort() {
- short[] a1 = new short[] {3, -2, 0, 1, 4, 0, -5};
- short[] a2 = new short[] {-5, -2, 0, 0, 1, 3, 4};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("short sort", sorted);
- passfail("short search", Arrays.binarySearch(a2, (short)1) == 4 &&
- Arrays.binarySearch(a2, (short)-1) == -3);
- passfail("short equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, (short)6);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == (short)6;
- }
- passfail("short fill", filled);
- }
-
- static void testInt() {
- int[] a1 = new int[] {3, -2, 0, 1, 4, 0, -5};
- int[] a2 = new int[] {-5, -2, 0, 0, 1, 3, 4};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("int sort", sorted);
- passfail("int search", Arrays.binarySearch(a2, 1) == 4 &&
- Arrays.binarySearch(a2, -1) == -3);
- passfail("int equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, 6);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == 6;
- }
- passfail("int fill", filled);
- }
-
- static void testLong() {
- long[] a1 = new long[] {3, -2, 0, 1, 4, 0, -5};
- long[] a2 = new long[] {-5, -2, 0, 0, 1, 3, 4};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("long sort", sorted);
- passfail("long search", Arrays.binarySearch(a2, 1L) == 4 &&
- Arrays.binarySearch(a2, -1L) == -3);
- passfail("long equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, 6L);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == 6L;
- }
- passfail("long fill", filled);
- }
-
- static void testFloat() {
- float[] a1 = new float[] {-4.0f, 75.3f, Float.POSITIVE_INFINITY, -0.0f,
- -3324.342f, 0.0f, 3.14f, 2.5f, 1.0f, 1.0f};
- float[] a2 = new float[] {-3324.342f, -4.0f, -0.0f, 0.0f, 1.0f, 1.0f, 2.5f,
- 3.14f, 75.3f, Float.POSITIVE_INFINITY};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("float sort", sorted);
- passfail("float search", Arrays.binarySearch(a2, 3.14f) == 7 &&
- Arrays.binarySearch(a2, -1.0f) == -3);
- passfail("float equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, 27.0f);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == 27.0f;
- }
- passfail("float fill", filled);
- }
-
- static void testDouble() {
- double[] a1 = new double[] {-4.0d, 75.3d, Double.POSITIVE_INFINITY, -0.0d,
- -3324.342d, 0.0d, 3.14d, 2.5d, 1.0d, 1.0d};
- double[] a2 = new double[] {-3324.342d, -4.0d, -0.0d, 0.0d, 1.0d, 1.0d,
- 2.5d, 3.14d, 75.3d, Double.POSITIVE_INFINITY};
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = !(a1[i] > a1[i+1]); // the odd way of writing <= is so that we
- // aren't tooo mean to NaNs
- }
- passfail("double sort", sorted);
- passfail("double search", Arrays.binarySearch(a2, 3.14d) == 7 &&
- Arrays.binarySearch(a2, -1.0d) == -3);
- passfail("double equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, 27.0d);
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i] == 27.0d;
- }
- passfail("double fill", filled);
- }
-
- static void testObject() {
- String[] a1 = new String[] {"this", "is", "a", "string", "test", "which",
- "will", "hopefully", "demonstrate", "that",
- "sorting", "works"};
- String[] a2 = new String[] {"a", "demonstrate", "hopefully", "is",
- "sorting", "string", "test", "that", "this",
- "which", "will", "works"};
- String[] a3 = new String[] {"this", "is", "a", "reverse", "string", "test",
- "which", "will", "hopefully", "demonstrate",
- "that", "sorting", "works", "with",
- "comparators"};
- String[] a4 = new String[] {"works", "with", "will", "which", "this",
- "that", "test", "string", "sorting", "reverse",
- "is", "hopefully", "demonstrate", "comparators",
- "a"};
- final String list = "[works, with, will, which, this, that, test, string," +
- " sorting, reverse, is, hopefully, demonstrate," +
- " comparators, a]";
- boolean firstEq = Arrays.equals(a1, a2);
- Arrays.sort(a1);
- boolean sorted = true;
- for (int i = 0; sorted && i < a1.length - 1; i++) {
- sorted = a1[i].compareTo(a1[i+1]) <= 0;
- }
- passfail("object sort", sorted);
- passfail("object search", Arrays.binarySearch(a2, "hopefully") == 2 &&
- Arrays.binarySearch(a2, "strange") == -6);
- passfail("object equals", !firstEq && Arrays.equals(a1, a2));
- Arrays.fill(a1, "blah");
- boolean filled = true;
- for (int i = 0; filled && i < a1.length; i++) {
- filled = a1[i].equals("blah");
- }
- passfail("object fill", filled);
- Comparator c = new ReverseOrder();
- Arrays.sort(a3, c);
- passfail("comparator sort", Arrays.equals(a3, a4));
- passfail("comparator search", Arrays.binarySearch(a4, "sorting", c) == 8 &&
- Arrays.binarySearch(a4, "nice", c) == -11);
-
- // toList doesn't exist -gcb
-// passfail("toList toString", Arrays.toList(a4).toString().equals(list));
- }
-
- static void passfail(String desc, boolean didpass) {
- if (didpass) {
- passed++;
- } else {
- if (failed++ != 0) {
- System.out.print(", " + desc);
- } else {
- System.out.print("FAILED: [Arrays] " + desc);
- }
- }
- }
-}
-
-class ReverseOrder implements Comparator {
- public int compare(Object a, Object b) {
- return -((Comparable)a).compareTo(b);
- }
-}
diff --git a/libjava/classpath/test/java.util/Makefile.am b/libjava/classpath/test/java.util/Makefile.am
deleted file mode 100644
index abb50f7..0000000
--- a/libjava/classpath/test/java.util/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-## Input file for automake to generate the Makefile.in used by configure
-
-check_JAVA = ArraysTest.java
-
-
diff --git a/libjava/classpath/test/native/lib/JNILinkTest.java b/libjava/classpath/test/native/lib/JNILinkTest.java
deleted file mode 100644
index 326c8ea..0000000
--- a/libjava/classpath/test/native/lib/JNILinkTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-public class JNILinkTest {
- static {
- System.loadLibrary("jnilinktest");
- }
-
- public static void main(String args[]) {
- MethodTester m = new MethodTester();
- Data1 d1 = new Data1();
- Data2 d2 = new Data2();
- int NUM_TESTS=4;
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test1(d1,d2))
- System.out.println("SUCCEED: test1");
- else
- System.out.println("FAIL: test1");
- } catch(Exception E) {
- System.out.println("FAIL: test1 (exception)");
- }
- }
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test2(d1,d2))
- System.out.println("SUCCEED: test2");
- else
- System.out.println("FAIL: test2");
- } catch(Exception E) {
- System.out.println("FAIL: test2");
- }
- }
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test3(d1,d2))
- System.out.println("SUCCEED: test3");
- else
- System.out.println("FAIL: test3");
- } catch(Exception E) {
- System.out.println("FAIL: test3");
- }
- }
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test4(d1,d2))
- System.out.println("SUCCEED: test4");
- else
- System.out.println("FAIL: test4");
- } catch(Exception E) {
- System.out.println("FAIL: test4");
- }
- }
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test5(d1,d2))
- System.out.println("SUCCEED: test5");
- else
- System.out.println("FAIL: test5");
- } catch(Exception E) {
- System.out.println("FAIL: test5");
- }
- }
- for(int i=0;i<NUM_TESTS;i++) {
- try {
- if(m.test6(d1,d2))
- System.out.println("SUCCEED: test6");
- else
- System.out.println("FAIL: test6");
- } catch(Exception E) {
- System.out.println("FAIL: test5");
- }
- }
- }
-}
-
-class MethodTester {
- // class test
- native boolean test1(Data1 d1, Data2 d2);
- // field test
- native boolean test2(Data1 d1, Data2 d2);
- // static field test
- native boolean test3(Data1 d1, Data2 d2);
- // method test
- native boolean test4(Data1 d1, Data2 d2);
- // static method test
- native boolean test5(Data1 d1, Data2 d2);
- // final method test
- native boolean test6(Data1 d1, Data2 d2);
-}
-
-class Data1 {
- static boolean staticVar = true;
- private boolean instanceVar = true;
- static boolean staticMethod() { return true; }
- boolean instanceMethod() { return true; }
- boolean finalMethod() { return true; }
-}
-
-class Data2 extends Data1 {
- static boolean staticVar = false;
- private boolean instanceVar = false;
- static boolean staticMethod() { return false; }
- boolean instanceMethod() { return false; }
- boolean finalMethod() { return false; }
-}
diff --git a/libjava/classpath/test/native/lib/MethodTester.c b/libjava/classpath/test/native/lib/MethodTester.c
deleted file mode 100644
index 24f59bd..0000000
--- a/libjava/classpath/test/native/lib/MethodTester.c
+++ /dev/null
@@ -1,110 +0,0 @@
-#include "MethodTester.h"
-#include <jnilink.h>
-#include <jcl.h>
-
-static linkPtr t1_1=NULL;
-static linkPtr t1_2=NULL;
-static linkPtr t2=NULL;
-static linkPtr t3=NULL;
-static linkPtr t4=NULL;
-static linkPtr t5=NULL;
-static linkPtr t6=NULL;
-
-/*
- * Class: MethodTester
- * Method: test1
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test1
-(JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- if(LINK_LinkClass(env,&t1_1,"Data1") == NULL || LINK_LinkClass(env,&t1_2,"Data2") == NULL)
- return JNI_FALSE;
- if(!(*env)->IsAssignableFrom(env, LINK_ResolveClass(env,t1_1), LINK_ResolveClass(env,t1_2))
- && (*env)->IsAssignableFrom(env, LINK_ResolveClass(env,t1_2), LINK_ResolveClass(env,t1_1))) {
- return JNI_TRUE;
- } else {
- return JNI_FALSE;
- }
-}
-
-/*
- * Class: MethodTester
- * Method: test2
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test2
-(JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- jclass c1 = (*env)->GetObjectClass(env,d1);
- jclass c2 = (*env)->GetObjectClass(env,d2);
- if(LINK_LinkField(env,&t2,c1,"instanceVar","Z") == NULL)
- return JNI_FALSE;
- return (*env)->GetBooleanField(env,d1,LINK_ResolveField(env,t2))
- && (*env)->GetBooleanField(env,d2,LINK_ResolveField(env,t2));
-}
-
-/*
- * Class: MethodTester
- * Method: test3
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test3
- (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- jclass c1 = (*env)->GetObjectClass(env,d1);
- jclass c2 = (*env)->GetObjectClass(env,d2);
- if(LINK_LinkStaticField(env,&t3,c1,"staticVar","Z") == NULL)
- return JNI_FALSE;
- return (*env)->GetStaticBooleanField(env,d1,LINK_ResolveStaticField(env,t3))
- && (*env)->GetStaticBooleanField(env,d2,LINK_ResolveStaticField(env,t3));
-}
-
-/*
- * Class: MethodTester
- * Method: test4
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test4
- (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- jclass c1 = (*env)->GetObjectClass(env,d1);
- jclass c2 = (*env)->GetObjectClass(env,d2);
- jmethodID m1;
- jmethodID m2;
- if(LINK_LinkMethod(env,&t4,c1,"instanceMethod","()Z") == NULL)
- return JNI_FALSE;
- m1 = LINK_ResolveMethod(env,t4);
- m2 = LINK_ResolveMethod(env,t4);
- return (*env)->CallBooleanMethod(env,d1,m1)
- && !(*env)->CallBooleanMethod(env,d2,m2);
-}
-
-
-/*
- * Class: MethodTester
- * Method: test5
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test5
- (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- jclass c1 = (*env)->GetObjectClass(env,d1);
- jclass c2 = (*env)->GetObjectClass(env,d2);
- if(LINK_LinkStaticMethod(env,&t5,c1,"staticMethod","()Z") == NULL)
- return JNI_FALSE;
- return (*env)->CallStaticBooleanMethod(env,c1,LINK_ResolveStaticMethod(env,t5))
- && (*env)->CallStaticBooleanMethod(env,c2,LINK_ResolveStaticMethod(env,t5));
-}
-
-
-/*
- * Class: MethodTester
- * Method: test6
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test6
- (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) {
- jclass c1 = (*env)->GetObjectClass(env,d1);
- jclass c2 = (*env)->GetObjectClass(env,d2);
- if(LINK_LinkMethod(env,&t6,c1,"finalMethod","()Z") == NULL)
- return JNI_FALSE;
- return (*env)->CallBooleanMethod(env,d1,LINK_ResolveMethod(env,t6))
- && !(*env)->CallBooleanMethod(env,d2,LINK_ResolveMethod(env,t6));
-}
-
diff --git a/libjava/classpath/test/native/lib/MethodTester.h b/libjava/classpath/test/native/lib/MethodTester.h
deleted file mode 100644
index 896fc05..0000000
--- a/libjava/classpath/test/native/lib/MethodTester.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class MethodTester */
-
-#ifndef _Included_MethodTester
-#define _Included_MethodTester
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: MethodTester
- * Method: test1
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test1
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: MethodTester
- * Method: test2
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test2
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: MethodTester
- * Method: test3
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test3
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: MethodTester
- * Method: test4
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test4
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: MethodTester
- * Method: test5
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test5
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: MethodTester
- * Method: test6
- * Signature: (LData1;LData2;)Z
- */
-JNIEXPORT jboolean JNICALL Java_MethodTester_test6
- (JNIEnv *, jobject, jobject, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/libjava/classpath/testsuite/config/tests b/libjava/classpath/testsuite/config/tests
deleted file mode 100644
index 6b14bb0..0000000
--- a/libjava/classpath/testsuite/config/tests
+++ /dev/null
@@ -1,22 +0,0 @@
-ByteTest$constructorTest1
-ByteTest$constructorTest2
-ByteTest$byteValueTest
-ByteTest$decodeTest
-ByteTest$doubleValueTest
-ByteTest$equalsTest1
-ByteTest$equalsTest2
-ByteTest$floatValueTest
-ByteTest$hashCodeTest
-ByteTest$intValueTest
-ByteTest$longValueTest
-ByteTest$parseByteTest1
-ByteTest$parseByteTest2
-ByteTest$shortValueTest
-ByteTest$toStringTest1
-ByteTest$toStringTest2
-ByteTest$valueOfTest1
-ByteTest$valueOfTest2
-ByteTest$variablesTest1
-ByteTest$variablesTest2
-ByteTest$variablesTest3
-ByteTest$typeInstance
diff --git a/libjava/classpath/testsuite/java.io/IsAbsoluteTest.java b/libjava/classpath/testsuite/java.io/IsAbsoluteTest.java
deleted file mode 100644
index 2e4a650..0000000
--- a/libjava/classpath/testsuite/java.io/IsAbsoluteTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-import java.io.*;
-
-public class IsAbsoluteTest {
- public static void main (String args[]) {
- try {
- File f1 = new File("/etc/passwd");
- File f2 = new File("\\autoexec.bat");
- File f3 = new File("c:\\autoexec.bat");
-
- File u1 = new File("tmp/somefile");
-
- if ( u1.isAbsolute() )
- throw new Exception("Claims "+u1+" is absolute!");
-
- if ( ! f1.isAbsolute() )
- { /* Hm, might be on MSDOS platform, test those cases */
- if ( ! f2.isAbsolute() || ! f3.isAbsolute() )
- throw new Exception("Claims file isn't absolute!");
- }
-
- System.out.println("PASSED: All ok");
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.io/RandomAccessFileTest.java b/libjava/classpath/testsuite/java.io/RandomAccessFileTest.java
deleted file mode 100644
index 69dc438..0000000
--- a/libjava/classpath/testsuite/java.io/RandomAccessFileTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-
-import java.io.*;
-
-public class RandomAccessFileTest {
- public static void main (String args[]) {
- try {
- File f = new File("/etc/passwd");
- RandomAccessFile rf = new RandomAccessFile(f,"r");
-
- long length = rf.length();
-
- rf.seek(length - 10);
- long pos = rf.getFilePointer();
-
- if ( (length - 10) != pos )
- throw new Exception("Bad value from getFilePointer(), " +
- pos + " !=" + (length - 10));
-
- int i = rf.read();
- byte b = rf.readByte();
- boolean test = rf.readBoolean();
-
- byte buf[] = new byte[40];
- rf.seek(0);
- rf.read(buf);
-
- rf.close();
- try {
- length = rf.length();
- throw new Exception("Got length from closed RandomAccessFile().");
- } catch (IOException e) {}
-
- String filename2 = "/var/tmp/testfile-remove";
-
- File f2 = new File(filename2);
- RandomAccessFile rf2 = new RandomAccessFile(filename2, "rw");
-
- rf2.write(100);
- rf2.write(buf);
-
- rf2.close();
- f2.delete();
-
- System.out.println("PASSED: RandomAccessFile worked.");
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.io/execute.exp b/libjava/classpath/testsuite/java.io/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.io/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.lang/ArrayTest.java b/libjava/classpath/testsuite/java.lang/ArrayTest.java
deleted file mode 100644
index 36eaff4..0000000
--- a/libjava/classpath/testsuite/java.lang/ArrayTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-
-public class ArrayTest {
- public static void main (String args[])
- {
- BooleanArrayInit();
- ByteArrayInit();
- CharArrayInit();
- ShortArrayInit();
- IntArrayInit();
- ArrayName(args);
- }
- public static void BooleanArrayInit()
- {
- try {
- boolean val = true;
- boolean [] x = { true };
- if (x[0] == val)
- passed("BooleanArrayInit() boolean[] x = {"+val+"}");
- else
- failed("BooleanArrayInit() boolean[] x = {"+val+"}");
- } catch (Exception e) {
- failed("BooleanArrayInit() "+e);
- }
- }
- public static void ByteArrayInit()
- {
- try {
- byte val = 42;
- byte [] x = { 42 };
- if (x[0] == val)
- passed("ByteArrayInit() byte[] x = {"+val+"}");
- else
- failed("ByteArrayInit() byte[] x = {"+val+"}");
- } catch (Exception e) {
- failed("ByteArrayInit() "+e);
- }
- }
- public static void CharArrayInit()
- {
- try {
- char val = 'X';
- char [] x = { 'X' };
- if (x[0] == val)
- passed("CharArrayInit() char[] x = {'"+val+"'}");
- else
- failed("CharArrayInit() char[] x = {'"+val+"'}");
- } catch (Exception e) {
- failed("CharArrayInit() "+e);
- }
- }
- public static void ShortArrayInit()
- {
- try {
- short val = 42;
- short [] x = { 42 };
- if (x[0] == val)
- passed("ShortArrayInit() short[] x = {"+val+"}");
- else
- failed("ShortArrayInit() short[] x = {"+val+"}");
- } catch (Exception e) {
- failed("ShortArrayInit() "+e);
- }
- }
- public static void IntArrayInit()
- {
- try {
- int val = 42;
- int [] x = { 42 };
- if (x[0] == val)
- passed("IntArrayInit() int[] x = {"+val+"}");
- else
- failed("IntArrayInit() int[] x = {"+val+"}");
- } catch (Exception e) {
- failed("IntArrayInit() "+e);
- }
- }
- public static void failed(String s)
- {
- if (s != null)
- System.out.println("FAILED: " + s);
- else
- System.out.println("FAILED: ");
- }
- public static void passed(String s)
- {
- if (s != null)
- System.out.println("PASSED: " + s);
- else
- System.out.println("PASSED: ");
- }
- public static void ArrayName(String args[])
- {
- try {
- String name = args.getClass().getName();
- passed("ArrayName() name="+name);
- } catch (Exception e) {
- failed("ArrayName() "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/BooleanTest.java b/libjava/classpath/testsuite/java.lang/BooleanTest.java
deleted file mode 100644
index caee011..0000000
--- a/libjava/classpath/testsuite/java.lang/BooleanTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * Test the Boolean object wrapper class.
- *
- * @author Brian Jones (brian.jones@oryxsoft.com)
- */
-public class BooleanTest
-{
- Boolean j;
- String x;
-
- public static void main (String[] argv)
- {
- BooleanTest test = new BooleanTest();
-
- test.constructorsTest();
- test.booleanValueTest();
- test.equalsTest();
- test.getBooleanTest();
- test.hashCodeTest();
- test.toStringTest();
- test.valueOfTest();
- test.variablesTest();
- }
-
- public void constructorsTest()
- {
- j = new Boolean(true); // is true
- if (j.booleanValue() != true)
- failed("Boolean(true)");
- else
- passed("Boolean(true)");
-
- j = new Boolean(false); // is false
- if (j.booleanValue() != false)
- failed("Boolean(false)");
- else
- passed("Boolean(false)");
-
- j = new Boolean("tRuE"); // is true
- if (j.booleanValue() != true)
- failed("Boolean(\"tRuE\")");
- else
- passed("Boolean(String)");
-
- j = new Boolean("brian"); // is false
- if (j.booleanValue() != false)
- failed("Boolean(\"brian\")");
- else
- passed("Boolean(String)");
-
- j = new Boolean(null); // is false
- if (j.booleanValue() != false)
- failed("Boolean(null)");
- else
- passed("Boolean(String)");
- }
-
- public void booleanValueTest()
- {
- if (Boolean.TRUE.booleanValue() != true)
- failed("Boolean.booleanValue()");
- else
- passed("Boolean.booleanValue()");
- }
-
- public void equalsTest()
- {
- j = new Boolean("false");
- if (j.equals(Boolean.FALSE) != true)
- failed("Boolean.equals(Object)");
- else
- passed("Boolean.equals(Object)");
- }
-
- public void getBooleanTest()
- {
- if (Boolean.getBoolean("BIG_DAWG_TEST"))
- failed("Boolean.getBoolean(String)");
- else
- passed("Boolean.getBoolean(String)");
- }
-
- public void hashCodeTest()
- {
- j = new Boolean(null); // is false
- boolean caught = false;
- try
- {
- int i = j.hashCode();
- }
- catch (Exception e)
- {
- caught = true;
- failed("Boolean.hashCode()");
- }
- if (!caught)
- passed("Boolean.hashCode()");
- }
-
- public void toStringTest()
- {
- j = Boolean.TRUE;
- String x = j.toString();
- if (x.equals("true") != true)
- failed("j.toString() where j is Boolean.TRUE");
- else
- passed("Boolean.toString()");
-
- j = Boolean.FALSE;
- x = j.toString();
- if (x.equals("false") != true)
- failed("j.toString() where j is Boolean.FALSE");
- else
- passed("Boolean.toString()");
- }
-
- public void valueOfTest()
- {
- j = Boolean.valueOf("tRUe"); // true
- if (j.booleanValue() != true)
- failed("Boolean.valueOf(String)");
- else
- passed("Boolean.valueOf(String)");
-
- j = Boolean.valueOf(null); // false
- if (j.booleanValue() != false)
- failed("Boolean.valueOf(null)");
- else
- passed("Boolean.valueOf(null)");
-
- j = Boolean.valueOf("lc"); // false
- if (j.booleanValue() != false)
- failed("Boolean.valueOf(String)");
- else
- passed("Boolean.valueOf(String)");
- }
-
- public void variablesTest()
- {
- if (Boolean.TRUE.booleanValue() != true)
- failed("Boolean.TRUE");
- else
- passed("Boolean.TRUE");
-
- if (Boolean.FALSE.booleanValue() != false)
- failed("Boolean.FALSE");
- else
- passed("Boolean.FALSE");
-
- x = Boolean.TYPE.getName();
- if (x.equals("boolean") != true)
- failed("Boolean.TYPE.getName() is " + x + " != boolean");
- else
- passed("Boolean.TYPE.getName() is boolean");
- }
-
- public void failed(String s)
- {
- if (s != null)
- System.out.println("FAILED: " + s);
- else
- System.out.println("FAILED: ");
- }
-
- public void passed(String s)
- {
- if (s != null)
- System.out.println("PASSED: " + s);
- else
- System.out.println("PASSED: ");
- }
-}
-
-
-
-
-
diff --git a/libjava/classpath/testsuite/java.lang/ByteTest.java b/libjava/classpath/testsuite/java.lang/ByteTest.java
deleted file mode 100644
index ef1b193..0000000
--- a/libjava/classpath/testsuite/java.lang/ByteTest.java
+++ /dev/null
@@ -1,380 +0,0 @@
-import gnu.test.*;
-
-/**
- * Test the Byte object wrapper class.
- *
- * @author Brian Jones (cbj@gnu.org)
- */
-public class ByteTest
-{
- public static class constructorTest1 implements Test
- {
- byte b = 1;
-
- public String getName() {
- return "Byte(byte)";
- }
-
- public Result test() {
- try {
- Byte byteObject = new Byte(b);
- } catch (Exception e) {
- return new Fail(e.getMessage());
- } catch (Error err) {
- return new Fail(err.getMessage());
- }
- return new Pass();
- }
- }
-
- public static class constructorTest2 implements Test
- {
- Byte byteObject = null;
-
- public String getName() {
- return "Byte(String)";
- }
-
- public Result test() {
- try {
- byteObject = new Byte("1");
- } catch (Exception e) {
- return new Fail(e.getMessage());
- } catch (Error err) {
- return new Fail(err.getMessage());
- }
- return new Pass();
- }
- }
-
- public static class byteValueTest implements Test
- {
- public String getName() {
- return "Byte.byteValue()";
- }
-
- public Result test() {
- byte b = 1;
- Byte byteObject = new Byte(b);
- if (byteObject.byteValue() == b)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class decodeTest implements Test
- {
- public String getName() {
- return "Byte.decode(String)";
- }
-
- public Result test() {
- Byte obj = Byte.decode("1");
- if (obj.byteValue() == 1)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class doubleValueTest implements Test
- {
- public String getName() {
- return "Byte.doubleValue()";
- }
-
- public Result test() {
- byte b = 4;
- double d = b;
- Byte obj = new Byte(b);
- if (obj.doubleValue() == d)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class equalsTest1 implements Test
- {
- public String getName() {
- return "Byte.equals(Object)";
- }
-
- public Result test() {
- Byte obj1 = null, obj2 = null;
- obj1 = new Byte((byte)1);
- obj2 = new Byte((byte)2);
- if (obj1.equals(obj2))
- return new Fail("1 != 2");
- else
- return new Pass("1 != 2");
- }
- }
-
- public static class equalsTest2 implements Test
- {
- public String getName() {
- return "Byte.equals(Object)";
- }
-
- public Result test() {
- Byte obj1 = null, obj2 = null;
- obj1 = new Byte((byte)1);
- obj2 = new Byte((byte)2);
- obj2 = obj1;
- if (obj1.equals(obj2))
- return new Pass("1 == 1");
- else
- return new Fail("1 == 1");
- }
- }
-
- public static class floatValueTest implements Test
- {
- public String getName() {
- return "Byte.floatValue()";
- }
-
- public Result test() {
- byte b = 4;
- float f = b;
- Byte obj = new Byte(b);
- if (obj.floatValue() == f)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class hashCodeTest implements Test
- {
- public String getName() {
- return "Byte.hashCode()";
- }
-
- public Result test() {
- boolean caught = false;
- Byte obj = new Byte((byte)1);
- int i = obj.hashCode();
- if (i == 1)
- return new Pass();
- else
- return new Fail("hash is " + i + ". It should be 1.");
- }
- }
-
- public static class intValueTest implements Test
- {
- public String getName() {
- return "Byte.intValue()";
- }
-
- public Result test() {
- byte b = 4;
- int i = b;
- Byte obj = new Byte(b);
- if (obj.intValue() == i)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class longValueTest implements Test
- {
- public String getName() {
- return "Byte.longValue()";
- }
-
- public Result test() {
- byte b = 4;
- long l = b;
- Byte obj = new Byte(b);
- if (obj.longValue() == l)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class parseByteTest1 implements Test
- {
- public String getName() {
- return "Byte.parseByte(String)";
- }
-
- public Result test() {
- byte b = Byte.parseByte("1");
- if (b == (byte)1)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class parseByteTest2 implements Test
- {
- public String getName() {
- return "Byte.parseByte(String, int)";
- }
-
- public Result test() {
- byte b = Byte.parseByte("-4", 10);
- if (b == (byte)-4)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class shortValueTest implements Test
- {
- public String getName() {
- return "Byte.shortValue()";
- }
-
- public Result test() {
- byte b = 4;
- short s = b;
- Byte obj = new Byte(b);
- if (obj.shortValue() == s)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class toStringTest1 implements Test
- {
- public String getName() {
- return "Byte.toString()";
- }
-
- public Result test() {
- Byte obj = new Byte((byte)-2);
- String x = obj.toString();
- if (x.equals("-2"))
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class toStringTest2 implements Test
- {
- public String getName() {
- return "Byte.toString(byte)";
- }
-
- public Result test() {
- String x = Byte.toString((byte)-2);
- if (x.equals("-2"))
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class valueOfTest1 implements Test
- {
- public String getName() {
- return "Byte.valueOf(String, int)";
- }
-
- public Result test() {
- Byte obj1 = Byte.valueOf("2",10);
- Byte obj2 = new Byte((byte)2);
- if (obj1.intValue() == obj2.intValue())
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class valueOfTest2 implements Test
- {
- public String getName() {
- return "Byte.valueOf(String)";
- }
-
- public Result test() {
- Byte obj1 = Byte.valueOf("2");
- if (obj1.intValue() == 2)
- return new Pass();
- else
- return new Fail();
- }
- }
-
- public static class variablesTest1 implements Test
- {
- public String getName() {
- return "Byte.MIN_VALUE";
- }
-
- public Result test() {
- byte min = Byte.MIN_VALUE;
- byte max = Byte.MAX_VALUE;
-
- if (min == (byte)-128)
- return new Pass("Byte.MIN_VALUE is -128");
- else
- return new Fail("Byte.MIN_VALUE is " + min + " != -128");
- }
- }
-
- public static class variablesTest2 implements Test
- {
- public String getName() {
- return "Byte.MAX_VALUE";
- }
-
- public Result test() {
- byte min = Byte.MIN_VALUE;
- byte max = Byte.MAX_VALUE;
-
- if (max == (byte)127)
- return new Pass("Byte.MAX_VALUE is 127");
- else
- return new Fail("Byte.MAX_VALUE is " + max + " != 127");
- }
- }
-
- public static class variablesTest3 implements Test
- {
- public String getName() {
- return "Byte.TYPE.getName()";
- }
-
- public Result test() {
- String x = Byte.TYPE.getName();
- if (x.equals("byte") != true)
- return new Fail("Byte.TYPE.getName() is " + x + " != byte");
- else
- return new Pass("Byte.TYPE.getName() is byte");
- }
- }
-
- public static class typeInstance implements Test
- {
- public String getName() {
- return "Byte.TYPE.newInstance()";
- }
-
- public Result test() {
- try {
- Object b = Byte.TYPE.newInstance();
- return new Fail("Byte.TYPE.newInstance succeeded.");
- }
- catch (InstantiationException e) {
- return new Pass("Byte.TYPE.newInstance failed with exception '" +
- e.toString() + "'");
- }
- catch (Exception ex) {
- return new Fail("Byte.TYPE.newInstance threw incorrect exception '"
- + ex.toString() + "'");
- }
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/CastTest.java b/libjava/classpath/testsuite/java.lang/CastTest.java
deleted file mode 100644
index c33f1c2..0000000
--- a/libjava/classpath/testsuite/java.lang/CastTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-public class CastTest
-{
- public static void main(String args[])
- {
- d2d();
- l2d2l();
- d2l2d();
- f2d2f();
- d2f2d();
- i2f2i();
- l2f2l();
- f2l2f();
- }
-
- static void d2d()
- {
- String msg = "double -> double ";
-
- try {
- double dvalue1 = 4.2;
- double dvalue2 = (double)dvalue1;
- if (dvalue1 != dvalue2)
- failed(msg + dvalue1 + " != " + dvalue2);
- else
- passed(msg + dvalue1 + " == " + dvalue2);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
-
- static void l2f2l()
- {
- String msg = "long -> float -> long ";
-
- try {
- long lvalue = 123;
- float fvalue = (float)lvalue;
- long lvalue2 = (long)fvalue;
- if (lvalue != lvalue2)
- failed(msg + lvalue + " != " + lvalue2 + " (float)" + fvalue);
- else
- passed(msg + lvalue + " == " + lvalue2 + " (float)" + fvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void i2f2i()
- {
- String msg = "int -> float -> int ";
-
- try {
- int ivalue = 123;
- float fvalue = (float)ivalue;
- int ivalue2 = (int)fvalue;
- if (ivalue != ivalue2)
- failed(msg + ivalue + " != " + ivalue2 + " (float)" + fvalue);
- else
- passed(msg + ivalue + " == " + ivalue2 + " (float)" + fvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void f2d2f()
- {
- String msg = "float -> double -> float ";
-
- try {
- float fvalue = 123.0f;
- double dvalue = (double)fvalue;
- float fvalue2 = (float)dvalue;
-
- if (fvalue != fvalue2)
- failed(msg + fvalue + " != " + fvalue2 + " (double)" + dvalue);
- else
- passed(msg + fvalue + " == " + fvalue2 + " (double)" + dvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void f2l2f()
- {
- String msg = "float -> long -> float ";
-
- try {
- float fvalue = 123.0f;
- long lvalue = (long)fvalue;
- float fvalue2 = (float)lvalue;
-
- if (fvalue != fvalue2)
- failed(msg + fvalue + " != " + fvalue2 + " (long)" + lvalue);
- else
- passed(msg + fvalue + " == " + fvalue2 + " (long)" + lvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void d2f2d()
- {
- String msg = "double -> float -> double ";
-
- try {
- double dvalue = 123.0;
- float fvalue = (float)dvalue;
- double dvalue2 = (double)fvalue;
- if (dvalue != dvalue2)
- failed(msg + dvalue + " != " + dvalue2 + " (float)" + fvalue);
- else
- passed(msg + dvalue + " == " + dvalue2 + " (float)" + fvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void l2d2l()
- {
- String msg = "long -> double -> long ";
-
- try {
- long lvalue = 1023;
- double dvalue = (double)lvalue;
- long lvalue2 = (long)dvalue;
-
- if (lvalue != lvalue2)
- failed(msg + lvalue + " != " + lvalue2 + " (double)" + dvalue);
- else
- passed(msg + lvalue + " == " + lvalue2 + " (double)" + dvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void d2l2d()
- {
- String msg = "double -> long -> double ";
-
- try {
- double dvalue = 123.0;
- long lvalue = (long)dvalue;
- double dvalue2 = (double)lvalue;
- if (dvalue != dvalue2)
- failed(msg + dvalue + " != " + dvalue2 + " (long)" + lvalue);
- else
- passed(msg + dvalue + " == " + dvalue2 + " (long)" + lvalue);
- }
- catch (Exception e)
- {
- failed(msg + " : exception " + e.toString());
- }
- }
- static void passed(String msg)
- {
- System.out.println("PASSED: "+msg);
- }
- static void failed(String msg)
- {
- System.out.println("FAILED: "+msg);
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/ClassForNameTest.java b/libjava/classpath/testsuite/java.lang/ClassForNameTest.java
deleted file mode 100644
index c69df93..0000000
--- a/libjava/classpath/testsuite/java.lang/ClassForNameTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-public class ClassForNameTest
-{
- public static void main(String args[]) {
- Class c;
- /* test for both success and failure */
-
- try {
- c = Class.forName("ClassForNameTest");
- }
- catch (Exception e) {
- System.out.println("FAILED: Couldn't find ClassForNameTest.");
- System.exit(0);
- }
-
- try {
- c = Class.forName("ClazzForNameT3st");
- }
- catch (Exception e) {
- System.out.println("PASSED: passed both success and failure cases for Class.forName");
- System.exit(0);
- }
-
- System.out.println("FAILED: Didn't raise exception for incorrect class name.");
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/ExceptionTest.java b/libjava/classpath/testsuite/java.lang/ExceptionTest.java
deleted file mode 100644
index 7a464db..0000000
--- a/libjava/classpath/testsuite/java.lang/ExceptionTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-public class ExceptionTest
-{
- static int foo() throws ArrayIndexOutOfBoundsException {
- int f[] = new int[10];
-
- return f[26];
- }
-
- public static void main (String args[]) {
- int f;
-
- try {
- f = foo();
- }
- catch (ArrayIndexOutOfBoundsException e) {
- System.out.println("PASSED: " + e.toString());
- } catch (Exception e) {
- System.out.println("FAILED: " + e.toString());
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/FloatingDecimalTest.java b/libjava/classpath/testsuite/java.lang/FloatingDecimalTest.java
deleted file mode 100644
index f49ef7b..0000000
--- a/libjava/classpath/testsuite/java.lang/FloatingDecimalTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-public class FloatingDecimalTest
-{
- public static void main(String args[]) {
-/*
- try {
-*/
- double d = 1.0;
- String result;
- result = "Double is " +d + " and kicking";
- System.out.println("PASSED: "+result);
-/*
- }
- catch (Exception e)
- {
- System.out.println("FAILED: exception " + e.toString());
- }
-*/
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/IsInstanceTest.java b/libjava/classpath/testsuite/java.lang/IsInstanceTest.java
deleted file mode 100644
index f5a828a..0000000
--- a/libjava/classpath/testsuite/java.lang/IsInstanceTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-class IsInstanceTest extends Thread implements Cloneable
-{
- static void main(String args[])
- {
- IsInstanceTest test = new IsInstanceTest();
-
- if (test instanceof java.lang.Object)
- pass("IsInstanceTest is instance of java.lang.Object");
- else
- fail("IsInstanceTest is not instance of java.lang.Object");
-
- if (test instanceof java.lang.Cloneable)
- pass("IsInstanceTest is instance of java.lang.Cloneable");
- else
- fail("IsInstanceTest is not instance of java.lang.Cloneable");
-
- if (test instanceof java.lang.Runnable)
- pass("IsInstanceTest is instance of java.lang.Runnable");
- else
- fail("IsInstanceTest is not instance of java.lang.Runnable");
-
-
- }
- static void pass(String message)
- {
- System.out.println("PASSED: "+message);
- }
- static void fail(String message)
- {
- System.out.println("FAILED: "+message);
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/JoinTest.java b/libjava/classpath/testsuite/java.lang/JoinTest.java
deleted file mode 100644
index 5d5d62d..0000000
--- a/libjava/classpath/testsuite/java.lang/JoinTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-public class JoinTest
- implements Runnable
-{
- public static int count = 0;
-
- void send()
- throws Exception
- {
- Thread.sleep(2000);
- System.out.println("PASSED: Sender completed");
- }
- void receive()
- throws Exception
- {
- synchronized(this) {
- notifyAll();
- }
-
- Thread.sleep(5000);
- count++;
- System.out.println("PASSED: Receiver completed");
- }
-
- public void run()
- {
- String name = Thread.currentThread().getName();
- if (name.equals("timer")) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e){}
- System.out.println("FAILED: timer triggered");
- System.exit(1);
- }
- try {
- receive();
- } catch (Exception e) {
- System.out.println("FAILED: receiver: " + e);
- System.exit(1);
- }
- }
- public static void main(String args[])
- {
- try {
- JoinTest sender =
- new JoinTest();
- JoinTest receiver =
- new JoinTest();
- Thread receiver_thread = new Thread(receiver);
-
- /* Make sure the test terminates even if it hangs on network */
- JoinTest timer = new JoinTest();
- Thread timer_thread = new Thread(timer, "timer");
- timer_thread.start();
-
- synchronized(receiver) {
- receiver_thread.start();
- receiver.wait();
- }
- try {
- sender.send();
- } catch (Exception e) {
- System.out.println("FAILED: sender: " + e);
- System.exit(1);
- }
- receiver_thread.join();
-
- if (0 == count)
- throw new Exception("Nothing received");
-
- System.out.println("PASSED: Join send/receive count="+count);
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- System.exit(1);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/LongFieldTest.java b/libjava/classpath/testsuite/java.lang/LongFieldTest.java
deleted file mode 100644
index dc5be61..0000000
--- a/libjava/classpath/testsuite/java.lang/LongFieldTest.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class LongFieldTest
-{
- static long field;
-
- public static void main(String args[])
- {
- field = 1L;
-
- if (field == 1)
- System.out.println("PASSED: field = " + field);
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/NewInstanceTest.java b/libjava/classpath/testsuite/java.lang/NewInstanceTest.java
deleted file mode 100644
index 845bb42..0000000
--- a/libjava/classpath/testsuite/java.lang/NewInstanceTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-public class NewInstanceTest
-{
- public NewInstanceTest() {
- static_field = 1;
- }
-
- public static void main(String args[]) {
- try {
- Class cls = Class.forName("NewInstanceTest");
- Object instance = cls.newInstance();
-
- if (static_field == 1)
- System.out.println("PASSED: static_field = " + static_field);
- else
- System.out.println("FAILED: static_field = " + static_field);
- }
- catch (Exception e)
- {
- System.out.println("FAILED: exception " + e.toString());
- }
- }
-
- public static int static_field;
-}
diff --git a/libjava/classpath/testsuite/java.lang/NullcastTest.java b/libjava/classpath/testsuite/java.lang/NullcastTest.java
deleted file mode 100644
index 75588d6..0000000
--- a/libjava/classpath/testsuite/java.lang/NullcastTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-import java.lang.*;
-
-public class NullcastTest
-{
- static String retString(String str1, String str2)
- {
- return str1;
- }
- public static void main (String args[]) {
- try {
-
- String tmp = retString((String) null, (String)null);
-
- System.out.println("PASSED: (String)null");
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/OutOfMemoryErrorTest.java b/libjava/classpath/testsuite/java.lang/OutOfMemoryErrorTest.java
deleted file mode 100644
index 2dd6b15..0000000
--- a/libjava/classpath/testsuite/java.lang/OutOfMemoryErrorTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-import java.util.Vector;
-
-/**
- * Under JavaSoft's VM they arbitarily limit the amount of memory
- * a Java application can use (though this can be overridden). The
- * point here is to check to see whether or not an application being
- * run by Japhar will ever get the OutOfMemoryError or not when resources
- * are scarce. --brian
- */
-public class OutOfMemoryErrorTest
-{
- public static void main(String[] argv)
- {
- Vector v = null;
- Runtime r = null;
- long free = 0, total = 0;
- // quickly approach memory limit 1M at a time
- try {
- r = Runtime.getRuntime();
- v = new Vector();
- while(true)
- {
- v.addElement(new byte[1048576]);
- }
- }
- // out of memory error
- catch (OutOfMemoryError oomerr1)
- {
- // slowly encroach on memory limit 2 bytes+ at a time
- try {
- while(true)
- {
- v.addElement(new byte[2]);
- }
- }
- // out of memory error
- catch (OutOfMemoryError oomerr2)
- {
- if (r != null)
- {
- free = r.freeMemory();
- total = r.totalMemory();
- v = null;
- r.gc();
-// System.out.println("free = " + free);
-// System.out.println("total = " + total);
- System.out.println("PASSED: ");
- }
- else
- System.out.println("FAILED: runtime unknown");
- }
- }
- // generic error
- catch (Error err)
- {
- System.out.println("FAILED: unexpected error");
- }
- // generic exception
- catch (Exception e)
- {
- System.out.println("FAILED: unexpected exception");
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/StringTest.java b/libjava/classpath/testsuite/java.lang/StringTest.java
deleted file mode 100644
index cd9d83d..0000000
--- a/libjava/classpath/testsuite/java.lang/StringTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Aaron M. Renn reported a bug in Japhar having string length 17 for
- * this string
- */
-
-public class StringTest
-{
- public static void
- main(String[] argv)
- {
- UnicodeStringLength();
- }
- static void UnicodeStringLength()
- {
- String str = "a-->\u01FF\uA000\u6666\u0200RRR";
- int len = str.length();
- if (11 == len) {
- System.out.println("PASSED: " + str + " has len=" +str.length());
- } else {
- System.out.println("FAILED: " + str +
- " has len=" +str.length() + " != 11");
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/SyncronizedTest.java b/libjava/classpath/testsuite/java.lang/SyncronizedTest.java
deleted file mode 100644
index 61115ef..0000000
--- a/libjava/classpath/testsuite/java.lang/SyncronizedTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-public class SyncronizedTest
- implements Runnable
-{
- public static int count = 0;
- String _name;
-
- public SyncronizedTest(String name)
- {
- _name = name;
- }
-
- public void run()
- {
- if (_name.equals("timer")) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e){}
- System.out.println("FAILED: timer triggered");
- System.exit(1);
- }
- try {
- count++;
-
- synchronized(this) {
- notifyAll();
- }
- } catch (Exception e) {
- System.out.println("FAILED: receiver: " + e);
- System.exit(1);
- }
- }
- public static void main(String args[])
- {
- try {
- SyncronizedTest tester = new SyncronizedTest("tester");
- Thread tester_thread = new Thread(tester);
-
- SyncronizedTest timer = new SyncronizedTest("timer");
- Thread timer_thread = new Thread(timer);
- timer_thread.start();
-
- synchronized(tester) {
- tester_thread.start();
- tester.wait();
- }
-
- if (0 == count)
- throw new Exception("Thread did not run.");
-
- tester_thread.join();
-
- System.out.println("PASSED: count="+count);
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- System.exit(1);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/TestCasts.java b/libjava/classpath/testsuite/java.lang/TestCasts.java
deleted file mode 100644
index 4ee0abf..0000000
--- a/libjava/classpath/testsuite/java.lang/TestCasts.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/* Written by Artur Biesiadowski <abies@pg.gda.pl> */
-
-/*
- This class test basic 4 conversion types and compares results to ready ones, done
- on sure VM (suns JDK). Conversions are
- (obj instanceof clazz)
- (clazz)obj
- clazz.isInstance(obj)
- clazz1.isAssignableFrom(clazz2);
-
- Hopefully all needed cases are covered. If you want to add object just put it
- into objs table. If you want to add class, you need to add it to both cls and to
- testCode method. Of course you need to regenerate results after that.
- */
-
-
-/*
- You can copy/modify/use this file for any purposes, as long as you do not delete
- my name from top of that file. Of course you can add your own below that :)
- */
-
-
-import java.io.*;
-
-interface I1 {}
-interface I2 {}
-interface I3 extends I2{}
-class A1 implements I1 {}
-class AB12 extends A1 implements I2 {}
-class ABC12 extends AB12 {}
-class D3 implements I3 {}
-
-public class TestCasts
-{
-
- public Object objs[] =
- {
- null,
- new Object(),
- new A1(),
- new AB12(),
- new ABC12(),
- new D3(),
- new A1[1],
- new AB12[1],
- new ABC12[1],
- new D3[1],
- new I1[1],
- new I2[1],
- new I3[1],
- new int[1],
- new A1[1][1],
- new AB12[1][1],
- new I1[1][1]
- };
-
- public Class cls[] =
- {
- Object.class,
- A1.class,
- AB12.class,
- ABC12.class,
- D3.class,
- I1.class,
- I2.class,
- I3.class,
- Cloneable.class,
- Serializable.class,
- A1[].class,
- AB12[].class,
- ABC12[].class,
- D3[].class,
- I1[].class,
- I2[].class,
- I3[].class,
- int[].class,
- A1[][].class,
- AB12[][].class,
- I1[][].class
- };
-
- java.util.Vector results = new java.util.Vector(1000);
- boolean verbose = false;
- boolean generate = false;
- String filename = "TestCasts-results.txt";
-
- public static void main(String argv[] )
- {
- TestCasts tc = new TestCasts();
- if ( argv.length > 0 )
- {
- int i;
- for ( i =0; i < argv.length;i++ )
- {
- if ( argv[i].equals("-g") )
- {
- tc.generate = true;
- }
- else if ( argv[i].equals("-v") )
- {
- tc.verbose = true;
- }
- else if ( argv[i].equals("-f") )
- {
- i++;
- if ( i > argv.length )
- {
- System.out.println("You need to specify filename after -f");
- System.exit(1);
- }
- tc.filename = argv[i];
- }
- else
- {
- System.out.println( "Options are: -v -g -f file");
- System.out.println( "[-v] verbose ");
- System.out.println( "[-g] generate result table");
- System.out.println( "[-f file] read/write tests from/to file (default "+tc.filename+")");
- System.exit(1);
- }
- }
- }
-
-
- tc.test();
- //System.out.println(tc.results);
- System.out.println( "Performed " + tc.counter + " tests");
- if ( tc.generate )
- System.out.println( "True: " + tc.genTrue + "\tfalse: " + tc.genFalse);
- else
- {
- System.out.println( "Passed: " + tc.passed + "\tfailed: " + tc.failed);
- if (tc.failed == 0 )
- System.out.println("PASSED: all cast tests");
- }
- }
-
-
- public final void test()
- {
- if (!generate)
- readResultsFromFile();
-
- int i;
- int j;
- for ( i=0; i < objs.length; i++ )
- {
- for ( j=0; j < cls.length; j++ )
- {
- reportClIsInst(objs[i], cls[j], cls[j].isInstance(objs[i]) );
- }
- }
-
- for (i=0; i < objs.length; i++ )
- {
- testCode(objs[i]);
- }
-
- for ( i=0; i < cls.length; i++ )
- {
- for ( j=0; j < cls.length; j++ )
- {
- reportClIsAssign(cls[i], cls[j], cls[i].isAssignableFrom(cls[j]));
- }
- }
-
- if ( generate )
- writeResultsToFile();
- }
-
-
- public final void testCode(Object o)
- {
-
- reportInstanceof(o, Object.class, (o instanceof Object) );
- try
- {
- Object r1 = (Object) o;
- reportCast(o, Object.class, true );
- } catch (ClassCastException e) {
- reportCast(o,Object.class, false );
- }
-
- reportInstanceof(o, A1.class, (o instanceof A1) );
- try
- {
- A1 r1 = (A1) o;
- reportCast(o, A1.class, true );
- } catch (ClassCastException e) {
- reportCast(o,A1.class, false );
- }
- reportInstanceof(o, AB12.class, (o instanceof AB12) );
- try
- {
- AB12 r1 = (AB12) o;
- reportCast(o, AB12.class, true );
- } catch (ClassCastException e) {
- reportCast(o,AB12.class, false );
- }
- reportInstanceof(o, ABC12.class, (o instanceof ABC12) );
- try
- {
- ABC12 r1 = (ABC12) o;
- reportCast(o, ABC12.class, true );
- } catch (ClassCastException e) {
- reportCast(o,ABC12.class, false );
- }
- reportInstanceof(o, D3.class, (o instanceof D3) );
- try
- {
- D3 r1 = (D3) o;
- reportCast(o, D3.class, true );
- } catch (ClassCastException e) {
- reportCast(o,D3.class, false );
- }
- reportInstanceof(o, I1.class, (o instanceof I1) );
- try
- {
- I1 r1 = (I1) o;
- reportCast(o, I1.class, true );
- } catch (ClassCastException e) {
- reportCast(o,I1.class, false );
- }
- reportInstanceof(o, I2.class, (o instanceof I2) );
- try
- {
- I2 r1 = (I2) o;
- reportCast(o, I2.class, true );
- } catch (ClassCastException e) {
- reportCast(o,I2.class, false );
- }
- reportInstanceof(o, I3.class, (o instanceof I3) );
- try
- {
- I3 r1 = (I3) o;
- reportCast(o, I3.class, true );
- } catch (ClassCastException e) {
- reportCast(o,I3.class, false );
- }
- reportInstanceof(o, Cloneable.class, (o instanceof Cloneable) );
- try
- {
- Cloneable r1 = (Cloneable) o;
- reportCast(o, Cloneable.class, true );
- } catch (ClassCastException e) {
- reportCast(o,Cloneable.class, false );
- }
-
- reportInstanceof(o, Serializable.class, (o instanceof Serializable) );
- try
- {
- Serializable r1 = (Serializable) o;
- reportCast(o, Serializable.class, true );
- } catch (ClassCastException e) {
- reportCast(o,Serializable.class, false );
- }
- reportInstanceof(o, A1[].class, (o instanceof A1[]) );
- try
- {
- A1[] r1 = (A1[]) o;
- reportCast(o, A1[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,A1[].class, false );
- }
-
- reportInstanceof(o, AB12[].class, (o instanceof AB12[]) );
- try
- {
- AB12[] r1 = (AB12[]) o;
- reportCast(o, AB12[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,AB12[].class, false );
- }
- reportInstanceof(o, ABC12[].class, (o instanceof ABC12[]) );
- try
- {
- ABC12[] r1 = (ABC12[]) o;
- reportCast(o, ABC12[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,ABC12[].class, false );
- }
- reportInstanceof(o, D3[].class, (o instanceof D3[]) );
- try
- {
- D3[] r1 = (D3[]) o;
- reportCast(o, D3[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,D3[].class, false );
- }
- reportInstanceof(o, I1[].class, (o instanceof I1[]) );
- try
- {
- I1[] r1 = (I1[]) o;
- reportCast(o, I1[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,I1[].class, false );
- }
- reportInstanceof(o, I2[].class, (o instanceof I2[]) );
- try
- {
- I2[] r1 = (I2[]) o;
- reportCast(o, I2[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,I2[].class, false );
- }
-
- reportInstanceof(o, I3[].class, (o instanceof I3[]) );
- try
- {
- I3[] r1 = (I3[]) o;
- reportCast(o, I3[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,I3[].class, false );
- }
-
- reportInstanceof(o, int[].class, (o instanceof int[]) );
- try
- {
- int[] r1 = (int[]) o;
- reportCast(o, int[].class, true );
- } catch (ClassCastException e) {
- reportCast(o,int[].class, false );
- }
-
- reportInstanceof(o, A1[][].class, (o instanceof A1[][]) );
- try
- {
- A1[][] r1 = (A1[][]) o;
- reportCast(o, A1[][].class, true );
- } catch (ClassCastException e) {
- reportCast(o,A1[][].class, false );
- }
- reportInstanceof(o, AB12[][].class, (o instanceof AB12[][]) );
- try
- {
- AB12[][] r1 = (AB12[][]) o;
- reportCast(o, AB12[][].class, true );
- } catch (ClassCastException e) {
- reportCast(o,AB12[][].class, false );
- }
- reportInstanceof(o, I1[][].class, (o instanceof I1[][]) );
- try
- {
- I1[][] r1 = (I1[][]) o;
- reportCast(o, I1[][].class, true );
- } catch (ClassCastException e) {
- reportCast(o,I1[][].class, false );
- }
-
- }
-
- int counter = 0;
- int passed = 0;
- int failed = 0;
- int genTrue = 0;
- int genFalse =0;
-
- public final boolean result(boolean b )
- {
- counter++;
- if ( generate )
- {
- if (b )
- {
- genTrue++;
- results.addElement(Boolean.TRUE);
- }
- else
- {
- genFalse++;
- results.addElement(Boolean.FALSE);
- }
- return true;
- }
- else
- {
- if ( ((Boolean)results.elementAt(counter-1)).booleanValue() != b )
- {
- failed++;
- return false;
- }
- else
- {
- passed++;
- return true;
- }
- }
-
- }
-
- public final void reportClIsInst(Object obj, Class cl, boolean b )
- {
- if ( result(b) )
- {
- if ( verbose )
- System.out.println("PASSED: "+obj +"\tis\t"+ cl + "\t?" + b);
- }
- else
- {
- System.out.println("FAILED: " + cl + ".isInstance(" + obj + ") is\t" + b );
- }
- }
-
- public final void reportClIsAssign( Class c1, Class c2, boolean b )
- {
- if ( result(b) )
- {
- if (verbose)
- System.out.println("PASSED: "+c1 + "\tisAssignableFrom\t" + c2 + "\t?\t" + b);
- }
- else
- {
- System.out.println("FAILED: " + c1 + ".isAssigableFrom(" + c2 + ") is " + b);
- }
- }
-
- public final void reportInstanceof( Object obj, Class cl, boolean b )
- {
- if ( result(b) )
- {
- if ( verbose )
- System.out.println("PASSED: "+obj +"\tinstanceof\t"+ cl + "\t?" + b);
- }
- else
- {
- System.out.println("FAILED: (" + obj + "instanceof\t" + cl + ")\tis\t" + b );
- }
- }
-
- public final void reportCast( Object obj, Class cl, boolean b )
- {
- if ( result(b) )
- {
- if ( verbose )
- System.out.println("PASSED: "+obj +"\tcastto \t"+ cl + "\t?" + b);
- }
- else
- {
- System.out.println("FAILED: " + obj + "\tcastto \t" + cl + "\tis\t" + b );
- }
- }
-
- public final void readResultsFromFile()
- {
- try{
- int i;
- FileInputStream fin = new FileInputStream(filename);
- while ( (i=fin.read()) != -1 )
- {
- results.addElement( i==1 ? Boolean.TRUE : Boolean.FALSE );
- }
- } catch (IOException e )
- {
- System.out.println("Cannot read from file " + filename);
- System.out.println(e);
- System.exit(1);
- }
- }
-
- public final void writeResultsToFile()
- {
- try{
- int i;
- FileOutputStream fos = new FileOutputStream(filename);
- for ( i=0; i < counter; i++ )
- {
- fos.write( ((Boolean)results.elementAt(i)).booleanValue() ? 1 : 0 );
- }
- fos.close();
- } catch (IOException e )
- {
- System.out.println("Cannot read from file " + filename);
- System.out.println(e);
- System.exit(1);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/ThreadTest.java b/libjava/classpath/testsuite/java.lang/ThreadTest.java
deleted file mode 100644
index cade822..0000000
--- a/libjava/classpath/testsuite/java.lang/ThreadTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-import java.lang.*;
-
-/* Simple producer/consumer thread test. */
-
-public class ThreadTest implements Runnable {
-
- static String threadName = "Running thread";
- static int count = 0;
- static int max = 4; // XXX Seem to fail when >4 on kaffe 0.9.0
-
- public void run() {
- if (! Thread.currentThread().isAlive() ) {
- System.out.println("FAILED: isAlive() false in new thread!");
- } else {
- System.out.println("PASSED: isAlive() working in new thread");
- }
- while (0 <= count && count <= max) {
- count ++;
- }
- }
-
- public static void main (String args[]) {
- try {
- if (! Thread.currentThread().isAlive() ) {
- System.out.println("FAILED: isAlive() false in initial thread!");
- } else {
- System.out.println("PASSED: isAlive() working in initial thread");
- }
- ThreadTest test = new ThreadTest();
-
- Thread testThread = new Thread(test, threadName);
-
- testThread.setDaemon(true);
- testThread.start();
-
- Thread.currentThread().sleep(3000);
-
- if (count < max) {
- System.out.println("FAILED: unable to run new thread");
- } else {
- System.out.println("PASSED: Theads worked");
- }
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.lang/execute.exp b/libjava/classpath/testsuite/java.lang/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.lang/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.net/DatagramSocketSendReceiveTest.java b/libjava/classpath/testsuite/java.net/DatagramSocketSendReceiveTest.java
deleted file mode 100644
index b1614d2..0000000
--- a/libjava/classpath/testsuite/java.net/DatagramSocketSendReceiveTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-import java.net.*;
-
-/*
- * Start one thread for receiving a packet, wait for it to set up,
- * send a packet to it, and wait until it completes. Compare the
- * packet to make sure it came thru without errors.
- */
-
-public class DatagramSocketSendReceiveTest
- implements Runnable
-{
- public static final int port = 4000 + (int)(java.lang.Math.random() * 1000);
- public static final String message = "hello";
- public static int count = 0;
- public static String received;
-
- void send()
- throws Exception
- {
- DatagramSocket sender = new DatagramSocket();
- InetAddress local = sender.getLocalAddress();
- byte []message_bytes = message.getBytes();
-
- DatagramPacket packet = new DatagramPacket(message_bytes,
- message_bytes.length,
- local, port);
-
- sender.send(packet);
- sender.close();
- }
- void receive()
- throws Exception
- {
- DatagramSocket socket = new DatagramSocket(port);
- socket.setSoTimeout(10);
-
- byte[] buffer = new byte[100];
- DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
-
- synchronized(this) {
- notifyAll();
- }
-
- socket.receive(packet);
- socket.close();
-
- received = new String(buffer, 0, packet.getLength());
-
- count++;
- if ( message.length() != received.length() )
- throw new Exception("Receved "+ received.length()+
- " bytes but sent "+message.length() + " bytes");
-
- if ( ! message.equals(received) )
- throw new Exception("Receved \""+ received+
- "\" but sent \""+message + "\"");
-
- }
-
- public void run()
- {
- String name = Thread.currentThread().getName();
- if (name.equals("timer")) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e){}
- System.out.println("FAILED: timer triggered");
- System.exit(0);
- }
- try {
- receive();
- } catch (Exception e) {
- System.out.println("FAILED: receiver: " + e);
- System.exit(0);
- }
- }
- public static void main(String args[])
- {
- try {
- DatagramSocketSendReceiveTest sender =
- new DatagramSocketSendReceiveTest();
- DatagramSocketSendReceiveTest receiver =
- new DatagramSocketSendReceiveTest();
- Thread receiver_thread = new Thread(receiver);
-
- /* Make sure the test terminates even if it hangs on network */
- DatagramSocketSendReceiveTest timer = new DatagramSocketSendReceiveTest();
- Thread timer_thread = new Thread(timer, "timer");
- timer_thread.start();
-
- synchronized(receiver) {
- receiver_thread.start();
- receiver.wait();
- }
- try {
- sender.send();
- } catch (Exception e) {
- System.out.println("FAILED: sender: " + e);
- System.exit(0);
- }
- receiver_thread.join();
-
- if (0 == count)
- throw new Exception("Nothing received");
-
- System.out.println("PASSED: DatagramSocket send/receive count="+count+
- " message="+received);
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- System.exit(0);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.net/DatagramSocketTest.java b/libjava/classpath/testsuite/java.net/DatagramSocketTest.java
deleted file mode 100644
index 4ee0d49..0000000
--- a/libjava/classpath/testsuite/java.net/DatagramSocketTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-import java.net.*;
-
-public class DatagramSocketTest
-{
- public static void main(String args[])
- {
- try {
- DatagramSocket socket = new DatagramSocket();
-
- InetAddress local = socket.getLocalAddress();
-
- int port = socket.getLocalPort();
-
- socket.setSoTimeout(socket.getSoTimeout());
-
- socket.close();
-
- System.out.println("PASSED: new DatagramSocket()");
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java b/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java
deleted file mode 100644
index 15ab983..0000000
--- a/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-import java.net.*;
-import java.io.*;
-
-/*
- * Start one thread for receiving a packet, wait for it to set up,
- * send a packet to it, and wait until it completes. Compare the
- * packet to make sure it came thru without errors.
- */
-
-public class SocketSendReceiveTest
- implements Runnable
-{
- public static final int port = 4000 + (int)(java.lang.Math.random() * 2000);
- public static final String message = "hello";
- public static int count = 0;
- public static String received;
-
- void send()
- throws Exception
- {
- InetAddress local = InetAddress.getLocalHost();
- Socket sender = new Socket(local, port);
- byte []message_bytes = message.getBytes();
-
- DataOutputStream out = new DataOutputStream(sender.getOutputStream());
- out.write(message_bytes, 0, message_bytes.length);
- out.flush();
- sender.close();
- }
- void receive()
- throws Exception
- {
- ServerSocket socket = new ServerSocket(port);
-
- synchronized(this) {
- notifyAll();
- }
-
- Socket connection = socket.accept();
- DataInputStream in = new DataInputStream(connection.getInputStream());
-
- byte[] buffer = new byte[100];
-
- int length = in.read(buffer);
-
- connection.close();
- socket.close();
-
- received = new String(buffer, 0, length);
-
- count++;
- if ( message.length() != received.length() )
- throw new Exception("Receved "+ received.length()+
- " bytes but sent "+message.length() + " bytes");
-
- if ( ! message.equals(received) )
- throw new Exception("Receved \""+ received+
- "\" but sent \""+message + "\"");
- }
-
- public void run()
- {
- String name = Thread.currentThread().getName();
- if (name.equals("timer")) {
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e){}
- System.out.println("FAILED: timer triggered");
- System.exit(0);
- }
- try {
- receive();
- } catch (Exception e) {
- System.out.println("FAILED: receiver (port "+port + "): " + e);
- System.exit(0);
- }
- }
- public static void main(String args[])
- {
- try {
- SocketSendReceiveTest sender = new SocketSendReceiveTest();
- SocketSendReceiveTest receiver = new SocketSendReceiveTest();
- Thread receiver_thread = new Thread(receiver);
-
- /* Make sure the test terminates even if it hangs on network */
- SocketSendReceiveTest timer = new SocketSendReceiveTest();
- Thread timer_thread = new Thread(timer, "timer");
- timer_thread.start();
-
- synchronized(receiver) {
- receiver_thread.start();
- receiver.wait();
- }
- try {
- sender.send();
- } catch (Exception e) {
- System.out.println("FAILED: receiver (port "+port + "): " + e);
- System.exit(0);
- }
- receiver_thread.join();
-
- if (0 == count)
- throw new Exception("Nothing received");
-
- System.out.println("PASSED: Socket send/receive count="+count+
- " message="+received);
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- System.exit(0);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.net/SocketTest.java b/libjava/classpath/testsuite/java.net/SocketTest.java
deleted file mode 100644
index 78a367b..0000000
--- a/libjava/classpath/testsuite/java.net/SocketTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-import java.net.*;
-
-public class SocketTest
-{
- public static void main(String args[])
- {
- try {
- Socket socket = new Socket("www.hungry.com", 80);
-
- InetAddress remote = socket.getInetAddress();
- InetAddress local = socket.getLocalAddress();
-
- int rport = socket.getPort();
- int lport = socket.getLocalPort();
-
- socket.setSoTimeout(socket.getSoTimeout());
- socket.setTcpNoDelay(socket.getTcpNoDelay());
- int linger = socket.getSoLinger();
- if (-1 != linger)
- socket.setSoLinger(true, linger);
- else
- socket.setSoLinger(false, 0);
-
- String socketString = socket.toString();
- if (null == socketString)
- throw new Exception("toString() failed");
-
- socket.close();
- System.out.println("PASSED: new Socket()" + socketString);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.net/URLTest.java b/libjava/classpath/testsuite/java.net/URLTest.java
deleted file mode 100644
index 026ea12..0000000
--- a/libjava/classpath/testsuite/java.net/URLTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-import java.net.*;
-import java.io.*;
-
-public class URLTest
-{
- public static void main(String args[])
- {
- try {
- URL url = new URL("http://www.hungry.com/");
- InputStream stream = url.openStream();
-
- int size = 0;
-
- while (-1 != stream.read()) { size++; }
-
- stream.close();
-
- System.out.println("PASSED: new URL() size=" + size );
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.net/execute.exp b/libjava/classpath/testsuite/java.net/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.net/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.opstack/LeftBehind.j b/libjava/classpath/testsuite/java.opstack/LeftBehind.j
deleted file mode 100644
index 30a82c4..0000000
--- a/libjava/classpath/testsuite/java.opstack/LeftBehind.j
+++ /dev/null
@@ -1,64 +0,0 @@
-;
-; LeftBehind.j - contrived test to see how japhar reacts to
-; stuff left on the stack after a method returns.
-.class public LeftBehind
-.super java/lang/Object
-
-.method public static test()I
- .limit stack 10 ; up to 10 items can be pushed
-
- ; push some ints.
- bipush 1
- bipush 2
- bipush 3
- bipush 4
- bipush 5
- ; then push some strings.
- ldc "6th item"
- ldc "7th item"
-
- bipush 5
-
- ; now push our return value
- bipush 9
-
- ireturn
-.end method
-
-.method public static main([Ljava/lang/String;)V
- .limit stack 3 ; up to three items can be pushed
-
- ; we push a value onto the stack, and
- ; then check to see that only one item (the return
- ; value from the test() method) is on the stack on top
- ; of it.
- bipush 8
-
- invokestatic LeftBehind/test()I
-
- pop ; get rid of the return value
- bipush 8
- isub
-
- ifeq pass
-
-fail:
- ; push System.out onto the stack
- getstatic java/lang/System/out Ljava/io/PrintStream;
-
- ldc "FAILED:"
-
- invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
- bipush 0
- invokestatic java/lang/System/exit(I)V
-
-pass:
- ; push System.out onto the stack
- getstatic java/lang/System/out Ljava/io/PrintStream;
-
- ldc "PASSED:"
-
- invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
- bipush 0
- invokestatic java/lang/System/exit(I)V
-.end method
diff --git a/libjava/classpath/testsuite/java.opstack/execute.exp b/libjava/classpath/testsuite/java.opstack/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.opstack/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.sun.awt/FrameMenuTest.java b/libjava/classpath/testsuite/java.sun.awt/FrameMenuTest.java
deleted file mode 100644
index 1ccc3db..0000000
--- a/libjava/classpath/testsuite/java.sun.awt/FrameMenuTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-import java.awt.*;
-import java.awt.event.*;
-
-public class FrameMenuTest
- extends Frame
-{
- public static void main(String args[])
- {
- FrameMenuTest frame = new FrameMenuTest();
- frame.pack();
- frame.show();
- }
- public FrameMenuTest()
- {
- super("FrameMenuTest");
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent event)
- {
- dispose();
- System.exit(0);
- }
- });
-
- MenuBar mbar = new MenuBar();
- Menu menu = new Menu("File");
- MenuItem exit = new MenuItem("Exit");
- menu.add(exit);
- mbar.add(menu);
- setMenuBar(mbar);
-
- exit.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ev) {
- dispose();
- System.exit(0);
- }});
-
- Label message = new Label("Choose File->Exit to continue");
- add(message, "Center");
- }
-}
diff --git a/libjava/classpath/testsuite/java.sun.awt/FrameTest.java b/libjava/classpath/testsuite/java.sun.awt/FrameTest.java
deleted file mode 100644
index 02a2bef..0000000
--- a/libjava/classpath/testsuite/java.sun.awt/FrameTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-import java.awt.*;
-import java.awt.event.*;
-
-public class FrameTest
- extends Frame
-{
- public static void main(String args[])
- {
- FrameTest frame = new FrameTest();
- frame.pack();
- frame.show();
- }
- public FrameTest()
- {
- super("FrameTest");
- Button done = new Button("Press to continue");
- add(done, "Center");
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent event)
- {
- dispose();
- System.exit(0);
- }
- });
- done.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ev) {
- dispose();
- System.exit(0);
- }});
-
- }
-}
diff --git a/libjava/classpath/testsuite/java.sun.awt/execute.exp b/libjava/classpath/testsuite/java.sun.awt/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.sun.awt/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.sun.tools/ClassPathTest.java b/libjava/classpath/testsuite/java.sun.tools/ClassPathTest.java
deleted file mode 100644
index 9e17cc3..0000000
--- a/libjava/classpath/testsuite/java.sun.tools/ClassPathTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-import sun.tools.java.*;
-
-public class ClassPathTest {
- public static void main(String args[]) {
- ClassPath cp =
- new ClassPath((String)System.getProperties().get("java.class.path"));
- ClassFile cf = cp.getFile("ClassPathTest.class");
- try {
- System.out.println("PASSED: "+cp.toString() +" "+ cf.toString());
- } catch (Exception e) {
- System.out.println("FAILED: " + e.toString());
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.sun.tools/JavacTest.java b/libjava/classpath/testsuite/java.sun.tools/JavacTest.java
deleted file mode 100644
index b7ac524..0000000
--- a/libjava/classpath/testsuite/java.sun.tools/JavacTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-import java.lang.*;
-
-public class JavacTest {
-
- public static void main (String args[]) {
- try {
-
-
- sun.tools.javac.Main javac = new sun.tools.javac.Main(System.err, "javac");
-
- String[] strarr = new String[1];
- strarr[0] = "java.sun.tools/JavacTest.java";
-
- javac.compile(strarr);
-
- System.out.println("PASSED: javac worked");
- System.exit(0);
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.sun.tools/execute.exp b/libjava/classpath/testsuite/java.sun.tools/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.sun.tools/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.text/MessageFormatTest.java b/libjava/classpath/testsuite/java.text/MessageFormatTest.java
deleted file mode 100644
index 94efe94..0000000
--- a/libjava/classpath/testsuite/java.text/MessageFormatTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-import java.text.*;
-
-public class MessageFormatTest
-{
- public static void main(String args[])
- {
- try {
- String[] sa = new String[3];
- String format = "{0}.{1}() {2}";
-
- sa[0] = "MessageFormat";
- sa[1] = "format";
- sa[2] = "worked";
-
- String message = MessageFormat.format(format, (Object[])sa);
-
- if (null == message)
- throw new Exception("Unable to format message");
-
- System.out.println("PASSED: " + message);
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.text/SimpleDateFormatTest.java b/libjava/classpath/testsuite/java.text/SimpleDateFormatTest.java
deleted file mode 100644
index 4bd8a5f..0000000
--- a/libjava/classpath/testsuite/java.text/SimpleDateFormatTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-import java.util.*; // for Date()
-import java.text.*;
-
-public class SimpleDateFormatTest
-{
- public static void main(String args[])
- {
- try {
- SimpleDateFormat formatter
- = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
- Date current = new Date();
- System.out.println("PASSED: time="+formatter.format(current));
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.text/execute.exp b/libjava/classpath/testsuite/java.text/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.text/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/java.util/ResourceBundleTest.java b/libjava/classpath/testsuite/java.util/ResourceBundleTest.java
deleted file mode 100644
index 5ad5ad6..0000000
--- a/libjava/classpath/testsuite/java.util/ResourceBundleTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-import java.util.*;
-
-public class ResourceBundleTest
-{
- public static void main(String args[])
- {
- try {
- ResourceBundle messageRB =
- ResourceBundle.getBundle("sun.tools.javac.resources.javac");
-
- String bundle = (String)messageRB.getObject("main.usage");
- if (null == bundle)
- throw new Exception("javac.main.usage resource is null");
-
- System.out.println("PASSED: Resource javac.main.usage existed");
- } catch (Exception e) {
- System.out.println("FAILED: " + e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.util/SimpleTimeZoneTest.java b/libjava/classpath/testsuite/java.util/SimpleTimeZoneTest.java
deleted file mode 100644
index 1263c21..0000000
--- a/libjava/classpath/testsuite/java.util/SimpleTimeZoneTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-import java.util.*;
-
-public class SimpleTimeZoneTest
-{
- public static void main(String args[])
- {
- try {
- SimpleTimeZone gmt = new SimpleTimeZone(0, "GMT");
- System.out.println("PASSED: timezone="+gmt.toString());
- } catch (Exception e) {
- System.out.println("FAILED: "+e);
- }
- }
-}
diff --git a/libjava/classpath/testsuite/java.util/execute.exp b/libjava/classpath/testsuite/java.util/execute.exp
deleted file mode 100644
index 1092485..0000000
--- a/libjava/classpath/testsuite/java.util/execute.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-
-# Load support procs
-load_lib java.exp
-
-test-java-source
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/AllParserTests.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/AllParserTests.java
deleted file mode 100644
index d4fca26..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/AllParserTests.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/* AllParserTests.java -- The comprehensive HTML parser test.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-import test.gnu.javax.swing.text.html.HTML_Test;
-import test.gnu.javax.swing.text.html.parser.AttributeList_test;
-import test.gnu.javax.swing.text.html.parser.DTD_test;
-import test.gnu.javax.swing.text.html.parser.Element_Test;
-import test.gnu.javax.swing.text.html.parser.Entity_Test;
-import test.gnu.javax.swing.text.html.parser.HTML_parsing;
-import test.gnu.javax.swing.text.html.parser.HTML_randomTable;
-import test.gnu.javax.swing.text.html.parser.ParserEntityResolverTest;
-import test.gnu.javax.swing.text.html.parser.TagElement_Test;
-import test.gnu.javax.swing.text.html.parser.Text;
-import test.gnu.javax.swing.text.html.parser.Token_locations;
-import test.gnu.javax.swing.text.html.parser.parameterDefaulter_Test;
-import test.gnu.javax.swing.text.html.parser.supplementaryNotifications;
-import test.gnu.javax.swing.text.html.parser.textPreProcessor_Test;
-import test.gnu.javax.swing.text.html.parser.low.Buffer_Test;
-import test.gnu.javax.swing.text.html.parser.low.Constants_Test;
-import test.gnu.javax.swing.text.html.parser.low.ReaderTokenizer_Test;
-
-/**
- * This is a complete test for javax.swing.text.html.parser package.
- * Apart javax.* classes, it also tests the implementation specific
- * gnu.javax.* classes and in this way is more strict than
- * Mauve tests. To avoid regression it is strongly recommended to run
- * this test after you modify clases in javax.swing.text.html.parser or
- * gnu.javax.swing.text.html.parser.
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class AllParserTests
-{
- public static void main(String[] args)
- {
- try
- {
- HTML_Test a_HTML_Test = new HTML_Test();
- a_HTML_Test.testGetAttributeKey();
- a_HTML_Test.testGetIntegerAttributeValue();
- a_HTML_Test.testGetTag();
- a_HTML_Test.testCaseSensitivity();
- a_HTML_Test.testConstructor();
-
- Buffer_Test a_Buffer_Test = new Buffer_Test();
- a_Buffer_Test.testDelete();
- a_Buffer_Test.testAppend();
-
- Constants_Test a_Constants_Test = new Constants_Test();
- a_Constants_Test.testCases();
-
- ReaderTokenizer_Test a_ReaderTokenizer_Test =
- new ReaderTokenizer_Test();
- a_ReaderTokenizer_Test.testReadingAndAhead();
- a_ReaderTokenizer_Test.testComplexToken();
-
- AttributeList_test a_AttributeList_test = new AttributeList_test();
- a_AttributeList_test.testSame();
-
- DTD_test a_DTD_test = new DTD_test();
- a_DTD_test.testGetElement();
-
- Element_Test a_Element_Test = new Element_Test();
- a_Element_Test.testName2type();
- a_Element_Test.testAttributeGetter();
-
- Entity_Test a_Entity_Test = new Entity_Test();
- a_Entity_Test.testName2type();
- a_Entity_Test.testPublicSystemGeneralParameter();
-
- HTML_parsing a_HTML_parsing = new HTML_parsing();
- a_HTML_parsing.testHTMLParsing();
-
- HTML_randomTable a_HTML_randomTable = new HTML_randomTable();
- a_HTML_randomTable.testTableParsing();
-
- parameterDefaulter_Test a_parameterDefaulter_Test =
- new parameterDefaulter_Test();
- a_parameterDefaulter_Test.testDefaultValues();
-
- ParserEntityResolverTest a_ParserEntityResolverTest =
- new ParserEntityResolverTest();
- a_ParserEntityResolverTest.testResolver();
-
- supplementaryNotifications a_supplementaryNotifications =
- new supplementaryNotifications();
- a_supplementaryNotifications.testHTMLParsing();
-
- TagElement_Test a_TagElement_Test = new TagElement_Test();
- a_TagElement_Test.testTagElement();
-
- textPreProcessor_Test a_textPreProcessor_Test =
- new textPreProcessor_Test();
- a_textPreProcessor_Test.testStandardPreProcessing();
- a_textPreProcessor_Test.testPreFormattedPreProcessing();
-
- Text a_Text = new Text();
- a_Text.testTextParsing();
-
- Token_locations a_Token_locations = new Token_locations();
- a_Token_locations.testHTMLParsing();
- }
- catch (Exception ex)
- {
- System.err.println("The tests have FAILED.\nPlease either correct your " +
- "changes\nor, if you are absolutely sure, correct the tests.\n" +
- "See the following exception for details"
- );
- ex.printStackTrace(System.err);
- System.exit(1);
- }
- System.out.println("HTML parser tests have passed.");
- System.exit(0);
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/HTML_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/HTML_Test.java
deleted file mode 100644
index 60247fd..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/HTML_Test.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* HTML_Test.java -- HTML parser test.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html;
-
-import test.gnu.javax.swing.text.html.parser.TestCase;
-
-import javax.swing.text.SimpleAttributeSet;
-import javax.swing.text.html.HTML;
-
-public class HTML_Test
- extends TestCase
-{
- /**
- * By the language definition, HTML tags and attributes are case
- * insensitive. Hence if it is not clearly specified, in which case
- * the tag name must be, it should be expected to come as in
- * lowercase, as in uppercase. This should be true for HTML.getTag(String)
- * and for HTML.getAttributeKey(String).
- *
- * In some implementations these two functions may be case sensitive.
- * As this requirement is not mentioned in the documentation,
- * and also it is not documented, in which case the name must be supplied,
- * this will be reported as an error in this test.
- * The GNU CLASSPATH implementation is case insensitive.
- */
- public void testCaseSensitivity()
- {
- String def = "case sensitivity";
- assertEquals("html=Html", HTML.getTag("html"), HTML.getTag("HtmL"));
- assertEquals("html=HTML", HTML.getTag("html"), HTML.getTag("HTML"));
- assertEquals("size=SIZE", HTML.getAttributeKey("size"),
- HTML.getAttributeKey("SIZE")
- );
- assertEquals("size=SizE", HTML.getAttributeKey("size"),
- HTML.getAttributeKey("SizE")
- );
- }
-
- public void testConstructor()
- {
- new HTML();
- }
-
- public void testGetAttributeKey()
- {
- // Test the known tags.
- String[] mine = toStrings(HTML.getAllAttributeKeys());
-
- for (int i = 0; i < mine.length; i++)
- assertNotNull(mine [ i ], HTML.getAttributeKey(mine [ i ]));
-
- // Test the unknown tag.
- assertNull("surely unknown", HTML.getTag("audrius"));
- }
-
- public void testGetIntegerAttributeValue()
- {
- SimpleAttributeSet ase = new SimpleAttributeSet();
- ase.addAttribute(HTML.getAttributeKey("size"), "222");
- assertEquals(222,
- HTML.getIntegerAttributeValue(ase,
- HTML.getAttributeKey("size"), 333
- )
- );
-
- assertEquals(333,
- HTML.getIntegerAttributeValue(ase,
- HTML.getAttributeKey("href"), 333
- )
- );
- }
-
- public void testGetTag()
- {
- // known tags:
- String[] mine = toStrings(HTML.getAllTags());
-
- for (int i = 0; i < mine.length; i++)
- assertNotNull(mine [ i ], HTML.getTag(mine [ i ]));
-
- // unknown tag
- assertNull("surely unknown", HTML.getTag("audrius"));
- }
-
- private String[] toStrings(Object[] objs)
- {
- String[] a = new String[ objs.length ];
-
- for (int i = 0; i < a.length; i++)
- a [ i ] = objs [ i ].toString();
-
- return a;
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Element_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Element_Test.java
deleted file mode 100644
index 039be4a..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Element_Test.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Element_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import javax.swing.text.html.parser.AttributeList;
-import javax.swing.text.html.parser.DTD;
-import javax.swing.text.html.parser.DTDConstants;
-import javax.swing.text.html.parser.Element;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class Element_Test
- extends TestCase
-{
- private Element element = null;
-
- public void testAttributeGetter()
- throws Exception
- {
- // Create a chain of 24 attributes:
- AttributeList list = new AttributeList("heading");
- AttributeList head = list;
- list.value = null;
- for (int i = 0; i < 24; i++)
- {
- AttributeList a = new AttributeList("a" + i);
- a.value = "v" + i;
- list.next = a;
- list = a;
- }
-
- Element e = DTD.getDTD("test").getElement("e");
- e.atts = head;
-
- for (int i = 0; i < 24; i++)
- {
- // Check if the name is found.
- assertEquals(e.getAttribute("a" + i).toString(), "a" + i);
-
- // Check if the attribute value is correct.
- assertEquals(e.getAttribute("a" + i).value, "v" + i);
-
- // Check if the attribute can be found by value.
- assertEquals(e.getAttributeByValue("v" + i).name, "a" + i);
- }
-
- // Check is the null value is searched correctly.
- assertEquals(e.getAttributeByValue(null).toString(), "heading");
-
- // Check for unknown attribute
- assertEquals(e.getAttribute("audrius"), null);
-
- // Check for unknown value
- assertEquals(e.getAttributeByValue("audrius"), null);
- }
-
- public void testName2type()
- {
- assertEquals(Element.name2type("CDATA"), DTDConstants.CDATA);
- assertEquals(Element.name2type("RCDATA"), DTDConstants.RCDATA);
- assertEquals(Element.name2type("EMPTY"), DTDConstants.EMPTY);
- assertEquals(Element.name2type("ANY"), DTDConstants.ANY);
-
- assertEquals(Element.name2type("audrius"), 0);
- assertEquals(Element.name2type("rcdata"), 0);
- }
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
- }
-
- protected void tearDown()
- throws Exception
- {
- element = null;
- super.tearDown();
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Entity_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Entity_Test.java
deleted file mode 100644
index b9fd21c..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Entity_Test.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Entity_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import javax.swing.text.html.parser.DTDConstants;
-import javax.swing.text.html.parser.Element;
-import javax.swing.text.html.parser.Entity;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class Entity_Test
- extends TestCase
-{
- private Element element = null;
-
- public void testName2type()
- {
- assertEquals("PUBLIC", Entity.name2type("PUBLIC"), DTDConstants.PUBLIC);
- assertEquals("SDATA", Entity.name2type("SDATA"), DTDConstants.SDATA);
- assertEquals("PI", Entity.name2type("PI"), DTDConstants.PI);
- assertEquals("STARTTAG", Entity.name2type("STARTTAG"), DTDConstants.STARTTAG);
- assertEquals("ENDTAG", Entity.name2type("ENDTAG"), DTDConstants.ENDTAG);
- assertEquals("MS", Entity.name2type("MS"), DTDConstants.MS);
- assertEquals("MD", Entity.name2type("MD"), DTDConstants.MD);
- assertEquals("SYSTEM", Entity.name2type("SYSTEM"), DTDConstants.SYSTEM);
-
- assertEquals("surely unknown ", Entity.name2type("audrius"),
- DTDConstants.CDATA
- );
- }
-
- public void testPublicSystemGeneralParameter()
- {
- int[] pu_sy = new int[] { DTDConstants.PUBLIC, DTDConstants.SYSTEM, 0 };
-
- int[] gen_par =
- new int[] { DTDConstants.GENERAL, DTDConstants.PARAMETER, 0 };
-
- for (int ps = 0; ps < pu_sy.length; ps++)
- {
- for (int gp = 0; gp < gen_par.length; gp++)
- {
- Entity e = new Entity(null, 0, null);
- e.type = pu_sy [ ps ] | gen_par [ gp ];
-
- assertEquals(e.isGeneral(), gen_par [ gp ] == DTDConstants.GENERAL);
- assertEquals(e.isParameter(),
- gen_par [ gp ] == DTDConstants.PARAMETER
- );
-
- assertEquals((e.type & DTDConstants.SYSTEM) != 0,
- pu_sy [ ps ] == DTDConstants.SYSTEM
- );
-
- assertEquals((e.type & DTDConstants.PUBLIC) != 0,
- pu_sy [ ps ] == DTDConstants.PUBLIC
- );
-
- assertEquals((e.type & DTDConstants.GENERAL) != 0,
- gen_par [ gp ] == DTDConstants.GENERAL
- );
-
- assertEquals((e.type & DTDConstants.PARAMETER) != 0,
- gen_par [ gp ] == DTDConstants.PARAMETER
- );
- }
- }
- }
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
- }
-
- protected void tearDown()
- throws Exception
- {
- element = null;
- super.tearDown();
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_parsing.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_parsing.java
deleted file mode 100644
index 3072385..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_parsing.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/* HTML_parsing.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class HTML_parsing
- extends TestCase
-{
- /**
- * This is used for profiling.
- */
- public static void main(String[] args)
- {
- long t = System.currentTimeMillis();
- try
- {
- HTML_parsing p = new HTML_parsing();
- for (int i = 0; i < 2000; i++)
- {
- p.testHTMLParsing();
- if (i % 10 == 0)
- System.out.print('.');
- }
- }
- catch (Exception ex)
- {
- }
- System.out.println("TIME " + (System.currentTimeMillis() - t));
- }
-
- public void testHTMLParsing()
- throws Exception
- {
- Parser_Test v = new Parser_Test();
- v.hideImplied = false;
-
- // Test subsequent tags.
- v.verify("<b><i><u>text</b><i></u>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><b><i><u>'text'</b><i></u></i></i></body></html>"
- );
-
- // Test entities.
- v.verify("hex: &#x55; eqdec: &#61; ampnamed: &amp;",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'>'hex: U eqdec: = ampnamed: &'</body></html>"
- );
-
- // Test comments.
- v.verify("<html><head></head><body><!--a-->< !--b--><! --c--><!-- d--><!--e --><!--f-- ><!--g--><!---h---><!-- i --><!--- j ---><!-- -- --> <b> <!---------->",
- "<html><head></head><body>{a}{b}{c}{ d}{e }{f}{g}{-h-}{ i }{- j -}{ -- }<b>{------}</b></body></html>"
- );
-
- // Test unclosed tags.
- v.verify("<hr id = 1 class = c<hr id=2>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><hr class='c' id='1'/><hr id='2'/></body></html>"
- );
-
- // Test errors and unclosed tags.
- v.verify("<b#r><hr id = 1 # class = c<hr id=2>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><b><hr id='1'/>'# class = c'<hr id='2'/></b></body></html>"
- );
-
- // Test script.
- v.verify("<hr id=1><script a=b c=d><hr id=1></script><hr id=1>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><hr id='1'/><script a='b' c='d'>'<hr id=1>'</script><hr id='1'/></body></html>"
- );
-
- // Test valid attributes.
- v.verify("<hr id='i' title=\"tit\" class=cl><hr><hr id = 2>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><hr class='cl' id='i' title='tit'/><hr/><hr id='2'/></body></html>"
- );
-
- // Test unknown attribute without value.
- v.verify("<hr audrius title=\"tit\">",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><hr audrius='#DEFAULT' title='tit'/></body></html>"
- );
-
- // Test known attributes witout value.
- v.verify("<option id=a selected><option id=b selected = selected class=cC><input checked>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><option id='a' selected='selected'></option></body><body _implied_='true'><option class='cC' id='b' selected='selected'></option><input checked='checked'/></body></html>"
- );
-
- // Test table content model.
- v.verify("<table>a</table>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr _implied_='true'><td _implied_='true'>'a'</td></tr></tbody></table></body></html>"
- );
-
- // Test table content model.
- v.verify("<table><caption>cap</caption>a</table>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><caption>'cap'</caption><tbody _implied_='true'><tr _implied_='true'><td _implied_='true'>'a'</td></tr></tbody></table></body></html>"
- );
-
- // Test typical table.
- v.verify("<table><tr><td>x</td><td>y</td><td>z</td></table>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr><td>'x'</td><td>'y'</td><td>'z'</td></tr></tbody></table></body></html>"
- );
-
- // Test nested table.
- v.verify("<table><tr><td><table>nested</table>x</td><td>y</td><td>z</td></table>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr><td><table><tbody _implied_='true'><tr _implied_='true'><td _implied_='true'>'nested'</td></tr></tbody></table>'x'</td><td>'y'</td><td>'z'</td></tr></tbody></table></body></html>"
- );
-
- // Test simple nested list.
- v.verify("<ul><li>a</li><ul><li>na</li><li>nb</li></ul><li>b</li></ul>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><ul><li>'a'</li><ul><li>'na'</li><li>'nb'</li></ul><li>'b'</li></ul></body></html>"
- );
-
- // Test simple non-nested list.
- v.verify("<ul><li>a</li><li>na</li><li>nb</li><li>b</li></ul>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><ul><li>'a'</li><li>'na'</li><li>'nb'</li><li>'b'</li></ul></body></html>"
- );
-
- // Test list without closing tags (obsolete list form).
- v.verify("<ul><li>a<li>na<li>nb<li>b</ul>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><ul><li>'a'</li><li>'na'</li><li>'nb'</li><li>'b'</li></ul></body></html>"
- );
-
- // Test list without closing tags (obsolete list form).
- v.verify("<ul><li>a<ul><li>na<li>nb</ul><li>b</ul>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><ul><li>'a'<ul><li>'na'</li><li>'nb'</li></ul></li><li>'b'</li></ul></body></html>"
- );
-
- // Test Obsolete table.
- v.verify("<table><tr><td>a<td>b<td>c</tr>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr><td>'a'</td><td>'b'</td><td>'c'</td></tr></tbody></table></body></html>"
- );
-
- // Test html no head no body.
- v.verify("<html>text</html>",
- "<html><head _implied_='true'></head><body _implied_='true'>'text'</body></html>"
- );
-
- // Test head only.
- v.verify("<head></head>text",
- "<html _implied_='true'><head></head><body _implied_='true'>'text'</body></html>"
- );
-
- // Test head and body.
- v.verify("<head><title>ti</title></head><body>text",
- "<html _implied_='true'><head><title>'ti'</title></head><body>'text'</body></html>"
- );
-
- // Test title and text.
- v.verify("<title>title</title>text",
- "<html _implied_='true'><head _implied_='true'><title>'title'</title></head><body _implied_='true'>'text'</body></html>"
- );
-
- // Test html only.
- v.verify("<html>text</html>",
- "<html><head _implied_='true'></head><body _implied_='true'>'text'</body></html>"
- );
-
- // Test body only.
- v.verify("<body>text</body>",
- "<html _implied_='true'><head _implied_='true'></head><body>'text'</body></html>"
- );
-
- // Test head only.
- v.verify("<head></head>text",
- "<html _implied_='true'><head></head><body _implied_='true'>'text'</body></html>"
- );
-
- // Test obsolete table.
- v.verify("<table><tr><td>a</td><tr><td>a</td>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr><td>'a'</td></tr><tr><td>'a'</td></tr></tbody></table></body></html>"
- );
-
- // Test obsolete table.
- v.verify("<table><tr><td>a<td>b<tr><td>a<td>b<td>c",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><tbody _implied_='true'><tr><td>'a'</td><td>'b'</td></tr><tr><td>'a'</td><td>'b'</td><td>'c'</td></tr></tbody></table></body></html>"
- );
-
- // Test style.
- v.verify("<html><head><style><hr id=2></style></head><hr id = b>",
- "<html><head><style>'<hr id=2>'</style></head><body _implied_='true'><hr id='b'/></body></html>"
- );
-
- // Test style.
- v.verify("<style><hr id=2></style>x",
- "<html _implied_='true'><head _implied_='true'><style>'<hr id=2>'</style></head><body _implied_='true'>'x'</body></html>"
- );
-
- // Test entities in attributes.
- v.verify("<hr id='id_&#x41;&#90' class= \"&#89;_&amp;\" >",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><hr class='Y_&' id='id_AZ'/></body></html>"
- );
-
- // Test colgroup.
- v.verify("<table><COLGROUP width=\"25\"><COL span=\"45\"><COL id=\"identifier\"></COLGROUP><td>a<td>b<tr>x",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><table><colgroup width='25'><col span='45'/><col id='identifier'/></colgroup><tbody _implied_='true'><tr _implied_='true'><td>'a'</td><td>'b'</td></tr><tr><td _implied_='true'>'x'</td></tr></tbody></table></body></html>"
- );
-
- // Test definition list, obsolete.
- v.verify("<dl><dt>ha<dd>a<dt>hb<dd>b",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><dl><dt>'ha'</dt><dd>'a'</dd><dt>'hb'</dt><dd>'b'</dd></dl></body></html>"
- );
-
- // Test definition list.
- v.verify("<html><head></head><body><dl><dt>'ha'</dt><dd>'a'</dd><dt>'hb'</dt><dd>'b'</dd></dl></body></html>",
- "<html><head></head><body><dl><dt>''ha''</dt><dd>''a''</dd><dt>''hb''</dt><dd>''b''</dd></dl></body></html>"
- );
-
- // Test paragraphs.
- v.verify("<p>b<p>c<p>d",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><p>'b'</p><p>'c'</p><p>'d'</p></body></html>"
- );
-
- // Test paragraphs.
- v.verify("<p>'b'</p><p>'c'</p><p>'d'</p>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><p>''b''</p><p>''c''</p><p>''d''</p></body></html>"
- );
-
- // Test select obsolete.
- v.verify("<form><select><option value='hi' disabled>a<option selected>b<option>normal",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><form><select><option disabled='disabled' value='hi'>'a'</option><option selected='selected'>'b'</option><option>'normal'</option></select></form></body></html>"
- );
-
- // Test select current.
- v.verify("<form><select><option>'a'</option><option SELECTED='selected'>'b'</option></select></form>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><form><select><option>''a''</option><option selected='selected'>''b''</option></select></form></body></html>"
- );
-
- // Test select current.
- v.verify("<form><select><option>after<optgroup><option>'a'</option><option SELECTED='selected'>'b'</option></optgroup></select></form>",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'><form><select><option>'after'</option><optgroup><option>''a''</option><option selected='selected'>''b''</option></optgroup></select></form></body></html>"
- );
-
- // Test << antihang.
- v.verify("<<i>text",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'>'<'<i>'text'</i></body></html>"
- );
-
- // Test << antihang with spaces.
- v.verify(" < < i>text",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'>'<'<i>'text'</i></body></html>"
- );
-
- // Test Standalone <.
- v.verify("Text <wrong tag is it! <b> text ",
- "<html _implied_='true'><head _implied_='true'></head><body _implied_='true'>'Text''<wrong tag is it!'<b>'text'</b></body></html>"
- );
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_randomTable.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_randomTable.java
deleted file mode 100644
index d7a52b5..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/HTML_randomTable.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/* HTML_randomTable.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import java.util.Random;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class HTML_randomTable
- extends TestCase
-{
- class table
- {
- final String[][] rows;
- final boolean caption = r.nextBoolean();
-
- table()
- {
- int nrows = r.nextInt(5) + 1;
- rows = new String[ nrows ][];
- for (int i = 0; i < rows.length; i++)
- {
- int ncol = r.nextInt(5) + 1;
- rows [ i ] = new String[ ncol ];
- for (int j = 0; j < rows [ i ].length; j++)
- {
- rows [ i ] [ j ] = "C_" + i + "_" + j;
- }
- }
- }
-
- public String getHtml()
- {
- StringBuffer b = new StringBuffer("<html><head></head><body><table>");
- if (caption)
- b.append("<caption>capt</caption>");
- if (r.nextBoolean())
- b.append("<" + s() + "tbody" + s() + ">");
- for (int row = 0; row < rows.length; row++)
- {
- b.append("<" + s() + "tr" + s() + ">");
- for (int col = 0; col < rows [ row ].length; col++)
- {
- b.append("<" + s() + "td" + s() + ">");
- b.append(rows [ row ] [ col ]);
- if (r.nextBoolean())
- b.append("<" + s() + "/" + "td" + s() + ">");
- }
- if (r.nextBoolean())
- b.append("<" + s() + "/" + "tr" + s() + ">");
- }
- b.append("</tbody></table></body></html>");
- return b.toString();
- }
-
- public String getTrace()
- {
- StringBuffer b = new StringBuffer("<html><head></head><body><table>");
- if (caption)
- b.append("<caption>'capt'</caption>");
- b.append("<tbody>");
- for (int row = 0; row < rows.length; row++)
- {
- b.append("<tr>");
- for (int col = 0; col < rows [ row ].length; col++)
- {
- b.append("<td>'" + rows [ row ] [ col ] + "'</td>");
- }
- b.append("</tr>");
- }
- b.append("</tbody></table></body></html>");
- return b.toString();
- }
-
- void test()
- throws Exception
- {
- String trace = getTrace();
- String html = getHtml();
- v.verify(html, trace);
- }
- }
-
- Parser_Test v = new Parser_Test();
- Random r = new Random();
-
- public HTML_randomTable()
- throws Exception
- {
- }
-
- public String s()
- {
- if (r.nextBoolean())
- return "";
-
- StringBuffer b = new StringBuffer();
- int spc = r.nextInt(4);
- for (int i = 0; i < spc; i++)
- {
- b.append(' ');
- }
- return b.toString();
- }
-
- /**
- * Try 1001 variable randomly generated table.
- */
- public void testTableParsing()
- throws Exception
- {
- v.hideImplied = true;
- for (int i = 0; i < 1001; i++)
- {
- new table().test();
- }
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserEntityResolverTest.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserEntityResolverTest.java
deleted file mode 100644
index 414aadc..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserEntityResolverTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* ParserEntityResolverTest.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import gnu.javax.swing.text.html.parser.HTML_401F;
-import gnu.javax.swing.text.html.parser.support.Parser;
-
-import java.lang.reflect.Method;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class ParserEntityResolverTest
- extends TestCase
-{
- /* Testing private methods of entity resolver. */
- public void testResolver()
- throws Exception
- {
- Parser p =
- new Parser(HTML_401F.getInstance())
- {
- public void error(String a, String b)
- {
- }
- };
-
- Method rn =
- p.getClass().getSuperclass().getDeclaredMethod("resolveNamedEntity",
- new Class[] { String.class }
- );
- rn.setAccessible(true);
-
- assertEquals(exe(p, rn, "&amp"), "&");
- assertEquals(exe(p, rn, "&AMP"), "&");
- assertEquals(exe(p, rn, "&amp"), "&");
- assertEquals(exe(p, rn, "&amP"), "&");
-
- assertEquals(exe(p, rn, "&;"), "&;");
- assertEquals(exe(p, rn, "&audrius;"), "&audrius;");
-
- rn =
- p.getClass().getSuperclass().getDeclaredMethod("resolveNumericEntity",
- new Class[] { String.class }
- );
- rn.setAccessible(true);
-
- assertEquals(exe(p, rn, "&#x55"), "U");
- assertEquals(exe(p, rn, "&#X55"), "U");
- assertEquals(exe(p, rn, "&#61"), "=");
- assertEquals(exe(p, rn, "&#61"), "=");
-
- assertEquals(exe(p, rn, "&#audrius"), "?");
- }
-
- private String exe(Parser p, Method m, String arg)
- throws Exception
- {
- Object[] o = new Object[ 1 ];
- o [ 0 ] = arg;
- return m.invoke(p, o).toString();
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserTest.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserTest.java
deleted file mode 100644
index af12cbb..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/ParserTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/* ParserTest.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import gnu.javax.swing.text.html.parser.support.Parser;
-
-import java.io.PrintStream;
-
-import java.util.Enumeration;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.html.parser.Element;
-import javax.swing.text.html.parser.TagElement;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class ParserTest
- extends gnu.javax.swing.text.html.parser.support.Parser
-{
- PrintStream out = System.out;
- StringBuffer errors = new StringBuffer();
-
- public ParserTest()
- {
- super(gnu.javax.swing.text.html.parser.HTML_401F.getInstance());
- }
-
- public static void main(String[] args)
- {
- String sx;
- sx =
- "<html><head></head><body><table>< tbody><tr >< td >C_0_0< td>C_0_1< td >C_0_2< /td >< td >C_0_3<td>C_0_4< /td></tr ></tbody></table></body></html>";
- try
- {
- System.out.println(sx);
-
- ParserTest t = new ParserTest();
- t.parse(new java.io.StringReader(sx));
- System.out.println("\nErrors:");
- System.out.println(t.errors);
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- }
-
- protected void handleComment(char[] parm1)
- {
- out.print("{" + new String(parm1) + "}");
- }
-
- protected void handleEOFInComment()
- {
- out.print(" [EOF in comment] ");
- }
-
- protected void handleEmptyTag(TagElement tag)
- throws javax.swing.text.ChangedCharSetException
- {
- out.print("<" + tag);
-
- javax.swing.text.AttributeSet atts = getAttributes();
- dumpAttributes(atts);
- out.print("/>");
- }
-
- protected void handleEndTag(TagElement tag)
- {
- out.print("</" + tag + "> ");
- }
-
- protected void handleError(int line, String message)
- {
- errors.append(message);
- errors.append('\n');
- }
-
- protected void handleStartTag(TagElement tag)
- {
- out.print("<" + tag);
-
- javax.swing.text.AttributeSet atts = getAttributes();
- dumpAttributes(atts);
- out.print('>');
- }
-
- protected void handleText(char[] parm1)
- {
- out.print("'" + new String(parm1) + "'");
- }
-
- protected void handleTitle(char[] parm1)
- {
- out.print(" [ Title: " + new String(parm1) + "] ");
- }
-
- protected void markFirstTime(Element element)
- {
- out.print("(1:" + element + ")");
- }
-
- private void dumpAttributes(AttributeSet atts)
- {
- Enumeration enum = atts.getAttributeNames();
- while (enum.hasMoreElements())
- {
- String a = enum.nextElement().toString();
- String v = (String) atts.getAttribute(a);
- out.print(" " + a + "='" + v + "'");
- }
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Parser_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Parser_Test.java
deleted file mode 100644
index c3ba38a..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Parser_Test.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Parser_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import java.io.StringReader;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.TreeSet;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.SimpleAttributeSet;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.HTMLEditorKit;
-import javax.swing.text.html.HTMLEditorKit.ParserCallback;
-import javax.swing.text.html.parser.ParserDelegator;
-import javax.swing.text.html.parser.TagElement;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class Parser_Test
- extends HTMLEditorKit.ParserCallback
-{
- public boolean hideImplied = true;
- protected StringBuffer out = new StringBuffer();
- AttributeSet atts = new SimpleAttributeSet();
-
- public void generate(String x, String comment)
- throws Exception
- {
- String prolog = "<html><head></head><body>";
- String epilog = "</body></html>";
- String html = x; // prolog+x+epilog;
- System.out.println("// Test " + comment + ".");
- System.out.println("v.verify(\"" + html + "\",\n \"" + verify(html, null) +
- "\");"
- );
- }
-
- public void handleComment(char[] parm1, int position)
- {
- out.append("{" + new String(parm1) + "}");
- }
-
- public void handleEndTag(HTML.Tag tag, int position)
- {
- out.append("</" + tag + ">");
- }
-
- public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attributes,
- int position
- )
- {
- if (tag.toString().equals("#pcdata"))
- return;
- out.append("<" + tag);
- dumpAttributes(attributes);
- out.append("/>");
- }
-
- public void handleStartTag(HTML.Tag tag, MutableAttributeSet attributes,
- int position
- )
- {
- out.append("<" + tag);
- dumpAttributes(attributes);
- out.append('>');
- }
-
- public void handleText(char[] chars, int position)
- {
- out.append("'" + new String(chars) + "'");
- }
-
- public String verify(String html, String trace)
- throws Exception
- {
- out.setLength(0);
-
- HTMLEditorKit.ParserCallback callback = this;
- ParserDelegator delegator = new ParserDelegator();
- delegator.parse(new StringReader(html), callback, true);
-
- String ou = out.toString();
- if (trace != null)
- {
- if (!ou.equals(trace))
- {
- System.err.println("Unable to parse '" + html + "':");
- System.err.println(" expected: '" + trace + "',");
- System.out.println(" returned: '" + ou + "'.");
- throw new Exception("'" + html + "' -> '" + ou + "' expected '" +
- trace + "'"
- );
- }
- }
- return ou;
- }
-
- protected void dumpAttributes(AttributeSet atts)
- {
- Enumeration enum = atts.getAttributeNames();
-
- // Sort them to ensure the same order every time:
- TreeSet t = new TreeSet();
- while (enum.hasMoreElements())
- t.add(enum.nextElement().toString());
-
- Iterator iter = t.iterator();
-
- while (iter.hasNext())
- {
- String a = iter.next().toString();
-
- if (hideImplied)
- if (a.equals("_implied_"))
- continue;
-
- String v = atts.getAttribute(a).toString();
- out.append(" " + a + "='" + v + "'");
- }
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Text.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Text.java
deleted file mode 100644
index 9fe592a..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Text.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Text.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.html.HTML;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class Text
- extends TestCase
-{
- public void testTextParsing()
- throws Exception
- {
- Parser_Test v =
- new Parser_Test()
- {
- public void handleSimpleTag(HTML.Tag tag,
- MutableAttributeSet attributes, int position
- )
- {
- if (!tag.toString().equalsIgnoreCase("#pcdata"))
- out.append("<" + tag + ">");
- }
-
- public void handleStartTag(HTML.Tag tag,
- MutableAttributeSet attributes, int position
- )
- {
- out.append("<" + tag + ">");
- }
-
- public void handleText(char[] chars, int position)
- {
- for (int i = 0; i < chars.length; i++)
- {
- out.append(Integer.toHexString(chars [ i ]));
- if (chars [ i ] > ' ')
- out.append("'" + chars [ i ]);
- out.append(" ");
- }
- }
-
- public void handleEndTag(HTML.Tag tag, int position)
- {
- out.append("</" + tag + ">");
- }
- };
-
- v.hideImplied = true;
-
- // NON - preformatted mode:
- // Everything mutates into spaces, multiple spaces mustates
- // into single one, all whitespace around tags is consumed.
- v.verify("\r \n \t {abc r\rn\nt}\t \r\n \r \t",
- "<html><head></head><body>7b'{ 61'a 62'b 63'c 20 72'r 20" +
- " 6e'n 20 74't 7d'} </body></html>"
- );
-
- v.verify(" abba ",
- "<html><head></head><body>61'a 62'b 62'b 61'a </body></html>"
- );
-
- v.verify(" \r ab \t \r \n ba ",
- "<html><head></head><body>61'a 62'b 20 62'b 61'a </body></html>"
- );
-
- // Preformatted mode (in PRE tag):
- // Heading/closing spaces and tabs preserve. ONE \r, \n or \r\n is removed.
- // /r mutates into \n
- v.verify("<pre>\n\n\n\n abba \r\t \r\n</pre>",
- "<html><head></head><body><pre>a a a 20 20 20 61'a 62'b 62'b" +
- " 61'a 20 20 20 a 9 20 </pre></body></html>"
- );
-
- v.verify("<pre> abba </pre>",
- "<html><head></head><body><pre>20 20 20 61'a 62'b 62'b 61'a 20 " +
- "20 20 </pre></body></html>"
- );
-
- v.verify("<pre>\r\n abba </pre>",
- "<html><head></head><body><pre>20 20 20 61'a 62'b 62'b 61'a 20 " +
- "20 20 </pre></body></html>"
- );
-
- v.verify("<pre>\r\n\r\n abba \r\n</pre>",
- "<html><head></head><body><pre>a 20 20 20 61'a 62'b 62'b 61'a 20 20" +
- " 20 </pre></body></html>"
- );
-
- v.verify("<pre> \r ab \t \r \n ba </pre>",
- "<html><head></head><body><pre>20 a 20 61'a 62'b 20 20 9 20 a" +
- " 20 a 20 20 62'b 61'a 20 20 20 </pre></body></html>"
- );
-
- v.verify("<pre> \r\n ab \t \r\n \n ba </pre>",
- "<html><head></head><body><pre>20 a 20 61'a 62'b 20 20 9 20 a" +
- " 20 a 20 20 62'b 61'a 20 20 20 </pre></body></html>"
- );
-
- // In TEXTAREA tag, same.
- v.verify("<textarea>\n\n\n\n abba \r\n</textarea>",
- "<html><head></head><body><textarea>a a a 20 20 20 61'a " +
- "62'b 62'b 61'a 20 </textarea></body></html>"
- );
-
- v.verify("<textarea> abba </textarea>",
- "<html><head></head><body><textarea>20 20 20 61'a 62'b 62'b 61'a 20 " +
- "20 20 </textarea></body></html>"
- );
-
- v.verify("<textarea> \r ab \t \r \n ba </textarea>",
- "<html><head></head><body><textarea>20 a 20 61'a 62'b 20 20 9 20 a" +
- " 20 a 20 20 62'b 61'a 20 20 20 </textarea></body></html>"
- );
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Token_locations.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Token_locations.java
deleted file mode 100644
index 8cbcaad..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/Token_locations.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Token_locations.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import javax.swing.text.MutableAttributeSet;
-import javax.swing.text.html.HTML;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class Token_locations
- extends TestCase
-{
- public void testHTMLParsing()
- throws Exception
- {
- Parser_Test v =
- new Parser_Test()
- {
- public void handleSimpleTag(HTML.Tag tag,
- MutableAttributeSet attributes, int position
- )
- {
- if (tag.toString().equals("#pcdata"))
- return;
- out.append("<" + tag + "[" + position + "]");
- dumpAttributes(attributes);
- out.append("/>");
- }
-
- public void handleStartTag(HTML.Tag tag,
- MutableAttributeSet attributes, int position
- )
- {
- if (tag.toString().equalsIgnoreCase("tbody"))
- return;
- out.append("<" + tag + "[" + position + "]");
- dumpAttributes(attributes);
- out.append('>');
- }
-
- public void handleText(char[] chars, int position)
- {
- out.append("'" + new String(chars) + "[" + position + "]'");
- }
-
- public void handleEndTag(HTML.Tag tag, int position)
- {
- if (tag.toString().equalsIgnoreCase("tbody"))
- return;
- out.append("</" + tag + "[" + position + "]>");
- }
-
- public void handleComment(char[] parm1, int position)
- {
- out.append("{" + new String(parm1) + "[" + position + "]}");
- }
- };
-
- v.hideImplied = true;
-
- // 0123456789012345678901234567890
- v.verify("<table><tr><td>a<td>b<td>c</tr>",
- "<html[0]><head[0]></head[0]><body[0]><table[0]>" +
- "<tr[7]><td[11]>'a[15]'</td[16]><td[16]>'b[20]'</td[21]>" +
- "<td[21]>'c[25]'</td[26]></tr[26]></table[26]></body[26]>" +
- "</html[26]>"
- );
-
- // 0123456789012345678901234567890
- v.verify("a<!-- comment -->b<!-- comment2 -->",
- "<html[0]><head[0]></head[0]><body[0]>'a[0]'{ comment [1]}'b[17]'" +
- "{ comment2 [18]}</body[18]></html[18]>"
- );
-
- // 012345678901234567
- v.verify("<p>b<p>c<p>d",
- "<html[0]><head[0]></head[0]><body[0]><p[0]>'b[3]'</p[4]><p[4]>'" +
- "c[7]'</p[8]><p[8]>'d[11]'</p[11]></body[11]></html[11]>"
- );
-
- // Test SGML
- v.verify("<! the sgml construct >sgml",
- "<html[23]><head[23]></head[23]><body[23]>" +
- "'sgml[23]'</body[23]></html[23]>"
- );
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/ReaderTokenizer_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/ReaderTokenizer_Test.java
deleted file mode 100644
index ebfda42..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/low/ReaderTokenizer_Test.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/* ReaderTokenizer_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser.low;
-
-import test.gnu.javax.swing.text.html.parser.TestCase;
-
-import gnu.javax.swing.text.html.parser.support.low.Constants;
-import gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer;
-import gnu.javax.swing.text.html.parser.support.low.Token;
-import gnu.javax.swing.text.html.parser.support.low.node;
-import gnu.javax.swing.text.html.parser.support.low.pattern;
-
-import java.io.StringReader;
-
-import java.util.ArrayList;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class ReaderTokenizer_Test
- extends TestCase
-{
- ReaderTokenizer rt = new ReaderTokenizer();
-
- public void testComplexToken()
- throws Exception
- {
- String x = "< style >x";
-
- pattern a =
- new pattern(new node[]
- {
- new node(Constants.BEGIN), new node(Constants.NUMTOKEN),
- new node(Constants.END), new node(Constants.NUMTOKEN)
- }
- );
-
- pattern b =
- new pattern(new node[]
- {
- new node(Constants.BEGIN), new node(Constants.STYLE),
- new node(Constants.END), new node(Constants.NUMTOKEN)
- }
- );
-
- pattern c =
- new pattern(new node[]
- {
- new node(Constants.BEGIN), new node(Constants.WS, true),
- new node(Constants.STYLE), new node(Constants.WS, true),
- new node(Constants.END), new node(Constants.NUMTOKEN)
- }
- );
-
- pattern d =
- new pattern(new node[]
- {
- new node(Constants.BEGIN), new node(Constants.WS, true),
- new node(Constants.STYLE), new node(Constants.WS, true),
- new node(Constants.END), new node(Constants.BEGIN)
- }
- );
-
- ReaderTokenizer rt = new ReaderTokenizer();
- rt.reset(new StringReader(x));
-
- assertFalse(a.matches(rt));
- assertFalse(b.matches(rt));
- assertTrue(c.matches(rt));
- assertFalse(d.matches(rt));
- }
-
- public void testReadingAndAhead()
- throws Exception
- {
- ArrayList tokens = new ArrayList();
- StringBuffer b = new StringBuffer();
- for (int i = 0; i < 10; i++)
- {
- String r = rs();
- b.append(" ");
- b.append(r + i);
- tokens.add(" ");
- tokens.add(r + i);
- }
- rt.reset(new StringReader(b.toString()));
-
- for (int i = 0; i < 10; i++)
- {
- for (int ah = 0; ah < 10; ah++)
- {
- Token ahead = rt.getTokenAhead(ah);
- if (i + ah >= tokens.size())
- {
- assertEquals(ahead.kind, rt.EOF);
- }
- else
- {
- if ((i + ah) % 2 == 0)
- assertEquals(ahead.kind, rt.WS);
- else
- {
- assertEquals(ahead.getImage(), tokens.get(i + ah));
- assertEquals(ahead.kind, rt.NUMTOKEN);
- }
- }
- }
-
- Token r = rt.getNextToken();
- assertEquals(r.getImage(), tokens.get(i));
- }
- }
-
- private String rs()
- {
- StringBuffer b = new StringBuffer();
- for (int i = 0; i < 10 * Math.random(); i++)
- {
- b.append("l");
- }
- return b.toString();
- }
-}
diff --git a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/textPreProcessor_Test.java b/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/textPreProcessor_Test.java
deleted file mode 100644
index 9149c54..0000000
--- a/libjava/classpath/testsuite/javax.swing.text.html.parser/test/gnu/javax/swing/text/html/parser/textPreProcessor_Test.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/* textPreProcessor_Test.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath 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, or (at your option)
-any later version.
-
-GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package test.gnu.javax.swing.text.html.parser;
-
-import gnu.javax.swing.text.html.parser.support.textPreProcessor;
-
-/**
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class textPreProcessor_Test
- extends TestCase
-{
- textPreProcessor p = new textPreProcessor();
-
- public void testPreFormattedPreProcessing()
- {
- verifyF("rnrn...r.n.Q.Q.r.n.rn.Q...r.r.rn", "n...n.n.Q.Q.n.n.n.Q...n.n.");
- verifyF("...r.n.Q.Q.r.n.rn.Q...r.r.n", "...n.n.Q.Q.n.n.n.Q...n.n.");
- verifyF("r...r.n.Q.Q.r.n.rn.Q...r.r.n", "...n.n.Q.Q.n.n.n.Q...n.n.");
- verifyF("Q", "Q");
- verifyF(".", ".");
- verifyF("abc..\t..xyz", "abc..\t..xyz");
- verifyF("abcxyz", "abcxyz");
- }
-
- public void testStandardPreProcessing()
- {
- verifyS("...r.n.Q.Q.r.n.rn.Q...r.r.n", "Q.Q.Q");
- verifyS("r...r.n.Q.Q.r.n.rn.Q...r.r.n", "Q.Q.Q");
- verifyS("Q", "Q");
- verifyS(" ", null);
- verifyS(" \r\n", null);
- verifyS("abc..\t..xyz", "abc.xyz");
- verifyS("abcxyz", "abcxyz");
- }
-
- StringBuffer fromText(String x)
- {
- StringBuffer b = new StringBuffer();
- char c;
- for (int i = 0; i < x.length(); i++)
- {
- c = x.charAt(i);
-
- if (c == 'n')
- b.append('\n');
- else if (c == 'r')
- b.append('\r');
- else if (c == '.')
- b.append(' ');
- else
- b.append(c);
- }
- return b;
- }
-
- StringBuffer toText(String x)
- {
- StringBuffer b = new StringBuffer();
- char c;
- for (int i = 0; i < x.length(); i++)
- {
- c = x.charAt(i);
-
- if (c == '\n')
- b.append('n');
- else if (c == '\r')
- b.append('r');
- else if (c == ' ')
- b.append('.');
- else
- b.append(c);
- }
- return b;
- }
-
- void verifyF(String text, String result)
- {
- char[] pp = p.preprocessPreformatted(fromText(text));
-
- if (result == null && pp == null)
- return;
-
- String processed = new String(pp);
-
- processed = toText(processed).toString();
-
- if (!processed.equals(result))
- {
- System.err.println(result);
- System.out.println(processed);
- }
- assertEquals(text, result, processed);
- }
-
- void verifyS(String text, String result)
- {
- char[] pp = p.preprocess(fromText(text));
-
- if (result == null && pp == null)
- return;
-
- String processed = new String(pp);
-
- processed = toText(processed).toString();
-
- if (!processed.equals(result))
- {
- System.err.println(result);
- System.out.println(processed);
- }
- assertEquals(text, result, processed);
- }
-}
diff --git a/libjava/classpath/testsuite/lib/java.exp b/libjava/classpath/testsuite/lib/java.exp
deleted file mode 100644
index e122726..0000000
--- a/libjava/classpath/testsuite/lib/java.exp
+++ /dev/null
@@ -1,212 +0,0 @@
-#
-# Author: Petter Reinholdtsen <pere@td.org.uit.no>
-#
-# Java regression tester for DejaGNU
-#
-
-load_lib target.exp
-
-#
-# Compile and run all available java source
-#
-proc test-java-source { } {
- global srcdir
- global subdir
- global runtests
-
- # Find all Java-files
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.java]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] then {
- continue
- }
-
- java-compile-execute $src
- }
-
- # Find all jasmin (java assambler) files
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.j]] {
- # If we're only testing specific files and this isn't one of them,
- # skip it.
- if ![runtest_file_p $runtests $src] then {
- continue
- }
-
- jasmin-assemble-execute $src
- }
-}
-
-#
-# Compile #args
-#
-proc java-compile { args } {
- set src $args
- set output ""
- set options ""
- set comp_output [javac-target-compile "$src" "$output" executable $options];
-}
-
-#
-# Assemble #args
-#
-proc jasmin-assemble { args } {
- set src $args
- set output ""
- set options ""
- set comp_output [jasmin-target-assemble "$src" "$output" executable $options];
-}
-
-#
-# Compile $args and execute java class runtime_test
-#
-proc java-compile-execute { args } {
- global srcdir
- global subdir
-
- set comp_output [java-compile $args]
- if ![regexp "^$" $comp_output] {
- # Do not care about kaffes stupid messages
- #fail $args
- #print "$comp_output"
- #return
- }
-
- global JAVA
- set java $JAVA
-
- set classpath [getenv CLASSPATH]
- setenv CLASSPATH "${srcdir}/$subdir:$classpath"
-
- # XXX There must be a better way to get basename
- catch {exec basename $args .java} basename
- catch {exec $java $basename} run_output
- exec rm -f "${srcdir}/$subdir/$basename.class"
-
- set lines ""
- foreach line [split $run_output \n] {
- if [regexp "PASSED:.*" $line] {
- if ![regexp "^$" $lines] {
- fail "$args $lines"
- }
- pass "$args $line"
- } else {
- if [regexp "FAILED:.*" $line] {
- fail "$args $line"
- } else {
- # Accumulate "wild" lines
- if ![regexp "^$" $lines] {
- set lines "$lines\n $line"
- } else {
- set lines "$line"
- }
- }
- }
- }
- if ![regexp "^$" $lines] {
- fail "$args $lines"
- }
-
- # Reset CLASSPATH
- setenv CLASSPATH "$classpath"
-
- return;
-}
-
-#
-# Compile $args and execute java class runtime_test
-#
-proc jasmin-assemble-execute { args } {
- global srcdir
- global subdir
-
- set comp_output [jasmin-assemble $args]
- if ![regexp "^$" $comp_output] {
- #fail $args
- #print "$comp_output"
- #return
- }
-
- # XXX Should use some default value
- global JAVA
- set java $JAVA
-
- set classpath [getenv CLASSPATH]
- setenv CLASSPATH "${srcdir}/$subdir:$classpath"
-
- # XXX There must be a better way to get basename
- catch {exec basename $args .j} basename
- catch {exec $java $basename} run_output
- exec rm -f "${srcdir}/$subdir/$basename.class"
-
- set lines ""
- foreach line [split $run_output \n] {
- if [regexp "PASSED:.*" $line] {
- if ![regexp "^$" $lines] {
- fail "$args $lines"
- }
- pass "$args $line"
- } else {
- if [regexp "FAILED:.*" $line] {
- fail "$args $line"
- } else {
- # Accumulate "wild" lines
- if ![regexp "^$" $lines] {
- set lines "$lines\n $line"
- } else {
- set lines "$line"
- }
- }
- }
- }
- if ![regexp "^$" $lines] {
- fail "$args $lines"
- }
-
- # Reset CLASSPATH
- setenv CLASSPATH "$classpath"
-
- return;
-}
-
-#
-# Compile java source
-#
-proc javac-target-compile { source dest type options } {
-# XXX Do it the simple way - should use target_compile
-
- global JAVAC
- set javac $JAVAC
-
- catch {exec $javac $source} comp_output
- return $comp_output
-
-# set options ""
-# lappend options "compiler=javac"
-# lappend options "additional_flags=-g"
-# lappend options "libs="
-# lappend options "ldflags="
-# return [target_compile $source $dest $type $options]
-}
-
-#
-# Compile jasmin (java assambly) source
-#
-proc jasmin-target-assemble { source dest type options } {
- global srcdir
- global subdir
-# XXX Do it the simple way - should use target_compile
-
- global JAVA
- set java $JAVA
-
- catch {exec $java jasmin.Main -d $srcdir/$subdir $source} comp_output
-
- return comp_output;
-# set options ""
-# lappend options "compiler=javac"
-# lappend options "additional_flags=-g"
-# lappend options "libs="
-# lappend options "ldflags="
-# return [target_compile $source $dest $type $options]
-}
diff --git a/libjava/classpath/testsuite/scheme/test.scm b/libjava/classpath/testsuite/scheme/test.scm
deleted file mode 100644
index 74b4b21..0000000
--- a/libjava/classpath/testsuite/scheme/test.scm
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/local/bin/guile -s
-!#
-
-; Guile/JNI/JVM Testing Framework
-;
-; Copyright (c) 1998 Free Software Foundation, Inc.
-; Written by Paul Fisher (rao@gnu.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
-; (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-; USA.
-
-
-; log filenames
-(define verbose-log-file "classpath.log")
-(define summary-log-file "classpath.sum")
-
-; returns the number of times that ELEM appears in the toplevel of LS
-(define count
- (lambda (elem ls)
- (letrec
- ((count-it
- (lambda (ls acc)
- (cond
- ((null? ls) acc)
- ((equal? (car ls) elem) (count-it (cdr ls) (+ acc 1)))
- (else (count-it (cdr ls) acc))))))
- (count-it ls 0))))
-
-; returns a list of pairs containing an element of ELS along with the
-; number of times that element appears in LS
-(define build-result-count
- (lambda (els ls)
- (cond
- ((null? els) '())
- (else (cons (cons (car els) (count (car els) ls))
- (build-result-count (cdr els) ls))))))
-
-; soft port which sends output to both (current-output-port) and
-; the verbose-log-port
-(define screen-and-log-port
- (make-soft-port
- (vector
- (lambda (c)
- (cond
- ((char=? c #\newline)
- (newline (current-output-port))
- (newline verbose-log-port))
- (else
- (write c (current-output-port))
- (write c verbose-log-port))))
- (lambda (s)
- (display s (current-output-port))
- (display s verbose-log-port))
- (lambda ()
- (force-output (current-output-port))
- (force-output verbose-log-port))
- #f
- #f)
- "w"))
-
-; pretty prints the result of a single test
-(define display-test-summary
- (lambda (result port)
- (let ((name (car result))
- (code (cadr result))
- (msg (caddr result)))
- (display "Name : " port)
- (display name port)
- (newline port)
- (display "Result : " port)
- (display code port)
- (newline port)
- (display "Message : " port)
- (if (= (string-length msg) 0)
- (display "None" port)
- (display msg port))
- (newline port)
- (newline port))))
-
-; status message
-(define display-running
- (lambda (class port)
- (display "Running " port)
- (display class port)
- (display "..." port)
- (newline port)))
-
-; runs the test named CLASS
-(define run-test
- (lambda (class)
- (display-running class screen-and-log-port)
- (force-output verbose-log-port)
- (let ((result (test class)))
- (display-test-summary result screen-and-log-port)
- (write (cons class result) summary-log-port)
- (newline summary-log-port)
- (cadr result))))
-
-; run each and every test. each test is read from PORT
-; and delimited by a newline. returns a list of all test result codes
-(define parse-input-file
- (lambda (port)
- (letrec
- ((parse-line
- (lambda (line)
- (cond
- ((eof-object? (car line)) '())
- ((= (string-length (car line)) 0)
- (parse-line (read-line port 'split)))
- (else (cons (run-test (car line))
- (parse-line
- (read-line port 'split))))))))
- (parse-line (read-line port 'split)))))
-
-; pretty prints the result list
-(define display-results
- (lambda (results port)
- (display "Summary information..." port)
- (newline port)
- (letrec ((display-results-l
- (lambda (ls)
- (cond
- ((null? ls))
- (else
- (let ((res (car ls)))
- (display "# of " port)
- (display (car res) port)
- (display "'s " port)
- (display (cdr res) port)
- (newline port))
- (display-results-l (cdr ls)))))))
- (display-results-l results))))
-
-(if (batch-mode?)
- (if (> (length (command-line)) 1)
- (define input-port (open-input-file (cadr (command-line))))
- (error "filename listing tests to execute must be specified.")))
-
-; open up the log files
-(define verbose-log-port (open verbose-log-file
- (logior O_WRONLY O_CREAT O_TRUNC)))
-(define summary-log-port (open summary-log-file
- (logior O_WRONLY O_CREAT O_TRUNC)))
-
-; redirect stderr to the verbose log
-(dup verbose-log-port 2)
-
-; run the tests, and build the result table, and display the results
-(display-results (build-result-count
- '(PASS XPASS FAIL XPAIL UNRESOLVED
- UNSUPPORTED UNTESTED ERROR)
- (parse-input-file input-port)) screen-and-log-port)
diff --git a/libjava/classpath/tools/.cvsignore b/libjava/classpath/tools/.cvsignore
deleted file mode 100644
index eaae7d3..0000000
--- a/libjava/classpath/tools/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile.in
-Makefile
-tools.zip
diff --git a/libjava/classpath/tools/Makefile.am b/libjava/classpath/tools/Makefile.am
index 009fa24..0358b22 100755
--- a/libjava/classpath/tools/Makefile.am
+++ b/libjava/classpath/tools/Makefile.am
@@ -1,17 +1,19 @@
## Input file for automake to generate the Makefile.in used by configure
+GLIBJ_CLASSPATH='$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
+
# Setup the compiler to use the GNU Classpath library we just build
if FOUND_GCJ
-JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
else
if FOUND_JIKES
-JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
else
if FOUND_GCJX
-JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
+JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
else
if FOUND_ECJ
-JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
+JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
else
error dunno how to setup the JCOMPILER and compile
endif
@@ -48,36 +50,12 @@ READMES = $(srcdir)/gnu/classpath/tools/giop/README
ALL_TOOLS_FILES = $(TOOLS_JAVA_FILES) $(TOOLS_TEMPLATES) $(TOOLS_HELPS) $(READMES)
# Some architecture independent data to be installed.
-TOOLS_DATA = $(TOOLS_ZIP)
+TOOLS_DATA = $(TOOLS_ZIP) README
# Where we want these data files installed.
-TOOLSdir = $(pkgdatadir)/tools
-
-# Make sure all sources and icons are also installed so users can use them.
-# (Be careful to strip off the srcdir part of the path when installing.)
-install-data-local:
- srcdir_cnt=`echo $(srcdir) | wc -c`; \
- for file in $(ALL_TOOLS_FILES); do \
- f=`echo $$file | cut -c$$srcdir_cnt-`; \
- fdir=`dirname $$f`; \
- if test ! -d $(DESTDIR)$(pkgdatadir)/tools/$$fdir; then \
- echo "$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/tools/$$fdir"; \
- $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/tools/$$fdir; \
- fi; \
- echo "$(INSTALL_DATA) $$file $(DESTDIR)$(pkgdatadir)/tools/$$f"; \
- $(INSTALL_DATA) $$file $(DESTDIR)$(pkgdatadir)/tools/$$f; \
- done
-
-uninstall-local:
- srcdir_cnt=`echo $(srcdir) | wc -c`; \
- for file in $(ALL_TOOLS_FILES); do \
- f=`echo $$file | cut -c$$srcdir_cnt-`; \
- echo "rm -f $(DESTDIR)$(pkgdatadir)/tools/$$f"; \
- rm -f $(DESTDIR)$(pkgdatadir)/tools/$$f; \
- done
+TOOLSdir = $(pkgdatadir)
# Make sure everything is included in the distribution.
-EXTRA_DIST = Makefile.am
dist-hook:
srcdir_cnt=`echo $(srcdir) | wc -c`; \
for file in $(ALL_TOOLS_FILES); do \
@@ -91,9 +69,10 @@ dist-hook:
cp -p $$file $(distdir)/$$f; \
done
-# To generate the example zip just depend on the sources and ignore the
-# class files. Always regenerate all .class files and remove them immediatly.
-# And copy the template files we use to the classes dir so they get also included.
+# To generate the example zip just depend on the sources and ignore
+# the class files. Always regenerate all .class files and remove them
+# immediately. And copy the template files we use to the classes dir
+# so they get also included.
$(TOOLS_ZIP): $(TOOLS_JAVA_FILES)
mkdir -p classes/gnu/classpath/tools/giop/grmic/templates
mkdir -p classes/gnu/classpath/tools/rmi/rmic/templates
diff --git a/libjava/classpath/tools/Makefile.in b/libjava/classpath/tools/Makefile.in
index 385ba6b..0387336 100644
--- a/libjava/classpath/tools/Makefile.in
+++ b/libjava/classpath/tools/Makefile.in
@@ -38,7 +38,8 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = tools
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/jarsigner.sh.in $(srcdir)/keytool.sh.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
@@ -51,7 +52,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = jarsigner.sh keytool.sh
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -79,6 +80,7 @@ CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CLASSPATH_CONVENIENCE = @CLASSPATH_CONVENIENCE@
CLASSPATH_INCLUDES = @CLASSPATH_INCLUDES@
CLASSPATH_MODULE = @CLASSPATH_MODULE@
COLLECTIONS_PREFIX = @COLLECTIONS_PREFIX@
@@ -118,6 +120,8 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
EGREP = @EGREP@
+ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
+ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
@@ -138,6 +142,7 @@ FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GJDOC = @GJDOC@
+GREP = @GREP@
GTK_CAIRO_ENABLED = @GTK_CAIRO_ENABLED@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
GTK_CAIRO_TRUE = @GTK_CAIRO_TRUE@
@@ -185,6 +190,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
@@ -203,8 +209,11 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
+USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
+USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
+XMKMF = @XMKMF@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -216,8 +225,6 @@ X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -234,7 +241,10 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
default_toolkit = @default_toolkit@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
glibjdir = @glibjdir@
host = @host@
@@ -242,18 +252,22 @@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
-nativelibdir = @nativelibdir@
+nativeexeclibdir = @nativeexeclibdir@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
@@ -263,12 +277,13 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
-@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -bootclasspath '$(top_builddir)/lib' -classpath .
-@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -bootclasspath '' -sourcepath '' -classpath $(top_builddir)/lib:.
-@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(top_builddir)/lib:.
+GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
+@FOUND_ECJ_TRUE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(ECJ) -encoding UTF-8 -bootclasspath $(GLIBJ_CLASSPATH) -classpath .
+@FOUND_GCJX_TRUE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@JCOMPILER = $(GCJX) -encoding UTF-8 -bootclasspath '' -sourcepath '' -classpath $(GLIBJ_CLASSPATH):.
+@FOUND_GCJ_FALSE@@FOUND_JIKES_TRUE@JCOMPILER = $(JIKES) $(JIKESENCODING) -bootclasspath '' -extdirs '' -sourcepath '' --classpath $(GLIBJ_CLASSPATH):.
# Setup the compiler to use the GNU Classpath library we just build
-@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) --bootclasspath '$(top_builddir)/lib' --classpath . -C
+@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) -encoding UTF-8 --bootclasspath $(GLIBJ_CLASSPATH) --classpath . -C
# All our example java source files
TOOLS_JAVA_FILES = $(srcdir)/gnu/classpath/tools/*.java $(srcdir)/gnu/classpath/tools/*/*.java $(srcdir)/gnu/classpath/tools/*/*/*.java
@@ -296,13 +311,10 @@ READMES = $(srcdir)/gnu/classpath/tools/giop/README
ALL_TOOLS_FILES = $(TOOLS_JAVA_FILES) $(TOOLS_TEMPLATES) $(TOOLS_HELPS) $(READMES)
# Some architecture independent data to be installed.
-TOOLS_DATA = $(TOOLS_ZIP)
+TOOLS_DATA = $(TOOLS_ZIP) README
# Where we want these data files installed.
-TOOLSdir = $(pkgdatadir)/tools
-
-# Make sure everything is included in the distribution.
-EXTRA_DIST = Makefile.am
+TOOLSdir = $(pkgdatadir)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -336,6 +348,10 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+jarsigner.sh: $(top_builddir)/config.status $(srcdir)/jarsigner.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+keytool.sh: $(top_builddir)/config.status $(srcdir)/keytool.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
@@ -452,7 +468,7 @@ info: info-am
info-am:
-install-data-am: install-TOOLSDATA install-data-local
+install-data-am: install-TOOLSDATA
install-exec-am:
@@ -478,44 +494,22 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-TOOLSDATA uninstall-info-am uninstall-local
+uninstall-am: uninstall-TOOLSDATA uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
clean-local dist-hook distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-TOOLSDATA install-am install-data \
- install-data-am install-data-local install-exec \
- install-exec-am install-info install-info-am install-man \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-TOOLSDATA uninstall-am uninstall-info-am \
- uninstall-local
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall \
+ uninstall-TOOLSDATA uninstall-am uninstall-info-am
@FOUND_ECJ_FALSE@@FOUND_GCJX_FALSE@@FOUND_GCJ_FALSE@@FOUND_JIKES_FALSE@error dunno how to setup the JCOMPILER and compile
-# Make sure all sources and icons are also installed so users can use them.
-# (Be careful to strip off the srcdir part of the path when installing.)
-install-data-local:
- srcdir_cnt=`echo $(srcdir) | wc -c`; \
- for file in $(ALL_TOOLS_FILES); do \
- f=`echo $$file | cut -c$$srcdir_cnt-`; \
- fdir=`dirname $$f`; \
- if test ! -d $(DESTDIR)$(pkgdatadir)/tools/$$fdir; then \
- echo "$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/tools/$$fdir"; \
- $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/tools/$$fdir; \
- fi; \
- echo "$(INSTALL_DATA) $$file $(DESTDIR)$(pkgdatadir)/tools/$$f"; \
- $(INSTALL_DATA) $$file $(DESTDIR)$(pkgdatadir)/tools/$$f; \
- done
-
-uninstall-local:
- srcdir_cnt=`echo $(srcdir) | wc -c`; \
- for file in $(ALL_TOOLS_FILES); do \
- f=`echo $$file | cut -c$$srcdir_cnt-`; \
- echo "rm -f $(DESTDIR)$(pkgdatadir)/tools/$$f"; \
- rm -f $(DESTDIR)$(pkgdatadir)/tools/$$f; \
- done
+# Make sure everything is included in the distribution.
dist-hook:
srcdir_cnt=`echo $(srcdir) | wc -c`; \
for file in $(ALL_TOOLS_FILES); do \
@@ -529,9 +523,10 @@ dist-hook:
cp -p $$file $(distdir)/$$f; \
done
-# To generate the example zip just depend on the sources and ignore the
-# class files. Always regenerate all .class files and remove them immediatly.
-# And copy the template files we use to the classes dir so they get also included.
+# To generate the example zip just depend on the sources and ignore
+# the class files. Always regenerate all .class files and remove them
+# immediately. And copy the template files we use to the classes dir
+# so they get also included.
$(TOOLS_ZIP): $(TOOLS_JAVA_FILES)
mkdir -p classes/gnu/classpath/tools/giop/grmic/templates
mkdir -p classes/gnu/classpath/tools/rmi/rmic/templates
diff --git a/libjava/classpath/tools/README b/libjava/classpath/tools/README
new file mode 100644
index 0000000..dc049d3
--- /dev/null
+++ b/libjava/classpath/tools/README
@@ -0,0 +1,58 @@
+The GNU Classpath tools are stored in the tools.zip. They can be invoked by
+putting this archive into classpath and specifying the tool main class as the
+class to run (parameters usually follow). The current release contains the
+following tools:
+
+== GIOP tools ==
+
+GIOP tools are used for creating the applications that use GIOP communication
+protocol. It provides necessary support for org.omg.* and javax.rmi.*
+packages.
+
+All GIOP tools support the --help option, for instance:
+ java -cp tools.zip gnu.classpath.tools.giop.IorParser --help
+
+The list of the currently available GIOP tools (name matches the main
+class in gnu.classpath.tools.giop package):
+
+* GRMIC - RMI-IIOP stub and tie generator.
+* NameService - GIOP transient naming service (this tool is called
+ tnameserv in Sun's package).
+* NameServicePersistent
+ - GIOP persistent naming service (this tool is called
+ orbd in Sun's package).
+* IorParser - Parses the stringified form of the interoperable
+ object references (IOR's).
+
+== RMI tools ==
+
+RMI tools provide support for java.rmi package. All tools support
+the --help key by printing more information, for instance:
+ java -cp tools.zip gnu.classpath.tools.rmi.RMIC --help
+
+The list of the currently available RMI tools (name matches the main tool class
+in gnu.classpath.tools.rmi package):
+
+* RMIC - RMI stub and tie source code generator (complements
+ the ASM based bytecode generator in the separate
+ cp-tools project). This tool is only needed for
+ research and backward-compatibile applications, as
+ Classpath supports the 1.5 feature to replace such
+ stubs by proxy classes.
+* REGISTRY - The persistent RMI naming service.
+* RMID - The persistent RMI activation daemon, supports the
+ java.rmi.activation package.
+
+== Security tools ==
+
+Security tools (currently) are used for signing and verifying JAR files
+as well as (planned) generating and managing cryptographic tokens and
+credentials.
+
+The list of individual tools, the name of their main class that should be
+invoked by the Java launcher, and a summary of what they provide follows:
+
+* jarsigner gnu.classpath.tools.jarsigner.Main
+ A drop-in replacement for the "jarsigner" tool.
+
+
diff --git a/libjava/classpath/tools/gnu/classpath/tools/HelpPrinter.java b/libjava/classpath/tools/gnu/classpath/tools/HelpPrinter.java
index 61a3e68..8946891 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/HelpPrinter.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/HelpPrinter.java
@@ -70,30 +70,47 @@ public class HelpPrinter
}
/**
- * Prints the help message and terminates.
+ * Prints the contents of the resource specified by the designated path.
*
- * @param helpResourcePath the path to the help resource, related to the
+ * @param helpResourcePath the path to a help resource, related to the
* HelpPrinter class.
*/
- public static void printHelpAndExit(String helpResourcePath)
+ public static void printHelp(String helpResourcePath)
{
InputStream in = HelpPrinter.class.getResourceAsStream(helpResourcePath);
- BufferedReader r = new BufferedReader(new InputStreamReader(in));
-
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
try
{
String s;
- while ((s = r.readLine()) != null)
- {
- System.out.println(s);
- }
- r.close();
+ while ((s = br.readLine()) != null)
+ System.out.println(s);
}
- catch (IOException e)
+ catch (IOException x)
{
System.err.print("Resource loading is broken:");
- e.printStackTrace();
+ x.printStackTrace(System.err);
+ }
+ finally
+ {
+ try
+ {
+ br.close();
+ }
+ catch (IOException ignored)
+ {
+ }
}
+ }
+
+ /**
+ * Prints the help message and terminates.
+ *
+ * @param helpResourcePath the path to the help resource, related to the
+ * HelpPrinter class.
+ */
+ public static void printHelpAndExit(String helpResourcePath)
+ {
+ printHelp(helpResourcePath);
System.exit(0);
}
}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/common/CallbackUtil.java b/libjava/classpath/tools/gnu/classpath/tools/common/CallbackUtil.java
new file mode 100644
index 0000000..398bb6c
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/common/CallbackUtil.java
@@ -0,0 +1,145 @@
+/* CallbackUtil.java -- Callback related utilities
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.common;
+
+import gnu.javax.security.auth.callback.ConsoleCallbackHandler;
+
+import java.security.Provider;
+import java.security.Security;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.CallbackHandler;
+
+/**
+ * A <i>Helper</i> class containing general purpose utlity methods dealing with
+ * callback handlers and their <i>Security Provider</i>.
+ */
+public abstract class CallbackUtil
+{
+ private static final Logger log = Logger.getLogger(CallbackUtil.class.getName());
+
+ // default 0-arguments constructor
+
+ // Class methods
+ // --------------------------------------------------------------------------
+
+ /**
+ * Return an implementation of the {@link CallbackHandler}, from any
+ * {@link Provider}, capable of handling callbacks through the <i>console</i>;
+ * i.e. <code>System.in</code> and <code>System.out</code>.
+ * <p>
+ * If no <i>Security Provider</i> for this type of callback was found, this
+ * method returns the default GNU implementation.
+ *
+ * @return a console {@link CallbackHandler} implementation.
+ */
+ public static final CallbackHandler getConsoleHandler()
+ {
+ CallbackHandler result = getHandler("Console");
+ if (result == null)
+ {
+ log.fine("No console callback handler found. Will use ours");
+ result = new ConsoleCallbackHandler();
+ }
+ return result;
+ }
+
+ /**
+ * Return a {@link CallbackHandler}, of a designated type, for interacting
+ * with the user.
+ * <p>
+ * This method first finds all currently installed <i>Security Providers</i>
+ * capable of providing such service and then in turn attempts to instantiate
+ * the handler from those providers. As soon as one provider returns a non-
+ * null instance of the callback handler, the search stops and that instance
+ * is returned.
+ *
+ * @return a {@link CallbackHandler} of the designated type, or
+ * <code>null</code> if no provider was found for theis type of
+ * callback.
+ */
+ private static final CallbackHandler getHandler(String handlerType)
+ {
+ log.entering(CallbackUtil.class.getName(), "getHandler", handlerType);
+
+ CallbackHandler result = null;
+ String service = "CallbackHandler." + handlerType;
+ Provider[] providers = Security.getProviders(service);
+ if (providers != null)
+ for (int i = 0; i < providers.length; i++)
+ {
+ Provider p = providers[i];
+ String className = p.getProperty(service);
+ if (className != null)
+ try
+ {
+ result = (CallbackHandler) Class.forName(className.trim()).newInstance();
+ }
+ catch (InstantiationException x)
+ {
+ log.fine("InstantiationException while creating ["
+ + className + "] from provider [" + p.getName()
+ + "]. Ignore");
+ }
+ catch (IllegalAccessException x)
+ {
+ log.fine("IllegalAccessException while creating ["
+ + className + "] from provider [" + p.getName()
+ + "]. Ignore");
+ }
+ catch (ClassNotFoundException x)
+ {
+ log.fine("ClassNotFoundException while creating ["
+ + className + "] from provider [" + p.getName()
+ + "]. Ignore");
+ }
+
+ if (result != null)
+ {
+
+ log.fine("Will use [" + result.getClass().getName()
+ + "] from [" + p.getName() + "]");
+ break;
+ }
+ }
+
+ log.exiting(CallbackUtil.class.getName(), "getHandler", result);
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/common/ProviderUtil.java b/libjava/classpath/tools/gnu/classpath/tools/common/ProviderUtil.java
new file mode 100644
index 0000000..8d04344
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/common/ProviderUtil.java
@@ -0,0 +1,163 @@
+/* ProviderUtil.java -- Security Provider related utilities
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.common;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.Provider;
+import java.security.Security;
+import java.util.logging.Logger;
+
+/**
+ * A <i>Helper</i> class containing general purpose utlity methods dealing with
+ * installing and removing <i>Security Providers</i> at runtime.
+ */
+public abstract class ProviderUtil
+{
+ private static final Logger log = Logger.getLogger(ProviderUtil.class.getName());
+
+ // default 0-arguments constructor
+
+ // Class methods
+ // --------------------------------------------------------------------------
+
+ /**
+ * Attempt to (a) instantiate, and (b) add a designated {@link Provider} by
+ * inserting at at the top of the list of <i>Security Providers</i> already
+ * present at runtime, only if it is not already installed.
+ * <p>
+ * <b>IMPORTANT</b>: This method overrides the security check usually carried
+ * out by the security manager when inserting a new {@link Provider}.
+ *
+ * @param providerClass a fully qualified, non-null, class name of a
+ * <i>Security Provider</i> to add if it is not already installed.
+ * @return an instance of {@link SecurityProviderInfo} referencing the
+ * {@link Provider} instance created with the designated class name,
+ * and its position in the underlying JVM runtime.
+ */
+ public static final SecurityProviderInfo addProvider(String providerClass)
+ {
+ log.entering(ProviderUtil.class.getName(), "addProvider", providerClass);
+
+ Provider provider = null;
+ try
+ {
+ provider = (Provider) Class.forName(providerClass.trim()).newInstance();
+ }
+ catch (InstantiationException x)
+ {
+ log.fine("InstantiationException while creating [" + providerClass
+ + "]. Ignore");
+ }
+ catch (IllegalAccessException x)
+ {
+ log.fine("IllegalAccessException while creating [" + providerClass
+ + "]. Ignore");
+ }
+ catch (ClassNotFoundException x)
+ {
+ log.fine("ClassNotFoundException while creating [" + providerClass
+ + "]. Ignore");
+ }
+
+ int position = provider != null ? addProvider(provider) : -1;
+ SecurityProviderInfo result = new SecurityProviderInfo(provider, position);
+
+ log.exiting(ProviderUtil.class.getName(), "addProvider", result);
+ return result;
+ }
+
+ /**
+ * Attempt to add the designated {@link Provider} by inserting at at the top
+ * of the list of <i>Security Providers</i> already present at runtime, only
+ * if it is not already installed.
+ * <p>
+ * <b>IMPORTANT</b>: This method overrides the security check usually carried
+ * out by the security manager when inserting a new {@link Provider}.
+ *
+ * @param provider a non-null <i>Security Provider</i> to add if it is not
+ * already installed.
+ * @return the new position of the designated provider in the list if it was
+ * not already present, or <code>-1</code> if it was already
+ * installed.
+ */
+ public static final int addProvider(final Provider provider)
+ {
+ log.entering(ProviderUtil.class.getName(), "addProvider", provider);
+
+ Integer actualPosition = (Integer) AccessController.doPrivileged(new PrivilegedAction()
+ {
+ public Object run()
+ {
+ int result = Security.insertProviderAt(provider, 1);
+ return Integer.valueOf(result);
+ }
+ });
+
+ int result = actualPosition.intValue();
+ log.fine("Provider [" + provider.getName() + "] installed? " + (result != - 1));
+
+ log.exiting(ProviderUtil.class.getName(), "addProvider", actualPosition);
+ return result;
+ }
+
+ /**
+ * Remove a designated <i>Security Provider</i>.
+ * <p>
+ * <b>IMPORTANT</b>: This method overrides the security check usually carried
+ * out by the security manager when removing a {@link Provider}.
+ *
+ * @param providerName the name of the {@link Provider} to remove.
+ */
+ public static final void removeProvider(final String providerName)
+ {
+ log.entering(ProviderUtil.class.getName(), "removeProvider", providerName);
+
+ AccessController.doPrivileged(new PrivilegedAction()
+ {
+ public Object run()
+ {
+ Security.removeProvider(providerName);
+ return null;
+ }
+ });
+
+ log.exiting(ProviderUtil.class.getName(), "removeProvider");
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/common/SecurityProviderInfo.java b/libjava/classpath/tools/gnu/classpath/tools/common/SecurityProviderInfo.java
new file mode 100644
index 0000000..e12ee4f
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/common/SecurityProviderInfo.java
@@ -0,0 +1,99 @@
+/* SecurityProviderInfo.java -- Data Access Object for a security provider
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.common;
+
+import java.security.Provider;
+
+/**
+ * A Data Access Object (DAO) referenceing a <i>Security Provider</i> and its
+ * position in the list of installed <i>Security Providers</i> in the underlying
+ * JVM runtime.
+ */
+public class SecurityProviderInfo
+{
+ final private Provider provider;
+ final private int position;
+ private transient String str;
+
+ /**
+ * Constructs an instance of <code>SecurityProviderInfo</code>.
+ * <p>
+ * Used by {@link ProviderUtil} to indicate the result of adding a provider,
+ * given its class name.
+ *
+ * @param provider the possibly <code>null</code> {@link Provider}.
+ * @param position the position of <code>provider</code> in the list of
+ * <i>Security Providers</i> in the underlying JVM runtime. <code>-1</code>
+ * if that provider (a) is <code>null</code>, or (b) was not added because it
+ * was already there.
+ */
+ SecurityProviderInfo(Provider provider, int position)
+ {
+ super();
+
+ this.provider = provider;
+ this.position = position;
+ }
+
+ /** @return the possibly <code>null</code> {@link Provider} instance. */
+ public Provider getProvider()
+ {
+ return this.provider;
+ }
+
+ /**
+ * @return the position of the {@link Provider}, or <code>-1</code> if it
+ * was not added.
+ */
+ public int getPosition()
+ {
+ return this.position;
+ }
+
+ public String toString()
+ {
+ if (str == null)
+ if (provider == null)
+ str = "SecurityProviderInfo{null, -1}";
+ else
+ str = "SecurityProviderInfo{" + provider.getName() + ", " + position + "}";
+
+ return str;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.java b/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.java
index 16ff96f..a372cfd 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop;
@@ -105,6 +89,10 @@ public class GRMIC
verbose = true;
compiler.setVerbose(true);
}
+ else if (c.equals("-force"))
+ {
+ compiler.setForce(true);
+ }
else if (c.equals("-d"))
{
int f = i + 1;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.txt b/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.txt
index fcde838..08aaf14 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.txt
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/GRMIC.txt
@@ -19,6 +19,9 @@ Usage: grmic <options> <class names>
-help Print this help text
-v Print version
-verbose Verbose output
+ -force Try to generate code even if the input classes seem not
+ consistent with RMI specification.
+
and <class names> can include one or more non abstract classes that implement
Remote and are accessible via current class path.
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/IorParser.java b/libjava/classpath/tools/gnu/classpath/tools/giop/IorParser.java
index 7d70c8a..411b899 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/IorParser.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/IorParser.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/README b/libjava/classpath/tools/gnu/classpath/tools/giop/README
index f1be7b6..94fc2f1 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/README
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/README
@@ -9,7 +9,8 @@ The list of the currently available tools:
* GRMIC - RMI-IIOP stub and tie generator.
* NameService - GIOP transient naming service (this tool is called
tnameserv in Sun's package).
-* NameService - GIOP persistent naming service (this tool is called
+* NameServicePersistent
+ - GIOP persistent naming service (this tool is called
orbd in Sun's package).
* IorParser - Parses the stringified form of the interoperable
object references (IOR's).
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/CompilationError.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/CompilationError.java
index c6b3e56..d1fa814 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/CompilationError.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/CompilationError.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop.grmic;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/Generator.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/Generator.java
index a45e8d3..17ab821 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/Generator.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/Generator.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop.grmic;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopIo.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopIo.java
index 3714c4ce..0e0df7b 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopIo.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopIo.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop.grmic;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java
index c19f635..4beba1c 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/GiopRmicCompiler.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop.grmic;
@@ -115,6 +99,11 @@ public class GiopRmicCompiler
* Verbose output
*/
protected boolean verbose = false;
+
+ /**
+ * Force mode - do not check the exceptions
+ */
+ protected boolean force = false;
/**
* Clear data, preparing for the next compilation.
@@ -204,7 +193,7 @@ public class GiopRmicCompiler
remEx = true;
break;
}
- if (! remEx)
+ if (! remEx && !force)
throw new CompilationError(m[i].getName() + ", defined in "
+ c.getName()
+ ", does not throw "
@@ -483,6 +472,14 @@ public class GiopRmicCompiler
{
warnings = warn;
}
+
+ /**
+ * Set the error ignore mode.
+ */
+ public void setForce(boolean isforce)
+ {
+ force = isforce;
+ }
/**
* Get the package name.
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/HashFinder.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/HashFinder.java
index 216e739..2efdb1e 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/HashFinder.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/HashFinder.java
@@ -1,3 +1,25 @@
+/* HashFinder.java -- finds the hash character.
+ Copyright (C) 2006 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+*/
+
+
package gnu.classpath.tools.giop.grmic;
import java.util.HashSet;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java
index 9a44fad..80148d5 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/giop/grmic/MethodGenerator.java
@@ -17,23 +17,7 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.giop.grmic;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/HashUtils.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/HashUtils.java
new file mode 100644
index 0000000..2286063
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/HashUtils.java
@@ -0,0 +1,122 @@
+/* Utils.java -- Utility methods for JAR file signing/verification
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import gnu.java.security.hash.Sha160;
+import gnu.java.security.util.Base64;
+import gnu.java.util.jar.JarUtils;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.logging.Logger;
+
+/**
+ * Collection of utility methods used in JAR file signing and verification.
+ */
+class HashUtils
+{
+ private static final Logger log = Logger.getLogger(HashUtils.class.getName());
+ private Sha160 sha = new Sha160();
+
+ // default 0-arguments constructor
+
+ /**
+ * @param stream the input stream to digest.
+ * @return a base-64 representation of the resulting SHA-1 digest of the
+ * contents of the designated input stream.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ String hashStream(InputStream stream) throws IOException
+ {
+ BufferedInputStream bis = new BufferedInputStream(stream, 4096);
+ byte[] buffer = new byte[4096];
+ int count = 0;
+ int n;
+ while ((n = bis.read(buffer)) != - 1)
+ if (n > 0)
+ {
+ sha.update(buffer, 0, n);
+ count += n;
+ }
+
+ byte[] hash = sha.digest();
+ log.finest("Hashed " + count + " byte(s)");
+ String result = Base64.encode(hash);
+ return result;
+ }
+
+ /**
+ * @param ba the byte array to digest.
+ * @return a base-64 representation of the resulting SHA-1 digest of the
+ * contents of the designated buffer.
+ */
+ String hashByteArray(byte[] ba) throws IOException
+ {
+ sha.update(ba);
+ byte[] hash = sha.digest();
+ log.finest("Hashed " + ba.length + " byte(s)");
+ String result = Base64.encode(hash);
+ return result;
+ }
+
+ /**
+ * @param name the JAR entry name
+ * @param entryHash the hash of the entry file which appears in the
+ * manifest.
+ * @return the base-64 encoded form of the hash of the corresponding Manifest
+ * JAR entry which will appear in the SF file under the entry with the
+ * same name.
+ * @throws UnsupportedEncodingException If UTF-8 character encoding is not
+ * supported on this platform.
+ */
+ String hashManifestEntry(String name, String entryHash)
+ throws UnsupportedEncodingException
+ {
+ sha.update((JarUtils.NAME + ": " + name).getBytes("UTF-8"));
+ sha.update(JarUtils.CRLF);
+ sha.update((Main.DIGEST + ": " + entryHash).getBytes("UTF-8"));
+ sha.update(JarUtils.CRLF);
+ sha.update(JarUtils.CRLF);
+ byte[] sfHash = sha.digest();
+ String result = Base64.encode(sfHash);
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarSigner.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarSigner.java
new file mode 100644
index 0000000..40bee9f
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarSigner.java
@@ -0,0 +1,167 @@
+/* JarSigner.java -- The signing handler of the gjarsigner tool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import gnu.classpath.SystemProperties;
+import gnu.java.util.jar.JarUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.logging.Logger;
+
+/**
+ * The JAR signing handler of the <code>gjarsigner</code> tool.
+ */
+public class JarSigner
+{
+ private static final Logger log = Logger.getLogger(JarSigner.class.getName());
+ /** The owner tool of this handler. */
+ private Main main;
+
+ JarSigner(Main main)
+ {
+ super();
+
+ this.main = main;
+ }
+
+ void start() throws Exception
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ JarFile jarFile = new JarFile(main.getJarFileName());
+ SFHelper sfHelper = new SFHelper(jarFile);
+
+ sfHelper.startSigning();
+
+ // 1. compute the digests
+ for (Enumeration e = jarFile.entries(); e.hasMoreElements(); )
+ {
+ JarEntry je = (JarEntry) e.nextElement();
+ String jeName = je.getName();
+ if (jeName.equals(JarFile.MANIFEST_NAME)
+ || jeName.endsWith(File.separator))
+ continue;
+
+ sfHelper.updateEntry(je);
+ if (main.isVerbose())
+ System.out.println(Messages.getString("JarSigner.1") + jeName); //$NON-NLS-1$
+ }
+
+ sfHelper.finishSigning(main.isSectionsOnly());
+ if (main.isVerbose())
+ System.out.println(Messages.getString("JarSigner.2") + JarFile.MANIFEST_NAME); //$NON-NLS-1$
+
+ // 2. write jar entries and manifest
+ File signedJarFile = File.createTempFile("gcp-", ".jar"); //$NON-NLS-1$ //$NON-NLS-2$
+ FileOutputStream fos = new FileOutputStream(signedJarFile);
+ JarOutputStream outSignedJarFile = new JarOutputStream(fos,
+ sfHelper.getManifest());
+ for (Enumeration e = jarFile.entries(); e.hasMoreElements(); )
+ {
+ JarEntry je = (JarEntry) e.nextElement();
+ String jeName = je.getName();
+ if (jeName.equals(JarFile.MANIFEST_NAME)
+ || jeName.endsWith(File.separator))
+ continue;
+
+ log.finest("Processing " + jeName); //$NON-NLS-1$
+ JarEntry newEntry = new JarEntry(jeName);
+ newEntry.setTime(je.getTime());
+ outSignedJarFile.putNextEntry(newEntry);
+ InputStream jeis = jarFile.getInputStream(je);
+ copyFromTo(jeis, outSignedJarFile);
+ }
+
+ // 3. create the .SF file
+ String signaturesFileName = main.getSigFileName();
+ String sfFileName = JarUtils.META_INF + signaturesFileName
+ + JarUtils.SF_SUFFIX;
+ log.finest("Processing " + sfFileName); //$NON-NLS-1$
+ JarEntry sfEntry = new JarEntry(sfFileName);
+ sfEntry.setTime(System.currentTimeMillis());
+ outSignedJarFile.putNextEntry(sfEntry);
+ sfHelper.writeSF(outSignedJarFile);
+ log.finer("Created .SF file"); //$NON-NLS-1$
+ if (main.isVerbose())
+ System.out.println(Messages.getString("JarSigner.8") + sfFileName); //$NON-NLS-1$
+
+ // 4. create the .DSA file
+ String dsaFileName = JarUtils.META_INF + signaturesFileName
+ + JarUtils.DSA_SUFFIX;
+ log.finest("Processing " + dsaFileName); //$NON-NLS-1$
+ JarEntry dsaEntry = new JarEntry(dsaFileName);
+ dsaEntry.setTime(System.currentTimeMillis());
+ outSignedJarFile.putNextEntry(dsaEntry);
+ sfHelper.writeDSA(outSignedJarFile,
+ main.getSignerPrivateKey(),
+ main.getSignerCertificateChain(),
+ main.isInternalSF());
+ log.finer("Created .DSA file"); //$NON-NLS-1$
+ if (main.isVerbose())
+ System.out.println(Messages.getString("JarSigner.11") + dsaFileName); //$NON-NLS-1$
+
+ // cleanup
+ outSignedJarFile.close();
+ fos.close();
+ signedJarFile.renameTo(new File(main.getSignedJarFileName()));
+ log.finer("Renamed signed JAR file"); //$NON-NLS-1$
+ if (main.isVerbose())
+ System.out.println(SystemProperties.getProperty("line.separator") //$NON-NLS-1$
+ + Messages.getString("JarSigner.14")); //$NON-NLS-1$
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ private void copyFromTo(InputStream in, JarOutputStream out)
+ throws IOException
+ {
+ byte[] buffer = new byte[8192];
+ int n;
+ while ((n = in.read(buffer)) != -1)
+ if (n > 0)
+ out.write(buffer, 0, n);
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarVerifier.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarVerifier.java
new file mode 100644
index 0000000..f80147d
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/JarVerifier.java
@@ -0,0 +1,339 @@
+/* JarVerifier.java -- The verification handler of the gjarsigner tool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import gnu.java.security.OID;
+import gnu.java.security.Registry;
+import gnu.java.security.pkcs.PKCS7SignedData;
+import gnu.java.security.pkcs.SignerInfo;
+import gnu.java.security.sig.ISignature;
+import gnu.java.security.sig.ISignatureCodec;
+import gnu.java.security.sig.dss.DSSSignature;
+import gnu.java.security.sig.dss.DSSSignatureX509Codec;
+import gnu.java.security.sig.rsa.RSAPKCS1V1_5Signature;
+import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
+import gnu.java.security.util.Util;
+import gnu.java.util.jar.JarUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.PublicKey;
+import java.security.cert.Certificate;
+import java.security.cert.CRLException;
+import java.security.cert.CertificateException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.logging.Logger;
+import java.util.zip.ZipException;
+
+/**
+ * The JAR verification handler of the <code>gjarsigner</code> tool.
+ */
+public class JarVerifier
+{
+ private static final Logger log = Logger.getLogger(JarVerifier.class.getName());
+ /** The owner tool of this handler. */
+ private Main main;
+ private HashUtils util = new HashUtils();
+ /** The JAR file to verify. */
+ private JarFile jarFile;
+ /** Map of jar entry names to their hash. */
+ private Map entryHashes = new HashMap();
+
+ JarVerifier(Main main)
+ {
+ super();
+
+ this.main = main;
+ }
+
+ void start() throws Exception
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ String jarFileName = main.getJarFileName();
+ jarFile = new JarFile(jarFileName);
+
+ // 1. find all signature (.SF) files
+ List sfFiles = new ArrayList();
+ for (Enumeration e = jarFile.entries(); e.hasMoreElements(); )
+ {
+ JarEntry je = (JarEntry) e.nextElement();
+ String jeName = je.getName();
+ if (! (jeName.startsWith(JarUtils.META_INF)
+ && jeName.endsWith(JarUtils.SF_SUFFIX)))
+ continue;
+
+ // only interested in .SF files in, and not deeper than, META-INF
+ String[] jeNameParts = jeName.split("/"); //$NON-NLS-1$
+ if (jeNameParts.length != 2)
+ continue;
+
+ String sfName = jeNameParts[1];
+ String sigFileName = sfName.substring(0, sfName.length() - 3);
+ sfFiles.add(sigFileName);
+ }
+
+ // 2. verify each one
+ if (sfFiles.isEmpty())
+ System.out.println(Messages.getString("JarVerifier.2")); //$NON-NLS-1$
+ else
+ {
+ int limit = sfFiles.size();
+ int count = 0;
+ for (Iterator it = sfFiles.iterator(); it.hasNext(); )
+ {
+ String alias = (String) it.next();
+ if (verifySF(alias))
+ if (verifySFEntries(alias))
+ count++;
+ }
+
+ if (count == 0)
+ System.out.println(Messages.getString("JarVerifier.3")); //$NON-NLS-1$
+ else if (count != limit)
+ System.out.println(Messages.getFormattedString("JarVerifier.4", //$NON-NLS-1$
+ new Integer[] {Integer.valueOf(count),
+ Integer.valueOf(limit)}));
+ else
+ System.out.println(Messages.getFormattedString("JarVerifier.7", //$NON-NLS-1$
+ Integer.valueOf(limit)));
+ }
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ /**
+ * @param sigFileName the name of the signature file; i.e. the name to use for
+ * both the .SF and .DSA files.
+ * @return <code>true</code> if the designated file-name (usually a key-store
+ * <i>alias</i> name) has been successfully checked as the signer of the
+ * corresponding <code>.SF</code> file. Returns <code>false</code> otherwise.
+ * @throws IOException
+ * @throws ZipException
+ * @throws CertificateException
+ * @throws CRLException
+ */
+ private boolean verifySF(String sigFileName) throws CRLException,
+ CertificateException, ZipException, IOException
+ {
+ log.entering(this.getClass().getName(), "verifySF"); //$NON-NLS-1$
+ log.finest("About to verify signature of " + sigFileName + "..."); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // 1. find the corresponding .DSA file for this .SF file
+ JarEntry dsaEntry = jarFile.getJarEntry(JarUtils.META_INF + sigFileName
+ + JarUtils.DSA_SUFFIX);
+ if (dsaEntry == null)
+ throw new SecurityException(Messages.getFormattedString("JarVerifier.13", //$NON-NLS-1$
+ sigFileName));
+ // 2. read the .DSA file contents as a PKCS7 SignedData
+ InputStream in = jarFile.getInputStream(dsaEntry);
+ PKCS7SignedData pkcs7SignedData = new PKCS7SignedData(in);
+
+ // 4. get the encrypted digest octet string from the first SignerInfo
+ // this octet string is the digital signature of the .SF file contents
+ Set signerInfos = pkcs7SignedData.getSignerInfos();
+ if (signerInfos == null || signerInfos.isEmpty())
+ throw new SecurityException(Messages.getString("JarVerifier.14")); //$NON-NLS-1$
+
+ SignerInfo signerInfo = (SignerInfo) signerInfos.iterator().next();
+ byte[] encryptedDigest = signerInfo.getEncryptedDigest();
+ if (encryptedDigest == null)
+ throw new SecurityException(Messages.getString("JarVerifier.16")); //$NON-NLS-1$
+
+ log.finest("\n" + Util.dumpString(encryptedDigest, "--- signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // 5. get the signer public key
+ Certificate cert = pkcs7SignedData.getCertificates()[0];
+ PublicKey verifierKey = cert.getPublicKey();
+ log.finest("--- verifier public key = " + verifierKey); //$NON-NLS-1$
+
+ // 6. verify the signature file signature
+ OID digestEncryptionAlgorithmOID = signerInfo.getDigestEncryptionAlgorithmId();
+ ISignature signatureAlgorithm;
+ ISignatureCodec signatureCodec;
+ if (digestEncryptionAlgorithmOID.equals(Main.DSA_SIGNATURE_OID))
+ {
+ signatureAlgorithm = new DSSSignature();
+ signatureCodec = new DSSSignatureX509Codec();
+ }
+ else
+ {
+ signatureAlgorithm = new RSAPKCS1V1_5Signature(Registry.MD5_HASH);
+ signatureCodec = new RSAPKCS1V1_5SignatureX509Codec();
+ }
+
+ Map signatureAttributes = new HashMap();
+ signatureAttributes.put(ISignature.VERIFIER_KEY, verifierKey);
+ signatureAlgorithm.setupVerify(signatureAttributes);
+
+ Object herSignature = signatureCodec.decodeSignature(encryptedDigest);
+
+ // 7. verify the signature file contents
+ JarEntry sfEntry = jarFile.getJarEntry(JarUtils.META_INF + sigFileName
+ + JarUtils.SF_SUFFIX);
+ in = jarFile.getInputStream(sfEntry);
+ byte[] buffer = new byte[2048];
+ int n;
+ while ((n = in.read(buffer)) != -1)
+ if (n > 0)
+ signatureAlgorithm.update(buffer, 0, n);
+
+ boolean result = signatureAlgorithm.verify(herSignature);
+ log.finer("Signature block [" + sigFileName + "] is " //$NON-NLS-1$ //$NON-NLS-2$
+ + (result ? "" : "NOT ") + "OK"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+ log.exiting(this.getClass().getName(), "verifySF", Boolean.valueOf(result)); //$NON-NLS-1$
+ return result;
+ }
+
+ /**
+ * This method is called after at least one signer (usually a key-store
+ * <code>alias</code> name) was found to be trusted; i.e. his/her signature
+ * block in the corresponding <code>.DSA</code> file was successfully
+ * verified using his/her public key.
+ * <p>
+ * This method, uses the contents of the corresponding <code>.SF</code> file
+ * to compute and verify the hashes of the manifest entries in the JAR file.
+ *
+ * @param alias the name of the signature file; i.e. the name to use for both
+ * the .SF and .DSA files.
+ * @return <code>true</code> if all the entries in the corresponding
+ * <code>.SF</code> file have the same hash values as their
+ * alter-ego in the <i>manifest</i> file of the JAR file inquestion.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ private boolean verifySFEntries(String alias) throws IOException
+ {
+ log.entering(this.getClass().getName(), "verifySFEntries"); //$NON-NLS-1$
+
+ // 1. read the signature file
+ JarEntry jarEntry = jarFile.getJarEntry(JarUtils.META_INF + alias
+ + JarUtils.SF_SUFFIX);
+ InputStream in = jarFile.getInputStream(jarEntry);
+ Attributes attr = new Attributes();
+ Map entries = new HashMap();
+ JarUtils.readSFManifest(attr, entries, in);
+
+ // 2. The .SF file by default includes a header containing a hash of the
+ // entire manifest file. When the header is present, then the verification
+ // can check to see whether or not the hash in the header indeed matches
+ // the hash of the manifest file.
+ boolean result = false;
+ String hash = attr.getValue(Main.DIGEST_MANIFEST_ATTR);
+ if (hash != null)
+ result = verifyManifest(hash);
+
+ // A verification is still considered successful if none of the files that
+ // were in the JAR file when the signature was generated have been changed
+ // since then, which is the case if the hashes in the non-header sections
+ // of the .SF file equal the hashes of the corresponding sections in the
+ // manifest file.
+ //
+ // 3. Read each file in the JAR file that has an entry in the .SF file.
+ // While reading, compute the file's digest, and then compare the result
+ // with the digest for this file in the manifest section. The digests
+ // should be the same, or verification fails.
+ if (! result)
+ for (Iterator it = entries.keySet().iterator(); it.hasNext();)
+ {
+ Entry me = (Entry) it.next();
+ String name = (String) me.getKey();
+ attr = (Attributes) me.getValue();
+ hash = attr.getValue(Main.DIGEST_ATTR);
+ result = verifySFEntry(name, hash);
+ if (! result)
+ break;
+ }
+
+ log.exiting(this.getClass().getName(), "verifySFEntries",
+ Boolean.valueOf(result)); //$NON-NLS-1$
+ return result;
+ }
+
+ /**
+ * @param hash Base-64 encoded form of the manifest's digest.
+ * @return <code>true</code> if our computation of the manifest's hash
+ * matches the given value; <code>false</code> otherwise.
+ * @throws IOException if unable to acquire the JAR's manifest entry.
+ */
+ private boolean verifyManifest(String hash) throws IOException
+ {
+ return verifySFEntry(JarFile.MANIFEST_NAME, hash);
+ }
+
+ /**
+ * @param name the name of a JAR entry to verify.
+ * @param hash Base-64 encoded form of the designated entry's digest.
+ * @return <code>true</code> if our computation of the JAR entry's hash
+ * matches the given value; <code>false</code> otherwise.
+ * @throws IOException if an exception occurs while returning the entry's
+ * input stream.
+ */
+ private boolean verifySFEntry(String name, String hash) throws IOException
+ {
+ String expectedValue = getEntryHash(JarFile.MANIFEST_NAME);
+ boolean result = expectedValue.equalsIgnoreCase(hash);
+ log.finest("Is " + name + " OK? " + result); //$NON-NLS-1$ //$NON-NLS-2$
+ return result;
+ }
+
+ private String getEntryHash(String entryName) throws IOException
+ {
+ String result = (String) entryHashes.get(entryName);
+ if (result == null)
+ {
+ JarEntry manifest = jarFile.getJarEntry(entryName);
+ InputStream in = jarFile.getInputStream(manifest);
+ result = util.hashStream(in);
+ entryHashes.put(entryName, result);
+ }
+
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Main.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Main.java
new file mode 100644
index 0000000..f460a96
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Main.java
@@ -0,0 +1,567 @@
+/* Main.java -- JAR signing and verification tool not unlike jarsigner
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import gnu.classpath.SystemProperties;
+import gnu.classpath.tools.HelpPrinter;
+import gnu.classpath.tools.common.CallbackUtil;
+import gnu.classpath.tools.common.ProviderUtil;
+import gnu.java.security.OID;
+import gnu.java.security.Registry;
+import gnu.javax.security.auth.callback.ConsoleCallbackHandler;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.util.Locale;
+import java.util.jar.Attributes.Name;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The GNU Classpath implementation of the <i>jarsigner</i> tool.
+ * <p>
+ * The <i>jarsigner</i> tool is used to sign and verify JAR (Java ARchive)
+ * files.
+ * <p>
+ * This implementation is intended to be compatible with the behaviour
+ * described in the public documentation of the same tool included in JDK 1.4.
+ */
+public class Main
+{
+ private static final Logger log = Logger.getLogger(Main.class.getName());
+ private static final String HELP_PATH = "jarsigner/jarsigner.txt"; //$NON-NLS-1$
+ private static final Locale EN_US_LOCALE = new Locale("en", "US"); //$NON-NLS-1$ //$NON-NLS-2$
+ static final String DIGEST = "SHA1-Digest"; //$NON-NLS-1$
+ static final String DIGEST_MANIFEST = "SHA1-Digest-Manifest"; //$NON-NLS-1$
+ static final Name DIGEST_ATTR = new Name(DIGEST);
+ static final Name DIGEST_MANIFEST_ATTR = new Name(DIGEST_MANIFEST);
+ static final OID DSA_SIGNATURE_OID = new OID(Registry.DSA_OID_STRING);
+ static final OID RSA_SIGNATURE_OID = new OID(Registry.RSA_OID_STRING);
+
+ private boolean verify;
+ private String ksURL;
+ private String ksType;
+ private String password;
+ private String ksPassword;
+ private String sigFileName;
+ private String signedJarFileName;
+ private boolean verbose;
+ private boolean certs;
+ private boolean internalSF;
+ private boolean sectionsOnly;
+ private String providerClassName;
+ private String jarFileName;
+ private String alias;
+
+ protected Provider provider;
+ private boolean providerInstalled;
+ private char[] ksPasswordChars;
+ private KeyStore store;
+ private char[] passwordChars;
+ private PrivateKey signerPrivateKey;
+ private Certificate[] signerCertificateChain;
+ /** The callback handler to use when needing to interact with user. */
+ private CallbackHandler handler;
+
+ private Main()
+ {
+ super();
+ }
+
+ public static final void main(String[] args)
+ {
+ log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
+
+ Main tool = new Main();
+ try
+ {
+ tool.processArgs(args);
+ tool.start();
+ }
+ catch (SecurityException x)
+ {
+ log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
+ System.err.println(Messages.getString("Main.7") + x.getMessage()); //$NON-NLS-1$
+ }
+ catch (Exception x)
+ {
+ log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
+ System.err.println(Messages.getString("Main.9") + x); //$NON-NLS-1$
+ }
+
+ tool.teardown();
+
+ log.exiting(Main.class.getName(), "main"); //$NON-NLS-1$
+ // System.exit(0);
+ }
+
+ // helper methods -----------------------------------------------------------
+
+ /**
+ * Read the command line arguments setting the tool's parameters in
+ * preparation for the user desired action.
+ *
+ * @param args an array of options (strings).
+ * @throws Exception if an exceptio occurs during the process.
+ */
+ private void processArgs(String[] args) throws Exception
+ {
+ log.entering(this.getClass().getName(), "processArgs", args); //$NON-NLS-1$
+
+ HelpPrinter.checkHelpKey(args, HELP_PATH);
+ if (args == null || args.length == 0)
+ HelpPrinter.printHelpAndExit(HELP_PATH);
+
+ int limit = args.length;
+ log.finest("args.length=" + limit); //$NON-NLS-1$
+ int i = 0;
+ String opt;
+ while (i < limit)
+ {
+ opt = args[i++];
+ log.finest("args[" + (i - 1) + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-verify".equals(opt)) // -verify //$NON-NLS-1$
+ verify = true;
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ ksURL = args[i++];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ ksType = args[i++];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ ksPassword = args[i++];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ password = args[i++];
+ else if ("-sigfile".equals(opt)) // -sigfile NAME //$NON-NLS-1$
+ sigFileName = args[i++];
+ else if ("-signedjar".equals(opt)) // -signedjar FILE_NAME //$NON-NLS-1$
+ signedJarFileName = args[i++];
+ else if ("-verbose".equals(opt)) // -verbose //$NON-NLS-1$
+ verbose = true;
+ else if ("-certs".equals(opt)) // -certs //$NON-NLS-1$
+ certs = true;
+ else if ("-internalsf".equals(opt)) // -internalsf //$NON-NLS-1$
+ internalSF = true;
+ else if ("-sectionsonly".equals(opt)) // -sectionsonly //$NON-NLS-1$
+ sectionsOnly = true;
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ providerClassName = args[i++];
+ else
+ {
+ jarFileName = opt;
+ if (! verify)
+ alias = args[i++];
+
+ break;
+ }
+ }
+
+ if (i < limit) // more options than needed
+ log.fine("Last argument is assumed at index #" + (i - 1) //$NON-NLS-1$
+ + ". Remaining arguments (" + args[i] //$NON-NLS-1$
+ + "...) will be ignored"); //$NON-NLS-1$
+
+ setupCommonParams();
+ if (verify)
+ {
+ log.finer("Will verify with the following parameters:"); //$NON-NLS-1$
+ log.finer(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer("Options:"); //$NON-NLS-1$
+ log.finer(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" verbose ? " + verbose); //$NON-NLS-1$
+ log.finer(" certs ? " + certs); //$NON-NLS-1$
+ log.finer(" internalsf ? " + internalSF); //$NON-NLS-1$
+ log.finer(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
+ }
+ else // sign
+ {
+ setupSigningParams();
+
+ log.finer("Will sign with the following parameters:"); //$NON-NLS-1$
+ log.finer(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" alias = '" + alias + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer("Options:"); //$NON-NLS-1$
+ log.finer(" keystore = '" + ksURL + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" storetype = '" + ksType + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" storepass = '" + ksPassword + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" keypass = '" + password + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" sigfile = '" + sigFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" signedjar = '" + signedJarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+ log.finer(" verbose ? " + verbose); //$NON-NLS-1$
+ log.finer(" internalsf ? " + internalSF); //$NON-NLS-1$
+ log.finer(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
+ }
+
+ log.exiting(this.getClass().getName(), "processArgs"); //$NON-NLS-1$
+ }
+
+ /**
+ * Invokes the <code>start()</code> method of the concrete handler.
+ * <p>
+ * Depending on the result of processing the command line arguments, this
+ * handler may be one for signing the jar, or verifying it.
+ *
+ * @throws Exception if an exception occurs during the process.
+ */
+ private void start() throws Exception
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ if (verify)
+ {
+ JarVerifier jv = new JarVerifier(this);
+ jv.start();
+ }
+ else
+ {
+ JarSigner js = new JarSigner(this);
+ js.start();
+ }
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ /**
+ * Ensures that the underlying JVM is left in the same state as we found it
+ * when we first launched the tool. Specifically, if we have installed a new
+ * security provider then now is the time to remove it.
+ * <p>
+ * Note (rsn): this may not be necessary if we terminate the JVM; i.e. call
+ * {@link System#exit(int)} at the end of the tool's invocation. Nevertheless
+ * it's good practive to return the JVM to its initial state.
+ */
+ private void teardown()
+ {
+ log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+
+ if (providerInstalled)
+ ProviderUtil.removeProvider(provider.getName());
+
+ log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+ }
+
+ /**
+ * After processing the command line arguments, this method is invoked to
+ * process the common parameters which may have been encountered among the
+ * actual arguments.
+ * <p>
+ * Common parameters are those which are allowed in both signing and
+ * verification modes.
+ *
+ * @throws InstantiationException if a security provider class name is
+ * specified but that class name is that of either an interface or
+ * an abstract class.
+ * @throws IllegalAccessException if a security provider class name is
+ * specified but no 0-arguments constructor is defined for that
+ * class.
+ * @throws ClassNotFoundException if a security provider class name is
+ * specified but no such class was found in the classpath.
+ * @throws IOException if the JAR file name for signing, or verifying, does
+ * not exist, exists but denotes a directory, or is not readable.
+ */
+ private void setupCommonParams() throws InstantiationException,
+ IllegalAccessException, ClassNotFoundException, IOException
+ {
+ log.entering(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
+
+ if (jarFileName == null)
+ HelpPrinter.printHelpAndExit(HELP_PATH);
+
+ File jar = new File(jarFileName);
+ if (! jar.exists())
+ throw new FileNotFoundException(jarFileName);
+
+ if (jar.isDirectory())
+ throw new IOException(Messages.getFormattedString("Main.70", jarFileName)); //$NON-NLS-1$
+
+ if (! jar.canRead())
+ throw new IOException(Messages.getFormattedString("Main.72", jarFileName)); //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (providerClassName != null && providerClassName.length() > 0)
+ {
+ provider = (Provider) Class.forName(providerClassName).newInstance();
+ // is it already installed?
+ String providerName = provider.getName();
+ Provider installedProvider = Security.getProvider(providerName);
+ if (installedProvider != null)
+ log.finer("Provider " + providerName + " is already installed"); //$NON-NLS-1$ //$NON-NLS-2$
+ else // install it
+ installNewProvider();
+ }
+
+ if (! verbose && certs)
+ {
+ log.fine("Option <certs> is set but <verbose> is not. Ignored"); //$NON-NLS-1$
+ certs = false;
+ }
+
+ log.exiting(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
+ }
+
+ /**
+ * Install the user defined security provider in the underlying JVM.
+ * <p>
+ * Also record this fact so we can remove it when we exit the tool.
+ */
+ private void installNewProvider()
+ {
+ log.entering(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
+
+ providerInstalled = ProviderUtil.addProvider(provider) != -1;
+
+ log.exiting(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
+ }
+
+ /**
+ * After processing the command line arguments, this method is invoked to
+ * process the parameters which may have been encountered among the actual
+ * arguments, and which are specific to the signing action of the tool.
+ *
+ * @throws KeyStoreException if no implementation of the designated (or
+ * default type) of a key store is availabe.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws NoSuchAlgorithmException if an implementation of an algorithm used
+ * by the key store is not available.
+ * @throws CertificateException if an exception occurs while reading a
+ * certificate from the key store.
+ * @throws UnsupportedCallbackException if no implementation of a password
+ * callback is available.
+ * @throws UnrecoverableKeyException if the wrong password was used to unlock
+ * the key store.
+ * @throws SecurityException if the designated alias is not known to the key
+ * store or is not an Alias of a Key Entry.
+ */
+ private void setupSigningParams() throws KeyStoreException, IOException,
+ NoSuchAlgorithmException, CertificateException,
+ UnsupportedCallbackException, UnrecoverableKeyException
+ {
+ log.entering(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
+
+ if (ksURL == null || ksURL.trim().length() == 0)
+ {
+ String userHome = SystemProperties.getProperty("user.home"); //$NON-NLS-1$
+ if (userHome == null || userHome.trim().length() == 0)
+ throw new SecurityException(Messages.getString("Main.85")); //$NON-NLS-1$
+
+ ksURL = "file:" + userHome.trim() + "/.keystore"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ else
+ {
+ ksURL = ksURL.trim();
+ if (ksURL.indexOf(":") == -1) //$NON-NLS-1$
+ ksURL = "file:" + ksURL; //$NON-NLS-1$
+ }
+
+ if (ksType == null || ksType.trim().length() == 0)
+ ksType = KeyStore.getDefaultType();
+ else
+ ksType = ksType.trim();
+
+ store = KeyStore.getInstance(ksType);
+
+ if (ksPassword == null)
+ {
+ // ask the user to provide one
+ PasswordCallback pcb = new PasswordCallback(Messages.getString("Main.92"), //$NON-NLS-1$
+ false);
+ getCallbackHandler().handle(new Callback[] { pcb });
+ ksPasswordChars = pcb.getPassword();
+ }
+ else
+ ksPasswordChars = ksPassword.toCharArray();
+
+ URL url = new URL(ksURL);
+ InputStream stream = url.openStream();
+ store.load(stream, ksPasswordChars);
+
+ if (alias == null)
+ HelpPrinter.printHelpAndExit(HELP_PATH);
+
+ if (! store.containsAlias(alias))
+ throw new SecurityException(Messages.getFormattedString("Main.6", alias)); //$NON-NLS-1$
+
+ if (! store.isKeyEntry(alias))
+ throw new SecurityException(Messages.getFormattedString("Main.95", alias)); //$NON-NLS-1$
+
+ Key key;
+ if (password == null)
+ {
+ passwordChars = ksPasswordChars;
+ try
+ {
+ key = store.getKey(alias, passwordChars);
+ }
+ catch (UnrecoverableKeyException x)
+ {
+ // ask the user to provide one
+ String prompt = Messages.getFormattedString("Main.97", alias); //$NON-NLS-1$
+ PasswordCallback pcb = new PasswordCallback(prompt, false);
+ getCallbackHandler().handle(new Callback[] { pcb });
+ passwordChars = pcb.getPassword();
+ // take 2
+ key = store.getKey(alias, passwordChars);
+ }
+ }
+ else
+ {
+ passwordChars = password.toCharArray();
+ key = store.getKey(alias, passwordChars);
+ }
+
+ if (! (key instanceof PrivateKey))
+ throw new SecurityException(Messages.getFormattedString("Main.99", alias)); //$NON-NLS-1$
+
+ signerPrivateKey = (PrivateKey) key;
+ signerCertificateChain = store.getCertificateChain(alias);
+ log.finest(String.valueOf(signerCertificateChain));
+
+ if (sigFileName == null)
+ sigFileName = alias;
+
+ sigFileName = sigFileName.toUpperCase(EN_US_LOCALE);
+ if (sigFileName.length() > 8)
+ sigFileName = sigFileName.substring(0, 8);
+
+ char[] chars = sigFileName.toCharArray();
+ for (int i = 0; i < chars.length; i++)
+ {
+ char c = chars[i];
+ if (! (Character.isLetter(c)
+ || Character.isDigit(c)
+ || c == '_'
+ || c == '-'))
+ chars[i] = '_';
+ }
+
+ sigFileName = new String(chars);
+
+ if (signedJarFileName == null)
+ signedJarFileName = jarFileName;
+
+ log.exiting(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
+ }
+
+ boolean isVerbose()
+ {
+ return verbose;
+ }
+
+ boolean isCerts()
+ {
+ return certs;
+ }
+
+ String getSigFileName()
+ {
+ return this.sigFileName;
+ }
+
+ String getJarFileName()
+ {
+ return this.jarFileName;
+ }
+
+ boolean isSectionsOnly()
+ {
+ return this.sectionsOnly;
+ }
+
+ boolean isInternalSF()
+ {
+ return this.internalSF;
+ }
+
+ PrivateKey getSignerPrivateKey()
+ {
+ return this.signerPrivateKey;
+ }
+
+ Certificate[] getSignerCertificateChain()
+ {
+ return signerCertificateChain;
+ }
+
+ String getSignedJarFileName()
+ {
+ return this.signedJarFileName;
+ }
+
+ /**
+ * Return a CallbackHandler which uses the Console (System.in and System.out)
+ * for interacting with the user.
+ * <p>
+ * This method first finds all currently installed security providers capable
+ * of providing such service and then in turn attempts to instantiate the
+ * handler from those providers. As soon as one provider returns a non-null
+ * instance of the callback handler, the search stops and that instance is
+ * set to be used from now on.
+ * <p>
+ * If no installed providers were found, this method falls back on the GNU
+ * provider, by-passing the Security search mechanism. The default console
+ * callback handler implementation is {@link ConsoleCallbackHandler}.
+ *
+ * @return a console-based {@link CallbackHandler}.
+ */
+ protected CallbackHandler getCallbackHandler()
+ {
+ if (handler == null)
+ handler = CallbackUtil.getConsoleHandler();
+
+ return handler;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Messages.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Messages.java
new file mode 100644
index 0000000..2846391
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/Messages.java
@@ -0,0 +1,115 @@
+/* Messages.java -- I18N related helper class
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+/**
+ * An initially generated Eclipse helper class to ease the use of localized
+ * messages.
+ * <p>
+ * Enriched to handle localized message formats.
+ */
+class Messages
+{
+ private static final Logger log = Logger.getLogger(Messages.class.getName());
+ private static final String BUNDLE_NAME = "gnu.classpath.tools.jarsigner.MessageBundle"; //$NON-NLS-1$
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+ private static final Map CACHED_FORMATS = new HashMap(5);
+
+ private Messages()
+ {
+ super();
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return constructMessage(key, null);
+ }
+ }
+
+ public static String getFormattedString(String key, Object args)
+ {
+ MessageFormat mf = (MessageFormat) CACHED_FORMATS.get(key);
+ if (mf == null)
+ {
+ String formatString = getString(key);
+ if (formatString.startsWith("!"))
+ return constructMessage(key, args);
+
+ mf = new MessageFormat(formatString);
+ CACHED_FORMATS.put(key, mf);
+ }
+
+ // if the argument is not an array, then build one consisiting of the
+ // sole argument before passing it to the format() method
+ try
+ {
+ if (args instanceof Object[])
+ return mf.format(args);
+
+ return mf.format(new Object[] { args });
+ }
+ catch (IllegalArgumentException x)
+ {
+ log.fine("Exception while rendering a message format keyed by ["
+ + key + "]: " + mf.toPattern());
+ return constructMessage(mf.toPattern(), args);
+ }
+ }
+
+ private static final String constructMessage(String m, Object args)
+ {
+ if (args == null)
+ return '!' + m + '!';
+
+ return '!' + m + '!' + String.valueOf(args) + '!';
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/jarsigner/SFHelper.java b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/SFHelper.java
new file mode 100644
index 0000000..b4e5cc1
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/jarsigner/SFHelper.java
@@ -0,0 +1,373 @@
+/* SFHelper -- A .SF file helper
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.jarsigner;
+
+import gnu.java.security.OID;
+import gnu.java.security.Registry;
+import gnu.java.security.der.DER;
+import gnu.java.security.der.DERValue;
+import gnu.java.security.pkcs.PKCS7Data;
+import gnu.java.security.pkcs.PKCS7SignedData;
+import gnu.java.security.pkcs.SignerInfo;
+import gnu.java.security.sig.ISignature;
+import gnu.java.security.sig.ISignatureCodec;
+import gnu.java.security.sig.dss.DSSSignature;
+import gnu.java.security.sig.dss.DSSSignatureX509Codec;
+import gnu.java.security.sig.rsa.RSAPKCS1V1_5Signature;
+import gnu.java.security.sig.rsa.RSAPKCS1V1_5SignatureX509Codec;
+import gnu.java.security.util.Util;
+import gnu.java.util.jar.JarUtils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.security.PrivateKey;
+import java.security.cert.CRLException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.X509CRL;
+import java.security.interfaces.DSAPrivateKey;
+import java.security.interfaces.RSAPrivateKey;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.logging.Logger;
+
+import javax.security.auth.x500.X500Principal;
+import java.security.cert.X509Certificate;
+
+/**
+ * A helper class for the .SF file found in signed jars.
+ */
+public class SFHelper
+{
+ // Constants and fields
+ // --------------------------------------------------------------------------
+
+ private static final Logger log = Logger.getLogger(SFHelper.class.getName());
+ private static final int READY = 0;
+ private static final int STARTED = 1;
+ private static final int FINISHED = 2;
+ private static final int SF_GENERATED = 3;
+ private static final int DSA_GENERATED = 4;
+ /** http://asn1.elibel.tm.fr/cgi-bin/oid/display?oid=1.3.14.3.2.26&action=display */
+ private static final OID hashAlgorithmIdentifierSHA1 = new OID("1.3.14.3.2.26"); //$NON-NLS-1$
+
+ private int state;
+ private JarFile jar;
+ private Manifest manifest;
+ private Attributes sfMainAttributes;
+ private Map sfEntries;
+ private byte[] sfBytes;
+ private HashUtils util;
+
+ // Constructor(s)
+ // --------------------------------------------------------------------------
+
+ /**
+ * @param jar the JAR archive the .SF file belongs to.
+ */
+ public SFHelper(JarFile jar)
+ {
+ super();
+
+ this.jar = jar;
+ this.state = READY;
+ }
+
+ // Class methods
+ // --------------------------------------------------------------------------
+
+ // Instance methods
+ // --------------------------------------------------------------------------
+
+ /**
+ * Writes the contents of the <code>.SF</code> file to the designated JAR
+ * output stream. Line-endings are platform-independent and consist of the
+ * 2-codepoint sequence <code>0x0D</code> and <code>0x0A</code>.
+ *
+ * @param jar the JAR output stream to write a <code>.SF</code> file to.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ void writeSF(JarOutputStream jar) throws IOException
+ {
+ if (this.state != FINISHED)
+ throw new IllegalStateException(Messages.getString("SFHelper.1")); //$NON-NLS-1$
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ JarUtils.writeSFManifest(sfMainAttributes, sfEntries, baos);
+ sfBytes = baos.toByteArray();
+ log.finest("\n" + Util.dumpString(sfBytes, "+++ sfBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
+ jar.write(sfBytes);
+ jar.flush();
+
+ this.state = SF_GENERATED;
+ }
+
+ /**
+ * The contents of the .DSA file is the DER encoded form of a PKCS#7
+ * ContentInfo of the type SignedData.
+ * <p>
+ * The ContentInfo ASN.1 syntax is as described in the "PKCS#7 Cryptographic
+ * Message Syntax Standard" (RSA Labs) specifications:
+ * <pre>
+ * ContentInfo ::= SEQUENCE {
+ * contentType ContentType,
+ * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
+ * }
+ *
+ * ContentType ::= OBJECT IDENTIFIER
+ * </pre>
+ * <p>
+ * The ContentType is an OID which determines the type of the contents field
+ * that follows it. For the .DSA file the OID is "1.2.840.113549.1.7.2", while
+ * the content field is the byte array representing the DER encoded form of a
+ * SignedData content-type. The ASN.1 syntax of the SignedData type is as
+ * follows:
+ * <pre>
+ * SignedData ::= SEQUENCE {
+ * version Version, -- always 1 for PKCS#7 1.5
+ * digestAlgorithms DigestAlgorithmIdentifiers,
+ * contentInfo ContentInfo,
+ * certificates [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
+ * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+ * signerInfos SignerInfos
+ * }
+ *
+ * DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier
+ *
+ * SignerInfos ::= SET OF SignerInfo
+ * </pre>
+ * <p>
+ * Finally the SignerInfo is a per-signer structure. Its ASN.1 syntax looks
+ * like so:
+ * <pre>
+ * SignerInfo ::= SEQUENCE {
+ * version Version, -- always 1 for PKCS#7 1.5
+ * issuerAndSerialNumber IssuerAndSerialNumber,
+ * digestAlgorithm DigestAlgorithmIdentifier,
+ * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+ * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+ * encryptedDigest EncryptedDigest,
+ * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
+ * }
+ *
+ * EncryptedDigest ::= OCTET STRING
+ * </pre>
+ *
+ * @param jar the JAR output stream to write a <code>.DSA</code> file to.
+ * @param signerKey the private key to sign with.
+ * @param certificates the possibly null signer certificate chain.
+ * @param internalSF if <code>true</code> then include the .SF file contents
+ * in the signed .DSA file; otherwise don't.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws CRLException
+ * @throws CertificateEncodingException
+ */
+ void writeDSA(JarOutputStream jar, PrivateKey signerKey,
+ Certificate[] certificates, boolean internalSF)
+ throws IOException, CertificateEncodingException, CRLException
+ {
+ if (this.state != SF_GENERATED)
+ throw new IllegalStateException(Messages.getString("SFHelper.4")); //$NON-NLS-1$
+
+ log.finest("+++ signer private key = " + signerKey); //$NON-NLS-1$
+ ISignature signatureAlgorithm;
+ ISignatureCodec signatureCodec;
+ OID digestEncryptionAlgorithmOID;
+ if (signerKey instanceof DSAPrivateKey)
+ {
+ signatureAlgorithm = new DSSSignature();
+ signatureCodec = new DSSSignatureX509Codec();
+ digestEncryptionAlgorithmOID = Main.DSA_SIGNATURE_OID;
+ }
+ else if (signerKey instanceof RSAPrivateKey)
+ {
+ signatureAlgorithm = new RSAPKCS1V1_5Signature(Registry.MD5_HASH);
+ signatureCodec = new RSAPKCS1V1_5SignatureX509Codec();
+ digestEncryptionAlgorithmOID = Main.RSA_SIGNATURE_OID;
+ }
+ else
+ throw new SecurityException(Messages.getString("SFHelper.6")); //$NON-NLS-1$
+
+ Map signatureAttributes = new HashMap();
+ signatureAttributes.put(ISignature.SIGNER_KEY, signerKey);
+ signatureAlgorithm.setupSign(signatureAttributes);
+ signatureAlgorithm.update(sfBytes, 0, sfBytes.length);
+ Object signature = signatureAlgorithm.sign();
+ byte[] signedSFBytes = signatureCodec.encodeSignature(signature);
+ log.finest("\n" + Util.dumpString(signedSFBytes, "+++ signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
+
+ Set digestAlgorithms = new HashSet();
+ List digestAlgorithm = new ArrayList(2);
+ DERValue derDigestAlgorithmOID = new DERValue(DER.OBJECT_IDENTIFIER,
+ hashAlgorithmIdentifierSHA1);
+ DERValue derDigestAlgorithmParams = new DERValue(DER.NULL, null);
+ digestAlgorithm.add(derDigestAlgorithmOID);
+ digestAlgorithm.add(derDigestAlgorithmParams);
+ DERValue derDigestAlgorithm = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ digestAlgorithm);
+ digestAlgorithms.add(derDigestAlgorithm);
+
+ // TODO (rsn): test with internalsf == true
+ PKCS7Data data = internalSF ? new PKCS7Data(sfBytes) : null;
+
+ X509CRL[] crls = null;
+
+ Set signerInfos = new HashSet();
+ X509Certificate cert = (X509Certificate) certificates[0];
+ X500Principal issuer = cert.getIssuerX500Principal();
+ BigInteger serialNumber = cert.getSerialNumber();
+ byte[] authenticatedAttributes = null;
+ byte[] encryptedDigest = signedSFBytes;
+ byte[] unauthenticatedAttributes = null;
+ SignerInfo signerInfo = new SignerInfo(issuer,
+ serialNumber,
+ hashAlgorithmIdentifierSHA1,
+ authenticatedAttributes,
+ digestEncryptionAlgorithmOID,
+ encryptedDigest,
+ unauthenticatedAttributes);
+ signerInfos.add(signerInfo);
+
+ PKCS7SignedData dsaContents = new PKCS7SignedData(digestAlgorithms,
+ data,
+ certificates,
+ crls,
+ signerInfos);
+ dsaContents.encode(jar);
+
+ jar.flush();
+ this.state = DSA_GENERATED;
+ }
+
+ Manifest getManifest()
+ {
+ return this.manifest;
+ }
+
+ // own methods --------------------------------------------------------------
+
+ void startSigning() throws IOException
+ {
+ if (this.state != READY)
+ throw new IllegalStateException(Messages.getString("SFHelper.9")); //$NON-NLS-1$
+
+ Manifest oldManifest = jar.getManifest();
+ this.manifest = oldManifest == null ? new Manifest()
+ : new Manifest(oldManifest);
+ this.sfMainAttributes = new Attributes();
+ this.sfEntries = new HashMap();
+ util = new HashUtils();
+
+ this.state = STARTED;
+ }
+
+ /**
+ * Hashes the designated JAR entry (the file itself); adds the resulting hash
+ * as an attribute to the manifest, and computes the hash of the added (to
+ * the Manifest) two headers and add the result as an attribute of the
+ * corresponding entry in the .SF file.
+ */
+ void updateEntry(JarEntry entry) throws IOException
+ {
+ if (this.state != STARTED)
+ throw new IllegalStateException(Messages.getString("SFHelper.10")); //$NON-NLS-1$
+
+ String name = entry.getName();
+ InputStream jeis = jar.getInputStream(entry);
+ String hash = util.hashStream(jeis);
+ log.finer("Hash of " + name + " = " + hash); //$NON-NLS-1$ //$NON-NLS-2$
+
+ Attributes mainfestAttributes = manifest.getAttributes(name);
+ if (mainfestAttributes == null)
+ {
+ mainfestAttributes = new Attributes();
+ manifest.getEntries().put(name, mainfestAttributes);
+ }
+
+ mainfestAttributes.putValue(Main.DIGEST, hash);
+
+ // hash the newly added 2-header block and add it as an attribute to .SF
+
+ String sfHash = util.hashManifestEntry(name, hash);
+ Attributes sfAttributes = (Attributes) sfEntries.get(name);
+ if (sfAttributes == null)
+ {
+ sfAttributes = new Attributes();
+ sfEntries.put(name, sfAttributes);
+ }
+
+ sfAttributes.putValue(Main.DIGEST, sfHash);
+ log.finest("Name: " + name); //$NON-NLS-1$
+ log.finest(Main.DIGEST + ": " + sfHash); //$NON-NLS-1$
+ log.finest(""); //$NON-NLS-1$
+ }
+
+ /**
+ * @param sectionsOnly whether to compute, in addition to the files, the hash
+ * of the mainfest itself (<code>false</code>) or not (<code>true</code>).
+ */
+ void finishSigning(boolean sectionsOnly) throws IOException
+ {
+ if (state != STARTED)
+ throw new IllegalStateException(Messages.getString("SFHelper.10")); //$NON-NLS-1$
+
+ if (sectionsOnly)
+ return;
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ manifest.write(baos);
+ baos.flush();
+ String manifestHash = util.hashByteArray(baos.toByteArray());
+ log.fine("Hashed Manifest " + manifestHash); //$NON-NLS-1$
+ sfMainAttributes.putValue(Main.DIGEST_MANIFEST, manifestHash);
+
+ this.state = FINISHED;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/CertReqCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/CertReqCmd.java
new file mode 100644
index 0000000..0c64246
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/CertReqCmd.java
@@ -0,0 +1,405 @@
+/* CertReqCmd.java -- The certreq command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.java.security.OID;
+import gnu.java.security.der.BitString;
+import gnu.java.security.der.DER;
+import gnu.java.security.der.DERReader;
+import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+import gnu.java.security.util.Base64;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.math.BigInteger;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.SignatureException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.x500.X500Principal;
+
+/**
+ * The <b>-certreq</b> keytool command handler is used to generate a Certificate
+ * Signing Request (CSR) in PKCS#10 format.
+ * <p>
+ * The ASN.1 specification of a CSR, as stated in RFC-2986 is as follows:
+ * <p>
+ * <pre>
+ * CertificationRequest ::= SEQUENCE {
+ * certificationRequestInfo CertificationRequestInfo,
+ * signatureAlgorithm AlgorithmIdentifier,
+ * signature BIT STRING
+ * }
+ *
+ * CertificationRequestInfo ::= SEQUENCE {
+ * version INTEGER -- v1(0)
+ * subject Name,
+ * subjectPKInfo SubjectPublicKeyInfo,
+ * attributes [0] IMPLICIT Attributes -- see note later
+ * }
+ *
+ * SubjectPublicKeyInfo ::= SEQUENCE {
+ * algorithm AlgorithmIdentifier,
+ * subjectPublicKey BIT STRING
+ * }
+ * </pre>
+ * <b>IMPORTANT</b>: Some documentation (e.g. RSA examples) claims that the
+ * <code>attributes</code> field is <i>OPTIONAL</i> while <i>RFC-2986</i>
+ * implies the opposite. This implementation considers this field, by default,
+ * as <i>OPTIONAL</i>, unless the option <code>-attributes</code> is included
+ * on the command line.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-sigalg ALGORITHM</dt>
+ * <dd>The canonical name of the digital signature algorithm to use for
+ * signing the certificate. If this option is omitted, a default value will
+ * be chosen based on the type of the private key associated with the
+ * designated <i>Alias</i>. If the private key is a <code>DSA</code> one,
+ * the value for the signature algorithm will be <code>SHA1withDSA</code>.
+ * If on the other hand the private key is an <code>RSA</code> one, then
+ * the tool will use <code>MD5withRSA</code> as the signature algorithm.
+ * <p></dd>
+ *
+ * <dt>-file FILE_NAME</dt>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.
+ * <p></dd>
+ *
+ * <dt>-attributes</dt>
+ * <dd>Use this option to force the tool to encode a NULL DER value in the
+ * CSR as the value of the Attributes field.</dd>
+ * </dl>
+ */
+class CertReqCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(CertReqCmd.class.getName());
+ private String _alias;
+ private String _sigAlgorithm;
+ private String _certReqFileName;
+ private String _password;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private boolean nullAttributes;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /**
+ * @param algorithm the canonical name of the digital signature algorithm to
+ * use.
+ */
+ public void setSigalg(String algorithm)
+ {
+ this._sigAlgorithm = algorithm;
+ }
+
+ /** @param pathName the fully qualified path name of the file to process. */
+ public void setFile(String pathName)
+ {
+ this._certReqFileName = pathName;
+ }
+
+ /** @param password the (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ /**
+ * @param flag whether to use, or not, a <code>NULL</code> DER value for
+ * the certificate's Attributes field.
+ */
+ public void setAttributes(String flag)
+ {
+ this.nullAttributes = Boolean.valueOf(flag).booleanValue();
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-sigalg".equals(opt)) // -sigalg ALGORITHM //$NON-NLS-1$
+ _sigAlgorithm = args[++i];
+ else if ("-file".equals(opt)) // -file FILE_NAME //$NON-NLS-1$
+ _certReqFileName = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ _password = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else if ("-attributes".equals(opt)) //$NON-NLS-1$
+ nullAttributes = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setOutputStreamParam(_certReqFileName);
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordNoPrompt(_password);
+// setSignatureAlgorithm(_sigAlgorithm);
+
+ log.finer("-certreq handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -sigalg=" + _sigAlgorithm); //$NON-NLS-1$
+ log.finer(" -file=" + _certReqFileName); //$NON-NLS-1$
+ log.finer(" -keypass=" + _password); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ log.finer(" -attributes=" + nullAttributes); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
+ UnsupportedCallbackException, UnrecoverableKeyException,
+ InvalidKeyException, SignatureException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ // 1. get the key entry and certificate chain associated to alias
+ Key privateKey = getAliasPrivateKey();
+ Certificate[] chain = store.getCertificateChain(alias);
+
+ // 2. get alias's DN and public key to use in the CSR
+ X509Certificate bottomCertificate = (X509Certificate) chain[0];
+ X500Principal aliasName = bottomCertificate.getIssuerX500Principal();
+ PublicKey publicKey = bottomCertificate.getPublicKey();
+
+ // 3. generate the CSR
+ setSignatureAlgorithmParam(_sigAlgorithm, privateKey);
+ byte[] derBytes = getCSR(aliasName, publicKey, (PrivateKey) privateKey);
+
+ // 4. encode it in base-64 and write it to outStream
+ String encoded = Base64.encode(derBytes, 0, derBytes.length, true);
+ PrintWriter writer = new PrintWriter(outStream, true);
+ writer.println("-----BEGIN NEW CERTIFICATE REQUEST-----"); //$NON-NLS-1$
+ writer.println(encoded);
+ writer.println("-----END NEW CERTIFICATE REQUEST-----"); //$NON-NLS-1$
+
+ if (verbose)
+ {
+ if (! systemOut)
+ System.out.println(Messages.getFormattedString("CertReqCmd.27", //$NON-NLS-1$
+ _certReqFileName));
+ System.out.println(Messages.getString("CertReqCmd.28")); //$NON-NLS-1$
+ }
+
+ writer.close();
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * @param aliasName
+ * @param publicKey
+ * @param privateKey
+ * @return the DER encoded Certificate Signing Request.
+ * @throws IOException
+ * @throws InvalidKeyException
+ * @throws SignatureException
+ */
+ private byte[] getCSR(X500Principal aliasName, PublicKey publicKey,
+ PrivateKey privateKey)
+ throws IOException, InvalidKeyException, SignatureException
+ {
+ DERValue derVersion = new DERValue(DER.INTEGER, BigInteger.ZERO);
+ DERValue derSubject = new DERReader(aliasName.getEncoded()).read();
+ DERValue derSubjectPKInfo = new DERReader(publicKey.getEncoded()).read();
+ byte[] b = nullAttributes ? new byte[] { 0x05, 0x00 } : new byte[0];
+ DERValue derAttributes = new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 0,
+ b.length, b, null);
+ ArrayList certRequestInfo = new ArrayList(4);
+ certRequestInfo.add(derVersion);
+ certRequestInfo.add(derSubject);
+ certRequestInfo.add(derSubjectPKInfo);
+ certRequestInfo.add(derAttributes);
+ DERValue derCertRequestInfo = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ certRequestInfo);
+
+ OID sigAlgorithmID = getSignatureAlgorithmOID();
+ DERValue derSigAlgorithmID = new DERValue(DER.OBJECT_IDENTIFIER,
+ sigAlgorithmID);
+ ArrayList sigAlgorithm = new ArrayList(2);
+ sigAlgorithm.add(derSigAlgorithmID);
+ if (! sigAlgorithmID.equals(Command.SHA1_WITH_DSA)) // it's an RSA-based
+ sigAlgorithm.add(new DERValue(DER.NULL, null));
+
+ sigAlgorithm.trimToSize();
+ DERValue derSignatureAlgorithm = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ sigAlgorithm);
+
+ signatureAlgorithm.initSign(privateKey);
+ signatureAlgorithm.update(derCertRequestInfo.getEncoded());
+ byte[] sigBytes = signatureAlgorithm.sign();
+ DERValue derSignature = new DERValue(DER.BIT_STRING, new BitString(sigBytes));
+
+ ArrayList csr = new ArrayList(3);
+ csr.add(derCertRequestInfo);
+ csr.add(derSignatureAlgorithm);
+ csr.add(derSignature);
+ DERValue derCSR = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, csr);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ DERWriter.write(baos, derCSR);
+ byte[] result = baos.toByteArray();
+
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/Command.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/Command.java
new file mode 100644
index 0000000..a596146
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/Command.java
@@ -0,0 +1,1147 @@
+/* Command.java -- Abstract implementation of a keytool command handler
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.classpath.SystemProperties;
+import gnu.classpath.tools.common.CallbackUtil;
+import gnu.classpath.tools.common.ProviderUtil;
+import gnu.classpath.tools.common.SecurityProviderInfo;
+import gnu.java.security.OID;
+import gnu.java.security.Registry;
+import gnu.java.security.der.BitString;
+import gnu.java.security.der.DER;
+import gnu.java.security.der.DERReader;
+import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+import gnu.java.security.hash.IMessageDigest;
+import gnu.java.security.hash.MD5;
+import gnu.java.security.hash.Sha160;
+import gnu.java.security.util.Util;
+import gnu.java.security.x509.X500DistinguishedName;
+import gnu.javax.security.auth.callback.ConsoleCallbackHandler;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.math.BigInteger;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.InvalidKeyException;
+import java.security.InvalidParameterException;
+import java.security.Key;
+import java.security.KeyPairGenerator;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.security.SignatureException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.DSAKey;
+import java.security.interfaces.RSAKey;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.logging.Logger;
+import java.util.prefs.Preferences;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * A base class of the keytool command to facilitate implementation of concrete
+ * keytool Handlers.
+ */
+abstract class Command
+{
+ // Fields and constants -----------------------------------------------------
+
+ private static final Logger log = Logger.getLogger(Command.class.getName());
+ /** Default value for the ALIAS argument. */
+ private static final String DEFAULT_ALIAS = "mykey"; //$NON-NLS-1$
+ /** Default algorithm for key-pair generation. */
+ private static final String DEFAULT_KEY_ALGORITHM = "DSA"; //$NON-NLS-1$
+ /** Default DSA digital signature algorithm to use with DSA keys. */
+ private static final String DSA_SIGNATURE_ALGORITHM = "SHA1withDSA"; //$NON-NLS-1$
+ /** Default RSA digital signature algorithm to use with RSA keys. */
+ private static final String RSA_SIGNATURE_ALGORITHM = "MD5withRSA"; //$NON-NLS-1$
+ /** Default validity (in days) of newly generated certificates. */
+ private static final int DEFAULT_VALIDITY = 90;
+ /** OID of SHA1withDSA signature algorithm as stated in RFC-2459. */
+ protected static final OID SHA1_WITH_DSA = new OID("1.2.840.10040.4.3"); //$NON-NLS-1$
+ /** OID of MD2withRSA signature algorithm as stated in RFC-2459. */
+ private static final OID MD2_WITH_RSA = new OID("1.2.840.113549.1.1.2"); //$NON-NLS-1$
+ /** OID of MD5withRSA signature algorithm as stated in RFC-2459. */
+ private static final OID MD5_WITH_RSA = new OID("1.2.840.113549.1.1.4"); //$NON-NLS-1$
+ /** OID of SHA1withRSA signature algorithm as stated in RFC-2459. */
+ private static final OID SHA1_WITH_RSA = new OID("1.2.840.113549.1.1.5"); //$NON-NLS-1$
+ /** Number of milliseconds in one day. */
+ private static final long MILLIS_IN_A_DAY = 24 * 60 * 60 * 1000L;
+
+ /** The Alias to use. */
+ protected String alias;
+ /** The password characters protecting a Key Entry. */
+ protected char[] keyPasswordChars;
+ /** A security provider to add. */
+ protected Provider provider;
+ /** The key store type. */
+ protected String storeType;
+ /** The password characters protecting the key store. */
+ protected char[] storePasswordChars;
+ /** The key store URL. */
+ protected URL storeURL;
+ /** The input stream from the key store URL. */
+ protected InputStream storeStream;
+ /** The key store instance to use. */
+ protected KeyStore store;
+ /** The output stream the concrete handler will use. */
+ protected OutputStream outStream;
+ /** Whether we are printing to System.out. */
+ protected boolean systemOut;
+ /** The key-pair generation algorithm instance to use. */
+ protected KeyPairGenerator keyPairGenerator;
+ /** The digital signature algorithm instance to use. */
+ protected Signature signatureAlgorithm;
+ /** Validity period, in number of days, to use when generating certificates. */
+ protected int validityInDays;
+ /** The input stream the concrete handler will use. */
+ protected InputStream inStream;
+ /** Whether verbose output is required or not. */
+ protected boolean verbose;
+
+ /** MD5 hash to use when generating certificate fingerprints. */
+ private IMessageDigest md5 = new MD5();
+ /** SHA1 hash to use when generating certificate fingerprints. */
+ private IMessageDigest sha = new Sha160();
+ /** The new position of a user-defined provider if it is not already installed. */
+ private int providerNdx = -2;
+ /** The callback handler to use when needing to interact with user. */
+ private CallbackHandler handler;
+
+ // Constructor(s) -----------------------------------------------------------
+
+ // default 0-arguments constructor
+
+ // Methods ------------------------------------------------------------------
+
+ /**
+ * A public method to allow using any keytool command handler programmatically
+ * by using a JavaBeans style of parameter(s) initialization. The user is
+ * assumed to have set individually the required options through their
+ * respective setters before invoking this method.
+ * <p>
+ * If an exception is encountered during the processing of the command, this
+ * implementation attempts to release any resources that may have been
+ * allocated at the time the exception occurs, before re-throwing that
+ * exception.
+ *
+ * @throws Exception if an exception occurs during the processing of this
+ * command. For a more comprehensive list of exceptions that may
+ * occur, see the documentation of the {@link #setup()} and
+ * {@link #start()} methods.
+ */
+ public void doCommand() throws Exception
+ {
+ try
+ {
+ setup();
+ start();
+ }
+ finally
+ {
+ teardown();
+ }
+ }
+
+ /**
+ * @param flag whether to use, or not, more verbose output while processing
+ * the command.
+ */
+ public void setVerbose(String flag)
+ {
+ this.verbose = Boolean.valueOf(flag).booleanValue();
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ /**
+ * Given a potential sub-array of options for this concrete handler, starting
+ * at position <code>startIndex + 1</code>, potentially followed by other
+ * commands and their options, this method sets up this concrete command
+ * handler with its own options and returns the index of the first unprocessed
+ * argument in the array.
+ * <p>
+ * The general contract of this method is that it is invoked with the
+ * <code>startIndex</code> argument pointing to the keyword argument that
+ * uniquelly identifies the command itself; e.g. <code>-genkey</code> or
+ * <code>-list</code>, etc...
+ *
+ * @param args an array of options for this handler and possibly other
+ * commands and their options.
+ * @param startIndex the index of the first argument in <code>args</code> to
+ * process.
+ * @return the index of the first unprocessed argument in <code>args</code>.
+ */
+ abstract int processArgs(String[] args, int startIndex);
+
+ /**
+ * Initialize this concrete command handler for later invocation of the
+ * {@link #start()} or {@link #doCommand()} methods.
+ * <p>
+ * Handlers usually initialize their local variables and resources within the
+ * scope of this call.
+ *
+ * @throws IOException if an I/O related exception, such as opening an input
+ * stream, occurs during the execution of this method.
+ * @throws UnsupportedCallbackException if a requested callback handler
+ * implementation was not found, or was found but encountered an
+ * exception during its processing.
+ * @throws ClassNotFoundException if a designated security provider class was
+ * not found.
+ * @throws IllegalAccessException no 0-arguments constructor for the
+ * designated security provider class was found.
+ * @throws InstantiationException the designated security provider class is
+ * not instantiable.
+ * @throws KeyStoreException if an exception occurs during the instantiation
+ * of the KeyStore.
+ * @throws CertificateException if a certificate related exception, such as
+ * expiry, occurs during the loading of the KeyStore.
+ * @throws NoSuchAlgorithmException if no current security provider can
+ * provide a needed algorithm referenced by the KeyStore or one of
+ * its Key Entries or Certificates.
+ */
+ abstract void setup() throws Exception;
+
+ /**
+ * Do the real work this handler is supposed to do.
+ * <p>
+ * The code in this (abstract) class throws a <i>Not implemented yet</i>
+ * runtime exception. Concrete implementations MUST override this method.
+ *
+ * @throws CertificateException If no concrete implementation was found for a
+ * certificate Factory of a designated type. In this tool, the type
+ * is usually X.509 v1.
+ * @throws KeyStoreException if a keys-store related exception occurs; e.g.
+ * the key store has not been initialized.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws SignatureException if a digital signature related exception occurs.
+ * @throws InvalidKeyException if the genereated keys are invalid.
+ * @throws UnrecoverableKeyException if the password used to unlock a key in
+ * the key store was invalid.
+ * @throws NoSuchAlgorithmException if a concrete implementation of an
+ * algorithm used to store a Key Entry was not found at runtime.
+ * @throws UnsupportedCallbackException if a requested callback handler
+ * implementation was not found, or was found but encountered an
+ * exception during its processing.
+ */
+ void start() throws Exception
+ {
+ throw new RuntimeException("Not implemented yet"); //$NON-NLS-1$
+ }
+
+ /**
+ * Tear down the handler, releasing any resources which may have been
+ * allocated at setup time.
+ */
+ void teardown()
+ {
+ log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+
+ if (storeStream != null)
+ try
+ {
+ storeStream.close();
+ }
+ catch (IOException ignored)
+ {
+ log.fine("Exception while closing key store URL stream. Ignored: " //$NON-NLS-1$
+ + ignored);
+ }
+
+ if (outStream != null)
+ {
+ try
+ {
+ outStream.flush();
+ }
+ catch (IOException ignored)
+ {
+ }
+
+ if (! systemOut)
+ try
+ {
+ outStream.close();
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+
+ if (inStream != null)
+ try
+ {
+ inStream.close();
+ }
+ catch (IOException ignored)
+ {
+ }
+
+ if (providerNdx > 0)
+ ProviderUtil.removeProvider(provider.getName());
+
+ log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+ }
+
+ // parameter setup and validation methods -----------------------------------
+
+ /**
+ * Convenience method to setup the key store given its type, its password, its
+ * location and portentially a specialized security provider.
+ *
+ * @param className the potentially null fully qualified class name of a
+ * security provider to add at runtime, if no installed provider is
+ * able to provide a key store implementation of the desired type.
+ * @param type the potentially null type of the key store to request from the
+ * key store factory.
+ * @param password the potentially null password protecting the key store.
+ * @param url the URL of the key store.
+ */
+ protected void setKeyStoreParams(String className, String type,
+ String password, String url)
+ throws IOException, UnsupportedCallbackException, KeyStoreException,
+ NoSuchAlgorithmException, CertificateException
+ {
+ setProviderClassNameParam(className);
+ setKeystoreTypeParam(type);
+ setKeystorePasswordParam(password);
+ setKeystoreURLParam(url);
+ }
+
+ /**
+ * Set a security provider class name to (install and) use for key store
+ * related operations.
+ *
+ * @param className the possibly null, fully qualified class name of a
+ * security provider to add, if it is not already installed, to the
+ * set of available providers.
+ */
+ protected void setProviderClassNameParam(String className)
+ {
+ log.finest("setProviderClassNameParam(" + className + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (className != null && className.trim().length() > 0)
+ {
+ className = className.trim();
+ SecurityProviderInfo spi = ProviderUtil.addProvider(className);
+ provider = spi.getProvider();
+ if (provider == null)
+ log.fine("Was unable to add provider from class " + className);
+
+ providerNdx = spi.getPosition();
+ }
+ }
+
+ /**
+ * Set the type of key store to initialize, load and use.
+ *
+ * @param type the possibly null type of the key store. if this argument is
+ * <code>null</code>, or is an empty string, then this method sets
+ * the type of the key store to be the default value returned from
+ * the invocation of the {@link KeyStore#getDefaultType()} method.
+ * For GNU Classpath this is <i>gkr</i> which stands for the "Gnu
+ * KeyRing" specifications.
+ */
+ protected void setKeystoreTypeParam(String type)
+ {
+ log.finest("setKeystoreTypeParam(" + type + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (type == null || type.trim().length() == 0)
+ storeType = KeyStore.getDefaultType();
+ else
+ storeType = type.trim();
+ }
+
+ /**
+ * Set the key password given a command line option argument. If no value was
+ * present on the command line then prompt the user to provide one.
+ *
+ * @param password a possibly null key password gleaned from the command line.
+ * @throws IOException if an I/O related exception occurs.
+ * @throws UnsupportedCallbackException if no concrete implementation of a
+ * password callback was found at runtime.
+ */
+ protected void setKeyPasswordParam(String password) throws IOException,
+ UnsupportedCallbackException
+ {
+ setKeyPasswordNoPrompt(password);
+ if (keyPasswordChars == null)
+ setKeyPasswordParam();
+ }
+
+ /**
+ * Set the Alias to use when associating Key Entries and Trusted Certificates
+ * in the current key store.
+ *
+ * @param name the possibly null alias to use. If this arfument is
+ * <code>null</code>, then a default value of <code>mykey</code>
+ * will be used instead.
+ */
+ protected void setAliasParam(String name)
+ {
+ alias = name == null ? DEFAULT_ALIAS : name.trim();
+ }
+
+ /**
+ * Set the key password given a command line option argument.
+ *
+ * @param password a possibly null key password gleaned from the command line.
+ */
+ protected void setKeyPasswordNoPrompt(String password)
+ {
+ if (password != null)
+ keyPasswordChars = password.toCharArray();
+ }
+
+ /**
+ * Prompt the user to provide a password to protect a Key Entry in the key
+ * store.
+ *
+ * @throws IOException if an I/O related exception occurs.
+ * @throws UnsupportedCallbackException if no concrete implementation of a
+ * password callback was found at runtime.
+ * @throws SecurityException if no password is available, even after prompting
+ * the user.
+ */
+ protected void setKeyPasswordParam() throws IOException,
+ UnsupportedCallbackException
+ {
+ String prompt = Messages.getFormattedString("Command.21", alias); //$NON-NLS-1$
+ PasswordCallback pcb = new PasswordCallback(prompt, false);
+ getCallbackHandler().handle(new Callback[] { pcb });
+ keyPasswordChars = pcb.getPassword();
+ pcb.clearPassword();
+ if (keyPasswordChars == null)
+ throw new SecurityException(Messages.getString("Command.23")); //$NON-NLS-1$
+ }
+
+ protected void setKeystorePasswordParam(String password) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (password != null)
+ storePasswordChars = password.toCharArray();
+ else // ask the user to provide one
+ {
+ String prompt = Messages.getString("Command.24"); //$NON-NLS-1$
+ PasswordCallback pcb = new PasswordCallback(prompt, false);
+ getCallbackHandler().handle(new Callback[] { pcb });
+ storePasswordChars = pcb.getPassword();
+ pcb.clearPassword();
+ }
+ log.finest("storePasswordChars = [" + String.valueOf(storePasswordChars)+ "]"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Set the key store URL to use.
+ *
+ * @param url
+ * @throws IOException
+ * @throws KeyStoreException
+ * @throws UnsupportedCallbackException
+ * @throws NoSuchAlgorithmException
+ * @throws CertificateException
+ */
+ protected void setKeystoreURLParam(String url) throws IOException,
+ KeyStoreException, UnsupportedCallbackException, NoSuchAlgorithmException,
+ CertificateException
+ {
+ log.finest("setKeystoreURLParam(" + url + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (url == null || url.trim().length() == 0)
+ {
+ String userHome = SystemProperties.getProperty("user.home"); //$NON-NLS-1$
+ if (userHome == null || userHome.trim().length() == 0)
+ throw new InvalidParameterException(Messages.getString("Command.36")); //$NON-NLS-1$
+
+ url = userHome.trim() + "/.keystore"; //$NON-NLS-1$
+ // if it does not exist create it
+ new File(url).createNewFile();
+ url = "file:" + url; //$NON-NLS-1$
+ }
+ else
+ {
+ url = url.trim();
+ if (url.indexOf(":") == -1) // if it does not exist create it //$NON-NLS-1$
+ new File(url).createNewFile();
+
+ url = "file:" + url; //$NON-NLS-1$
+ }
+
+ boolean newKeyStore = false;
+ storeURL = new URL(url);
+ storeStream = storeURL.openStream();
+ if (storeStream.available() == 0)
+ {
+ log.fine("Store is empty. Will use <null> when loading, to create it"); //$NON-NLS-1$
+ newKeyStore = true;
+ }
+
+ try
+ {
+ store = KeyStore.getInstance(storeType);
+ }
+ catch (KeyStoreException x)
+ {
+ if (provider != null)
+ throw x;
+
+ log.fine("Exception while getting key store with default provider(s)." //$NON-NLS-1$
+ + " Will prompt user for another provider and continue"); //$NON-NLS-1$
+ String prompt = Messages.getString("Command.40"); //$NON-NLS-1$
+ NameCallback ncb = new NameCallback(prompt);
+ getCallbackHandler().handle(new Callback[] { ncb });
+ String className = ncb.getName();
+ setProviderClassNameParam(className); // we may have a Provider
+ if (provider == null)
+ {
+ x.fillInStackTrace();
+ throw x;
+ }
+ // try again
+ store = KeyStore.getInstance(storeType, provider);
+ }
+
+ // now we have a KeyStore instance. load it
+ // KeyStore public API claims: "...In order to create an empty keystore,
+ // you pass null as the InputStream argument to the load method.
+ if (newKeyStore)
+ store.load(null, storePasswordChars);
+ else
+ store.load(storeStream, storePasswordChars);
+
+ // close the stream
+ try
+ {
+ storeStream.close();
+ storeStream = null;
+ }
+ catch (IOException x)
+ {
+ log.fine("Exception while closing the key store input stream: " + x //$NON-NLS-1$
+ + ". Ignore"); //$NON-NLS-1$
+ }
+ }
+
+ protected void setOutputStreamParam(String fileName) throws SecurityException,
+ IOException
+ {
+ if (fileName == null || fileName.trim().length() == 0)
+ {
+ outStream = System.out;
+ systemOut = true;
+ }
+ else
+ {
+ fileName = fileName.trim();
+ File outFile = new File(fileName);
+ if (! outFile.exists())
+ {
+ boolean ok = outFile.createNewFile();
+ if (!ok)
+ throw new InvalidParameterException(Messages.getFormattedString("Command.19", //$NON-NLS-1$
+ fileName));
+ }
+ else
+ {
+ if (! outFile.isFile())
+ throw new InvalidParameterException(Messages.getFormattedString("Command.42", //$NON-NLS-1$
+ fileName));
+ if (! outFile.canWrite())
+ throw new InvalidParameterException(Messages.getFormattedString("Command.44", //$NON-NLS-1$
+ fileName));
+ }
+ outStream = new FileOutputStream(outFile);
+ }
+ }
+
+ protected void setInputStreamParam(String fileName)
+ throws FileNotFoundException
+ {
+ if (fileName == null || fileName.trim().length() == 0)
+ inStream = System.in;
+ else
+ {
+ fileName = fileName.trim();
+ File inFile = new File(fileName);
+ if (! (inFile.exists() && inFile.isFile() && inFile.canRead()))
+ throw new InvalidParameterException(Messages.getFormattedString("Command.46", //$NON-NLS-1$
+ fileName));
+ inStream = new FileInputStream(inFile);
+ }
+ }
+
+ /**
+ * Set both the key-pair generation algorithm, and the digital signature
+ * algorithm instances to use when generating new entries.
+ *
+ * @param kpAlg the possibly null name of a key-pair generator algorithm.
+ * if this argument is <code>null</code> or is an empty string, the
+ * "DSS" algorithm will be used.
+ * @param sigAlg the possibly null name of a digital signature algorithm.
+ * If this argument is <code>null</code> or is an empty string, this
+ * method uses the "SHA1withDSA" (Digital Signature Standard, a.k.a.
+ * DSA, with the Secure Hash Algorithm function) as the default
+ * algorithm if, and only if, the key-pair generation algorithm ends
+ * up being "DSS"; otherwise, if the key-pair generation algorithm
+ * was "RSA", then the "MD5withRSA" signature algorithm will be used.
+ * If the key-pair generation algorithm is neither "DSS" (or its
+ * alias "DSA"), nor is it "RSA", then an exception is thrown.
+ * @throws NoSuchAlgorithmException if no concrete implementation of the
+ * designated algorithm is available.
+ */
+ protected void setAlgorithmParams(String kpAlg, String sigAlg)
+ throws NoSuchAlgorithmException
+ {
+ if (kpAlg == null || kpAlg.trim().length() == 0)
+ kpAlg = DEFAULT_KEY_ALGORITHM;
+ else
+ kpAlg = kpAlg.trim().toLowerCase();
+
+ keyPairGenerator = KeyPairGenerator.getInstance(kpAlg);
+
+ if (sigAlg == null || sigAlg.trim().length() == 0)
+ if (kpAlg.equalsIgnoreCase(Registry.DSS_KPG)
+ || kpAlg.equalsIgnoreCase(Registry.DSA_KPG))
+ sigAlg = DSA_SIGNATURE_ALGORITHM;
+ else if (kpAlg.equalsIgnoreCase(Registry.RSA_KPG))
+ sigAlg = RSA_SIGNATURE_ALGORITHM;
+ else
+ throw new IllegalArgumentException(
+ Messages.getFormattedString("Command.20", //$NON-NLS-1$
+ new String[] { sigAlg, kpAlg }));
+ else
+ sigAlg = sigAlg.trim().toLowerCase();
+
+ signatureAlgorithm = Signature.getInstance(sigAlg);
+ }
+
+ /**
+ * Set the signature algorithm to use when digitally signing private keys,
+ * certificates, etc...
+ * <p>
+ * If the designated algorithm name is <code>null</code> or is an empty
+ * string, this method checks the private key (the second argument) and based
+ * on its type decides which algorithm to use. The keytool public
+ * specification states that if the private key is a DSA key, then the
+ * signature algorithm will be <code>SHA1withDSA</code>, otherwise if it is
+ * an RSA private key, then the signature algorithm will be
+ * <code>MD5withRSA</code>. If the private key is neither a private DSA nor
+ * a private RSA key, then this method throws an
+ * {@link IllegalArgumentException}.
+ *
+ * @param algorithm the possibly null name of a digital signature algorithm.
+ * @param privateKey an instance of a private key to use as a fal-back option
+ * when <code>algorithm</code> is invalid.
+ * @throws NoSuchAlgorithmException if no concrete implementation of the
+ * designated, or default, signature algorithm is available.
+ */
+ protected void setSignatureAlgorithmParam(String algorithm, Key privateKey)
+ throws NoSuchAlgorithmException
+ {
+ if (algorithm == null || algorithm.trim().length() == 0)
+ if (privateKey instanceof DSAKey)
+ algorithm = DSA_SIGNATURE_ALGORITHM;
+ else if (privateKey instanceof RSAKey)
+ algorithm = RSA_SIGNATURE_ALGORITHM;
+ else
+ throw new InvalidParameterException(Messages.getString("Command.48")); //$NON-NLS-1$
+ else
+ algorithm = algorithm.trim();
+
+ signatureAlgorithm = Signature.getInstance(algorithm);
+ }
+
+ /**
+ * Set the validity period, in number of days, to use when issuing new
+ * certificates.
+ *
+ * @param days the number of days, as a string, the generated certificate will
+ * be valid for, starting from today's date. if this argument is
+ * <code>null</code>, a default value of <code>90</code> days
+ * will be used.
+ * @throws NumberFormatException if the designated string is not a decimal
+ * integer.
+ * @throws InvalidParameterException if the integer value of the non-null
+ * string is not greater than zero.
+ */
+ protected void setValidityParam(String days)
+ {
+ if (days == null || days.trim().length() == 0)
+ validityInDays = DEFAULT_VALIDITY;
+ else
+ {
+ days = days.trim();
+ validityInDays = Integer.parseInt(days);
+ if (validityInDays < 1)
+ throw new InvalidParameterException(Messages.getString("Command.51")); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * RFC-2459 (http://rfc.net/rfc2459.html) fully describes the structure and
+ * semantics of X.509 certificates. The ASN.1 structures below are gleaned
+ * from that reference.
+ *
+ * <pre>
+ * Certificate ::= SEQUENCE {
+ * tbsCertificate TBSCertificate,
+ * signatureAlgorithm AlgorithmIdentifier,
+ * signatureValue BIT STRING
+ * }
+ *
+ * TBSCertificate ::= SEQUENCE {
+ * version [0] EXPLICIT Version DEFAULT v1,
+ * serialNumber CertificateSerialNumber,
+ * signature AlgorithmIdentifier,
+ * issuer Name,
+ * validity Validity,
+ * subject Name,
+ * subjectPublicKeyInfo SubjectPublicKeyInfo
+ * }
+ *
+ * Version ::= INTEGER { v1(0), v2(1), v3(2) }
+ *
+ * CertificateSerialNumber ::= INTEGER
+ *
+ * Validity ::= SEQUENCE {
+ * notBefore Time,
+ * notAfter Time
+ * }
+ *
+ * Time ::= CHOICE {
+ * utcTime UTCTime,
+ * generalTime GeneralizedTime
+ * }
+ *
+ * UniqueIdentifier ::= BIT STRING
+ *
+ * SubjectPublicKeyInfo ::= SEQUENCE {
+ * algorithm AlgorithmIdentifier,
+ * subjectPublicKey BIT STRING
+ * }
+ * </pre>
+ *
+ * @param distinguishedName the X.500 Distinguished Name to use as both the
+ * Issuer and Subject of the self-signed certificate to generate.
+ * @param publicKey the public key of the issuer/subject.
+ * @param privateKey the private key of the issuer/signer.
+ * @return the DER encoded form of a self-signed X.509 v1 certificate.
+ * @throws IOException If an I/O related exception occurs during the process.
+ * @throws SignatureException If a digital signature related exception occurs.
+ * @throws InvalidKeyException if the designated private key is invalid.
+ * @throws InvalidParameterException if the concrete signature algorithm does
+ * not know its name, no OID is known/supported for that name, or we
+ * were unable to match the name to a known string for which we can
+ * use a standard OID.
+ */
+ protected byte[] getSelfSignedCertificate(X500DistinguishedName distinguishedName,
+ PublicKey publicKey,
+ PrivateKey privateKey)
+ throws IOException, SignatureException, InvalidKeyException
+ {
+ log.entering(this.getClass().getName(), "getSelfSignedCertificate", //$NON-NLS-1$
+ new Object[] { distinguishedName, publicKey, privateKey });
+
+ byte[] versionBytes = new DERValue(DER.INTEGER, BigInteger.ZERO).getEncoded();
+ DERValue derVersion = new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 0,
+ versionBytes.length, versionBytes, null);
+
+ // NOTE (rsn): the next 3 lines should be atomic but they're not.
+ Preferences prefs = Preferences.systemNodeForPackage(this.getClass());
+ int lastSerialNumber = prefs.getInt(Main.LAST_SERIAL_NUMBER, 0) + 1;
+ prefs.putInt(Main.LAST_SERIAL_NUMBER, lastSerialNumber);
+ DERValue derSerialNumber = new DERValue(DER.INTEGER,
+ BigInteger.valueOf(lastSerialNumber));
+
+ OID signatureID = getSignatureAlgorithmOID();
+ DERValue derSignatureID = new DERValue(DER.OBJECT_IDENTIFIER, signatureID);
+ ArrayList signature = new ArrayList(1);
+ signature.add(derSignatureID);
+ // rfc-2459 states the following:
+ //
+ // for the DSA signature:
+ // ...Where the id-dsa-with-sha1 algorithm identifier appears as the
+ // algorithm field in an AlgorithmIdentifier, the encoding shall omit
+ // the parameters field. That is, the AlgorithmIdentifier shall be a
+ // SEQUENCE of one component - the OBJECT IDENTIFIER id-dsa-with-sha1.
+ //
+ // for RSA signatures:
+ // ...When any of these three OIDs (i.e. xxxWithRSAEncryption) appears
+ // within the ASN.1 type AlgorithmIdentifier, the parameters component of
+ // that type shall be the ASN.1 type NULL.
+ if (! signatureID.equals(SHA1_WITH_DSA))
+ signature.add(new DERValue(DER.NULL, null));
+
+ DERValue derSignature = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ signature);
+
+ DERValue derIssuer = new DERReader(distinguishedName.getDer()).read();
+
+ long notBefore = System.currentTimeMillis();
+ long notAfter = notBefore + validityInDays * MILLIS_IN_A_DAY;
+
+ ArrayList validity = new ArrayList(2);
+ validity.add(new DERValue(DER.UTC_TIME, new Date(notBefore)));
+ validity.add(new DERValue(DER.UTC_TIME, new Date(notAfter)));
+ DERValue derValidity = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ validity);
+
+ // for a self-signed certificate subject and issuer are identical
+ DERValue derSubject = derIssuer;
+
+ DERValue derSubjectPublicKeyInfo = new DERReader(publicKey.getEncoded()).read();
+
+ ArrayList tbsCertificate = new ArrayList(7);
+ tbsCertificate.add(derVersion);
+ tbsCertificate.add(derSerialNumber);
+ tbsCertificate.add(derSignature);
+ tbsCertificate.add(derIssuer);
+ tbsCertificate.add(derValidity);
+ tbsCertificate.add(derSubject);
+ tbsCertificate.add(derSubjectPublicKeyInfo);
+ DERValue derTBSCertificate = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ tbsCertificate);
+
+ // The 'signature' field MUST contain the same algorithm identifier as the
+ // 'signatureAlgorithm' field in the sequence Certificate.
+ DERValue derSignatureAlgorithm = derSignature;
+
+ signatureAlgorithm.initSign(privateKey);
+ signatureAlgorithm.update(derTBSCertificate.getEncoded());
+ byte[] sigBytes = signatureAlgorithm.sign();
+ DERValue derSignatureValue = new DERValue(DER.BIT_STRING,
+ new BitString(sigBytes));
+
+ ArrayList certificate = new ArrayList(3);
+ certificate.add(derTBSCertificate);
+ certificate.add(derSignatureAlgorithm);
+ certificate.add(derSignatureValue);
+ DERValue derCertificate = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE,
+ certificate);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ DERWriter.write(baos, derCertificate);
+ byte[] result = baos.toByteArray();
+
+ log.exiting(this.getClass().getName(), "getSelfSignedCertificate"); //$NON-NLS-1$
+ return result;
+ }
+
+ /**
+ * This method attempts to find, and return, an OID representing the digital
+ * signature algorithm used to sign the certificate. The OIDs returned are
+ * those described in RFC-2459. They are listed here for the sake of
+ * completness.
+ *
+ * <pre>
+ * id-dsa-with-sha1 OBJECT IDENTIFIER ::= {
+ * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3
+ * }
+ *
+ * md2WithRSAEncryption OBJECT IDENTIFIER ::= {
+ * iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 2
+ * }
+ *
+ * md5WithRSAEncryption OBJECT IDENTIFIER ::= {
+ * iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 4
+ * }
+ *
+ * sha-1WithRSAEncryption OBJECT IDENTIFIER ::= {
+ * iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 5
+ * }
+ * </pre>
+ *
+ * <b>IMPORTANT</b>: This method checks the signature algorithm name against
+ * (a) The GNU algorithm implementation's name, and (b) publicly referenced
+ * names of the same algorithm. In other words this search is not
+ * comprehensive and may fail for uncommon names of the same algorithms.
+ *
+ * @return the OID of the signature algorithm in use.
+ * @throws InvalidParameterException if the concrete signature algorithm does
+ * not know its name, no OID is known/supported for that name, or we
+ * were unable to match the name to a known string for which we can
+ * return an OID.
+ */
+ protected OID getSignatureAlgorithmOID()
+ {
+ String algorithm = signatureAlgorithm.getAlgorithm();
+ // if we already have a non-null signature then the name was valid. the
+ // only case where algorithm is invalid would be if the implementation is
+ // flawed. check anyway
+ if (algorithm == null || algorithm.trim().length() == 0)
+ throw new InvalidParameterException(Messages.getString("Command.52")); //$NON-NLS-1$
+
+ algorithm = algorithm.trim();
+ if (algorithm.equalsIgnoreCase(Registry.DSS_SIG)
+ || algorithm.equalsIgnoreCase("SHA1withDSA")) //$NON-NLS-1$
+ return SHA1_WITH_DSA;
+
+ if (algorithm.equalsIgnoreCase(Registry.RSA_PKCS1_V1_5_SIG + "-" //$NON-NLS-1$
+ + Registry.MD2_HASH)
+ || algorithm.equalsIgnoreCase("MD2withRSA")) //$NON-NLS-1$
+ return MD2_WITH_RSA;
+
+ if (algorithm.equalsIgnoreCase(Registry.RSA_PKCS1_V1_5_SIG + "-" //$NON-NLS-1$
+ + Registry.MD5_HASH)
+ || algorithm.equalsIgnoreCase("MD5withRSA") //$NON-NLS-1$
+ || algorithm.equalsIgnoreCase("rsa")) //$NON-NLS-1$
+ return MD5_WITH_RSA;
+
+ if (algorithm.equalsIgnoreCase(Registry.RSA_PKCS1_V1_5_SIG + "-" //$NON-NLS-1$
+ + Registry.SHA160_HASH)
+ || algorithm.equalsIgnoreCase("SHA1withRSA")) //$NON-NLS-1$
+ return SHA1_WITH_RSA;
+
+ throw new InvalidParameterException(Messages.getFormattedString("Command.60", //$NON-NLS-1$
+ algorithm));
+ }
+
+ /**
+ * Saves the key store using the designated password. This operation is called
+ * by handlers if/when the key store password has changed, or amendements have
+ * been made to the contents of the store; e.g. addition of a new Key Entry or
+ * a Trusted Certificate.
+ *
+ * @param password the password protecting the key store.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws CertificateException if any of the certificates in the current key
+ * store could not be persisted.
+ * @throws NoSuchAlgorithmException if a required data integrity algorithm
+ * implementation was not found.
+ * @throws KeyStoreException if the key store has not been loaded previously.
+ */
+ protected void saveKeyStore(char[] password) throws IOException,
+ KeyStoreException, NoSuchAlgorithmException, CertificateException
+ {
+ log.entering(this.getClass().getName(), "saveKeyStore", String.valueOf(password)); //$NON-NLS-1$
+
+ URLConnection con = storeURL.openConnection();
+ con.setDoOutput(true);
+ con.setUseCaches(false);
+ OutputStream out = con.getOutputStream();
+ if (verbose)
+ System.out.println(Messages.getFormattedString("Command.63", storeURL.getPath())); //$NON-NLS-1$
+
+ store.store(out, password);
+ out.flush();
+ out.close();
+
+ log.exiting(this.getClass().getName(), "saveKeyStore"); //$NON-NLS-1$
+ }
+
+ /**
+ * Convenience method. Calls the method with the same name passing it the
+ * same password characters used to initially load the key-store.
+ *
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws KeyStoreException if the key store has not been loaded previously.
+ * @throws NoSuchAlgorithmException if a required data integrity algorithm
+ * implementation was not found.
+ * @throws CertificateException if any of the certificates in the current key
+ * store could not be persisted.
+ */
+ protected void saveKeyStore() throws IOException, KeyStoreException,
+ NoSuchAlgorithmException, CertificateException
+ {
+ saveKeyStore(storePasswordChars);
+ }
+
+ /**
+ * Prints a human-readable form of the designated certificate to a designated
+ * {@link PrintWriter}.
+ *
+ * @param certificate the certificate to process.
+ * @param writer where to print it.
+ * @throws CertificateEncodingException if an exception occurs while obtaining
+ * the DER encoded form <code>certificate</code>.
+ */
+ protected void printVerbose(Certificate certificate, PrintWriter writer)
+ throws CertificateEncodingException
+ {
+ X509Certificate x509 = (X509Certificate) certificate;
+ writer.println(Messages.getFormattedString("Command.66", x509.getSubjectDN())); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("Command.67", x509.getIssuerDN())); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("Command.68", x509.getSerialNumber())); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("Command.69", x509.getNotBefore())); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("Command.70", x509.getNotAfter())); //$NON-NLS-1$
+ writer.println(Messages.getString("Command.71")); //$NON-NLS-1$
+ byte[] derBytes = certificate.getEncoded();
+ writer.println(Messages.getFormattedString("Command.72", digest(md5, derBytes))); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("Command.73", digest(sha, derBytes))); //$NON-NLS-1$
+ }
+
+ /**
+ * Convenience method. Prints a human-readable form of the designated
+ * certificate to <code>System.out</code>.
+ *
+ * @param certificate the certificate to process.
+ * @throws CertificateEncodingException if an exception occurs while obtaining
+ * the DER encoded form <code>certificate</code>.
+ */
+ protected void printVerbose(Certificate certificate)
+ throws CertificateEncodingException
+ {
+ printVerbose(certificate, new PrintWriter(System.out, true));
+ }
+
+ /**
+ * Digest the designated contents with MD5 and return a string representation
+ * suitable for use as a fingerprint; i.e. sequence of hexadecimal pairs of
+ * characters separated by a colon.
+ *
+ * @param contents the non-null contents to digest.
+ * @return a sequence of hexadecimal pairs of characters separated by colons.
+ */
+ protected String digestWithMD5(byte[] contents)
+ {
+ return digest(md5, contents);
+ }
+
+ private String digest(IMessageDigest hash, byte[] encoded)
+ {
+ hash.update(encoded);
+ byte[] b = hash.digest();
+ StringBuilder sb = new StringBuilder().append(Util.toString(b, 0, 1));
+ for (int i = 1; i < b.length; i++)
+ sb.append(":").append(Util.toString(b, i, 1)); //$NON-NLS-1$
+
+ String result = sb.toString();
+ return result;
+ }
+
+ /**
+ * Ensure that the currently set Alias is contained in the currently set key
+ * store; otherwise throw an exception.
+ *
+ * @throws KeyStoreException if the keystore has not been loaded.
+ * @throws IllegalArgumentException if the currently set alias is not known to
+ * the currently set key store.
+ */
+ protected void ensureStoreContainsAlias() throws KeyStoreException
+ {
+ if (! store.containsAlias(alias))
+ throw new IllegalArgumentException(Messages.getFormattedString("Command.75", //$NON-NLS-1$
+ alias));
+ }
+
+ /**
+ * Ensure that the currently set Alias is associated with a Key Entry in the
+ * currently set key store; otherwise throw an exception.
+ *
+ * @throws KeyStoreException if the keystore has not been loaded.
+ * @throws SecurityException if the currently set alias is not a Key Entry in
+ * the currently set key store.
+ */
+ protected void ensureAliasIsKeyEntry() throws KeyStoreException
+ {
+ if (! store.isKeyEntry(alias))
+ throw new SecurityException(Messages.getFormattedString("Command.77", //$NON-NLS-1$
+ alias));
+ }
+
+ protected Key getAliasPrivateKey() throws KeyStoreException,
+ NoSuchAlgorithmException, IOException, UnsupportedCallbackException,
+ UnrecoverableKeyException
+ {
+ ensureAliasIsKeyEntry();
+ Key result;
+ if (keyPasswordChars == null)
+ try
+ {
+ result = store.getKey(alias, storePasswordChars);
+ // it worked. assign to keyPasswordChars for later use
+ keyPasswordChars = storePasswordChars;
+ }
+ catch (UnrecoverableKeyException x)
+ {
+ // prompt the user to provide one
+ setKeyPasswordParam();
+ result = store.getKey(alias, keyPasswordChars);
+ }
+ else
+ result = store.getKey(alias, keyPasswordChars);
+
+ return result;
+ }
+
+ /**
+ * Return a CallbackHandler which uses the Console (System.in and System.out)
+ * for interacting with the user.
+ * <p>
+ * This method first finds all currently installed security providers capable
+ * of providing such service and then in turn attempts to instantiate the
+ * handler from those providers. As soon as one provider returns a non-null
+ * instance of the callback handler, the search stops and that instance is
+ * set to be used from now on.
+ * <p>
+ * If no installed providers were found, this method falls back on the GNU
+ * provider, by-passing the Security search mechanism. The default console
+ * callback handler implementation is {@link ConsoleCallbackHandler}.
+ *
+ * @return a console-based {@link CallbackHandler}.
+ */
+ protected CallbackHandler getCallbackHandler()
+ {
+ if (handler == null)
+ handler = CallbackUtil.getConsoleHandler();
+
+ return handler;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/DeleteCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/DeleteCmd.java
new file mode 100644
index 0000000..968af50
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/DeleteCmd.java
@@ -0,0 +1,235 @@
+/* DeleteCmd.java -- The delete command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import java.io.IOException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <b>-delete</b> keytool command handler is used to delete from the key
+ * store the entry associated with a designated alias.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class DeleteCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(DeleteCmd.class.getName());
+ private String _alias;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setTheAlias(_alias);
+
+ log.finer("-delete handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException,
+ CertificateException, IOException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ ensureStoreContainsAlias();
+ store.deleteEntry(alias);
+ saveKeyStore();
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * Set the alias to delete from the key store.
+ * <p>
+ * Unlike in other keytool handlers, the default value (<i>mykey</i>) for the
+ * Alias is not used. Instead, if an alias was not found on the command line,
+ * the user is prompted to enter one.
+ *
+ * @param anAlias a possibly null Alias gleaned from the command line.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws UnsupportedCallbackException if no implementation of a password
+ * callback handler was found.
+ */
+ private void setTheAlias(String anAlias) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (anAlias == null || anAlias.trim().length() == 0)
+ {
+ String prompt = Messages.getString("DeleteCmd.19"); //$NON-NLS-1$
+ NameCallback ncb = new NameCallback(prompt);
+ getCallbackHandler().handle(new Callback[] { ncb });
+ anAlias = ncb.getName();
+ if (anAlias == null || anAlias.trim().length() == 0)
+ throw new SecurityException(Messages.getString("DeleteCmd.20")); //$NON-NLS-1$
+ }
+ alias = anAlias.trim();
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/ExportCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/ExportCmd.java
new file mode 100644
index 0000000..c1c0d4f
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/ExportCmd.java
@@ -0,0 +1,266 @@
+/* ExportCmd.java -- The export command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.java.security.util.Base64;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.security.KeyStoreException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.util.logging.Logger;
+
+/**
+ * The <b>-export</b> keytool command handler is used to read the certificate
+ * associated with a designated alias from the key store, and write it to a
+ * designated file.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-file FILE_NAME</dt>
+ * <dd>The fully qualified path of the file where the certificate will be
+ * exported to. If omitted, STDOUT will be used instead.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-rfc</dt>
+ * <dd>Use RFC-1421 specifications when encoding the output.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Output the certificate in binary DER encoding. This is the default
+ * output format of the command if neither <code>-rfc</code> nor
+ * <code>-v</code> options were detected on the command line. If both this
+ * option and the <code>-rfc</code> option are detected on the command
+ * line, the tool will opt for the RFC-1421 style encoding.</dd>
+ * </dl>
+ */
+class ExportCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(ExportCmd.class.getName());
+ private String _alias;
+ private String _certFileName;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private boolean rfc;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param pathName the fully qualified path name of the file to process. */
+ public void setFile(String pathName)
+ {
+ this._certFileName = pathName;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ /**
+ * @param flag whether to use, or not, RFC-1421 format when exporting the
+ * certificate(s).
+ */
+ public void setRfc(String flag)
+ {
+ this.rfc = Boolean.valueOf(flag).booleanValue();
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt);
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS
+ _alias = args[++i];
+ else if ("-file".equals(opt)) // -file FILE_NAME
+ _certFileName = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME
+ _providerClassName = args[++i];
+ else if ("-rfc".equals(opt))
+ rfc = true;
+ else if ("-v".equals(opt))
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setOutputStreamParam(_certFileName);
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+
+ log.finer("-export handler will use the following options:");
+ log.finer(" -alias=" + alias);
+ log.finer(" -file=" + _certFileName);
+ log.finer(" -storetype=" + storeType);
+ log.finer(" -keystore=" + storeURL);
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars));
+ log.finer(" -provider=" + provider);
+ log.finer(" -rfc=" + rfc);
+ log.finer(" -v=" + verbose);
+ }
+
+ void start() throws KeyStoreException, CertificateEncodingException,
+ IOException
+ {
+ log.entering(this.getClass().getName(), "start");
+
+ ensureStoreContainsAlias();
+ Certificate certificate;
+ if (store.isCertificateEntry(alias))
+ {
+ log.fine("Alias [" + alias + "] is a trusted certificate");
+ certificate = store.getCertificate(alias);
+ }
+ else
+ {
+ log.fine("Alias [" + alias + "] is a key entry");
+ Certificate[] chain = store.getCertificateChain(alias);
+ certificate = chain[0];
+ }
+
+ byte[] derBytes = certificate.getEncoded();
+ if (rfc)
+ {
+ String encoded = Base64.encode(derBytes, 0, derBytes.length, true);
+ PrintWriter pw = new PrintWriter(outStream, true);
+ pw.println("-----BEGIN CERTIFICATE-----");
+ pw.println(encoded);
+ pw.println("-----END CERTIFICATE-----");
+ }
+ else
+ outStream.write(derBytes);
+
+ // stream is closed in Command.teardown()
+ log.exiting(this.getClass().getName(), "start");
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/GenKeyCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/GenKeyCmd.java
new file mode 100644
index 0000000..2d92134
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/GenKeyCmd.java
@@ -0,0 +1,511 @@
+/* GenKeyCmd.java -- The genkey command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.java.security.util.Util;
+import gnu.java.security.x509.X500DistinguishedName;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.SignatureException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.TextInputCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <b>-genkey</b> keytool command handler is used to generate a key pair (a
+ * public, and associated private keys). It then generates a self-signed X509 v1
+ * certificate (authenticating the public key) and stores this certificate and
+ * the private key in the key store associating both to a designated alias.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-keyalg ALGORITHM</dt>
+ * <dd>Use this option to specify the canonical name of the key-pair
+ * generation algorithm. The default value for this option is
+ * <code>DSS</code> (a synonym for the Digital Signature Algorithm also
+ * known as <code>DSA</code>).
+ * <p></dd>
+ *
+ * <dt>-keysize KEY_SIZE</dt>
+ * <dd>Use this option to specify the number of bits of the shared modulus
+ * (for both the public and private keys) to use when generating new keys.
+ * A default value of <code>1024</code> will be used if this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-sigalg ALGORITHM</dt>
+ * <dd>The canonical name of the digital signature algorithm to use for
+ * signing certificates. If this option is omitted, a default value will be
+ * chosen based on the type of the key-pair; i.e. the algorithm that ends
+ * up being used by the <code>-keyalg</code> option. If the key-pair
+ * generation algorithm is <code>DSA</code>, the value for the signature
+ * algorithm will be <code>SHA1withDSA</code>. If on the other hand the
+ * key-pair generation algorithm is <code>RSA</code>, then the tool will
+ * use <code>MD5withRSA</code> as the signature algorithm.
+ * <p></dd>
+ *
+ * <dt>-dname NAME</dt>
+ * <dd>This a mandatory value for this command. If this option is omitted
+ * the tool will prompt you to enter a <i>Distinguished Name</i> to use as
+ * both the <i>Owner</i> and <i>Issuer</i> of the generated self-signed
+ * certificate.
+ * <p>
+ * The syntax of a valid value for this option MUST follow RFC-2253
+ * specifications. Namely the following components (with their accepted
+ * meaning) will be recognized. Note that the component name is case-
+ * insensitive:
+ * <dl>
+ * <dt>CN</dt>
+ * <dd>The Common Name; e.g. "host.domain.com"</dd>
+ *
+ * <dt>OU</dt>
+ * <dd>The Organizational Unit; e.g. "IT Department"</dd>
+ *
+ * <dt>O</dt>
+ * <dd>The Organization Name; e.g. "The Sample Company"</dd>
+ *
+ * <dt>L</dt>
+ * <dd>The Locality Name; e.g. "Sydney"</dd>
+ *
+ * <dt>ST</dt>
+ * <dd>The State Name; e.g. "New South Wales"</dd>
+ *
+ * <dt>C</dt>
+ * <dd>The 2-letter Country identifier; e.g. "AU"</dd>
+ * </dl>
+ * <p>
+ * When specified with a <code>-dname</code> option, each pair of component
+ * / value will be separated from the other with a comma. Each component
+ * and value pair MUST be separated by an equal sign. For example, the
+ * following is a valid DN value:
+ * <pre>
+ * CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
+ * </pre>
+ * If this option is omitted, the tool will prompt you to enter the
+ * information through the console.
+ * <p></dd>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ * <dd>Use this option to specify the password which the tool will use to
+ * protect the newly created Key Entry.
+ * <p>
+ * If this option is omitted, you will be prompted to provide a password.
+ * <p></dd>
+ *
+ * <dt>-validity DAY_COUNT</dt>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class GenKeyCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(GenKeyCmd.class.getName());
+ /** Default key size in bits. */
+ private static final int DEFAULT_KEY_SIZE = 1024;
+
+ private String _alias;
+ private String _keyAlgorithm;
+ private String _keySizeStr;
+ private String _sigAlgorithm;
+ private String _dName;
+ private String _password;
+ private String _validityStr;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private int keySize;
+ private X500DistinguishedName distinguishedName;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param algorithm the canonical name of the key-pair algorithm to use. */
+ public void setKeyalg(String algorithm)
+ {
+ this._keyAlgorithm = algorithm;
+ }
+
+ /**
+ * @param bits the string representation of the number of bits (a decimal
+ * positive integer) the modulus of the generated keys (private and
+ * public) should have.
+ */
+ public void setKeysize(String bits)
+ {
+ this._validityStr = bits;
+ }
+
+ /**
+ * @param algorithm the canonical name of the digital signature algorithm to
+ * use.
+ */
+ public void setSigalg(String algorithm)
+ {
+ this._sigAlgorithm = algorithm;
+ }
+
+ /** @param name the distiniguished name to use. */
+ public void setDname(String name)
+ {
+ this._dName = name;
+ }
+
+ /** @param password the (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /**
+ * @param days the string representation of the number of days (a decimal,
+ * positive integer) to assign to the generated certificate.
+ */
+ public void setValidity(String days)
+ {
+ this._validityStr = days;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-keyalg".equals(opt)) // -keyalg ALGORITHM //$NON-NLS-1$
+ _keyAlgorithm = args[++i];
+ else if ("-keysize".equals(opt)) // -keysize KEY_SIZE //$NON-NLS-1$
+ _keySizeStr = args[++i];
+ else if ("-sigalg".equals(opt)) // -sigalg ALGORITHM //$NON-NLS-1$
+ _sigAlgorithm = args[++i];
+ else if ("-dname".equals(opt)) // -dname NAME //$NON-NLS-1$
+ _dName = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ _password = args[++i];
+ else if ("-validity".equals(opt)) // -validity DAY_COUNT //$NON-NLS-1$
+ _validityStr = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordParam(_password);
+ setAlgorithmParams(_keyAlgorithm, _sigAlgorithm);
+ setKeySize(_keySizeStr);
+ setDName(_dName);
+ setValidityParam(_validityStr);
+
+ log.finer("-genkey handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -keyalg=" + keyPairGenerator.getAlgorithm()); //$NON-NLS-1$
+ log.finer(" -keysize=" + keySize); //$NON-NLS-1$
+ log.finer(" -sigalg=" + signatureAlgorithm.getAlgorithm()); //$NON-NLS-1$
+ log.finer(" -dname=" + distinguishedName); //$NON-NLS-1$
+ log.finer(" -keypass=" + String.valueOf(keyPasswordChars)); //$NON-NLS-1$
+ log.finer(" -validity=" + validityInDays); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws CertificateException, KeyStoreException,
+ InvalidKeyException, SignatureException, IOException,
+ NoSuchAlgorithmException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ // 1. generate a new key-pair
+ log.fine("About to generate key-pair...");
+ keyPairGenerator.initialize(keySize);
+ KeyPair kp = keyPairGenerator.generateKeyPair();
+ PublicKey publicKey = kp.getPublic();
+ PrivateKey privateKey = kp.getPrivate();
+
+ // 2. generate a self-signed certificate
+ log.fine("About to generate a self-signed certificate...");
+ byte[] derBytes = getSelfSignedCertificate(distinguishedName,
+ publicKey,
+ privateKey);
+ log.finest(Util.dumpString(derBytes, "derBytes ")); //$NON-NLS-1$
+ CertificateFactory x509Factory = CertificateFactory.getInstance(Main.X_509);
+ ByteArrayInputStream bais = new ByteArrayInputStream(derBytes);
+ Certificate certificate = x509Factory.generateCertificate(bais);
+ log.finest("certificate = " + certificate); //$NON-NLS-1$
+
+ // 3. store it, w/ its private key, associating them to alias
+ Certificate[] chain = new Certificate[] { certificate };
+ log.finest("About to store newly generated material in key store..."); //$NON-NLS-1$
+ store.setKeyEntry(alias, privateKey, keyPasswordChars, chain);
+
+ // 4. persist the key store
+ saveKeyStore();
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * @param size the desired key size as a string.
+ * @throws NumberFormatException if the string does not represent a valid
+ * decimal integer value.
+ */
+ private void setKeySize(String size)
+ {
+ if (size == null || size.trim().length() == 0)
+ this.keySize = DEFAULT_KEY_SIZE;
+ else
+ {
+ size = size.trim();
+ keySize = Integer.parseInt(size);
+ // When generating a DSA key pair, the key size must be in the range
+ // from 512 to 1024 bits, and must be a multiple of 64. The default
+ // key size for any algorithm is 1024 bits
+ if (keySize < 1)
+ throw new IllegalArgumentException(Messages.getString("GenKeyCmd.54")); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @param name the X.500 distinguished name of the principal for whom the
+ * key/certificate are being generated.
+ * @throws UnsupportedCallbackException if no implementation of a name
+ * callback is available.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws IllegalArgumentException if the designated, or captured, value is
+ * not a valid X.500 distinguished name.
+ */
+ private void setDName(String name) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (name != null && name.trim().length() > 0)
+ name = name.trim();
+ else
+ {
+ // prompt user to provide one
+ String dnTxt = Messages.getString("GenKeyCmd.0"); //$NON-NLS-1$
+ String oDefault = Messages.getString("GenKeyCmd.6"); //$NON-NLS-1$
+ String lDefault = Messages.getString("GenKeyCmd.7"); //$NON-NLS-1$
+ String stDefault = Messages.getString("GenKeyCmd.8"); //$NON-NLS-1$
+ String cDefault = Messages.getString("GenKeyCmd.9"); //$NON-NLS-1$
+ String cnPrompt = Messages.getString("GenKeyCmd.10"); //$NON-NLS-1$
+ String oPrompt = Messages.getFormattedString("GenKeyCmd.11", oDefault); //$NON-NLS-1$
+ String ouPrompt = Messages.getString("GenKeyCmd.13"); //$NON-NLS-1$
+ String lPrompt = Messages.getFormattedString("GenKeyCmd.14", lDefault); //$NON-NLS-1$
+ String stPrompt = Messages.getFormattedString("GenKeyCmd.16", stDefault); //$NON-NLS-1$
+ String cPrompt = Messages.getFormattedString("GenKeyCmd.18", cDefault); //$NON-NLS-1$
+
+ TextOutputCallback dnCB = new TextOutputCallback(TextOutputCallback.INFORMATION,
+ dnTxt);
+ TextInputCallback cnCB = new TextInputCallback(cnPrompt);
+ TextInputCallback oCB = new TextInputCallback(oPrompt, oDefault);
+ TextInputCallback ouCB = new TextInputCallback(ouPrompt);
+ TextInputCallback lCB = new TextInputCallback(lPrompt, lDefault);
+ TextInputCallback sCB = new TextInputCallback(stPrompt, stDefault);
+ TextInputCallback cCB = new TextInputCallback(cPrompt, cDefault);
+ getCallbackHandler().handle(new Callback[] { dnCB, cnCB, oCB, ouCB, lCB, sCB, cCB });
+ StringBuilder sb = new StringBuilder();
+
+ // handle CN
+ name = parseUserPrompt(cnCB);
+ if (name != null && name.length() > 0)
+ sb.append("CN=").append(name); //$NON-NLS-1$
+
+ // handle O
+ name = parseUserPrompt(oCB);
+ if (name != null && name.length() > 0)
+ sb.append(",O=").append(name); //$NON-NLS-1$
+
+ // handle OU
+ name = parseUserPrompt(ouCB);
+ if (name != null && name.length() > 0)
+ sb.append(",OU=").append(name.trim()); //$NON-NLS-1$
+
+ // handle L
+ name = parseUserPrompt(lCB);
+ if (name != null && name.length() > 0)
+ sb.append(",L=").append(name.trim()); //$NON-NLS-1$
+
+ // handle ST
+ name = parseUserPrompt(sCB);
+ if (name != null && name.length() > 0)
+ sb.append(",ST=").append(name.trim()); //$NON-NLS-1$
+
+ // handle C
+ name = parseUserPrompt(cCB);
+ if (name != null && name.length() > 0)
+ sb.append(",C=").append(name.trim()); //$NON-NLS-1$
+
+ name = sb.toString().trim();
+ }
+
+ log.fine("dName=[" + name + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+ distinguishedName = new X500DistinguishedName(name);
+ }
+
+ private String parseUserPrompt(TextInputCallback ticb)
+ {
+ String result = ticb.getText();
+ if (result == null || result.trim().length() == 0)
+ result = ticb.getDefaultText();
+ else if (result.trim().equals(".")) //$NON-NLS-1$
+ result = null;
+ else
+ result = result.trim();
+
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/IdentityDBCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/IdentityDBCmd.java
new file mode 100644
index 0000000..cb6b6da
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/IdentityDBCmd.java
@@ -0,0 +1,185 @@
+/* IdentityDBCmd.java -- The identitydb command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import java.util.logging.Logger;
+
+/**
+ * <b>NOT IMPLEMENTED YET</b>
+ * <p>
+ * The <b>-identitydb</b> keytool command handler is used to read the JDK 1.1.x-
+ * style identity database and add its entries to the key store. If a key store
+ * does not exist, it is created.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-file FILE_NAME</dt>
+ * <dd>The fully qualified path of the identity file to import. If this
+ * option is omitted, the tool will process STDIN.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class IdentityDBCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(IdentityDBCmd.class.getName());
+ private String _idbFileName;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param pathName the fully qualified path name of the file to process. */
+ public void setFile(String pathName)
+ {
+ this._idbFileName = pathName;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt);
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-file".equals(opt)) // -file FILE_NAME
+ _idbFileName = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt))
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setInputStreamParam(_idbFileName);
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+
+ log.finer("-identitydb handler will use the following options:");
+ log.finer(" -file=" + _idbFileName);
+ log.finer(" -storetype=" + storeType);
+ log.finer(" -keystore=" + storeURL);
+ log.finer(" -storepass=" + new String(storePasswordChars));
+ log.finer(" -provider=" + provider);
+ log.finer(" -v=" + verbose);
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/ImportCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/ImportCmd.java
new file mode 100644
index 0000000..b5058b5
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/ImportCmd.java
@@ -0,0 +1,751 @@
+/* ImportCmd.java -- The import command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.classpath.SystemProperties;
+import gnu.java.security.x509.X509CertPath;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertPathValidator;
+import java.security.cert.CertPathValidatorException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.PKIXCertPathValidatorResult;
+import java.security.cert.PKIXParameters;
+import java.security.interfaces.DSAParams;
+import java.security.interfaces.DSAPublicKey;
+import java.security.interfaces.RSAPublicKey;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.ConfirmationCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <code>-import</code> keytool command handler is used to read an X.509
+ * certificate, or a PKCS#7 Certificate Reply from a designated input source and
+ * incorporate the certificates into the key store.
+ * <p>
+ * If the <i>Alias</i> does not already exist in the key store, the tool treats
+ * the certificate read from the input source as a new Trusted Certificate. It
+ * then attempts to discover a chain-of-trust, starting from that certificate
+ * and ending at another <i>Trusted Certificate</i>, already stored in the key
+ * store. If the <code>-trustcacerts</code> option is present, an additional
+ * key store, of type <code>JKS</code> named <code>cacerts</code>, and assumed
+ * to be present in <code>${JAVA_HOME}/lib/security</code> will also be
+ * consulted if found --<code>${JAVA_HOME}</code> refers to the location of an
+ * installed Java Runtime Environment (JRE). If no chain-of-trust can be
+ * established, and unless the <code>-noprompt</code> option has been specified,
+ * the certificate is printed to STDOUT and the user is prompted for a
+ * confirmation.
+ * <p>
+ * If <i>Alias</i> exists in the key store, the tool will treat the
+ * certificate(s) read from the input source as a <i>Certificate Reply</i>,
+ * which can be a chain of certificates, that eventually would replace the chain
+ * of certificates associated with the <i>Key Entry</i> of that <i>Alias</i>.
+ * The substitution of the certificates only occurs if a chain-of-trust can be
+ * established between the bottom certificate of the chain read from the input
+ * file and the <i>Trusted Certificates</i> already present in the key store.
+ * Again, if the <code>-trustcacerts</code> option is specified, additional
+ * <i>Trusted Certificates</i> in the same <code>cacerts</code> key store will
+ * be considered. If no chain-of-trust can be established, the operation will
+ * abort.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-file FILE_NAME</dt>
+ * <dd>The fully qualified path of the file to read from. If omitted, the
+ * tool will process STDIN.
+ * <p></dd>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ * <dd>Use this option to specify the password which the tool will use to
+ * protect the <i>Key Entry</i> associated with the designated <i>Alias</i>,
+ * when replacing this <i>Alias</i>' chain of certificates with that found
+ * in the certificate reply.
+ * <p>
+ * If this option is omitted, and the chain-of-trust for the certificate
+ * reply has been established, the tool will first attempt to unlock the
+ * <i>Key Entry</i> using the same password protecting the key store. If
+ * this fails, you will then be prompted to provide a password.
+ * <p></dd>
+ *
+ * <dt>-noprompt</dt>
+ * <dd>Use this option to prevent the tool from prompting the user.
+ * <p></dd>
+ *
+ * <dt>-trustcacerts</dt>
+ * <dd>Use this option to indicate to the tool that a key store, of type
+ * <code>JKS</code>, named <code>cacerts</code>, and usually located in
+ * <code>lib/security</code> in an installed Java Runtime Environment
+ * should be considered when trying to establish chain-of-trusts.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class ImportCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(ImportCmd.class.getName());
+ private String _alias;
+ private String _certFileName;
+ private String _password;
+ private boolean noPrompt;
+ private boolean trustCACerts;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private CertificateFactory x509Factory;
+ private boolean imported;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the existing alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param pathName the fully qualified path name of the file to process. */
+ public void setFile(String pathName)
+ {
+ this._certFileName = pathName;
+ }
+
+ /** @param password the existing (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /**
+ * @param flag whether to prompt, or not, the user to verify certificate
+ * fingerprints.
+ */
+ public void setNoprompt(String flag)
+ {
+ this.noPrompt = Boolean.valueOf(flag).booleanValue();
+ }
+
+ /**
+ * @param flag whether to trust, or not, certificates found in the
+ * <code>cacerts</code> key store.
+ */
+ public void setTrustcacerts(String flag)
+ {
+ this.trustCACerts = Boolean.valueOf(flag).booleanValue();
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-file".equals(opt)) // -file FILE_NAME //$NON-NLS-1$
+ _certFileName = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ _password = args[++i];
+ else if ("-noprompt".equals(opt)) //$NON-NLS-1$
+ noPrompt = true;
+ else if ("-trustcacerts".equals(opt)) //$NON-NLS-1$
+ trustCACerts = true;
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setInputStreamParam(_certFileName);
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordNoPrompt(_password);
+
+ log.finer("-import handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -file=" + _certFileName); //$NON-NLS-1$
+ log.finer(" -keypass=" + _password); //$NON-NLS-1$
+ log.finer(" -noprompt=" + noPrompt); //$NON-NLS-1$
+ log.finer(" -trustcacerts=" + trustCACerts); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws CertificateException, KeyStoreException, IOException,
+ UnsupportedCallbackException, NoSuchAlgorithmException,
+ CertPathValidatorException, UnrecoverableKeyException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ x509Factory = CertificateFactory.getInstance("X.509"); //$NON-NLS-1$
+ // the alias will tell us whether we're dealing with
+ // a new trusted certificate or a certificate reply
+ if (! store.containsAlias(alias))
+ importNewTrustedCertificate();
+ else
+ {
+ ensureAliasIsKeyEntry();
+ importCertificateReply();
+ }
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * When importing a new trusted certificate, <i>alias</i> MUST NOT yet exist
+ * in the key store.
+ * <p>
+ * Before adding the certificate to the key store and associate it with the
+ * designated Alias, this method tries to verify it by attempting to construct
+ * a chain of trust from that certificate to a self-signed certificate
+ * (belonging to a root CA), using (already) trusted certificates that are
+ * available in the key store.
+ * <p>
+ * If the <code>-trustcacerts</code> option was detected on the command
+ * line, additional trusted certificates are considered for establishing the
+ * chain of trust. Those additional certificates are assumed to be in a key
+ * store, of type <code>JKS</code> named <code>cacerts</code> and usually
+ * located in <code>${JAVA_HOME}/lib/security</code>, where
+ * <code>${JAVA_HOME}</code> is the root folder location of a Java runtime.
+ * <p>
+ * If this method fails to establish a trust path from the certificate to be
+ * imported up to a trusted self-signed certificate, the certificate is
+ * printed to <code>STDOUT</code>, and the user is prompted to verify it,
+ * with the option of aborting the import operation. If however the option
+ * <code>-noprompt</code> was detected on the command line, no interaction
+ * with the user will take place and the import operation will abort.
+ *
+ * @throws CertificateException
+ * @throws KeyStoreException
+ * @throws NoSuchAlgorithmException
+ * @throws UnsupportedCallbackException
+ * @throws IOException
+ * @throws UnrecoverableKeyException
+ * @throws CertPathValidatorException
+ */
+ private void importNewTrustedCertificate() throws CertificateException,
+ KeyStoreException, NoSuchAlgorithmException, IOException,
+ UnsupportedCallbackException, CertPathValidatorException,
+ UnrecoverableKeyException
+ {
+ log.entering(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
+
+ Certificate certificate = x509Factory.generateCertificate(inStream);
+ log.finest("certificate = " + certificate); //$NON-NLS-1$
+ LinkedList orderedReply = new LinkedList();
+ orderedReply.addLast(certificate);
+
+ if (findTrustAndUpdate(orderedReply, ! noPrompt))
+ {
+ store.setCertificateEntry(alias, certificate);
+ System.out.println(Messages.getString("ImportCmd.29")); //$NON-NLS-1$
+ saveKeyStore();
+ }
+ else
+ System.out.println(Messages.getString("ImportCmd.28")); //$NON-NLS-1$
+
+ log.exiting(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
+ }
+
+ /**
+ * A certificate reply is a certificate, whose Owner is stored in the key
+ * store associated to the designated Alias, and now signed by supposedly a
+ * trusted CA (Certificate Authority). In other words, the Subject in this
+ * certificate reply is Alias's own and the Issuer is a CA.
+ * <p>
+ * When importing a certificate reply, the reply is validated using trusted
+ * certificates from the key store, and optionally (if the option
+ * <code>-trustcacerts</code> was detected on the command line) certificates
+ * found in the key store, of type <code>JKS</code> named <code>cacerts</code>
+ * located in <code>${JAVA_HOME}/lib/security</code>, where
+ * <code>${JAVA_HOME}</code> is the root folder location of a Java runtime.
+ *
+ * @throws CertificateException
+ * @throws UnsupportedCallbackException
+ * @throws IOException
+ * @throws KeyStoreException
+ * @throws CertPathValidatorException
+ * @throws NoSuchAlgorithmException
+ * @throws UnrecoverableKeyException
+ */
+ private void importCertificateReply() throws CertificateException,
+ IOException, UnsupportedCallbackException, KeyStoreException,
+ NoSuchAlgorithmException, CertPathValidatorException,
+ UnrecoverableKeyException
+ {
+ log.entering(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
+
+ Collection certificates = x509Factory.generateCertificates(inStream);
+ ensureReplyIsOurs(certificates);
+ // we now have established that the public keys are the same.
+ // find a chain-of-trust if one exists
+ if (certificates.size() == 1)
+ importCertificate((Certificate) certificates.iterator().next());
+ else
+ importChain(certificates);
+
+ log.exiting(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
+ }
+
+ /**
+ * If the reply is a single X.509 certificate, keytool attempts to establish a
+ * trust chain, starting at the certificate reply and ending at a self-signed
+ * certificate (belonging to a root CA). The certificate reply and the
+ * hierarchy of certificates used to authenticate the certificate reply form
+ * the new certificate chain of alias. If a trust chain cannot be established,
+ * the certificate reply is not imported. In this case, keytool does not print
+ * out the certificate, nor does it prompt the user to verify it. This is
+ * because it is very hard (if not impossible) for a user to determine the
+ * authenticity of the certificate reply.
+ *
+ * @param certificate the certificate reply to import into the key store.
+ * @throws NoSuchAlgorithmException
+ * @throws CertPathValidatorException
+ * @throws UnsupportedCallbackException
+ * @throws IOException
+ * @throws UnrecoverableKeyException
+ * @throws KeyStoreException
+ * @throws CertificateException
+ */
+ private void importCertificate(Certificate certificate)
+ throws NoSuchAlgorithmException, CertPathValidatorException,
+ KeyStoreException, UnrecoverableKeyException, IOException,
+ UnsupportedCallbackException, CertificateException
+ {
+ log.entering(this.getClass().getName(), "importCertificate", certificate); //$NON-NLS-1$
+
+ LinkedList reply = new LinkedList();
+ reply.addLast(certificate);
+
+ if (! findTrustAndUpdate(reply, false))
+ throw new CertPathValidatorException(Messages.getString("ImportCmd.34")); //$NON-NLS-1$
+
+ Certificate[] newChain = (Certificate[]) reply.toArray(new Certificate[0]);
+ Key privateKey = getAliasPrivateKey();
+ store.setKeyEntry(alias, privateKey, keyPasswordChars, newChain);
+ saveKeyStore();
+
+ log.exiting(this.getClass().getName(), "importCertificate"); //$NON-NLS-1$
+ }
+
+ /**
+ * If the reply is a PKCS#7 formatted certificate chain, the chain is first
+ * ordered (with the user certificate first and the self-signed root CA
+ * certificate last), before keytool attempts to match the root CA certificate
+ * provided in the reply with any of the trusted certificates in the key store
+ * or the "cacerts" keystore file (if the -trustcacerts option was specified).
+ * If no match can be found, the information of the root CA certificate is
+ * printed out, and the user is prompted to verify it, e.g., by comparing the
+ * displayed certificate fingerprints with the fingerprints obtained from some
+ * other (trusted) source of information, which might be the root CA itself.
+ * The user then has the option of aborting the import operation. If the
+ * -noprompt option is given, however, there will be no interaction with the
+ * user.
+ *
+ * @param chain the collection of certificates parsed from the user
+ * designated input.
+ * @throws UnsupportedCallbackException
+ * @throws IOException
+ * @throws UnrecoverableKeyException
+ * @throws KeyStoreException
+ * @throws CertPathValidatorException
+ * @throws NoSuchAlgorithmException
+ * @throws CertificateException
+ */
+ private void importChain(Collection chain) throws NoSuchAlgorithmException,
+ CertPathValidatorException, KeyStoreException, UnrecoverableKeyException,
+ IOException, UnsupportedCallbackException, CertificateException
+ {
+ log.entering(this.getClass().getName(), "importChain", chain); //$NON-NLS-1$
+
+ LinkedList reply = orderChain(chain);
+ if (findTrustAndUpdate(reply, ! noPrompt))
+ {
+ Certificate[] newChain = (Certificate[]) reply.toArray(new Certificate[0]);
+ Key privateKey = getAliasPrivateKey();
+ store.setKeyEntry(alias, privateKey, keyPasswordChars, newChain);
+ saveKeyStore();
+ }
+
+ log.exiting(this.getClass().getName(), "importChain"); //$NON-NLS-1$
+ }
+
+ /**
+ * Check to ensure that alias's public key is the subject of the first
+ * certificate in the passed certificate collection. Throws an exception if
+ * the public keys do not match.
+ *
+ * @param certificates a {@link Collection} of certificate replies (either a
+ * signle certificate reply, or a PKCS#7 certificate reply chain)
+ * usually sent by a CA as a response to a Certificate Signing
+ * Request (CSR).
+ * @throws IOException
+ * @throws UnsupportedCallbackException
+ * @throws KeyStoreException
+ */
+ private void ensureReplyIsOurs(Collection certificates) throws IOException,
+ UnsupportedCallbackException, KeyStoreException
+ {
+ log.entering(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
+
+ Certificate certificate = (Certificate) certificates.iterator().next();
+ log.finest("certificate = " + certificate); //$NON-NLS-1$
+ Certificate[] chain = store.getCertificateChain(alias);
+ if (chain == null)
+ throw new IllegalArgumentException(Messages.getFormattedString("ImportCmd.37", //$NON-NLS-1$
+ alias));
+ Certificate anchor = chain[0];
+ PublicKey anchorPublicKey = anchor.getPublicKey();
+ PublicKey certPublicKey = certificate.getPublicKey();
+ boolean sameKey;
+ if (anchorPublicKey instanceof DSAPublicKey)
+ {
+ DSAPublicKey pk1 = (DSAPublicKey) anchorPublicKey;
+ if (!(certPublicKey instanceof DSAPublicKey))
+ throw new IllegalArgumentException(Messages.getString("ImportCmd.38")); //$NON-NLS-1$
+
+ sameKey = areEqual(pk1, (DSAPublicKey) certPublicKey);
+ }
+ else if (anchorPublicKey instanceof RSAPublicKey)
+ {
+ RSAPublicKey pk1 = (RSAPublicKey) anchorPublicKey;
+ if (!(certPublicKey instanceof RSAPublicKey))
+ throw new IllegalArgumentException(Messages.getString("ImportCmd.38")); //$NON-NLS-1$
+
+ sameKey = areEqual(pk1, (RSAPublicKey) certPublicKey);
+ }
+ else
+ throw new IllegalArgumentException(
+ Messages.getFormattedString("ImportCmd.40", //$NON-NLS-1$
+ new String[] { alias,
+ anchorPublicKey.getClass().getName() }));
+ if (! sameKey)
+ throw new IllegalArgumentException(Messages.getString("ImportCmd.41")); //$NON-NLS-1$
+
+ log.exiting(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
+ }
+
+ private boolean areEqual(DSAPublicKey pk1, DSAPublicKey pk2)
+ {
+ if (pk1.getY().compareTo(pk2.getY()) != 0)
+ return false;
+
+ DSAParams p1 = pk1.getParams();
+ DSAParams p2 = pk2.getParams();
+ if (p1.getG().compareTo(p2.getG()) != 0)
+ return false;
+
+ if (p1.getP().compareTo(p2.getP()) != 0)
+ return false;
+
+ return p1.getQ().compareTo(p2.getQ()) == 0;
+ }
+
+ private boolean areEqual(RSAPublicKey pk1, RSAPublicKey pk2)
+ {
+ if (pk1.getPublicExponent().compareTo(pk2.getPublicExponent()) != 0)
+ return false;
+
+ return pk1.getModulus().compareTo(pk2.getModulus()) == 0;
+ }
+
+ /**
+ * @param chain
+ * @return the input collection, ordered with own certificate first, and CA's
+ * self-signed certificate last.
+ */
+ private LinkedList orderChain(Collection chain)
+ {
+ log.entering(this.getClass().getName(), "orderChain"); //$NON-NLS-1$
+
+ LinkedList result = new LinkedList();
+
+
+ log.entering(this.getClass().getName(), "orderChain", result); //$NON-NLS-1$
+ return result;
+ }
+
+ /**
+ * Given an ordered list of certificates, this method attempts to validate the
+ * chain, and if successful, updates the key store entry for the designated
+ * alias. The list of certificates is expected to be ordered as a chain, where
+ * the first is the alias's own certificate and the last being a self-signed
+ * CA certificate.
+ * <p>
+ * if <code>promptUser</code> is <code>true</code>, then even if no
+ * anchor trust certificate is found, the user is prompted to approve, or not,
+ * the import operation. On the other hand if the <code>promptUser</code>
+ * parameter is <code>false</code> then this method will throw an exception
+ * if no trust anchor is to be found.
+ *
+ * @param reply an ordered certificate path, where the last entry is the CA's
+ * self-signed certificate.
+ * @param promptUser a boolean flag indicating whether or not to prompt the
+ * user for explicit trust in a CA certificate.
+ * @return <code>true</code> if the validation succeeds; or <code>false</code>
+ * otherwise.
+ * @throws NoSuchAlgorithmException
+ * @throws CertPathValidatorException
+ * @throws UnsupportedCallbackException
+ * @throws IOException
+ * @throws UnrecoverableKeyException
+ * @throws KeyStoreException
+ * @throws CertificateEncodingException
+ */
+ private boolean findTrustAndUpdate(LinkedList reply, boolean promptUser)
+ throws IOException, NoSuchAlgorithmException, CertPathValidatorException,
+ KeyStoreException, UnrecoverableKeyException, UnsupportedCallbackException,
+ CertificateEncodingException
+ {
+ log.entering(this.getClass().getName(), "findTrustAndUpdate"); //$NON-NLS-1$
+
+ X509CertPath certPath = new X509CertPath(reply);
+ CertPathValidator validator = CertPathValidator.getInstance("PKIX"); //$NON-NLS-1$
+ PKIXCertPathValidatorResult cpvr = findTrustInStore(certPath, validator);
+ if (cpvr == null && trustCACerts)
+ cpvr = findTrustInCACerts(certPath, validator);
+
+ boolean result = false;
+ if (cpvr == null)
+ {
+ if (promptUser)
+ {
+ printVerbose((Certificate) reply.getLast());
+ ConfirmationCallback ccb;
+ ccb = new ConfirmationCallback(Messages.getString("ImportCmd.32"), //$NON-NLS-1$
+ ConfirmationCallback.INFORMATION,
+ ConfirmationCallback.YES_NO_OPTION,
+ ConfirmationCallback.NO);
+ getCallbackHandler().handle(new Callback[] { ccb });
+ int answer = ccb.getSelectedIndex();
+ result = answer == ConfirmationCallback.YES;
+ }
+ }
+ else
+ {
+ log.fine("Found a chain-of-trust anchored by " + cpvr.getTrustAnchor()); //$NON-NLS-1$
+ Certificate trustedCert = cpvr.getTrustAnchor().getTrustedCert();
+ reply.addLast(trustedCert);
+ result = true;
+ }
+
+ log.entering(this.getClass().getName(), "findTrustAndUpdate", //$NON-NLS-1$
+ Boolean.valueOf(result));
+ return result;
+ }
+
+ private PKIXCertPathValidatorResult findTrustInStore(X509CertPath certPath,
+ CertPathValidator validator)
+ {
+ log.entering(this.getClass().getName(), "findTrustInStore"); //$NON-NLS-1$
+
+ PKIXCertPathValidatorResult result;
+ try
+ {
+ PKIXParameters params = new PKIXParameters(store);
+ result = (PKIXCertPathValidatorResult) validator.validate(certPath, params);
+ }
+ catch (Exception x)
+ {
+ log.log(Level.FINE,
+ "Exception in findTrustInStore(). Ignore + Return NULL", //$NON-NLS-1$
+ x);
+ result = null;
+ }
+
+ log.exiting(this.getClass().getName(), "findTrustInStore", result); //$NON-NLS-1$
+ return result;
+ }
+
+ private PKIXCertPathValidatorResult findTrustInCACerts(X509CertPath certPath,
+ CertPathValidator validator)
+ {
+ log.entering(this.getClass().getName(), "findTrustInCACerts"); //$NON-NLS-1$
+
+ FileInputStream stream = null;
+ PKIXCertPathValidatorResult result = null;
+ try
+ {
+ KeyStore cacerts = KeyStore.getInstance("jks"); //$NON-NLS-1$
+ String cacertsPath = SystemProperties.getProperty("java.home");
+ String fs = SystemProperties.getProperty("file.separator"); //$NON-NLS-1$
+ cacertsPath = new StringBuilder(cacertsPath).append(fs)
+ .append("lib").append(fs) //$NON-NLS-1$
+ .append("security").append(fs) //$NON-NLS-1$
+ .append("cacerts").toString(); //$NON-NLS-1$
+ stream = new FileInputStream(cacertsPath);
+ cacerts.load(stream, "changeit".toCharArray()); //$NON-NLS-1$
+ PKIXParameters params = new PKIXParameters(cacerts);
+ result = (PKIXCertPathValidatorResult) validator.validate(certPath,
+ params);
+ }
+ catch (Exception x)
+ {
+ log.log(Level.FINE,
+ "Exception in findTrustInCACerts(). Ignore + Return NULL", //$NON-NLS-1$
+ x);
+ }
+ finally
+ {
+ if (stream != null)
+ try
+ {
+ stream.close();
+ }
+ catch (Exception ignored)
+ {
+ }
+ }
+
+ log.exiting(this.getClass().getName(), "findTrustInCACerts", result); //$NON-NLS-1$
+ return result;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyCloneCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyCloneCmd.java
new file mode 100644
index 0000000..5936719
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyCloneCmd.java
@@ -0,0 +1,344 @@
+/* KeyCloneCmd.java -- The keyclone command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import java.io.IOException;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <b>-keyclone</b> keytool command handler is used to clone an existing
+ * key store entry associated with a designated alias, with its private key and
+ * chain of certificates.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-dest ALIAS</dt>
+ * <dd>Use this option to specify the new <i>Alias</i> which will be used
+ * to identify the cloned copy of the <i>Key Entry</i>.
+ * <p></dd>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ * <dd>Use this option to specify the password which the tool will use to
+ * unlock the <i>Key Entry</i> associated with the designated <i>Alias</i>.
+ * <p>
+ * If this option is omitted, the tool will first attempt to unlock the
+ * <i>Key Entry</i> using the same password protecting the key store. If
+ * this fails, you will then be prompted to provide a password.
+ * <p></dd>
+ *
+ * <dt>-new PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the private key
+ * material of the newly cloned copy of the <i>Key Entry</i>.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class KeyCloneCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(KeyCloneCmd.class.getName());
+ private String _alias;
+ private String _destAlias;
+ private String _password;
+ private String _newPassword;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private String destinationAlias;
+ private char[] newKeyPasswordChars;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the existing alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param alias the new alias to use. */
+ public void setDest(String alias)
+ {
+ this._destAlias = alias;
+ }
+
+ /** @param password the existing (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /** @param password the new (private) key password to use. */
+ public void setNew(String password)
+ {
+ this._newPassword = password;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-dest".equals(opt)) // -dest ALIAS //$NON-NLS-1$
+ _destAlias = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ _password = args[++i];
+ else if ("-new".equals(opt)) // -new PASSWORD //$NON-NLS-1$
+ _newPassword = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordNoPrompt(_password);
+ setDestinationAlias(_destAlias);
+// setNewKeyPassword(_newPassword);
+
+ log.finer("-keyclone handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -dest=" + destinationAlias); //$NON-NLS-1$
+ log.finer(" -keypass=" + _password); //$NON-NLS-1$
+ log.finer(" -new=" + _newPassword); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
+ UnsupportedCallbackException, UnrecoverableKeyException,
+ CertificateException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ if (store.containsAlias(destinationAlias))
+ throw new SecurityException(Messages.getString("KeyCloneCmd.23")); //$NON-NLS-1$
+
+ Key privateKey = getAliasPrivateKey();
+
+ setNewKeyPassword(_newPassword);
+ Certificate[] chain = store.getCertificateChain(alias);
+
+ store.setKeyEntry(destinationAlias, privateKey, newKeyPasswordChars, chain);
+
+ saveKeyStore();
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ private void setDestinationAlias(String name) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (name == null || name.trim().length() == 0) // ask user to provide one
+ {
+ NameCallback ncb = new NameCallback(Messages.getString("KeyCloneCmd.26")); //$NON-NLS-1$
+ getCallbackHandler().handle(new Callback[] { ncb });
+ name = ncb.getName();
+ if (name == null || name.trim().length() == 0)
+ throw new IllegalArgumentException(Messages.getString("KeyCloneCmd.27")); //$NON-NLS-1$
+ }
+
+ destinationAlias = name.trim();
+ }
+
+ private void setNewKeyPassword(String password) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (password != null) // ask user to provide one
+ newKeyPasswordChars = password.toCharArray();
+ else
+ {
+ boolean ok = false;
+ Callback[] prompts = new Callback[1];
+ Callback[] errors = new Callback[1];
+ for (int i = 0; i < 3; i++)
+ if (prompt4NewPassword(getCallbackHandler(), prompts, errors))
+ {
+ ok = true;
+ break;
+ }
+ if (! ok)
+ throw new SecurityException(Messages.getString("StorePasswdCmd.19")); //$NON-NLS-1$
+ }
+ }
+
+ private boolean prompt4NewPassword(CallbackHandler handler,
+ Callback[] prompts, Callback[] errors)
+ throws IOException, UnsupportedCallbackException
+ {
+ String p = Messages.getFormattedString("KeyCloneCmd.28", //$NON-NLS-1$
+ new String[] { destinationAlias,
+ String.valueOf(keyPasswordChars) });
+ PasswordCallback pcb = new PasswordCallback(p, false);
+ prompts[0] = pcb;
+ handler.handle(prompts);
+ char[] pwd1 = pcb.getPassword();
+ pcb.clearPassword();
+ if (pwd1 == null || pwd1.length == 0)
+ {
+ newKeyPasswordChars = (char[]) keyPasswordChars.clone();
+ return true;
+ }
+
+ if (pwd1.length < 6)
+ {
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR,
+ Messages.getString("StorePasswdCmd.21")); //$NON-NLS-1$
+ handler.handle(errors);
+ return false;
+ }
+
+ newKeyPasswordChars = pwd1;
+ return true;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyPasswdCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyPasswdCmd.java
new file mode 100644
index 0000000..9dc7b81
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/KeyPasswdCmd.java
@@ -0,0 +1,339 @@
+/* KeyPasswdCmd.java -- The keypasswd command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.classpath.SystemProperties;
+
+import java.io.IOException;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.util.Arrays;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <b>-keypasswd</b> keytool command handler is used to change the password
+ * protecting the private key associated to a designated alias.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ * <dd>Use this option to specify the password which the tool will use to
+ * unlock the <i>Key Entry</i> associated with the designated <i>Alias</i>.
+ * <p>
+ * If this option is omitted, the tool will first attempt to unlock the
+ * <i>Key Entry</i> using the same password protecting the key store. If
+ * this fails, you will then be prompted to provide a password.
+ * <p></dd>
+ *
+ * <dt>-new PASSWORD</dt>
+ * <dd>The new, and different, password which will be used to protect the
+ * private key material of the designated Key Entry.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class KeyPasswdCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(KeyPasswdCmd.class.getName());
+ private String _alias;
+ private String _password;
+ private String _newPassword;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private char[] newPasswordChars;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param password the existing (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /** @param password the new (private) key password to use. */
+ public void setNew(String password)
+ {
+ this._newPassword = password;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD //$NON-NLS-1$
+ _password = args[++i];
+ else if ("-new".equals(opt)) // -new PASSWORD //$NON-NLS-1$
+ _newPassword = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordNoPrompt(_password);
+// setNewKeyPassword(_newPassword);
+
+ log.finer("-keypasswd handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -keypass=" + _password); //$NON-NLS-1$
+ log.finer(" -new=" + _newPassword); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
+ UnsupportedCallbackException, UnrecoverableKeyException,
+ CertificateException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ // 1. get the key entry and certificate chain associated to alias
+ Key privateKey = getAliasPrivateKey();
+ Certificate[] chain = store.getCertificateChain(alias);
+
+ // 2. replace the old entry
+ setNewKeyPassword(_newPassword);
+ store.setKeyEntry(alias, privateKey, newPasswordChars, chain);
+
+ // 3. persist the key store
+ saveKeyStore();
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * Set the new password to use for protecting Alias's private key.
+ *
+ * @param password the new key password. if <code>null</code> prompt the
+ * user to provide one. When prompting, the password is entered twice
+ * and compared for a match.
+ * @throws IOException if an I/O related exception occurs during the process.
+ * @throws UnsupportedCallbackException if no implementation of a password
+ * callback handler was found.
+ */
+ private void setNewKeyPassword(String password) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (password != null)
+ newPasswordChars = password.toCharArray();
+ else
+ {
+ boolean ok = false;
+ Callback[] prompts = new Callback[1];
+ Callback[] errors = new Callback[1];
+ for (int i = 0; i < 3; i++)
+ if (prompt4NewPassword(getCallbackHandler(), prompts, errors))
+ {
+ ok = true;
+ break;
+ }
+ if (! ok)
+ throw new SecurityException(Messages.getString("StorePasswdCmd.19")); //$NON-NLS-1$
+ }
+ }
+
+ private boolean prompt4NewPassword(CallbackHandler handler,
+ Callback[] prompts, Callback[] errors)
+ throws IOException, UnsupportedCallbackException
+ {
+ // prompt user (1st time) to provide one
+ String p = Messages.getFormattedString("KeyPasswdCmd.24", alias); //$NON-NLS-1$
+ PasswordCallback pcb = new PasswordCallback(p, false);
+ prompts[0] = pcb;
+ handler.handle(prompts);
+ char[] pwd1 = pcb.getPassword();
+ pcb.clearPassword();
+ String ls = SystemProperties.getProperty("line.separator"); //$NON-NLS-1$
+ if (pwd1 == null || pwd1.length < 6)
+ {
+ String m = Messages.getString("StorePasswdCmd.21") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ if (Arrays.equals(keyPasswordChars, pwd1))
+ {
+ String m = Messages.getString("StorePasswdCmd.22") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ // prompt user (2nd time) for confirmation
+ p = Messages.getFormattedString("KeyPasswdCmd.28", alias); //$NON-NLS-1$
+ pcb = new PasswordCallback(p, false);
+ prompts[0] = pcb;
+ handler.handle(prompts);
+ char[] pwd2 = pcb.getPassword();
+ pcb.clearPassword();
+ if (! Arrays.equals(pwd1, pwd2))
+ {
+ String m = Messages.getString("StorePasswdCmd.24") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ newPasswordChars = pwd2;
+ return true;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/ListCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/ListCmd.java
new file mode 100644
index 0000000..6552427
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/ListCmd.java
@@ -0,0 +1,380 @@
+/* ListCmd.java -- The list command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.java.security.util.Base64;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.security.KeyStoreException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.util.Enumeration;
+import java.util.logging.Logger;
+
+/**
+ * The <b>-list</b> keytool command handler is used to output one or all key
+ * store entries.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-rfc</dt>
+ * <dd>Use RFC-1421 specifications when encoding the output.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Output the certificate in human-readable format. If both this option
+ * and the <code>-rfc</code> option are detected on the command line, the
+ * tool will opt for the human-readable form and will not abort the
+ * command.</dd>
+ * </dl>
+ */
+class ListCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(ListCmd.class.getName());
+ private String _alias;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private boolean rfc;
+ private boolean all;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ /**
+ * @param flag whether to use, or not, RFC-1421 format when listing the
+ * certificate(s).
+ */
+ public void setRfc(String flag)
+ {
+ this.rfc = Boolean.valueOf(flag).booleanValue();
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS //$NON-NLS-1$
+ _alias = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else if ("-rfc".equals(opt)) //$NON-NLS-1$
+ rfc = true;
+ else
+ break;
+ }
+
+ all = _alias == null;
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setOutputStreamParam(null); // use stdout
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ if (! all)
+ setAliasParam(_alias);
+
+ if (verbose & rfc)
+ {
+ log.warning("Both -v and -rfc options were found on the command line. " //$NON-NLS-1$
+ + "Only the former will be considered"); //$NON-NLS-1$
+ rfc = false;
+ }
+
+ log.finer("-list handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -alias=" + alias); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ log.finer(" -rfc=" + rfc); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, CertificateEncodingException,
+ IOException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ PrintWriter writer = new PrintWriter(outStream, true);
+ writer.println(Messages.getFormattedString("ListCmd.21", store.getType())); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("ListCmd.22", //$NON-NLS-1$
+ store.getProvider().getName()));
+ if (all)
+ {
+ log.finest("About to list all aliases in key store..."); //$NON-NLS-1$
+ writer.println();
+ writer.println(Messages.getFormattedString("ListCmd.24", //$NON-NLS-1$
+ Integer.valueOf(store.size())));
+ for (Enumeration e = store.aliases(); e.hasMoreElements(); )
+ {
+ String anAlias = (String) e.nextElement();
+ if (anAlias != null)
+ list1Alias(anAlias, writer);
+ }
+ }
+ else
+ list1Alias(alias, writer);
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ /**
+ * Prints the certificate(s) associated with the designated alias.
+ *
+ * @param anAlias a non-null string denoting an alias in the key-store.
+ * @param writer where to print.
+ * @throws KeyStoreException if an exception occurs while obtaining the
+ * certificate associated to the designated alias.
+ * @throws CertificateEncodingException if an exception occurs while obtaining
+ * the DER encoded form of the certificate.
+ * @throws IOException if an I/O related exception occurs during the process.
+ */
+ private void list1Alias(String anAlias, PrintWriter writer)
+ throws KeyStoreException, CertificateEncodingException, IOException
+ {
+ log.entering(this.getClass().getName(), "list1Alias", anAlias); //$NON-NLS-1$
+
+ writer.println();
+ writer.println(Messages.getFormattedString("ListCmd.30", anAlias)); //$NON-NLS-1$
+ writer.println(Messages.getFormattedString("ListCmd.31", store.getCreationDate(anAlias))); //$NON-NLS-1$
+
+ if (store.isCertificateEntry(anAlias))
+ {
+ writer.println(Messages.getString("ListCmd.32")); //$NON-NLS-1$
+ Certificate certificate = store.getCertificate(anAlias);
+ print1Certificate(certificate, writer);
+ }
+ else if (store.isKeyEntry(anAlias))
+ {
+ writer.println(Messages.getString("ListCmd.33")); //$NON-NLS-1$
+ Certificate[] chain = store.getCertificateChain(anAlias);
+ print1Chain(chain, writer);
+ }
+ else
+ throw new IllegalArgumentException(Messages.getFormattedString("ListCmd.34", //$NON-NLS-1$
+ anAlias));
+ log.exiting(this.getClass().getName(), "list1Alias"); //$NON-NLS-1$
+ }
+
+ /**
+ * Prints the designated certificate chain, or a fingerprint of the first
+ * certificate (bottom) in the chain, depending on the values of the flags
+ * <code>v</code> (for verbose) and <code>rfc</code>.
+ * <p>
+ * If both flags are <code>false</code>, only the fingerprint is generated,
+ * otherwise, if the <code>v</code> flag is set, then a human readable output
+ * is generated. If <code>rfc</code> is set, then an RFC-1421 like output
+ * is generated.
+ * <p>Note that both <code>v</code> and <code>rfc</code> cannot both be
+ * <code>true</code> at the same time.
+ *
+ * @param chain the certificate chain to process.
+ * @param writer where to print.
+ * @throws CertificateEncodingException if an exception occurs while obtaining
+ * the DER encoded form of the certificate.
+ */
+ private void print1Chain(Certificate[] chain, PrintWriter writer)
+ throws CertificateEncodingException
+ {
+ if (!verbose && !rfc)
+ fingerprint(chain[0], writer);
+ else
+ {
+ int limit = chain.length;
+ writer.println(Messages.getFormattedString("ListCmd.38", //$NON-NLS-1$
+ Integer.valueOf(limit)));
+ writer.println(Messages.getString("ListCmd.39")); //$NON-NLS-1$
+ print1Certificate(chain[0], writer);
+ for (int i = 1; i < limit; i++)
+ {
+ writer.println();
+ writer.println(Messages.getFormattedString("ListCmd.40", //$NON-NLS-1$
+ Integer.valueOf(i + 1)));
+ print1Certificate(chain[i], writer);
+ }
+ writer.println();
+ writer.println(Messages.getString("ListCmd.42")); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * Prints the designated certificate, or its fingerprint, depending on the
+ * values of the flags <code>v</code> (for verbose) and <code>rfc</code>.
+ * <p>
+ * If both flags are <code>false</code>, only a fingerprint is generated,
+ * otherwise, if the <code>v</code> flag is set, then a human readable output
+ * is generated. If <code>rfc</code> is set, then an RFC-1421 like output
+ * is generated.
+ * <p>Note that both <code>v</code> and <code>rfc</code> cannot both be
+ * <code>true</code> at the same time.
+ *
+ * @param certificate the certificate to process.
+ * @param writer where to print.
+ * @throws CertificateEncodingException if an exception occurs while obtaining
+ * the DER encoded form of the certificate.
+ */
+ private void print1Certificate(Certificate certificate, PrintWriter writer)
+ throws CertificateEncodingException
+ {
+ if (verbose)
+ printVerbose(certificate, writer);
+ else if (rfc)
+ printRFC1421(certificate, writer);
+ else
+ fingerprint(certificate, writer);
+ }
+
+ private void printRFC1421(Certificate certificate, PrintWriter writer)
+ throws CertificateEncodingException
+ {
+ byte[] derBytes = certificate.getEncoded();
+ String encoded = Base64.encode(derBytes, 0, derBytes.length, true);
+ writer.println(Messages.getString("ListCmd.43")); //$NON-NLS-1$
+ writer.println(encoded);
+ writer.println(Messages.getString("ListCmd.44")); //$NON-NLS-1$
+ }
+
+ private void fingerprint(Certificate certificate, PrintWriter writer)
+ throws CertificateEncodingException
+ {
+ byte[] derBytes = certificate.getEncoded();
+ String fingerPrint = digestWithMD5(derBytes);
+ writer.println(Messages.getFormattedString("ListCmd.45", fingerPrint)); //$NON-NLS-1$
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/Main.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/Main.java
new file mode 100644
index 0000000..fb7aa45
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/Main.java
@@ -0,0 +1,219 @@
+/* Main.java -- Implementation of the keytool security tool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.classpath.tools.HelpPrinter;
+import gnu.classpath.tools.common.ProviderUtil;
+import gnu.java.security.Registry;
+import gnu.javax.crypto.jce.GnuCrypto;
+import gnu.javax.security.auth.callback.GnuCallbacks;
+
+import java.util.logging.Logger;
+
+/**
+ * The GNU Classpath implementation of the keytool security tool.
+ * <p>
+ * Except for the <code>-identitydb</code> command, available for importing
+ * JDK 1.1 <i>identities</i> into a key store, this implementation is intended
+ * to be compatible with the behaviour described in the public documentation of
+ * the same tool included in JDK 1.4.
+ */
+public class Main
+{
+ private static final Logger log = Logger.getLogger(Main.class.getName());
+ /** The relative file path to the command tool's help text. */
+ private static final String HELP_PATH = "keytool/keytool.txt"; //$NON-NLS-1$
+ /** The Preferences key name for the last issued certificate serial nbr. */
+ static final String LAST_SERIAL_NUMBER = "lastSerialNumber"; //$NON-NLS-1$
+ /** Constant denoting the X.509 certificate type. */
+ static final String X_509 = "X.509"; //$NON-NLS-1$
+
+ /** Whether we have already printed the help text or not. */
+ private boolean helpPrinted;
+ /** The new position of GnuCRYPTO provider if it is not already installed. */
+ private int gnuCryptoProviderNdx = -2;
+ /** The new position of GNU Callbacks provider if it is not already installed. */
+ private int gnuCallbacksNdx = -2;
+
+ private Main()
+ {
+ super();
+ }
+
+ public static final void main(String[] args)
+ {
+ log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
+
+ Main tool = new Main();
+ try
+ {
+ tool.setup();
+ tool.start(args);
+ }
+ catch (SecurityException x)
+ {
+ log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
+ System.err.println(Messages.getString("Main.6") + x.getMessage()); //$NON-NLS-1$
+ }
+ catch (Exception x)
+ {
+ log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
+ System.err.println(Messages.getString("Main.8") + x); //$NON-NLS-1$
+ }
+ finally
+ {
+ tool.teardown();
+ }
+
+ log.exiting(Main.class.getName(), "main"); //$NON-NLS-1$
+ // System.exit(0);
+ }
+
+ // helper methods -----------------------------------------------------------
+
+ private void start(String[] args) throws Exception
+ {
+ log.entering(this.getClass().getName(), "start", args); //$NON-NLS-1$
+
+ if (args == null)
+ args = new String[0];
+
+ int limit = args.length;
+ log.finest("args.length=" + limit); //$NON-NLS-1$
+ int i = 0;
+ String opt;
+ Command cmd;
+ while (i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ cmd = null;
+ if ("-genkey".equals(opt)) //$NON-NLS-1$
+ cmd = new GenKeyCmd();
+ else if ("-import".equals(opt)) //$NON-NLS-1$
+ cmd = new ImportCmd();
+ else if ("-selfcert".equals(opt)) //$NON-NLS-1$
+ cmd = new SelfCertCmd();
+ else if ("-identitydb".equals(opt)) //$NON-NLS-1$
+ cmd = new IdentityDBCmd();
+ else if ("-certreq".equals(opt)) //$NON-NLS-1$
+ cmd = new CertReqCmd();
+ else if ("-export".equals(opt)) //$NON-NLS-1$
+ cmd = new ExportCmd();
+ else if ("-list".equals(opt)) //$NON-NLS-1$
+ cmd = new ListCmd();
+ else if ("-printcert".equals(opt)) //$NON-NLS-1$
+ cmd = new PrintCertCmd();
+ else if ("-keyclone".equals(opt)) //$NON-NLS-1$
+ cmd = new KeyCloneCmd();
+ else if ("-storepasswd".equals(opt)) //$NON-NLS-1$
+ cmd = new StorePasswdCmd();
+ else if ("-keypasswd".equals(opt)) //$NON-NLS-1$
+ cmd = new KeyPasswdCmd();
+ else if ("-delete".equals(opt)) //$NON-NLS-1$
+ cmd = new DeleteCmd();
+ else if ("-help".equals(opt)) //$NON-NLS-1$
+ {
+ printHelp();
+ i++;
+ }
+ else
+ {
+ log.fine("Unknown command [" + opt + "] at index #" + i //$NON-NLS-1$ //$NON-NLS-2$
+ + ". Arguments from that token onward will be ignored"); //$NON-NLS-1$
+ break;
+ }
+
+ if (cmd != null)
+ {
+ i = cmd.processArgs(args, i);
+ cmd.doCommand();
+ }
+ }
+
+ // the -help command is the default; i.e.
+ // keytool
+ // is equivalent to:
+ // keytool -help
+ if (i == 0)
+ printHelp();
+
+ if (i < limit) // more options than needed
+ log.fine("Last recognized argument is assumed at index #" + (i - 1) //$NON-NLS-1$
+ + ". Remaining arguments (" + args[i] + "...) will be ignored"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ private void setup()
+ {
+ log.entering(this.getClass().getName(), "setup"); //$NON-NLS-1$
+
+ gnuCryptoProviderNdx = ProviderUtil.addProvider(new GnuCrypto());
+ gnuCallbacksNdx = ProviderUtil.addProvider(new GnuCallbacks());
+
+ log.exiting(this.getClass().getName(), "setup"); //$NON-NLS-1$
+ }
+
+ private void teardown()
+ {
+ log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+
+ // if we added our own providers remove them
+ if (gnuCryptoProviderNdx > 0)
+ ProviderUtil.removeProvider(Registry.GNU_CRYPTO);
+
+ if (gnuCallbacksNdx > 0)
+ ProviderUtil.removeProvider("GNU-CALLBACKS"); //$NON-NLS-1$
+
+ log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
+ }
+
+ private void printHelp()
+ {
+ if (helpPrinted)
+ return;
+
+ HelpPrinter.printHelp(HELP_PATH);
+ helpPrinted = true;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/Messages.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/Messages.java
new file mode 100644
index 0000000..e3308e0
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/Messages.java
@@ -0,0 +1,115 @@
+/* Messages.java -- I18N related helper class
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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, or (at your option)
+ any later version.
+
+ GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+/**
+ * An initially generated Eclipse helper class to ease the use of localized
+ * messages.
+ * <p>
+ * Enriched to handle localized message formats.
+ */
+class Messages
+{
+ private static final Logger log = Logger.getLogger(Messages.class.getName());
+ private static final String BUNDLE_NAME = "gnu.classpath.tools.keytool.MessageBundle"; //$NON-NLS-1$
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+ private static final Map CACHED_FORMATS = new HashMap(5);
+
+ private Messages()
+ {
+ super();
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return constructMessage(key, null);
+ }
+ }
+
+ public static String getFormattedString(String key, Object args)
+ {
+ MessageFormat mf = (MessageFormat) CACHED_FORMATS.get(key);
+ if (mf == null)
+ {
+ String formatString = getString(key);
+ if (formatString.startsWith("!"))
+ return constructMessage(key, args);
+
+ mf = new MessageFormat(formatString);
+ CACHED_FORMATS.put(key, mf);
+ }
+
+ // if the argument is not an array, then build one consisiting of the
+ // sole argument before passing it to the format() method
+ try
+ {
+ if (args instanceof Object[])
+ return mf.format(args);
+
+ return mf.format(new Object[] { args });
+ }
+ catch (IllegalArgumentException x)
+ {
+ log.fine("Exception while rendering a message format keyed by ["
+ + key + "]: " + mf.toPattern());
+ return constructMessage(mf.toPattern(), args);
+ }
+ }
+
+ private static final String constructMessage(String m, Object args)
+ {
+ if (args == null)
+ return '!' + m + '!';
+
+ return '!' + m + '!' + String.valueOf(args) + '!';
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/PrintCertCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/PrintCertCmd.java
new file mode 100644
index 0000000..9ba1d59
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/PrintCertCmd.java
@@ -0,0 +1,123 @@
+/* PrintCertCmd.java -- The printcert command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import java.io.PrintWriter;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.util.logging.Logger;
+
+/**
+ * The <b>-printcert</b> keytool command handler is used to read a certificate
+ * from a designated file, and print its contents in a human-readable format.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-file FILE_NAME</dt>
+ * <dd>The fully qualified path of the file to read the certificate from.
+ * If this option is omitted, the tool will process STDIN.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class PrintCertCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(PrintCertCmd.class.getName());
+ private String _certFileName;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param pathName the fully qualified path name of the file to process. */
+ public void setFile(String pathName)
+ {
+ this._certFileName = pathName;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt);
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-file".equals(opt)) // -file FILE_NAME
+ _certFileName = args[++i];
+ else if ("-v".equals(opt))
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setInputStreamParam(_certFileName);
+
+ log.finer("-printcert handler will use the following options:");
+ log.finer(" -file=" + _certFileName);
+ log.finer(" -v=" + verbose);
+ }
+
+ void start() throws CertificateException
+ {
+ log.entering(getClass().getName(), "start");
+
+ CertificateFactory x509Factory = CertificateFactory.getInstance(Main.X_509);
+ Certificate certificate = x509Factory.generateCertificate(inStream);
+ PrintWriter writer = new PrintWriter(System.out, true);
+ writer.println();
+ printVerbose(certificate, writer);
+
+ log.exiting(getClass().getName(), "start");
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/SelfCertCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/SelfCertCmd.java
new file mode 100644
index 0000000..db7d459
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/SelfCertCmd.java
@@ -0,0 +1,371 @@
+/* SelfCertCmd.java -- The selfcert command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.java.security.x509.X500DistinguishedName;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.SignatureException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.x500.X500Principal;
+
+/**
+ * The <b>-selfcert</b> keytool command handler is used to generate a self-
+ * signed X.509 version 1 certificate using key store credentials stored under a
+ * designated alias.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-alias ALIAS</dt>
+ * <dd>Every entry, be it a <i>Key Entry</i> or a <i>Trusted
+ * Certificate</i>, in a key store is uniquely identified by a user-defined
+ * <i>Alias</i> string. Use this option to specify the <i>Alias</i> to use
+ * when referring to an entry in the key store. Unless specified otherwise,
+ * a default value of <code>mykey</code> shall be used when this option is
+ * omitted from the command line.
+ * <p></dd>
+ *
+ * <dt>-sigalg ALGORITHM</dt>
+ * <dd>The canonical name of the digital signature algorithm to use for
+ * signing the certificate. If this option is omitted, a default value will
+ * be chosen based on the type of the private key associated with the
+ * designated <i>Alias</i>. If the private key is a <code>DSA</code> one,
+ * the value for the signature algorithm will be <code>SHA1withDSA</code>.
+ * If on the other hand the private key is an <code>RSA</code> one, then
+ * the tool will use <code>MD5withRSA</code> as the signature algorithm.
+ * <p></dd>
+ *
+ * <dt>-dname NAME</dt>
+ * <dd>Use this option to specify the <i>Distinguished Name</i> of the
+ * newly generated self-signed certificate. If this option is omitted, the
+ * existing <i>Distinguished Name</i> of the base certificate in the chain
+ * associated with the designated <i>Alias</i> will be used instead.
+ * <p>
+ * The syntax of a valid value for this option MUST follow RFC-2253
+ * specifications. Namely the following components (with their accepted
+ * meaning) will be recognized. Note that the component name is case-
+ * insensitive:
+ * <dl>
+ * <dt>CN</dt>
+ * <dd>The Common Name; e.g. "host.domain.com"</dd>
+ *
+ * <dt>OU</dt>
+ * <dd>The Organizational Unit; e.g. "IT Department"</dd>
+ *
+ * <dt>O</dt>
+ * <dd>The Organization Name; e.g. "The Sample Company"</dd>
+ *
+ * <dt>L</dt>
+ * <dd>The Locality Name; e.g. "Sydney"</dd>
+ *
+ * <dt>ST</dt>
+ * <dd>The State Name; e.g. "New South Wales"</dd>
+ *
+ * <dt>C</dt>
+ * <dd>The 2-letter Country identifier; e.g. "AU"</dd>
+ * </dl>
+ * <p>
+ * When specified with a <code>-dname</code> option, each pair of component
+ * / value will be separated from the other with a comma. Each component
+ * and value pair MUST be separated by an equal sign. For example, the
+ * following is a valid DN value:
+ * <pre>
+ * CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
+ * </pre>
+ * <p></dd>
+ *
+ * <dt>-validity DAY_COUNT</dt>
+ *
+ * <dt>-keypass PASSWORD</dt>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class SelfCertCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(SelfCertCmd.class.getName());
+ private String _alias;
+ private String _sigAlgorithm;
+ private String _dName;
+ private String _password;
+ private String _validityStr;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private X500DistinguishedName distinguishedName;
+ private int validityInDays;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param alias the alias to use. */
+ public void setAlias(String alias)
+ {
+ this._alias = alias;
+ }
+
+ /**
+ * @param algorithm the canonical name of the digital signature algorithm to
+ * use.
+ */
+ public void setSigalg(String algorithm)
+ {
+ this._sigAlgorithm = algorithm;
+ }
+
+ /**
+ * @param name the distiniguished name of both the issuer and subject (since
+ * we are dealing with a self-signed certificate) to use.
+ */
+ public void setDname(String name)
+ {
+ this._dName = name;
+ }
+
+ /**
+ * @param days the string representation of the number of days (a decimal,
+ * positive integer) to assign to the generated (self-signed)
+ * certificate.
+ */
+ public void setValidity(String days)
+ {
+ this._validityStr = days;
+ }
+
+ /** @param password the (private) key password to use. */
+ public void setKeypass(String password)
+ {
+ this._password = password;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt);
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-alias".equals(opt)) // -alias ALIAS
+ _alias = args[++i];
+ else if ("-sigalg".equals(opt)) // -sigalg ALGORITHM
+ _sigAlgorithm = args[++i];
+ else if ("-dname".equals(opt)) // -dname NAME
+ _dName = args[++i];
+ else if ("-keypass".equals(opt)) // -keypass PASSWORD
+ _password = args[++i];
+ else if ("-validity".equals(opt)) // -validity DAY_COUNT
+ _validityStr = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt))
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setAliasParam(_alias);
+ setKeyPasswordNoPrompt(_password);
+// setDName(_dName);
+ setValidityParam(_validityStr);
+// setSignatureAlgorithm(_sigAlgorithm);
+
+ log.finer("-selfcert handler will use the following options:");
+ log.finer(" -alias=" + alias);
+ log.finer(" -sigalg=" + _sigAlgorithm);
+ log.finer(" -dname=" + _dName);
+ log.finer(" -keypass=" + _password);
+ log.finer(" -validity=" + validityInDays);
+ log.finer(" -storetype=" + storeType);
+ log.finer(" -keystore=" + storeURL);
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars));
+ log.finer(" -provider=" + provider);
+ log.finer(" -v=" + verbose);
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException,
+ UnrecoverableKeyException, IOException, UnsupportedCallbackException,
+ InvalidKeyException, SignatureException, CertificateException
+ {
+ log.entering(getClass().getName(), "start");
+
+ // 1. get the key entry and certificate chain associated to alias
+ Key privateKey = getAliasPrivateKey();
+ Certificate[] chain = store.getCertificateChain(alias);
+
+ // 2. if the user has not supplied a DN use one from the certificate chain
+ X509Certificate bottomCertificate = (X509Certificate) chain[0];
+ X500Principal defaultPrincipal = bottomCertificate.getIssuerX500Principal();
+ setDName(_dName, defaultPrincipal);
+
+ // 4. get alias's public key from certificate's SubjectPublicKeyInfo
+ PublicKey publicKey = bottomCertificate.getPublicKey();
+
+ // 5. issue the self-signed certificate
+ setSignatureAlgorithmParam(_sigAlgorithm, privateKey);
+
+ byte[] derBytes = getSelfSignedCertificate(distinguishedName,
+ publicKey,
+ (PrivateKey) privateKey);
+ CertificateFactory x509Factory = CertificateFactory.getInstance("X.509");
+ ByteArrayInputStream bais = new ByteArrayInputStream(derBytes);
+ Certificate certificate = x509Factory.generateCertificate(bais);
+
+ // 6. store it, w/ its private key, associating them to alias
+ chain = new Certificate[] { certificate };
+ store.setKeyEntry(alias, privateKey, keyPasswordChars, chain);
+
+ // 7. persist the key store
+ saveKeyStore();
+
+ log.exiting(getClass().getName(), "start");
+ }
+
+ // own methods --------------------------------------------------------------
+
+ private void setDName(String name, X500Principal defaultName)
+ {
+ if (name != null && name.trim().length() > 0)
+ name = name.trim();
+ else
+ {
+ // If dname is supplied at the command line, it is used as the X.500
+ // Distinguished Name for both the issuer and subject of the certificate.
+ // Otherwise, the X.500 Distinguished Name associated with alias (at the
+ // bottom of its existing certificate chain) is used.
+ name = defaultName.toString().trim();
+ }
+
+ distinguishedName = new X500DistinguishedName(name);
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/keytool/StorePasswdCmd.java b/libjava/classpath/tools/gnu/classpath/tools/keytool/StorePasswdCmd.java
new file mode 100644
index 0000000..1eb053c
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/keytool/StorePasswdCmd.java
@@ -0,0 +1,275 @@
+/* StorePasswdCmd.java -- The storepasswd command handler of the keytool
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.keytool;
+
+import gnu.classpath.SystemProperties;
+
+import java.io.IOException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.util.Arrays;
+import java.util.logging.Logger;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+/**
+ * The <b>-storepasswd</b> keytool command handler is used to change the
+ * password which protects the integrity of the key store.
+ * <p>
+ * Possible options for this command are:
+ * <p>
+ * <dl>
+ * <dt>-new PASSWORD</dt>
+ * <dd>The new, and different, password which will be used to protect the
+ * designated key store.
+ * <p></dd>
+ *
+ * <dt>-storetype STORE_TYP}</dt>
+ * <dd>Use this option to specify the type of the key store to use. The
+ * default value, if this option is omitted, is that of the property
+ * <code>keystore.type</code> in the security properties file, which is
+ * obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
+ * static method.
+ * <p></dd>
+ *
+ * <dt>-keystore URL</dt>
+ * <dd>Use this option to specify the location of the key store to use.
+ * The default value is a file {@link java.net.URL} referencing the file
+ * named <code>.keystore</code> located in the path returned by the call to
+ * {@link java.lang.System#getProperty(String)} using <code>user.home</code>
+ * as argument.
+ * <p>
+ * If a URL was specified, but was found to be malformed --e.g. missing
+ * protocol element-- the tool will attempt to use the URL value as a file-
+ * name (with absolute or relative path-name) of a key store --as if the
+ * protocol was <code>file:</code>.
+ * <p></dd>
+ *
+ * <dt>-storepass PASSWORD</dt>
+ * <dd>Use this option to specify the password protecting the key store. If
+ * this option is omitted from the command line, you will be prompted to
+ * provide a password.
+ * <p></dd>
+ *
+ * <dt>-provider PROVIDER_CLASS_NAME</dt>
+ * <dd>A fully qualified class name of a Security Provider to add to the
+ * current list of Security Providers already installed in the JVM in-use.
+ * If a provider class is specified with this option, and was successfully
+ * added to the runtime --i.e. it was not already installed-- then the tool
+ * will attempt to removed this Security Provider before exiting.
+ * <p></dd>
+ *
+ * <dt>-v</dt>
+ * <dd>Use this option to enable more verbose output.</dd>
+ * </dl>
+ */
+class StorePasswdCmd extends Command
+{
+ private static final Logger log = Logger.getLogger(StorePasswdCmd.class.getName());
+ private String _newPassword;
+ private String _ksType;
+ private String _ksURL;
+ private String _ksPassword;
+ private String _providerClassName;
+ private char[] newStorePasswordChars;
+
+ // default 0-arguments constructor
+
+ // public setters -----------------------------------------------------------
+
+ /** @param password the new key-store password to use. */
+ public void setNew(String password)
+ {
+ this._newPassword = password;
+ }
+
+ /** @param type the key-store type to use. */
+ public void setStoretype(String type)
+ {
+ this._ksType = type;
+ }
+
+ /** @param url the key-store URL to use. */
+ public void setKeystore(String url)
+ {
+ this._ksURL = url;
+ }
+
+ /** @param password the key-store password to use. */
+ public void setStorepass(String password)
+ {
+ this._ksPassword = password;
+ }
+
+ /** @param className a security provider fully qualified class name to use. */
+ public void setProvider(String className)
+ {
+ this._providerClassName = className;
+ }
+
+ // life-cycle methods -------------------------------------------------------
+
+ int processArgs(String[] args, int i)
+ {
+ int limit = args.length;
+ String opt;
+ while (++i < limit)
+ {
+ opt = args[i];
+ log.finest("args[" + i + "]=" + opt); //$NON-NLS-1$ //$NON-NLS-2$
+ if (opt == null || opt.length() == 0)
+ continue;
+
+ if ("-new".equals(opt)) // -new PASSWORD //$NON-NLS-1$
+ _newPassword = args[++i];
+ else if ("-storetype".equals(opt)) // -storetype STORE_TYPE //$NON-NLS-1$
+ _ksType = args[++i];
+ else if ("-keystore".equals(opt)) // -keystore URL //$NON-NLS-1$
+ _ksURL = args[++i];
+ else if ("-storepass".equals(opt)) // -storepass PASSWORD //$NON-NLS-1$
+ _ksPassword = args[++i];
+ else if ("-provider".equals(opt)) // -provider PROVIDER_CLASS_NAME //$NON-NLS-1$
+ _providerClassName = args[++i];
+ else if ("-v".equals(opt)) //$NON-NLS-1$
+ verbose = true;
+ else
+ break;
+ }
+
+ return i;
+ }
+
+ void setup() throws Exception
+ {
+ setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
+ setNewKeystorePassword(_newPassword);
+
+ log.finer("-storepasswd handler will use the following options:"); //$NON-NLS-1$
+ log.finer(" -new=" + String.valueOf(newStorePasswordChars)); //$NON-NLS-1$
+ log.finer(" -storetype=" + storeType); //$NON-NLS-1$
+ log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
+ log.finer(" -storepass=" + String.valueOf(storePasswordChars)); //$NON-NLS-1$
+ log.finer(" -provider=" + provider); //$NON-NLS-1$
+ log.finer(" -v=" + verbose); //$NON-NLS-1$
+ }
+
+ void start() throws KeyStoreException, NoSuchAlgorithmException,
+ CertificateException, IOException
+ {
+ log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
+
+ saveKeyStore(newStorePasswordChars);
+
+ log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
+ }
+
+ // own methods --------------------------------------------------------------
+
+ protected void setNewKeystorePassword(String password) throws IOException,
+ UnsupportedCallbackException
+ {
+ if (password != null)
+ newStorePasswordChars = password.toCharArray();
+ else
+ {
+ boolean ok = false;
+ Callback[] prompts = new Callback[1];
+ Callback[] errors = new Callback[1];
+ for (int i = 0; i < 3; i++)
+ if (prompt4NewPassword(getCallbackHandler(), prompts, errors))
+ {
+ ok = true;
+ break;
+ }
+ if (! ok)
+ throw new SecurityException(Messages.getString("StorePasswdCmd.19")); //$NON-NLS-1$
+ }
+ }
+
+ private boolean prompt4NewPassword(CallbackHandler handler,
+ Callback[] prompts, Callback[] errors)
+ throws IOException, UnsupportedCallbackException
+ {
+ // prompt user (1st time) to provide one
+ String p = Messages.getString("StorePasswdCmd.20"); //$NON-NLS-1$
+ PasswordCallback pcb = new PasswordCallback(p, false);
+ prompts[0] = pcb;
+ handler.handle(prompts);
+ char[] pwd1 = pcb.getPassword();
+ pcb.clearPassword();
+ String ls = SystemProperties.getProperty("line.separator"); //$NON-NLS-1$
+ if (pwd1 == null || pwd1.length < 6)
+ {
+ String m = Messages.getString("StorePasswdCmd.21") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ if (Arrays.equals(storePasswordChars, pwd1))
+ {
+ String m = Messages.getString("StorePasswdCmd.22") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ // prompt user (2nd time) for confirmation
+ pcb = new PasswordCallback(Messages.getString("StorePasswdCmd.23"), false); //$NON-NLS-1$
+ prompts[0] = pcb;
+ handler.handle(prompts);
+ char[] pwd2 = pcb.getPassword();
+ pcb.clearPassword();
+ if (! Arrays.equals(pwd1, pwd2))
+ {
+ String m = Messages.getString("StorePasswdCmd.24") + ls; //$NON-NLS-1$
+ errors[0] = new TextOutputCallback(TextOutputCallback.ERROR, m);
+ handler.handle(errors);
+ return false;
+ }
+
+ newStorePasswordChars = pwd2;
+ return true;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/Persistent.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/Persistent.java
new file mode 100644
index 0000000..5cd1efe
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/Persistent.java
@@ -0,0 +1,87 @@
+/* PersistentBidiHasthable.java -- Constants for the persistent tables.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * The static fields, shared by the multiple classes, implementing the
+ * persistent work.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public interface Persistent
+{
+ /**
+ * Sheduled termination task.
+ */
+ static class ExitTask extends TimerTask
+ {
+ public void run()
+ {
+ System.exit(0);
+ }
+ }
+
+ /**
+ * The timer, sheduling all disk database update events, shared by all
+ * instances.
+ */
+ static Timer timer = new Timer(true);
+
+ /**
+ * The longest time, in ms, after that the database content on the disk must
+ * be updated. The algorithm is written to avoid the very frequent writings to
+ * the disk.
+ */
+ static long SAVE_AT_MOST_AFTER = 5000;
+
+ /**
+ * States how long the database may stay not updated during the intensive
+ * operations, in ms. Otherwise the intensively used structure may never
+ * be stored to the disk.
+ */
+ static long ALWAYS_UPDATE = 300000;
+
+ /**
+ * Write the database content to the disk.
+ */
+ void writeContent();
+
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentBidiHashTable.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentBidiHashTable.java
new file mode 100644
index 0000000..94b5bcb
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentBidiHashTable.java
@@ -0,0 +1,268 @@
+/* PersistentBidiHasthable.java -- Bidirectional persistent hash table.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi;
+
+import gnu.classpath.tools.rmi.rmid.ActivationSystemImpl;
+import gnu.java.rmi.activation.BidiTable;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TimerTask;
+
+/**
+ * The persistent bidirectional hash table, maps both a to b and b to a. The
+ * changes are written to dist after SAVE_AT_MOST_AFTER time from the latest
+ * database change or at most after ALWAYS_UPDATE, if the database is updated
+ * very frequently. To ensure that no information is lost, the shutdown method
+ * must be called before exit.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class PersistentBidiHashTable extends BidiTable implements
+ Persistent
+{
+ class WriteToDiskTask extends TimerTask
+ {
+ /**
+ * Save the database.
+ */
+ public void run()
+ {
+ writeContent();
+ sheduled = null;
+ }
+ }
+
+ /**
+ * Replaces instances of ActivationSystemImpl into the currently active
+ * instance of the ActivationSystemImpl
+ */
+ class AdaptedReader extends ObjectInputStream
+ {
+ AdaptedReader(InputStream in) throws IOException
+ {
+ super(in);
+ enableResolveObject(true);
+ }
+
+ protected Object resolveObject(Object obj) throws IOException
+ {
+ if (obj instanceof ActivationSystemImpl)
+ return ActivationSystemImpl.singleton2;
+ else
+ return obj;
+ }
+ }
+
+ /**
+ * The database file.
+ */
+ File database;
+
+ /**
+ * The currently sheduled write to disk task, null if none.
+ */
+ WriteToDiskTask sheduled = null;
+
+ /**
+ * The time, when the disk database was last updated.
+ */
+ long lastUpdated;
+
+ /**
+ * Create the unitialised instance that must be initalised when
+ * ActivationSystemImpl.singleton2 is assigned.
+ */
+ public PersistentBidiHashTable()
+ {
+ // Do not initalise the table fields - the initalise method must be
+ // called later.
+ super(0);
+ }
+
+ /**
+ * Create a new persistent table that stores its information into the given
+ * file. The ActivationSystemImpl.singleton2 must be assigned.
+ *
+ * @param file
+ * the file, where the table stores its information.
+ * @param coldStart
+ * if true, the existing file with this name will be erased and
+ * ignored. Otherwise, it will be assumed that the file contains the
+ * persistent table information.
+ */
+ public void init(File file, boolean coldStart)
+ {
+ try
+ {
+ database = file;
+ if (database.exists())
+ {
+ if (coldStart)
+ {
+ k2v = new Hashtable();
+ v2k = new Hashtable();
+ database.delete();
+ }
+ else
+ {
+ FileInputStream fi = new FileInputStream(file);
+ BufferedInputStream b = new BufferedInputStream(fi);
+ ObjectInputStream oin = new AdaptedReader(b);
+
+ k2v = (Map) oin.readObject();
+ oin.close();
+
+ v2k = new Hashtable(k2v.size());
+
+ // Reguild v2k from k2v:
+ Iterator en = k2v.keySet().iterator();
+ Object key;
+ while (en.hasNext())
+ {
+ key = en.next();
+ v2k.put(k2v.get(key), key);
+ }
+ }
+ }
+ else
+ {
+ k2v = new Hashtable();
+ v2k = new Hashtable();
+ }
+ }
+ catch (Exception ioex)
+ {
+ InternalError ierr = new InternalError("Unable to intialize with file "
+ + file);
+ ierr.initCause(ioex);
+ throw ierr;
+ }
+ }
+
+ /**
+ * Write the database content to the disk.
+ */
+ public synchronized void writeContent()
+ {
+ try
+ {
+ FileOutputStream fou = new FileOutputStream(database);
+ BufferedOutputStream b = new BufferedOutputStream(fou);
+ ObjectOutputStream oout = new ObjectOutputStream(b);
+ oout.writeObject(k2v);
+ oout.close();
+ }
+ catch (Exception ioex)
+ {
+ InternalError ierr = new InternalError(
+ "Failed to write database to disk: "
+ + database);
+ ierr.initCause(ioex);
+ throw ierr;
+ }
+ }
+
+ /**
+ * Mark the modified database as modified. The database will be written after
+ * several seconds, unless another modification occurs.
+ */
+ public void markDirty()
+ {
+ if (System.currentTimeMillis() - lastUpdated > ALWAYS_UPDATE)
+ {
+ // Force storing to disk under intensive operation.
+ writeContent();
+ lastUpdated = System.currentTimeMillis();
+ if (sheduled != null)
+ {
+ sheduled.cancel();
+ sheduled = null;
+ }
+ }
+ else
+ {
+ // Otherwise coalesce the disk database copy update events.
+ if (sheduled != null)
+ sheduled.cancel();
+ sheduled = new WriteToDiskTask();
+ timer.schedule(sheduled, SAVE_AT_MOST_AFTER);
+ }
+ }
+
+ /**
+ * Save the current database state to the disk before exit.
+ */
+ public void shutdown()
+ {
+ if (sheduled != null)
+ {
+ writeContent();
+ sheduled = null;
+ }
+ }
+
+ /**
+ * Update the memory maps and mark as should be written to the disk.
+ */
+ public void put(Object key, Object value)
+ {
+ super.put(key, value);
+ markDirty();
+ }
+
+ /**
+ * Update the memory maps and mark as should be written to the disk.
+ */
+ public void removeKey(Object key)
+ {
+ super.removeKey(key);
+ markDirty();
+ }
+
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentHashTable.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentHashTable.java
new file mode 100644
index 0000000..925e829
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/PersistentHashTable.java
@@ -0,0 +1,246 @@
+/* PersistentHasthable.java -- Persistent hash table.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.TimerTask;
+
+/**
+ * The persistent hash table. The changes are written to dist after
+ * SAVE_AT_MOST_AFTER time from the latest database change or at most after
+ * ALWAYS_UPDATE, if the database is updated very frequently. To ensure that no
+ * information is lost, the shutdown method must be called before exit.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class PersistentHashTable
+ extends Hashtable
+ implements Serializable, Persistent
+{
+
+ /**
+ * Use serialVersionUID for interoperability
+ */
+ private static final long serialVersionUID = 1;
+
+ class WriteToDiskTask extends TimerTask
+ {
+ /**
+ * Save the database.
+ */
+ public void run()
+ {
+ writeContent();
+ sheduled = null;
+ }
+ }
+
+ /**
+ * The database file.
+ */
+ File database;
+
+ /**
+ * The currently sheduled write to disk task, null if none.
+ */
+ WriteToDiskTask sheduled = null;
+
+ /**
+ * The time, when the disk database was last updated.
+ */
+ long lastUpdated;
+
+ /**
+ * Setting to false prevents the automated disk update.
+ * The initial value is true to prevent writing while reading and is set
+ * to false in createInstance.
+ */
+ transient boolean ready;
+
+ /**
+ * Use static method to obtain the instance.
+ */
+ private PersistentHashTable(File file)
+ {
+ if (file == null)
+ throw new NullPointerException("Null file provided");
+ database = file;
+ }
+
+ /**
+ * Create a new persistent table that stores its information into the given
+ * file.
+ *
+ * @param file
+ * the file, where the table stores its information.
+ * @param coldStart
+ * if true, the existing file with this name will be erased and
+ * ignored. Otherwise, it will be assumed that the file contains the
+ * persistent table information.
+ */
+ public static Map createInstance(File file, boolean coldStart)
+ {
+ try
+ {
+ PersistentHashTable k2v;
+ if (file.exists())
+ {
+ if (coldStart)
+ {
+ file.delete();
+ k2v = new PersistentHashTable(file);
+ }
+ else
+ {
+ FileInputStream fi = new FileInputStream(file);
+ BufferedInputStream b = new BufferedInputStream(fi);
+ ObjectInputStream oin = new ObjectInputStream(b);
+
+ k2v = (PersistentHashTable) oin.readObject();
+ oin.close();
+ }
+ }
+ else
+ k2v = new PersistentHashTable(file);
+
+ k2v.ready = true;
+ return k2v;
+ }
+ catch (Exception ioex)
+ {
+ InternalError ierr = new InternalError("Unable to intialize with file "
+ + file);
+ ierr.initCause(ioex);
+ throw ierr;
+ }
+ }
+
+
+ /**
+ * Write the database content to the disk.
+ */
+ public synchronized void writeContent()
+ {
+ try
+ {
+ FileOutputStream fou = new FileOutputStream(database);
+ BufferedOutputStream b = new BufferedOutputStream(fou);
+ ObjectOutputStream oout = new ObjectOutputStream(b);
+ oout.writeObject(this);
+ oout.close();
+ }
+ catch (Exception ioex)
+ {
+ InternalError ierr = new InternalError(
+ "Failed to write database to disk: "+ database);
+ ierr.initCause(ioex);
+ throw ierr;
+ }
+ }
+
+ /**
+ * Mark the modified database as modified. The database will be written after
+ * several seconds, unless another modification occurs.
+ */
+ public void markDirty()
+ {
+ if (System.currentTimeMillis() - lastUpdated > ALWAYS_UPDATE)
+ {
+ // Force storing to disk under intensive operation.
+ writeContent();
+ lastUpdated = System.currentTimeMillis();
+ if (sheduled != null)
+ {
+ sheduled.cancel();
+ sheduled = null;
+ }
+ }
+ else
+ {
+ // Otherwise coalesce the disk database copy update events.
+ if (sheduled != null)
+ sheduled.cancel();
+ sheduled = new WriteToDiskTask();
+ timer.schedule(sheduled, SAVE_AT_MOST_AFTER);
+ }
+ }
+
+ /**
+ * Save the current database state to the disk before exit.
+ */
+ public void shutdown()
+ {
+ if (sheduled != null)
+ {
+ writeContent();
+ sheduled = null;
+ }
+ }
+
+ /**
+ * Update the memory maps and mark as should be written to the disk.
+ */
+ public Object put(Object key, Object value)
+ {
+ super.put(key, value);
+ if (ready)
+ markDirty();
+ return value;
+ }
+
+ /**
+ * Update the memory maps and mark as should be written to the disk.
+ */
+ public Object remove(Object key)
+ {
+ Object removed = super.remove(key);
+ if (ready)
+ markDirty();
+ return removed;
+ }
+
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.java
new file mode 100644
index 0000000..63f633f
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.java
@@ -0,0 +1,165 @@
+/* REGISTY.java -- RMI registry starter.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.rmi;
+
+import gnu.classpath.tools.HelpPrinter;
+import gnu.classpath.tools.rmi.registry.RegistryImpl;
+import gnu.java.rmi.server.UnicastServerRef;
+
+import java.io.File;
+import java.rmi.NotBoundException;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.ObjID;
+import java.rmi.server.RMIServerSocketFactory;
+import java.util.Hashtable;
+import java.util.Map;
+
+/**
+ * The optionally persistent RMI registry implementation.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class REGISTRY
+{
+ /**
+ * The stop command.
+ */
+ public static String STOP = "gnu.classpath.tools.rmi.registry.command.STOP";
+
+ /**
+ * If true, the registry prints registration events to console.
+ */
+ public static boolean verbose = false;
+
+ /**
+ * The RMI registry implementation entry point.
+ */
+ public static void main(String[] args)
+ {
+ String HelpPath = "rmi/REGISTRY.txt";
+ HelpPrinter.checkHelpKey(args, HelpPath);
+
+ // Parse parameters:
+ String folder = ".";
+ boolean cold = false;
+ boolean trans = false;
+ boolean stop = false;
+
+ int port = Registry.REGISTRY_PORT;
+ RMIServerSocketFactory ssf = null;
+
+ for (int i = 0; i < args.length; i++)
+ {
+ String a = args[i];
+ if (a.equals("-restart"))
+ cold = true;
+ else if (a.equals("-transient"))
+ trans = true;
+ else if (a.equals("-verbose"))
+ verbose = true;
+ else if (a.equals("-stop"))
+ stop = true;
+ else if (i < args.length - 1)
+ {
+ // The additional key parameter is possible.
+ if (a.equals("-port"))
+ port = Integer.parseInt(args[++i]);
+ else if (a.equals("-folder"))
+ folder = args[++i];
+ }
+ }
+
+ if (!stop)
+ {
+ Map table;
+ if (trans)
+ table = new Hashtable();
+ else
+ {
+ // Start the system.
+ File dataFolder = new File(folder);
+ if (!dataFolder.exists())
+ dataFolder.mkdirs();
+ table = PersistentHashTable.createInstance(
+ new File(dataFolder, "rmiregistry.data"), cold);
+ }
+
+ RegistryImpl system = new RegistryImpl(table);
+
+ // We must export with the specific activation id that is only
+ // possible when going into the gnu.java.rmi
+ try
+ {
+ UnicastServerRef sref = new UnicastServerRef(
+ new ObjID(ObjID.REGISTRY_ID), port, ssf);
+
+ sref.exportObject(system);
+ System.out.println("The RMI naming service is listening at " + port);
+ }
+ catch (Exception ex)
+ {
+ System.out.println("Failed to start RMI naming service at " + port);
+ }
+ }
+ else
+ {
+ // Stop the naming service.
+ try
+ {
+ Registry r = LocateRegistry.getRegistry(port);
+ // Search for this specific line will command to stop the registry.
+
+ // Our service returns null, but any other service will thrown
+ // NotBoundException.
+ r.unbind(STOP);
+ }
+ catch (RemoteException e)
+ {
+ System.out.println("Failed to stop RMI naming service at " + port);
+ }
+ catch (NotBoundException e)
+ {
+ System.out.println("The naming service at port "+port+" is not a "+
+ REGISTRY.class.getName());
+ }
+ }
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.txt b/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.txt
new file mode 100644
index 0000000..7d8e192
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/REGISTRY.txt
@@ -0,0 +1,28 @@
+The persistent RMI naming service, required for the remote method invocations
+(packages java.rmi.*, java.rmi.Registry.*).
+
+Copyright 2006 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Please report bugs at http://www.gnu.org/software/classpath/bugs.html
+
+Usage: rmiregistry <options>
+
+ where <options> includes:
+ -port N Start the registry on the given local port. If this key
+ is not specified, the service starts on the port 1099.
+ -verbose Log binding events to stdout.
+ -stop Stop the running naming service at the given port.
+
+ -transient Start transient registry service that does not write any
+ data to the disk. Such service looses the stored bindings if
+ restarted. If this key is not specified, the
+ persistent naming service is started.
+ -restart "Cold start:, clear the persistent naming database, if any.
+ -folder Folder Store the persistent binding file in the given folder. If this
+ key is not specified, the file with persistent bindings is
+ stored into the current folder.
+
+
+
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.java
index 09021dd..c444530 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.java
@@ -17,30 +17,13 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.rmi;
import gnu.classpath.tools.HelpPrinter;
import gnu.classpath.tools.giop.GRMIC;
-import gnu.classpath.tools.giop.grmic.GiopRmicCompiler;
import gnu.classpath.tools.rmi.rmic.RmicCompiler;
import java.io.File;
@@ -114,6 +97,10 @@ public class RMIC
verbose = true;
compiler.setVerbose(true);
}
+ else if (c.equals("-force"))
+ {
+ compiler.setForce(true);
+ }
else if (c.equals("-d"))
{
int f = i + 1;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.txt b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.txt
index df1de9e..7ec371e 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.txt
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMIC.txt
@@ -16,6 +16,8 @@ Usage: rmic <options> <class names>
-help Print this help text
-v Print version
-verbose Verbose output
+ -force Try to generate code even if the input classes seem not
+ consistent with RMI specification.
-1.2 Generate v 1.2 stubs (default)*
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.java
new file mode 100644
index 0000000..81d0967
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.java
@@ -0,0 +1,189 @@
+/* RMID.java -- the RMI activation daemon.
+ Copyright (c) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi;
+
+import gnu.classpath.tools.HelpPrinter;
+import gnu.classpath.tools.rmi.rmid.ActivationSystemImpl;
+import gnu.java.rmi.activation.ActivationSystemTransient;
+import gnu.java.rmi.server.UnicastServerRef;
+
+import java.io.File;
+import java.net.InetAddress;
+import java.rmi.Remote;
+import java.rmi.activation.ActivationSystem;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.ObjID;
+import java.rmi.server.RMIServerSocketFactory;
+
+
+/**
+ * The persistent RMI activation daemon.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class RMID
+{
+ /**
+ * The RMI server socket factory.
+ */
+ static RMIServerSocketFactory ACTIVATION_REGISTY_SOCKET_FACTORY = null;
+
+ /**
+ * The activation registry port.
+ */
+ static int ACTIVATION_REGISTRY_PORT = ActivationSystem.SYSTEM_PORT;
+
+ /**
+ * The activation system name.
+ */
+ static String ACTIVATION_SYSTEM_NAME = "java.rmi.activation.ActivationSystem";
+
+ /**
+ * The RMI activation daemon entry point.
+ */
+ public static void main(String[] args)
+ {
+ String HelpPath = "rmi/RMID.txt";
+ HelpPrinter.checkHelpKey(args, HelpPath);
+
+ // Parse parameters:
+ boolean stop = false;
+ String folder = ".";
+ boolean cold = false;
+ boolean trans = false;
+
+ for (int i = 0; i < args.length; i++)
+ {
+ String a = args[i];
+ if (a.equals("-verbose"))
+ ActivationSystemTransient.debug = true;
+ else if (a.equals("-stop"))
+ stop = true;
+ else if (a.equals("-restart"))
+ cold = true;
+ else if (a.equals("-transient"))
+ trans = true;
+ else if (i < args.length - 1)
+ {
+ // The additional key parameter is possible.
+ if (a.equals("-port"))
+ ACTIVATION_REGISTRY_PORT = Integer.parseInt(args[++i]);
+ else if (a.equals("-folder"))
+ folder = args[++i];
+ }
+ }
+
+ try
+ {
+ if (!stop)
+ {
+ // Start the system.
+ File dataFolder = new File(folder);
+ if (!dataFolder.exists())
+ dataFolder.mkdirs();
+ ActivationSystem system;
+
+ if (trans)
+ system = ActivationSystemTransient.getInstance();
+ else
+ system = ActivationSystemImpl.getInstance(dataFolder, cold);
+
+ // We must export with the specific activation id that is only
+ // possible when going into the gnu.java.rmi.activation.
+ UnicastServerRef sref = new UnicastServerRef(
+ new ObjID(ObjID.ACTIVATOR_ID), ACTIVATION_REGISTRY_PORT,
+ ACTIVATION_REGISTY_SOCKET_FACTORY);
+ Remote systemStub = sref.exportObject(system);
+
+ // Start the naming system on the activation system port
+ // (if not already running).
+
+ Registry r;
+ try
+ {
+ // Expect the naming service running first.
+ // The local host may want to use the shared registry
+ r = LocateRegistry.getRegistry(ACTIVATION_REGISTRY_PORT);
+ r.rebind(ACTIVATION_SYSTEM_NAME, systemStub);
+ }
+ catch (Exception ex)
+ {
+ // The naming service is not running. Start it.
+ r = LocateRegistry.createRegistry(ACTIVATION_REGISTRY_PORT);
+ r.rebind(ACTIVATION_SYSTEM_NAME, systemStub);
+ }
+ String host = InetAddress.getLocalHost().getCanonicalHostName();
+ System.out.println("The RMI daemon is listening on " + host +
+ " (port "
+ + ACTIVATION_REGISTRY_PORT + ")");
+
+ }
+ else
+ {
+ // Stop the activation system.
+ Registry r;
+ try
+ {
+ System.out.print("Stopping RMI daemon at "
+ + ACTIVATION_REGISTRY_PORT+" ... ");
+ // Expect the naming service running first.
+ // The local host may want to use the shared registry
+ r = LocateRegistry.getRegistry(ACTIVATION_REGISTRY_PORT);
+ ActivationSystem asys =
+ (ActivationSystem) r.lookup(ACTIVATION_SYSTEM_NAME);
+ asys.shutdown();
+ System.out.println("OK.");
+ }
+ catch (Exception ex)
+ {
+ System.out.println("The RMI daemon seems not running at "
+ + ACTIVATION_REGISTRY_PORT);
+ if (ActivationSystemTransient.debug)
+ ex.printStackTrace();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ System.out.println("Failed to start the RMI daemon.");
+ if (ActivationSystemTransient.debug)
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.txt b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.txt
new file mode 100644
index 0000000..a62613f
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/RMID.txt
@@ -0,0 +1,30 @@
+The persistent RMI activation daemon, support RMI object activation
+(package java.rmi.activation.*).
+
+Copyright 2006 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Please report bugs at http://www.gnu.org/software/classpath/bugs.html
+
+Usage: rmid <options>
+
+ where <options> includes:
+ -port N Start the service on the given local port. If this key
+ is not specified, the service starts on the port 1098.
+ -verbose Log registration events to stdout.
+ -stop Stop the running activation service at the given port.
+
+ -transient Start transient activation service that does not write any
+ data to the disk. Such service looses the stored activation
+ descriptors, if restarted. If this key is not specified, the
+ persistent naming service is started.
+ -restart "Cold start:, clear the activation descriptor database, if any.
+ -folder Folder Store the persistent descriptor file in the given folder. If this
+ key is not specified, the file with persistent activation
+ information is stored into the current folder.
+
+All activation groups are activated on the same virtual machine, where the
+daemon is running. For security reasons, all the classes, required for
+activation, must be available in the classpath of that machine.
+ \ No newline at end of file
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl.java
new file mode 100644
index 0000000..90bd3a6
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl.java
@@ -0,0 +1,139 @@
+/* RegistryImpl.java -- the RMI registry implementation
+ Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005, 2006
+ Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi.registry;
+
+import gnu.classpath.tools.rmi.Persistent;
+import gnu.classpath.tools.rmi.REGISTRY;
+
+import java.rmi.AccessException;
+import java.rmi.AlreadyBoundException;
+import java.rmi.NotBoundException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * The optionally persistent registry implementation.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class RegistryImpl implements Registry
+{
+ /**
+ * The binding table.
+ */
+ Map bindings;
+
+ /**
+ * Create the registry implementation that uses the given bidirectinal
+ * table to keep the data.
+ */
+ public RegistryImpl(Map aTable)
+ {
+ bindings = aTable;
+ }
+
+ /** @inheritDoc */
+ public Remote lookup(String name) throws RemoteException, NotBoundException,
+ AccessException
+ {
+ Object obj = bindings.get(name);
+ if (obj == null)
+ throw new NotBoundException(name);
+ return ((Remote) obj);
+ }
+
+ /** @inheritDoc */
+ public void bind(String name, Remote obj) throws RemoteException,
+ AlreadyBoundException, AccessException
+ {
+ if (REGISTRY.verbose)
+ System.out.println("Bind "+name);
+ if (bindings.containsKey(name))
+ throw new AlreadyBoundException(name);
+ bindings.put(name, obj);
+ }
+
+ /** @inheritDoc */
+ public void unbind(String name) throws RemoteException, NotBoundException,
+ AccessException
+ {
+ if (name.equals(REGISTRY.STOP))
+ {
+ if (bindings instanceof Persistent)
+ ((Persistent) bindings).writeContent();
+ // Terminate in 10 seconds.
+ System.out.println("Shutdown command received. Will terminate in 10 s");
+ Persistent.timer.schedule(new Persistent.ExitTask(), 10000);
+ }
+ else
+ {
+ if (REGISTRY.verbose)
+ System.out.println("Unbind "+name);
+
+ if (!bindings.containsKey(name))
+ throw new NotBoundException(name);
+ else
+ bindings.remove(name);
+ }
+ }
+
+ /** @inheritDoc */
+ public void rebind(String name, Remote obj) throws RemoteException,
+ AccessException
+ {
+ if (REGISTRY.verbose)
+ System.out.println("Rebind "+name);
+ bindings.put(name, obj);
+ }
+
+ /** @inheritDoc */
+ public String[] list() throws RemoteException, AccessException
+ {
+ // Create a separated array to prevent race conditions.
+ ArrayList keys = new ArrayList(bindings.keySet());
+ int n = keys.size();
+ String[] rt = new String[n];
+ for (int i = 0; i < n; i++)
+ rt[i] = (String) keys.get(i);
+ return rt;
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Skel.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Skel.java
new file mode 100644
index 0000000..36b7d94
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Skel.java
@@ -0,0 +1,278 @@
+/* RegistryImpl_Skel.java
+ Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.rmi.registry;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.rmi.MarshalException;
+import java.rmi.Remote;
+import java.rmi.UnmarshalException;
+import java.rmi.server.Operation;
+import java.rmi.server.RemoteCall;
+import java.rmi.server.SkeletonMismatchException;
+
+/**
+ * This skeleton supports unlikely cases when the naming service is
+ * contacted from other interoperable java implementation that still uses
+ * the old style skeleton-dependent invocations.
+ */
+public final class RegistryImpl_Skel
+ implements java.rmi.server.Skeleton
+{
+ private static final long interfaceHash = 4905912898345647071L;
+
+ /**
+ * Repeated multiple times.
+ */
+ static final String EUM = "error unmarshalling arguments for Registry";
+
+ /**
+ * Repeated multiple times.
+ */
+ static final String EMR = "error marshalling return from Registry";
+
+ private static final Operation[] operations =
+ {
+ new Operation("void bind(java.lang.String, Remote"),
+ new Operation("java.lang.String[] list("),
+ new Operation("Remote lookup(java.lang.String"),
+ new Operation("void rebind(java.lang.String, Remote"),
+ new Operation("void unbind(java.lang.String")
+ };
+
+ public Operation[] getOperations()
+ {
+ return ((Operation[]) operations.clone());
+ }
+
+ public void dispatch(Remote obj, RemoteCall call,
+ int opnum, long hash) throws java.lang.Exception
+ {
+ if (opnum < 0)
+ {
+ if (hash == 7583982177005850366L)
+ opnum = 0;
+ else if (hash == 2571371476350237748L)
+ opnum = 1;
+ else if (hash == -7538657168040752697L)
+ opnum = 2;
+ else if (hash == -8381844669958460146L)
+ opnum = 3;
+ else if (hash == 7305022919901907578L)
+ opnum = 4;
+ else
+ throw new SkeletonMismatchException("interface hash mismatch");
+ }
+ else if (hash != interfaceHash)
+ throw new SkeletonMismatchException("interface hash mismatch");
+
+ RegistryImpl server = (RegistryImpl) obj;
+ switch (opnum)
+ {
+ case 0:
+ {
+ java.lang.String $param_0;
+ Remote $param_1;
+ try
+ {
+ ObjectInput in = call.getInputStream();
+ $param_0 = (java.lang.String) in.readObject();
+ $param_1 = (Remote) in.readObject();
+
+ }
+ catch (IOException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ catch (java.lang.ClassCastException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ finally
+ {
+ call.releaseInputStream();
+ }
+ server.bind($param_0, $param_1);
+ try
+ {
+ ObjectOutput out = call.getResultStream(true);
+ }
+ catch (IOException e)
+ {
+ throw new MarshalException(EMR, e);
+ }
+ break;
+ }
+
+ case 1:
+ {
+ try
+ {
+ ObjectInput in = call.getInputStream();
+
+ }
+ catch (IOException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ finally
+ {
+ call.releaseInputStream();
+ }
+ java.lang.String[] $result = server.list();
+ try
+ {
+ ObjectOutput out = call.getResultStream(true);
+ out.writeObject($result);
+ }
+ catch (IOException e)
+ {
+ throw new MarshalException(EMR, e);
+ }
+ break;
+ }
+
+ case 2:
+ {
+ java.lang.String $param_0;
+ try
+ {
+ ObjectInput in = call.getInputStream();
+ $param_0 = (java.lang.String) in.readObject();
+
+ }
+ catch (IOException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ catch (java.lang.ClassCastException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ finally
+ {
+ call.releaseInputStream();
+ }
+ Remote $result = server.lookup($param_0);
+ try
+ {
+ ObjectOutput out = call.getResultStream(true);
+ out.writeObject($result);
+ }
+ catch (IOException e)
+ {
+ throw new MarshalException(EMR, e);
+ }
+ break;
+ }
+
+ case 3:
+ {
+ java.lang.String $param_0;
+ Remote $param_1;
+ try
+ {
+ ObjectInput in = call.getInputStream();
+ $param_0 = (java.lang.String) in.readObject();
+ $param_1 = (Remote) in.readObject();
+
+ }
+ catch (IOException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ catch (java.lang.ClassCastException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ finally
+ {
+ call.releaseInputStream();
+ }
+ server.rebind($param_0, $param_1);
+ try
+ {
+ ObjectOutput out = call.getResultStream(true);
+ }
+ catch (IOException e)
+ {
+ throw new MarshalException(EMR, e);
+ }
+ break;
+ }
+
+ case 4:
+ {
+ java.lang.String $param_0;
+ try
+ {
+ ObjectInput in = call.getInputStream();
+ $param_0 = (java.lang.String) in.readObject();
+
+ }
+ catch (IOException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ catch (java.lang.ClassCastException e)
+ {
+ throw new UnmarshalException(EUM, e);
+ }
+ finally
+ {
+ call.releaseInputStream();
+ }
+ server.unbind($param_0);
+ try
+ {
+ ObjectOutput out = call.getResultStream(true);
+ }
+ catch (IOException e)
+ {
+ throw new MarshalException(EMR, e);
+ }
+ break;
+ }
+
+ default:
+ throw new UnmarshalException("invalid method number");
+ }
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Stub.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Stub.java
new file mode 100644
index 0000000..d8cac5b
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/registry/RegistryImpl_Stub.java
@@ -0,0 +1,263 @@
+/* RegistryImpl_Stub.java -- Registry stub.
+ Copyright (c) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi.registry;
+
+import java.rmi.AccessException;
+import java.rmi.AlreadyBoundException;
+import java.rmi.NotBoundException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+
+import java.lang.reflect.Method;
+import java.rmi.server.RemoteRef;
+import java.rmi.server.RemoteStub;
+import java.rmi.UnexpectedException;
+
+/**
+ * This class delegates its method calls to the remote RMI object, referenced
+ * by {@link RemoteRef}.
+ *
+ * It is normally generated with rmic.
+ */
+public final class RegistryImpl_Stub
+ extends RemoteStub
+ implements Registry
+{
+ /**
+ * Use serialVersionUID for interoperability
+ */
+ private static final long serialVersionUID = 3;
+
+ /**
+ * The explaining message for {@ling UnexpectedException}.
+ */
+ private static final String exception_message =
+ "undeclared checked exception";
+
+ /* All remote methods, invoked by this stub: */
+ private static final Method met_list;
+ private static final Method met_rebind;
+ private static final Method met_unbind;
+ private static final Method met_lookup;
+ private static final Method met_bind;
+ private static final Object[] NO_ARGS = new Object[0];
+ static
+ {
+ final Class[] NO_ARGSc = new Class[0];
+ try
+ {
+ met_list =
+ Registry.class.getMethod("list", NO_ARGSc);
+ met_rebind =
+ Registry.class.getMethod("rebind", new Class[]
+ {
+ String.class, Remote.class
+ });
+ met_unbind =
+ Registry.class.getMethod("unbind", new Class[]
+ {
+ String.class
+ });
+ met_lookup =
+ Registry.class.getMethod("lookup", new Class[]
+ {
+ String.class
+ });
+ met_bind =
+ Registry.class.getMethod("bind", new Class[]
+ {
+ String.class, Remote.class
+ });
+
+ }
+ catch (NoSuchMethodException nex)
+ {
+ NoSuchMethodError err = new NoSuchMethodError(
+ "RegistryImpl_Stub class initialization failed");
+ err.initCause(nex);
+ throw err;
+ }
+ }
+
+ /**
+ * Create the instance for _RegistryImpl_Stub that forwards method calls to the
+ * remote object.
+ *
+ * @para the reference to the remote object.
+ */
+ public RegistryImpl_Stub(RemoteRef reference)
+ {
+ super(reference);
+ }
+
+ /* Methods */
+ /** @inheritDoc */
+ public String [] list()
+ throws RemoteException, AccessException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_list,
+ NO_ARGS,
+ 2571371476350237748L);
+ return (String []) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void rebind(String p0, Remote p1)
+ throws RemoteException, AccessException
+ {
+ try
+ {
+ ref.invoke(this, met_rebind,
+ new Object[] {p0, p1},
+ -8381844669958460146L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void unbind(String p0)
+ throws RemoteException, NotBoundException, AccessException
+ {
+ try
+ {
+ ref.invoke(this, met_unbind,
+ new Object[] {p0},
+ 7305022919901907578L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public Remote lookup(String p0)
+ throws RemoteException, NotBoundException, AccessException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_lookup,
+ new Object[] {p0},
+ -7538657168040752697L);
+ return (Remote) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void bind(String p0, Remote p1)
+ throws RemoteException, AlreadyBoundException, AccessException
+ {
+ try
+ {
+ ref.invoke(this, met_bind,
+ new Object[] {p0, p1},
+ 7583982177005850366L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java
index 9b7f935..8da4865 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmiMethodGenerator.java
@@ -22,18 +22,7 @@
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
-
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module. An independent module is a module which is not derived from
- or based on this library. If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so. If you do not wish to do so, delete this
- exception statement from your version. */
+*/
package gnu.classpath.tools.rmi.rmic;
@@ -43,7 +32,6 @@ import gnu.java.rmi.server.RMIHashes;
import java.lang.reflect.Method;
import java.util.Properties;
-import java.util.zip.Adler32;
/**
* Keeps information about the single method and generates the code fragments,
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java
index 498dff7..bc51aad 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/RmicCompiler.java
@@ -22,18 +22,7 @@ Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.rmi.rmic;
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java
index 6451a70..8ee4fa5 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/WrapUnWrapper.java
@@ -17,28 +17,11 @@ You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
+*/
package gnu.classpath.tools.rmi.rmic;
-import java.lang.reflect.Method;
public class WrapUnWrapper
{
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav
index 1069884..9aaf8f5 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12Method.jav
@@ -19,7 +19,7 @@
catch (Exception e)
{
UnexpectedException uex = new UnexpectedException(exception_message);
- uex.initCause(e);
+ uex.detail = e;
throw uex;
}
}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav
index f67098a..860a93c 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmic/templates/Stub_12MethodVoid.jav
@@ -18,7 +18,7 @@
catch (Exception e)
{
UnexpectedException uex = new UnexpectedException(exception_message);
- uex.initCause(e);
+ uex.detail = e;
throw uex;
}
}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl.java
new file mode 100644
index 0000000..dda40b0
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl.java
@@ -0,0 +1,244 @@
+/* ActivationSystemImpl.java -- implementation of the activation system.
+ Copyright (c) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath.tools.rmi.rmid;
+
+import gnu.classpath.tools.rmi.Persistent;
+import gnu.classpath.tools.rmi.PersistentBidiHashTable;
+import gnu.java.rmi.activation.ActivationSystemTransient;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.rmi.MarshalledObject;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationDesc;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationGroupDesc;
+import java.rmi.activation.ActivationGroupID;
+import java.rmi.activation.ActivationID;
+import java.rmi.activation.ActivationInstantiator;
+import java.rmi.activation.ActivationMonitor;
+import java.rmi.activation.ActivationSystem;
+import java.rmi.activation.Activator;
+import java.rmi.activation.UnknownGroupException;
+import java.rmi.activation.UnknownObjectException;
+
+/**
+ * Implements the rmid activation system.
+ *
+ * @author Audrius Meskauskas (audriusa@bioinformatics.org)
+ */
+public class ActivationSystemImpl extends ActivationSystemTransient implements
+ ActivationSystem, Activator, ActivationMonitor, Serializable
+{
+ /**
+ * Use for interoperability.
+ */
+ private static final long serialVersionUID = 1;
+
+ /**
+ * The singleton instance of this class.
+ */
+ public static ActivationSystemImpl singleton2;
+
+ /**
+ * Obtain the singleton instance of this class.
+ *
+ * @param folder the folder, where the activation system will keep its files.
+ * @param cold do the cold start if true, hot (usual) if false.
+ */
+ public static ActivationSystem getInstance(File folder, boolean cold)
+ {
+ if (singleton2 == null)
+ singleton2 = new ActivationSystemImpl(folder, cold);
+ return singleton2;
+ }
+
+ /**
+ * Creates the group with transient maps.
+ *
+ * @param folder
+ * the folder, where the activation system will keep its files.
+ * @param cold
+ * do the cold start if true, hot (usual) if false.
+ */
+ protected ActivationSystemImpl(File folder, boolean cold)
+ {
+ super(new PersistentBidiHashTable(), new PersistentBidiHashTable());
+ singleton2 = this;
+ ((PersistentBidiHashTable) groupDescs).init(
+ new File(folder, "asi_objects.data"), cold);
+ ((PersistentBidiHashTable) descriptions).init(
+ new File(folder, "asi_groups.data"), cold);
+ }
+
+ /** @inheritDoc */
+ public MarshalledObject activate(ActivationID id, boolean force)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ return super.activate(id, force);
+ }
+
+ /** @inheritDoc */
+ public ActivationMonitor activeGroup(ActivationGroupID id,
+ ActivationInstantiator group,
+ long incarnation)
+ throws UnknownGroupException, ActivationException, RemoteException
+ {
+ return super.activeGroup(id, group, incarnation);
+ }
+
+ /** @inheritDoc */
+ public void activeObject(ActivationID id, MarshalledObject obj)
+ throws UnknownObjectException, RemoteException
+ {
+ super.activeObject(id, obj);
+ }
+
+ /** @inheritDoc */
+ public ActivationDesc getActivationDesc(ActivationID id)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ return super.getActivationDesc(id);
+ }
+
+ public ActivationGroupDesc getActivationGroupDesc(ActivationGroupID groupId)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ return super.getActivationGroupDesc(groupId);
+ }
+
+ /** @inheritDoc */
+ public void inactiveGroup(ActivationGroupID groupId, long incarnation)
+ throws UnknownGroupException, RemoteException
+ {
+ super.inactiveGroup(groupId, incarnation);
+ }
+
+ /** @inheritDoc */
+ public void inactiveObject(ActivationID id) throws UnknownObjectException,
+ RemoteException
+ {
+ super.inactiveObject(id);
+ }
+
+ /** @inheritDoc */
+ public ActivationGroupID registerGroup(ActivationGroupDesc groupDesc)
+ throws ActivationException, RemoteException
+ {
+ return super.registerGroup(groupDesc);
+ }
+
+ /** @inheritDoc */
+ public ActivationID registerObject(ActivationDesc desc)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ return super.registerObject(desc);
+ }
+
+ /** @inheritDoc */
+ public ActivationDesc setActivationDesc(ActivationID id, ActivationDesc desc)
+ throws ActivationException, UnknownObjectException,
+ UnknownGroupException, RemoteException
+ {
+ return super.setActivationDesc(id, desc);
+ }
+
+ /** @inheritDoc */
+ public ActivationGroupDesc setActivationGroupDesc(
+ ActivationGroupID groupId, ActivationGroupDesc groupDesc)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ return super.setActivationGroupDesc(groupId, groupDesc);
+ }
+
+ /**
+ * This method saves the state of the activation system and then
+ * terminates in 10 seconds.
+ */
+ public void shutdown() throws RemoteException
+ {
+ super.shutdown();
+ System.out.println("Shutdown command received. Will terminate in 10 s");
+ Persistent.timer.schedule(new Persistent.ExitTask(), 10000);
+ }
+
+ /** @inheritDoc */
+ public void unregisterGroup(ActivationGroupID groupId)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ super.unregisterGroup(groupId);
+ }
+
+ /** @inheritDoc */
+ public void unregisterObject(ActivationID id) throws ActivationException,
+ UnknownObjectException, RemoteException
+ {
+ super.unregisterObject(id);
+ }
+
+ /**
+ * Read the object from the input stream.
+ *
+ * @param in the stream to read from
+ *
+ * @throws IOException if thrown by the stream
+ * @throws ClassNotFoundException
+ */
+ private void readObject(ObjectInputStream in) throws IOException,
+ ClassNotFoundException
+ {
+ // Read no fields.
+ }
+
+ /**
+ * Write the object to the output stream.
+ *
+ * @param out the stream to write int
+ * @throws IOException if thrown by the stream
+ * @throws ClassNotFoundException
+ */
+ private void writeObject(ObjectOutputStream out) throws IOException,
+ ClassNotFoundException
+ {
+ // Write no fields.
+ };
+
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java
new file mode 100644
index 0000000..22fa10e
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/rmi/rmid/ActivationSystemImpl_Stub.java
@@ -0,0 +1,556 @@
+/* ActivationSystemImpl.java -- implementation of the activation system.
+ Copyright (c) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.tools.rmi.rmid;
+
+import java.rmi.MarshalledObject;
+import java.rmi.RemoteException;
+import java.rmi.activation.ActivationDesc;
+import java.rmi.activation.ActivationException;
+import java.rmi.activation.ActivationGroupDesc;
+import java.rmi.activation.ActivationGroupID;
+import java.rmi.activation.ActivationID;
+import java.rmi.activation.ActivationInstantiator;
+import java.rmi.activation.ActivationMonitor;
+import java.rmi.activation.ActivationSystem;
+import java.rmi.activation.Activator;
+import java.rmi.activation.UnknownGroupException;
+import java.rmi.activation.UnknownObjectException;
+
+import java.lang.reflect.Method;
+import java.rmi.server.RemoteRef;
+import java.rmi.server.RemoteStub;
+import java.rmi.UnexpectedException;
+
+/**
+ * This class delegates its method calls to the remote RMI object, referenced
+ * by {@link RemoteRef}.
+ *
+ * It is normally generated with rmic.
+ */
+public final class ActivationSystemImpl_Stub
+ extends RemoteStub
+ implements ActivationMonitor, Activator, ActivationSystem
+{
+ /**
+ * Use serialVersionUID for interoperability
+ */
+ private static final long serialVersionUID = 2;
+
+ /**
+ * The explaining message for {@ling UnexpectedException}.
+ */
+ private static final String exception_message =
+ "undeclared checked exception";
+
+ /* All remote methods, invoked by this stub: */
+ private static final Method met_setActivationGroupDesc;
+ private static final Method met_inactiveGroup;
+ private static final Method met_unregisterObject;
+ private static final Method met_getActivationDesc;
+ private static final Method met_setActivationDesc;
+ private static final Method met_shutdown;
+ private static final Method met_activate;
+ private static final Method met_activeGroup;
+ private static final Method met_registerGroup;
+ private static final Method met_getActivationGroupDesc;
+ private static final Method met_activeObject;
+ private static final Method met_registerObject;
+ private static final Method met_inactiveObject;
+ private static final Method met_unregisterGroup;
+ private static final Object[] NO_ARGS = new Object[0];
+ static
+ {
+ final Class[] NO_ARGSc = new Class[0];
+ try
+ {
+ met_setActivationGroupDesc =
+ ActivationSystem.class.getMethod("setActivationGroupDesc", new Class[]
+ {
+ ActivationGroupID.class, ActivationGroupDesc.class
+ });
+ met_inactiveGroup =
+ ActivationMonitor.class.getMethod("inactiveGroup", new Class[]
+ {
+ ActivationGroupID.class, long.class
+ });
+ met_unregisterObject =
+ ActivationSystem.class.getMethod("unregisterObject", new Class[]
+ {
+ ActivationID.class
+ });
+ met_getActivationDesc =
+ ActivationSystem.class.getMethod("getActivationDesc", new Class[]
+ {
+ ActivationID.class
+ });
+ met_setActivationDesc =
+ ActivationSystem.class.getMethod("setActivationDesc", new Class[]
+ {
+ ActivationID.class, ActivationDesc.class
+ });
+ met_shutdown =
+ ActivationSystem.class.getMethod("shutdown", NO_ARGSc);
+ met_activate =
+ Activator.class.getMethod("activate", new Class[]
+ {
+ ActivationID.class, boolean.class
+ });
+ met_activeGroup =
+ ActivationSystem.class.getMethod("activeGroup", new Class[]
+ {
+ ActivationGroupID.class, ActivationInstantiator.class, long.class
+ });
+ met_registerGroup =
+ ActivationSystem.class.getMethod("registerGroup", new Class[]
+ {
+ ActivationGroupDesc.class
+ });
+ met_getActivationGroupDesc =
+ ActivationSystem.class.getMethod("getActivationGroupDesc", new Class[]
+ {
+ ActivationGroupID.class
+ });
+ met_activeObject =
+ ActivationMonitor.class.getMethod("activeObject", new Class[]
+ {
+ ActivationID.class, MarshalledObject.class
+ });
+ met_registerObject =
+ ActivationSystem.class.getMethod("registerObject", new Class[]
+ {
+ ActivationDesc.class
+ });
+ met_inactiveObject =
+ ActivationMonitor.class.getMethod("inactiveObject", new Class[]
+ {
+ ActivationID.class
+ });
+ met_unregisterGroup =
+ ActivationSystem.class.getMethod("unregisterGroup", new Class[]
+ {
+ ActivationGroupID.class
+ });
+
+ }
+ catch (NoSuchMethodException nex)
+ {
+ NoSuchMethodError err = new NoSuchMethodError(
+ "ActivationSystemImpl_Stub class initialization failed");
+ err.initCause(nex);
+ throw err;
+ }
+ }
+
+ /**
+ * Create the instance for _ActivationSystemImpl_Stub that forwards method calls to the
+ * remote object.
+ *
+ * @para the reference to the remote object.
+ */
+ public ActivationSystemImpl_Stub(RemoteRef reference)
+ {
+ super(reference);
+ }
+
+ /* Methods */
+ /** @inheritDoc */
+ public ActivationGroupDesc setActivationGroupDesc(ActivationGroupID p0,
+ ActivationGroupDesc p1)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_setActivationGroupDesc,
+ new Object[] { p0, p1 },
+ 1213918527826541191L);
+ return (ActivationGroupDesc) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void inactiveGroup(ActivationGroupID p0, long p1)
+ throws UnknownGroupException, RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_inactiveGroup, new Object[] { p0, new Long(p1) },
+ -399287892768650944L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void unregisterObject(ActivationID p0) throws ActivationException,
+ UnknownObjectException, RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_unregisterObject, new Object[] { p0 },
+ -6843850585331411084L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationDesc getActivationDesc(ActivationID p0)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_getActivationDesc,
+ new Object[] { p0 }, 4830055440982622087L);
+ return (ActivationDesc) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationDesc setActivationDesc(ActivationID p0, ActivationDesc p1)
+ throws ActivationException, UnknownObjectException,
+ UnknownGroupException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_setActivationDesc,
+ new Object[] { p0, p1 },
+ 7128043237057180796L);
+ return (ActivationDesc) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void shutdown() throws RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_shutdown, NO_ARGS, -7207851917985848402L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public MarshalledObject activate(ActivationID p0, boolean p1)
+ throws ActivationException, UnknownObjectException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_activate,
+ new Object[] { p0, new Boolean(p1) },
+ -8767355154875805558L);
+ return (MarshalledObject) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationMonitor activeGroup(ActivationGroupID p0,
+ ActivationInstantiator p1, long p2)
+ throws UnknownGroupException, ActivationException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_activeGroup,
+ new Object[] { p0, p1, new Long(p2) },
+ -4575843150759415294L);
+ return (ActivationMonitor) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationGroupID registerGroup(ActivationGroupDesc p0)
+ throws ActivationException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_registerGroup,
+ new Object[] { p0 }, 6921515268192657754L);
+ return (ActivationGroupID) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationGroupDesc getActivationGroupDesc(ActivationGroupID p0)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_getActivationGroupDesc,
+ new Object[] { p0 }, -8701843806548736528L);
+ return (ActivationGroupDesc) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void activeObject(ActivationID p0, MarshalledObject p1)
+ throws UnknownObjectException, RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_activeObject, new Object[] { p0, p1 },
+ 2543984342209939736L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public ActivationID registerObject(ActivationDesc p0)
+ throws ActivationException, UnknownGroupException, RemoteException
+ {
+ try
+ {
+ Object result = ref.invoke(this, met_registerObject,
+ new Object[] { p0 }, -3006759798994351347L);
+ return (ActivationID) result;
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void inactiveObject(ActivationID p0) throws UnknownObjectException,
+ RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_inactiveObject, new Object[] { p0 },
+ -4165404120701281807L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+ /** @inheritDoc */
+ public void unregisterGroup(ActivationGroupID p0) throws ActivationException,
+ UnknownGroupException, RemoteException
+ {
+ try
+ {
+ ref.invoke(this, met_unregisterGroup, new Object[] { p0 },
+ 3768097077835970701L);
+ }
+ catch (RuntimeException e)
+ {
+ throw e;
+ }
+ catch (RemoteException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ UnexpectedException uex = new UnexpectedException(exception_message);
+ uex.detail = e;
+ throw uex;
+ }
+ }
+
+
+}
diff --git a/libjava/classpath/tools/jarsigner.sh.in b/libjava/classpath/tools/jarsigner.sh.in
new file mode 100644
index 0000000..cea95a2
--- /dev/null
+++ b/libjava/classpath/tools/jarsigner.sh.in
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+## Copyright (C) 2006 Free Software Foundation, Inc.
+##
+## This file is a part of GNU Classpath.
+##
+## GNU Classpath 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 (at
+## your option) any later version.
+##
+## GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+## USA.
+##
+## Linking this library statically or dynamically with other modules is
+## making a combined work based on this library. Thus, the terms and
+## conditions of the GNU General Public License cover the whole
+## combination.
+##
+## As a special exception, the copyright holders of this library give you
+## permission to link this library with independent modules to produce an
+## executable, regardless of the license terms of these independent
+## modules, and to copy and distribute the resulting executable under
+## terms of your choice, provided that you also meet, for each linked
+## independent module, the terms and conditions of the license of that
+## module. An independent module is a module which is not derived from
+## or based on this library. If you modify this library, you may extend
+## this exception to your version of the library, but you are not
+## obligated to do so. If you do not wish to do so, delete this
+## exception statement from your version.
+##
+##
+## A simple shell script to launch the GNU Classpath jarsigner tool.
+##
+
+prefix=@prefix@
+tools_dir=@datadir@/@PACKAGE@
+tools_cp=${tools_dir}/tools.zip
+
+# find the java executable...
+if [ -z "${JAVA}" ] ; then
+ if [ -n "${JAVA_HOME}" ] ; then
+ if [ -x "${JAVA_HOME}/jre/sh/java" ] ; then
+ JAVA="${JAVA_HOME}/jre/sh/java"
+ else
+ JAVA="${JAVA_HOME}/bin/java"
+ fi
+ else
+ JAVA=`which java 2> /dev/null `
+ if [ -z "${JAVA}" ] ; then
+ JAVA=java
+ fi
+ fi
+fi
+
+exec "${JAVA}" -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.jarsigner.Main $@
diff --git a/libjava/classpath/tools/keytool.sh.in b/libjava/classpath/tools/keytool.sh.in
new file mode 100644
index 0000000..6c11dc4
--- /dev/null
+++ b/libjava/classpath/tools/keytool.sh.in
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+## Copyright (C) 2006 Free Software Foundation, Inc.
+##
+## This file is a part of GNU Classpath.
+##
+## GNU Classpath 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 (at
+## your option) any later version.
+##
+## GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+## USA.
+##
+## Linking this library statically or dynamically with other modules is
+## making a combined work based on this library. Thus, the terms and
+## conditions of the GNU General Public License cover the whole
+## combination.
+##
+## As a special exception, the copyright holders of this library give you
+## permission to link this library with independent modules to produce an
+## executable, regardless of the license terms of these independent
+## modules, and to copy and distribute the resulting executable under
+## terms of your choice, provided that you also meet, for each linked
+## independent module, the terms and conditions of the license of that
+## module. An independent module is a module which is not derived from
+## or based on this library. If you modify this library, you may extend
+## this exception to your version of the library, but you are not
+## obligated to do so. If you do not wish to do so, delete this
+## exception statement from your version.
+##
+##
+## A simple shell script to launch the GNU Classpath keytool tool.
+##
+
+prefix=@prefix@
+tools_dir=@datadir@/@PACKAGE@
+tools_cp=${tools_dir}/tools.zip
+
+# find the java executable...
+if [ -z "${JAVA}" ] ; then
+ if [ -n "${JAVA_HOME}" ] ; then
+ if [ -x "${JAVA_HOME}/jre/sh/java" ] ; then
+ JAVA="${JAVA_HOME}/jre/sh/java"
+ else
+ JAVA="${JAVA_HOME}/bin/java"
+ fi
+ else
+ JAVA=`which java 2> /dev/null `
+ if [ -z "${JAVA}" ] ; then
+ JAVA=java
+ fi
+ fi
+fi
+
+exec "${JAVA}" -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.keytool.Main $@
diff --git a/libjava/classpath/vm/reference/gnu/classpath/Unsafe.java b/libjava/classpath/vm/reference/gnu/classpath/Unsafe.java
new file mode 100644
index 0000000..6e4ec98
--- /dev/null
+++ b/libjava/classpath/vm/reference/gnu/classpath/Unsafe.java
@@ -0,0 +1,328 @@
+/* Unsafe.java - Unsafe operations needed for concurrency
+ Copyright (C) 2006 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.classpath;
+
+import java.lang.reflect.Field;
+
+/**
+ * This class should provide access to low-level operations and its
+ * use should be limited to trusted code. Fields can be accessed using
+ * memory addresses, with undefined behaviour occurring if invalid memory
+ * addresses are given.
+ *
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ */
+public final class Unsafe
+{
+ // Singleton class.
+ private static Unsafe unsafe = new Unsafe();
+
+ /**
+ * Private default constructor to prevent creation of an arbitrary
+ * number of instances.
+ */
+ private Unsafe()
+ {
+ }
+
+ /**
+ * Retrieve the singleton instance of <code>Unsafe</code>. The calling
+ * method should guard this instance from untrusted code, as it provides
+ * access to low-level operations such as direct memory access.
+ *
+ * @throws SecurityException if a security manager exists and prevents
+ * access to the system properties.
+ */
+ public static Unsafe getUnsafe()
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPropertiesAccess();
+ return unsafe;
+ }
+
+ /**
+ * Returns the memory address offset of the given static field.
+ * The offset is merely used as a means to access a particular field
+ * in the other methods of this class. The value is unique to the given
+ * field and the same value should be returned on each subsequent call.
+ *
+ * @param field the field whose offset should be returned.
+ * @return the offset of the given field.
+ */
+ public native long objectFieldOffset(Field field);
+
+ /**
+ * Compares the value of the integer field at the specified offset
+ * in the supplied object with the given expected value, and updates
+ * it if they match. The operation of this method should be atomic,
+ * thus providing an uninterruptible way of updating an integer field.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the integer field within <code>obj</code>.
+ * @param expect the expected value of the field.
+ * @param update the new value of the field if it equals <code>expect</code>.
+ * @return true if the field was changed.
+ */
+ public native boolean compareAndSwapInt(Object obj, long offset,
+ int expect, int update);
+
+ /**
+ * Compares the value of the long field at the specified offset
+ * in the supplied object with the given expected value, and updates
+ * it if they match. The operation of this method should be atomic,
+ * thus providing an uninterruptible way of updating a long field.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @param expect the expected value of the field.
+ * @param update the new value of the field if it equals <code>expect</code>.
+ * @return true if the field was changed.
+ */
+ public native boolean compareAndSwapLong(Object obj, long offset,
+ long expect, long update);
+
+ /**
+ * Compares the value of the object field at the specified offset
+ * in the supplied object with the given expected value, and updates
+ * it if they match. The operation of this method should be atomic,
+ * thus providing an uninterruptible way of updating an object field.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the object field within <code>obj</code>.
+ * @param expect the expected value of the field.
+ * @param update the new value of the field if it equals <code>expect</code>.
+ * @return true if the field was changed.
+ */
+ public native boolean compareAndSwapObject(Object obj, long offset,
+ Object expect, Object update);
+
+ /**
+ * Sets the value of the integer field at the specified offset in the
+ * supplied object to the given value. This is an ordered or lazy
+ * version of <code>putIntVolatile(Object,long,int)</code>, which
+ * doesn't guarantee the immediate visibility of the change to other
+ * threads. It is only really useful where the integer field is
+ * <code>volatile</code>, and is thus expected to change unexpectedly.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the integer field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putIntVolatile(Object,long,int)
+ */
+ public native void putOrderedInt(Object obj, long offset, int value);
+
+ /**
+ * Sets the value of the long field at the specified offset in the
+ * supplied object to the given value. This is an ordered or lazy
+ * version of <code>putLongVolatile(Object,long,long)</code>, which
+ * doesn't guarantee the immediate visibility of the change to other
+ * threads. It is only really useful where the long field is
+ * <code>volatile</code>, and is thus expected to change unexpectedly.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putLongVolatile(Object,long,long)
+ */
+ public native void putOrderedLong(Object obj, long offset, long value);
+
+ /**
+ * Sets the value of the object field at the specified offset in the
+ * supplied object to the given value. This is an ordered or lazy
+ * version of <code>putObjectVolatile(Object,long,Object)</code>, which
+ * doesn't guarantee the immediate visibility of the change to other
+ * threads. It is only really useful where the object field is
+ * <code>volatile</code>, and is thus expected to change unexpectedly.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the object field within <code>obj</code>.
+ * @param value the new value of the field.
+ */
+ public native void putOrderedObject(Object obj, long offset, Object value);
+
+ /**
+ * Sets the value of the integer field at the specified offset in the
+ * supplied object to the given value, with volatile store semantics.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the integer field within <code>obj</code>.
+ * @param value the new value of the field.
+ */
+ public native void putIntVolatile(Object obj, long offset, int value);
+
+ /**
+ * Retrieves the value of the integer field at the specified offset in the
+ * supplied object with volatile load semantics.
+ *
+ * @param obj the object containing the field to read.
+ * @param offset the offset of the integer field within <code>obj</code>.
+ */
+ public native int getIntVolatile(Object obj, long offset);
+
+ /**
+ * Sets the value of the long field at the specified offset in the
+ * supplied object to the given value, with volatile store semantics.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putLong(Object,long,long)
+ */
+ public native void putLongVolatile(Object obj, long offset, long value);
+
+ /**
+ * Sets the value of the long field at the specified offset in the
+ * supplied object to the given value.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putLongVolatile(Object,long,long)
+ */
+ public native void putLong(Object obj, long offset, long value);
+
+ /**
+ * Retrieves the value of the long field at the specified offset in the
+ * supplied object with volatile load semantics.
+ *
+ * @param obj the object containing the field to read.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @see #getLong(Object,long)
+ */
+ public native long getLongVolatile(Object obj, long offset);
+
+ /**
+ * Retrieves the value of the long field at the specified offset in the
+ * supplied object.
+ *
+ * @param obj the object containing the field to read.
+ * @param offset the offset of the long field within <code>obj</code>.
+ * @see #getLongVolatile(Object,long)
+ */
+ public native long getLong(Object obj, long offset);
+
+ /**
+ * Sets the value of the object field at the specified offset in the
+ * supplied object to the given value, with volatile store semantics.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the object field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putObject(Object,long,Object)
+ */
+ public native void putObjectVolatile(Object obj, long offset, Object value);
+
+ /**
+ * Sets the value of the object field at the specified offset in the
+ * supplied object to the given value.
+ *
+ * @param obj the object containing the field to modify.
+ * @param offset the offset of the object field within <code>obj</code>.
+ * @param value the new value of the field.
+ * @see #putObjectVolatile(Object,long,Object)
+ */
+ public native void putObject(Object obj, long offset, Object value);
+
+ /**
+ * Retrieves the value of the object field at the specified offset in the
+ * supplied object with volatile load semantics.
+ *
+ * @param obj the object containing the field to read.
+ * @param offset the offset of the object field within <code>obj</code>.
+ */
+ public native Object getObjectVolatile(Object obj, long offset);
+
+ /**
+ * Returns the offset of the first element for a given array class.
+ * To access elements of the array class, this value may be used along
+ * with that returned by
+ * <a href="#arrayIndexScale"><code>arrayIndexScale</code></a>,
+ * if non-zero.
+ *
+ * @param arrayClass the class for which the first element's address should
+ * be obtained.
+ * @return the offset of the first element of the array class.
+ * @see #arrayIndexScale(Class)
+ */
+ public native int arrayBaseOffset(Class arrayClass);
+
+ /**
+ * Returns the scale factor used for addressing elements of the supplied
+ * array class. Where a suitable scale factor can not be returned (e.g.
+ * for primitive types), zero should be returned. The returned value
+ * can be used with
+ * <a href="#arrayBaseOffset"><code>arrayBaseOffset</code></a>
+ * to access elements of the class.
+ *
+ * @param arrayClass the class whose scale factor should be returned.
+ * @return the scale factor, or zero if not supported for this array class.
+ */
+ public native int arrayIndexScale(Class arrayClass);
+
+ /**
+ * Releases the block on a thread created by
+ * <a href="#park"><code>park</code></a>. This method can also be used
+ * to terminate a blockage caused by a prior call to <code>park</code>.
+ * This operation is unsafe, as the thread must be guaranteed to be
+ * live. This is true of Java, but not native code.
+ *
+ * @param thread the thread to unblock.
+ */
+ public native void unpark(Thread thread);
+
+ /**
+ * Blocks the thread until a matching
+ * <a href="#unpark"><code>unpark</code></a> occurs, the thread is
+ * interrupted or the optional timeout expires. If an <code>unpark</code>
+ * call has already occurred, this also counts. A timeout value of zero
+ * is defined as no timeout. When <code>isAbsolute</code> is
+ * <code>true</code>, the timeout is in milliseconds relative to the
+ * epoch. Otherwise, the value is the number of nanoseconds which must
+ * occur before timeout. This call may also return spuriously (i.e.
+ * for no apparent reason).
+ *
+ * @param isAbsolute true if the timeout is specified in milliseconds from
+ * the epoch.
+ * @param time either the number of nanoseconds to wait, or a time in
+ * milliseconds from the epoch to wait for.
+ */
+ public native void park(boolean isAbsolute, long time);
+
+}
diff --git a/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMIdManager.java b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMIdManager.java
index 6a8be10..8d423e9 100644
--- a/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMIdManager.java
+++ b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMIdManager.java
@@ -48,11 +48,9 @@ import gnu.classpath.jdwp.id.*;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
-import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Hashtable;
-import java.util.Iterator;
/**
* This class manages objects and referencetypes that are reported
@@ -111,7 +109,7 @@ public class VMIdManager
/**
* Returns a new id for the given object
*
- * @param object the object for which an id is desired
+ * @param obj SoftReference of the object for which an id is desired
* @returns a suitable object id
*/
public static ObjectId newObjectId (SoftReference obj)
@@ -171,7 +169,7 @@ public class VMIdManager
/**
* Returns a new reference type id for the given class
*
- * @param clazz the <code>Class</code> for which an id is desired
+ * @param ref SoftReference to the desired type
* @returns a suitable reference type id or null when the
* reference is cleared.
*/
diff --git a/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMMethod.java b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMMethod.java
new file mode 100644
index 0000000..d345bc1
--- /dev/null
+++ b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMMethod.java
@@ -0,0 +1,178 @@
+/* VMMethod.java -- a method in a virtual machine
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.jdwp;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import gnu.classpath.jdwp.exception.JdwpException;
+import gnu.classpath.jdwp.util.LineTable;
+import gnu.classpath.jdwp.util.VariableTable;
+
+/**
+ * This class is really an amalgamation of two classes: one class
+ * represents a virtual machine method and the other represents
+ * the JDWP back-end's ID for the method.
+ *
+ * @author Keith Seitz (keiths@redhat.com)
+ */
+public class VMMethod
+{
+ /**
+ * Returns the size of a JDWP method ID
+ * @see gnu.classpath.jdwp.id.JdwpId#SIZE
+ */
+ public static final int SIZE = 8;
+
+ // The class in which this method is declared
+ private Class _class;
+
+ // The method's ID
+ private long _methodId;
+
+ /**
+ * Constructs a new VMMethod object. This constructor is protected
+ * so that only the factory methods of VMVirtualMachine can be used
+ * to create VMMethods.
+ *
+ * @param klass the method's containing class
+ * @param id method identifier, e.g., jmethodID
+ * @see gnu.classpath.jdwp.VMVirtualMachine#getAllClassMethods
+ * @see gnu.classpath.jdwp.VMVirtualMachine#getClassMethod
+ */
+ protected VMMethod(Class klass, long id)
+ {
+ _class = klass;
+ _methodId = id;
+ }
+
+ /**
+ * Returns the internal method ID for this method
+ */
+ public long getId()
+ {
+ return _methodId;
+ }
+
+ /**
+ * Returns the method's declaring class
+ */
+ public Class getDeclaringClass()
+ {
+ return _class;
+ }
+
+ /**
+ * Returns the name of this method
+ */
+ public native String getName();
+
+ /**
+ * Returns the signature of this method
+ */
+ public native String getSignature();
+
+ /**
+ * Returns the method's modifier flags
+ */
+ public native int getModifiers();
+
+ /**
+ * "Returns line number information for the method, if present. The line
+ * table maps source line numbers to the initial code index of the line.
+ * The line table is ordered by code index (from lowest to highest). The
+ * line number information is constant unless a new class definition is
+ * installed using RedefineClasses."
+ *
+ * @return the line table
+ * @throws JdwpException
+ */
+ public native LineTable getLineTable()
+ throws JdwpException;
+
+ /**
+ * "Returns variable information for the method. The variable table
+ * includes arguments and locals declared within the method. For instance
+ * methods, the "this" reference is included in the table. Also, synthetic
+ * variables may be present."
+ *
+ * @return the variable table
+ * @throws JdwpException
+ */
+ public native VariableTable getVariableTable()
+ throws JdwpException;
+
+ /**
+ * Returns a string representation of this method (not
+ * required but nice for debugging).
+ */
+ public String toString()
+ {
+ return getDeclaringClass().getName() + "." + getName();
+ }
+
+ /**
+ * Writes the method's ID to the output stream
+ *
+ * @param ostream the output stream to which to write
+ * @throws IOException for any errors writing to the stream
+ * @see gnu.classpath.jdwp.id.JdwpId#write
+ */
+ public void writeId(DataOutputStream ostream)
+ throws IOException
+ {
+ ostream.writeLong(getId());
+ }
+
+ /**
+ * Returns a VMMethod from the ID in the byte buffer
+ *
+ * @param klass the method's declaring class
+ * @param bb a ByteBuffer containing the method's ID
+ * @throws JdwpException for any errors creating the method
+ * @throws IOException for any errors reading from the buffer
+ */
+ public static VMMethod readId(Class klass, ByteBuffer bb)
+ throws JdwpException, IOException
+ {
+ return VMVirtualMachine.getClassMethod(klass, bb.getLong());
+ }
+}
diff --git a/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
index aa285cb..d861606 100644
--- a/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
+++ b/libjava/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
@@ -1,7 +1,7 @@
/* VMVirtualMachine.java -- A reference implementation of a JDWP virtual
machine
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -42,16 +42,9 @@ exception statement from your version. */
package gnu.classpath.jdwp;
import gnu.classpath.jdwp.event.EventRequest;
+import gnu.classpath.jdwp.exception.InvalidMethodException;
import gnu.classpath.jdwp.exception.JdwpException;
-import gnu.classpath.jdwp.exception.InvalidClassException;
-import gnu.classpath.jdwp.exception.InvalidObjectException;
-import gnu.classpath.jdwp.id.ObjectId;
-import gnu.classpath.jdwp.id.ReferenceTypeId;
-import gnu.classpath.jdwp.util.LineTable;
import gnu.classpath.jdwp.util.MethodResult;
-import gnu.classpath.jdwp.util.VariableTable;
-
-import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -80,7 +73,7 @@ public class VMVirtualMachine
{
// Our JDWP thread group -- don't suspend any of those threads
Thread current = Thread.currentThread ();
- ThreadGroup jdwpGroup = current.getThreadGroup ();
+ ThreadGroup jdwpGroup = Jdwp.getDefault().getJdwpThreadGroup();
// Find the root ThreadGroup
ThreadGroup group = jdwpGroup;
@@ -112,7 +105,8 @@ public class VMVirtualMachine
}
// Now suspend the current thread
- suspendThread (current);
+ if (current.getThreadGroup() != jdwpGroup)
+ suspendThread (current);
}
/**
@@ -197,6 +191,29 @@ public class VMVirtualMachine
public static native int getClassStatus (Class clazz)
throws JdwpException;
+ /**
+ * Returns all of the methods defined in the given class. This
+ * includes all methods, constructors, and class initializers.
+ *
+ * @param klass the class whose methods are desired
+ * @return an array of virtual machine methods
+ */
+ public static native VMMethod[] getAllClassMethods (Class klass)
+ { return null; }
+
+ /**
+ * A factory method for getting valid virtual machine methods
+ * which may be passed to/from the debugger.
+ *
+ * @param klass the class in which the method is defined
+ * @param id the ID of the desired method
+ * @return the desired internal representation of the method
+ * @throws InvalidMethodException if the method is not defined
+ * in the class
+ * @throws JdwpException for any other error
+ */
+ public static native VMMethod getClassMethod(Class klass, long id)
+ { return null; }
/**
* Returns the thread's call stack
@@ -206,7 +223,7 @@ public class VMVirtualMachine
* @param length number of frames to return (-1 for all frames)
* @return a list of frames
*/
- public static native ArrayList getFrames (Thread thread, int strart,
+ public static native ArrayList getFrames (Thread thread, int start,
int length)
throws JdwpException;
@@ -272,33 +289,6 @@ public class VMVirtualMachine
throws JdwpException;
/**
- * "Returns variable information for the method. The variable table
- * includes arguments and locals declared within the method. For instance
- * methods, the "this" reference is included in the table. Also, synthetic
- * variables may be present."
- *
- * @param clazz the class in which the method is defined
- * @param method the method for which variable information is desired
- * @return a result object containing the information
- */
- public static native VariableTable getVarTable (Class clazz, Method method)
- throws JdwpException;
-
- /**
- * "Returns line number information for the method, if present. The line
- * table maps source line numbers to the initial code index of the line.
- * The line table is ordered by code index (from lowest to highest). The
- * line number information is constant unless a new class definition is
- * installed using RedefineClasses."
- *
- * @param clazz the class in which the method is defined
- * @param method the method whose line table is desired
- * @return a result object containing the line table
- */
- public static native LineTable getLineTable (Class clazz, Method method)
- throws JdwpException;
-
- /**
* "Returns the name of source file in which a reference type was declared"
*
* @param clazz the class for which to return a source file
diff --git a/libjava/classpath/vm/reference/gnu/java/lang/VMInstrumentationImpl.java b/libjava/classpath/vm/reference/gnu/java/lang/VMInstrumentationImpl.java
new file mode 100644
index 0000000..eee9470
--- /dev/null
+++ b/libjava/classpath/vm/reference/gnu/java/lang/VMInstrumentationImpl.java
@@ -0,0 +1,108 @@
+/* VMInstrumentationImpl.java -- interface for the GNU implementation
+ of InstrumentationImpl
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.lang;
+
+import java.lang.instrument.ClassDefinition;
+import java.lang.instrument.Instrumentation;
+
+/**
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+final class VMInstrumentationImpl
+{
+
+ /**
+ * Returns if the current JVM supports class redefinition
+ *
+ * @return true if the current JVM supports class redefinition
+ */
+ static native boolean isRedefineClassesSupported();
+
+ /**
+ * Redefines classes given as parameters. The method has to call
+ * the callTransformers from InstrumentationImpl
+ *
+ * @param inst an instrumentation object
+ * @param definitions an array of bytecode<->class correspondance
+ *
+ * @throws ClassNotFoundException if a class cannot be found
+ * @throws UnmodifiableClassException if a class cannot be modified
+ * @throws UnsupportedOperationException if the JVM does not support
+ * redefinition or the redefinition made unsupported changes
+ * @throws ClassFormatError if a class file is not valid
+ * @throws NoClassDefFoundError if a class name is not equal to the name
+ * in the class file specified
+ * @throws UnsupportedClassVersionError if the class file version numbers
+ * are unsupported
+ * @throws ClassCircularityError if circularity occured with the new
+ * classes
+ * @throws LinkageError if a linkage error occurs
+ */
+ static native void redefineClasses(Instrumentation inst,
+ ClassDefinition[] definitions);
+
+ /**
+ * Get all the classes loaded by the JVM.
+ *
+ * @return an array containing all the classes loaded by the JVM. The array
+ * is empty if no class is loaded.
+ */
+ static native Class[] getAllLoadedClasses();
+
+ /**
+ * Get all the classes loaded by a given class loader
+ *
+ * @param loader the loader
+ *
+ * @return an array containing all the classes loaded by the given loader.
+ * The array is empty if no class was loaded by the loader.
+ */
+ static native Class[] getInitiatedClasses(ClassLoader loader);
+
+ /**
+ * Get the size of an object. The object is not null
+ *
+ * @param objectToSize the object
+ * @return the size of the object
+ */
+ static native long getObjectSize(Object objectToSize);
+
+}
diff --git a/libjava/classpath/vm/reference/java/lang/VMClass.java b/libjava/classpath/vm/reference/java/lang/VMClass.java
index 1b4c13e..2596506 100644
--- a/libjava/classpath/vm/reference/java/lang/VMClass.java
+++ b/libjava/classpath/vm/reference/java/lang/VMClass.java
@@ -1,5 +1,5 @@
/* VMClass.java -- VM Specific Class methods
- Copyright (C) 2003, 2004 Free Software Foundation
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -37,11 +37,14 @@ exception statement from your version. */
package java.lang;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
/*
* This class is a reference version, mainly for compiling a class library
@@ -51,9 +54,11 @@ import java.lang.reflect.Modifier;
/**
*
- * @author Etienne Gagnon <etienne.gagnon@uqam.ca>
- * @author Archie Cobbs <archie@dellroad.org>
- * @author C. Brian Jones <cbj@gnu.org>
+ * @author Etienne Gagnon (etienne.gagnon@uqam.ca)
+ * @author Archie Cobbs (archie@dellroad.org)
+ * @author C. Brian Jones (cbj@gnu.org)
+ * @author Tom Tromey (tromey@cygnus.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
*/
final class VMClass
{
@@ -278,4 +283,172 @@ final class VMClass
*/
static native void throwException(Throwable t);
+ /**
+ * Returns the simple name for the specified class, as used in the source
+ * code. For normal classes, this is the content returned by
+ * <code>getName()</code> which follows the last ".". Anonymous
+ * classes have no name, and so the result of calling this method is
+ * "". The simple name of an array consists of the simple name of
+ * its component type, followed by "[]". Thus, an array with the
+ * component type of an anonymous class has a simple name of simply
+ * "[]".
+ *
+ * @param klass the class whose simple name should be returned.
+ * @return the simple name for this class.
+ */
+ static String getSimpleName(Class klass)
+ {
+ if (isArray(klass))
+ {
+ return getComponentType(klass).getSimpleName() + "[]";
+ }
+ String fullName = getName(klass);
+ return fullName.substring(fullName.lastIndexOf(".") + 1);
+ }
+
+ /**
+ * Returns all annotations directly defined by the specified class. If
+ * there are no annotations associated with this class, then a zero-length
+ * array will be returned. The returned array may be modified by the client
+ * code, but this will have no effect on the annotation content of this
+ * class, and hence no effect on the return value of this method for
+ * future callers.
+ *
+ * @param klass the class whose annotations should be returned.
+ * @return the annotations directly defined by the specified class.
+ * @since 1.5
+ */
+ static native Annotation[] getDeclaredAnnotations(Class klass);
+
+ /**
+ * <p>
+ * Returns the canonical name of the specified class, as defined by section
+ * 6.7 of the Java language specification. Each package, top-level class,
+ * top-level interface and primitive type has a canonical name. A member
+ * class has a canonical name, if its parent class has one. Likewise,
+ * an array type has a canonical name, if its component type does.
+ * Local or anonymous classes do not have canonical names.
+ * </p>
+ * <p>
+ * The canonical name for top-level classes, top-level interfaces and
+ * primitive types is always the same as the fully-qualified name.
+ * For array types, the canonical name is the canonical name of its
+ * component type with `[]' appended.
+ * </p>
+ * <p>
+ * The canonical name of a member class always refers to the place where
+ * the class was defined, and is composed of the canonical name of the
+ * defining class and the simple name of the member class, joined by `.'.
+ * For example, if a <code>Person</code> class has an inner class,
+ * <code>M</code>, then both its fully-qualified name and canonical name
+ * is <code>Person.M</code>. A subclass, <code>Staff</code>, of
+ * <code>Person</code> refers to the same inner class by the fully-qualified
+ * name of <code>Staff.M</code>, but its canonical name is still
+ * <code>Person.M</code>.
+ * </p>
+ * <p>
+ * Where no canonical name is present, <code>null</code> is returned.
+ * </p>
+ *
+ * @param klass the class whose canonical name should be retrieved.
+ * @return the canonical name of the class, or <code>null</code> if the
+ * class doesn't have a canonical name.
+ * @since 1.5
+ */
+ static String getCanonicalName(Class klass)
+ {
+ if (isArray(klass))
+ {
+ String componentName = getComponentType(klass).getCanonicalName();
+ if (componentName != null)
+ return componentName + "[]";
+ }
+ if (isMemberClass(klass))
+ {
+ String memberName = getDeclaringClass(klass).getCanonicalName();
+ if (memberName != null)
+ return memberName + "." + getSimpleName(klass);
+ }
+ if (isLocalClass(klass) || isAnonymousClass(klass))
+ return null;
+ return getName(klass);
+ }
+
+ /**
+ * Returns the class which immediately encloses the specified class. If
+ * the class is a top-level class, this method returns <code>null</code>.
+ *
+ * @param klass the class whose enclosing class should be returned.
+ * @return the immediate enclosing class, or <code>null</code> if this is
+ * a top-level class.
+ * @since 1.5
+ */
+ static native Class getEnclosingClass(Class klass);
+
+ /**
+ * Returns the constructor which immediately encloses the specified class.
+ * If the class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @param klass the class whose enclosing constructor should be returned.
+ * @return the immediate enclosing constructor if the specified class is
+ * declared within a constructor. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ static native Constructor getEnclosingConstructor(Class klass);
+
+ /**
+ * Returns the method which immediately encloses the specified class. If
+ * the class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @param klass the class whose enclosing method should be returned.
+ * @return the immediate enclosing method if the specified class is
+ * declared within a method. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ static native Method getEnclosingMethod(Class klass);
+
+ /**
+ * Returns the class signature as specified in Class File Format
+ * chapter in the VM specification, or null if the class is not
+ * generic.
+ *
+ * @param klass the klass to test.
+ * @return a ClassSignature string.
+ * @since 1.5
+ */
+ static native String getClassSignature(Class klass);
+
+ /**
+ * Returns true if the specified class represents an anonymous class.
+ *
+ * @param klass the klass to test.
+ * @return true if the specified class represents an anonymous class.
+ * @since 1.5
+ */
+ static native boolean isAnonymousClass(Class klass);
+
+ /**
+ * Returns true if the specified class represents an local class.
+ *
+ * @param klass the klass to test.
+ * @return true if the specified class represents an local class.
+ * @since 1.5
+ */
+ static native boolean isLocalClass(Class klass);
+
+ /**
+ * Returns true if the specified class represents an member class.
+ *
+ * @param klass the klass to test.
+ * @return true if the specified class represents an member class.
+ * @since 1.5
+ */
+ static native boolean isMemberClass(Class klass);
+
} // class VMClass
diff --git a/libjava/classpath/vm/reference/java/lang/VMClassLoader.java b/libjava/classpath/vm/reference/java/lang/VMClassLoader.java
index 7412afe..4caa58c 100644
--- a/libjava/classpath/vm/reference/java/lang/VMClassLoader.java
+++ b/libjava/classpath/vm/reference/java/lang/VMClassLoader.java
@@ -1,6 +1,6 @@
/* VMClassLoader.java -- Reference implementation of native interface
required by ClassLoader
- Copyright (C) 1998, 2001, 2002, 2004, 2005 Free Software Foundation
+ Copyright (C) 1998, 2001, 2002, 2004, 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -39,17 +39,23 @@ exception statement from your version. */
package java.lang;
-import gnu.classpath.SystemProperties;
import gnu.classpath.Configuration;
+import gnu.classpath.SystemProperties;
+import gnu.java.lang.InstrumentationImpl;
+import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.lang.instrument.Instrumentation;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.ProtectionDomain;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.zip.ZipFile;
@@ -98,6 +104,7 @@ final class VMClassLoader
"GNU Classpath",
"GNU",
Configuration.CLASSPATH_VERSION,
+ null,
null);
definedPackages.put(packages[i], p);
@@ -235,12 +242,46 @@ final class VMClassLoader
/**
* Returns a String[] of native package names. The default
- * implementation returns an empty array, or you may decide
- * this needs native help.
+ * implementation tries to load a list of package from
+ * the META-INF/INDEX.LIST file in the boot jar file.
+ * If not found or if any exception is raised, it returns
+ * an empty array. You may decide this needs native help.
*/
private static String[] getBootPackages()
{
- return new String[0];
+ URL indexList = getResource("META-INF/INDEX.LIST");
+ if (indexList != null)
+ {
+ try
+ {
+ Set packageSet = new HashSet();
+ String line;
+ int lineToSkip = 3;
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(
+ indexList.openStream()));
+ while ((line = reader.readLine()) != null)
+ {
+ if (lineToSkip == 0)
+ {
+ if (line.length() == 0)
+ lineToSkip = 1;
+ else
+ packageSet.add(line.replace('/', '.'));
+ }
+ else
+ lineToSkip--;
+ }
+ reader.close();
+ return (String[]) packageSet.toArray(new String[packageSet.size()]);
+ }
+ catch (IOException e)
+ {
+ return new String[0];
+ }
+ }
+ else
+ return new String[0];
}
@@ -345,4 +386,45 @@ final class VMClassLoader
* for this class.
*/
static native Class findLoadedClass(ClassLoader cl, String name);
+
+ /**
+ * The Instrumentation object created by the vm when agents are defined.
+ */
+ static final Instrumentation instrumenter = null;
+
+ /**
+ * Call the transformers of the possible Instrumentation object. This
+ * implementation assumes the instrumenter is a
+ * <code>InstrumentationImpl</code> object. VM implementors would
+ * have to redefine this method if they provide their own implementation
+ * of the <code>Instrumentation</code> interface.
+ *
+ * @param loader the initiating loader
+ * @param name the name of the class
+ * @param data the data representing the classfile, in classfile format
+ * @param offset the offset into the data where the classfile starts
+ * @param len the length of the classfile data in the array
+ * @param pd the protection domain
+ * @return the new data representing the classfile
+ */
+ static final Class defineClassWithTransformers(ClassLoader loader,
+ String name, byte[] data, int offset, int len, ProtectionDomain pd)
+ {
+
+ if (instrumenter != null)
+ {
+ byte[] modifiedData = new byte[len];
+ System.arraycopy(data, offset, modifiedData, 0, len);
+ modifiedData =
+ ((InstrumentationImpl)instrumenter).callTransformers(loader, name,
+ null, pd, modifiedData);
+
+ return defineClass(loader, name, modifiedData, 0, modifiedData.length,
+ pd);
+ }
+ else
+ {
+ return defineClass(loader, name, data, offset, len, pd);
+ }
+ }
}
diff --git a/libjava/classpath/vm/reference/java/lang/VMProcess.java b/libjava/classpath/vm/reference/java/lang/VMProcess.java
index 26cfcc9..076e599 100644
--- a/libjava/classpath/vm/reference/java/lang/VMProcess.java
+++ b/libjava/classpath/vm/reference/java/lang/VMProcess.java
@@ -42,7 +42,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
/**
* Represents one external process. Each instance of this class is in
@@ -92,6 +95,7 @@ final class VMProcess extends Process
InputStream stdout; // process output stream
InputStream stderr; // process error stream
int exitValue; // process exit value
+ boolean redirect; // redirect stderr -> stdout
//
// Dedicated thread that does all the fork()'ing and wait()'ing
@@ -196,7 +200,8 @@ final class VMProcess extends Process
{
try
{
- process.nativeSpawn(process.cmd, process.env, process.dir);
+ process.nativeSpawn(process.cmd, process.env, process.dir,
+ process.redirect);
process.state = RUNNING;
activeMap.put(new Long(process.pid), process);
}
@@ -215,7 +220,8 @@ final class VMProcess extends Process
}
// Constructor
- private VMProcess(String[] cmd, String[] env, File dir) throws IOException
+ private VMProcess(String[] cmd, String[] env, File dir, boolean redirect)
+ throws IOException
{
// Initialize this process
@@ -223,6 +229,7 @@ final class VMProcess extends Process
this.cmd = cmd;
this.env = env;
this.dir = dir;
+ this.redirect = redirect;
// Add process to the new process work list and wakeup processThread
synchronized (workList)
@@ -275,11 +282,20 @@ final class VMProcess extends Process
// Invoked by native code (from nativeSpawn()) to record process info.
private void setProcessInfo(OutputStream stdin,
- InputStream stdout, InputStream stderr, long pid)
+ InputStream stdout, InputStream stderr, long pid)
{
this.stdin = stdin;
this.stdout = stdout;
- this.stderr = stderr;
+ if (stderr == null)
+ this.stderr = new InputStream()
+ {
+ public int read() throws IOException
+ {
+ return -1;
+ }
+ };
+ else
+ this.stderr = stderr;
this.pid = pid;
}
@@ -288,7 +304,24 @@ final class VMProcess extends Process
*/
static Process exec(String[] cmd, String[] env, File dir) throws IOException
{
- return new VMProcess(cmd, env, dir);
+ return new VMProcess(cmd, env, dir, false);
+ }
+
+ static Process exec(List cmd, Map env,
+ File dir, boolean redirect) throws IOException
+ {
+ String[] acmd = (String[]) cmd.toArray(new String[cmd.size()]);
+ String[] aenv = new String[env.size()];
+
+ int i = 0;
+ Iterator iter = env.entrySet().iterator();
+ while (iter.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ aenv[i++] = entry.getKey() + "=" + entry.getValue();
+ }
+
+ return new VMProcess(acmd, aenv, dir, redirect);
}
public OutputStream getOutputStream()
@@ -347,7 +380,8 @@ final class VMProcess extends Process
*
* @throws IOException if the O/S process could not be created.
*/
- native void nativeSpawn(String[] cmd, String[] env, File dir)
+ native void nativeSpawn(String[] cmd, String[] env, File dir,
+ boolean redirect)
throws IOException;
/**
diff --git a/libjava/classpath/vm/reference/java/lang/VMSystem.java b/libjava/classpath/vm/reference/java/lang/VMSystem.java
index 8a83cad..f96986d 100644
--- a/libjava/classpath/vm/reference/java/lang/VMSystem.java
+++ b/libjava/classpath/vm/reference/java/lang/VMSystem.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package java.lang;
+import java.util.List;
+
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileDescriptor;
@@ -50,6 +52,7 @@ import java.io.PrintStream;
* VM must implement.
*
* @author John Keiser
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
*/
final class VMSystem
{
@@ -135,40 +138,76 @@ final class VMSystem
public static native long currentTimeMillis();
/**
+ * <p>
+ * Returns the current value of a nanosecond-precise system timer.
+ * The value of the timer is an offset relative to some arbitrary fixed
+ * time, which may be in the future (making the value negative). This
+ * method is useful for timing events where nanosecond precision is
+ * required. This is achieved by calling this method before and after the
+ * event, and taking the difference betweent the two times:
+ * </p>
+ * <p>
+ * <code>long startTime = System.nanoTime();</code><br />
+ * <code>... <emph>event code</emph> ...</code><br />
+ * <code>long endTime = System.nanoTime();</code><br />
+ * <code>long duration = endTime - startTime;</code><br />
+ * </p>
+ * <p>
+ * Note that the value is only nanosecond-precise, and not accurate; there
+ * is no guarantee that the difference between two values is really a
+ * nanosecond. Also, the value is prone to overflow if the offset
+ * exceeds 2^63.
+ * </p>
+ *
+ * @return the time of a system timer in nanoseconds.
+ * @since 1.5
+ */
+ public static long nanoTime()
+ {
+ return currentTimeMillis() * 1000;
+ }
+
+ /**
+ * Returns a list of 'name=value' pairs representing the current environment
+ * variables.
+ *
+ * @return a list of 'name=value' pairs.
+ */
+ static native List environ();
+
+ /**
* Helper method which creates the standard input stream.
* VM implementors may choose to construct these streams differently.
* This method can also return null if the stream is created somewhere
* else in the VM startup sequence.
*/
-
- static InputStream makeStandardInputStream()
- {
- return new BufferedInputStream(new FileInputStream(FileDescriptor.in));
- }
-
+ static InputStream makeStandardInputStream()
+ {
+ return new BufferedInputStream(new FileInputStream(FileDescriptor.in));
+ }
+
/**
* Helper method which creates the standard output stream.
* VM implementors may choose to construct these streams differently.
* This method can also return null if the stream is created somewhere
* else in the VM startup sequence.
*/
+ static PrintStream makeStandardOutputStream()
+ {
+ return new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)), true);
+ }
- static PrintStream makeStandardOutputStream()
- {
- return new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)), true);
- }
/**
* Helper method which creates the standard error stream.
* VM implementors may choose to construct these streams differently.
* This method can also return null if the stream is created somewhere
* else in the VM startup sequence.
*/
-
- static PrintStream makeStandardErrorStream()
- {
- return new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.err)), true);
- }
-
+ static PrintStream makeStandardErrorStream()
+ {
+ return new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.err)), true);
+ }
+
/**
* Gets the value of an environment variable.
* Always returning null is a valid (but not very useful) implementation.
diff --git a/libjava/classpath/vm/reference/java/lang/VMThread.java b/libjava/classpath/vm/reference/java/lang/VMThread.java
index aa0b834..302de6c 100644
--- a/libjava/classpath/vm/reference/java/lang/VMThread.java
+++ b/libjava/classpath/vm/reference/java/lang/VMThread.java
@@ -1,5 +1,5 @@
/* VMThread -- VM interface for Thread of executable code
- Copyright (C) 2003, 2004, 2005 Free Software Foundation
+ Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -123,7 +123,9 @@ final class VMThread
{
try
{
- thread.group.uncaughtException(thread, t);
+ Thread.UncaughtExceptionHandler handler;
+ handler = thread.getUncaughtExceptionHandler();
+ handler.uncaughtException(thread, t);
}
catch(Throwable ignore)
{
diff --git a/libjava/classpath/vm/reference/java/lang/reflect/Constructor.java b/libjava/classpath/vm/reference/java/lang/reflect/Constructor.java
index cb633db..521190b 100644
--- a/libjava/classpath/vm/reference/java/lang/reflect/Constructor.java
+++ b/libjava/classpath/vm/reference/java/lang/reflect/Constructor.java
@@ -1,5 +1,5 @@
/* java.lang.reflect.Constructor - reflection of Java constructors
- Copyright (C) 1998, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,10 @@ exception statement from your version. */
package java.lang.reflect;
+import gnu.java.lang.ClassHelper;
+
+import gnu.java.lang.reflect.MethodSignatureParser;
+
import java.util.Arrays;
/**
@@ -74,11 +78,15 @@ import java.util.Arrays;
* @status updated to 1.4
*/
public final class Constructor
-extends AccessibleObject implements Member
+ extends AccessibleObject
+ implements GenericDeclaration, Member
{
private Class clazz;
private int slot;
+ private static final int CONSTRUCTOR_MODIFIERS
+ = Modifier.PRIVATE | Modifier.PROTECTED | Modifier.PUBLIC;
+
/**
* This class is uninstantiable except from native code.
*/
@@ -112,6 +120,13 @@ extends AccessibleObject implements Member
}
/**
+ * Return the raw modifiers for this constructor. In particular
+ * this will include the synthetic and varargs bits.
+ * @return the constructor's modifiers
+ */
+ private native int getModifiersInternal();
+
+ /**
* Gets the modifiers this constructor uses. Use the <code>Modifier</code>
* class to interpret the values. A constructor can only have a subset of the
* following modifiers: public, private, protected.
@@ -119,7 +134,31 @@ extends AccessibleObject implements Member
* @return an integer representing the modifiers to this Member
* @see Modifier
*/
- public native int getModifiers();
+ public int getModifiers()
+ {
+ return getModifiersInternal() & CONSTRUCTOR_MODIFIERS;
+ }
+
+ /**
+ * Return true if this constructor is synthetic, false otherwise.
+ * A synthetic member is one which is created by the compiler,
+ * and which does not appear in the user's source code.
+ * @since 1.5
+ */
+ public boolean isSynthetic()
+ {
+ return (getModifiersInternal() & Modifier.SYNTHETIC) != 0;
+ }
+
+ /**
+ * Return true if this is a varargs constructor, that is if
+ * the constructor takes a variable number of arguments.
+ * @since 1.5
+ */
+ public boolean isVarArgs()
+ {
+ return (getModifiersInternal() & Modifier.VARARGS) != 0;
+ }
/**
* Get the parameter list for this constructor, in declaration order. If the
@@ -184,15 +223,15 @@ extends AccessibleObject implements Member
public String toString()
{
// 128 is a reasonable buffer initial size for constructor
- StringBuffer sb = new StringBuffer(128);
+ StringBuilder sb = new StringBuilder(128);
Modifier.toString(getModifiers(), sb).append(' ');
sb.append(getDeclaringClass().getName()).append('(');
Class[] c = getParameterTypes();
if (c.length > 0)
{
- sb.append(c[0].getName());
+ sb.append(ClassHelper.getUserName(c[0]));
for (int i = 1; i < c.length; i++)
- sb.append(',').append(c[i].getName());
+ sb.append(',').append(ClassHelper.getUserName(c[i]));
}
sb.append(')');
c = getExceptionTypes();
@@ -204,7 +243,46 @@ extends AccessibleObject implements Member
}
return sb.toString();
}
-
+
+ /* FIXME[GENERICS]: Add X extends GenericDeclaration and TypeVariable<X> */
+ static void addTypeParameters(StringBuilder sb, TypeVariable[] typeArgs)
+ {
+ if (typeArgs.length == 0)
+ return;
+ sb.append('<');
+ for (int i = 0; i < typeArgs.length; ++i)
+ {
+ if (i > 0)
+ sb.append(',');
+ sb.append(typeArgs[i]);
+ }
+ sb.append("> ");
+ }
+
+ public String toGenericString()
+ {
+ StringBuilder sb = new StringBuilder(128);
+ Modifier.toString(getModifiers(), sb).append(' ');
+ addTypeParameters(sb, getTypeParameters());
+ sb.append(getDeclaringClass().getName()).append('(');
+ Type[] types = getGenericParameterTypes();
+ if (types.length > 0)
+ {
+ sb.append(types[0]);
+ for (int i = 1; i < types.length; ++i)
+ sb.append(',').append(types[i]);
+ }
+ sb.append(')');
+ types = getGenericExceptionTypes();
+ if (types.length > 0)
+ {
+ sb.append(" throws ").append(types[0]);
+ for (int i = 1; i < types.length; i++)
+ sb.append(',').append(types[i]);
+ }
+ return sb.toString();
+ }
+
/**
* Create a new instance by invoking the constructor. Arguments are
* automatically unwrapped and widened, if needed.<p>
@@ -246,4 +324,75 @@ extends AccessibleObject implements Member
int slot)
throws InstantiationException, IllegalAccessException,
InvocationTargetException;
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this constructor, in declaration order.
+ * An array of size zero is returned if this constructor has no type
+ * variables.
+ *
+ * @return the type variables associated with this constructor.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Add <Constructor<T>> */
+ public TypeVariable[] getTypeParameters()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return new TypeVariable[0];
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getTypeParameters();
+ }
+
+ /**
+ * Return the String in the Signature attribute for this constructor. If there
+ * is no Signature attribute, return null.
+ */
+ private native String getSignature();
+
+ /**
+ * Returns an array of <code>Type</code> objects that represents
+ * the exception types declared by this constructor, in declaration order.
+ * An array of size zero is returned if this constructor declares no
+ * exceptions.
+ *
+ * @return the exception types declared by this constructor.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type[] getGenericExceptionTypes()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return getExceptionTypes();
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getGenericExceptionTypes();
+ }
+
+ /**
+ * Returns an array of <code>Type</code> objects that represents
+ * the parameter list for this constructor, in declaration order.
+ * An array of size zero is returned if this constructor takes no
+ * parameters.
+ *
+ * @return a list of the types of the constructor's parameters
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type[] getGenericParameterTypes()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return getParameterTypes();
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getGenericParameterTypes();
+ }
}
+
diff --git a/libjava/classpath/vm/reference/java/lang/reflect/Field.java b/libjava/classpath/vm/reference/java/lang/reflect/Field.java
index 85e76d6..5121700 100644
--- a/libjava/classpath/vm/reference/java/lang/reflect/Field.java
+++ b/libjava/classpath/vm/reference/java/lang/reflect/Field.java
@@ -1,5 +1,5 @@
/* java.lang.reflect.Field - reflection of Java fields
- Copyright (C) 1998, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,10 @@ exception statement from your version. */
package java.lang.reflect;
+import gnu.java.lang.ClassHelper;
+
+import gnu.java.lang.reflect.FieldSignatureParser;
+
/**
* The Field class represents a member variable of a class. It also allows
* dynamic access to a member, via reflection. This works for both
@@ -78,6 +82,11 @@ extends AccessibleObject implements Member
private String name;
private int slot;
+ private static final int FIELD_MODIFIERS
+ = Modifier.FINAL | Modifier.PRIVATE | Modifier.PROTECTED
+ | Modifier.PUBLIC | Modifier.STATIC | Modifier.TRANSIENT
+ | Modifier.VOLATILE;
+
/**
* This class is uninstantiable except natively.
*/
@@ -108,6 +117,12 @@ extends AccessibleObject implements Member
}
/**
+ * Return the raw modifiers for this field.
+ * @return the field's modifiers
+ */
+ private native int getModifiersInternal();
+
+ /**
* Gets the modifiers this field uses. Use the <code>Modifier</code>
* class to interpret the values. A field can only have a subset of the
* following modifiers: public, private, protected, static, final,
@@ -116,7 +131,29 @@ extends AccessibleObject implements Member
* @return an integer representing the modifiers to this Member
* @see Modifier
*/
- public native int getModifiers();
+ public int getModifiers()
+ {
+ return getModifiersInternal() & FIELD_MODIFIERS;
+ }
+
+ /**
+ * Return true if this field is synthetic, false otherwise.
+ * @since 1.5
+ */
+ public boolean isSynthetic()
+ {
+ return (getModifiersInternal() & Modifier.SYNTHETIC) != 0;
+ }
+
+ /**
+ * Return true if this field represents an enum constant,
+ * false otherwise.
+ * @since 1.5
+ */
+ public boolean isEnumConstant()
+ {
+ return (getModifiersInternal() & Modifier.ENUM) != 0;
+ }
/**
* Gets the type of this field.
@@ -169,14 +206,24 @@ extends AccessibleObject implements Member
public String toString()
{
// 64 is a reasonable buffer initial size for field
- StringBuffer sb = new StringBuffer(64);
+ StringBuilder sb = new StringBuilder(64);
Modifier.toString(getModifiers(), sb).append(' ');
- sb.append(getType().getName()).append(' ');
+ sb.append(ClassHelper.getUserName(getType())).append(' ');
sb.append(getDeclaringClass().getName()).append('.');
sb.append(getName());
return sb.toString();
}
+ public String toGenericString()
+ {
+ StringBuilder sb = new StringBuilder(64);
+ Modifier.toString(getModifiers(), sb).append(' ');
+ sb.append(getGenericType()).append(' ');
+ sb.append(getDeclaringClass().getName()).append('.');
+ sb.append(getName());
+ return sb.toString();
+ }
+
/**
* Get the value of this Field. If it is primitive, it will be wrapped
* in the appropriate wrapper type (boolean = java.lang.Boolean).<p>
@@ -586,4 +633,30 @@ extends AccessibleObject implements Member
*/
public native void setDouble(Object o, double value)
throws IllegalAccessException;
+
+ /**
+ * Return the generic type of the field. If the field type is not a generic
+ * type, the method returns the same as <code>getType()</code>.
+ *
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type getGenericType()
+ {
+ String signature = getSignature();
+ if (signature == null)
+ return getType();
+ FieldSignatureParser p = new FieldSignatureParser(getDeclaringClass(),
+ signature);
+ return p.getFieldType();
+ }
+
+ /**
+ * Return the String in the Signature attribute for this field. If there
+ * is no Signature attribute, return null.
+ */
+ private native String getSignature();
+
}
diff --git a/libjava/classpath/vm/reference/java/lang/reflect/Method.java b/libjava/classpath/vm/reference/java/lang/reflect/Method.java
index 2725677..a992024 100644
--- a/libjava/classpath/vm/reference/java/lang/reflect/Method.java
+++ b/libjava/classpath/vm/reference/java/lang/reflect/Method.java
@@ -1,5 +1,5 @@
/* java.lang.reflect.Method - reflection of Java methods
- Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2001, 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,10 @@ exception statement from your version. */
package java.lang.reflect;
+import gnu.java.lang.ClassHelper;
+
+import gnu.java.lang.reflect.MethodSignatureParser;
+
import java.util.Arrays;
/**
@@ -74,12 +78,17 @@ import java.util.Arrays;
* @status updated to 1.4
*/
public final class Method
-extends AccessibleObject implements Member
+extends AccessibleObject implements Member, GenericDeclaration
{
Class declaringClass;
String name;
int slot;
+ private static final int METHOD_MODIFIERS
+ = Modifier.ABSTRACT | Modifier.FINAL | Modifier.NATIVE
+ | Modifier.PRIVATE | Modifier.PROTECTED | Modifier.PUBLIC
+ | Modifier.STATIC | Modifier.STRICT | Modifier.SYNCHRONIZED;
+
/**
* This class is uninstantiable.
*/
@@ -110,6 +119,12 @@ extends AccessibleObject implements Member
}
/**
+ * Return the raw modifiers for this method.
+ * @return the method's modifiers
+ */
+ private native int getModifiersInternal();
+
+ /**
* Gets the modifiers this method uses. Use the <code>Modifier</code>
* class to interpret the values. A method can only have a subset of the
* following modifiers: public, private, protected, abstract, static,
@@ -118,7 +133,40 @@ extends AccessibleObject implements Member
* @return an integer representing the modifiers to this Member
* @see Modifier
*/
- public native int getModifiers();
+ public int getModifiers()
+ {
+ return getModifiersInternal() & METHOD_MODIFIERS;
+ }
+
+ /**
+ * Return true if this method is a bridge method. A bridge method
+ * is generated by the compiler in some situations involving
+ * generics and inheritance.
+ * @since 1.5
+ */
+ public boolean isBridge()
+ {
+ return (getModifiersInternal() & Modifier.BRIDGE) != 0;
+ }
+
+ /**
+ * Return true if this method is synthetic, false otherwise.
+ * @since 1.5
+ */
+ public boolean isSynthetic()
+ {
+ return (getModifiersInternal() & Modifier.SYNTHETIC) != 0;
+ }
+
+ /**
+ * Return true if this is a varargs method, that is if
+ * the method takes a variable number of arguments.
+ * @since 1.5
+ */
+ public boolean isVarArgs()
+ {
+ return (getModifiersInternal() & Modifier.VARARGS) != 0;
+ }
/**
* Gets the return type of this method.
@@ -210,17 +258,17 @@ extends AccessibleObject implements Member
public String toString()
{
// 128 is a reasonable buffer initial size for constructor
- StringBuffer sb = new StringBuffer(128);
+ StringBuilder sb = new StringBuilder(128);
Modifier.toString(getModifiers(), sb).append(' ');
- sb.append(getUserTypeName(getReturnType().getName())).append(' ');
+ sb.append(ClassHelper.getUserName(getReturnType())).append(' ');
sb.append(getDeclaringClass().getName()).append('.');
sb.append(getName()).append('(');
Class[] c = getParameterTypes();
if (c.length > 0)
{
- sb.append(getUserTypeName(c[0].getName()));
+ sb.append(ClassHelper.getUserName(c[0]));
for (int i = 1; i < c.length; i++)
- sb.append(',').append(getUserTypeName(c[i].getName()));
+ sb.append(',').append(ClassHelper.getUserName(c[i]));
}
sb.append(')');
c = getExceptionTypes();
@@ -233,53 +281,31 @@ extends AccessibleObject implements Member
return sb.toString();
}
- private static String getUserTypeName(String typeSpec)
+ public String toGenericString()
{
- int pos = 0;
- String typeName = "";
- String arrayPart = "";
-
- while (typeSpec.charAt(pos) == '[')
+ // 128 is a reasonable buffer initial size for constructor
+ StringBuilder sb = new StringBuilder(128);
+ Modifier.toString(getModifiers(), sb).append(' ');
+ Constructor.addTypeParameters(sb, getTypeParameters());
+ sb.append(getGenericReturnType()).append(' ');
+ sb.append(getDeclaringClass().getName()).append('.');
+ sb.append(getName()).append('(');
+ Type[] types = getGenericParameterTypes();
+ if (types.length > 0)
{
- arrayPart += "[]";
- ++pos;
+ sb.append(types[0]);
+ for (int i = 1; i < types.length; i++)
+ sb.append(',').append(types[i]);
}
-
- switch (typeSpec.charAt(pos))
+ sb.append(')');
+ types = getGenericExceptionTypes();
+ if (types.length > 0)
{
- case 'Z':
- typeName = "boolean";
- break;
- case 'B':
- typeName = "byte";
- break;
- case 'C':
- typeName = "char";
- break;
- case 'D':
- typeName = "double";
- break;
- case 'F':
- typeName = "float";
- break;
- case 'I':
- typeName = "int";
- break;
- case 'J':
- typeName = "long";
- break;
- case 'S':
- typeName = "short";
- break;
- case 'L':
- typeName = typeSpec.substring(pos + 1, typeSpec.length() - 1);
- break;
- default:
- typeName = typeSpec;
- break;
+ sb.append(" throws ").append(types[0]);
+ for (int i = 1; i < types.length; i++)
+ sb.append(',').append(types[i]);
}
-
- return typeName + arrayPart;
+ return sb.toString();
}
/**
@@ -336,4 +362,93 @@ extends AccessibleObject implements Member
private native Object invokeNative(Object o, Object[] args,
Class declaringClass, int slot)
throws IllegalAccessException, InvocationTargetException;
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this constructor, in declaration order.
+ * An array of size zero is returned if this class has no type
+ * variables.
+ *
+ * @return the type variables associated with this class.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be TypeVariable<Method>[] */
+ public TypeVariable[] getTypeParameters()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return new TypeVariable[0];
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getTypeParameters();
+ }
+
+ /**
+ * Return the String in the Signature attribute for this method. If there
+ * is no Signature attribute, return null.
+ */
+ private native String getSignature();
+
+ /**
+ * Returns an array of <code>Type</code> objects that represents
+ * the exception types declared by this method, in declaration order.
+ * An array of size zero is returned if this method declares no
+ * exceptions.
+ *
+ * @return the exception types declared by this method.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type[] getGenericExceptionTypes()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return getExceptionTypes();
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getGenericExceptionTypes();
+ }
+
+ /**
+ * Returns an array of <code>Type</code> objects that represents
+ * the parameter list for this method, in declaration order.
+ * An array of size zero is returned if this method takes no
+ * parameters.
+ *
+ * @return a list of the types of the method's parameters
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type[] getGenericParameterTypes()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return getParameterTypes();
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getGenericParameterTypes();
+ }
+
+ /**
+ * Returns the return type of this method.
+ *
+ * @return the return type of this method
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ public Type getGenericReturnType()
+ {
+ String sig = getSignature();
+ if (sig == null)
+ return getReturnType();
+ MethodSignatureParser p = new MethodSignatureParser(this, sig);
+ return p.getGenericReturnType();
+ }
}
+
diff --git a/libjava/classpath/vm/reference/java/lang/reflect/VMArray.java b/libjava/classpath/vm/reference/java/lang/reflect/VMArray.java
new file mode 100644
index 0000000..d6277ae
--- /dev/null
+++ b/libjava/classpath/vm/reference/java/lang/reflect/VMArray.java
@@ -0,0 +1,65 @@
+/* java.lang.reflect.VMArray - VM class for array manipulation by reflection.
+ Copyright (C) 1998, 1999, 2001, 2003, 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.lang.reflect;
+
+import gnu.classpath.Configuration;
+
+class VMArray
+{
+
+ static
+ {
+ if (Configuration.INIT_LOAD_LIBRARY)
+ {
+ System.loadLibrary("javalangreflect");
+ }
+ }
+
+ /**
+ * Dynamically create an array of objects.
+ *
+ * @param type guaranteed to be a valid object type
+ * @param dim the length of the array
+ * @return the new array
+ * @throws NegativeArraySizeException if dim is negative
+ * @throws OutOfMemoryError if memory allocation fails
+ */
+ static native Object createObjectArray(Class type, int dim);
+
+}
diff --git a/libjava/classpath/vm/reference/java/security/VMSecureRandom.java b/libjava/classpath/vm/reference/java/security/VMSecureRandom.java
new file mode 100644
index 0000000..dc67d87
--- /dev/null
+++ b/libjava/classpath/vm/reference/java/security/VMSecureRandom.java
@@ -0,0 +1,134 @@
+/* VMSecureRandom.java -- random seed generator.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.security;
+
+import gnu.classpath.SystemProperties;
+import gnu.java.security.action.GetSecurityPropertyAction;
+
+import java.net.URL;
+
+/**
+ * VM-specific methods for generating real (or almost real) random
+ * seeds. VM implementors should write a version of this class that
+ * reads random bytes from some system source.
+ *
+ * <p>The default implementation of this class runs eight threads that
+ * increment counters in a tight loop, and XORs each counter to
+ * produce one byte of seed data. This is not very efficient, and is
+ * not guaranteed to be random (the thread scheduler is probably
+ * deterministic, after all). If possible, VM implementors should
+ * reimplement this class so it obtains a random seed from a system
+ * facility, such as a system entropy gathering device or hardware
+ * random number generator.
+ */
+final class VMSecureRandom
+{
+
+ /**
+ * Generate a random seed. Implementations are free to generate
+ * fewer random bytes than are requested, and leave the remaining
+ * bytes of the destination buffer as zeros. Implementations SHOULD,
+ * however, make a best-effort attempt to satisfy the request.
+ *
+ * @param buffer The destination buffer.
+ * @param offset The offset in the buffer to start putting bytes.
+ * @param length The number of random bytes to generate.
+ */
+ static int generateSeed(byte[] buffer, int offset, int length)
+ {
+ if (length < 0)
+ throw new IllegalArgumentException("length must be nonnegative");
+ if (offset < 0 || offset + length > buffer.length)
+ throw new IndexOutOfBoundsException();
+
+ Spinner[] spinners = new Spinner[8];
+ int n = 0x1;
+ for (int i = 0; i < spinners.length; i++)
+ {
+ spinners[i] = new Spinner((byte) n);
+ Thread t = new Thread(spinners[i]);
+ t.start();
+ n <<= 1;
+ }
+
+ // Wait until at least one spinner has started.
+ while (!(spinners[0].running || spinners[1].running || spinners[2].running
+ || spinners[3].running || spinners[4].running || spinners[5].running
+ || spinners[6].running || spinners[7].running))
+ {
+ Thread.yield();
+ }
+
+ for (int i = offset; i < length; i++)
+ {
+ buffer[i] = (byte) (spinners[0].value ^ spinners[1].value ^ spinners[2].value
+ ^ spinners[3].value ^ spinners[4].value ^ spinners[5].value
+ ^ spinners[6].value ^ spinners[7].value);
+ Thread.yield();
+ }
+
+ for (int i = 0; i < spinners.length; i++)
+ spinners[i].stop();
+
+ return length;
+ }
+
+ static class Spinner implements Runnable
+ {
+ volatile byte value;
+ volatile boolean running;
+
+ Spinner(final byte initial)
+ {
+ value = initial;
+ }
+
+ public void run()
+ {
+ running = true;
+ while (running)
+ value++;
+ }
+
+ private void stop()
+ {
+ running = false;
+ }
+ }
+} \ No newline at end of file
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index 27e396b..93d5a4d 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -124,6 +124,7 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
+GREP = @GREP@
GTK_AWT_FALSE = @GTK_AWT_FALSE@
GTK_AWT_TRUE = @GTK_AWT_TRUE@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
@@ -225,6 +226,7 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
@@ -233,14 +235,8 @@ ZINCS = @ZINCS@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_GCJ = @ac_ct_GCJ@
-ac_ct_LD = @ac_ct_LD@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -260,7 +256,10 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -271,6 +270,7 @@ host_cpu = @host_cpu@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
@@ -278,13 +278,16 @@ libdir = @libdir@
libexecdir = @libexecdir@
libgcj_basedir = @libgcj_basedir@
libstdcxx_incdir = @libstdcxx_incdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index a9dd845..04f99ed 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -55,10 +55,13 @@ extern "Java"
class CharArrayReader;
class CharArrayWriter;
class CharConversionException;
+ class Closeable;
class DataInput;
class DataInputStream;
class DataOutput;
class DataOutputStream;
+ class DeleteFileHelper;
+ class DeleteFileHelper$1;
class EOFException;
class Externalizable;
class File;
@@ -75,6 +78,7 @@ extern "Java"
class FilterOutputStream;
class FilterReader;
class FilterWriter;
+ class Flushable;
class IOException;
class InputStream;
class InputStreamReader;
@@ -87,18 +91,24 @@ extern "Java"
class NotSerializableException;
class ObjectInput;
class ObjectInputStream;
+ class ObjectInputStream$1;
+ class ObjectInputStream$2;
class ObjectInputStream$GetField;
class ObjectInputStream$ValidatorAndPriority;
class ObjectInputValidation;
class ObjectOutput;
class ObjectOutputStream;
+ class ObjectOutputStream$1;
class ObjectOutputStream$PutField;
class ObjectStreamClass;
+ class ObjectStreamClass$1;
+ class ObjectStreamClass$2;
class ObjectStreamClass$InterfaceComparator;
class ObjectStreamClass$MemberComparator;
class ObjectStreamConstants;
class ObjectStreamException;
class ObjectStreamField;
+ class ObjectStreamField$1;
class OptionalDataException;
class OutputStream;
class OutputStreamWriter;
@@ -131,6 +141,7 @@ extern "Java"
namespace lang
{
class AbstractMethodError;
+ class Appendable;
class ArithmeticException;
class ArrayIndexOutOfBoundsException;
class ArrayStoreException;
@@ -155,6 +166,8 @@ extern "Java"
class ConcreteProcess$EOFInputStream;
class ConcreteProcess$ProcessManager;
class Double;
+ class Enum;
+ class EnumConstantNotPresentException;
class Error;
class Exception;
class ExceptionInInitializerError;
@@ -173,6 +186,7 @@ extern "Java"
class Integer;
class InternalError;
class InterruptedException;
+ class Iterable;
class LinkageError;
class Long;
class Math;
@@ -189,6 +203,7 @@ extern "Java"
class OutOfMemoryError;
class Package;
class Process;
+ class Readable;
class Runnable;
class Runtime;
class RuntimeException;
@@ -207,11 +222,13 @@ extern "Java"
class StringIndexOutOfBoundsException;
class System;
class Thread;
+ class Thread$UncaughtExceptionHandler;
class ThreadDeath;
class ThreadGroup;
class ThreadLocal;
class Throwable;
class Throwable$StaticData;
+ class TypeNotPresentException;
class UnknownError;
class UnsatisfiedLinkError;
class UnsupportedClassVersionError;
@@ -225,6 +242,22 @@ extern "Java"
class VerifyError;
class VirtualMachineError;
class Void;
+ namespace annotation
+ {
+ class Annotation;
+ class AnnotationFormatError;
+ class AnnotationTypeMismatchException;
+ }
+
+ namespace instrument
+ {
+ class ClassDefinition;
+ class ClassFileTransformer;
+ class IllegalClassFormatException;
+ class Instrumentation;
+ class UnmodifiableClassException;
+ }
+
namespace ref
{
class PhantomReference;
@@ -237,21 +270,31 @@ extern "Java"
namespace reflect
{
class AccessibleObject;
+ class AnnotatedElement;
class Array;
class Constructor;
class Field;
+ class GenericArrayType;
+ class GenericDeclaration;
+ class GenericSignatureFormatError;
class InvocationHandler;
class InvocationTargetException;
+ class MalformedParameterizedTypeException;
class Member;
class Method;
class Modifier;
+ class ParameterizedType;
class Proxy;
class Proxy$ClassFactory;
class Proxy$ProxyData;
class Proxy$ProxySignature;
class Proxy$ProxyType;
class ReflectPermission;
+ class Type;
+ class TypeVariable;
class UndeclaredThrowableException;
+ class VMProxy;
+ class WildcardType;
}
}
@@ -259,9 +302,16 @@ extern "Java"
{
class AbstractCollection;
class AbstractList;
+ class AbstractList$1;
+ class AbstractList$2;
class AbstractList$RandomAccessSubList;
class AbstractList$SubList;
+ class AbstractList$SubList$3;
class AbstractMap;
+ class AbstractMap$1;
+ class AbstractMap$1$2;
+ class AbstractMap$3;
+ class AbstractMap$3$4;
class AbstractMap$BasicMapEntry;
class AbstractSequentialList;
class AbstractSet;
@@ -272,6 +322,7 @@ extern "Java"
class Calendar;
class Collection;
class Collections;
+ class Collections$1;
class Collections$CopiesList;
class Collections$EmptyList;
class Collections$EmptyMap;
@@ -279,23 +330,29 @@ extern "Java"
class Collections$ReverseComparator;
class Collections$SingletonList;
class Collections$SingletonMap;
+ class Collections$SingletonMap$3;
class Collections$SingletonSet;
+ class Collections$SingletonSet$2;
class Collections$SynchronizedCollection;
class Collections$SynchronizedIterator;
class Collections$SynchronizedList;
class Collections$SynchronizedListIterator;
class Collections$SynchronizedMap;
- class Collections$SynchronizedMapEntry;
+ class Collections$SynchronizedMap$4$SynchronizedMapEntry;
+ class Collections$SynchronizedMap$5;
+ class Collections$SynchronizedMap$5$6;
class Collections$SynchronizedRandomAccessList;
class Collections$SynchronizedSet;
class Collections$SynchronizedSortedMap;
class Collections$SynchronizedSortedSet;
class Collections$UnmodifiableCollection;
- class Collections$UnmodifiableEntrySet;
class Collections$UnmodifiableIterator;
class Collections$UnmodifiableList;
class Collections$UnmodifiableListIterator;
class Collections$UnmodifiableMap;
+ class Collections$UnmodifiableMap$UnmodifiableEntrySet;
+ class Collections$UnmodifiableMap$UnmodifiableEntrySet$7;
+ class Collections$UnmodifiableMap$UnmodifiableEntrySet$7$8;
class Collections$UnmodifiableRandomAccessList;
class Collections$UnmodifiableSet;
class Collections$UnmodifiableSortedMap;
@@ -312,18 +369,33 @@ extern "Java"
class EventObject;
class GregorianCalendar;
class HashMap;
+ class HashMap$1;
+ class HashMap$2;
+ class HashMap$3;
class HashMap$HashEntry;
class HashMap$HashIterator;
class HashSet;
class Hashtable;
- class Hashtable$Enumerator;
+ class Hashtable$1;
+ class Hashtable$2;
+ class Hashtable$3;
+ class Hashtable$EntryEnumerator;
+ class Hashtable$EntryIterator;
class Hashtable$HashEntry;
- class Hashtable$HashIterator;
+ class Hashtable$KeyEnumerator;
+ class Hashtable$KeyIterator;
+ class Hashtable$ValueEnumerator;
+ class Hashtable$ValueIterator;
class IdentityHashMap;
+ class IdentityHashMap$1;
+ class IdentityHashMap$2;
+ class IdentityHashMap$3;
class IdentityHashMap$IdentityEntry;
class IdentityHashMap$IdentityIterator;
+ class InvalidPropertiesFormatException;
class Iterator;
class LinkedHashMap;
+ class LinkedHashMap$1;
class LinkedHashMap$LinkedHashEntry;
class LinkedHashSet;
class LinkedList;
@@ -335,9 +407,7 @@ extern "Java"
class Locale;
class Map;
class Map$Entry;
- class Map$Map;
class MissingResourceException;
- class MyResources;
class NoSuchElementException;
class Observable;
class Observer;
@@ -356,22 +426,32 @@ extern "Java"
class Stack;
class StringTokenizer;
class TimeZone;
+ class TimeZone$1;
class Timer;
class Timer$Scheduler;
class Timer$TaskQueue;
class TimerTask;
class TooManyListenersException;
class TreeMap;
+ class TreeMap$1;
+ class TreeMap$2;
+ class TreeMap$3;
class TreeMap$Node;
class TreeMap$SubMap;
+ class TreeMap$SubMap$4;
+ class TreeMap$SubMap$5;
+ class TreeMap$SubMap$6;
class TreeMap$TreeIterator;
class TreeSet;
class VMTimeZone;
class Vector;
+ class Vector$1;
class WeakHashMap;
+ class WeakHashMap$1;
class WeakHashMap$WeakBucket;
- class WeakHashMap$WeakEntry;
+ class WeakHashMap$WeakBucket$WeakEntry;
class WeakHashMap$WeakEntrySet;
+ class WeakHashMap$WeakEntrySet$2;
namespace jar
{
class Attributes;
@@ -391,6 +471,7 @@ extern "Java"
class ConsoleHandler;
class ErrorManager;
class FileHandler;
+ class FileHandler$ostr;
class Filter;
class Formatter;
class Handler;
@@ -398,6 +479,7 @@ extern "Java"
class LogManager;
class LogRecord;
class Logger;
+ class Logger$1;
class LoggingPermission;
class MemoryHandler;
class SimpleFormatter;
@@ -409,6 +491,8 @@ extern "Java"
namespace prefs
{
class AbstractPreferences;
+ class AbstractPreferences$1;
+ class AbstractPreferences$2;
class BackingStoreException;
class InvalidPreferencesFormatException;
class NodeChangeEvent;
@@ -416,11 +500,13 @@ extern "Java"
class PreferenceChangeEvent;
class PreferenceChangeListener;
class Preferences;
+ class Preferences$1;
class PreferencesFactory;
}
namespace regex
{
+ class MatchResult;
class Matcher;
class Pattern;
class PatternSyntaxException;
@@ -444,6 +530,7 @@ extern "Java"
class ZipEntry;
class ZipException;
class ZipFile;
+ class ZipFile$1;
class ZipFile$PartialInputStream;
class ZipFile$ZipEntryEnumeration;
class ZipInputStream;
diff --git a/libjava/gnu/classpath/jdwp/VMMethod.java b/libjava/gnu/classpath/jdwp/VMMethod.java
new file mode 100644
index 0000000..a4bbb51
--- /dev/null
+++ b/libjava/gnu/classpath/jdwp/VMMethod.java
@@ -0,0 +1,178 @@
+/* VMMethod.java -- a method in a virtual machine
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.jdwp;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import gnu.classpath.jdwp.exception.JdwpException;
+import gnu.classpath.jdwp.util.LineTable;
+import gnu.classpath.jdwp.util.VariableTable;
+
+/**
+ * This class is really an amalgamation of two classes: one class
+ * represents a virtual machine method and the other represents
+ * the JDWP back-end's ID for the method.
+ *
+ * @author Keith Seitz (keiths@redhat.com)
+ */
+public class VMMethod
+{
+ /**
+ * Returns the size of a JDWP method ID
+ * @see gnu.classpath.jdwp.id.JdwpId#SIZE
+ */
+ public static final int SIZE = 8;
+
+ // The class in which this method is declared
+ private Class _class;
+
+ // The method's ID
+ private long _methodId;
+
+ /**
+ * Constructs a new VMMethod object. This constructor is protected
+ * so that only the factory methods of VMVirtualMachine can be used
+ * to create VMMethods.
+ *
+ * @param klass the method's containing class
+ * @param id method identifier, e.g., jmethodID
+ * @see gnu.classpath.jdwp.VMVirtualMachine#getAllClassMethods
+ * @see gnu.classpath.jdwp.VMVirtualMachine#getClassMethod
+ */
+ protected VMMethod(Class klass, long id)
+ {
+ _class = klass;
+ _methodId = id;
+ }
+
+ /**
+ * Returns the internal method ID for this method
+ */
+ public long getId()
+ {
+ return _methodId;
+ }
+
+ /**
+ * Returns the method's declaring class
+ */
+ public Class getDeclaringClass()
+ {
+ return _class;
+ }
+
+ /**
+ * Returns the name of this method
+ */
+ public String getName() { return null; }
+
+ /**
+ * Returns the signature of this method
+ */
+ public String getSignature() { return null; }
+
+ /**
+ * Returns the method's modifier flags
+ */
+ public int getModifiers() { return -1; }
+
+ /**
+ * "Returns line number information for the method, if present. The line
+ * table maps source line numbers to the initial code index of the line.
+ * The line table is ordered by code index (from lowest to highest). The
+ * line number information is constant unless a new class definition is
+ * installed using RedefineClasses."
+ *
+ * @return the line table
+ * @throws JdwpException
+ */
+ public LineTable getLineTable()
+ { return null; }
+
+ /**
+ * "Returns variable information for the method. The variable table
+ * includes arguments and locals declared within the method. For instance
+ * methods, the "this" reference is included in the table. Also, synthetic
+ * variables may be present."
+ *
+ * @return the variable table
+ * @throws JdwpException
+ */
+ public VariableTable getVariableTable()
+ { return null; }
+
+ /**
+ * Returns a string representation of this method (not
+ * required but nice for debugging).
+ */
+ public String toString()
+ {
+ return getDeclaringClass().getName() + "." + getName();
+ }
+
+ /**
+ * Writes the method's ID to the output stream
+ *
+ * @param ostream the output stream to which to write
+ * @throws IOException for any errors writing to the stream
+ * @see gnu.classpath.jdwp.id.JdwpId#write
+ */
+ public void writeId(DataOutputStream ostream)
+ throws IOException
+ {
+ ostream.writeLong(getId());
+ }
+
+ /**
+ * Returns a VMMethod from the ID in the byte buffer
+ *
+ * @param klass the method's declaring class
+ * @param bb a ByteBuffer containing the method's ID
+ * @throws JdwpException for any errors creating the method
+ * @throws IOException for any errors reading from the buffer
+ */
+ public static VMMethod readId(Class klass, ByteBuffer bb)
+ throws JdwpException, IOException
+ {
+ return VMVirtualMachine.getClassMethod(klass, bb.getLong());
+ }
+}
diff --git a/libjava/gnu/classpath/jdwp/VMVirtualMachine.java b/libjava/gnu/classpath/jdwp/VMVirtualMachine.java
index 33d1c9b..ac81d95 100644
--- a/libjava/gnu/classpath/jdwp/VMVirtualMachine.java
+++ b/libjava/gnu/classpath/jdwp/VMVirtualMachine.java
@@ -1,7 +1,7 @@
/* VMVirtualMachine.java -- A reference implementation of a JDWP virtual
machine
- Copyright (C) 2005 Free Software Foundation
+ Copyright (C) 2005, 2006 Free Software Foundation
This file is part of GNU Classpath.
@@ -42,15 +42,9 @@ exception statement from your version. */
package gnu.classpath.jdwp;
import gnu.classpath.jdwp.event.EventRequest;
-import gnu.classpath.jdwp.exception.InvalidClassException;
-import gnu.classpath.jdwp.exception.InvalidObjectException;
-import gnu.classpath.jdwp.id.ObjectId;
-import gnu.classpath.jdwp.id.ReferenceTypeId;
-import gnu.classpath.jdwp.util.LineTable;
+import gnu.classpath.jdwp.exception.InvalidMethodException;
+import gnu.classpath.jdwp.exception.JdwpException;
import gnu.classpath.jdwp.util.MethodResult;
-import gnu.classpath.jdwp.util.VariableTable;
-
-import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -74,10 +68,11 @@ public class VMVirtualMachine
* Suspend all threads
*/
public static void suspendAllThreads ()
+ throws JdwpException
{
// Our JDWP thread group -- don't suspend any of those threads
Thread current = Thread.currentThread ();
- ThreadGroup jdwpGroup = current.getThreadGroup ();
+ ThreadGroup jdwpGroup = Jdwp.getDefault().getJdwpThreadGroup();
// Find the root ThreadGroup
ThreadGroup group = jdwpGroup;
@@ -109,7 +104,8 @@ public class VMVirtualMachine
}
// Now suspend the current thread
- suspendThread (current);
+ if (current.getThreadGroup() != jdwpGroup)
+ suspendThread (current);
}
/**
@@ -126,6 +122,7 @@ public class VMVirtualMachine
* to run.
*/
public static void resumeAllThreads ()
+ throws JdwpException
{
// Our JDWP thread group -- don't resume
Thread current = Thread.currentThread ();
@@ -188,6 +185,29 @@ public class VMVirtualMachine
*/
public static int getClassStatus (Class clazz) { return -1; }
+ /**
+ * Returns all of the methods defined in the given class. This
+ * includes all methods, constructors, and class initializers.
+ *
+ * @param klass the class whose methods are desired
+ * @return an array of virtual machine methods
+ */
+ public static VMMethod[] getAllClassMethods (Class klass)
+ { return null; }
+
+ /**
+ * A factory method for getting valid virtual machine methods
+ * which may be passed to/from the debugger.
+ *
+ * @param klass the class in which the method is defined
+ * @param id the ID of the desired method
+ * @return the desired internal representation of the method
+ * @throws InvalidMethodException if the method is not defined
+ * in the class
+ * @throws JdwpException for any other error
+ */
+ public static VMMethod getClassMethod(Class klass, long id)
+ { return null; }
/**
* Returns the thread's call stack
@@ -263,33 +283,6 @@ public class VMVirtualMachine
{ return null; }
/**
- * "Returns variable information for the method. The variable table
- * includes arguments and locals declared within the method. For instance
- * methods, the "this" reference is included in the table. Also, synthetic
- * variables may be present."
- *
- * @param clazz the class in which the method is defined
- * @param method the method for which variable information is desired
- * @return a result object containing the information
- */
- public static VariableTable getVarTable (Class clazz, Method method)
- { return null; }
-
- /**
- * "Returns line number information for the method, if present. The line
- * table maps source line numbers to the initial code index of the line.
- * The line table is ordered by code index (from lowest to highest). The
- * line number information is constant unless a new class definition is
- * installed using RedefineClasses."
- *
- * @param clazz the class in which the method is defined
- * @param method the method whose line table is desired
- * @return a result object containing the line table
- */
- public static LineTable getLineTable (Class clazz, Method method)
- { return null; }
-
- /**
* "Returns the name of source file in which a reference type was declared"
*
* @param clazz the class for which to return a source file
diff --git a/libjava/gnu/java/lang/VMInstrumentationImpl.java b/libjava/gnu/java/lang/VMInstrumentationImpl.java
new file mode 100644
index 0000000..4ffff83
--- /dev/null
+++ b/libjava/gnu/java/lang/VMInstrumentationImpl.java
@@ -0,0 +1,119 @@
+/* VMInstrumentationImpl.java -- interface for the GNU implementation
+ of InstrumentationImpl
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.lang;
+
+import java.lang.instrument.ClassDefinition;
+import java.lang.instrument.Instrumentation;
+
+/**
+ * @author Nicolas Geoffray (nicolas.geoffray@menlina.com)
+ * @since 1.5
+ */
+final class VMInstrumentationImpl
+{
+
+ /**
+ * Returns if the current JVM supports class redefinition
+ *
+ * @return true if the current JVM supports class redefinition
+ */
+ static boolean isRedefineClassesSupported() { return false; }
+
+ /**
+ * Redefines classes given as parameters. The method has to call
+ * the callTransformers from InstrumentationImpl
+ *
+ * @param inst an instrumentation object
+ * @param definitions an array of bytecode<->class correspondance
+ *
+ * @throws ClassNotFoundException if a class cannot be found
+ * @throws UnmodifiableClassException if a class cannot be modified
+ * @throws UnsupportedOperationException if the JVM does not support
+ * redefinition or the redefinition made unsupported changes
+ * @throws ClassFormatError if a class file is not valid
+ * @throws NoClassDefFoundError if a class name is not equal to the name
+ * in the class file specified
+ * @throws UnsupportedClassVersionError if the class file version numbers
+ * are unsupported
+ * @throws ClassCircularityError if circularity occured with the new
+ * classes
+ * @throws LinkageError if a linkage error occurs
+ */
+ static void redefineClasses(Instrumentation inst,
+ ClassDefinition[] definitions)
+ {
+ }
+
+ /**
+ * Get all the classes loaded by the JVM.
+ *
+ * @return an array containing all the classes loaded by the JVM. The array
+ * is empty if no class is loaded.
+ */
+ static Class[] getAllLoadedClasses()
+ {
+ return new Class[0];
+ }
+
+ /**
+ * Get all the classes loaded by a given class loader
+ *
+ * @param loader the loader
+ *
+ * @return an array containing all the classes loaded by the given loader.
+ * The array is empty if no class was loaded by the loader.
+ */
+ static Class[] getInitiatedClasses(ClassLoader loader)
+ {
+ return new Class[0];
+ }
+
+
+ /**
+ * Get the size of an object. The object is not null
+ *
+ * @param objectToSize the object
+ * @return the size of the object
+ */
+ static long getObjectSize(Object objectToSize)
+ {
+ return 0;
+ }
+}
diff --git a/libjava/gnu/java/net/local/LocalSocketImpl.java b/libjava/gnu/java/net/local/LocalSocketImpl.java
new file mode 100644
index 0000000..35df298
--- /dev/null
+++ b/libjava/gnu/java/net/local/LocalSocketImpl.java
@@ -0,0 +1,310 @@
+/* LocalSocketImpl.java -- a unix domain client socket implementation.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net.local;
+
+import java.io.FileDescriptor;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.net.InetAddress;
+import java.net.SocketAddress;
+import java.net.SocketException;
+import java.net.SocketImpl;
+
+final class LocalSocketImpl extends SocketImpl
+{
+
+ // Fields.
+ // -------------------------------------------------------------------------
+
+ private boolean created;
+ private InputStream in;
+ private OutputStream out;
+ private int socket_fd;
+ private LocalSocketAddress local;
+ private LocalSocketAddress remote;
+
+ // Constructor.
+ // -------------------------------------------------------------------------
+
+ LocalSocketImpl ()
+ {
+ this (false);
+ }
+
+ LocalSocketImpl (boolean nocreate)
+ {
+ created = nocreate;
+ socket_fd = -1;
+ fd = new FileDescriptor ();
+ }
+
+ // Instance methods.
+ // -------------------------------------------------------------------------
+
+ public void setOption (int opt, Object value) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support options");
+ }
+
+ public Object getOption (int opt) throws SocketException
+ {
+ throw new SocketException ("local sockets do not support options");
+ }
+
+ protected void create (boolean stream) throws IOException { }
+ protected void listen (int timeout) throws IOException { }
+ protected void accept (LocalSocketImpl socket) throws IOException { }
+ protected int available () throws IOException { return -1; }
+ protected void close () throws IOException { }
+ protected void sendUrgentData (int data) throws IOException { }
+ protected void shutdownInput () throws IOException { }
+ protected void shutdownOutput () throws IOException { }
+
+ void unlink () throws IOException { }
+ void localBind (LocalSocketAddress addr) throws IOException { }
+ void localConnect (LocalSocketAddress addr) throws IOException { }
+ int read (byte[] buf, int off, int len) throws IOException { return -1; }
+ void write (byte[] buf, int off, int len) throws IOException { }
+
+ void doCreate () throws IOException
+ {
+ if (!created)
+ {
+ create (true);
+ }
+ }
+
+ LocalSocketAddress getLocalAddress ()
+ {
+ return local;
+ }
+
+ LocalSocketAddress getRemoteAddress ()
+ {
+ return remote;
+ }
+
+ protected InputStream getInputStream()
+ {
+ if (in == null)
+ {
+ in = new LocalInputStream (this);
+ }
+
+ return in;
+ }
+
+ protected OutputStream getOutputStream()
+ {
+ if (out == null)
+ {
+ out = new LocalOutputStream (this);
+ }
+
+ return out;
+ }
+
+ protected void accept (SocketImpl impl) throws IOException
+ {
+ if (! (impl instanceof LocalSocketImpl))
+ {
+ throw new IllegalArgumentException ("not a local socket");
+ }
+ accept ((LocalSocketImpl) impl);
+ }
+
+ protected void connect (String host, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void connect (InetAddress addr, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void connect(SocketAddress addr, int timeout) throws IOException
+ {
+ if (! (addr instanceof LocalSocketAddress))
+ {
+ throw new SocketException ("address is not local");
+ }
+ localConnect ((LocalSocketAddress) addr);
+ }
+
+ protected void bind (InetAddress addr, int port) throws IOException
+ {
+ throw new SocketException ("this is a local socket");
+ }
+
+ protected void bind (SocketAddress addr) throws IOException
+ {
+ if (! (addr instanceof LocalSocketAddress))
+ {
+ throw new SocketException ("address is not local");
+ }
+ localBind ((LocalSocketAddress) addr);
+ }
+
+ // Inner classes.
+ // -------------------------------------------------------------------------
+
+ class LocalInputStream extends InputStream
+ {
+
+ // Field.
+ // -----------------------------------------------------------------------
+
+ private final LocalSocketImpl impl;
+
+ // Constructor.
+ // -----------------------------------------------------------------------
+
+ LocalInputStream (LocalSocketImpl impl)
+ {
+ this.impl = impl;
+ }
+
+ // Instance methods.
+ // -----------------------------------------------------------------------
+
+ public int available () throws IOException
+ {
+ return impl.available();
+ }
+
+ public boolean markSupported ()
+ {
+ return false;
+ }
+
+ public void mark (int readLimit)
+ {
+ }
+
+ public void reset () throws IOException
+ {
+ throw new IOException ("mark/reset not supported");
+ }
+
+ public void close () throws IOException
+ {
+ impl.close();
+ }
+
+ public int read () throws IOException
+ {
+ byte[] buf = new byte[1];
+ int ret = read (buf);
+ if (ret != -1)
+ {
+ return buf[0] & 0xFF;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ public int read (byte[] buf) throws IOException
+ {
+ return read (buf, 0, buf.length);
+ }
+
+ public int read (byte[] buf, int off, int len) throws IOException
+ {
+ int ret = impl.read (buf, off, len);
+
+ if (ret == 0)
+ {
+ return -1;
+ }
+
+ return ret;
+ }
+ }
+
+ class LocalOutputStream extends OutputStream
+ {
+
+ // Field.
+ // -----------------------------------------------------------------------
+
+ private final LocalSocketImpl impl;
+
+ // Constructor.
+ // -----------------------------------------------------------------------
+
+ LocalOutputStream (LocalSocketImpl impl)
+ {
+ this.impl = impl;
+ }
+
+ // Instance methods.
+ // -----------------------------------------------------------------------
+
+ public void close () throws IOException
+ {
+ impl.close ();
+ }
+
+ public void flush () throws IOException
+ {
+ }
+
+ public void write (int b) throws IOException
+ {
+ byte[] buf = new byte [1];
+ buf[0] = (byte) b;
+ write (buf);
+ }
+
+ public void write (byte[] buf) throws IOException
+ {
+ write (buf, 0, buf.length);
+ }
+
+ public void write (byte[] buf, int off, int len) throws IOException
+ {
+ impl.write (buf, off, len);
+ }
+ }
+}
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index ca90aaa..a557be0 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -123,6 +123,7 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
+GREP = @GREP@
GTK_AWT_FALSE = @GTK_AWT_FALSE@
GTK_AWT_TRUE = @GTK_AWT_TRUE@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
@@ -224,6 +225,7 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
@@ -232,14 +234,8 @@ ZINCS = @ZINCS@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_GCJ = @ac_ct_GCJ@
-ac_ct_LD = @ac_ct_LD@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -259,7 +255,10 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -270,6 +269,7 @@ host_cpu = @host_cpu@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
@@ -277,13 +277,16 @@ libdir = @libdir@
libexecdir = @libexecdir@
libgcj_basedir = @libgcj_basedir@
libstdcxx_incdir = @libstdcxx_incdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index 22a078d..0e5066f 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -395,6 +395,12 @@ public:
jstring toString (void);
jboolean desiredAssertionStatus (void);
+ JArray<java::lang::reflect::TypeVariable *> *getTypeParameters (void);
+
+ java::lang::Class *getEnclosingClass (void);
+ java::lang::reflect::Constructor *getEnclosingConstructor (void);
+ java::lang::reflect::Method *getEnclosingMethod (void);
+
// FIXME: this probably shouldn't be public.
jint size (void)
{
diff --git a/libjava/java/lang/Class.java b/libjava/java/lang/Class.java
index db2bf72..7c3eced 100644
--- a/libjava/java/lang/Class.java
+++ b/libjava/java/lang/Class.java
@@ -42,8 +42,11 @@ import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.GenericDeclaration;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
import java.net.URL;
import java.security.ProtectionDomain;
import java.util.ArrayList;
@@ -79,7 +82,7 @@ import java.util.HashSet;
* @since 1.0
* @see ClassLoader
*/
-public final class Class implements Serializable
+public final class Class implements Type, GenericDeclaration, Serializable
{
/**
* Class is non-instantiable from Java code; only the VM can create
@@ -928,4 +931,92 @@ public final class Class implements Serializable
sm.checkPackageAccess(pkg.getName());
}
}
+
+ /**
+ * Returns the simple name for this class, as used in the source
+ * code. For normal classes, this is the content returned by
+ * <code>getName()</code> which follows the last ".". Anonymous
+ * classes have no name, and so the result of calling this method is
+ * "". The simple name of an array consists of the simple name of
+ * its component type, followed by "[]". Thus, an array with the
+ * component type of an anonymous class has a simple name of simply
+ * "[]".
+ *
+ * @return the simple name for this class.
+ * @since 1.5
+ */
+ public String getSimpleName()
+ {
+ // FIXME write real implementation
+ return "";
+ }
+
+ /**
+ * Returns the class which immediately encloses this class. If this class
+ * is a top-level class, this method returns <code>null</code>.
+ *
+ * @return the immediate enclosing class, or <code>null</code> if this is
+ * a top-level class.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return Class<?> */
+ public Class getEnclosingClass()
+ {
+ // FIXME write real implementation
+ return null;
+ }
+
+ /**
+ * Returns the constructor which immediately encloses this class. If
+ * this class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @return the immediate enclosing constructor if this class is
+ * declared within a constructor. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return Constructor<?> */
+ public Constructor getEnclosingConstructor()
+ {
+ // FIXME write real implementation
+ return null;
+ }
+
+ /**
+ * Returns the method which immediately encloses this class. If
+ * this class is a top-level class, or a local or anonymous class
+ * immediately enclosed by a type definition, instance initializer
+ * or static initializer, then <code>null</code> is returned.
+ *
+ * @return the immediate enclosing method if this class is
+ * declared within a method. Otherwise, <code>null</code>
+ * is returned.
+ * @since 1.5
+ */
+ public Method getEnclosingMethod()
+ {
+ // FIXME write real implementation
+ return null;
+ }
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this class, in declaration order.
+ * An array of size zero is returned if this class has no type
+ * variables.
+ *
+ * @return the type variables associated with this class.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should return TypeVariable<Class<T>> */
+ public TypeVariable[] getTypeParameters()
+ {
+ // FIXME - provide real implementation.
+ return new TypeVariable[0];
+ }
}
diff --git a/libjava/java/lang/Math.java b/libjava/java/lang/Math.java
index 08081e2..6f68480 100644
--- a/libjava/java/lang/Math.java
+++ b/libjava/java/lang/Math.java
@@ -647,4 +647,180 @@ public final class Math
{
return (rads * 180) / PI;
}
+
+ /**
+ * <p>
+ * Returns the base 10 logarithm of the supplied value. The returned
+ * result is within 1 ulp of the exact result, and the results are
+ * semi-monotonic.
+ * </p>
+ * <p>
+ * Arguments of either <code>NaN</code> or less than zero return
+ * <code>NaN</code>. An argument of positive infinity returns positive
+ * infinity. Negative infinity is returned if either positive or negative
+ * zero is supplied. Where the argument is the result of
+ * <code>10<sup>n</sup</code>, then <code>n</code> is returned.
+ * </p>
+ *
+ * @param a the numeric argument.
+ * @return the base 10 logarithm of <code>a</code>.
+ * @since 1.5
+ */
+ public static native double log10(double a);
+
+ /**
+ * <p>
+ * Returns the sign of the argument as follows:
+ * </p>
+ * <ul>
+ * <li>If <code>a</code> is greater than zero, the result is 1.0.</li>
+ * <li>If <code>a</code> is less than zero, the result is -1.0.</li>
+ * <li>If <code>a</code> is <code>NaN</code>, the result is <code>NaN</code>.
+ * <li>If <code>a</code> is positive or negative zero, the result is the
+ * same.</li>
+ * </ul>
+ *
+ * @param a the numeric argument.
+ * @return the sign of the argument.
+ * @since 1.5.
+ */
+ public static double signum(double a)
+ {
+ if (Double.isNaN(a))
+ return Double.NaN;
+ if (a > 0)
+ return 1.0;
+ if (a < 0)
+ return -1.0;
+ return a;
+ }
+
+ /**
+ * <p>
+ * Returns the sign of the argument as follows:
+ * </p>
+ * <ul>
+ * <li>If <code>a</code> is greater than zero, the result is 1.0f.</li>
+ * <li>If <code>a</code> is less than zero, the result is -1.0f.</li>
+ * <li>If <code>a</code> is <code>NaN</code>, the result is <code>NaN</code>.
+ * <li>If <code>a</code> is positive or negative zero, the result is the
+ * same.</li>
+ * </ul>
+ *
+ * @param a the numeric argument.
+ * @return the sign of the argument.
+ * @since 1.5.
+ */
+ public static float signum(float a)
+ {
+ if (Float.isNaN(a))
+ return Float.NaN;
+ if (a > 0)
+ return 1.0f;
+ if (a < 0)
+ return -1.0f;
+ return a;
+ }
+
+ /**
+ * Return the ulp for the given double argument. The ulp is the
+ * difference between the argument and the next larger double. Note
+ * that the sign of the double argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Double#MIN_VALUE} is returned.
+ * @param d the double whose ulp should be returned
+ * @return the difference between the argument and the next larger double
+ * @since 1.5
+ */
+ public static double ulp(double d)
+ {
+ if (Double.isNaN(d))
+ return d;
+ if (Double.isInfinite(d))
+ return Double.POSITIVE_INFINITY;
+ // This handles both +0.0 and -0.0.
+ if (d == 0.0)
+ return Double.MIN_VALUE;
+ long bits = Double.doubleToLongBits(d);
+ final int mantissaBits = 52;
+ final int exponentBits = 11;
+ final long mantMask = (1L << mantissaBits) - 1;
+ long mantissa = bits & mantMask;
+ final long expMask = (1L << exponentBits) - 1;
+ long exponent = (bits >>> mantissaBits) & expMask;
+
+ // Denormal number, so the answer is easy.
+ if (exponent == 0)
+ {
+ long result = (exponent << mantissaBits) | 1L;
+ return Double.longBitsToDouble(result);
+ }
+
+ // Conceptually we want to have '1' as the mantissa. Then we would
+ // shift the mantissa over to make a normal number. If this underflows
+ // the exponent, we will make a denormal result.
+ long newExponent = exponent - mantissaBits;
+ long newMantissa;
+ if (newExponent > 0)
+ newMantissa = 0;
+ else
+ {
+ newMantissa = 1L << -(newExponent - 1);
+ newExponent = 0;
+ }
+ return Double.longBitsToDouble((newExponent << mantissaBits) | newMantissa);
+ }
+
+ /**
+ * Return the ulp for the given float argument. The ulp is the
+ * difference between the argument and the next larger float. Note
+ * that the sign of the float argument is ignored, that is,
+ * ulp(x) == ulp(-x). If the argument is a NaN, then NaN is returned.
+ * If the argument is an infinity, then +Inf is returned. If the
+ * argument is zero (either positive or negative), then
+ * {@link Float#MIN_VALUE} is returned.
+ * @param f the float whose ulp should be returned
+ * @return the difference between the argument and the next larger float
+ * @since 1.5
+ */
+ public static float ulp(float f)
+ {
+ if (Float.isNaN(f))
+ return f;
+ if (Float.isInfinite(f))
+ return Float.POSITIVE_INFINITY;
+ // This handles both +0.0 and -0.0.
+ if (f == 0.0)
+ return Float.MIN_VALUE;
+ int bits = Float.floatToIntBits(f);
+ final int mantissaBits = 23;
+ final int exponentBits = 8;
+ final int mantMask = (1 << mantissaBits) - 1;
+ int mantissa = bits & mantMask;
+ final int expMask = (1 << exponentBits) - 1;
+ int exponent = (bits >>> mantissaBits) & expMask;
+
+ // Denormal number, so the answer is easy.
+ if (exponent == 0)
+ {
+ int result = (exponent << mantissaBits) | 1;
+ return Float.intBitsToFloat(result);
+ }
+
+ // Conceptually we want to have '1' as the mantissa. Then we would
+ // shift the mantissa over to make a normal number. If this underflows
+ // the exponent, we will make a denormal result.
+ int newExponent = exponent - mantissaBits;
+ int newMantissa;
+ if (newExponent > 0)
+ newMantissa = 0;
+ else
+ {
+ newMantissa = 1 << -(newExponent - 1);
+ newExponent = 0;
+ }
+ return Float.intBitsToFloat((newExponent << mantissaBits) | newMantissa);
+ }
}
diff --git a/libjava/java/lang/Thread.java b/libjava/java/lang/Thread.java
index 7938498..505b99b 100644
--- a/libjava/java/lang/Thread.java
+++ b/libjava/java/lang/Thread.java
@@ -127,11 +127,17 @@ public class Thread implements Runnable
/** The context classloader for this Thread. */
private ClassLoader contextClassLoader;
+ /** The default exception handler. */
+ private static UncaughtExceptionHandler defaultHandler;
+
/** Thread local storage. Package accessible for use by
* InheritableThreadLocal.
*/
WeakIdentityHashMap locals;
+ /** The uncaught exception handler. */
+ UncaughtExceptionHandler exceptionHandler;
+
// This describes the top-most interpreter frame for this thread.
RawData interp_frame;
@@ -935,4 +941,147 @@ public class Thread implements Runnable
}
return locals;
}
+
+ /**
+ * Assigns the given <code>UncaughtExceptionHandler</code> to this
+ * thread. This will then be called if the thread terminates due
+ * to an uncaught exception, pre-empting that of the
+ * <code>ThreadGroup</code>.
+ *
+ * @param h the handler to use for this thread.
+ * @throws SecurityException if the current thread can't modify this thread.
+ * @since 1.5
+ */
+ public void setUncaughtExceptionHandler(UncaughtExceptionHandler h)
+ {
+ SecurityManager sm = SecurityManager.current; // Be thread-safe.
+ if (sm != null)
+ sm.checkAccess(this);
+ exceptionHandler = h;
+ }
+
+ /**
+ * <p>
+ * Returns the handler used when this thread terminates due to an
+ * uncaught exception. The handler used is determined by the following:
+ * </p>
+ * <ul>
+ * <li>If this thread has its own handler, this is returned.</li>
+ * <li>If not, then the handler of the thread's <code>ThreadGroup</code>
+ * object is returned.</li>
+ * <li>If both are unavailable, then <code>null</code> is returned
+ * (which can only happen when the thread was terminated since
+ * then it won't have an associated thread group anymore).</li>
+ * </ul>
+ *
+ * @return the appropriate <code>UncaughtExceptionHandler</code> or
+ * <code>null</code> if one can't be obtained.
+ * @since 1.5
+ */
+ public UncaughtExceptionHandler getUncaughtExceptionHandler()
+ {
+ return exceptionHandler != null ? exceptionHandler : group;
+ }
+
+ /**
+ * <p>
+ * Sets the default uncaught exception handler used when one isn't
+ * provided by the thread or its associated <code>ThreadGroup</code>.
+ * This exception handler is used when the thread itself does not
+ * have an exception handler, and the thread's <code>ThreadGroup</code>
+ * does not override this default mechanism with its own. As the group
+ * calls this handler by default, this exception handler should not defer
+ * to that of the group, as it may lead to infinite recursion.
+ * </p>
+ * <p>
+ * Uncaught exception handlers are used when a thread terminates due to
+ * an uncaught exception. Replacing this handler allows default code to
+ * be put in place for all threads in order to handle this eventuality.
+ * </p>
+ *
+ * @param h the new default uncaught exception handler to use.
+ * @throws SecurityException if a security manager is present and
+ * disallows the runtime permission
+ * "setDefaultUncaughtExceptionHandler".
+ * @since 1.5
+ */
+ public static void
+ setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler h)
+ {
+ SecurityManager sm = SecurityManager.current; // Be thread-safe.
+ if (sm != null)
+ sm.checkPermission(new RuntimePermission("setDefaultUncaughtExceptionHandler"));
+ defaultHandler = h;
+ }
+
+ /**
+ * Returns the handler used by default when a thread terminates
+ * unexpectedly due to an exception, or <code>null</code> if one doesn't
+ * exist.
+ *
+ * @return the default uncaught exception handler.
+ * @since 1.5
+ */
+ public static UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
+ {
+ return defaultHandler;
+ }
+
+ /**
+ * <p>
+ * This interface is used to handle uncaught exceptions
+ * which cause a <code>Thread</code> to terminate. When
+ * a thread, t, is about to terminate due to an uncaught
+ * exception, the virtual machine looks for a class which
+ * implements this interface, in order to supply it with
+ * the dying thread and its uncaught exception.
+ * </p>
+ * <p>
+ * The virtual machine makes two attempts to find an
+ * appropriate handler for the uncaught exception, in
+ * the following order:
+ * </p>
+ * <ol>
+ * <li>
+ * <code>t.getUncaughtExceptionHandler()</code> --
+ * the dying thread is queried first for a handler
+ * specific to that thread.
+ * </li>
+ * <li>
+ * <code>t.getThreadGroup()</code> --
+ * the thread group of the dying thread is used to
+ * handle the exception. If the thread group has
+ * no special requirements for handling the exception,
+ * it may simply forward it on to
+ * <code>Thread.getDefaultUncaughtExceptionHandler()</code>,
+ * the default handler, which is used as a last resort.
+ * </li>
+ * </ol>
+ * <p>
+ * The first handler found is the one used to handle
+ * the uncaught exception.
+ * </p>
+ *
+ * @author Tom Tromey <tromey@redhat.com>
+ * @author Andrew John Hughes <gnu_andrew@member.fsf.org>
+ * @since 1.5
+ * @see Thread#getUncaughtExceptionHandler()
+ * @see Thread#setUncaughtExceptionHander(java.lang.Thread.UncaughtExceptionHandler)
+ * @see Thread#getDefaultUncaughtExceptionHandler()
+ * @see
+ * Thread#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
+ */
+ public interface UncaughtExceptionHandler
+ {
+ /**
+ * Invoked by the virtual machine with the dying thread
+ * and the uncaught exception. Any exceptions thrown
+ * by this method are simply ignored by the virtual
+ * machine.
+ *
+ * @param thr the dying thread.
+ * @param exc the uncaught exception.
+ */
+ void uncaughtException(Thread thr, Throwable exc);
+ }
}
diff --git a/libjava/java/lang/natMath.cc b/libjava/java/lang/natMath.cc
index 1903e27..bc6cf7e 100644
--- a/libjava/java/lang/natMath.cc
+++ b/libjava/java/lang/natMath.cc
@@ -102,6 +102,11 @@ jdouble java::lang::Math::ceil(jdouble x)
return (jdouble)::ceil((double)x);
}
+jdouble java::lang::Math::log10(jdouble x)
+{
+ return (jdouble)::log10((double)x);
+}
+
static inline int
floatToIntBits (jfloat value)
{
diff --git a/libjava/java/lang/reflect/Constructor.java b/libjava/java/lang/reflect/Constructor.java
index 980ca2a4..b789fb1 100644
--- a/libjava/java/lang/reflect/Constructor.java
+++ b/libjava/java/lang/reflect/Constructor.java
@@ -44,7 +44,8 @@ package java.lang.reflect;
* @since 1.1
* @status updated to 1.4
*/
-public final class Constructor extends AccessibleObject implements Member
+public final class Constructor extends AccessibleObject
+ implements Member, GenericDeclaration
{
/**
* This class is uninstantiable except from native code.
@@ -203,6 +204,28 @@ public final class Constructor extends AccessibleObject implements Member
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException;
+ // FIXME - Write a real implementation
+ public boolean isSynthetic() { return false; }
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this constructor, in declaration order.
+ * An array of size zero is returned if this class has no type
+ * variables.
+ *
+ * @return the type variables associated with this class.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be TypeVariable<Method>[] */
+ public TypeVariable[] getTypeParameters()
+ {
+ // FIXME - write a real implementation
+ return new TypeVariable[0];
+ }
+
// Update cached values from method descriptor in class.
private native void getType ();
diff --git a/libjava/java/lang/reflect/Field.java b/libjava/java/lang/reflect/Field.java
index cb852cf..10884c1 100644
--- a/libjava/java/lang/reflect/Field.java
+++ b/libjava/java/lang/reflect/Field.java
@@ -262,4 +262,9 @@ public final class Field extends AccessibleObject implements Member
sbuf.append(getName());
return sbuf.toString();
}
+
+ // FIXME - Write a real implementations
+ public boolean isSynthetic() { return false; }
+ public boolean isEnumConstant() { return false; }
+
}
diff --git a/libjava/java/lang/reflect/Method.java b/libjava/java/lang/reflect/Method.java
index f93a727..a5047f5 100644
--- a/libjava/java/lang/reflect/Method.java
+++ b/libjava/java/lang/reflect/Method.java
@@ -46,7 +46,8 @@ import gnu.gcj.RawData;
* @since 1.1
* @status updated to 1.4
*/
-public final class Method extends AccessibleObject implements Member
+public final class Method extends AccessibleObject
+ implements Member, GenericDeclaration
{
/**
* This class is uninstantiable.
@@ -262,6 +263,28 @@ public final class Method extends AccessibleObject implements Member
}
}
+ // FIXME - Write a real implementation
+ public boolean isSynthetic() { return false; }
+
+ /**
+ * Returns an array of <code>TypeVariable</code> objects that represents
+ * the type variables declared by this constructor, in declaration order.
+ * An array of size zero is returned if this class has no type
+ * variables.
+ *
+ * @return the type variables associated with this class.
+ * @throws GenericSignatureFormatError if the generic signature does
+ * not conform to the format specified in the Virtual Machine
+ * specification, version 3.
+ * @since 1.5
+ */
+ /* FIXME[GENERICS]: Should be TypeVariable<Method>[] */
+ public TypeVariable[] getTypeParameters()
+ {
+ // FIXME - write a real implementation
+ return new TypeVariable[0];
+ }
+
// Declaring class.
private Class declaringClass;
diff --git a/libjava/java/security/VMSecureRandom.java b/libjava/java/security/VMSecureRandom.java
new file mode 100644
index 0000000..dc67d87
--- /dev/null
+++ b/libjava/java/security/VMSecureRandom.java
@@ -0,0 +1,134 @@
+/* VMSecureRandom.java -- random seed generator.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is a part of GNU Classpath.
+
+GNU Classpath 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 (at
+your option) any later version.
+
+GNU Classpath 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 GNU Classpath; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.security;
+
+import gnu.classpath.SystemProperties;
+import gnu.java.security.action.GetSecurityPropertyAction;
+
+import java.net.URL;
+
+/**
+ * VM-specific methods for generating real (or almost real) random
+ * seeds. VM implementors should write a version of this class that
+ * reads random bytes from some system source.
+ *
+ * <p>The default implementation of this class runs eight threads that
+ * increment counters in a tight loop, and XORs each counter to
+ * produce one byte of seed data. This is not very efficient, and is
+ * not guaranteed to be random (the thread scheduler is probably
+ * deterministic, after all). If possible, VM implementors should
+ * reimplement this class so it obtains a random seed from a system
+ * facility, such as a system entropy gathering device or hardware
+ * random number generator.
+ */
+final class VMSecureRandom
+{
+
+ /**
+ * Generate a random seed. Implementations are free to generate
+ * fewer random bytes than are requested, and leave the remaining
+ * bytes of the destination buffer as zeros. Implementations SHOULD,
+ * however, make a best-effort attempt to satisfy the request.
+ *
+ * @param buffer The destination buffer.
+ * @param offset The offset in the buffer to start putting bytes.
+ * @param length The number of random bytes to generate.
+ */
+ static int generateSeed(byte[] buffer, int offset, int length)
+ {
+ if (length < 0)
+ throw new IllegalArgumentException("length must be nonnegative");
+ if (offset < 0 || offset + length > buffer.length)
+ throw new IndexOutOfBoundsException();
+
+ Spinner[] spinners = new Spinner[8];
+ int n = 0x1;
+ for (int i = 0; i < spinners.length; i++)
+ {
+ spinners[i] = new Spinner((byte) n);
+ Thread t = new Thread(spinners[i]);
+ t.start();
+ n <<= 1;
+ }
+
+ // Wait until at least one spinner has started.
+ while (!(spinners[0].running || spinners[1].running || spinners[2].running
+ || spinners[3].running || spinners[4].running || spinners[5].running
+ || spinners[6].running || spinners[7].running))
+ {
+ Thread.yield();
+ }
+
+ for (int i = offset; i < length; i++)
+ {
+ buffer[i] = (byte) (spinners[0].value ^ spinners[1].value ^ spinners[2].value
+ ^ spinners[3].value ^ spinners[4].value ^ spinners[5].value
+ ^ spinners[6].value ^ spinners[7].value);
+ Thread.yield();
+ }
+
+ for (int i = 0; i < spinners.length; i++)
+ spinners[i].stop();
+
+ return length;
+ }
+
+ static class Spinner implements Runnable
+ {
+ volatile byte value;
+ volatile boolean running;
+
+ Spinner(final byte initial)
+ {
+ value = initial;
+ }
+
+ public void run()
+ {
+ running = true;
+ while (running)
+ value++;
+ }
+
+ private void stop()
+ {
+ running = false;
+ }
+ }
+} \ No newline at end of file
diff --git a/libjava/java/util/logging/LogManager.java b/libjava/java/util/logging/LogManager.java
new file mode 100644
index 0000000..1c42069
--- /dev/null
+++ b/libjava/java/util/logging/LogManager.java
@@ -0,0 +1,912 @@
+/* LogManager.java -- a class for maintaining Loggers and managing
+ configuration properties
+ Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+
+GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.util.logging;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import gnu.classpath.SystemProperties;
+
+/**
+ * The <code>LogManager</code> maintains a hierarchical namespace
+ * of Logger objects and manages properties for configuring the logging
+ * framework. There exists only one single <code>LogManager</code>
+ * per virtual machine. This instance can be retrieved using the
+ * static method {@link #getLogManager()}.
+ *
+ * <p><strong>Configuration Process:</strong> The global LogManager
+ * object is created and configured when the class
+ * <code>java.util.logging.LogManager</code> is initialized.
+ * The configuration process includes the subsequent steps:
+ *
+ * <ul>
+ * <li>If the system property <code>java.util.logging.manager</code>
+ * is set to the name of a subclass of
+ * <code>java.util.logging.LogManager</code>, an instance of
+ * that subclass is created and becomes the global LogManager.
+ * Otherwise, a new instance of LogManager is created.</li>
+ * <li>The <code>LogManager</code> constructor tries to create
+ * a new instance of the class specified by the system
+ * property <code>java.util.logging.config.class</code>.
+ * Typically, the constructor of this class will call
+ * <code>LogManager.getLogManager().readConfiguration(java.io.InputStream)</code>
+ * for configuring the logging framework.
+ * The configuration process stops at this point if
+ * the system property <code>java.util.logging.config.class</code>
+ * is set (irrespective of whether the class constructor
+ * could be called or an exception was thrown).</li>
+ *
+ * <li>If the system property <code>java.util.logging.config.class</code>
+ * is <em>not</em> set, the configuration parameters are read in from
+ * a file and passed to
+ * {@link #readConfiguration(java.io.InputStream)}.
+ * The name and location of this file are specified by the system
+ * property <code>java.util.logging.config.file</code>.</li>
+ * <li>If the system property <code>java.util.logging.config.file</code>
+ * is not set, however, the contents of the URL
+ * "{gnu.classpath.home.url}/logging.properties" are passed to
+ * {@link #readConfiguration(java.io.InputStream)}.
+ * Here, "{gnu.classpath.home.url}" stands for the value of
+ * the system property <code>gnu.classpath.home.url</code>.</li>
+ * </ul>
+ *
+ * <p>The <code>LogManager</code> has a level of <code>INFO</code> by
+ * default, and this will be inherited by <code>Logger</code>s unless they
+ * override it either by properties or programmatically.
+ *
+ * @author Sascha Brawer (brawer@acm.org)
+ */
+public class LogManager
+{
+ /**
+ * The singleton LogManager instance.
+ */
+ private static LogManager logManager;
+
+ /**
+ * The registered named loggers; maps the name of a Logger to
+ * a WeakReference to it.
+ */
+ private Map loggers;
+
+ /**
+ * The properties for the logging framework which have been
+ * read in last.
+ */
+ private Properties properties;
+
+ /**
+ * A delegate object that provides support for handling
+ * PropertyChangeEvents. The API specification does not
+ * mention which bean should be the source in the distributed
+ * PropertyChangeEvents, but Mauve test code has determined that
+ * the Sun J2SE 1.4 reference implementation uses the LogManager
+ * class object. This is somewhat strange, as the class object
+ * is not the bean with which listeners have to register, but
+ * there is no reason for the GNU Classpath implementation to
+ * behave differently from the reference implementation in
+ * this case.
+ */
+ private final PropertyChangeSupport pcs = new PropertyChangeSupport( /* source bean */
+ LogManager.class);
+
+ protected LogManager()
+ {
+ loggers = new HashMap();
+ }
+
+ /**
+ * Returns the globally shared LogManager instance.
+ */
+ public static synchronized LogManager getLogManager()
+ {
+ if (logManager == null)
+ {
+ logManager = makeLogManager();
+ initLogManager();
+ }
+ return logManager;
+ }
+
+ private static final String MANAGER_PROPERTY = "java.util.logging.manager";
+
+ private static LogManager makeLogManager()
+ {
+ String managerClassName = SystemProperties.getProperty(MANAGER_PROPERTY);
+ LogManager manager = (LogManager) createInstance
+ (managerClassName, LogManager.class, MANAGER_PROPERTY);
+ if (manager == null)
+ manager = new LogManager();
+ return manager;
+ }
+
+ private static final String CONFIG_PROPERTY = "java.util.logging.config.class";
+
+ private static void initLogManager()
+ {
+ LogManager manager = getLogManager();
+ Logger.root.setLevel(Level.INFO);
+ manager.addLogger(Logger.root);
+
+ /* The Javadoc description of the class explains
+ * what is going on here.
+ */
+ Object configurator = createInstance(System.getProperty(CONFIG_PROPERTY),
+ /* must be instance of */ Object.class,
+ CONFIG_PROPERTY);
+
+ try
+ {
+ if (configurator == null)
+ manager.readConfiguration();
+ }
+ catch (IOException ex)
+ {
+ /* FIXME: Is it ok to ignore exceptions here? */
+ }
+ }
+
+ /**
+ * Registers a listener which will be notified when the
+ * logging properties are re-read.
+ */
+ public synchronized void addPropertyChangeListener(PropertyChangeListener listener)
+ {
+ /* do not register null. */
+ listener.getClass();
+
+ pcs.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * Unregisters a listener.
+ *
+ * If <code>listener</code> has not been registered previously,
+ * nothing happens. Also, no exception is thrown if
+ * <code>listener</code> is <code>null</code>.
+ */
+ public synchronized void removePropertyChangeListener(PropertyChangeListener listener)
+ {
+ if (listener != null)
+ pcs.removePropertyChangeListener(listener);
+ }
+
+ /**
+ * Adds a named logger. If a logger with the same name has
+ * already been registered, the method returns <code>false</code>
+ * without adding the logger.
+ *
+ * <p>The <code>LogManager</code> only keeps weak references
+ * to registered loggers. Therefore, names can become available
+ * after automatic garbage collection.
+ *
+ * @param logger the logger to be added.
+ *
+ * @return <code>true</code>if <code>logger</code> was added,
+ * <code>false</code> otherwise.
+ *
+ * @throws NullPointerException if <code>name</code> is
+ * <code>null</code>.
+ */
+ public synchronized boolean addLogger(Logger logger)
+ {
+ /* To developers thinking about to remove the 'synchronized'
+ * declaration from this method: Please read the comment
+ * in java.util.logging.Logger.getLogger(String, String)
+ * and make sure that whatever you change wrt. synchronization
+ * does not endanger thread-safety of Logger.getLogger.
+ * The current implementation of Logger.getLogger assumes
+ * that LogManager does its synchronization on the globally
+ * shared instance of LogManager.
+ */
+ String name;
+ WeakReference ref;
+
+ /* This will throw a NullPointerException if logger is null,
+ * as required by the API specification.
+ */
+ name = logger.getName();
+
+ ref = (WeakReference) loggers.get(name);
+ if (ref != null)
+ {
+ if (ref.get() != null)
+ return false;
+
+ /* There has been a logger under this name in the past,
+ * but it has been garbage collected.
+ */
+ loggers.remove(ref);
+ }
+
+ /* Adding a named logger requires a security permission. */
+ if ((name != null) && ! name.equals(""))
+ checkAccess();
+
+ Logger parent = findAncestor(logger);
+ loggers.put(name, new WeakReference(logger));
+ if (parent != logger.getParent())
+ logger.setParent(parent);
+
+ // The level of the newly added logger must be specified.
+ // The easiest case is if there is a level for exactly this logger
+ // in the properties. If no such level exists the level needs to be
+ // searched along the hirachy. So if there is a new logger 'foo.blah.blub'
+ // and an existing parent logger 'foo' the properties 'foo.blah.blub.level'
+ // and 'foo.blah.level' need to be checked. If both do not exist in the
+ // properties the level of the new logger is set to 'null' (i.e. it uses the
+ // level of its parent 'foo').
+ Level logLevel = logger.getLevel();
+ String searchName = name;
+ String parentName = parent != null ? parent.getName() : "";
+ while (logLevel == null && ! searchName.equals(parentName))
+ {
+ logLevel = getLevelProperty(searchName + ".level", logLevel);
+ int index = searchName.lastIndexOf('.');
+ if(index > -1)
+ searchName = searchName.substring(0,index);
+ else
+ searchName = "";
+ }
+ logger.setLevel(logLevel);
+
+ /* It can happen that existing loggers should be children of
+ * the newly added logger. For example, assume that there
+ * already exist loggers under the names "", "foo", and "foo.bar.baz".
+ * When adding "foo.bar", the logger "foo.bar.baz" should change
+ * its parent to "foo.bar".
+ */
+ if (parent != Logger.root)
+ {
+ for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
+ {
+ Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
+ .get();
+ if ((possChild == null) || (possChild == logger)
+ || (possChild.getParent() != parent))
+ continue;
+
+ if (! possChild.getName().startsWith(name))
+ continue;
+
+ if (possChild.getName().charAt(name.length()) != '.')
+ continue;
+
+ possChild.setParent(logger);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Finds the closest ancestor for a logger among the currently
+ * registered ones. For example, if the currently registered
+ * loggers have the names "", "foo", and "foo.bar", the result for
+ * "foo.bar.baz" will be the logger whose name is "foo.bar".
+ *
+ * @param child a logger for whose name no logger has been
+ * registered.
+ *
+ * @return the closest ancestor for <code>child</code>,
+ * or <code>null</code> if <code>child</code>
+ * is the root logger.
+ *
+ * @throws NullPointerException if <code>child</code>
+ * is <code>null</code>.
+ */
+ private synchronized Logger findAncestor(Logger child)
+ {
+ String childName = child.getName();
+ int childNameLength = childName.length();
+ Logger best = Logger.root;
+ int bestNameLength = 0;
+
+ Logger cand;
+ String candName;
+ int candNameLength;
+
+ if (child == Logger.root)
+ return null;
+
+ for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
+ {
+ candName = (String) iter.next();
+ candNameLength = candName.length();
+
+ if (candNameLength > bestNameLength
+ && childNameLength > candNameLength
+ && childName.startsWith(candName)
+ && childName.charAt(candNameLength) == '.')
+ {
+ cand = (Logger) ((WeakReference) loggers.get(candName)).get();
+ if ((cand == null) || (cand == child))
+ continue;
+
+ bestNameLength = candName.length();
+ best = cand;
+ }
+ }
+
+ return best;
+ }
+
+ /**
+ * Returns a Logger given its name.
+ *
+ * @param name the name of the logger.
+ *
+ * @return a named Logger, or <code>null</code> if there is no
+ * logger with that name.
+ *
+ * @throw java.lang.NullPointerException if <code>name</code>
+ * is <code>null</code>.
+ */
+ public synchronized Logger getLogger(String name)
+ {
+ WeakReference ref;
+
+ /* Throw a NullPointerException if name is null. */
+ name.getClass();
+
+ ref = (WeakReference) loggers.get(name);
+ if (ref != null)
+ return (Logger) ref.get();
+ else
+ return null;
+ }
+
+ /**
+ * Returns an Enumeration of currently registered Logger names.
+ * Since other threads can register loggers at any time, the
+ * result could be different any time this method is called.
+ *
+ * @return an Enumeration with the names of the currently
+ * registered Loggers.
+ */
+ public synchronized Enumeration getLoggerNames()
+ {
+ return Collections.enumeration(loggers.keySet());
+ }
+
+ /**
+ * Resets the logging configuration by removing all handlers for
+ * registered named loggers and setting their level to <code>null</code>.
+ * The level of the root logger will be set to <code>Level.INFO</code>.
+ *
+ * @throws SecurityException if a security manager exists and
+ * the caller is not granted the permission to control
+ * the logging infrastructure.
+ */
+ public synchronized void reset() throws SecurityException
+ {
+ /* Throw a SecurityException if the caller does not have the
+ * permission to control the logging infrastructure.
+ */
+ checkAccess();
+
+ properties = new Properties();
+
+ Iterator iter = loggers.values().iterator();
+ while (iter.hasNext())
+ {
+ WeakReference ref;
+ Logger logger;
+
+ ref = (WeakReference) iter.next();
+ if (ref != null)
+ {
+ logger = (Logger) ref.get();
+
+ if (logger == null)
+ iter.remove();
+ else if (logger != Logger.root)
+ {
+ logger.resetLogger();
+ logger.setLevel(null);
+ }
+ }
+ }
+
+ Logger.root.setLevel(Level.INFO);
+ Logger.root.resetLogger();
+ }
+
+ /**
+ * Configures the logging framework by reading a configuration file.
+ * The name and location of this file are specified by the system
+ * property <code>java.util.logging.config.file</code>. If this
+ * property is not set, the URL
+ * "{gnu.classpath.home.url}/logging.properties" is taken, where
+ * "{gnu.classpath.home.url}" stands for the value of the system
+ * property <code>gnu.classpath.home.url</code>.
+ *
+ * <p>The task of configuring the framework is then delegated to
+ * {@link #readConfiguration(java.io.InputStream)}, which will
+ * notify registered listeners after having read the properties.
+ *
+ * @throws SecurityException if a security manager exists and
+ * the caller is not granted the permission to control
+ * the logging infrastructure, or if the caller is
+ * not granted the permission to read the configuration
+ * file.
+ *
+ * @throws IOException if there is a problem reading in the
+ * configuration file.
+ */
+ public synchronized void readConfiguration()
+ throws IOException, SecurityException
+ {
+ String path;
+ InputStream inputStream;
+
+ path = System.getProperty("java.util.logging.config.file");
+ if ((path == null) || (path.length() == 0))
+ {
+ String url = (System.getProperty("gnu.classpath.home.url")
+ + "/logging.properties");
+ try
+ {
+ inputStream = new URL(url).openStream();
+ }
+ catch (Exception e)
+ {
+ inputStream=null;
+ }
+
+ // If no config file could be found use a default configuration.
+ if(inputStream == null)
+ {
+ String defaultConfig = "handlers = java.util.logging.ConsoleHandler \n"
+ + ".level=INFO \n";
+ inputStream = new ByteArrayInputStream(defaultConfig.getBytes());
+ }
+ }
+ else
+ inputStream = new java.io.FileInputStream(path);
+
+ try
+ {
+ readConfiguration(inputStream);
+ }
+ finally
+ {
+ // Close the stream in order to save
+ // resources such as file descriptors.
+ inputStream.close();
+ }
+ }
+
+ public synchronized void readConfiguration(InputStream inputStream)
+ throws IOException, SecurityException
+ {
+ Properties newProperties;
+ Enumeration keys;
+
+ checkAccess();
+ newProperties = new Properties();
+ newProperties.load(inputStream);
+ reset();
+ this.properties = newProperties;
+ keys = newProperties.propertyNames();
+
+ while (keys.hasMoreElements())
+ {
+ String key = ((String) keys.nextElement()).trim();
+ String value = newProperties.getProperty(key);
+
+ if (value == null)
+ continue;
+
+ value = value.trim();
+
+ if ("handlers".equals(key))
+ {
+ StringTokenizer tokenizer = new StringTokenizer(value);
+ while (tokenizer.hasMoreTokens())
+ {
+ String handlerName = tokenizer.nextToken();
+ Handler handler = (Handler)
+ createInstance(handlerName, Handler.class, key);
+ Logger.root.addHandler(handler);
+ }
+ }
+
+ if (key.endsWith(".level"))
+ {
+ String loggerName = key.substring(0, key.length() - 6);
+ Logger logger = getLogger(loggerName);
+
+ if (logger == null)
+ {
+ logger = Logger.getLogger(loggerName);
+ addLogger(logger);
+ }
+ Level level = null;
+ try
+ {
+ level = Level.parse(value);
+ }
+ catch (IllegalArgumentException e)
+ {
+ warn("bad level \'" + value + "\'", e);
+ }
+ if (level != null)
+ {
+ logger.setLevel(level);
+ }
+ continue;
+ }
+ }
+
+ /* The API specification does not talk about the
+ * property name that is distributed with the
+ * PropertyChangeEvent. With test code, it could
+ * be determined that the Sun J2SE 1.4 reference
+ * implementation uses null for the property name.
+ */
+ pcs.firePropertyChange(null, null, null);
+ }
+
+ /**
+ * Returns the value of a configuration property as a String.
+ */
+ public synchronized String getProperty(String name)
+ {
+ if (properties != null)
+ return properties.getProperty(name);
+ else
+ return null;
+ }
+
+ /**
+ * Returns the value of a configuration property as an integer.
+ * This function is a helper used by the Classpath implementation
+ * of java.util.logging, it is <em>not</em> specified in the
+ * logging API.
+ *
+ * @param name the name of the configuration property.
+ *
+ * @param defaultValue the value that will be returned if the
+ * property is not defined, or if its value is not an integer
+ * number.
+ */
+ static int getIntProperty(String name, int defaultValue)
+ {
+ try
+ {
+ return Integer.parseInt(getLogManager().getProperty(name));
+ }
+ catch (Exception ex)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * Returns the value of a configuration property as an integer,
+ * provided it is inside the acceptable range.
+ * This function is a helper used by the Classpath implementation
+ * of java.util.logging, it is <em>not</em> specified in the
+ * logging API.
+ *
+ * @param name the name of the configuration property.
+ *
+ * @param minValue the lowest acceptable value.
+ *
+ * @param maxValue the highest acceptable value.
+ *
+ * @param defaultValue the value that will be returned if the
+ * property is not defined, or if its value is not an integer
+ * number, or if it is less than the minimum value,
+ * or if it is greater than the maximum value.
+ */
+ static int getIntPropertyClamped(String name, int defaultValue,
+ int minValue, int maxValue)
+ {
+ int val = getIntProperty(name, defaultValue);
+ if ((val < minValue) || (val > maxValue))
+ val = defaultValue;
+ return val;
+ }
+
+ /**
+ * Returns the value of a configuration property as a boolean.
+ * This function is a helper used by the Classpath implementation
+ * of java.util.logging, it is <em>not</em> specified in the
+ * logging API.
+ *
+ * @param name the name of the configuration property.
+ *
+ * @param defaultValue the value that will be returned if the
+ * property is not defined, or if its value is neither
+ * <code>"true"</code> nor <code>"false"</code>.
+ */
+ static boolean getBooleanProperty(String name, boolean defaultValue)
+ {
+ try
+ {
+ return (Boolean.valueOf(getLogManager().getProperty(name))).booleanValue();
+ }
+ catch (Exception ex)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * Returns the value of a configuration property as a Level.
+ * This function is a helper used by the Classpath implementation
+ * of java.util.logging, it is <em>not</em> specified in the
+ * logging API.
+ *
+ * @param propertyName the name of the configuration property.
+ *
+ * @param defaultValue the value that will be returned if the
+ * property is not defined, or if
+ * {@link Level#parse(java.lang.String)} does not like
+ * the property value.
+ */
+ static Level getLevelProperty(String propertyName, Level defaultValue)
+ {
+ try
+ {
+ return Level.parse(getLogManager().getProperty(propertyName));
+ }
+ catch (Exception ex)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * Returns the value of a configuration property as a Class.
+ * This function is a helper used by the Classpath implementation
+ * of java.util.logging, it is <em>not</em> specified in the
+ * logging API.
+ *
+ * @param propertyName the name of the configuration property.
+ *
+ * @param defaultValue the value that will be returned if the
+ * property is not defined, or if it does not specify
+ * the name of a loadable class.
+ */
+ static final Class getClassProperty(String propertyName, Class defaultValue)
+ {
+ String propertyValue = logManager.getProperty(propertyName);
+
+ if (propertyValue != null)
+ try
+ {
+ return locateClass(propertyValue);
+ }
+ catch (ClassNotFoundException e)
+ {
+ warn(propertyName + " = " + propertyValue, e);
+ }
+
+ return defaultValue;
+ }
+
+ static final Object getInstanceProperty(String propertyName, Class ofClass,
+ Class defaultClass)
+ {
+ Class klass = getClassProperty(propertyName, defaultClass);
+ if (klass == null)
+ return null;
+
+ try
+ {
+ Object obj = klass.newInstance();
+ if (ofClass.isInstance(obj))
+ return obj;
+ }
+ catch (InstantiationException e)
+ {
+ warn(propertyName + " = " + klass.getName(), e);
+ }
+ catch (IllegalAccessException e)
+ {
+ warn(propertyName + " = " + klass.getName(), e);
+ }
+
+ if (defaultClass == null)
+ return null;
+
+ try
+ {
+ return defaultClass.newInstance();
+ }
+ catch (java.lang.InstantiationException ex)
+ {
+ throw new RuntimeException(ex.getMessage());
+ }
+ catch (java.lang.IllegalAccessException ex)
+ {
+ throw new RuntimeException(ex.getMessage());
+ }
+ }
+
+ /**
+ * An instance of <code>LoggingPermission("control")</code>
+ * that is shared between calls to <code>checkAccess()</code>.
+ */
+ private static final LoggingPermission controlPermission = new LoggingPermission("control",
+ null);
+
+ /**
+ * Checks whether the current security context allows changing
+ * the configuration of the logging framework. For the security
+ * context to be trusted, it has to be granted
+ * a LoggingPermission("control").
+ *
+ * @throws SecurityException if a security manager exists and
+ * the caller is not granted the permission to control
+ * the logging infrastructure.
+ */
+ public void checkAccess() throws SecurityException
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPermission(controlPermission);
+ }
+
+ /**
+ * Creates a new instance of a class specified by name and verifies
+ * that it is an instance (or subclass of) a given type.
+ *
+ * @param className the name of the class of which a new instance
+ * should be created.
+ *
+ * @param type the object created must be an instance of
+ * <code>type</code> or any subclass of <code>type</code>
+ *
+ * @param property the system property to reference in error
+ * messages
+ *
+ * @return the new instance, or <code>null</code> if
+ * <code>className</code> is <code>null</code>, if no class
+ * with that name could be found, if there was an error
+ * loading that class, or if the constructor of the class
+ * has thrown an exception.
+ */
+ private static final Object createInstance(String className, Class type,
+ String property)
+ {
+ Class klass = null;
+
+ if ((className == null) || (className.length() == 0))
+ return null;
+
+ try
+ {
+ klass = locateClass(className);
+ if (type.isAssignableFrom(klass))
+ return klass.newInstance();
+ warn(property, className, "not an instance of " + type.getName());
+ }
+ catch (ClassNotFoundException e)
+ {
+ warn(property, className, "class not found");
+ }
+ catch (IllegalAccessException e)
+ {
+ warn(property, className, "illegal access");
+ }
+ catch (InstantiationException e)
+ {
+ warn(property, className, e);
+ }
+ catch (java.lang.LinkageError e)
+ {
+ warn(property, className, "linkage error");
+ }
+
+ return null;
+ }
+
+ private static final void warn(String property, String klass, Throwable t)
+ {
+ warn(property, klass, null, t);
+ }
+
+ private static final void warn(String property, String klass, String msg)
+ {
+ warn(property, klass, msg, null);
+ }
+
+ private static final void warn(String property, String klass, String msg,
+ Throwable t)
+ {
+ warn("error instantiating '" + klass + "' referenced by " + property +
+ (msg == null ? "" : ", " + msg), t);
+ }
+
+ /**
+ * All debug warnings go through this method.
+ */
+
+ private static final void warn(String msg, Throwable t)
+ {
+ System.err.println("WARNING: " + msg);
+ if (t != null)
+ t.printStackTrace(System.err);
+ }
+
+ /**
+ * Locates a class by first checking the system class loader and
+ * then checking the context class loader.
+ *
+ * @param name the fully qualified name of the Class to locate
+ * @return Class the located Class
+ */
+
+ private static Class locateClass(String name) throws ClassNotFoundException
+ {
+ // GCJ LOCAL
+ // Unfortunately this can be called during bootstrap when
+ // Thread.currentThread() will return null.
+ // See bug #27658
+ Thread t = Thread.currentThread();
+ ClassLoader loader = (t == null) ? null : t.getContextClassLoader();
+ try
+ {
+ return Class.forName(name, true, loader);
+ }
+ catch (ClassNotFoundException e)
+ {
+ loader = ClassLoader.getSystemClassLoader();
+ return Class.forName(name, true, loader);
+ }
+ }
+
+}
diff --git a/libjava/java/util/logging/Logger.java b/libjava/java/util/logging/Logger.java
index 18e0684..adb07ec 100644
--- a/libjava/java/util/logging/Logger.java
+++ b/libjava/java/util/logging/Logger.java
@@ -1,5 +1,5 @@
/* Logger.java -- a class for logging messages
- Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,6 +41,8 @@ package java.util.logging;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* A Logger is used for logging information about events. Usually, there
@@ -67,13 +69,29 @@ import java.util.ResourceBundle;
*/
public class Logger
{
+
+ static final Logger root = new Logger("", null);
+
/**
* A logger provided to applications that make only occasional use
* of the logging framework, typically early prototypes. Serious
* products are supposed to create and use their own Loggers, so
* they can be controlled individually.
*/
- public static final Logger global = getLogger("global");
+ public static final Logger global;
+
+ static
+ {
+ // Our class might be initialized from an unprivileged context
+ global = (Logger) AccessController.doPrivileged
+ (new PrivilegedAction()
+ {
+ public Object run()
+ {
+ return getLogger("global");
+ }
+ });
+ }
/**
@@ -175,7 +193,7 @@ public class Logger
/* This is null when the root logger is being constructed,
* and the root logger afterwards.
*/
- parent = LogManager.getLogManager().rootLogger;
+ parent = root;
useParentHandlers = (parent != null);
}
@@ -577,7 +595,8 @@ public class Logger
public void log(Level level, String message)
{
- log(level, message, (Object[]) null);
+ if (isLoggable(level))
+ log(level, message, (Object[]) null);
}
@@ -585,12 +604,15 @@ public class Logger
String message,
Object param)
{
- StackTraceElement caller = getCallerStackFrame();
- logp(level,
- caller.getClassName(),
- caller.getMethodName(),
- message,
- param);
+ if (isLoggable(level))
+ {
+ StackTraceElement caller = getCallerStackFrame();
+ logp(level,
+ caller != null ? caller.getClassName() : "<unknown>",
+ caller != null ? caller.getMethodName() : "<unknown>",
+ message,
+ param);
+ }
}
@@ -598,12 +620,15 @@ public class Logger
String message,
Object[] params)
{
- StackTraceElement caller = getCallerStackFrame();
- logp(level,
- caller.getClassName(),
- caller.getMethodName(),
- message,
- params);
+ if (isLoggable(level))
+ {
+ StackTraceElement caller = getCallerStackFrame();
+ logp(level,
+ caller != null ? caller.getClassName() : "<unknown>",
+ caller != null ? caller.getMethodName() : "<unknown>",
+ message,
+ params);
+ }
}
@@ -611,12 +636,15 @@ public class Logger
String message,
Throwable thrown)
{
- StackTraceElement caller = getCallerStackFrame();
- logp(level,
- caller.getClassName(),
- caller.getMethodName(),
- message,
- thrown);
+ if (isLoggable(level))
+ {
+ StackTraceElement caller = getCallerStackFrame();
+ logp(level,
+ caller != null ? caller.getClassName() : "<unknown>",
+ caller != null ? caller.getMethodName() : "<unknown>",
+ message,
+ thrown);
+ }
}
@@ -1138,21 +1166,12 @@ public class Logger
*/
public synchronized void setParent(Logger parent)
{
- LogManager lm;
-
/* Throw a new NullPointerException if parent is null. */
parent.getClass();
- lm = LogManager.getLogManager();
-
- if (this == lm.rootLogger)
- {
- if (parent != null)
+ if (this == root)
throw new IllegalArgumentException(
- "only the root logger can have a null parent");
- this.parent = null;
- return;
- }
+ "the root logger can only have a null parent");
/* An application is allowed to control an anonymous logger
* without having the permission to control the logging
@@ -1167,13 +1186,13 @@ public class Logger
/**
* Gets the StackTraceElement of the first class that is not this class.
* That should be the initial caller of a logging method.
- * @return caller of the initial looging method
+ * @return caller of the initial logging method or null if unknown.
*/
private native StackTraceElement getCallerStackFrame();
-
+
/**
* Reset and close handlers attached to this logger. This function is package
- * private because it must only be available to the LogManager.
+ * private because it must only be avaiable to the LogManager.
*/
void resetLogger()
{
diff --git a/libjava/scripts/makemake.tcl b/libjava/scripts/makemake.tcl
index 1169d9b..ca5b72b 100755
--- a/libjava/scripts/makemake.tcl
+++ b/libjava/scripts/makemake.tcl
@@ -345,7 +345,7 @@ scan_packages classpath/external/relaxngDatatype
scan_packages .
# Files created by the build.
classify_source_file . java/lang/ConcreteProcess.java
-classify_source_file classpath java/util/LocaleData.java
+classify_source_file classpath gnu/java/locale/LocaleData.java
classify_source_file classpath gnu/classpath/Configuration.java
puts "## This file was automatically generated by scripts/makemake.tcl"
diff --git a/libjava/sources.am b/libjava/sources.am
index eacb5cc..acee6ea 100644
--- a/libjava/sources.am
+++ b/libjava/sources.am
@@ -234,6 +234,7 @@ gnu/awt/xlib.list: $(gnu_awt_xlib_source_files)
gnu_classpath_source_files = \
classpath/gnu/classpath/ByteArray.java \
classpath/gnu/classpath/Configuration.java \
+classpath/gnu/classpath/NotImplementedException.java \
classpath/gnu/classpath/Pointer.java \
classpath/gnu/classpath/Pointer32.java \
classpath/gnu/classpath/Pointer64.java \
@@ -278,6 +279,7 @@ classpath/gnu/classpath/jdwp/Jdwp.java \
classpath/gnu/classpath/jdwp/JdwpConstants.java \
gnu/classpath/jdwp/VMFrame.java \
gnu/classpath/jdwp/VMIdManager.java \
+gnu/classpath/jdwp/VMMethod.java \
gnu/classpath/jdwp/VMVirtualMachine.java
gnu_classpath_jdwp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_source_files)))
@@ -294,6 +296,7 @@ gnu/classpath/jdwp.list: $(gnu_classpath_jdwp_source_files)
gnu_classpath_jdwp_event_source_files = \
+classpath/gnu/classpath/jdwp/event/BreakpointEvent.java \
classpath/gnu/classpath/jdwp/event/ClassPrepareEvent.java \
classpath/gnu/classpath/jdwp/event/Event.java \
classpath/gnu/classpath/jdwp/event/EventManager.java \
@@ -358,6 +361,7 @@ classpath/gnu/classpath/jdwp/exception/InvalidThreadGroupException.java \
classpath/gnu/classpath/jdwp/exception/JdwpException.java \
classpath/gnu/classpath/jdwp/exception/JdwpIllegalArgumentException.java \
classpath/gnu/classpath/jdwp/exception/JdwpInternalErrorException.java \
+classpath/gnu/classpath/jdwp/exception/NativeMethodException.java \
classpath/gnu/classpath/jdwp/exception/NotImplementedException.java \
classpath/gnu/classpath/jdwp/exception/VmDeadException.java
@@ -685,6 +689,69 @@ gnu/java/awt/color.list: $(gnu_java_awt_color_source_files)
-include gnu/java/awt/color.deps
+gnu_java_awt_font_source_files = \
+classpath/gnu/java/awt/font/FontDelegate.java \
+classpath/gnu/java/awt/font/FontFactory.java \
+classpath/gnu/java/awt/font/GNUGlyphVector.java
+
+gnu_java_awt_font_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_source_files)))
+
+gnu/java/awt/font.list: $(gnu_java_awt_font_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font.list
+
+-include gnu/java/awt/font.deps
+
+
+gnu_java_awt_font_opentype_source_files = \
+classpath/gnu/java/awt/font/opentype/CharGlyphMap.java \
+classpath/gnu/java/awt/font/opentype/GlyphNamer.java \
+classpath/gnu/java/awt/font/opentype/MacResourceFork.java \
+classpath/gnu/java/awt/font/opentype/NameDecoder.java \
+classpath/gnu/java/awt/font/opentype/OpenTypeFont.java \
+classpath/gnu/java/awt/font/opentype/OpenTypeFontFactory.java \
+classpath/gnu/java/awt/font/opentype/Scaler.java
+
+gnu_java_awt_font_opentype_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_opentype_source_files)))
+
+gnu/java/awt/font/opentype.list: $(gnu_java_awt_font_opentype_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_opentype_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font/opentype.list
+
+-include gnu/java/awt/font/opentype.deps
+
+
+gnu_java_awt_font_opentype_truetype_source_files = \
+classpath/gnu/java/awt/font/opentype/truetype/Fixed.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphLoader.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphLocator.java \
+classpath/gnu/java/awt/font/opentype/truetype/GlyphMeasurer.java \
+classpath/gnu/java/awt/font/opentype/truetype/TrueTypeScaler.java \
+classpath/gnu/java/awt/font/opentype/truetype/VirtualMachine.java \
+classpath/gnu/java/awt/font/opentype/truetype/Zone.java \
+classpath/gnu/java/awt/font/opentype/truetype/ZonePathIterator.java
+
+gnu_java_awt_font_opentype_truetype_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_font_opentype_truetype_source_files)))
+
+gnu/java/awt/font/opentype/truetype.list: $(gnu_java_awt_font_opentype_truetype_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_font_opentype_truetype_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/font/opentype/truetype.list
+
+-include gnu/java/awt/font/opentype/truetype.deps
+
+
gnu_java_awt_image_source_files = \
classpath/gnu/java/awt/image/ImageDecoder.java \
classpath/gnu/java/awt/image/XBMDecoder.java
@@ -702,6 +769,30 @@ gnu/java/awt/image.list: $(gnu_java_awt_image_source_files)
-include gnu/java/awt/image.deps
+gnu_java_awt_java2d_source_files = \
+classpath/gnu/java/awt/java2d/AbstractGraphics2D.java \
+classpath/gnu/java/awt/java2d/AlphaCompositeContext.java \
+classpath/gnu/java/awt/java2d/CubicSegment.java \
+classpath/gnu/java/awt/java2d/LineSegment.java \
+classpath/gnu/java/awt/java2d/PolyEdge.java \
+classpath/gnu/java/awt/java2d/PolyEdgeComparator.java \
+classpath/gnu/java/awt/java2d/QuadSegment.java \
+classpath/gnu/java/awt/java2d/RasterGraphics.java \
+classpath/gnu/java/awt/java2d/Segment.java
+
+gnu_java_awt_java2d_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_awt_java2d_source_files)))
+
+gnu/java/awt/java2d.list: $(gnu_java_awt_java2d_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_awt_java2d_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/awt/java2d.list
+
+-include gnu/java/awt/java2d.deps
+
+
gnu_java_awt_peer_source_files = \
classpath/gnu/java/awt/peer/ClasspathFontPeer.java \
classpath/gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
@@ -745,10 +836,10 @@ classpath/gnu/java/awt/peer/gtk/GtkClipboard.java \
classpath/gnu/java/awt/peer/gtk/GtkClipboardNotifier.java \
classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkContainerPeer.java \
+classpath/gnu/java/awt/peer/gtk/GtkCursor.java \
classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java \
-classpath/gnu/java/awt/peer/gtk/GtkFontPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java \
classpath/gnu/java/awt/peer/gtk/GtkGenericPeer.java \
classpath/gnu/java/awt/peer/gtk/GtkImage.java \
@@ -960,7 +1051,9 @@ gnu_java_lang_source_files = \
classpath/gnu/java/lang/ArrayHelper.java \
classpath/gnu/java/lang/CharData.java \
classpath/gnu/java/lang/ClassHelper.java \
-gnu/java/lang/MainThread.java
+classpath/gnu/java/lang/InstrumentationImpl.java \
+gnu/java/lang/MainThread.java \
+gnu/java/lang/VMInstrumentationImpl.java
gnu_java_lang_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_source_files)))
@@ -976,6 +1069,11 @@ gnu/java/lang.list: $(gnu_java_lang_source_files)
gnu_java_lang_reflect_source_files = \
+classpath/gnu/java/lang/reflect/ClassSignatureParser.java \
+classpath/gnu/java/lang/reflect/FieldSignatureParser.java \
+classpath/gnu/java/lang/reflect/GenericSignatureParser.java \
+classpath/gnu/java/lang/reflect/MethodSignatureParser.java \
+classpath/gnu/java/lang/reflect/TypeImpl.java \
classpath/gnu/java/lang/reflect/TypeSignature.java
gnu_java_lang_reflect_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_lang_reflect_source_files)))
@@ -996,6 +1094,7 @@ gnu/java/locale/Calendar.java \
gnu/java/locale/Calendar_de.java \
gnu/java/locale/Calendar_en.java \
gnu/java/locale/Calendar_nl.java \
+classpath/gnu/java/locale/LocaleData.java \
classpath/gnu/java/locale/LocaleHelper.java \
gnu/java/locale/LocaleInformation.java \
gnu/java/locale/LocaleInformation_af_ZA.java \
@@ -1193,6 +1292,25 @@ gnu/java/net.list: $(gnu_java_net_source_files)
-include gnu/java/net.deps
+gnu_java_net_local_source_files = \
+classpath/gnu/java/net/local/LocalServerSocket.java \
+classpath/gnu/java/net/local/LocalSocket.java \
+classpath/gnu/java/net/local/LocalSocketAddress.java \
+gnu/java/net/local/LocalSocketImpl.java
+
+gnu_java_net_local_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_net_local_source_files)))
+
+gnu/java/net/local.list: $(gnu_java_net_local_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_net_local_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/net/local.list
+
+-include gnu/java/net/local.deps
+
+
gnu_java_net_protocol_file_source_files = \
classpath/gnu/java/net/protocol/file/Connection.java \
classpath/gnu/java/net/protocol/file/Handler.java
@@ -1310,6 +1428,7 @@ gnu_java_nio_source_files = \
classpath/gnu/java/nio/ChannelInputStream.java \
classpath/gnu/java/nio/ChannelOutputStream.java \
classpath/gnu/java/nio/ChannelReader.java \
+classpath/gnu/java/nio/ChannelWriter.java \
gnu/java/nio/DatagramChannelImpl.java \
gnu/java/nio/DatagramChannelSelectionKey.java \
classpath/gnu/java/nio/FileLockImpl.java \
@@ -1460,10 +1579,30 @@ gnu/java/rmi.list: $(gnu_java_rmi_source_files)
-include gnu/java/rmi.deps
+gnu_java_rmi_activation_source_files = \
+classpath/gnu/java/rmi/activation/ActivationSystemTransient.java \
+classpath/gnu/java/rmi/activation/BidiTable.java \
+classpath/gnu/java/rmi/activation/DefaultActivationGroup.java \
+classpath/gnu/java/rmi/activation/DefaultActivationSystem.java
+
+gnu_java_rmi_activation_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_activation_source_files)))
+
+gnu/java/rmi/activation.list: $(gnu_java_rmi_activation_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_rmi_activation_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/rmi/activation.list
+
+-include gnu/java/rmi/activation.deps
+
+
gnu_java_rmi_dgc_source_files = \
classpath/gnu/java/rmi/dgc/DGCImpl.java \
classpath/gnu/java/rmi/dgc/DGCImpl_Skel.java \
-classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java
+classpath/gnu/java/rmi/dgc/DGCImpl_Stub.java \
+classpath/gnu/java/rmi/dgc/LeaseRenewingTask.java
gnu_java_rmi_dgc_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_rmi_dgc_source_files)))
@@ -1497,6 +1636,8 @@ gnu/java/rmi/registry.list: $(gnu_java_rmi_registry_source_files)
gnu_java_rmi_server_source_files = \
+classpath/gnu/java/rmi/server/ActivatableRef.java \
+classpath/gnu/java/rmi/server/ActivatableServerRef.java \
classpath/gnu/java/rmi/server/CombinedClassLoader.java \
classpath/gnu/java/rmi/server/ConnectionRunnerPool.java \
classpath/gnu/java/rmi/server/ProtocolConstants.java \
@@ -1790,6 +1931,7 @@ gnu/java/security/key/rsa.list: $(gnu_java_security_key_rsa_source_files)
gnu_java_security_pkcs_source_files = \
+classpath/gnu/java/security/pkcs/PKCS7Data.java \
classpath/gnu/java/security/pkcs/PKCS7SignedData.java \
classpath/gnu/java/security/pkcs/SignerInfo.java
@@ -1831,7 +1973,6 @@ gnu/java/security/prng.list: $(gnu_java_security_prng_source_files)
gnu_java_security_provider_source_files = \
classpath/gnu/java/security/provider/CollectionCertStoreImpl.java \
-classpath/gnu/java/security/provider/DSAParameterGenerator.java \
classpath/gnu/java/security/provider/DefaultPolicy.java \
classpath/gnu/java/security/provider/Gnu.java \
classpath/gnu/java/security/provider/PKIXCertPathValidatorImpl.java \
@@ -2035,6 +2176,22 @@ gnu/java/util.list: $(gnu_java_util_source_files)
-include gnu/java/util.deps
+gnu_java_util_jar_source_files = \
+classpath/gnu/java/util/jar/JarUtils.java
+
+gnu_java_util_jar_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_jar_source_files)))
+
+gnu/java/util/jar.list: $(gnu_java_util_jar_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_java_util_jar_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/java/util/jar.list
+
+-include gnu/java/util/jar.deps
+
+
gnu_java_util_prefs_source_files = \
classpath/gnu/java/util/prefs/EventDispatcher.java \
classpath/gnu/java/util/prefs/FileBasedFactory.java \
@@ -2693,10 +2850,13 @@ gnu/javax/crypto/sasl/srp.list: $(gnu_javax_crypto_sasl_srp_source_files)
gnu_javax_imageio_bmp_source_files = \
classpath/gnu/javax/imageio/bmp/BMPDecoder.java \
+classpath/gnu/javax/imageio/bmp/BMPEncoder.java \
classpath/gnu/javax/imageio/bmp/BMPException.java \
classpath/gnu/javax/imageio/bmp/BMPFileHeader.java \
classpath/gnu/javax/imageio/bmp/BMPImageReader.java \
classpath/gnu/javax/imageio/bmp/BMPImageReaderSpi.java \
+classpath/gnu/javax/imageio/bmp/BMPImageWriter.java \
+classpath/gnu/javax/imageio/bmp/BMPImageWriterSpi.java \
classpath/gnu/javax/imageio/bmp/BMPInfoHeader.java \
classpath/gnu/javax/imageio/bmp/DecodeBF16.java \
classpath/gnu/javax/imageio/bmp/DecodeBF32.java \
@@ -2705,7 +2865,15 @@ classpath/gnu/javax/imageio/bmp/DecodeRGB24.java \
classpath/gnu/javax/imageio/bmp/DecodeRGB4.java \
classpath/gnu/javax/imageio/bmp/DecodeRGB8.java \
classpath/gnu/javax/imageio/bmp/DecodeRLE4.java \
-classpath/gnu/javax/imageio/bmp/DecodeRLE8.java
+classpath/gnu/javax/imageio/bmp/DecodeRLE8.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB1.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB16.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB24.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB32.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB4.java \
+classpath/gnu/javax/imageio/bmp/EncodeRGB8.java \
+classpath/gnu/javax/imageio/bmp/EncodeRLE4.java \
+classpath/gnu/javax/imageio/bmp/EncodeRLE8.java
gnu_javax_imageio_bmp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_imageio_bmp_source_files)))
@@ -2818,6 +2986,189 @@ gnu/javax/net/ssl/provider.list: $(gnu_javax_net_ssl_provider_source_files)
-include gnu/javax/net/ssl/provider.deps
+gnu_javax_print_source_files = \
+classpath/gnu/javax/print/CupsIppOperation.java \
+classpath/gnu/javax/print/CupsMediaMapping.java \
+classpath/gnu/javax/print/CupsPrintService.java \
+classpath/gnu/javax/print/CupsPrintServiceLookup.java \
+classpath/gnu/javax/print/CupsServer.java \
+classpath/gnu/javax/print/PrintAttributeException.java \
+classpath/gnu/javax/print/PrintFlavorException.java \
+classpath/gnu/javax/print/PrintUriException.java \
+classpath/gnu/javax/print/PrinterDialog.java
+
+gnu_javax_print_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_source_files)))
+
+gnu/javax/print.list: $(gnu_javax_print_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print.list
+
+-include gnu/javax/print.deps
+
+
+gnu_javax_print_ipp_source_files = \
+classpath/gnu/javax/print/ipp/DocPrintJobImpl.java \
+classpath/gnu/javax/print/ipp/IppDelimiterTag.java \
+classpath/gnu/javax/print/ipp/IppException.java \
+classpath/gnu/javax/print/ipp/IppMultiDocPrintService.java \
+classpath/gnu/javax/print/ipp/IppPrintService.java \
+classpath/gnu/javax/print/ipp/IppRequest.java \
+classpath/gnu/javax/print/ipp/IppResponse.java \
+classpath/gnu/javax/print/ipp/IppStatusCode.java \
+classpath/gnu/javax/print/ipp/IppUtilities.java \
+classpath/gnu/javax/print/ipp/IppValueTag.java \
+classpath/gnu/javax/print/ipp/MultiDocPrintJobImpl.java
+
+gnu_javax_print_ipp_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_source_files)))
+
+gnu/javax/print/ipp.list: $(gnu_javax_print_ipp_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp.list
+
+-include gnu/javax/print/ipp.deps
+
+
+gnu_javax_print_ipp_attribute_source_files = \
+classpath/gnu/javax/print/ipp/attribute/CharsetSyntax.java \
+classpath/gnu/javax/print/ipp/attribute/DefaultValueAttribute.java \
+classpath/gnu/javax/print/ipp/attribute/DetailedStatusMessage.java \
+classpath/gnu/javax/print/ipp/attribute/DocumentAccessError.java \
+classpath/gnu/javax/print/ipp/attribute/NaturalLanguageSyntax.java \
+classpath/gnu/javax/print/ipp/attribute/RequestedAttributes.java \
+classpath/gnu/javax/print/ipp/attribute/StatusMessage.java \
+classpath/gnu/javax/print/ipp/attribute/UnknownAttribute.java
+
+gnu_javax_print_ipp_attribute_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_source_files)))
+
+gnu/javax/print/ipp/attribute.list: $(gnu_javax_print_ipp_attribute_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute.list
+
+-include gnu/javax/print/ipp/attribute.deps
+
+
+gnu_javax_print_ipp_attribute_defaults_source_files = \
+classpath/gnu/javax/print/ipp/attribute/defaults/CopiesDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/DocumentFormatDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/FinishingsDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobHoldUntilDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobPriorityDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/JobSheetsDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/MediaDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/MultipleDocumentHandlingDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/NumberUpDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/OrientationRequestedDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/PrintQualityDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/PrinterResolutionDefault.java \
+classpath/gnu/javax/print/ipp/attribute/defaults/SidesDefault.java
+
+gnu_javax_print_ipp_attribute_defaults_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_defaults_source_files)))
+
+gnu/javax/print/ipp/attribute/defaults.list: $(gnu_javax_print_ipp_attribute_defaults_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_defaults_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/defaults.list
+
+-include gnu/javax/print/ipp/attribute/defaults.deps
+
+
+gnu_javax_print_ipp_attribute_job_source_files = \
+classpath/gnu/javax/print/ipp/attribute/job/AttributesCharset.java \
+classpath/gnu/javax/print/ipp/attribute/job/AttributesNaturalLanguage.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobDetailedStatusMessages.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobDocumentAccessErrors.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobId.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobMoreInfo.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobPrinterUri.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobStateMessage.java \
+classpath/gnu/javax/print/ipp/attribute/job/JobUri.java
+
+gnu_javax_print_ipp_attribute_job_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_job_source_files)))
+
+gnu/javax/print/ipp/attribute/job.list: $(gnu_javax_print_ipp_attribute_job_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_job_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/job.list
+
+-include gnu/javax/print/ipp/attribute/job.deps
+
+
+gnu_javax_print_ipp_attribute_printer_source_files = \
+classpath/gnu/javax/print/ipp/attribute/printer/CharsetConfigured.java \
+classpath/gnu/javax/print/ipp/attribute/printer/DocumentFormat.java \
+classpath/gnu/javax/print/ipp/attribute/printer/MultipleOperationTimeOut.java \
+classpath/gnu/javax/print/ipp/attribute/printer/NaturalLanguageConfigured.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterCurrentTime.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterDriverInstaller.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterStateMessage.java \
+classpath/gnu/javax/print/ipp/attribute/printer/PrinterUpTime.java
+
+gnu_javax_print_ipp_attribute_printer_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_printer_source_files)))
+
+gnu/javax/print/ipp/attribute/printer.list: $(gnu_javax_print_ipp_attribute_printer_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_printer_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/printer.list
+
+-include gnu/javax/print/ipp/attribute/printer.deps
+
+
+gnu_javax_print_ipp_attribute_supported_source_files = \
+classpath/gnu/javax/print/ipp/attribute/supported/CharsetSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/CompressionSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/DocumentFormatSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/FinishingsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/GeneratedNaturalLanguageSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/IppVersionsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/JobHoldUntilSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/JobSheetsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MediaSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentHandlingSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/MultipleDocumentJobsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/OperationsSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/OrientationRequestedSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PageRangesSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrintQualitySupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrinterResolutionSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/PrinterUriSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/SidesSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/UriAuthenticationSupported.java \
+classpath/gnu/javax/print/ipp/attribute/supported/UriSecuritySupported.java
+
+gnu_javax_print_ipp_attribute_supported_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_print_ipp_attribute_supported_source_files)))
+
+gnu/javax/print/ipp/attribute/supported.list: $(gnu_javax_print_ipp_attribute_supported_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_print_ipp_attribute_supported_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/print/ipp/attribute/supported.list
+
+-include gnu/javax/print/ipp/attribute/supported.deps
+
+
gnu_javax_rmi_source_files = \
classpath/gnu/javax/rmi/CORBA/CorbaInput.java \
classpath/gnu/javax/rmi/CORBA/CorbaOutput.java \
@@ -2905,6 +3256,38 @@ gnu-javax-sound-midi.lo: $(gnu_javax_sound_midi_source_files)
$(LTGCJCOMPILE) -fjni -findirect-dispatch -fno-indirect-classes -c -o gnu-javax-sound-midi.lo @gnu-javax-sound-midi.list
@rm -f gnu-javax-sound-midi.list
+gnu_javax_swing_plaf_gnu_source_files = \
+classpath/gnu/javax/swing/plaf/gnu/GNULookAndFeel.java
+
+gnu_javax_swing_plaf_gnu_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_plaf_gnu_source_files)))
+
+gnu/javax/swing/plaf/gnu.list: $(gnu_javax_swing_plaf_gnu_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_plaf_gnu_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/plaf/gnu.list
+
+-include gnu/javax/swing/plaf/gnu.deps
+
+
+gnu_javax_swing_plaf_metal_source_files = \
+classpath/gnu/javax/swing/plaf/metal/CustomizableTheme.java
+
+gnu_javax_swing_plaf_metal_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_plaf_metal_source_files)))
+
+gnu/javax/swing/plaf/metal.list: $(gnu_javax_swing_plaf_metal_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_plaf_metal_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/plaf/metal.list
+
+-include gnu/javax/swing/plaf/metal.deps
+
+
gnu_javax_swing_text_html_parser_source_files = \
classpath/gnu/javax/swing/text/html/parser/HTML_401F.java \
classpath/gnu/javax/swing/text/html/parser/gnuDTD.java \
@@ -2988,9 +3371,27 @@ gnu/javax/swing/text/html/parser/support/low.list: $(gnu_javax_swing_text_html_p
-include gnu/javax/swing/text/html/parser/support/low.deps
+gnu_javax_swing_tree_source_files = \
+classpath/gnu/javax/swing/tree/GnuPath.java
+
+gnu_javax_swing_tree_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_javax_swing_tree_source_files)))
+
+gnu/javax/swing/tree.list: $(gnu_javax_swing_tree_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(gnu_javax_swing_tree_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > gnu/javax/swing/tree.list
+
+-include gnu/javax/swing/tree.deps
+
+
gnu_regexp_source_files = \
+classpath/gnu/regexp/BacktrackStack.java \
classpath/gnu/regexp/CharIndexed.java \
classpath/gnu/regexp/CharIndexedCharArray.java \
+classpath/gnu/regexp/CharIndexedCharSequence.java \
classpath/gnu/regexp/CharIndexedInputStream.java \
classpath/gnu/regexp/CharIndexedString.java \
classpath/gnu/regexp/CharIndexedStringBuffer.java \
@@ -3005,6 +3406,7 @@ classpath/gnu/regexp/RETokenAny.java \
classpath/gnu/regexp/RETokenBackRef.java \
classpath/gnu/regexp/RETokenChar.java \
classpath/gnu/regexp/RETokenEnd.java \
+classpath/gnu/regexp/RETokenEndOfPreviousMatch.java \
classpath/gnu/regexp/RETokenEndSub.java \
classpath/gnu/regexp/RETokenIndependent.java \
classpath/gnu/regexp/RETokenLookAhead.java \
@@ -3085,6 +3487,7 @@ classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java \
classpath/gnu/xml/dom/html2/DomHTMLDivElement.java \
classpath/gnu/xml/dom/html2/DomHTMLDocument.java \
classpath/gnu/xml/dom/html2/DomHTMLElement.java \
+classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFontElement.java \
classpath/gnu/xml/dom/html2/DomHTMLFormElement.java \
@@ -4208,6 +4611,7 @@ classpath/java/lang/Comparable.java \
classpath/java/lang/Compiler.java \
java/lang/ConcreteProcess.java \
classpath/java/lang/Double.java \
+classpath/java/lang/Enum.java \
classpath/java/lang/EnumConstantNotPresentException.java \
classpath/java/lang/Error.java \
classpath/java/lang/Exception.java \
@@ -4227,6 +4631,7 @@ classpath/java/lang/InstantiationException.java \
classpath/java/lang/Integer.java \
classpath/java/lang/InternalError.java \
classpath/java/lang/InterruptedException.java \
+classpath/java/lang/Iterable.java \
classpath/java/lang/LinkageError.java \
classpath/java/lang/Long.java \
java/lang/Math.java \
@@ -4292,6 +4697,7 @@ java/lang.list: $(java_lang_source_files)
java_lang_annotation_source_files = \
+classpath/java/lang/annotation/Annotation.java \
classpath/java/lang/annotation/AnnotationFormatError.java \
classpath/java/lang/annotation/AnnotationTypeMismatchException.java
@@ -4308,6 +4714,26 @@ java/lang/annotation.list: $(java_lang_annotation_source_files)
-include java/lang/annotation.deps
+java_lang_instrument_source_files = \
+classpath/java/lang/instrument/ClassDefinition.java \
+classpath/java/lang/instrument/ClassFileTransformer.java \
+classpath/java/lang/instrument/IllegalClassFormatException.java \
+classpath/java/lang/instrument/Instrumentation.java \
+classpath/java/lang/instrument/UnmodifiableClassException.java
+
+java_lang_instrument_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_lang_instrument_source_files)))
+
+java/lang/instrument.list: $(java_lang_instrument_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(java_lang_instrument_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > java/lang/instrument.list
+
+-include java/lang/instrument.deps
+
+
java_lang_ref_source_files = \
classpath/java/lang/ref/PhantomReference.java \
java/lang/ref/Reference.java \
@@ -4330,13 +4756,16 @@ java/lang/ref.list: $(java_lang_ref_source_files)
java_lang_reflect_source_files = \
classpath/java/lang/reflect/AccessibleObject.java \
+classpath/java/lang/reflect/AnnotatedElement.java \
java/lang/reflect/Array.java \
java/lang/reflect/Constructor.java \
java/lang/reflect/Field.java \
classpath/java/lang/reflect/GenericArrayType.java \
+classpath/java/lang/reflect/GenericDeclaration.java \
classpath/java/lang/reflect/GenericSignatureFormatError.java \
classpath/java/lang/reflect/InvocationHandler.java \
classpath/java/lang/reflect/InvocationTargetException.java \
+classpath/java/lang/reflect/MalformedParameterizedTypeException.java \
classpath/java/lang/reflect/Member.java \
java/lang/reflect/Method.java \
java/lang/reflect/Modifier.java \
@@ -4344,6 +4773,7 @@ classpath/java/lang/reflect/ParameterizedType.java \
classpath/java/lang/reflect/Proxy.java \
classpath/java/lang/reflect/ReflectPermission.java \
classpath/java/lang/reflect/Type.java \
+classpath/java/lang/reflect/TypeVariable.java \
classpath/java/lang/reflect/UndeclaredThrowableException.java \
java/lang/reflect/VMProxy.java \
classpath/java/lang/reflect/WildcardType.java
@@ -4808,7 +5238,8 @@ classpath/java/security/SignatureSpi.java \
classpath/java/security/SignedObject.java \
classpath/java/security/Signer.java \
classpath/java/security/UnrecoverableKeyException.java \
-classpath/java/security/UnresolvedPermission.java
+classpath/java/security/UnresolvedPermission.java \
+java/security/VMSecureRandom.java
java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_source_files)))
@@ -5079,7 +5510,6 @@ classpath/java/util/List.java \
classpath/java/util/ListIterator.java \
classpath/java/util/ListResourceBundle.java \
java/util/Locale.java \
-classpath/java/util/LocaleData.java \
classpath/java/util/Map.java \
classpath/java/util/MissingResourceException.java \
classpath/java/util/NoSuchElementException.java \
@@ -5151,7 +5581,7 @@ classpath/java/util/logging/Filter.java \
classpath/java/util/logging/Formatter.java \
classpath/java/util/logging/Handler.java \
classpath/java/util/logging/Level.java \
-classpath/java/util/logging/LogManager.java \
+java/util/logging/LogManager.java \
classpath/java/util/logging/LogRecord.java \
java/util/logging/Logger.java \
classpath/java/util/logging/LoggingPermission.java \
@@ -5253,12 +5683,14 @@ java/util/zip.list: $(java_util_zip_source_files)
javax_accessibility_source_files = \
classpath/javax/accessibility/Accessible.java \
classpath/javax/accessibility/AccessibleAction.java \
+classpath/javax/accessibility/AccessibleAttributeSequence.java \
classpath/javax/accessibility/AccessibleBundle.java \
classpath/javax/accessibility/AccessibleComponent.java \
classpath/javax/accessibility/AccessibleContext.java \
classpath/javax/accessibility/AccessibleEditableText.java \
classpath/javax/accessibility/AccessibleExtendedComponent.java \
classpath/javax/accessibility/AccessibleExtendedTable.java \
+classpath/javax/accessibility/AccessibleExtendedText.java \
classpath/javax/accessibility/AccessibleHyperlink.java \
classpath/javax/accessibility/AccessibleHypertext.java \
classpath/javax/accessibility/AccessibleIcon.java \
@@ -5270,9 +5702,11 @@ classpath/javax/accessibility/AccessibleRole.java \
classpath/javax/accessibility/AccessibleSelection.java \
classpath/javax/accessibility/AccessibleState.java \
classpath/javax/accessibility/AccessibleStateSet.java \
+classpath/javax/accessibility/AccessibleStreamable.java \
classpath/javax/accessibility/AccessibleTable.java \
classpath/javax/accessibility/AccessibleTableModelChange.java \
classpath/javax/accessibility/AccessibleText.java \
+classpath/javax/accessibility/AccessibleTextSequence.java \
classpath/javax/accessibility/AccessibleValue.java
javax_accessibility_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_accessibility_source_files)))
@@ -5397,6 +5831,10 @@ classpath/javax/imageio/metadata/IIOMetadataFormat.java \
classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java \
classpath/javax/imageio/metadata/IIOMetadataNode.java \
classpath/javax/imageio/plugins/bmp/BMPImageWriteParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGHuffmanTable.java \
+classpath/javax/imageio/plugins/jpeg/JPEGImageReadParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGImageWriteParam.java \
+classpath/javax/imageio/plugins/jpeg/JPEGQTable.java \
classpath/javax/imageio/spi/IIORegistry.java \
classpath/javax/imageio/spi/IIOServiceProvider.java \
classpath/javax/imageio/spi/ImageInputStreamSpi.java \
@@ -5560,6 +5998,8 @@ classpath/javax/naming/ldap/HasControls.java \
classpath/javax/naming/ldap/InitialLdapContext.java \
classpath/javax/naming/ldap/LdapContext.java \
classpath/javax/naming/ldap/LdapReferralException.java \
+classpath/javax/naming/ldap/StartTlsRequest.java \
+classpath/javax/naming/ldap/StartTlsResponse.java \
classpath/javax/naming/ldap/UnsolicitedNotification.java \
classpath/javax/naming/ldap/UnsolicitedNotificationEvent.java \
classpath/javax/naming/ldap/UnsolicitedNotificationListener.java
@@ -5680,6 +6120,7 @@ classpath/javax/print/MultiDocPrintService.java \
classpath/javax/print/PrintException.java \
classpath/javax/print/PrintService.java \
classpath/javax/print/PrintServiceLookup.java \
+classpath/javax/print/ServiceUI.java \
classpath/javax/print/ServiceUIFactory.java \
classpath/javax/print/SimpleDoc.java \
classpath/javax/print/StreamPrintService.java \
@@ -5913,6 +6354,27 @@ javax/security/auth/callback.list: $(javax_security_auth_callback_source_files)
-include javax/security/auth/callback.deps
+javax_security_auth_kerberos_source_files = \
+classpath/javax/security/auth/kerberos/DelegationPermission.java \
+classpath/javax/security/auth/kerberos/KerberosKey.java \
+classpath/javax/security/auth/kerberos/KerberosPrincipal.java \
+classpath/javax/security/auth/kerberos/KerberosTicket.java \
+classpath/javax/security/auth/kerberos/KeyImpl.java \
+classpath/javax/security/auth/kerberos/ServicePermission.java
+
+javax_security_auth_kerberos_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(javax_security_auth_kerberos_source_files)))
+
+javax/security/auth/kerberos.list: $(javax_security_auth_kerberos_source_files)
+ @$(mkinstalldirs) $(dir $@)
+ @for file in $(javax_security_auth_kerberos_source_files); do \
+ if test -f $(srcdir)/$$file; then \
+ echo $(srcdir)/$$file; \
+ else echo $$file; fi; \
+ done > javax/security/auth/kerberos.list
+
+-include javax/security/auth/kerberos.deps
+
+
javax_security_auth_login_source_files = \
classpath/javax/security/auth/login/AccountException.java \
classpath/javax/security/auth/login/AccountExpiredException.java \
@@ -6183,6 +6645,7 @@ classpath/javax/swing/CellEditor.java \
classpath/javax/swing/CellRendererPane.java \
classpath/javax/swing/ComboBoxEditor.java \
classpath/javax/swing/ComboBoxModel.java \
+classpath/javax/swing/CompatibilityFocusTraversalPolicy.java \
classpath/javax/swing/ComponentInputMap.java \
classpath/javax/swing/DebugGraphics.java \
classpath/javax/swing/DefaultBoundedRangeModel.java \
@@ -6794,6 +7257,7 @@ classpath/javax/swing/text/html/HTMLEditorKit.java \
classpath/javax/swing/text/html/HTMLFrameHyperlinkEvent.java \
classpath/javax/swing/text/html/HTMLTableView.java \
classpath/javax/swing/text/html/InlineView.java \
+classpath/javax/swing/text/html/ListView.java \
classpath/javax/swing/text/html/NullView.java \
classpath/javax/swing/text/html/ObjectView.java \
classpath/javax/swing/text/html/Option.java \
@@ -7035,6 +7499,7 @@ classpath/javax/xml/transform/stream/StreamResult.java \
classpath/javax/xml/transform/stream/StreamSource.java \
classpath/javax/xml/validation/Schema.java \
classpath/javax/xml/validation/SchemaFactory.java \
+classpath/javax/xml/validation/SchemaFactoryLoader.java \
classpath/javax/xml/validation/TypeInfoProvider.java \
classpath/javax/xml/validation/Validator.java \
classpath/javax/xml/validation/ValidatorHandler.java \
@@ -7509,7 +7974,6 @@ classpath/org/omg/PortableInterceptor/ObjectIdHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactory.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.java \
-classpath/org/omg/PortableInterceptor/ObjectReferenceFactoryOperations.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplate.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.java \
classpath/org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.java \
@@ -7853,7 +8317,11 @@ all_packages_source_files = \
gnu/gcj/util.list \
gnu/java/awt.list \
gnu/java/awt/color.list \
+ gnu/java/awt/font.list \
+ gnu/java/awt/font/opentype.list \
+ gnu/java/awt/font/opentype/truetype.list \
gnu/java/awt/image.list \
+ gnu/java/awt/java2d.list \
gnu/java/awt/peer.list \
gnu/java/io.list \
gnu/java/lang.list \
@@ -7861,6 +8329,7 @@ all_packages_source_files = \
gnu/java/locale.list \
gnu/java/math.list \
gnu/java/net.list \
+ gnu/java/net/local.list \
gnu/java/net/protocol/file.list \
gnu/java/net/protocol/ftp.list \
gnu/java/net/protocol/http.list \
@@ -7870,6 +8339,7 @@ all_packages_source_files = \
gnu/java/nio/channels.list \
gnu/java/nio/charset.list \
gnu/java/rmi.list \
+ gnu/java/rmi/activation.list \
gnu/java/rmi/dgc.list \
gnu/java/rmi/registry.list \
gnu/java/rmi/server.list \
@@ -7895,6 +8365,7 @@ all_packages_source_files = \
gnu/java/security/x509/ext.list \
gnu/java/text.list \
gnu/java/util.list \
+ gnu/java/util/jar.list \
gnu/java/util/prefs.list \
gnu/javax/crypto.list \
gnu/javax/crypto/assembly.list \
@@ -7924,13 +8395,23 @@ all_packages_source_files = \
gnu/javax/imageio/bmp.list \
gnu/javax/net/ssl.list \
gnu/javax/net/ssl/provider.list \
+ gnu/javax/print.list \
+ gnu/javax/print/ipp.list \
+ gnu/javax/print/ipp/attribute.list \
+ gnu/javax/print/ipp/attribute/defaults.list \
+ gnu/javax/print/ipp/attribute/job.list \
+ gnu/javax/print/ipp/attribute/printer.list \
+ gnu/javax/print/ipp/attribute/supported.list \
gnu/javax/security/auth.list \
gnu/javax/security/auth/callback.list \
gnu/javax/security/auth/login.list \
+ gnu/javax/swing/plaf/gnu.list \
+ gnu/javax/swing/plaf/metal.list \
gnu/javax/swing/text/html/parser.list \
gnu/javax/swing/text/html/parser/models.list \
gnu/javax/swing/text/html/parser/support.list \
gnu/javax/swing/text/html/parser/support/low.list \
+ gnu/javax/swing/tree.list \
gnu/regexp.list \
java/applet.list \
java/awt.list \
@@ -7952,6 +8433,7 @@ all_packages_source_files = \
java/io.list \
java/lang.list \
java/lang/annotation.list \
+ java/lang/instrument.list \
java/lang/ref.list \
java/lang/reflect.list \
java/math.list \
@@ -7997,6 +8479,7 @@ all_packages_source_files = \
javax/print/event.list \
javax/security/auth.list \
javax/security/auth/callback.list \
+ javax/security/auth/kerberos.list \
javax/security/auth/login.list \
javax/security/auth/spi.list \
javax/security/auth/x500.list \
@@ -8048,7 +8531,11 @@ ordinary_header_files = \
$(gnu_gcj_util_header_files) \
$(gnu_java_awt_header_files) \
$(gnu_java_awt_color_header_files) \
+ $(gnu_java_awt_font_header_files) \
+ $(gnu_java_awt_font_opentype_header_files) \
+ $(gnu_java_awt_font_opentype_truetype_header_files) \
$(gnu_java_awt_image_header_files) \
+ $(gnu_java_awt_java2d_header_files) \
$(gnu_java_awt_peer_header_files) \
$(gnu_java_io_header_files) \
$(gnu_java_lang_header_files) \
@@ -8056,6 +8543,7 @@ ordinary_header_files = \
$(gnu_java_locale_header_files) \
$(gnu_java_math_header_files) \
$(gnu_java_net_header_files) \
+ $(gnu_java_net_local_header_files) \
$(gnu_java_net_protocol_file_header_files) \
$(gnu_java_net_protocol_ftp_header_files) \
$(gnu_java_net_protocol_http_header_files) \
@@ -8065,6 +8553,7 @@ ordinary_header_files = \
$(gnu_java_nio_channels_header_files) \
$(gnu_java_nio_charset_header_files) \
$(gnu_java_rmi_header_files) \
+ $(gnu_java_rmi_activation_header_files) \
$(gnu_java_rmi_dgc_header_files) \
$(gnu_java_rmi_registry_header_files) \
$(gnu_java_rmi_server_header_files) \
@@ -8090,6 +8579,7 @@ ordinary_header_files = \
$(gnu_java_security_x509_ext_header_files) \
$(gnu_java_text_header_files) \
$(gnu_java_util_header_files) \
+ $(gnu_java_util_jar_header_files) \
$(gnu_java_util_prefs_header_files) \
$(gnu_javax_crypto_header_files) \
$(gnu_javax_crypto_assembly_header_files) \
@@ -8119,13 +8609,23 @@ ordinary_header_files = \
$(gnu_javax_imageio_bmp_header_files) \
$(gnu_javax_net_ssl_header_files) \
$(gnu_javax_net_ssl_provider_header_files) \
+ $(gnu_javax_print_header_files) \
+ $(gnu_javax_print_ipp_header_files) \
+ $(gnu_javax_print_ipp_attribute_header_files) \
+ $(gnu_javax_print_ipp_attribute_defaults_header_files) \
+ $(gnu_javax_print_ipp_attribute_job_header_files) \
+ $(gnu_javax_print_ipp_attribute_printer_header_files) \
+ $(gnu_javax_print_ipp_attribute_supported_header_files) \
$(gnu_javax_security_auth_header_files) \
$(gnu_javax_security_auth_callback_header_files) \
$(gnu_javax_security_auth_login_header_files) \
+ $(gnu_javax_swing_plaf_gnu_header_files) \
+ $(gnu_javax_swing_plaf_metal_header_files) \
$(gnu_javax_swing_text_html_parser_header_files) \
$(gnu_javax_swing_text_html_parser_models_header_files) \
$(gnu_javax_swing_text_html_parser_support_header_files) \
$(gnu_javax_swing_text_html_parser_support_low_header_files) \
+ $(gnu_javax_swing_tree_header_files) \
$(gnu_regexp_header_files) \
$(java_applet_header_files) \
$(java_awt_header_files) \
@@ -8147,6 +8647,7 @@ ordinary_header_files = \
$(java_io_header_files) \
$(java_lang_header_files) \
$(java_lang_annotation_header_files) \
+ $(java_lang_instrument_header_files) \
$(java_lang_ref_header_files) \
$(java_lang_reflect_header_files) \
$(java_math_header_files) \
@@ -8192,6 +8693,7 @@ ordinary_header_files = \
$(javax_print_event_header_files) \
$(javax_security_auth_header_files) \
$(javax_security_auth_callback_header_files) \
+ $(javax_security_auth_kerberos_header_files) \
$(javax_security_auth_login_header_files) \
$(javax_security_auth_spi_header_files) \
$(javax_security_auth_x500_header_files) \
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index abca47f..92581b3 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -112,6 +112,7 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
+GREP = @GREP@
GTK_AWT_FALSE = @GTK_AWT_FALSE@
GTK_AWT_TRUE = @GTK_AWT_TRUE@
GTK_CAIRO_FALSE = @GTK_CAIRO_FALSE@
@@ -213,6 +214,7 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
+XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
@@ -221,14 +223,8 @@ ZINCS = @ZINCS@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_GCJ = @ac_ct_GCJ@
-ac_ct_LD = @ac_ct_LD@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -248,7 +244,10 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
+datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
+docdir = @docdir@
+dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -259,6 +258,7 @@ host_cpu = @host_cpu@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
+htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
@@ -266,13 +266,16 @@ libdir = @libdir@
libexecdir = @libexecdir@
libgcj_basedir = @libgcj_basedir@
libstdcxx_incdir = @libstdcxx_incdir@
+localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
+psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@